mirror of
https://gitlab.com/mbugroup/lti-web-client.git
synced 2026-05-20 13:32:00 +00:00
refactor(FE): Refactor delivery order value initialization logic
This commit is contained in:
@@ -111,16 +111,34 @@ const DeliveryOrderFormModal = ({}: { initialValues?: Marketing }) => {
|
|||||||
useState<DeliveryOrderProductFormValues | null>(null);
|
useState<DeliveryOrderProductFormValues | null>(null);
|
||||||
const [deliveryOrderValues, setDeliveryOrderValues] = useState<
|
const [deliveryOrderValues, setDeliveryOrderValues] = useState<
|
||||||
DeliveryOrderProductFormValues[]
|
DeliveryOrderProductFormValues[]
|
||||||
>(
|
>([]);
|
||||||
isResponseSuccess(marketing)
|
|
||||||
? mergeSOwithDO(
|
const getDeliveryOrderValues = useCallback(
|
||||||
marketing?.data.sales_order?.map(SalesProductToFieldValues) ?? [],
|
(marketingData: Marketing): DeliveryOrderProductFormValues[] => {
|
||||||
marketing?.data.delivery_order?.flatMap((delivery) =>
|
const hasDeliveryOrder =
|
||||||
DeliveryProductToFieldValues(marketing.data.sales_order, delivery)
|
marketingData.delivery_order &&
|
||||||
) ?? [],
|
marketingData.delivery_order.length > 0 &&
|
||||||
true
|
marketingData.delivery_order.some(
|
||||||
)
|
(doItem) => doItem.deliveries && doItem.deliveries.length > 0
|
||||||
: []
|
);
|
||||||
|
|
||||||
|
if (hasDeliveryOrder) {
|
||||||
|
return (
|
||||||
|
marketingData.delivery_order?.flatMap((delivery) =>
|
||||||
|
DeliveryProductToFieldValues(marketingData.sales_order, delivery)
|
||||||
|
) ?? []
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return mergeSOwithDO(
|
||||||
|
marketingData.sales_order?.map(SalesProductToFieldValues) ?? [],
|
||||||
|
marketingData.delivery_order?.flatMap((delivery) =>
|
||||||
|
DeliveryProductToFieldValues(marketingData.sales_order, delivery)
|
||||||
|
) ?? [],
|
||||||
|
true
|
||||||
|
);
|
||||||
|
},
|
||||||
|
[]
|
||||||
);
|
);
|
||||||
|
|
||||||
// ================== SETUP FORMIK ==================
|
// ================== SETUP FORMIK ==================
|
||||||
@@ -129,14 +147,8 @@ const DeliveryOrderFormModal = ({}: { initialValues?: Marketing }) => {
|
|||||||
>(() => {
|
>(() => {
|
||||||
if (!isResponseSuccess(marketing))
|
if (!isResponseSuccess(marketing))
|
||||||
return {} as SalesOrderFormValues & DeliveryOrderFormValues;
|
return {} as SalesOrderFormValues & DeliveryOrderFormValues;
|
||||||
const deliveryValues = mergeSOwithDO(
|
|
||||||
marketing?.data.sales_order?.map(SalesProductToFieldValues) ?? [],
|
|
||||||
marketing?.data.delivery_order?.flatMap((delivery) =>
|
|
||||||
DeliveryProductToFieldValues(marketing.data.sales_order, delivery)
|
|
||||||
) ?? [],
|
|
||||||
true
|
|
||||||
);
|
|
||||||
|
|
||||||
|
const deliveryValues = getDeliveryOrderValues(marketing.data);
|
||||||
setDeliveryOrderValues(deliveryValues);
|
setDeliveryOrderValues(deliveryValues);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
@@ -162,7 +174,7 @@ const DeliveryOrderFormModal = ({}: { initialValues?: Marketing }) => {
|
|||||||
) ?? [],
|
) ?? [],
|
||||||
delivery_order: deliveryValues,
|
delivery_order: deliveryValues,
|
||||||
};
|
};
|
||||||
}, [marketing]);
|
}, [marketing, getDeliveryOrderValues]);
|
||||||
|
|
||||||
const formik = useFormik<SalesOrderFormValues & DeliveryOrderFormValues>({
|
const formik = useFormik<SalesOrderFormValues & DeliveryOrderFormValues>({
|
||||||
enableReinitialize: true,
|
enableReinitialize: true,
|
||||||
@@ -647,9 +659,8 @@ const DeliveryOrderFormModal = ({}: { initialValues?: Marketing }) => {
|
|||||||
<tr>
|
<tr>
|
||||||
<td className='text-sm px-4 py-3'>No. Order</td>
|
<td className='text-sm px-4 py-3'>No. Order</td>
|
||||||
<td className='text-sm px-4 py-3'>
|
<td className='text-sm px-4 py-3'>
|
||||||
{marketing.data.do_number
|
{marketing.data.do_number ||
|
||||||
? marketing.data.do_number
|
marketing.data.so_number}
|
||||||
: marketing.data.so_number}
|
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
@@ -764,6 +775,7 @@ const DeliveryOrderFormModal = ({}: { initialValues?: Marketing }) => {
|
|||||||
<MemoizedDeliveryOrderProductForm
|
<MemoizedDeliveryOrderProductForm
|
||||||
formState={'edit'}
|
formState={'edit'}
|
||||||
salesOrders={marketing?.data?.sales_order ?? []}
|
salesOrders={marketing?.data?.sales_order ?? []}
|
||||||
|
deliveryOrders={marketing?.data?.delivery_order ?? []}
|
||||||
exisitingValues={deliveryOrderValues}
|
exisitingValues={deliveryOrderValues}
|
||||||
onSubmitForm={handleAddSubmitDO}
|
onSubmitForm={handleAddSubmitDO}
|
||||||
initialValues={selectedDeliveryProduct ?? undefined}
|
initialValues={selectedDeliveryProduct ?? undefined}
|
||||||
|
|||||||
+53
-8
@@ -10,7 +10,10 @@ import NumberInput from '@/components/input/NumberInput';
|
|||||||
import PatternInput from '@/components/input/PatternInput';
|
import PatternInput from '@/components/input/PatternInput';
|
||||||
import { formatTitleCase, formatVechicleNumber } from '@/lib/helper';
|
import { formatTitleCase, formatVechicleNumber } from '@/lib/helper';
|
||||||
import DateInput from '@/components/input/DateInput';
|
import DateInput from '@/components/input/DateInput';
|
||||||
import { BaseSalesOrder } from '@/types/api/marketing/marketing';
|
import {
|
||||||
|
BaseSalesOrder,
|
||||||
|
BaseDeliveryOrder,
|
||||||
|
} from '@/types/api/marketing/marketing';
|
||||||
import { SalesProductToFieldValues } from '@/components/pages/marketing/form/MarketingForm.schema';
|
import { SalesProductToFieldValues } from '@/components/pages/marketing/form/MarketingForm.schema';
|
||||||
import * as Yup from 'yup';
|
import * as Yup from 'yup';
|
||||||
import { isResponseSuccess } from '@/lib/api-helper';
|
import { isResponseSuccess } from '@/lib/api-helper';
|
||||||
@@ -32,6 +35,7 @@ import { handleMarketingCalculation } from '@/lib/marketing-calculation';
|
|||||||
const DeliveryOrderProductForm = ({
|
const DeliveryOrderProductForm = ({
|
||||||
formState,
|
formState,
|
||||||
salesOrders,
|
salesOrders,
|
||||||
|
deliveryOrders,
|
||||||
initialValues,
|
initialValues,
|
||||||
exisitingValues,
|
exisitingValues,
|
||||||
onUpdateForm,
|
onUpdateForm,
|
||||||
@@ -39,6 +43,7 @@ const DeliveryOrderProductForm = ({
|
|||||||
}: {
|
}: {
|
||||||
formState: 'add' | 'edit';
|
formState: 'add' | 'edit';
|
||||||
salesOrders: BaseSalesOrder[];
|
salesOrders: BaseSalesOrder[];
|
||||||
|
deliveryOrders?: BaseDeliveryOrder[];
|
||||||
initialValues?: DeliveryOrderProductFormValues;
|
initialValues?: DeliveryOrderProductFormValues;
|
||||||
exisitingValues?: DeliveryOrderProductFormValues[];
|
exisitingValues?: DeliveryOrderProductFormValues[];
|
||||||
onSubmitForm?: (value: DeliveryOrderProductFormValues) => Promise<void>;
|
onSubmitForm?: (value: DeliveryOrderProductFormValues) => Promise<void>;
|
||||||
@@ -115,6 +120,36 @@ const DeliveryOrderProductForm = ({
|
|||||||
})
|
})
|
||||||
?.filter((item) => item != null) as OptionType[];
|
?.filter((item) => item != null) as OptionType[];
|
||||||
|
|
||||||
|
const hasDeliveryOrder = useMemo(() => {
|
||||||
|
return (
|
||||||
|
deliveryOrders &&
|
||||||
|
deliveryOrders.length > 0 &&
|
||||||
|
deliveryOrders.some(
|
||||||
|
(doItem) => doItem.deliveries && doItem.deliveries.length > 0
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}, [deliveryOrders]);
|
||||||
|
|
||||||
|
const deliveryOrder = useMemo(() => {
|
||||||
|
if (!hasDeliveryOrder || !deliveryOrders) return null;
|
||||||
|
|
||||||
|
for (const doItem of deliveryOrders) {
|
||||||
|
const found = doItem.deliveries.find(
|
||||||
|
(d) =>
|
||||||
|
d.product_warehouse.id ===
|
||||||
|
initialValues?.marketing_product?.product_warehouse_id
|
||||||
|
);
|
||||||
|
if (found) {
|
||||||
|
return {
|
||||||
|
...found,
|
||||||
|
delivery_date: doItem.delivery_date,
|
||||||
|
do_number: doItem.do_number,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}, [deliveryOrders, hasDeliveryOrder, initialValues]);
|
||||||
|
|
||||||
const salesOrder = salesOrders.find(
|
const salesOrder = salesOrders.find(
|
||||||
(item) => item.id === initialValues?.marketing_product_id
|
(item) => item.id === initialValues?.marketing_product_id
|
||||||
);
|
);
|
||||||
@@ -122,15 +157,25 @@ const DeliveryOrderProductForm = ({
|
|||||||
const formik = useFormik<DeliveryOrderProductFormValues>({
|
const formik = useFormik<DeliveryOrderProductFormValues>({
|
||||||
enableReinitialize: true,
|
enableReinitialize: true,
|
||||||
initialValues: {
|
initialValues: {
|
||||||
delivery_date: initialValues?.delivery_date || undefined,
|
delivery_date:
|
||||||
vehicle_number: initialValues?.vehicle_number || undefined,
|
deliveryOrder?.delivery_date ||
|
||||||
|
initialValues?.delivery_date ||
|
||||||
|
undefined,
|
||||||
|
vehicle_number:
|
||||||
|
deliveryOrder?.vehicle_number ||
|
||||||
|
initialValues?.vehicle_number ||
|
||||||
|
undefined,
|
||||||
marketing_product_id:
|
marketing_product_id:
|
||||||
salesOrder?.id || initialValues?.marketing_product_id || undefined,
|
salesOrder?.id || initialValues?.marketing_product_id || undefined,
|
||||||
unit_price: initialValues?.unit_price || undefined,
|
unit_price:
|
||||||
total_weight: initialValues?.total_weight || undefined,
|
deliveryOrder?.unit_price ?? initialValues?.unit_price ?? undefined,
|
||||||
qty: initialValues?.qty || undefined,
|
total_weight:
|
||||||
avg_weight: initialValues?.avg_weight || undefined,
|
deliveryOrder?.total_weight ?? initialValues?.total_weight ?? undefined,
|
||||||
total_price: initialValues?.total_price || undefined,
|
qty: deliveryOrder?.qty ?? initialValues?.qty ?? undefined,
|
||||||
|
avg_weight:
|
||||||
|
deliveryOrder?.avg_weight ?? initialValues?.avg_weight ?? undefined,
|
||||||
|
total_price:
|
||||||
|
deliveryOrder?.total_price ?? initialValues?.total_price ?? undefined,
|
||||||
marketing_product: initialValues?.marketing_product || undefined,
|
marketing_product: initialValues?.marketing_product || undefined,
|
||||||
uom: initialValues?.uom || '',
|
uom: initialValues?.uom || '',
|
||||||
weight_per_convertion:
|
weight_per_convertion:
|
||||||
|
|||||||
Reference in New Issue
Block a user