let mixinPriceWithTaxField = { data() { return { price: null, priceWithTax: null, buyingPrice: null, buyingPriceWithTax: null, differentSupplierTaxRate: null, multiplyingFactor: null, priceByRefUnit: null, priceByRefUnitWithTax: null }; }, computed: { taxRateValue: function () { return $('#productfamily_taxRate').find('option[value="' + this.taxRate + '"]').data('tax-rate-value'); }, supplierTaxRateValue: function () { if ($('#productfamily_supplierTaxRate').find('option[value="' + this.supplierTaxRate + '"]').data('tax-rate-value') == 'inherited') { return this.taxRateValue; } else { return $('#productfamily_supplierTaxRate').find('option[value="' + this.supplierTaxRate + '"]').data('tax-rate-value'); } }, }, mounted: function () { }, methods: { /*changeTaxRate: function () { this.$emit('tax-rate-change'); this.changePriceWithTax(); },*/ changeBuyingPrice: function () { this.buyingPriceUpdate('buyingPrice'); }, changeBuyingPriceWithTax: function () { this.buyingPriceUpdate('buyingPriceWithTax'); }, changePrice: function () { this.priceUpdate('price'); this.setMultiplyingFactor(); }, changePriceWithTax: function () { this.priceUpdate('priceWithTax'); this.setMultiplyingFactor(); }, priceUpdate: function (priceType) { if (priceType == 'priceWithTax' && this.price) { this.price = parseFloat(this.price.replace(',', '.')).toFixed(3); this.priceWithTax = getPriceWithTax(this.price, this.taxRateValue); } else if (this.priceWithTax) { if (typeof this.priceWithTax != "number") { this.priceWithTax = parseFloat(this.priceWithTax.replace(',', '.')); } this.priceWithTax = this.priceWithTax.toFixed(2); this.price = getPrice(this.priceWithTax, this.taxRateValue); } this.priceByRefUnitUpdate(); }, buyingPriceUpdate: function (priceType) { if (priceType == 'buyingPriceWithTax' && this.buyingPrice) { this.buyingPrice = parseFloat(this.buyingPrice.replace(',', '.')).toFixed(3); this.buyingPriceWithTax = getPriceWithTax(this.buyingPrice, this.supplierTaxRateValue); } else if (this.buyingPriceWithTax) { this.buyingPriceWithTax = parseFloat(this.buyingPriceWithTax.replace(',', '.')).toFixed(2); this.buyingPrice = getPrice(this.buyingPriceWithTax, this.supplierTaxRateValue); } this.setMultiplyingFactor(); this.priceByRefUnitUpdate(); }, updateMultiplyingFactor: function () { this.priceWithTax = this.buyingPriceValue * this.multiplyingFactor; this.priceUpdate('price'); }, setMultiplyingFactor: function () { if (this.priceWithTax || this.buyingPrice) { this.multiplyingFactor = parseFloat(this.priceWithTaxValue / this.buyingPriceValue).toFixed(3); } }, priceByRefUnitUpdate: function () { if (this.unitCoefficient && this.quantityValue) { this.priceByRefUnit = parseFloat((this.priceValue / this.quantityValue) * this.unitCoefficient).toFixed(2); this.priceByRefUnitWithTax = parseFloat((this.priceWithTaxValue / this.quantityValue) * this.unitCoefficient).toFixed(2); } } }, watch: {} }; let mixinUnit = { data() { return Object.assign( { quantity: null, unit: null }, window.mixinUnitValues); }, computed: { unitCoefficient: function () { if (this.unit) { unitCoefficient = $('#productfamily_unit').find('option[value="' + this.unit + '"]').data('coefficient'); return unitCoefficient; } else { return 0; } }, unitReference: function () { if (this.unit) { unitRef = $('#productfamily_unit').find('option[value="' + this.unit + '"]').data('unit-reference'); return unitRef; } else { return ''; } } } }; let mixinTemplate = { data() { return { templateRender: null, } }, render(h) { if (!this.templateRender) { return h('div', 'loading...'); } else { // If there is a template, I'll show it return this.templateRender(); } }, watch: { // Every time the template prop changes, I recompile it to update the DOM template: { immediate: true, // makes the watcher fire on first render, too. handler() { log(this.template); if (this.template) { var res = Vue.compile(this.template); this.templateRender = res.render; // staticRenderFns belong into $options, // appearantly this.$options.staticRenderFns = [] // clean the cache of static elements // this is a cache with the results from the staticRenderFns this._staticTrees = [] // Fill it with the new staticRenderFns for (var i in res.staticRenderFns) { //staticRenderFns.push(res.staticRenderFns[i]); this.$options.staticRenderFns.push(res.staticRenderFns[i]) } } } } } }