{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./wwwroot/calc/js/datelib.js","webpack:///./wwwroot/calc/calc_trt/dictionary.js","webpack:///./wwwroot/calc/calc_trt/calc.js","webpack:///(webpack)/buildin/global.js","webpack:///./wwwroot/lib/utils/api.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","Dict","TRTCalculator","_Calculator","_callSuper","_inherits","patchFieldTypes","PowerField","PayerField","setupStatistic","calcName","yearField","addInputField","regionField","errors","selector","transportField","powerField","selectedId","errorText","isError","multiplierField","payerField","transportYearField","getValue","options","taxRates","transportTypes","transportList","getJSON","DataVersionSalt","json","allYears","years","minYear","min","apply","text","getYearList","defaultValue","selectedIndex","done","types","id","getTransportList","addGroup","yearRegionCheck","addOutputField","title","renderValue","period","formulaValue","formulaTitle","isMultiplier","multiplier","isTransportYear","loadDescription","regions","districts_subjects","regionid","getRegionList","ignore","submitOnClick","addResetButton","removeClass","closest","resetFields","_get","_getPrototypeOf","taxSum","multiplierValue","rate","unitText","power","unit","goalParams","args","God_rascheta_transport_tax","Region_registrasii_transport_tax","region","Vid_trans_sred_transport_tax","transport","Moschnost_izmerenie_transport_tax","Povysh_koef_transport_tax","message","sender","autoValidation","$elem","$yearInput","$regionInput","$transportInput","$powerSelect","$grossSelect","$forceSelect","transportChange","powerId","Number","setMode","$multiplierInput","regionId","rates","rateYear","rateDate","$transportYearInput","multiplierList","splice","yearChange","transportTypesId","powerUnit","grossUnit","forceUnit","setUnit","secondValue","payer","transportYear","age","lowerValid","upperValid","alert","getTaxRate","periodPart","round","fields","tree","regionYears","minValidYear","_toConsumableArray","Calculator","_Field","parseLocaleFloat","val","mainValue","alternateValue","roundNumber","koef","getLocaleNumber","isDefault","inputFilter","focusin","$field","$powerInput","Field","_RadioField","parseLocaleInt","$payerInput","checkedPayer","prop","payers","payerIsSelected","childIndex","$payerIn","$payerAlert","$payerAlertText","payerMessage","truePayers","payersIds","RadioField","g","Function","window","__fetch","require","polyFetch","buildApi","generator","sendRequest","_ref$host","host","method","path","_ref$headers","headers","body","_blob","url","search","URLSearchParams","then","res","ok","Promise","resolve","console","error","reject","props","_objectSpread","post","loaded","promise","resp","test","arrayBuffer","globalThis","global","support","Blob","viewClasses","isArrayBufferView","ArrayBuffer","isView","obj","normalizeName","String","TypeError","toLowerCase","normalizeValue","iteratorFor","items","iterator","next","shift","Headers","append","Array","isArray","header","getOwnPropertyNames","consumed","_noBody","bodyUsed","fileReaderReady","reader","onload","onerror","readBlobAsArrayBuffer","blob","FileReader","readAsArrayBuffer","bufferClone","buf","slice","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","parse","oldValue","has","thisArg","keys","values","entries","methods","Request","input","upcased","credentials","signal","toUpperCase","AbortController","referrer","cache","reParamSearch","getTime","form","trim","split","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","ShowErrorWay","SHOW_ALL","SHOW_FIRST","selectorOrElem","defaultGetValue","deleted","isDynamic","_ignore","f","change","keyup","hasClass","getClearValue","params_","errClassElem","keepValue","setValue","keepErrors","clearErrors","phase","loud","handler","showErrorWay","document","documentMode","css","_BaseObjectField","deepcopy","clearValue","NumberField","_Field2","blur","isFloat","disableProps","keyName","CountField","_NumberField","setupNumberInput","YearField","_NumberField2","allowSpaces","maxLength","PeriodField","_NumberField3","FloatField","_NumberField4","precision","MoneyField","_FloatField","SelectField","_Field3","itemText","_Field4","checkedElem","CheckboxField","_Field5","control","checked","TextField","_Field6","removeExtraSpace","raw","escapeTags","_Field7","LinkField","selectedLink","click","event","CalculatorComplex","_CalculatorInterface","htmlNode","_this","calc_","$node","scopeEvalFunc","underscore","script","parseNameType","attr","paramString","item","splitPos","varName","parseFloat","checkClass","el","class_","getAttribute","autoKey","clickOptions","_clickOptions$options","submit","autoSubmit","toggleClasses","toArray","classesObj","toggle","className","inputs","_parseNameType","outputs","_parseNameType2","renderCode","checkHash","_this2","gentle","writePath","part","id_","clearPart","__id","fetchRootElem","findExternalOnly","$table","table","$dataExpandableDiv","elements","createClone","$template","$lastRow","last","$clone","querySelector","cloneNode","_id","genUniqueId","blockPiece","removed","keepOne","beforeRemoval","field","afterRemoval","isFilled","artifacts","getFieldsFlat","getElements","removeFirstEvent","dontSubmitOnRemove","_submitOnChange","fetchFields","_slicedToArray","fieldParams","disabledSubmitting","removeSelector","first","anchor","prepareTemplate","block","_params$prepareTempla","insertAdjacentElement","removePathId","appendButtonSelector","$this","$expandableDiv","keepTable","bp","delete","ignoredEmptyFields","ignoreForEmpty","setCount","_ref3","_ref3$removeStrategy","removeStrategy","currentCount","_dynamicFields","nameOrNames","fieldGroups","getFields","resList","inputFields","__tmpIgnore","isPathInside","checkField","df","newOptions","_this3","newValues","irregularValueNames","reduce","acc","log","clearPath","_exportObject","ignoreList","accum","filled","defaultFilled","enableResetButton","hasValueChanges","fieldsToParse","ignoreCouseEmpty","showReset","resetValuesOnIgnore","unsilence","senderField","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","random","srcPath","BaseOutputField","container","setup","paramName","renderFunc","compose","renderMethod","compose_","exportObject","RenderRequiredOutputField","_BaseOutputField","HtmlOutputField","_BaseOutputField2","_HtmlOutputField","LocaleNumOutputField","_BaseOutputField3","minPrecision","maxPrecision","LocaleSumOutputField","_BaseOutputField4","getLocaleSum","MoneyRubleOutputField","_HtmlOutputField2","getLocaleSumInRubbles","MoneyTextOutputField","_BaseOutputField5","verboseNumber","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","createElement","download","URL","createObjectURL","exportMessage","history","pushState","pathname","getHash","RegExp","substring","feedbackBottom","load","code","initSmartLink","setWarningMessage","IsAuthEnabled","mailSubject","prepend","isStartedEventIgnore","prefix","ym","ymId","ymReachGoal","resetInputFields","dynamic","addDynamicField","ftype","_detectFieldType","_makeFieldObject","disableAutoCheck","onChange","preInit","ft","detect","fieldType","onReset","forced","orderedFields","priorities","renderExport","customClass"],"mappings":"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","file":"calc/calc_trt/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 = 1183);\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","let Dict = {\r\n TRANSPORT_TYPE_ID: 't',\r\n UNIT_ID: 'u',\r\n LOWER_AGE_STATUS: 'b',\r\n UPPER_AGE_STATUS: 'a',\r\n LOWER_AGE_LIMIT: 'l',\r\n UPPER_AGE_LIMIT: 'h',\r\n PAYERS_ID: 'p',\r\n NOT_INCLUDED_LOWER_LIMIT: 'n',\r\n INCLUDED_UPPER_LIMIT: 'i',\r\n REGION_ID: 'r',\r\n VALUE: 'v',\r\n DATE: 'd'\r\n}\r\n\r\nexport { Dict };","import { Dict } from './dictionary.js';\r\nimport { Calculator } from \"../common/calculator\";\r\nimport { Field, RadioField } from \"../common/basic_fields.js\";\r\nimport { makeDateInFutureAlertWorker } from '../js/datelib.js';\r\n\r\nclass TRTCalculator extends Calculator {\r\n code() { return \"trt\"; }\r\n type() { return \"CalcTransportTax\"; }\r\n\r\n initialize() {\r\n let self = this;\r\n this.patchFieldTypes([PowerField, PayerField]);\r\n this.setupStatistic({\r\n calcName: 'transport_tax'\r\n });\r\n\r\n function getYearList(taxRates) {\r\n var allYears = taxRates.map(function (r) { return r[Dict.DATE]; });\r\n var years = [];\r\n var date = new Date();\r\n var year = date.getFullYear();\r\n var minYear = Math.min.apply(null, allYears)\r\n while (year >= minYear) {\r\n years.push({ value: year, text: year });\r\n year--;\r\n }\r\n\r\n return years\r\n }\r\n\r\n function getRegionList() {\r\n var regions = districts_subjects.filter(function (r) { return r.regionid !== -1; });\r\n var result = [];\r\n for (var i = 0; i < regions.length; i++) {\r\n result.push({ value: regions[i].regionid, text: regions[i].name });\r\n }\r\n\r\n return result;\r\n }\r\n\r\n function getTransportList(transportTypes) {\r\n var types = [];\r\n for (var i = 0; i < transportTypes.length; i++) {\r\n types.push({\r\n value: transportTypes[i].id,\r\n text: transportTypes[i].name\r\n });\r\n }\r\n\r\n return types;\r\n }\r\n\r\n // add input fields\r\n this.yearField = this.addInputField('#yearInput dropdown-select', 'year');\r\n this.regionField = this.addInputField('#regionInput dropdown-select', 'region', {\r\n errors: [{ check: function (v) { return v.value !== ''; }, selector: '#regionInput .error-text' }]\r\n });\r\n this.transportField = this.addInputField('#transportInput dropdown-select', 'transport', {\r\n errors: [{ check: function (v) { return v.value !== ''; }, selector: '#transportInput .error-text' }]\r\n });\r\n this.powerField = this.addInputField('#powerInput input', 'power', {\r\n type: 'power', errors: [{\r\n check: function (v) {\r\n $('#powerInput .error-text').html(v[v.selectedId].errorText);\r\n return !v.isError;\r\n }, selector: '#powerInput .error-text'\r\n }]\r\n });\r\n this.multiplierField = this.addInputField('#multiplierInput dropdown-select', 'multiplier');\r\n this.payerField = this.addInputField('#payerInput .input-icon', 'payer', { type: 'payer' });\r\n this.transportYearField = this.addInputField('#transportYearInput input', 'transportYear', {\r\n type: 'year',\r\n errors: [\r\n { check: function (v) { return !!v; }, selector: '#transportYearInput .null-error' },\r\n { check: function (v) { return !(v && v.toString().length < 4); }, selector: '#transportYearInput .wrong-error' },\r\n { check: function (v) { return !(v && (v.toString().length === 4) && (v > self.year.value)); }, selector: '#transportYearInput .later-error' }\r\n ]\r\n });\r\n\r\n $('#transportInput dropdown-select').on(\"click\", function () {\r\n if (!self.regionField.getValue().value) {\r\n $('#empty-region-tooltip').addClass('active');\r\n } else if(self.transportField.elem[0].options.length === 0) {\r\n $('#wrong-date-tooltip').addClass('active');\r\n }\r\n });\r\n\r\n makeDateInFutureAlertWorker({\r\n dateToFutureAlertSelector: $(\"#payerAlert\"),\r\n });\r\n\r\n this.taxRates = undefined;\r\n this.transportTypes = undefined;\r\n this.transportList = [];\r\n $.getJSON(\"conf/calc_trt/rates.json?v=\" + DataVersionSalt, function (json) {\r\n self.taxRates = json;\r\n self.yearField.elem[0].options = getYearList(self.taxRates);\r\n self.yearField.defaultValue = +self.yearField.elem[0].options[0].value;\r\n self.yearField.elem[0].selectedIndex = 0;\r\n }).done(function() {\r\n $.getJSON(\"conf/calc_trt/types.json?v=\" + DataVersionSalt, function (json) {\r\n self.transportTypes = json;\r\n self.transportList = getTransportList(self.transportTypes);\r\n }).done(function() {\r\n self.addGroup(['year', 'region'], self.yearRegionCheck, { taxRates: self.taxRates, transportList: self.transportList });\r\n });\r\n });\r\n\r\n // add output fields\r\n this.addOutputField('#powerTitleRender', 'power', { type: 'powerTitle', render: function (r) { return r ? r[r.selectedId].title : null } });\r\n this.addOutputField('#powerValueRender', 'power', { type: 'powerValue', render: function (r) { return r ? r[r.selectedId].renderValue : null } });\r\n this.addOutputField('#yearPeriodRender', 'yearPeriod', { type: 'yearPeriod', render: function (r) { return self.year.text + ' год, ' + tools.verboseCountingValue(self.period.text , [['месяц', 'месяца', 'месяцев']]) } });\r\n this.addOutputField('#powerValueFormula', 'power', { type: 'powerFormulaValue', render: function (r) { return r ? r[r.selectedId].formulaValue : null } });\r\n this.addOutputField('#powerTitleFormula', 'power', { type: 'powerFormulaTitle', render: function (r) { return r ? r[r.selectedId].formulaTitle : null } });\r\n\r\n self.isMultiplier = false;\r\n this.addOutputField('.multiplier-block', '', { type: 'toggle', render: function () { return self.isMultiplier && self.multiplier.value !== 1 } });\r\n self.isTransportYear = false;\r\n this.addOutputField('.transport-year-block', '', { type: 'toggle', render: function () { return self.isTransportYear } });\r\n\r\n this.loadDescription();\r\n\r\n this.regionField.elem[0].options = getRegionList();\r\n\r\n this.powerField.ignore = true;\r\n this.multiplierField.ignore = true;\r\n this.transportYearField.ignore = true;\r\n\r\n this.submitOnClick('#calcSubmit');\r\n this.addResetButton('#clearCalcInput');\r\n }\r\n\r\n isReady() {\r\n return this.taxRates !== undefined && this.transportTypes !== undefined;\r\n }\r\n\r\n onReset() {\r\n $('.calc-div-results').removeClass('show-results');\r\n this.transportField.elem[0].options = [];\r\n this.yearField.elem.closest('.transport-period-div-container').find('.error-text').hide();\r\n this.resetFields();\r\n }\r\n\r\n resetFields() {\r\n $('#powerInput').addClass('hidden-control');\r\n $('#multiplierInput').addClass('hidden-control');\r\n $('#payerInput').addClass('hidden-control');\r\n $('#transportYearInput').addClass('hidden-control');\r\n\r\n $('#payerAlert').hide();\r\n $('#transportAlert .tooltip-content').removeClass('active');\r\n\r\n this.powerField.ignore = true;\r\n this.multiplierField.ignore = true;\r\n this.transportYearField.ignore = true;\r\n }\r\n\r\n generateExportObject() {\r\n let result = super.generateExportObject();\r\n result.taxSum = this.taxSum;\r\n result.isMultiplier = this.isMultiplier;\r\n result.multiplierValue = this.multiplier ? this.multiplier.value : 1;\r\n result.rate = this.rate;\r\n result.isTransportYear = this.isTransportYear;\r\n\r\n return result;\r\n }\r\n\r\n showResults() {\r\n super.showResults();\r\n\r\n var unitText = null;\r\n if (this.power.selectedId === 0 && this.power[0].unit === 1) {\r\n unitText = \"л.с\"\r\n }\r\n else if (this.power.selectedId === 0 && this.power[0].unit === 2) {\r\n unitText = \"кВт\"\r\n }\r\n\r\n var goalParams = {\r\n args: {\r\n God_rascheta_transport_tax: this.year.value,\r\n Region_registrasii_transport_tax: this.region.text,\r\n Vid_trans_sred_transport_tax: this.transport.text,\r\n Moschnost_izmerenie_transport_tax: unitText,\r\n Povysh_koef_transport_tax: (this.isMultiplier && this.multiplier.value !== 1) ? this.multiplier.value : null\r\n },\r\n message: 'Is_Made'\r\n };\r\n this.sendStatisticMessage(goalParams);\r\n }\r\n\r\n afterParse(sender, autoValidation) {\r\n let self = this;\r\n let $elem = $(sender);\r\n let $yearInput = $('#yearInput dropdown-select');\r\n let $regionInput = $('#regionInput dropdown-select');\r\n let $transportInput = $('#transportInput dropdown-select');\r\n let $powerSelect = $('#powerSelect dropdown-select');\r\n let $grossSelect = $('#grossSelect dropdown-select');\r\n let $forceSelect = $('#forceSelect dropdown-select');\r\n\r\n function yearChange(self) {\r\n let multiplierList = [\r\n { value: 1, text: \"Не учитывать\" },\r\n { value: 1.1, text: \"1,1\" },\r\n { value: 2, text: \"2\" },\r\n { value: 3, text: \"3\" }\r\n ];\r\n\r\n let reset = false;\r\n let year = self.year.value;\r\n let multiplier = self.multiplierField.getValue().value;\r\n if (year >= 2022) {\r\n multiplierList.splice(1, 2);\r\n if (multiplier === 1.1 || multiplier === 2) {\r\n reset = true;\r\n }\r\n }\r\n self.multiplierField.elem[0].options = multiplierList;\r\n\r\n if (reset) {\r\n self.multiplierField.elem[0].selectedIndex = 0;\r\n }\r\n }\r\n\r\n function transportChange(self) {\r\n $('#payerAlert').hide();\r\n\r\n let $powerInput = $(\"#powerInput\");\r\n $powerInput.removeClass('hidden-control');\r\n self.powerField.ignore = false;\r\n\r\n var transport = self.transport.value;\r\n var powerId = Number(self.taxRates.filter(function (rate) { return rate[Dict.TRANSPORT_TYPE_ID] === transport; })[0][Dict.UNIT_ID]);\r\n self.powerField.setMode(powerId);\r\n\r\n let $multiplierInput = $('#multiplierInput');\r\n if (transport === 1) {\r\n $multiplierInput.removeClass('hidden-control');\r\n self.multiplierField.ignore = false;\r\n self.isMultiplier = true;\r\n }\r\n else {\r\n $multiplierInput.addClass('hidden-control');\r\n self.multiplierField.ignore = true;\r\n self.isMultiplier = false;\r\n }\r\n\r\n var regionId = self.region.value;\r\n var rates = self.taxRates.filter(function (rate) { return rate[Dict.REGION_ID] === regionId && rate[Dict.TRANSPORT_TYPE_ID] === transport; });\r\n var year = self.year.value;\r\n if (rates.length > 1) {\r\n var rateYear = 2016;\r\n for (var i = 0; i < rates.length; i++) {\r\n var rateDate = rates[i][Dict.DATE];\r\n if (rateDate && rateDate <= year && rateDate > rateYear) {\r\n rateYear = rateDate;\r\n }\r\n }\r\n\r\n rates = rates.filter(function (rate) {\r\n if (rate[Dict.DATE] === rateYear) {\r\n return true;\r\n }\r\n });\r\n }\r\n\r\n self.payerField.setMode(rates, self.transport.text, self.region.text);\r\n\r\n let $transportYearInput = $('#transportYearInput');\r\n if (rates.filter(function (rate) { return rate[Dict.LOWER_AGE_LIMIT] || rate[Dict.UPPER_AGE_LIMIT]; })[0]) {\r\n $transportYearInput.removeClass('hidden-control');\r\n self.transportYearField.ignore = false;\r\n self.isTransportYear = true;\r\n } else {\r\n $transportYearInput.addClass('hidden-control');\r\n self.transportYearField.ignore = true;\r\n self.isTransportYear = false;\r\n }\r\n }\r\n\r\n if ($elem.is($regionInput) || $elem.is($yearInput)) {\r\n if ($elem.is($yearInput)) {\r\n yearChange(this);\r\n }\r\n if (!this.region || !this.year) {\r\n return;\r\n }\r\n const transportTypesId = this.taxRates.filter(rate => rate[Dict.REGION_ID] === self.region.value && rate[Dict.DATE] <= self.year.value).map(r => r[Dict.TRANSPORT_TYPE_ID]);\r\n this.transportField.elem[0].options = this.transportList.filter(transport => transportTypesId.indexOf(transport.value) !== -1);\r\n if (!this.transport || transportTypesId.indexOf(this.transportField.getValue().value) === -1) {\r\n this.resetFields();\r\n } else {\r\n transportChange(this);\r\n }\r\n } else if ($elem.is($transportInput)) {\r\n transportChange(this);\r\n } else if ($elem.is($powerSelect) || $elem.is($grossSelect) || $elem.is($forceSelect)) {\r\n var unit;\r\n if ($elem.is($powerSelect)) {\r\n unit = this.powerUnit.value;\r\n } else if ($elem.is($grossSelect)) {\r\n unit = this.grossUnit.value;\r\n } else if ($elem.is($forceSelect)) {\r\n unit = this.forceUnit.value;\r\n }\r\n\r\n this.powerField.setUnit(unit);\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 getTaxRate(taxRates, regionId, transport, payer, power, year, transportYear) {\r\n var rates = taxRates.filter(function (rate) {\r\n return rate[Dict.REGION_ID] === regionId &&\r\n rate[Dict.TRANSPORT_TYPE_ID] === transport &&\r\n rate[Dict.PAYERS_ID][payer] === \"1\" &&\r\n (rate[Dict.NOT_INCLUDED_LOWER_LIMIT] ? rate[Dict.NOT_INCLUDED_LOWER_LIMIT] < power : true) &&\r\n (rate[Dict.INCLUDED_UPPER_LIMIT] ? rate[Dict.INCLUDED_UPPER_LIMIT] >= power : true);\r\n });\r\n\r\n var age = transportYear ? year - transportYear : null;\r\n if (age === -1) {\r\n age = 0;\r\n }\r\n if (age !== null) {\r\n rates = rates.filter(function (rate) {\r\n var lowerValid = false;\r\n var upperValid = false;\r\n\r\n if (rate[Dict.LOWER_AGE_LIMIT]) {\r\n if (rate[Dict.LOWER_AGE_STATUS]) {\r\n if (age >= rate[Dict.LOWER_AGE_LIMIT]) {\r\n lowerValid = true;\r\n }\r\n } else {\r\n if (age > rate[Dict.LOWER_AGE_LIMIT]) {\r\n lowerValid = true;\r\n }\r\n }\r\n }\r\n\r\n if (rate[Dict.UPPER_AGE_LIMIT]) {\r\n if (rate[Dict.UPPER_AGE_STATUS]) {\r\n if (age < rate[Dict.UPPER_AGE_LIMIT]) {\r\n upperValid = true;\r\n }\r\n } else {\r\n if (age <= rate[Dict.UPPER_AGE_LIMIT]) {\r\n upperValid = true;\r\n }\r\n }\r\n }\r\n\r\n if (!rate[Dict.LOWER_AGE_LIMIT] && !rate[Dict.UPPER_AGE_LIMIT] ||\r\n rate[Dict.LOWER_AGE_LIMIT] && lowerValid && rate[Dict.UPPER_AGE_LIMIT] && upperValid ||\r\n !rate[Dict.LOWER_AGE_LIMIT] && rate[Dict.UPPER_AGE_LIMIT] && upperValid ||\r\n rate[Dict.LOWER_AGE_LIMIT] && lowerValid && !rate[Dict.UPPER_AGE_LIMIT]) {\r\n return true;\r\n }\r\n\r\n return false;\r\n\r\n });\r\n }\r\n\r\n if (rates.length > 1) {\r\n var rateYear = 2016;\r\n for (var i = 0; i < rates.length; i++) {\r\n var rateDate = rates[i][Dict.DATE];\r\n if (rateDate && rateDate <= year && rateDate > rateYear) {\r\n rateYear = rateDate;\r\n }\r\n }\r\n\r\n rates = rates.filter(function (rate) {\r\n if (rate[Dict.DATE] === rateYear) {\r\n return true;\r\n }\r\n });\r\n\r\n if (rates.length > 1) {\r\n alert(\"Подходящих ставок - \" + rates.length);\r\n return null;\r\n }\r\n }\r\n else if (rates.length === 0) {\r\n alert(\"Подходящих ставок не найдено\");\r\n return null;\r\n }\r\n\r\n var taxRate = rates[0][Dict.VALUE];\r\n return taxRate;\r\n }\r\n\r\n let self = this;\r\n\r\n var powerId = this.power.selectedId;\r\n var unit = this.power[powerId].unit;\r\n var power = this.power[powerId].value;\r\n if (unit === 2) {\r\n power = this.power[powerId].secondValue;\r\n }\r\n\r\n self.rate = getTaxRate(this.taxRates, this.region.value, this.transport.value, this.payer.value, power, this.year.value, this.transportYear);\r\n\r\n if (self.rate === null) {\r\n return false;\r\n }\r\n\r\n var periodPart = this.period.value / 12;\r\n var multiplier = this.multiplier ? this.multiplier.value : 1;\r\n self.taxSum = Math.round(self.rate * power * periodPart * multiplier);\r\n\r\n return true;\r\n }\r\n\r\n yearRegionCheck(fields, options) {\r\n const result = {\r\n valid: true\r\n }\r\n const regionField = fields.tree.region || [];\r\n const yearField = fields.tree.year || [];\r\n const region = regionField.getValue();\r\n const year = yearField.getValue();\r\n if (yearField.length === 0 || regionField.length === 0 || !region.value || !year.value) {\r\n return result;\r\n }\r\n const regionYears = options.taxRates.filter(rate => rate[Dict.REGION_ID] === region.value).map(r => r[Dict.DATE]);\r\n const minValidYear = Math.min(...regionYears);\r\n const hasTransport = minValidYear <= year.value;\r\n if (!hasTransport) {\r\n result.valid = false;\r\n yearField.elem.addClass('err');\r\n yearField.elem.closest('.transport-period-div-container').find('.error-text').show();\r\n $('.min-valid-year').html(minValidYear);\r\n } else {\r\n yearField.elem.removeClass('err');\r\n yearField.elem.closest('.transport-period-div-container').find('.error-text').hide();\r\n }\r\n return result;\r\n }\r\n}\r\n\r\nclass PowerField extends Field {\r\n static keyName() { return 'power'; }\r\n getValue() {\r\n var id = this.result.selectedId;\r\n var value = this.result[id].value = tools.parseLocaleFloat(this.elem.val());\r\n\r\n if (!value) {\r\n this.result.isError = true;\r\n return this.result;\r\n } else {\r\n this.result.isError = false;\r\n }\r\n\r\n var mainValue = value;\r\n var alternateValue = 0;\r\n switch (id) {\r\n case 0:\r\n if (this.result[id].unit === 1) {\r\n alternateValue = this.result[id].secondValue = tools.roundNumber(value / this.koef, 2);\r\n } else {\r\n alternateValue = mainValue;\r\n mainValue = this.result[id].secondValue = tools.roundNumber(value * this.koef, 2);\r\n }\r\n this.result[id].formulaValue = tools.getLocaleNumber(mainValue).toString() + ' л.с.';\r\n this.result[id].renderValue = this.result[id].formulaValue + ' ('\r\n + tools.getLocaleNumber(alternateValue) + ' кВт)';\r\n break;\r\n\r\n case 1:\r\n this.result[id].renderValue = this.result[id].formulaValue = tools.getLocaleNumber(mainValue).toString() + ' шт';\r\n break;\r\n\r\n case 2:\r\n if (this.result[id].unit === 2) {\r\n alternateValue = mainValue;\r\n mainValue = this.result[id].secondValue = tools.roundNumber(value / 1000, 2);\r\n }\r\n\r\n this.result[id].renderValue = this.result[id].formulaValue = tools.getLocaleNumber(mainValue).toString() + ' т';\r\n\r\n if (this.result[id].unit === 2) {\r\n this.result[id].renderValue += \" (\" + tools.getLocaleNumber(alternateValue) + \" кг)\";\r\n }\r\n break;\r\n\r\n case 3:\r\n if (this.result[id].unit === 2) {\r\n alternateValue = mainValue;\r\n mainValue = this.result[id].secondValue = value * 1000;\r\n }\r\n\r\n this.result[id].renderValue = this.result[id].formulaValue = tools.getLocaleNumber(mainValue).toString() + ' кгс';\r\n\r\n if (this.result[id].unit === 2) {\r\n this.result[id].renderValue += \" (\" + tools.getLocaleNumber(alternateValue) + \" тс)\";\r\n }\r\n break;\r\n }\r\n\r\n return this.result;\r\n }\r\n getClearValue() {\r\n this.elem.val() === \"\" ? \"\" : this.getValue();\r\n }\r\n setValue(v) { this.elem.val(v); }\r\n init() {\r\n this.koef = 1.35962;\r\n this.result = [];\r\n this.result.selectedId = 0;\r\n this.result.isError = false;\r\n this.result.isDefault = true;\r\n this.result[0] = { value: null, secondValue: null, unit: 1, title: \"Мощность\", errorText: \"Укажите мощность\", formulaTitle: \"мощность, л.с.\", renderValue: \"\", formulaValue: \"\" };\r\n this.result[1] = { value: null, title: \"Количество транспортных средств\", errorText: \"Укажите количество транспортных средств\", formulaTitle: \"количество транспортных средств, шт\", renderValue: \"\", formulaValue: \"\" };\r\n this.result[2] = { value: null, secondValue: null, unit: 1, title: \"Валовая вместимость\", errorText: \"Укажите валовую вместимость\", formulaTitle: \"валовая вместимость, т\", renderValue: \"\", formulaValue: \"\" };\r\n this.result[3] = { value: null, secondValue: null, unit: 1, title: \"Сила тяги\", errorText: \"Укажите силу тяги\", formulaTitle: \"сила тяги, кгс\", renderValue: \"\", formulaValue: \"\" };\r\n\r\n this.elem.inputFilter(true);\r\n\r\n this.elem.focusin(function () {\r\n var $field = $(this).closest('#powerInput');\r\n this.classList.remove('err');\r\n $field.find(\".error-text\").hide();\r\n });\r\n }\r\n reset() {\r\n this.result.selectedId = 0;\r\n this.result.isError = false;\r\n this.result.isDefault = true;\r\n for (var i = 0; i < this.result.length; i++) {\r\n this.result[i].value = null;\r\n }\r\n this.elem.val(\"\");\r\n }\r\n setMode(id) {\r\n let $powerInput = $('#powerInput');\r\n\r\n if (this.result.selectedId !== id || this.result.isDefault) {\r\n this.result.isDefault = false;\r\n this.result.selectedId = id;\r\n\r\n if (this.result[id].value) {\r\n this.elem.val(this.result[id].value);\r\n } else {\r\n this.elem.val(\"\");\r\n }\r\n\r\n $powerInput.find('p').html(this.result[id].title);\r\n\r\n if (id === 0) {\r\n $powerInput.find('#powerSelect').show();\r\n } else {\r\n $powerInput.find('#powerSelect').hide();\r\n }\r\n\r\n if (id === 1) {\r\n $powerInput.addClass('hidden-select');\r\n } else {\r\n $powerInput.removeClass('hidden-select');\r\n }\r\n\r\n if (id === 2) {\r\n $powerInput.find('#grossSelect').show();\r\n } else {\r\n $powerInput.find('#grossSelect').hide();\r\n }\r\n\r\n if (id === 3) {\r\n $powerInput.find('#forceSelect').show();\r\n } else {\r\n $powerInput.find('#forceSelect').hide();\r\n }\r\n }\r\n\r\n this.elem.removeClass('err');\r\n $powerInput.find('.error-text').hide();\r\n }\r\n setUnit(unit) {\r\n this.result[this.result.selectedId].unit = unit;\r\n }\r\n}\r\n\r\nclass PayerField extends RadioField {\r\n static keyName() { return 'payer'; }\r\n getValue() {\r\n var $payerInput = $('#payerInput');\r\n if ($payerInput.is(':visible')) {\r\n var value = tools.parseLocaleInt(this.elem.find('input:checked').val());\r\n this.result.value = value;\r\n switch (value) {\r\n case 0:\r\n this.result.text = \"организация\";\r\n break;\r\n case 1:\r\n this.result.text = \"ИП\";\r\n break;\r\n case 2:\r\n this.result.text = \"физ. лицо\";\r\n break;\r\n }\r\n }\r\n\r\n return this.result;\r\n }\r\n init() {\r\n this.result = {};\r\n this.result.value = 0;\r\n this.result.text = '';\r\n }\r\n setMode(rates, transport, region) {\r\n const $payerInput = $('#payerInput');\r\n const checkedPayer = tools.parseLocaleInt(this.elem.find('input:checked').val());\r\n const hasOnlyCommonRates = rates.filter(function (rate) { return rate[Dict.PAYERS_ID] === \"111\"; }).length === rates.length;\r\n if (hasOnlyCommonRates) {\r\n $payerInput.find('#payerCompany').prop('checked', true);\r\n $payerInput.addClass('hidden-control');\r\n\r\n this.result.text = \"организация, ИП или физ. лицо\";\r\n this.result.value = 0;\r\n } else {\r\n const payers = [false, false, false];\r\n var payerIsSelected = false;\r\n $.each(payers, function (index) {\r\n var childIndex = index + 1;\r\n if (rates.filter(function (rate) { return rate[Dict.PAYERS_ID][index] === '1'; })[0] === undefined) {\r\n $payerInput.find('.input-icon div:nth-child(' + childIndex + ')').addClass('hidden-control');\r\n } else {\r\n var $payerIn = $payerInput.find('.input-icon div:nth-child(' + childIndex + ')');\r\n $payerIn.removeClass('hidden-control');\r\n if (!payerIsSelected) {\r\n $payerIn.find('input').prop('checked', true);\r\n payerIsSelected = true;\r\n }\r\n payers[index] = true;\r\n }\r\n });\r\n\r\n var $payerAlert = $('#payerAlert');\r\n var $payerAlertText = $payerAlert.find('.info-block-content');\r\n var payerMessage = 'Для выбранного типа ТС «' + transport + '» в регионе «' + region + '» расчёт возможен только для ';\r\n var truePayers = payers.filter(function (p) { return p === true; });\r\n if (truePayers.length === 1) {\r\n if (payers[0] === true) {\r\n $payerInput.find('.input-icon div:nth-child(' + 1 + ')').addClass('hidden-control');\r\n $payerAlertText.text(payerMessage + 'организаций.');\r\n this.result.text = \"организация\";\r\n this.result.value = 0;\r\n }\r\n else if (payers[1] === true) {\r\n $payerInput.find('.input-icon div:nth-child(' + 2 + ')').addClass('hidden-control');\r\n $payerAlertText.text(payerMessage + 'индивидуальных предпринимателей.');\r\n this.result.text = \"ИП\";\r\n this.result.value = 1;\r\n }\r\n else if (payers[2] === true) {\r\n $payerInput.find('.input-icon div:nth-child(' + 3 + ')').addClass('hidden-control');\r\n $payerAlertText.text(payerMessage + 'физических лиц.');\r\n this.result.text = \"физ. лицо\";\r\n this.result.value = 2;\r\n }\r\n $payerInput.addClass('hidden-control');\r\n $payerAlert.slideDown(200);\r\n } else if (truePayers.length === 2) {\r\n if (checkedPayer !== undefined && payers[checkedPayer] === true) {\r\n var childIndex = Number(checkedPayer) + 1;\r\n $payerInput.find('.input-icon div:nth-child(' + childIndex + ')').find('input').prop('checked', true);\r\n }\r\n const payersIds = rates[0][Dict.PAYERS_ID];\r\n const hasDifferentPayersIds = rates.filter(rate => rate[Dict.PAYERS_ID] !== payersIds).length > 0;\r\n if (hasDifferentPayersIds) {\r\n if (payers[0] === false) {\r\n $payerInput.find('.input-icon div:nth-child(2)').addClass('hidden-border-left');\r\n }\r\n $payerInput.find('.field-div').removeClass('rg-3').addClass('rg-2');\r\n $payerInput.removeClass('hidden-control');\r\n }\r\n else {\r\n switch (payersIds) {\r\n case '011':\r\n this.result.text = \"ИП или физ. лицо\";\r\n this.result.value = 1;\r\n $payerAlertText.text(payerMessage + 'индивидуальных предпринимателей и физических лиц.');\r\n $payerInput.addClass('hidden-control');\r\n $payerAlert.slideDown(200);\r\n break;\r\n case '101':\r\n this.result.text = \"организация или физ. лицо\";\r\n this.result.value = 0;\r\n $payerInput.addClass('hidden-control');\r\n break;\r\n case '110':\r\n this.result.text = \"организация или ИП\";\r\n this.result.value = 0;\r\n $payerAlertText.text(payerMessage + 'организаций и индивидуальных предпринимателей.');\r\n $payerInput.addClass('hidden-control');\r\n $payerAlert.slideDown(200);\r\n break;\r\n }\r\n }\r\n } else if (truePayers.length === 3) {\r\n if (checkedPayer !== undefined && payers[checkedPayer] === true) {\r\n var childIndex = Number(checkedPayer) + 1;\r\n $payerInput.find('.input-icon div:nth-child(' + childIndex + ')').find('input').prop('checked', true);\r\n\r\n this.result.value = checkedPayer;\r\n switch (checkedPayer) {\r\n case 0:\r\n this.result.text = \"организация\";\r\n break;\r\n case 1:\r\n this.result.text = \"ИП\";\r\n break;\r\n case 2:\r\n this.result.text = \"физ. лицо\";\r\n break;\r\n }\r\n }\r\n\r\n $payerInput.find('.input-icon div:nth-child(2)').removeClass('hidden-border-left');\r\n $payerInput.find('.field-div').removeClass('rg-2').addClass('rg-3');\r\n $payerInput.removeClass('hidden-control');\r\n }\r\n }\r\n }\r\n}\r\n\r\n$(function () {\r\n var calc = new TRTCalculator();\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","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};","/* 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":""}