@lodashventure/medusa-parcel-shipping 0.0.7 → 0.2.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.
Files changed (88) hide show
  1. package/.medusa/server/api/admin/documents/document-packing-slip-settings/route.js +62 -0
  2. package/.medusa/server/api/admin/documents/packing-slip/preview/route.js +47 -0
  3. package/.medusa/server/api/admin/documents/packing-slip/route.js +112 -0
  4. package/.medusa/server/api/admin/parcel-boxes/[id]/route.js +45 -0
  5. package/.medusa/server/api/admin/parcel-boxes/route.js +49 -0
  6. package/.medusa/server/api/admin/shipping-config/areas/[id]/route.js +42 -0
  7. package/.medusa/server/api/admin/shipping-config/areas/route.js +49 -0
  8. package/.medusa/server/api/admin/shipping-config/rates/[id]/route.js +82 -0
  9. package/.medusa/server/api/admin/shipping-config/rates/route.js +95 -0
  10. package/.medusa/server/api/shipping/distance/route.js +85 -0
  11. package/.medusa/server/api/shipping/distance/utils/zodTransform.js +20 -0
  12. package/.medusa/server/api/store/parcel-box-selector/route.js +55 -0
  13. package/.medusa/server/api/webhooks/tracking/route.js +48 -0
  14. package/.medusa/server/common/types.js +4 -0
  15. package/.medusa/server/common/utils/osrm-client.js +81 -0
  16. package/.medusa/server/common/utils/packing.js +379 -0
  17. package/.medusa/server/{src/modules/parcel-shipping/index.js → index.js} +9 -9
  18. package/.medusa/server/links/index.js +9 -0
  19. package/.medusa/server/links/packing-slip-order.js +13 -0
  20. package/.medusa/server/modules/documents/index.js +24 -0
  21. package/.medusa/server/modules/documents/models/document-invoice.js +20 -0
  22. package/.medusa/server/modules/documents/models/document-packing-slip-settings.js +29 -0
  23. package/.medusa/server/modules/documents/models/document-packing-slip.js +32 -0
  24. package/.medusa/server/modules/documents/models/document-settings.js +32 -0
  25. package/.medusa/server/modules/documents/models/index.js +15 -0
  26. package/.medusa/server/modules/documents/service.js +219 -0
  27. package/.medusa/server/modules/documents/services/generators/invoice-generator.js +73 -0
  28. package/.medusa/server/modules/documents/services/generators/packing-slip-generator.js +73 -0
  29. package/.medusa/server/modules/documents/services/templates/invoices/basic/basic-logo.js +55 -0
  30. package/.medusa/server/modules/documents/services/templates/invoices/basic/basic.js +52 -0
  31. package/.medusa/server/modules/documents/services/templates/invoices/basic/parts/customer-info.js +69 -0
  32. package/.medusa/server/modules/documents/services/templates/invoices/basic/parts/header-for-logo.js +32 -0
  33. package/.medusa/server/modules/documents/services/templates/invoices/basic/parts/header-logo.js +29 -0
  34. package/.medusa/server/modules/documents/services/templates/invoices/basic/parts/header.js +35 -0
  35. package/.medusa/server/modules/documents/services/templates/invoices/basic/parts/hr.js +23 -0
  36. package/.medusa/server/modules/documents/services/templates/invoices/basic/parts/invoice-info.js +35 -0
  37. package/.medusa/server/modules/documents/services/templates/invoices/basic/parts/table.js +97 -0
  38. package/.medusa/server/modules/documents/services/templates/packing-slips/basic/basic.js +52 -0
  39. package/.medusa/server/modules/documents/services/templates/packing-slips/basic/parts/customer-info-small.js +69 -0
  40. package/.medusa/server/modules/documents/services/templates/packing-slips/basic/parts/customer-info.js +65 -0
  41. package/.medusa/server/modules/documents/services/templates/packing-slips/basic/parts/header-small.js +37 -0
  42. package/.medusa/server/modules/documents/services/templates/packing-slips/basic/parts/header.js +37 -0
  43. package/.medusa/server/modules/documents/services/templates/packing-slips/basic/parts/hr.js +32 -0
  44. package/.medusa/server/modules/documents/services/templates/packing-slips/basic/parts/table-items-small.js +44 -0
  45. package/.medusa/server/modules/documents/services/templates/packing-slips/basic/parts/table-items.js +44 -0
  46. package/.medusa/server/modules/documents/services/templates/packing-slips/basic/parts/table-order-info-small.js +35 -0
  47. package/.medusa/server/modules/documents/services/templates/packing-slips/basic/parts/table-order-info.js +36 -0
  48. package/.medusa/server/modules/documents/services/templates/packing-slips/basic/small.js +53 -0
  49. package/.medusa/server/modules/documents/types/api.js +14 -0
  50. package/.medusa/server/modules/documents/types/constants.js +17 -0
  51. package/.medusa/server/modules/documents/types/dto.js +14 -0
  52. package/.medusa/server/modules/documents/types/template-kind.js +25 -0
  53. package/.medusa/server/modules/documents/utils/currency.js +25 -0
  54. package/.medusa/server/providers/company-truck/index.js +10 -0
  55. package/.medusa/server/providers/company-truck/models/company-truck-rate.js +23 -0
  56. package/.medusa/server/{src → providers/company-truck/models}/index.js +4 -8
  57. package/.medusa/server/providers/company-truck/models/parcel-box.js +21 -0
  58. package/.medusa/server/providers/company-truck/models/service-area.js +20 -0
  59. package/.medusa/server/providers/company-truck/service.js +456 -0
  60. package/.medusa/server/{src/modules/parcel-shipping → providers/company-truck}/types.js +1 -1
  61. package/.medusa/server/providers/private-carrier/index.js +10 -0
  62. package/.medusa/server/providers/private-carrier/models/index.js +20 -0
  63. package/.medusa/server/providers/private-carrier/models/parcel-box.js +21 -0
  64. package/.medusa/server/providers/private-carrier/models/private-carrier-rate.js +23 -0
  65. package/.medusa/server/providers/private-carrier/models/service-area.js +20 -0
  66. package/.medusa/server/providers/private-carrier/service.js +392 -0
  67. package/.medusa/server/providers/private-carrier/types.js +3 -0
  68. package/.medusa/server/src/admin/index.js +3 -2
  69. package/.medusa/server/src/admin/index.mjs +3 -2
  70. package/.medusa/server/workflows/assign-packing-slip.js +31 -0
  71. package/.medusa/server/workflows/index.js +9 -0
  72. package/package.json +25 -34
  73. package/.medusa/server/src/api/admin/parcel-boxes/[id]/route.js +0 -47
  74. package/.medusa/server/src/api/admin/parcel-boxes/route.js +0 -48
  75. package/.medusa/server/src/api/admin/shipping-config/areas/[id]/route.js +0 -44
  76. package/.medusa/server/src/api/admin/shipping-config/areas/route.js +0 -48
  77. package/.medusa/server/src/api/admin/shipping-config/rates/[id]/route.js +0 -53
  78. package/.medusa/server/src/api/admin/shipping-config/rates/route.js +0 -55
  79. package/.medusa/server/src/api/store/parcel-box-selector/route.js +0 -53
  80. package/.medusa/server/src/modules/parcel-shipping/migrations/Migration20251015120000.js +0 -70
  81. package/.medusa/server/src/modules/parcel-shipping/models/parcel-box.js +0 -21
  82. package/.medusa/server/src/modules/parcel-shipping/models/service-area.js +0 -20
  83. package/.medusa/server/src/modules/parcel-shipping/models/shipping-rate.js +0 -20
  84. package/.medusa/server/src/modules/parcel-shipping/service.js +0 -172
  85. package/.medusa/server/src/modules/parcel-shipping/utils/packing.js +0 -319
  86. package/.medusa/server/src/providers/company-truck/index.js +0 -19
  87. package/.medusa/server/src/providers/parcel-fulfillment-base.js +0 -180
  88. package/.medusa/server/src/providers/private-carrier/index.js +0 -19
