foodbot-cart-calculations 1.0.0 → 1.0.2-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.
@@ -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);
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);
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);
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);
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
- resolve(cart);
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) {
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).then((resp) => {
95
- lastPrice = +resp.beforeTax;
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
- itemTaxs.forEach(async (itemTaxArray, itemTaxIndex) => {
99
- let startItemTax = JSON.parse(JSON.stringify(itemTaxArray))
100
- if (!element.tax_array) {
101
- element.tax_array = []
102
- }
103
- let taxAmount = 0
104
- if (startItemTax.ieps_type && startItemTax.ieps_type == 2) {
105
- taxAmount = lastPrice >= startItemTax.tax_rate ? startItemTax.tax_rate : 0;
106
- } else {
107
- taxAmount = (lastPrice * startItemTax.tax_rate) / 100;
108
- }
109
- taxAmount = parseFloat(taxAmount).toFixed(2)
110
- itemTotalTax = (parseFloat(itemTotalTax) + parseFloat(taxAmount)).toFixed(2)
111
-
112
- cart.tax_amount = parseFloat(cart.tax_amount) + parseFloat(taxAmount)
113
- cart.tax_amount = parseFloat(cart.tax_amount).toFixed(2)
114
- startItemTax.base_price = parseFloat(lastPrice).toFixed(2)
115
- startItemTax.tax_amount = parseFloat(taxAmount).toFixed(2)
116
- element.tax_array.push(JSON.parse(JSON.stringify(startItemTax)))
117
- cart = await setTaxes(cart, JSON.parse(JSON.stringify(startItemTax)))
118
-
119
- if (itemTaxIndex == itemTaxs.length - 1) {
120
- element.tax_amount = itemTotalTax;
121
- element.tax_amount = parseFloat(element.tax_amount).toFixed(2);
122
- element.total_tax_amount = itemTotalTax;
123
- element.total_tax_amount = parseFloat(element.total_tax_amount).toFixed(2);
124
- element.tax_amount_modifier = parseFloat(itemTotalTax).toFixed(2);
125
- resolve({ 'cart': cart, "element": element });
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) {
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).then(async (resp) => {
162
- lastPrice = +resp.beforeTax;
163
-
164
- itemTaxs.forEach(async (itemTaxArray, itemTaxIndex) => {
165
-
166
- let startItemTax = JSON.parse(JSON.stringify(itemTaxArray))
167
-
168
- if (!element.package_items[packageItemIndex].tax_array) {
169
- element.package_items[packageItemIndex].tax_array = []
170
- }
171
-
172
-
173
- let taxAmount = 0
174
-
175
- if (startItemTax.ieps_type && startItemTax.ieps_type == 2) {
176
- taxAmount = lastPrice >= startItemTax.tax_rate ? startItemTax.tax_rate : 0;
177
- } else {
178
- taxAmount = (lastPrice * startItemTax.tax_rate) / 100;
179
- }
180
-
181
- taxAmount = parseFloat(taxAmount).toFixed(2)
182
- itemTotalTax = (parseFloat(itemTotalTax) + parseFloat(taxAmount)).toFixed(2)
183
- itemtaxAmount = (parseFloat(itemtaxAmount) + parseFloat(taxAmount)).toFixed(2);
184
-
185
- cart.tax_amount = parseFloat(cart.tax_amount) + parseFloat(taxAmount)
186
- cart.tax_amount = parseFloat(cart.tax_amount).toFixed(2)
187
- startItemTax.base_price = parseFloat(lastPrice).toFixed(2)
188
- startItemTax.tax_amount = parseFloat(taxAmount).toFixed(2)
189
-
190
- element.package_items[packageItemIndex].tax_array.push(JSON.parse(JSON.stringify(startItemTax)));
191
- cart = await setTaxes(cart, JSON.parse(JSON.stringify(startItemTax)))
192
-
193
- //push array yo package
194
- element = await setPackageTaxes(element, JSON.parse(JSON.stringify(startItemTax)));
195
- element.package_items[packageItemIndex].tax_amount = parseFloat(itemtaxAmount).toFixed(2);
196
- element.package_items[packageItemIndex].total_tax_amount = parseFloat(itemtaxAmount).toFixed(2);
197
- // element.package_items[packageItemIndex].tax_amount_modifier = itemTotalTax
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(itemtaxAmount)).toFixed(2)
202
- element.total_tax_amount = (parseFloat(element.total_tax_amount) + parseFloat(element.package_items[packageItemIndex].tax_amount)).toFixed(2)
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) {
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
- let itemModiTotalTax = 0
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
- iepsTax = modi.linked_product.ieps_tax
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
- iepsTax = []
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).then((resp) => {
254
- lastPrice = +resp.beforeTax;
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 && modiItemTaxArray.ieps_type == 2) {
268
- taxAmount = lastPrice >= modiItemTaxArray.tax_rate ? modiItemTaxArray.tax_rate : 0;
327
+ if (modiItemTaxArray.ieps_type) {
328
+ taxAmount = iepsTaxAmount;
269
329
  } else {
270
- taxAmount = (lastPrice * modiItemTaxArray.tax_rate) / 100;
330
+ // taxAmount = (lastPrice * startItemTax.tax_rate) / 100;
331
+ taxAmount = resp.taxAmount;
271
332
  }
272
333
 
273
- taxAmount = parseFloat(taxAmount).toFixed(2)
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(2)
337
+ cart.tax_amount = parseFloat(cart.tax_amount).toFixed(6)
277
338
 
278
- modiItemTaxArray.base_price = parseFloat(lastPrice).toFixed(2)
279
- modiItemTaxArray.tax_amount = parseFloat(taxAmount).toFixed(2)
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.push(JSON.parse(JSON.stringify(modiItemTaxArray)))
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 = parseFloat(element.item_modifiers[modiIndex].tax_amount) + parseFloat(taxAmount);
285
- element.item_modifiers[modiIndex].tax_amount = parseFloat(element.item_modifiers[modiIndex].tax_amount).toFixed(2)
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(2)
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(2)
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
- resolve({ 'cart': cart, "element": element });
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) {
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
- let itemModiTotalTax = 0
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).then((resp) => {
355
- lastPrice = +resp.beforeTax;
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 (modiItemTax.ieps_type && modiItemTax.ieps_type == 2) {
369
- taxAmount = lastPrice >= modiItemTax.tax_rate ? modiItemTax.tax_rate : 0;
444
+ if (modiItemTaxArray.ieps_type) {
445
+ taxAmount = iepsTaxAmount;
370
446
  } else {
371
- taxAmount = (lastPrice * modiItemTax.tax_rate) / 100;
447
+ // taxAmount = (lastPrice * startItemTax.tax_rate) / 100;
448
+ taxAmount = resp.taxAmount;
372
449
  }
373
- taxAmount = parseFloat(taxAmount).toFixed(2)
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(2)
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
- modiItemTax.base_price = lastPrice
382
- modiItemTax.tax_amount = parseFloat(taxAmount).toFixed(2)
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.push(JSON.parse(JSON.stringify(modiItemTax)))
386
- cart = await setTaxes(cart, JSON.parse(JSON.stringify(modiItemTax)))
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
- element.package_items[packageItemIndex].modifiers[modiIndex].tax_amount = parseFloat(element.package_items[packageItemIndex].modifiers[modiIndex].tax_amount) + parseFloat(taxAmount)
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
- resolve({ 'cart': cart, "element": element });
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, tax_array) {
500
+ function setPackageTaxes(item, ele) {
416
501
  return new Promise(async (resolve, reject) => {
417
502
  let index = -1;
418
-
419
- if (tax_array.ieps_type) {
420
- index = item.tax_array.findIndex((res) => res.tax_id == tax_array.tax_id && res.ieps_type == tax_array.ieps_type);
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) => !res.ieps_type && res.tax_id == tax_array.tax_id);
508
+ index = item.tax_array.findIndex((res) => {
509
+ return !res.ieps_type && res.tax_id == ele.tax_id
510
+ });
423
511
  }
424
-
425
- if (index !== -1) {
426
- item.tax_array[index].tax_amount = (parseFloat(item.tax_array[index].tax_amount) + parseFloat(tax_array.tax_amount)).toFixed(2);
427
- item.tax_array[index].base_price = (parseFloat(item.tax_array[index].base_price) + parseFloat(tax_array.base_price)).toFixed(2);
428
- } else {
429
- item.tax_array.push(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 !== undefined) {
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) => res.tax_id == element.tax_id);
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 = { ...taxSettings[index] };
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
- settings = settings.sort((a, b) => (Number(b.tax_sequence) < Number(a.tax_sequence) ? 1 : -1));
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,51 +599,92 @@ function isJson(str) {
492
599
  return true;
493
600
  }
494
601
 
495
- async function getBeforeTaxPriceOfItem(taxes, price) {
602
+ async function getBeforeTaxPriceOfItem(taxes, price, taxType, quantity) {
496
603
  return new Promise((resolve, reject) => {
497
- let taxType = this.taxType;
498
- let beforeTax = parseFloat(price);
604
+ let beforeTax = +price;
605
+ let beforeTaxIeps = 0;
499
606
  let taxRate = 0;
500
607
  let taxAmount = 0;
501
- let itemPriceForTaxCal = 0;
608
+ let iepsTaxRate = 0;
609
+ let iepsTaxAmount=0;
610
+ let iepsTaxRateQuantity = 0;
611
+ let totalTax = 0;
612
+ let firstAmount = beforeTax ;
502
613
 
503
614
  taxes.forEach((tax) => {
504
- if (tax.ieps_type && tax.ieps_type == 2) {
505
- // Adjust beforeTax based on tax type
506
- if (beforeTax >= tax.tax_rate) {
507
- itemPriceForTaxCal = (taxType == 1) ? beforeTax + tax.tax_rate : beforeTax - tax.tax_rate;
508
- }
509
- } else {
510
- taxRate += parseFloat(tax.tax_rate);
511
- }
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
+ }
512
622
  });
513
623
 
514
624
  // Calculate taxAmount based on tax type 1 = exclusive and 2 = inclusive
515
- if (taxType == 1) {
516
- taxAmount = itemPriceForTaxCal == 0 ? ((beforeTax * taxRate) / 100).toFixed(6) : ((itemPriceForTaxCal * taxRate) / 100).toFixed(6);
517
- } else {
518
- beforeTax = itemPriceForTaxCal == 0 ? (beforeTax / parseFloat(1 + taxRate / 100)).toFixed(6) : (itemPriceForTaxCal / (1 + taxRate / 100)).toFixed(6);
519
- taxAmount = itemPriceForTaxCal == 0 ? (price - beforeTax).toFixed(6) : (itemPriceForTaxCal - beforeTax).toFixed(6);
520
- }
521
- resolve({ beforeTax, taxAmount });
522
- });
523
- }
524
- function setTaxes(cart, tax_array) {
525
- return new Promise(async (resolve, reject) => {
526
- let index = cart.merged_tax_array.findIndex((res) => res.tax_id == tax_array.tax_id)
527
- if (index != -1) {
528
- cart.merged_tax_array[index].tax_amount = parseFloat(cart.merged_tax_array[index].tax_amount) + parseFloat(tax_array.tax_amount)
529
- cart.merged_tax_array[index].tax_amount = parseFloat(cart.merged_tax_array[index].tax_amount).toFixed(2)
530
-
531
- cart.merged_tax_array[index].base_price = parseFloat(cart.merged_tax_array[index].base_price) + parseFloat(tax_array.base_price)
532
- 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
+ }
533
628
 
534
- }
535
- else {
536
- cart.merged_tax_array.push(tax_array)
537
- }
538
- resolve(cart);
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
539
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;
540
688
  }
541
689
 
542
690
  module.exports = { calculateTax2 }