mirror of
https://gitlab.com/mbugroup/lti-web-client.git
synced 2026-05-20 13:32:00 +00:00
feat: adjust penjualan calculation and delivery order logic
This commit is contained in:
@@ -208,7 +208,7 @@ const SalesOrderFormModal = ({
|
||||
convertion_unit: normalizedConvertionUnit,
|
||||
weight_per_convertion:
|
||||
product.weight_per_convertion ?? undefined,
|
||||
week: product.week?.value ?? undefined,
|
||||
week: product.week ?? undefined,
|
||||
} as CreateSalesOrderProductPayload;
|
||||
}),
|
||||
} as CreateSalesOrderPayload)
|
||||
|
||||
@@ -128,12 +128,7 @@ export const SalesProductToFieldValues = (
|
||||
label: formatTitleCase(product.convertion_unit),
|
||||
}
|
||||
: null,
|
||||
week: product.week
|
||||
? {
|
||||
value: product.week,
|
||||
label: `Week ${product.week}`,
|
||||
}
|
||||
: null,
|
||||
week: product.week ?? null,
|
||||
total_peti: product.total_peti,
|
||||
weight_per_convertion: product.weight_per_convertion,
|
||||
uom: product.product_warehouse.product.uom.name,
|
||||
|
||||
+7
-21
@@ -30,13 +30,7 @@ type DeliveryOrderProductSchemaType = {
|
||||
/** Harga per butir telur untuk TELUR + QTY */
|
||||
price_per_qty?: number | null | undefined;
|
||||
/** Week untuk ayam pullet */
|
||||
week?:
|
||||
| {
|
||||
value?: number;
|
||||
label?: string;
|
||||
}
|
||||
| null
|
||||
| undefined;
|
||||
week?: number | null | undefined;
|
||||
};
|
||||
|
||||
export const DeliveryOrderProductSchema: Yup.ObjectSchema<DeliveryOrderProductSchemaType> =
|
||||
@@ -79,26 +73,18 @@ export const DeliveryOrderProductSchema: Yup.ObjectSchema<DeliveryOrderProductSc
|
||||
sisa_berat: Yup.number().nullable().optional().notRequired(),
|
||||
price_sisa_berat: Yup.number().nullable().optional().notRequired(),
|
||||
price_per_qty: Yup.number().nullable().optional().notRequired(),
|
||||
week: Yup.object({
|
||||
value: Yup.number(),
|
||||
label: Yup.string(),
|
||||
})
|
||||
week: Yup.number()
|
||||
.nullable()
|
||||
.default(null)
|
||||
.optional()
|
||||
.notRequired()
|
||||
.when('marketing_type', {
|
||||
is: (marketingType: { value: string } | null | undefined) =>
|
||||
marketingType?.value?.toLowerCase() === 'ayam_pullet',
|
||||
then: (schema) =>
|
||||
schema
|
||||
.shape({
|
||||
value: Yup.number().required(
|
||||
'Week wajib diisi untuk Ayam Pullet!'
|
||||
),
|
||||
label: Yup.string().required(
|
||||
'Week wajib diisi untuk Ayam Pullet!'
|
||||
),
|
||||
})
|
||||
.required('Week wajib diisi untuk Ayam Pullet!'),
|
||||
.min(1, 'Week wajib diisi untuk Ayam Pullet!')
|
||||
.required('Week wajib diisi untuk Ayam Pullet!')
|
||||
.typeError('Week harus berupa angka!'),
|
||||
otherwise: (schema) => schema.optional().notRequired(),
|
||||
}),
|
||||
});
|
||||
|
||||
+11
-10
@@ -511,19 +511,20 @@ const DeliveryOrderProductForm = ({
|
||||
{/* Konversi Satuan Week Pullet */}
|
||||
{formik.values.marketing_type?.value.toLowerCase() ===
|
||||
'ayam_pullet' && (
|
||||
<SelectInputRadio
|
||||
<NumberInput
|
||||
required
|
||||
label='Minggu'
|
||||
options={optionsWeek}
|
||||
value={
|
||||
formik.values.week?.value
|
||||
? (formik.values.week as { value: number; label: string })
|
||||
: null
|
||||
}
|
||||
onChange={(val) => {
|
||||
formik.setFieldValue('week', val);
|
||||
name='week'
|
||||
value={formik.values.week ?? undefined}
|
||||
onChange={(e) => {
|
||||
formik.setFieldValue('week', Number(e.target.value));
|
||||
setCurrentInput(e.target.name);
|
||||
}}
|
||||
placeholder='Pilih Week'
|
||||
onBlur={() => handleBlurField('week')}
|
||||
isError={formik.touched.week && Boolean(formik.errors.week)}
|
||||
errorMessage={formik.errors.week as string}
|
||||
placeholder='Masukan Minggu'
|
||||
decimalScale={0}
|
||||
/>
|
||||
)}
|
||||
|
||||
|
||||
+7
-21
@@ -37,13 +37,7 @@ type SalesOrderProductSchemaType = {
|
||||
/** Harga per butir telur untuk TELUR + QTY */
|
||||
price_per_qty?: number | null | undefined;
|
||||
/** Week untuk ayam pullet */
|
||||
week?:
|
||||
| {
|
||||
value?: number;
|
||||
label?: string;
|
||||
}
|
||||
| null
|
||||
| undefined;
|
||||
week?: number | null | undefined;
|
||||
};
|
||||
|
||||
export const SalesOrderProductSchema: Yup.ObjectSchema<SalesOrderProductSchemaType> =
|
||||
@@ -102,26 +96,18 @@ export const SalesOrderProductSchema: Yup.ObjectSchema<SalesOrderProductSchemaTy
|
||||
sisa_berat: Yup.number().nullable().optional().notRequired(),
|
||||
price_sisa_berat: Yup.number().nullable().optional().notRequired(),
|
||||
price_per_qty: Yup.number().nullable().optional().notRequired(),
|
||||
week: Yup.object({
|
||||
value: Yup.number(),
|
||||
label: Yup.string(),
|
||||
})
|
||||
week: Yup.number()
|
||||
.nullable()
|
||||
.default(null)
|
||||
.optional()
|
||||
.notRequired()
|
||||
.when('marketing_type', {
|
||||
is: (marketingType: { value: string } | null | undefined) =>
|
||||
marketingType?.value?.toLowerCase() === 'ayam_pullet',
|
||||
then: (schema) =>
|
||||
schema
|
||||
.shape({
|
||||
value: Yup.number().required(
|
||||
'Week wajib diisi untuk Ayam Pullet!'
|
||||
),
|
||||
label: Yup.string().required(
|
||||
'Week wajib diisi untuk Ayam Pullet!'
|
||||
),
|
||||
})
|
||||
.required('Week wajib diisi untuk Ayam Pullet!'),
|
||||
.min(1, 'Week wajib diisi untuk Ayam Pullet!')
|
||||
.required('Week wajib diisi untuk Ayam Pullet!')
|
||||
.typeError('Week harus berupa angka!'),
|
||||
otherwise: (schema) => schema.optional().notRequired(),
|
||||
}),
|
||||
});
|
||||
|
||||
+11
-10
@@ -467,19 +467,20 @@ const SalesOrderProductForm = ({
|
||||
{/* Konversi Satuan Week Pullet */}
|
||||
{formik.values.marketing_type?.value.toLowerCase() ===
|
||||
'ayam_pullet' && (
|
||||
<SelectInputRadio
|
||||
<NumberInput
|
||||
required
|
||||
label='Minggu'
|
||||
options={optionsWeek}
|
||||
value={
|
||||
formik.values.week?.value
|
||||
? (formik.values.week as { value: number; label: string })
|
||||
: null
|
||||
}
|
||||
onChange={(val) => {
|
||||
formik.setFieldValue('week', val);
|
||||
name='week'
|
||||
value={formik.values.week ?? undefined}
|
||||
onChange={(e) => {
|
||||
formik.setFieldValue('week', Number(e.target.value));
|
||||
setCurrentInput(e.target.name);
|
||||
}}
|
||||
placeholder='Pilih Week'
|
||||
onBlur={() => handleBlurField('week')}
|
||||
isError={formik.touched.week && Boolean(formik.errors.week)}
|
||||
errorMessage={formik.errors.week as string}
|
||||
placeholder='Masukan Minggu'
|
||||
decimalScale={0}
|
||||
/>
|
||||
)}
|
||||
|
||||
|
||||
@@ -234,7 +234,7 @@ const SalesOrderProductTable = ({
|
||||
'ayam_pullet' && (
|
||||
<tr>
|
||||
<td className='text-sm px-4 py-3'>Tipe Konversi</td>
|
||||
<td className='text-sm px-4 py-3'>{item.week?.label}</td>
|
||||
<td className='text-sm px-4 py-3'>Week {item.week}</td>
|
||||
</tr>
|
||||
)}
|
||||
{item.convertion_unit?.value.toLowerCase() === 'peti' && (
|
||||
|
||||
@@ -15,7 +15,7 @@ export type MarketingFormValues = {
|
||||
total_price?: string | number;
|
||||
marketing_type?: { value: string; label: string } | null;
|
||||
convertion_unit?: { value: string; label: string } | null;
|
||||
week?: { value?: number; label?: string } | null;
|
||||
week?: number | null;
|
||||
weight_per_convertion?: number | null;
|
||||
price_per_convertion?: number | null;
|
||||
total_peti?: number | null;
|
||||
@@ -100,7 +100,7 @@ export const calculateAyamPullet = (
|
||||
): void => {
|
||||
const { values, setFieldValue } = ctx;
|
||||
const unitPrice = Number(values.unit_price || 0);
|
||||
const week = Number(values.week?.value || 0);
|
||||
const week = Number(values.week || 0);
|
||||
const qty = Number(values.qty || 0);
|
||||
const avgWeight = Number(values.avg_weight || 0);
|
||||
const totalWeight = Number(values.total_weight || 0);
|
||||
|
||||
Reference in New Issue
Block a user