@bjsdistribution/dms-client-return 0.1.16-prod → 0.1.17-prod
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/common/date-picker/header/ClearDate.d.ts +1 -1
- package/dist/components/client-portal/DateFilterStore.d.ts +15 -0
- package/dist/components/client-portal/ReturnRTFilters.d.ts +3 -0
- package/dist/components/order-daily-overview/header/route-header/ClientRouterHeader.d.ts +11 -0
- package/dist/components/order-daily-overview/table-view/TableStyle.d.ts +4 -4
- package/dist/components/order-view/order-actions/types.d.ts +2 -2
- package/dist/components/order-view/types.d.ts +6 -0
- package/dist/components/order-view/utils.d.ts +8 -2
- package/dist/components/order-view/view-reminder/ViewReminder.d.ts +2 -0
- package/dist/dms-client-return.cjs.development.js +1780 -2272
- package/dist/dms-client-return.cjs.development.js.map +1 -1
- package/dist/dms-client-return.cjs.production.min.js +1 -1
- package/dist/dms-client-return.cjs.production.min.js.map +1 -1
- package/dist/dms-client-return.esm.js +1838 -2330
- package/dist/dms-client-return.esm.js.map +1 -1
- package/package.json +2 -2
- package/src/components/client-portal/DateFilterStore.ts +139 -0
- package/src/components/client-portal/OutstandingTable.tsx +16 -72
- package/src/components/client-portal/ReturnAfterSearchBar.tsx +42 -87
- package/src/components/client-portal/ReturnOverview.tsx +11 -2
- package/src/components/client-portal/ReturnRTFilters.tsx +140 -43
- package/src/components/client-portal/ReturnSearchBar.tsx +42 -153
- package/src/components/client-portal/ReturnStatus.tsx +30 -66
- package/src/components/client-portal/return-confirm/ConfirmedMain.tsx +12 -23
- package/src/components/client-portal/return-confirm/ReturnConfirmedTable.tsx +9 -86
- package/src/components/order-daily-overview/header/route-header/ClientRouterHeader.tsx +166 -0
- package/src/components/order-daily-overview/header/route-header/RouterHeader.tsx +2 -86
- package/src/components/order-daily-overview/header-filters/SelectionFilter.tsx +5 -2
- package/src/components/order-daily-overview/index.tsx +16 -4
- package/src/components/order-daily-overview/return-after-table/table-filters/ReturnFilterStore.ts +36 -36
- package/src/components/order-view/notification/ReminderTemplate.tsx +13 -5
- package/src/components/order-view/order-actions/actions/confirm-order/index.tsx +0 -29
- package/src/components/order-view/order-actions/actions/create-task-reminder/CreateReminderModal.tsx +86 -28
- package/src/components/order-view/order-actions/actions/force-debrief/ForceDebriefModal.tsx +35 -20
- package/src/components/order-view/order-actions/actions/force-debrief/order-info/RadioButtons.tsx +11 -62
- package/src/components/order-view/order-actions/index.tsx +1 -5
- package/src/components/order-view/order-actions/types.ts +2 -2
- package/src/components/order-view/order-details/expanded-content/footer/index.tsx +55 -80
- package/src/components/order-view/order-details/expanded-content/services-section/AssemblyType.tsx +9 -91
- package/src/components/order-view/order-details/expanded-content/services-section/OrderServices.tsx +10 -182
- package/src/components/order-view/store.ts +6 -0
- package/src/components/order-view/types.ts +6 -0
- package/src/components/order-view/utils.ts +0 -33
- package/src/components/order-view/view-reminder/AssigneeDropdown.tsx +85 -26
- package/src/components/order-view/view-reminder/ViewReminder.tsx +33 -14
- package/src/components/store.ts +1 -1
- package/src/index.tsx +17 -2
- package/dist/components/order-view/order-actions/actions/log-service-refusal/DeliveryPoint.d.ts +0 -7
- package/dist/components/order-view/order-actions/actions/log-service-refusal/Notes.d.ts +0 -7
- package/dist/components/order-view/order-actions/actions/log-service-refusal/OrderServices.d.ts +0 -7
- package/dist/components/order-view/order-actions/actions/log-service-refusal/helper.d.ts +0 -3
- package/dist/components/order-view/order-actions/actions/log-service-refusal/index.d.ts +0 -3
- package/src/components/order-view/order-actions/actions/log-service-refusal/DeliveryPoint.tsx +0 -50
- package/src/components/order-view/order-actions/actions/log-service-refusal/Notes.tsx +0 -50
- package/src/components/order-view/order-actions/actions/log-service-refusal/OrderServices.tsx +0 -57
- package/src/components/order-view/order-actions/actions/log-service-refusal/helper.ts +0 -26
- package/src/components/order-view/order-actions/actions/log-service-refusal/index.tsx +0 -130
|
@@ -56,11 +56,19 @@ function ReminderTemplate({ data, dismissReminder }: any) {
|
|
|
56
56
|
{`${formatUtcToLocal(data?.due_datetime)?.date} ${
|
|
57
57
|
formatUtcToLocal(data?.due_datetime)?.time
|
|
58
58
|
}`}
|
|
59
|
-
)
|
|
60
|
-
{
|
|
61
|
-
|
|
62
|
-
}
|
|
63
|
-
|
|
59
|
+
)
|
|
60
|
+
{data?.assigned_to && (
|
|
61
|
+
<div>Assigned to: {data.assigned_to}</div>
|
|
62
|
+
)}
|
|
63
|
+
{data?.completed_at && (
|
|
64
|
+
<div>
|
|
65
|
+
Completed On:{' '}
|
|
66
|
+
{`${formatUtcToLocal(data.completed_at)?.date} ${
|
|
67
|
+
formatUtcToLocal(data.completed_at)?.time
|
|
68
|
+
}`}
|
|
69
|
+
</div>
|
|
70
|
+
)}
|
|
71
|
+
{data?.completed_by && <div>By: {data.completed_by}</div>}
|
|
64
72
|
</StyledTitle>
|
|
65
73
|
</>
|
|
66
74
|
}
|
|
@@ -314,35 +314,6 @@ function ConfirmOrder(props: IProps) {
|
|
|
314
314
|
setCurrentAction(undefined);
|
|
315
315
|
};
|
|
316
316
|
|
|
317
|
-
// const isDifferent = () => {
|
|
318
|
-
// const keysToRemovefromOrders = [
|
|
319
|
-
// 'order_locked',
|
|
320
|
-
// 'order_communications',
|
|
321
|
-
// 'updated_at',
|
|
322
|
-
// 'updated_by',
|
|
323
|
-
// 'order_services',
|
|
324
|
-
// ];
|
|
325
|
-
// const filteredOrderDetails = filterObject(
|
|
326
|
-
// orderDetailsConfirmOrder,
|
|
327
|
-
// keysToRemovefromOrders
|
|
328
|
-
// );
|
|
329
|
-
// const filteredPrevOrderDetails = filterObject(
|
|
330
|
-
// prevOrderDetails,
|
|
331
|
-
// keysToRemovefromOrders
|
|
332
|
-
// );
|
|
333
|
-
//
|
|
334
|
-
// const orderDetailsSorted = JSON.stringify(filteredOrderDetails);
|
|
335
|
-
// const prevOrderDetailsSorted = JSON.stringify(filteredPrevOrderDetails);
|
|
336
|
-
// const isSame = orderDetailsSorted === prevOrderDetailsSorted;
|
|
337
|
-
//
|
|
338
|
-
// console.log(orderDetailsSorted, 'orderDetailsSorted');
|
|
339
|
-
// console.log(prevOrderDetailsSorted, 'prevOrderDetailsSorted');
|
|
340
|
-
// console.log(isSame, 'isSameisSame');
|
|
341
|
-
//
|
|
342
|
-
// newOrderServicesSorted === prevOrderServicesSorted;
|
|
343
|
-
// return !isSame;
|
|
344
|
-
// };
|
|
345
|
-
|
|
346
317
|
const errorFound = () => {
|
|
347
318
|
const isError =
|
|
348
319
|
errorState.emailError.length > 0 ||
|
package/src/components/order-view/order-actions/actions/create-task-reminder/CreateReminderModal.tsx
CHANGED
|
@@ -29,7 +29,7 @@ function CreateReminderModal() {
|
|
|
29
29
|
const [displayDate, setDisplayDate] = useState<Date | null>();
|
|
30
30
|
const [staticData] = useStaticData();
|
|
31
31
|
const [departmentData, setDepartmentData] = useDeptData();
|
|
32
|
-
const [selectedDeptId, setSelectedDeptId] = useState<
|
|
32
|
+
const [selectedDeptId, setSelectedDeptId] = useState<string[]>([]);
|
|
33
33
|
const [allUsers, setAllUsers] = useState<
|
|
34
34
|
{
|
|
35
35
|
fName: string;
|
|
@@ -58,21 +58,40 @@ function CreateReminderModal() {
|
|
|
58
58
|
return staticData?.[0]?.priorities?.map((option: any) => {
|
|
59
59
|
const colorMatch = priorityData?.find(p => p.id === option.id);
|
|
60
60
|
return {
|
|
61
|
-
label: option
|
|
62
|
-
value: option
|
|
61
|
+
label: option?.name,
|
|
62
|
+
value: option?.id,
|
|
63
63
|
color: colorMatch?.color || '#ccc',
|
|
64
64
|
};
|
|
65
65
|
});
|
|
66
66
|
};
|
|
67
67
|
const priorityOptions = getPriorityOptions(staticData);
|
|
68
68
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
69
|
+
const handleDepartmentChange = (
|
|
70
|
+
values: string[],
|
|
71
|
+
options: { label: string }[]
|
|
72
|
+
) => {
|
|
73
|
+
setSelectedDeptId(values);
|
|
74
|
+
|
|
75
|
+
if (reminderPayload && reminderPayload?.assigned_to!?.length > 0) {
|
|
76
|
+
const matchedUsers = allUsers?.filter(
|
|
77
|
+
user => user?.deptId !== null && values?.includes(String(user?.deptId))
|
|
78
|
+
);
|
|
79
|
+
|
|
80
|
+
const filteredAssignedTo = reminderPayload?.assigned_to?.filter(
|
|
81
|
+
(id: any) => matchedUsers?.some(user => user.id === id)
|
|
82
|
+
);
|
|
83
|
+
|
|
84
|
+
setReminderPayload((prev: any) => ({
|
|
85
|
+
...prev,
|
|
86
|
+
assigned_to: filteredAssignedTo,
|
|
87
|
+
}));
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
const deptLabels = options?.map(opt => opt.label);
|
|
91
|
+
|
|
92
|
+
setReminderPayload(prev => ({
|
|
93
|
+
...prev,
|
|
94
|
+
department: deptLabels.join(', '),
|
|
76
95
|
}));
|
|
77
96
|
};
|
|
78
97
|
|
|
@@ -113,11 +132,16 @@ function CreateReminderModal() {
|
|
|
113
132
|
};
|
|
114
133
|
|
|
115
134
|
// sso Data get
|
|
116
|
-
const {
|
|
135
|
+
const {
|
|
136
|
+
fetchData: getSSOData,
|
|
137
|
+
data: fetchData,
|
|
138
|
+
loading: deptLoading,
|
|
139
|
+
} = useAxios<{
|
|
117
140
|
data: ApiResponse[];
|
|
118
141
|
}>({
|
|
119
142
|
endpoint: `/sso/departments/`,
|
|
120
143
|
method: 'GET',
|
|
144
|
+
showLoader: false,
|
|
121
145
|
});
|
|
122
146
|
|
|
123
147
|
useEffect(() => {
|
|
@@ -131,9 +155,12 @@ function CreateReminderModal() {
|
|
|
131
155
|
fetchAllSSOData();
|
|
132
156
|
}, []);
|
|
133
157
|
|
|
134
|
-
const { fetchData: getUsersData } = useAxios<{
|
|
158
|
+
const { fetchData: getUsersData, loading: userDataLoading } = useAxios<{
|
|
159
|
+
data: any;
|
|
160
|
+
}>({
|
|
135
161
|
endpoint: `/sso/users/`,
|
|
136
162
|
method: 'GET',
|
|
163
|
+
showLoader: false,
|
|
137
164
|
});
|
|
138
165
|
|
|
139
166
|
useEffect(() => {
|
|
@@ -207,24 +234,22 @@ function CreateReminderModal() {
|
|
|
207
234
|
}));
|
|
208
235
|
|
|
209
236
|
const handleAssignToMe = () => {
|
|
237
|
+
const storedUserJSON = localStorage.getItem('user_type');
|
|
238
|
+
if (!storedUserJSON) return;
|
|
239
|
+
|
|
210
240
|
let storedUserID: string | null = null;
|
|
211
241
|
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
console.error('Failed to parse stored user ID', e);
|
|
219
|
-
}
|
|
242
|
+
try {
|
|
243
|
+
const parsed = JSON.parse(storedUserJSON);
|
|
244
|
+
storedUserID = parsed?.user_id ?? null;
|
|
245
|
+
} catch (e) {
|
|
246
|
+
console.error('Failed to parse stored user_type from localStorage', e);
|
|
247
|
+
return;
|
|
220
248
|
}
|
|
221
249
|
|
|
222
250
|
if (!storedUserID) return;
|
|
223
|
-
console.log(allUsers, 'allUsersallUsersallUsers');
|
|
224
|
-
const matchedUser: any = allUsers?.find(user => user?.id === storedUserID);
|
|
225
251
|
|
|
226
|
-
|
|
227
|
-
console.log(matchedUser, 'matchedUser');
|
|
252
|
+
const matchedUser: any = allUsers?.find(user => user?.id === storedUserID);
|
|
228
253
|
|
|
229
254
|
const deptMatched =
|
|
230
255
|
departmentData?.find((dept: any) => dept.value === matchedUser?.deptId)
|
|
@@ -244,9 +269,39 @@ function CreateReminderModal() {
|
|
|
244
269
|
department: deptMatched,
|
|
245
270
|
}));
|
|
246
271
|
|
|
247
|
-
|
|
272
|
+
if (matchedUser?.deptId) {
|
|
273
|
+
setSelectedDeptId(matchedUser.deptId.toString());
|
|
274
|
+
}
|
|
248
275
|
};
|
|
249
276
|
|
|
277
|
+
useEffect(() => {
|
|
278
|
+
if (
|
|
279
|
+
Array.isArray(selectedDeptId) &&
|
|
280
|
+
selectedDeptId?.length > 0 &&
|
|
281
|
+
allUsers?.length > 0
|
|
282
|
+
) {
|
|
283
|
+
const matchedUsers = allUsers?.filter(
|
|
284
|
+
user =>
|
|
285
|
+
user?.deptId !== null &&
|
|
286
|
+
selectedDeptId?.includes(String(user?.deptId))
|
|
287
|
+
);
|
|
288
|
+
const currentAssigned = (reminderPayload?.assigned_to || []) as string[];
|
|
289
|
+
|
|
290
|
+
const currentAssignedUsers = allUsers?.filter(user =>
|
|
291
|
+
currentAssigned?.includes(user?.id || '')
|
|
292
|
+
);
|
|
293
|
+
|
|
294
|
+
const mergedUsers = [...matchedUsers, ...currentAssignedUsers];
|
|
295
|
+
const uniqueUsers = Array.from(
|
|
296
|
+
new Map(mergedUsers?.map(u => [u?.id, u]))?.values()
|
|
297
|
+
);
|
|
298
|
+
|
|
299
|
+
setFilteredUsers(uniqueUsers);
|
|
300
|
+
} else {
|
|
301
|
+
setFilteredUsers(allUsers);
|
|
302
|
+
}
|
|
303
|
+
}, [selectedDeptId, allUsers]);
|
|
304
|
+
|
|
250
305
|
return (
|
|
251
306
|
<Wrapper>
|
|
252
307
|
<SplitContainer>
|
|
@@ -254,11 +309,13 @@ function CreateReminderModal() {
|
|
|
254
309
|
<DoubleDropdownContainer>
|
|
255
310
|
<StyledAntSelect
|
|
256
311
|
options={deptData}
|
|
257
|
-
style={{ width: '
|
|
258
|
-
placeholder="Select Department"
|
|
312
|
+
style={{ width: '20vw' }}
|
|
313
|
+
placeholder="Select Department(s)"
|
|
259
314
|
onChange={handleDepartmentChange}
|
|
260
|
-
value={
|
|
315
|
+
value={selectedDeptId || []}
|
|
316
|
+
loading={deptLoading}
|
|
261
317
|
showSearch
|
|
318
|
+
mode="multiple"
|
|
262
319
|
/>
|
|
263
320
|
</DoubleDropdownContainer>
|
|
264
321
|
</FormRow>
|
|
@@ -271,6 +328,7 @@ function CreateReminderModal() {
|
|
|
271
328
|
value={reminderPayload?.assigned_to || []}
|
|
272
329
|
showSearch
|
|
273
330
|
mode="multiple"
|
|
331
|
+
loading={userDataLoading}
|
|
274
332
|
filterOption={(input: string, option?: { label: string }) =>
|
|
275
333
|
option?.label.toLowerCase().includes(input.toLowerCase())
|
|
276
334
|
}
|
|
@@ -29,7 +29,6 @@ import BaseCharges from './charges/base-charge';
|
|
|
29
29
|
import DeliveryAddOns from './charges/delivery-add-ons';
|
|
30
30
|
import AdhocSection from './charges/adhoc';
|
|
31
31
|
import OrderInfo from './order-info';
|
|
32
|
-
import {} from '../../store';
|
|
33
32
|
import ForceDebriefSelector from './Selector';
|
|
34
33
|
import {
|
|
35
34
|
Checkbox,
|
|
@@ -41,7 +40,7 @@ import Escalation from './escalation';
|
|
|
41
40
|
import FDNotification from './notifications';
|
|
42
41
|
|
|
43
42
|
import { compareOrderDetailsStates, filterObject } from '../../../utils';
|
|
44
|
-
import { AdhocCharge, ApiResponse,
|
|
43
|
+
import { AdhocCharge, ApiResponse, OrdersType } from '../../../types';
|
|
45
44
|
import { notification } from 'antd';
|
|
46
45
|
import BaseChargeConfirmationModal from './BaseChargeConfirmationModal';
|
|
47
46
|
import { v4 as uuidv4 } from 'uuid';
|
|
@@ -223,7 +222,6 @@ function ForceDebriefModal(props: IProps) {
|
|
|
223
222
|
'order_communications',
|
|
224
223
|
'updated_at',
|
|
225
224
|
'updated_by',
|
|
226
|
-
'order_services',
|
|
227
225
|
];
|
|
228
226
|
const filteredOrderDetails = filterObject(
|
|
229
227
|
orderDetails,
|
|
@@ -234,25 +232,9 @@ function ForceDebriefModal(props: IProps) {
|
|
|
234
232
|
keysToRemovefromOrders
|
|
235
233
|
);
|
|
236
234
|
|
|
237
|
-
const newOrderServices =
|
|
238
|
-
orderDetails?.order_services?.length > 0 &&
|
|
239
|
-
orderDetails?.order_services?.sort(
|
|
240
|
-
(a: OrderServiceType, b: OrderServiceType) => a.id! - b.id!
|
|
241
|
-
);
|
|
242
|
-
|
|
243
|
-
const prevOrderServices =
|
|
244
|
-
prevOrderDetails?.order_services?.length > 0 &&
|
|
245
|
-
prevOrderDetails?.order_services.sort(
|
|
246
|
-
(a: OrderServiceType, b: OrderServiceType) => a.id! - b.id!
|
|
247
|
-
);
|
|
248
|
-
|
|
249
|
-
const newOrderServicesSorted = JSON.stringify(newOrderServices);
|
|
250
|
-
const prevOrderServicesSorted = JSON.stringify(prevOrderServices);
|
|
251
235
|
const orderDetailsSorted = JSON.stringify(filteredOrderDetails);
|
|
252
236
|
const prevOrderDetailsSorted = JSON.stringify(filteredPrevOrderDetails);
|
|
253
|
-
const isSame =
|
|
254
|
-
orderDetailsSorted === prevOrderDetailsSorted &&
|
|
255
|
-
newOrderServicesSorted === prevOrderServicesSorted;
|
|
237
|
+
const isSame = orderDetailsSorted === prevOrderDetailsSorted;
|
|
256
238
|
return !isSame;
|
|
257
239
|
};
|
|
258
240
|
|
|
@@ -285,6 +267,39 @@ function ForceDebriefModal(props: IProps) {
|
|
|
285
267
|
orderDetails
|
|
286
268
|
);
|
|
287
269
|
|
|
270
|
+
const serviceKeys = [
|
|
271
|
+
'assemble',
|
|
272
|
+
'disassemble',
|
|
273
|
+
'unpack_items',
|
|
274
|
+
'collect_disposal',
|
|
275
|
+
'take_packaging_away',
|
|
276
|
+
'assembly_type',
|
|
277
|
+
];
|
|
278
|
+
|
|
279
|
+
let orderServicesPayload: Record<string, any> = {};
|
|
280
|
+
|
|
281
|
+
const includesKey = serviceKeys.some(key => key in ordersApiPayload);
|
|
282
|
+
|
|
283
|
+
if (includesKey) {
|
|
284
|
+
for (const key of serviceKeys) {
|
|
285
|
+
orderServicesPayload[key as keyof typeof ordersApiPayload] =
|
|
286
|
+
key in ordersApiPayload
|
|
287
|
+
? ordersApiPayload[key as keyof typeof ordersApiPayload]
|
|
288
|
+
: orderDetails[key as keyof OrdersType];
|
|
289
|
+
delete ordersApiPayload[key as keyof typeof ordersApiPayload];
|
|
290
|
+
if (
|
|
291
|
+
orderServicesPayload?.assemble === false &&
|
|
292
|
+
orderServicesPayload?.disassemble === false
|
|
293
|
+
) {
|
|
294
|
+
orderServicesPayload.assembly_type = null;
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
if (Object.keys(orderServicesPayload).length > 0) {
|
|
300
|
+
ordersApiPayload.order_services = [orderServicesPayload];
|
|
301
|
+
}
|
|
302
|
+
|
|
288
303
|
try {
|
|
289
304
|
let response = (await callUpdateOrderAPI({
|
|
290
305
|
payload: [ordersApiPayload],
|
package/src/components/order-view/order-actions/actions/force-debrief/order-info/RadioButtons.tsx
CHANGED
|
@@ -2,7 +2,7 @@ import { RadioButtonGroup } from '@bjsdistribution/dms-component-library';
|
|
|
2
2
|
import React from 'react';
|
|
3
3
|
import styled from 'styled-components';
|
|
4
4
|
import { useOrderDetails, useOrderStaticData } from '../../../../store';
|
|
5
|
-
import {
|
|
5
|
+
import { OrdersType } from '../../../../types';
|
|
6
6
|
import { capitalize } from '../../../../utils';
|
|
7
7
|
|
|
8
8
|
export const radioButtonFilterOptions = [
|
|
@@ -36,7 +36,6 @@ function RadioButtonGroups() {
|
|
|
36
36
|
);
|
|
37
37
|
|
|
38
38
|
const orderServicesOptions = orderStaticData?.order_service_list;
|
|
39
|
-
const orderServices = orderDetails?.order_services;
|
|
40
39
|
const deliveryPointId = orderDetails?.order_services_detail?.order_delivery_point_id?.toString();
|
|
41
40
|
const serviceLevelId = orderDetails?.order_services_detail?.order_service_level_id?.toString();
|
|
42
41
|
const orderTypeId = orderDetails?.order_type_id?.toString();
|
|
@@ -68,61 +67,15 @@ function RadioButtonGroups() {
|
|
|
68
67
|
};
|
|
69
68
|
|
|
70
69
|
const onChangeServices = (id: number) => {
|
|
71
|
-
const
|
|
72
|
-
|
|
73
|
-
// Check if the service already exists in the order
|
|
74
|
-
const selectedService = clone.find(
|
|
75
|
-
(s: OrderServiceType) => s.order_service_list_id === id
|
|
70
|
+
const selectedService = orderServicesOptions?.find(
|
|
71
|
+
(item: any) => item.id === id
|
|
76
72
|
);
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
);
|
|
84
|
-
const newData = {
|
|
85
|
-
...orderDetails,
|
|
86
|
-
order_services: updatedOrderServices,
|
|
87
|
-
};
|
|
88
|
-
setOrderDetails(newData);
|
|
89
|
-
} else {
|
|
90
|
-
// It's an existing (persisted) service, toggle its `is_deleted` flag
|
|
91
|
-
const updatedSelectedService = {
|
|
92
|
-
...selectedService,
|
|
93
|
-
is_deleted: !selectedService.is_deleted,
|
|
94
|
-
};
|
|
95
|
-
|
|
96
|
-
const updatedOrderServices = clone
|
|
97
|
-
.filter(
|
|
98
|
-
(service: OrderServiceType) => service.id !== selectedService.id
|
|
99
|
-
)
|
|
100
|
-
.concat(updatedSelectedService);
|
|
101
|
-
|
|
102
|
-
const newData = {
|
|
103
|
-
...orderDetails,
|
|
104
|
-
order_services: updatedOrderServices,
|
|
105
|
-
};
|
|
106
|
-
setOrderDetails(newData);
|
|
107
|
-
}
|
|
108
|
-
} else {
|
|
109
|
-
// Case 2: Service doesn't exist — add it as a new one
|
|
110
|
-
const newService: OrderServiceType = {
|
|
111
|
-
is_deleted: false,
|
|
112
|
-
order_service_list_id: id,
|
|
113
|
-
new_id: id,
|
|
114
|
-
id: id,
|
|
115
|
-
};
|
|
116
|
-
|
|
117
|
-
clone.push(newService);
|
|
118
|
-
|
|
119
|
-
const newData = {
|
|
120
|
-
...orderDetails,
|
|
121
|
-
order_services: clone,
|
|
122
|
-
};
|
|
123
|
-
|
|
124
|
-
setOrderDetails(newData);
|
|
125
|
-
}
|
|
73
|
+
const key = selectedService?.type;
|
|
74
|
+
const value = !orderDetails[key as keyof OrdersType];
|
|
75
|
+
setOrderDetails(prev => ({
|
|
76
|
+
...prev,
|
|
77
|
+
[key]: value,
|
|
78
|
+
}));
|
|
126
79
|
};
|
|
127
80
|
|
|
128
81
|
return (
|
|
@@ -162,18 +115,14 @@ function RadioButtonGroups() {
|
|
|
162
115
|
</Group>
|
|
163
116
|
|
|
164
117
|
{orderServicesOptions?.map((service: any) => {
|
|
165
|
-
const selected =
|
|
166
|
-
(s: OrderServiceType) =>
|
|
167
|
-
s?.order_service_list_id === service?.id && s.is_deleted === false
|
|
168
|
-
);
|
|
169
|
-
|
|
118
|
+
const selected = orderDetails[service?.type as keyof OrdersType];
|
|
170
119
|
return (
|
|
171
120
|
<Group>
|
|
172
121
|
<RadioButtonGroup
|
|
173
122
|
heading={service?.type?.replaceAll('_', ' ')}
|
|
174
123
|
onChange={() => onChangeServices(service?.id)}
|
|
175
124
|
options={radioButtonFilterOptions || []}
|
|
176
|
-
selectedValue={selected
|
|
125
|
+
selectedValue={selected ? 'true' : 'false'}
|
|
177
126
|
direction="vertical"
|
|
178
127
|
required={false}
|
|
179
128
|
isDisabled
|
|
@@ -12,7 +12,6 @@ import {
|
|
|
12
12
|
useStatusDetails,
|
|
13
13
|
} from '../store';
|
|
14
14
|
import SplitOrder from './actions/split-order';
|
|
15
|
-
import LogServiceRefusal from './actions/log-service-refusal';
|
|
16
15
|
import CancelOrder from './actions/cancel-order';
|
|
17
16
|
import ConfirmOrder from './actions/confirm-order';
|
|
18
17
|
import SendSmsModal from './actions/send-sms/SendSmsModal';
|
|
@@ -213,10 +212,7 @@ function OrderActions() {
|
|
|
213
212
|
return <SplitOrder />;
|
|
214
213
|
case 'release-order':
|
|
215
214
|
return <ReleaseOrder />;
|
|
216
|
-
|
|
217
|
-
// return <UnreleaseOrder />;
|
|
218
|
-
case 'log-service-refusal':
|
|
219
|
-
return <LogServiceRefusal callOrdersApi={callOrdersApi} />;
|
|
215
|
+
|
|
220
216
|
case 'cancel-order':
|
|
221
217
|
return (
|
|
222
218
|
<CancelOrder
|
|
@@ -31,7 +31,7 @@ export interface resolveTaskPayload {
|
|
|
31
31
|
export interface CreateReminderPayload {
|
|
32
32
|
due_datetime: Date | null;
|
|
33
33
|
description: string | null;
|
|
34
|
-
assigned_to:
|
|
34
|
+
assigned_to: any | null;
|
|
35
35
|
order_id: number | null;
|
|
36
36
|
priority: number | null;
|
|
37
37
|
department: string | null;
|
|
@@ -49,7 +49,7 @@ export interface SingleResolvedPayload {
|
|
|
49
49
|
export interface UpdateReminderPayload {
|
|
50
50
|
due_datetime: any | null;
|
|
51
51
|
description: any | null;
|
|
52
|
-
assigned_to:
|
|
52
|
+
assigned_to: any | null;
|
|
53
53
|
order_id: number | null;
|
|
54
54
|
priority: number | null;
|
|
55
55
|
department: any | null;
|
|
@@ -9,12 +9,12 @@ import {
|
|
|
9
9
|
errorAtom,
|
|
10
10
|
useCustomerInfo,
|
|
11
11
|
useGlobalStateHitAuditLog,
|
|
12
|
-
useOrderStaticData,
|
|
13
12
|
useGlobalStateHitOrder,
|
|
13
|
+
useLiveRecalling,
|
|
14
14
|
} from '../../../store';
|
|
15
15
|
// import useUpdateOrder from '../../../hooks/useUpdateOrder';
|
|
16
16
|
import { compareOrderDetailsStates, filterObject } from '../../../utils';
|
|
17
|
-
import { ApiResponse,
|
|
17
|
+
import { ApiResponse, OrdersType } from '../../../types';
|
|
18
18
|
import { notification } from 'antd';
|
|
19
19
|
import { useClientPortal } from '../../../../store';
|
|
20
20
|
|
|
@@ -25,10 +25,9 @@ function OrderDetailsFooter() {
|
|
|
25
25
|
// const updateOrder = useUpdateOrder();
|
|
26
26
|
const [errorState] = useAtom(errorAtom);
|
|
27
27
|
const [, setRecallAuditLog] = useGlobalStateHitAuditLog();
|
|
28
|
-
const [orderStaticData] = useOrderStaticData();
|
|
29
28
|
const [, setRecallOrders] = useGlobalStateHitOrder();
|
|
30
29
|
const [isClientPortal] = useClientPortal();
|
|
31
|
-
|
|
30
|
+
const [, setRecalling] = useLiveRecalling();
|
|
32
31
|
//update order
|
|
33
32
|
const { fetchData: callUpdateOrderAPI } = useAxios<{
|
|
34
33
|
data: ApiResponse[];
|
|
@@ -55,7 +54,6 @@ function OrderDetailsFooter() {
|
|
|
55
54
|
'order_communications',
|
|
56
55
|
'updated_at',
|
|
57
56
|
'updated_by',
|
|
58
|
-
'order_services',
|
|
59
57
|
];
|
|
60
58
|
const filteredOrderDetails = filterObject(
|
|
61
59
|
orderDetails,
|
|
@@ -66,97 +64,74 @@ function OrderDetailsFooter() {
|
|
|
66
64
|
keysToRemovefromOrders
|
|
67
65
|
);
|
|
68
66
|
|
|
69
|
-
const newOrderServices =
|
|
70
|
-
orderDetails?.order_services?.length > 0 &&
|
|
71
|
-
orderDetails?.order_services?.sort(
|
|
72
|
-
(a: OrderServiceType, b: OrderServiceType) => a.id! - b.id!
|
|
73
|
-
);
|
|
74
|
-
|
|
75
|
-
const prevOrderServices =
|
|
76
|
-
prevOrderDetails?.order_services?.length > 0 &&
|
|
77
|
-
prevOrderDetails?.order_services.sort(
|
|
78
|
-
(a: OrderServiceType, b: OrderServiceType) => a.id! - b.id!
|
|
79
|
-
);
|
|
80
|
-
|
|
81
|
-
const newOrderServicesSorted = JSON.stringify(newOrderServices);
|
|
82
|
-
const prevOrderServicesSorted = JSON.stringify(prevOrderServices);
|
|
83
67
|
const orderDetailsSorted = JSON.stringify(filteredOrderDetails);
|
|
84
68
|
const prevOrderDetailsSorted = JSON.stringify(filteredPrevOrderDetails);
|
|
85
|
-
const isSame =
|
|
86
|
-
orderDetailsSorted === prevOrderDetailsSorted &&
|
|
87
|
-
newOrderServicesSorted === prevOrderServicesSorted;
|
|
69
|
+
const isSame = orderDetailsSorted === prevOrderDetailsSorted;
|
|
88
70
|
return !isSame;
|
|
89
71
|
};
|
|
90
72
|
|
|
91
73
|
const onSave = async () => {
|
|
92
74
|
setRecallAuditLog(false);
|
|
93
75
|
setRecallOrders(false);
|
|
76
|
+
setRecalling(false);
|
|
94
77
|
const payload = compareOrderDetailsStates(prevOrderDetails, orderDetails);
|
|
95
|
-
const clone = [...orderDetails?.order_services];
|
|
96
78
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
79
|
+
const serviceKeys = [
|
|
80
|
+
'assemble',
|
|
81
|
+
'disassemble',
|
|
82
|
+
'unpack_items',
|
|
83
|
+
'collect_disposal',
|
|
84
|
+
'take_packaging_away',
|
|
85
|
+
'assembly_type',
|
|
86
|
+
];
|
|
104
87
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
);
|
|
88
|
+
let orderServicesPayload: Record<string, any> = {};
|
|
89
|
+
|
|
90
|
+
const includesKey = serviceKeys.some(key => key in payload);
|
|
91
|
+
|
|
92
|
+
if (includesKey) {
|
|
93
|
+
for (const key of serviceKeys) {
|
|
94
|
+
orderServicesPayload[key as keyof typeof payload] =
|
|
95
|
+
key in payload
|
|
96
|
+
? payload[key as keyof typeof payload]
|
|
97
|
+
: orderDetails[key as keyof OrdersType];
|
|
98
|
+
delete payload[key as keyof typeof payload];
|
|
99
|
+
if (
|
|
100
|
+
orderServicesPayload?.assemble === false &&
|
|
101
|
+
orderServicesPayload?.disassemble === false
|
|
102
|
+
) {
|
|
103
|
+
orderServicesPayload.assembly_type = null;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
108
107
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
108
|
+
if (Object.keys(orderServicesPayload).length > 0) {
|
|
109
|
+
payload.order_services = [orderServicesPayload];
|
|
110
|
+
}
|
|
112
111
|
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
112
|
+
let response = (await callUpdateOrderAPI({
|
|
113
|
+
payload: [payload],
|
|
114
|
+
})) as {
|
|
115
|
+
code: number | null;
|
|
116
|
+
error?: string | null | undefined;
|
|
117
|
+
[key: string]: any;
|
|
118
|
+
};
|
|
119
|
+
// const response = await updateOrder([payload]);
|
|
120
|
+
setRecallOrders(true);
|
|
121
|
+
if (response.code == 200 && response?.data?.length > 0) {
|
|
122
|
+
notification.success({
|
|
123
|
+
message: 'Success',
|
|
124
|
+
description: `${response?.message}`,
|
|
122
125
|
});
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
disassemblyTypeService?.service_category_id === null)
|
|
129
|
-
) {
|
|
130
|
-
notification.info({
|
|
131
|
-
message: 'Info',
|
|
132
|
-
description: 'Assembly Type is required',
|
|
126
|
+
setOrderDetails(response?.data[0]);
|
|
127
|
+
setPrevOrderDetails(response?.data[0]);
|
|
128
|
+
setCustomerInfo({
|
|
129
|
+
recipient_name: response?.data[0]?.order_recipient?.recipient_name,
|
|
130
|
+
postcode: response?.data[0]?.order_recipient?.postcode,
|
|
133
131
|
});
|
|
134
|
-
|
|
132
|
+
setRecallAuditLog(true);
|
|
135
133
|
} else {
|
|
136
|
-
|
|
137
|
-
payload: [payload],
|
|
138
|
-
})) as {
|
|
139
|
-
code: number | null;
|
|
140
|
-
error?: string | null | undefined;
|
|
141
|
-
[key: string]: any;
|
|
142
|
-
};
|
|
143
|
-
// const response = await updateOrder([payload]);
|
|
144
|
-
setRecallOrders(true);
|
|
145
|
-
if (response.code == 200 && response?.data?.length > 0) {
|
|
146
|
-
notification.success({
|
|
147
|
-
message: 'Success',
|
|
148
|
-
description: `${response?.message}`,
|
|
149
|
-
});
|
|
150
|
-
setOrderDetails(response?.data[0]);
|
|
151
|
-
setPrevOrderDetails(response?.data[0]);
|
|
152
|
-
setCustomerInfo({
|
|
153
|
-
recipient_name: response?.data[0]?.order_recipient?.recipient_name,
|
|
154
|
-
postcode: response?.data[0]?.order_recipient?.postcode,
|
|
155
|
-
});
|
|
156
|
-
setRecallAuditLog(true);
|
|
157
|
-
} else {
|
|
158
|
-
setOrderDetails(prevOrderDetails);
|
|
159
|
-
}
|
|
134
|
+
setOrderDetails(prevOrderDetails);
|
|
160
135
|
}
|
|
161
136
|
};
|
|
162
137
|
|