refactor(FE-435,436): Add location_id to expense form and payload

This commit is contained in:
rstubryan
2025-12-30 18:38:59 +07:00
parent 7daca04cc1
commit 8f4f3d93b8
5 changed files with 24 additions and 2 deletions
@@ -11,6 +11,7 @@ type ExpenseFormSchemaType = {
value: number; value: number;
label: string; label: string;
}; };
location_id: number;
transaction_date?: string; transaction_date?: string;
kandangs?: { id: number; name: string }[]; kandangs?: { id: number; name: string }[];
supplier?: { supplier?: {
@@ -46,6 +47,8 @@ export const ExpenseRequestFormSchema: Yup.ObjectSchema<ExpenseFormSchemaType> =
label: Yup.string().required(), label: Yup.string().required(),
}).required('Lokasi wajib diisi!'), }).required('Lokasi wajib diisi!'),
location_id: Yup.number().min(1).required('Lokasi wajib diisi!'),
transaction_date: Yup.string().required('Tanggal transaksi wajib diisi!'), transaction_date: Yup.string().required('Tanggal transaksi wajib diisi!'),
kandangs: Yup.array() kandangs: Yup.array()
.of( .of(
@@ -128,6 +131,7 @@ export const getExpenseFormInitialValues = (
label: initialValues.location.name, label: initialValues.location.name,
} }
: undefined, : undefined,
location_id: Number(initialValues?.location.id || 0),
transaction_date: initialValues?.transaction_date transaction_date: initialValues?.transaction_date
? formatDate(initialValues.transaction_date, 'YYYY-MM-DD') ? formatDate(initialValues.transaction_date, 'YYYY-MM-DD')
: undefined, : undefined,
@@ -108,6 +108,7 @@ const ExpenseRequestForm = ({
const expensePayload: CreateExpensePayload = { const expensePayload: CreateExpensePayload = {
category: formik.values.category?.value as 'BOP' | 'NON-BOP', category: formik.values.category?.value as 'BOP' | 'NON-BOP',
location_id: values.location_id as number,
transaction_date: values?.transaction_date as string, transaction_date: values?.transaction_date as string,
supplier_id: values.supplier?.value as number, supplier_id: values.supplier?.value as number,
documents: values.documents as File[], documents: values.documents as File[],
@@ -130,6 +131,7 @@ const ExpenseRequestForm = ({
case 'edit': case 'edit':
const expenseUpdatePayload: UpdateExpensePayload = { const expenseUpdatePayload: UpdateExpensePayload = {
category: formik.values.category?.value as 'BOP' | 'NON-BOP', category: formik.values.category?.value as 'BOP' | 'NON-BOP',
location_id: values.location_id as number,
transaction_date: values?.transaction_date as string, transaction_date: values?.transaction_date as string,
supplier_id: values.supplier?.value as number, supplier_id: values.supplier?.value as number,
documents: values.documents as File[], documents: values.documents as File[],
@@ -179,6 +181,9 @@ const ExpenseRequestForm = ({
formik.setFieldTouched('location', true); formik.setFieldTouched('location', true);
formik.setFieldValue('location', val); formik.setFieldValue('location', val);
const locationId = Array.isArray(val) ? val[0]?.value : val?.value;
formik.setFieldValue('location_id', locationId);
formik.setFieldValue('kandangs', []); formik.setFieldValue('kandangs', []);
formik.setFieldValue('expense_nonstocks', []); formik.setFieldValue('expense_nonstocks', []);
}; };
@@ -454,7 +459,9 @@ const ExpenseRequestForm = ({
)} )}
<ExpenseRequestKandangDetailExpense <ExpenseRequestKandangDetailExpense
type={type}
formik={formik} formik={formik}
supplierId={formik.values.supplier?.value as number}
className={{ className={{
wrapper: 'col-span-12', wrapper: 'col-span-12',
}} }}
@@ -21,6 +21,7 @@ import { removeArrayItemAndSync } from '@/lib/utils/formik';
interface ExpenseRequestKandangDetailExpenseProps { interface ExpenseRequestKandangDetailExpenseProps {
type?: 'add' | 'edit' | 'detail'; type?: 'add' | 'edit' | 'detail';
formik: FormikContextType<ExpenseRequestFormValues>; formik: FormikContextType<ExpenseRequestFormValues>;
supplierId?: number;
className?: { className?: {
wrapper?: string; wrapper?: string;
}; };
@@ -28,12 +29,18 @@ interface ExpenseRequestKandangDetailExpenseProps {
const ExpenseRequestKandangDetailExpense: React.FC< const ExpenseRequestKandangDetailExpense: React.FC<
ExpenseRequestKandangDetailExpenseProps ExpenseRequestKandangDetailExpenseProps
> = ({ type, formik, className }) => { > = ({ type, formik, supplierId, className }) => {
const { const {
setInputValue: setNonstockInputValue, setInputValue: setNonstockInputValue,
options: nonstockOptions, options: nonstockOptions,
isLoadingOptions: isLoadingNonstockOptions, isLoadingOptions: isLoadingNonstockOptions,
} = useSelect<Nonstock>(NonstockApi.basePath, 'id', 'name'); } = useSelect<Nonstock>(
NonstockApi.basePath,
'id',
'name',
'search',
supplierId ? { supplier_id: String(supplierId) } : undefined
);
const nonstockChangeHandler = ( const nonstockChangeHandler = (
kandangExpenseIdx: number, kandangExpenseIdx: number,
+2
View File
@@ -483,6 +483,7 @@ export class ExpenseApiService extends BaseApiService<
const formData = new FormData(); const formData = new FormData();
formData.append('category', payload.category); formData.append('category', payload.category);
formData.append('location_id', String(payload.location_id));
formData.append('transaction_date', payload.transaction_date); formData.append('transaction_date', payload.transaction_date);
formData.append('supplier_id', String(payload.supplier_id)); formData.append('supplier_id', String(payload.supplier_id));
@@ -505,6 +506,7 @@ export class ExpenseApiService extends BaseApiService<
const formData = new FormData(); const formData = new FormData();
formData.append('category', payload.category); formData.append('category', payload.category);
formData.append('location_id', String(payload.location_id));
formData.append('transaction_date', payload.transaction_date); formData.append('transaction_date', payload.transaction_date);
formData.append('supplier_id', String(payload.supplier_id)); formData.append('supplier_id', String(payload.supplier_id));
+2
View File
@@ -57,6 +57,7 @@ export type Expense = BaseMetadata & BaseExpense;
export type CreateExpensePayload = { export type CreateExpensePayload = {
category: 'BOP' | 'NON-BOP'; category: 'BOP' | 'NON-BOP';
location_id: number;
transaction_date: string; transaction_date: string;
supplier_id: number; supplier_id: number;
documents: File[]; documents: File[];
@@ -72,6 +73,7 @@ export type CreateExpensePayload = {
}; };
export type UpdateExpensePayload = { export type UpdateExpensePayload = {
location_id: number;
category: 'BOP' | 'NON-BOP'; category: 'BOP' | 'NON-BOP';
transaction_date: string; transaction_date: string;
supplier_id: number; supplier_id: number;