@@ -1,172 +0,0 @@
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_1 = require("./utils/packing");
8
- const CACHE_TTL_MS = 60_000;
9
- class ParcelShippingModuleService extends (0, utils_1.MedusaService)({
10
- ParcelBox: parcel_box_1.ParcelBox,
11
- ShippingRate: shipping_rate_1.ShippingRate,
12
- ServiceArea: service_area_1.ServiceArea,
13
- }) {
14
- constructor() {
15
- super(...arguments);
16
- this.cache = {
17
- boxes: { data: null, expiresAt: 0 },
18
- rates: { data: null, expiresAt: 0 },
19
- areas: { data: null, expiresAt: 0 },
20
- };
21
- }
22
- invalidateCache(keys) {
23
- if (!keys || keys.length === 0) {
24
- Object.keys(this.cache).forEach((key) => {
25
- this.cache[key] = { data: null, expiresAt: 0 };
26
- });
27
- return;
28
- }
29
- for (const key of keys) {
30
- this.cache[key] = { data: null, expiresAt: 0 };
31
- }
32
- }
33
- async quote(input) {
34
- if (!input.items?.length) {
35
- throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "At least one line item is required.");
36
- }
37
- if (!input.shipping_address) {
38
- throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Shipping address is required.");
39
- }
40
- const address = input.shipping_address;
41
- if (address.country?.toUpperCase() !== "TH") {
42
- throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_ALLOWED, "country_not_supported");
43
- }
44
- const [boxes, rates, serviceAreas] = await Promise.all([
45
- this.getActiveBoxes(),
46
- this.getActiveRates(),
47
- this.getActiveServiceAreas(),
48
- ]);
49
- if (!boxes.length) {
50
- throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, "No active parcel boxes configured.");
51
- }
52
- const packing = (0, packing_1.selectBestPacking)(input.items, boxes);
53
- if (!packing.success) {
54
- return {
55
- success: false,
56
- failure: packing,
57
- };
58
- }
59
- const totalWeight = packing.result.metrics.totalWeightKg;
60
- const shippingQuote = this.resolveShippingQuote(address, totalWeight, rates, serviceAreas);
61
- return {
62
- success: true,
63
- best_box: packing.result.box,
64
- packing: packing.result.metrics,
65
- shipping_quote: shippingQuote,
66
- };
67
- }
68
- async getActiveBoxes() {
69
- return this.readThroughCache("boxes", async () => {
70
- const records = await this.listParcelBoxes({ active: true }, { order: { price_thb: "ASC" } });
71
- return records.map((record) => ({
72
- id: record.id,
73
- name: record.name,
74
- width_cm: Number(record.width_cm),
75
- length_cm: Number(record.length_cm),
76
- height_cm: Number(record.height_cm),
77
- max_weight_kg: Number(record.max_weight_kg),
78
- price_thb: Number(record.price_thb),
79
- }));
80
- });
81
- }
82
- async quoteShippingOnly(address, totalWeightKg) {
83
- if (!address) {
84
- throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Shipping address is required.");
85
- }
86
- if (!totalWeightKg || !Number.isFinite(totalWeightKg) || totalWeightKg <= 0) {
87
- throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "A positive shipment weight in kilograms is required.");
88
- }
89
- const [rates, serviceAreas] = await Promise.all([
90
- this.getActiveRates(),
91
- this.getActiveServiceAreas(),
92
- ]);
93
- return this.resolveShippingQuote(address, Number(totalWeightKg.toFixed(4)), rates, serviceAreas);
94
- }
95
- async getActiveRates() {
96
- return this.readThroughCache("rates", async () => {
97
- const records = await this.listShippingRates({ active: true }, { order: { carrier: "ASC", max_weight_kg: "ASC" } });
98
- return records.map((record) => ({
99
- id: record.id,
100
- carrier: record.carrier,
101
- min_weight_kg: Number(record.min_weight_kg ?? 0),
102
- max_weight_kg: Number(record.max_weight_kg),
103
- price_thb: Number(record.price_thb),
104
- currency: record.currency || "THB",
105
- }));
106
- });
107
- }
108
- async getActiveServiceAreas() {
109
- return this.readThroughCache("areas", async () => {
110
- const records = await this.listServiceAreas({ active: true }, { order: { kind: "ASC", value: "ASC" } });
111
- return records.map((record) => ({
112
- id: record.id,
113
- kind: record.kind,
114
- value: record.value,
115
- }));
116
- });
117
- }
118
- resolveShippingQuote(address, totalWeightKg, rates, areas) {
119
- const inServiceArea = this.isInServiceArea(address, areas);
120
- const carrier = inServiceArea
121
- ? "COMPANY_TRUCK"
122
- : "PRIVATE_CARRIER";
123
- const carrierRates = rates
124
- .filter((rate) => rate.carrier === carrier)
125
- .sort((a, b) => a.max_weight_kg - b.max_weight_kg);
126
- if (!carrierRates.length) {
127
- throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, `rate_missing(${carrier})`);
128
- }
129
- const selectedRate = carrierRates.find((rate) => {
130
- const min = rate.min_weight_kg ?? 0;
131
- return totalWeightKg >= min && totalWeightKg <= rate.max_weight_kg;
132
- });
133
- if (!selectedRate) {
134
- throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `weight_slab_missing_${carrier}`);
135
- }
136
- return {
137
- method: carrier,
138
- area: inServiceArea ? "SERVICE_AREA" : "OUT_OF_AREA",
139
- weightKg: Number(totalWeightKg.toFixed(3)),
140
- price: selectedRate.price_thb,
141
- currency: selectedRate.currency || "THB",
142
- };
143
- }
144
- isInServiceArea(address, areas) {
145
- const provinceNormalized = address.province.trim().toLowerCase();
146
- const postcode = (address.postcode || "").trim();
147
- return areas.some((area) => {
148
- if (area.kind === "PROVINCE") {
149
- return area.value.trim().toLowerCase() === provinceNormalized;
150
- }
151
- if (area.kind === "POSTCODE_PREFIX") {
152
- return postcode.startsWith(area.value.trim());
153
- }
154
- return false;
155
- });
156
- }
157
- async readThroughCache(key, loader) {
158
- const entry = this.cache[key];
159
- const now = Date.now();
160
- if (entry.data && entry.expiresAt > now) {
161
- return entry.data;
162
- }
163
- const data = await loader();
164
- this.cache[key] = {
165
- data,
166
- expiresAt: now + CACHE_TTL_MS,
167
- };
168
- return data;
169
- }
170
- }
171
- exports.default = ParcelShippingModuleService;
172
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL3BhcmNlbC1zaGlwcGluZy9zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEscURBQXNFO0FBQ3RFLG9EQUErQztBQUMvQywwREFBcUQ7QUFDckQsd0RBQW1EO0FBV25ELDZDQUFtRDtBQUVuRCxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUE7QUFJM0IsTUFBcUIsMkJBQTRCLFNBQVEsSUFBQSxxQkFBYSxFQUFDO0lBQ3JFLFNBQVMsRUFBVCxzQkFBUztJQUNULFlBQVksRUFBWiw0QkFBWTtJQUNaLFdBQVcsRUFBWCwwQkFBVztDQUNaLENBQUM7SUFKRjs7UUFLVSxVQUFLLEdBR1Q7WUFDRixLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUU7WUFDbkMsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFO1lBQ25DLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRTtTQUNwQyxDQUFBO0lBZ1BILENBQUM7SUE5T0MsZUFBZSxDQUFDLElBQWlCO1FBQy9CLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMvQixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDdEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFlLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFBO1lBQzVELENBQUMsQ0FBQyxDQUFBO1lBQ0YsT0FBTTtRQUNSLENBQUM7UUFFRCxLQUFLLE1BQU0sR0FBRyxJQUFJLElB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
@@ -1,319 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.selectBestPacking = selectBestPacking;
4
- const PADDING_PER_SIDE_CM = 2;
5
- const PADDING_TOTAL = PADDING_PER_SIDE_CM * 2;
6
- function selectBestPacking(items, boxes) {
7
- const expandedItems = expandItems(items);
8
- if (!expandedItems.length) {
9
- return {
10
- success: false,
11
- code: "invalid_items",
12
- message: "No items with positive quantity were provided.",
13
- };
14
- }
15
- const successful = [];
16
- const overweight = [];
17
- const nearFits = [];
18
- for (const box of boxes) {
19
- const evaluation = evaluateBox(box, expandedItems);
20
- if (evaluation.status === "success") {
21
- successful.push(evaluation.evaluation);
22
- continue;
23
- }
24
- if (evaluation.evaluation) {
25
- if (evaluation.status === "overweight") {
26
- overweight.push(evaluation.evaluation);
27
- }
28
- else if (evaluation.status === "no_fit") {
29
- nearFits.push(evaluation.evaluation);
30
- }
31
- }
32
- }
33
- if (successful.length) {
34
- const sorted = successful.sort(comparePacking);
35
- return {
36
- success: true,
37
- result: sorted[0],
38
- };
39
- }
40
- if (overweight.length) {
41
- return {
42
- success: false,
43
- code: "no_fit_weight",
44
- message: "Total weight exceeds the maximum weight limit for available boxes.",
45
- alternatives: overweight.slice(0, 3).sort(comparePacking),
46
- };
47
- }
48
- return {
49
- success: false,
50
- code: "no_fit",
51
- message: "No configured box can fit the provided items.",
52
- alternatives: nearFits.slice(0, 3).sort(comparePacking),
53
- };
54
- }
55
- function evaluateBox(box, items) {
56
- const totalActualWeight = items.reduce((acc, item) => acc + item.weight, 0);
57
- const packedVolume = items.reduce((acc, item) => acc + item.volume, 0);
58
- const initialMetrics = {
59
- usedHeight: 0,
60
- headroom: box.height_cm,
61
- wasteAreaSum: box.width_cm * box.length_cm,
62
- voidVolume: Math.max(box.width_cm * box.length_cm * box.height_cm - packedVolume, 0),
63
- layers: 0,
64
- placements: [],
65
- totalWeightKg: Number(totalActualWeight.toFixed(4)),
66
- };
67
- if (totalActualWeight > box.max_weight_kg) {
68
- return {
69
- status: "overweight",
70
- overBy: totalActualWeight - box.max_weight_kg,
71
- evaluation: {
72
- box,
73
- metrics: initialMetrics,
74
- },
75
- };
76
- }
77
- const layers = [];
78
- const sortedItems = items
79
- .map((item) => ({ item }))
80
- .sort((a, b) => b.item.volume - a.item.volume);
81
- for (const { item } of sortedItems) {
82
- const orientations = getOrientations(item, Boolean(item.attributes?.noStack));
83
- let placed = false;
84
- for (const orientation of orientations) {
85
- for (const layer of layers) {
86
- if (item.attributes?.noStack && layer.index !== 0) {
87
- continue;
88
- }
89
- const totalHeightIfPlaced = layers.reduce((acc, existingLayer) => acc +
90
- (existingLayer === layer
91
- ? Math.max(existingLayer.height, orientation.height)
92
- : existingLayer.height), 0);
93
- if (totalHeightIfPlaced > box.height_cm + 1e-6) {
94
- continue;
95
- }
96
- const placement = placeInLayer(layer, orientation);
97
- if (placement) {
98
- placed = true;
99
- layer.height = Math.max(layer.height, orientation.height);
100
- layer.hasNoStack =
101
- layer.hasNoStack || Boolean(item.attributes?.noStack);
102
- layer.placements.push({
103
- sku: item.sku,
104
- orientation,
105
- position: [placement.x, placement.y, layer.startHeight],
106
- });
107
- recalculateLayerHeights(layers);
108
- updateWasteArea(initialMetrics, layers);
109
- break;
110
- }
111
- }
112
- if (placed) {
113
- break;
114
- }
115
- const totalUsedHeight = layers.reduce((acc, layer) => acc + layer.height, 0);
116
- if (totalUsedHeight + orientation.height > box.height_cm + 1e-6) {
117
- continue;
118
- }
119
- if (item.attributes?.noStack && layers.length > 0) {
120
- continue;
121
- }
122
- const newLayer = {
123
- index: layers.length,
124
- startHeight: totalUsedHeight,
125
- height: orientation.height,
126
- spaces: [
127
- {
128
- x: 0,
129
- y: 0,
130
- width: box.width_cm,
131
- length: box.length_cm,
132
- },
133
- ],
134
- placements: [],
135
- hasNoStack: Boolean(item.attributes?.noStack),
136
- };
137
- const placement = placeInLayer(newLayer, orientation);
138
- if (!placement) {
139
- continue;
140
- }
141
- newLayer.placements.push({
142
- sku: item.sku,
143
- orientation,
144
- position: [placement.x, placement.y, newLayer.startHeight],
145
- });
146
- layers.push(newLayer);
147
- recalculateLayerHeights(layers);
148
- updateWasteArea(initialMetrics, layers);
149
- placed = true;
150
- break;
151
- }
152
- if (!placed) {
153
- return {
154
- status: "no_fit",
155
- slackScore: calculateSlackScore(box, items),
156
- evaluation: {
157
- box,
158
- metrics: initialMetrics,
159
- },
160
- };
161
- }
162
- }
163
- initialMetrics.layers = layers.length;
164
- initialMetrics.usedHeight = layers.reduce((acc, layer) => acc + layer.height, 0);
165
- initialMetrics.headroom = Number(Math.max(box.height_cm - initialMetrics.usedHeight, 0).toFixed(2));
166
- initialMetrics.placements = layers.flatMap((layer, layerIdx) => layer.placements.map((placement) => ({
167
- sku: placement.sku,
168
- orientation: [
169
- Number(placement.orientation.width.toFixed(2)),
170
- Number(placement.orientation.length.toFixed(2)),
171
- Number(placement.orientation.height.toFixed(2)),
172
- ],
173
- position: placement.position,
174
- layerIndex: layerIdx,
175
- })));
176
- initialMetrics.wasteAreaSum = layers.reduce((acc, layer) => acc +
177
- layer.spaces.reduce((spaceAcc, space) => {
178
- return spaceAcc + space.width * space.length;
179
- }, 0), 0);
180
- return {
181
- status: "success",
182
- evaluation: {
183
- box,
184
- metrics: initialMetrics,
185
- },
186
- };
187
- }
188
- function expandItems(items) {
189
- const expanded = [];
190
- for (const item of items) {
191
- const qty = Math.max(0, Math.floor(item.quantity));
192
- if (!qty) {
193
- continue;
194
- }
195
- const paddedWidth = item.width + PADDING_TOTAL;
196
- const paddedLength = item.length + PADDING_TOTAL;
197
- const paddedHeight = item.height + PADDING_TOTAL;
198
- const volume = paddedWidth * paddedLength * paddedHeight;
199
- for (let i = 0; i < qty; i++) {
200
- expanded.push({
201
- sku: item.sku,
202
- baseWidth: item.width,
203
- baseLength: item.length,
204
- baseHeight: item.height,
205
- width: paddedWidth,
206
- length: paddedLength,
207
- height: paddedHeight,
208
- weight: item.weight,
209
- volume,
210
- attributes: item.attributes,
211
- });
212
- }
213
- }
214
- return expanded;
215
- }
216
- function getOrientations(item, noStack) {
217
- const orientations = [];
218
- const dims = [item.width, item.length, item.height];
219
- const permutations = [
220
- [dims[0], dims[1], dims[2]],
221
- [dims[0], dims[2], dims[1]],
222
- [dims[1], dims[0], dims[2]],
223
- [dims[1], dims[2], dims[0]],
224
- [dims[2], dims[0], dims[1]],
225
- [dims[2], dims[1], dims[0]],
226
- ];
227
- for (const [w, l, h] of permutations) {
228
- if (noStack && h > Math.min(w, l)) {
229
- continue;
230
- }
231
- orientations.push({
232
- width: Number(w.toFixed(2)),
233
- length: Number(l.toFixed(2)),
234
- height: Number(h.toFixed(2)),
235
- volume: Number((w * l * h).toFixed(2)),
236
- });
237
- }
238
- return orientations.sort((a, b) => a.height - b.height || a.volume - b.volume);
239
- }
240
- function placeInLayer(layer, orientation) {
241
- for (let i = 0; i < layer.spaces.length; i++) {
242
- const space = layer.spaces[i];
243
- if (orientation.width <= space.width + 1e-6 &&
244
- orientation.length <= space.length + 1e-6) {
245
- layer.spaces.splice(i, 1);
246
- splitSpace(layer, space, orientation);
247
- return {
248
- x: space.x,
249
- y: space.y,
250
- width: orientation.width,
251
- length: orientation.length,
252
- };
253
- }
254
- }
255
- return null;
256
- }
257
- function splitSpace(layer, space, orientation) {
258
- const remainingWidth = Number(Math.max(space.width - orientation.width, 0).toFixed(2));
259
- const remainingLength = Number(Math.max(space.length - orientation.length, 0).toFixed(2));
260
- if (remainingWidth > 0) {
261
- layer.spaces.push({
262
- x: Number((space.x + orientation.width).toFixed(2)),
263
- y: space.y,
264
- width: remainingWidth,
265
- length: orientation.length,
266
- });
267
- }
268
- if (remainingLength > 0) {
269
- layer.spaces.push({
270
- x: space.x,
271
- y: Number((space.y + orientation.length).toFixed(2)),
272
- width: space.width,
273
- length: remainingLength,
274
- });
275
- }
276
- }
277
- function recalculateLayerHeights(layers) {
278
- let cursor = 0;
279
- for (const layer of layers) {
280
- layer.startHeight = Number(cursor.toFixed(2));
281
- cursor += layer.height;
282
- }
283
- }
284
- function updateWasteArea(metrics, layers) {
285
- metrics.wasteAreaSum = layers.reduce((acc, layer) => {
286
- return (acc +
287
- layer.spaces.reduce((spaceAcc, space) => {
288
- return spaceAcc + space.width * space.length;
289
- }, 0));
290
- }, 0);
291
- }
292
- function calculateSlackScore(box, items) {
293
- const totalVolume = items.reduce((acc, item) => acc + item.volume, 0);
294
- const boxVolume = box.width_cm * box.length_cm * box.height_cm;
295
- const volumeSlack = boxVolume - totalVolume;
296
- const maxWidth = Math.max(...items.map((item) => item.width));
297
- const maxLength = Math.max(...items.map((item) => item.length));
298
- const totalHeight = items.reduce((acc, item) => acc + item.height, 0);
299
- const widthSlack = box.width_cm - maxWidth;
300
- const lengthSlack = box.length_cm - maxLength;
301
- const heightSlack = box.height_cm - totalHeight;
302
- return ((volumeSlack > 0 ? volumeSlack : Number.MAX_SAFE_INTEGER) +
303
- (widthSlack > 0 ? widthSlack : Number.MAX_SAFE_INTEGER / 2) +
304
- (lengthSlack > 0 ? lengthSlack : Number.MAX_SAFE_INTEGER / 2) +
305
- (heightSlack > 0 ? heightSlack : Number.MAX_SAFE_INTEGER / 2));
306
- }
307
- function comparePacking(a, b) {
308
- if (a.metrics.usedHeight !== b.metrics.usedHeight) {
309
- return a.metrics.usedHeight - b.metrics.usedHeight;
310
- }
311
- if (a.metrics.wasteAreaSum !== b.metrics.wasteAreaSum) {
312
- return a.metrics.wasteAreaSum - b.metrics.wasteAreaSum;
313
- }
314
- if (a.metrics.voidVolume !== b.metrics.voidVolume) {
315
- return a.metrics.voidVolume - b.metrics.voidVolume;
316
- }
317
- return a.box.price_thb - b.box.price_thb;
318
- }
319
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFja2luZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL3BhcmNlbC1zaGlwcGluZy91dGlscy9wYWNraW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBa0VBLDhDQTJEQztBQXJIRCxNQUFNLG1CQUFtQixHQUFHLENBQUMsQ0FBQztBQUM5QixNQUFNLGFBQWEsR0FBRyxtQkFBbUIsR0FBRyxDQUFDLENBQUM7QUF5RDlDLFNBQWdCLGlCQUFpQixDQUMvQixLQUFrQixFQUNsQixLQUFxQjtJQUVyQixNQUFNLGFBQWEsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFekMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUMxQixPQUFPO1lBQ0wsT0FBTyxFQUFFLEtBQUs7WUFDZCxJQUFJLEVBQUUsZUFBZTtZQUNyQixPQUFPLEVBQUUsZ0RBQWdEO1NBQzFELENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTSxVQUFVLEdBQXdCLEVBQUUsQ0FBQztJQUMzQyxNQUFNLFVBQVUsR0FBd0IsRUFBRSxDQUFDO0lBQzNDLE1BQU0sUUFBUSxHQUF3QixFQUFFLENBQUM7SUFFekMsS0FBSyxNQUFNLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUN4QixNQUFNLFVBQVUsR0FBRyxXQUFXLENBQUMsR0FBRyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBRW5ELElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNwQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUN2QyxTQUFTO1FBQ1gsQ0FBQztRQUVELElBQUksVUFBVSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQzFCLElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxZQUFZLEVBQUUsQ0FBQztnQkFDdkMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxD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
@@ -1,19 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CompanyTruckFulfillmentProvider = void 0;
4
- const utils_1 = require("@medusajs/framework/utils");
5
- const parcel_fulfillment_base_1 = require("../parcel-fulfillment-base");
6
- class CompanyTruckFulfillmentProvider extends parcel_fulfillment_base_1.ParcelFulfillmentProviderBase {
7
- constructor(deps, options = {}) {
8
- super(deps, options);
9
- this.carrier = "COMPANY_TRUCK";
10
- this.optionId = "parcel-company-truck";
11
- this.optionLabel = "Company Truck Delivery";
12
- }
13
- }
14
- exports.CompanyTruckFulfillmentProvider = CompanyTruckFulfillmentProvider;
15
- CompanyTruckFulfillmentProvider.identifier = "parcel-company-truck";
16
- exports.default = (0, utils_1.ModuleProvider)(utils_1.Modules.FULFILLMENT, {
17
- services: [CompanyTruckFulfillmentProvider],
18
- });
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvcHJvdmlkZXJzL2NvbXBhbnktdHJ1Y2svaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscURBQW1FO0FBRW5FLHdFQUEwRTtBQUUxRSxNQUFhLCtCQUNYLFNBQVEsdURBQTZCO0lBUXJDLFlBQ0UsSUFBb0UsRUFDcEUsVUFBNEMsRUFBRTtRQUU5QyxLQUFLLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFBO1FBUkgsWUFBTyxHQUFHLGVBQXdCLENBQUE7UUFDbEMsYUFBUSxHQUFHLHNCQUFzQixDQUFBO1FBQ2pDLGdCQUFXLEdBQUcsd0JBQXdCLENBQUE7SUFPekQsQ0FBQzs7QUFkSCwwRUFlQztBQVpRLDBDQUFVLEdBQUcsc0JBQXNCLEFBQXpCLENBQXlCO0FBYzVDLGtCQUFlLElBQUEsc0JBQWMsRUFBQyxlQUFPLENBQUMsV0FBVyxFQUFFO0lBQ2pELFFBQVEsRUFBRSxDQUFDLCtCQUErQixDQUFDO0NBQzVDLENBQUMsQ0FBQSJ9