diff --git a/.husky/pre-commit b/.husky/pre-commit index ac8a41c7..f799d12f 100644 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -1,3 +1,3 @@ npm run format npm run lint -npm run typecheck +npm run typecheck \ No newline at end of file diff --git a/src/components/pages/marketing/form/MarketingForm.schema.ts b/src/components/pages/marketing/form/MarketingForm.schema.ts index 08e2ced5..0bc40627 100644 --- a/src/components/pages/marketing/form/MarketingForm.schema.ts +++ b/src/components/pages/marketing/form/MarketingForm.schema.ts @@ -151,6 +151,25 @@ export const DeliveryProductToFieldValues = ( value: item.product_warehouse.warehouse.id, label: item.product_warehouse.warehouse.name, }; + + const initialSisaBerat = + item?.total_weight && + salesOrder?.weight_per_convertion && + salesOrder?.total_peti + ? Number(item.total_weight) - + Number(salesOrder.weight_per_convertion) * + Number(salesOrder.total_peti) + : 0; + + const initialPricePerConvertion = + item?.total_price && + salesOrder?.total_peti && + Number(salesOrder.total_peti) !== 0 + ? (Number(item.total_price) - + initialSisaBerat * Number(item.unit_price || 0)) / + Number(salesOrder.total_peti) + : Number(item?.unit_price || 0); + return { id: salesOrder?.id, unit_price: item.unit_price, @@ -193,6 +212,9 @@ export const DeliveryProductToFieldValues = ( avg_weight: item.avg_weight, total_price: item.total_price, }, + total_peti: salesOrder?.total_peti, + weight_per_convertion: salesOrder?.weight_per_convertion, + price_per_convertion: initialPricePerConvertion, } as DeliveryOrderProductFormValues; }); diff --git a/src/components/pages/marketing/form/repeater/delivery-order/DeliverOrderProduct.tsx b/src/components/pages/marketing/form/repeater/delivery-order/DeliverOrderProduct.tsx index 781ebf26..6793018b 100644 --- a/src/components/pages/marketing/form/repeater/delivery-order/DeliverOrderProduct.tsx +++ b/src/components/pages/marketing/form/repeater/delivery-order/DeliverOrderProduct.tsx @@ -126,18 +126,14 @@ const DeliveryOrderProductForm = ({ Number(initialValues.total_peti) : 0; - // const initialPricePerConvertion = - // initialValues?.total_price && - // initialValues?.total_peti && - // Number(initialValues.total_peti) !== 0 - // ? (Number(initialValues.total_price) - - // initialSisaBerat * Number(initialValues.unit_price || 0)) / - // Number(initialValues.total_peti) - // : 0; - - const initialPricePerConvertion = initialValues?.unit_price - ? Number(initialValues?.unit_price) - : 0; + const initialPricePerConvertion = + initialValues?.total_price && + initialValues?.total_peti && + Number(initialValues.total_peti) !== 0 + ? (Number(initialValues.total_price) - + initialSisaBerat * Number(initialValues.unit_price || 0)) / + Number(initialValues.total_peti) + : Number(initialValues?.unit_price || 0); const initialPriceSisaBerat = initialValues?.total_price && initialValues?.total_peti @@ -728,7 +724,7 @@ const DeliveryOrderProductForm = ({ placeholder='Masukan Total Peti' endAdornment={
- Kg + Peti
} bottomLabel={`1 ${formik.values.convertion_unit?.value.toLowerCase()} = ${formik.values.weight_per_convertion ?? 0} Kg`} @@ -778,6 +774,9 @@ const DeliveryOrderProductForm = ({ } errorMessage={formik.errors.total_weight} placeholder='Masukan Total Bobot' + disabled={ + formik.values.convertion_unit?.value.toLowerCase() === 'peti' + } /> )} diff --git a/src/components/pages/marketing/form/repeater/sales-order/SalesOrderProductForm.tsx b/src/components/pages/marketing/form/repeater/sales-order/SalesOrderProductForm.tsx index a7f2c73e..5f0031f8 100644 --- a/src/components/pages/marketing/form/repeater/sales-order/SalesOrderProductForm.tsx +++ b/src/components/pages/marketing/form/repeater/sales-order/SalesOrderProductForm.tsx @@ -61,18 +61,14 @@ const SalesOrderProductForm = ({ Number(initialValues.total_peti) : 0; - // const initialPricePerConvertion = - // initialValues?.total_price && - // initialValues?.total_peti && - // Number(initialValues.total_peti) !== 0 - // ? (Number(initialValues.total_price) - - // initialSisaBerat * Number(initialValues.unit_price || 0)) / - // Number(initialValues.total_peti) - // : 0; - - const initialPricePerConvertion = initialValues?.unit_price - ? Number(initialValues?.unit_price) - : 0; + const initialPricePerConvertion = + initialValues?.total_price && + initialValues?.total_peti && + Number(initialValues.total_peti) !== 0 + ? (Number(initialValues.total_price) - + initialSisaBerat * Number(initialValues.unit_price || 0)) / + Number(initialValues.total_peti) + : Number(initialValues?.unit_price || 0); const isInitialTelurQty = initialValues?.marketing_type?.value?.toLowerCase() === 'telur' && @@ -624,7 +620,7 @@ const SalesOrderProductForm = ({ placeholder='Masukan Total Peti' endAdornment={
- Kg + Peti
} bottomLabel={`1 ${formik.values.convertion_unit?.value.toLowerCase()} = ${formik.values.weight_per_convertion ?? 0} Kg`} @@ -674,6 +670,9 @@ const SalesOrderProductForm = ({ } errorMessage={formik.errors.total_weight} placeholder='Masukan Total Bobot' + disabled={ + formik.values.convertion_unit?.value.toLowerCase() === 'peti' + } /> )} diff --git a/src/components/pages/marketing/form/table-view/DeliveryOrderProductTable.tsx b/src/components/pages/marketing/form/table-view/DeliveryOrderProductTable.tsx index 3f400ff2..9c7337ec 100644 --- a/src/components/pages/marketing/form/table-view/DeliveryOrderProductTable.tsx +++ b/src/components/pages/marketing/form/table-view/DeliveryOrderProductTable.tsx @@ -141,12 +141,15 @@ const DeliveryOrderProductTable = ({ Total Bobot - {formatNumber(Number(item.total_weight))} + {formatNumber(Number(item.total_weight))} Kg )} - Total Harga Satuan + + Total Harga Satuan + {item.convertion_unit?.label.toLowerCase() === 'peti' && ' (Kg)'} + {formatCurrency(parseFloat(item.unit_price as string))} diff --git a/src/components/pages/marketing/form/table-view/SalesOrderProductTable.tsx b/src/components/pages/marketing/form/table-view/SalesOrderProductTable.tsx index f40f9151..d8e906cf 100644 --- a/src/components/pages/marketing/form/table-view/SalesOrderProductTable.tsx +++ b/src/components/pages/marketing/form/table-view/SalesOrderProductTable.tsx @@ -137,8 +137,22 @@ const SalesOrderProductTable = ({ {`${formatNumber(parseFloat(item.qty as string))} ${item.uom || ''}`} + {item.convertion_unit?.value.toLowerCase() === 'peti' && ( + + Harga Satuan Per Peti + + {formatCurrency( + parseFloat(item.unit_price as string) * + parseFloat(String(item.weight_per_convertion)) + )} + + + )} - Harga Satuan + + Harga Satuan + {item.convertion_unit?.value.toLowerCase() === 'peti' && ' (Kg)'} + {formatCurrency(parseFloat(item.unit_price as string))} diff --git a/src/lib/marketing-calculation.ts b/src/lib/marketing-calculation.ts index 3d4930c5..e957d64f 100644 --- a/src/lib/marketing-calculation.ts +++ b/src/lib/marketing-calculation.ts @@ -235,10 +235,8 @@ export const calculateTelurPeti = ( const totalPrice = pricePerConvertion * totalPeti + priceSisaBerat; setFieldValue('total_price', totalPrice); // Recalculate unit_price = total_price / total_weight - - // TODO: consider sisa berat later const totalWeight = weightPerConvertion * totalPeti + sisaBerat; - updateUnitPrice(totalPrice, totalPeti); + updateUnitPrice(totalPrice, totalWeight); } break; } @@ -257,8 +255,8 @@ export const calculateTelurPeti = ( if (pricePerConvertion > 0 && totalPeti > 0) { const totalPrice = pricePerConvertion * totalPeti + priceSisaBerat; setFieldValue('total_price', totalPrice); - // Recalculate unit_price = total_price / total_peti - updateUnitPrice(totalPrice, totalPeti); + // Recalculate unit_price = total_price / totalWeight + updateUnitPrice(totalPrice, totalWeight); } break; } @@ -317,6 +315,15 @@ export const calculateTelurPeti = ( updateUnitPrice(totalPrice, totalWeight); break; } + case 'qty': + // Recalculate avg_weight = total_weight / qty + if (qty > 0 && values.total_weight) { + setFieldValue( + 'avg_weight', + preciseWeight(Number(values.total_weight) / qty) + ); + } + break; } };