@lodashventure/medusa-booking-for-pickup 1.5.12 → 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.
- package/.medusa/server/src/admin/index.js +33 -49
- package/.medusa/server/src/admin/index.mjs +33 -49
- package/.medusa/server/src/api/admin/pickup-date/[id]/route.js +91 -4
- package/.medusa/server/src/api/store/carts/[id]/pickup-date/route.js +16 -1
- package/.medusa/server/src/workflows/pickup-availablity/pickup/steps/validatePickupDateStep.js +26 -17
- package/package.json +1 -1
|
@@ -738,6 +738,20 @@ const DEFAULT_SCHEDULE = {
|
|
|
738
738
|
},
|
|
739
739
|
sunday: { enabled: false, timeSlots: [] }
|
|
740
740
|
};
|
|
741
|
+
const dedupeTimeSlots = (slots) => {
|
|
742
|
+
const seen = /* @__PURE__ */ new Set();
|
|
743
|
+
return slots.filter((slot) => {
|
|
744
|
+
if (!(slot == null ? void 0 : slot.start) || !(slot == null ? void 0 : slot.end)) {
|
|
745
|
+
return false;
|
|
746
|
+
}
|
|
747
|
+
const key = `${slot.start}-${slot.end}`;
|
|
748
|
+
if (seen.has(key)) {
|
|
749
|
+
return false;
|
|
750
|
+
}
|
|
751
|
+
seen.add(key);
|
|
752
|
+
return true;
|
|
753
|
+
});
|
|
754
|
+
};
|
|
741
755
|
function ShippingOptionDetails() {
|
|
742
756
|
const shippingOptionId = usePickupRouteId();
|
|
743
757
|
const routerNavigate = useOptionalNavigate();
|
|
@@ -763,55 +777,17 @@ function ShippingOptionDetails() {
|
|
|
763
777
|
}
|
|
764
778
|
return [];
|
|
765
779
|
};
|
|
766
|
-
const safeDateIdentifier = (value) => {
|
|
767
|
-
if (!value) {
|
|
768
|
-
return "";
|
|
769
|
-
}
|
|
770
|
-
const date = new Date(value);
|
|
771
|
-
if (Number.isNaN(date.getTime())) {
|
|
772
|
-
return value.toString();
|
|
773
|
-
}
|
|
774
|
-
return date.toISOString();
|
|
775
|
-
};
|
|
776
|
-
const buildIdentifier = (availability) => {
|
|
777
|
-
if (!availability) {
|
|
778
|
-
return "";
|
|
779
|
-
}
|
|
780
|
-
if (availability.id) {
|
|
781
|
-
return availability.id.toString();
|
|
782
|
-
}
|
|
783
|
-
return [
|
|
784
|
-
availability.day_of_week,
|
|
785
|
-
safeDateIdentifier(availability.timeStart),
|
|
786
|
-
safeDateIdentifier(availability.timeEnd)
|
|
787
|
-
].filter(Boolean).join("-");
|
|
788
|
-
};
|
|
789
780
|
const allAvailabilities = [
|
|
790
781
|
...normalizeInput(data.shipping_option.pickup_availabilities),
|
|
791
782
|
...normalizeInput(data.shipping_option.pickupAvailability)
|
|
792
783
|
];
|
|
793
|
-
|
|
794
|
-
const normalized = allAvailabilities.filter((availability) => {
|
|
795
|
-
if (!availability) {
|
|
796
|
-
return false;
|
|
797
|
-
}
|
|
798
|
-
const identifier = buildIdentifier(availability);
|
|
799
|
-
if (!identifier) {
|
|
800
|
-
return true;
|
|
801
|
-
}
|
|
802
|
-
if (seenAvailabilities.has(identifier)) {
|
|
803
|
-
return false;
|
|
804
|
-
}
|
|
805
|
-
seenAvailabilities.add(identifier);
|
|
806
|
-
return true;
|
|
807
|
-
});
|
|
808
|
-
normalized.forEach((availability) => {
|
|
784
|
+
allAvailabilities.filter(Boolean).map((availability) => {
|
|
809
785
|
if (!(availability == null ? void 0 : availability.day_of_week)) {
|
|
810
|
-
return;
|
|
786
|
+
return null;
|
|
811
787
|
}
|
|
812
788
|
const dayKey = availability.day_of_week.toLowerCase();
|
|
813
789
|
if (!_schedule[dayKey]) {
|
|
814
|
-
return;
|
|
790
|
+
return null;
|
|
815
791
|
}
|
|
816
792
|
const timeSlots = _schedule[dayKey].timeSlots;
|
|
817
793
|
timeSlots.push({
|
|
@@ -822,6 +798,11 @@ function ShippingOptionDetails() {
|
|
|
822
798
|
enabled: Boolean(availability.enable),
|
|
823
799
|
timeSlots
|
|
824
800
|
};
|
|
801
|
+
return availability;
|
|
802
|
+
}).filter(Boolean);
|
|
803
|
+
Object.keys(_schedule).forEach((day) => {
|
|
804
|
+
const uniqueSlots = dedupeTimeSlots(_schedule[day].timeSlots);
|
|
805
|
+
_schedule[day].timeSlots = uniqueSlots;
|
|
825
806
|
});
|
|
826
807
|
setSchedule({ ..._schedule });
|
|
827
808
|
}, [data]);
|
|
@@ -868,14 +849,17 @@ function ShippingOptionDetails() {
|
|
|
868
849
|
"Content-Type": "application/json"
|
|
869
850
|
},
|
|
870
851
|
body: {
|
|
871
|
-
schedules: Object.entries(schedule).filter(([_, daySchedule]) => daySchedule.enabled).map(([day, { enabled, timeSlots }]) =>
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
852
|
+
schedules: Object.entries(schedule).filter(([_, daySchedule]) => daySchedule.enabled).map(([day, { enabled, timeSlots }]) => {
|
|
853
|
+
const uniqueTimeSlots = dedupeTimeSlots(timeSlots);
|
|
854
|
+
return {
|
|
855
|
+
day_of_week: day,
|
|
856
|
+
enable: enabled,
|
|
857
|
+
timeSlots: uniqueTimeSlots.map((slot) => ({
|
|
858
|
+
start: slot.start,
|
|
859
|
+
end: slot.end
|
|
860
|
+
}))
|
|
861
|
+
};
|
|
862
|
+
}).filter((schedule2) => schedule2.timeSlots.length > 0)
|
|
879
863
|
}
|
|
880
864
|
});
|
|
881
865
|
refetch();
|
|
@@ -737,6 +737,20 @@ const DEFAULT_SCHEDULE = {
|
|
|
737
737
|
},
|
|
738
738
|
sunday: { enabled: false, timeSlots: [] }
|
|
739
739
|
};
|
|
740
|
+
const dedupeTimeSlots = (slots) => {
|
|
741
|
+
const seen = /* @__PURE__ */ new Set();
|
|
742
|
+
return slots.filter((slot) => {
|
|
743
|
+
if (!(slot == null ? void 0 : slot.start) || !(slot == null ? void 0 : slot.end)) {
|
|
744
|
+
return false;
|
|
745
|
+
}
|
|
746
|
+
const key = `${slot.start}-${slot.end}`;
|
|
747
|
+
if (seen.has(key)) {
|
|
748
|
+
return false;
|
|
749
|
+
}
|
|
750
|
+
seen.add(key);
|
|
751
|
+
return true;
|
|
752
|
+
});
|
|
753
|
+
};
|
|
740
754
|
function ShippingOptionDetails() {
|
|
741
755
|
const shippingOptionId = usePickupRouteId();
|
|
742
756
|
const routerNavigate = useOptionalNavigate();
|
|
@@ -762,55 +776,17 @@ function ShippingOptionDetails() {
|
|
|
762
776
|
}
|
|
763
777
|
return [];
|
|
764
778
|
};
|
|
765
|
-
const safeDateIdentifier = (value) => {
|
|
766
|
-
if (!value) {
|
|
767
|
-
return "";
|
|
768
|
-
}
|
|
769
|
-
const date = new Date(value);
|
|
770
|
-
if (Number.isNaN(date.getTime())) {
|
|
771
|
-
return value.toString();
|
|
772
|
-
}
|
|
773
|
-
return date.toISOString();
|
|
774
|
-
};
|
|
775
|
-
const buildIdentifier = (availability) => {
|
|
776
|
-
if (!availability) {
|
|
777
|
-
return "";
|
|
778
|
-
}
|
|
779
|
-
if (availability.id) {
|
|
780
|
-
return availability.id.toString();
|
|
781
|
-
}
|
|
782
|
-
return [
|
|
783
|
-
availability.day_of_week,
|
|
784
|
-
safeDateIdentifier(availability.timeStart),
|
|
785
|
-
safeDateIdentifier(availability.timeEnd)
|
|
786
|
-
].filter(Boolean).join("-");
|
|
787
|
-
};
|
|
788
779
|
const allAvailabilities = [
|
|
789
780
|
...normalizeInput(data.shipping_option.pickup_availabilities),
|
|
790
781
|
...normalizeInput(data.shipping_option.pickupAvailability)
|
|
791
782
|
];
|
|
792
|
-
|
|
793
|
-
const normalized = allAvailabilities.filter((availability) => {
|
|
794
|
-
if (!availability) {
|
|
795
|
-
return false;
|
|
796
|
-
}
|
|
797
|
-
const identifier = buildIdentifier(availability);
|
|
798
|
-
if (!identifier) {
|
|
799
|
-
return true;
|
|
800
|
-
}
|
|
801
|
-
if (seenAvailabilities.has(identifier)) {
|
|
802
|
-
return false;
|
|
803
|
-
}
|
|
804
|
-
seenAvailabilities.add(identifier);
|
|
805
|
-
return true;
|
|
806
|
-
});
|
|
807
|
-
normalized.forEach((availability) => {
|
|
783
|
+
allAvailabilities.filter(Boolean).map((availability) => {
|
|
808
784
|
if (!(availability == null ? void 0 : availability.day_of_week)) {
|
|
809
|
-
return;
|
|
785
|
+
return null;
|
|
810
786
|
}
|
|
811
787
|
const dayKey = availability.day_of_week.toLowerCase();
|
|
812
788
|
if (!_schedule[dayKey]) {
|
|
813
|
-
return;
|
|
789
|
+
return null;
|
|
814
790
|
}
|
|
815
791
|
const timeSlots = _schedule[dayKey].timeSlots;
|
|
816
792
|
timeSlots.push({
|
|
@@ -821,6 +797,11 @@ function ShippingOptionDetails() {
|
|
|
821
797
|
enabled: Boolean(availability.enable),
|
|
822
798
|
timeSlots
|
|
823
799
|
};
|
|
800
|
+
return availability;
|
|
801
|
+
}).filter(Boolean);
|
|
802
|
+
Object.keys(_schedule).forEach((day) => {
|
|
803
|
+
const uniqueSlots = dedupeTimeSlots(_schedule[day].timeSlots);
|
|
804
|
+
_schedule[day].timeSlots = uniqueSlots;
|
|
824
805
|
});
|
|
825
806
|
setSchedule({ ..._schedule });
|
|
826
807
|
}, [data]);
|
|
@@ -867,14 +848,17 @@ function ShippingOptionDetails() {
|
|
|
867
848
|
"Content-Type": "application/json"
|
|
868
849
|
},
|
|
869
850
|
body: {
|
|
870
|
-
schedules: Object.entries(schedule).filter(([_, daySchedule]) => daySchedule.enabled).map(([day, { enabled, timeSlots }]) =>
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
851
|
+
schedules: Object.entries(schedule).filter(([_, daySchedule]) => daySchedule.enabled).map(([day, { enabled, timeSlots }]) => {
|
|
852
|
+
const uniqueTimeSlots = dedupeTimeSlots(timeSlots);
|
|
853
|
+
return {
|
|
854
|
+
day_of_week: day,
|
|
855
|
+
enable: enabled,
|
|
856
|
+
timeSlots: uniqueTimeSlots.map((slot) => ({
|
|
857
|
+
start: slot.start,
|
|
858
|
+
end: slot.end
|
|
859
|
+
}))
|
|
860
|
+
};
|
|
861
|
+
}).filter((schedule2) => schedule2.timeSlots.length > 0)
|
|
878
862
|
}
|
|
879
863
|
});
|
|
880
864
|
refetch();
|
|
@@ -5,6 +5,91 @@ const framework_1 = require("@medusajs/framework");
|
|
|
5
5
|
const utils_1 = require("@medusajs/framework/utils");
|
|
6
6
|
const pickup_datetime_1 = require("../../../../modules/pickup-datetime");
|
|
7
7
|
const build_shipping_option_link_1 = require("../../../../workflows/pickup-availablity/utils/build-shipping-option-link");
|
|
8
|
+
const dedupeTimeSlots = (slots = []) => {
|
|
9
|
+
const seen = new Set();
|
|
10
|
+
const sanitized = [];
|
|
11
|
+
slots.forEach((slot) => {
|
|
12
|
+
if (!slot?.start || !slot?.end) {
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
const key = `${slot.start}-${slot.end}`;
|
|
16
|
+
if (seen.has(key)) {
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
seen.add(key);
|
|
20
|
+
sanitized.push({
|
|
21
|
+
start: slot.start,
|
|
22
|
+
end: slot.end,
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
return sanitized;
|
|
26
|
+
};
|
|
27
|
+
const toTimeString = (value) => {
|
|
28
|
+
if (!value) {
|
|
29
|
+
return "";
|
|
30
|
+
}
|
|
31
|
+
const date = new Date(value);
|
|
32
|
+
if (!Number.isNaN(date.getTime())) {
|
|
33
|
+
return `${date.getHours().toString().padStart(2, "0")}:${date
|
|
34
|
+
.getMinutes()
|
|
35
|
+
.toString()
|
|
36
|
+
.padStart(2, "0")}`;
|
|
37
|
+
}
|
|
38
|
+
const match = `${value}`.match(/(\d{1,2}):(\d{2})/);
|
|
39
|
+
if (match) {
|
|
40
|
+
return `${match[1].padStart(2, "0")}:${match[2]}`;
|
|
41
|
+
}
|
|
42
|
+
return value.toString();
|
|
43
|
+
};
|
|
44
|
+
const dedupeAvailabilities = (availabilities = []) => {
|
|
45
|
+
const seen = new Set();
|
|
46
|
+
return availabilities.filter((availability) => {
|
|
47
|
+
if (!availability) {
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
const key = [
|
|
51
|
+
availability.day_of_week,
|
|
52
|
+
toTimeString(availability.timeStart),
|
|
53
|
+
toTimeString(availability.timeEnd),
|
|
54
|
+
]
|
|
55
|
+
.filter(Boolean)
|
|
56
|
+
.join("-");
|
|
57
|
+
if (!key) {
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
if (seen.has(key)) {
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
seen.add(key);
|
|
64
|
+
return true;
|
|
65
|
+
});
|
|
66
|
+
};
|
|
67
|
+
const normalizeSchedulesByDay = (schedules = []) => {
|
|
68
|
+
const grouped = new Map();
|
|
69
|
+
schedules.forEach((schedule) => {
|
|
70
|
+
if (!schedule?.day_of_week) {
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
const existing = grouped.get(schedule.day_of_week) ?? {
|
|
74
|
+
enable: false,
|
|
75
|
+
timeSlots: [],
|
|
76
|
+
};
|
|
77
|
+
existing.enable = existing.enable || Boolean(schedule.enable);
|
|
78
|
+
existing.timeSlots = [
|
|
79
|
+
...existing.timeSlots,
|
|
80
|
+
...(Array.isArray(schedule.timeSlots) ? schedule.timeSlots : []),
|
|
81
|
+
];
|
|
82
|
+
grouped.set(schedule.day_of_week, existing);
|
|
83
|
+
});
|
|
84
|
+
return Array.from(grouped.entries()).map(([day, config]) => {
|
|
85
|
+
const normalized = {
|
|
86
|
+
day_of_week: day,
|
|
87
|
+
enable: config.enable,
|
|
88
|
+
timeSlots: dedupeTimeSlots(config.timeSlots),
|
|
89
|
+
};
|
|
90
|
+
return normalized;
|
|
91
|
+
});
|
|
92
|
+
};
|
|
8
93
|
const POST = async (req, res) => {
|
|
9
94
|
const { id: shipping_option_id } = req.params;
|
|
10
95
|
const input = req.body;
|
|
@@ -18,7 +103,8 @@ const POST = async (req, res) => {
|
|
|
18
103
|
await link.dismiss(existingAvailabilities.map((availability) => (0, build_shipping_option_link_1.buildShippingOptionPickupLink)(shipping_option_id, availability.id)));
|
|
19
104
|
await pickupDatetimeService.deletePickupAvailabilities(existingAvailabilities.map((availability) => availability.id));
|
|
20
105
|
}
|
|
21
|
-
const
|
|
106
|
+
const schedules = normalizeSchedulesByDay(input.schedules ?? []);
|
|
107
|
+
const availabilities = schedules
|
|
22
108
|
.filter((schedule) => schedule.enable)
|
|
23
109
|
.flatMap((schedule) => schedule.timeSlots.map((slot) => {
|
|
24
110
|
const [startHour, startMinute] = slot.start.split(":").map(Number);
|
|
@@ -66,11 +152,12 @@ const GET = async (req, res) => {
|
|
|
66
152
|
const availabilities = await pickupDatetimeService.listPickupAvailabilities({
|
|
67
153
|
shipping_option_id,
|
|
68
154
|
});
|
|
155
|
+
const dedupedAvailabilities = dedupeAvailabilities(availabilities);
|
|
69
156
|
res.status(200).json({
|
|
70
157
|
shipping_option: {
|
|
71
158
|
...shippingOption,
|
|
72
|
-
pickup_availabilities:
|
|
73
|
-
pickupAvailability:
|
|
159
|
+
pickup_availabilities: dedupedAvailabilities,
|
|
160
|
+
pickupAvailability: dedupedAvailabilities,
|
|
74
161
|
},
|
|
75
162
|
});
|
|
76
163
|
}
|
|
@@ -79,4 +166,4 @@ const GET = async (req, res) => {
|
|
|
79
166
|
}
|
|
80
167
|
};
|
|
81
168
|
exports.GET = GET;
|
|
82
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
169
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL3BpY2t1cC1kYXRlL1tpZF0vcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbURBQStFO0FBQy9FLHFEQUFzRTtBQU10RSx5RUFBNkU7QUFFN0UsMEhBQTBIO0FBSTFILE1BQU0sZUFBZSxHQUFHLENBQUMsUUFBeUIsRUFBRSxFQUFjLEVBQUU7SUFDbEUsTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztJQUMvQixNQUFNLFNBQVMsR0FBZSxFQUFFLENBQUM7SUFFakMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1FBQ3JCLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQy9CLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN4QyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNsQixPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDZCxTQUFTLENBQUMsSUFBSSxDQUFDO1lBQ2IsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO1lBQ2pCLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRztTQUNkLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxZQUFZLEdBQUcsQ0FBQyxLQUFxQixFQUFFLEVBQUU7SUFDN0MsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ1gsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUNsQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSTthQUMxRCxVQUFVLEVBQUU7YUFDWixRQUFRLEVBQUU7YUFDVixRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVELE1BQU0sS0FBSyxHQUFHLEdBQUcsS0FBSyxFQUFFLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDcEQsSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUNWLE9BQU8sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNwRCxDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDMUIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLGlCQUF3QixFQUFFLEVBQUUsRUFBRTtJQUMxRCxNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO0lBRS9CLE9BQU8sY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFlBQVksRUFBRSxFQUFFO1FBQzVDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNsQixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRCxNQUFNLEdBQUcsR0FBRztZQUNWLFlBQVksQ0FBQyxXQUFXO1lBQ3hCLFlBQVksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDO1lBQ3BDLFlBQVksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDO1NBQ25DO2FBQ0UsTUFBTSxDQUFDLE9BQU8sQ0FBQzthQUNmLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUViLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNULE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2xCLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUVELElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDZCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDO0FBUUYsTUFBTSx1QkFBdUIsR0FBRyxDQUM5QixZQUF5QyxFQUFFLEVBQ3JCLEVBQUU7SUFDeEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxHQUFHLEVBR3BCLENBQUM7SUFFSixTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7UUFDN0IsSUFBSSxDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsQ0FBQztZQUMzQixPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJO1lBQ3BELE1BQU0sRUFBRSxLQUFLO1lBQ2IsU0FBUyxFQUFFLEVBQUU7U0FDZCxDQUFDO1FBRUYsUUFBUSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsTUFBTSxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDOUQsUUFBUSxDQUFDLFNBQVMsR0FBRztZQUNuQixHQUFHLFFBQVEsQ0FBQyxTQUFTO1lBQ3JCLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1NBQ2pFLENBQUM7UUFFRixPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDOUMsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRTtRQUN6RCxNQUFNLFVBQVUsR0FBdUI7WUFDckMsV0FBVyxFQUFFLEdBQUc7WUFDaEIsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNO1lBQ3JCLFNBQVMsRUFBRSxlQUFlLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQztTQUM3QyxDQUFDO1FBQ0YsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUM7QUFFSyxNQUFNLElBQUksR0FBRyxLQUFLLEVBQ3ZCLEdBRUUsRUFDRixHQUFtQixFQUNuQixFQUFFO0lBQ0YsTUFBTSxFQUFFLEVBQUUsRUFBRSxrQkFBa0IsRUFBRSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7SUFDOUMsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQztJQUV2QixJQUFJLENBQUM7UUFDSCxNQUFNLHFCQUFxQixHQUN6QixxQkFBUyxDQUFDLE9BQU8sQ0FBOEIsd0NBQXNCLENBQUMsQ0FBQztRQUN6RSxNQUFNLElBQUksR0FBRyxxQkFBUyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUUvRCxNQUFNLHNCQUFzQixHQUMxQixNQUFNLHFCQUFxQixDQUFDLHdCQUF3QixDQUFDO1lBQ25ELGtCQUFrQjtTQUNuQixDQUFDLENBQUM7UUFFTCxJQUFJLHNCQUFzQixDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2xDLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FDaEIsc0JBQXNCLENBQUMsR0FBRyxDQUFDLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FDMUMsSUFBQSwwREFBNkIsRUFBQyxrQkFBa0IsRUFBRSxZQUFZLENBQUMsRUFBRSxDQUFDLENBQ25FLENBQ0YsQ0FBQztZQUVGLE1BQU0scUJBQXFCLENBQUMsMEJBQTBCLENBQ3BELHNCQUFzQixDQUFDLEdBQUcsQ0FBQyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUM5RCxDQUFDO1FBQ0osQ0FBQztRQUVELE1BQU0sU0FBUyxHQUFHLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDLENBQUM7UUFDakUsTUFBTSxjQUFjLEdBQUcsU0FBUzthQUM3QixNQUFNLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7YUFDckMsT0FBTyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FDcEIsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUM5QixNQUFNLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNuRSxNQUFNLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUU3RCxNQUFNLFNBQVMsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQzdCLFNBQVMsQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLFdBQVcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFFakQsTUFBTSxPQUFPLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUMzQixPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBRTNDLE9BQU87Z0JBQ0wsa0JBQWtCO2dCQUNsQixNQUFNLEVBQUUsSUFBSTtnQkFDWixXQUFXLEVBQUUsUUFBUSxDQUFDLFdBQVc7Z0JBQ2pDLFNBQVM7Z0JBQ1QsT0FBTzthQUNSLENBQUM7UUFDSixDQUFDLENBQUMsQ0FDSCxDQUFDO1FBRUosTUFBTSxPQUFPLEdBQUcsTUFBTSxxQkFBcUIsQ0FBQywwQkFBMEIsQ0FDcEUsY0FBYyxDQUNmLENBQUM7UUFFRixJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNuQixNQUFNLElBQUksQ0FBQyxNQUFNLENBQ2YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQzNCLElBQUEsMERBQTZCLEVBQUMsa0JBQWtCLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUNuRSxDQUNGLENBQUM7UUFDSixDQUFDO1FBRUQsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ2pELENBQUM7QUFDSCxDQUFDLENBQUM7QUF2RVcsUUFBQSxJQUFJLFFBdUVmO0FBRUssTUFBTSxHQUFHLEdBQUcsS0FBSyxFQUFFLEdBQWtCLEVBQUUsR0FBbUIsRUFBRSxFQUFFO0lBQ25FLE1BQU0sRUFBRSxFQUFFLEVBQUUsa0JBQWtCLEVBQUUsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDO0lBQzlDLE1BQU0sS0FBSyxHQUFHLHFCQUFTLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pFLE1BQU0scUJBQXFCLEdBQ3pCLHFCQUFTLENBQUMsT0FBTyxDQUE4Qix3Q0FBc0IsQ0FBQyxDQUFDO0lBRXpFLElBQUksQ0FBQztRQUNILE1BQU0sRUFDSixJQUFJLEVBQUUsQ0FBQyxjQUFjLENBQUMsR0FDdkIsR0FBRyxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUM7WUFDcEIsTUFBTSxFQUFFLGlCQUFpQjtZQUN6QixNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsZ0JBQWdCLEVBQUUsZ0NBQWdDLENBQUM7WUFDakUsT0FBTyxFQUFFO2dCQUNQLEVBQUUsRUFBRSxrQkFBa0I7YUFDdkI7U0FDRixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDcEIsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFDMUIsS0FBSyxFQUFFLG1CQUFtQixrQkFBa0IsWUFBWTthQUN6RCxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsTUFBTSxjQUFjLEdBQUcsTUFBTSxxQkFBcUIsQ0FBQyx3QkFBd0IsQ0FDekU7WUFDRSxrQkFBa0I7U0FDbkIsQ0FDRixDQUFDO1FBQ0YsTUFBTSxxQkFBcUIsR0FBRyxvQkFBb0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUVuRSxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUNuQixlQUFlLEVBQUU7Z0JBQ2YsR0FBRyxjQUFjO2dCQUNqQixxQkFBcUIsRUFBRSxxQkFBcUI7Z0JBQzVDLGtCQUFrQixFQUFFLHFCQUFxQjthQUMxQztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDakQsQ0FBQztBQUNILENBQUMsQ0FBQztBQXhDVyxRQUFBLEdBQUcsT0F3Q2QifQ==
|
|
@@ -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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
|