@mohasinac/appkit 4.42.11 → 4.42.12
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.
|
@@ -535,7 +535,25 @@ async function createOrderForGroup(group, orderType, ctx) {
|
|
|
535
535
|
shipmentProtectionAddon: !adminBypass && shipmentProtectionFee > 0 ? true : undefined,
|
|
536
536
|
shipmentProtectionFee: !adminBypass && shipmentProtectionFee > 0 ? shipmentProtectionFee : undefined,
|
|
537
537
|
taxableAmount: gstBreakdown?.taxableAmount,
|
|
538
|
-
|
|
538
|
+
/*
|
|
539
|
+
* 🛑 This must include the GST on the PLATFORM FEE, not just product GST.
|
|
540
|
+
*
|
|
541
|
+
* `gstBreakdown` exists only when product GST is non-zero, and this
|
|
542
|
+
* catalogue's products carry no `gstRate` — so for every real order so far
|
|
543
|
+
* this resolved to `undefined`. Measured 2026-10-03: 0 of 40 live orders
|
|
544
|
+
* had a `gstAmount`, and the order page's Tax row (which maps from it via
|
|
545
|
+
* adapters.ts `tax: doc.gstAmount`) had therefore NEVER rendered.
|
|
546
|
+
*
|
|
547
|
+
* Meanwhile the buyer IS charged `platformFeeGst` — it is a term in the
|
|
548
|
+
* `orderTotal` expression above — and checkout displays it: a real order
|
|
549
|
+
* showed "GST ₹1.80" at checkout and an order page whose lines summed
|
|
550
|
+
* ₹1.80 short of its own total, with nothing naming the gap.
|
|
551
|
+
*
|
|
552
|
+
* Summing both is what makes the order reconcile. Keep `cgst`/`sgst`/`igst`
|
|
553
|
+
* as the product-only split; they describe the intra/inter-state breakdown
|
|
554
|
+
* of goods, which fee GST is not part of.
|
|
555
|
+
*/
|
|
556
|
+
gstAmount: (gstBreakdown?.gstAmount ?? 0) + platformFeeGst || undefined,
|
|
539
557
|
cgst: gstBreakdown?.cgst || undefined,
|
|
540
558
|
sgst: gstBreakdown?.sgst || undefined,
|
|
541
559
|
igst: gstBreakdown?.igst || undefined,
|
|
@@ -212,6 +212,70 @@ const _rawProductsStandardSeedData = [
|
|
|
212
212
|
createdAt: new Date("2026-04-10"),
|
|
213
213
|
updatedAt: new Date("2026-05-01"),
|
|
214
214
|
},
|
|
215
|
+
/*
|
|
216
|
+
* 🛑 CROSS-STORE PAIR — these two exist ONLY so the cross-store bundle
|
|
217
|
+
* refusal can be exercised. They are deliberately in DIFFERENT stores,
|
|
218
|
+
* which is the shape all four bundle write routes must reject via
|
|
219
|
+
* findBundleMemberStores().
|
|
220
|
+
*
|
|
221
|
+
* Added 2026-10-03: CLAUDE.md asserted these were seeded and they were not —
|
|
222
|
+
* a full reseed produced 70 products with zero tester fixtures, so the guard
|
|
223
|
+
* had nothing that could trigger it and the case was unrunnable. A guard with
|
|
224
|
+
* no data that triggers it is a guard nobody can verify.
|
|
225
|
+
*
|
|
226
|
+
* isTestData marks them for the sandbox cleanup sweep; keep the expiry far
|
|
227
|
+
* enough out that a run cannot outlive them.
|
|
228
|
+
*/
|
|
229
|
+
{
|
|
230
|
+
id: "product-tester-crossstore-a",
|
|
231
|
+
slug: "product-tester-crossstore-a",
|
|
232
|
+
title: "QA Cross-store A — Beyblade Arena",
|
|
233
|
+
description: "Tester fixture. Paired with product-tester-crossstore-b, which belongs to a DIFFERENT store, so that a bundle spanning both must be refused at save time.",
|
|
234
|
+
categorySlugs: ["category-beyblade-burst", "category-spinning-tops"],
|
|
235
|
+
categoryNames: ["Beyblade Burst", "Spinning Tops"],
|
|
236
|
+
brandSlug: "brand-beyblade",
|
|
237
|
+
brand: "Beyblade",
|
|
238
|
+
price: 499,
|
|
239
|
+
currency: "INR",
|
|
240
|
+
stockQuantity: 5,
|
|
241
|
+
availableQuantity: 5,
|
|
242
|
+
isSold: false,
|
|
243
|
+
mainImage: seedPhoto("product-image-tester-crossstore-a-1-20261003", 900, 900),
|
|
244
|
+
images: [seedPhoto("product-image-tester-crossstore-a-1-20261003", 900, 900)],
|
|
245
|
+
status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
|
|
246
|
+
condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
|
|
247
|
+
tags: ["qa-fixture"],
|
|
248
|
+
storeId: "store-beyblade-arena",
|
|
249
|
+
storeName: "Beyblade Arena",
|
|
250
|
+
isTestData: true,
|
|
251
|
+
createdAt: new Date("2026-10-03"),
|
|
252
|
+
updatedAt: new Date("2026-10-03"),
|
|
253
|
+
},
|
|
254
|
+
{
|
|
255
|
+
id: "product-tester-crossstore-b",
|
|
256
|
+
slug: "product-tester-crossstore-b",
|
|
257
|
+
title: "QA Cross-store B — LetItRip Official",
|
|
258
|
+
description: "Tester fixture. Paired with product-tester-crossstore-a, which belongs to a DIFFERENT store, so that a bundle spanning both must be refused at save time.",
|
|
259
|
+
categorySlugs: ["category-beyblade-burst", "category-spinning-tops"],
|
|
260
|
+
categoryNames: ["Beyblade Burst", "Spinning Tops"],
|
|
261
|
+
brandSlug: "brand-beyblade",
|
|
262
|
+
brand: "Beyblade",
|
|
263
|
+
price: 499,
|
|
264
|
+
currency: "INR",
|
|
265
|
+
stockQuantity: 5,
|
|
266
|
+
availableQuantity: 5,
|
|
267
|
+
isSold: false,
|
|
268
|
+
mainImage: seedPhoto("product-image-tester-crossstore-b-1-20261003", 900, 900),
|
|
269
|
+
images: [seedPhoto("product-image-tester-crossstore-b-1-20261003", 900, 900)],
|
|
270
|
+
status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
|
|
271
|
+
condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
|
|
272
|
+
tags: ["qa-fixture"],
|
|
273
|
+
storeId: "store-letitrip-official",
|
|
274
|
+
storeName: "LetItRip Official",
|
|
275
|
+
isTestData: true,
|
|
276
|
+
createdAt: new Date("2026-10-03"),
|
|
277
|
+
updatedAt: new Date("2026-10-03"),
|
|
278
|
+
},
|
|
215
279
|
{
|
|
216
280
|
id: "product-beyblade-original-driger-v",
|
|
217
281
|
slug: "product-beyblade-original-driger-v",
|