| Current Path : /var/www/homesaver/www/bitrix/js/catalog/product-calculator/dist/ |
| Current File : /var/www/homesaver/www/bitrix/js/catalog/product-calculator/dist/product.calculator.bundle.js.map |
{"version":3,"file":"product.calculator.bundle.js","sources":["../src/js/discount-type.js","../src/js/field-storage.js","../src/js/strategy/tax-for-price-strategy.js","../src/js/product-calculator.js","../src/js/strategy/tax-for-sum-strategy.js"],"sourcesContent":["export type DiscountTypes = DiscountType.UNDEFINED | DiscountType.MONETARY | DiscountType.PERCENTAGE;\n\nexport class DiscountType\n{\n\tstatic UNDEFINED = 0;\n\tstatic MONETARY = 1;\n\tstatic PERCENTAGE = 2;\n}","import {Runtime, Type} from 'main.core';\nimport type {FieldScheme} from './field-scheme';\nimport type {DiscountTypes} from './discount-type';\nimport {DiscountType} from './discount-type';\nimport {ProductCalculator} from \"catalog.product-calculator\";\n\nconst initialFields = {\n\tQUANTITY: 1,\n\tPRICE: 0,\n\tPRICE_EXCLUSIVE: 0,\n\tPRICE_NETTO: 0,\n\tPRICE_BRUTTO: 0,\n\tCUSTOMIZED: 'N',\n\tDISCOUNT_TYPE_ID: DiscountType.UNDEFINED,\n\tDISCOUNT_RATE: 0,\n\tDISCOUNT_SUM: 0,\n\tDISCOUNT_ROW: 0,\n\tTAX_INCLUDED: 'N',\n\tTAX_RATE: 0,\n\tTAX_SUM: 0,\n\tSUM: 0\n};\n\nexport class FieldStorage\n{\n\tfields: FieldScheme;\n\n\tconstructor(fields: FieldScheme, calculator: ProductCalculator)\n\t{\n\t\tthis.fields = {...initialFields};\n\n\t\tif (Type.isPlainObject(fields))\n\t\t{\n\t\t\tthis.fields = {...this.fields, ...fields};\n\t\t}\n\n\t\tthis.calculator = calculator;\n\t}\n\n\t#getPricePrecision()\n\t{\n\t\treturn this.calculator.getPricePrecision();\n\t}\n\n\t#getCommonPrecision()\n\t{\n\t\treturn this.calculator.getCommonPrecision();\n\t}\n\n\t#getQuantityPrecision()\n\t{\n\t\treturn this.calculator.getQuantityPrecision();\n\t}\n\n\tgetFields()\n\t{\n\t\treturn Runtime.clone(this.fields);\n\t}\n\n\tgetField(name: string, defaultValue)\n\t{\n\t\treturn this.fields.hasOwnProperty(name) ? this.fields[name] : defaultValue;\n\t}\n\n\tsetField(name: string, value): void\n\t{\n\t\tvalue = this.#validateValue(name, value);\n\t\tthis.fields[name] = value;\n\t}\n\n\t#validateValue(name: string, value): any\n\t{\n\t\tconst priceFields = [\n\t\t\t'PRICE',\n\t\t\t'PRICE_EXCLUSIVE',\n\t\t\t'PRICE_NETTO',\n\t\t\t'PRICE_BRUTTO',\n\t\t\t'DISCOUNT_SUM',\n\t\t\t'DISCOUNT_ROW',\n\t\t\t'TAX_SUM',\n\t\t\t'SUM'\n\t\t];\n\t\tif (name === 'DISCOUNT_TYPE_ID')\n\t\t{\n\t\t\tvalue =\n\t\t\t\t(value === DiscountType.PERCENTAGE || value === DiscountType.MONETARY)\n\t\t\t\t\t? value\n\t\t\t\t\t: DiscountType.UNDEFINED\n\t\t\t;\n\n\t\t}\n\t\telse if (name === 'QUANTITY')\n\t\t{\n\t\t\tvalue = FieldStorage.#round(value, this.#getQuantityPrecision());\n\t\t}\n\t\telse if (name === 'CUSTOMIZED' || name === 'TAX_INCLUDED' )\n\t\t{\n\t\t\tvalue = (value === 'Y') ? 'Y' : 'N';\n\t\t}\n\t\telse if (name === 'TAX_RATE')\n\t\t{\n\t\t\tif (Type.isNil(value))\n\t\t\t{\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tvalue = FieldStorage.#round(value, this.#getCommonPrecision());\n\t\t}\n\t\telse if (name === 'DISCOUNT_RATE')\n\t\t{\n\t\t\tvalue = FieldStorage.#round(value, this.#getCommonPrecision());\n\t\t}\n\t\telse if (priceFields.includes(name))\n\t\t{\n\t\t\tvalue = FieldStorage.#round(value, this.#getPricePrecision());\n\t\t}\n\n\t\treturn value;\n\t}\n\n\tstatic #round(value: number, precision = ProductCalculator.DEFAULT_PRECISION): number\n\t{\n\t\tconst factor = Math.pow(10, precision);\n\n\t\treturn Math.round(value * factor) / factor;\n\t}\n\n\tgetBasePrice(): number\n\t{\n\t\treturn this.getField('BASE_PRICE', 0);\n\t}\n\n\tgetPrice(): number\n\t{\n\t\treturn this.getField('PRICE', 0);\n\t}\n\n\tgetPriceExclusive(): number\n\t{\n\t\treturn this.getField('PRICE_EXCLUSIVE', 0);\n\t}\n\n\tgetPriceNetto(): number\n\t{\n\t\treturn this.getField('PRICE_NETTO', 0);\n\t}\n\n\tgetPriceBrutto(): number\n\t{\n\t\treturn this.getField('PRICE_BRUTTO', 0);\n\t}\n\n\tgetQuantity(): number\n\t{\n\t\treturn this.getField('QUANTITY', 1);\n\t}\n\n\tgetDiscountType(): DiscountTypes\n\t{\n\t\treturn this.getField('DISCOUNT_TYPE_ID', DiscountType.UNDEFINED);\n\t}\n\n\tisDiscountUndefined(): boolean\n\t{\n\t\treturn this.getDiscountType() === DiscountType.UNDEFINED;\n\t}\n\n\tisDiscountPercentage(): boolean\n\t{\n\t\treturn this.getDiscountType() === DiscountType.PERCENTAGE;\n\t}\n\n\tisDiscountMonetary(): boolean\n\t{\n\t\treturn this.getDiscountType() === DiscountType.MONETARY;\n\t}\n\n\tisDiscountHandmade(): boolean\n\t{\n\t\treturn this.isDiscountPercentage() || this.isDiscountMonetary();\n\t}\n\n\tgetDiscountRate(): number\n\t{\n\t\treturn this.getField('DISCOUNT_RATE', 0);\n\t}\n\n\tgetDiscountSum(): number\n\t{\n\t\treturn this.getField('DISCOUNT_SUM', 0);\n\t}\n\n\tgetDiscountRow(): number\n\t{\n\t\treturn this.getField('DISCOUNT_ROW', 0);\n\t}\n\n\tisEmptyDiscount(): boolean\n\t{\n\t\tif (this.isDiscountPercentage())\n\t\t{\n\t\t\treturn this.getDiscountRate() === 0;\n\t\t}\n\n\t\tif (this.isDiscountMonetary())\n\t\t{\n\t\t\treturn this.getDiscountSum() === 0;\n\t\t}\n\n\t\treturn this.isDiscountUndefined();\n\t}\n\n\tgetTaxIncluded(): 'Y' | 'N'\n\t{\n\t\treturn this.getField('TAX_INCLUDED', 'N');\n\t}\n\n\tisTaxIncluded(): boolean\n\t{\n\t\treturn this.getTaxIncluded() === 'Y';\n\t}\n\n\tgetTaxRate(): number\n\t{\n\t\treturn this.getField('TAX_RATE', 0);\n\t}\n\n\tgetTaxSum(): number\n\t{\n\t\treturn this.getField('TAX_SUM', 0);\n\t}\n\n\tgetSum(): number\n\t{\n\t\treturn this.getField('SUM', 0);\n\t}\n}","import type {DiscountTypes} from '../discount-type';\nimport {DiscountType} from '../discount-type';\nimport type {FieldScheme} from \"../field-scheme\";\nimport {FieldStorage} from '../field-storage';\nimport {ProductCalculator} from '../product-calculator';\n\nexport class TaxForPriceStrategy\n{\n\tcalculator: ProductCalculator = null;\n\n\tconstructor(productCalculator: ProductCalculator)\n\t{\n\t\tthis.calculator = productCalculator;\n\t}\n\n\tgetFieldStorage(): FieldStorage\n\t{\n\t\treturn new FieldStorage(this.calculator.getFields(), this.calculator);\n\t}\n\n\tgetPricePrecision()\n\t{\n\t\treturn this.calculator.getPricePrecision();\n\t}\n\n\tgetCommonPrecision()\n\t{\n\t\treturn this.calculator.getCommonPrecision();\n\t}\n\n\tgetQuantityPrecision()\n\t{\n\t\treturn this.calculator.getQuantityPrecision();\n\t}\n\n\tcalculateBasePrice(value: number): FieldScheme\n\t{\n\t\tif (value < 0)\n\t\t{\n\t\t\tthrow new Error('Price must be equal or greater than zero.')\n\t\t}\n\n\t\tconst fieldStorage = this.getFieldStorage();\n\n\t\tfieldStorage.setField('BASE_PRICE', value);\n\n\t\tif (fieldStorage.isTaxIncluded())\n\t\t{\n\t\t\tfieldStorage.setField('PRICE_BRUTTO', value);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tfieldStorage.setField('PRICE_NETTO', value);\n\t\t}\n\n\t\tthis.updatePrice(fieldStorage);\n\n\t\tthis.activateCustomized(fieldStorage);\n\n\t\treturn fieldStorage.getFields();\n\t}\n\n\tcalculatePrice(value: number): FieldScheme\n\t{\n\t\treturn this.calculateBasePrice(value);\n\t}\n\n\tcalculateQuantity(value: number): FieldScheme\n\t{\n\t\tif (value < 0)\n\t\t{\n\t\t\tthrow new Error('Quantity must be equal or greater than zero.')\n\t\t}\n\n\t\tconst fieldStorage = this.getFieldStorage();\n\t\tfieldStorage.setField('QUANTITY', value);\n\n\t\tthis.updateRowDiscount(fieldStorage);\n\t\tthis.updateTax(fieldStorage);\n\t\tthis.updateSum(fieldStorage);\n\n\t\treturn fieldStorage.getFields();\n\t}\n\n\tcalculateDiscount(value: number, fieldStorage: FieldStorage = null): FieldScheme\n\t{\n\t\tif (!fieldStorage)\n\t\t{\n\t\t\tfieldStorage = this.getFieldStorage();\n\t\t}\n\n\t\tif (value === 0.0)\n\t\t{\n\t\t\tthis.clearResultPrices(fieldStorage);\n\t\t}\n\t\telse if (fieldStorage.isDiscountPercentage())\n\t\t{\n\t\t\tfieldStorage.setField('DISCOUNT_RATE', value);\n\n\t\t\tthis.updateResultPrices(fieldStorage);\n\n\t\t\tfieldStorage.setField(\n\t\t\t\t'DISCOUNT_SUM',\n\t\t\t\tfieldStorage.getPriceNetto() - fieldStorage.getPriceExclusive()\n\t\t\t);\n\t\t}\n\t\telse if (fieldStorage.isDiscountMonetary())\n\t\t{\n\t\t\tfieldStorage.setField('DISCOUNT_SUM', value);\n\n\t\t\tthis.updateResultPrices(fieldStorage);\n\n\t\t\tfieldStorage.setField(\n\t\t\t\t'DISCOUNT_RATE',\n\t\t\t\tthis.calculateDiscountRate(\n\t\t\t\t\tfieldStorage.getPriceNetto(),\n\t\t\t\t\tfieldStorage.getPriceExclusive()\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\n\t\tthis.updateRowDiscount(fieldStorage);\n\t\tthis.updateTax(fieldStorage);\n\t\tthis.updateSum(fieldStorage);\n\n\t\tthis.activateCustomized(fieldStorage);\n\n\t\treturn fieldStorage.getFields();\n\t}\n\n\tcalculateDiscountType(value: DiscountTypes): FieldScheme\n\t{\n\t\tconst fieldStorage = this.getFieldStorage();\n\n\t\tfieldStorage.setField('DISCOUNT_TYPE_ID', value);\n\n\t\tthis.updateResultPrices(fieldStorage);\n\t\tthis.updateDiscount(fieldStorage);\n\t\tthis.updateRowDiscount(fieldStorage);\n\t\tthis.updateTax(fieldStorage);\n\t\tthis.updateSum(fieldStorage);\n\n\t\tthis.activateCustomized(fieldStorage);\n\n\t\treturn fieldStorage.getFields();\n\t}\n\n\tcalculateRowDiscount(value: number): FieldScheme\n\t{\n\t\tconst fieldStorage = this.getFieldStorage();\n\n\t\tfieldStorage.setField('DISCOUNT_ROW', value);\n\n\t\tif (value !== 0 && fieldStorage.getQuantity() === 0)\n\t\t{\n\t\t\tfieldStorage.setField('QUANTITY', 1);\n\t\t}\n\n\t\tfieldStorage.setField('DISCOUNT_TYPE_ID', DiscountType.MONETARY);\n\n\t\tif (value === 0 || fieldStorage.getQuantity() === 0)\n\t\t{\n\t\t\tfieldStorage.setField('DISCOUNT_SUM', 0);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tfieldStorage.setField(\n\t\t\t\t'DISCOUNT_SUM',\n\t\t\t\tfieldStorage.getDiscountRow() / fieldStorage.getQuantity()\n\t\t\t);\n\t\t}\n\n\t\tthis.updateResultPrices(fieldStorage);\n\n\t\tthis.updateDiscount(fieldStorage);\n\t\tthis.updateRowDiscount(fieldStorage);\n\t\tthis.updateTax(fieldStorage);\n\t\tthis.updateSum(fieldStorage);\n\n\t\tthis.activateCustomized(fieldStorage);\n\n\t\treturn fieldStorage.getFields();\n\t}\n\n\tcalculateTax(value: number): FieldScheme\n\t{\n\t\tconst fieldStorage = this.getFieldStorage();\n\t\tfieldStorage.setField('TAX_RATE', value);\n\n\t\tthis.updateBasePrices(fieldStorage);\n\t\tthis.updateResultPrices(fieldStorage);\n\n\t\tif (fieldStorage.isTaxIncluded())\n\t\t{\n\t\t\tthis.updateDiscount(fieldStorage);\n\t\t\tthis.updateRowDiscount(fieldStorage);\n\t\t}\n\n\t\tthis.updateTax(fieldStorage);\n\t\tthis.updateSum(fieldStorage);\n\n\t\tthis.activateCustomized(fieldStorage);\n\n\t\treturn fieldStorage.getFields();\n\t}\n\n\tcalculateTaxIncluded(value: 'Y' | 'N'): FieldScheme\n\t{\n\t\tconst fieldStorage = this.getFieldStorage();\n\n\t\tif (fieldStorage.getTaxIncluded() !== value)\n\t\t{\n\t\t\tfieldStorage.setField('TAX_INCLUDED', value);\n\n\t\t\tif (fieldStorage.isTaxIncluded())\n\t\t\t{\n\t\t\t\tfieldStorage.setField('PRICE_BRUTTO', fieldStorage.getPriceNetto());\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tfieldStorage.setField('PRICE_NETTO', fieldStorage.getPriceBrutto());\n\t\t\t}\n\t\t}\n\n\t\tthis.updatePrice(fieldStorage);\n\n\t\tthis.activateCustomized(fieldStorage);\n\n\t\treturn fieldStorage.getFields();\n\t}\n\n\tcalculateRowSum(value: number): FieldScheme\n\t{\n\t\tconst fieldStorage = this.getFieldStorage();\n\n\t\tfieldStorage.setField('SUM', value);\n\n\t\tif (fieldStorage.getQuantity() === 0)\n\t\t{\n\t\t\tfieldStorage.setField('QUANTITY', 1);\n\t\t}\n\n\t\tconst discountSum =\n\t\t\tfieldStorage.getPriceNetto()\n\t\t\t- (\n\t\t\t\tfieldStorage.getSum()\n\t\t\t\t/ (fieldStorage.getQuantity() * (1 + fieldStorage.getTaxRate() / 100))\n\t\t\t)\n\t\t;\n\n\t\tfieldStorage.setField('DISCOUNT_SUM', discountSum);\n\t\tfieldStorage.setField('DISCOUNT_TYPE_ID', DiscountType.MONETARY);\n\n\t\tif (fieldStorage.isEmptyDiscount())\n\t\t{\n\t\t\tthis.clearResultPrices(fieldStorage);\n\t\t}\n\t\telse if (fieldStorage.isDiscountHandmade())\n\t\t{\n\t\t\tthis.updateResultPrices(fieldStorage);\n\t\t}\n\n\t\tthis.updateDiscount(fieldStorage);\n\t\tthis.updateRowDiscount(fieldStorage);\n\t\tthis.updateTax(fieldStorage);\n\n\t\tthis.activateCustomized(fieldStorage);\n\n\t\treturn fieldStorage.getFields();\n\t}\n\n\tupdatePrice(fieldStorage: FieldStorage): void\n\t{\n\t\tthis.updateBasePrices(fieldStorage);\n\n\t\tif (fieldStorage.isEmptyDiscount())\n\t\t{\n\t\t\tthis.clearResultPrices(fieldStorage);\n\t\t}\n\t\telse if (fieldStorage.isDiscountHandmade())\n\t\t{\n\t\t\tthis.updateResultPrices(fieldStorage);\n\t\t}\n\n\t\tthis.updateDiscount(fieldStorage);\n\t\tthis.updateRowDiscount(fieldStorage);\n\t\tthis.updateTax(fieldStorage);\n\t\tthis.updateSum(fieldStorage);\n\t}\n\n\tclearResultPrices(fieldStorage: FieldStorage)\n\t{\n\t\tfieldStorage.setField('PRICE_EXCLUSIVE', fieldStorage.getPriceNetto());\n\t\tfieldStorage.setField('PRICE', fieldStorage.getPriceBrutto());\n\n\t\tfieldStorage.setField('DISCOUNT_RATE', 0.0);\n\t\tfieldStorage.setField('DISCOUNT_SUM', 0.0);\n\t}\n\n\tcalculatePriceWithoutDiscount(price: number, discount: number, discountType: DiscountTypes)\n\t{\n\t\tlet result = 0.0;\n\n\t\tswitch (discountType)\n\t\t{\n\t\t\tcase DiscountType.PERCENTAGE:\n\t\t\t\tresult = price - (price * discount / 100);\n\t\t\t\tbreak;\n\n\t\t\tcase DiscountType.MONETARY:\n\t\t\t\tresult = price - discount;\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tupdateBasePrices(fieldStorage: FieldStorage): void\n\t{\n\t\tif (fieldStorage.isTaxIncluded())\n\t\t{\n\t\t\tfieldStorage.setField(\n\t\t\t\t'PRICE_NETTO',\n\t\t\t\tthis.calculatePriceWithoutTax(fieldStorage.getPriceBrutto(), fieldStorage.getTaxRate())\n\t\t\t);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tfieldStorage.setField(\n\t\t\t\t'PRICE_BRUTTO',\n\t\t\t\tthis.calculatePriceWithTax(fieldStorage.getPriceNetto(), fieldStorage.getTaxRate())\n\t\t\t);\n\t\t}\n\t}\n\n\tupdateResultPrices(fieldStorage: FieldStorage): void\n\t{\n\t\t// price without tax\n\t\tlet exclusivePrice;\n\n\t\tif (fieldStorage.isDiscountPercentage())\n\t\t{\n\t\t\texclusivePrice = this.calculatePriceWithoutDiscount(\n\t\t\t\tfieldStorage.getPriceNetto(),\n\t\t\t\tfieldStorage.getDiscountRate(),\n\t\t\t\tDiscountType.PERCENTAGE\n\t\t\t);\n\t\t}\n\t\telse if (fieldStorage.isDiscountMonetary())\n\t\t{\n\t\t\texclusivePrice = this.calculatePriceWithoutDiscount(\n\t\t\t\tfieldStorage.getPriceNetto(),\n\t\t\t\tfieldStorage.getDiscountSum(),\n\t\t\t\tDiscountType.MONETARY\n\t\t\t);\n\t\t}\n\t\telse\n\t\t{\n\t\t\texclusivePrice = fieldStorage.getPriceExclusive();\n\t\t}\n\n\t\tfieldStorage.setField('PRICE_EXCLUSIVE', exclusivePrice);\n\t\tfieldStorage.setField(\n\t\t\t'PRICE',\n\t\t\tthis.calculatePriceWithTax(exclusivePrice, fieldStorage.getTaxRate())\n\t\t);\n\t}\n\n\tactivateCustomized(fieldStorage: FieldStorage): void\n\t{\n\t\tfieldStorage.setField('CUSTOMIZED', 'Y');\n\t}\n\n\tupdateDiscount(fieldStorage: FieldStorage): void\n\t{\n\t\tif (fieldStorage.isEmptyDiscount())\n\t\t{\n\t\t\tthis.clearResultPrices(fieldStorage);\n\t\t}\n\t\telse if (fieldStorage.isDiscountPercentage())\n\t\t{\n\t\t\tfieldStorage.setField(\n\t\t\t\t'DISCOUNT_SUM',\n\t\t\t\tfieldStorage.getPriceNetto() - fieldStorage.getPriceExclusive()\n\t\t\t);\n\t\t}\n\t\telse if (fieldStorage.isDiscountMonetary())\n\t\t{\n\t\t\tfieldStorage.setField(\n\t\t\t\t'DISCOUNT_RATE',\n\t\t\t\tthis.calculateDiscountRate(\n\t\t\t\t\tfieldStorage.getPriceNetto(),\n\t\t\t\t\tfieldStorage.getPriceNetto() - fieldStorage.getDiscountSum()\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\t}\n\n\tupdateRowDiscount(fieldStorage: FieldStorage): void\n\t{\n\t\tfieldStorage.setField(\n\t\t\t'DISCOUNT_ROW',\n\t\t\tfieldStorage.getDiscountSum() * fieldStorage.getQuantity()\n\t\t);\n\t}\n\n\tupdateTax(fieldStorage: FieldStorage): void\n\t{\n\t\tlet sum;\n\n\t\tif (fieldStorage.isTaxIncluded())\n\t\t{\n\t\t\tsum =\n\t\t\t\tfieldStorage.getPrice()\n\t\t\t\t* fieldStorage.getQuantity()\n\t\t\t\t* (1 - 1 / (1 + fieldStorage.getTaxRate() / 100))\n\t\t\t;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tsum =\n\t\t\t\tfieldStorage.getPriceExclusive()\n\t\t\t\t* fieldStorage.getQuantity()\n\t\t\t\t* (fieldStorage.getTaxRate() / 100)\n\t\t\t;\n\t\t}\n\n\t\tfieldStorage.setField('TAX_SUM', sum);\n\t}\n\n\tupdateSum(fieldStorage: FieldStorage): void\n\t{\n\t\tlet sum;\n\n\t\tif (fieldStorage.isTaxIncluded())\n\t\t{\n\t\t\tsum = fieldStorage.getPrice() * fieldStorage.getQuantity();\n\t\t}\n\t\telse\n\t\t{\n\t\t\tsum = this.calculatePriceWithTax(\n\t\t\t\tfieldStorage.getPriceExclusive() * fieldStorage.getQuantity(),\n\t\t\t\tfieldStorage.getTaxRate()\n\t\t\t);\n\t\t}\n\n\t\tfieldStorage.setField('SUM', sum);\n\t}\n\n\tcalculateDiscountRate(originalPrice: number, price: number): number\n\t{\n\t\tif (originalPrice === 0.0)\n\t\t{\n\t\t\treturn 0.0;\n\t\t}\n\n\t\tif (price === 0.0)\n\t\t{\n\t\t\treturn originalPrice > 0 ? 100.0 : -100.0;\n\t\t}\n\n\t\treturn (originalPrice - price) / originalPrice * 100;\n\t}\n\n\tcalculatePriceWithoutTax(price: number, taxRate: number)\n\t{\n\t\t// Tax is not included in price\n\t\treturn price / (1 + (taxRate / 100));\n\t}\n\n\tcalculatePriceWithTax(price: number, taxRate: number): number\n\t{\n\t\t// Tax is included in price\n\t\treturn price + price * taxRate / 100;\n\t}\n}\n","import type {FieldScheme} from './field-scheme';\nimport type {DiscountTypes} from './discount-type';\nimport {TaxForPriceStrategy} from './strategy/tax-for-price-strategy';\n\nexport class ProductCalculator\n{\n\t#fields: FieldScheme = {};\n\t#strategy: TaxForPriceStrategy = {};\n\t#settings = {};\n\n\tstatic DEFAULT_PRECISION: number = 2;\n\n\tconstructor(fields: FieldScheme = {}, settings = {})\n\t{\n\t\tthis.setFields(fields);\n\t\tthis.setSettings(settings);\n\t\tthis.setCalculationStrategy(new TaxForPriceStrategy(this));\n\t}\n\n\tsetField(name, value): ProductCalculator\n\t{\n\t\tthis.#fields[name] = value;\n\n\t\treturn this;\n\t}\n\n\tsetCalculationStrategy(strategy: TaxForPriceStrategy = {}): ProductCalculator\n\t{\n\t\tthis.#strategy = strategy;\n\n\t\treturn this;\n\t}\n\n\tsetFields(fields: FieldScheme): ProductCalculator\n\t{\n\t\tfor (const name in fields)\n\t\t{\n\t\t\tif (fields.hasOwnProperty(name))\n\t\t\t{\n\t\t\t\tthis.setField(name, fields[name]);\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t}\n\n\tgetFields(): FieldScheme\n\t{\n\t\treturn {...this.#fields};\n\t}\n\n\tsetSettings(settings = {}): ProductCalculator\n\t{\n\t\tthis.#settings = {...settings};\n\n\t\treturn this;\n\t}\n\n\tgetSettings(): {}\n\t{\n\t\treturn {...this.#settings};\n\t}\n\n\t#getSetting(name, defaultValue)\n\t{\n\t\treturn this.#settings.hasOwnProperty(name) ? this.#settings[name] : defaultValue;\n\t}\n\n\tgetPricePrecision()\n\t{\n\t\treturn this.#getSetting('pricePrecision', ProductCalculator.DEFAULT_PRECISION);\n\t}\n\n\tgetCommonPrecision()\n\t{\n\t\treturn this.#getSetting('commonPrecision', ProductCalculator.DEFAULT_PRECISION);\n\t}\n\n\tgetQuantityPrecision()\n\t{\n\t\treturn this.#getSetting('quantityPrecision', ProductCalculator.DEFAULT_PRECISION);\n\t}\n\n\tcalculateBasePrice(value: number): FieldScheme\n\t{\n\t\treturn this.#strategy.calculateBasePrice(value);\n\t}\n\n\tcalculatePrice(value: number): FieldScheme\n\t{\n\t\treturn this.#strategy.calculatePrice(value);\n\t}\n\n\tcalculateQuantity(value: number): FieldScheme\n\t{\n\t\treturn this.#strategy.calculateQuantity(value);\n\t}\n\n\tcalculateDiscount(value: number): FieldScheme\n\t{\n\t\treturn this.#strategy.calculateDiscount(value);\n\t}\n\n\tcalculateDiscountType(value: DiscountTypes): FieldScheme\n\t{\n\t\treturn this.#strategy.calculateDiscountType(value);\n\t}\n\n\tcalculateRowDiscount(value: number): FieldScheme\n\t{\n\t\treturn this.#strategy.calculateRowDiscount(value);\n\t}\n\n\tcalculateTax(value: number | null): FieldScheme\n\t{\n\t\treturn this.#strategy.calculateTax(value);\n\t}\n\n\tcalculateTaxIncluded(value: 'Y' | 'N'): FieldScheme\n\t{\n\t\treturn this.#strategy.calculateTaxIncluded(value);\n\t}\n\n\tcalculateRowSum(value: number): FieldScheme\n\t{\n\t\treturn this.#strategy.calculateRowSum(value);\n\t}\n}","import {TaxForPriceStrategy} from \"./tax-for-price-strategy\";\nimport {FieldStorage} from \"../field-storage\";\nimport {DiscountType} from \"../discount-type\";\n\nexport class TaxForSumStrategy extends TaxForPriceStrategy\n{\n\tcalculatePriceWithoutTax(price, taxRate)\n\t{\n\t\treturn price;\n\t}\n\n\tupdateResultPrices(fieldStorage: FieldStorage): void\n\t{\n\t\tlet exclusivePrice;\n\n\t\tif (fieldStorage.isDiscountPercentage())\n\t\t{\n\t\t\texclusivePrice = this.calculatePriceWithoutDiscount(\n\t\t\t\tfieldStorage.getPriceNetto(),\n\t\t\t\tfieldStorage.getDiscountRate(),\n\t\t\t\tDiscountType.PERCENTAGE\n\t\t\t);\n\t\t}\n\t\telse if (fieldStorage.isDiscountMonetary())\n\t\t{\n\t\t\texclusivePrice = this.calculatePriceWithoutDiscount(\n\t\t\t\tfieldStorage.getPriceNetto(),\n\t\t\t\tfieldStorage.getDiscountSum(),\n\t\t\t\tDiscountType.MONETARY\n\t\t\t);\n\t\t}\n\t\telse\n\t\t{\n\t\t\texclusivePrice = fieldStorage.getPriceExclusive();\n\t\t}\n\n\t\tfieldStorage.setField('PRICE_EXCLUSIVE', exclusivePrice);\n\t\t\n\t\tif (fieldStorage.isTaxIncluded())\n\t\t{\n\t\t\tfieldStorage.setField('PRICE', exclusivePrice);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tfieldStorage.setField(\n\t\t\t\t'PRICE',\n\t\t\t\tthis.calculatePriceWithTax(exclusivePrice, fieldStorage.getTaxRate())\n\t\t\t);\n\t\t}\n\t}\n}"],"names":["DiscountType","initialFields","QUANTITY","PRICE","PRICE_EXCLUSIVE","PRICE_NETTO","PRICE_BRUTTO","CUSTOMIZED","DISCOUNT_TYPE_ID","UNDEFINED","DISCOUNT_RATE","DISCOUNT_SUM","DISCOUNT_ROW","TAX_INCLUDED","TAX_RATE","TAX_SUM","SUM","FieldStorage","fields","calculator","Type","isPlainObject","Runtime","clone","name","defaultValue","hasOwnProperty","value","getField","getDiscountType","PERCENTAGE","MONETARY","isDiscountPercentage","isDiscountMonetary","getDiscountRate","getDiscountSum","isDiscountUndefined","getTaxIncluded","getPricePrecision","getCommonPrecision","getQuantityPrecision","priceFields","isNil","includes","precision","ProductCalculator","DEFAULT_PRECISION","factor","Math","pow","round","TaxForPriceStrategy","productCalculator","getFields","Error","fieldStorage","getFieldStorage","setField","isTaxIncluded","updatePrice","activateCustomized","calculateBasePrice","updateRowDiscount","updateTax","updateSum","clearResultPrices","updateResultPrices","getPriceNetto","getPriceExclusive","calculateDiscountRate","updateDiscount","getQuantity","getDiscountRow","updateBasePrices","getPriceBrutto","discountSum","getSum","getTaxRate","isEmptyDiscount","isDiscountHandmade","price","discount","discountType","result","calculatePriceWithoutTax","calculatePriceWithTax","exclusivePrice","calculatePriceWithoutDiscount","sum","getPrice","originalPrice","taxRate","settings","_classPrivateMethodInitSpec","setFields","setSettings","setCalculationStrategy","strategy","calculatePrice","calculateQuantity","calculateDiscount","calculateDiscountType","calculateRowDiscount","calculateTax","calculateTaxIncluded","calculateRowSum","TaxForSumStrategy"],"mappings":"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"}