{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./wwwroot/calc/js/datelib.js","webpack:///./wwwroot/calc/calc_vkl/calc.js","webpack:///(webpack)/buildin/global.js","webpack:///./wwwroot/calc/components/summary_field/summary_field.js","webpack:///./wwwroot/lib/utils/api.js","webpack:///./wwwroot/css/site.scss","webpack:///./wwwroot/calc/components/periodic_date_field/styles.scss","webpack:///./wwwroot/calc/components/summary_field/styles.scss","webpack:///./wwwroot/calc/common/datetime_fields.js","webpack:///./wwwroot/calc/components/periodic_date_field/periodic_date_field.js","webpack:///./node_modules/whatwg-fetch/fetch.js","webpack:///./node_modules/isomorphic-fetch/fetch-npm-browserify.js","webpack:///./wwwroot/calc/common/calculator/utils.js","webpack:///./wwwroot/calc/common/basic_fields.js","webpack:///./wwwroot/calc/common/calculator/calc_complex.js","webpack:///./wwwroot/calc/common/calculator/calc_interface.js","webpack:///./wwwroot/calc/common/calculator/output_fields.js","webpack:///./wwwroot/calc/common/calculator/index.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","calendarRes","loadResource","DatePoint","stringOrDate","silent","_this$date","_classCallCheck","replace","straight","exec","this","date","Date","parseInt","inverse","Error","concat","setHours","_createClass","undefined","getDate","getFullYear","getMonth","toInt","toLocaleFormat","other","valid","day","month","year","result","copy","setFullYear","setMonth","setDate","otherPoint","dateFrom","dateTo","DateSpan","span","getDayCount","inc","count","getWorkingDayCount","isDayOff","includeEnd","arguments","length","Math","floor","getTheFirstOfJanuary","firstJan","ceil","getDay","amount","toLocaleDateString","tools","appLocale","params","addWeekDay","addYear","getDayName","monthIsolation","maxDate","getDaysInMonth","months","monthSum","addYears","newMonth","currentDay","setYear","setDateGently","indexOf","loading","predictIsDayOff","calendar","content","daysOff","v","_dateFrom","_dateTo","_typeof","_boundsSet","isEqualTo","_dayCount","_workingDayCount","set","iterDays","fromDays","fromWorkingDays","distanceTo","verboseCountingValue","subtractDayCount","fixedDayTo","addDays","goesBefore","monthes","days","residPoint","inDays","reason","callback","start","index","checkParams","keypoints","sort","a","b","point","endPoint","subtractionUsed","add","from","to","leftKey","rightKey","push","type","subtract","instanceIndex","instance","addPeriod","end","map","some","addWithSubtractions","keypoint","datePoint","daysWorking","makeDateSegmentWorker","segments","_segments","checkDay","includeOffDays","contains","countSegment","from_","to_","self","checkIntersection","dateFrom_","dateTo_","intersects","nextDateAfterWorkingDay","additionalHolidayFunc","checker","isWorkingDay","emptyFunc","makeDateFromAlertWorker","_ref","_ref$slideUpDuration","slideUpDuration","_ref$dateFromSelector","dateFromSelector","_ref$submitForm","submitForm","_ref$dateFromAlertSel","dateFromAlertSelector","_ref$alertAcceptSelec","alertAcceptSelector","_ref$isDynamicSubmit","isDynamicSubmit","_ref$minCheckDate","minCheckDate","_ref$maxCheckDate","maxCheckDate","_ref$crownPeriods","crownPeriods","_ref$isDayBeforeWeeke","isDayBeforeWeekend","_ref$isDayCrownHolida","isDayCrownHoliday","_ref$isWeekend","isWeekend","_ref$calculator","calculator","elem","$","alertAcceptElem","shown","config","tmp","frozen","prevDate","nextPrevDateFrom","nextDateFrom","prevDate_","nextDateFrom_","dec","freeze","forEach","x","data","on","e","target","tagName","close","classList","addClass","each","remove","parent","parentElement","find","slideUp","slideDown","updateVariant","newDate","oldDate","dateFromPoint","html","crownSegmWorker","sendStatisticMessage","isCrown","checkCrown","equalityCheck","hideCovidInfo","prevDatePoint","nextDateFromPoint","nextPrevDateFromPoint","show","hide","reset","getElem","getState","getFrozenDateFrom","isVisible","is","isAccepted","isAcceptedCrown","isClosed","isDayCrown","isDayOffCrown","render","check","previousDatePoint","currDate","previousDateBeforeWeekend","workingDateFromPoint","makeDateInFutureAlertWorker","_ref2","_ref2$slideUpDuration","_ref2$submitForm","_ref2$isDynamicSubmit","_ref2$dateToFutureAle","dateToFutureAlertSelector","_ref2$calculator","preventDefault","distinctDates","dates","toString","filter","distinct","holidayChecker","VklCalculator","_Calculator","_callSuper","_inherits","periodType","Day","Week","Month","Quarter","Year","patchFieldTypes","DateField","SummaryField","PeriodicDateField","setupStatistic","calcName","depositSumField","addInputField","options","maxVal","errors","selector","unsilence","fixedRateField","precision","dateTypeField","defaultGetValue","rateBySumField","dynamic","appendButtonSelector","removeSelector","keepOne","removeFirstEvent","$table","removeClass","removeAttr","$list","$sum","val","$input","afterRemoval","_submitOnChange","ignoreForEmpty","fields","sum","$clone","autoValidation","depositSum","parseLocaleFloat","errClassElem","rateBySum","rate","rateByTermField","dontSubmitOnRemove","$date","showErrorWay","ShowErrorWay","SHOW_FIRST","openDate","rateByTerm","localeCompare","withdrawalField","shadowRoot","summary","getSummaryErrors","depositField","ignore","setDynamicInputIgnore","addOutputField","groupPeriods","renderHeader","inner","isYear","isRate","getLocaleSum","hideColumns","renderDecreaseIncreaseRow","period","stringDate","deposit","getLocaleSumInRubbles","payment","comment","table","document","createElement","detalizationDiv","previousRate","periods","k","headerParams","daysInYear","rateType","formula","percent","innerHTML","append","outerHTML","$this","$notification","hasClass","text","loadDescription","submitOnClick","addResetButton","selectorOrElem","click","el","closeWindow","attr","_get","_getPrototypeOf","groupedDetalization","deepcopy","totalPercent","totalDeposit","isExcess","isClosure","isShiftDate","isExcludedFund","capitalizationEnabled","lastWithdrawal","previousSum","excludedFundMessage","excludedFunds","rateTypeValue","args","message","sender","$elem","$rateTypeInput","$rateTypeInputDiv","$periodicityInput","$isCapitalizationInputDiv","$withdrawalCheckbox","$withdrawalInnerDiv","$depositCheckbox","$depositInnerDiv","periodicity","isWithdrawal","isDeposit","prevOpenDate","proceedTwoErrors","$error1","$error2","$error3","$error4","css","slice","updateChangingRateFields","tableSelector","Input1DivSelector","Input2DivSelector","err1Selector","err2Selector","err3Selector","$firstInput","$secondInput","firstHasErr","secondHasErr","termDate","calculateTermDates","parse","dayNumber","monthNumber","yearNumber","dayOfDate","isNextDate","addMonths","multiplier","currentDate","getNextDate","secondDate","expectedSecondDate","firstDate","isOpenDate","dateType","termValue","termType","getNextPayDate","closeDate","expectedCloseDate","array","dataItem","repeat","summaryDate","onlyWorkdays","monthCount","dayOfMonth","wholePeriod","lastDate","nextDate","_loop","item","shift","equalItems","fullPayment","excluded","_this","getRateBySum","ratesBySum","getRateByTerm","ratesByTerm","payDates","finalRatesByTerm","withdrawals","handleFunds","withdrawal","w","defaultInputs","deposits","detalization","dtFrom","removeDatesBeforeOpenDate","addEndOfYearDates","dtTo","currentSum","intervalSum","closureDate","isCapitalization","fixDayMonthYear","fixedRate","roundNumber","getSpan","roundedCurrentSum","arr","termVerb","mainPeriodString","excludedFundsNoteHTML","excludedWithdrawalsHTML","excludedDepositsHTML","noteMessage","rateInfo","getLocaleNumber","minPrecision","maxPrecision","prop","verboseNumber","inputName","inputFields","f","Calculator","g","Function","window","injectionRemoval","escapeTags","removeExtraSpace","SummaryInput","_HTMLElement","allowedTypes","getAttribute","cssSalt","id","random","now","dropdowns","purpose","_defaultValue","mYFrom","mYTo","yearFrom","yearTo","dayDropdownValue","dMDropdownValue","dQDropdownValue","getDropdownFiller","selectedValue","filler","updateText","$elements","$nameText","_value","$moneyText","toLocaleString","minimumFractionDigits","$freshText","$purposeText","spanRepeat","$dMDateDropdown","$dayDateDropdown","monthsNames","dateFromText","dateToText","$repeatText","$repeatDiv","$onlyWorkdaysDiv","afterChangeInRepeat","$repetitionDropdown","$dMYDateDropdown","$period","$datesMY","$datesYear","calculateOutputValues","split","recieveValues","$nameInput","$sumInput","$purposeDropdown","$onlyWorkdaysCheckbox","$radioButtons","dMYDateDropdown","$datesMYFrom","$datesMYTo","$datesYearFrom","$datesYearTo","setValues","newValues","values","inputBreaker","stopPropagation","$windowDiv","off","closeWindowOutside","$closeButton","switchRadio","$summaryInput","trigger","$summary","has","unfocus","active","$shadowRoot","activeElement","originalEvent","composedPath","blur","openWindow","innerClosing","$plate","$plateText","$dateDiv","$datesContainer","lastDay","setDays","title","purposeDropdown","radioButtons","onlyWorkdaysCheckbox","windowDiv","errors2","plateText","plateDiv","stylesHtml","mainStyles","styles","attachShadow","createHtml","inputFilter","_wrapNativeSuper","HTMLElement","_BaseObjectField2","dateFromProp","dateToProp","$insideShadow","basicCheck","checkDate","summaryDatePointsCheck","checkFromTo","mainDate","fixedD","lastD","realD","includes","_BaseObjectField","customElements","define","__fetch","require","polyFetch","apply","buildApi","generator","sendRequest","_ref$host","host","method","path","_ref$headers","headers","body","json","_blob","url","search","URLSearchParams","then","res","ok","Promise","resolve","console","error","reject","props","_objectSpread","post","loaded","promise","resp","test","arrayBuffer","Array","_Field","change","keepValue","defaultValue","keepErrors","clearErrors","getClearValue","Field","DateIntervalField","_DateField","_this2","elemFrom","elemTo","nameVal","nameElem","raw","_getDateFrom","_getDateTo","pair","errorPeriodElem","errorFromElem","errorToElem","errorFromBound","errorToBound","errorFromBoundMax","errorToBoundMax","includeEndDate","include","_getDateFix","binaryMap","resetErrors","phase","processBoundElem","errorElem","hadError","filled","_this$options","_this$options2","hadFromError","hadToError","maxYearFrom","limitMax","maxYearTo","DateIntervalIgnoreEmptyField","_DateIntervalField","isFilled","baseDateIntervalCheck","leftDays","reduce","info","bullet","outside","equality","showError","className","toggleErrorHighlight","every","PeriodicSelect","kind","dropdown","selected","buttonDiv","radioName","option","$buttonText","$monthsDropdown","$daysDropdown","radioChange","dropdownChange","selectedIndex","radioValue","$periodic","$periodicSelect","toggleWindow","$buttonDiv","globalThis","global","support","Blob","viewClasses","isArrayBufferView","ArrayBuffer","isView","obj","normalizeName","String","TypeError","toLowerCase","normalizeValue","iteratorFor","items","iterator","next","done","Headers","isArray","header","getOwnPropertyNames","consumed","_noBody","bodyUsed","fileReaderReady","reader","onload","onerror","readBlobAsArrayBuffer","blob","FileReader","readAsArrayBuffer","bufferClone","buf","view","Uint8Array","byteLength","buffer","Body","_initBody","_bodyInit","_bodyText","isPrototypeOf","_bodyBlob","FormData","_bodyFormData","DataView","_bodyArrayBuffer","rejected","isConsumed","byteOffset","match","encoding","readAsText","chars","fromCharCode","join","readArrayBufferAsText","formData","decode","JSON","oldValue","thisArg","keys","entries","methods","Request","input","upcased","credentials","signal","toUpperCase","AbortController","referrer","cache","reParamSearch","getTime","form","trim","bytes","decodeURIComponent","Response","bodyInit","status","RangeError","statusText","clone","response","redirectStatuses","redirect","location","DOMException","err","stack","constructor","fetch","init","request","aborted","xhr","XMLHttpRequest","abortXhr","abort","rawHeaders","getAllResponseHeaders","substr","line","parts","warn","responseURL","responseText","setTimeout","ontimeout","onabort","open","href","fixUrl","withCredentials","responseType","names","setRequestHeader","addEventListener","onreadystatechange","readyState","removeEventListener","send","polyfill","SHOW_ALL","deleted","isDynamic","_ignore","getValue","keyup","params_","setValue","loud","handler","documentMode","clearValue","NumberField","_Field2","isFloat","disableProps","keyName","$field","closest","focusin","CountField","_NumberField","parseLocaleInt","setupNumberInput","YearField","_NumberField2","allowSpaces","maxLength","PeriodField","_NumberField3","FloatField","_NumberField4","MoneyField","_FloatField","SelectField","_Field3","itemText","RadioField","_Field4","checkedElem","CheckboxField","_Field5","control","checked","TextField","_Field6","_Field7","LinkField","selectedLink","event","CalculatorComplex","_CalculatorInterface","htmlNode","calc_","$node","scopeEvalFunc","underscore","script","parseNameType","paramString","splitPos","varName","parseFloat","checkClass","class_","autoKey","clickOptions","_clickOptions$options","submit","autoSubmit","toggleClasses","toArray","classesObj","toggle","inputs","_parseNameType","outputs","_parseNameType2","renderCode","checkHash","gentle","writePath","part","id_","clearPart","__id","fetchRootElem","findExternalOnly","$dataExpandableDiv","elements","createClone","$template","$lastRow","last","querySelector","cloneNode","_id","genUniqueId","blockPiece","removed","beforeRemoval","field","artifacts","getFieldsFlat","getElements","tree","fetchFields","_slicedToArray","fieldParams","disabledSubmitting","first","anchor","prepareTemplate","block","_params$prepareTempla","insertAdjacentElement","removePathId","$expandableDiv","keepTable","bp","delete","ignoredEmptyFields","setCount","_ref3","_ref3$removeStrategy","removeStrategy","currentCount","_dynamicFields","nameOrNames","fieldGroups","getFields","resList","__tmpIgnore","isPathInside","checkField","df","newOptions","_this3","irregularValueNames","acc","log","clearPath","_exportObject","ignoreList","accum","defaultFilled","enableResetButton","hasValueChanges","fieldsToParse","ignoreCouseEmpty","showReset","resetValuesOnIgnore","senderField","_toConsumableArray","errorIsVisible","getExportValue","afterFirstPhaseCheck","newValuesString","stringify","lastValuesString","group","processGroup","afterParse","forceRender","skipValueChangesCheck","isActive","notes","beforeSubmit","parsing","resetButtons","_statistic","startedSent","isReady","calculateForValidOnly","toggleCustomClasses","calcValid","calculate","beforeRender","_exportObjectFinal","generateExportObject","showResults","hideResults","renderError","afterSubmit","CalculatorInterface","debug","_fieldTypes","outputFields","forceOutputs","_inputFieldsTree","hash","newFieldTypes","string_or_object","hideOnDefault","srcPath","BaseOutputField","container","setup","paramName","renderFunc","compose","renderMethod","compose_","exportObject","RenderRequiredOutputField","_BaseOutputField","HtmlOutputField","_BaseOutputField2","_HtmlOutputField","LocaleNumOutputField","_BaseOutputField3","LocaleSumOutputField","_BaseOutputField4","MoneyRubleOutputField","_HtmlOutputField2","MoneyTextOutputField","_BaseOutputField5","MoneyRoundedRubleField","_HtmlOutputField3","getRoundedNumberInRubbles","MoneyRoundedRubleOutputField","_HtmlOutputField4","PeriodOutputField","_BaseOutputField6","duration","DateOutputField","_BaseOutputField7","DayOutputField","_BaseOutputField8","PercentOutputField","_HtmlOutputField5","NoteOutputField","_RenderRequiredOutput","convertElemToTextWithLinksForExport","ExportVisibleOutputField","_BaseOutputField9","htmlObject","ToggleOutputField","_RenderRequiredOutput2","slideUpTime","slideDownTime","ConditionalBlockOutputField","_RenderRequiredOutput3","alternativeBlockSelector","alternativeBlock","ShareOutputField","_HtmlOutputField6","MoneyLocalRoundedOutField","_HtmlOutputField7","getRoundedNumber","createOutputField","_CalculatorComplex","basicFields","showVersionBanner","ShowVersionBanner","setupVersionBanner","setupHandlers","autoAddFields","initialize","_console","_$","_$2","_$3","_$4","print","printMessage","ajax","ExportWordHost","processData","contentType","onloadstart","ev","success","textStatus","jQxhr","decodeURI","getResponseHeader","navigator","msSaveOrOpenBlob","link","download","URL","createObjectURL","exportMessage","history","pushState","pathname","getHash","RegExp","substring","feedbackBottom","load","code","DataVersionSalt","initSmartLink","setWarningMessage","IsAuthEnabled","mailSubject","prepend","isStartedEventIgnore","prefix","ym","ymId","ymReachGoal","resetInputFields","addDynamicField","ftype","_detectFieldType","_makeFieldObject","disableAutoCheck","onChange","preInit","ft","detect","fieldType","onReset","forced","orderedFields","priorities","renderExport","customClass"],"mappings":"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","file":"calc/calc_vkl/calc.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/dist/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 1171);\n","import {loadResource} from \"@lib/utils/api\";\r\nconst calendarRes = loadResource(\"/conf/calc/calendar.json\");\r\n\r\nconst MILLISECONDS_TO_DAYS_CONSTANT = 24 * 60 * 60 * 1000;\r\n\r\nclass DatePoint {\r\n /**\r\n * @param {any} stringOrDate string, Date, DatePoint or non-string falsy value for new Date() \r\n * @param {boolean} silent - disable printing errors in the console\r\n * string can be in straight (dd.mm.yyyy) or inverse (yyyy.mm.dd) format\r\n */\r\n constructor(stringOrDate, silent) {\r\n silent = silent || false;\r\n if (typeof (stringOrDate) === \"string\") {\r\n stringOrDate = stringOrDate.replace(/[^\\d.]/g, \"\");\r\n const straight = /^(\\d\\d)[.](\\d\\d)[.](\\d{4})$/.exec(stringOrDate);\r\n if (straight) {\r\n this.date = new Date(parseInt(straight[3], 10), parseInt(straight[2], 10) - 1, parseInt(straight[1]));\r\n } else {\r\n const inverse = /^(\\d{4})[.](\\d\\d)[.](\\d\\d)$/.exec(stringOrDate);\r\n if (inverse !== null) {\r\n this.date = new Date(parseInt(inverse[1], 10), parseInt(inverse[2], 10) - 1, parseInt(inverse[3]));\r\n } else {\r\n if (!silent)\r\n throw new Error(`Wrong format of date in string: ${stringOrDate}`);\r\n\r\n }\r\n }\r\n }\r\n else if (stringOrDate instanceof Date) {\r\n this.date = new Date(stringOrDate);\r\n }\r\n else if (stringOrDate instanceof DatePoint) {\r\n this.date = new Date(stringOrDate.date);\r\n }\r\n else if (!stringOrDate)\r\n this.date = new Date();\r\n else {\r\n if (!silent)\r\n throw new Error(\"Wrong argument type in DatePoint contructor.\");\r\n }\r\n\r\n this.date?.setHours(12,0,0,0);\r\n }\r\n\r\n get valid() {\r\n return !!(this.date !== undefined && this.date instanceof Date && this.date.getDate());\r\n }\r\n\r\n toInt() {\r\n return 384 * this.date.getFullYear() + 32 * this.date.getMonth() + this.date.getDate();\r\n }\r\n\r\n static fromInt(v) {\r\n const year = parseInt(v / 384);\r\n const month = parseInt((v % 384) / 32);\r\n const day = v % 32;\r\n return new DatePoint(`${day}.${month + 1}.${year}`);\r\n }\r\n\r\n valueOf() {\r\n return this.toInt();\r\n }\r\n\r\n toString() {\r\n return this.toLocaleFormat();\r\n }\r\n\r\n copy() {\r\n return new DatePoint(this.date);\r\n }\r\n\r\n isEqualTo(other) {\r\n if (!(other instanceof DatePoint)) {\r\n other = new DatePoint(other);\r\n }\r\n return (this.valid && other.valid && this.toInt() == other.toInt());\r\n }\r\n\r\n fixDayMonthYear(day, month, year) {\r\n const result = this.copy();\r\n if (year != null) {\r\n result.date.setFullYear(year);\r\n }\r\n if (month != null) {\r\n result.date.setMonth(month - 1);\r\n }\r\n if (day != null) {\r\n result.date.setDate(day);\r\n }\r\n return result;\r\n }\r\n\r\n getSpan(otherPoint) {\r\n var dateFrom = this.date <= otherPoint.date ? this : otherPoint;\r\n var dateTo = this.date <= otherPoint.date ? otherPoint : this;\r\n return new DateSpan(dateFrom, dateTo);\r\n }\r\n\r\n addSpan(span) {\r\n var result = this.copy();\r\n if (span.getDayCount() != undefined) {\r\n result.inc(span.getDayCount());\r\n } else {\r\n var count = span.getWorkingDayCount();\r\n var inc = (count > 0 ? 1 : -1);\r\n count *= inc;\r\n for (let i = 0; i < count; ++i) {\r\n result.inc(inc);\r\n while (result.isDayOff())\r\n result.inc(inc);\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n goesBefore(other) {\r\n if (!(other instanceof DatePoint)) {\r\n other = new DatePoint(other);\r\n }\r\n return this.date < other.date;\r\n }\r\n\r\n distanceTo(other, includeEnd = true) {\r\n const result = Math.floor((other.date - this.date) / MILLISECONDS_TO_DAYS_CONSTANT + 0.5);\r\n return includeEnd ? result + 1 : result;\r\n }\r\n\r\n getDayNumberOfYear() {\r\n return Math.floor((this.date - getTheFirstOfJanuary(this.date)) / MILLISECONDS_TO_DAYS_CONSTANT);\r\n }\r\n\r\n getWeekNumberOfYear() {\r\n const firstJan = getTheFirstOfJanuary(this.date);\r\n return Math.ceil((((this.date - firstJan) / MILLISECONDS_TO_DAYS_CONSTANT) + firstJan.getDay()) / 7);\r\n }\r\n\r\n addDays(amount) {\r\n var result = this.copy();\r\n result.date.setDate(this.date.getDate() + amount);\r\n return result;\r\n }\r\n\r\n inc(amount) {\r\n this.date.setDate(this.date.getDate() + (amount ?? 1));\r\n return this;\r\n }\r\n\r\n dec() { return this.inc(-1); }\r\n\r\n toLocaleFormat() {\r\n return this.date.toLocaleDateString(tools.appLocale); //dd.mm.yyyy\r\n }\r\n\r\n getDayName() {\r\n var days = [\"воскресенье\", \"понедельник\", \"вторник\", \"среда\", \"четверг\", \"пятница\", \"суббота\"];\r\n return days[this.date.getDay()];\r\n }\r\n\r\n toVerboseString(params) {\r\n params = params || {};\r\n params.addWeekDay = (params.addWeekDay === undefined ? true : params.addWeekDay);\r\n params.addYear = (params.addYear === undefined ? true : params.addYear);\r\n var monthNames = [\"января\", \"февраля\", \"марта\", \"апреля\", \"мая\", \"июня\", \"июля\", \"августа\", \"сентября\", \"октября\", \"ноября\", \"декабря\"];\r\n var result = \"\" + this.date.getDate() + \" \" + monthNames[this.date.getMonth()];\r\n if (params.addYear) {\r\n result += \" \" + this.date.getFullYear() + \" года\";\r\n }\r\n if (params.addWeekDay) {\r\n result += \", \" + this.getDayName(this.date);\r\n }\r\n return result; //E.g. 11 сентября 2019 года, воскресенье\r\n }\r\n\r\n getDaysInMonth() {\r\n if (this.date.getMonth() === 11) {\r\n return new Date(this.date.getFullYear() + 1, 0, 0).getDate();\r\n } else {\r\n return new Date(this.date.getFullYear(), this.date.getMonth() + 1, 0).getDate();\r\n }\r\n }\r\n\r\n /*\r\n * Sets date not changing month and year.\r\n * It is useful in case when you want to set date 31 for feb month:\r\n * 1 march will be chosen unlike in original method (2 or 3 march).\r\n */\r\n setDateGently(date, monthIsolation) {\r\n monthIsolation = monthIsolation || false;\r\n var maxDate = this.getDaysInMonth();\r\n if (date <= maxDate) {\r\n this.date.setDate(date);\r\n } else {\r\n this.date.setDate(maxDate + (monthIsolation ? 0 : 1));\r\n }\r\n }\r\n\r\n /*\r\n * Adds a given number of months to the initial date. \r\n * If there is a gap between the initial date and a calculated one, it sets the last day of the new month.\r\n */\r\n addMonths(months) {\r\n if (months) {\r\n const monthSum = this.date.getMonth() + months;\r\n const addYears = Math.floor(monthSum / 12);\r\n const newMonth = monthSum - addYears * 12;\r\n const currentDay = this.date.getDate();\r\n if (addYears !== 0) {\r\n this.date.setYear(this.date.getFullYear() + addYears);\r\n }\r\n this.date.setMonth(newMonth);\r\n if (this.date.getMonth() !== newMonth) {\r\n this.date.setMonth(newMonth);\r\n }\r\n this.setDateGently(currentDay, true);\r\n }\r\n }\r\n\r\n predictIsDayOff() {\r\n const regularHolidays = [\r\n \"|1|2|3|4|5|6|7|8|\",\r\n \"|23|\",\r\n \"|8|\",\r\n \"||\",\r\n \"|1|9|\",\r\n \"|12|\",\r\n \"||\",\r\n \"||\",\r\n \"||\",\r\n \"||\",\r\n \"|4|\",\r\n \"||\"\r\n ];\r\n\r\n if ([0, 6].indexOf(this.date.getDay()) >= 0)\r\n return true;\r\n if (regularHolidays[this.date.getMonth()].indexOf(\"|\" + this.date.getDate() + \"|\") >= 0)\r\n return true;\r\n return false;\r\n }\r\n\r\n isDayOff() {\r\n if (calendarRes.loading) {\r\n return this.predictIsDayOff();\r\n }\r\n const calendar = calendarRes.content;\r\n for (var i = calendar.length - 1; i >= 0; i--) {\r\n if (this.date.getFullYear() === calendar[i].year) {\r\n return (calendar[i].daysOff[this.date.getMonth()].indexOf(\"|\" + this.date.getDate() + \"|\") >= 0);\r\n }\r\n }\r\n if (this.date.getFullYear() > calendar[calendar.length - 1].year)\r\n return this.predictIsDayOff();\r\n return false;\r\n }\r\n\r\n static currentYear() {\r\n return (new Date()).getFullYear();\r\n }\r\n}\r\n\r\nclass DateSpan {\r\n constructor(dateFrom, dateTo) {\r\n if (dateFrom && dateTo) {\r\n this._dateFrom = new DatePoint(dateFrom);\r\n this._dateTo = new DatePoint(dateTo);\r\n }\r\n }\r\n\r\n toString() {\r\n return this.toLocaleFormat();\r\n }\r\n\r\n isEqualTo(other) {\r\n if (!(other instanceof DateSpan)) {\r\n throw new Error(\"Can't compare DateSpan with \" + typeof (other) + \". Try to cast to DateSpan firstly.\");\r\n }\r\n\r\n if (this._boundsSet()) {\r\n return other._boundsSet() && this.dateFrom.isEqualTo(other.dateFrom) && this.dateTo.isEqualTo(other.dateTo);\r\n }\r\n\r\n if (other._boundsSet()) {\r\n return false;\r\n }\r\n\r\n return this._dayCount === other._dayCount && this._workingDayCount === other._workingDayCount;\r\n }\r\n\r\n get dateFrom() {\r\n return this._dateFrom;\r\n }\r\n\r\n // AG TODO: It's not ideal solution. Come up with a new one.\r\n // Transparent getters allow to change using only getters\r\n // Setters must call 'boundUpdated()' or not update anything at all (maybe remove setters???)\r\n set dateFrom(dateFrom) {\r\n if (dateFrom.valid) {\r\n this._workingDayCount = undefined;\r\n this._dateFrom = dateFrom;\r\n }\r\n }\r\n\r\n get dateTo() {\r\n return this._dateTo;\r\n }\r\n\r\n set dateTo(dateTo) {\r\n if (dateTo.valid) {\r\n this._workingDayCount = undefined;\r\n this._dateTo = dateTo;\r\n }\r\n }\r\n\r\n static fromDays(days) {\r\n var span = new DateSpan();\r\n span._dayCount = days;\r\n return span;\r\n }\r\n\r\n static fromWorkingDays(daysWorking) {\r\n var span = new DateSpan();\r\n span._workingDayCount = daysWorking;\r\n return span;\r\n }\r\n\r\n getWorkingDayCount() {\r\n if (!this._workingDayCount && this._boundsSet()) {\r\n let count = 0;\r\n this.iterDays((day) => count += !day.isDayOff());\r\n this._workingDayCount = count;\r\n }\r\n return this._workingDayCount;\r\n }\r\n\r\n _boundsSet() {\r\n return this.dateFrom !== undefined && this.dateTo !== undefined;\r\n }\r\n\r\n copy() {\r\n if (this._boundsSet())\r\n return new DateSpan(this.dateFrom.copy(), this.dateTo.copy());\r\n\r\n if (this.getDayCount() !== undefined)\r\n return DateSpan.fromDays(this.getDayCount());\r\n\r\n if (this.getWorkingDayCount() !== undefined)\r\n return DateSpan.fromWorkingDays(this.getWorkingDayCount());\r\n }\r\n\r\n getDayCount() {\r\n if (this._boundsSet())\r\n return this.dateFrom.distanceTo(this.dateTo);\r\n return this._dayCount;\r\n }\r\n\r\n toLocaleFormat() {\r\n return this.dateFrom.toLocaleFormat() + \" – \" + this.dateTo.toLocaleFormat();\r\n }\r\n\r\n //return string with day count\r\n getVerboseDayCount() {\r\n return tools.verboseCountingValue(this.getDayCount(), [[\"день\", \"дня\", \"дней\"]]);\r\n }\r\n\r\n /*\r\n * Returns object {valid: true, monthes: [monthes], days: [days]}\r\n * or {valid: false, reason: [reason message string]}\r\n *\r\n * Calculates difference between two dates in monthes and residual days.\r\n * Argument optional (used to subtract specified count of days from period)\r\n * All calculations correct by laws.\r\n */\r\n getPeriodDuration(subtractDayCount) {\r\n subtractDayCount = subtractDayCount || 0;\r\n\r\n //subtracting\r\n var fixedDayTo = this.dateTo.copy();\r\n fixedDayTo = fixedDayTo.addDays(-subtractDayCount);\r\n\r\n if (fixedDayTo.goesBefore(this.dateFrom)) {\r\n if (fixedDayTo.distanceTo(this.dateFrom) == 2) {\r\n return {valid: true, monthes: 0, days: 0, residPoint: fixedDayTo, inDays: 0};\r\n }\r\n return {valid: false, reason: \"dateFrom must be less than dayTo - subtractDayCount\"};\r\n }\r\n\r\n // calculating duration\r\n var months = (fixedDayTo.date.getFullYear() * 12 + fixedDayTo.date.getMonth()) - (this.dateFrom.date.getFullYear() * 12 + this.dateFrom.date.getMonth());\r\n var residPoint = fixedDayTo.copy();\r\n\r\n residPoint.setDateGently(this.dateFrom.date.getDate());\r\n if (residPoint.distanceTo(fixedDayTo) < 0) {\r\n months--;\r\n residPoint = fixedDayTo.copy();\r\n residPoint.date.setDate(1);\r\n residPoint.date.setMonth(residPoint.date.getMonth() - 1);\r\n residPoint.setDateGently(this.dateFrom.date.getDate());\r\n } else if (residPoint.date.getDate() == 1 && fixedDayTo.date.getDate() == residPoint.getDaysInMonth()) {\r\n residPoint.date.setDate(fixedDayTo.date.getDate() + 1);\r\n months++;\r\n }\r\n\r\n return {\r\n valid: true,\r\n monthes: months,\r\n days: residPoint.distanceTo(fixedDayTo),\r\n residPoint: residPoint,\r\n inDays: this.dateFrom.distanceTo(fixedDayTo)\r\n };\r\n }\r\n\r\n //argument of callback should be DatePoint type\r\n iterDays(callback) {\r\n if (!this._boundsSet())\r\n throw new Error(\"DateSpan bounds are undefined\");\r\n var start = this.dateFrom.copy();\r\n var index = 0;\r\n while (this.getDayCount() > index) {\r\n callback(start, index);\r\n start.inc();\r\n index++;\r\n }\r\n }\r\n\r\n /*\r\n * Returns list of objects with next attributes:\r\n * * dateSpan\r\n * * type: [add, sub] (see additional `subtract` parameter)\r\n * * leftKey (for add only, null for first if first key goes after )\r\n * * rightKey (for add only, null for last if last key foes before )\r\n * * instance (for sub only)\r\n * Parameters:\r\n * required parameters: \r\n * * keypoints (list of objects {date: [Date], ...})\r\n * additional parameters:\r\n * * subtract (list of sorted objects {dateFrom: [Date], dateTo: [Date], ...})\r\n * \r\n */\r\n getDateSegments(params) {\r\n if (!tools.checkParams(params, [\"keypoints\"])) {\r\n return [];\r\n }\r\n var keypoints = params.keypoints.sort((a, b) => ((new DatePoint(a.date)).goesBefore(b.date) ? -1 : 1));\r\n\r\n var point = this.dateFrom;\r\n var endPoint = this.dateTo;\r\n var result = [];\r\n\r\n var key = null;\r\n var subtractionUsed = {};\r\n\r\n function add(from, to, leftKey, rightKey) {\r\n result.push({span: new DateSpan(from, to), leftKey: leftKey, rightKey: rightKey, type: \"add\"});\r\n }\r\n\r\n function subtract(instanceIndex) {\r\n var instance = params.subtract[instanceIndex];\r\n result.push({span: new DateSpan(instance.dateFrom, instance.dateTo), instance: instance, type: \"sub\"});\r\n subtractionUsed[instanceIndex] = true;\r\n }\r\n\r\n function addWithSubtractions(start, end, leftKey, rightKey) {\r\n var point = start;\r\n params.subtract.map((s) => new DateSpan(s.dateFrom, s.dateTo)).some(function (s, index) {\r\n if (subtractionUsed[index] !== true) {\r\n if (!point.goesBefore(s.dateFrom)) {\r\n subtract(index);\r\n if (!s.dateTo.goesBefore(point))\r\n point = s.dateTo.addDays(1);\r\n return (!s.dateTo.goesBefore(end));\r\n\r\n } else if (!end.goesBefore(s.dateFrom)) {\r\n add(point, s.dateFrom.addDays(-1), leftKey, rightKey);\r\n subtract(index);\r\n point = s.dateTo.addDays(1);\r\n } else {\r\n return true;\r\n }\r\n } else {\r\n if (!s.dateTo.goesBefore(point)) {\r\n point = s.dateTo.addDays(1);\r\n }\r\n }\r\n return (end.goesBefore(point));\r\n });\r\n\r\n if (!end.goesBefore(point)) {\r\n add(point, end, leftKey, rightKey);\r\n }\r\n }\r\n\r\n function addPeriod(from, to, rightKey) {\r\n if (params.subtract === undefined)\r\n add(from, to, key, rightKey || null);\r\n else\r\n addWithSubtractions(from, to, key, rightKey || null);\r\n }\r\n\r\n if (keypoints.length === 0) {\r\n add(point, endPoint);\r\n }\r\n\r\n // cases:\r\n // 1. kkk[]\r\n // 2. []kkk\r\n // 3. [kkk]\r\n // 4. k[k]k\r\n // 5. k[kk]\r\n // 6. [kk]k\r\n // 7. kk[]k\r\n for (var i = 0; i < keypoints.length; ++i) {\r\n var keypoint = keypoints[i];\r\n var date = new DatePoint(keypoint.date);\r\n if (point.goesBefore(date)) {\r\n if (endPoint.goesBefore(date)) { // 2, 4, 6, 7\r\n addPeriod(point, endPoint, keypoint);\r\n break;\r\n }\r\n else { // 3, 4, 5, 6\r\n addPeriod(point, date.addDays(-1), keypoint);\r\n point = date;\r\n if (i === keypoints.length - 1) { // 3, 5\r\n key = keypoint;\r\n addPeriod(point, endPoint);\r\n }\r\n }\r\n }\r\n else if (i === keypoints.length - 1) { // only 1\r\n key = keypoint;\r\n addPeriod(point, endPoint);\r\n }\r\n\r\n key = keypoint;\r\n }\r\n return result;\r\n }\r\n\r\n contains(datePoint) {\r\n if (!this._boundsSet()) return undefined;\r\n return !datePoint.goesBefore(this.dateFrom) && !this.dateTo.goesBefore(datePoint);\r\n }\r\n\r\n intersects(other) {\r\n if (!this._boundsSet() || !other._boundsSet()) return undefined;\r\n return !this.dateTo.goesBefore(other.dateFrom) && !other.dateTo.goesBefore(this.dateFrom);\r\n }\r\n\r\n // check that this fully inside other\r\n inside(other) {\r\n if (!this._boundsSet() || !other._boundsSet()) return undefined;\r\n return !this.dateFrom.goesBefore(other.dateFrom) && !other.dateTo.goesBefore(this.dateTo);\r\n }\r\n}\r\n\r\n/*Parameters:\r\n * required parameters: \r\n * * from\r\n * * to\r\n*/\r\nfunction makeDateSegmentWorker(segments) {\r\n var _segments = segments\r\n .map((a) => new DateSpan(a.from, a.to))\r\n .sort((a, b) => (a.dateFrom.goesBefore(b.dateFrom) ? -1 : 1));\r\n\r\n return {\r\n /// exclude off days by default\r\n checkDay: function (day, includeOffDays) {\r\n const point = new DatePoint(day);\r\n return (includeOffDays || !point.isDayOff()) && _segments.some((s) => s.contains(point));\r\n },\r\n countSegment: function (from_, to_) {\r\n if (_segments.length == 0) return 0;\r\n if (from_.goesBefore(_segments[0].dateFrom))\r\n from_ = _segments[0].dateFrom;\r\n if (_segments[_segments.length - 1].dateTo.goesBefore(to_))\r\n to_ = _segments[_segments.length - 1].dateTo;\r\n\r\n var result = 0;\r\n var self = this;\r\n var segmentSpan = new DateSpan(from_, to_);\r\n segmentSpan.iterDays((date) => result += self.checkDay(date));\r\n return result;\r\n },\r\n checkIntersection: (dateFrom_, dateTo_) => {\r\n var span = new DateSpan(dateFrom_, dateTo_);\r\n return _segments.some((s) => s.intersects(span));\r\n }\r\n };\r\n}\r\n\r\nfunction getDate(datePicker, returnLegacyDate) {\r\n returnLegacyDate = returnLegacyDate || false;\r\n try {\r\n datePicker = $(datePicker);\r\n\r\n var format = datePicker.datepicker(\"option\", \"dateFormat\"),\r\n text = datePicker.val(),\r\n settings = datePicker.datepicker(\"option\", \"settings\");\r\n\r\n const date = $.datepicker.parseDate(format, text, settings);\r\n return returnLegacyDate ? date : new DatePoint(date, true);\r\n } catch {\r\n return returnLegacyDate ? null : new DatePoint(null, true);\r\n }\r\n}\r\n\r\nfunction nextDateAfterWorkingDay(datePoint, additionalHolidayFunc) {\r\n var checker = (d) => d.isDayOff();\r\n if (additionalHolidayFunc !== undefined) {\r\n checker = function (d) {\r\n return d.isDayOff() || additionalHolidayFunc(d);\r\n };\r\n }\r\n const date = datePoint.copy();\r\n while (true) {\r\n var isWorkingDay = !checker(date);\r\n date.inc();\r\n\r\n if (isWorkingDay) {\r\n return date;\r\n }\r\n }\r\n}\r\n\r\nconst emptyFunc = () => { };\r\n\r\nfunction makeDateFromAlertWorker({\r\n slideUpDuration = 200,\r\n dateFromSelector = \"#dateFrom\",\r\n submitForm = emptyFunc,\r\n dateFromAlertSelector = \"#dateFromAlert\",\r\n alertAcceptSelector = \"#dateFromAlertAccept\",\r\n isDynamicSubmit = false,\r\n minCheckDate = \"01.01.1800\",\r\n maxCheckDate = \"01.01.2999\",\r\n crownPeriods = undefined,\r\n isDayBeforeWeekend = false,\r\n isDayCrownHoliday = false,\r\n isWeekend = false,\r\n calculator = null\r\n}) {\r\n var elem = $(dateFromAlertSelector);\r\n var alertAcceptElem = $(alertAcceptSelector);\r\n var shown = false;\r\n\r\n var config = {\r\n dateFrom: {tmp: null, frozen: null},\r\n prevDate: {tmp: null, frozen: null},\r\n nextPrevDateFrom: {tmp: null, frozen: null},\r\n nextDateFrom: {tmp: null, frozen: null},\r\n set: function (dateFrom_, prevDate_, nextDateFrom_) {\r\n if (dateFrom_ !== null) this.dateFrom.tmp = dateFrom_;\r\n if (prevDate_ !== null) this.prevDate.tmp = prevDate_;\r\n if (nextDateFrom_ !== null) {\r\n this.nextDateFrom.tmp = nextDateFrom_;\r\n this.nextPrevDateFrom.tmp = new DatePoint(nextDateFrom_).dec().date;\r\n }\r\n },\r\n freeze: function () {\r\n [this.dateFrom, this.prevDate, this.nextPrevDateFrom, this.nextDateFrom].forEach(function (x) {\r\n x.frozen = x.tmp;\r\n });\r\n elem.data(\"stateDayFrozen\", elem.data(\"stateDay\"));\r\n }\r\n };\r\n\r\n function previousDateBeforeWeekend(date) {\r\n var currDate = date.copy();\r\n while (true) {\r\n var isWorkingDay = !currDate.isDayOff();\r\n if (isWorkingDay) {\r\n return currDate;\r\n }\r\n currDate.dec();\r\n }\r\n }\r\n\r\n $(\".variant-header\").on(\"click\", function (e) {\r\n if (e.target.tagName == \"A\")\r\n return;\r\n\r\n function updateVariant(elem) {\r\n var parent = elem.parentElement;\r\n var content = $(parent).find(\".variant-content\");\r\n if (!elem.classList.contains(\"close\")) {\r\n content.slideDown();\r\n } else {\r\n content.slideUp(slideUpDuration);\r\n }\r\n }\r\n var self = this;\r\n var close = !self.classList.contains(\"close\");\r\n $(\".variant-header\").addClass(\"close\").each(function () {\r\n if (this === self && !close) {\r\n this.classList.remove(\"close\");\r\n }\r\n updateVariant(this);\r\n });\r\n });\r\n\r\n alertAcceptElem.on(\"click\", function () {\r\n var newDate = new DatePoint($(this).data(\"newDate\"));\r\n const oldDate = new DatePoint($(dateFromSelector)[0].date);\r\n if (newDate.valid) {\r\n config.set(null, null, newDate.date);\r\n config.freeze();\r\n $(dateFromSelector)[0].date = newDate.date;\r\n const dateFromPoint = new DatePoint(config.dateFrom.frozen);\r\n elem.find(\".datefrom-alert-val\").html(dateFromPoint.toLocaleFormat());\r\n elem.find(\".datefrom-alert-val-day\").html(dateFromPoint.getDayName());\r\n elem.data(\"crownButton\", this.classList.contains(\"crown\"));\r\n }\r\n\r\n elem.slideUp(slideUpDuration);\r\n\r\n if (isDynamicSubmit) {\r\n elem.data(\"state\", \"accept\");\r\n submitForm();\r\n }\r\n else {\r\n submitForm();\r\n elem.data(\"state\", \"accept\");\r\n }\r\n\r\n if (!crownSegmWorker.checkDay(newDate.date) && crownSegmWorker.checkDay(nextDateAfterWorkingDay(oldDate).date) && oldDate.copy().dec().isDayOff())\r\n elem.data(\"stateDay\", \"crownOff\");\r\n else if (crownSegmWorker.checkDay(newDate.date))\r\n elem.data(\"stateDay\", \"\");\r\n\r\n if (calculator !== null) {\r\n calculator.sendStatisticMessage(\"Check_Day_Off\");\r\n }\r\n\r\n });\r\n\r\n elem.find(\".close-button\").on(\"click\", function () {\r\n elem.slideUp(slideUpDuration);\r\n elem.data(\"state\", \"closed\");\r\n config.freeze();\r\n\r\n if (isDynamicSubmit) {\r\n submitForm();\r\n }\r\n return false;\r\n });\r\n\r\n var isCrown = crownPeriods === undefined ? false : true;\r\n var crownSegmWorker = makeDateSegmentWorker(crownPeriods || []);\r\n\r\n function checkCrown(dateFrom, equalityCheck, hideCovidInfo) {\r\n if (hideCovidInfo) return;\r\n var prevDatePoint = new DatePoint(dateFrom);\r\n prevDatePoint.dec();\r\n\r\n if (prevDatePoint.isDayOff() || crownSegmWorker.checkDay(prevDatePoint.date)) {\r\n var nextDateFromPoint = nextDateAfterWorkingDay(new DatePoint(dateFrom), function (d) { return crownSegmWorker.checkDay(d); });\r\n var nextPrevDateFromPoint = nextDateFromPoint.copy().dec();\r\n\r\n var result = (equalityCheck === undefined || nextDateFromPoint.toLocaleFormat() !== new DatePoint(equalityCheck).toLocaleFormat());\r\n if (result) {\r\n $(\".datefrom-alert-new-prev-crown\").html(nextPrevDateFromPoint.toLocaleFormat());\r\n $(\".datefrom-alert-new-val-crown\").html(nextDateFromPoint.toLocaleFormat());\r\n config.set(null, null, nextDateFromPoint.date);\r\n alertAcceptElem.each(function () {\r\n if (this.classList.contains(\"crown\")) {\r\n $(this).data(\"newDate\", nextDateFromPoint.toLocaleFormat());\r\n }\r\n });\r\n }\r\n return result;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n return {\r\n show: function () {\r\n shown = true;\r\n elem.slideDown();\r\n if (calculator !== null) {\r\n calculator.sendStatisticMessage(\"Show_Day_Off\");\r\n }\r\n },\r\n shown: function () { return shown; },\r\n hide: function () { shown = false; elem.slideUp(slideUpDuration); },\r\n reset: function () { shown = false; elem.hide(); },\r\n getElem: function () { return elem; },\r\n getState: function () { return elem.data(\"state\"); },\r\n getFrozenDateFrom: function () { return new DatePoint(config.dateFrom.frozen); },\r\n isVisible: function () { return elem.is(\":visible\"); },\r\n isAccepted: function () { return (elem.data(\"state\") === \"accept\"); },\r\n isAcceptedCrown: function () { return (elem.data(\"crownButton\")); },\r\n isClosed: function () { return (elem.data(\"state\") === \"closed\"); },\r\n isDayCrown: function (frozen) { return frozen ? (elem.data(\"stateDayFrozen\") == \"crown\") : (elem.data(\"stateDay\") == \"crown\"); },\r\n isDayOffCrown: function (frozen) { return frozen ? (elem.data(\"stateDayFrozen\") == \"crownOff\") : (elem.data(\"stateDay\") == \"crownOff\"); },\r\n render: function (freeze) { // this parameter useful for force freeze (card not closed, print, for example)\r\n if (freeze) {\r\n config.freeze();\r\n }\r\n var dateFromPoint = new DatePoint(config.dateFrom.frozen);\r\n var prevDatePoint = new DatePoint(config.prevDate.frozen);\r\n var nextPrevDateFromPoint = new DatePoint(config.nextPrevDateFrom.frozen);\r\n var nextDateFromPoint = new DatePoint(config.nextDateFrom.frozen);\r\n $(\".datefrom-alert-val-render\").html(dateFromPoint.toLocaleFormat());\r\n $(\".datefrom-alert-val-day-render\").html(dateFromPoint.getDayName());\r\n $(\".datefrom-alert-prev-render\").html(prevDatePoint.toLocaleFormat());\r\n $(\".datefrom-alert-prev-day-render\").html(prevDatePoint.getDayName());\r\n $(\".datefrom-alert-new-prev-render\").html(nextPrevDateFromPoint.toLocaleFormat());\r\n $(\".datefrom-alert-new-val-render\").html(nextDateFromPoint.toLocaleFormat());\r\n $(\".datefrom-alert-new-val-day-render\").html(nextDateFromPoint.getDayName());\r\n },\r\n check: function (dateFrom, hideCovidInfo) {\r\n const dateFromPoint = new DatePoint(dateFrom, true);\r\n if (dateFromPoint.goesBefore(minCheckDate) || new DatePoint(maxCheckDate).goesBefore(dateFromPoint)) {\r\n this.hide();\r\n return;\r\n }\r\n\r\n elem.data(\"state\", \"\");\r\n elem.data(\"stateDay\", \"\");\r\n if (dateFromPoint.valid) {\r\n if (isDayBeforeWeekend) {\r\n var currentDate = dateFromPoint;\r\n if (currentDate.isDayOff()) {\r\n var previousDatePoint = previousDateBeforeWeekend(dateFromPoint);\r\n config.set(dateFromPoint.date, null, previousDatePoint.date);\r\n alertAcceptElem.data(\"newDate\", previousDatePoint.toLocaleFormat());\r\n elem.find(\".datefrom-alert-val\").html(dateFromPoint.toLocaleFormat());\r\n elem.find(\".datefrom-alert-val-day\").html(dateFromPoint.getDayName());\r\n elem.find(\".datefrom-alert-new-val\").html(previousDatePoint.toLocaleFormat());\r\n elem.find(\".datefrom-alert-new-val-day\").html(previousDatePoint.getDayName());\r\n this.show();\r\n } else {\r\n this.hide();\r\n }\r\n }\r\n else if (isWeekend) {\r\n var prevDatePoint = dateFromPoint.copy().dec();\r\n if (dateFromPoint.isDayOff() || checkCrown(dateFromPoint.date)) {\r\n config.set(dateFromPoint.date, null, null);\r\n elem.find(\".datefrom-alert-val\").html(dateFromPoint.toLocaleFormat());\r\n elem.find(\".datefrom-alert-val-day\").html(dateFromPoint.getDayName());\r\n }\r\n\r\n if (dateFromPoint.isDayOff()) {\r\n var nextDateFromPoint = nextDateAfterWorkingDay(dateFromPoint);\r\n var workingDateFromPoint = nextDateFromPoint.copy().dec();\r\n alertAcceptElem.data(\"newDate\", workingDateFromPoint.toLocaleFormat());\r\n elem.find(\".datefrom-alert-new-val\").html(workingDateFromPoint.toLocaleFormat());\r\n\r\n if (isCrown && checkCrown(dateFromPoint.date, nextDateFromPoint.date, hideCovidInfo) && !hideCovidInfo) {\r\n $(\".info-block.variants\").show();\r\n $(\".info-block.single\").hide();\r\n elem.data(\"stateDay\", \"crownOff\");\r\n } else if (isCrown) {\r\n if (dateFromPoint.date.getFullYear() < 2023) {\r\n $(\".info-block-content .normal-cases-before-2023\").show();\r\n $(\".info-block-content .normal-cases\").hide();\r\n } else {\r\n $(\".info-block-content .normal-cases-before-2023\").hide();\r\n $(\".info-block-content .normal-cases\").show();\r\n }\r\n $(\".info-block-content .crown-case\").hide();\r\n $(\".info-block.variants\").hide();\r\n $(\".info-block.single\").show();\r\n if (crownSegmWorker.checkDay(dateFromPoint))\r\n elem.data(\"stateDay\", \"crown\");\r\n }\r\n\r\n config.set(null, null, workingDateFromPoint.date);\r\n\r\n this.show();\r\n } else {\r\n if (isCrown && checkCrown(dateFromPoint.date) && !hideCovidInfo) {\r\n $(\".info-block-content .normal-cases-before-2023\").hide();\r\n $(\".info-block-content .normal-cases\").hide();\r\n $(\".info-block-content .crown-case\").show();\r\n $(\".info-block.variants\").hide();\r\n $(\".info-block.single\").show();\r\n elem.data(\"stateDay\", \"crown\");\r\n if (!isDayCrownHoliday)\r\n this.show();\r\n else\r\n this.hide();\r\n } else {\r\n this.hide();\r\n }\r\n }\r\n } else {\r\n prevDatePoint = dateFromPoint.copy().dec();\r\n if (prevDatePoint.isDayOff() || checkCrown(dateFromPoint.date)) {\r\n config.set(dateFromPoint.date, prevDatePoint.date, null);\r\n elem.find(\".datefrom-alert-val\").html(dateFromPoint.toLocaleFormat());\r\n elem.find(\".datefrom-alert-val-day\").html(dateFromPoint.getDayName());\r\n elem.find(\".datefrom-alert-prev\").html(prevDatePoint.toLocaleFormat());\r\n elem.find(\".datefrom-alert-prev-day\").html(prevDatePoint.getDayName());\r\n }\r\n\r\n if (prevDatePoint.isDayOff()) {\r\n nextDateFromPoint = nextDateAfterWorkingDay(dateFromPoint);\r\n var nextPrevDateFromPoint = nextDateFromPoint.copy().dec();\r\n\r\n alertAcceptElem.data(\"newDate\", nextDateFromPoint.toLocaleFormat());\r\n\r\n elem.find(\".datefrom-alert-new-prev\").html(nextPrevDateFromPoint.toLocaleFormat());\r\n elem.find(\".datefrom-alert-new-val\").html(nextDateFromPoint.toLocaleFormat());\r\n\r\n if (isCrown && checkCrown(dateFromPoint.date, nextDateFromPoint.date, hideCovidInfo) && !hideCovidInfo) {\r\n $(\".info-block.variants\").show();\r\n $(\".info-block.single\").hide();\r\n elem.data(\"stateDay\", \"crownOff\");\r\n } else if (isCrown) {\r\n if (dateFromPoint.date.getFullYear() < 2023) {\r\n $(\".info-block-content .normal-cases-before-2023\").show();\r\n $(\".info-block-content .normal-cases\").hide();\r\n } else {\r\n $(\".info-block-content .normal-cases-before-2023\").hide();\r\n $(\".info-block-content .normal-cases\").show();\r\n }\r\n $(\".info-block-content .crown-case\").hide();\r\n $(\".info-block.variants\").hide();\r\n $(\".info-block.single\").show();\r\n if (crownSegmWorker.checkDay(dateFromPoint))\r\n elem.data(\"stateDay\", \"crown\");\r\n }\r\n\r\n config.set(null, null, nextDateFromPoint.date);\r\n\r\n this.show();\r\n } else {\r\n if (isCrown && checkCrown(dateFromPoint.date) && !hideCovidInfo) {\r\n $(\".info-block-content .normal-cases-before-2023\").hide();\r\n $(\".info-block-content .normal-cases\").hide();\r\n $(\".info-block-content .crown-case\").show();\r\n $(\".info-block.variants\").hide();\r\n $(\".info-block.single\").show();\r\n elem.data(\"stateDay\", \"crown\");\r\n if (!isDayCrownHoliday)\r\n this.show();\r\n else\r\n this.hide();\r\n } else {\r\n this.hide();\r\n }\r\n }\r\n }\r\n } else {\r\n this.hide();\r\n }\r\n }\r\n };\r\n}\r\n\r\nfunction makeDateInFutureAlertWorker({\r\n slideUpDuration = 200,\r\n submitForm = emptyFunc,\r\n isDynamicSubmit = false,\r\n dateToFutureAlertSelector = \"#dateToFutureAlert\",\r\n calculator = null\r\n}) {\r\n var elem = $(dateToFutureAlertSelector);\r\n var shown = false;\r\n\r\n elem.find(\".close-button\").on(\"click\", function (e) {\r\n elem.slideUp(slideUpDuration);\r\n elem.data(\"state\", \"closed\");\r\n\r\n if (isDynamicSubmit) {\r\n submitForm();\r\n }\r\n e.preventDefault();\r\n });\r\n\r\n return {\r\n show: function () {\r\n shown = true;\r\n elem.slideDown();\r\n\r\n if (calculator !== null) {\r\n calculator.sendStatisticMessage(\"Date_Future\");\r\n }\r\n },\r\n shown: function () { return shown; },\r\n hide: function () { shown = false; elem.slideUp(slideUpDuration); },\r\n reset: function () { shown = false; elem.hide(); },\r\n getElem: function () { return elem; },\r\n getState: function () { return elem.data(\"state\"); },\r\n isVisible: function () { return elem.is(\":visible\"); },\r\n isAccepted: function () { return shown && (this.getState() === \"accept\"); },\r\n isClosed: function () { return shown && (this.getState() === \"closed\"); },\r\n check: function (dateTo) {\r\n elem.data(\"state\", \"\");\r\n\r\n if (dateTo && dateTo.getDate() && (new DatePoint(dateTo).date > new DatePoint().date))\r\n this.show();\r\n else {\r\n this.hide();\r\n }\r\n }\r\n };\r\n}\r\n\r\n\r\nfunction distinctDates(dates) {\r\n if (!dates || dates.length == 0) {\r\n return dates;\r\n }\r\n if (dates[0] instanceof Date) {\r\n return dates\r\n .map(function (s) { return s.toString(); })\r\n .filter(tools.distinct)\r\n .map(function (s) { return new Date(s); });\r\n }\r\n else if (dates[0] instanceof DatePoint) {\r\n return dates\r\n .map(function (s) { return s.toLocaleFormat(); })\r\n .filter(tools.distinct)\r\n .map(function (s) { return new DatePoint(s); });\r\n } else {\r\n throw new Error(\"Wrong type of elements. Must be some of date formats.\");\r\n }\r\n}\r\n\r\nfunction holidayChecker(date) {\r\n return new DatePoint(date).isDayOff();\r\n}\r\n\r\nfunction getTheFirstOfJanuary(date) {\r\n return new Date(date.getFullYear(), 0, 0);\r\n}\r\n\r\n\r\nexport {DatePoint, DateSpan, getDate, distinctDates, makeDateInFutureAlertWorker, makeDateFromAlertWorker, makeDateSegmentWorker, nextDateAfterWorkingDay, holidayChecker};\r\n","import { Calculator, ShowErrorWay } from \"../common/calculator\";\r\nimport { DateField } from \"../common/datetime_fields.js\";\r\nimport { SummaryField } from \"../components/summary_field/summary_field.js\";\r\nimport { PeriodicDateField } from \"../components/periodic_date_field/periodic_date_field.js\";\r\nimport { DatePoint, distinctDates, makeDateFromAlertWorker } from '../js/datelib.js';\r\n\r\nclass VklCalculator extends Calculator {\r\n code() { return \"vkl\"; }\r\n type() { return \"CalcVkl\"; }\r\n\r\n initialize() {\r\n let self = this; \r\n this.periodType = {\r\n Day: 1,\r\n Week: 2,\r\n Month: 3,\r\n Quarter: 4,\r\n Year: 5\r\n };\r\n\r\n this.patchFieldTypes([DateField, SummaryField, PeriodicDateField]);\r\n this.setupStatistic({\r\n calcName: 'vkl'\r\n });\r\n\r\n // add input fields\r\n this.depositSumField = this.addInputField('#depositSumInput input', 'depositSum', {\r\n type: 'money', options: { maxVal: 999999999999.99 },\r\n errors: [{ check: function (v) { return !!v; }, selector: '#depositSumInput .error-text' }],\r\n unsilence: ['rateBySum[].sum']\r\n });\r\n\r\n this.fixedRateField = this.addInputField('#rateTypeInput .fixed-rate', 'fixedRate', {\r\n type: 'float', options: { precision: 3 },\r\n errors: [{ check: function (v) { return !!v; }, selector: '#rateTypeInput .fixed-rate-error' }]\r\n });\r\n\r\n this.addInputField('#termDiv input', 'termValue', {\r\n type: 'count',\r\n errors: [\r\n { check: function (v) { return !!v; }, selector: '#termDiv .term-div .null-error' }\r\n ],\r\n unsilence: ['withdrawal[].summary', 'deposit[].summary']\r\n });\r\n\r\n this.addInputField('#termDiv date-picker', 'termDate', {\r\n errors: [\r\n { check: function (v) { return v.valid; }, selector: '#termDiv .date-div .null-error' },\r\n { check: function (v) { return !v.goesBefore(new DatePoint(\"01.01.1995\")); }, selector: '#termDiv .date-div .from-bound-err' }\r\n ],\r\n unsilence: ['withdrawal[].summary', 'deposit[].summary', 'rateByTerm[].date']\r\n });\r\n\r\n this.dateTypeField = this.addInputField('#dateTypeInput', 'dateType', { \r\n type: 'link', \r\n options: { defaultGetValue: 'open' } ,\r\n unsilence: ['rateByTerm[].date']\r\n });\r\n\r\n // add group and dynamic fields\r\n this.rateBySumField = this.addInputField('#changing-sum-table', 'rateBySum', {\r\n dynamic: true,\r\n appendButtonSelector: \"#addTermRateBySum\",\r\n removeSelector: \".dynamic-list-row-remove a\",\r\n keepOne: true,\r\n removeFirstEvent: function () {\r\n const $table = $(\"#changing-sum-table\");\r\n $table.removeClass(\"err\");\r\n $(\"#rateBySumDiv > .error-text-block > .no-start-error\").removeAttr(\"style\");\r\n const $list = $table.find(\".dynamic-list-row\");\r\n const $sum = $list.find(\".dynamic-list-rate-sum input.base-input\");\r\n $sum.val(\"\");\r\n $sum.removeClass(\"err\");\r\n const $input = $list.find(\".dynamic-list-rate-percent input.base-input\");\r\n $input.val(\"\");\r\n $input.removeClass(\"err\");\r\n\r\n $list.find(\".error-text-block .error-text\").removeAttr(\"style\");\r\n },\r\n afterRemoval: function () {\r\n const $sum = $(\"#changing-sum-table\").find(\".dynamic-list-row\").find(\".dynamic-list-rate-sum input\");\r\n self.submitForm($sum[0] || null, !self._submitOnChange);\r\n },\r\n ignoreForEmpty: false,\r\n fields: {\r\n sum: {\r\n selector: \".dynamic-list-rate-sum input\",\r\n options: function ($clone) {\r\n return {\r\n type: 'money',\r\n errors: [\r\n {\r\n check: function (v, autoValidation) {return (autoValidation && $clone.find(\".dynamic-list-rate-percent input\").val() === '') || v !== null;},\r\n selector: $clone.find('.dynamic-row-error-sum')\r\n },\r\n {\r\n check: function (v) {\r\n return !v || !self.depositSum || $(\"#changing-sum-table .dynamic-list-row .dynamic-list-rate-sum input\").map(function () {\r\n return new $(this).val();\r\n }).get().find(d => d !== '' && tools.parseLocaleFloat(d) <= self.depositSum) !== undefined;\r\n },\r\n selector: $(\"#rateBySumDiv > .error-text-block > .no-start-error\"),\r\n errClassElem: \"#changing-sum-table\"\r\n },\r\n {\r\n check: function (v) { return v === null || !self.rateBySum || self.rateBySum.filter(r => r.sum === v).length === 0; },\r\n selector: $clone.find('.double-error')\r\n },\r\n ],\r\n unsilence: ['rateBySum[].sum']\r\n }\r\n },\r\n },\r\n rate: {\r\n selector: \".dynamic-list-rate-percent input\",\r\n options: function ($clone) {\r\n return {\r\n type: 'float',\r\n options: { precision: 3 },\r\n errors: [{ check: function (v) { return v != null; }, selector: $clone.find('.dynamic-row-error-rate') }]\r\n }\r\n },\r\n },\r\n }\r\n });\r\n\r\n this.rateByTermField = this.addInputField('#changing-rate-table', 'rateByTerm', {\r\n dynamic: true,\r\n appendButtonSelector: \"#addRate\",\r\n removeSelector: \".dynamic-list-row-remove a\",\r\n keepOne: true,\r\n dontSubmitOnRemove: true,\r\n removeFirstEvent: function () {\r\n const $table = $(\"#changing-rate-table\");\r\n $table.removeClass(\"err\");\r\n $(\"#rateByTermDiv > .error-text-block > .no-start-error\").removeAttr(\"style\");\r\n const $list = $table.find(\".dynamic-list-row\");\r\n const $date = $list.find(\"date-picker\");\r\n $date.val(\"\");\r\n $date.removeClass(\"err\");\r\n const $input = $list.find(\".dynamic-list-rate-percent input.base-input\");\r\n $input.val(\"\");\r\n $input.removeClass(\"err\");\r\n $list.find(\".error-text-block .error-text\").removeAttr(\"style\");\r\n self.submitForm(null, !self._submitOnChange);\r\n },\r\n afterRemoval: function () {\r\n const $date = $(\"#changing-rate-table\").find(\".dynamic-list-row\").find(\"date-picker\");\r\n self.submitForm($date[0], !self._submitOnChange);\r\n },\r\n ignoreForEmpty: false,\r\n fields: {\r\n date: {\r\n selector: \".dynamic-list-rate-date date-picker\",\r\n options: function ($clone) {\r\n return {\r\n showErrorWay: ShowErrorWay.SHOW_FIRST,\r\n errors: [\r\n {\r\n check: function (v, autoValidation) {return (autoValidation && $clone.find(\".dynamic-list-rate-percent input\").val() === '') || v.valid;},\r\n selector: $clone.find('.dynamic-row-error-date')\r\n },\r\n { check: function (v) { return !v.goesBefore(new DatePoint(\"01.01.1995\")); }, selector: $clone.find('.from-bound-err') },\r\n { check: function (v) { return !self.openDate || !v.goesBefore(self.openDate); }, selector: $clone.find('.before-start-err') },\r\n {\r\n check: function (v) { return !v.valid || !self.rateByTerm || self.rateByTerm.filter(r => r.date && r.date.distanceTo(v) == 1).length === 0; },\r\n selector: $clone.find('.double-error')\r\n },\r\n {\r\n check: function (v) {\r\n return !v.valid || !(self.openDate && self.openDate.distanceTo(v) === 2 && !!$(\"#changing-rate-table .dynamic-list-row date-picker\").map(function () {\r\n return new $(this).val();\r\n }).get().find(r => r && (new DatePoint(r)).distanceTo(self.openDate) == 1));\r\n },\r\n selector: $clone.find('.open-double-error')\r\n },\r\n {\r\n check: function (v) {\r\n return !v.valid || !self.openDate || !!$(\"#changing-rate-table .dynamic-list-row date-picker\").map(function () {\r\n return new $(this).val();\r\n }).get().find(d => d && (!d.localeCompare(self.openDate.toString()) || !d.localeCompare(self.openDate.copy().inc().toString())));\r\n },\r\n selector: $(\"#rateByTermDiv > .error-text-block > .no-start-error\"),\r\n errClassElem: \"#changing-rate-table\"\r\n },\r\n ],\r\n unsilence: ['rateByTerm[].date']\r\n }\r\n },\r\n },\r\n rate: {\r\n selector: \".dynamic-list-rate-percent input\",\r\n options: function ($clone) {\r\n return {\r\n type: 'float',\r\n options: { precision: 3 },\r\n errors: [{ check: function (v) { return v != null; }, selector: $clone.find('.dynamic-row-error-rate') }]\r\n }\r\n },\r\n },\r\n }\r\n });\r\n\r\n this.withdrawalField = this.addInputField('#withdrawalTable', 'withdrawal', {\r\n dynamic: true,\r\n appendButtonSelector: \"#addWithdrawal\",\r\n removeSelector: \".dynamic-list-row-remove a\",\r\n keepOne: true,\r\n removeFirstEvent: function () {\r\n const $list = $(\"#withdrawalTable .dynamic-list-row\");\r\n const $input = $list.find(\"summary-input\");\r\n $input.val(\"\");\r\n $list.removeClass(\"err\");\r\n $($input[0].shadowRoot).find(\".error-text\").removeAttr(\"style\");\r\n },\r\n ignoreForEmpty: false,\r\n fields: {\r\n summary: {\r\n selector: \"summary-input\",\r\n options: function ($clone) {\r\n return {\r\n type: 'summary',\r\n showErrorWay: ShowErrorWay.SHOW_FIRST,\r\n errors: SummaryField.getSummaryErrors($clone, self, 'openDate', 'closeDate'),\r\n errClassElem: $clone\r\n }\r\n },\r\n },\r\n }\r\n });\r\n\r\n this.depositField = this.addInputField('#depositTable', 'deposit', {\r\n dynamic: true,\r\n appendButtonSelector: \"#addDeposit\",\r\n removeSelector: \".dynamic-list-row-remove a\",\r\n keepOne: true,\r\n removeFirstEvent: function () {\r\n const $list = $(\"#depositTable .dynamic-list-row\");\r\n const $input = $list.find(\"summary-input\");\r\n $input.val(\"\");\r\n $list.removeClass(\"err\");\r\n $($input[0].shadowRoot).find(\".error-text\").removeAttr(\"style\");\r\n },\r\n ignoreForEmpty: false,\r\n fields: {\r\n summary: {\r\n selector: \"summary-input\",\r\n options: function ($clone) {\r\n return {\r\n type: 'summary',\r\n showErrorWay: ShowErrorWay.SHOW_FIRST,\r\n errors: SummaryField.getSummaryErrors($clone, self, 'openDate', 'closeDate'),\r\n errClassElem: $clone\r\n }\r\n },\r\n },\r\n }\r\n });\r\n\r\n this.fixedRateField.ignore = false;\r\n this.rateByTermField.ignore = true;\r\n this.setDynamicInputIgnore('rateByTerm', true);\r\n this.rateBySumField.ignore = true;\r\n this.setDynamicInputIgnore('rateBySum', true);\r\n this.withdrawalField.ignore = true;\r\n this.setDynamicInputIgnore('withdrawal', true);\r\n this.depositField.ignore = true;\r\n this.setDynamicInputIgnore('deposit', true);\r\n\r\n // add output fields\r\n this.addOutputField('.date-from-render', 'openDate', { type: 'dateFromRender', render: function (r) { return r ? r.toString() : null } });\r\n this.addOutputField('.date-to-render', 'closeDate', { type: 'dateToRender', render: function (r) { return r ? r.toString() : null } });\r\n this.addOutputField('.closure-date-render', 'closureDate', { type: 'closureDateRender', render: function (r) { return r ? r.toString() : null } });\r\n\r\n this.addOutputField('.periods-detalization', 'groupedDetalization', {\r\n html: true,\r\n render: function (groupPeriods) {\r\n function renderHeader(params) {\r\n let inner = '';\r\n if (params.isYear) {\r\n inner += `${params.year} (${params.days} дней)`;\r\n }\r\n if (params.isRate) {\r\n inner += `Ставка ${tools.getLocaleSum(params.rate)}%`;\r\n }\r\n if (!params.hideColumns) {\r\n inner += 'периоддн.процентывклад';\r\n }\r\n\r\n return inner;\r\n }\r\n\r\n function renderRow(period) {\r\n period.period = period.span.toLocaleFormat();\r\n return `${period.period}`\r\n + `${period.days}`\r\n + `${tools.getLocaleSum(period.percent)}`\r\n + `${tools.getLocaleSum(period.deposit)}`\r\n }\r\n\r\n function renderDecreaseIncreaseRow(period) {\r\n return `${period.stringDate}${tools.getLocaleSum(period.deposit)}`\r\n + `${(period.type !== 'withdrawal' ? 'Пополнения вклада' : 'Частичное снятие')}`\r\n + `${(period.type !== 'withdrawal' ? '+' : '−')}${tools.getLocaleSumInRubbles(period.payment)}`\r\n + `${period.comment ? period.comment : ''}`;\r\n }\r\n\r\n const table = document.createElement('table');\r\n table.classList.add('output-table');\r\n const detalizationDiv = document.createElement('div');\r\n detalizationDiv.classList.add('detalization-div');\r\n let inner = \"\";\r\n let previousRate = 0;\r\n groupPeriods.forEach((periods, k) => {\r\n let headerParams = {};\r\n headerParams.year = periods[0].year;\r\n headerParams.days = periods[0].daysInYear;\r\n headerParams.isYear = true;\r\n if (self.rateType.value !== 1 && periods[0].rate !== previousRate) {\r\n headerParams.rate = periods[0].rate;\r\n headerParams.isRate = true;\r\n }\r\n\r\n inner += renderHeader(headerParams);\r\n\r\n for (let i = 0; i < periods.length; i++) {\r\n headerParams = {};\r\n if (periods[i] && periods[i].type === \"add\") {\r\n if (i !== 0 && periods[i].rate !== periods[i - 1].rate) {\r\n if (self.rateType.value !== 1) {\r\n headerParams.isRate = true;\r\n headerParams.rate = periods[i].rate;\r\n }\r\n headerParams.isYear = false;\r\n inner += renderHeader(headerParams);\r\n }\r\n inner += renderRow(periods[i]);\r\n } else {\r\n inner += renderDecreaseIncreaseRow(periods[i]);\r\n }\r\n previousRate = periods[i].rate;\r\n }\r\n });\r\n\r\n table.innerHTML = inner;\r\n detalizationDiv.append(table)\r\n\r\n return detalizationDiv.outerHTML;\r\n }\r\n });\r\n\r\n $('.excluded-funds-trigger').on('click', () => {\r\n const $this = $('.excluded-funds-trigger');\r\n const $notification = $('.excluded-funds-notification');\r\n if ($this.hasClass('hidden-notification')) {\r\n $this.text('Свернуть');\r\n $this.removeClass('hidden-notification');\r\n $notification.removeClass('hidden-control');\r\n } else {\r\n $this.text('Развернуть');\r\n $this.addClass('hidden-notification');\r\n $notification.addClass('hidden-control');\r\n }\r\n })\r\n\r\n this.loadDescription();\r\n\r\n this.submitOnClick('#calcSubmit');\r\n this.addResetButton(\"#clearCalcInput\");\r\n }\r\n\r\n submitOnClick(selectorOrElem) {\r\n var self = this;\r\n $(selectorOrElem).click(function () {\r\n $(`summary-input`).each((i, el) => {el.closeWindow();});\r\n self.submitForm(null, false, true);\r\n });\r\n }\r\n\r\n isReady() {\r\n return true;\r\n }\r\n\r\n onReset() {\r\n $('.calc-div-results').removeClass('show-results');\r\n\r\n $('#isCapitalizationInput').removeClass(\"hidden-control\");\r\n $('#rateTypeInput').removeClass(\"rate-type-2\").removeClass(\"rate-type-3\").addClass(\"rate-type-1\");\r\n $(\"#rateTypeInput dropdown-select\").attr('kind', \"sharp-right\");\r\n $('#withdrawalInnerDiv').addClass('hidden-control');\r\n $('#depositInnerDiv').addClass('hidden-control');\r\n \r\n this.fixedRateField.ignore = false;\r\n this.rateByTermField.ignore = true;\r\n this.setDynamicInputIgnore('rateByTerm', true);\r\n this.rateBySumField.ignore = true;\r\n this.setDynamicInputIgnore('rateBySum', true);\r\n this.withdrawalField.ignore = true;\r\n this.setDynamicInputIgnore('withdrawal', true);\r\n this.depositField.ignore = true;\r\n this.setDynamicInputIgnore('deposit', true);\r\n }\r\n\r\n generateExportObject() {\r\n let result = super.generateExportObject();\r\n result.groupedDetalization = tools.deepcopy(this.groupedDetalization);\r\n result.totalPercent = this.totalPercent;\r\n result.totalDeposit = this.totalDeposit;\r\n result.isExcess = this.isExcess;\r\n result.isClosure = this.isClosure;\r\n result.isShiftDate = this.isShiftDate;\r\n result.isExcludedFund = this.isExcludedFund;\r\n result.capitalizationEnabled = this.capitalizationEnabled;\r\n result.lastWithdrawal = this.lastWithdrawal;\r\n result.previousSum = this.previousSum;\r\n result.excludedFundMessage = this.excludedFundMessage;\r\n result.excludedFunds = this.excludedFunds;\r\n result.depositSum = this.depositSum;\r\n result.rateTypeValue = this.rateType.value;\r\n\r\n return result;\r\n }\r\n\r\n showResults() {\r\n super.showResults();\r\n\r\n var goalParams = {\r\n args: {\r\n },\r\n message: 'Is_Made'\r\n };\r\n this.sendStatisticMessage(goalParams);\r\n }\r\n\r\n get defaultFilled() {\r\n return ($(\"#debtDecreaseTable\").find('.dynamic-list-row').length > 0) ||\r\n ($(\"#debtIncreaseTable\").find('.dynamic-list-row').length > 0);\r\n }\r\n\r\n afterParse(sender, autoValidation) {\r\n let self = this;\r\n let $elem = $(sender);\r\n let $rateTypeInput = $(\"#rateTypeInput dropdown-select\");\r\n let $rateTypeInputDiv = $(\"#rateTypeInput\");\r\n let $periodicityInput = $(\"#periodicityInput dropdown-select\");\r\n let $isCapitalizationInputDiv = $(\"#isCapitalizationInput\");\r\n const $withdrawalCheckbox = $(\"#withdrawalDiv > .input-container-v1 > .checkboxrow\");\r\n const $withdrawalInnerDiv = $(\"#withdrawalInnerDiv\");\r\n const $depositCheckbox = $(\"#depositDiv > .input-container-v1 > .checkboxrow\");\r\n const $depositInnerDiv = $(\"#depositInnerDiv\");\r\n\r\n if ($elem.is($rateTypeInput)) {\r\n switch (this.rateType.value) {\r\n case 1:\r\n $rateTypeInputDiv.removeClass(\"rate-type-2\").removeClass(\"rate-type-3\").addClass(\"rate-type-1\");\r\n $rateTypeInput.attr('kind', \"sharp-right\");\r\n this.fixedRateField.ignore = false;\r\n this.rateByTermField.ignore = true;\r\n this.setDynamicInputIgnore('rateByTerm', true);\r\n this.rateBySumField.ignore = true;\r\n this.setDynamicInputIgnore('rateBySum', true);\r\n break;\r\n case 2:\r\n $rateTypeInputDiv.removeClass(\"rate-type-1\").removeClass(\"rate-type-3\").addClass(\"rate-type-2\");\r\n $rateTypeInput.attr('kind', \"\");\r\n this.fixedRateField.ignore = true;\r\n this.rateByTermField.ignore = true;\r\n this.setDynamicInputIgnore('rateByTerm', true);\r\n this.rateBySumField.ignore = false;\r\n this.setDynamicInputIgnore('rateBySum', false);\r\n break;\r\n case 3:\r\n $rateTypeInputDiv.removeClass(\"rate-type-1\").removeClass(\"rate-type-2\").addClass(\"rate-type-3\");\r\n $rateTypeInput.attr('kind', \"\");\r\n this.fixedRateField.ignore = true;\r\n this.rateByTermField.ignore = false;\r\n this.setDynamicInputIgnore('rateByTerm', false);\r\n this.rateBySumField.ignore = true;\r\n this.setDynamicInputIgnore('rateBySum', true);\r\n break;\r\n }\r\n }\r\n else if ($elem.is($periodicityInput)) {\r\n if (this.periodicity.value === 2) {\r\n $isCapitalizationInputDiv.addClass(\"hidden-control\");\r\n } else {\r\n $isCapitalizationInputDiv.removeClass(\"hidden-control\");\r\n }\r\n }\r\n else if ($elem.is($withdrawalCheckbox)) {\r\n if (this.isWithdrawal) {\r\n $withdrawalInnerDiv.removeClass('hidden-control');\r\n this.withdrawalField.ignore = false;\r\n this.setDynamicInputIgnore('withdrawal', false);\r\n } else {\r\n $withdrawalInnerDiv.addClass('hidden-control');\r\n this.withdrawalField.ignore = true;\r\n this.setDynamicInputIgnore('withdrawal', true);\r\n }\r\n } else if ($elem.is($depositCheckbox)) {\r\n if (this.isDeposit) {\r\n $depositInnerDiv.removeClass('hidden-control');\r\n this.depositField.ignore = false;\r\n this.setDynamicInputIgnore('deposit', false);\r\n } else {\r\n $depositInnerDiv.addClass('hidden-control');\r\n this.depositField.ignore = true;\r\n this.setDynamicInputIgnore('deposit', true);\r\n }\r\n }\r\n\r\n const prevOpenDate = this.openDate && this.openDate.copy();\r\n if (this.termDate) {\r\n this.calculateTermDates();\r\n }\r\n\r\n if(this.openDate){\r\n $('.open-date').html(this.openDate.toLocaleFormat());\r\n $('.open-date-plus-one').html(this.openDate.copy().inc().toLocaleFormat());\r\n }\r\n\r\n if ((prevOpenDate ? !this.openDate : !!this.openDate) || prevOpenDate && prevOpenDate.distanceTo(this.openDate) !== 1){\r\n this.parse($(\"#termDiv date-picker\")[0], autoValidation);\r\n }\r\n \r\n // Combined error for changingRate \r\n function proceedTwoErrors($error1, $error2, $error3, $error4) {\r\n if ($error4[0]) {\r\n $error2.css('display', 'block');\r\n $error3.removeAttr(\"style\");\r\n if ($error4[0].innerHTML.slice(-1) != ';')\r\n $error4[0].innerHTML += ';';\r\n } else {\r\n $error1.removeAttr(\"style\");\r\n $error2.removeAttr(\"style\");\r\n $error3.css('display', 'block');\r\n }\r\n }\r\n function updateChangingRateFields(tableSelector, Input1DivSelector, Input2DivSelector, err1Selector, err2Selector, err3Selector) {\r\n $(tableSelector).find(\".dynamic-list-row\").each((i, elem) => {\r\n const $elem = $(elem);\r\n const $firstInput = $elem.find(`${Input1DivSelector} .base-input`);\r\n const $secondInput = $elem.find(`${Input2DivSelector} .base-input`);\r\n const firstHasErr = $firstInput.hasClass('err');\r\n const secondHasErr = $secondInput.hasClass('err');\r\n const $error1 = $elem.find(err1Selector);\r\n const $error2 = $elem.find(err2Selector);\r\n const $error3 = $elem.find(err3Selector);\r\n const $error4 = $elem.find('.error-text:visible').filter((i, el) => [$error1[0], $error2[0], $error3[0]].indexOf(el) == -1);\r\n if (firstHasErr && secondHasErr) {\r\n if ($firstInput.is(\"input\"))\r\n $firstInput.addClass(\"sharp-right\");\r\n else\r\n $firstInput.attr('kind', \"s-small transparent grip-right\");\r\n $secondInput.addClass(\"sharp-left\");\r\n proceedTwoErrors($error1, $error2, $error3, $error4)\r\n } else {\r\n if ($firstInput.is(\"input\"))\r\n $firstInput.removeClass(\"sharp-right\");\r\n else\r\n $firstInput.attr('kind', \"s-small transparent\");\r\n $secondInput.removeClass(\"sharp-left\");\r\n $error3.removeAttr(\"style\");\r\n if (secondHasErr)\r\n $error2.css('display', 'block');\r\n if (firstHasErr) {\r\n if ($error2.css('display') == 'none') {\r\n if ($error4[0]) {\r\n if ($error4[0].innerHTML.slice(-1) == ';')\r\n $error4[0].innerHTML = $error4[0].innerHTML.slice(0, -1);\r\n } else\r\n $error1.css('display', 'block');\r\n } else\r\n proceedTwoErrors($error1, $error2, $error3, $error4);\r\n }\r\n }\r\n });\r\n }\r\n\r\n updateChangingRateFields('#rateByTermDiv', '.dynamic-list-rate-date', '.dynamic-list-rate-percent', '.dynamic-row-error-date', '.dynamic-row-error-rate', '.error-date-rate');\r\n updateChangingRateFields('#rateBySumDiv', '.dynamic-list-rate-sum', '.dynamic-list-rate-percent', '.dynamic-row-error-sum', '.dynamic-row-error-rate', '.error-sum-rate');\r\n }\r\n\r\n getNextDate(date, dayNumber = null, monthNumber = null, yearNumber = null, isShiftDate = false, dayOfDate = null, isNextDate = true) {\r\n if (yearNumber) {\r\n if (isNextDate) {\r\n date.addMonths(12 * yearNumber);\r\n } else {\r\n date.addMonths(-12 * yearNumber);\r\n }\r\n }\r\n\r\n if (monthNumber) {\r\n if (isNextDate) {\r\n date.addMonths(monthNumber);\r\n } else {\r\n date.addMonths(-monthNumber);\r\n }\r\n }\r\n\r\n if (dayNumber) {\r\n if (isNextDate) {\r\n date.inc(dayNumber);\r\n } else {\r\n date.inc(-dayNumber);\r\n }\r\n }\r\n\r\n if (dayOfDate) {\r\n date.setDateGently(dayOfDate, true);\r\n }\r\n\r\n if (isShiftDate && isNextDate) {\r\n while (true) {\r\n if (!date.isDayOff()) {\r\n return date;\r\n }\r\n date.inc();\r\n }\r\n }\r\n\r\n return date;\r\n }\r\n\r\n getNextPayDate(date, period, multiplier = 1, isShiftDate = false, isNextDate = true) {\r\n let result;\r\n let currentDate = date.copy();\r\n switch (period) {\r\n case 1:\r\n result = this.getNextDate(currentDate, multiplier, null, null, isShiftDate, null, isNextDate);\r\n break;\r\n case 2:\r\n result = this.getNextDate(currentDate, multiplier * 7, null, null, isShiftDate, null, isNextDate);\r\n break;\r\n case 3:\r\n result = this.getNextDate(currentDate, null, multiplier, null, isShiftDate, null, isNextDate);\r\n break;\r\n case 4:\r\n result = this.getNextDate(currentDate, null, multiplier * 3, null, isShiftDate, null, isNextDate);\r\n break;\r\n case 5:\r\n result = this.getNextDate(currentDate, null, null, multiplier, isShiftDate, null, isNextDate);\r\n break;\r\n }\r\n return result;\r\n }\r\n\r\n calculateTermDates() {\r\n let firstDate = this.termDate.copy();\r\n const isOpenDate = this.dateType === 'open';\r\n let secondDate;\r\n let expectedSecondDate;\r\n if (this.termValue) {\r\n switch (this.termType.value) {\r\n case 1:\r\n secondDate = this.getNextPayDate(firstDate, this.periodType.Day, this.termValue, this.isShiftDate, isOpenDate);\r\n expectedSecondDate = this.getNextPayDate(firstDate, this.periodType.Day, this.termValue, false, isOpenDate);\r\n break;\r\n case 2:\r\n secondDate = this.getNextPayDate(firstDate, this.periodType.Week, this.termValue, this.isShiftDate, isOpenDate);\r\n expectedSecondDate = this.getNextPayDate(firstDate, this.periodType.Week, this.termValue, false, isOpenDate);\r\n break;\r\n case 3:\r\n secondDate = this.getNextPayDate(firstDate, this.periodType.Month, this.termValue, this.isShiftDate, isOpenDate);\r\n expectedSecondDate = this.getNextPayDate(firstDate, this.periodType.Month, this.termValue, false, isOpenDate);\r\n break;\r\n case 4:\r\n secondDate = this.getNextPayDate(firstDate, this.periodType.Year, this.termValue, this.isShiftDate, isOpenDate);\r\n expectedSecondDate = this.getNextPayDate(firstDate, this.periodType.Year, this.termValue, false, isOpenDate);\r\n break;\r\n }\r\n }\r\n\r\n if (isOpenDate) {\r\n this.openDate = firstDate;\r\n this.closeDate = secondDate;\r\n this.expectedCloseDate = expectedSecondDate;\r\n } else {\r\n this.openDate = secondDate;\r\n this.expectedCloseDate = firstDate.copy();\r\n if (this.isShiftDate) {\r\n while (true) {\r\n if (!firstDate.isDayOff()) {\r\n break;\r\n }\r\n firstDate.inc();\r\n }\r\n }\r\n this.closeDate = firstDate.copy();\r\n }\r\n }\r\n\r\n handleFunds(data, result, dates, type, excludedFunds, expectedCloseDate) {\r\n let openDate = dates[0];\r\n let closeDate = expectedCloseDate ? expectedCloseDate : dates[dates.length - 1];\r\n let array = [];\r\n for (let i = 0; i < data.length; i++) {\r\n const dataItem = data[i];\r\n if(!dataItem.summary.payment) {\r\n continue;\r\n }\r\n if (dataItem.summary.repeat === \"no\") {\r\n const summaryDate = dataItem.summary.date.copy();\r\n if (dataItem.summary.onlyWorkdays) {\r\n while (true) {\r\n if (!summaryDate.isDayOff()) {\r\n break;\r\n }\r\n summaryDate.inc();\r\n }\r\n }\r\n if (closeDate.goesBefore(summaryDate)){\r\n excludedFunds.push({\r\n date: summaryDate,\r\n sum: dataItem.summary.payment,\r\n type: type,\r\n comment: dataItem.summary.name,\r\n });\r\n continue;\r\n }\r\n dates.push(summaryDate);\r\n array.push({\r\n date: summaryDate,\r\n type: type,\r\n payment: dataItem.summary.payment,\r\n year: summaryDate.date.getFullYear(),\r\n comment: dataItem.summary.name,\r\n });\r\n } else {\r\n let monthCount = 1;\r\n let dayOfMonth = dataItem.summary.day !== -1 ? dataItem.summary.day : 31;\r\n let firstDate = (dataItem.summary.wholePeriod ? openDate : dataItem.summary.dateFrom).copy();\r\n if (firstDate.date.getDate() > dayOfMonth) {\r\n firstDate = this.getNextDate(firstDate.copy(), null, 1, null, dataItem.summary.onlyWorkdays, dayOfMonth);\r\n } else {\r\n firstDate.setDateGently(dayOfMonth, true);\r\n }\r\n \r\n if (dataItem.summary.onlyWorkdays){\r\n while (true) {\r\n if (!firstDate.isDayOff()) {\r\n break;\r\n }\r\n firstDate.inc();\r\n }\r\n } \r\n\r\n if (!firstDate.goesBefore(closeDate)) {\r\n excludedFunds.push({\r\n date: dataItem.summary.dateFrom,\r\n sum: dataItem.summary.payment,\r\n type: type,\r\n comment: dataItem.summary.name,\r\n });\r\n continue;\r\n } \r\n\r\n if (openDate.goesBefore(firstDate)) {\r\n array.push({\r\n date: firstDate,\r\n type: type,\r\n payment: dataItem.summary.payment,\r\n year: firstDate.date.getFullYear(),\r\n comment: dataItem.summary.name,\r\n });\r\n dates.push(firstDate);\r\n }\r\n\r\n let lastDate = (!dataItem.summary.wholePeriod && dataItem.summary.dateTo.goesBefore(closeDate))\r\n ? dataItem.summary.dateTo.copy()\r\n : closeDate.copy();\r\n\r\n while (true) {\r\n let nextDate = this.getNextDate(firstDate.copy(), null, monthCount, null, dataItem.summary.onlyWorkdays, dayOfMonth);\r\n if (lastDate.goesBefore(nextDate)) {\r\n break;\r\n }\r\n dates.push(nextDate);\r\n array.push({ \r\n date: nextDate, \r\n type: type, \r\n payment: dataItem.summary.payment, \r\n year: nextDate.date.getFullYear(),\r\n comment: dataItem.summary.name,\r\n }); \r\n if (monthCount) {\r\n monthCount++;\r\n }\r\n }\r\n }\r\n }\r\n\r\n while (array.length > 0) {\r\n let item = array.shift();\r\n let equalItems = array.filter(x => x.date.isEqualTo(item.date));\r\n let fullPayment = item.payment;\r\n for (let i = 0; i < equalItems.length; i++) {\r\n fullPayment += equalItems[i].payment;\r\n }\r\n result.push({ \r\n date: item.date, \r\n type: type, \r\n payment: fullPayment, \r\n year: item.date.date.getFullYear(),\r\n excluded: true,\r\n comment: item.comment\r\n });\r\n array = array.filter(x => !x.date.isEqualTo(item.date));\r\n }\r\n }\r\n\r\n calculate(params) {\r\n if (params.autoValidation) {\r\n return false;\r\n }\r\n\r\n function getDaysInYear(date) {\r\n return date.fixDayMonthYear(1, 1).distanceTo(date.fixDayMonthYear(31, 12));\r\n }\r\n\r\n function getRateBySum(sum, ratesBySum) {\r\n for (let i = ratesBySum.length - 1; i >= 0; i--) {\r\n if (sum >= ratesBySum[i].sum) {\r\n return ratesBySum[i].rate;\r\n }\r\n }\r\n return 0;\r\n }\r\n\r\n function getRateByTerm(date, ratesByTerm) {\r\n for (let i = ratesByTerm.length - 1; i >= 0; i--) {\r\n if (!date.goesBefore(ratesByTerm[i].date)) {\r\n return ratesByTerm[i].rate;\r\n }\r\n }\r\n return 0;\r\n }\r\n\r\n function addEndOfYearDates(dates) {\r\n var dateFrom = dates[0].copy();\r\n var dateTo = dates[dates.length - 1].copy();\r\n for (var i = dateFrom.date.getFullYear(); i < dateTo.date.getFullYear(); i++) {\r\n var date = new DatePoint('31.12.' + i);\r\n dates.push(date);\r\n }\r\n\r\n dates = distinctDates(dates);\r\n dates.sort((a, b) => a.goesBefore(b) ? -1 : 1);\r\n\r\n return dates;\r\n }\r\n\r\n function removeDatesBeforeOpenDate(dates, openDate) {\r\n return dates.filter(x => !x.goesBefore(openDate));\r\n }\r\n\r\n\r\n this.calculateTermDates();\r\n\r\n let dates = [];\r\n const payDates = [];\r\n let nextDate;\r\n let multiplier = 1;\r\n dates.push(this.openDate.copy());\r\n payDates.push(this.openDate.copy());\r\n while (true) {\r\n switch (this.periodicity.value) {\r\n case 1:\r\n nextDate = this.getNextPayDate(this.openDate, this.periodType.Day, multiplier, this.isShiftDate);\r\n break;\r\n case 3:\r\n nextDate = this.getNextPayDate(this.openDate, this.periodType.Month, multiplier, this.isShiftDate);\r\n break;\r\n case 4:\r\n nextDate = this.getNextPayDate(this.openDate, this.periodType.Quarter, multiplier, this.isShiftDate);\r\n break;\r\n case 5:\r\n nextDate = this.getNextPayDate(this.openDate, this.periodType.Year, multiplier, this.isShiftDate);\r\n break;\r\n }\r\n if (this.periodicity.value === 2 || !nextDate.goesBefore(this.closeDate)) {\r\n break;\r\n }\r\n dates.push(nextDate);\r\n payDates.push(nextDate);\r\n multiplier++;\r\n }\r\n dates.push(this.closeDate.copy());\r\n payDates.push(this.closeDate.copy());\r\n\r\n this.finalRatesByTerm = [];\r\n switch (this.rateType.value) {\r\n case 1:\r\n break;\r\n case 2:\r\n this.rateBySum.sort((a, b) => a.sum - b.sum);\r\n break;\r\n case 3:\r\n this.rateByTerm.forEach(x => {\r\n if (!this.expectedCloseDate || (this.expectedCloseDate && !this.expectedCloseDate.goesBefore(x.date))) {\r\n this.finalRatesByTerm.push(x);\r\n }\r\n });\r\n this.finalRatesByTerm.sort((a, b) => a.date.goesBefore(b.date) ? -1 : 1);\r\n let index = 0;\r\n while (this.finalRatesByTerm[index] && !this.closeDate.goesBefore(this.finalRatesByTerm[index].date)) {\r\n dates.push(this.finalRatesByTerm[index].date.copy().dec());\r\n index++;\r\n }\r\n dates = distinctDates(dates);\r\n dates.sort((a, b) => a.goesBefore(b) ? -1 : 1);\r\n break;\r\n }\r\n\r\n this.excludedFunds = [];\r\n const withdrawals = [];\r\n if (this.isWithdrawal) {\r\n this.handleFunds(this.withdrawal.filter(w => !w.summary.defaultInputs), withdrawals, dates, 'withdrawal', this.excludedFunds, this.expectedCloseDate);\r\n dates = distinctDates(dates);\r\n dates.sort((a, b) => a.goesBefore(b) ? -1 : 1);\r\n }\r\n\r\n const deposits = [];\r\n if (this.isDeposit) {\r\n this.handleFunds(this.deposit.filter(d => !d.summary.defaultInputs), deposits, dates, 'deposit', this.excludedFunds, this.expectedCloseDate);\r\n dates = distinctDates(dates);\r\n dates.sort((a, b) => a.goesBefore(b) ? -1 : 1);\r\n }\r\n\r\n dates = addEndOfYearDates(dates);\r\n dates = removeDatesBeforeOpenDate(dates, this.openDate);\r\n\r\n let detalization = [];\r\n let dtFrom = dates.shift();\r\n let dtTo = dtFrom.copy();\r\n let currentSum = this.depositSum;\r\n let intervalSum = this.depositSum;\r\n let totalPercent = 0;\r\n let rate = 0;\r\n this.closureDate = null;\r\n this.previousSum = 0;\r\n this.lastWithdrawal = 0;\r\n this.isClosure = false;\r\n this.isExcess = false;\r\n this.capitalizationEnabled = this.isCapitalization && this.periodicity.value !== 2;\r\n while (dtFrom && !this.isClosure && !this.isExcess) {\r\n if (dates.length > 0) {\r\n dtFrom = dtFrom.inc();\r\n dtTo = dates[0].copy();\r\n const daysInYear = getDaysInYear(dtFrom);\r\n const days = dtFrom.distanceTo(dtTo);\r\n switch (this.rateType.value) {\r\n case 1:\r\n rate = this.fixedRate;\r\n break;\r\n case 2:\r\n rate = getRateBySum(this.capitalizationEnabled ? intervalSum : currentSum, this.rateBySum)\r\n break;\r\n case 3:\r\n rate = getRateByTerm(dtFrom, this.finalRatesByTerm)\r\n break;\r\n }\r\n\r\n let percent = 0;\r\n let formula = '';\r\n if (this.capitalizationEnabled) {\r\n percent = tools.roundNumber((intervalSum * (1 + ((rate / 100) * (days / daysInYear)))) - intervalSum, 2);\r\n formula = `${tools.getLocaleSum(intervalSum)} × ((1 + ${tools.getLocaleSum(rate)} / 100 × (${days} / ${daysInYear}) ^ 1) − ${tools.getLocaleSum(intervalSum)}`;\r\n currentSum = tools.roundNumber(currentSum + percent, 2);\r\n const item = payDates.find(x => x.isEqualTo(dtTo));\r\n if (item) {\r\n intervalSum = currentSum;\r\n }\r\n } else {\r\n percent = tools.roundNumber(intervalSum * (rate / 100) * (days / daysInYear), 2);\r\n formula = `${tools.getLocaleSum(intervalSum, 2)} × ${tools.getLocaleSum(rate)} / 100 × (${days} / ${daysInYear})`;\r\n }\r\n\r\n totalPercent += percent;\r\n\r\n detalization.push({\r\n year: dtFrom.date.getFullYear(),\r\n daysInYear: daysInYear,\r\n span: dtFrom.getSpan(dtTo),\r\n days: days,\r\n rate: rate,\r\n percent: percent,\r\n formula: formula,\r\n deposit: currentSum,\r\n type: 'add',\r\n });\r\n\r\n if (this.isDeposit) {\r\n const item = deposits.find(x => x.date.isEqualTo(dtTo));\r\n if (item) {\r\n item.excluded = false;\r\n currentSum += item.payment;\r\n intervalSum += item.payment;\r\n item.stringDate = item.date.toLocaleFormat();\r\n item.deposit = currentSum > 0 ? currentSum : 0;\r\n item.rate = rate;\r\n detalization.push(item);\r\n }\r\n }\r\n\r\n if (this.isWithdrawal) {\r\n const item = withdrawals.find(x => x.date.isEqualTo(dtTo));\r\n if (item) {\r\n item.excluded = false;\r\n currentSum -= item.payment;\r\n intervalSum -= item.payment;\r\n if (intervalSum < 0) {\r\n intervalSum = currentSum;\r\n }\r\n item.stringDate = item.date.toLocaleFormat();\r\n item.deposit = currentSum > 0 ? currentSum : 0;\r\n item.rate = rate;\r\n detalization.push(item);\r\n }\r\n }\r\n }\r\n\r\n dtFrom = dates.shift();\r\n this.closureDate = dtTo;\r\n const roundedCurrentSum = tools.roundNumber(currentSum, 2);\r\n if (roundedCurrentSum < 0) {\r\n this.previousSum = detalization[detalization.length - 2].deposit;\r\n this.lastWithdrawal = detalization[detalization.length - 1].payment;\r\n this.isExcess = true;\r\n currentSum = 0;\r\n } else if (roundedCurrentSum === 0) {\r\n this.isClosure = true;\r\n currentSum = 0;\r\n }\r\n }\r\n\r\n this.groupedDetalization = [];\r\n let arr = [];\r\n for (let i = 0; i < detalization.length; i++) {\r\n if (i !== 0 && detalization[i - 1].year !== detalization[i].year) {\r\n this.groupedDetalization.push(arr.slice());\r\n arr = [];\r\n }\r\n arr.push(detalization[i]);\r\n }\r\n this.groupedDetalization.push(arr.slice());\r\n\r\n this.totalPercent = totalPercent;\r\n this.totalDeposit = tools.roundNumber(currentSum, 2);\r\n\r\n let termVerb = \"\";\r\n switch (this.termType.value) {\r\n case 1:\r\n termVerb = tools.verboseCountingValue(this.termValue, [[\"день\", \"дня\", \"дней\"]]);\r\n break;\r\n case 2:\r\n termVerb = tools.verboseCountingValue(this.termValue, [[\"неделя\", \"недели\", \"недель\"]]);\r\n break;\r\n case 3:\r\n termVerb = tools.verboseCountingValue(this.termValue, [[\"месяц\", \"месяца\", \"месяцев\"]]);\r\n break;\r\n case 4:\r\n termVerb = tools.verboseCountingValue(this.termValue, [[\"год\", \"года\", \"лет\"]]);\r\n break;\r\n }\r\n\r\n this.mainPeriodString = `${this.openDate.toString()} – ${this.closeDate.toString()} (${termVerb})`;\r\n \r\n withdrawals.forEach(item => {\r\n if (item.excluded) {\r\n this.excludedFunds.push({\r\n date: item.date,\r\n sum: item.payment,\r\n type: 'withdrawal',\r\n comment: item.comment,\r\n });\r\n }\r\n });\r\n\r\n deposits.forEach(item => {\r\n if (item.excluded) {\r\n this.excludedFunds.push({\r\n date: item.date,\r\n sum: item.payment,\r\n type: 'deposit',\r\n comment: item.comment,\r\n });\r\n }\r\n });\r\n\r\n this.excludedFundMessage = '';\r\n this.excludedFundsNoteHTML = '';\r\n let excludedWithdrawalsHTML = '

Частичные снятия

';\r\n let excludedDepositsHTML = '

Пополнения вклада

';\r\n this.isExcludedFund = false;\r\n if (this.excludedFunds.length > 0) {\r\n this.isExcludedFund = true;\r\n this.excludedFunds.forEach(item => {\r\n item.date = item.date.toLocaleFormat();\r\n this.excludedFundMessage = `${(item.type === 'withdrawal' ? 'Частичное снятие' : 'Пополнение вклада')} ${item.date} на ${tools.getLocaleSumInRubbles(item.sum)} не участвует в расчёте.`;\r\n const noteMessage = `

${item.date}${tools.getLocaleSumInRubbles(item.sum)}

`\r\n + (item.comment ? `

${item.comment}

` : '');\r\n if (item.type === 'withdrawal') {\r\n excludedWithdrawalsHTML += noteMessage;\r\n } else {\r\n excludedDepositsHTML += noteMessage;\r\n }\r\n });\r\n }\r\n this.excludedFundsNoteHTML += `
${excludedWithdrawalsHTML}
${excludedDepositsHTML}
`;\r\n\r\n this.rateInfo = '';\r\n switch(this.rateType.value) {\r\n case 1:\r\n this.rateInfo += ` ${tools.getLocaleNumber(this.fixedRate, { minPrecision: 0, maxPrecision: 3 })}%`;\r\n break;\r\n case 2:\r\n this.rateBySum.forEach((item, index) => {\r\n if(index !== 0){\r\n this.rateInfo += ',';\r\n }\r\n this.rateInfo += ` от ${tools.getLocaleSumInRubbles(item.sum)} – ${tools.getLocaleNumber(item.rate, { minPrecision: 0, maxPrecision: 3 })}%`;\r\n });\r\n break;\r\n case 3:\r\n this.finalRatesByTerm.forEach((item, index) => {\r\n if(index !== 0){\r\n this.rateInfo += ',';\r\n }\r\n this.rateInfo += ` с ${item.date.toLocaleFormat()} – ${tools.getLocaleNumber(item.rate, { minPrecision: 0, maxPrecision: 3 })}%`;\r\n });\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n beforeRender() {\r\n $('.total-deposit').prop('title', tools.verboseNumber(this.totalDeposit));\r\n $('.total-percent').prop('title', tools.verboseNumber(this.totalPercent));\r\n\r\n $('.excluded-funds-trigger').text('Развернуть');\r\n $('.excluded-funds-trigger').addClass('hidden-notification');\r\n $('.excluded-funds-notification').addClass('hidden-control');\r\n }\r\n\r\n hideResults() {\r\n super.hideResults();\r\n this.sendStatisticMessage('Is_Made_With_Error');\r\n }\r\n\r\n renderError() {\r\n super.renderError();\r\n this.sendStatisticMessage('Is_Made_With_Error');\r\n }\r\n\r\n setDynamicInputIgnore(inputName, ignore) {\r\n this.inputFields.filter(f => !f.name.indexOf(inputName + \"[]\")).forEach(f => f.ignore = ignore);\r\n }\r\n}\r\n\r\n$(function () {\r\n var calc = new VklCalculator();\r\n});","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","import {_BaseObjectField } from \"../../common/basic_fields.js\";\r\nimport { DatePoint } from '../../js/datelib.js';\r\nimport mainStyles from '../../../css/site.scss';\r\nimport styles from './styles.scss';\r\n\r\nfunction injectionRemoval(s) {\r\n return s ? tools.escapeTags(tools.removeExtraSpace(s)) : \"\";\r\n}\r\n\r\nclass SummaryInput extends HTMLElement {\r\n /*\r\n * Attrributes:\r\n * type\r\n * css-salt\r\n * date-from\r\n * date-to\r\n * \r\n * Structure of 'this._value': {\r\n * type: repayment - \"Досрочное погашение\", withdrawal - \"Частичное снятие\", replenishment - \"Пополнение вклада\"\r\n * name - user's commentary\r\n * payment - number\r\n * if type = 'repayment':\r\n * purpose\r\n * repeat: 'no', 'month', 'quarter' or 'year'\r\n * day - calculated value, couldn't be set directly\r\n * month - calculated value, couldn't be set directly\r\n * quarter - calculated value, couldn't be set directly\r\n * dateFrom - calculated value, couldn't be set directly\r\n * dateTo - calculated value, couldn't be set directly\r\n * mYFrom\r\n * mYTo\r\n * yearFrom\r\n * yearTo\r\n * date\r\n * onlyWorkdays\r\n * dMYDropdownValue\r\n * dayDropdownValue\r\n * dMDropdownValue\r\n * dQDropdownValue\r\n * wholePeriod\r\n * defaultInputs - are important values equal to the default values\r\n * }\r\n */\r\n constructor() {\r\n super();\r\n\r\n //1. Constants and the default value\r\n\r\n //Catalogue of supported types\r\n const allowedTypes = [\"repayment\", \"withdrawal\", \"replenishment\"];\r\n\r\n //Get attributes\r\n const type = this.getAttribute('type');\r\n const cssSalt = this.getAttribute('css-salt');\r\n\r\n //Set unique id (only for checkbox, for now)\r\n const id = `${type}_${Math.floor(Math.random() * 10000)}${Date.now()}`;\r\n\r\n //Fill the dropdowns\r\n const basicRepeatOptions = [\r\n { text: 'единовременно', value: 'no' },\r\n { text: 'повторять раз в месяц', value: 'month' },\r\n { text: 'повторять раз в год', value: 'year' }\r\n ];\r\n\r\n const extendedRepeatOptions = [\r\n { text: 'единовременно', value: 'no' },\r\n { text: 'повторять ежемесячно', value: 'month' },\r\n ];\r\n\r\n const dropdowns = {\r\n purpose: [{ text: 'уменьшение суммы платежа', value: 'sum' }, { text: 'уменьшение срока кредита', value: 'term' }],\r\n repeat: type == \"repayment\" ? basicRepeatOptions : extendedRepeatOptions,\r\n };\r\n\r\n //Default value\r\n this._defaultValue = {\r\n type,\r\n name: \"\",\r\n payment: \"\",\r\n repeat: 'no',\r\n day: 0,\r\n month: 0,\r\n date: '',\r\n dateFrom: '',\r\n dateTo: '',\r\n mYFrom: '',\r\n mYTo: '',\r\n yearFrom: '',\r\n yearTo: '',\r\n dayDropdownValue: '',\r\n dMDropdownValue: '',\r\n dQDropdownValue: '',\r\n wholePeriod: true,\r\n onlyWorkdays: false,\r\n defaultInputs: true\r\n };\r\n if (type == \"repayment\") {\r\n this._defaultValue.purpose = null;\r\n }\r\n\r\n //2. Inner functions\r\n\r\n const setDays = (lastDay = 31) => {\r\n dropdowns.days = [];\r\n for (let i = 1; i <= lastDay; i++) {\r\n dropdowns.days.push({ text: i < 10 ? '0' + i : i, value: i });\r\n }\r\n };\r\n\r\n const getDropdownFiller = (name, selectedValue) => {\r\n let filler = '';\r\n dropdowns[name].forEach(o => {\r\n filler += '';\r\n });\r\n return filler;\r\n };\r\n\r\n const getDropdownText = (name, value) => {\r\n const el = dropdowns[name].find(o => o.value == value);\r\n return el ? el.text : null;\r\n };\r\n\r\n //Update outer information\r\n const updateText = () => {\r\n //Check type\r\n if (!allowedTypes.find(t => t == type))\r\n return;\r\n\r\n //name\r\n this.$elements.$nameText.html(this._value.name || ``);\r\n if (this._value.name) {\r\n this.$elements.$nameText.removeClass('hidden-control');\r\n } else\r\n this.$elements.$nameText.addClass('hidden-control');\r\n\r\n //money\r\n this.$elements.$moneyText.html(\r\n (this._value.payment || 0).toLocaleString('ru-RU', { minimumFractionDigits: 2 }) + ` \\u20BD`\r\n );\r\n\r\n //fresh - show only when the window wasn't changed\r\n this.$elements.$freshText.html(`укажите сумму` + (type == \"repayment\" ? ', тип' : '') +\r\n (this._value.repeat == \"no\" ? ' и дату ' + (type == \"repayment\" ? 'погашения' : '') + (type == \"withdrawal\" ? 'снятия' : '') + (type == \"replenishment\" ? 'пополнения' : '') :\r\n this._value.wholePeriod ? ' и дату повторения' : ', дату и период повторения'));\r\n if (this._value.defaultInputs)\r\n this.$elements.$freshText.removeClass('hidden-control');\r\n else\r\n this.$elements.$freshText.addClass('hidden-control');\r\n\r\n if (type == \"repayment\") {\r\n //purpose\r\n this.$elements.$purposeText.html(getDropdownText('purpose', this._value.purpose));\r\n if (!this._value.defaultInputs && this._value.purpose)\r\n this.$elements.$purposeText.removeClass('hidden-control');\r\n else\r\n this.$elements.$purposeText.addClass('hidden-control');\r\n }\r\n\r\n //repeat\r\n let spanRepeat = `повторять `;\r\n switch (this._value.repeat) {\r\n case 'year': {\r\n if (this._value.dMDropdownValue) {\r\n spanRepeat += `${this.$elements.$dMDateDropdown[0].text} каждого года`;\r\n }\r\n break;\r\n }\r\n case 'month': {\r\n switch (this._value.day) {\r\n case -1: {\r\n spanRepeat += `в конце месяца`;\r\n break;\r\n }\r\n case 0: {\r\n break;\r\n }\r\n default: {\r\n spanRepeat += `${this.$elements.$dayDateDropdown[0].text} каждого месяца`;\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n case 'no': {\r\n spanRepeat = this._value.date ? `единовременно ${this._value.date.toString()}` : ``;\r\n break;\r\n }\r\n case 'day': {\r\n spanRepeat += `каждый день`;\r\n break;\r\n }\r\n }\r\n \r\n const monthsNames = [\r\n {to: 'январь', from: 'января'}, {to: 'февраль', from: 'февраля'},\r\n {to: 'март', from: 'марта'}, {to: 'апрель', from: 'апреля'},\r\n {to: 'май', from: 'мая'}, {to: 'июнь', from: 'июня'},\r\n {to: 'июль', from: 'июля'}, {to: 'август', from: 'августа'},\r\n {to: 'сентябрь', from: 'сентября'}, {to: 'октябрь', from: 'октября'},\r\n {to: 'ноябрь', from: 'ноября'}, {to: 'декабрь', from: 'декабря'}\r\n ];\r\n if (this._value.repeat != 'no') {\r\n if (this._value.wholePeriod)\r\n spanRepeat += ` на протяжении всего срока ${type == \"repayment\" ? 'кредита' : 'вклада'}`;\r\n else {\r\n let dateFromText = '';\r\n let dateToText = '';\r\n switch (this._value.repeat) {\r\n case 'year': {\r\n if (this._value.dateFrom)\r\n dateFromText = `${this._value.dateFrom.date.getFullYear()} года`;\r\n if (this._value.dateTo)\r\n dateToText = `${this._value.dateTo.date.getFullYear()} год`;\r\n break;\r\n }\r\n case 'month': {\r\n if (this._value.dateFrom)\r\n dateFromText = `${monthsNames[this._value.dateFrom.date.getMonth()].from} ${this._value.dateFrom.date.getFullYear()} года`;\r\n if (this._value.dateTo)\r\n dateToText = `${monthsNames[this._value.dateTo.date.getMonth()].to} ${this._value.dateTo.date.getFullYear()} года`;\r\n break;\r\n }\r\n }\r\n if (dateFromText && dateToText)\r\n spanRepeat += ` с ${dateFromText} по ${dateToText}`;\r\n }\r\n }\r\n\r\n this.$elements.$repeatText.html(spanRepeat);\r\n if (!this._value.defaultInputs && (this._value.repeat == \"no\" && this._value.date || this._value.repeat != \"no\" && (this._value.day || this._value.wholePeriod || this._value.dateFrom && this._value.dateTo))) {\r\n this.$elements.$repeatDiv.removeClass('hidden-control');\r\n } else\r\n this.$elements.$repeatDiv.addClass('hidden-control');\r\n\r\n //onlyWorkdays\r\n if (!this._value.defaultInputs && this._value.onlyWorkdays)\r\n this.$elements.$onlyWorkdaysDiv.removeClass('hidden-control');\r\n else\r\n this.$elements.$onlyWorkdaysDiv.addClass('hidden-control');\r\n };\r\n\r\n //Change fields in the window after changing repeat type\r\n const afterChangeInRepeat = () => {\r\n this._value.repeat = this.$elements.$repetitionDropdown.val();\r\n\r\n switch (this._value.repeat) {\r\n case \"year\": {\r\n this.$elements.$dMYDateDropdown.addClass('hidden-control');\r\n this.$elements.$dayDateDropdown.addClass('hidden-control');\r\n this.$elements.$dMDateDropdown.removeClass('hidden-control');\r\n this.$elements.$period.removeClass('hidden-control');\r\n this.$elements.$repetitionDropdown.attr('kind', \"sharp-right\");\r\n this.$elements.$datesMY.addClass('hidden-control');\r\n this.$elements.$datesYear.removeClass('hidden-control');\r\n break;\r\n }\r\n case \"month\": {\r\n this.$elements.$dMYDateDropdown.addClass('hidden-control');\r\n this.$elements.$dayDateDropdown.removeClass('hidden-control');\r\n this.$elements.$dMDateDropdown.addClass('hidden-control');\r\n this.$elements.$period.removeClass('hidden-control');\r\n this.$elements.$repetitionDropdown.attr('kind', \"sharp-right\");\r\n this.$elements.$datesMY.removeClass('hidden-control');\r\n this.$elements.$datesYear.addClass('hidden-control');\r\n break;\r\n }\r\n case \"no\": {\r\n this.$elements.$dMYDateDropdown.removeClass('hidden-control');\r\n this.$elements.$dayDateDropdown.addClass('hidden-control');\r\n this.$elements.$dMDateDropdown.addClass('hidden-control');\r\n this.$elements.$period.addClass('hidden-control');\r\n this.$elements.$repetitionDropdown.attr('kind', \"sharp-right\");\r\n break;\r\n }\r\n case \"day\": {\r\n // currently unused\r\n break;\r\n }\r\n default: {\r\n break;\r\n }\r\n }\r\n };\r\n\r\n const calculateOutputValues = () => {\r\n this._value.day = 0;\r\n this._value.month = 0;\r\n this._value.dateFrom = '';\r\n this._value.dateTo = '';\r\n switch (this._value.repeat) {\r\n case 'month': {\r\n if (this._value.dayDropdownValue)\r\n this._value.day = +this._value.dayDropdownValue;\r\n if (this._value.mYFrom)\r\n this._value.dateFrom = new DatePoint('01.' + this._value.mYFrom);\r\n if (this._value.mYTo) {\r\n this._value.dateTo = new DatePoint('01.' + this._value.mYTo);\r\n this._value.dateTo.addMonths(1);\r\n this._value.dateTo.inc(-1);\r\n }\r\n break;\r\n }\r\n case 'year': {\r\n if (this._value.dMDropdownValue) {\r\n const array = this._value.dMDropdownValue.split(\"\\.\");\r\n this._value.day = +array[0];\r\n this._value.month = +array[1];\r\n }\r\n if (this._value.yearFrom)\r\n this._value.dateFrom = new DatePoint('01.01.' + this._value.yearFrom);\r\n if (this._value.yearTo) {\r\n this._value.dateTo = new DatePoint('01.01.' + (+this._value.yearTo+1));\r\n this._value.dateTo.inc(-1);\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n\r\n const recieveValues = () => {\r\n this._value.name = injectionRemoval(this.$elements.$nameInput.val());\r\n this._value.payment = this.$elements.$sumInput.val() ? tools.parseLocaleFloat(this.$elements.$sumInput.val()) : this._defaultValue.payment;\r\n\r\n if (type == \"repayment\") {\r\n this._value.purpose = this.$elements.$purposeDropdown.val();\r\n }\r\n\r\n this._value.onlyWorkdays = this.$elements.$onlyWorkdaysCheckbox.prop('checked');\r\n this._value.repeat = this.$elements.$repetitionDropdown.val();\r\n this._value.wholePeriod = this.$elements.$radioButtons.find(\"input[type=radio]:checked\").val() == \"whole\";\r\n\r\n this._value.dayDropdownValue = this.$elements.$dayDateDropdown.val();\r\n this._value.dMDropdownValue = this.$elements.$dMDateDropdown.val();\r\n const dMYDateDropdown =this.$elements.$dMYDateDropdown.val();\r\n this._value.date = dMYDateDropdown ? new DatePoint(dMYDateDropdown, true) : '';\r\n this._value.mYFrom = this.$elements.$datesMYFrom.val();\r\n this._value.mYTo = this.$elements.$datesMYTo.val();\r\n this._value.yearFrom = this.$elements.$datesYearFrom.val();\r\n this._value.yearTo = this.$elements.$datesYearTo.val();\r\n\r\n calculateOutputValues();\r\n\r\n this._value.defaultInputs = this._defaultValue.defaultInputs;\r\n if (\r\n this._value.name != this._defaultValue.name ||\r\n this._value.payment != this._defaultValue.payment ||\r\n (this._value.repeat == 'no' &&\r\n this._value.date != this._defaultValue.date) ||\r\n (this._value.repeat != 'no' &&\r\n (this._value.dateFrom != this._defaultValue.dateFrom ||\r\n this._value.dateTo != this._defaultValue.dateTo)) ||\r\n (this._value.repeat == 'month' &&\r\n this._value.dayDropdownValue != this._defaultValue.dayDropdownValue) ||\r\n (this._value.repeat == 'year' &&\r\n this._value.dQDropdownValue != this._defaultValue.dQDropdownValue)\r\n )\r\n this._value.defaultInputs = false;\r\n };\r\n\r\n this.setValues = (newValues) => {\r\n const values = newValues || this._defaultValue;\r\n\r\n this._value = tools.deepcopy(values);\r\n this._value.type = type; //type shouldn't be changed\r\n\r\n this.$elements.$nameInput.val(injectionRemoval(values.name));\r\n this.$elements.$sumInput.val(values.payment);\r\n\r\n if (type == \"repayment\") {\r\n this.$elements.$purposeDropdown.val(values.purpose);\r\n }\r\n\r\n this.$elements.$radioButtons.find(\"input[type=radio]\").val([values.wholePeriod ? \"whole\" : \"dates\"]);\r\n\r\n this.$elements.$onlyWorkdaysCheckbox.prop('checked', values.onlyWorkdays);\r\n this.$elements.$repetitionDropdown.val(values.repeat);\r\n this.$elements.$dMYDateDropdown.val(values.date.toString());\r\n this.$elements.$dayDateDropdown.val(values.dayDropdownValue);\r\n this.$elements.$dMDateDropdown.val(values.dMDropdownValue);\r\n this.$elements.$datesMYFrom.val(values.mYFrom);\r\n this.$elements.$datesMYTo.val(values.mYTo);\r\n this.$elements.$datesYearFrom.val(values.yearFrom);\r\n this.$elements.$datesYearTo.val(values.yearTo);\r\n\r\n calculateOutputValues();\r\n\r\n afterChangeInRepeat();\r\n updateText();\r\n };\r\n\r\n const createHtml = () => {\r\n //Inside the window\r\n let title = \"\";\r\n switch (type) {\r\n case \"repayment\": {\r\n title = \"Досрочное погашение\";\r\n break;\r\n }\r\n case \"withdrawal\": {\r\n title = \"Частичное снятие\";\r\n break;\r\n }\r\n case \"replenishment\": {\r\n title = \"Пополнение вклада\";\r\n break;\r\n }\r\n }\r\n\r\n const pencilicon = ``;\r\n const purposeDropdown = type == \"repayment\" ? `
` : ``;\r\n const dMYDateDropdown = `
${type == \"repayment\" ? \"Дата досрочного погашения\" : \"Выберите дату\"}
`;\r\n const dayDateDropdown = ``;\r\n const dMDateDropdown = ``;\r\n const mYFromDateDropdown = `
Начало периода повторения
`;\r\n const mYToDateDropdown = `
Конец периода повторения
`;\r\n const yearFromDateDropdown = `
Начало периода повторения
`;\r\n const yearToDateDropdown = `
Конец периода повторения
`;\r\n const radioButtons = `
` +\r\n `
` +\r\n `
` +\r\n `
`;\r\n const onlyWorkdaysCheckbox = `
` +\r\n `
` +\r\n `` +\r\n `` +\r\n `
`;\r\n\r\n const windowDiv = `
` +\r\n `
` +\r\n `${pencilicon}
` +\r\n `
` +\r\n `${purposeDropdown}` +\r\n `
` +\r\n `
` +\r\n `${dMYDateDropdown}` + `${dayDateDropdown}` + `${dMDateDropdown}` +\r\n `
` +\r\n `${onlyWorkdaysCheckbox}` +\r\n `
` +\r\n `
${radioButtons}
` +\r\n `
` +\r\n `
${mYFromDateDropdown}

${mYToDateDropdown}
` +\r\n `
${yearFromDateDropdown}

${yearToDateDropdown}
` +\r\n `
`;\r\n\r\n //Outside the window\r\n const errors1 = `
укажите сумму
`;\r\n const errors2 = `
тестовая ошибка
` +\r\n `
укажите тип погашения
` +\r\n `
укажите дату${type === 'withdrawal' ? ' снятия' : ''}${type === \"replenishment\" ? ' пополнения' : ''}
` +\r\n `
укажите дату повторения
` +\r\n `
укажите период повторения
` +\r\n `
укажите начало периода повторения
` +\r\n `
укажите конец периода повторения
` +\r\n `
расчёт возможен с 01.01.1995
` +\r\n `
${type == \"repayment\" ? `дата конца платежей не может быть раньше даты начала платежей` : ``}
` +\r\n `
${type == \"repayment\" ? `досрочное погашение не может быть раньше даты открытия кредита` : `дата ${type === 'withdrawal' ? 'частичного снятия' : ''}${type === \"replenishment\" ? 'пополнения вклада' : ''} не может быть раньше или равна дате открытия вклада`}
` +\r\n `
${type == \"repayment\" ? `досрочное погашение не может быть позже даты закрытия кредита` : `дата ${type === 'withdrawal' ? 'частичного снятия' : ''}${type === \"replenishment\" ? 'пополнения вклада' : ''} не может быть позже даты закрытия вклада`}
` +\r\n `
дата конца периода не может быть раньше даты начала периода
` +\r\n `
выбран невалидный день месяца для повтора
`;\r\n\r\n const plateText = allowedTypes.find(t => t == type) ?\r\n `
` +\r\n `
` +\r\n `
${errors1}
` +\r\n `
` +\r\n (type == \"repayment\" ? `
` : ``) +\r\n `
` +\r\n `
` +\r\n `${type == \"repayment\" ? 'переносить дату платежей, если платёж приходится на нерабочий день' : ''}` +\r\n `${type == \"withdrawal\" ? 'переносить снятие, если оно приходится на нерабочий день' : ''}` +\r\n `${type == \"replenishment\" ? 'переносить пополнение, если оно приходится на нерабочий день' : ''}` +\r\n `
` +\r\n `
${errors2}
`\r\n : `Error: unsupported type`;\r\n const plateDiv = `
${plateText}
${pencilicon}
`;\r\n\r\n //scss\r\n const stylesHtml = ``;\r\n\r\n //Add html to the element\r\n this.attachShadow({ mode: 'open' });\r\n this.shadowRoot.innerHTML = stylesHtml + `
${plateDiv}${windowDiv}
`;\r\n };\r\n\r\n //Open and close the window\r\n const inputBreaker = (e) => {\r\n e.stopPropagation();\r\n };\r\n\r\n this.closeWindow = () => {\r\n if (this.$elements.$windowDiv.hasClass('active')) {\r\n this.$elements.$windowDiv.removeClass('active');\r\n $(window).off(\"click\", closeWindowOutside);\r\n this.$elements.$closeButton.off(\"click\", this.closeWindow);\r\n this.$elements.$repetitionDropdown.off('change', afterChangeInRepeat);\r\n this.$elements.$nameInput.off('change', inputBreaker);\r\n this.$elements.$sumInput.off('change', inputBreaker);\r\n this.$elements.$datesMYFrom.off('change', switchRadio);\r\n this.$elements.$datesMYTo.off('change', switchRadio);\r\n this.$elements.$datesYearFrom.off('change', switchRadio);\r\n this.$elements.$datesYearTo.off('change', switchRadio);\r\n\r\n recieveValues();\r\n updateText();\r\n this.$elements.$summaryInput.trigger('change', this);\r\n }\r\n };\r\n\r\n const closeWindowOutside = (e) => {\r\n if (!this.$elements.$summaryInput.is(e.target) && !this.$elements.$summary.is(e.target) && this.$elements.$summary.has(e.target).length === 0) {\r\n this.closeWindow();\r\n }\r\n };\r\n\r\n const unfocus = (e) => {\r\n const active = this.$elements.$shadowRoot[0].activeElement;\r\n if (e.originalEvent && e.originalEvent.composedPath().indexOf(active) == -1)\r\n document.activeElement.blur();\r\n };\r\n\r\n const switchRadio = (e) => {\r\n this.$elements.$radioButtons.find(`input#${id}_dates`).prop(\"checked\", true);\r\n };\r\n\r\n this.openWindow = () => {\r\n if (allowedTypes.find(t => t == type) && !this.$elements.$windowDiv.hasClass('active')) {\r\n this.$elements.$windowDiv.addClass('active');\r\n $(window).on(\"click\", closeWindowOutside);\r\n this.$elements.$closeButton.on(\"click\", this.closeWindow);\r\n this.$elements.$repetitionDropdown.on('change', afterChangeInRepeat);\r\n this.$elements.$nameInput.on('change', inputBreaker);\r\n this.$elements.$sumInput.on('change', inputBreaker);\r\n this.$elements.$windowDiv.on('click', unfocus);\r\n this.$elements.$datesMYFrom.on('change', switchRadio);\r\n this.$elements.$datesMYTo.on('change', switchRadio);\r\n this.$elements.$datesYearFrom.on('change', switchRadio);\r\n this.$elements.$datesYearTo.on('change', switchRadio);\r\n }\r\n };\r\n\r\n // Fix for the de-sync between closing this window and date-dropdown\r\n this.innerClosing = (e) => {\r\n e.stopPropagation();\r\n if (!this.$elements.$windowDiv.hasClass('active')) {\r\n recieveValues();\r\n updateText();\r\n }\r\n }\r\n\r\n //Collect elements through jquery\r\n const getElements = () => {\r\n const $summaryInput = $(this);\r\n const $shadowRoot = $($summaryInput[0].shadowRoot);\r\n const $summary = $shadowRoot.find(\".summary\");\r\n\r\n const $plate = $summary.find('.plate');\r\n const $plateText = $plate.find('.plate-text');\r\n const $windowDiv = $summary.find('.window-div');\r\n\r\n const $nameText = $plateText.find('.name');\r\n const $moneyText = $plateText.find('.money');\r\n const $freshText = $plateText.find('.fresh');\r\n const $purposeText = $plateText.find('.purpose');\r\n const $repeatDiv = $plateText.find('.repeat');\r\n const $repeatText = $repeatDiv.find('span');\r\n const $onlyWorkdaysDiv = $plateText.find('.only-workdays');\r\n\r\n const $closeButton = $windowDiv.find('button.close');\r\n const $sumInput = $windowDiv.find('.sum-field > input');\r\n const $nameInput = $windowDiv.find('.title > input');\r\n\r\n const $purposeDropdown = $windowDiv.find('div.purpose > dropdown-select');\r\n const $repetitionDropdown = $windowDiv.find('div.repetition > div.selectors > dropdown-select');\r\n const $dateDiv = $windowDiv.find('div.date');\r\n const $dMYDateDropdown = $dateDiv.find('date-dropdown.day-month-year');\r\n const $dayDateDropdown = $dateDiv.find('date-dropdown.day');\r\n const $dMDateDropdown = $dateDiv.find('date-dropdown.day-month');\r\n\r\n const $period = $windowDiv.find('.period');\r\n const $radioButtons = $period.find('.radio-buttons');\r\n const $datesContainer = $period.find('.dates-container');\r\n const $datesMY = $datesContainer.find('.dates.month-year');\r\n const $datesYear = $datesContainer.find('.dates.year');\r\n const $datesMYFrom = $datesMY.find('.date-from');\r\n const $datesMYTo = $datesMY.find('.date-to');\r\n const $datesYearFrom = $datesYear.find('.date-from');\r\n const $datesYearTo = $datesYear.find('.date-to');\r\n\r\n const $onlyWorkdaysCheckbox = $windowDiv.find('.only-workdays input');\r\n\r\n this.$elements = {\r\n $summaryInput, $shadowRoot, $summary,\r\n $plate, $plateText, $windowDiv,\r\n $nameText, $moneyText, $freshText,\r\n $purposeText, $repeatDiv, $repeatText, $onlyWorkdaysDiv,\r\n $closeButton, $sumInput, $nameInput,\r\n $purposeDropdown, $repetitionDropdown,\r\n $dateDiv, $dMYDateDropdown, $dayDateDropdown,\r\n $dMDateDropdown,\r\n $period, $radioButtons, $datesContainer, $datesMY, $datesYear,\r\n $datesMYFrom, $datesMYTo, $datesYearFrom, $datesYearTo,\r\n $onlyWorkdaysCheckbox\r\n };\r\n };\r\n\r\n //3. Setup\r\n\r\n //Set initial state for the element\r\n setDays();\r\n createHtml();\r\n getElements();\r\n\r\n //Set initial values\r\n this.setValues(this._defaultValue);\r\n\r\n //Tune sum input\r\n this.$elements.$sumInput.inputFilter(true, {});\r\n }\r\n\r\n get value() {\r\n return this._value;\r\n }\r\n\r\n set value(v) {\r\n this.setValues(v);\r\n }\r\n\r\n get defaultValue() {\r\n return this._defaultValue;\r\n }\r\n\r\n connectedCallback() {\r\n this.$elements.$plate.on(\"click\", this.openWindow);\r\n this.$elements.$windowDiv.on(\"closure\", this.innerClosing);\r\n }\r\n\r\n disconnectedCallback() {\r\n this.$elements.$plate.off(\"click\", this.openWindow);\r\n this.$elements.$windowDiv.off(\"closure\", this.innerClosing);\r\n }\r\n}\r\n\r\nclass SummaryField extends _BaseObjectField {\r\n static keyName() { return 'summary'; }\r\n static getSummaryErrors($clone, parent, dateFromProp, dateToProp = '') {\r\n const $insideShadow = $($clone.find(\"summary-input\")[0].shadowRoot);\r\n const basicCheck = (v) => {\r\n return !v || v.defaultInputs;\r\n }\r\n const checkDate = (d) => {\r\n return !!d && !!d.date;\r\n };\r\n const summaryDatePointsCheck = (v, checker) => {\r\n const checkFromTo = v.wholePeriod || checker(v.dateFrom) && checker(v.dateTo);\r\n switch (v.repeat) {\r\n case 'day':\r\n return checkFromTo;\r\n case 'year':\r\n return v.day && v.month && checkFromTo;\r\n case 'month': {\r\n return v.day && checkFromTo;\r\n }\r\n case 'no': {\r\n return checker(v.date);\r\n }\r\n default: {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n const result = [\r\n {\r\n check: function (v) {\r\n return !!v;\r\n },\r\n selector: $insideShadow.find('.empty-err')\r\n },\r\n {\r\n check: function (v) {\r\n return basicCheck(v) || v.payment;\r\n },\r\n selector: $insideShadow.find('.payment-err')\r\n },\r\n {\r\n check: function (v) {\r\n return !v || v.type !== \"repayment\" || v.defaultInputs || !!v.purpose;\r\n },\r\n selector: $insideShadow.find('.purpose-err')\r\n },\r\n {\r\n check: function (v) {\r\n return basicCheck(v) || v.repeat != 'no' || checkDate(v.date);\r\n },\r\n selector: $insideShadow.find('.empty-date-err')\r\n },\r\n {\r\n check: function (v) {\r\n switch (v.repeat) {\r\n case 'year':\r\n return basicCheck(v) || v.day && v.month;\r\n case 'month': {\r\n return basicCheck(v) || v.day;\r\n }\r\n }\r\n return true;\r\n },\r\n selector: $insideShadow.find('.empty-day-err')\r\n },\r\n {\r\n check: function (v) {\r\n return basicCheck(v) || v.repeat == 'no' || v.wholePeriod || checkDate(v.dateFrom) || checkDate(v.dateTo);\r\n },\r\n selector: $insideShadow.find('.empty-period-err')\r\n },\r\n {\r\n check: function (v) {\r\n return basicCheck(v) || v.repeat == 'no' || v.wholePeriod || checkDate(v.dateFrom);\r\n },\r\n selector: $insideShadow.find('.empty-start-err')\r\n },\r\n {\r\n check: function (v) {\r\n return basicCheck(v) || v.repeat == 'no' || v.wholePeriod || checkDate(v.dateTo);\r\n },\r\n selector: $insideShadow.find('.empty-end-err')\r\n },\r\n {\r\n check: function (v) {\r\n const checker = (d) => {\r\n return !d || !d.date || !d.goesBefore(new DatePoint(\"01.01.1995\"));\r\n };\r\n return basicCheck(v) || summaryDatePointsCheck(v, checker);\r\n },\r\n selector: $insideShadow.find('.from-bound-err')\r\n },\r\n {\r\n check: function (v) {\r\n const checker = (d) => {\r\n const mainDate = parent[dateFromProp];\r\n if (!d || !d.date || !mainDate || v.type != \"repayment\" || v.repeat == 'no' || v.wholePeriod)\r\n return true;\r\n switch (v.repeat) {\r\n case 'year':\r\n case 'month': {\r\n let fixedD, lastD;\r\n if (v.repeat == 'year') {\r\n fixedD = new DatePoint(new Date(d.date.getFullYear(), (v.month || 1) - 1, v.day || 1));// instead of fixDayMonthYear\r\n lastD = new DatePoint(new Date(d.date.getFullYear(), (v.month || 1) - 1, 1));// instead of fixDayMonthYear\r\n } else {\r\n fixedD = new DatePoint(new Date(d.date.getFullYear(), d.date.getMonth(), v.day || 1));// instead of fixDayMonthYear\r\n lastD = new DatePoint(new Date(d.date.getFullYear(), d.date.getMonth(), 1));// instead of fixDayMonthYear\r\n }\r\n lastD.addMonths(1);\r\n lastD.inc(-1);\r\n const realD = v.day != -1 && fixedD.distanceTo(lastD) > 0 ? fixedD : lastD;\r\n return realD.distanceTo(mainDate) < (2);\r\n }\r\n default: {\r\n return false;\r\n }\r\n }\r\n };\r\n return basicCheck(v) || checker(v.dateTo);\r\n },\r\n selector: $insideShadow.find('.end-before-start-err')\r\n },\r\n {\r\n check: function (v) {\r\n const checker = (d) => {\r\n const mainDate = parent[dateFromProp];\r\n if (!d || !d.date || !mainDate)\r\n return true;\r\n switch (v.repeat) {\r\n case 'year':\r\n case 'month': {\r\n let fixedD, lastD;\r\n if (v.repeat == 'year') {\r\n fixedD = new DatePoint(new Date(d.date.getFullYear(), (v.month || 1) - 1, v.day || 1));// instead of fixDayMonthYear\r\n lastD = new DatePoint(new Date(d.date.getFullYear(), (v.month || 1) - 1, 1));// instead of fixDayMonthYear\r\n } else {\r\n fixedD = new DatePoint(new Date(d.date.getFullYear(), d.date.getMonth(), v.day || 1));// instead of fixDayMonthYear\r\n lastD = new DatePoint(new Date(d.date.getFullYear(), d.date.getMonth(), 1));// instead of fixDayMonthYear\r\n }\r\n lastD.addMonths(1);\r\n lastD.inc(-1);\r\n const realD = v.day != -1 && fixedD.distanceTo(lastD) > 0 ? fixedD : lastD;\r\n return realD.distanceTo(mainDate) < (v.type == \"repayment\" ? 2 : 1);\r\n }\r\n case 'no': {\r\n return d.distanceTo(mainDate) < (v.type == \"repayment\" ? 2 : 1);\r\n }\r\n default: {\r\n return false;\r\n }\r\n }\r\n };\r\n return basicCheck(v) || summaryDatePointsCheck(v, checker);\r\n },\r\n selector: $insideShadow.find('.before-start-err')\r\n },\r\n {\r\n check: function (v) {\r\n const checker = (d) => {\r\n const mainDate = parent[dateToProp];\r\n if (!d || !d.date || !mainDate)\r\n return true;\r\n switch (v.repeat) {\r\n case 'year':\r\n case 'month': {\r\n let fixedD, lastD;\r\n if (v.repeat == 'year') {\r\n fixedD = new DatePoint(new Date(d.date.getFullYear(), (v.month || 1) - 1, v.day || 1));// instead of fixDayMonthYear\r\n lastD = new DatePoint(new Date(d.date.getFullYear(), (v.month || 1) - 1, 1));// instead of fixDayMonthYear\r\n } else {\r\n fixedD = new DatePoint(new Date(d.date.getFullYear(), d.date.getMonth(), v.day || 1));// instead of fixDayMonthYear\r\n lastD = new DatePoint(new Date(d.date.getFullYear(), d.date.getMonth(), 1));// instead of fixDayMonthYear\r\n }\r\n lastD.addMonths(1);\r\n lastD.inc(-1);\r\n let realD = v.day != -1 && fixedD.distanceTo(lastD) > 0 ? fixedD : lastD;\r\n if (v.onlyWorkdays && v.type != \"repayment\") {\r\n while (realD.isDayOff()) {\r\n realD.inc();\r\n }\r\n }\r\n return realD.distanceTo(mainDate) > 0;\r\n }\r\n case 'no': {\r\n let realD = d.copy();\r\n if (v.onlyWorkdays && v.type != \"repayment\") {\r\n while (realD.isDayOff()) {\r\n realD.inc();\r\n }\r\n }\r\n return realD.distanceTo(mainDate) > 0;\r\n }\r\n default: {\r\n return false;\r\n }\r\n }\r\n };\r\n return basicCheck(v) || summaryDatePointsCheck(v, checker);\r\n },\r\n selector: $insideShadow.find('.after-end-err')\r\n },\r\n {\r\n check: function (v) {\r\n return basicCheck(v) || v.repeat == 'no' || v.wholePeriod || !v.dateTo || !v.dateTo.date || !v.dateFrom || !v.dateFrom.date || !v.dateTo.goesBefore(v.dateFrom);\r\n },\r\n selector: $insideShadow.find('.interval-err')\r\n },\r\n {\r\n check: function (v) {\r\n return basicCheck(v) || v.repeat != 'year' || v.day < 30 || (v.month != 2 && (v.day == 30 || ![4, 6, 9, 11].includes(v.month)));\r\n },\r\n selector: $insideShadow.find('.day-year-err')\r\n },\r\n ];\r\n\r\n return result;\r\n }\r\n}\r\n\r\nwindow.customElements.define('summary-input', SummaryInput);\r\n\r\nexport { SummaryField };\r\n","const __fetch = require(\"isomorphic-fetch\");\r\n\r\nexport const polyFetch = (...args) => {\r\n return __fetch(...args);\r\n};\r\n\r\nexport const buildApi = (generator) => {\r\n function sendRequest({host = \"/\", method, path, params, headers = {}, body, json, _blob}) {\r\n const url = `${host}${path}`;\r\n const search = new URLSearchParams(params).toString();\r\n return polyFetch(url + \"?\" + search, {method, headers, body, _blob}).then(res => {\r\n if (res.ok) return json ? res.json() : Promise.resolve(res);\r\n console.error(res);\r\n return Promise.reject(res);\r\n });\r\n }\r\n const get = props => sendRequest({method: \"GET\", ...props});\r\n const post = props => sendRequest({method: \"POST\", ...props});\r\n return generator({get, post});\r\n};\r\n\r\nexport const loadResource = (url) => {\r\n const result = {\r\n loading: true,\r\n loaded: false,\r\n content: null,\r\n promise: null\r\n };\r\n result.promise = polyFetch(url).then(resp => /.*[.]json(\\?.+)?$/.test(url) ? resp.json() : resp.arrayBuffer()).then(res => {\r\n result.content = res;\r\n result.loaded = true;\r\n result.loading = false;\r\n return res;\r\n });\r\n return result;\r\n};","export default __webpack_public_path__ + \"css/site.min.css\";","export default __webpack_public_path__ + \"calc/components/periodic_date_field/styles.min.css\";","export default __webpack_public_path__ + \"calc/components/summary_field/styles.min.css\";","import { Field } from './basic_fields.js';\r\nimport { getDate, DateSpan, DatePoint, holidayChecker } from '../js/datelib.js';\r\n\r\nif ([].find === undefined) {\r\n Array.prototype.find = function (callback) {\r\n let result = undefined;\r\n this.some(function (v, index) {\r\n if (callback(v)) {\r\n result = v;\r\n return true;\r\n }\r\n });\r\n return result;\r\n };\r\n}\r\n\r\nclass DateField extends Field {\r\n constructor(selectorOrElem, options) {\r\n super(selectorOrElem, options);\r\n\r\n if (this.elem[0].tagName === 'DATE-PICKER')\r\n this.elem[0].holidayChecker = holidayChecker;\r\n }\r\n static keyName() { return 'date'; }\r\n getValue(silent) {return new DatePoint(this.elem[0].value, true) }\r\n getClearValue() { return this.elem.val(); }\r\n getExportValue() { return this.elem.val(); }\r\n setValue(v) { this.elem.val(v); }\r\n onChange(f) {\r\n let self = this;\r\n this.elem.change(e => f(self.elem[0]));\r\n }\r\n\r\n static detect(elem) {\r\n return elem[0].tagName === 'DATE-PICKER';\r\n }\r\n\r\n reset(params) {\r\n params = params || {};\r\n if (!params.keepValue) {\r\n this.elem[0].reset(this.defaultValue);\r\n }\r\n if (!params.keepErrors) {\r\n this.clearErrors();\r\n }\r\n }\r\n\r\n isFilled(){\r\n return this.getClearValue() !== this.defaultValue; \r\n }\r\n}\r\n\r\n\r\nclass DateIntervalField extends DateField {\r\n /**\r\n * @param {any} options :\r\n * limitMax (boolean) - invalidates dateFields according to max-year attribute\r\n */\r\n constructor(selectorOrElem, options) {\r\n super(selectorOrElem, options);\r\n\r\n if (this.elemFrom[0].tagName === 'DATE-PICKER')\r\n this.elemFrom[0].holidayChecker = holidayChecker;\r\n if (this.elemTo[0].tagName === 'DATE-PICKER')\r\n this.elemTo[0].holidayChecker = holidayChecker;\r\n }\r\n static keyName() { return 'date-interval'; }\r\n getValue(silent) {\r\n let nameVal = (this.nameElem.length > 0 ? tools.removeExtraSpace(this.nameElem.val()) : undefined);\r\n if (nameVal !== undefined && (!this.options || !this.options.raw)) {\r\n nameVal = tools.escapeTags(nameVal);\r\n }\r\n return {\r\n dateFrom: this._getDateFrom(silent),\r\n dateTo: this._getDateTo(silent),\r\n name: nameVal,\r\n includeEnd: this.includeEnd\r\n };\r\n }\r\n getClearValue() {\r\n return this.elemFrom.val() + '+' + this.elemTo.val();\r\n }\r\n getExportValue() {\r\n return { dateFrom: this.elemFrom.val(), dateTo: this.elemTo.val() };\r\n }\r\n setValue(v) {\r\n let pair = v.split('+');\r\n this.elemFrom.val(pair[0]);\r\n this.elemTo.val(pair[1]);\r\n }\r\n init() {\r\n this.elemFrom = this.elem.find('#dateFrom, date-picker.input-from');\r\n this.elemTo = this.elem.find('#dateTo, date-picker.input-to');\r\n this.nameElem = this.elem.find('.dynamic-list-comment input');\r\n\r\n this.errorPeriodElem = this.elem.find(\"#datePeriodErr, .period-error\");\r\n this.errorFromElem = this.elem.find(\"#dateFromErr, .from-error\");\r\n this.errorToElem = this.elem.find(\"#dateToErr, .to-error\");\r\n this.errorFromBound= this.elem.find(\"#dateFromBoundErr, .from-bound-err\");\r\n this.errorToBound = this.elem.find(\"#dateToBoundErr, .to-bound-err\");\r\n this.errorFromBoundMax= this.elem.find(\"#dateFromBoundErrMax, .from-bound-err-max\");\r\n this.errorToBoundMax = this.elem.find(\"#dateToBoundErrMax, .to-bound-err-max\");\r\n \r\n this.includeEnd = {};\r\n }\r\n\r\n _getDateFix(name) {\r\n let includeEndDate = true;\r\n this.options = this.options || [];\r\n if (this.options.include && this.options.include[name] !== undefined) {\r\n let includeEnd = this.options.include[name];\r\n if (typeof (includeEnd) === \"function\")\r\n includeEndDate = includeEnd(this);\r\n else\r\n includeEndDate = includeEnd;\r\n }\r\n this.includeEnd[name] = includeEndDate;\r\n return includeEndDate ? 0 : (name === 'to' ? -1 : 1);\r\n }\r\n\r\n _getDateFrom(silent) {\r\n let res = new DatePoint(this.elemFrom[0].value, true);\r\n return res.valid ? res.inc(silent ? 0 : this._getDateFix('from')) : res;\r\n }\r\n\r\n _getDateTo(silent) {\r\n let res = new DatePoint(this.elemTo[0].value, true);\r\n return res.valid ? res.inc(silent ? 0 : this._getDateFix('to')) : res;\r\n }\r\n\r\n resetErrors(binaryMap) {\r\n if (binaryMap === undefined) {\r\n binaryMap = 3;\r\n this.elem.find('.period-outside-error').hide();\r\n this.elem.find('.period-intersection-error').hide();\r\n }\r\n\r\n if (this.errorPeriodElem.is(\":visible\")) {\r\n this.errorPeriodElem.hide();\r\n this.elemFrom.removeClass('err');\r\n this.elemTo.removeClass('err');\r\n }\r\n\r\n if (binaryMap & 1) {\r\n this.errorFromElem.hide();\r\n this.errorFromBound.hide();\r\n this.errorFromBoundMax.hide();\r\n this.elemFrom.removeClass('err');\r\n }\r\n if (binaryMap & 2) {\r\n this.errorToElem.hide();\r\n this.errorToBound.hide();\r\n this.errorToBoundMax.hide();\r\n this.elemTo.removeClass('err');\r\n }\r\n }\r\n\r\n reset(params) {\r\n params = params || {};\r\n if (!params.keepValue) {\r\n this.elemFrom[0].reset()\r\n this.elemTo[0].reset();\r\n }\r\n if (!params.keepErrors) {\r\n this.resetErrors();\r\n }\r\n }\r\n\r\n check(autoValidation, sender, phase) {\r\n if (phase > 1)\r\n return true;\r\n\r\n var self = this;\r\n this.dateFrom = this._getDateFrom();\r\n this.dateTo = this._getDateTo();\r\n \r\n function setPeriodError() {\r\n self.errorPeriodElem.show();\r\n self.elemFrom[0].classList.add('err');\r\n self.elemTo[0].classList.add('err');\r\n }\r\n\r\n\r\n function processBoundElem(elem, errorElem, hadError = false) {\r\n if (!autoValidation || hadError/* || sender === dateElem*/) {\r\n elem.classList.add('err');\r\n errorElem.show();\r\n } else if (sender === elem && elem.classList.contains('err')) { // Redo: unreacheable condition because of this.resetErrors(1) and (2) inside \"check\"\r\n errorElem.show();\r\n }\r\n }\r\n\r\n var render = true,\r\n result = true;\r\n this.filled = this.dateFrom.valid || this.dateTo.valid;\r\n var valid = {\r\n from: this.dateFrom.valid,\r\n to: this.dateTo.valid\r\n };\r\n this.span = undefined;\r\n\r\n if (render) {\r\n const hadFromError = this.elemFrom[0].classList.contains('err');\r\n const hadToError = this.elemTo[0].classList.contains('err');\r\n this.resetErrors(1);\r\n this.resetErrors(2);\r\n\r\n let maxYearFrom = this.options?.limitMax && this.elemFrom.attr(\"max-year\") ? this.elemFrom.attr(\"max-year\").length == 4 ? this.elemFrom.attr(\"max-year\") : new Date().getFullYear() + +this.elemFrom.attr(\"max-year\") : null;\r\n let maxYearTo = this.options?.limitMax && this.elemTo.attr(\"max-year\") ? this.elemTo.attr(\"max-year\").length == 4 ? this.elemTo.attr(\"max-year\") : new Date().getFullYear() + +this.elemTo.attr(\"max-year\") : null;\r\n \r\n if (!valid.from) processBoundElem(this.elemFrom[0], this.errorFromElem, hadFromError);\r\n else if(this._getDateFrom().goesBefore(new DatePoint(\"01.01.\"+this.elemFrom.attr(\"min-year\")))){\r\n valid.from = false;\r\n this.elemFrom[0].classList.add('err'); \r\n processBoundElem(this.elemFrom[0], this.errorFromBound);\r\n } else if(maxYearFrom && (new DatePoint(\"31.12.\"+maxYearFrom)).goesBefore(this._getDateFrom())){\r\n valid.from = false;\r\n this.elemFrom[0].classList.add('err'); \r\n processBoundElem(this.elemFrom[0], this.errorFromBoundMax);\r\n }\r\n\r\n if (!valid.to) processBoundElem(this.elemTo[0], this.errorToElem, hadToError);\r\n else if(this._getDateTo().goesBefore(new DatePoint(\"01.01.\"+this.elemTo.attr(\"min-year\")))){\r\n valid.to = false\r\n this.elemTo[0].classList.add('err');\r\n processBoundElem(this.elemTo[0], this.errorToBound);\r\n } else if(maxYearTo && (new DatePoint(\"31.12.\"+maxYearTo)).goesBefore(this._getDateTo())){\r\n valid.to = false\r\n this.elemTo[0].classList.add('err');\r\n processBoundElem(this.elemTo[0], this.errorToBoundMax);\r\n }\r\n\r\n if(!valid.from || !valid.to){\r\n result = false;\r\n }\r\n }\r\n \r\n if(valid.from && valid.to) {\r\n this.resetErrors(3);\r\n\r\n if (this.dateTo.goesBefore(this.dateFrom)) {\r\n result = false;\r\n if (render) setPeriodError();\r\n }else{\r\n this.span = new DateSpan(this.dateFrom, this.dateTo);\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n onChange(f) {\r\n let self = this;\r\n this.elemFrom.change(e => f(self.elemFrom[0]));\r\n this.elemTo.change(e => f(self.elemTo[0]));\r\n }\r\n\r\n static detect(elem) {\r\n return elem.find('date-picker').length == 2;\r\n }\r\n}\r\n\r\nclass DateIntervalIgnoreEmptyField extends DateIntervalField{\r\n static keyName() { return 'date-interval-ignore'; }\r\n get ignore() { return !this.isFilled(); }\r\n}\r\n\r\n\r\n/**\r\n * Performs base date interval checks like intersections and out of the bounds.\r\n * How it works:\r\n * 1. If period is outside main period bounds, error will be shown\r\n * 2. If somewhere in period value was changed and it intersects with other period, error will be shown\r\n * 3. If intersection was found but reason is not editing some of periods, error will be shown in last period which intersects something.\r\n * 4. If no `outside` and `intersection` problems but all subtracting periods covers parent fully, `outside` error will be shown on active or last.\r\n * @param {any} fields list of fields\r\n * @param {any} options {parent: (field, optional)}\r\n */\r\nfunction baseDateIntervalCheck(fields, options) {\r\n let result = {\r\n valid: true\r\n }\r\n let parent = options !== undefined ? options.parent : undefined;\r\n\r\n if (fields.length > 0) {\r\n fields.sort(function (a, b) {\r\n return (a.dateFrom.goesBefore(b.dateFrom) ? -1 : 1);\r\n });\r\n\r\n function toggleErrorHighlight(period, show) {\r\n if (show) {\r\n period.elemFrom.addClass('err');\r\n period.elemTo.addClass('err');\r\n } else {\r\n period.elemFrom.removeClass('err');\r\n period.elemTo.removeClass('err');\r\n }\r\n }\r\n\r\n var leftDays = (parent && parent.valid ? parent.span.getDayCount() - fields.map(function (period) {\r\n return (period.valid ? period.span.getDayCount() : 0);\r\n }).reduce(function (a, b) { return a + b; }, 0) : 1);\r\n\r\n let info = fields.map(function (period, index) {\r\n let $elem = $(period.elem);\r\n\r\n $elem.find('.period-outside-error').hide();\r\n $elem.find('.period-intersection-error').hide();\r\n $elem.find('.period-outside-intersection-error').hide();\r\n $elem.find('.period-equality-error').hide();\r\n\r\n let bullet = {\r\n elem: $(period.elem),\r\n period: period,\r\n index: index,\r\n active: false,\r\n intersects: false,\r\n outside: false,\r\n equality: false,\r\n showError: function (className) {\r\n result.valid = this.period.valid = false;\r\n toggleErrorHighlight(this.period, true);\r\n this.elem.find(className).show();\r\n }\r\n };\r\n\r\n if (period.valid) {\r\n bullet.active = (options.sender === period.elemFrom[0] || options.sender === period.elemTo[0]);\r\n bullet.intersects = fields.some(function (p) {\r\n return p.span !== undefined && period != p && period.span.intersects(p.span);\r\n });\r\n bullet.outside = parent && parent.valid && (period.dateFrom.goesBefore(parent.dateFrom) || parent.dateTo.goesBefore(period.dateTo));\r\n bullet.equality = parent && parent.valid && (period.dateFrom.isEqualTo(parent.dateFrom) && parent.dateTo.isEqualTo(period.dateTo));\r\n }\r\n\r\n return bullet;\r\n });\r\n\r\n let active = info.find(b => b.active);\r\n\r\n // Check on leftDays only if no intersections was found.\r\n if (info.every(b => !b.intersects && !b.outside) && !leftDays) {\r\n if (active !== undefined)\r\n active.equality = true;\r\n else\r\n info.find(b => { return b.period.valid && info.every(x => !x.period.valid || x.index <= b.index); }).outside = true;\r\n\r\n info.forEach(b => { b.period.valid = false; });\r\n }\r\n\r\n // Show intersection error on last if there is no active period\r\n if (info.some(b => b.intersects) && (active == undefined || !active.intersects)) {\r\n if (active !== undefined)\r\n active.active = false;\r\n info.find(b => b.intersects && info.every(x => !x.intersects || x.index <= b.index)).active = true;\r\n }\r\n\r\n\r\n info.forEach(function (bullet) {\r\n if (bullet.intersects) {\r\n bullet.period.valid = false;\r\n if (bullet.active && bullet.outside) {\r\n bullet.showError('.period-outside-intersection-error');\r\n } else if (bullet.active) {\r\n bullet.showError('.period-intersection-error');\r\n } else if (bullet.outside) {\r\n bullet.showError('.period-outside-error');\r\n }\r\n } else if (bullet.equality) {\r\n bullet.showError('.period-equality-error');\r\n } else if (bullet.outside) {\r\n bullet.showError('.period-outside-error');\r\n }\r\n });\r\n }\r\n\r\n return result;\r\n}\r\n\r\n\r\n\r\n\r\nconst fields = [DateField, DateIntervalField];\r\n\r\nexport { fields, DateIntervalField, DateField, baseDateIntervalCheck, DateIntervalIgnoreEmptyField };","import {_BaseObjectField} from \"../../common/basic_fields.js\";\r\nimport styles from './styles.scss';\r\n\r\nclass PeriodicSelect extends HTMLElement {\r\n constructor() {\r\n super();\r\n\r\n //get attributes\r\n const kind = this.getAttribute('kind') || \"\";\r\n const type = this.getAttribute('type') || \"\";\r\n const cssSalt = this.getAttribute('css-salt');\r\n\r\n //fill options\r\n this.options = {};\r\n switch (type) {\r\n case \"year\": {\r\n this.options = [\r\n {value: 0, text: \"в день выдачи кредита\"},\r\n {value: 1, text: \"в последний день года\"},\r\n {value: 2, text: \"дата и месяц\", dropdown: true},\r\n ];\r\n break;\r\n }\r\n case \"month\": {\r\n this.options = [\r\n {value: 0, text: \"в день выдачи кредита\"},\r\n {value: 1, text: \"в последний день месяца\"},\r\n {value: 2, text: \"дата\", dropdown: true},\r\n ];\r\n break;\r\n }\r\n default: {\r\n this.options = [{\r\n value: 0, text: \"no type\",\r\n }];\r\n break;\r\n }\r\n }\r\n\r\n //default value\r\n this._defaultValue = {\r\n selected: 0, text: this.options[0].text\r\n };\r\n switch (type) {\r\n case \"year\": {\r\n this._defaultValue.month = 1;\r\n }\r\n case \"month\": {\r\n this._defaultValue.day = 1;\r\n break;\r\n }\r\n }\r\n\r\n //create properties\r\n this._value = tools.deepcopy(this._defaultValue);\r\n this.$elements = {};\r\n\r\n //Fill the dropdowns\r\n this.dropdowns = {\r\n days: [],\r\n months: [\"января\", \"февраля\", \"марта\", \"апреля\", \"мая\", \"июня\", \"июля\", \"августа\", \"сентября\", \"октября\", \"ноября\", \"декабря\"].map((m, i) => {return {text: m, value: i + 1};}),\r\n };\r\n\r\n const setDays = (lastDay = 31) => {\r\n this.dropdowns.days = [];\r\n for (let i = 1; i <= lastDay; i++) {\r\n this.dropdowns.days.push({text: i < 10 ? '0' + i : i, value: i});\r\n }\r\n };\r\n setDays();\r\n\r\n const getDropdownFiller = (name, selectedValue) => {\r\n let filler = '';\r\n this.dropdowns[name].forEach((o, i) => {\r\n filler += '';\r\n });\r\n return filler;\r\n };\r\n\r\n const getDropdownText = (name, value) => {\r\n const el = this.dropdowns[name].find(o => o.value == value);\r\n return el ? el.text : null;\r\n }\r\n\r\n const buttonDiv = `
${this._value.text}
`;\r\n\r\n let windowDiv = `
`;\r\n const radioName = `periodic_${Math.random()}`;\r\n this.options.forEach((o, i) => {\r\n if (i > 0 && o.dropdown != this.options[i - 1].dropdown) {\r\n windowDiv += `
`;\r\n }\r\n windowDiv += `
`;\r\n if (o.dropdown) {\r\n windowDiv += `
`;\r\n switch (type) {\r\n case \"year\": {\r\n windowDiv += `` +\r\n ``;\r\n break;\r\n }\r\n case \"month\": {\r\n windowDiv += ``;\r\n break;\r\n }\r\n }\r\n windowDiv += `
`;\r\n }\r\n windowDiv += `
`;\r\n });\r\n windowDiv += `
`;\r\n\r\n //scss\r\n const stylesHtml = ``;\r\n\r\n this.attachShadow({mode: 'open'});\r\n this.shadowRoot.innerHTML = stylesHtml + `
${buttonDiv}${windowDiv}
`;\r\n\r\n const updateText = () => {\r\n const option = this.options[this._value.selected];\r\n if (option.dropdown) {\r\n switch (type) {\r\n case \"year\": {\r\n this._value.text = this._value.day + '-го ' + getDropdownText('months', this._value.month);\r\n break;\r\n }\r\n case \"month\": {\r\n this._value.text = this._value.day + '-го числа';\r\n break;\r\n }\r\n }\r\n } else\r\n this._value.text = option.text;\r\n\r\n this.$elements.$buttonText.html(this._value.text);\r\n };\r\n\r\n this.setValues = (newValues) => {\r\n const values = newValues || this._defaultValue;\r\n\r\n this._value = tools.deepcopy(values);\r\n\r\n switch (type) {\r\n case \"year\": {\r\n this.$elements.$monthsDropdown.val(values.month);\r\n }\r\n case \"month\": {\r\n this.$elements.$daysDropdown.val(values.day);\r\n break;\r\n }\r\n }\r\n this.$elements.$windowDiv.find(`input[name=\"${radioName}\"][value=\"${values.selected}\"]`).prop(\"checked\", true);\r\n\r\n updateText();\r\n };\r\n\r\n const radioChange = () => {\r\n this._value.selected = +this.$elements.$windowDiv.find(`input[name=\"${radioName}\"]:checked`).val();\r\n updateText();\r\n };\r\n\r\n const dropdownChange = () => {\r\n switch (type) {\r\n case \"year\": {\r\n const month = this.$elements.$monthsDropdown.val();\r\n let day = this.$elements.$daysDropdown.val();\r\n if (this._value.month != month) {\r\n this._value.month = month;\r\n switch (month) {\r\n case 2: {\r\n setDays(29);\r\n if (day > 29)\r\n day = 29;\r\n break;\r\n }\r\n case 4:\r\n case 6:\r\n case 9:\r\n case 11: {\r\n setDays(30);\r\n if (day > 30)\r\n day = 30;\r\n break;\r\n }\r\n default: {\r\n setDays();\r\n break;\r\n }\r\n }\r\n this.$elements.$daysDropdown[0].options = this.dropdowns.days;\r\n this.$elements.$daysDropdown[0].selectedIndex = day - 1;\r\n }\r\n this._value.day = day;\r\n break;\r\n }\r\n case \"month\": {\r\n this._value.day = this.$elements.$daysDropdown.val();\r\n break;\r\n }\r\n }\r\n\r\n const radioValue = this.options.find(o => o.dropdown).value;\r\n this.$elements.$windowDiv.find(`input[name=\"${radioName}\"][value=\"${radioValue}\"]`).prop(\"checked\", true);\r\n radioChange();\r\n };\r\n\r\n const closeWindow = () => {\r\n this.$elements.$periodic.removeClass('expanded');\r\n $(window).off(\"click\", closeWindowOutside);\r\n this.$elements.$windowDiv.find(`input[name=\"${radioName}\"]`).off('change', radioChange);\r\n this.$elements.$windowDiv.find(`dropdown-select`).off('change', dropdownChange);\r\n\r\n this.$elements.$periodicSelect.trigger('change', this);\r\n };\r\n\r\n const closeWindowOutside = (e) => {\r\n if (!this.$elements.$periodicSelect.is(e.target) && !this.$elements.$periodic.is(e.target) && this.$elements.$periodic.has(e.target).length === 0) {\r\n closeWindow();\r\n }\r\n };\r\n\r\n this.toggleWindow = () => {\r\n if (!this.$elements.$periodic.hasClass('expanded')) {\r\n this.$elements.$periodic.addClass('expanded');\r\n $(window).on(\"click\", closeWindowOutside);\r\n this.$elements.$windowDiv.find(`input[name=\"${radioName}\"]`).on('change', radioChange);\r\n this.$elements.$windowDiv.find(`dropdown-select`).on('change', dropdownChange);\r\n } else\r\n closeWindow();\r\n };\r\n\r\n const getElements = () => {\r\n const $periodicSelect = $(this);\r\n const $shadowRoot = $($periodicSelect[0].shadowRoot);\r\n const $periodic = $shadowRoot.find(\".periodic\");\r\n const $buttonDiv = $periodic.find('.button');\r\n const $buttonText = $buttonDiv.find('.text');\r\n const $windowDiv = $periodic.find('.window-div');\r\n const $daysDropdown = $windowDiv.find('dropdown-select.days');\r\n const $monthsDropdown = $windowDiv.find('dropdown-select.months');\r\n\r\n this.$elements = {\r\n $periodicSelect, $shadowRoot, $periodic, $buttonDiv, $buttonText,\r\n $windowDiv, $daysDropdown, $monthsDropdown\r\n };\r\n }\r\n\r\n getElements();\r\n\r\n //set initial values\r\n this.setValues(this._defaultValue);\r\n }\r\n\r\n get value() {\r\n return this._value;\r\n }\r\n\r\n set value(v) {\r\n this.setValues(v);\r\n }\r\n\r\n get defaultValue() {\r\n return this._defaultValue;\r\n }\r\n\r\n connectedCallback() {\r\n this.$elements.$buttonDiv.on(\"click\", this.toggleWindow);\r\n }\r\n\r\n disconnectedCallback() {\r\n this.$elements.$buttonDiv.off(\"click\", this.toggleWindow);\r\n }\r\n}\r\n\r\nclass PeriodicDateField extends _BaseObjectField {\r\n static keyName() {return 'periodic';}\r\n}\r\n\r\nwindow.customElements.define('periodic-select', PeriodicSelect);\r\n\r\nexport {PeriodicDateField};\r\n","/* eslint-disable no-prototype-builtins */\nvar g =\n (typeof globalThis !== 'undefined' && globalThis) ||\n (typeof self !== 'undefined' && self) ||\n // eslint-disable-next-line no-undef\n (typeof global !== 'undefined' && global) ||\n {}\n\nvar support = {\n searchParams: 'URLSearchParams' in g,\n iterable: 'Symbol' in g && 'iterator' in Symbol,\n blob:\n 'FileReader' in g &&\n 'Blob' in g &&\n (function() {\n try {\n new Blob()\n return true\n } catch (e) {\n return false\n }\n })(),\n formData: 'FormData' in g,\n arrayBuffer: 'ArrayBuffer' in g\n}\n\nfunction isDataView(obj) {\n return obj && DataView.prototype.isPrototypeOf(obj)\n}\n\nif (support.arrayBuffer) {\n var viewClasses = [\n '[object Int8Array]',\n '[object Uint8Array]',\n '[object Uint8ClampedArray]',\n '[object Int16Array]',\n '[object Uint16Array]',\n '[object Int32Array]',\n '[object Uint32Array]',\n '[object Float32Array]',\n '[object Float64Array]'\n ]\n\n var isArrayBufferView =\n ArrayBuffer.isView ||\n function(obj) {\n return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1\n }\n}\n\nfunction normalizeName(name) {\n if (typeof name !== 'string') {\n name = String(name)\n }\n if (/[^a-z0-9\\-#$%&'*+.^_`|~!]/i.test(name) || name === '') {\n throw new TypeError('Invalid character in header field name: \"' + name + '\"')\n }\n return name.toLowerCase()\n}\n\nfunction normalizeValue(value) {\n if (typeof value !== 'string') {\n value = String(value)\n }\n return value\n}\n\n// Build a destructive iterator for the value list\nfunction iteratorFor(items) {\n var iterator = {\n next: function() {\n var value = items.shift()\n return {done: value === undefined, value: value}\n }\n }\n\n if (support.iterable) {\n iterator[Symbol.iterator] = function() {\n return iterator\n }\n }\n\n return iterator\n}\n\nexport function Headers(headers) {\n this.map = {}\n\n if (headers instanceof Headers) {\n headers.forEach(function(value, name) {\n this.append(name, value)\n }, this)\n } else if (Array.isArray(headers)) {\n headers.forEach(function(header) {\n if (header.length != 2) {\n throw new TypeError('Headers constructor: expected name/value pair to be length 2, found' + header.length)\n }\n this.append(header[0], header[1])\n }, this)\n } else if (headers) {\n Object.getOwnPropertyNames(headers).forEach(function(name) {\n this.append(name, headers[name])\n }, this)\n }\n}\n\nHeaders.prototype.append = function(name, value) {\n name = normalizeName(name)\n value = normalizeValue(value)\n var oldValue = this.map[name]\n this.map[name] = oldValue ? oldValue + ', ' + value : value\n}\n\nHeaders.prototype['delete'] = function(name) {\n delete this.map[normalizeName(name)]\n}\n\nHeaders.prototype.get = function(name) {\n name = normalizeName(name)\n return this.has(name) ? this.map[name] : null\n}\n\nHeaders.prototype.has = function(name) {\n return this.map.hasOwnProperty(normalizeName(name))\n}\n\nHeaders.prototype.set = function(name, value) {\n this.map[normalizeName(name)] = normalizeValue(value)\n}\n\nHeaders.prototype.forEach = function(callback, thisArg) {\n for (var name in this.map) {\n if (this.map.hasOwnProperty(name)) {\n callback.call(thisArg, this.map[name], name, this)\n }\n }\n}\n\nHeaders.prototype.keys = function() {\n var items = []\n this.forEach(function(value, name) {\n items.push(name)\n })\n return iteratorFor(items)\n}\n\nHeaders.prototype.values = function() {\n var items = []\n this.forEach(function(value) {\n items.push(value)\n })\n return iteratorFor(items)\n}\n\nHeaders.prototype.entries = function() {\n var items = []\n this.forEach(function(value, name) {\n items.push([name, value])\n })\n return iteratorFor(items)\n}\n\nif (support.iterable) {\n Headers.prototype[Symbol.iterator] = Headers.prototype.entries\n}\n\nfunction consumed(body) {\n if (body._noBody) return\n if (body.bodyUsed) {\n return Promise.reject(new TypeError('Already read'))\n }\n body.bodyUsed = true\n}\n\nfunction fileReaderReady(reader) {\n return new Promise(function(resolve, reject) {\n reader.onload = function() {\n resolve(reader.result)\n }\n reader.onerror = function() {\n reject(reader.error)\n }\n })\n}\n\nfunction readBlobAsArrayBuffer(blob) {\n var reader = new FileReader()\n var promise = fileReaderReady(reader)\n reader.readAsArrayBuffer(blob)\n return promise\n}\n\nfunction readBlobAsText(blob) {\n var reader = new FileReader()\n var promise = fileReaderReady(reader)\n var match = /charset=([A-Za-z0-9_-]+)/.exec(blob.type)\n var encoding = match ? match[1] : 'utf-8'\n reader.readAsText(blob, encoding)\n return promise\n}\n\nfunction readArrayBufferAsText(buf) {\n var view = new Uint8Array(buf)\n var chars = new Array(view.length)\n\n for (var i = 0; i < view.length; i++) {\n chars[i] = String.fromCharCode(view[i])\n }\n return chars.join('')\n}\n\nfunction bufferClone(buf) {\n if (buf.slice) {\n return buf.slice(0)\n } else {\n var view = new Uint8Array(buf.byteLength)\n view.set(new Uint8Array(buf))\n return view.buffer\n }\n}\n\nfunction Body() {\n this.bodyUsed = false\n\n this._initBody = function(body) {\n /*\n fetch-mock wraps the Response object in an ES6 Proxy to\n provide useful test harness features such as flush. However, on\n ES5 browsers without fetch or Proxy support pollyfills must be used;\n the proxy-pollyfill is unable to proxy an attribute unless it exists\n on the object before the Proxy is created. This change ensures\n Response.bodyUsed exists on the instance, while maintaining the\n semantic of setting Request.bodyUsed in the constructor before\n _initBody is called.\n */\n // eslint-disable-next-line no-self-assign\n this.bodyUsed = this.bodyUsed\n this._bodyInit = body\n if (!body) {\n this._noBody = true;\n this._bodyText = ''\n } else if (typeof body === 'string') {\n this._bodyText = body\n } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {\n this._bodyBlob = body\n } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {\n this._bodyFormData = body\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this._bodyText = body.toString()\n } else if (support.arrayBuffer && support.blob && isDataView(body)) {\n this._bodyArrayBuffer = bufferClone(body.buffer)\n // IE 10-11 can't handle a DataView body.\n this._bodyInit = new Blob([this._bodyArrayBuffer])\n } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) {\n this._bodyArrayBuffer = bufferClone(body)\n } else {\n this._bodyText = body = Object.prototype.toString.call(body)\n }\n\n if (!this.headers.get('content-type')) {\n if (typeof body === 'string') {\n this.headers.set('content-type', 'text/plain;charset=UTF-8')\n } else if (this._bodyBlob && this._bodyBlob.type) {\n this.headers.set('content-type', this._bodyBlob.type)\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8')\n }\n }\n }\n\n if (support.blob) {\n this.blob = function() {\n var rejected = consumed(this)\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return Promise.resolve(this._bodyBlob)\n } else if (this._bodyArrayBuffer) {\n return Promise.resolve(new Blob([this._bodyArrayBuffer]))\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as blob')\n } else {\n return Promise.resolve(new Blob([this._bodyText]))\n }\n }\n }\n\n this.arrayBuffer = function() {\n if (this._bodyArrayBuffer) {\n var isConsumed = consumed(this)\n if (isConsumed) {\n return isConsumed\n } else if (ArrayBuffer.isView(this._bodyArrayBuffer)) {\n return Promise.resolve(\n this._bodyArrayBuffer.buffer.slice(\n this._bodyArrayBuffer.byteOffset,\n this._bodyArrayBuffer.byteOffset + this._bodyArrayBuffer.byteLength\n )\n )\n } else {\n return Promise.resolve(this._bodyArrayBuffer)\n }\n } else if (support.blob) {\n return this.blob().then(readBlobAsArrayBuffer)\n } else {\n throw new Error('could not read as ArrayBuffer')\n }\n }\n\n this.text = function() {\n var rejected = consumed(this)\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return readBlobAsText(this._bodyBlob)\n } else if (this._bodyArrayBuffer) {\n return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer))\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as text')\n } else {\n return Promise.resolve(this._bodyText)\n }\n }\n\n if (support.formData) {\n this.formData = function() {\n return this.text().then(decode)\n }\n }\n\n this.json = function() {\n return this.text().then(JSON.parse)\n }\n\n return this\n}\n\n// HTTP methods whose capitalization should be normalized\nvar methods = ['CONNECT', 'DELETE', 'GET', 'HEAD', 'OPTIONS', 'PATCH', 'POST', 'PUT', 'TRACE']\n\nfunction normalizeMethod(method) {\n var upcased = method.toUpperCase()\n return methods.indexOf(upcased) > -1 ? upcased : method\n}\n\nexport function Request(input, options) {\n if (!(this instanceof Request)) {\n throw new TypeError('Please use the \"new\" operator, this DOM object constructor cannot be called as a function.')\n }\n\n options = options || {}\n var body = options.body\n\n if (input instanceof Request) {\n if (input.bodyUsed) {\n throw new TypeError('Already read')\n }\n this.url = input.url\n this.credentials = input.credentials\n if (!options.headers) {\n this.headers = new Headers(input.headers)\n }\n this.method = input.method\n this.mode = input.mode\n this.signal = input.signal\n if (!body && input._bodyInit != null) {\n body = input._bodyInit\n input.bodyUsed = true\n }\n } else {\n this.url = String(input)\n }\n\n this.credentials = options.credentials || this.credentials || 'same-origin'\n if (options.headers || !this.headers) {\n this.headers = new Headers(options.headers)\n }\n this.method = normalizeMethod(options.method || this.method || 'GET')\n this.mode = options.mode || this.mode || null\n this.signal = options.signal || this.signal || (function () {\n if ('AbortController' in g) {\n var ctrl = new AbortController();\n return ctrl.signal;\n }\n }());\n this.referrer = null\n\n if ((this.method === 'GET' || this.method === 'HEAD') && body) {\n throw new TypeError('Body not allowed for GET or HEAD requests')\n }\n this._initBody(body)\n\n if (this.method === 'GET' || this.method === 'HEAD') {\n if (options.cache === 'no-store' || options.cache === 'no-cache') {\n // Search for a '_' parameter in the query string\n var reParamSearch = /([?&])_=[^&]*/\n if (reParamSearch.test(this.url)) {\n // If it already exists then set the value with the current time\n this.url = this.url.replace(reParamSearch, '$1_=' + new Date().getTime())\n } else {\n // Otherwise add a new '_' parameter to the end with the current time\n var reQueryString = /\\?/\n this.url += (reQueryString.test(this.url) ? '&' : '?') + '_=' + new Date().getTime()\n }\n }\n }\n}\n\nRequest.prototype.clone = function() {\n return new Request(this, {body: this._bodyInit})\n}\n\nfunction decode(body) {\n var form = new FormData()\n body\n .trim()\n .split('&')\n .forEach(function(bytes) {\n if (bytes) {\n var split = bytes.split('=')\n var name = split.shift().replace(/\\+/g, ' ')\n var value = split.join('=').replace(/\\+/g, ' ')\n form.append(decodeURIComponent(name), decodeURIComponent(value))\n }\n })\n return form\n}\n\nfunction parseHeaders(rawHeaders) {\n var headers = new Headers()\n // Replace instances of \\r\\n and \\n followed by at least one space or horizontal tab with a space\n // https://tools.ietf.org/html/rfc7230#section-3.2\n var preProcessedHeaders = rawHeaders.replace(/\\r?\\n[\\t ]+/g, ' ')\n // Avoiding split via regex to work around a common IE11 bug with the core-js 3.6.0 regex polyfill\n // https://github.com/github/fetch/issues/748\n // https://github.com/zloirock/core-js/issues/751\n preProcessedHeaders\n .split('\\r')\n .map(function(header) {\n return header.indexOf('\\n') === 0 ? header.substr(1, header.length) : header\n })\n .forEach(function(line) {\n var parts = line.split(':')\n var key = parts.shift().trim()\n if (key) {\n var value = parts.join(':').trim()\n try {\n headers.append(key, value)\n } catch (error) {\n console.warn('Response ' + error.message)\n }\n }\n })\n return headers\n}\n\nBody.call(Request.prototype)\n\nexport function Response(bodyInit, options) {\n if (!(this instanceof Response)) {\n throw new TypeError('Please use the \"new\" operator, this DOM object constructor cannot be called as a function.')\n }\n if (!options) {\n options = {}\n }\n\n this.type = 'default'\n this.status = options.status === undefined ? 200 : options.status\n if (this.status < 200 || this.status > 599) {\n throw new RangeError(\"Failed to construct 'Response': The status provided (0) is outside the range [200, 599].\")\n }\n this.ok = this.status >= 200 && this.status < 300\n this.statusText = options.statusText === undefined ? '' : '' + options.statusText\n this.headers = new Headers(options.headers)\n this.url = options.url || ''\n this._initBody(bodyInit)\n}\n\nBody.call(Response.prototype)\n\nResponse.prototype.clone = function() {\n return new Response(this._bodyInit, {\n status: this.status,\n statusText: this.statusText,\n headers: new Headers(this.headers),\n url: this.url\n })\n}\n\nResponse.error = function() {\n var response = new Response(null, {status: 200, statusText: ''})\n response.ok = false\n response.status = 0\n response.type = 'error'\n return response\n}\n\nvar redirectStatuses = [301, 302, 303, 307, 308]\n\nResponse.redirect = function(url, status) {\n if (redirectStatuses.indexOf(status) === -1) {\n throw new RangeError('Invalid status code')\n }\n\n return new Response(null, {status: status, headers: {location: url}})\n}\n\nexport var DOMException = g.DOMException\ntry {\n new DOMException()\n} catch (err) {\n DOMException = function(message, name) {\n this.message = message\n this.name = name\n var error = Error(message)\n this.stack = error.stack\n }\n DOMException.prototype = Object.create(Error.prototype)\n DOMException.prototype.constructor = DOMException\n}\n\nexport function fetch(input, init) {\n return new Promise(function(resolve, reject) {\n var request = new Request(input, init)\n\n if (request.signal && request.signal.aborted) {\n return reject(new DOMException('Aborted', 'AbortError'))\n }\n\n var xhr = new XMLHttpRequest()\n\n function abortXhr() {\n xhr.abort()\n }\n\n xhr.onload = function() {\n var options = {\n statusText: xhr.statusText,\n headers: parseHeaders(xhr.getAllResponseHeaders() || '')\n }\n // This check if specifically for when a user fetches a file locally from the file system\n // Only if the status is out of a normal range\n if (request.url.indexOf('file://') === 0 && (xhr.status < 200 || xhr.status > 599)) {\n options.status = 200;\n } else {\n options.status = xhr.status;\n }\n options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL')\n var body = 'response' in xhr ? xhr.response : xhr.responseText\n setTimeout(function() {\n resolve(new Response(body, options))\n }, 0)\n }\n\n xhr.onerror = function() {\n setTimeout(function() {\n reject(new TypeError('Network request failed'))\n }, 0)\n }\n\n xhr.ontimeout = function() {\n setTimeout(function() {\n reject(new TypeError('Network request timed out'))\n }, 0)\n }\n\n xhr.onabort = function() {\n setTimeout(function() {\n reject(new DOMException('Aborted', 'AbortError'))\n }, 0)\n }\n\n function fixUrl(url) {\n try {\n return url === '' && g.location.href ? g.location.href : url\n } catch (e) {\n return url\n }\n }\n\n xhr.open(request.method, fixUrl(request.url), true)\n\n if (request.credentials === 'include') {\n xhr.withCredentials = true\n } else if (request.credentials === 'omit') {\n xhr.withCredentials = false\n }\n\n if ('responseType' in xhr) {\n if (support.blob) {\n xhr.responseType = 'blob'\n } else if (\n support.arrayBuffer\n ) {\n xhr.responseType = 'arraybuffer'\n }\n }\n\n if (init && typeof init.headers === 'object' && !(init.headers instanceof Headers || (g.Headers && init.headers instanceof g.Headers))) {\n var names = [];\n Object.getOwnPropertyNames(init.headers).forEach(function(name) {\n names.push(normalizeName(name))\n xhr.setRequestHeader(name, normalizeValue(init.headers[name]))\n })\n request.headers.forEach(function(value, name) {\n if (names.indexOf(name) === -1) {\n xhr.setRequestHeader(name, value)\n }\n })\n } else {\n request.headers.forEach(function(value, name) {\n xhr.setRequestHeader(name, value)\n })\n }\n\n if (request.signal) {\n request.signal.addEventListener('abort', abortXhr)\n\n xhr.onreadystatechange = function() {\n // DONE (success or failure)\n if (xhr.readyState === 4) {\n request.signal.removeEventListener('abort', abortXhr)\n }\n }\n }\n\n xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit)\n })\n}\n\nfetch.polyfill = true\n\nif (!g.fetch) {\n g.fetch = fetch\n g.Headers = Headers\n g.Request = Request\n g.Response = Response\n}\n","// the whatwg-fetch polyfill installs the fetch() function\n// on the global object (window or self)\n//\n// Return that as the export for use in Webpack, Browserify etc.\nrequire('whatwg-fetch');\nmodule.exports = self.fetch.bind(self);\n","var ShowErrorWay = {\r\n SHOW_ALL: 1,\r\n SHOW_FIRST: 2\r\n}\r\n\r\nexport { ShowErrorWay };","import { ShowErrorWay } from \"./calculator/utils.js\";\r\n\r\n\r\n/*\r\n * To define new field type create class which extends Field class\r\n */\r\nclass Field {\r\n constructor(selectorOrElem, options) {\r\n this.elem = $(selectorOrElem);\r\n this.options = options;\r\n this.defaultGetValue = options && 'defaultGetValue' in options ? options.defaultGetValue : null;\r\n this.init();\r\n this.valid = true;\r\n this.deleted = false;\r\n this.isDynamic = false;\r\n this._ignore = false;\r\n }\r\n\r\n // this method is required for matching type with class\r\n static keyName() { return ''; }\r\n\r\n getValue() { return undefined; }\r\n setValue(v) { }\r\n\r\n // this method is required for automatic calculation of defaultValue\r\n getClearValue() { return this.getValue(); }\r\n\r\n // this method is required for automatic export build\r\n getExportValue() { return this.getValue(); }\r\n\r\n // additional field setup\r\n init() { }\r\n\r\n // for silent check (send sender as argument of function f)\r\n onChange(f) {\r\n let self = this;\r\n this.elem.change(function (e) { f(self.elem[0]); });\r\n if (this.options && this.options.keyup) {\r\n this.elem.keyup(function (e) { f(self.elem[0]); });\r\n }\r\n return this.elem;\r\n }\r\n\r\n // allows showing reset button for ignored fields\r\n showReset() { return false; }\r\n\r\n // for auto detecting type\r\n static detect(elem) { return false; }\r\n\r\n errorIsVisible() { return this.elem.hasClass('err') || this.elem.find('.err').length > 0; }\r\n isFilled() { return this.getClearValue() !== this.defaultValue; }\r\n\r\n\r\n delete() {\r\n this.deleted = true;\r\n }\r\n\r\n get ignore() { return this._ignore; }\r\n set ignore(val) { this._ignore = val; }\r\n\r\n clearErrors() {\r\n const errClassElem = (this.params_.errClassElem === undefined ? this.elem : $(this.params_.errClassElem));\r\n errClassElem.removeClass('err');\r\n if (this.params_.errors !== undefined) {\r\n this.params_.errors.forEach(function (err) {\r\n if (err.errClassElem !== undefined)\r\n $(err.errClassElem).removeClass('err');\r\n $(err.selector).hide();\r\n });\r\n }\r\n }\r\n\r\n reset(params) {\r\n params = params || {};\r\n if (!params.keepValue) {\r\n this.setValue(this.defaultValue);\r\n }\r\n if (!params.keepErrors) {\r\n this.clearErrors();\r\n }\r\n }\r\n\r\n check(autoValidation, sender, phase, loud ) {\r\n if (phase < 2) {\r\n const silent = autoValidation && sender != this.elem[0] && !loud;\r\n const self = this.elem[0];\r\n let valid = true;\r\n if (this.params_.errors !== undefined) {\r\n const handler = (this.params_.showErrorWay == ShowErrorWay.SHOW_ALL ? 'forEach' : 'some');\r\n const v = this.getValue();\r\n const errClassElem = (this.params_.errClassElem === undefined ? this.elem : $(this.params_.errClassElem));\r\n if (!silent) this.clearErrors();\r\n this.params_.errors[handler](function (err) {\r\n if (!err.check(v, autoValidation)) {\r\n if (!silent) {\r\n $(err.selector).show();\r\n // fix for shadow DOM in ie\r\n if (window.document.documentMode && self.tagName == \"SUMMARY-INPUT\")\r\n $(err.selector).css('display', 'block');\r\n if (err.errClassElem !== undefined)\r\n $(err.errClassElem).addClass('err');\r\n else\r\n errClassElem.addClass('err');\r\n }\r\n valid = false;\r\n return true;\r\n }\r\n });\r\n }\r\n return valid;\r\n }\r\n return true;\r\n };\r\n}\r\n\r\n\r\nclass _BaseObjectField extends Field {\r\n getClearValue() { return tools.deepcopy(this.elem[0].value); }\r\n getValue() { return this.elem.val(); }\r\n setValue(v) { this.elem.val(v); }\r\n getExportValue() { return this.elem.val(); }\r\n isFilled() {\r\n const clearValue = this.getClearValue();\r\n for (const key in clearValue) {\r\n if (clearValue[key] !== this.defaultValue[key])\r\n return true;\r\n }\r\n return false;\r\n }\r\n}\r\n\r\n\r\nclass NumberField extends Field {\r\n static keyName() { return ''; }\r\n getClearValue() { return this.elem.val() === \"\" ? \"\" : this.getValue(); }\r\n setValue(v) { this.elem.val(v); }\r\n onChange(f) {\r\n let self = this;\r\n if (window.document.documentMode) {\r\n this.elem.blur(function (e) { f(self.elem[0]); });\r\n } else {\r\n this.elem.change(function (e) { f(self.elem[0]); });\r\n }\r\n if (this.options && this.options.keyup) {\r\n this.elem.keyup(function (e) { f(self.elem[0]); });\r\n }\r\n return this.elem;\r\n }\r\n setupNumberInput(isFloat, props, disableProps) {\r\n let self = this;\r\n disableProps = disableProps || [];\r\n if (this.options) {\r\n [\"maxVal\", \"minVal\", \"precision\"].forEach(function (name) {\r\n if (self.options[name] !== undefined) {\r\n if (disableProps.indexOf(name) >= 0) {\r\n console.error(`Prop ${name} is not allowed in field of type \"${self.keyName()}\"`);\r\n }\r\n else {\r\n props[name] = self.options[name];\r\n }\r\n }\r\n });\r\n }\r\n const $field = this.elem.closest('div.field-div');\r\n $field.find(\"input.base-input\").inputFilter(isFloat, props);\r\n this.elem.focusin(function () {\r\n this.classList.remove('err');\r\n $field.find(\".error-text\").hide();\r\n });\r\n }\r\n}\r\n\r\n\r\nclass CountField extends NumberField {\r\n static keyName() { return 'count'; }\r\n getValue() { return this.elem.val() ? tools.parseLocaleInt(this.elem.val()) : this.defaultGetValue; }\r\n init() { this.setupNumberInput(false, {}, ['precision']); }\r\n}\r\n\r\n\r\nclass YearField extends NumberField {\r\n static keyName() { return 'year'; }\r\n getValue() { return this.elem.val() ? tools.parseLocaleInt(this.elem.val()) : this.defaultGetValue; }\r\n init() { this.setupNumberInput(false, { allowSpaces: false, maxLength: 4 }, ['precision']); }\r\n}\r\n\r\n\r\nclass PeriodField extends NumberField {\r\n static keyName() { return 'period'; }\r\n getValue() { return this.elem.val() ? tools.parseLocaleInt(this.elem.val()) : this.defaultGetValue; }\r\n init() { this.setupNumberInput(false, { allowSpaces: false }, ['precision']); }\r\n}\r\n\r\n\r\nclass FloatField extends NumberField {\r\n static keyName() { return 'float'; }\r\n getValue() { return this.elem.val() ? tools.parseLocaleFloat(this.elem.val()) : this.defaultGetValue; }\r\n init() { this.setupNumberInput(true, {precision: 3}); }\r\n}\r\n\r\n\r\nclass MoneyField extends FloatField {\r\n static keyName() { return 'money'; }\r\n init() { this.setupNumberInput(true, {}, ['precision']); }\r\n}\r\n\r\n\r\nclass SelectField extends Field {\r\n static keyName() { return 'select'; }\r\n getValue() {\r\n return { value: this.elem[0].value, text: this.elem[0].itemText };\r\n }\r\n setValue(v) { this.elem.val(v); }\r\n init() {\r\n let self = this;\r\n this.elem.focusin(function () {\r\n var $field = $(this).closest('div.field-div');\r\n self.elem.removeClass('err');\r\n $field.find(\".error-text\").hide();\r\n });\r\n }\r\n onChange(f) {\r\n let self = this;\r\n return this.elem.change(function (e) { f(self.elem[0]); });\r\n }\r\n getClearValue() { return this.getValue().value; }\r\n getExportValue() { return this.getValue().text; }\r\n reset(params) {\r\n params = params || {};\r\n if (!params.keepValue) {\r\n this.elem[0].reset(this.defaultValue);\r\n }\r\n if (!params.keepErrors) {\r\n this.clearErrors();\r\n }\r\n }\r\n static detect(elem) {\r\n return elem[0].tagName === 'DROPDOWN-SELECT';\r\n }\r\n}\r\n\r\n\r\nclass RadioField extends Field {\r\n static keyName() { return 'radio'; }\r\n getValue() {\r\n var checkedElem = this.elem.find('input:checked');\r\n if (checkedElem.length > 0) {\r\n return { value: checkedElem[0].id, text: checkedElem.parent().find(\"label\").text() };\r\n }\r\n return undefined;\r\n }\r\n setValue(v) { this.elem.find('input#' + v).prop(\"checked\", true); }\r\n onChange(f) {\r\n let self = this;\r\n return this.elem.find('input').change(function (e) { f(self.elem[0]); });\r\n }\r\n getClearValue() { return this.getValue().value; }\r\n getExportValue() { return this.getValue().text; }\r\n static detect(elem) {\r\n return elem.find('.radio-elem').length > 0;\r\n }\r\n}\r\n\r\n\r\nclass CheckboxField extends Field {\r\n static keyName() { return 'checkbox'; }\r\n getValue() { return this.control.checked; }\r\n setValue(v) {this.control.checked = v; }\r\n init() {\r\n this.control = this.elem.find('input[type=\"checkbox\"]')[0];\r\n }\r\n onChange(f) {\r\n let self = this;\r\n return this.elem.find('input[type=\"checkbox\"]').change(function (e) {f(self.elem[0]); });\r\n }\r\n static detect(elem) {\r\n return elem.find('input[type=\"checkbox\"]').length == 1;\r\n }\r\n}\r\n\r\nclass TextField extends Field {\r\n static keyName() { return 'text'; }\r\n getClearValue() { return this.elem.val();}\r\n getValue() {\r\n const val = tools.removeExtraSpace(this.elem.val());\r\n return (this.options && this.options.raw ? val : tools.escapeTags(val));\r\n }\r\n setValue(v) { this.elem.val(v); }\r\n isFilled() { return false; }\r\n}\r\n\r\nclass LinkField extends Field {\r\n static keyName() { return 'link'; }\r\n getValue() {\r\n const selectedLink = this.elem.find('a.selected-link');\r\n if (selectedLink.length > 0) {\r\n return selectedLink.data(\"type\");\r\n }\r\n return undefined;\r\n }\r\n setValue(v) { this.elem.find(`a[data-type=\"${v}\"]`).addClass(\"selected-link\"); }\r\n init() {\r\n const self = this;\r\n this.elem.find('a').click(function (event) {\r\n event.preventDefault();\r\n self.elem.find('a').removeClass('selected-link');\r\n $(this).addClass('selected-link');\r\n return false;\r\n });\r\n }\r\n onChange(f) {\r\n let self = this;\r\n return this.elem.find('a').click(function (e) { f(self.elem[0]); });\r\n }\r\n getClearValue() { return this.getValue(); }\r\n getExportValue() { return this.getValue(); }\r\n reset(params) {\r\n this.elem.find('a').removeClass('selected-link');\r\n this.setValue(this.defaultGetValue);\r\n }\r\n static detect(elem) {\r\n return elem.find('a.selected-link').length > 0;\r\n }\r\n}\r\n\r\nconst fields = [MoneyField, FloatField, SelectField, RadioField, CountField, YearField, PeriodField, CheckboxField, TextField, LinkField];\r\n\r\nexport { fields, Field, _BaseObjectField, RadioField, TextField, FloatField };\r\n","import { CalculatorInterface } from \"./calc_interface.js\"\r\n\r\n\r\nexport class CalculatorComplex extends CalculatorInterface {\r\n /**\r\n * Scans document or node (if htmlNode is set)\r\n * @param {any} htmlNode - set if you need to scan fields inside specific node (useful for dynamic content)\r\n * @returns {Object} {inputs, outputs}\r\n */\r\n fetchFields(htmlNode) {\r\n const calc_ = this;\r\n if (htmlNode == undefined)\r\n htmlNode = document;\r\n const $node = $(htmlNode);\r\n\r\n function scopeEvalFunc(underscore, script) {\r\n return new Function(`\"use strict\"; const cc = this; const _ = cc[\"${underscore}\"]; return ${script};`).bind(calc_);\r\n }\r\n\r\n function parseNameType(text) {\r\n const parts = /^(\\[(.*?)\\])?([^\\[\\]\\:]+)(\\:(.+))?$/g.exec(text);\r\n if (parts === null) {\r\n throw new Error(`Incorrect format for cc:input value (\"${attr}\"). Must be \"name\" or \"[type]name\"`);\r\n }\r\n const paramString = parts[5];\r\n const options = (parts[2] !== undefined ? { type: parts[2] } : {});\r\n\r\n if (paramString !== undefined) {\r\n paramString.match(/(?:[^,\\s\\[]+(?:\\[.*?\\])?)(?=\\s*,|\\s*$)/g).forEach(item => {\r\n const splitPos = item.indexOf('=');\r\n if (splitPos < 0) {\r\n console.warn(`Incorrect option value '${item}'. Must be something like 'option=value'. Ignoring...`);\r\n return false;\r\n }\r\n const varName = item.substr(0, splitPos);\r\n let value = item.substr(splitPos + 1);\r\n\r\n if (/^\\d+$/.test(value)) {\r\n value = parseInt(value);\r\n }\r\n else if (/^\\d+(\\.\\d+)?$/.test(value)) {\r\n value = parseFloat(value);\r\n }\r\n else if (/^false|true$/i.test(value)) {\r\n value = (value.toLowerCase() === 'true');\r\n }\r\n else if (/^\\[.*\\]$/.test(value)) {\r\n value = value.slice(1, -1).split(',').map(e => e.trim());\r\n }\r\n else {\r\n try {\r\n value = JSON.parse(value);\r\n } catch (e) {}\r\n }\r\n\r\n options[varName] = value;\r\n });\r\n }\r\n return { name: parts[3], options };\r\n }\r\n\r\n function checkClass(el) {\r\n const class_ = $(el).closest('[cc\\\\:class]');\r\n if (class_.length > 0 && class_[0].getAttribute('cc:class') !== calc_.autoKey()) {\r\n return false;\r\n }\r\n const inTemplate = $(el).closest('.template-list-row').length > 0;\r\n return !inTemplate;\r\n }\r\n\r\n $node.find('[cc\\\\:click]').map((index, el) => {\r\n if(checkClass(el)){\r\n const self = this;\r\n const clickOptions = parseNameType(el.getAttribute('cc:click'));\r\n $(el).on('click', function () {\r\n const result = scopeEvalFunc('_', clickOptions.name)();\r\n if (clickOptions?.options?.submit !== false){\r\n self.autoSubmit(null, true); \r\n }\r\n return result;\r\n });\r\n }\r\n });\r\n\r\n this.toggleClasses = $node.find('[cc\\\\:classname]').toArray().map(el => {\r\n const attr = el.getAttribute(\"cc:classname\");\r\n const classesObj = JSON.parse(attr);\r\n \r\n return {\r\n toggle: () => {\r\n for(let className in classesObj) {\r\n const condition = classesObj[className];\r\n if (scopeEvalFunc('_', condition)()) {\r\n el.classList.add(className);\r\n } else {\r\n el.classList.remove(className);\r\n }\r\n }\r\n }\r\n }\r\n });\r\n\r\n return {\r\n inputs: $node.find('[cc\\\\:input]').toArray().map(el => {\r\n if (checkClass(el)) {\r\n const attr = el.getAttribute('cc:input');\r\n const { name, options } = parseNameType(attr);\r\n return [el, name, options];\r\n } else {\r\n return null;\r\n }\r\n }),\r\n outputs: $node.find('[cc\\\\:output]').toArray().map(el => {\r\n if (checkClass(el)) {\r\n const attr = el.getAttribute('cc:output');\r\n let { name, options } = parseNameType(attr);\r\n const renderCode = el.getAttribute('cc:render');\r\n\r\n if (renderCode !== null) {\r\n options.render = function (x) { return scopeEvalFunc(name, renderCode)(); }\r\n }\r\n\r\n if (Object.keys(options).length === 0)\r\n options = undefined;\r\n\r\n return [el, name, options];\r\n } else {\r\n return null;\r\n }\r\n }).concat($node.find('[cc\\\\:if]').toArray().map(el => {\r\n if (checkClass(el)) {\r\n \r\n let attr = el.getAttribute('cc:if');\r\n if (attr[0] == '@') {\r\n attr = $(attr.substr(1))[0].getAttribute('cc:if');\r\n }\r\n return [el, \"\", { type: \"toggle\", render: function () { return scopeEvalFunc('_', attr)(); } }];\r\n } else {\r\n return null;\r\n }\r\n })).concat($node.find('[cc\\\\:ifhash]').toArray().map(el => {\r\n if(checkClass(el)){\r\n let attr = el.getAttribute('cc:ifHash');\r\n let self = this;\r\n\r\n return [el, \"\", { type: \"toggle\", render: function () { \r\n return self.checkHash(attr);\r\n } }];\r\n }\r\n return null;\r\n })).concat($node.find('[cc\\\\:forceif]').toArray().map(el => {\r\n if (checkClass(el)) {\r\n let attr = el.getAttribute('cc:forceIf');\r\n if (attr[0] == '@') {\r\n attr = $(attr.substr(1))[0].getAttribute('cc:forceif');\r\n }\r\n return [el, \"\", {type: \"toggle\", render: function () {return scopeEvalFunc('_', attr)();}}, true];\r\n } else {\r\n return null;\r\n }\r\n })),\r\n }\r\n }\r\n \r\n\r\n writePath(obj, path, value, gentle=false) {\r\n if (Array.isArray(obj)) {\r\n obj.forEach(o => this.writePath(o, path, value, gentle));\r\n return;\r\n }\r\n\r\n let parts = path.split('.');\r\n let target = obj;\r\n parts.forEach(function (part, index) {\r\n if (target !== null) {\r\n if (part.indexOf('[]') >= 0) {\r\n let id_ = /[:]\\d+/.exec(part);\r\n id_ = (id_ == null ? -1 : id_[0]);\r\n let clearPart = part.replace(/([:]\\d+)\\[\\]/g, '');\r\n if (target[clearPart] === undefined)\r\n target[clearPart] = [];\r\n if (!target[clearPart].some(o => {\r\n if (o.__id == id_) {\r\n target = o;\r\n return true;\r\n }\r\n })) {\r\n if (gentle) { target = null; return true; }\r\n target[clearPart].push((id_ < 0 ? {} : { __id: id_ }));\r\n target = target[clearPart][target[clearPart].length - 1];\r\n }\r\n } else {\r\n if (index == parts.length - 1) {\r\n target[part] = value;\r\n } else {\r\n if (target[part] === undefined) {\r\n if (gentle) { target = null; return true; }\r\n target[part] = {};\r\n }\r\n target = target[part];\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n\r\n /**\r\n * \r\n * @param {string} name (where value saves: this.[].key\r\n * @param {*} params next keys:\r\n * required:\r\n * table - where to place our elements\r\n * appendButtonSelector - selector for button which will add new item of this dynamic field\r\n * removeSelector - selector (inside template) which deletes particular item\r\n * fields - object {: {selector, options($clone)}}\r\n * \r\n * optional: \r\n * removeFirstEvent() - make some additional acts during removing\r\n * keepOne - true when one element cannot be deleted(false by default)\r\n * keepTable - true when table should be shown, even when keepOne=false (false by default)\r\n * ignoreForEmpty - if true, block wil be ignored if all fields are empty\r\n * prepareTemplate($clone, blockPiece) should return {block: $clone, artifacts: obj(optional)\r\n * (this method can help you to prepare item before placing)\r\n * beforeRemoval($clone) - make some additional acts before removal\r\n * afterRemoval() - make some additional acts after removal\r\n * dontSubmitOnRemove - turning off submitForm in remove()\r\n */\r\n addDynamicField(name, params){\r\n let self = this;\r\n let parent = params.parent || $(document.body);\r\n let fetchRootElem = (selector) => typeof (selector) == \"string\" ? tools.findExternalOnly(parent, selector) : $(selector);\r\n let $table = fetchRootElem(params.table);\r\n let $dataExpandableDiv = $(`.expandablerow[data-expandablediv = '${$table.parent().attr(\"id\")}']`);\r\n let elements = [];\r\n\r\n \r\n function createClone(silent) {\r\n let $template = tools.findExternalOnly($table, \".template-list-row\");\r\n let $lastRow = tools.findExternalOnly($table, '.dynamic-list-row').last();\r\n let $clone = $($table[0].querySelector(\".template-list-row\").cloneNode(true));\r\n let _id = self.genUniqueId();\r\n\r\n let blockPiece = {\r\n index: (() => {\r\n const valid = elements.filter(e => !e.removed);\r\n return valid.length > 0 ? valid[valid.length - 1].index + 1 : 0;\r\n })(),\r\n fields: [],\r\n reset: function() {\r\n if (tools.findExternalOnly($table, '.dynamic-list-row').length > 1 || !params.keepOne) {\r\n if (params.beforeRemoval !== undefined) {\r\n params.beforeRemoval($clone);\r\n }\r\n $clone.remove();\r\n this.fields.map(field => field.delete());\r\n this.removed = true;\r\n if (params.afterRemoval !== undefined) {\r\n params.afterRemoval();\r\n }\r\n } else {\r\n this.index = 0;\r\n }\r\n },\r\n isFilled: function () {\r\n return this.fields.some(f => f.isFilled());\r\n },\r\n artifacts: [],\r\n getFieldsFlat: function () {\r\n let result = [];\r\n this.fields.forEach(f => {\r\n if (f.isDynamic) {\r\n f.getElements().forEach(e => {\r\n result = result.concat(e.getFieldsFlat());\r\n });\r\n } else {\r\n result.push(f);\r\n }\r\n });\r\n return result;\r\n },\r\n tree: {},\r\n removed: false,\r\n remove: function () {\r\n this.removed = true;\r\n let elementsCount = elements.filter(x => !x.removed).length\r\n if (elementsCount === 0) {\r\n if (!params.keepOne) {\r\n $clone.closest('div').hide();\r\n $clone.closest('.expandable-div').find('.expandablerow').addClass('expandablerow-collapsed');\r\n $clone.closest('.expandable-div').find(\".tab-expandablerow-add\").attr(\"tabindex\", \"0\");\r\n }else{\r\n this.removed = false;\r\n }\r\n if (params.removeFirstEvent !== undefined)\r\n params.removeFirstEvent();\r\n }\r\n this.reset();\r\n if (!params.dontSubmitOnRemove)\r\n self.submitForm(null, !self._submitOnChange);\r\n }\r\n }\r\n\r\n $clone.removeClass('template-list-row').addClass('dynamic-list-row');\r\n\r\n // auto fields\r\n self.fetchFields($clone).inputs.forEach(([el, item, options]) => {\r\n const fieldParams = { disabledSubmitting: true, parent: $clone, ...options };\r\n const field = self.addInputField(el, `${name}:${_id}[].${item}`, fieldParams);\r\n blockPiece.tree[item] = field;\r\n blockPiece.fields.push(field);\r\n });\r\n\r\n if (params.fields !== undefined) {\r\n for (let item in params.fields) {\r\n let value = params.fields[item];\r\n let fieldParams = {};\r\n if (typeof (value) === \"string\") {\r\n value = { selector: value };\r\n } else if (value.options !== undefined) {\r\n fieldParams = typeof (value.options) === \"function\" ? value.options($clone) : value.options;\r\n }\r\n fieldParams.disabledSubmitting = true;\r\n fieldParams.parent = $clone;\r\n\r\n const field = self.addInputField($clone.find(value.selector), `${name}:${_id}[].${item}`, fieldParams);\r\n blockPiece.tree[item] = field;\r\n blockPiece.fields.push(field);\r\n }\r\n }\r\n\r\n $clone.find(params.removeSelector).first().click((e) => {\r\n e.preventDefault();\r\n blockPiece.remove();\r\n $(e.target).blur();\r\n });\r\n\r\n let anchor = $lastRow.length === 1 ? $lastRow : $template;\r\n params.prepareTemplate = params.prepareTemplate || (c => { return { block: c }; });\r\n const { block, artifacts } = params.prepareTemplate($clone, blockPiece);\r\n anchor[0].insertAdjacentElement('afterEnd', block[0]);\r\n\r\n if (artifacts !== undefined) {\r\n for (let key in artifacts) {\r\n blockPiece.artifacts.push({\r\n path: `${name}:${_id}[].${key}`,\r\n value: artifacts[key],\r\n name: self.removePathId(`${name}:${_id}[].${key}`),\r\n });\r\n blockPiece.tree[key] = artifacts[key];\r\n }\r\n }\r\n\r\n elements.push(blockPiece);\r\n\r\n if (!silent) {\r\n self.submitForm(null, !self._submitOnChange);\r\n }\r\n\r\n blockPiece.fields.forEach(f => { f.params_.disabledSubmitting = false; });\r\n }\r\n\r\n if(params.keepOne)\r\n createClone(true);\r\n\r\n fetchRootElem(params.appendButtonSelector).click(() => createClone());\r\n\r\n // AG TODO: WILL NOT WORK WITH DYNAMIC-IN-DYNAMIC. NEED TO BE REFACTORED!\r\n $dataExpandableDiv.click(function () {\r\n var $this = $(this);\r\n if ($this.hasClass('expandablerow-collapsed')) {\r\n $this.removeClass('expandablerow-collapsed');\r\n\r\n var $expandableDiv = $('#' + $this.data('expandablediv'));\r\n $expandableDiv.show();\r\n\r\n $this.find(\".tab-expandablerow-add\").attr(\"tabindex\", \"-1\");\r\n\r\n if (tools.findExternalOnly($expandableDiv, '.dynamic-list-row').length === 0) {\r\n createClone();\r\n }\r\n }\r\n });\r\n\r\n let result = {\r\n isDynamic: true,\r\n reset: function () {\r\n elements.forEach((item) => item.reset());\r\n if (!params.keepOne) {\r\n if (!params.keepTable)\r\n $table.parent().hide();\r\n $dataExpandableDiv.addClass('expandablerow-collapsed');\r\n }\r\n if (params.removeFirstEvent !== undefined)\r\n params.removeFirstEvent();\r\n },\r\n params_: params,\r\n getElements: function () {\r\n return elements.filter(bp => !bp.removed);\r\n },\r\n delete: function () {\r\n elements.forEach((item) => item.fields.forEach(f => f.delete()));\r\n },\r\n isFilled: function () { return elements.some(e => e.isFilled()); },\r\n ignoredEmptyFields: function () {\r\n let result = [];\r\n if (params.ignoreForEmpty) {\r\n elements.forEach((e) => {\r\n if (!e.isFilled()) {\r\n result = result.concat(e.getFieldsFlat().map(f => f.varName));\r\n }\r\n });\r\n }\r\n return result;\r\n },\r\n setCount: function ({count, removeStrategy = \"simple\" }) {\r\n let currentCount = this.getElements().length;\r\n if (count !== currentCount) {\r\n if (count > currentCount) {\r\n while (this.getElements().length < count)\r\n createClone();\r\n } else {\r\n if (removeStrategy === \"simple\") {\r\n this.getElements().forEach((bp, i) => { if (i >= count) bp.remove(); });\r\n }\r\n }\r\n }\r\n }\r\n };\r\n\r\n this._dynamicFields.push(result);\r\n\r\n if (params.keepOne && !params.disabledSubmitting)\r\n self.submitForm(null, !self._submitOnChange);\r\n\r\n return result;\r\n }\r\n\r\n\r\n /**\r\n * Adds group of fields to calculator.\r\n * @param {any} nameOrNames to fetch all fields you need\r\n * @param {any} checker function f(fields, options) which returns object {valid: bool, artifacts: obj}\r\n * @param {any} options is additional parameters for group\r\n */\r\n addGroup(nameOrNames, checker, options) {\r\n let self = this;\r\n\r\n this.fieldGroups.push({\r\n getFields: function () {\r\n let resList = [];\r\n function checkField(f, name) {\r\n return !f.ignore && !f.__tmpIgnore && self.isPathInside(f.name, name);\r\n }\r\n if (typeof (nameOrNames) === 'string') {\r\n nameOrNames = [nameOrNames];\r\n }\r\n\r\n nameOrNames.forEach(function (name) {\r\n resList = resList.concat(self.inputFields.filter(f => checkField(f, name)));\r\n });\r\n\r\n resList.tree = {};\r\n resList.forEach((f) => { self.writePath(resList.tree, f.varName, f); });\r\n\r\n self._dynamicFields.forEach(df => {\r\n df.getElements().forEach(e => {\r\n e.artifacts.filter(a => nameOrNames.some(name => self.isPathInside(a.name, name))).forEach(a => {\r\n self.writePath(resList.tree, a.path, a.value);\r\n });\r\n });\r\n });\r\n\r\n return resList;\r\n },\r\n check: function (sender, autoValidation) {\r\n let fields = this.getFields();\r\n let newOptions = { sender: sender, autoValidation: autoValidation };\r\n for (let key in options) {\r\n newOptions[key] = options[key];\r\n }\r\n return checker(fields, newOptions);\r\n }\r\n });\r\n }\r\n\r\n\r\n /**\r\n * Parses all input fields and initialises connected variables\r\n * */\r\n parse(sender, autoValidation) {\r\n var self = this;\r\n const newValues = this.irregularValueNames.reduce((acc, v) => { acc[v] = self[v]; return acc; }, {});\r\n this.log(\"Irregular value obj:\", newValues);\r\n this.inputFields.forEach(function (field) {\r\n field.__tmpIgnore = false;\r\n self.clearPath(self, field.name);\r\n self.clearPath(self._exportObject.parse, field.name);\r\n });\r\n\r\n let ignoreList = this._dynamicFields.reduce((accum, v) => accum.concat(v.ignoredEmptyFields()), []);\r\n this.inputFields = this.inputFields.filter(function (f) { return !f.deleted; });\r\n\r\n var result = {\r\n valid: true,\r\n filled: this.defaultFilled,\r\n enableResetButton: false,\r\n hasValueChanges: false\r\n };\r\n\r\n let fieldsToParse = this.inputFields.filter(function (f) {\r\n let ignoreCouseEmpty = ignoreList.indexOf(f.varName) >= 0;\r\n if (f.showReset()) {\r\n result.enableResetButton = true;\r\n }\r\n if (f.ignore)\r\n f.reset({ keepValue: !self.resetValuesOnIgnore });\r\n else if (ignoreCouseEmpty) {\r\n f.__tmpIgnore = true;\r\n f.reset({ keepValue: true });\r\n }\r\n return !f.ignore && !ignoreCouseEmpty;\r\n });\r\n\r\n const unsilence = [];\r\n if (sender) {\r\n const senderField = fieldsToParse.find(f => sender == f.elem[0]);\r\n if (senderField && senderField.params_.unsilence)\r\n unsilence.push(...senderField.params_.unsilence);\r\n }\r\n \r\n // first phase\r\n fieldsToParse.forEach(function (field) {\r\n var res = field.check(autoValidation, sender, 1, unsilence.indexOf(field.name) >= 0);\r\n field.valid = res;\r\n\r\n if (field.isFilled()) {\r\n result.filled = true;\r\n }\r\n if (field.errorIsVisible()) {\r\n result.enableResetButton = true;\r\n }\r\n\r\n if (!res)\r\n result.valid = false;\r\n else if (field.name !== undefined) {\r\n self.writePath([self, newValues], field.varName, field.getValue());\r\n self.writePath(self._exportObject.parse, field.varName, field.getExportValue());\r\n }\r\n });\r\n\r\n // dynamicField artifacts\r\n this._dynamicFields.forEach(df => {\r\n df.getElements().forEach(e => {\r\n e.artifacts.forEach(a => {self.writePath([self, newValues], a.path, a.value, true);});\r\n });\r\n });\r\n\r\n this.afterFirstPhaseCheck();\r\n\r\n // second phase\r\n fieldsToParse.forEach(function (field) {\r\n var res = field.check(autoValidation, sender, 2);\r\n if (!res)\r\n result.valid = field.valid = false;\r\n });\r\n if (!autoValidation) {\r\n const newValuesString = JSON.stringify(newValues);\r\n result.hasValueChanges = this.lastValuesString !== newValuesString;\r\n this.lastValuesString = newValuesString;\r\n }\r\n\r\n this.fieldGroups.forEach(group => {\r\n let res = this.processGroup(group, sender, autoValidation);\r\n if (!res)\r\n result.valid = false;\r\n });\r\n\r\n this.log(\"PARSE: \", this);\r\n result.enableResetButton = result.enableResetButton || result.filled;\r\n this.afterParse(sender, autoValidation);\r\n this.forceRender();\r\n return result;\r\n }\r\n\r\n\r\n\r\n submitForm(sender, autoValidation, skipValueChangesCheck = false) {\r\n if(!this.isActive) return;\r\n this._exportObject = {\r\n parse: {},\r\n render: {notes: []}\r\n };\r\n \r\n if (this.beforeSubmit() === false) {\r\n return;\r\n }\r\n\r\n let parsing = this.parse(sender, autoValidation);\r\n this.resetButtons.forEach(function (elem) {\r\n (parsing.enableResetButton ? elem.show() : elem.hide());\r\n });\r\n\r\n if (parsing.filled && !this._statistic.startedSent) {\r\n this.sendStatisticMessage('Is_Started');\r\n this._statistic.startedSent = true;\r\n }\r\n\r\n if (!this.isReady()) {\r\n return; // AG TODO: Maybe wait for ready? Design how to do it.\r\n }\r\n\r\n this.log(\"BEFORE CALC: valid=\", parsing.valid);\r\n \r\n if (!this.calculateForValidOnly || parsing.valid) {\r\n this.toggleCustomClasses();\r\n let calcValid = this.calculate({ sender: sender, autoValidation: autoValidation });\r\n this.log('AFTER CALCULATE: ', this);\r\n if (!autoValidation && (skipValueChangesCheck || parsing.hasValueChanges)) {\r\n if (parsing.valid && calcValid) {\r\n this.beforeRender();\r\n this.render();\r\n this._exportObjectFinal = tools.deepcopy(this.generateExportObject());\r\n this.showResults();\r\n } else {\r\n this.hideResults();\r\n }\r\n }\r\n }\r\n\r\n if (!parsing.valid && !autoValidation) {\r\n this.renderError();\r\n }\r\n\r\n this.log(\"EXPORT OBJECT:\", this._exportObject);\r\n this.afterSubmit();\r\n }\r\n \r\n}\r\n","import { ShowErrorWay } from \"./utils.js\";\r\n\r\nexport class CalculatorInterface {\r\n constructor() {\r\n this.debug = false;\r\n this._fieldTypes = [];\r\n this.inputFields = [];\r\n this.outputFields = [];\r\n this.forceOutputs = [];\r\n this.fieldGroups = [];\r\n this.showErrorWay = ShowErrorWay.SHOW_ALL;\r\n this.resetButtons = [];\r\n this._exportObject = {};\r\n this._exportObjectFinal = {};\r\n this.calculateForValidOnly = true;\r\n this.resetValuesOnIgnore = false;\r\n this._submitOnChange = false;\r\n this.isActive = true;\r\n this._dynamicFields = [];\r\n this._inputFieldsTree = {fields: []};\r\n this.view = \"\";\r\n this.irregularValueNames = [];\r\n this.lastValuesString = \"\";\r\n }\r\n\r\n code() { return \"three_letter_code_of_calculator\"; } // reimplement it in inherited classes\r\n type() { return \"code_for_export\"; } // reimplement it in inherited classes\r\n\r\n autoKey() { return '0'; } // used for calculator with tabs (every tab - one mini calculator)\r\n initialize() { } // use this instead of redefining constructor\r\n calculate(params) { } // calculation method (all calculations of calculator should be here)\r\n beforeSubmit() { } // before parsing\r\n afterSubmit() { } // at the end of submit\r\n afterParse(sender, autoValidation) { }\r\n beforeRender() { }\r\n onReset() { }\r\n afterFirstPhaseCheck() { }\r\n isReady() { return true; }\r\n log(...args) {}\r\n setupHandlers() {}\r\n setHash(hash){}\r\n checkHash(hash) {}\r\n getHash() {}\r\n\r\n autoSubmit(sender, skipValueChangesCheck) {\r\n sender = sender || null;\r\n this.submitForm(sender, false, skipValueChangesCheck);\r\n }\r\n fetchFields(htmlNode) {}\r\n\r\n autoAddFields() {} // adds fields from special html attributes\r\n loadDescription(feedbackBottom = true) {} // just loads description from file\r\n patchFieldTypes(newFieldTypes) {} // updates field-type library\r\n\r\n showResults() {$('.calc-div-results').addClass('show-results');} // shows result\r\n hideResults() {} // hides result\r\n\r\n generateExportObject() { return this._exportObject; }\r\n get defaultFilled(){ return false; }\r\n setupStatistic(params) {} // setups statistic module\r\n sendStatisticMessage(string_or_object) {} // sends statistic message to YM\r\n submitOnClick(selectorOrElem) {} // turn on submitting on elem click\r\n submitOnChange() {} // make submit on change\r\n\r\n addResetButton(selector, hideOnDefault) {}\r\n\r\n genUniqueId() { return Math.random() * 1e7 | 0; }\r\n\r\n writePath(obj, path, value, gentle=false) {} // method for writing propery into this object using path (used to generate input values for calculation stage)\r\n removePathId(path) {} // remove path\r\n clearPath(obj, path) {} // clears path\r\n isPathInside(path, srcPath) {} // checks if path inside\r\n \r\n addInputField(selector, name, params) {}\r\n addDynamicField(name, params){}\r\n addGroup(nameOrNames, checker, options) {}\r\n \r\n processGroup(group, sender, autoValidation) { } // Parses group with internal checks (between elements inside group)\r\n\r\n parse(sender, autoValidation) { } // Parses all input fields and initialises connected variables\r\n resetInputFields(params) {}\r\n \r\n addOutputField(selector, name, params, forced = false) {}\r\n\r\n render() {}\r\n\r\n forceRender() {}\r\n\r\n toggleCustomClasses() {}\r\n\r\n renderError() {}\r\n\r\n /**\r\n * Submits form\r\n * - calls beforeSubmit (if it returns false, stops)\r\n * - parse\r\n * - toggling reset buttons\r\n * - Is_Started stat send\r\n * - calls isReady (if false, breaks, but almost always should be true)\r\n * - if parse result is valid:\r\n * - toggle custom classes\r\n * - call calculate\r\n * - if calculation is not valid, hides result part, otherwise \r\n * call beforeRender, then render, then generateExportObject, then shows results\r\n * - renders error for invalid parsing result\r\n * - calls afterSubmit\r\n */\r\n submitForm(sender, autoValidation, skipValueChangesCheck = false) {} \r\n autoValidate(sender) {} \r\n}","class BaseOutputField {\r\n constructor(calculator, selector, name, params) {\r\n this.calculator = calculator;\r\n this.container = $(selector);\r\n this.name = name;\r\n this.params = params;\r\n this.setup();\r\n }\r\n\r\n setup() {}\r\n\r\n get(paramName, defaultValue) {\r\n if (this.params !== undefined && this.params[paramName] !== undefined)\r\n return this.params[paramName];\r\n return defaultValue;\r\n }\r\n\r\n get renderMethod() {\r\n if (this.get('html') !== undefined) {\r\n return 'html';\r\n }\r\n return 'text';\r\n }\r\n\r\n get type() {\r\n return this.get('type', 'text');\r\n }\r\n\r\n get value() {\r\n return this.calculator[this.name];\r\n }\r\n\r\n compose() {\r\n const val = this.value;\r\n if (this.params === undefined && val !== undefined) {\r\n if (val.hasOwnProperty('text'))\r\n return val.text;\r\n return val;\r\n }\r\n }\r\n\r\n compose_() {\r\n const renderFunc = this.get('render');\r\n if (renderFunc === undefined) {\r\n return this.compose();\r\n }\r\n return renderFunc(this.value);\r\n }\r\n\r\n render() {\r\n this.container[this.renderMethod](this.compose_());\r\n }\r\n\r\n renderExport(exportObject) {\r\n exportObject[this.name + '_' + this.type] = this.compose_();\r\n }\r\n}\r\n\r\nclass RenderRequiredOutputField extends BaseOutputField {\r\n setup() {\r\n const renderFunc = this.get('render');\r\n if (renderFunc == undefined) {\r\n console.error(`You must write render method for [${this.type}] type of output field.`);\r\n }\r\n this.renderFunc = renderFunc;\r\n }\r\n\r\n compose() {\r\n return this.renderFunc(this.value);\r\n }\r\n}\r\n\r\nclass HtmlOutputField extends BaseOutputField {\r\n get renderMethod() { return 'html'; }\r\n}\r\n\r\nclass TextField extends HtmlOutputField {\r\n compose() { return this.value; }\r\n}\r\n\r\nclass LocaleNumOutputField extends BaseOutputField {\r\n compose() {\r\n const options = {\r\n minPrecision: this.get('minPrecision'),\r\n maxPrecision: this.get('maxPrecision')\r\n };\r\n return tools.getLocaleNumber(this.value, options);\r\n }\r\n}\r\n\r\nclass LocaleSumOutputField extends BaseOutputField {\r\n compose() { return tools.getLocaleSum(this.value); }\r\n}\r\n\r\nclass MoneyRubleOutputField extends HtmlOutputField {\r\n compose() { return tools.getLocaleSumInRubbles(this.value); }\r\n}\r\n\r\nclass MoneyTextOutputField extends BaseOutputField {\r\n compose() { return tools.verboseNumber(this.value); }\r\n}\r\n\r\nclass MoneyRoundedRubleField extends HtmlOutputField {\r\n compose() { return tools.getRoundedNumberInRubbles(this.value); }\r\n}\r\n\r\nclass MoneyRoundedRubleOutputField extends HtmlOutputField {\r\n compose() { return tools.getRoundedNumberInRubbles(this.value); }\r\n}\r\n\r\nclass PeriodOutputField extends BaseOutputField {\r\n compose() {\r\n const from_ = this.value.dateFrom.toLocaleFormat();\r\n const to_ = this.value.dateTo.toLocaleFormat();\r\n switch (this.get('kind', 'with-duration')) {\r\n case 'with-duration':\r\n return `с ${from_} по ${to_} (${this.value.duration.inDays} дн.)`;\r\n case 'with-full-duration':\r\n return `с ${from_} по ${to_} (${tools.verboseCountingValue(this.value.duration.inDays, [['день', 'дня', 'дней']])})`;\r\n }\r\n }\r\n}\r\n\r\nclass DateOutputField extends BaseOutputField {\r\n compose() { return this.value.toLocaleFormat(); }\r\n}\r\n\r\nclass DayOutputField extends BaseOutputField {\r\n compose() { \r\n return tools.verboseCountingValue(this.value, [[\"день\", \"дня\", \"дней\"]]);}\r\n}\r\n\r\nclass PercentOutputField extends HtmlOutputField {\r\n compose() {\r\n const options = {\r\n minPrecision: this.get('minPrecision'),\r\n maxPrecision: this.get('maxPrecision')\r\n };\r\n\r\n return tools.getLocaleNumber(this.value, options) + \"%\";\r\n }\r\n}\r\n\r\nclass NoteOutputField extends RenderRequiredOutputField {\r\n render() {\r\n const result = this.compose_();\r\n this.container.removeClass('active only-print');\r\n if (result === 'print' || result === true) {\r\n this.container.addClass('active');\r\n if (result === 'print') {\r\n this.container.addClass('only-print');\r\n }\r\n }\r\n }\r\n\r\n renderExport(exportObject) {\r\n const result = this.compose_();\r\n if (result === 'print' || result === true) {\r\n exportObject.notes.push(tools.convertElemToTextWithLinksForExport(this.container));\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * works with only direct children elements\r\n * Takes optional params: \r\n * - parseLink : true if convertElemToTextWithLinksForExport is needed\r\n * - selector : selector for additional logic\r\n */\r\nclass ExportVisibleOutputField extends BaseOutputField {\r\n renderExport(exportObject) {\r\n const selector = this.get('selector', '> *');\r\n const htmlObject = this.container.find(`${selector}:visible`).toArray().filter(x=>$(x).text())[0];\r\n\r\n exportObject[this.name] = this.get(\"parseLink\") && htmlObject \r\n ? tools.convertElemToTextWithLinksForExport(htmlObject) \r\n : $(htmlObject).text();\r\n }\r\n}\r\n\r\n/**\r\n * Takes optional params: \r\n * - duration : object with slideUp and slideDown time or true to use default time\r\n */\r\nclass ToggleOutputField extends RenderRequiredOutputField {\r\n render() {\r\n const slideUpTime = this.get('duration', {slideUp : undefined}).slideUp;\r\n const slideDownTime = this.get('duration', {slideDown : undefined}).slideDown;\r\n\r\n const show = () => this.get('duration') ? this.container.slideDown(slideUpTime || 400) : this.container.show();\r\n const hide = () => this.get('duration') ? this.container.slideUp(slideDownTime || 400) : this.container.hide();\r\n\r\n if (this.compose_())\r\n show();\r\n else\r\n hide();\r\n }\r\n}\r\n\r\nclass ConditionalBlockOutputField extends RenderRequiredOutputField {\r\n setup() {\r\n super.setup();\r\n const alternativeBlockSelector = this.get('alternativeBlock', '');\r\n if (alternativeBlockSelector === '') {\r\n console.warn(\"It's bad way to use `conditionalBlock` with empty alternativeBlock param. Try to use `toggle` instead.\")\r\n }\r\n this.alternativeBlock = $(alternativeBlockSelector);\r\n }\r\n\r\n render() {\r\n if (this.compose_()) {\r\n this.container.show();\r\n this.alternativeBlock.hide();\r\n }\r\n else {\r\n this.container.hide();\r\n this.alternativeBlock.show();\r\n }\r\n }\r\n}\r\n\r\nclass ShareOutputField extends HtmlOutputField {\r\n compose() {\r\n return this.value.text.replace('%', ' %');\r\n }\r\n}\r\n\r\nclass MoneyLocalRoundedOutField extends HtmlOutputField {\r\n compose() {\r\n return tools.getLocaleSumInRubbles(tools.getRoundedNumber(this.value))\r\n }\r\n}\r\n\r\nfunction createOutputField(calculator, selector, name, params) {\r\n let params_ = params || {};\r\n let class_ = undefined;\r\n switch (params_.type) {\r\n case 'localeNumber': class_ = LocaleNumOutputField; break;\r\n case 'localeSum': class_ = LocaleSumOutputField; break;\r\n case 'moneyRuble': class_ = MoneyRubleOutputField; break;\r\n case 'moneyRoundedRuble': class_ = MoneyRoundedRubleOutputField; break;\r\n case 'moneyText': class_ = MoneyTextOutputField; break;\r\n case 'moneyRoundedRuble': class_ = MoneyRoundedRubleField; break;\r\n case 'moneyLocalRoundedRuble': class_ = MoneyLocalRoundedOutField; break\r\n case 'period': class_ = PeriodOutputField; break;\r\n case 'date': class_ = DateOutputField; break;\r\n case 'percent': class_ = PercentOutputField; break;\r\n case 'note': class_ = NoteOutputField; break;\r\n case 'toggle': class_ = ToggleOutputField; break;\r\n case 'conditionalBlock': class_ = ConditionalBlockOutputField; break;\r\n case 'day': class_ = DayOutputField; break;\r\n case 'share': class_ = ShareOutputField; break;\r\n case 'text': class_ = TextField; break;\r\n case 'exportVisible' : class_ = ExportVisibleOutputField; break\r\n default: class_ = BaseOutputField; break;\r\n }\r\n\r\n return new class_(calculator, selector, name, params);\r\n}\r\n\r\nexport { createOutputField };","import {fields as basicFields} from \"../basic_fields.js\";\r\nimport {CalculatorComplex} from \"./calc_complex.js\";\r\nimport {createOutputField} from \"./output_fields.js\";\r\nexport {ShowErrorWay} from \"./utils.js\";\r\n\r\n\r\n/**\r\n * TODO: Move inline-radio to web-component\r\n * TODO: Move datetime-segment elem to web-component\r\n * \r\n * */\r\nexport class Calculator extends CalculatorComplex {\r\n\r\n constructor() {\r\n super();\r\n this._fieldTypes = basicFields;\r\n this.showVersionBanner = ShowVersionBanner;\r\n this.setupVersionBanner();\r\n this.setupHandlers();\r\n this.autoAddFields();\r\n this.initialize();\r\n this.forceRender();\r\n }\r\n \r\n log(...args) {\r\n if (this.debug) {\r\n console.log(...args);\r\n }\r\n }\r\n\r\n setupVersionBanner() {\r\n if(this.showVersionBanner){\r\n $('.old-version-alert')?.show();\r\n $('.old-version-alert')?.find('.close-button')?.click(function () {\r\n $('.old-version-alert').slideUp(200);\r\n });\r\n\r\n $('.new-version-alert')?.show();\r\n $('.new-version-alert')?.find('.close-button')?.click(function () {\r\n $('.new-version-alert').slideUp(200);\r\n });\r\n }\r\n }\r\n\r\n setupHandlers() {\r\n const self = this;\r\n $(\"#printResult\").click(function () {\r\n if (self.isActive){\r\n window.print();\r\n const message = self._statistic.printMessage;\r\n self.sendStatisticMessage(typeof(message) === \"function\" ? message() : message);\r\n }\r\n return false;\r\n });\r\n\r\n $(\"#wordResult\").click(function () {\r\n if (self.isActive) {\r\n const formData = new FormData();\r\n formData.append(\"calcType\", self.type());\r\n formData.append(\"json\", JSON.stringify(self._exportObjectFinal));\r\n\r\n $.ajax({\r\n url: ExportWordHost,\r\n type: \"POST\",\r\n data: formData,\r\n processData: false,\r\n contentType: false,\r\n cache: false,\r\n xhr:function(){\r\n var xhr = new XMLHttpRequest();\r\n xhr.onloadstart = function(ev) {\r\n xhr.responseType = \"blob\";\r\n };\r\n return xhr;\r\n },\r\n success: function(response, textStatus, jQxhr) {\r\n const name = decodeURI(jQxhr.getResponseHeader(\"Content-Disposition\").split(\"filename*=UTF-8''\")[1]);\r\n const blob = new Blob([response], {type:\"application/ms-word\"});\r\n if (window.navigator.msSaveOrOpenBlob) {\r\n navigator.msSaveOrOpenBlob(blob, name);\r\n } else {\r\n const link = document.createElement(\"a\");\r\n link.download = name;\r\n link.href = URL.createObjectURL(blob);\r\n link.click(); \r\n }\r\n return true;\r\n }, \r\n });\r\n\r\n const message = self._statistic.exportMessage;\r\n self.sendStatisticMessage(typeof(message) === \"function\" ? message() : message);\r\n }\r\n return false;\r\n });\r\n\r\n }\r\n /**\r\n * \r\n * @param {string} hash - place where need to redirect\r\n */\r\n setHash(hash){\r\n if (hash)\r\n window.location.hash = hash;\r\n else\r\n window.history.pushState(\"\", document.title, window.location.pathname);\r\n }\r\n\r\n checkHash(hash) {\r\n const currentHash = this.getHash();\r\n return currentHash.match(new RegExp(`^${hash}$`));\r\n }\r\n\r\n getHash() {\r\n return document.location.hash.substring(1);\r\n }\r\n\r\n autoSubmit(sender, skipValueChangesCheck) {\r\n sender = sender || null;\r\n this.submitForm(sender, false, skipValueChangesCheck);\r\n }\r\n \r\n autoAddFields() {\r\n const fields = this.fetchFields();\r\n fields.inputs.forEach(args => { if (args !== null) this.addInputField(...args); });\r\n fields.outputs.forEach(args => { if (args !== null) this.addOutputField(...args); });\r\n }\r\n\r\n loadDescription(feedbackBottom = true) {\r\n const self = this;\r\n return new Promise(function (resolve, reject) {\r\n $(\"#calcDescription\").load(\"/conf/calc_\"+self.code()+\"/promo.html?v=\" + DataVersionSalt, function () {\r\n $(\".smart-link\").each(function () {\r\n tools.initSmartLink(this);\r\n });\r\n\r\n tools.setWarningMessage(this);\r\n\r\n if (!IsAuthEnabled) {\r\n const mailSubject = `Обратная связь`;\r\n if (feedbackBottom) {\r\n $(\".calc-div-input-footer\").append($(mailSubject));\r\n }\r\n else {\r\n $(\"#calcDescription\").prepend($(`
${mailSubject}
`));\r\n }\r\n }\r\n resolve();\r\n });\r\n });\r\n }\r\n\r\n patchFieldTypes(newFieldTypes) {\r\n this._fieldTypes = this._fieldTypes.concat(newFieldTypes);\r\n }\r\n\r\n showResults() {\r\n $(\".calc-div-results\").addClass(\"show-results\");\r\n }\r\n\r\n hideResults() {\r\n $(\".calc-div-results\").removeClass(\"show-results\");\r\n }\r\n\r\n generateExportObject() {\r\n return this._exportObject;\r\n }\r\n\r\n get defaultFilled(){\r\n return false;\r\n }\r\n\r\n /**\r\n * Sets up part which works with statistic\r\n * @param {object} params\r\n * - calcName (required) uses in message gen\r\n * - prefix ('Calculation_' by default) uses in message gen\r\n * - printMessage ('Print' by default) you can use object here (@see {sendStattisticMessage}) or even function which returns string_or_object\r\n * - exportMessage ('Export' by default) the same as previous but for export\r\n */\r\n setupStatistic(params) {\r\n params = params || {};\r\n this._statistic = params;\r\n this._statistic.startedSent = params.isStartedEventIgnore || false;\r\n if (this._statistic.prefix === undefined)\r\n this._statistic.prefix = \"Calculation_\";\r\n\r\n if (this._statistic.printMessage === undefined)\r\n this._statistic.printMessage = \"Print\";\r\n\r\n if (this._statistic.exportMessage === undefined)\r\n this._statistic.exportMessage = \"Export\";\r\n }\r\n\r\n /**\r\n * Sends statistic message\r\n * @param {any} string_or_object\r\n * If this value is object it could contain next props:\r\n * - message (required)\r\n * - args, if you need to send additional arguments\r\n * - prefix, if you need to redefine prefix for specific stat message\r\n * Otherwise it uses like an object with only `message` prop filled\r\n */\r\n sendStatisticMessage(string_or_object) {\r\n let params = string_or_object;\r\n if (typeof (string_or_object) === \"string\") { \r\n params = {\r\n message: string_or_object\r\n };\r\n }\r\n const prefix = params.prefix !== undefined ? params.prefix : this._statistic.prefix;\r\n\r\n if (this._statistic.calcName === undefined) {\r\n console.warn(\"Calculator's name is not set up. Use method `setupStatistic` for it.\");\r\n }\r\n\r\n ym(ymId, ymReachGoal, prefix + params.message + \"_\" + this._statistic.calcName, params.args);\r\n }\r\n\r\n submitOnClick(selectorOrElem) {\r\n var self = this;\r\n $(selectorOrElem).click(function () { self.submitForm(null, false, true); });\r\n }\r\n\r\n submitOnChange() {\r\n this._submitOnChange = true;\r\n }\r\n\r\n addResetButton(selector, hideOnDefault) {\r\n hideOnDefault = hideOnDefault === undefined ? true : hideOnDefault;\r\n var self = this;\r\n var elem = $(selector);\r\n elem.click(function () {\r\n if (self.isActive){\r\n self.resetInputFields();\r\n self.sendStatisticMessage(\"Default\");\r\n }\r\n });\r\n if (hideOnDefault) {\r\n this.resetButtons.push(elem);\r\n }\r\n }\r\n\r\n removePathId(path) {\r\n return path.replace(/[:]\\d+/g, \"\");\r\n }\r\n\r\n clearPath(obj, path) {\r\n const parts = path.split(\".\");\r\n const part0 = parts[0];\r\n obj[part0.replace(/\\[|\\]/g, \"\")] = undefined;\r\n }\r\n\r\n /**\r\n * Checks that path inside srcPath\r\n * @param {object} obj\r\n * @param {string} path\r\n * @param {string} srcPath\r\n */\r\n isPathInside(path, srcPath) {\r\n return (path.indexOf(srcPath + \".\") == 0 || path.indexOf(srcPath + \"[]\") == 0 || path === srcPath);\r\n }\r\n\r\n /**\r\n * Method for adding input fields (instead of parsing form)\r\n * @param {stringOrElement} selector\r\n * @param {string} name (where value saves: this.)\r\n * @param {Object} params has next keys:\r\n * - type - one of (money, int). Some can be detected automatically ()\r\n * - defaultValue - (for reseting)\r\n * - errClassElem - (optional, set it if it's requires to add err class not to $(selector) elem but to different)\r\n * - showErrorWay - (optional - redefines global setting)\r\n * - disableAutoCheck - (optional - otherwise will check on change)\r\n * - errors - list of objects {check: func(v), selector: strOrElem, errClassElem: strOrElem[optional]}\r\n * - options - for some fieldTypes this options is useful\r\n * - preInit - (optional, will be called before init call)\r\n * - unsilence - (optional - array of other field names that would have non-silent check when this field is a sender)\r\n */\r\n addInputField(selector, name, params) {\r\n params = params || {};\r\n const self = this;\r\n\r\n if (params.dynamic) {\r\n params.table = selector;\r\n return this.addDynamicField(name, params);\r\n }\r\n\r\n const elem = $(selector);\r\n const ftype = params.type === undefined ? this._detectFieldType(elem) : params.type;\r\n const field = this._makeFieldObject(elem, ftype, params.options);\r\n params.showErrorWay = params.showErrorWay || self.showErrorWay;\r\n field.params_ = params;\r\n field.varName = name;\r\n field.name = self.removePathId(name);\r\n field.defaultValue = (params.defaultValue === undefined ? field.getClearValue() : params.defaultValue);\r\n\r\n if (!params.disableAutoCheck) {\r\n field.onChange(function (sender) {\r\n if (!params.disabledSubmitting) {\r\n self.submitForm(sender, !self._submitOnChange);\r\n }\r\n });\r\n }\r\n\r\n if (params.preInit !== undefined)\r\n params.preInit(field);\r\n\r\n field.init();\r\n\r\n this.inputFields.push(field);\r\n return field;\r\n }\r\n\r\n _detectFieldType(elem) {\r\n var result = undefined;\r\n this._fieldTypes.some(function (ft) {\r\n if (ft.detect(elem)) {\r\n result = ft.keyName();\r\n return true;\r\n }\r\n });\r\n if (result === undefined) {\r\n console.error(\"Can't detect field type\", elem);\r\n }\r\n return result;\r\n }\r\n\r\n _makeFieldObject(elem, fieldType, options) {\r\n var result = undefined;\r\n if (!this._fieldTypes.some(function (ft) {\r\n if (ft.keyName() === fieldType) {\r\n result = new ft(elem, options);\r\n return true;\r\n }\r\n })) {\r\n console.error(\"Can't find class for field type\", fieldType, \"of element\", elem);\r\n }\r\n return result;\r\n }\r\n \r\n /**\r\n * Parses group with internal checks (between elements inside group)\r\n * @param {any} group\r\n */\r\n processGroup(group, sender, autoValidation) {\r\n const result = group.check(sender, autoValidation);\r\n if (result.artifacts !== undefined) {\r\n for (const key in result.artifacts) {\r\n this[key] = result.artifacts[key];\r\n }\r\n }\r\n return result.valid; \r\n }\r\n \r\n resetInputFields(params) {\r\n const self = this;\r\n if (!this.isActive) return;\r\n params = params || {};\r\n this.inputFields.forEach(function (f) {\r\n if (params.fields === undefined || params.fields.some(f => self.isPathInside(f.name, f)))\r\n f.reset(params);\r\n });\r\n this.lastValuesString = \"\";\r\n\r\n this._dynamicFields.map((item) => item.reset());\r\n this.onReset();\r\n this.forceRender();\r\n\r\n this.resetButtons.forEach(function (elem) {\r\n elem.hide();\r\n });\r\n }\r\n\r\n /**\r\n * Method for rendering from variables (instead of render function)\r\n * @param {any} selector\r\n * @param {any} name\r\n * @param {any} params\r\n * @param {any} forced\r\n */\r\n addOutputField(selector, name, params, forced = false) {\r\n const field = createOutputField(this, selector, name, params);\r\n this.outputFields.push(field);\r\n if (forced)\r\n this.forceOutputs.push(field);\r\n return field;\r\n }\r\n\r\n render() {\r\n const self = this;\r\n const orderedFields = this.outputFields.map(x => x);\r\n const priorities = orderedFields.map(f => f.get(\"priority\", 0));\r\n if (priorities.length > 0 && priorities.some(x => x != priorities[0]))\r\n orderedFields.sort((a, b) => a.get(\"priority\", 0) - b.get(\"priority\", 0));\r\n orderedFields.forEach(function (field) {\r\n field.render(self);\r\n field.renderExport(self._exportObject.render);\r\n });\r\n }\r\n\r\n forceRender() {\r\n this.forceOutputs.forEach((field) => {\r\n field.render(this);\r\n });\r\n }\r\n\r\n toggleCustomClasses() {\r\n this.toggleClasses.map(customClass => {\r\n customClass.toggle();\r\n });\r\n }\r\n\r\n renderError() {\r\n if (!this._submitOnChange) {\r\n $(\".calc-div-results\").removeClass(\"show-results\");\r\n }\r\n }\r\n \r\n autoValidate(sender) {\r\n sender = sender || null;\r\n this.submitForm(sender, true);\r\n }\r\n \r\n}"],"sourceRoot":""}