{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./wwwroot/calc/calc_pit_v1/components/base.js","webpack:///./wwwroot/calc/calc_pit_v1/components/calcWithoutPit.js","webpack:///./wwwroot/calc/calc_pit_v1/components/calcWithPit.js","webpack:///./wwwroot/calc/calc_pit_v1/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","PITCalculatorV1","_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","specialRateValue","table","$table","rows","tools","findExternalOnly","data","addClass","removeClass","attr","tooltipButtonClicked","tooltipClose","result","detalization","options","valid","ignoreCalculationList","tree","sumsRatesList","map","block","index","sumInput","elem","getValue","from","artifacts","push","show","fiveHundredDiscountInput","fiveHundredErrorBlock","threeThousandCheckbox","countMonth3000","val","fiveHundredCheckbox","countMonth500","x","getLocaleSumInRubbles","getRoundedNumber","Calculator","WithoutPITCalculator","_PITCalculatorV","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","isSumBigSalary","rateText","sumWithPitAfterCalculation","sumWithPitAfterDiscount","sumBigSalary","generateRateDescription","sumCalculatateDescription","dispalayTax","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","html","each","getElementsByTagName","id","labels","setAttribute","getAttribute","change","$discountBlock","$inputBlock","prop","first","discountsBlock","$discountOrdynaryTitle","$discountBigSalaryTitle","monthCount","childrenDynamic","childrenCount","count","getElements","setCount","childrenDynamicLength","countChildren","hiddenChildrenInput","selector","type","errors","defaultValue","maxVal","childrenCheckbox","socialCheckbox","materialCheckbox","professionalCheckbox","materialDiscountInput","professionalDiscountInput","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","params","_this","_","indexOf","hasSpecialRateCalculation","hasCommonCalculation","hasAnyDiscounts","el","savedSumWithPit","childrenDiscountValue","limitChildrenErrorBlock","childInfo","currentDiscount","discountInRubble","_this$processDiscount2","_slicedToArray","processDiscountList","max","itemComment","resultTax","reduce","sum","resultSum","toFixed","WithPITCalculator","dataRow","taxCalculation","infoTables_text","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_v1/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 = 1176);\n","import { Calculator, ShowErrorWay } from \"../../common/calculator\";\r\nimport {fields} from \"../../common/basic_fields.js\";\r\n\r\nclass PITCalculatorV1 extends Calculator{\r\n code() { return \"pit_v1\"; }\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) =>{\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 == specialRateValue ? \"прогрессивная (5 млн. облагаются по ставке – 13%, свыше 5 млн. – 15%)\" : `${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 self = this;\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 block.sumInput.elem.closest(\".dynamic-list-sum-rate\").find(\".rate-error\").hide();\r\n if(block.sumInput.getValue() && \r\n (block.sumInput.getValue() < 5000000 && block.from == \"#withoutPitTable\" || block.sumInput.getValue() < 4350000 \r\n && block.from != \"#withtPitTable\") && block.rate.getValue().value == specialRateValue) {\r\n result.artifacts.ignoreCalculationList.push(index);\r\n block.sumInput.elem.closest(\".dynamic-list-sum-rate\").find(\".rate-error\").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\nconst specialRateValue = \"13 и 15\";\r\nexport {PITCalculatorV1, specialRateValue}\r\n\r\n\r\n","import { PITCalculatorV1, specialRateValue } from './base.js';\r\nclass WithoutPITCalculator extends PITCalculatorV1{\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, .discounts .title-big-salary\").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 discountsBlock.show();\r\n\r\n const $discountOrdynaryTitle = $clone.find(\".discounts .title\");\r\n const $discountBigSalaryTitle = $clone.find(\".discounts .title-big-salary\");\r\n\r\n if (this.value == specialRateValue) {\r\n $discountBigSalaryTitle.show();\r\n $discountOrdynaryTitle.hide();\r\n } else if(this.value == 13){\r\n $discountBigSalaryTitle.hide();\r\n $discountOrdynaryTitle.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 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 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.rate}%

\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 isSumBigSalary: item.isSumBigSalary, \r\n rate: item.rate,\r\n rateText: item.rate + \"%\",\r\n anyDiscountsActive: item.anyDiscountsActive,\r\n tax: item.tax,\r\n discounts: item.discounts,\r\n childrenData: item.childrenData,\r\n sumWithPitAfterCalculation: tools.getLocaleSumInRubbles(item.sumWithPitAfterDiscount - 5000000),\r\n totalDiscountSum: tools.getLocaleSumInRubbles(item.totalDiscountSum),\r\n sumBigSalary: tools.getLocaleSumInRubbles(item.sumBigSalary)\r\n }\r\n dataItem.rateDescription = self.generateRateDescription(dataItem.sumWithPit, item.rate, item.anyDiscountsActive, dataItem.totalDiscountSum);\r\n dataItem.sumCalculatateDescription = generateDiscountLine(dataItem.sumWithPit, item, true);\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, true)}

\r\n ${item.isSumBigSalary ? \r\n `
\r\n

5 000 000,00 ₽ × 13% = 650 000 ₽

\r\n

${item.sumWithPitAfterCalculation} × 15% = ${item.sumBigSalary}

\r\n
` \r\n : \"\"\r\n }\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].isSumBigSalary, \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, dispalayTax) {\r\n let discounts = data.discounts;\r\n let discountsLine = \"\";\r\n\r\n discounts.filter(discount => discount.value > 0).forEach(({valueInRubble}) => discountsLine += \" − \" + valueInRubble)\r\n let result = \"\";\r\n if (!data.isSumBigSalary) {\r\n result += `${sumWithPit}${discountsLine}`\r\n if (discountsLine)\r\n result = `(${result})`;\r\n result += ` × ${data.rate == specialRateValue ? \"13\" : data.rate}%`;\r\n } else {\r\n result += `${self.getLocalRoundedSumInRubbles(5000000)} × 13% + (${sumWithPit}${discountsLine} − ${self.getLocalRoundedSumInRubbles(5000000)}) × 15%`;\r\n }\r\n\r\n result += dispalayTax ? ` = ${tools.getLocaleSumInRubbles(data.tax)} = ${tools.getRoundedNumberInRubbles(data.tax)}` : \"\";\r\n return result;\r\n }\r\n\r\n this.addOutputField(\".tax-value\", \"infoTables\", {render: function(x) {\r\n return generateDiscountLine((self.sumWithPit), x[0], true);\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 == 13 || item.rate.value == specialRateValue) {\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 <= 350000)) {\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 ? 1400 : 3000; //for first and second child or for third and next children\r\n } else { \r\n currentDiscount = index < 2 ? 2800 : 6000; //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 currentDiscount += 12000;\r\n break;\r\n case 'guardian': \r\n currentDiscount += 6000;\r\n break;\r\n case 'sole-parent': \r\n currentDiscount += 24000;\r\n break;\r\n case 'sole-guardian': \r\n currentDiscount += 12000;\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 > 350000) {\r\n limitChildrenErrorBlock.show();\r\n } \r\n\r\n let sumWithPit = item.sumInput;\r\n let [discounts, sumWithPitAfterDiscount, totalDiscountSum] = this.processDiscountList(item);\r\n\r\n sumWithPitAfterDiscount = Math.max(sumWithPitAfterDiscount, 0);\r\n let sumBigSalary = 0;\r\n let isSumBigSalary = false;\r\n if (item.rate.value == specialRateValue && sumWithPitAfterDiscount >= 5000000) {\r\n sumBigSalary = Math.max(sumWithPitAfterDiscount - 5000000, 0) * 0.15;\r\n isSumBigSalary = true;\r\n }\r\n \r\n sumWithPit = isSumBigSalary && sumWithPitAfterDiscount >= 5000000 ? 5000000 : sumWithPitAfterDiscount;\r\n let anyDiscountsActive = discounts.length > 1 && totalDiscountSum > 0;\r\n this.hasAnyDiscounts = this.hasAnyDiscounts || discounts.length;\r\n let rate = item.rate.value == specialRateValue ? 13: item.rate.value;\r\n if(isSumBigSalary) {\r\n this.hasSpecialRateCalculation = true;\r\n } else {\r\n this.hasCommonCalculation = true; \r\n }\r\n\r\n let tax = sumWithPit * (rate / 100) + sumBigSalary;\r\n let sumWithoutPit = Math.max(savedSumWithPit - tools.getRoundedNumber(tax), 0);\r\n \r\n rate = item.rate.value;\r\n return {\r\n comment: item.comment,\r\n sumWithoutPit,\r\n rate,\r\n sumWithPit: savedSumWithPit,\r\n sumWithPitAfterDiscount,\r\n tax,\r\n discounts,\r\n anyDiscountsActive, \r\n isSumBigSalary,\r\n sumBigSalary,\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].rate;\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.rate, 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 { PITCalculatorV1, specialRateValue } from './base.js'\r\n\r\nclass WithPITCalculator extends PITCalculatorV1{\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.rate}%

\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 rateText: item.rate + \"%\",\r\n tax: item.tax, \r\n }\r\n dataRow.sumCalculatateDescription = dataRow.rate !== specialRateValue ? `${dataRow.sumWithoutPit} / (100% − ${dataRow.rate}%)` : `(${dataRow.sumWithoutPit} − ${tools.getRoundedNumberInRubbles(5000000)} × (15% - 13%)) / (100% − 15%)`\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.rate)\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\", \"rate\", {\r\n type: \"conditionalBlock\",\r\n render: (x) => x !== specialRateValue, \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 let sumWithPit = rate == specialRateValue ? (sumWithoutPit - 5000000 * 0.02) / 0.85 : sumWithoutPit / ((100 - rate) / 100);\r\n let tax = (sumWithPit - sumWithoutPit);\r\n if(rate == specialRateValue) {\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 sumWithPit,\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].rate;\r\n this.sumWithPit = this.infoTables[0].sumWithPit;\r\n this.tax = this.infoTables[0].tax;\r\n this.rateDescription = this.generateRateDescription(tools.getLocaleSumInRubbles(this.sumWithoutPit), this.rate)\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 {\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":""}