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;
}
};