{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./wwwroot/calc/js/datelib.js","webpack:///./wwwroot/calc/calc_usn/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","handleEmployeesRow","organizationValue","$employeesRow","removeClass","updateRateTitle","$fieldTitle","USNCalculator","_Calculator","_callSuper","_inherits","patchFieldTypes","RateField","setupStatistic","calcName","isAuthEnabled","IsAuthEnabled","lossesField","addInputField","options","maxVal","defaultValue","rateField","precision","errors","selector","deflatorYearField","income1Field","income2Field","income3Field","income4Field","sum1Field","sum2Field","sum3Field","sum4Field","insurance1Field","insurance2Field","insurance3Field","insurance4Field","tradeFee1Field","tradeFee2Field","tradeFee3Field","tradeFee4Field","payment1Field","payment2Field","payment3Field","outcome1Field","outcome2Field","outcome3Field","outcome4Field","ignore","click","$incomeAlert","$alertNote","mousemove","deflators","getJSON","DataVersionSalt","json","yearFrom","text","todayDate","selectedIndex","loadDescription","submitOnClick","addResetButton","_get","_getPrototypeOf","overQuarter","newRate","previousTaxBaseValue","minimalTax","totalIncome","totalPayment","totalTradeFee","totalInsurance","totalOutcome","initialTax","deduction","totalTax","taxBaseValue","isOverpayment","showOverpayment","totalOverpayment","overpaymentOption","alertType","organizationInfo","isEqualRate","isInitialTax","showInsurance","showPayment","showTradeFee","showOutcome","isLoss","totalLoss","succeeded","isEmployeeLimit","taxBaseAlertNote","convertElemToTextWithLinksForExport","overpaymentLink","deflatorYear","note","lossNote","notes","rateLink","taxBase","document","getElementById","scrollIntoView","block","inline","behavior","$error","initSmartLink","sender","autoValidation","$elem","$periodInput","$deflatorYearInput","$lossesInput","$taxBaseInput","$tradeFeeCheckbox","$organizationInput","$tradeFeeRow","$insuranceRow","$outcomeRow","$paymentRow","$payment2Input","$payment3Input","$income1Input","$income2Input","$income3Input","$income4Input","$sum1Input","$sum2Input","$sum3Input","$sum4Input","$row","$globalError","$taxLinkContainer","$taxLink2Container","period","isTradeFee","setMode","income1","income2","income3","income4","val","getLocaleNumber","getValue","organization","val1","val2","val3","val4","num","arr","filteredArr","getLocaleSum","join","sign","employees1","employees2","employees3","employees4","isEqual","val1Quarters","val2Quarters","isHighest","deflator","roundNumber","rateFormula","newRateFormula","getOrganizationInfo","lowLimitSum","getLimitSum","employees1Value","employees2Value","employees3Value","employees4Value","tradeFee1","insurance1","outcome1","sum1","payment1","tradeFee2","insurance2","outcome2","sum2","payment2","tradeFee3","insurance3","outcome3","sum3","incomeFormula","getRateFormula","outcomeFormula","payment3","tradeFee4","insurance4","outcome4","sum4","rate","taxPreCalc","losses","taxValue","getFormula","sumFormula","insuranceFormula","paymentFormula","tradeFeeFormula","showValue","isDeflatorPeriod","limitSum","Calculator","_FloatField","incomeValue","incomeOutcomeValue","selectedId","setupNumberInput","parseLocaleFloat","defaultGetValue","id","$rateInput","FloatField","g","Function","window","__fetch","require","polyFetch","apply","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","done","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","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","message","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","Field","selectorOrElem","deleted","isDynamic","_ignore","f","change","keyup","hasClass","getClearValue","params_","errClassElem","keepValue","setValue","keepErrors","clearErrors","phase","loud","handler","showErrorWay","documentMode","css","_BaseObjectField","_Field","deepcopy","clearValue","NumberField","_Field2","blur","isFloat","disableProps","keyName","$field","closest","inputFilter","focusin","CountField","_NumberField","parseLocaleInt","YearField","_NumberField2","allowSpaces","maxLength","PeriodField","_NumberField3","_NumberField4","MoneyField","SelectField","_Field3","itemText","RadioField","_Field4","checkedElem","prop","CheckboxField","_Field5","control","checked","TextField","_Field6","removeExtraSpace","raw","escapeTags","fields","_Field7","LinkField","selectedLink","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","tree","removeFirstEvent","dontSubmitOnRemove","_submitOnChange","fetchFields","_slicedToArray","fieldParams","disabledSubmitting","removeSelector","first","anchor","prepareTemplate","_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","_toConsumableArray","errorIsVisible","getExportValue","afterFirstPhaseCheck","newValuesString","stringify","lastValuesString","group","processGroup","afterParse","forceRender","skipValueChangesCheck","isActive","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","MoneyRubleOutputField","_HtmlOutputField2","getLocaleSumInRubbles","MoneyTextOutputField","_BaseOutputField5","verboseNumber","MoneyRoundedRubleField","_HtmlOutputField3","getRoundedNumberInRubbles","MoneyRoundedRubleOutputField","_HtmlOutputField4","PeriodOutputField","_BaseOutputField6","duration","DateOutputField","_BaseOutputField7","DayOutputField","_BaseOutputField8","PercentOutputField","_HtmlOutputField5","NoteOutputField","_RenderRequiredOutput","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","title","pathname","getHash","RegExp","substring","args","addOutputField","feedbackBottom","load","code","setWarningMessage","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_usn/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 = 1170);\n","import {loadResource} from \"@lib/utils/api\";\r\nconst calendarRes = loadResource(\"/conf/calc/calendar.json\");\r\n\r\nconst MILLISECONDS_TO_DAYS_CONSTANT = 24 * 60 * 60 * 1000;\r\n\r\nclass DatePoint {\r\n /**\r\n * @param {any} stringOrDate string, Date, DatePoint or non-string falsy value for new Date() \r\n * @param {boolean} silent - disable printing errors in the console\r\n * string can be in straight (dd.mm.yyyy) or inverse (yyyy.mm.dd) format\r\n */\r\n constructor(stringOrDate, silent) {\r\n silent = silent || false;\r\n if (typeof (stringOrDate) === \"string\") {\r\n stringOrDate = stringOrDate.replace(/[^\\d.]/g, \"\");\r\n const straight = /^(\\d\\d)[.](\\d\\d)[.](\\d{4})$/.exec(stringOrDate);\r\n if (straight) {\r\n this.date = new Date(parseInt(straight[3], 10), parseInt(straight[2], 10) - 1, parseInt(straight[1]));\r\n } else {\r\n const inverse = /^(\\d{4})[.](\\d\\d)[.](\\d\\d)$/.exec(stringOrDate);\r\n if (inverse !== null) {\r\n this.date = new Date(parseInt(inverse[1], 10), parseInt(inverse[2], 10) - 1, parseInt(inverse[3]));\r\n } else {\r\n if (!silent)\r\n throw new Error(`Wrong format of date in string: ${stringOrDate}`);\r\n\r\n }\r\n }\r\n }\r\n else if (stringOrDate instanceof Date) {\r\n this.date = new Date(stringOrDate);\r\n }\r\n else if (stringOrDate instanceof DatePoint) {\r\n this.date = new Date(stringOrDate.date);\r\n }\r\n else if (!stringOrDate)\r\n this.date = new Date();\r\n else {\r\n if (!silent)\r\n throw new Error(\"Wrong argument type in DatePoint contructor.\");\r\n }\r\n\r\n this.date?.setHours(12,0,0,0);\r\n }\r\n\r\n get valid() {\r\n return !!(this.date !== undefined && this.date instanceof Date && this.date.getDate());\r\n }\r\n\r\n toInt() {\r\n return 384 * this.date.getFullYear() + 32 * this.date.getMonth() + this.date.getDate();\r\n }\r\n\r\n static fromInt(v) {\r\n const year = parseInt(v / 384);\r\n const month = parseInt((v % 384) / 32);\r\n const day = v % 32;\r\n return new DatePoint(`${day}.${month + 1}.${year}`);\r\n }\r\n\r\n valueOf() {\r\n return this.toInt();\r\n }\r\n\r\n toString() {\r\n return this.toLocaleFormat();\r\n }\r\n\r\n copy() {\r\n return new DatePoint(this.date);\r\n }\r\n\r\n isEqualTo(other) {\r\n if (!(other instanceof DatePoint)) {\r\n other = new DatePoint(other);\r\n }\r\n return (this.valid && other.valid && this.toInt() == other.toInt());\r\n }\r\n\r\n fixDayMonthYear(day, month, year) {\r\n const result = this.copy();\r\n if (year != null) {\r\n result.date.setFullYear(year);\r\n }\r\n if (month != null) {\r\n result.date.setMonth(month - 1);\r\n }\r\n if (day != null) {\r\n result.date.setDate(day);\r\n }\r\n return result;\r\n }\r\n\r\n getSpan(otherPoint) {\r\n var dateFrom = this.date <= otherPoint.date ? this : otherPoint;\r\n var dateTo = this.date <= otherPoint.date ? otherPoint : this;\r\n return new DateSpan(dateFrom, dateTo);\r\n }\r\n\r\n addSpan(span) {\r\n var result = this.copy();\r\n if (span.getDayCount() != undefined) {\r\n result.inc(span.getDayCount());\r\n } else {\r\n var count = span.getWorkingDayCount();\r\n var inc = (count > 0 ? 1 : -1);\r\n count *= inc;\r\n for (let i = 0; i < count; ++i) {\r\n result.inc(inc);\r\n while (result.isDayOff())\r\n result.inc(inc);\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n goesBefore(other) {\r\n if (!(other instanceof DatePoint)) {\r\n other = new DatePoint(other);\r\n }\r\n return this.date < other.date;\r\n }\r\n\r\n distanceTo(other, includeEnd = true) {\r\n const result = Math.floor((other.date - this.date) / MILLISECONDS_TO_DAYS_CONSTANT + 0.5);\r\n return includeEnd ? result + 1 : result;\r\n }\r\n\r\n getDayNumberOfYear() {\r\n return Math.floor((this.date - getTheFirstOfJanuary(this.date)) / MILLISECONDS_TO_DAYS_CONSTANT);\r\n }\r\n\r\n getWeekNumberOfYear() {\r\n const firstJan = getTheFirstOfJanuary(this.date);\r\n return Math.ceil((((this.date - firstJan) / MILLISECONDS_TO_DAYS_CONSTANT) + firstJan.getDay()) / 7);\r\n }\r\n\r\n addDays(amount) {\r\n var result = this.copy();\r\n result.date.setDate(this.date.getDate() + amount);\r\n return result;\r\n }\r\n\r\n inc(amount) {\r\n this.date.setDate(this.date.getDate() + (amount ?? 1));\r\n return this;\r\n }\r\n\r\n dec() { return this.inc(-1); }\r\n\r\n toLocaleFormat() {\r\n return this.date.toLocaleDateString(tools.appLocale); //dd.mm.yyyy\r\n }\r\n\r\n getDayName() {\r\n var days = [\"воскресенье\", \"понедельник\", \"вторник\", \"среда\", \"четверг\", \"пятница\", \"суббота\"];\r\n return days[this.date.getDay()];\r\n }\r\n\r\n toVerboseString(params) {\r\n params = params || {};\r\n params.addWeekDay = (params.addWeekDay === undefined ? true : params.addWeekDay);\r\n params.addYear = (params.addYear === undefined ? true : params.addYear);\r\n var monthNames = [\"января\", \"февраля\", \"марта\", \"апреля\", \"мая\", \"июня\", \"июля\", \"августа\", \"сентября\", \"октября\", \"ноября\", \"декабря\"];\r\n var result = \"\" + this.date.getDate() + \" \" + monthNames[this.date.getMonth()];\r\n if (params.addYear) {\r\n result += \" \" + this.date.getFullYear() + \" года\";\r\n }\r\n if (params.addWeekDay) {\r\n result += \", \" + this.getDayName(this.date);\r\n }\r\n return result; //E.g. 11 сентября 2019 года, воскресенье\r\n }\r\n\r\n getDaysInMonth() {\r\n if (this.date.getMonth() === 11) {\r\n return new Date(this.date.getFullYear() + 1, 0, 0).getDate();\r\n } else {\r\n return new Date(this.date.getFullYear(), this.date.getMonth() + 1, 0).getDate();\r\n }\r\n }\r\n\r\n /*\r\n * Sets date not changing month and year.\r\n * It is useful in case when you want to set date 31 for feb month:\r\n * 1 march will be chosen unlike in original method (2 or 3 march).\r\n */\r\n setDateGently(date, monthIsolation) {\r\n monthIsolation = monthIsolation || false;\r\n var maxDate = this.getDaysInMonth();\r\n if (date <= maxDate) {\r\n this.date.setDate(date);\r\n } else {\r\n this.date.setDate(maxDate + (monthIsolation ? 0 : 1));\r\n }\r\n }\r\n\r\n /*\r\n * Adds a given number of months to the initial date. \r\n * If there is a gap between the initial date and a calculated one, it sets the last day of the new month.\r\n */\r\n addMonths(months) {\r\n if (months) {\r\n const monthSum = this.date.getMonth() + months;\r\n const addYears = Math.floor(monthSum / 12);\r\n const newMonth = monthSum - addYears * 12;\r\n const currentDay = this.date.getDate();\r\n if (addYears !== 0) {\r\n this.date.setYear(this.date.getFullYear() + addYears);\r\n }\r\n this.date.setMonth(newMonth);\r\n if (this.date.getMonth() !== newMonth) {\r\n this.date.setMonth(newMonth);\r\n }\r\n this.setDateGently(currentDay, true);\r\n }\r\n }\r\n\r\n predictIsDayOff() {\r\n const regularHolidays = [\r\n \"|1|2|3|4|5|6|7|8|\",\r\n \"|23|\",\r\n \"|8|\",\r\n \"||\",\r\n \"|1|9|\",\r\n \"|12|\",\r\n \"||\",\r\n \"||\",\r\n \"||\",\r\n \"||\",\r\n \"|4|\",\r\n \"||\"\r\n ];\r\n\r\n if ([0, 6].indexOf(this.date.getDay()) >= 0)\r\n return true;\r\n if (regularHolidays[this.date.getMonth()].indexOf(\"|\" + this.date.getDate() + \"|\") >= 0)\r\n return true;\r\n return false;\r\n }\r\n\r\n isDayOff() {\r\n if (calendarRes.loading) {\r\n return this.predictIsDayOff();\r\n }\r\n const calendar = calendarRes.content;\r\n for (var i = calendar.length - 1; i >= 0; i--) {\r\n if (this.date.getFullYear() === calendar[i].year) {\r\n return (calendar[i].daysOff[this.date.getMonth()].indexOf(\"|\" + this.date.getDate() + \"|\") >= 0);\r\n }\r\n }\r\n if (this.date.getFullYear() > calendar[calendar.length - 1].year)\r\n return this.predictIsDayOff();\r\n return false;\r\n }\r\n\r\n static currentYear() {\r\n return (new Date()).getFullYear();\r\n }\r\n}\r\n\r\nclass DateSpan {\r\n constructor(dateFrom, dateTo) {\r\n if (dateFrom && dateTo) {\r\n this._dateFrom = new DatePoint(dateFrom);\r\n this._dateTo = new DatePoint(dateTo);\r\n }\r\n }\r\n\r\n toString() {\r\n return this.toLocaleFormat();\r\n }\r\n\r\n isEqualTo(other) {\r\n if (!(other instanceof DateSpan)) {\r\n throw new Error(\"Can't compare DateSpan with \" + typeof (other) + \". Try to cast to DateSpan firstly.\");\r\n }\r\n\r\n if (this._boundsSet()) {\r\n return other._boundsSet() && this.dateFrom.isEqualTo(other.dateFrom) && this.dateTo.isEqualTo(other.dateTo);\r\n }\r\n\r\n if (other._boundsSet()) {\r\n return false;\r\n }\r\n\r\n return this._dayCount === other._dayCount && this._workingDayCount === other._workingDayCount;\r\n }\r\n\r\n get dateFrom() {\r\n return this._dateFrom;\r\n }\r\n\r\n // AG TODO: It's not ideal solution. Come up with a new one.\r\n // Transparent getters allow to change using only getters\r\n // Setters must call 'boundUpdated()' or not update anything at all (maybe remove setters???)\r\n set dateFrom(dateFrom) {\r\n if (dateFrom.valid) {\r\n this._workingDayCount = undefined;\r\n this._dateFrom = dateFrom;\r\n }\r\n }\r\n\r\n get dateTo() {\r\n return this._dateTo;\r\n }\r\n\r\n set dateTo(dateTo) {\r\n if (dateTo.valid) {\r\n this._workingDayCount = undefined;\r\n this._dateTo = dateTo;\r\n }\r\n }\r\n\r\n static fromDays(days) {\r\n var span = new DateSpan();\r\n span._dayCount = days;\r\n return span;\r\n }\r\n\r\n static fromWorkingDays(daysWorking) {\r\n var span = new DateSpan();\r\n span._workingDayCount = daysWorking;\r\n return span;\r\n }\r\n\r\n getWorkingDayCount() {\r\n if (!this._workingDayCount && this._boundsSet()) {\r\n let count = 0;\r\n this.iterDays((day) => count += !day.isDayOff());\r\n this._workingDayCount = count;\r\n }\r\n return this._workingDayCount;\r\n }\r\n\r\n _boundsSet() {\r\n return this.dateFrom !== undefined && this.dateTo !== undefined;\r\n }\r\n\r\n copy() {\r\n if (this._boundsSet())\r\n return new DateSpan(this.dateFrom.copy(), this.dateTo.copy());\r\n\r\n if (this.getDayCount() !== undefined)\r\n return DateSpan.fromDays(this.getDayCount());\r\n\r\n if (this.getWorkingDayCount() !== undefined)\r\n return DateSpan.fromWorkingDays(this.getWorkingDayCount());\r\n }\r\n\r\n getDayCount() {\r\n if (this._boundsSet())\r\n return this.dateFrom.distanceTo(this.dateTo);\r\n return this._dayCount;\r\n }\r\n\r\n toLocaleFormat() {\r\n return this.dateFrom.toLocaleFormat() + \" – \" + this.dateTo.toLocaleFormat();\r\n }\r\n\r\n //return string with day count\r\n getVerboseDayCount() {\r\n return tools.verboseCountingValue(this.getDayCount(), [[\"день\", \"дня\", \"дней\"]]);\r\n }\r\n\r\n /*\r\n * Returns object {valid: true, monthes: [monthes], days: [days]}\r\n * or {valid: false, reason: [reason message string]}\r\n *\r\n * Calculates difference between two dates in monthes and residual days.\r\n * Argument optional (used to subtract specified count of days from period)\r\n * All calculations correct by laws.\r\n */\r\n getPeriodDuration(subtractDayCount) {\r\n subtractDayCount = subtractDayCount || 0;\r\n\r\n //subtracting\r\n var fixedDayTo = this.dateTo.copy();\r\n fixedDayTo = fixedDayTo.addDays(-subtractDayCount);\r\n\r\n if (fixedDayTo.goesBefore(this.dateFrom)) {\r\n if (fixedDayTo.distanceTo(this.dateFrom) == 2) {\r\n return {valid: true, monthes: 0, days: 0, residPoint: fixedDayTo, inDays: 0};\r\n }\r\n return {valid: false, reason: \"dateFrom must be less than dayTo - subtractDayCount\"};\r\n }\r\n\r\n // calculating duration\r\n var months = (fixedDayTo.date.getFullYear() * 12 + fixedDayTo.date.getMonth()) - (this.dateFrom.date.getFullYear() * 12 + this.dateFrom.date.getMonth());\r\n var residPoint = fixedDayTo.copy();\r\n\r\n residPoint.setDateGently(this.dateFrom.date.getDate());\r\n if (residPoint.distanceTo(fixedDayTo) < 0) {\r\n months--;\r\n residPoint = fixedDayTo.copy();\r\n residPoint.date.setDate(1);\r\n residPoint.date.setMonth(residPoint.date.getMonth() - 1);\r\n residPoint.setDateGently(this.dateFrom.date.getDate());\r\n } else if (residPoint.date.getDate() == 1 && fixedDayTo.date.getDate() == residPoint.getDaysInMonth()) {\r\n residPoint.date.setDate(fixedDayTo.date.getDate() + 1);\r\n months++;\r\n }\r\n\r\n return {\r\n valid: true,\r\n monthes: months,\r\n days: residPoint.distanceTo(fixedDayTo),\r\n residPoint: residPoint,\r\n inDays: this.dateFrom.distanceTo(fixedDayTo)\r\n };\r\n }\r\n\r\n //argument of callback should be DatePoint type\r\n iterDays(callback) {\r\n if (!this._boundsSet())\r\n throw new Error(\"DateSpan bounds are undefined\");\r\n var start = this.dateFrom.copy();\r\n var index = 0;\r\n while (this.getDayCount() > index) {\r\n callback(start, index);\r\n start.inc();\r\n index++;\r\n }\r\n }\r\n\r\n /*\r\n * Returns list of objects with next attributes:\r\n * * dateSpan\r\n * * type: [add, sub] (see additional `subtract` parameter)\r\n * * leftKey (for add only, null for first if first key goes after )\r\n * * rightKey (for add only, null for last if last key foes before )\r\n * * instance (for sub only)\r\n * Parameters:\r\n * required parameters: \r\n * * keypoints (list of objects {date: [Date], ...})\r\n * additional parameters:\r\n * * subtract (list of sorted objects {dateFrom: [Date], dateTo: [Date], ...})\r\n * \r\n */\r\n getDateSegments(params) {\r\n if (!tools.checkParams(params, [\"keypoints\"])) {\r\n return [];\r\n }\r\n var keypoints = params.keypoints.sort((a, b) => ((new DatePoint(a.date)).goesBefore(b.date) ? -1 : 1));\r\n\r\n var point = this.dateFrom;\r\n var endPoint = this.dateTo;\r\n var result = [];\r\n\r\n var key = null;\r\n var subtractionUsed = {};\r\n\r\n function add(from, to, leftKey, rightKey) {\r\n result.push({span: new DateSpan(from, to), leftKey: leftKey, rightKey: rightKey, type: \"add\"});\r\n }\r\n\r\n function subtract(instanceIndex) {\r\n var instance = params.subtract[instanceIndex];\r\n result.push({span: new DateSpan(instance.dateFrom, instance.dateTo), instance: instance, type: \"sub\"});\r\n subtractionUsed[instanceIndex] = true;\r\n }\r\n\r\n function addWithSubtractions(start, end, leftKey, rightKey) {\r\n var point = start;\r\n params.subtract.map((s) => new DateSpan(s.dateFrom, s.dateTo)).some(function (s, index) {\r\n if (subtractionUsed[index] !== true) {\r\n if (!point.goesBefore(s.dateFrom)) {\r\n subtract(index);\r\n if (!s.dateTo.goesBefore(point))\r\n point = s.dateTo.addDays(1);\r\n return (!s.dateTo.goesBefore(end));\r\n\r\n } else if (!end.goesBefore(s.dateFrom)) {\r\n add(point, s.dateFrom.addDays(-1), leftKey, rightKey);\r\n subtract(index);\r\n point = s.dateTo.addDays(1);\r\n } else {\r\n return true;\r\n }\r\n } else {\r\n if (!s.dateTo.goesBefore(point)) {\r\n point = s.dateTo.addDays(1);\r\n }\r\n }\r\n return (end.goesBefore(point));\r\n });\r\n\r\n if (!end.goesBefore(point)) {\r\n add(point, end, leftKey, rightKey);\r\n }\r\n }\r\n\r\n function addPeriod(from, to, rightKey) {\r\n if (params.subtract === undefined)\r\n add(from, to, key, rightKey || null);\r\n else\r\n addWithSubtractions(from, to, key, rightKey || null);\r\n }\r\n\r\n if (keypoints.length === 0) {\r\n add(point, endPoint);\r\n }\r\n\r\n // cases:\r\n // 1. kkk[]\r\n // 2. []kkk\r\n // 3. [kkk]\r\n // 4. k[k]k\r\n // 5. k[kk]\r\n // 6. [kk]k\r\n // 7. kk[]k\r\n for (var i = 0; i < keypoints.length; ++i) {\r\n var keypoint = keypoints[i];\r\n var date = new DatePoint(keypoint.date);\r\n if (point.goesBefore(date)) {\r\n if (endPoint.goesBefore(date)) { // 2, 4, 6, 7\r\n addPeriod(point, endPoint, keypoint);\r\n break;\r\n }\r\n else { // 3, 4, 5, 6\r\n addPeriod(point, date.addDays(-1), keypoint);\r\n point = date;\r\n if (i === keypoints.length - 1) { // 3, 5\r\n key = keypoint;\r\n addPeriod(point, endPoint);\r\n }\r\n }\r\n }\r\n else if (i === keypoints.length - 1) { // only 1\r\n key = keypoint;\r\n addPeriod(point, endPoint);\r\n }\r\n\r\n key = keypoint;\r\n }\r\n return result;\r\n }\r\n\r\n contains(datePoint) {\r\n if (!this._boundsSet()) return undefined;\r\n return !datePoint.goesBefore(this.dateFrom) && !this.dateTo.goesBefore(datePoint);\r\n }\r\n\r\n intersects(other) {\r\n if (!this._boundsSet() || !other._boundsSet()) return undefined;\r\n return !this.dateTo.goesBefore(other.dateFrom) && !other.dateTo.goesBefore(this.dateFrom);\r\n }\r\n\r\n // check that this fully inside other\r\n inside(other) {\r\n if (!this._boundsSet() || !other._boundsSet()) return undefined;\r\n return !this.dateFrom.goesBefore(other.dateFrom) && !other.dateTo.goesBefore(this.dateTo);\r\n }\r\n}\r\n\r\n/*Parameters:\r\n * required parameters: \r\n * * from\r\n * * to\r\n*/\r\nfunction makeDateSegmentWorker(segments) {\r\n var _segments = segments\r\n .map((a) => new DateSpan(a.from, a.to))\r\n .sort((a, b) => (a.dateFrom.goesBefore(b.dateFrom) ? -1 : 1));\r\n\r\n return {\r\n /// exclude off days by default\r\n checkDay: function (day, includeOffDays) {\r\n const point = new DatePoint(day);\r\n return (includeOffDays || !point.isDayOff()) && _segments.some((s) => s.contains(point));\r\n },\r\n countSegment: function (from_, to_) {\r\n if (_segments.length == 0) return 0;\r\n if (from_.goesBefore(_segments[0].dateFrom))\r\n from_ = _segments[0].dateFrom;\r\n if (_segments[_segments.length - 1].dateTo.goesBefore(to_))\r\n to_ = _segments[_segments.length - 1].dateTo;\r\n\r\n var result = 0;\r\n var self = this;\r\n var segmentSpan = new DateSpan(from_, to_);\r\n segmentSpan.iterDays((date) => result += self.checkDay(date));\r\n return result;\r\n },\r\n checkIntersection: (dateFrom_, dateTo_) => {\r\n var span = new DateSpan(dateFrom_, dateTo_);\r\n return _segments.some((s) => s.intersects(span));\r\n }\r\n };\r\n}\r\n\r\nfunction getDate(datePicker, returnLegacyDate) {\r\n returnLegacyDate = returnLegacyDate || false;\r\n try {\r\n datePicker = $(datePicker);\r\n\r\n var format = datePicker.datepicker(\"option\", \"dateFormat\"),\r\n text = datePicker.val(),\r\n settings = datePicker.datepicker(\"option\", \"settings\");\r\n\r\n const date = $.datepicker.parseDate(format, text, settings);\r\n return returnLegacyDate ? date : new DatePoint(date, true);\r\n } catch {\r\n return returnLegacyDate ? null : new DatePoint(null, true);\r\n }\r\n}\r\n\r\nfunction nextDateAfterWorkingDay(datePoint, additionalHolidayFunc) {\r\n var checker = (d) => d.isDayOff();\r\n if (additionalHolidayFunc !== undefined) {\r\n checker = function (d) {\r\n return d.isDayOff() || additionalHolidayFunc(d);\r\n };\r\n }\r\n const date = datePoint.copy();\r\n while (true) {\r\n var isWorkingDay = !checker(date);\r\n date.inc();\r\n\r\n if (isWorkingDay) {\r\n return date;\r\n }\r\n }\r\n}\r\n\r\nconst emptyFunc = () => { };\r\n\r\nfunction makeDateFromAlertWorker({\r\n slideUpDuration = 200,\r\n dateFromSelector = \"#dateFrom\",\r\n submitForm = emptyFunc,\r\n dateFromAlertSelector = \"#dateFromAlert\",\r\n alertAcceptSelector = \"#dateFromAlertAccept\",\r\n isDynamicSubmit = false,\r\n minCheckDate = \"01.01.1800\",\r\n maxCheckDate = \"01.01.2999\",\r\n crownPeriods = undefined,\r\n isDayBeforeWeekend = false,\r\n isDayCrownHoliday = false,\r\n isWeekend = false,\r\n calculator = null\r\n}) {\r\n var elem = $(dateFromAlertSelector);\r\n var alertAcceptElem = $(alertAcceptSelector);\r\n var shown = false;\r\n\r\n var config = {\r\n dateFrom: {tmp: null, frozen: null},\r\n prevDate: {tmp: null, frozen: null},\r\n nextPrevDateFrom: {tmp: null, frozen: null},\r\n nextDateFrom: {tmp: null, frozen: null},\r\n set: function (dateFrom_, prevDate_, nextDateFrom_) {\r\n if (dateFrom_ !== null) this.dateFrom.tmp = dateFrom_;\r\n if (prevDate_ !== null) this.prevDate.tmp = prevDate_;\r\n if (nextDateFrom_ !== null) {\r\n this.nextDateFrom.tmp = nextDateFrom_;\r\n this.nextPrevDateFrom.tmp = new DatePoint(nextDateFrom_).dec().date;\r\n }\r\n },\r\n freeze: function () {\r\n [this.dateFrom, this.prevDate, this.nextPrevDateFrom, this.nextDateFrom].forEach(function (x) {\r\n x.frozen = x.tmp;\r\n });\r\n elem.data(\"stateDayFrozen\", elem.data(\"stateDay\"));\r\n }\r\n };\r\n\r\n function previousDateBeforeWeekend(date) {\r\n var currDate = date.copy();\r\n while (true) {\r\n var isWorkingDay = !currDate.isDayOff();\r\n if (isWorkingDay) {\r\n return currDate;\r\n }\r\n currDate.dec();\r\n }\r\n }\r\n\r\n $(\".variant-header\").on(\"click\", function (e) {\r\n if (e.target.tagName == \"A\")\r\n return;\r\n\r\n function updateVariant(elem) {\r\n var parent = elem.parentElement;\r\n var content = $(parent).find(\".variant-content\");\r\n if (!elem.classList.contains(\"close\")) {\r\n content.slideDown();\r\n } else {\r\n content.slideUp(slideUpDuration);\r\n }\r\n }\r\n var self = this;\r\n var close = !self.classList.contains(\"close\");\r\n $(\".variant-header\").addClass(\"close\").each(function () {\r\n if (this === self && !close) {\r\n this.classList.remove(\"close\");\r\n }\r\n updateVariant(this);\r\n });\r\n });\r\n\r\n alertAcceptElem.on(\"click\", function () {\r\n var newDate = new DatePoint($(this).data(\"newDate\"));\r\n const oldDate = new DatePoint($(dateFromSelector)[0].date);\r\n if (newDate.valid) {\r\n config.set(null, null, newDate.date);\r\n config.freeze();\r\n $(dateFromSelector)[0].date = newDate.date;\r\n const dateFromPoint = new DatePoint(config.dateFrom.frozen);\r\n elem.find(\".datefrom-alert-val\").html(dateFromPoint.toLocaleFormat());\r\n elem.find(\".datefrom-alert-val-day\").html(dateFromPoint.getDayName());\r\n elem.data(\"crownButton\", this.classList.contains(\"crown\"));\r\n }\r\n\r\n elem.slideUp(slideUpDuration);\r\n\r\n if (isDynamicSubmit) {\r\n elem.data(\"state\", \"accept\");\r\n submitForm();\r\n }\r\n else {\r\n submitForm();\r\n elem.data(\"state\", \"accept\");\r\n }\r\n\r\n if (!crownSegmWorker.checkDay(newDate.date) && crownSegmWorker.checkDay(nextDateAfterWorkingDay(oldDate).date) && oldDate.copy().dec().isDayOff())\r\n elem.data(\"stateDay\", \"crownOff\");\r\n else if (crownSegmWorker.checkDay(newDate.date))\r\n elem.data(\"stateDay\", \"\");\r\n\r\n if (calculator !== null) {\r\n calculator.sendStatisticMessage(\"Check_Day_Off\");\r\n }\r\n\r\n });\r\n\r\n elem.find(\".close-button\").on(\"click\", function () {\r\n elem.slideUp(slideUpDuration);\r\n elem.data(\"state\", \"closed\");\r\n config.freeze();\r\n\r\n if (isDynamicSubmit) {\r\n submitForm();\r\n }\r\n return false;\r\n });\r\n\r\n var isCrown = crownPeriods === undefined ? false : true;\r\n var crownSegmWorker = makeDateSegmentWorker(crownPeriods || []);\r\n\r\n function checkCrown(dateFrom, equalityCheck, hideCovidInfo) {\r\n if (hideCovidInfo) return;\r\n var prevDatePoint = new DatePoint(dateFrom);\r\n prevDatePoint.dec();\r\n\r\n if (prevDatePoint.isDayOff() || crownSegmWorker.checkDay(prevDatePoint.date)) {\r\n var nextDateFromPoint = nextDateAfterWorkingDay(new DatePoint(dateFrom), function (d) { return crownSegmWorker.checkDay(d); });\r\n var nextPrevDateFromPoint = nextDateFromPoint.copy().dec();\r\n\r\n var result = (equalityCheck === undefined || nextDateFromPoint.toLocaleFormat() !== new DatePoint(equalityCheck).toLocaleFormat());\r\n if (result) {\r\n $(\".datefrom-alert-new-prev-crown\").html(nextPrevDateFromPoint.toLocaleFormat());\r\n $(\".datefrom-alert-new-val-crown\").html(nextDateFromPoint.toLocaleFormat());\r\n config.set(null, null, nextDateFromPoint.date);\r\n alertAcceptElem.each(function () {\r\n if (this.classList.contains(\"crown\")) {\r\n $(this).data(\"newDate\", nextDateFromPoint.toLocaleFormat());\r\n }\r\n });\r\n }\r\n return result;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n return {\r\n show: function () {\r\n shown = true;\r\n elem.slideDown();\r\n if (calculator !== null) {\r\n calculator.sendStatisticMessage(\"Show_Day_Off\");\r\n }\r\n },\r\n shown: function () { return shown; },\r\n hide: function () { shown = false; elem.slideUp(slideUpDuration); },\r\n reset: function () { shown = false; elem.hide(); },\r\n getElem: function () { return elem; },\r\n getState: function () { return elem.data(\"state\"); },\r\n getFrozenDateFrom: function () { return new DatePoint(config.dateFrom.frozen); },\r\n isVisible: function () { return elem.is(\":visible\"); },\r\n isAccepted: function () { return (elem.data(\"state\") === \"accept\"); },\r\n isAcceptedCrown: function () { return (elem.data(\"crownButton\")); },\r\n isClosed: function () { return (elem.data(\"state\") === \"closed\"); },\r\n isDayCrown: function (frozen) { return frozen ? (elem.data(\"stateDayFrozen\") == \"crown\") : (elem.data(\"stateDay\") == \"crown\"); },\r\n isDayOffCrown: function (frozen) { return frozen ? (elem.data(\"stateDayFrozen\") == \"crownOff\") : (elem.data(\"stateDay\") == \"crownOff\"); },\r\n render: function (freeze) { // this parameter useful for force freeze (card not closed, print, for example)\r\n if (freeze) {\r\n config.freeze();\r\n }\r\n var dateFromPoint = new DatePoint(config.dateFrom.frozen);\r\n var prevDatePoint = new DatePoint(config.prevDate.frozen);\r\n var nextPrevDateFromPoint = new DatePoint(config.nextPrevDateFrom.frozen);\r\n var nextDateFromPoint = new DatePoint(config.nextDateFrom.frozen);\r\n $(\".datefrom-alert-val-render\").html(dateFromPoint.toLocaleFormat());\r\n $(\".datefrom-alert-val-day-render\").html(dateFromPoint.getDayName());\r\n $(\".datefrom-alert-prev-render\").html(prevDatePoint.toLocaleFormat());\r\n $(\".datefrom-alert-prev-day-render\").html(prevDatePoint.getDayName());\r\n $(\".datefrom-alert-new-prev-render\").html(nextPrevDateFromPoint.toLocaleFormat());\r\n $(\".datefrom-alert-new-val-render\").html(nextDateFromPoint.toLocaleFormat());\r\n $(\".datefrom-alert-new-val-day-render\").html(nextDateFromPoint.getDayName());\r\n },\r\n check: function (dateFrom, hideCovidInfo) {\r\n const dateFromPoint = new DatePoint(dateFrom, true);\r\n if (dateFromPoint.goesBefore(minCheckDate) || new DatePoint(maxCheckDate).goesBefore(dateFromPoint)) {\r\n this.hide();\r\n return;\r\n }\r\n\r\n elem.data(\"state\", \"\");\r\n elem.data(\"stateDay\", \"\");\r\n if (dateFromPoint.valid) {\r\n if (isDayBeforeWeekend) {\r\n var currentDate = dateFromPoint;\r\n if (currentDate.isDayOff()) {\r\n var previousDatePoint = previousDateBeforeWeekend(dateFromPoint);\r\n config.set(dateFromPoint.date, null, previousDatePoint.date);\r\n alertAcceptElem.data(\"newDate\", previousDatePoint.toLocaleFormat());\r\n elem.find(\".datefrom-alert-val\").html(dateFromPoint.toLocaleFormat());\r\n elem.find(\".datefrom-alert-val-day\").html(dateFromPoint.getDayName());\r\n elem.find(\".datefrom-alert-new-val\").html(previousDatePoint.toLocaleFormat());\r\n elem.find(\".datefrom-alert-new-val-day\").html(previousDatePoint.getDayName());\r\n this.show();\r\n } else {\r\n this.hide();\r\n }\r\n }\r\n else if (isWeekend) {\r\n var prevDatePoint = dateFromPoint.copy().dec();\r\n if (dateFromPoint.isDayOff() || checkCrown(dateFromPoint.date)) {\r\n config.set(dateFromPoint.date, null, null);\r\n elem.find(\".datefrom-alert-val\").html(dateFromPoint.toLocaleFormat());\r\n elem.find(\".datefrom-alert-val-day\").html(dateFromPoint.getDayName());\r\n }\r\n\r\n if (dateFromPoint.isDayOff()) {\r\n var nextDateFromPoint = nextDateAfterWorkingDay(dateFromPoint);\r\n var workingDateFromPoint = nextDateFromPoint.copy().dec();\r\n alertAcceptElem.data(\"newDate\", workingDateFromPoint.toLocaleFormat());\r\n elem.find(\".datefrom-alert-new-val\").html(workingDateFromPoint.toLocaleFormat());\r\n\r\n if (isCrown && checkCrown(dateFromPoint.date, nextDateFromPoint.date, hideCovidInfo) && !hideCovidInfo) {\r\n $(\".info-block.variants\").show();\r\n $(\".info-block.single\").hide();\r\n elem.data(\"stateDay\", \"crownOff\");\r\n } else if (isCrown) {\r\n if (dateFromPoint.date.getFullYear() < 2023) {\r\n $(\".info-block-content .normal-cases-before-2023\").show();\r\n $(\".info-block-content .normal-cases\").hide();\r\n } else {\r\n $(\".info-block-content .normal-cases-before-2023\").hide();\r\n $(\".info-block-content .normal-cases\").show();\r\n }\r\n $(\".info-block-content .crown-case\").hide();\r\n $(\".info-block.variants\").hide();\r\n $(\".info-block.single\").show();\r\n if (crownSegmWorker.checkDay(dateFromPoint))\r\n elem.data(\"stateDay\", \"crown\");\r\n }\r\n\r\n config.set(null, null, workingDateFromPoint.date);\r\n\r\n this.show();\r\n } else {\r\n if (isCrown && checkCrown(dateFromPoint.date) && !hideCovidInfo) {\r\n $(\".info-block-content .normal-cases-before-2023\").hide();\r\n $(\".info-block-content .normal-cases\").hide();\r\n $(\".info-block-content .crown-case\").show();\r\n $(\".info-block.variants\").hide();\r\n $(\".info-block.single\").show();\r\n elem.data(\"stateDay\", \"crown\");\r\n if (!isDayCrownHoliday)\r\n this.show();\r\n else\r\n this.hide();\r\n } else {\r\n this.hide();\r\n }\r\n }\r\n } else {\r\n prevDatePoint = dateFromPoint.copy().dec();\r\n if (prevDatePoint.isDayOff() || checkCrown(dateFromPoint.date)) {\r\n config.set(dateFromPoint.date, prevDatePoint.date, null);\r\n elem.find(\".datefrom-alert-val\").html(dateFromPoint.toLocaleFormat());\r\n elem.find(\".datefrom-alert-val-day\").html(dateFromPoint.getDayName());\r\n elem.find(\".datefrom-alert-prev\").html(prevDatePoint.toLocaleFormat());\r\n elem.find(\".datefrom-alert-prev-day\").html(prevDatePoint.getDayName());\r\n }\r\n\r\n if (prevDatePoint.isDayOff()) {\r\n nextDateFromPoint = nextDateAfterWorkingDay(dateFromPoint);\r\n var nextPrevDateFromPoint = nextDateFromPoint.copy().dec();\r\n\r\n alertAcceptElem.data(\"newDate\", nextDateFromPoint.toLocaleFormat());\r\n\r\n elem.find(\".datefrom-alert-new-prev\").html(nextPrevDateFromPoint.toLocaleFormat());\r\n elem.find(\".datefrom-alert-new-val\").html(nextDateFromPoint.toLocaleFormat());\r\n\r\n if (isCrown && checkCrown(dateFromPoint.date, nextDateFromPoint.date, hideCovidInfo) && !hideCovidInfo) {\r\n $(\".info-block.variants\").show();\r\n $(\".info-block.single\").hide();\r\n elem.data(\"stateDay\", \"crownOff\");\r\n } else if (isCrown) {\r\n if (dateFromPoint.date.getFullYear() < 2023) {\r\n $(\".info-block-content .normal-cases-before-2023\").show();\r\n $(\".info-block-content .normal-cases\").hide();\r\n } else {\r\n $(\".info-block-content .normal-cases-before-2023\").hide();\r\n $(\".info-block-content .normal-cases\").show();\r\n }\r\n $(\".info-block-content .crown-case\").hide();\r\n $(\".info-block.variants\").hide();\r\n $(\".info-block.single\").show();\r\n if (crownSegmWorker.checkDay(dateFromPoint))\r\n elem.data(\"stateDay\", \"crown\");\r\n }\r\n\r\n config.set(null, null, nextDateFromPoint.date);\r\n\r\n this.show();\r\n } else {\r\n if (isCrown && checkCrown(dateFromPoint.date) && !hideCovidInfo) {\r\n $(\".info-block-content .normal-cases-before-2023\").hide();\r\n $(\".info-block-content .normal-cases\").hide();\r\n $(\".info-block-content .crown-case\").show();\r\n $(\".info-block.variants\").hide();\r\n $(\".info-block.single\").show();\r\n elem.data(\"stateDay\", \"crown\");\r\n if (!isDayCrownHoliday)\r\n this.show();\r\n else\r\n this.hide();\r\n } else {\r\n this.hide();\r\n }\r\n }\r\n }\r\n } else {\r\n this.hide();\r\n }\r\n }\r\n };\r\n}\r\n\r\nfunction makeDateInFutureAlertWorker({\r\n slideUpDuration = 200,\r\n submitForm = emptyFunc,\r\n isDynamicSubmit = false,\r\n dateToFutureAlertSelector = \"#dateToFutureAlert\",\r\n calculator = null\r\n}) {\r\n var elem = $(dateToFutureAlertSelector);\r\n var shown = false;\r\n\r\n elem.find(\".close-button\").on(\"click\", function (e) {\r\n elem.slideUp(slideUpDuration);\r\n elem.data(\"state\", \"closed\");\r\n\r\n if (isDynamicSubmit) {\r\n submitForm();\r\n }\r\n e.preventDefault();\r\n });\r\n\r\n return {\r\n show: function () {\r\n shown = true;\r\n elem.slideDown();\r\n\r\n if (calculator !== null) {\r\n calculator.sendStatisticMessage(\"Date_Future\");\r\n }\r\n },\r\n shown: function () { return shown; },\r\n hide: function () { shown = false; elem.slideUp(slideUpDuration); },\r\n reset: function () { shown = false; elem.hide(); },\r\n getElem: function () { return elem; },\r\n getState: function () { return elem.data(\"state\"); },\r\n isVisible: function () { return elem.is(\":visible\"); },\r\n isAccepted: function () { return shown && (this.getState() === \"accept\"); },\r\n isClosed: function () { return shown && (this.getState() === \"closed\"); },\r\n check: function (dateTo) {\r\n elem.data(\"state\", \"\");\r\n\r\n if (dateTo && dateTo.getDate() && (new DatePoint(dateTo).date > new DatePoint().date))\r\n this.show();\r\n else {\r\n this.hide();\r\n }\r\n }\r\n };\r\n}\r\n\r\n\r\nfunction distinctDates(dates) {\r\n if (!dates || dates.length == 0) {\r\n return dates;\r\n }\r\n if (dates[0] instanceof Date) {\r\n return dates\r\n .map(function (s) { return s.toString(); })\r\n .filter(tools.distinct)\r\n .map(function (s) { return new Date(s); });\r\n }\r\n else if (dates[0] instanceof DatePoint) {\r\n return dates\r\n .map(function (s) { return s.toLocaleFormat(); })\r\n .filter(tools.distinct)\r\n .map(function (s) { return new DatePoint(s); });\r\n } else {\r\n throw new Error(\"Wrong type of elements. Must be some of date formats.\");\r\n }\r\n}\r\n\r\nfunction holidayChecker(date) {\r\n return new DatePoint(date).isDayOff();\r\n}\r\n\r\nfunction getTheFirstOfJanuary(date) {\r\n return new Date(date.getFullYear(), 0, 0);\r\n}\r\n\r\n\r\nexport {DatePoint, DateSpan, getDate, distinctDates, makeDateInFutureAlertWorker, makeDateFromAlertWorker, makeDateSegmentWorker, nextDateAfterWorkingDay, holidayChecker};\r\n","import { Calculator } from \"../common/calculator\";\r\nimport { FloatField } from \"../common/basic_fields.js\";\r\nimport { DatePoint } from '../js/datelib.js';\r\n\r\nfunction handleEmployeesRow(date, organizationValue) {\r\n const $employeesRow = $(\"#employeesRow\");\r\n if (date >= 2025 || organizationValue === 2) {\r\n $employeesRow.addClass('hidden-control');\r\n } else {\r\n $employeesRow.removeClass('hidden-control');\r\n }\r\n}\r\n\r\nfunction updateRateTitle(year) {\r\n const $fieldTitle = $(\"#rateInput .field-title\");\r\n if (year >= 2025) {\r\n $(\"#rateInputTooltip2025\").show();\r\n $(\"#rateInputTooltip2024\").hide();\r\n $(\"#rateInputTooltip2023\").hide();\r\n $fieldTitle.html('Ставка');\r\n } else {\r\n if (year == 2024) {\r\n $(\"#rateInputTooltip2025\").hide();\r\n $(\"#rateInputTooltip2024\").show();\r\n $(\"#rateInputTooltip2023\").hide();\r\n } else {\r\n $(\"#rateInputTooltip2025\").hide();\r\n $(\"#rateInputTooltip2024\").hide();\r\n $(\"#rateInputTooltip2023\").show();\r\n }\r\n $fieldTitle.html('Основная ставка');\r\n }\r\n}\r\n\r\nclass USNCalculator extends Calculator {\r\n code() { return \"usn\"; }\r\n type() { return \"CalcUsn\"; }\r\n\r\n initialize() {\r\n let self = this;\r\n this.patchFieldTypes([RateField]);\r\n this.setupStatistic({\r\n calcName: 'usn'\r\n });\r\n\r\n this.isAuthEnabled = IsAuthEnabled;\r\n\r\n this.lossesField = this.addInputField('#lossesInput input', 'losses', {\r\n type: 'money', options: { maxVal: 999999999999.99 }, defaultValue: 0\r\n });\r\n this.rateField = this.addInputField('#rateInput input', 'rate', {\r\n type: 'rate', defaultValue: 6, options: { precision: 2 },\r\n errors: [{ check: function (v) { return !!v; }, selector: '#rateInput .error-text' }]\r\n });\r\n this.deflatorYearField = this.addInputField('#deflatorYearInput dropdown-select', 'deflatorYear');\r\n this.income1Field = this.addInputField('#income1Input input', 'income1', {\r\n type: 'money', options: { maxVal: 999999999999.99 }\r\n });\r\n this.income2Field = this.addInputField('#income2Input input', 'income2', {\r\n type: 'money', options: { maxVal: 999999999999.99 }\r\n });\r\n this.income3Field = this.addInputField('#income3Input input', 'income3', {\r\n type: 'money', options: { maxVal: 999999999999.99 }\r\n });\r\n this.income4Field = this.addInputField('#income4Input input', 'income4', {\r\n type: 'money', options: { maxVal: 999999999999.99 }\r\n });\r\n this.sum1Field = this.addInputField('#sum1Input input', 'sum1', {\r\n type: 'money', options: { maxVal: 999999999999.99 }\r\n });\r\n this.sum2Field = this.addInputField('#sum2Input input', 'sum2', {\r\n type: 'money', options: { maxVal: 999999999999.99 }\r\n });\r\n this.sum3Field = this.addInputField('#sum3Input input', 'sum3', {\r\n type: 'money', options: { maxVal: 999999999999.99 }\r\n });\r\n this.sum4Field = this.addInputField('#sum4Input input', 'sum4', {\r\n type: 'money', options: { maxVal: 999999999999.99 }\r\n });\r\n this.insurance1Field = this.addInputField('#insurance1Input input', 'insurance1', {\r\n type: 'money', options: { maxVal: 999999999999.99 }\r\n });\r\n this.insurance2Field = this.addInputField('#insurance2Input input', 'insurance2', {\r\n type: 'money', options: { maxVal: 999999999999.99 }\r\n });\r\n this.insurance3Field = this.addInputField('#insurance3Input input', 'insurance3', {\r\n type: 'money', options: { maxVal: 999999999999.99 }\r\n });\r\n this.insurance4Field = this.addInputField('#insurance4Input input', 'insurance4', {\r\n type: 'money', options: { maxVal: 999999999999.99 }\r\n });\r\n this.tradeFee1Field = this.addInputField('#tradeFee1Input input', 'tradeFee1', {\r\n type: 'money', options: { maxVal: 999999999999.99 }\r\n });\r\n this.tradeFee2Field = this.addInputField('#tradeFee2Input input', 'tradeFee2', {\r\n type: 'money', options: { maxVal: 999999999999.99 }\r\n });\r\n this.tradeFee3Field = this.addInputField('#tradeFee3Input input', 'tradeFee3', {\r\n type: 'money', options: { maxVal: 999999999999.99 }\r\n });\r\n this.tradeFee4Field = this.addInputField('#tradeFee4Input input', 'tradeFee4', {\r\n type: 'money', options: { maxVal: 999999999999.99 }\r\n });\r\n this.payment1Field = this.addInputField('#payment1Input input', 'payment1', {\r\n type: 'money', options: { maxVal: 999999999999.99 }\r\n });\r\n this.payment2Field = this.addInputField('#payment2Input input', 'payment2', {\r\n type: 'money', options: { maxVal: 999999999999.99 }\r\n });\r\n this.payment3Field = this.addInputField('#payment3Input input', 'payment3', {\r\n type: 'money', options: { maxVal: 999999999999.99 }\r\n });\r\n this.outcome1Field = this.addInputField('#outcome1Input input', 'outcome1', {\r\n type: 'money', options: { maxVal: 999999999999.99 }\r\n });\r\n this.outcome2Field = this.addInputField('#outcome2Input input', 'outcome2', {\r\n type: 'money', options: { maxVal: 999999999999.99 }\r\n });\r\n this.outcome3Field = this.addInputField('#outcome3Input input', 'outcome3', {\r\n type: 'money', options: { maxVal: 999999999999.99 }\r\n });\r\n this.outcome4Field = this.addInputField('#outcome4Input input', 'outcome4', {\r\n type: 'money', options: { maxVal: 999999999999.99 }\r\n });\r\n\r\n this.tradeFee1Field.ignore = true;\r\n this.tradeFee2Field.ignore = true;\r\n this.tradeFee3Field.ignore = true;\r\n this.tradeFee4Field.ignore = true;\r\n this.outcome1Field.ignore = true;\r\n this.outcome2Field.ignore = true;\r\n this.outcome3Field.ignore = true;\r\n this.outcome4Field.ignore = true;\r\n\r\n $('#incomeAlert').find('.close-button').click(function () {\r\n let $incomeAlert = $('#incomeAlert');\r\n let $alertNote = $('#alertNote');\r\n $incomeAlert.slideUp(200);\r\n $alertNote.find('.result').html($incomeAlert.find('span:visible').html());\r\n $alertNote.removeClass('hidden-control');\r\n $alertNote.removeClass('only-print');\r\n return false;\r\n });\r\n\r\n $('#sumRow .tooltip-div').click(function () {\r\n $(this).addClass('visible');\r\n return false;\r\n }).mousemove(function () {\r\n $(this).removeClass('visible');\r\n return false;\r\n });\r\n\r\n self.deflators = undefined;\r\n $.getJSON(\"conf/calc_usn/deflators.json?v=\" + DataVersionSalt, function (json) {\r\n self.deflators = json;\r\n self.deflatorYearField.elem[0].options = self.deflators.map((x, i) => {\r\n return { value: x.yearFrom, text: x.text };\r\n });\r\n let index = self.deflators.length - 2;\r\n let todayDate = new DatePoint();\r\n if (new DatePoint(`28.03.${self.deflators[self.deflators.length - 1].yearFrom}`).goesBefore(todayDate)) {\r\n index = self.deflators.length - 1;\r\n }\r\n self.deflatorYearField.defaultValue = +self.deflatorYearField.elem[0].options[index].value;\r\n self.deflatorYearField.elem[0].selectedIndex = index;\r\n handleEmployeesRow(self.deflatorYearField.defaultValue);\r\n updateRateTitle(self.deflatorYearField.defaultValue);\r\n });\r\n\r\n this.loadDescription();\r\n this.submitOnClick('#calcSubmit');\r\n this.addResetButton('#clearCalcInput');\r\n }\r\n\r\n onReset() {\r\n $('.calc-div-results').removeClass('show-results');\r\n $('#incomeAlert').slideUp(200);\r\n $('#alertNote').addClass('hidden-control');\r\n $('#losesInput').removeClass('show');\r\n $('#paymentRow').removeClass('hidden-control');\r\n $('#insuranceRow').removeClass('hidden-control');\r\n $('#payment2Input').removeClass('hide');\r\n $('#payment3Input').removeClass('hide');\r\n $('#tradeFeeRow').addClass('hidden-control');\r\n $('#outcomeRow').addClass('hidden-control');\r\n $('#employeesRow').removeClass('hidden-control');\r\n $(\"#taxBaseInput .checkboxrow\").removeClass('hidden-control');\r\n $(\".quarter-table .row\").removeClass('m-3').removeClass('m-6').removeClass('m-9').addClass('m-12');\r\n $('#globalError').addClass('hidden-control');\r\n\r\n this.tradeFee1Field.ignore = true;\r\n this.tradeFee2Field.ignore = true;\r\n this.tradeFee3Field.ignore = true;\r\n this.tradeFee4Field.ignore = true;\r\n\r\n this.outcome1Field.ignore = true;\r\n this.outcome2Field.ignore = true;\r\n this.outcome3Field.ignore = true;\r\n this.outcome4Field.ignore = true;\r\n\r\n this.income1Field.ignore = false;\r\n this.income2Field.ignore = false;\r\n this.income3Field.ignore = false;\r\n this.income4Field.ignore = false;\r\n\r\n this.insurance1Field.ignore = false;\r\n this.insurance2Field.ignore = false;\r\n this.insurance3Field.ignore = false;\r\n this.insurance4Field.ignore = false;\r\n\r\n this.payment1Field.ignore = false;\r\n this.payment2Field.ignore = false;\r\n this.payment3Field.ignore = false;\r\n\r\n handleEmployeesRow(this.deflatorYearField.defaultValue);\r\n updateRateTitle(this.deflatorYearField.defaultValue);\r\n }\r\n\r\n generateExportObject() {\r\n let result = super.generateExportObject();\r\n result.overQuarter = this.overQuarter;\r\n result.newRate = this.newRate;\r\n result.previousTaxBaseValue = this.previousTaxBaseValue;\r\n result.minimalTax = this.minimalTax;\r\n result.totalIncome = this.totalIncome;\r\n result.totalPayment = this.totalPayment;\r\n result.totalTradeFee = this.totalTradeFee;\r\n result.totalInsurance = this.totalInsurance;\r\n result.totalOutcome = this.totalOutcome;\r\n result.initialTax = this.initialTax;\r\n result.deduction = this.deduction;\r\n result.totalTax = this.totalTax;\r\n result.taxBaseValue = this.taxBaseValue;\r\n result.isOverpayment = this.isOverpayment;\r\n result.showOverpayment = this.showOverpayment;\r\n result.totalOverpayment = this.totalOverpayment;\r\n result.overpaymentOption = this.overpaymentOption;\r\n result.alertType = this.alertType;\r\n result.organizationInfo = this.organizationInfo;\r\n result.isEqualRate = this.isEqualRate;\r\n result.isInitialTax = this.isInitialTax;\r\n result.showInsurance = this.showInsurance;\r\n result.showPayment = this.showPayment;\r\n result.showTradeFee = this.showTradeFee;\r\n result.showOutcome = this.showOutcome;\r\n result.isLoss = this.isLoss;\r\n result.totalLoss = this.totalLoss;\r\n result.succeeded = this.succeeded;\r\n result.isEmployeeLimit = this.isEmployeeLimit;\r\n result.taxBaseAlertNote = !this.succeeded ? tools.convertElemToTextWithLinksForExport($('#taxBaseAlertNote')) : \"\";\r\n result.overpaymentLink = tools.convertElemToTextWithLinksForExport($('#overpaymentLink'));\r\n result.deflatorYear = this.deflatorYear.text;\r\n\r\n let note = \"\";\r\n if ($(\"#incomeAlert\").is(\":visible\")) {\r\n let $span = $('#incomeAlert').find('span:visible');\r\n if ($span.length > 0) {\r\n note = tools.convertElemToTextWithLinksForExport($('#incomeAlert').find('span:visible'));\r\n }\r\n } else {\r\n note = tools.convertElemToTextWithLinksForExport($('#alertNote').find('.result'));\r\n }\r\n\r\n let lossNote = \"\";\r\n if (this.isLoss) {\r\n lossNote = tools.convertElemToTextWithLinksForExport($('.explanation-with-note > p'));\r\n }\r\n\r\n result.lossNote = lossNote;\r\n\r\n result.notes = [];\r\n if (this.overQuarter && !this.isEqualRate && note) {\r\n result.notes.push(note);\r\n }\r\n $('.note-block').find('p.active').each(function( index ) {\r\n result.notes.push(tools.convertElemToTextWithLinksForExport($(this)));\r\n });\r\n\r\n result.rateLink = this.taxBase.value === 'income'\r\n ? tools.convertElemToTextWithLinksForExport($('#incomeRateLink'))\r\n : tools.convertElemToTextWithLinksForExport($('#differenceRateLink'));\r\n\r\n return result;\r\n }\r\n\r\n showResults() {\r\n let $incomeAlert = $('#incomeAlert');\r\n let $alertNote = $('#alertNote');\r\n if ($incomeAlert.is(\":visible\")) {\r\n let $span = $incomeAlert.find('span:visible');\r\n if ($span.length > 0) {\r\n $alertNote.find('.result').html($incomeAlert.find('span:visible').html());\r\n $alertNote.removeClass('hidden-control');\r\n $alertNote.addClass('only-print');\r\n }\r\n }\r\n\r\n super.showResults();\r\n\r\n this.sendStatisticMessage('Is_Made');\r\n\r\n const el = document.getElementById('resultsText');\r\n el.scrollIntoView({ block: \"end\", inline: \"center\", behavior: \"smooth\" });\r\n }\r\n\r\n hideResults() {\r\n super.hideResults();\r\n this.sendStatisticMessage('Is_Made_With_Error');\r\n $('#incomeAlert').slideUp(200);\r\n $('#alertNote').addClass('hidden-control');\r\n }\r\n\r\n renderError() {\r\n super.renderError();\r\n\r\n this.sendStatisticMessage('Is_Made_With_Error');\r\n\r\n $('#incomeAlert').slideUp(200);\r\n $('#alertNote').addClass('hidden-control');\r\n\r\n if (!this.rateField.valid) {\r\n return;\r\n }\r\n\r\n let $error = $('#globalError');\r\n $error.removeClass();\r\n\r\n if (!this.income1Field.ignore && !this.income1Field.valid) {\r\n $error.find('span').html(\"Укажите доходы\");\r\n $error.addClass('pos-1-1');\r\n } else if (!this.income2Field.ignore && !this.income2Field.valid) {\r\n $error.find('span').html(\"Укажите доходы\");\r\n $error.addClass('pos-1-2');\r\n } else if (!this.income3Field.ignore && !this.income3Field.valid) {\r\n $error.find('span').html(\"Укажите доходы\");\r\n $error.addClass('pos-1-3');\r\n } else if (!this.income4Field.ignore && !this.income4Field.valid) {\r\n $error.find('span').html(\"Укажите доходы\");\r\n $error.addClass('pos-1-4');\r\n }\r\n }\r\n\r\n render() {\r\n super.render();\r\n $(\".smart-link\").each(function() {\r\n tools.initSmartLink(this);\r\n })\r\n }\r\n\r\n afterParse(sender, autoValidation) {\r\n const $elem = $(sender);\r\n const $periodInput = $('#periodInput dropdown-select');\r\n const $deflatorYearInput = $('#deflatorYearInput dropdown-select');\r\n const $lossesInput = $('#lossesInput');\r\n const $taxBaseInput = $('#taxBaseInput .input-icon');\r\n const $tradeFeeCheckbox = $(\"#taxBaseInput .checkboxrow\");\r\n const $organizationInput = $(\"#organizationInput dropdown-select\");\r\n const $tradeFeeRow = $(\"#tradeFeeRow\");\r\n const $insuranceRow = $(\"#insuranceRow\");\r\n const $outcomeRow = $(\"#outcomeRow\");\r\n const $employeesRow = $(\"#employeesRow\");\r\n const $paymentRow = $(\"#paymentRow\");\r\n const $payment2Input = $(\"#payment2Input\");\r\n const $payment3Input = $(\"#payment3Input\");\r\n const $income1Input = $(\"#income1Input input\");\r\n const $income2Input = $(\"#income2Input input\");\r\n const $income3Input = $(\"#income3Input input\");\r\n const $income4Input = $(\"#income4Input input\");\r\n const $sum1Input = $(\"#sum1Input input\");\r\n const $sum2Input = $(\"#sum2Input input\");\r\n const $sum3Input = $(\"#sum3Input input\");\r\n const $sum4Input = $(\"#sum4Input input\");\r\n const $row = $(\".quarter-table .row\");\r\n const $globalError = $('#globalError');\r\n const $taxLinkContainer = $('.tax-link-container');\r\n const $taxLink2Container = $('.tax-link-2-container');\r\n\r\n $globalError.addClass('hidden-control');\r\n\r\n if ($elem.is($periodInput)) {\r\n\r\n if (!this.period) {\r\n return;\r\n }\r\n\r\n if (this.taxBase.value !== 'income' && this.period.value === 12) {\r\n $lossesInput.addClass('show');\r\n } else {\r\n $lossesInput.removeClass('show');\r\n }\r\n\r\n this.payment1Field.ignore = false;\r\n this.payment2Field.ignore = false;\r\n this.payment3Field.ignore = false;\r\n\r\n this.tradeFee1Field.ignore = false;\r\n this.tradeFee2Field.ignore = false;\r\n this.tradeFee3Field.ignore = false;\r\n this.tradeFee4Field.ignore = false;\r\n\r\n this.outcome1Field.ignore = false;\r\n this.outcome2Field.ignore = false;\r\n this.outcome3Field.ignore = false;\r\n this.outcome4Field.ignore = false;\r\n\r\n this.income1Field.ignore = false;\r\n this.income2Field.ignore = false;\r\n this.income3Field.ignore = false;\r\n this.income4Field.ignore = false;\r\n\r\n this.insurance1Field.ignore = false;\r\n this.insurance2Field.ignore = false;\r\n this.insurance3Field.ignore = false;\r\n this.insurance4Field.ignore = false;\r\n\r\n if (this.taxBase.value === 'income') {\r\n this.outcome1Field.ignore = true;\r\n this.outcome2Field.ignore = true;\r\n this.outcome3Field.ignore = true;\r\n this.outcome4Field.ignore = true;\r\n\r\n if (this.isTradeFee === false) {\r\n this.tradeFee1Field.ignore = true;\r\n this.tradeFee2Field.ignore = true;\r\n this.tradeFee3Field.ignore = true;\r\n this.tradeFee4Field.ignore = true;\r\n }\r\n } else {\r\n this.insurance1Field.ignore = true;\r\n this.insurance2Field.ignore = true;\r\n this.insurance3Field.ignore = true;\r\n this.insurance4Field.ignore = true;\r\n\r\n this.tradeFee1Field.ignore = true;\r\n this.tradeFee2Field.ignore = true;\r\n this.tradeFee3Field.ignore = true;\r\n this.tradeFee4Field.ignore = true;\r\n }\r\n\r\n switch (this.period.value) {\r\n case 3:\r\n $paymentRow.addClass('hidden-control');\r\n $row.removeClass('m-12').removeClass('m-9').removeClass('m-6').addClass('m-3');\r\n\r\n this.payment1Field.ignore = true;\r\n this.payment2Field.ignore = true;\r\n this.payment3Field.ignore = true;\r\n\r\n this.tradeFee2Field.ignore = true;\r\n this.tradeFee3Field.ignore = true;\r\n this.tradeFee4Field.ignore = true;\r\n\r\n this.outcome2Field.ignore = true;\r\n this.outcome3Field.ignore = true;\r\n this.outcome4Field.ignore = true;\r\n\r\n this.income2Field.ignore = true;\r\n this.income3Field.ignore = true;\r\n this.income4Field.ignore = true;\r\n\r\n this.insurance2Field.ignore = true;\r\n this.insurance3Field.ignore = true;\r\n this.insurance4Field.ignore = true;\r\n\r\n break;\r\n case 6:\r\n $paymentRow.removeClass('hidden-control');\r\n $payment2Input.addClass('hide');\r\n $payment3Input.addClass('hide');\r\n $row.removeClass('m-12').removeClass('m-9').removeClass('m-3').addClass('m-6');\r\n\r\n this.payment2Field.ignore = true;\r\n this.payment3Field.ignore = true;\r\n\r\n this.tradeFee3Field.ignore = true;\r\n this.tradeFee4Field.ignore = true;\r\n\r\n this.outcome3Field.ignore = true;\r\n this.outcome4Field.ignore = true;\r\n\r\n this.income3Field.ignore = true;\r\n this.income4Field.ignore = true;\r\n\r\n this.insurance3Field.ignore = true;\r\n this.insurance4Field.ignore = true;\r\n\r\n break;\r\n case 9:\r\n $paymentRow.removeClass('hidden-control');\r\n $payment2Input.removeClass('hide');\r\n $payment3Input.addClass('hide');\r\n $row.removeClass('m-12').removeClass('m-6').removeClass('m-3').addClass('m-9');\r\n\r\n this.payment3Field.ignore = true;\r\n\r\n this.tradeFee4Field.ignore = true;\r\n\r\n this.outcome4Field.ignore = true;\r\n\r\n this.income4Field.ignore = true;\r\n\r\n this.insurance4Field.ignore = true;\r\n\r\n break;\r\n case 12:\r\n $paymentRow.removeClass('hidden-control');\r\n $payment2Input.removeClass('hide');\r\n $payment3Input.removeClass('hide');\r\n $row.removeClass('m-3').removeClass('m-6').removeClass('m-9').addClass('m-12');\r\n break;\r\n }\r\n\r\n }\r\n if ($elem.is($deflatorYearInput)) {\r\n if (this.deflatorYear.value >= 2025) {\r\n $('.after-2025').show();\r\n $('.before-2025').hide();\r\n } else {\r\n $('.before-2025').show();\r\n $('.after-2025').hide();\r\n }\r\n }\r\n else if ($elem.is($taxBaseInput)) {\r\n\r\n if (!this.taxBase) {\r\n return;\r\n }\r\n\r\n if (this.taxBase.value === 'income') {\r\n this.rateField.setMode(0);\r\n $insuranceRow.removeClass('hidden-control');\r\n $outcomeRow.addClass('hidden-control');\r\n $lossesInput.removeClass('show');\r\n $tradeFeeCheckbox.removeClass('hidden-control');\r\n if (this.isTradeFee === undefined || this.isTradeFee) {\r\n $tradeFeeRow.removeClass('hidden-control');\r\n this.tradeFee1Field.ignore = false;\r\n }\r\n\r\n this.insurance1Field.ignore = false;\r\n this.outcome1Field.ignore = true;\r\n if (this.period.value !== 3) {\r\n this.insurance2Field.ignore = false;\r\n this.outcome2Field.ignore = true;\r\n if (this.isTradeFee === undefined || this.isTradeFee) {\r\n this.tradeFee2Field.ignore = false;\r\n }\r\n }\r\n if (this.period.value !== 3 && this.period.value !== 6) {\r\n this.insurance3Field.ignore = false;\r\n this.outcome3Field.ignore = true;\r\n if (this.isTradeFee === undefined || this.isTradeFee) {\r\n this.tradeFee3Field.ignore = false;\r\n }\r\n }\r\n if (this.period.value === 12) {\r\n this.insurance4Field.ignore = false;\r\n this.outcome4Field.ignore = true;\r\n if (this.isTradeFee === undefined || this.isTradeFee) {\r\n this.tradeFee4Field.ignore = false;\r\n }\r\n }\r\n } else {\r\n this.rateField.setMode(1);\r\n $insuranceRow.addClass('hidden-control');\r\n $tradeFeeRow.addClass('hidden-control');\r\n $outcomeRow.removeClass('hidden-control');\r\n $tradeFeeCheckbox.addClass('hidden-control');\r\n if (this.period.value === 12) {\r\n $lossesInput.addClass('show');\r\n }\r\n\r\n this.insurance1Field.ignore = true;\r\n this.outcome1Field.ignore = false;\r\n if (this.period.value !== 3) {\r\n this.insurance2Field.ignore = true;\r\n this.outcome2Field.ignore = false;\r\n }\r\n if (this.period.value !== 3 && this.period.value !== 6) {\r\n this.insurance3Field.ignore = true;\r\n this.outcome3Field.ignore = false;\r\n }\r\n if (this.period.value === 12) {\r\n this.insurance4Field.ignore = true;\r\n this.outcome4Field.ignore = false;\r\n }\r\n\r\n this.tradeFee1Field.ignore = true;\r\n this.tradeFee2Field.ignore = true;\r\n this.tradeFee3Field.ignore = true;\r\n this.tradeFee4Field.ignore = true;\r\n }\r\n }\r\n else if ($elem.is($tradeFeeCheckbox)) {\r\n\r\n if (this.isTradeFee && (!this.taxBase || (this.taxBase && this.taxBase.value === 'income'))) {\r\n\r\n $tradeFeeRow.removeClass('hidden-control');\r\n\r\n this.tradeFee1Field.ignore = false;\r\n if (this.period.value !== 3) {\r\n this.tradeFee2Field.ignore = false;\r\n }\r\n if (this.period.value !== 3 && this.period.value !== 6) {\r\n this.tradeFee3Field.ignore = false;\r\n }\r\n if (this.period.value === 12) {\r\n this.tradeFee4Field.ignore = false;\r\n }\r\n } else {\r\n $tradeFeeRow.addClass('hidden-control');\r\n\r\n this.tradeFee1Field.ignore = true;\r\n this.tradeFee2Field.ignore = true;\r\n this.tradeFee3Field.ignore = true;\r\n this.tradeFee4Field.ignore = true;\r\n }\r\n }\r\n else if ($elem.is($income1Input) || $elem.is($income2Input) || $elem.is($income3Input) || $elem.is($income4Input)) {\r\n if ((this.income1Field.ignore || !this.income1)\r\n && (this.income2Field.ignore || !this.income2)\r\n && (this.income3Field.ignore || !this.income3)\r\n && (this.income4Field.ignore || !this.income4)) {\r\n $sum1Input.val('');\r\n $sum2Input.val('')\r\n $sum3Input.val('')\r\n $sum4Input.val('')\r\n } else {\r\n $sum1Input.val(tools.getLocaleNumber(this.income1));\r\n $sum2Input.val(tools.getLocaleNumber(this.income1Field.getValue() + this.income2Field.getValue()))\r\n $sum3Input.val(tools.getLocaleNumber(this.income1Field.getValue() + this.income2Field.getValue() + this.income3Field.getValue()))\r\n $sum4Input.val(tools.getLocaleNumber(this.income1Field.getValue() + this.income2Field.getValue() + this.income3Field.getValue() + this.income4Field.getValue()))\r\n }\r\n }\r\n else if ($elem.is($organizationInput)) {\r\n if (this.organization.value === 2) {\r\n $employeesRow.addClass('hidden-control');\r\n $taxLinkContainer.addClass('hidden-control');\r\n $taxLink2Container.removeClass('hidden-control');\r\n } else {\r\n $employeesRow.removeClass('hidden-control');\r\n $taxLink2Container.addClass('hidden-control');\r\n $taxLinkContainer.removeClass('hidden-control');\r\n }\r\n }\r\n\r\n handleEmployeesRow(this.deflatorYear.value, this.organization.value);\r\n updateRateTitle(this.deflatorYear.value);\r\n }\r\n\r\n showValue(period, val1, val2, val3, val4) {\r\n switch (period) {\r\n case 3:\r\n return val1 != null;\r\n case 6:\r\n return val1 != null || val2 != null;\r\n case 9:\r\n return val1 != null || val2 != null || val3 != null;\r\n case 12:\r\n return val1 != null || val2 != null || val3 != null || val4 != null;\r\n }\r\n }\r\n\r\n getFormula(period, val1, val2, val3, val4) {\r\n let num = 0;\r\n\r\n switch (period) {\r\n case 3:\r\n return '';\r\n case 6:\r\n num = 2;\r\n break;\r\n case 9:\r\n num = 3;\r\n break;\r\n case 12:\r\n num = 4;\r\n break;\r\n }\r\n\r\n let arr = [val1, val2, val3, val4];\r\n let filteredArr = [];\r\n for (let i = 0; i < num; i++) {\r\n if (arr[i]) {\r\n filteredArr.push(tools.getLocaleSum(arr[i]));\r\n }\r\n }\r\n\r\n if (filteredArr.length < 2) {\r\n return '';\r\n }\r\n\r\n let result = filteredArr.join(' + ');\r\n result += ' = ';\r\n\r\n return result;\r\n }\r\n\r\n getRateFormula(val1 = null, val2 = null, val3 = null, val4 = null, sign = ' + ') {\r\n let arr = [val1, val2, val3, val4];\r\n let filteredArr = [];\r\n\r\n arr.forEach(x => {\r\n if (x) {\r\n filteredArr.push(tools.getLocaleSum(x));\r\n }\r\n });\r\n\r\n if (filteredArr.length == 0) {\r\n return '';\r\n }\r\n\r\n if (filteredArr.length == 1) {\r\n return filteredArr[0];\r\n }\r\n\r\n let result = filteredArr.join(sign);\r\n\r\n return result;\r\n }\r\n\r\n getOrganizationInfo() {\r\n let result = this.organization.text;\r\n\r\n if (this.organization.value === 2) {\r\n return result;\r\n }\r\n\r\n let arr = [];\r\n switch (this.period.value) {\r\n case 3:\r\n arr = [this.employees1];\r\n break;\r\n case 6:\r\n arr = [this.employees1, this.employees2];\r\n break;\r\n case 9:\r\n arr = [this.employees1, this.employees2, this.employees3];\r\n break;\r\n case 12:\r\n arr = [this.employees1, this.employees2, this.employees3, this.employees4];\r\n break;\r\n }\r\n\r\n let isEqual = true;\r\n let val1Quarters = [];\r\n let val2Quarters = [];\r\n for (let i = 0; i < arr.length; i++) {\r\n if (arr[i].value !== arr[0].value) {\r\n isEqual = false;\r\n }\r\n\r\n if (arr[i].value === 0) {\r\n val1Quarters.push(i + 1);\r\n } else {\r\n val2Quarters.push(i + 1);\r\n }\r\n }\r\n\r\n if (isEqual) {\r\n result += ' ' + this.employees1.text + ' человек';\r\n } else {\r\n result += ' ' + val1Quarters.join(', ') + ' квартал до 100 человек, ' + val2Quarters.join(', ') + ' квартал 101 – 130 человек';\r\n }\r\n\r\n return result;\r\n }\r\n\r\n getLimitSum(isHighest = false) {\r\n let self = this;\r\n const deflator = this.deflators.filter(x => x.yearFrom === self.deflatorYear.value)[0];\r\n return tools.roundNumber((isHighest ? (self.deflatorYear.value >= 2025 ? 450_000_000 : 200_000_000) : (self.deflatorYear.value >= 2025 ? 450_000_000 : 150_000_000)) * deflator.value, 0);\r\n }\r\n\r\n calculate(params) {\r\n if (params.autoValidation) {\r\n return false;\r\n }\r\n\r\n let self = this;\r\n self.overQuarter = null;\r\n self.alertType = null;\r\n self.newRate = 0;\r\n self.rateFormula = '';\r\n self.newRateFormula = '';\r\n self.previousTaxBaseValue = 0;\r\n self.minimalTax = 0;\r\n self.organizationInfo = this.getOrganizationInfo();\r\n self.isEqualRate = false;\r\n self.isLoss = false;\r\n self.showOverpayment = true;\r\n\r\n const lowLimitSum = this.getLimitSum();\r\n const organizationValue = this.organization.value;\r\n const employees1Value = this.deflatorYear.value < 2025 ? this.employees1.value : 0;\r\n const employees2Value = this.deflatorYear.value < 2025 ? this.employees2.value : 0;\r\n const employees3Value = this.deflatorYear.value < 2025 ? this.employees3.value : 0;\r\n const employees4Value = this.deflatorYear.value < 2025 ? this.employees4.value : 0;\r\n\r\n let $error = $('#globalError');\r\n\r\n switch (this.period.value) {\r\n case 3:\r\n if (!this.income1) {\r\n $error.find('span').html(\"Укажите доходы\");\r\n $error.removeClass();\r\n $error.addClass('pos-1-1');\r\n return false;\r\n }\r\n self.totalIncome = this.income1;\r\n self.totalPayment = 0;\r\n if (this.taxBase.value === 'income') {\r\n self.totalTradeFee = this.isTradeFee ? this.tradeFee1 : 0;\r\n self.totalInsurance = this.insurance1;\r\n } else {\r\n self.totalOutcome = this.outcome1;\r\n }\r\n if (this.sum1 > lowLimitSum || (organizationValue !== 2 && employees1Value === 1)) {\r\n self.overQuarter = 1;\r\n self.previousTaxBaseValue = 0;\r\n if (this.sum1 > lowLimitSum) {\r\n self.alertType = 1;\r\n } else {\r\n self.alertType = 2;\r\n }\r\n }\r\n break;\r\n case 6:\r\n if (!this.income1 && !this.income2) {\r\n $error.find('span').html(\"Укажите доходы хотя бы в одном квартале\");\r\n $error.removeClass();\r\n $error.addClass('pos-1-1');\r\n return false;\r\n }\r\n self.totalIncome = this.income1 + this.income2;\r\n self.totalPayment = this.payment1 || 0;\r\n if (this.taxBase.value === 'income') {\r\n self.totalTradeFee = this.isTradeFee ? (this.tradeFee1 + this.tradeFee2) : 0;\r\n self.totalInsurance = this.insurance1 + this.insurance2;\r\n } else {\r\n self.totalOutcome = this.outcome1 + this.outcome2;\r\n }\r\n\r\n if (this.sum1 > lowLimitSum || (organizationValue !== 2 && employees1Value === 1)) {\r\n self.overQuarter = 1;\r\n self.previousTaxBaseValue = 0;\r\n if (this.sum1 > lowLimitSum) {\r\n self.alertType = 1;\r\n } else {\r\n self.alertType = 2;\r\n }\r\n } else if (this.sum2 > lowLimitSum || (organizationValue !== 2 && employees2Value === 1)) {\r\n self.overQuarter = 2;\r\n self.previousTaxBaseValue = this.taxBase.value === 'income' ? this.income1 : this.income1 - this.outcome1;\r\n if (self.previousTaxBaseValue) {\r\n if (this.taxBase.value === 'income') {\r\n self.rateFormula = tools.getLocaleSum(this.income1Field.getValue());\r\n } else {\r\n self.rateFormula = (this.outcome1 ? '(' : '') + tools.getLocaleSum(this.income1 ? this.income1Field.getValue() : 0) + (this.outcome1 ? ' − ' : '') + tools.getLocaleSum(this.outcome1Field.getValue()) + (this.outcome1 ? ')' : '');\r\n }\r\n }\r\n if (this.sum2 > lowLimitSum) {\r\n self.alertType = 1;\r\n } else {\r\n self.alertType = 2;\r\n }\r\n }\r\n break;\r\n case 9:\r\n if (!this.income1 && !this.income2 && !this.income3) {\r\n $error.find('span').html(\"Укажите доходы хотя бы в одном квартале\");\r\n $error.removeClass();\r\n $error.addClass('pos-1-1');\r\n return false;\r\n }\r\n self.totalIncome = this.income1 + this.income2 + this.income3;\r\n self.totalPayment = this.payment1 + this.payment2;\r\n if (this.taxBase.value === 'income') {\r\n self.totalTradeFee = this.isTradeFee ? this.tradeFee1 + this.tradeFee2 + this.tradeFee3 : 0;\r\n self.totalInsurance = this.insurance1 + this.insurance2 + this.insurance3;\r\n } else {\r\n self.totalOutcome = this.outcome1 + this.outcome2 + this.outcome3;\r\n }\r\n\r\n if (this.sum1 > lowLimitSum || (organizationValue !== 2 && employees1Value === 1)) {\r\n self.overQuarter = 1;\r\n self.previousTaxBaseValue = 0;\r\n if (this.sum1 > lowLimitSum) {\r\n self.alertType = 1;\r\n } else {\r\n self.alertType = 2;\r\n }\r\n } else if (this.sum2 > lowLimitSum || (organizationValue !== 2 && employees2Value === 1)) {\r\n self.overQuarter = 2;\r\n self.previousTaxBaseValue = this.taxBase.value === 'income' ? this.income1 : this.income1 - this.outcome1;\r\n if (self.previousTaxBaseValue) {\r\n if (this.taxBase.value === 'income') {\r\n self.rateFormula = tools.getLocaleSum(this.income1Field.getValue());\r\n } else {\r\n self.rateFormula = (this.outcome1 ? '(' : '') + tools.getLocaleSum(this.income1 ? this.income1Field.getValue() : 0) + (this.outcome1 ? ' − ' : '') + tools.getLocaleSum(this.outcome1Field.getValue()) + (this.outcome1 ? ')' : '');\r\n }\r\n }\r\n if (this.sum2 > lowLimitSum) {\r\n self.alertType = 1;\r\n } else {\r\n self.alertType = 2;\r\n }\r\n } else if (this.sum3 > lowLimitSum || (organizationValue !== 2 && employees3Value === 1)) {\r\n self.overQuarter = 3;\r\n self.previousTaxBaseValue = this.taxBase.value === 'income' ? (this.income1 + this.income2)\r\n : (this.income1 + this.income2 - this.outcome1 - this.outcome2);\r\n if (self.previousTaxBaseValue) {\r\n if (this.taxBase.value === 'income') {\r\n self.rateFormula = (this.income1 && this.income2 ? '(' : '') + tools.getLocaleSum(this.income1Field.getValue()) + (this.income1 && this.income2 ? ' + ' : '') + tools.getLocaleSum(this.income2Field.getValue()) + (this.income1 && this.income2 ? ')' : '');\r\n } else {\r\n let incomeFormula = this.getRateFormula(this.income1, this.income2);\r\n let outcomeFormula = this.getRateFormula(this.outcome1, this.outcome2, null, null, ' - ');\r\n self.rateFormula = (incomeFormula.indexOf('+') > -1 || outcomeFormula ? '(' : '') + (incomeFormula ? incomeFormula : tools.getLocaleSum(0)) + (outcomeFormula ? ' - ' : '') + outcomeFormula + (incomeFormula.indexOf('+') > -1 || outcomeFormula ? ')' : '');\r\n }\r\n }\r\n if (this.sum3 > lowLimitSum) {\r\n self.alertType = 1;\r\n } else {\r\n self.alertType = 2;\r\n }\r\n }\r\n break;\r\n case 12:\r\n if (!this.income1 && !this.income2 && !this.income3 && !this.income4) {\r\n $error.find('span').html(\"Укажите доходы хотя бы в одном квартале\");\r\n $error.removeClass();\r\n $error.addClass('pos-1-1');\r\n return false;\r\n }\r\n self.totalIncome = this.income1 + this.income2 + this.income3 + this.income4;\r\n self.totalPayment = this.payment1 + this.payment2 + this.payment3;\r\n if (this.taxBase.value === 'income') {\r\n self.totalTradeFee = this.isTradeFee ? this.tradeFee1 + this.tradeFee2 + this.tradeFee3 + this.tradeFee4 : 0;\r\n self.totalInsurance = this.insurance1 + this.insurance2 + this.insurance3 + this.insurance4;\r\n } else {\r\n self.totalOutcome = this.outcome1 + this.outcome2 + this.outcome3 + this.outcome4;\r\n }\r\n\r\n if (this.sum1 > lowLimitSum || (organizationValue !== 2 && employees1Value === 1)) {\r\n self.overQuarter = 1;\r\n self.previousTaxBaseValue = 0;\r\n if (this.sum1 > lowLimitSum) {\r\n self.alertType = 1;\r\n } else {\r\n self.alertType = 2;\r\n }\r\n } else if (this.sum2 > lowLimitSum || (organizationValue !== 2 && employees2Value === 1)) {\r\n self.overQuarter = 2;\r\n self.previousTaxBaseValue = this.taxBase.value === 'income' ? this.income1 : this.income1 - this.outcome1;\r\n if (self.previousTaxBaseValue) {\r\n if (this.taxBase.value === 'income') {\r\n self.rateFormula = tools.getLocaleSum(this.income1Field.getValue());\r\n } else {\r\n self.rateFormula = (this.outcome1 ? '(' : '') + tools.getLocaleSum(this.income1 ? this.income1Field.getValue() : 0) + (this.outcome1 ? ' − ' : '') + tools.getLocaleSum(this.outcome1Field.getValue()) + (this.outcome1 ? ')' : '');\r\n }\r\n }\r\n if (this.sum2 > lowLimitSum) {\r\n self.alertType = 1;\r\n } else {\r\n self.alertType = 2;\r\n }\r\n } else if (this.sum3 > lowLimitSum || (organizationValue !== 2 && employees3Value === 1)) {\r\n self.overQuarter = 3;\r\n self.previousTaxBaseValue = this.taxBase.value === 'income' ? (this.income1 + this.income2)\r\n : (this.income1 + this.income2 - this.outcome1 - this.outcome2);\r\n if (self.previousTaxBaseValue) {\r\n if (this.taxBase.value === 'income') {\r\n self.rateFormula = (this.income1 && this.income2 ? '(' : '') + tools.getLocaleSum(this.income1Field.getValue()) + (this.income1 && this.income2 ? ' + ' : '') + tools.getLocaleSum(this.income2Field.getValue()) + (this.income1 && this.income2 ? ')' : '');\r\n } else {\r\n let incomeFormula = this.getRateFormula(this.income1, this.income2);\r\n let outcomeFormula = this.getRateFormula(this.outcome1, this.outcome2, null, null, ' - ');\r\n self.rateFormula = (incomeFormula.indexOf('+') > -1 || outcomeFormula ? '(' : '') + (incomeFormula ? incomeFormula : tools.getLocaleSum(0)) + (outcomeFormula ? ' - ' : '') + outcomeFormula + (incomeFormula.indexOf('+') > -1 || outcomeFormula ? ')' : '');\r\n }\r\n }\r\n if (this.sum3 > lowLimitSum) {\r\n self.alertType = 1;\r\n } else {\r\n self.alertType = 2;\r\n }\r\n } else if (this.sum4 > lowLimitSum || (organizationValue !== 2 && employees4Value === 1)) {\r\n self.overQuarter = 4;\r\n self.previousTaxBaseValue = this.taxBase.value === 'income' ? (this.income1 + this.income2 + this.income3)\r\n : (this.income1 + this.income2 + this.income3 - this.outcome1 - this.outcome2 - this.outcome3);\r\n self.rateFormula = this.taxBase.value === 'income' ? ('(' + tools.getLocaleSum(this.income1Field.getValue()) + ' + ' + tools.getLocaleSum(this.income2Field.getValue()) + ' + ' + tools.getLocaleSum(this.income3Field.getValue()) + ')')\r\n : ('(' + tools.getLocaleSum(this.income1Field.getValue()) + ' + ' + tools.getLocaleSum(this.income2Field.getValue()) + ' + ' + tools.getLocaleSum(this.income3Field.getValue()) + ' − ' + tools.getLocaleSum(this.outcome1Field.getValue()) + ' − ' + tools.getLocaleSum(this.outcome2Field.getValue()) + ' − ' + tools.getLocaleSum(this.outcome3Field.getValue()) + ')');\r\n if (self.previousTaxBaseValue) {\r\n if (this.taxBase.value === 'income') {\r\n let incomeFormula = this.getRateFormula(this.income1, this.income2, this.income3);\r\n self.rateFormula = (incomeFormula.indexOf('+') > -1 ? '(' : '') + incomeFormula + (incomeFormula.indexOf('+') > -1 ? ')' : '');\r\n } else {\r\n let incomeFormula = this.getRateFormula(this.income1, this.income2, this.income3);\r\n let outcomeFormula = this.getRateFormula(this.outcome1, this.outcome2, this.outcome3, null, ' - ');\r\n self.rateFormula = (incomeFormula.indexOf('+') > -1 || outcomeFormula ? '(' : '') + (incomeFormula ? incomeFormula : tools.getLocaleSum(0)) + (outcomeFormula ? ' - ' : '') + outcomeFormula + (incomeFormula.indexOf('+') > -1 || outcomeFormula ? ')' : '');\r\n }\r\n }\r\n if (this.sum4 > lowLimitSum) {\r\n self.alertType = 1;\r\n } else {\r\n self.alertType = 2;\r\n }\r\n }\r\n break;\r\n }\r\n\r\n if (this.taxBase.value === 'income') {\r\n self.taxBaseValue = this.totalIncome;\r\n } else {\r\n let taxBaseValue = this.totalIncome - this.totalOutcome;\r\n if (taxBaseValue > 0) {\r\n self.taxBaseValue = taxBaseValue;\r\n }\r\n else {\r\n self.taxBaseValue = 0;\r\n }\r\n }\r\n\r\n if (this.taxBase.value === 'income') {\r\n self.newRate = 8;\r\n if (self.overQuarter === null) {\r\n self.initialTax = tools.roundNumber(this.taxBaseValue * this.rate / 100, 2);\r\n self.rateFormula = tools.getLocaleSum(this.taxBaseValue);\r\n } else {\r\n self.initialTax = tools.roundNumber((this.previousTaxBaseValue * this.rate / 100) + (this.taxBaseValue - this.previousTaxBaseValue) * this.newRate / 100, 2);\r\n self.newRateFormula = (self.rateFormula ? '(' : '') + tools.getLocaleSum(this.taxBaseValue) + (self.rateFormula ? ' − ' + self.rateFormula + ')' : '');\r\n }\r\n if (organizationValue === 2) {\r\n self.deduction = this.totalInsurance;\r\n } else {\r\n let value = tools.roundNumber(this.initialTax / 2, 2);\r\n if (value * 2 > this.initialTax) {\r\n value -= 0.01;\r\n }\r\n\r\n if (this.totalInsurance > value) {\r\n self.deduction = value;\r\n } else {\r\n self.deduction = this.totalInsurance;\r\n }\r\n }\r\n\r\n let taxPreCalc = this.initialTax - this.deduction - this.totalTradeFee;\r\n let totalTax = taxPreCalc - this.totalPayment;\r\n if (totalTax < 0 && taxPreCalc >= 0) {\r\n self.totalTax = 0;\r\n self.totalOverpayment = tools.roundNumber(0 - totalTax, 0);\r\n self.isOverpayment = true;\r\n self.overpaymentOption = 1;\r\n } else if (taxPreCalc < 0) {\r\n self.totalTax = 0;\r\n self.totalOverpayment = tools.roundNumber(this.totalPayment, 0);\r\n self.isOverpayment = true;\r\n self.overpaymentOption = 2;\r\n } else {\r\n self.totalTax = tools.roundNumber(totalTax, 0);\r\n self.isOverpayment = false;\r\n }\r\n } else {\r\n self.newRate = 20;\r\n if (this.taxBaseValue > 0) {\r\n if (self.overQuarter === null) {\r\n if (this.period.value === 12) {\r\n self.initialTax = tools.roundNumber((this.taxBaseValue - this.losses) * (this.rate / 100), 2);\r\n self.rateFormula = (this.losses ? '(' : '') + tools.getLocaleSum(this.taxBaseValue) + (this.losses ? ' − ' + tools.getLocaleSum(this.losses) + ')' : '');\r\n } else {\r\n self.initialTax = tools.roundNumber(this.taxBaseValue * this.rate / 100, 2);\r\n self.rateFormula = tools.getLocaleSum(this.taxBaseValue);\r\n }\r\n } else {\r\n this.previousTaxBaseValue = this.previousTaxBaseValue < 0 ? 0 : this.previousTaxBaseValue;\r\n if (this.period.value === 12) {\r\n self.initialTax = tools.roundNumber((this.previousTaxBaseValue * this.rate / 100) + ((this.taxBaseValue - this.previousTaxBaseValue - this.losses) * this.newRate / 100), 2);\r\n self.newRateFormula = (self.rateFormula || this.losses ? '(' : '') + tools.getLocaleSum(this.taxBaseValue) + (self.rateFormula ? ' − ' + self.rateFormula : '') + (this.losses ? ' − ' + tools.getLocaleSum(this.losses) : '') + (self.rateFormula || this.losses ? ')' : '');\r\n } else {\r\n self.initialTax = tools.roundNumber((this.previousTaxBaseValue * this.rate / 100) + ((this.taxBaseValue - this.previousTaxBaseValue) * this.newRate / 100), 2);\r\n self.newRateFormula = (self.rateFormula ? '(' : '') + tools.getLocaleSum(this.taxBaseValue) + (self.rateFormula ? ' − ' + self.rateFormula + ')' : '');\r\n }\r\n }\r\n } else {\r\n self.initialTax = 0;\r\n }\r\n\r\n if (this.totalIncome - this.totalOutcome < 0) {\r\n self.isLoss = true;\r\n self.totalLoss = this.totalOutcome - this.totalIncome;\r\n }\r\n\r\n self.minimalTax = tools.roundNumber(this.totalIncome * 1 / 100, 2);\r\n\r\n self.isInitialTax = true;\r\n let taxValue = this.initialTax;\r\n if (this.period.value === 12 && this.initialTax <= this.minimalTax) {\r\n self.isInitialTax = false;\r\n taxValue = this.minimalTax;\r\n }\r\n\r\n if (taxValue - this.totalPayment < 0) {\r\n self.totalTax = 0;\r\n self.totalOverpayment = tools.roundNumber(this.totalPayment - taxValue, 0);\r\n self.isOverpayment = true;\r\n } else {\r\n self.totalTax = tools.roundNumber(taxValue - this.totalPayment, 0);\r\n self.isOverpayment = false;\r\n }\r\n\r\n if (this.period.value !== 12) {\r\n self.showOverpayment = false;\r\n }\r\n }\r\n\r\n self.incomeFormula = this.getFormula(this.period.value, this.income1, this.income2, this.income3, this.income4);\r\n self.sumFormula = this.getFormula(this.period.value, this.sum1, this.sum2, this.sum3, this.sum4);\r\n self.outcomeFormula = this.getFormula(this.period.value, this.outcome1, this.outcome2, this.outcome3, this.outcome4);\r\n self.insuranceFormula = this.getFormula(this.period.value, this.insurance1, this.insurance2, this.insurance3, this.insurance4);\r\n self.paymentFormula = this.getFormula(this.period.value, this.payment1, this.payment2, this.payment3, 0);\r\n self.tradeFeeFormula = this.getFormula(this.period.value, this.tradeFee1, this.tradeFee2, this.tradeFee3, this.tradeFee4);\r\n\r\n self.showInsurance = this.showValue(this.period.value, this.insurance1, this.insurance2, this.insurance3, this.insurance4);\r\n self.showPayment = this.showValue(this.period.value, this.payment1, this.payment2, this.payment3, null);\r\n self.showTradeFee = this.showValue(this.period.value, this.tradeFee1, this.tradeFee2, this.tradeFee3, this.tradeFee4);\r\n self.showOutcome = this.showValue(this.period.value, this.outcome1, this.outcome2, this.outcome3, this.outcome4);\r\n\r\n if (self.rate === self.newRate) {\r\n self.isEqualRate = true;\r\n }\r\n\r\n const isDeflatorPeriod = this.deflatorYear.value !== 1995;\r\n this.isEmployeeLimit = false;\r\n if (isDeflatorPeriod) {\r\n this.taxBaseAlertNote = `Расчет невозможен, так как доходы в отчётном периоде превышают установленный НК РФ лимит УСН в ${self.deflatorYear.value === 2025 ? 450 : 200} млн. рублей с учетом коэффициента-дефлятора.`;\r\n } else {\r\n if (this.alertType === 2) {\r\n this.isEmployeeLimit = true;\r\n this.taxBaseAlertNote = \"Расчет невозможен, так как в выбранном периоде максимальная средняя численность работников для применения УСН – 100 человек.\";\r\n } else {\r\n this.taxBaseAlertNote = \"Расчет невозможен, так как доходы в отчетном периоде превышают установленный НК РФ лимит УСН в 150 млн. рублей.\";\r\n }\r\n }\r\n\r\n const limitSum = this.getLimitSum(isDeflatorPeriod);\r\n this.succeeded = this.totalIncome <= limitSum && !this.isEmployeeLimit;\r\n if (this.overQuarter && !this.isEqualRate && this.succeeded) {\r\n $('#incomeAlert').slideDown();\r\n } else {\r\n $('#incomeAlert').slideUp(200);\r\n }\r\n $('#alertNote').addClass('hidden-control');\r\n\r\n return true;\r\n }\r\n}\r\n\r\nclass RateField extends FloatField {\r\n static keyName() { return 'rate'; }\r\n init() {\r\n this.incomeValue = 6;\r\n this.incomeOutcomeValue = 15;\r\n this.result = [];\r\n this.result.selectedId = 0;\r\n this.result[0] = { value: this.incomeValue };\r\n this.result[1] = { value: this.incomeOutcomeValue };\r\n\r\n this.setupNumberInput(true, { precision: 4 });\r\n }\r\n getValue() {\r\n this.result[this.result.selectedId].value = this.elem.val();\r\n return this.elem.val() ? tools.parseLocaleFloat(this.elem.val()) : this.defaultGetValue;\r\n }\r\n reset() {\r\n this.result.selectedId = 0;\r\n this.result[0] = { value: this.incomeValue };\r\n this.result[1] = { value: this.incomeOutcomeValue };\r\n this.elem.val(6);\r\n $('.tax-link-2-container').addClass('hidden-control');\r\n $('.tax-link-container').removeClass('hidden-control');\r\n }\r\n setMode(id) {\r\n let $rateInput = $('#rateInput');\r\n this.elem.removeClass('err');\r\n $rateInput.find('.error-text').hide();\r\n this.elem.val(this.result[id].value);\r\n this.result.selectedId = id;\r\n }\r\n}\r\n\r\n\r\n$(function () {\r\n let calc = new USNCalculator();\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":""}