refactor(FE): Add week field handling for marketing and sales order

forms
This commit is contained in:
rstubryan
2026-02-09 14:06:43 +07:00
parent e6a572ac17
commit 291eee3bce
4 changed files with 63 additions and 12 deletions
@@ -180,6 +180,25 @@ const DeliveryOrderProductForm = ({
},
});
const hasWeekField = useMemo(() => {
const marketingType = formik.values.marketing_type?.value?.toLowerCase();
if (marketingType === 'ayam_pullet') {
return true;
}
if (formik.values.marketing_product?.product_warehouse_data) {
return Boolean(
formik.values.marketing_product?.product_warehouse_data?.week !==
undefined &&
formik.values.marketing_product?.product_warehouse_data?.week !==
null &&
formik.values.marketing_product?.product_warehouse_data?.week > 0
);
}
return false;
}, [formik.values.marketing_product, formik.values.marketing_type]);
const handleResetForm = () => {
setFormErrorMessage('');
formik.resetForm({
@@ -364,20 +383,24 @@ const DeliveryOrderProductForm = ({
avg_weight: '',
total_weight: '',
vehicle_number: '',
week: null,
});
return;
}
const soFieldValues = SalesProductToFieldValues(so);
formik.setValues({
...formik.values,
marketing_product_id: selected.value as number,
marketing_product: SalesProductToFieldValues(so),
marketing_product: soFieldValues,
qty: so.qty,
unit_price: so.unit_price,
total_price: so.total_price,
avg_weight: so.avg_weight,
total_weight: so.total_weight,
vehicle_number: so.vehicle_number,
week: soFieldValues.week ?? null,
});
}}
startAdornment={
@@ -511,10 +534,14 @@ const DeliveryOrderProductForm = ({
)}
{/* Konversi Satuan Week Pullet */}
{formik.values.marketing_type?.value.toLowerCase() ===
'ayam_pullet' && (
{(formik.values.marketing_type?.value.toLowerCase() ===
'ayam_pullet' ||
hasWeekField) && (
<NumberInput
required
required={
formik.values.marketing_type?.value.toLowerCase() ===
'ayam_pullet'
}
label='Minggu'
name='week'
value={formik.values.week ?? undefined}
@@ -117,6 +117,19 @@ const SalesOrderProductForm = ({
isInitialValid: false,
});
const hasWeekField = useMemo(() => {
const marketingType = formik.values.marketing_type?.value?.toLowerCase();
if (marketingType === 'ayam_pullet') {
return true;
}
return Boolean(
selectedProductWarehouse?.week !== undefined &&
selectedProductWarehouse?.week !== null &&
selectedProductWarehouse?.week > 0
);
}, [selectedProductWarehouse, formik.values.marketing_type]);
// ===== Options =====
const {
options: kandangSourceOptions,
@@ -180,10 +193,20 @@ const SalesOrderProductForm = ({
setSelectedProductWarehouse(productWarehouse || null);
formik.setFieldValue('qty', productWarehouse?.quantity);
formik.setFieldValue('uom', productWarehouse?.product?.uom?.name || '');
if (
productWarehouse?.week !== undefined &&
productWarehouse?.week !== null &&
productWarehouse?.week > 0
) {
formik.setFieldValue('week', productWarehouse.week);
} else {
formik.setFieldValue('week', null);
}
handleBlurField('qty');
} else {
formik.setFieldValue('qty', '');
formik.setFieldValue('uom', '');
formik.setFieldValue('week', null);
}
};
@@ -465,10 +488,14 @@ const SalesOrderProductForm = ({
)}
{/* Konversi Satuan Week Pullet */}
{formik.values.marketing_type?.value.toLowerCase() ===
'ayam_pullet' && (
{(formik.values.marketing_type?.value.toLowerCase() ===
'ayam_pullet' ||
hasWeekField) && (
<NumberInput
required
required={
formik.values.marketing_type?.value.toLowerCase() ===
'ayam_pullet'
}
label='Minggu'
name='week'
value={formik.values.week ?? undefined}
+1 -5
View File
@@ -512,13 +512,9 @@ export const FILTER_TYPE_OPTIONS = [
];
export const MARKETING_TYPE_OPTIONS = [
{
label: 'Ayam Pullet',
value: 'AYAM_PULLET',
},
{
label: 'Ayam',
value: 'AYAM',
value: 'AYAM,AYAM_PULLET',
},
{
label: 'Trading',
+1
View File
@@ -11,6 +11,7 @@ export type BaseProductWarehouse = {
quantity: number;
product: Product;
warehouse: Warehouse;
week?: number | null;
};
export type ProductWarehouse = BaseMetadata & BaseProductWarehouse;