diff --git a/src/components/pages/marketing/SalesOrderFormModal.tsx b/src/components/pages/marketing/SalesOrderFormModal.tsx index 57f1e18c..fd7d8b7b 100644 --- a/src/components/pages/marketing/SalesOrderFormModal.tsx +++ b/src/components/pages/marketing/SalesOrderFormModal.tsx @@ -650,7 +650,7 @@ const SalesOrderFormModal = ({ -
+
= @@ -59,6 +76,23 @@ export const SalesOrderProductSchema: Yup.ObjectSchema Number(value.toFixed(2)); const roundPrice = (value: number) => Math.round(value); @@ -41,6 +51,7 @@ const SalesOrderProductForm = ({ const [currentInput, setCurrentInput] = useState(''); const [selectedProductWarehouse, setSelectedProductWarehouse] = useState(null); + const [hasSisaBerat, setHasSisaBerat] = useState(false); // ============ Formik ============ const formik = useFormik({ @@ -57,6 +68,13 @@ const SalesOrderProductForm = ({ avg_weight: initialValues?.avg_weight || '', total_price: initialValues?.total_price || '', uom: initialValues?.uom || '', + weight_per_convertion: + initialValues?.weight_per_convertion != null + ? Number(initialValues.weight_per_convertion) + : null, + convertion_unit: initialValues?.convertion_unit || null, + marketing_type: initialValues?.marketing_type || null, + total_peti: initialValues?.total_peti ?? null, }, validationSchema: SalesOrderProductSchema, onSubmit: async (values) => { @@ -76,6 +94,14 @@ const SalesOrderProductForm = ({ loadMore: loadMoreKandang, } = useSelect(WarehouseApi.basePath, 'id', 'name'); + // Options Weeks dari minggu 1 - 22 + const optionsWeeks = useMemo(() => { + return Array.from({ length: 22 }, (_, i) => ({ + value: i + 1, + label: `Weeks ${i + 1}`, + })); + }, []); + const { options: warehouseSourceOptions, rawData: warehouseSourceRawData, @@ -89,6 +115,7 @@ const SalesOrderProductForm = ({ '', { warehouse_id: formik.values.kandang_id?.toString() ?? '', + type: formik.values.marketing_type?.value.toLocaleUpperCase() ?? '', } ); @@ -279,174 +306,450 @@ const SalesOrderProductForm = ({ onSubmit={handleFormSubmit} onReset={handleResetForm} > - {formErrorMessage && ( -
setFormErrorMessage('')} className='my-3 w-full'> - - {formErrorMessage ? formErrorMessage : ''} - -
- )} - - - - { - formik.handleChange(e); - setCurrentInput(e.target.name); - }} - onBlur={() => handleBlurField('qty')} - isError={formik.touched.qty && Boolean(formik.errors.qty)} - errorMessage={formik.errors.qty} - placeholder='Masukan Kuantitas' - endAdornment={ -
- - {selectedProductWarehouse?.product?.uom?.name} +
+ {formErrorMessage && ( +
setFormErrorMessage('')} + className='my-3 w-full' + > + + {formErrorMessage ? formErrorMessage : ''} + +
+ )} + {/* Nomor Polisi */} + + + {/* Gudang */} + + + {/* Kategori */} + { + formik.setFieldValue('marketing_type', val); + warehouseChangeHandler(null); + formik.setFieldValue('product_warehouse', null); + formik.setFieldValue('product_warehouse_id', null); + formik.setFieldValue('convertion_unit', null); + formik.setFieldValue('weight_per_convertion', null); + formik.setFieldValue('total_peti', null); + }} + isClearable + placeholder='Pilih Kategori' + /> + + {/* Produk */} + + + {/* Konversi Satuan Telur */} + {formik.values.marketing_type && + formik.values.marketing_type.value.toLowerCase() === 'telur' && + (!formik.values.convertion_unit || + formik.values.convertion_unit.value.toLowerCase() !== 'peti') && ( + formik.setFieldValue('convertion_unit', val)} + isClearable + placeholder='Pilih Konversi Satuan' + /> + )} + {formik.values.convertion_unit && + formik.values.convertion_unit.value === 'peti' && ( +
+ +
+
+ +
+ {formatTitleCase( + formik.values.convertion_unit.value + )} + +
+
+
+ } + className={{ + wrapper: 'relative', + content: + 'rounded-xl mt-1 border border-base-content/5 shadow-sm overflow-hidden min-w-68.5 sm:min-w-103.25 w-full', + }} + > +
    + {MARKETING_CONVERTION_UNIT_OPTIONS.map((option) => ( +
  • + +
  • + ))} +
+ +
+ { + formik.setFieldValue( + 'weight_per_convertion', + Number(e.target.value) + ); + setCurrentInput(e.target.name); + }} + /> +
+
+ )} + + {/* Konversi Satuan Weeks Pullet */} + {formik.values.marketing_type?.value.toLowerCase() === + 'ayam_pullet' && ( + { + formik.setFieldValue('weeks', val); + }} + placeholder='Pilih Weeks' + /> + )} + + {/* Total Peti */} + {formik.values.convertion_unit?.value === 'peti' && ( + { + formik.handleChange(e); + setCurrentInput(e.target.name); + }} + onBlur={() => handleBlurField('total_peti')} + isError={ + formik.touched.total_peti && Boolean(formik.errors.total_peti) + } + errorMessage={formik.errors.total_peti} + placeholder='Masukan Total Peti' + endAdornment={ +
+ Kg +
+ } + bottomLabel={`1 ${formik.values.convertion_unit?.value} = ${formik.values.weight_per_convertion ?? 0} Kg`} + /> + )} + + {/* Avg. Bobot */} + {formik.values.marketing_type?.value.toLowerCase() === 'trading' || + (formik.values.convertion_unit?.value.toLowerCase() !== 'peti' && + formik.values.convertion_unit?.value.toLowerCase() !== 'kg' && ( + { + formik.handleChange(e); + setCurrentInput(e.target.name); + }} + onBlur={() => handleBlurField('avg_weight')} + isError={ + formik.touched.avg_weight && + Boolean(formik.errors.avg_weight) + } + errorMessage={formik.errors.avg_weight} + placeholder='Masukan Bobot Rata-rata' + /> + ))} + + {/* Total Bobot */} + {formik.values.marketing_type?.value.toLowerCase() !== 'trading' && ( + { + formik.handleChange(e); + setCurrentInput(e.target.name); + }} + onBlur={() => handleBlurField('total_weight')} + isError={ + formik.touched.total_weight && + Boolean(formik.errors.total_weight) + } + errorMessage={formik.errors.total_weight} + placeholder='Masukan Total Bobot' + /> + )} + + {/* Kuantitas */} + { + formik.handleChange(e); + setCurrentInput(e.target.name); + }} + onBlur={() => handleBlurField('qty')} + isError={formik.touched.qty && Boolean(formik.errors.qty)} + errorMessage={formik.errors.qty} + placeholder='Masukan Kuantitas' + endAdornment={ +
+ + {selectedProductWarehouse?.product?.uom?.name} + +
+ } + bottomLabel={ + isResponseSuccess(warehouseSourceRawData) && + formik.values.product_warehouse_id + ? `Stok tersedia: ${formatNumber( + warehouseSourceRawData?.data?.find( + (item) => item.id === formik.values.product_warehouse_id + )?.quantity ?? 0 + )} ${selectedProductWarehouse?.product?.uom?.name}` + : '' + } + /> + + {/* Harga per convertion unit */} + {(formik.values.convertion_unit?.value.toLowerCase() === 'peti' || + formik.values.convertion_unit?.value.toLowerCase() === 'kg') && ( + { + formik.handleChange(e); + setCurrentInput(e.target.name); + }} + onBlur={() => handleBlurField('price_per_convertion')} + isError={ + formik.touched.price_per_convertion && + Boolean(formik.errors.price_per_convertion) + } + errorMessage={formik.errors.price_per_convertion} + placeholder='Masukan Harga Satuan' + /> + )} + + {/* Harga Satuan per Uom Produk Warehouse */} + {formik.values.convertion_unit?.value.toLowerCase() !== 'peti' && + formik.values.convertion_unit?.value.toLowerCase() !== 'kg' && ( + { + formik.handleChange(e); + setCurrentInput(e.target.name); + }} + onBlur={() => handleBlurField('unit_price')} + isError={ + formik.touched.unit_price && Boolean(formik.errors.unit_price) + } + errorMessage={formik.errors.unit_price} + placeholder='Masukan Harga Satuan' + /> + )} + + {/* Sisa kg diluar peti */} + {formik.values.convertion_unit?.value.toLowerCase() === 'peti' && ( +
+
+ { + setHasSisaBerat(!hasSisaBerat); + }} + onBlur={() => handleBlurField('sisa_berat')} + className='toggle toggle-primary rounded-full before:rounded-full before:bg-base-content/50 border-base-content/50 checked:border-primary checked:bg-primary checked:before:bg-base-100' + /> + +
+ + Jika ada, masukan berat di luar peti
- } - bottomLabel={ - isResponseSuccess(warehouseSourceRawData) && - formik.values.product_warehouse_id - ? `Stok tersedia: ${formatNumber( - warehouseSourceRawData?.data?.find( - (item) => item.id === formik.values.product_warehouse_id - )?.quantity ?? 0 - )} ${selectedProductWarehouse?.product?.uom?.name}` - : '' - } - /> - { - formik.handleChange(e); - setCurrentInput(e.target.name); - }} - onBlur={() => handleBlurField('unit_price')} - isError={ - formik.touched.unit_price && Boolean(formik.errors.unit_price) - } - errorMessage={formik.errors.unit_price} - placeholder='Masukan Harga Satuan' - /> - { - formik.handleChange(e); - setCurrentInput(e.target.name); - }} - onBlur={() => handleBlurField('avg_weight')} - isError={ - formik.touched.avg_weight && Boolean(formik.errors.avg_weight) - } - errorMessage={formik.errors.avg_weight} - placeholder='Masukan Bobot Rata-rata' - /> - { - formik.handleChange(e); - setCurrentInput(e.target.name); - }} - onBlur={() => handleBlurField('total_weight')} - isError={ - formik.touched.total_weight && Boolean(formik.errors.total_weight) - } - errorMessage={formik.errors.total_weight} - placeholder='Masukan Total Bobot' - /> - { - formik.handleChange(e); - setCurrentInput(e.target.name); - }} - onBlur={() => handleBlurField('total_price')} - isError={ - formik.touched.total_price && Boolean(formik.errors.total_price) - } - errorMessage={formik.errors.total_price} - placeholder='Masukan Total Penjualan' - /> + )} -
- + {hasSisaBerat && ( + <> + { + formik.handleChange(e); + setCurrentInput(e.target.name); + }} + onBlur={() => handleBlurField('sisa_berat')} + isError={ + formik.touched.sisa_berat && Boolean(formik.errors.sisa_berat) + } + errorMessage={formik.errors.sisa_berat} + placeholder='Masukan Sisa Berat' + /> + { + formik.handleChange(e); + setCurrentInput(e.target.name); + }} + onBlur={() => handleBlurField('price_sisa_berat')} + isError={ + formik.touched.price_sisa_berat && + Boolean(formik.errors.price_sisa_berat) + } + errorMessage={formik.errors.price_sisa_berat} + placeholder='Masukan Harga Sisa Berat' + /> + + )} + + {/* Total Penjualan */} + { + formik.handleChange(e); + setCurrentInput(e.target.name); + }} + onBlur={() => handleBlurField('total_price')} + isError={ + formik.touched.total_price && Boolean(formik.errors.total_price) + } + errorMessage={formik.errors.total_price} + placeholder='Masukan Total Penjualan' + /> + + {formErrorList.length > 0 && ( +
+ +
+ )}
-
+