@lodashventure/medusa-parcel-shipping 0.2.13 → 0.3.0
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/.medusa/server/src/admin/index.js +1787 -1278
- package/.medusa/server/src/admin/index.mjs +1790 -1279
- package/.medusa/server/src/api/admin/boxes/[id]/route.js +52 -0
- package/.medusa/server/src/api/admin/boxes/route.js +44 -0
- package/.medusa/server/src/api/admin/distance/route.js +75 -0
- package/.medusa/server/src/api/admin/documents/document-packing-slip-settings/route.js +65 -0
- package/.medusa/server/{api → src/api}/admin/documents/packing-slip/preview/route.js +1 -1
- package/.medusa/server/{api → src/api}/admin/documents/packing-slip/route.js +2 -2
- package/.medusa/server/src/api/admin/material-costs/[id]/route.js +51 -0
- package/.medusa/server/src/api/admin/material-costs/route.js +46 -0
- package/.medusa/server/src/api/admin/packaging-materials/[id]/route.js +50 -0
- package/.medusa/server/src/api/admin/packaging-materials/route.js +52 -0
- package/.medusa/server/src/api/admin/packing-policies/[id]/route.js +41 -0
- package/.medusa/server/src/api/admin/packing-policies/route.js +43 -0
- package/.medusa/server/src/api/admin/rates/[id]/route.js +8 -0
- package/.medusa/server/src/api/admin/rates/route.js +7 -0
- package/.medusa/server/src/api/admin/service-areas/[id]/route.js +36 -0
- package/.medusa/server/src/api/admin/service-areas/route.js +40 -0
- package/.medusa/server/src/api/admin/shipping-rates/[id]/route.js +48 -0
- package/.medusa/server/src/api/admin/shipping-rates/route.js +66 -0
- package/.medusa/server/src/api/store/distance/route.js +75 -0
- package/.medusa/server/src/api/store/quote/route.js +116 -0
- package/.medusa/server/{common → src/common}/types.js +1 -1
- package/.medusa/server/src/common/utils/distance-calculator.js +98 -0
- package/.medusa/server/src/common/utils/geocoding.js +125 -0
- package/.medusa/server/{common → src/common}/utils/osrm-client.js +1 -1
- package/.medusa/server/src/common/utils/packing.js +484 -0
- package/.medusa/server/src/index.js +38 -0
- package/.medusa/server/{links → src/links}/index.js +1 -1
- package/.medusa/server/{links → src/links}/packing-slip-order.js +1 -1
- package/.medusa/server/{modules → src/modules}/documents/index.js +1 -1
- package/.medusa/server/{modules → src/modules}/documents/models/document-invoice.js +1 -1
- package/.medusa/server/{modules → src/modules}/documents/models/document-packing-slip-settings.js +1 -1
- package/.medusa/server/{modules → src/modules}/documents/models/document-packing-slip.js +1 -1
- package/.medusa/server/{modules → src/modules}/documents/models/document-settings.js +1 -1
- package/.medusa/server/{modules → src/modules}/documents/models/index.js +1 -1
- package/.medusa/server/{modules → src/modules}/documents/service.js +1 -1
- package/.medusa/server/{modules → src/modules}/documents/services/generators/invoice-generator.js +1 -1
- package/.medusa/server/{modules → src/modules}/documents/services/generators/packing-slip-generator.js +1 -1
- package/.medusa/server/{modules → src/modules}/documents/services/templates/invoices/basic/basic-logo.js +1 -1
- package/.medusa/server/{modules → src/modules}/documents/services/templates/invoices/basic/basic.js +1 -1
- package/.medusa/server/src/modules/documents/services/templates/invoices/basic/parts/customer-info.js +69 -0
- package/.medusa/server/{modules → src/modules}/documents/services/templates/invoices/basic/parts/header-for-logo.js +1 -1
- package/.medusa/server/{modules → src/modules}/documents/services/templates/invoices/basic/parts/header-logo.js +1 -1
- package/.medusa/server/src/modules/documents/services/templates/invoices/basic/parts/header.js +35 -0
- package/.medusa/server/{modules → src/modules}/documents/services/templates/invoices/basic/parts/hr.js +1 -1
- package/.medusa/server/{modules → src/modules}/documents/services/templates/invoices/basic/parts/invoice-info.js +1 -1
- package/.medusa/server/src/modules/documents/services/templates/invoices/basic/parts/table.js +97 -0
- package/.medusa/server/{modules → src/modules}/documents/services/templates/packing-slips/basic/basic.js +1 -1
- package/.medusa/server/src/modules/documents/services/templates/packing-slips/basic/parts/customer-info-small.js +69 -0
- package/.medusa/server/src/modules/documents/services/templates/packing-slips/basic/parts/customer-info.js +65 -0
- package/.medusa/server/src/modules/documents/services/templates/packing-slips/basic/parts/header-small.js +37 -0
- package/.medusa/server/src/modules/documents/services/templates/packing-slips/basic/parts/header.js +37 -0
- package/.medusa/server/{modules → src/modules}/documents/services/templates/packing-slips/basic/parts/hr.js +1 -1
- package/.medusa/server/src/modules/documents/services/templates/packing-slips/basic/parts/table-items-small.js +44 -0
- package/.medusa/server/src/modules/documents/services/templates/packing-slips/basic/parts/table-items.js +44 -0
- package/.medusa/server/src/modules/documents/services/templates/packing-slips/basic/parts/table-order-info-small.js +35 -0
- package/.medusa/server/{modules → src/modules}/documents/services/templates/packing-slips/basic/parts/table-order-info.js +1 -1
- package/.medusa/server/{modules → src/modules}/documents/services/templates/packing-slips/basic/small.js +1 -1
- package/.medusa/server/{modules → src/modules}/documents/types/api.js +1 -1
- package/.medusa/server/{modules → src/modules}/documents/types/constants.js +1 -1
- package/.medusa/server/{modules → src/modules}/documents/types/dto.js +1 -1
- package/.medusa/server/{modules → src/modules}/documents/types/template-kind.js +1 -1
- package/.medusa/server/{modules → src/modules}/documents/utils/currency.js +1 -1
- package/.medusa/server/src/modules/parcel-shipping/index.js +13 -0
- package/.medusa/server/src/modules/parcel-shipping/migrations/Migration20251023000000.js +37 -0
- package/.medusa/server/src/modules/parcel-shipping/models/index.js +16 -0
- package/.medusa/server/src/modules/parcel-shipping/models/material-cost.js +24 -0
- package/.medusa/server/src/modules/parcel-shipping/models/packaging-material.js +41 -0
- package/.medusa/server/src/modules/parcel-shipping/models/packing-policy.js +37 -0
- package/.medusa/server/src/modules/parcel-shipping/models/parcel-box.js +25 -0
- package/.medusa/server/src/modules/parcel-shipping/models/service-area.js +30 -0
- package/.medusa/server/src/modules/parcel-shipping/models/shipping-rate.js +50 -0
- package/.medusa/server/src/modules/parcel-shipping/service.js +485 -0
- package/.medusa/server/{providers → src/providers}/company-truck/index.js +1 -1
- package/.medusa/server/src/providers/company-truck/models/company-truck-rate.js +23 -0
- package/.medusa/server/{providers → src/providers}/company-truck/models/index.js +3 -2
- package/.medusa/server/src/providers/company-truck/models/material-cost.js +24 -0
- package/.medusa/server/src/providers/company-truck/models/parcel-box.js +21 -0
- package/.medusa/server/src/providers/company-truck/models/service-area.js +20 -0
- package/.medusa/server/src/providers/company-truck/service.js +456 -0
- package/.medusa/server/{providers → src/providers}/company-truck/types.js +1 -1
- package/.medusa/server/src/providers/index.js +8 -0
- package/.medusa/server/src/providers/parcel-fulfillment.js +378 -0
- package/.medusa/server/{providers → src/providers}/private-carrier/index.js +1 -1
- package/.medusa/server/{providers → src/providers}/private-carrier/models/index.js +1 -1
- package/.medusa/server/src/providers/private-carrier/models/parcel-box.js +21 -0
- package/.medusa/server/src/providers/private-carrier/models/private-carrier-rate.js +23 -0
- package/.medusa/server/src/providers/private-carrier/models/service-area.js +20 -0
- package/.medusa/server/src/providers/private-carrier/service.js +392 -0
- package/.medusa/server/{providers → src/providers}/private-carrier/types.js +1 -1
- package/.medusa/server/src/types/index.js +11 -0
- package/.medusa/server/src/utils/packing.js +386 -0
- package/.medusa/server/src/workflows/assign-packing-slip.js +35 -0
- package/.medusa/server/{workflows → src/workflows}/index.js +1 -1
- package/package.json +21 -11
- package/.medusa/server/api/admin/documents/document-packing-slip-settings/route.js +0 -62
- package/.medusa/server/api/admin/parcel-boxes/[id]/route.js +0 -45
- package/.medusa/server/api/admin/parcel-boxes/route.js +0 -49
- package/.medusa/server/api/admin/shipping-config/areas/[id]/route.js +0 -42
- package/.medusa/server/api/admin/shipping-config/areas/route.js +0 -49
- package/.medusa/server/api/admin/shipping-config/rates/[id]/route.js +0 -82
- package/.medusa/server/api/admin/shipping-config/rates/route.js +0 -95
- package/.medusa/server/api/shipping/distance/route.js +0 -85
- package/.medusa/server/api/shipping/distance/utils/zodTransform.js +0 -20
- package/.medusa/server/api/store/parcel-box-selector/route.js +0 -55
- package/.medusa/server/api/webhooks/tracking/route.js +0 -48
- package/.medusa/server/common/utils/packing.js +0 -379
- package/.medusa/server/index.js +0 -28
- package/.medusa/server/modules/documents/services/templates/invoices/basic/parts/customer-info.js +0 -69
- package/.medusa/server/modules/documents/services/templates/invoices/basic/parts/header.js +0 -35
- package/.medusa/server/modules/documents/services/templates/invoices/basic/parts/table.js +0 -97
- package/.medusa/server/modules/documents/services/templates/packing-slips/basic/parts/customer-info-small.js +0 -69
- package/.medusa/server/modules/documents/services/templates/packing-slips/basic/parts/customer-info.js +0 -65
- package/.medusa/server/modules/documents/services/templates/packing-slips/basic/parts/header-small.js +0 -37
- package/.medusa/server/modules/documents/services/templates/packing-slips/basic/parts/header.js +0 -37
- package/.medusa/server/modules/documents/services/templates/packing-slips/basic/parts/table-items-small.js +0 -44
- package/.medusa/server/modules/documents/services/templates/packing-slips/basic/parts/table-items.js +0 -44
- package/.medusa/server/modules/documents/services/templates/packing-slips/basic/parts/table-order-info-small.js +0 -35
- package/.medusa/server/providers/company-truck/models/company-truck-rate.js +0 -23
- package/.medusa/server/providers/company-truck/models/parcel-box.js +0 -21
- package/.medusa/server/providers/company-truck/models/service-area.js +0 -20
- package/.medusa/server/providers/company-truck/service.js +0 -456
- package/.medusa/server/providers/private-carrier/models/parcel-box.js +0 -21
- package/.medusa/server/providers/private-carrier/models/private-carrier-rate.js +0 -23
- package/.medusa/server/providers/private-carrier/models/service-area.js +0 -20
- package/.medusa/server/providers/private-carrier/service.js +0 -392
- package/.medusa/server/workflows/assign-packing-slip.js +0 -31
|
@@ -0,0 +1,485 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
4
|
+
const parcel_box_1 = require("./models/parcel-box");
|
|
5
|
+
const shipping_rate_1 = require("./models/shipping-rate");
|
|
6
|
+
const service_area_1 = require("./models/service-area");
|
|
7
|
+
const packing_policy_1 = require("./models/packing-policy");
|
|
8
|
+
const packaging_material_1 = require("./models/packaging-material");
|
|
9
|
+
const material_cost_1 = require("./models/material-cost");
|
|
10
|
+
const packing_1 = require("../../common/utils/packing");
|
|
11
|
+
const distance_calculator_1 = require("../../common/utils/distance-calculator");
|
|
12
|
+
const CACHE_TTL_MS = 60_000; // 60 seconds
|
|
13
|
+
/**
|
|
14
|
+
* Unified Parcel Shipping Service
|
|
15
|
+
* Handles box selection, packing, and shipping quotes for all service levels
|
|
16
|
+
*/
|
|
17
|
+
class ParcelShippingService extends (0, utils_1.MedusaService)({
|
|
18
|
+
ParcelBox: parcel_box_1.ParcelBox,
|
|
19
|
+
ShippingRate: shipping_rate_1.ShippingRate,
|
|
20
|
+
ServiceArea: service_area_1.ServiceArea,
|
|
21
|
+
PackingPolicy: packing_policy_1.PackingPolicy,
|
|
22
|
+
PackagingMaterial: packaging_material_1.PackagingMaterial,
|
|
23
|
+
MaterialCost: material_cost_1.MaterialCost,
|
|
24
|
+
}) {
|
|
25
|
+
constructor() {
|
|
26
|
+
super(...arguments);
|
|
27
|
+
this.cache = {
|
|
28
|
+
boxes: { data: null, expiresAt: 0 },
|
|
29
|
+
rates: { data: null, expiresAt: 0 },
|
|
30
|
+
areas: { data: null, expiresAt: 0 },
|
|
31
|
+
policies: { data: null, expiresAt: 0 },
|
|
32
|
+
materials: { data: null, expiresAt: 0 },
|
|
33
|
+
material_costs: { data: null, expiresAt: 0 },
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
// ============================================================================
|
|
37
|
+
// Cache Management
|
|
38
|
+
// ============================================================================
|
|
39
|
+
invalidateCache(keys) {
|
|
40
|
+
if (!keys || keys.length === 0) {
|
|
41
|
+
Object.keys(this.cache).forEach((key) => {
|
|
42
|
+
this.cache[key] = { data: null, expiresAt: 0 };
|
|
43
|
+
});
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
for (const key of keys) {
|
|
47
|
+
this.cache[key] = { data: null, expiresAt: 0 };
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
async getCached(key, fetcher, filters = {}) {
|
|
51
|
+
const now = Date.now();
|
|
52
|
+
const hasFilters = Object.keys(filters).length > 0;
|
|
53
|
+
if (!hasFilters &&
|
|
54
|
+
this.cache[key].data &&
|
|
55
|
+
this.cache[key].expiresAt > now) {
|
|
56
|
+
return this.cache[key].data;
|
|
57
|
+
}
|
|
58
|
+
const data = await fetcher();
|
|
59
|
+
if (!hasFilters) {
|
|
60
|
+
this.cache[key] = { data, expiresAt: now + CACHE_TTL_MS };
|
|
61
|
+
}
|
|
62
|
+
return data;
|
|
63
|
+
}
|
|
64
|
+
// ============================================================================
|
|
65
|
+
// Box Management
|
|
66
|
+
// ============================================================================
|
|
67
|
+
async findBoxes(filters = {}, config = {}) {
|
|
68
|
+
return this.getCached("boxes", () => this.listParcelBoxes(filters, config), filters);
|
|
69
|
+
}
|
|
70
|
+
async createBox(data) {
|
|
71
|
+
const result = await this.createParcelBoxes([data]);
|
|
72
|
+
this.invalidateCache(["boxes"]);
|
|
73
|
+
return result[0];
|
|
74
|
+
}
|
|
75
|
+
async updateBox(id, data) {
|
|
76
|
+
const result = await this.updateParcelBoxes({ id, ...data });
|
|
77
|
+
this.invalidateCache(["boxes"]);
|
|
78
|
+
return result[0];
|
|
79
|
+
}
|
|
80
|
+
async deleteBox(id) {
|
|
81
|
+
await this.deleteParcelBoxes([id]);
|
|
82
|
+
this.invalidateCache(["boxes"]);
|
|
83
|
+
}
|
|
84
|
+
// ============================================================================
|
|
85
|
+
// Shipping Rate Management
|
|
86
|
+
// ============================================================================
|
|
87
|
+
async findRates(filters = {}, config = {}) {
|
|
88
|
+
return this.getCached("rates", () => this.listShippingRates(filters, config), filters);
|
|
89
|
+
}
|
|
90
|
+
async createRate(data) {
|
|
91
|
+
const result = await this.createShippingRates([data]);
|
|
92
|
+
this.invalidateCache(["rates"]);
|
|
93
|
+
return result[0];
|
|
94
|
+
}
|
|
95
|
+
async updateRate(id, data) {
|
|
96
|
+
const result = await this.updateShippingRates({ id, ...data });
|
|
97
|
+
this.invalidateCache(["rates"]);
|
|
98
|
+
return result[0];
|
|
99
|
+
}
|
|
100
|
+
async deleteRate(id) {
|
|
101
|
+
await this.deleteShippingRates([id]);
|
|
102
|
+
this.invalidateCache(["rates"]);
|
|
103
|
+
}
|
|
104
|
+
// ============================================================================
|
|
105
|
+
// Service Area Management
|
|
106
|
+
// ============================================================================
|
|
107
|
+
async findServiceAreas(filters = {}, config = {}) {
|
|
108
|
+
return this.getCached("areas", () => this.listServiceAreas(filters, config), filters);
|
|
109
|
+
}
|
|
110
|
+
async createServiceArea(data) {
|
|
111
|
+
const result = await this.createServiceAreas([data]);
|
|
112
|
+
this.invalidateCache(["areas"]);
|
|
113
|
+
return result[0];
|
|
114
|
+
}
|
|
115
|
+
async updateServiceArea(id, data) {
|
|
116
|
+
const result = await this.updateServiceAreas({ id, ...data });
|
|
117
|
+
this.invalidateCache(["areas"]);
|
|
118
|
+
return result[0];
|
|
119
|
+
}
|
|
120
|
+
async deleteServiceArea(id) {
|
|
121
|
+
await this.deleteServiceAreas([id]);
|
|
122
|
+
this.invalidateCache(["areas"]);
|
|
123
|
+
}
|
|
124
|
+
// ============================================================================
|
|
125
|
+
// Packing Policy Management
|
|
126
|
+
// ============================================================================
|
|
127
|
+
async findPackingPolicies(filters = {}, config = {}) {
|
|
128
|
+
return this.getCached("policies", () => this.listPackingPolicies(filters, config), filters);
|
|
129
|
+
}
|
|
130
|
+
async findPackingPolicyByProduct(productId) {
|
|
131
|
+
const policies = await this.findPackingPolicies({ product_id: productId });
|
|
132
|
+
return policies[0] || null;
|
|
133
|
+
}
|
|
134
|
+
async createPackingPolicy(data) {
|
|
135
|
+
const result = await this.createPackingPolicies([data]);
|
|
136
|
+
this.invalidateCache(["policies"]);
|
|
137
|
+
return result[0];
|
|
138
|
+
}
|
|
139
|
+
async updatePackingPolicy(id, data) {
|
|
140
|
+
const result = await this.updatePackingPolicies({ id, ...data });
|
|
141
|
+
this.invalidateCache(["policies"]);
|
|
142
|
+
return result[0];
|
|
143
|
+
}
|
|
144
|
+
async deletePackingPolicy(id) {
|
|
145
|
+
await this.deletePackingPolicies([id]);
|
|
146
|
+
this.invalidateCache(["policies"]);
|
|
147
|
+
}
|
|
148
|
+
// ============================================================================
|
|
149
|
+
// Packaging Material Management
|
|
150
|
+
// ============================================================================
|
|
151
|
+
async findPackagingMaterials(filters = {}, config = {}) {
|
|
152
|
+
return this.getCached("materials", () => this.listPackagingMaterials(filters, config), filters);
|
|
153
|
+
}
|
|
154
|
+
async createPackagingMaterial(data) {
|
|
155
|
+
const result = await this.createPackagingMaterials([data]);
|
|
156
|
+
this.invalidateCache(["materials"]);
|
|
157
|
+
return result[0];
|
|
158
|
+
}
|
|
159
|
+
async updatePackagingMaterial(id, data) {
|
|
160
|
+
const result = await this.updatePackagingMaterials({ id, ...data });
|
|
161
|
+
this.invalidateCache(["materials"]);
|
|
162
|
+
return result[0];
|
|
163
|
+
}
|
|
164
|
+
async deletePackagingMaterial(id) {
|
|
165
|
+
await this.deletePackagingMaterials([id]);
|
|
166
|
+
this.invalidateCache(["materials"]);
|
|
167
|
+
}
|
|
168
|
+
// ============================================================================
|
|
169
|
+
// Material Cost Management
|
|
170
|
+
// ============================================================================
|
|
171
|
+
async findMaterialCosts(filters = {}, config = {}) {
|
|
172
|
+
return this.getCached("material_costs", () => this.listMaterialCosts(filters, config), filters);
|
|
173
|
+
}
|
|
174
|
+
async createMaterialCost(data) {
|
|
175
|
+
const result = await this.createMaterialCosts([data]);
|
|
176
|
+
this.invalidateCache(["material_costs"]);
|
|
177
|
+
return result[0];
|
|
178
|
+
}
|
|
179
|
+
async updateMaterialCost(id, data) {
|
|
180
|
+
const result = await this.updateMaterialCosts({ id, ...data });
|
|
181
|
+
this.invalidateCache(["material_costs"]);
|
|
182
|
+
return result[0];
|
|
183
|
+
}
|
|
184
|
+
async deleteMaterialCost(id) {
|
|
185
|
+
await this.deleteMaterialCosts([id]);
|
|
186
|
+
this.invalidateCache(["material_costs"]);
|
|
187
|
+
}
|
|
188
|
+
// ============================================================================
|
|
189
|
+
// Core Quote Logic
|
|
190
|
+
// ============================================================================
|
|
191
|
+
async quote(request) {
|
|
192
|
+
// 1. Validate country
|
|
193
|
+
if (request.shipping_address.country.toUpperCase() !== "TH") {
|
|
194
|
+
throw new Error(`Country ${request.shipping_address.country} is not supported. Only Thailand (TH) is supported.`);
|
|
195
|
+
}
|
|
196
|
+
// 2. Get boxes and find best packing
|
|
197
|
+
const boxes = await this.findBoxes({ active: true });
|
|
198
|
+
if (!boxes || boxes.length === 0) {
|
|
199
|
+
throw new Error("No active parcel boxes are configured.");
|
|
200
|
+
}
|
|
201
|
+
const boxCandidates = boxes.map((box) => ({
|
|
202
|
+
id: box.id,
|
|
203
|
+
name: box.name,
|
|
204
|
+
width_cm: box.width_cm,
|
|
205
|
+
length_cm: box.length_cm,
|
|
206
|
+
height_cm: box.height_cm,
|
|
207
|
+
max_weight_kg: box.max_weight_kg,
|
|
208
|
+
price_thb: box.price_thb,
|
|
209
|
+
}));
|
|
210
|
+
// Check if multi-box packing is allowed (default: true)
|
|
211
|
+
const allowSplitBoxes = request.allow_split_boxes !== false;
|
|
212
|
+
let packingResults;
|
|
213
|
+
if (allowSplitBoxes) {
|
|
214
|
+
// Use multi-box packing algorithm
|
|
215
|
+
const packingResult = (0, packing_1.selectMultiBoxPacking)(request.items, boxCandidates);
|
|
216
|
+
if (!packingResult.success || !packingResult.results) {
|
|
217
|
+
throw new Error(packingResult.message || "Failed to pack items");
|
|
218
|
+
}
|
|
219
|
+
packingResults = packingResult.results.map((result) => ({
|
|
220
|
+
box: result.box,
|
|
221
|
+
packing: result.metrics,
|
|
222
|
+
}));
|
|
223
|
+
}
|
|
224
|
+
else {
|
|
225
|
+
// Use single-box packing only
|
|
226
|
+
const packingResult = (0, packing_1.selectBestPacking)(request.items, boxCandidates);
|
|
227
|
+
if (!packingResult.success) {
|
|
228
|
+
throw new Error(packingResult.message ||
|
|
229
|
+
"Failed to pack items in a single box. Enable allow_split_boxes to use multiple boxes.");
|
|
230
|
+
}
|
|
231
|
+
packingResults = [
|
|
232
|
+
{
|
|
233
|
+
box: packingResult.result.box,
|
|
234
|
+
packing: packingResult.result.metrics,
|
|
235
|
+
},
|
|
236
|
+
];
|
|
237
|
+
}
|
|
238
|
+
// Calculate total weight and costs across all boxes
|
|
239
|
+
const totalWeightKg = packingResults.reduce((sum, result) => sum + result.packing.totalWeightKg, 0);
|
|
240
|
+
const totalBoxCost = packingResults.reduce((sum, result) => sum + result.box.price_thb, 0);
|
|
241
|
+
// 3. Calculate packaging materials cost for all boxes
|
|
242
|
+
const packagingCost = await this.calculatePackagingMaterialsCost(request.items, packingResults[0].packing, // Use first box metrics for material calculations
|
|
243
|
+
totalWeightKg);
|
|
244
|
+
// 4. Get all available shipping options
|
|
245
|
+
const shippingOptions = await this.calculateShippingOptions(request.shipping_address, totalWeightKg, totalBoxCost, packagingCost);
|
|
246
|
+
// 5. Select preferred or best option
|
|
247
|
+
let selected;
|
|
248
|
+
if (request.preferred_service) {
|
|
249
|
+
selected = shippingOptions.find((opt) => opt.carrier_type === request.preferred_service.carrier_type &&
|
|
250
|
+
opt.service_code === request.preferred_service.service_code &&
|
|
251
|
+
opt.available);
|
|
252
|
+
}
|
|
253
|
+
// If no preferred or preferred not available, pick first available
|
|
254
|
+
if (!selected) {
|
|
255
|
+
selected = shippingOptions.find((opt) => opt.available);
|
|
256
|
+
}
|
|
257
|
+
// 6. Calculate distance if origin address is provided
|
|
258
|
+
let distance;
|
|
259
|
+
if (request.origin_address) {
|
|
260
|
+
try {
|
|
261
|
+
const calculator = new distance_calculator_1.DistanceCalculator();
|
|
262
|
+
distance = await calculator.calculateDistance({
|
|
263
|
+
address_line_1: request.origin_address.address_line_1,
|
|
264
|
+
address_line_2: request.origin_address.address_line_2,
|
|
265
|
+
street: request.origin_address.street,
|
|
266
|
+
sub_district: request.origin_address.sub_district,
|
|
267
|
+
district: request.origin_address.district,
|
|
268
|
+
city: request.origin_address.city,
|
|
269
|
+
province: request.origin_address.province,
|
|
270
|
+
postcode: request.origin_address.postcode,
|
|
271
|
+
country: request.origin_address.country,
|
|
272
|
+
}, {
|
|
273
|
+
address_line_1: request.shipping_address.address_line_1,
|
|
274
|
+
address_line_2: request.shipping_address.address_line_2,
|
|
275
|
+
street: request.shipping_address.street,
|
|
276
|
+
sub_district: request.shipping_address.sub_district,
|
|
277
|
+
district: request.shipping_address.district,
|
|
278
|
+
city: request.shipping_address.city,
|
|
279
|
+
province: request.shipping_address.province,
|
|
280
|
+
postcode: request.shipping_address.postcode,
|
|
281
|
+
country: request.shipping_address.country,
|
|
282
|
+
});
|
|
283
|
+
}
|
|
284
|
+
catch (error) {
|
|
285
|
+
// Log error but don't fail the quote
|
|
286
|
+
console.error("Failed to calculate distance:", error);
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
// For backward compatibility, keep best_box and packing for single box
|
|
290
|
+
// For multi-box, include boxes array
|
|
291
|
+
return {
|
|
292
|
+
best_box: packingResults[0].box,
|
|
293
|
+
packing: packingResults[0].packing,
|
|
294
|
+
boxes: packingResults,
|
|
295
|
+
shipping_options: shippingOptions,
|
|
296
|
+
selected,
|
|
297
|
+
distance,
|
|
298
|
+
};
|
|
299
|
+
}
|
|
300
|
+
// ============================================================================
|
|
301
|
+
// Shipping Options Calculation
|
|
302
|
+
// ============================================================================
|
|
303
|
+
async calculatePackagingMaterialsCost(items, metrics, totalWeightKg) {
|
|
304
|
+
const materials = await this.findPackagingMaterials({ active: true });
|
|
305
|
+
let totalCost = 0;
|
|
306
|
+
// Count fragile items
|
|
307
|
+
const fragileCount = items.reduce((count, item) => {
|
|
308
|
+
if (item.attributes?.fragile) {
|
|
309
|
+
return count + item.quantity;
|
|
310
|
+
}
|
|
311
|
+
return count;
|
|
312
|
+
}, 0);
|
|
313
|
+
for (const material of materials) {
|
|
314
|
+
let materialCost = 0;
|
|
315
|
+
// Auto-apply for fragile items
|
|
316
|
+
if (material.auto_apply_for_fragile && fragileCount > 0) {
|
|
317
|
+
switch (material.unit_type) {
|
|
318
|
+
case "PER_ITEM":
|
|
319
|
+
materialCost = material.cost_per_unit * fragileCount;
|
|
320
|
+
break;
|
|
321
|
+
case "PER_KG":
|
|
322
|
+
materialCost = material.cost_per_unit * totalWeightKg;
|
|
323
|
+
break;
|
|
324
|
+
case "FLAT":
|
|
325
|
+
materialCost = material.cost_per_unit;
|
|
326
|
+
break;
|
|
327
|
+
case "PER_M2":
|
|
328
|
+
// Simplified: use box surface area (approximation)
|
|
329
|
+
materialCost = material.cost_per_unit * 0.5; // TODO: Calculate actual surface area
|
|
330
|
+
break;
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
// Auto-apply for heavy items
|
|
334
|
+
if (material.auto_apply_for_heavy &&
|
|
335
|
+
material.heavy_threshold_kg &&
|
|
336
|
+
totalWeightKg >= material.heavy_threshold_kg) {
|
|
337
|
+
switch (material.unit_type) {
|
|
338
|
+
case "PER_ITEM":
|
|
339
|
+
materialCost = Math.max(materialCost, material.cost_per_unit * items.length);
|
|
340
|
+
break;
|
|
341
|
+
case "PER_KG":
|
|
342
|
+
materialCost = Math.max(materialCost, material.cost_per_unit * totalWeightKg);
|
|
343
|
+
break;
|
|
344
|
+
case "FLAT":
|
|
345
|
+
materialCost = Math.max(materialCost, material.cost_per_unit);
|
|
346
|
+
break;
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
totalCost += materialCost;
|
|
350
|
+
}
|
|
351
|
+
return Number(totalCost.toFixed(2));
|
|
352
|
+
}
|
|
353
|
+
async calculateShippingOptions(address, weightKg, boxCost, packagingCost) {
|
|
354
|
+
const inServiceArea = await this.checkServiceArea(address);
|
|
355
|
+
const currentTime = new Date();
|
|
356
|
+
const isBusinessHours = this.isBusinessHours(currentTime);
|
|
357
|
+
const options = [];
|
|
358
|
+
// Define all 4 service levels
|
|
359
|
+
const serviceLevels = [
|
|
360
|
+
{
|
|
361
|
+
carrier_type: "COMPANY_FLEET",
|
|
362
|
+
service_code: "MESSENGER_3H",
|
|
363
|
+
name: "ส่งด่วน 3 ชั่วโมง",
|
|
364
|
+
requiresServiceArea: true,
|
|
365
|
+
requiresBusinessHours: true,
|
|
366
|
+
},
|
|
367
|
+
{
|
|
368
|
+
carrier_type: "COMPANY_TRUCK",
|
|
369
|
+
service_code: "SAME_DAY",
|
|
370
|
+
name: "ส่งด่วนภายในวัน",
|
|
371
|
+
requiresServiceArea: true,
|
|
372
|
+
requiresBusinessHours: false,
|
|
373
|
+
},
|
|
374
|
+
{
|
|
375
|
+
carrier_type: "PRIVATE_CARRIER",
|
|
376
|
+
service_code: "STANDARD_3_5D",
|
|
377
|
+
name: "EMS ไปรษณีย์ (3-5 วัน)",
|
|
378
|
+
requiresServiceArea: false,
|
|
379
|
+
requiresBusinessHours: false,
|
|
380
|
+
},
|
|
381
|
+
{
|
|
382
|
+
carrier_type: "PRIVATE_CARRIER",
|
|
383
|
+
service_code: "EXPRESS_1_2D",
|
|
384
|
+
name: "Express (1-2 วัน)",
|
|
385
|
+
requiresServiceArea: false,
|
|
386
|
+
requiresBusinessHours: false,
|
|
387
|
+
},
|
|
388
|
+
];
|
|
389
|
+
for (const level of serviceLevels) {
|
|
390
|
+
let available = true;
|
|
391
|
+
let reason;
|
|
392
|
+
// Check service area requirement
|
|
393
|
+
if (level.requiresServiceArea && !inServiceArea) {
|
|
394
|
+
available = false;
|
|
395
|
+
reason = "นอกพื้นที่บริการ";
|
|
396
|
+
}
|
|
397
|
+
// Check business hours requirement
|
|
398
|
+
if (level.requiresBusinessHours && !isBusinessHours) {
|
|
399
|
+
available = false;
|
|
400
|
+
reason = "นอกเวลาทำการ (จันทร์-ศุกร์ 9:00-18:00)";
|
|
401
|
+
}
|
|
402
|
+
// Find rate for this service
|
|
403
|
+
const rate = await this.findRateForService(level.carrier_type, level.service_code, weightKg);
|
|
404
|
+
if (!rate) {
|
|
405
|
+
available = false;
|
|
406
|
+
reason = "ไม่พบอัตราค่าบริการสำหรับน้ำหนักนี้";
|
|
407
|
+
}
|
|
408
|
+
const shippingCost = rate?.price ?? 999999;
|
|
409
|
+
const totalPrice = boxCost + packagingCost + shippingCost;
|
|
410
|
+
options.push({
|
|
411
|
+
carrier_type: level.carrier_type,
|
|
412
|
+
service_code: level.service_code,
|
|
413
|
+
price: Number(totalPrice.toFixed(2)),
|
|
414
|
+
currency: rate?.currency ?? "THB",
|
|
415
|
+
eta_hours_min: rate?.eta_hours_min ?? undefined,
|
|
416
|
+
eta_hours_max: rate?.eta_hours_max ?? undefined,
|
|
417
|
+
eta_days_min: rate?.eta_days_min ?? undefined,
|
|
418
|
+
eta_days_max: rate?.eta_days_max ?? undefined,
|
|
419
|
+
available,
|
|
420
|
+
reason,
|
|
421
|
+
price_breakdown: {
|
|
422
|
+
box_cost: Number(boxCost.toFixed(2)),
|
|
423
|
+
packaging_materials_cost: Number(packagingCost.toFixed(2)),
|
|
424
|
+
shipping_cost: Number(shippingCost.toFixed(2)),
|
|
425
|
+
total: Number(totalPrice.toFixed(2)),
|
|
426
|
+
},
|
|
427
|
+
});
|
|
428
|
+
}
|
|
429
|
+
// Sort by priority: available first, then by price
|
|
430
|
+
return options.sort((a, b) => {
|
|
431
|
+
if (a.available !== b.available) {
|
|
432
|
+
return a.available ? -1 : 1;
|
|
433
|
+
}
|
|
434
|
+
return a.price - b.price;
|
|
435
|
+
});
|
|
436
|
+
}
|
|
437
|
+
async checkServiceArea(address) {
|
|
438
|
+
const areas = await this.findServiceAreas({ active: true });
|
|
439
|
+
for (const area of areas) {
|
|
440
|
+
if (area.kind === "PROVINCE" && address.province) {
|
|
441
|
+
const normalizedProvince = this.normalizeString(address.province);
|
|
442
|
+
const normalizedValue = this.normalizeString(area.value);
|
|
443
|
+
if (normalizedProvince === normalizedValue) {
|
|
444
|
+
return true;
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
else if (area.kind === "POSTCODE_PREFIX" && address.postcode) {
|
|
448
|
+
const postcodePrefix = address.postcode.substring(0, area.value.length);
|
|
449
|
+
if (postcodePrefix === area.value) {
|
|
450
|
+
return true;
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
return false;
|
|
455
|
+
}
|
|
456
|
+
async findRateForService(carrierType, serviceCode, weightKg) {
|
|
457
|
+
const rates = await this.findRates({
|
|
458
|
+
carrier_type: carrierType,
|
|
459
|
+
service_code: serviceCode,
|
|
460
|
+
active: true,
|
|
461
|
+
});
|
|
462
|
+
// Sort by max_weight_kg ascending
|
|
463
|
+
const sortedRates = rates.sort((a, b) => a.max_weight_kg - b.max_weight_kg);
|
|
464
|
+
// Find first rate that can handle this weight
|
|
465
|
+
for (const rate of sortedRates) {
|
|
466
|
+
if (weightKg <= rate.max_weight_kg) {
|
|
467
|
+
return rate;
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
return null;
|
|
471
|
+
}
|
|
472
|
+
isBusinessHours(date) {
|
|
473
|
+
const day = date.getDay(); // 0 = Sunday, 1 = Monday, ..., 6 = Saturday
|
|
474
|
+
const hour = date.getHours();
|
|
475
|
+
// Monday to Friday, 9 AM to 6 PM
|
|
476
|
+
const isWeekday = day >= 1 && day <= 5;
|
|
477
|
+
const isDuringHours = hour >= 9 && hour < 18;
|
|
478
|
+
return isWeekday && isDuringHours;
|
|
479
|
+
}
|
|
480
|
+
normalizeString(str) {
|
|
481
|
+
return str.trim().toLowerCase();
|
|
482
|
+
}
|
|
483
|
+
}
|
|
484
|
+
exports.default = ParcelShippingService;
|
|
485
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL3BhcmNlbC1zaGlwcGluZy9zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEscURBQTBEO0FBQzFELG9EQUFnRDtBQUNoRCwwREFBc0Q7QUFDdEQsd0RBQW9EO0FBQ3BELDREQUF3RDtBQUN4RCxvRUFBZ0U7QUFDaEUsMERBQXNEO0FBQ3RELHdEQUdvQztBQUNwQyxnRkFBNEU7QUFhNUUsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLENBQUMsYUFBYTtBQVUxQzs7O0dBR0c7QUFDSCxNQUFNLHFCQUFzQixTQUFRLElBQUEscUJBQWEsRUFBQztJQUNoRCxTQUFTLEVBQVQsc0JBQVM7SUFDVCxZQUFZLEVBQVosNEJBQVk7SUFDWixXQUFXLEVBQVgsMEJBQVc7SUFDWCxhQUFhLEVBQWIsOEJBQWE7SUFDYixpQkFBaUIsRUFBakIsc0NBQWlCO0lBQ2pCLFlBQVksRUFBWiw0QkFBWTtDQUNiLENBQUM7SUFQRjs7UUFRVSxVQUFLLEdBQXVEO1lBQ2xFLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRTtZQUNuQyxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUU7WUFDbkMsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFO1lBQ25DLFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRTtZQUN0QyxTQUFTLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUU7WUFDdkMsY0FBYyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFO1NBQzdDLENBQUM7SUFrbkJKLENB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
|
|
@@ -7,4 +7,4 @@ Object.defineProperty(exports, "CompanyTruckFulfillmentProvider", { enumerable:
|
|
|
7
7
|
exports.default = (0, utils_1.ModuleProvider)(utils_1.Modules.FULFILLMENT, {
|
|
8
8
|
services: [service_1.CompanyTruckFulfillmentProvider],
|
|
9
9
|
});
|
|
10
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvcHJvdmlkZXJzL2NvbXBhbnktdHJ1Y2svaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscURBQW9FO0FBQ3BFLHVDQUE0RDtBQU1uRCxnSEFOQSx5Q0FBK0IsT0FNQTtBQUp4QyxrQkFBZSxJQUFBLHNCQUFjLEVBQUMsZUFBTyxDQUFDLFdBQVcsRUFBRTtJQUNqRCxRQUFRLEVBQUUsQ0FBQyx5Q0FBK0IsQ0FBQztDQUM1QyxDQUFDLENBQUMifQ==
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CompanyTruckRate = void 0;
|
|
4
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
5
|
+
exports.CompanyTruckRate = utils_1.model
|
|
6
|
+
.define("company_truck_rate", {
|
|
7
|
+
id: utils_1.model.id().primaryKey(),
|
|
8
|
+
min_weight_kg: utils_1.model.float().default(0),
|
|
9
|
+
max_weight_kg: utils_1.model.float(),
|
|
10
|
+
price_thb: utils_1.model.float(),
|
|
11
|
+
// Distance-based pricing fields
|
|
12
|
+
base_price_thb: utils_1.model.float().nullable(),
|
|
13
|
+
price_per_km_thb: utils_1.model.float().nullable(),
|
|
14
|
+
use_distance_pricing: utils_1.model.boolean().default(false),
|
|
15
|
+
currency: utils_1.model.text().default("THB"),
|
|
16
|
+
active: utils_1.model.boolean().default(true),
|
|
17
|
+
})
|
|
18
|
+
.indexes([
|
|
19
|
+
{
|
|
20
|
+
on: ["active"],
|
|
21
|
+
},
|
|
22
|
+
]);
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGFueS10cnVjay1yYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3Byb3ZpZGVycy9jb21wYW55LXRydWNrL21vZGVscy9jb21wYW55LXRydWNrLXJhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscURBQWlEO0FBRXBDLFFBQUEsZ0JBQWdCLEdBQUcsYUFBSztLQUNsQyxNQUFNLENBQUMsb0JBQW9CLEVBQUU7SUFDNUIsRUFBRSxFQUFFLGFBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLEVBQUU7SUFDM0IsYUFBYSxFQUFFLGFBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ3ZDLGFBQWEsRUFBRSxhQUFLLENBQUMsS0FBSyxFQUFFO0lBQzVCLFNBQVMsRUFBRSxhQUFLLENBQUMsS0FBSyxFQUFFO0lBQ3hCLGdDQUFnQztJQUNoQyxjQUFjLEVBQUUsYUFBSyxDQUFDLEtBQUssRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUN4QyxnQkFBZ0IsRUFBRSxhQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQzFDLG9CQUFvQixFQUFFLGFBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO0lBQ3BELFFBQVEsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztJQUNyQyxNQUFNLEVBQUUsYUFBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7Q0FDdEMsQ0FBQztLQUNELE9BQU8sQ0FBQztJQUNQO1FBQ0UsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDO0tBQ2Y7Q0FDRixDQUFDLENBQUEifQ==
|
|
@@ -14,7 +14,8 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./parcel-box"), exports);
|
|
18
17
|
__exportStar(require("./company-truck-rate"), exports);
|
|
19
18
|
__exportStar(require("./service-area"), exports);
|
|
20
|
-
|
|
19
|
+
__exportStar(require("./parcel-box"), exports);
|
|
20
|
+
__exportStar(require("./material-cost"), exports);
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvcHJvdmlkZXJzL2NvbXBhbnktdHJ1Y2svbW9kZWxzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx1REFBcUM7QUFDckMsaURBQStCO0FBQy9CLCtDQUE2QjtBQUM3QixrREFBZ0MifQ==
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MaterialCost = void 0;
|
|
4
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
5
|
+
exports.MaterialCost = utils_1.model
|
|
6
|
+
.define("material_cost", {
|
|
7
|
+
id: utils_1.model.id().primaryKey(),
|
|
8
|
+
name: utils_1.model.text(),
|
|
9
|
+
unit: utils_1.model.text(),
|
|
10
|
+
cost_per_unit: utils_1.model.float(),
|
|
11
|
+
currency: utils_1.model.text().default("THB"),
|
|
12
|
+
category: utils_1.model.text().nullable(),
|
|
13
|
+
description: utils_1.model.text().nullable(),
|
|
14
|
+
active: utils_1.model.boolean().default(true),
|
|
15
|
+
})
|
|
16
|
+
.indexes([
|
|
17
|
+
{
|
|
18
|
+
on: ["active"],
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
on: ["category"],
|
|
22
|
+
},
|
|
23
|
+
]);
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwtY29zdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9wcm92aWRlcnMvY29tcGFueS10cnVjay9tb2RlbHMvbWF0ZXJpYWwtY29zdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxREFBaUQ7QUFFcEMsUUFBQSxZQUFZLEdBQUcsYUFBSztLQUM5QixNQUFNLENBQUMsZUFBZSxFQUFFO0lBQ3ZCLEVBQUUsRUFBRSxhQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxFQUFFO0lBQzNCLElBQUksRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFO0lBQ2xCLElBQUksRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFO0lBQ2xCLGFBQWEsRUFBRSxhQUFLLENBQUMsS0FBSyxFQUFFO0lBQzVCLFFBQVEsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztJQUNyQyxRQUFRLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNqQyxXQUFXLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNwQyxNQUFNLEVBQUUsYUFBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7Q0FDdEMsQ0FBQztLQUNELE9BQU8sQ0FBQztJQUNQO1FBQ0UsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDO0tBQ2Y7SUFDRDtRQUNFLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQztLQUNqQjtDQUNGLENBQUMsQ0FBQSJ9
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ParcelBox = void 0;
|
|
4
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
5
|
+
exports.ParcelBox = utils_1.model
|
|
6
|
+
.define("parcel_box", {
|
|
7
|
+
id: utils_1.model.id().primaryKey(),
|
|
8
|
+
name: utils_1.model.text(),
|
|
9
|
+
width_cm: utils_1.model.float(),
|
|
10
|
+
length_cm: utils_1.model.float(),
|
|
11
|
+
height_cm: utils_1.model.float(),
|
|
12
|
+
max_weight_kg: utils_1.model.float(),
|
|
13
|
+
price_thb: utils_1.model.float(),
|
|
14
|
+
active: utils_1.model.boolean().default(true),
|
|
15
|
+
})
|
|
16
|
+
.indexes([
|
|
17
|
+
{
|
|
18
|
+
on: ["active"],
|
|
19
|
+
},
|
|
20
|
+
]);
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyY2VsLWJveC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9wcm92aWRlcnMvY29tcGFueS10cnVjay9tb2RlbHMvcGFyY2VsLWJveC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxREFBaUQ7QUFFcEMsUUFBQSxTQUFTLEdBQUcsYUFBSztLQUMzQixNQUFNLENBQUMsWUFBWSxFQUFFO0lBQ3BCLEVBQUUsRUFBRSxhQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxFQUFFO0lBQzNCLElBQUksRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFO0lBQ2xCLFFBQVEsRUFBRSxhQUFLLENBQUMsS0FBSyxFQUFFO0lBQ3ZCLFNBQVMsRUFBRSxhQUFLLENBQUMsS0FBSyxFQUFFO0lBQ3hCLFNBQVMsRUFBRSxhQUFLLENBQUMsS0FBSyxFQUFFO0lBQ3hCLGFBQWEsRUFBRSxhQUFLLENBQUMsS0FBSyxFQUFFO0lBQzVCLFNBQVMsRUFBRSxhQUFLLENBQUMsS0FBSyxFQUFFO0lBQ3hCLE1BQU0sRUFBRSxhQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztDQUN0QyxDQUFDO0tBQ0QsT0FBTyxDQUFDO0lBQ1A7UUFDRSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUM7S0FDZjtDQUNGLENBQUMsQ0FBQSJ9
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ServiceArea = void 0;
|
|
4
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
5
|
+
exports.ServiceArea = utils_1.model
|
|
6
|
+
.define("parcel_service_area", {
|
|
7
|
+
id: utils_1.model.id().primaryKey(),
|
|
8
|
+
kind: utils_1.model.enum(["PROVINCE", "POSTCODE_PREFIX"]),
|
|
9
|
+
value: utils_1.model.text(),
|
|
10
|
+
active: utils_1.model.boolean().default(true),
|
|
11
|
+
})
|
|
12
|
+
.indexes([
|
|
13
|
+
{
|
|
14
|
+
on: ["kind", "value"],
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
on: ["active"],
|
|
18
|
+
},
|
|
19
|
+
]);
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS1hcmVhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3Byb3ZpZGVycy9jb21wYW55LXRydWNrL21vZGVscy9zZXJ2aWNlLWFyZWEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscURBQWlEO0FBRXBDLFFBQUEsV0FBVyxHQUFHLGFBQUs7S0FDN0IsTUFBTSxDQUFDLHFCQUFxQixFQUFFO0lBQzdCLEVBQUUsRUFBRSxhQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxFQUFFO0lBQzNCLElBQUksRUFBRSxhQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxFQUFFLGlCQUFpQixDQUFDLENBQUM7SUFDakQsS0FBSyxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUU7SUFDbkIsTUFBTSxFQUFFLGFBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO0NBQ3RDLENBQUM7S0FDRCxPQUFPLENBQUM7SUFDUDtRQUNFLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUM7S0FDdEI7SUFDRDtRQUNFLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQztLQUNmO0NBQ0YsQ0FBQyxDQUFBIn0=
|