{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./wwwroot/calc/calc_pit/components/base.js","webpack:///./wwwroot/calc/calc_pit/components/calcWithoutPit.js","webpack:///./wwwroot/calc/calc_pit/components/calcWithPit.js","webpack:///./wwwroot/calc/calc_pit/calc.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","PITCalculator","_Calculator","_classCallCheck","_callSuper","arguments","_inherits","this","setupStatistic","calcName","isStartedEventIgnore","patchFieldTypes","fields","submitOnChange","addResetButton","$","calcSelector","find","length","updateInput","hide","autoSubmit","_get","_getPrototypeOf","click","e","target","closest","toggle","inputSum","rate","anyDiscountsActive","totalDiscountSum","rateDescription","concat","config","inputTitle","table","$table","rows","tools","findExternalOnly","data","addClass","removeClass","attr","tooltipButtonClicked","tooltipClose","result","detalization","options","valid","ignoreCalculationList","tree","sumsRatesList","map","block","index","sumInput","rateObj","getRate","getValue","elem","from","min","max","getSumWithPit","artifacts","push","$sumError","html","show","fiveHundredDiscountInput","fiveHundredErrorBlock","threeThousandCheckbox","countMonth3000","val","fiveHundredCheckbox","countMonth500","sum","isSpecial","percent","x","getLocaleSumInRubbles","getRoundedNumber","Calculator","rateText","WithoutPITCalculator","_PITCalculator","self","renderDiscountTable","discounts","document","createElement","classList","add","input","isChanged","text","verboseCountingValue","additionalText","inner","forEach","discount","valueInRubble","innerHTML","outerHTML","renderChildInfoBlock","childrenData","resultDiv","child","getRoundedNumberInRubbles","comment","parent","toLowerCase","isDisabled","isAgeAbove","isStudent","renderLocalInfoTable","item","sumWithPit","getLocalRoundedSumInRubbles","tax","resultTitle","sumWithoutPit","generateDiscountLine","processRenderedData","dataItem","generateRateDescription","sumCalculatateDescription","discountsLine","filter","_ref2","resultText","ndflTitle","dynamicCalculation","addInputField","dynamic","appendButtonSelector","removeSelector","keepOne","ignoreForEmpty","prepareTemplate","$clone","blockPiece","$comment","keyup","focus","selectAllText","activeCheckboxInputObject","$checkboxes","$descriptionLine","resultLine","keys","_ref","sort","a","b","join","is","each","getElementsByTagName","id","labels","setAttribute","getAttribute","change","$discountBlock","$inputBlock","prop","first","discountsBlock","monthCount","childrenDynamic","childrenCount","count","getElements","setCount","childrenDynamicLength","countChildren","hiddenChildrenInput","selector","type","errors","defaultValue","maxVal","childrenCheckbox","socialCheckbox","materialCheckbox","professionalCheckbox","otherCheckbox","materialDiscountInput","professionalDiscountInput","otherDiscountInput","socialDiscountInput","countMonth","removeFirstEvent","Math","floor","random","typeParent","addGroup","sumsRatesListCheck","calculationListCount","addOutputField","render","infoTable","infoTables","infoItem","renderInfoItem","alternativeBlock","loadDescription","isCalculationCorrect","sendStatisticMessage","message","goalParams","args","prefix","_ref3","elem1","elem2","_ref4","parseLocaleFloat","_ref5","sumWithPitAfterDiscount","params","_this","_","indexOf","hasSpecialRateCalculation","hasCommonCalculation","hasAnyDiscounts","el","savedSumWithPit","childrenDiscountValue","limitChildrenErrorBlock","childInfo","currentDiscount","discountInRubble","_this$processDiscount2","_slicedToArray","processDiscountList","itemComment","resultTax","reduce","resultSum","toFixed","getRateFormula","rateValue","WithPITCalculator","dataRow","taxCalculation","infoTables_text","sumWithPitFormula","withoutPITCalc","withPITCalc","isActive","getElementById","remove","showResults","ShowErrorWay","SHOW_ALL","SHOW_FIRST","Field","_createClass","selectorOrElem","defaultGetValue","init","deleted","isDynamic","_ignore","v","f","hasClass","getClearValue","set","undefined","params_","errClassElem","err","keepValue","setValue","keepErrors","clearErrors","autoValidation","sender","phase","loud","silent","handler","showErrorWay","check","window","documentMode","tagName","css","_BaseObjectField","_Field","deepcopy","clearValue","NumberField","_Field2","blur","isFloat","props","disableProps","console","error","keyName","$field","inputFilter","focusin","CountField","_NumberField","parseLocaleInt","setupNumberInput","YearField","_NumberField2","allowSpaces","maxLength","PeriodField","_NumberField3","FloatField","_NumberField4","precision","MoneyField","_FloatField","SelectField","_Field3","itemText","reset","RadioField","_Field4","checkedElem","CheckboxField","_Field5","control","checked","TextField","_Field6","removeExtraSpace","raw","escapeTags","_Field7","LinkField","selectedLink","event","preventDefault","CalculatorComplex","_CalculatorInterface","htmlNode","calc_","$node","scopeEvalFunc","underscore","script","Function","parseNameType","parts","exec","Error","paramString","match","splitPos","warn","varName","substr","test","parseInt","parseFloat","slice","split","trim","JSON","parse","checkClass","class_","autoKey","clickOptions","on","_clickOptions$options","submit","toggleClasses","toArray","classesObj","className","inputs","_parseNameType","outputs","_parseNameType2","renderCode","checkHash","obj","path","_this2","gentle","Array","isArray","writePath","part","id_","clearPart","replace","some","__id","body","fetchRootElem","$dataExpandableDiv","elements","createClone","$template","$lastRow","last","querySelector","cloneNode","_id","genUniqueId","removed","beforeRemoval","field","afterRemoval","isFilled","getFieldsFlat","dontSubmitOnRemove","submitForm","_submitOnChange","fetchFields","fieldParams","_objectSpread","disabledSubmitting","anchor","_params$prepareTempla","insertAdjacentElement","removePathId","$this","$expandableDiv","keepTable","bp","delete","ignoredEmptyFields","_ref3$removeStrategy","removeStrategy","currentCount","_dynamicFields","nameOrNames","checker","fieldGroups","getFields","resList","inputFields","ignore","__tmpIgnore","isPathInside","checkField","df","newOptions","_this3","newValues","irregularValueNames","acc","log","clearPath","_exportObject","ignoreList","accum","filled","defaultFilled","enableResetButton","hasValueChanges","fieldsToParse","ignoreCouseEmpty","showReset","resetValuesOnIgnore","unsilence","senderField","apply","_toConsumableArray","res","errorIsVisible","getExportValue","afterFirstPhaseCheck","newValuesString","stringify","lastValuesString","group","processGroup","afterParse","forceRender","skipValueChangesCheck","notes","beforeSubmit","parsing","resetButtons","_statistic","startedSent","isReady","calculateForValidOnly","toggleCustomClasses","calcValid","calculate","beforeRender","_exportObjectFinal","generateExportObject","hideResults","renderError","afterSubmit","CalculatorInterface","debug","_fieldTypes","outputFields","forceOutputs","_inputFieldsTree","view","hash","newFieldTypes","string_or_object","hideOnDefault","srcPath","BaseOutputField","calculator","container","setup","paramName","renderFunc","compose","renderMethod","compose_","exportObject","RenderRequiredOutputField","_BaseOutputField","HtmlOutputField","_BaseOutputField2","_HtmlOutputField","LocaleNumOutputField","_BaseOutputField3","minPrecision","maxPrecision","getLocaleNumber","LocaleSumOutputField","_BaseOutputField4","getLocaleSum","MoneyRubleOutputField","_HtmlOutputField2","MoneyTextOutputField","_BaseOutputField5","verboseNumber","MoneyRoundedRubleField","_HtmlOutputField3","MoneyRoundedRubleOutputField","_HtmlOutputField4","PeriodOutputField","_BaseOutputField6","from_","dateFrom","toLocaleFormat","to_","dateTo","duration","inDays","DateOutputField","_BaseOutputField7","DayOutputField","_BaseOutputField8","PercentOutputField","_HtmlOutputField5","NoteOutputField","_RenderRequiredOutput","convertElemToTextWithLinksForExport","ExportVisibleOutputField","_BaseOutputField9","htmlObject","ToggleOutputField","_RenderRequiredOutput2","slideUpTime","slideUp","slideDownTime","slideDown","ConditionalBlockOutputField","_RenderRequiredOutput3","alternativeBlockSelector","ShareOutputField","_HtmlOutputField6","MoneyLocalRoundedOutField","_HtmlOutputField7","createOutputField","_CalculatorComplex","basicFields","showVersionBanner","ShowVersionBanner","setupVersionBanner","setupHandlers","autoAddFields","initialize","_console","_$","_$2","_$3","_$4","print","printMessage","formData","FormData","append","ajax","url","ExportWordHost","processData","contentType","cache","xhr","XMLHttpRequest","onloadstart","ev","responseType","success","response","textStatus","jQxhr","decodeURI","getResponseHeader","blob","Blob","navigator","msSaveOrOpenBlob","link","download","href","URL","createObjectURL","exportMessage","location","history","pushState","title","pathname","getHash","RegExp","substring","feedbackBottom","Promise","resolve","reject","load","code","DataVersionSalt","initSmartLink","setWarningMessage","IsAuthEnabled","mailSubject","prepend","ym","ymId","ymReachGoal","resetInputFields","addDynamicField","ftype","_detectFieldType","_makeFieldObject","disableAutoCheck","onChange","preInit","ft","detect","fieldType","onReset","forced","orderedFields","priorities","renderExport","customClass"],"mappings":"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","file":"calc/calc_pit/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 = 1177);\n","import { Calculator, ShowErrorWay } from \"../../common/calculator\";\r\nimport {fields} from \"../../common/basic_fields.js\";\r\n\r\nclass PITCalculator extends Calculator{\r\n code() { return \"pit\"; }\r\n type() { return \"CalcPersonalIncomeTax\"; }\r\n\r\n initialize() {\r\n this.setupStatistic({\r\n calcName: 'pit',\r\n isStartedEventIgnore: true\r\n });\r\n\r\n this.patchFieldTypes(fields);\r\n this.submitOnChange();\r\n\r\n this.addResetButton(\"#clearCalcInput\");\r\n }\r\n\r\n get defaultFilled() {\r\n return $(this.calcSelector).find('.dynamic-list-row').length > 1;\r\n }\r\n \r\n afterParse() {\r\n this.updateInput(this.calcSelector);\r\n }\r\n\r\n onReset() {\r\n $(\".error-text\").hide();\r\n this.autoSubmit(); //todo: incorrect operation money field\r\n this.updateInput(this.calcSelector);\r\n }\r\n \r\n render() {\r\n super.render();\r\n $(\".toggle-button\").click((e) =>{ //hide/display children discounts info by click\r\n $(e.target).closest(\".info-item\").find(\".calculate-detalization div, .child-info-block, .toggle-block-show, .toggle-block-hide\").toggle();\r\n });\r\n }\r\n\r\n generateRateDescription(inputSum, rate, anyDiscountsActive, totalDiscountSum) {\r\n let rateDescription = `Рассчитать НДФЛ, если ${this.config.inputTitle} ${inputSum}`\r\n rateDescription += `, ставка налога ${rate}`;\r\n if (anyDiscountsActive)\r\n rateDescription += `, вычеты ${totalDiscountSum}`;\r\n \r\n return rateDescription;\r\n }\r\n \r\n updateInput(table) {\r\n let $table = $(table);\r\n let rows = tools.findExternalOnly( $table, '.dynamic-list-row');\r\n if (rows.length == 1) {\r\n let $row = $(rows[0]);\r\n $row.data('rowIndex', 1);\r\n $table.addClass(\"single-row\");\r\n } else {\r\n $table.removeClass(\"single-row\");\r\n }\r\n\r\n $('.tooltip-button').attr('tabindex', '-1').click(tooltipButtonClicked);\r\n $('.tooltip-content .close-button').click(tooltipClose);\r\n }\r\n\r\n generateExportObject() {\r\n let result = super.generateExportObject();\r\n result.detalization = this.detalization;\r\n result.config = this.config;\r\n \r\n return result;\r\n }\r\n\r\n sumsRatesListCheck(fields, options) {\r\n let result = {valid: true};\r\n\r\n result.artifacts = {\r\n ignoreCalculationList: []\r\n }\r\n\r\n fields.tree.sumsRatesList = fields.tree.sumsRatesList || [];\r\n fields.tree.sumsRatesList.map((block, index) => {\r\n if(!block.sumInput)\r\n return;\r\n\r\n const rateObj = getRate(block.rate.getValue().value);\r\n \r\n block.sumInput.elem.closest(\".dynamic-list-sum-rate\").find(\".rate-error\").hide();\r\n\r\n function getSumWithPit(sum, rateObj) {\r\n return rateObj.isSpecial \r\n ? (sum - rateObj.data.min * (rateObj.percent / 100) + rateObj.data.sum) / ((100 - rateObj.percent) / 100)\r\n : sum / ((100 - rateObj.percent) / 100);\r\n }\r\n\r\n if (block.sumInput.getValue() \r\n && ((block.from == \"#withoutPitTable\" \r\n && ((rateObj.data.min && block.sumInput.getValue() <= rateObj.data.min)\r\n || (rateObj.data.max && block.sumInput.getValue() > rateObj.data.max)))\r\n || (block.from == \"#withPitTable\" \r\n && ((rateObj.data.min && getSumWithPit(block.sumInput.getValue(), rateObj) <= rateObj.data.min)\r\n || (rateObj.data.max && getSumWithPit(block.sumInput.getValue(), rateObj) > rateObj.data.max))))\r\n ) {\r\n result.artifacts.ignoreCalculationList.push(index);\r\n const $sumError = block.sumInput.elem.closest(\".dynamic-list-sum-rate\").find(\".rate-error\");\r\n $sumError.html(`Указанная ставка применяется в случае, когда доходы ${rateObj.data.min ? `свыше ${rateObj.data.min / 1_000_000} млн руб.` : \"\"}${rateObj.data.max ? `${rateObj.data.min ? ', но ' : \"\"}не более ${rateObj.data.max / 1_000_000} млн руб.` : \"\"} за год`);\r\n $sumError.show();\r\n }\r\n\r\n if(block.fiveHundredDiscountInput) {\r\n const fiveHundredErrorBlock = block.fiveHundredDiscountInput.elem.closest(\".checkboxes-block\").find(\".five-hundred-error\");\r\n fiveHundredErrorBlock.hide();\r\n //if 3 000 discount is active, 500 discount shoul be hidden\r\n if (block.threeThousandCheckbox && block.threeThousandCheckbox.getValue() && block.countMonth3000.getValue()) {\r\n block.fiveHundredDiscountInput.elem.val(0);\r\n if(block.fiveHundredCheckbox && block.fiveHundredCheckbox.getValue() && block.countMonth500.getValue())\r\n fiveHundredErrorBlock.show();\r\n } else if (block.fiveHundredDiscountInput) {\r\n block.fiveHundredDiscountInput.elem.val(500);\r\n }\r\n }\r\n \r\n });\r\n\r\n return result;\r\n }\r\n\r\n getLocalRoundedSumInRubbles(x) {\r\n return tools.getLocaleSumInRubbles(tools.getRoundedNumber(x))\r\n }\r\n}\r\n\r\nconst getRate = (value) => {\r\n const result = {\r\n isSpecial: false,\r\n data: {},\r\n percent: 0,\r\n rateText: ''\r\n };\r\n\r\n switch(value) {\r\n case 131:\r\n result.isSpecial = false;\r\n result.percent = 13;\r\n result.data.sum = 0;\r\n result.data.min = 0;\r\n result.data.max = 2_400_000;\r\n result.rateText = `13%`;\r\n break;\r\n case 132:\r\n result.isSpecial = false;\r\n result.percent = 13;\r\n result.data.sum = 0;\r\n result.data.min = 0;\r\n result.data.max = 5_000_000;\r\n result.rateText = `13%`;\r\n break;\r\n case 312:\r\n result.isSpecial = true;\r\n result.percent = 15;\r\n result.data.sum = 312_000;\r\n result.data.min = 2_400_000;\r\n result.data.max = 5_000_000;\r\n result.rateText = '312 тыс. руб. + 15%';\r\n break;\r\n case 650:\r\n result.isSpecial = true;\r\n result.percent = 15;\r\n result.data.sum = 650_000;\r\n result.data.min = 5_000_000;\r\n result.data.max = null;\r\n result.rateText = '650 тыс. руб. + 15%';\r\n break;\r\n case 702:\r\n result.isSpecial = true;\r\n result.percent = 18;\r\n result.data.sum = 702_000;\r\n result.data.min = 5_000_000;\r\n result.data.max = 20_000_000;\r\n result.rateText = '702 тыс. руб. + 18%';\r\n break;\r\n case 3402:\r\n result.isSpecial = true;\r\n result.percent = 20;\r\n result.data.sum = 3_402_000;\r\n result.data.min = 20_000_000;\r\n result.data.max = 50_000_000;\r\n result.rateText = '3402 тыс. руб. + 20%';\r\n break;\r\n case 9402:\r\n result.isSpecial = true;\r\n result.percent = 22;\r\n result.data.sum = 9_402_000;\r\n result.data.min = 50_000_000;\r\n result.data.max = null;\r\n result.rateText = '9402 тыс. руб. + 22%';\r\n break;\r\n default:\r\n result.percent = value;\r\n result.rateText = `${value}%`;\r\n break;\r\n }\r\n return result;\r\n};\r\n\r\nexport {PITCalculator, getRate}\r\n\r\n\r\n","import { PITCalculator, getRate } from './base.js';\r\n\r\nclass WithoutPITCalculator extends PITCalculator{\r\n autoKey() {\r\n return \"1\";\r\n }\r\n initialize() {\r\n let self = this;\r\n super.initialize();\r\n\r\n this.calcSelector = \"#withoutPitTable\";\r\n\r\n this.config = {\r\n resultTitle: \"Сумма за вычетом НДФЛ\",\r\n resultText: \"Рассчитать НДФЛ\",\r\n inputTitle: \"общая сумма, включая НДФЛ\",\r\n ndflTitle: \"Сумма налога\"\r\n }\r\n\r\n this.dynamicCalculation = this.addInputField(this.calcSelector, 'sumsRatesList', {\r\n dynamic: true,\r\n appendButtonSelector: \".addNewRowWithoutPit\",\r\n removeSelector: \".dynamic-list-row-remove a\",\r\n keepOne: true,\r\n ignoreForEmpty: true,\r\n prepareTemplate: function($clone, blockPiece) {\r\n $clone.data('rowIndex', blockPiece.index + 1);\r\n \r\n var $comment = tools.findExternalOnly($clone, '.dynamic-list-comment input').keyup(function () {\r\n $(this).data('changed', '1');\r\n self.autoSubmit();\r\n }).focus(tools.selectAllText);\r\n $comment.val($clone.data('rowIndex') + $comment.val());\r\n\r\n let activeCheckboxInputObject = {}; //contains text and inputs all active discount checkboxes\r\n \r\n $clone.find(\".discounts .title\").click((e) => { //generate description below discounts title\r\n const $checkboxes = $(e.target).closest(\".discounts\").find(\".checkboxes\");\r\n const $descriptionLine = $checkboxes.closest(\".discounts\").find(\".description\");\r\n \r\n let resultLine = Object.keys(activeCheckboxInputObject).map((name) => ({ name, input: activeCheckboxInputObject[name] }))\r\n .filter(({input}) => input !== null && input.val().length > 0) //delete checkbox if input value == 0 or ''\r\n .sort((a, b) => +a.input.data(\"index\") < +b.input.data(\"index\") ? -1 : 1)\r\n .map(elem => elem.name.toLowerCase())\r\n .join(\", \");\r\n\r\n $checkboxes.toggle();\r\n if($checkboxes.is(\":visible\")) {\r\n $descriptionLine.html(resultLine).hide();\r\n } else {\r\n $descriptionLine.html(resultLine).show();\r\n }\r\n });\r\n\r\n if (blockPiece.index > 0) //hide discounts in new blocks\r\n $clone.find(\".discounts .checkboxes, .childrenData\").hide();\r\n\r\n $clone.find('.checkboxrow').each(function (index, item) {\r\n this.getElementsByTagName('input')[0].id += blockPiece.index;\r\n let labels = this.getElementsByTagName('label');\r\n for (var i = 0; i < 2; ++i) {\r\n labels[i].setAttribute('for', labels[i].getAttribute('for') + blockPiece.index);\r\n }\r\n });\r\n\r\n $clone.find('.checkboxrow input[type=\"checkbox\"]').change((e) => { //functional of displaying hidden inputs after click\r\n const $discountBlock = $(e.target).closest(\".checkboxes-block\");\r\n const name = $discountBlock.find(\".checkboxrow-description\").html();\r\n const $inputBlock = $discountBlock.find(\".discounts-input\");\r\n if ($discountBlock.find(\".checkboxrow input\").prop(\"checked\"))\r\n activeCheckboxInputObject[name] = $inputBlock.find(\"input\").first();\r\n else {\r\n activeCheckboxInputObject[name] = null;\r\n $discountBlock.find(\".error-text\").hide();\r\n }\r\n $inputBlock.toggle();\r\n self.autoSubmit();\r\n });\r\n\r\n $clone.find(\".percent-rate-input dropdown-select\").change(function() { //change title of discounts\r\n const discountsBlock = $clone.find(\".discounts\");\r\n if (getRate(this.value).isSpecial || (this.value == 131 || this.value == 132)) {\r\n discountsBlock.show();\r\n } else {\r\n discountsBlock.hide();\r\n }\r\n });\r\n\r\n //change counts of months and children in children discouts\r\n \r\n $clone.find(\".remove-month\").click((e) => {\r\n let monthCount = $(e.target).closest(\".switcher\").find(\".months-count\");\r\n if (+monthCount.val() > 0 ) {\r\n monthCount.val(monthCount.val() - 1);\r\n }\r\n self.autoSubmit();\r\n });\r\n\r\n $clone.find('.add-month').click((e) => {\r\n let monthCount = $(e.target).closest(\".switcher\").find(\".months-count\");\r\n if(+monthCount.val() < 12)\r\n monthCount.val(+monthCount.val() + 1);\r\n else \r\n monthCount.val(12);\r\n self.autoSubmit();\r\n });\r\n\r\n $clone.find('.remove-child-block').click(() => {\r\n let childrenDynamic = blockPiece.tree.childrenData;\r\n let childrenCount = $clone.find(\".children-count\");\r\n if (childrenCount.val() >= 1 ) {\r\n const count = childrenDynamic.getElements().length - 1;\r\n childrenDynamic.setCount({ count});\r\n childrenCount.val(count);\r\n }\r\n self.autoSubmit();\r\n });\r\n\r\n $clone.find('.add-new-child-block').click(() => {\r\n const childrenDynamicLength = blockPiece.tree.childrenData.getElements().length;\r\n $clone.find(\".children-count\").val(childrenDynamicLength);\r\n self.autoSubmit();\r\n });\r\n\r\n $clone.find('.children-count').keyup((e) => {\r\n const countChildren = $(e.target).val();\r\n if(countChildren <= 20)\r\n blockPiece.tree.childrenData.setCount({ count: countChildren});\r\n self.autoSubmit();\r\n });\r\n\r\n blockPiece.tree.childrenData.setCount({ count: 0});\r\n\r\n return { block: $clone, artifacts: {from: self.calcSelector, activeCheckboxInputObject, hiddenChildrenInput: $clone.find(\".hidden-children-input input\") } }\r\n }, \r\n fields: {\r\n sumInput:{\r\n selector:\".sum-with-pit-input input\",\r\n options: {\r\n type: 'money',\r\n options: { keyup: true },\r\n errors: [],\r\n },\r\n },\r\n rate: \".percent-rate-input dropdown-select\", \r\n comment: {\r\n selector: \".dynamic-list-comment input\",\r\n options: {\r\n type: 'text', \r\n defaultValue: \"1-й расчёт\"\r\n },\r\n },\r\n countMonth3000: {\r\n selector:\".months-count3000\", \r\n options: {\r\n type:\"count\", \r\n options:{ keyup:true, maxVal: 12 },\r\n }\r\n },\r\n countMonth500: {\r\n selector:\".months-count500\", \r\n options: {\r\n type:\"count\", \r\n options:{ keyup:true, maxVal: 12 },\r\n }\r\n },\r\n childrenCheckbox: \".checkboxrow-children\",\r\n threeThousandCheckbox: \".checkboxrow-three\", \r\n fiveHundredCheckbox: \".checkboxrow-five\",\r\n socialCheckbox: \".checkboxrow-social\",\r\n materialCheckbox: \".checkboxrow-material\",\r\n professionalCheckbox: \".checkboxrow-professional\",\r\n otherCheckbox: \".checkboxrow-other\",\r\n fiveHundredDiscountInput:{\r\n selector: \".five-hundred-discount-input input\",\r\n options: {\r\n type: 'money'\r\n }\r\n },\r\n materialDiscountInput:{\r\n selector:\".material-discounts-input input\", \r\n options: {\r\n type: 'money',\r\n options: { keyup: true },\r\n },\r\n },\r\n professionalDiscountInput:{\r\n selector:\".professional-discounts-input input\", \r\n options: {\r\n type: 'money',\r\n options: { keyup: true },\r\n },\r\n },\r\n otherDiscountInput:{\r\n selector:\".other-discounts-input input\", \r\n options: {\r\n type: 'money',\r\n options: { keyup: true },\r\n },\r\n },\r\n socialDiscountInput:{\r\n selector:\".social-discounts-input input\", \r\n options: {\r\n type: 'money',\r\n options: { keyup: true },\r\n },\r\n },\r\n countChildren:{\r\n selector:\".children-count\", \r\n options: {\r\n type:\"count\", \r\n options:{ keyup: true, maxVal: 20},\r\n }\r\n },\r\n countMonth: {\r\n selector:\".months-count-children\", \r\n options: {\r\n type:\"count\", \r\n options:{ keyup:true, maxVal: 12 },\r\n }\r\n },\r\n childrenData:{\r\n selector:\".childrenDataTable\",\r\n options: {\r\n dynamic: true,\r\n appendButtonSelector: \".add-new-child-block\", \r\n keepOne: false,\r\n removeFirstEvent: () => $(\".childrenData\").show(),\r\n prepareTemplate($clone, blockPiece) {\r\n $clone.data('rowIndex', blockPiece.index + 1);\r\n\r\n var $comment = tools.findExternalOnly($clone, '.dynamic-list-comment input').keyup(function () {\r\n $(this).data('changed', '1');\r\n self.autoSubmit();\r\n }).focus(tools.selectAllText);\r\n $comment.val($clone.data('rowIndex') + \"-й ребёнок\");\r\n\r\n $clone.find('.checkboxrow').each(function (index, item) {\r\n let id = Math.floor(Math.random()*10e6);\r\n this.getElementsByTagName('input')[0].id += id ;\r\n let labels = this.getElementsByTagName('label');\r\n for (var i = 0; i < 2; ++i) {\r\n labels[i].setAttribute('for', labels[i].getAttribute('for') + id);\r\n }\r\n });\r\n\r\n return {block: $clone}\r\n },\r\n fields:{\r\n typeParent:{\r\n selector: \".dynamic-list-type-parents dropdown-select\",\r\n options: {\r\n options:{ keyup:true },\r\n }\r\n }, \r\n isAgeAbove: \".checkboxrow-type-children\",\r\n isDisabled: \".checkboxrow-type-healthy\", \r\n isStudent: \".checkboxrow-type-student\",\r\n comment: {\r\n selector: \".dynamic-list-comment input\",\r\n options: function ($clone) {\r\n return {\r\n type: 'text',\r\n defaultValue: \"1-й расчёт без НДФЛ\"\r\n }\r\n },\r\n },\r\n }\r\n }\r\n }\r\n }\r\n });\r\n\r\n this.addGroup('sumsRatesList', this.sumsRatesListCheck);\r\n this.calculationListCount = 0;\r\n\r\n function renderDiscountTable(discounts) {\r\n if (!discounts.length) {\r\n return \"\";\r\n }\r\n\r\n const table = document.createElement('table');\r\n table.classList.add('discounts-table');\r\n \r\n discounts = discounts.map(elem => {\r\n if(elem.input.data(\"month-count\") && !elem.isChanged) {\r\n elem.text += elem[elem.input.data(\"month-count\")] ? ` за ${tools.verboseCountingValue(elem[elem.input.data(\"month-count\")], [[\"месяц\", \"месяца\", \"месяцев\"]])}` : \"\";\r\n elem.isChanged = true;\r\n }\r\n\r\n return elem;\r\n });\r\n\r\n //if 3000 discounts activated, 500 discounts should be disableds\r\n if (discounts[0] && discounts[0].input.data('name') == \"threeThousand\" && discounts[1] && discounts[1].input.data('name') == \"fiveHundred\") {\r\n discounts[1].additionalText = discounts[1].input.data(\"empty\");\r\n }\r\n\r\n let inner = \"\";\r\n discounts.forEach(discount => {\r\n inner+=`\r\n ${discount.text}\r\n ${discount.valueInRubble}\r\n ${discount.additionalText ? \"\" + discount.additionalText + \"\" : \"\"}\r\n `\r\n });\r\n\r\n table.innerHTML = inner;\r\n return table.outerHTML;\r\n }\r\n\r\n function renderChildInfoBlock(childrenData) {\r\n if (!childrenData.length) {\r\n return '';\r\n }\r\n\r\n let resultDiv = \"\";\r\n childrenData.map((child) => {\r\n resultDiv+=`\r\n \r\n \r\n \r\n \r\n \r\n \r\n `\r\n });\r\n return resultDiv + '
${tools.getRoundedNumberInRubbles(child.discount)}${child.comment}

Родство – ${child.parent.toLowerCase()}

\r\n
    \r\n ${child.isDisabled ? \"
  • Инвалидность I или II группы, ребёнок-инвалид
  • \" : \"\"}\r\n ${child.isAgeAbove ? \"
  • Достиг 18-ти лет
  • \" : \"\"}\r\n ${child.isStudent ? \"
  • Учится на очной форме обучения, аспирант, ординатор, интерн, студент, курсант в возрасте до 24 лет
  • \" : \"\"}\r\n
\r\n
';\r\n }\r\n\r\n function renderLocalInfoTable(item) {\r\n return `
\r\n

${self.config.resultTitle}

${item.sumWithoutPit}

\r\n

Ставка налога

${item.rateText}

\r\n

Налог

${tools.getRoundedNumberInRubbles(item.tax)}

\r\n
`;\r\n }\r\n\r\n function processRenderedData(item) {\r\n const dataItem = {\r\n comment: item.comment, \r\n sumWithPit: tools.getLocaleSumInRubbles(item.sumWithPit), \r\n sumWithoutPit: tools.getLocaleSumInRubbles(item.sumWithoutPit), \r\n rate: item.rate,\r\n isSpecial: item.isSpecial,\r\n rateText: item.rateText,\r\n anyDiscountsActive: item.anyDiscountsActive,\r\n tax: item.tax,\r\n discounts: item.discounts,\r\n childrenData: item.childrenData,\r\n totalDiscountSum: tools.getLocaleSumInRubbles(item.totalDiscountSum),\r\n }\r\n dataItem.rateDescription = self.generateRateDescription(dataItem.sumWithPit, dataItem.rateText, item.anyDiscountsActive, dataItem.totalDiscountSum);\r\n dataItem.sumCalculatateDescription = generateDiscountLine(dataItem.sumWithPit, item);\r\n\r\n return dataItem;\r\n }\r\n\r\n this,this.addOutputField(\"#without_pit_tab-results .signle-item .local-result\", \"infoTables\", { \r\n render: function(infoTable) {\r\n return renderLocalInfoTable(processRenderedData(infoTable[0]));\r\n }, \r\n html: true\r\n });\r\n\r\n this.addOutputField(\".results .items\", \"infoTables\", {render: function(infoTables) {\r\n function renderInfoItem(item) {\r\n let inner = `
\r\n
\r\n

${item.comment}

\r\n

${item.rateDescription}

\r\n
\r\n ${renderLocalInfoTable(item)}\r\n ${renderDiscountTable(item.discounts)}\r\n ${renderChildInfoBlock(item.childrenData)}\r\n
\r\n
\r\n

НДФЛ = ${generateDiscountLine(item.sumWithPit, item)}

\r\n

${self.config.resultTitle} = ${item.sumWithPit} − ${self.getLocalRoundedSumInRubbles(item.tax)} = ${item.sumWithoutPit}

\r\n
\r\n

развернутьсвернуть

\r\n
\r\n
`\r\n\r\n return inner;\r\n }\r\n\r\n var resultDiv = document.createElement('div');\r\n \r\n self.detalization = [];\r\n resultDiv.innerHTML = infoTables.map(function (item) { \r\n const dataItem = processRenderedData(item);\r\n const infoItem = renderInfoItem(dataItem);\r\n \r\n dataItem.tax = tools.getRoundedNumberInRubbles(dataItem.tax);\r\n self.detalization.push(dataItem);\r\n\r\n return infoItem;\r\n }).join(\"\");\r\n \r\n return resultDiv;\r\n }, \r\n html:\"\"\r\n });\r\n\r\n this.addOutputField(\".signle-item\", \"infoTables\", {\r\n type: \"conditionalBlock\",\r\n render: (x) => x.length <= 1, \r\n alternativeBlock: \".results\"\r\n });\r\n \r\n this.addOutputField(\".common-rate\", \"infoTables\", {\r\n type: \"conditionalBlock\",\r\n render: (x) => !x[0].isSpecial, \r\n alternativeBlock: \".special-rate\"\r\n });\r\n\r\n this.addOutputField(\".discounts-table\", \"infoTables\", {render: function(x) {\r\n return renderDiscountTable(x[0].discounts);\r\n }, \r\n html:\"\"});\r\n\r\n this.addOutputField(\".child-info-block\", \"infoTables\", {render: function(x) {\r\n return renderChildInfoBlock(x[0].childrenData)\r\n }, \r\n html:\"\"});\r\n\r\n function generateDiscountLine(sumWithPit, data) {\r\n let discounts = data.discounts;\r\n let discountsLine = \"\";\r\n const rateObj = getRate(data.rate);\r\n discounts.filter(discount => discount.value > 0).forEach(({valueInRubble}) => discountsLine += \" − \" + valueInRubble)\r\n return `${discounts.length > 0 || rateObj.isSpecial ? \"(\" : \"\"}${sumWithPit}${discountsLine}${rateObj.isSpecial ? ` − ${self.getLocalRoundedSumInRubbles(rateObj.data.min)}` : \"\"}${discounts.length > 0 || rateObj.isSpecial ? \")\" : \"\"} × ${rateObj.percent}%${rateObj.isSpecial ? ` + ${self.getLocalRoundedSumInRubbles(rateObj.data.sum)}` : \"\"} = ${tools.getLocaleSumInRubbles(data.tax)} = ${tools.getRoundedNumberInRubbles(data.tax)}`;\r\n }\r\n\r\n this.addOutputField(\".tax-value\", \"infoTables\", {render: function(x) {\r\n return generateDiscountLine((self.sumWithPit), x[0]);\r\n }, html:\"\"});\r\n\r\n this.loadDescription(false);\r\n }\r\n\r\n generateExportObject() {\r\n let result = super.generateExportObject();\r\n result.type = \"withoutPit\";\r\n\r\n return result;\r\n }\r\n\r\n showResults() {\r\n super.showResults();\r\n if (!this.isCalculationCorrect) {\r\n this.sendStatisticMessage({message: \"WithoutNdfl\"});\r\n this.isCalculationCorrect = true;\r\n }\r\n\r\n if(this.sumsRatesList.length > this.calculationListCount){\r\n this.calculationListCount++;\r\n let goalParams = {\r\n message: \"Added_calc_WithoutNDFL\", \r\n args: {\r\n count: this.calculationListCount\r\n },\r\n prefix: \"\"\r\n };\r\n this.sendStatisticMessage(goalParams);\r\n }\r\n }\r\n\r\n afterParse() {\r\n super.afterParse();\r\n\r\n $(\".error-text .remark\").click(function() {\r\n $(this).closest(\".checkboxes\").find(\".five-hundred-tooltip\").addClass(\"active\")\r\n });\r\n }\r\n\r\n onReset() {\r\n super.onReset();\r\n const blockPiece = this.dynamicCalculation.getElements()[0];\r\n blockPiece.tree.childrenData.setCount({count: 0});\r\n\r\n //to destroy activeCheckboxInputObject\r\n const activeCheckboxInputObject = blockPiece.artifacts[1].value;\r\n for (let name in activeCheckboxInputObject) {\r\n activeCheckboxInputObject[name] = null;\r\n }\r\n\r\n $(\".discounts .description\").html(\"\");\r\n $(\".discounts-input\").val(\"\").hide();\r\n $(\".children-count, .months-count-children\").val(\"\");\r\n }\r\n\r\n processDiscountList(item) {\r\n let discounts = Object.keys(item.activeCheckboxInputObject).map((name) => ({ name, input: item.activeCheckboxInputObject[name] }))\r\n .filter(({input}) => input !== null && (input.val() !== \"\" && (input.val() !== \"0\" || input.data('showempty')))) //delete checkbox if input value == ''\r\n .sort((elem1, elem2) => +elem1.input.data(\"index\") < +elem2.input.data(\"index\") ? -1: 1 )\r\n .map(({name, input}) => ({\r\n text: name, \r\n value: tools.parseLocaleFloat(input.val()), \r\n input\r\n }))\r\n .map(({text, value, input}) => (\r\n {text, \r\n value, \r\n input, \r\n countMonth: item.countMonth, \r\n countMonth3000: item.countMonth3000, \r\n countMonth500: item.countMonth500, \r\n valueInRubble: tools.getLocaleSumInRubbles(value)})\r\n );\r\n\r\n discounts = discounts.map(elem => {\r\n if(elem && !elem.input.data(\"month-count\"))\r\n return elem\r\n else if(elem && elem[elem.input.data(\"month-count\")] > 0) {\r\n elem.value = elem.value * elem[elem.input.data(\"month-count\")];\r\n elem.valueInRubble = tools.getLocaleSumInRubbles(elem.value);\r\n\r\n return elem;\r\n }\r\n }).filter(elem => elem);\r\n\r\n let sumWithPitAfterDiscount = item.sumInput;\r\n let totalDiscountSum = 0;\r\n if (item.rate.value == 131 || item.rate.value == 132 || getRate(item.rate.value).isSpecial) {\r\n discounts.forEach(elem => {\r\n sumWithPitAfterDiscount -= elem.value;\r\n totalDiscountSum += elem.value;\r\n });\r\n } else { //if rate isn't 13, destroy discounts\r\n discounts = [];\r\n }\r\n\r\n return [discounts, sumWithPitAfterDiscount, totalDiscountSum];\r\n }\r\n\r\n calculate(params) {\r\n this.sumsRatesList = this.sumsRatesList || [];\r\n this.sumsRatesList = this.sumsRatesList.filter((_, index) => this.ignoreCalculationList.indexOf(index) == -1) || []; //ignore calculations with error\r\n this.hasSpecialRateCalculation = false;\r\n this.hasCommonCalculation = false;\r\n this.hasAnyDiscounts = false;\r\n\r\n if (this.sumsRatesList.filter(el=>el.sumInput).length == 0)\r\n return;\r\n\r\n this.infoTables = this.sumsRatesList.map((item) => {\r\n let savedSumWithPit = item.sumInput;\r\n\r\n item.countChildren = item.countChildren || 0;\r\n item.hiddenChildrenInput.val(\"\");\r\n let childrenDiscountValue = 0;\r\n let childrenData = [];\r\n\r\n item.hiddenChildrenInput.closest(\".checkboxes\").find(\".month-count-block\").show();\r\n const limitChildrenErrorBlock = item.hiddenChildrenInput.closest(\".childrenData\").find(\".limit-error\"); \r\n limitChildrenErrorBlock.hide();\r\n\r\n if (item.childrenCheckbox && item.countChildren && (item.countMonth <= 11 || item.sumInput <= 450_000)) {\r\n childrenData = (item.childrenData || []).map((childInfo, index) => {\r\n let currentDiscount = 0;\r\n if(!childInfo.isAgeAbove || childInfo.isStudent) {\r\n if (childInfo.typeParent.value == \"parent\" || childInfo.typeParent.value == \"guardian\") {\r\n currentDiscount = index < 2 ? index == 0 ? 1400 : 2800 : 6000; //for first and second child or for third and next children\r\n } else {\r\n currentDiscount = index < 2 ? index == 0 ? 2800 : 5600 : 12000; //for first and second child or for third and next children\r\n }\r\n\r\n if(childInfo.isDisabled) {\r\n switch(childInfo.typeParent.value) {\r\n case 'parent':\r\n case 'guardian': \r\n currentDiscount += 12000;\r\n break;\r\n case 'sole-parent': \r\n case 'sole-guardian': \r\n currentDiscount += 24000;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n childrenDiscountValue += currentDiscount;\r\n return {\r\n parent: childInfo.typeParent.text, \r\n isAgeAbove: childInfo.isAgeAbove,\r\n isDisabled: childInfo.isDisabled, \r\n isStudent: childInfo.isStudent,\r\n comment: childInfo.comment,\r\n discount: currentDiscount, \r\n discountInRubble: tools.getLocaleSumInRubbles(currentDiscount)\r\n }\r\n });\r\n item.hiddenChildrenInput.val(childrenDiscountValue); \r\n } else if(item.countMonth == 12 && item.sumInput > 450_000) {\r\n limitChildrenErrorBlock.show();\r\n } \r\n\r\n let [discounts, sumWithPitAfterDiscount, totalDiscountSum] = this.processDiscountList(item);\r\n const rateObj = getRate(item.rate.value);\r\n sumWithPitAfterDiscount = Math.max(sumWithPitAfterDiscount, 0);\r\n let anyDiscountsActive = discounts.length > 1 && totalDiscountSum > 0;\r\n this.hasAnyDiscounts = this.hasAnyDiscounts || discounts.length;\r\n if(rateObj.isSpecial) {\r\n this.hasSpecialRateCalculation = true;\r\n } else {\r\n this.hasCommonCalculation = true; \r\n }\r\n\r\n let tax = rateObj.isSpecial \r\n ? (sumWithPitAfterDiscount - rateObj.data.min) * (rateObj.percent / 100) + rateObj.data.sum\r\n : sumWithPitAfterDiscount * (rateObj.percent / 100);\r\n let sumWithoutPit = Math.max(savedSumWithPit - tools.getRoundedNumber(tax), 0);\r\n \r\n return {\r\n comment: item.comment,\r\n sumWithoutPit,\r\n rate: item.rate.value,\r\n rateText: rateObj.rateText,\r\n isSpecial: rateObj.isSpecial,\r\n sumWithPit: savedSumWithPit,\r\n sumWithPitAfterDiscount,\r\n tax,\r\n discounts,\r\n anyDiscountsActive, \r\n childrenData,\r\n totalDiscountSum\r\n }\r\n });\r\n \r\n if (this.sumsRatesList.length == 1) {\r\n this.sumWithPit = tools.getLocaleSumInRubbles(this.infoTables[0].sumWithPit);\r\n this.rate = this.infoTables[0].rateText;\r\n this.sumWithoutPit = this.infoTables[0].sumWithoutPit;\r\n this.tax = this.infoTables[0].tax;\r\n this.rateDescription = this.generateRateDescription(this.sumWithPit, this.infoTables[0].rateText, this.infoTables[0].anyDiscountsActive, tools.getLocaleSumInRubbles(this.infoTables[0].totalDiscountSum));\r\n this.itemComment = this.infoTables[0].comment;\r\n }\r\n\r\n this.resultTax = this.infoTables.reduce(function(sum,item) {return sum + +tools.getRoundedNumber(item.tax);}, 0);\r\n this.resultSum = this.infoTables.reduce(function(sum,item) {return sum + +item.sumWithoutPit.toFixed(2);}, 0);\r\n\r\n return true;\r\n }\r\n\r\n renderError() {\r\n $(\".export-result\").addClass(\"disabled\");\r\n $(\".results, .signle-item\").hide();\r\n }\r\n\r\n beforeSubmit() {\r\n $(\".calc-div-results\").removeClass(\"empty\");\r\n $(\".export-result\").removeClass(\"disabled\");\r\n }\r\n}\r\n\r\nexport {WithoutPITCalculator}","import { PITCalculator, getRate } from './base.js'\r\n\r\nfunction getRateFormula(rateValue, sumWithoutPit) {\r\n const rateObj = getRate(rateValue);\r\n return !rateObj.isSpecial \r\n ? `${tools.getLocaleSumInRubbles(sumWithoutPit)} / (100% − ${rateObj.percent}%)`\r\n : `(${tools.getLocaleSumInRubbles(sumWithoutPit)} − ${tools.getRoundedNumberInRubbles(rateObj.data.min)} × ${rateObj.percent}% + ${tools.getRoundedNumberInRubbles(rateObj.data.sum)}) / (100% − ${rateObj.percent}%)`;\r\n}\r\n\r\nclass WithPITCalculator extends PITCalculator{\r\n autoKey() {\r\n return '2';\r\n }\r\n initialize() {\r\n super.initialize();\r\n let self = this;\r\n \r\n this.calcSelector = \"#withPitTable\";\r\n\r\n this.config = {\r\n resultTitle: \"Общая сумма, включая НДФЛ\",\r\n resultText: \"Рассчитать НДФЛ\",\r\n inputTitle: \"сумма за вычетом НДФЛ\",\r\n ndflTitle: \"Сумма налога\"\r\n }\r\n\r\n this.addInputField(this.calcSelector, 'sumsRatesList', {\r\n dynamic: true,\r\n appendButtonSelector: \".addNewRowWithPit\",\r\n removeSelector: \".dynamic-list-row-remove a\",\r\n keepOne: true,\r\n ignoreForEmpty: true,\r\n prepareTemplate: function ($clone, blockPiece) {\r\n $clone.data('rowIndex', blockPiece.index + 1);\r\n \r\n var $comment = $clone.find('.dynamic-list-comment input').keyup(function () {\r\n $(this).data('changed', '1');\r\n self.autoSubmit();\r\n }).focus(tools.selectAllText);\r\n $comment.val($clone.data('rowIndex') + $comment.val());\r\n\r\n return { block: $clone, artifacts: { from: self.calcSelector } }\r\n }, \r\n fields: {\r\n sumInput:{\r\n selector:\".sum-without-pit-input input\",\r\n options: function () {\r\n return {\r\n type: 'money',\r\n options: { keyup: true },\r\n errors: []\r\n }\r\n },\r\n },\r\n rate:{\r\n selector:\".percent-rate-input dropdown-select\",\r\n }, \r\n comment: {\r\n selector: \".dynamic-list-comment input\",\r\n options: {\r\n type: 'text',\r\n defaultValue: \"1-й расчёт\"\r\n },\r\n },\r\n }\r\n });\r\n \r\n this.addGroup('sumsRatesList', this.sumsRatesListCheck);\r\n this.calculationListCount = 0;\r\n\r\n function renderLocalInfoTable(item) {\r\n return `
\r\n

${self.config.resultTitle}

${item.sumWithPit}

\r\n

Ставка налога

${item.rateText}

\r\n

Налог

${tools.getRoundedNumberInRubbles(item.tax)}

\r\n
`;\r\n }\r\n\r\n function processRenderedData(item) {\r\n const dataRow = {\r\n comment: item.comment, \r\n sumWithoutPit: tools.getLocaleSumInRubbles(item.sumWithoutPit), \r\n sumWithPit: tools.getLocaleSumInRubbles(item.sumWithPit),\r\n rate: item.rate,\r\n tax: item.tax, \r\n rateText: item.rateText,\r\n isSpecial: item.isSpecial\r\n }\r\n dataRow.sumCalculatateDescription = getRateFormula(item.rate, item.sumWithoutPit);\r\n dataRow.taxCalculation = `${dataRow.sumWithPit} − ${dataRow.sumWithoutPit} = ${tools.getLocaleSumInRubbles(dataRow.tax)} = ${self.getLocalRoundedSumInRubbles(dataRow.tax)}`;\r\n dataRow.rateDescription = self.generateRateDescription(dataRow.sumWithoutPit, dataRow.rateText)\r\n\r\n return dataRow;\r\n }\r\n\r\n this,this.addOutputField(\"#with_pit_tab-results .signle-item .local-result\", \"infoTables\", { \r\n render: function(infoTable) {\r\n return renderLocalInfoTable(processRenderedData(infoTable[0]));\r\n }, \r\n html: true\r\n });\r\n\r\n this.addOutputField(\".results .items\", \"infoTables\", {render: function(infoTables) {\r\n function renderInfoItem(dataRow) {\r\n return `
\r\n
\r\n

${dataRow.comment}

\r\n

${dataRow.rateDescription}

\r\n
\r\n ${renderLocalInfoTable(dataRow)}\r\n
\r\n
\r\n

НДФЛ = ${dataRow.taxCalculation}

\r\n

${self.config.resultTitle} = ${dataRow.sumCalculatateDescription} = ${dataRow.sumWithPit}

\r\n
\r\n

развернутьсвернуть

\r\n
\r\n
`\r\n }\r\n\r\n self.detalization = [];\r\n var resultDiv = document.createElement('div');\r\n resultDiv.innerHTML = infoTables.map(function (item) { \r\n const dataRow = processRenderedData(item)\r\n const infoItem = renderInfoItem(dataRow);\r\n\r\n dataRow.tax = tools.getRoundedNumberInRubbles(dataRow.tax);\r\n self.detalization.push(dataRow);\r\n\r\n return infoItem;\r\n }).join(\"\");\r\n\r\n return resultDiv;\r\n }, \r\n html:\"\"\r\n });\r\n \r\n this.addOutputField(\".signle-item\", \"infoTables\", {\r\n type: \"conditionalBlock\",\r\n render: (x) => x.length <= 1, \r\n alternativeBlock: \".results\"\r\n });\r\n\r\n this.addOutputField(\".common-rate\", \"isSpecial\", {\r\n type: \"conditionalBlock\",\r\n render: (x) => !x, \r\n alternativeBlock: \".special-rate\"\r\n });\r\n }\r\n\r\n generateExportObject() {\r\n let result = super.generateExportObject();\r\n result.type = \"withPit\";\r\n result.render.infoTables_text = \"\";\r\n\r\n return result;\r\n }\r\n\r\n showResults() {\r\n super.showResults();\r\n if (!this.isCalculationCorrect) {\r\n this.sendStatisticMessage({message: \"Calculation_WithNdfl\", prefix: \"\"});\r\n this.isCalculationCorrect = true;\r\n }\r\n\r\n if(this.sumsRatesList.length > this.calculationListCount){\r\n this.calculationListCount++;\r\n let goalParams = {\r\n message: \"Added_calc_WithNDFL\", \r\n args: {\r\n count: this.calculationListCount\r\n },\r\n prefix: \"\"\r\n };\r\n this.sendStatisticMessage(goalParams);\r\n }\r\n }\r\n \r\n calculate(params) {\r\n this.infoTables = [];\r\n this.sumsRatesList = this.sumsRatesList.filter((_, index) => this.ignoreCalculationList.indexOf(index) == -1) || [];\r\n this.hasSpecialRateCalculation = false;\r\n this.hasCommonCalculation = false;\r\n\r\n if (this.sumsRatesList.filter(el=>el.sumInput).length == 0)\r\n return false;\r\n\r\n this.infoTables = this.sumsRatesList.map((item) =>{\r\n let sumWithoutPit = item.sumInput;\r\n let rate = item.rate.value;\r\n const rateObj = getRate(rate);\r\n let sumWithPit = rateObj.isSpecial \r\n ? (sumWithoutPit - rateObj.data.min * (rateObj.percent / 100) + rateObj.data.sum) / ((100 - rateObj.percent) / 100)\r\n : sumWithoutPit / ((100 - rateObj.percent) / 100);\r\n let sumWithPitFormula = getRateFormula(rate, sumWithoutPit);\r\n let tax = (sumWithPit - sumWithoutPit);\r\n if(rateObj.isSpecial) {\r\n this.hasSpecialRateCalculation = true;\r\n } else {\r\n this.hasCommonCalculation = true; \r\n }\r\n \r\n return {\r\n comment: item.comment,\r\n sumWithoutPit,\r\n rate,\r\n rateText: rateObj.rateText,\r\n sumWithPit,\r\n sumWithPitFormula,\r\n isSpecial: rateObj.isSpecial,\r\n tax\r\n }\r\n });\r\n \r\n if (this.sumsRatesList.length == 1) {\r\n this.sumWithoutPit = this.infoTables[0].sumWithoutPit;\r\n this.rate = this.infoTables[0].rateText;\r\n this.isSpecial = this.infoTables[0].isSpecial;\r\n this.sumWithPit = this.infoTables[0].sumWithPit;\r\n this.sumWithPitFormula = this.infoTables[0].sumWithPitFormula;\r\n this.tax = this.infoTables[0].tax;\r\n this.rateDescription = this.generateRateDescription(tools.getLocaleSumInRubbles(this.sumWithoutPit), this.infoTables[0].rateText)\r\n this.itemComment = this.infoTables[0].comment;\r\n }\r\n\r\n this.resultTax = this.infoTables.reduce(function(sum,item){return sum + +tools.getRoundedNumber(item.tax);}, 0 );\r\n this.resultSum = this.infoTables.reduce(function(sum,item){return sum + +item.sumWithPit.toFixed(2);}, 0 );\r\n\r\n return true;\r\n }\r\n\r\n renderError() {\r\n $(\".export-result\").addClass(\"disabled\");\r\n $(\".signle-item\").hide();\r\n $(\".results\").hide();\r\n }\r\n\r\n beforeSubmit() {\r\n $(\".calc-div-results\").removeClass(\"empty\");\r\n $(\".export-result\").removeClass(\"disabled\");\r\n $(\".info-item\").show();\r\n }\r\n}\r\n\r\nexport {WithPITCalculator}","import {WithoutPITCalculator} from './components/calcWithoutPit.js'\r\nimport {WithPITCalculator} from './components/calcWithPit.js'\r\n\r\n$(function () {\r\n var withoutPITCalc = new WithoutPITCalculator();\r\n var withPITCalc = new WithPITCalculator();\r\n withPITCalc.isActive = false;\r\n $('.calc-div-input-tab').click(function (e) {\r\n var id = this.getAttribute(\"data-name\");\r\n $('.calc-div-input-tab').removeClass('selected');\r\n $('.calc-tab-content, .tab-results-page').addClass('hidden');\r\n $('.calc-div-results').removeClass('show-results');\r\n $('.export-result').removeClass('disabled')\r\n document.getElementById(id).classList.remove(\"hidden\");\r\n document.getElementById(id + '-results').classList.remove('hidden');\r\n e.target.classList.add(\"selected\");\r\n \r\n if (id == \"without_pit_tab\") {\r\n withoutPITCalc.isActive = true;\r\n withPITCalc.isActive = false;\r\n withoutPITCalc.showResults();\r\n withoutPITCalc.autoSubmit(null, true);\r\n } else {\r\n withoutPITCalc.isActive = false;\r\n withPITCalc.isActive = true;\r\n withPITCalc.showResults();\r\n withPITCalc.autoSubmit(null, true);\r\n }\r\n });\r\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":""}