@lodashventure/medusa-booking-for-pickup 1.5.15 → 1.5.16
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.
|
@@ -21,6 +21,21 @@ async function POST(req, res) {
|
|
|
21
21
|
throw new Error("Shipping method not found");
|
|
22
22
|
}
|
|
23
23
|
const shippingOptionId = shippingMethod.shipping_option_id;
|
|
24
|
+
// ✅ Verify that the shipping method is a pickup type
|
|
25
|
+
const { data: [shippingOption], } = await query.graph({
|
|
26
|
+
entity: "shipping_option",
|
|
27
|
+
fields: ["id", "service_zone.fulfillment_set.type"],
|
|
28
|
+
filters: {
|
|
29
|
+
id: shippingOptionId,
|
|
30
|
+
},
|
|
31
|
+
});
|
|
32
|
+
const fulfillmentType = shippingOption?.service_zone?.fulfillment_set
|
|
33
|
+
?.type;
|
|
34
|
+
if (fulfillmentType !== "pickup") {
|
|
35
|
+
return res.status(400).json({
|
|
36
|
+
message: "ไม่สามารถตั้งค่าวันเวลารับสินค้าได้ เนื่องจากวิธีการจัดส่งที่เลือกไม่ใช่การรับสินค้าที่สาขา กรุณาเลือกวิธีการจัดส่งเป็น 'รับสินค้าที่สาขา' ก่อน",
|
|
37
|
+
});
|
|
38
|
+
}
|
|
24
39
|
try {
|
|
25
40
|
await updateCartPickupDate_1.default.run({
|
|
26
41
|
input: {
|
|
@@ -51,4 +66,4 @@ const GET = async (req, res) => {
|
|
|
51
66
|
res.status(200).json(pickDate);
|
|
52
67
|
};
|
|
53
68
|
exports.GET = GET;
|
|
54
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
69
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2NhcnRzL1tpZF0vcGlja3VwLWRhdGUvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBWUEsb0JBZ0VDO0FBNUVELG1EQUFnRDtBQUVoRCxxREFBK0U7QUFDL0UsbUlBQW1IO0FBQ25ILDRFQUFnRjtBQVF6RSxLQUFLLFVBQVUsSUFBSSxDQUN4QixHQUErQyxFQUMvQyxHQUFtQjtJQUVuQixNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQztJQUMxQixNQUFNLEVBQUUsV0FBVyxFQUFFLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQztJQUVqQyxNQUFNLEtBQUssR0FBRyxxQkFBUyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqRSxNQUFNLGlCQUFpQixHQUFHLHFCQUFTLENBQUMsT0FBTyxDQUFDLGVBQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUUxRCxNQUFNLENBQUMsY0FBYyxDQUFDLEdBQUcsTUFBTSxpQkFBaUIsQ0FBQyxtQkFBbUIsQ0FBQztRQUNuRSxPQUFPLEVBQUUsRUFBRTtLQUNaLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUNwQixNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELE1BQU0sZ0JBQWdCLEdBQUcsY0FBYyxDQUFDLGtCQUFrQixDQUFDO0lBRTNELHFEQUFxRDtJQUNyRCxNQUFNLEVBQ0osSUFBSSxFQUFFLENBQUMsY0FBYyxDQUFDLEdBQ3ZCLEdBQUcsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQ3BCLE1BQU0sRUFBRSxpQkFBaUI7UUFDekIsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLG1DQUFtQyxDQUFDO1FBQ25ELE9BQU8sRUFBRTtZQUNQLEVBQUUsRUFBRSxnQkFBZ0I7U0FDckI7S0FDRixDQUFDLENBQUM7SUFFSCxNQUFNLGVBQWUsR0FBSSxjQUFzQixFQUFFLFlBQVksRUFBRSxlQUFlO1FBQzVFLEVBQUUsSUFBSSxDQUFDO0lBRVQsSUFBSSxlQUFlLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDakMsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUMxQixPQUFPLEVBQ0wsaUpBQWlKO1NBQ3BKLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxJQUFJLENBQUM7UUFDSCxNQUFNLDhCQUE0QixDQUFDLEdBQUcsQ0FBQztZQUNyQyxLQUFLLEVBQUU7Z0JBQ0wsT0FBTyxFQUFFLEVBQUU7Z0JBQ1gsZUFBZSxFQUFFLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQztnQkFDdEMsa0JBQWtCLEVBQUUsZ0JBQWdCO2FBQ3JDO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsTUFBTSxFQUNKLElBQUksRUFBRSxDQUFDLFdBQVcsQ0FBQyxHQUNwQixHQUFHLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQztZQUNwQixNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsZUFBZSxDQUFDO1lBQy9CLE1BQU0sRUFBRSxNQUFNO1lBQ2QsT0FBTyxFQUFFO2dCQUNQLEVBQUU7YUFDSDtTQUNGLENBQUMsQ0FBQztRQUVILEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDbkQsQ0FBQztBQUNILENBQUM7QUFFTSxNQUFNLEdBQUcsR0FBRyxLQUFLLEVBQUUsR0FBa0IsRUFBRSxHQUFtQixFQUFFLEVBQUU7SUFDbkUsTUFBTSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7SUFFMUIsTUFBTSwyQkFBMkIsR0FDL0IscUJBQVMsQ0FBQyxPQUFPLENBQThCLHdDQUFzQixDQUFDLENBQUM7SUFFekUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLE1BQU0sMkJBQTJCLENBQUMsZUFBZSxDQUFDO1FBQ25FLE9BQU8sRUFBRSxFQUFFO0tBQ1osQ0FBQyxDQUFDO0lBRUgsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDakMsQ0FBQyxDQUFDO0FBWFcsUUFBQSxHQUFHLE9BV2QifQ==
|
package/.medusa/server/src/workflows/pickup-availablity/pickup/steps/validatePickupDateStep.js
CHANGED
|
@@ -5,11 +5,27 @@ const workflows_sdk_1 = require("@medusajs/workflows-sdk");
|
|
|
5
5
|
const framework_1 = require("@medusajs/framework");
|
|
6
6
|
const utils_1 = require("@medusajs/framework/utils");
|
|
7
7
|
const pickup_datetime_1 = require("../../../../modules/pickup-datetime");
|
|
8
|
-
const
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
const STORE_TIMEZONE = process.env.PICKUP_TIMEZONE ||
|
|
9
|
+
process.env.STORE_TIMEZONE ||
|
|
10
|
+
"Asia/Bangkok";
|
|
11
|
+
const timeFormatter = new Intl.DateTimeFormat("en-US", {
|
|
12
|
+
timeZone: STORE_TIMEZONE,
|
|
13
|
+
hour12: false,
|
|
14
|
+
hour: "2-digit",
|
|
15
|
+
minute: "2-digit",
|
|
16
|
+
});
|
|
17
|
+
const weekdayFormatter = new Intl.DateTimeFormat("en-US", {
|
|
18
|
+
timeZone: STORE_TIMEZONE,
|
|
19
|
+
weekday: "long",
|
|
20
|
+
});
|
|
21
|
+
const convertDateToMinutes = (value) => {
|
|
22
|
+
const date = value instanceof Date ? value : new Date(value);
|
|
23
|
+
const parts = timeFormatter.formatToParts(date);
|
|
24
|
+
const hours = parseInt(parts.find((part) => part.type === "hour")?.value ?? "0", 10);
|
|
25
|
+
const minutes = parseInt(parts.find((part) => part.type === "minute")?.value ?? "0", 10);
|
|
11
26
|
return hours * 60 + minutes;
|
|
12
27
|
};
|
|
28
|
+
const getDayOfWeekInStoreTimezone = (date) => weekdayFormatter.format(date).toLowerCase();
|
|
13
29
|
exports.validatePickupDateStep = (0, workflows_sdk_1.createStep)("validate-pickup-date-step", async (input) => {
|
|
14
30
|
const { shipping_option_id, pickup_datetime: rawPickupDatetime } = input;
|
|
15
31
|
if (!shipping_option_id) {
|
|
@@ -24,34 +40,27 @@ exports.validatePickupDateStep = (0, workflows_sdk_1.createStep)("validate-picku
|
|
|
24
40
|
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Pickup date must not be in the past");
|
|
25
41
|
}
|
|
26
42
|
const pickupDatetimeModuleService = framework_1.container.resolve(pickup_datetime_1.PICKUP_DATETIME_MODULE);
|
|
27
|
-
const dayOfWeek =
|
|
28
|
-
"sunday",
|
|
29
|
-
"monday",
|
|
30
|
-
"tuesday",
|
|
31
|
-
"wednesday",
|
|
32
|
-
"thursday",
|
|
33
|
-
"friday",
|
|
34
|
-
"saturday",
|
|
35
|
-
][pickup_datetime.getUTCDay()];
|
|
43
|
+
const dayOfWeek = getDayOfWeekInStoreTimezone(pickup_datetime);
|
|
36
44
|
const availabilities = await pickupDatetimeModuleService.listPickupAvailabilities({
|
|
37
45
|
shipping_option_id,
|
|
38
46
|
day_of_week: dayOfWeek,
|
|
39
47
|
enable: true, // Filter only enabled availability slots
|
|
40
48
|
});
|
|
41
49
|
if (!availabilities || availabilities.length === 0) {
|
|
42
|
-
|
|
50
|
+
console.warn(`[pickup-date] No availability configured for shipping option ${shipping_option_id} on ${dayOfWeek}. Allowing requested pickup time.`);
|
|
51
|
+
return new workflows_sdk_1.StepResponse(pickup_datetime, pickup_datetime);
|
|
43
52
|
}
|
|
44
|
-
const pickupTime =
|
|
53
|
+
const pickupTime = convertDateToMinutes(pickup_datetime);
|
|
45
54
|
// Log for debugging
|
|
46
55
|
console.log(`[Pickup Validation] Checking ${availabilities.length} availability slots for ${dayOfWeek}`);
|
|
47
|
-
console.log(`[Pickup Validation] Pickup time: ${Math.floor(pickupTime / 60)}:${(pickupTime % 60).toString().padStart(2,
|
|
56
|
+
console.log(`[Pickup Validation] Pickup time: ${Math.floor(pickupTime / 60)}:${(pickupTime % 60).toString().padStart(2, "0")}`);
|
|
48
57
|
const isAvailable = availabilities.some((availability) => {
|
|
49
58
|
// Convert time correctly without toLocaleString() to avoid timezone issues
|
|
50
59
|
const availTimeStart = convertDateToMinutes(availability.timeStart);
|
|
51
60
|
const availTimeEnd = convertDateToMinutes(availability.timeEnd);
|
|
52
61
|
// Check if pickup time falls within this availability slot
|
|
53
62
|
const inRange = availTimeStart <= pickupTime && pickupTime <= availTimeEnd;
|
|
54
|
-
console.log(`[Pickup Validation] Slot ${Math.floor(availTimeStart / 60)}:${(availTimeStart % 60).toString().padStart(2,
|
|
63
|
+
console.log(`[Pickup Validation] Slot ${Math.floor(availTimeStart / 60)}:${(availTimeStart % 60).toString().padStart(2, "0")} - ${Math.floor(availTimeEnd / 60)}:${(availTimeEnd % 60).toString().padStart(2, "0")}: ${inRange ? "MATCH" : "no match"}`);
|
|
55
64
|
return inRange;
|
|
56
65
|
});
|
|
57
66
|
if (!isAvailable) {
|
|
@@ -59,4 +68,4 @@ exports.validatePickupDateStep = (0, workflows_sdk_1.createStep)("validate-picku
|
|
|
59
68
|
}
|
|
60
69
|
return new workflows_sdk_1.StepResponse(pickup_datetime, pickup_datetime);
|
|
61
70
|
});
|
|
62
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
71
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGVQaWNrdXBEYXRlU3RlcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3MvcGlja3VwLWF2YWlsYWJsaXR5L3BpY2t1cC9zdGVwcy92YWxpZGF0ZVBpY2t1cERhdGVTdGVwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJEQUFtRTtBQUNuRSxtREFBZ0Q7QUFFaEQscURBQXdEO0FBRXhELHlFQUE2RTtBQU83RSxNQUFNLGNBQWMsR0FDbEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlO0lBQzNCLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYztJQUMxQixjQUFjLENBQUM7QUFFakIsTUFBTSxhQUFhLEdBQUcsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRTtJQUNyRCxRQUFRLEVBQUUsY0FBYztJQUN4QixNQUFNLEVBQUUsS0FBSztJQUNiLElBQUksRUFBRSxTQUFTO0lBQ2YsTUFBTSxFQUFFLFNBQVM7Q0FDbEIsQ0FBQyxDQUFDO0FBRUgsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFO0lBQ3hELFFBQVEsRUFBRSxjQUFjO0lBQ3hCLE9BQU8sRUFBRSxNQUFNO0NBQ2hCLENBQUMsQ0FBQztBQUVILE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxLQUFvQixFQUFFLEVBQUU7SUFDcEQsTUFBTSxJQUFJLEdBQUcsS0FBSyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM3RCxNQUFNLEtBQUssR0FBRyxhQUFhLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hELE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FDcEIsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElB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
|