foodbot-cart-calculations 1.0.2 → 1.0.3-dev.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/calculations.js +53 -6
- package/functions/pointsCalculation.js +3 -3
- package/functions/promotionCalculation.js +521 -402
- package/functions/taxCalculation.js +334 -185
- package/index.js +794 -2
- package/package.json +1 -1
|
@@ -54,30 +54,37 @@ function calculateTax2(cart, texSettings, taxType) {
|
|
|
54
54
|
cart.cartTotal = parseFloat(cart.cartTotal) + parseFloat(afterDiscount);
|
|
55
55
|
cart.cartTotal = parseFloat(cart.cartTotal).toFixed(2);
|
|
56
56
|
total = +element.item_price;
|
|
57
|
-
|
|
58
57
|
if (element.isPackage == 1) {
|
|
59
|
-
let result = await calculatePackageItemTax(cart, itemIndex, element, texSettings, afterDiscount,taxType);
|
|
58
|
+
let result = await calculatePackageItemTax(cart, itemIndex, element, texSettings, afterDiscount, taxType);
|
|
60
59
|
cart = result.cart;
|
|
61
60
|
element = result.element;
|
|
62
61
|
} else {
|
|
63
|
-
let result = await calculateItemTax(cart, itemIndex, element, texSettings, afterDiscount,taxType);
|
|
62
|
+
let result = await calculateItemTax(cart, itemIndex, element, texSettings, afterDiscount, taxType);
|
|
64
63
|
cart = result.cart;
|
|
65
64
|
element = result.element;
|
|
66
65
|
}
|
|
67
66
|
|
|
68
67
|
if (element.isPackage == 1) {
|
|
69
|
-
let result = await calculatePackageModiTax(cart, itemIndex, element, texSettings, afterDiscount,taxType);
|
|
68
|
+
let result = await calculatePackageModiTax(cart, itemIndex, element, texSettings, afterDiscount, taxType);
|
|
70
69
|
cart = result.cart;
|
|
71
70
|
element = result.element;
|
|
72
71
|
} else {
|
|
73
|
-
let result = await calculateModiTax(cart, itemIndex, element, texSettings, afterDiscount,taxType);
|
|
72
|
+
let result = await calculateModiTax(cart, itemIndex, element, texSettings, afterDiscount, taxType);
|
|
74
73
|
cart = result.cart;
|
|
75
74
|
element = result.element;
|
|
76
75
|
}
|
|
77
76
|
if (itemIndex == cart.item_details.length - 1) {
|
|
78
77
|
cart.cart_total_with_tax = parseFloat(cart.cartTotal) + parseFloat(cart.tax_amount);
|
|
79
78
|
cart.cart_total_with_tax = parseFloat(cart.cart_total_with_tax).toFixed(2);
|
|
80
|
-
|
|
79
|
+
|
|
80
|
+
await new Promise((resolve) => {
|
|
81
|
+
setTimeout(async () => {
|
|
82
|
+
resolve(); // Resolve after processing all items
|
|
83
|
+
}, 300)});
|
|
84
|
+
|
|
85
|
+
// setTimeout(() => {
|
|
86
|
+
resolve(cart);
|
|
87
|
+
// }, 500);
|
|
81
88
|
}
|
|
82
89
|
|
|
83
90
|
});
|
|
@@ -87,49 +94,86 @@ function calculateTax2(cart, texSettings, taxType) {
|
|
|
87
94
|
});
|
|
88
95
|
}
|
|
89
96
|
|
|
90
|
-
function calculateItemTax(cart, itemIndex, element, tax_settings, afterDicsount,taxType) {
|
|
97
|
+
function calculateItemTax(cart, itemIndex, element, tax_settings, afterDicsount, taxType) {
|
|
91
98
|
return new Promise(async (resolve, reject) => {
|
|
99
|
+
if (element.event && element.tax_id && element.tax_id.length == 0) {
|
|
100
|
+
let no_tax = tax_settings.filter(ele => ele.tax_rate == 0);
|
|
101
|
+
element.tax_id = [{
|
|
102
|
+
"tax_id": no_tax[0].tax_id
|
|
103
|
+
}]
|
|
104
|
+
}
|
|
92
105
|
getTaxSettings2(element.tax_id, tax_settings, element.ieps_tax).then(async (itemTaxs) => {
|
|
93
106
|
let lastPrice = afterDicsount
|
|
94
|
-
getBeforeTaxPriceOfItem(itemTaxs, lastPrice,taxType).then((resp) => {
|
|
95
|
-
lastPrice =
|
|
107
|
+
getBeforeTaxPriceOfItem(itemTaxs, lastPrice, taxType, element.quantity).then((resp) => {
|
|
108
|
+
lastPrice = resp.beforeTax;
|
|
109
|
+
let lastPriceIeps = +resp.beforeTaxIeps;
|
|
110
|
+
let iepsTaxRate = +resp.iepsTaxRate;
|
|
111
|
+
let iepsTaxAmount = +resp.iepsTaxAmount;
|
|
112
|
+
let iepsTaxRateQuantity = +resp.iepsTaxRateQuantity;
|
|
96
113
|
let itemTotalTax = 0;
|
|
114
|
+
let tax_array = []
|
|
115
|
+
if (itemTaxs && itemTaxs.length > 0) {
|
|
116
|
+
itemTaxs.forEach(async (itemTaxArray, itemTaxIndex) => {
|
|
117
|
+
// let startItemTax = JSON.parse(JSON.stringify(itemTaxArray))
|
|
118
|
+
// if (!element.tax_array) {
|
|
119
|
+
// element.tax_array = []
|
|
120
|
+
// }
|
|
121
|
+
// let taxAmount = 0
|
|
122
|
+
// if (startItemTax.ieps_type && startItemTax.ieps_type == 2) {
|
|
123
|
+
// taxAmount = lastPrice >= startItemTax.tax_rate ? startItemTax.tax_rate : 0;
|
|
124
|
+
// } else {
|
|
125
|
+
// taxAmount = (lastPrice * startItemTax.tax_rate) / 100;
|
|
126
|
+
// }
|
|
127
|
+
// taxAmount = parseFloat(taxAmount).toFixed(2)
|
|
128
|
+
// itemTotalTax = (parseFloat(itemTotalTax) + parseFloat(taxAmount)).toFixed(2)
|
|
129
|
+
|
|
130
|
+
// cart.tax_amount = parseFloat(cart.tax_amount) + parseFloat(taxAmount)
|
|
131
|
+
// cart.tax_amount = parseFloat(cart.tax_amount).toFixed(2)
|
|
132
|
+
// startItemTax.base_price = parseFloat(lastPrice).toFixed(2)
|
|
133
|
+
// startItemTax.tax_amount = parseFloat(taxAmount).toFixed(2)
|
|
134
|
+
// element.tax_array.push(JSON.parse(JSON.stringify(startItemTax)))
|
|
97
135
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
136
|
+
|
|
137
|
+
let startItemTax = JSON.parse(JSON.stringify(itemTaxArray))
|
|
138
|
+
let taxAmount = 0;
|
|
139
|
+
|
|
140
|
+
if (startItemTax.ieps_type) {
|
|
141
|
+
taxAmount = iepsTaxAmount;
|
|
142
|
+
} else {
|
|
143
|
+
// taxAmount = (lastPrice * startItemTax.tax_rate) / 100;
|
|
144
|
+
taxAmount = resp.taxAmount;
|
|
145
|
+
}
|
|
146
|
+
taxAmount = parseFloat(taxAmount).toFixed(6);
|
|
147
|
+
cart.tax_amount = parseFloat(cart.tax_amount) + parseFloat(taxAmount)
|
|
148
|
+
cart.tax_amount = parseFloat(cart.tax_amount).toFixed(6)
|
|
149
|
+
itemTotalTax = (parseFloat(itemTotalTax) + parseFloat(taxAmount)).toFixed(6);
|
|
150
|
+
startItemTax.tax_amount = parseFloat(taxAmount).toFixed(6);
|
|
151
|
+
startItemTax.base_price = startItemTax.ieps_type ? lastPriceIeps : lastPrice;
|
|
152
|
+
startItemTax.tax_rate = startItemTax.ieps_type ? iepsTaxRate : startItemTax.tax_rate;
|
|
153
|
+
startItemTax.tax_rate_quantity = iepsTaxRateQuantity;
|
|
154
|
+
tax_array.push(JSON.parse(JSON.stringify(startItemTax)))
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
cart = await setTaxes(cart, JSON.parse(JSON.stringify(startItemTax)))
|
|
158
|
+
|
|
159
|
+
if (itemTaxIndex == itemTaxs.length - 1) {
|
|
160
|
+
element.tax_amount = itemTotalTax;
|
|
161
|
+
element.tax_array = tax_array;
|
|
162
|
+
element.tax_amount = parseFloat(element.tax_amount).toFixed(6);
|
|
163
|
+
element.total_tax_amount = itemTotalTax;
|
|
164
|
+
element.total_tax_amount = parseFloat(element.total_tax_amount).toFixed(6);
|
|
165
|
+
element.tax_amount_modifier = parseFloat(itemTotalTax).toFixed(6);
|
|
166
|
+
resolve({ 'cart': cart, "element": element });
|
|
167
|
+
}
|
|
168
|
+
});
|
|
169
|
+
} else {
|
|
170
|
+
resolve({ 'cart': cart, "element": element });
|
|
171
|
+
}
|
|
128
172
|
});
|
|
129
173
|
})
|
|
130
174
|
})
|
|
131
175
|
}
|
|
132
|
-
function calculatePackageItemTax(cart, itemIndex, element, tax_settings, afterDicsount,taxType) {
|
|
176
|
+
function calculatePackageItemTax(cart, itemIndex, element, tax_settings, afterDicsount, taxType) {
|
|
133
177
|
return new Promise(async (resolve, reject) => {
|
|
134
178
|
let itemTotalTax = 0;
|
|
135
179
|
element.package_items.forEach((packageItem, packageItemIndex) => {
|
|
@@ -158,48 +202,52 @@ function calculatePackageItemTax(cart, itemIndex, element, tax_settings, afterDi
|
|
|
158
202
|
let lastPrice = afterDicsountPackage
|
|
159
203
|
let itemtaxAmount = 0;
|
|
160
204
|
|
|
161
|
-
await getBeforeTaxPriceOfItem(itemTaxs, lastPrice,taxType).then(async (resp) => {
|
|
162
|
-
lastPrice =
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
205
|
+
await getBeforeTaxPriceOfItem(itemTaxs, lastPrice, taxType, packageItem.quantity).then(async (resp) => {
|
|
206
|
+
lastPrice = resp.beforeTax;
|
|
207
|
+
let lastPriceIeps = +resp.beforeTaxIeps;
|
|
208
|
+
let iepsTaxRate = +resp.iepsTaxRate;
|
|
209
|
+
let iepsTaxAmount = +resp.iepsTaxAmount;
|
|
210
|
+
let iepsTaxRateQuantity = +resp.iepsTaxRateQuantity;
|
|
211
|
+
let tax_array = []
|
|
212
|
+
if (itemTaxs && itemTaxs.length > 0) {
|
|
213
|
+
itemTaxs.forEach(async (itemTaxArray, itemTaxIndex) => {
|
|
214
|
+
|
|
215
|
+
let startItemTax = JSON.parse(JSON.stringify(itemTaxArray))
|
|
216
|
+
|
|
217
|
+
let taxAmount = 0
|
|
218
|
+
|
|
219
|
+
if (startItemTax.ieps_type) {
|
|
220
|
+
taxAmount = iepsTaxAmount;
|
|
221
|
+
} else {
|
|
222
|
+
// taxAmount = (lastPrice * startItemTax.tax_rate) / 100;
|
|
223
|
+
taxAmount = resp.taxAmount;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
taxAmount = parseFloat(taxAmount).toFixed(6);
|
|
227
|
+
cart.tax_amount = parseFloat(cart.tax_amount) + parseFloat(taxAmount)
|
|
228
|
+
cart.tax_amount = parseFloat(cart.tax_amount).toFixed(6)
|
|
229
|
+
itemTotalTax = (parseFloat(itemTotalTax) + parseFloat(taxAmount)).toFixed(6);
|
|
230
|
+
itemtaxAmount = (parseFloat(itemtaxAmount) + parseFloat(taxAmount)).toFixed(6);
|
|
231
|
+
startItemTax.tax_amount = parseFloat(taxAmount).toFixed(6);
|
|
232
|
+
startItemTax.base_price = startItemTax.ieps_type ? lastPriceIeps : lastPrice;
|
|
233
|
+
startItemTax.tax_rate = startItemTax.ieps_type ? iepsTaxRate : startItemTax.tax_rate;
|
|
234
|
+
startItemTax.tax_rate_quantity = iepsTaxRateQuantity;
|
|
235
|
+
tax_array.push(JSON.parse(JSON.stringify(startItemTax)));
|
|
236
|
+
cart = await setTaxes(cart, JSON.parse(JSON.stringify(startItemTax)))
|
|
237
|
+
|
|
238
|
+
//push array yo package
|
|
239
|
+
element = await setPackageTaxes(element, JSON.parse(JSON.stringify(startItemTax)));
|
|
240
|
+
element.package_items[packageItemIndex].tax_amount = parseFloat(itemtaxAmount).toFixed(6);
|
|
241
|
+
element.package_items[packageItemIndex].tax_array = tax_array;
|
|
242
|
+
element.package_items[packageItemIndex].total_tax_amount = parseFloat(itemtaxAmount).toFixed(6);
|
|
243
|
+
|
|
244
|
+
// element.package_items[packageItemIndex].tax_amount_modifier = itemTotalTax
|
|
245
|
+
});
|
|
246
|
+
}
|
|
199
247
|
});
|
|
200
248
|
|
|
201
|
-
element.tax_amount = (parseFloat(element.tax_amount) + parseFloat(
|
|
202
|
-
element.total_tax_amount = (parseFloat(element.total_tax_amount) + parseFloat(element.package_items[packageItemIndex].tax_amount)).toFixed(
|
|
249
|
+
element.tax_amount = (parseFloat(element.tax_amount) + parseFloat(element.package_items[packageItemIndex].tax_amount)).toFixed(6)
|
|
250
|
+
element.total_tax_amount = (parseFloat(element.total_tax_amount) + parseFloat(element.package_items[packageItemIndex].tax_amount)).toFixed(6)
|
|
203
251
|
})
|
|
204
252
|
if (packageItemIndex == element.package_items.length - 1) {
|
|
205
253
|
element.tax_amount_modifier = 0;
|
|
@@ -208,21 +256,27 @@ function calculatePackageItemTax(cart, itemIndex, element, tax_settings, afterDi
|
|
|
208
256
|
})
|
|
209
257
|
})
|
|
210
258
|
}
|
|
211
|
-
function calculateModiTax(cart, itemIndex, element, tax_settings, afterDicsount,taxType) {
|
|
259
|
+
function calculateModiTax(cart, itemIndex, element, tax_settings, afterDicsount, taxType) {
|
|
212
260
|
return new Promise(async (resolve, reject) => {
|
|
213
261
|
if (element && element.item_modifiers && element.item_modifiers.length > 0) {
|
|
214
|
-
|
|
262
|
+
|
|
215
263
|
element.item_modifiers.forEach((modi, modiIndex) => {
|
|
264
|
+
let itemModiTotalTax = 0
|
|
216
265
|
let taxId = []
|
|
217
|
-
let iepsTax;
|
|
266
|
+
let iepsTax;
|
|
267
|
+
//code commented for test
|
|
268
|
+
|
|
269
|
+
//code gain commented for push
|
|
218
270
|
|
|
219
271
|
if (modi.is_tax_rate_same == 1) {
|
|
220
272
|
if (modi.linked_product && modi.linked_product.product_tax_id) {
|
|
221
273
|
taxId = modi.linked_product.product_tax_id
|
|
222
|
-
|
|
274
|
+
if (modi.linked_product.ieps_tax && modi.linked_product.ieps_tax.ieps_details && modi.linked_product.ieps_tax.ieps_details.type == 1)
|
|
275
|
+
iepsTax = modi.linked_product.ieps_tax
|
|
223
276
|
} else {
|
|
224
277
|
taxId = element.tax_id
|
|
225
|
-
|
|
278
|
+
if (element.ieps_tax && element.ieps_tax.ieps_details && element.ieps_tax.ieps_details.type == 1)
|
|
279
|
+
iepsTax = element.ieps_tax
|
|
226
280
|
}
|
|
227
281
|
}
|
|
228
282
|
else {
|
|
@@ -250,8 +304,14 @@ function calculateModiTax(cart, itemIndex, element, tax_settings, afterDicsount,
|
|
|
250
304
|
|
|
251
305
|
let lastPrice = afterDicsount
|
|
252
306
|
if (modiItemTaxs.length > 0) {
|
|
253
|
-
await getBeforeTaxPriceOfItem(modiItemTaxs, lastPrice,taxType).then((resp) => {
|
|
254
|
-
lastPrice =
|
|
307
|
+
await getBeforeTaxPriceOfItem(modiItemTaxs, lastPrice, taxType, modi.quantity * element.quantity).then((resp) => {
|
|
308
|
+
lastPrice = resp.beforeTax;
|
|
309
|
+
let lastPriceIeps = +resp.beforeTaxIeps;
|
|
310
|
+
let iepsTaxRate = +resp.iepsTaxRate;
|
|
311
|
+
let iepsTaxAmount = +resp.iepsTaxAmount;
|
|
312
|
+
let iepsTaxRateQuantity = +resp.iepsTaxRateQuantity;
|
|
313
|
+
let itemTotalTax = 0;
|
|
314
|
+
let tax_array = []
|
|
255
315
|
|
|
256
316
|
modiItemTaxs.forEach(async (modiItemTax, modiTaxItemIndex) => {
|
|
257
317
|
|
|
@@ -264,31 +324,37 @@ function calculateModiTax(cart, itemIndex, element, tax_settings, afterDicsount,
|
|
|
264
324
|
|
|
265
325
|
let taxAmount = 0
|
|
266
326
|
|
|
267
|
-
if (modiItemTaxArray.ieps_type
|
|
268
|
-
taxAmount =
|
|
327
|
+
if (modiItemTaxArray.ieps_type) {
|
|
328
|
+
taxAmount = iepsTaxAmount;
|
|
269
329
|
} else {
|
|
270
|
-
taxAmount = (lastPrice *
|
|
330
|
+
// taxAmount = (lastPrice * startItemTax.tax_rate) / 100;
|
|
331
|
+
taxAmount = resp.taxAmount;
|
|
271
332
|
}
|
|
272
333
|
|
|
273
|
-
taxAmount = parseFloat(taxAmount).toFixed(
|
|
334
|
+
taxAmount = parseFloat(taxAmount).toFixed(6)
|
|
274
335
|
itemModiTotalTax = itemModiTotalTax + taxAmount
|
|
275
336
|
cart.tax_amount = parseFloat(cart.tax_amount) + parseFloat(taxAmount)
|
|
276
|
-
cart.tax_amount = parseFloat(cart.tax_amount).toFixed(
|
|
337
|
+
cart.tax_amount = parseFloat(cart.tax_amount).toFixed(6)
|
|
277
338
|
|
|
278
|
-
|
|
279
|
-
modiItemTaxArray.tax_amount = parseFloat(taxAmount).toFixed(
|
|
339
|
+
itemTotalTax = (parseFloat(itemTotalTax) + parseFloat(taxAmount)).toFixed(6);
|
|
340
|
+
modiItemTaxArray.tax_amount = parseFloat(taxAmount).toFixed(6);
|
|
341
|
+
modiItemTaxArray.base_price = modiItemTaxArray.ieps_type ? lastPriceIeps : lastPrice;
|
|
342
|
+
modiItemTaxArray.tax_rate = modiItemTaxArray.ieps_type ? iepsTaxRate : modiItemTaxArray.tax_rate;
|
|
343
|
+
modiItemTaxArray.tax_rate_quantity = iepsTaxRateQuantity;
|
|
344
|
+
tax_array.push(JSON.parse(JSON.stringify(modiItemTaxArray)))
|
|
280
345
|
|
|
281
|
-
element.item_modifiers[modiIndex].tax_array
|
|
346
|
+
element.item_modifiers[modiIndex].tax_array = tax_array;
|
|
282
347
|
cart = await setTaxes(cart, JSON.parse(JSON.stringify(modiItemTaxArray)));
|
|
283
348
|
|
|
284
|
-
element.item_modifiers[modiIndex].tax_amount =
|
|
285
|
-
element.item_modifiers[modiIndex].tax_amount = parseFloat(element.item_modifiers[modiIndex].tax_amount).toFixed(
|
|
349
|
+
element.item_modifiers[modiIndex].tax_amount = parseFloat(element.item_modifiers[modiIndex].tax_amount) + parseFloat(taxAmount);
|
|
350
|
+
element.item_modifiers[modiIndex].tax_amount = parseFloat(element.item_modifiers[modiIndex].tax_amount).toFixed(6)
|
|
286
351
|
element.tax_amount_modifier = parseFloat(element.tax_amount_modifier) + parseFloat(taxAmount)
|
|
287
|
-
element.tax_amount_modifier = parseFloat(element.tax_amount_modifier).toFixed(
|
|
352
|
+
element.tax_amount_modifier = parseFloat(element.tax_amount_modifier).toFixed(6)
|
|
288
353
|
element.total_tax_amount = parseFloat(element.total_tax_amount) + parseFloat(taxAmount)
|
|
289
|
-
element.total_tax_amount = parseFloat(element.total_tax_amount).toFixed(
|
|
354
|
+
element.total_tax_amount = parseFloat(element.total_tax_amount).toFixed(6)
|
|
355
|
+
|
|
356
|
+
if (modiIndex == element.item_modifiers.length - 1) {
|
|
290
357
|
|
|
291
|
-
if (modiItemTaxs.length - 1 == modiTaxItemIndex) {
|
|
292
358
|
resolve({ 'cart': cart, "element": element });
|
|
293
359
|
}
|
|
294
360
|
|
|
@@ -297,7 +363,10 @@ function calculateModiTax(cart, itemIndex, element, tax_settings, afterDicsount,
|
|
|
297
363
|
})
|
|
298
364
|
}
|
|
299
365
|
else {
|
|
300
|
-
|
|
366
|
+
if (modiIndex == element.item_modifiers.length - 1) {
|
|
367
|
+
|
|
368
|
+
resolve({ 'cart': cart, "element": element });
|
|
369
|
+
}
|
|
301
370
|
}
|
|
302
371
|
})
|
|
303
372
|
})
|
|
@@ -307,17 +376,18 @@ function calculateModiTax(cart, itemIndex, element, tax_settings, afterDicsount,
|
|
|
307
376
|
}
|
|
308
377
|
})
|
|
309
378
|
}
|
|
310
|
-
function calculatePackageModiTax(cart, itemIndex, element, tax_settings, afterDicsount,taxType) {
|
|
379
|
+
function calculatePackageModiTax(cart, itemIndex, element, tax_settings, afterDicsount, taxType) {
|
|
311
380
|
return new Promise(async (resolve, reject) => {
|
|
312
381
|
element.package_items.forEach((packageItem, packageItemIndex) => {
|
|
313
382
|
element.package_items[packageItemIndex].tax_amount_modifier = 0
|
|
314
383
|
if (packageItem.modifiers.length > 0) {
|
|
315
|
-
|
|
384
|
+
|
|
316
385
|
packageItem.modifiers.forEach((modi, modiIndex) => {
|
|
386
|
+
let itemModiTotalTax = 0;
|
|
317
387
|
let taxId = []
|
|
318
388
|
let iepsTax;
|
|
319
389
|
if (modi.is_tax_rate_same == 1) {
|
|
320
|
-
if (modi.linked_product && modi.linked_product.product_tax_id) {
|
|
390
|
+
if (modi.linked_product && modi.linked_product.product_tax_id && Array.isArray(modi.linked_product.product_tax_id)) {
|
|
321
391
|
taxId = modi.linked_product.product_tax_id
|
|
322
392
|
iepsTax = modi.linked_product.ieps_tax
|
|
323
393
|
} else {
|
|
@@ -351,10 +421,16 @@ function calculatePackageModiTax(cart, itemIndex, element, tax_settings, afterDi
|
|
|
351
421
|
let lastPrice = afterDicsount
|
|
352
422
|
|
|
353
423
|
if (modiItemTaxs.length > 0) {
|
|
354
|
-
await getBeforeTaxPriceOfItem(modiItemTaxs, lastPrice,taxType).then((resp) => {
|
|
355
|
-
lastPrice =
|
|
424
|
+
await getBeforeTaxPriceOfItem(modiItemTaxs, lastPrice, taxType, modi.quantity * element.quantity).then((resp) => {
|
|
425
|
+
lastPrice = resp.beforeTax;
|
|
426
|
+
let lastPriceIeps = +resp.beforeTaxIeps;
|
|
427
|
+
let iepsTaxRate = +resp.iepsTaxRate;
|
|
428
|
+
let iepsTaxAmount = +resp.iepsTaxAmount;
|
|
429
|
+
let iepsTaxRateQuantity = +resp.iepsTaxRateQuantity;
|
|
430
|
+
let itemTotalTax = 0;
|
|
431
|
+
let tax_array = []
|
|
356
432
|
modiItemTaxs.forEach(async (modiItemTax, modiTaxItemIndex) => {
|
|
357
|
-
|
|
433
|
+
let modiItemTaxArray = JSON.parse(JSON.stringify(modiItemTax))
|
|
358
434
|
if (!element.package_items[packageItemIndex].modifiers[modiIndex].tax_array) {
|
|
359
435
|
element.package_items[packageItemIndex].modifiers[modiIndex].tax_array = []
|
|
360
436
|
}
|
|
@@ -365,40 +441,49 @@ function calculatePackageModiTax(cart, itemIndex, element, tax_settings, afterDi
|
|
|
365
441
|
|
|
366
442
|
let taxAmount = 0
|
|
367
443
|
|
|
368
|
-
if (
|
|
369
|
-
taxAmount =
|
|
444
|
+
if (modiItemTaxArray.ieps_type) {
|
|
445
|
+
taxAmount = iepsTaxAmount;
|
|
370
446
|
} else {
|
|
371
|
-
taxAmount = (lastPrice *
|
|
447
|
+
// taxAmount = (lastPrice * startItemTax.tax_rate) / 100;
|
|
448
|
+
taxAmount = resp.taxAmount;
|
|
372
449
|
}
|
|
373
|
-
taxAmount = parseFloat(taxAmount).toFixed(
|
|
450
|
+
taxAmount = parseFloat(taxAmount).toFixed(6)
|
|
374
451
|
|
|
375
452
|
itemModiTotalTax = itemModiTotalTax + taxAmount;
|
|
376
453
|
cart.tax_amount = parseFloat(cart.tax_amount) + parseFloat(taxAmount)
|
|
377
|
-
cart.tax_amount = parseFloat(cart.tax_amount).toFixed(
|
|
454
|
+
cart.tax_amount = parseFloat(cart.tax_amount).toFixed(6)
|
|
378
455
|
|
|
379
456
|
|
|
380
457
|
// modiItemTax.base_price = that.taxType == 1 ? parseFloat(afterDicsount).toFixed(2) : (parseFloat(afterDicsount) - parseFloat(taxAmount)).toFixed(2)
|
|
381
|
-
|
|
382
|
-
|
|
458
|
+
modiItemTaxArray.tax_amount = parseFloat(taxAmount).toFixed(6);
|
|
459
|
+
modiItemTaxArray.base_price = modiItemTaxArray.ieps_type ? lastPriceIeps : lastPrice;
|
|
460
|
+
modiItemTaxArray.tax_rate = modiItemTaxArray.ieps_type ? iepsTaxRate : modiItemTaxArray.tax_rate;
|
|
461
|
+
modiItemTaxArray.tax_rate_quantity = iepsTaxRateQuantity;
|
|
462
|
+
tax_array.push(JSON.parse(JSON.stringify(modiItemTaxArray)))
|
|
383
463
|
|
|
384
464
|
// cart[itemIndex].item_modifiers[modiIndex].tax_array.push(JSON.parse(JSON.stringify(modiItemTax)))
|
|
385
|
-
element.package_items[packageItemIndex].modifiers[modiIndex].tax_array
|
|
386
|
-
cart = await setTaxes(cart, JSON.parse(JSON.stringify(
|
|
465
|
+
element.package_items[packageItemIndex].modifiers[modiIndex].tax_array = tax_array;
|
|
466
|
+
cart = await setTaxes(cart, JSON.parse(JSON.stringify(modiItemTaxArray)))
|
|
467
|
+
|
|
468
|
+
element.package_items[packageItemIndex].modifiers[modiIndex].tax_amount = parseFloat(element.package_items[packageItemIndex].modifiers[modiIndex].tax_amount) + parseFloat(taxAmount);
|
|
469
|
+
element.package_items[packageItemIndex].tax_amount_modifier = (parseFloat(element.package_items[packageItemIndex].tax_amount_modifier) + parseFloat(taxAmount)).toFixed(6)
|
|
470
|
+
element.package_items[packageItemIndex].total_tax_amount = (parseFloat(element.package_items[packageItemIndex].total_tax_amount) + parseFloat(taxAmount)).toFixed(6)
|
|
471
|
+
element.tax_amount_modifier = (parseFloat(element.tax_amount_modifier) + parseFloat(taxAmount)).toFixed(6)
|
|
472
|
+
element.total_tax_amount = (parseFloat(element.total_tax_amount) + parseFloat(taxAmount)).toFixed(6)
|
|
387
473
|
|
|
388
|
-
|
|
389
|
-
element.package_items[packageItemIndex].tax_amount_modifier = (parseFloat(element.package_items[packageItemIndex].tax_amount_modifier) + parseFloat(taxAmount)).toFixed(2)
|
|
390
|
-
element.package_items[packageItemIndex].total_tax_amount = (parseFloat(element.package_items[packageItemIndex].total_tax_amount) + parseFloat(taxAmount)).toFixed(2)
|
|
391
|
-
element.tax_amount_modifier = (parseFloat(element.tax_amount_modifier) + parseFloat(taxAmount)).toFixed(2)
|
|
392
|
-
element.total_tax_amount = (parseFloat(element.total_tax_amount) + parseFloat(taxAmount)).toFixed(2)
|
|
474
|
+
if (modiIndex == packageItem.modifiers.length - 1) {
|
|
393
475
|
|
|
394
|
-
if (modiItemTaxs.length - 1 == modiTaxItemIndex)
|
|
395
476
|
resolve({ 'cart': cart, "element": element });
|
|
477
|
+
}
|
|
396
478
|
|
|
397
479
|
});
|
|
398
480
|
})
|
|
399
481
|
}
|
|
400
482
|
else {
|
|
401
|
-
|
|
483
|
+
if (modiIndex == packageItem.modifiers.length - 1) {
|
|
484
|
+
|
|
485
|
+
resolve({ 'cart': cart, "element": element });
|
|
486
|
+
}
|
|
402
487
|
}
|
|
403
488
|
|
|
404
489
|
|
|
@@ -412,21 +497,39 @@ function calculatePackageModiTax(cart, itemIndex, element, tax_settings, afterDi
|
|
|
412
497
|
});
|
|
413
498
|
})
|
|
414
499
|
}
|
|
415
|
-
function setPackageTaxes(item,
|
|
500
|
+
function setPackageTaxes(item, ele) {
|
|
416
501
|
return new Promise(async (resolve, reject) => {
|
|
417
502
|
let index = -1;
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
503
|
+
if (ele.ieps_type) {
|
|
504
|
+
index = item.tax_array.findIndex((res) => {
|
|
505
|
+
return res.tax_id == ele.tax_id && res.ieps_type == ele.ieps_type
|
|
506
|
+
});
|
|
421
507
|
} else {
|
|
422
|
-
index = item.tax_array.findIndex((res) =>
|
|
508
|
+
index = item.tax_array.findIndex((res) => {
|
|
509
|
+
return !res.ieps_type && res.tax_id == ele.tax_id
|
|
510
|
+
});
|
|
423
511
|
}
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
item.tax_array[index].tax_amount =
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
item.tax_array.
|
|
512
|
+
if (index != -1) {
|
|
513
|
+
item.tax_array[index].tax_amount = parseFloat(item.tax_array[index].tax_amount) + parseFloat(ele.tax_amount)
|
|
514
|
+
item.tax_array[index].tax_amount = parseFloat(item.tax_array[index].tax_amount).toFixed(6)
|
|
515
|
+
if (item.tax_array[index].tax_rate_quantity)
|
|
516
|
+
item.tax_array[index].tax_rate_quantity = parseFloat(item.tax_array[index].tax_rate_quantity) + parseFloat(ele.tax_rate_quantity)
|
|
517
|
+
item.tax_array[index].base_price = parseFloat(item.tax_array[index].base_price) + parseFloat(ele.base_price)
|
|
518
|
+
item.tax_array[index].base_price = parseFloat(item.tax_array[index].base_price).toFixed(6)
|
|
519
|
+
}
|
|
520
|
+
else {
|
|
521
|
+
item.tax_array.push(ele)
|
|
522
|
+
}
|
|
523
|
+
item.tax_array.sort((a, b) => {
|
|
524
|
+
return a.tax_sequence - b.tax_sequence
|
|
525
|
+
})
|
|
526
|
+
if (item.tax_array[0] && !item.tax_array[0].ieps_type && item.tax_array[1] && item.tax_array[1].ieps_type && item.tax_array[1].ieps_type == 2) {
|
|
527
|
+
item.tax_array[1].base_price = (item.tax_array[0].base_price > 0) ? item.tax_array[0].base_price - item.tax_array[1].tax_rate_quantity : 0;
|
|
528
|
+
item.tax_array[1].base_price = parseFloat(item.tax_array[1].base_price).toFixed(6)
|
|
529
|
+
item.tax_array[1].tax_amount = item.tax_array[1].tax_rate_quantity
|
|
530
|
+
let iepsTaxRate = (item.tax_array[0].base_price > 0) ? item.tax_array[1].tax_rate_quantity / item.tax_array[1].base_price : 0;
|
|
531
|
+
iepsTaxRate = parseFloat(iepsTaxRate).toFixed(6)
|
|
532
|
+
item.tax_array[1].tax_rate = iepsTaxRate
|
|
430
533
|
}
|
|
431
534
|
resolve(item);
|
|
432
535
|
})
|
|
@@ -438,33 +541,23 @@ function getTaxSettings2(itemTax, taxSettings, iepsTax = '') {
|
|
|
438
541
|
let settings = [];
|
|
439
542
|
let taxes = [];
|
|
440
543
|
|
|
441
|
-
if (itemTax && itemTax
|
|
442
|
-
itemTax = !isJson(itemTax) ? itemTax : JSON.parse(itemTax);
|
|
544
|
+
if (itemTax && itemTax != undefined) {
|
|
443
545
|
taxes = [...itemTax];
|
|
444
|
-
|
|
445
546
|
// Handle ieps tax
|
|
446
547
|
if (iepsTax && iepsTax.status && iepsTax.status == 1 && iepsTax.ieps_details) {
|
|
447
548
|
if (iepsTax.ieps_details.type == 1) {
|
|
448
549
|
taxes.push(iepsTax.ieps_details);
|
|
449
|
-
} else {
|
|
450
|
-
const absoluteTax = {
|
|
451
|
-
base_price_effected: 0,
|
|
452
|
-
tax_sequence: 1,
|
|
453
|
-
tax_label: 'IEPS',
|
|
454
|
-
ieps_type: 2,
|
|
455
|
-
tax_id: iepsTax.ieps_details.tax_id,
|
|
456
|
-
tax_rate: iepsTax.ieps_details.tax_id,
|
|
457
|
-
};
|
|
458
|
-
settings.push(absoluteTax);
|
|
459
550
|
}
|
|
460
551
|
}
|
|
461
552
|
|
|
462
|
-
taxes.forEach((element)
|
|
553
|
+
taxes.forEach(function (element) {
|
|
463
554
|
count++;
|
|
464
|
-
let index = taxSettings.findIndex((res)
|
|
555
|
+
let index = taxSettings.findIndex(function (res) {
|
|
556
|
+
return res.tax_id == element.tax_id;
|
|
557
|
+
});
|
|
465
558
|
|
|
466
559
|
if (index >= 0) {
|
|
467
|
-
const taxDetail = {
|
|
560
|
+
const taxDetail = Object.assign({}, taxSettings[index]);
|
|
468
561
|
if (element.type) {
|
|
469
562
|
taxDetail.tax_label = 'IEPS';
|
|
470
563
|
taxDetail.ieps_type = 1;
|
|
@@ -473,7 +566,21 @@ function getTaxSettings2(itemTax, taxSettings, iepsTax = '') {
|
|
|
473
566
|
}
|
|
474
567
|
|
|
475
568
|
if (count == taxes.length) {
|
|
476
|
-
|
|
569
|
+
// Handle ieps tax
|
|
570
|
+
if (iepsTax && iepsTax.status && iepsTax.status == 1 && iepsTax.ieps_details) {
|
|
571
|
+
if (iepsTax.ieps_details.type == 2) {
|
|
572
|
+
const absoluteTax = {
|
|
573
|
+
base_price_effected: 0,
|
|
574
|
+
tax_sequence: 2,
|
|
575
|
+
tax_label: 'IEPS',
|
|
576
|
+
ieps_type: 2,
|
|
577
|
+
tax_id: 'absolute',
|
|
578
|
+
tax_rate: iepsTax.ieps_details.tax_id,
|
|
579
|
+
};
|
|
580
|
+
settings.push(absoluteTax);
|
|
581
|
+
}
|
|
582
|
+
}
|
|
583
|
+
// settings = settings.sort((a, b) => (Number(b.tax_sequence) > Number(a.tax_sequence)) ? 1 : -1);
|
|
477
584
|
resolve(settings);
|
|
478
585
|
}
|
|
479
586
|
});
|
|
@@ -492,50 +599,92 @@ function isJson(str) {
|
|
|
492
599
|
return true;
|
|
493
600
|
}
|
|
494
601
|
|
|
495
|
-
async function getBeforeTaxPriceOfItem(taxes, price,taxType) {
|
|
602
|
+
async function getBeforeTaxPriceOfItem(taxes, price, taxType, quantity) {
|
|
496
603
|
return new Promise((resolve, reject) => {
|
|
497
|
-
let beforeTax =
|
|
604
|
+
let beforeTax = +price;
|
|
605
|
+
let beforeTaxIeps = 0;
|
|
498
606
|
let taxRate = 0;
|
|
499
607
|
let taxAmount = 0;
|
|
500
|
-
let
|
|
608
|
+
let iepsTaxRate = 0;
|
|
609
|
+
let iepsTaxAmount=0;
|
|
610
|
+
let iepsTaxRateQuantity = 0;
|
|
611
|
+
let totalTax = 0;
|
|
612
|
+
let firstAmount = beforeTax ;
|
|
501
613
|
|
|
502
614
|
taxes.forEach((tax) => {
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
}
|
|
615
|
+
if (!tax.ieps_type) {
|
|
616
|
+
taxRate += parseFloat(tax.tax_rate);
|
|
617
|
+
totalTax += parseFloat(tax.tax_rate);
|
|
618
|
+
}
|
|
619
|
+
if (tax.ieps_type && tax.ieps_type == 1) {
|
|
620
|
+
totalTax += parseFloat(tax.tax_rate);
|
|
621
|
+
}
|
|
511
622
|
});
|
|
512
623
|
|
|
513
624
|
// Calculate taxAmount based on tax type 1 = exclusive and 2 = inclusive
|
|
514
|
-
if (taxType ==
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
beforeTax = itemPriceForTaxCal == 0 ? (beforeTax / parseFloat(1 + taxRate / 100)).toFixed(6) : (itemPriceForTaxCal / (1 + taxRate / 100)).toFixed(6);
|
|
518
|
-
taxAmount = itemPriceForTaxCal == 0 ? (price - beforeTax).toFixed(6) : (itemPriceForTaxCal - beforeTax).toFixed(6);
|
|
519
|
-
}
|
|
520
|
-
resolve({ beforeTax, taxAmount });
|
|
521
|
-
});
|
|
522
|
-
}
|
|
523
|
-
function setTaxes(cart, tax_array) {
|
|
524
|
-
return new Promise(async (resolve, reject) => {
|
|
525
|
-
let index = cart.merged_tax_array.findIndex((res) => res.tax_id == tax_array.tax_id)
|
|
526
|
-
if (index != -1) {
|
|
527
|
-
cart.merged_tax_array[index].tax_amount = parseFloat(cart.merged_tax_array[index].tax_amount) + parseFloat(tax_array.tax_amount)
|
|
528
|
-
cart.merged_tax_array[index].tax_amount = parseFloat(cart.merged_tax_array[index].tax_amount).toFixed(2)
|
|
529
|
-
|
|
530
|
-
cart.merged_tax_array[index].base_price = parseFloat(cart.merged_tax_array[index].base_price) + parseFloat(tax_array.base_price)
|
|
531
|
-
cart.merged_tax_array[index].base_price = parseFloat(cart.merged_tax_array[index].base_price).toFixed(2)
|
|
625
|
+
if (taxType == 2) {
|
|
626
|
+
beforeTax = (beforeTax / (1 + totalTax / 100)).toFixed(2);
|
|
627
|
+
}
|
|
532
628
|
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
629
|
+
// ieps tax type = 1 precentage 2 absoulte
|
|
630
|
+
taxes.forEach((tax) => {
|
|
631
|
+
if (tax.ieps_type && tax.ieps_type == 2) {
|
|
632
|
+
// Adjust beforeTax based on tax type
|
|
633
|
+
if (beforeTax >= tax.tax_rate) {
|
|
634
|
+
beforeTaxIeps = taxType == 1 ? beforeTax : beforeTax - tax.tax_rate * quantity;
|
|
635
|
+
beforeTaxIeps = parseFloat(beforeTaxIeps).toFixed(2)
|
|
636
|
+
iepsTaxRate = tax.tax_rate * quantity / beforeTaxIeps
|
|
637
|
+
iepsTaxRateQuantity = tax.tax_rate * quantity
|
|
638
|
+
iepsTaxRate = parseFloat(iepsTaxRate)
|
|
639
|
+
iepsTaxAmount = (tax.tax_rate * quantity).toFixed(2);
|
|
640
|
+
}
|
|
641
|
+
}
|
|
642
|
+
else if (tax.ieps_type && tax.ieps_type == 1) {
|
|
643
|
+
beforeTaxIeps = beforeTax ;
|
|
644
|
+
iepsTaxRate = tax.tax_rate
|
|
645
|
+
iepsTaxAmount = (firstAmount - beforeTax - taxAmount).toFixed(2);
|
|
646
|
+
}
|
|
647
|
+
else{
|
|
648
|
+
taxAmount = ((beforeTax * tax.tax_rate) / 100).toFixed(2);
|
|
649
|
+
}
|
|
650
|
+
});
|
|
651
|
+
resolve({ beforeTax, taxAmount, beforeTaxIeps, iepsTaxRate,iepsTaxAmount,iepsTaxRateQuantity });
|
|
652
|
+
});
|
|
653
|
+
}
|
|
654
|
+
function setTaxes(cart, ele) {
|
|
655
|
+
let index = -1;
|
|
656
|
+
if (ele.ieps_type) {
|
|
657
|
+
index = cart.merged_tax_array.findIndex((res) => {
|
|
658
|
+
return res.tax_id == ele.tax_id && res.ieps_type == ele.ieps_type
|
|
659
|
+
});
|
|
660
|
+
} else {
|
|
661
|
+
index = cart.merged_tax_array.findIndex((res) => {
|
|
662
|
+
return !res.ieps_type && res.tax_id == ele.tax_id
|
|
663
|
+
});
|
|
664
|
+
}
|
|
665
|
+
if (index != -1) {
|
|
666
|
+
cart.merged_tax_array[index].tax_amount = parseFloat(cart.merged_tax_array[index].tax_amount) + parseFloat(ele.tax_amount)
|
|
667
|
+
cart.merged_tax_array[index].tax_amount = parseFloat(cart.merged_tax_array[index].tax_amount).toFixed(6)
|
|
668
|
+
if (cart.merged_tax_array[index].tax_rate_quantity)
|
|
669
|
+
cart.merged_tax_array[index].tax_rate_quantity = parseFloat(cart.merged_tax_array[index].tax_rate_quantity) + parseFloat(ele.tax_rate_quantity)
|
|
670
|
+
cart.merged_tax_array[index].base_price = parseFloat(cart.merged_tax_array[index].base_price) + parseFloat(ele.base_price)
|
|
671
|
+
cart.merged_tax_array[index].base_price = parseFloat(cart.merged_tax_array[index].base_price).toFixed(6)
|
|
672
|
+
}
|
|
673
|
+
else {
|
|
674
|
+
cart.merged_tax_array.push(ele)
|
|
675
|
+
}
|
|
676
|
+
cart.merged_tax_array.sort((a, b) => {
|
|
677
|
+
return a.tax_sequence - b.tax_sequence
|
|
538
678
|
})
|
|
679
|
+
if (cart.merged_tax_array[0] && !cart.merged_tax_array[0].ieps_type && cart.merged_tax_array[1] && cart.merged_tax_array[1].ieps_type && cart.merged_tax_array[1].ieps_type == 2) {
|
|
680
|
+
cart.merged_tax_array[1].base_price = (cart.merged_tax_array[0].base_price > 0) ? cart.merged_tax_array[0].base_price - cart.merged_tax_array[1].tax_rate_quantity : 0;
|
|
681
|
+
cart.merged_tax_array[1].base_price = parseFloat(cart.merged_tax_array[1].base_price).toFixed(6)
|
|
682
|
+
cart.merged_tax_array[1].tax_amount = cart.merged_tax_array[1].tax_rate_quantity
|
|
683
|
+
let iepsTaxRate = (cart.merged_tax_array[0].base_price > 0) ? cart.merged_tax_array[1].tax_rate_quantity / cart.merged_tax_array[1].base_price : 0;
|
|
684
|
+
iepsTaxRate = parseFloat(iepsTaxRate).toFixed(6)
|
|
685
|
+
cart.merged_tax_array[1].tax_rate = iepsTaxRate
|
|
686
|
+
}
|
|
687
|
+
return cart;
|
|
539
688
|
}
|
|
540
689
|
|
|
541
690
|
module.exports = { calculateTax2 }
|