@blackcode_sa/metaestetics-api 1.12.43 → 1.12.45
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/dist/admin/index.d.mts +6 -12
- package/dist/admin/index.d.ts +6 -12
- package/dist/backoffice/index.d.mts +18 -275
- package/dist/backoffice/index.d.ts +18 -275
- package/dist/backoffice/index.js +14 -802
- package/dist/backoffice/index.mjs +38 -830
- package/dist/index.d.mts +10 -255
- package/dist/index.d.ts +10 -255
- package/dist/index.js +32 -750
- package/dist/index.mjs +40 -761
- package/package.json +1 -1
- package/src/backoffice/services/brand.service.ts +0 -86
- package/src/backoffice/services/category.service.ts +0 -84
- package/src/backoffice/services/constants.service.ts +0 -77
- package/src/backoffice/services/product.service.ts +18 -316
- package/src/backoffice/services/requirement.service.ts +0 -76
- package/src/backoffice/services/subcategory.service.ts +0 -87
- package/src/backoffice/services/technology.service.ts +0 -289
- package/src/backoffice/types/product.types.ts +6 -116
- package/src/services/appointment/utils/zone-management.utils.ts +17 -3
- package/src/backoffice/services/migrate-products.ts +0 -116
|
@@ -33,14 +33,15 @@ export function calculateItemSubtotal(item: Partial<ZoneItemData>): number {
|
|
|
33
33
|
return 0;
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
-
|
|
36
|
+
const quantity = item.quantity || 0;
|
|
37
|
+
|
|
38
|
+
// If price override amount is set, use it as price per unit
|
|
37
39
|
if (item.priceOverrideAmount !== undefined && item.priceOverrideAmount !== null) {
|
|
38
|
-
return item.priceOverrideAmount;
|
|
40
|
+
return item.priceOverrideAmount * quantity;
|
|
39
41
|
}
|
|
40
42
|
|
|
41
43
|
// Calculate normally: price * quantity
|
|
42
44
|
const price = item.price || 0;
|
|
43
|
-
const quantity = item.quantity || 0;
|
|
44
45
|
return price * quantity;
|
|
45
46
|
}
|
|
46
47
|
|
|
@@ -269,9 +270,22 @@ export async function updateZoneItemUtil(
|
|
|
269
270
|
updatedAt: new Date().toISOString(),
|
|
270
271
|
};
|
|
271
272
|
|
|
273
|
+
console.log(`[updateZoneItemUtil] BEFORE recalculation:`, {
|
|
274
|
+
itemIndex,
|
|
275
|
+
quantity: items[itemIndex].quantity,
|
|
276
|
+
priceOverrideAmount: items[itemIndex].priceOverrideAmount,
|
|
277
|
+
price: items[itemIndex].price,
|
|
278
|
+
oldSubtotal: items[itemIndex].subtotal,
|
|
279
|
+
});
|
|
280
|
+
|
|
272
281
|
// Recalculate subtotal for this item
|
|
273
282
|
items[itemIndex].subtotal = calculateItemSubtotal(items[itemIndex]);
|
|
274
283
|
|
|
284
|
+
console.log(`[updateZoneItemUtil] AFTER recalculation:`, {
|
|
285
|
+
itemIndex,
|
|
286
|
+
newSubtotal: items[itemIndex].subtotal,
|
|
287
|
+
});
|
|
288
|
+
|
|
275
289
|
// Recalculate final billing
|
|
276
290
|
const finalbilling = calculateFinalBilling(metadata.zonesData); //TODO: add correct amount of tax
|
|
277
291
|
|
|
@@ -1,116 +0,0 @@
|
|
|
1
|
-
import * as admin from 'firebase-admin';
|
|
2
|
-
import { Product } from '../types/product.types';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Migration script to copy existing products from technology subcollections
|
|
6
|
-
* to the new top-level products collection
|
|
7
|
-
*
|
|
8
|
-
* Usage: Run this once to migrate existing data
|
|
9
|
-
*/
|
|
10
|
-
export async function migrateProductsToTopLevel(db: admin.firestore.Firestore) {
|
|
11
|
-
console.log('🚀 Starting product migration...');
|
|
12
|
-
|
|
13
|
-
// Get all technologies
|
|
14
|
-
const technologiesSnapshot = await db.collection('technologies').get();
|
|
15
|
-
|
|
16
|
-
const productMap = new Map<string, {
|
|
17
|
-
product: any;
|
|
18
|
-
technologyIds: string[];
|
|
19
|
-
}>();
|
|
20
|
-
|
|
21
|
-
let totalProcessed = 0;
|
|
22
|
-
|
|
23
|
-
// Step 1: Collect all products from all technology subcollections
|
|
24
|
-
for (const techDoc of technologiesSnapshot.docs) {
|
|
25
|
-
const technologyId = techDoc.id;
|
|
26
|
-
console.log(`📦 Processing technology: ${technologyId}`);
|
|
27
|
-
|
|
28
|
-
const productsSnapshot = await db
|
|
29
|
-
.collection('technologies')
|
|
30
|
-
.doc(technologyId)
|
|
31
|
-
.collection('products')
|
|
32
|
-
.get();
|
|
33
|
-
|
|
34
|
-
for (const productDoc of productsSnapshot.docs) {
|
|
35
|
-
const productId = productDoc.id;
|
|
36
|
-
const productData = productDoc.data();
|
|
37
|
-
|
|
38
|
-
totalProcessed++;
|
|
39
|
-
|
|
40
|
-
// Deduplicate by name + brandId
|
|
41
|
-
const key = `${productData.name}_${productData.brandId}`;
|
|
42
|
-
|
|
43
|
-
if (productMap.has(key)) {
|
|
44
|
-
// Product already exists, just add this technology
|
|
45
|
-
productMap.get(key)!.technologyIds.push(technologyId);
|
|
46
|
-
} else {
|
|
47
|
-
// New product
|
|
48
|
-
productMap.set(key, {
|
|
49
|
-
product: productData,
|
|
50
|
-
technologyIds: [technologyId],
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
console.log(`✅ Found ${productMap.size} unique products from ${totalProcessed} total entries`);
|
|
57
|
-
|
|
58
|
-
// Step 2: Create products in top-level collection
|
|
59
|
-
const batch = db.batch();
|
|
60
|
-
let batchCount = 0;
|
|
61
|
-
const MAX_BATCH_SIZE = 500;
|
|
62
|
-
let createdCount = 0;
|
|
63
|
-
|
|
64
|
-
for (const [key, { product, technologyIds }] of productMap.entries()) {
|
|
65
|
-
const productRef = db.collection('products').doc();
|
|
66
|
-
|
|
67
|
-
const migratedProduct: any = {
|
|
68
|
-
...product,
|
|
69
|
-
assignedTechnologyIds: technologyIds, // Track all assigned technologies
|
|
70
|
-
migratedAt: admin.firestore.FieldValue.serverTimestamp(),
|
|
71
|
-
migrationKey: key, // For debugging
|
|
72
|
-
};
|
|
73
|
-
|
|
74
|
-
batch.set(productRef, migratedProduct);
|
|
75
|
-
createdCount++;
|
|
76
|
-
batchCount++;
|
|
77
|
-
|
|
78
|
-
if (batchCount >= MAX_BATCH_SIZE) {
|
|
79
|
-
await batch.commit();
|
|
80
|
-
console.log(`💾 Committed batch of ${batchCount} products (${createdCount}/${productMap.size})`);
|
|
81
|
-
batchCount = 0;
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
if (batchCount > 0) {
|
|
86
|
-
await batch.commit();
|
|
87
|
-
console.log(`💾 Committed final batch of ${batchCount} products`);
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
console.log('✅ Migration complete!');
|
|
91
|
-
console.log(`📊 Summary:`);
|
|
92
|
-
console.log(` - Products processed: ${totalProcessed}`);
|
|
93
|
-
console.log(` - Unique products created: ${createdCount}`);
|
|
94
|
-
console.log(` - Average technologies per product: ${(createdCount > 0 ? totalProcessed / createdCount : 0).toFixed(2)}`);
|
|
95
|
-
|
|
96
|
-
return {
|
|
97
|
-
totalProcessed,
|
|
98
|
-
uniqueCreated: createdCount,
|
|
99
|
-
};
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
/**
|
|
103
|
-
* Run migration (for testing)
|
|
104
|
-
*/
|
|
105
|
-
if (require.main === module) {
|
|
106
|
-
(async () => {
|
|
107
|
-
try {
|
|
108
|
-
await migrateProductsToTopLevel(admin.firestore());
|
|
109
|
-
process.exit(0);
|
|
110
|
-
} catch (error) {
|
|
111
|
-
console.error('❌ Migration failed:', error);
|
|
112
|
-
process.exit(1);
|
|
113
|
-
}
|
|
114
|
-
})();
|
|
115
|
-
}
|
|
116
|
-
|