refactor(FE-208): rename PurchaseRequisitions to PurchaseRequest and update related API references

This commit is contained in:
rstubryan
2025-11-17 09:21:18 +07:00
parent 64605b168e
commit c951f09667
12 changed files with 118 additions and 135 deletions
+4 -4
View File
@@ -1,11 +1,11 @@
import PurchaseRequisitionsForm from '@/components/pages/purchase/form/request/PurchaseRequisitionsForm'; import PurchaseRequestForm from '@/components/pages/purchase/form/request/PurchaseRequisitionsForm';
const AddPurchaseRequisitions = () => { const AddPurchaseRequest = () => {
return ( return (
<div className='w-full p-4 flex flex-row justify-center'> <div className='w-full p-4 flex flex-row justify-center'>
<PurchaseRequisitionsForm /> <PurchaseRequestForm />
</div> </div>
); );
}; };
export default AddPurchaseRequisitions; export default AddPurchaseRequest;
+4 -4
View File
@@ -2,8 +2,8 @@
import { useRouter, useSearchParams } from 'next/navigation'; import { useRouter, useSearchParams } from 'next/navigation';
import useSWR from 'swr'; import useSWR from 'swr';
import PurchaseRequisitionsForm from '@/components/pages/purchase/form/request/PurchaseRequisitionsForm'; import PurchaseRequestForm from '@/components/pages/purchase/form/request/PurchaseRequisitionsForm';
import { PurchaseRequisitionsApi } from '@/services/api/purchase'; import { PurchaseRequestApi } from '@/services/api/purchase';
import { isResponseSuccess, isResponseError } from '@/lib/api-helper'; import { isResponseSuccess, isResponseError } from '@/lib/api-helper';
const PurchaseEdit = () => { const PurchaseEdit = () => {
@@ -14,7 +14,7 @@ const PurchaseEdit = () => {
const { data: purchase, isLoading: isLoadingPurchase } = useSWR( const { data: purchase, isLoading: isLoadingPurchase } = useSWR(
purchaseId, purchaseId,
(id: number) => PurchaseRequisitionsApi.getSingle(id) (id: number) => PurchaseRequestApi.getSingle(id)
); );
if (!purchaseId) { if (!purchaseId) {
@@ -38,7 +38,7 @@ const PurchaseEdit = () => {
<span className='loading loading-spinner loading-xl' /> <span className='loading loading-spinner loading-xl' />
)} )}
{!isLoadingPurchase && isResponseSuccess(purchase) && ( {!isLoadingPurchase && isResponseSuccess(purchase) && (
<PurchaseRequisitionsForm type='edit' initialValues={purchase.data} /> <PurchaseRequestForm type='edit' initialValues={purchase.data} />
)} )}
</div> </div>
); );
+4 -4
View File
@@ -2,8 +2,8 @@
import { useRouter, useSearchParams } from 'next/navigation'; import { useRouter, useSearchParams } from 'next/navigation';
import useSWR from 'swr'; import useSWR from 'swr';
import PurchaseRequisitionsForm from '@/components/pages/purchase/form/request/PurchaseRequisitionsForm'; import PurchaseRequestForm from '@/components/pages/purchase/form/request/PurchaseRequisitionsForm';
import { PurchaseRequisitionsApi } from '@/services/api/purchase'; import { PurchaseRequestApi } from '@/services/api/purchase';
import { isResponseSuccess, isResponseError } from '@/lib/api-helper'; import { isResponseSuccess, isResponseError } from '@/lib/api-helper';
const PurchaseDetail = () => { const PurchaseDetail = () => {
@@ -14,7 +14,7 @@ const PurchaseDetail = () => {
const { data: purchase, isLoading: isLoadingPurchase } = useSWR( const { data: purchase, isLoading: isLoadingPurchase } = useSWR(
purchaseId, purchaseId,
(id: number) => PurchaseRequisitionsApi.getSingle(id) (id: number) => PurchaseRequestApi.getSingle(id)
); );
if (!purchaseId) { if (!purchaseId) {
@@ -38,7 +38,7 @@ const PurchaseDetail = () => {
<span className='loading loading-spinner loading-xl' /> <span className='loading loading-spinner loading-xl' />
)} )}
{!isLoadingPurchase && isResponseSuccess(purchase) && ( {!isLoadingPurchase && isResponseSuccess(purchase) && (
<PurchaseRequisitionsForm type='detail' initialValues={purchase.data} /> <PurchaseRequestForm type='detail' initialValues={purchase.data} />
)} )}
</div> </div>
); );
@@ -26,7 +26,7 @@ import { isResponseSuccess } from '@/lib/api-helper';
import { useTableFilter } from '@/services/hooks/useTableFilter'; import { useTableFilter } from '@/services/hooks/useTableFilter';
import { ROWS_OPTIONS } from '@/config/constant'; import { ROWS_OPTIONS } from '@/config/constant';
import { Purchase } from '@/types/api/purchase/purchase'; import { Purchase } from '@/types/api/purchase/purchase';
import { PurchaseRequisitionsApi } from '@/services/api/purchase'; import { PurchaseRequestApi } from '@/services/api/purchase';
const RowOptionsMenu = ({ const RowOptionsMenu = ({
type = 'dropdown', type = 'dropdown',
@@ -103,8 +103,8 @@ const PurchaseTable = () => {
isLoading, isLoading,
mutate: refreshPurchaseRequests, mutate: refreshPurchaseRequests,
} = useSWR( } = useSWR(
`${PurchaseRequisitionsApi.basePath}${getTableFilterQueryString()}`, `${PurchaseRequestApi.basePath}${getTableFilterQueryString()}`,
PurchaseRequisitionsApi.getAllFetcher PurchaseRequestApi.getAllFetcher
); );
// Modal hooks // Modal hooks
@@ -237,7 +237,7 @@ const PurchaseTable = () => {
setIsDeleteLoading(true); setIsDeleteLoading(true);
try { try {
await PurchaseRequisitionsApi.delete(selectedPurchase?.id as number); await PurchaseRequestApi.delete(selectedPurchase?.id as number);
refreshPurchaseRequests(); refreshPurchaseRequests();
deleteModal.closeModal(); deleteModal.closeModal();
toast.success('Berhasil menghapus data permintaan pembelian!'); toast.success('Berhasil menghapus data permintaan pembelian!');
@@ -283,7 +283,6 @@ const PurchaseTable = () => {
Tambah Tambah
</Button> </Button>
{selectedRowIds.length > 0 && ( {selectedRowIds.length > 0 && (
<Button <Button
variant='outline' variant='outline'
@@ -11,14 +11,14 @@ import NumberInput from '@/components/input/NumberInput';
import SelectInput, { OptionType } from '@/components/input/SelectInput'; import SelectInput, { OptionType } from '@/components/input/SelectInput';
import { import {
PurchaseRequisitionsAcceptApprovalFormDefaultValues, PurchaseRequestAcceptApprovalFormDefaultValues,
PurchaseRequisitionsAcceptApprovalFormInitialValues, PurchaseRequestAcceptApprovalFormInitialValues,
PurchaseRequisitionsAcceptApprovalFormSchema, PurchaseRequestAcceptApprovalFormSchema,
} from './PurchaseOrderForm.schema'; } from './PurchaseOrderForm.schema';
import { isResponseError } from '@/lib/api-helper'; import { isResponseError } from '@/lib/api-helper';
import { AcceptApprovalApi } from '@/services/api/purchase'; import { AcceptApprovalApi } from '@/services/api/purchase';
import { import {
CreateAcceptApprovalRequisitionsPayload, CreateAcceptApprovalRequestPayload,
Purchase, Purchase,
} from '@/types/api/purchase/purchase'; } from '@/types/api/purchase/purchase';
import DateInput from '@/components/input/DateInput'; import DateInput from '@/components/input/DateInput';
@@ -101,7 +101,7 @@ const PurchaseOrderAcceptApprovalForm = ({
// ===== SUBMISSION HANDLERS ===== // ===== SUBMISSION HANDLERS =====
const createAcceptApprovalHandler = useCallback( const createAcceptApprovalHandler = useCallback(
async (payload: CreateAcceptApprovalRequisitionsPayload) => { async (payload: CreateAcceptApprovalRequestPayload) => {
const purchaseRequisitionId = searchParams.get('purchaseId') const purchaseRequisitionId = searchParams.get('purchaseId')
? parseInt(searchParams.get('purchaseId')!) ? parseInt(searchParams.get('purchaseId')!)
: initialValues?.id || 1; : initialValues?.id || 1;
@@ -127,10 +127,7 @@ const PurchaseOrderAcceptApprovalForm = ({
); );
const updateAcceptApprovalHandler = useCallback( const updateAcceptApprovalHandler = useCallback(
async ( async (purchaseId: number, payload: CreateAcceptApprovalRequestPayload) => {
purchaseId: number,
payload: CreateAcceptApprovalRequisitionsPayload
) => {
const res = await AcceptApprovalApi.acceptApproval(purchaseId, payload); const res = await AcceptApprovalApi.acceptApproval(purchaseId, payload);
if (isResponseError(res)) { if (isResponseError(res)) {
setPurchaseOrderFormErrorMessage(res.message); setPurchaseOrderFormErrorMessage(res.message);
@@ -146,17 +143,17 @@ const PurchaseOrderAcceptApprovalForm = ({
// ===== FORM CONFIGURATION ===== // ===== FORM CONFIGURATION =====
const formikInitialValues = useMemo(() => { const formikInitialValues = useMemo(() => {
return initialValues return initialValues
? PurchaseRequisitionsAcceptApprovalFormDefaultValues(initialValues) ? PurchaseRequestAcceptApprovalFormDefaultValues(initialValues)
: PurchaseRequisitionsAcceptApprovalFormInitialValues; : PurchaseRequestAcceptApprovalFormInitialValues;
}, [initialValues]); }, [initialValues]);
const formik = useFormik({ const formik = useFormik({
initialValues: formikInitialValues, initialValues: formikInitialValues,
validationSchema: PurchaseRequisitionsAcceptApprovalFormSchema, validationSchema: PurchaseRequestAcceptApprovalFormSchema,
validateOnChange: true, validateOnChange: true,
validateOnBlur: true, validateOnBlur: true,
onSubmit: async (values) => { onSubmit: async (values) => {
const payload: CreateAcceptApprovalRequisitionsPayload = { const payload: CreateAcceptApprovalRequestPayload = {
notes: values.notes || '', notes: values.notes || '',
items: (values.items || []).map((item) => ({ items: (values.items || []).map((item) => ({
purchase_item_id: purchase_item_id:
@@ -1,7 +1,7 @@
import * as Yup from 'yup'; import * as Yup from 'yup';
import { Purchase } from '@/types/api/purchase/purchase'; import { Purchase } from '@/types/api/purchase/purchase';
type PurchaseRequisitionsStaffApprovalFormSchemaType = { type PurchaseRequestStaffApprovalFormSchemaType = {
notes: string | null; notes: string | null;
items: { items: {
purchase_item?: { purchase_item?: {
@@ -14,11 +14,11 @@ type PurchaseRequisitionsStaffApprovalFormSchemaType = {
}[]; }[];
}; };
type PurchaseRequisitionsManagerApprovalFormSchemaType = { type PurchaseRequestManagerApprovalFormSchemaType = {
notes: string | null; notes: string | null;
}; };
type PurchaseRequisitionsAcceptApprovalFormSchemaType = { type PurchaseRequestAcceptApprovalFormSchemaType = {
notes: string | null; notes: string | null;
items: { items: {
purchase_item?: { purchase_item?: {
@@ -128,7 +128,7 @@ const PurchaseStaffApprovalItemObjectSchema: Yup.ObjectSchema<PurchaseStaffAppro
), ),
}); });
const PurchaseManagerApprovalObjectSchema: Yup.ObjectSchema<PurchaseRequisitionsManagerApprovalFormSchemaType> = const PurchaseManagerApprovalObjectSchema: Yup.ObjectSchema<PurchaseRequestManagerApprovalFormSchemaType> =
Yup.object({ Yup.object({
notes: Yup.string().nullable().default(null), notes: Yup.string().nullable().default(null),
}); });
@@ -239,7 +239,7 @@ const PurchaseAcceptApprovalItemObjectSchema: Yup.ObjectSchema<PurchaseAcceptApp
.typeError('Total biaya transport harus berupa angka!'), .typeError('Total biaya transport harus berupa angka!'),
}); });
export const PurchaseRequisitionsStaffApprovalFormSchema: Yup.ObjectSchema<PurchaseRequisitionsStaffApprovalFormSchemaType> = export const PurchaseRequestStaffApprovalFormSchema: Yup.ObjectSchema<PurchaseRequestStaffApprovalFormSchemaType> =
Yup.object({ Yup.object({
notes: Yup.string().nullable().default(null), notes: Yup.string().nullable().default(null),
items: Yup.array() items: Yup.array()
@@ -249,7 +249,7 @@ export const PurchaseRequisitionsStaffApprovalFormSchema: Yup.ObjectSchema<Purch
.typeError('Item pembelian wajib diisi!'), .typeError('Item pembelian wajib diisi!'),
}); });
export const PurchaseRequisitionsStaffApprovalFormInitialValues: PurchaseRequisitionsStaffApprovalFormSchemaType = export const PurchaseRequestStaffApprovalFormInitialValues: PurchaseRequestStaffApprovalFormSchemaType =
{ {
notes: '', notes: '',
items: [ items: [
@@ -261,9 +261,9 @@ export const PurchaseRequisitionsStaffApprovalFormInitialValues: PurchaseRequisi
], ],
}; };
export const PurchaseRequisitionsStaffApprovalFormDefaultValues = ( export const PurchaseRequestStaffApprovalFormDefaultValues = (
purchase?: Purchase purchase?: Purchase
): PurchaseRequisitionsStaffApprovalFormSchemaType => { ): PurchaseRequestStaffApprovalFormSchemaType => {
return { return {
notes: purchase?.notes ?? null, notes: purchase?.notes ?? null,
items: purchase?.items items: purchase?.items
@@ -282,26 +282,26 @@ export const PurchaseRequisitionsStaffApprovalFormDefaultValues = (
}; };
}; };
export type PurchaseRequisitionsStaffApprovalFormValues = Yup.InferType< export type PurchaseRequestStaffApprovalFormValues = Yup.InferType<
typeof PurchaseRequisitionsStaffApprovalFormSchema typeof PurchaseRequestStaffApprovalFormSchema
>; >;
export const PurchaseRequisitionsManagerApprovalFormSchema: Yup.ObjectSchema<PurchaseRequisitionsManagerApprovalFormSchemaType> = export const PurchaseRequestManagerApprovalFormSchema: Yup.ObjectSchema<PurchaseRequestManagerApprovalFormSchemaType> =
PurchaseManagerApprovalObjectSchema; PurchaseManagerApprovalObjectSchema;
export const PurchaseRequisitionsManagerApprovalFormDefaultValues = ( export const PurchaseRequestManagerApprovalFormDefaultValues = (
purchase?: Purchase purchase?: Purchase
): PurchaseRequisitionsManagerApprovalFormSchemaType => { ): PurchaseRequestManagerApprovalFormSchemaType => {
return { return {
notes: purchase?.notes ?? null, notes: purchase?.notes ?? null,
}; };
}; };
export type PurchaseRequisitionsManagerApprovalFormValues = Yup.InferType< export type PurchaseRequestManagerApprovalFormValues = Yup.InferType<
typeof PurchaseRequisitionsManagerApprovalFormSchema typeof PurchaseRequestManagerApprovalFormSchema
>; >;
export const PurchaseRequisitionsAcceptApprovalFormSchema: Yup.ObjectSchema<PurchaseRequisitionsAcceptApprovalFormSchemaType> = export const PurchaseRequestAcceptApprovalFormSchema: Yup.ObjectSchema<PurchaseRequestAcceptApprovalFormSchemaType> =
Yup.object({ Yup.object({
notes: Yup.string().nullable().default(null), notes: Yup.string().nullable().default(null),
items: Yup.array() items: Yup.array()
@@ -311,7 +311,7 @@ export const PurchaseRequisitionsAcceptApprovalFormSchema: Yup.ObjectSchema<Purc
.typeError('Item pembelian wajib diisi!'), .typeError('Item pembelian wajib diisi!'),
}); });
export const PurchaseRequisitionsAcceptApprovalFormInitialValues: PurchaseRequisitionsAcceptApprovalFormSchemaType = export const PurchaseRequestAcceptApprovalFormInitialValues: PurchaseRequestAcceptApprovalFormSchemaType =
{ {
notes: '', notes: '',
items: [ items: [
@@ -330,9 +330,9 @@ export const PurchaseRequisitionsAcceptApprovalFormInitialValues: PurchaseRequis
], ],
}; };
export const PurchaseRequisitionsAcceptApprovalFormDefaultValues = ( export const PurchaseRequestAcceptApprovalFormDefaultValues = (
purchase?: Purchase purchase?: Purchase
): PurchaseRequisitionsAcceptApprovalFormSchemaType => { ): PurchaseRequestAcceptApprovalFormSchemaType => {
return { return {
notes: purchase?.notes ?? null, notes: purchase?.notes ?? null,
items: purchase?.items items: purchase?.items
@@ -365,6 +365,6 @@ export const PurchaseRequisitionsAcceptApprovalFormDefaultValues = (
}; };
}; };
export type PurchaseRequisitionsAcceptApprovalFormValues = Yup.InferType< export type PurchaseRequestAcceptApprovalFormValues = Yup.InferType<
typeof PurchaseRequisitionsAcceptApprovalFormSchema typeof PurchaseRequestAcceptApprovalFormSchema
>; >;
@@ -11,14 +11,14 @@ import NumberInput from '@/components/input/NumberInput';
import SelectInput, { OptionType } from '@/components/input/SelectInput'; import SelectInput, { OptionType } from '@/components/input/SelectInput';
import { import {
PurchaseRequisitionsStaffApprovalFormDefaultValues, PurchaseRequestStaffApprovalFormDefaultValues,
PurchaseRequisitionsStaffApprovalFormInitialValues, PurchaseRequestStaffApprovalFormInitialValues,
PurchaseRequisitionsStaffApprovalFormSchema, PurchaseRequestStaffApprovalFormSchema,
} from './PurchaseOrderForm.schema'; } from './PurchaseOrderForm.schema';
import { isResponseError } from '@/lib/api-helper'; import { isResponseError } from '@/lib/api-helper';
import { StaffApprovalApi } from '@/services/api/purchase'; import { StaffApprovalApi } from '@/services/api/purchase';
import { import {
CreateStaffApprovalRequisitionsPayload, CreateStaffApprovalRequestPayload,
Purchase, Purchase,
} from '@/types/api/purchase/purchase'; } from '@/types/api/purchase/purchase';
@@ -78,7 +78,7 @@ const PurchaseOrderStaffApprovalForm = ({
// ===== SUBMISSION HANDLERS ===== // ===== SUBMISSION HANDLERS =====
const createStaffApprovalHandler = useCallback( const createStaffApprovalHandler = useCallback(
async (payload: CreateStaffApprovalRequisitionsPayload) => { async (payload: CreateStaffApprovalRequestPayload) => {
const purchaseRequisitionId = searchParams.get('purchaseId') const purchaseRequisitionId = searchParams.get('purchaseId')
? parseInt(searchParams.get('purchaseId')!) ? parseInt(searchParams.get('purchaseId')!)
: initialValues?.id || 1; : initialValues?.id || 1;
@@ -104,10 +104,7 @@ const PurchaseOrderStaffApprovalForm = ({
); );
const updateStaffApprovalHandler = useCallback( const updateStaffApprovalHandler = useCallback(
async ( async (purchaseId: number, payload: CreateStaffApprovalRequestPayload) => {
purchaseId: number,
payload: CreateStaffApprovalRequisitionsPayload
) => {
const res = await StaffApprovalApi.createStaffApproval( const res = await StaffApprovalApi.createStaffApproval(
purchaseId, purchaseId,
payload payload
@@ -126,17 +123,17 @@ const PurchaseOrderStaffApprovalForm = ({
// ===== FORM CONFIGURATION ===== // ===== FORM CONFIGURATION =====
const formikInitialValues = useMemo(() => { const formikInitialValues = useMemo(() => {
return initialValues return initialValues
? PurchaseRequisitionsStaffApprovalFormDefaultValues(initialValues) ? PurchaseRequestStaffApprovalFormDefaultValues(initialValues)
: PurchaseRequisitionsStaffApprovalFormInitialValues; : PurchaseRequestStaffApprovalFormInitialValues;
}, [initialValues]); }, [initialValues]);
const formik = useFormik({ const formik = useFormik({
initialValues: formikInitialValues, initialValues: formikInitialValues,
validationSchema: PurchaseRequisitionsStaffApprovalFormSchema, validationSchema: PurchaseRequestStaffApprovalFormSchema,
validateOnChange: true, validateOnChange: true,
validateOnBlur: true, validateOnBlur: true,
onSubmit: async (values) => { onSubmit: async (values) => {
const payload: CreateStaffApprovalRequisitionsPayload = { const payload: CreateStaffApprovalRequestPayload = {
notes: values.notes || '', notes: values.notes || '',
items: (values.items || []).map((item) => ({ items: (values.items || []).map((item) => ({
purchase_item_id: purchase_item_id:
@@ -1,7 +1,7 @@
import * as Yup from 'yup'; import * as Yup from 'yup';
import { Purchase } from '@/types/api/purchase/purchase'; import { Purchase } from '@/types/api/purchase/purchase';
type PurchaseRequisitionsFormSchemaType = { type PurchaseRequestFormSchemaType = {
supplier?: { supplier?: {
value: number; value: number;
label: string; label: string;
@@ -85,7 +85,7 @@ const PurchaseItemObjectSchema: Yup.ObjectSchema<PurchaseItemSchema> =
), ),
}); });
export const PurchaseRequisitionsFormSchema: Yup.ObjectSchema<PurchaseRequisitionsFormSchemaType> = export const PurchaseRequestFormSchema: Yup.ObjectSchema<PurchaseRequestFormSchemaType> =
Yup.object({ Yup.object({
supplier: Yup.object({ supplier: Yup.object({
value: Yup.number().min(1).required(), value: Yup.number().min(1).required(),
@@ -127,16 +127,15 @@ export const PurchaseRequisitionsFormSchema: Yup.ObjectSchema<PurchaseRequisitio
.typeError('Item pembelian wajib diisi!'), .typeError('Item pembelian wajib diisi!'),
}); });
export const UpdatePurchaseRequisitionsFormSchema = export const UpdatePurchaseRequestFormSchema = PurchaseRequestFormSchema;
PurchaseRequisitionsFormSchema;
export type PurchaseRequisitionsFormValues = Yup.InferType< export type PurchaseRequestFormValues = Yup.InferType<
typeof PurchaseRequisitionsFormSchema typeof PurchaseRequestFormSchema
>; >;
export const getPurchaseRequisitionsFormInitialValues = ( export const getPurchaseRequestFormInitialValues = (
initialValues?: Purchase initialValues?: Purchase
): PurchaseRequisitionsFormValues => ({ ): PurchaseRequestFormValues => ({
supplier: initialValues?.supplier supplier: initialValues?.supplier
? { ? {
value: initialValues.supplier.id, value: initialValues.supplier.id,
@@ -18,10 +18,10 @@ import ConfirmationModal from '@/components/modal/ConfirmationModal';
import { useModal } from '@/components/Modal'; import { useModal } from '@/components/Modal';
import { import {
PurchaseRequisitionsFormSchema, PurchaseRequestFormSchema,
PurchaseRequisitionsFormValues, PurchaseRequestFormValues,
getPurchaseRequisitionsFormInitialValues, getPurchaseRequestFormInitialValues,
UpdatePurchaseRequisitionsFormSchema, UpdatePurchaseRequestFormSchema,
} from './PurchaseRequisitionsForm.schema'; } from './PurchaseRequisitionsForm.schema';
import { import {
SupplierApi, SupplierApi,
@@ -34,11 +34,11 @@ import { Supplier } from '@/types/api/master-data/supplier';
import { Product } from '@/types/api/master-data/product'; import { Product } from '@/types/api/master-data/product';
import { ProductWarehouseApi } from '@/services/api/inventory'; import { ProductWarehouseApi } from '@/services/api/inventory';
import { isResponseSuccess, isResponseError } from '@/lib/api-helper'; import { isResponseSuccess, isResponseError } from '@/lib/api-helper';
import { PurchaseRequisitionsApi } from '@/services/api/purchase'; import { PurchaseRequestApi } from '@/services/api/purchase';
import Card from '@/components/Card'; import Card from '@/components/Card';
import { import {
CreatePurchaseRequisitionsPayload, CreatePurchaseRequestPayload,
Purchase, Purchase,
} from '@/types/api/purchase/purchase'; } from '@/types/api/purchase/purchase';
@@ -47,7 +47,7 @@ interface PurchaseRequestFormProps {
initialValues?: Purchase; initialValues?: Purchase;
} }
const PurchaseRequisitionsForm = ({ const PurchaseRequestForm = ({
type = 'add', type = 'add',
initialValues, initialValues,
}: PurchaseRequestFormProps) => { }: PurchaseRequestFormProps) => {
@@ -105,8 +105,8 @@ const PurchaseRequisitionsForm = ({
// ===== SUBMISSION HANDLERS ===== // ===== SUBMISSION HANDLERS =====
const createPurchaseRequestHandler = useCallback( const createPurchaseRequestHandler = useCallback(
async (payload: CreatePurchaseRequisitionsPayload) => { async (payload: CreatePurchaseRequestPayload) => {
const res = await PurchaseRequisitionsApi.create(payload); const res = await PurchaseRequestApi.create(payload);
if (isResponseError(res)) { if (isResponseError(res)) {
setPurchaseRequestFormErrorMessage(res.message); setPurchaseRequestFormErrorMessage(res.message);
return; return;
@@ -120,12 +120,9 @@ const PurchaseRequisitionsForm = ({
const updatePurchaseRequestHandler = useCallback( const updatePurchaseRequestHandler = useCallback(
async ( async (
purchaseRequestId: number, purchaseRequestId: number,
payload: CreatePurchaseRequisitionsPayload payload: CreatePurchaseRequestPayload
) => { ) => {
const res = await PurchaseRequisitionsApi.update( const res = await PurchaseRequestApi.update(purchaseRequestId, payload);
purchaseRequestId,
payload
);
if (isResponseError(res)) { if (isResponseError(res)) {
setPurchaseRequestFormErrorMessage(res.message); setPurchaseRequestFormErrorMessage(res.message);
return; return;
@@ -145,7 +142,7 @@ const PurchaseRequisitionsForm = ({
if (!initialValues?.id) return; if (!initialValues?.id) return;
setIsDeleteLoading(true); setIsDeleteLoading(true);
await PurchaseRequisitionsApi.delete(initialValues.id); await PurchaseRequestApi.delete(initialValues.id);
deleteModal.closeModal(); deleteModal.closeModal();
toast.success('Successfully delete Purchase Request!'); toast.success('Successfully delete Purchase Request!');
setIsDeleteLoading(false); setIsDeleteLoading(false);
@@ -175,21 +172,21 @@ const PurchaseRequisitionsForm = ({
} = useSelect(WarehouseApi.basePath, 'id', 'name', 'search'); } = useSelect(WarehouseApi.basePath, 'id', 'name', 'search');
// ===== FORM CONFIGURATION ===== // ===== FORM CONFIGURATION =====
const formikInitialValues = useMemo<PurchaseRequisitionsFormValues>( const formikInitialValues = useMemo<PurchaseRequestFormValues>(
() => getPurchaseRequisitionsFormInitialValues(initialValues), () => getPurchaseRequestFormInitialValues(initialValues),
[initialValues] [initialValues]
); );
const formik = useFormik<PurchaseRequisitionsFormValues>({ const formik = useFormik<PurchaseRequestFormValues>({
initialValues: formikInitialValues, initialValues: formikInitialValues,
validationSchema: validationSchema:
type === 'edit' type === 'edit'
? UpdatePurchaseRequisitionsFormSchema ? UpdatePurchaseRequestFormSchema
: PurchaseRequisitionsFormSchema, : PurchaseRequestFormSchema,
validateOnChange: true, validateOnChange: true,
validateOnBlur: true, validateOnBlur: true,
onSubmit: async (values) => { onSubmit: async (values) => {
const payload: CreatePurchaseRequisitionsPayload = { const payload: CreatePurchaseRequestPayload = {
supplier_id: supplier_id:
typeof values.supplier_id === 'string' typeof values.supplier_id === 'string'
? parseInt(values.supplier_id) || 0 ? parseInt(values.supplier_id) || 0
@@ -486,9 +483,9 @@ const PurchaseRequisitionsForm = ({
Kembali Kembali
</Button> </Button>
<h1 className='text-2xl font-bold text-center'> <h1 className='text-2xl font-bold text-center'>
{type === 'add' && 'Tambah Purchase Requisitions'} {type === 'add' && 'Tambah Purchase Request'}
{type === 'edit' && 'Edit Purchase Requisitions'} {type === 'edit' && 'Edit Purchase Request'}
{type === 'detail' && 'Detail Purchase Requisitions'} {type === 'detail' && 'Detail Purchase Request'}
</h1> </h1>
</header> </header>
<form <form
@@ -1118,4 +1115,4 @@ const PurchaseRequisitionsForm = ({
); );
}; };
export default PurchaseRequisitionsForm; export default PurchaseRequestForm;
@@ -20,7 +20,7 @@ import { BaseGroupedApproval } from '@/types/api/api-general';
import { PURCHASE_ORDER_APPROVAL_LINE } from '@/config/approval-line'; import { PURCHASE_ORDER_APPROVAL_LINE } from '@/config/approval-line';
import Card from '@/components/Card'; import Card from '@/components/Card';
import { import {
CreateManagerApprovalRequisitionsPayload, CreateManagerApprovalRequestPayload,
Purchase, Purchase,
PurchaseItem, PurchaseItem,
} from '@/types/api/purchase/purchase'; } from '@/types/api/purchase/purchase';
@@ -57,7 +57,8 @@ const dummyPurchaseData: Purchase = {
hatchery: 'Jawa Barat', hatchery: 'Jawa Barat',
phone: '+62-22-7563850', phone: '+62-22-7563850',
email: 'info@cp.co.id', email: 'info@cp.co.id',
address: 'Jl. Raya Bandung - Sumedang Km. 28, Desa Cisantana, Kec. Cigendel, Kabupaten Sumedang, Jawa Barat 45363', address:
'Jl. Raya Bandung - Sumedang Km. 28, Desa Cisantana, Kec. Cigendel, Kabupaten Sumedang, Jawa Barat 45363',
npwp: '01.938.451.6-433.000', npwp: '01.938.451.6-433.000',
account_number: '123-456-7890', account_number: '123-456-7890',
due_date: 30, due_date: 30,
@@ -316,7 +317,7 @@ const PurchaseOrderDetail = ({
// ===== SUBMISSION HANDLER ===== // ===== SUBMISSION HANDLER =====
const createManagerApprovalHandler = useCallback( const createManagerApprovalHandler = useCallback(
async (payload: CreateManagerApprovalRequisitionsPayload) => { async (payload: CreateManagerApprovalRequestPayload) => {
const purchaseRequisitionId = searchParams.get('purchaseId') const purchaseRequisitionId = searchParams.get('purchaseId')
? parseInt(searchParams.get('purchaseId')!) ? parseInt(searchParams.get('purchaseId')!)
: purchaseData?.id || 1; : purchaseData?.id || 1;
@@ -806,7 +807,7 @@ const PurchaseOrderDetail = ({
text: 'Ya, Lanjutkan', text: 'Ya, Lanjutkan',
color: 'success', color: 'success',
onClick: async (notes) => { onClick: async (notes) => {
const payload: CreateManagerApprovalRequisitionsPayload = { const payload: CreateManagerApprovalRequestPayload = {
notes: notes || null, notes: notes || null,
}; };
+22 -28
View File
@@ -1,20 +1,20 @@
import { import {
CreatePurchaseRequisitionsPayload, CreatePurchaseRequestPayload,
Purchase, Purchase,
UpdatePurchaseRequisitionsPayload, UpdatePurchaseRequestPayload,
CreateStaffApprovalRequisitionsPayload, CreateStaffApprovalRequestPayload,
CreateManagerApprovalRequisitionsPayload, CreateManagerApprovalRequestPayload,
CreateAcceptApprovalRequisitionsPayload, CreateAcceptApprovalRequestPayload,
} from '@/types/api/purchase/purchase'; } from '@/types/api/purchase/purchase';
import { BaseApiService } from '@/services/api/base'; import { BaseApiService } from '@/services/api/base';
import { BaseApiResponse } from '@/types/api/api-general'; import { BaseApiResponse } from '@/types/api/api-general';
export class PurchaseRequisitionsService extends BaseApiService< export class PurchaseRequestService extends BaseApiService<
Purchase, Purchase,
CreatePurchaseRequisitionsPayload, CreatePurchaseRequestPayload,
UpdatePurchaseRequisitionsPayload UpdatePurchaseRequestPayload
> { > {
constructor(basePath: string = '/purchases/requisitions') { constructor(basePath: string = '/purchases') {
super(basePath); super(basePath);
} }
@@ -51,8 +51,8 @@ export class PurchaseRequisitionsService extends BaseApiService<
export class StaffApprovalService extends BaseApiService< export class StaffApprovalService extends BaseApiService<
Purchase, Purchase,
CreateStaffApprovalRequisitionsPayload, CreateStaffApprovalRequestPayload,
CreateAcceptApprovalRequisitionsPayload CreateAcceptApprovalRequestPayload
> { > {
constructor(basePath: string = '') { constructor(basePath: string = '') {
super(basePath); super(basePath);
@@ -60,7 +60,7 @@ export class StaffApprovalService extends BaseApiService<
async createStaffApproval( async createStaffApproval(
purchaseRequisitionId: number, purchaseRequisitionId: number,
payload: CreateStaffApprovalRequisitionsPayload payload: CreateStaffApprovalRequestPayload
): Promise<BaseApiResponse<{ message: string }> | undefined> { ): Promise<BaseApiResponse<{ message: string }> | undefined> {
return await this.customRequest<BaseApiResponse<{ message: string }>>( return await this.customRequest<BaseApiResponse<{ message: string }>>(
`${purchaseRequisitionId}/approvals/staff`, `${purchaseRequisitionId}/approvals/staff`,
@@ -74,8 +74,8 @@ export class StaffApprovalService extends BaseApiService<
export class ManagerApprovalService extends BaseApiService< export class ManagerApprovalService extends BaseApiService<
Purchase, Purchase,
CreateManagerApprovalRequisitionsPayload, CreateManagerApprovalRequestPayload,
CreateManagerApprovalRequisitionsPayload CreateManagerApprovalRequestPayload
> { > {
constructor(basePath: string = '') { constructor(basePath: string = '') {
super(basePath); super(basePath);
@@ -83,7 +83,7 @@ export class ManagerApprovalService extends BaseApiService<
async createManagerApproval( async createManagerApproval(
purchaseRequisitionId: number, purchaseRequisitionId: number,
payload: CreateManagerApprovalRequisitionsPayload payload: CreateManagerApprovalRequestPayload
): Promise<BaseApiResponse<{ message: string }> | undefined> { ): Promise<BaseApiResponse<{ message: string }> | undefined> {
return await this.customRequest<BaseApiResponse<{ message: string }>>( return await this.customRequest<BaseApiResponse<{ message: string }>>(
`${purchaseRequisitionId}/approvals/manager`, `${purchaseRequisitionId}/approvals/manager`,
@@ -97,8 +97,8 @@ export class ManagerApprovalService extends BaseApiService<
export class AcceptApprovalService extends BaseApiService< export class AcceptApprovalService extends BaseApiService<
Purchase, Purchase,
CreateAcceptApprovalRequisitionsPayload, CreateAcceptApprovalRequestPayload,
CreateAcceptApprovalRequisitionsPayload CreateAcceptApprovalRequestPayload
> { > {
constructor(basePath: string = '') { constructor(basePath: string = '') {
super(basePath); super(basePath);
@@ -106,7 +106,7 @@ export class AcceptApprovalService extends BaseApiService<
async acceptApproval( async acceptApproval(
purchaseRequisitionId: number, purchaseRequisitionId: number,
payload: CreateAcceptApprovalRequisitionsPayload payload: CreateAcceptApprovalRequestPayload
): Promise<BaseApiResponse<{ message: string }> | undefined> { ): Promise<BaseApiResponse<{ message: string }> | undefined> {
return await this.customRequest<BaseApiResponse<{ message: string }>>( return await this.customRequest<BaseApiResponse<{ message: string }>>(
`${purchaseRequisitionId}/approvals/receipts`, `${purchaseRequisitionId}/approvals/receipts`,
@@ -118,16 +118,10 @@ export class AcceptApprovalService extends BaseApiService<
} }
} }
export const PurchaseRequisitionsApi = new PurchaseRequisitionsService(); export const PurchaseRequestApi = new PurchaseRequestService();
export const StaffApprovalApi = new StaffApprovalService( export const StaffApprovalApi = new StaffApprovalService('/purchases');
'/purchases/requisitions'
);
export const ManagerApprovalApi = new ManagerApprovalService( export const ManagerApprovalApi = new ManagerApprovalService('/purchases');
'/purchases/requisitions'
);
export const AcceptApprovalApi = new AcceptApprovalService( export const AcceptApprovalApi = new AcceptApprovalService('/purchases');
'/purchases/requisitions'
);
+5 -6
View File
@@ -45,7 +45,7 @@ export type BasePurchase = {
export type Purchase = BaseMetadata & BasePurchase; export type Purchase = BaseMetadata & BasePurchase;
export type CreatePurchaseRequisitionsPayload = { export type CreatePurchaseRequestPayload = {
supplier_id: number; supplier_id: number;
area_id: number; area_id: number;
location_id: number; location_id: number;
@@ -58,7 +58,7 @@ export type CreatePurchaseRequisitionsPayload = {
}[]; }[];
}; };
export type CreateStaffApprovalRequisitionsPayload = { export type CreateStaffApprovalRequestPayload = {
notes?: string | null; notes?: string | null;
items: { items: {
purchase_item_id: number; purchase_item_id: number;
@@ -67,11 +67,11 @@ export type CreateStaffApprovalRequisitionsPayload = {
}[]; }[];
}; };
export type CreateManagerApprovalRequisitionsPayload = { export type CreateManagerApprovalRequestPayload = {
notes?: string | null; notes?: string | null;
}; };
export type CreateAcceptApprovalRequisitionsPayload = { export type CreateAcceptApprovalRequestPayload = {
notes?: string; notes?: string;
items: { items: {
purchase_item_id: number; purchase_item_id: number;
@@ -87,5 +87,4 @@ export type CreateAcceptApprovalRequisitionsPayload = {
}[]; }[];
}; };
export type UpdatePurchaseRequisitionsPayload = export type UpdatePurchaseRequestPayload = CreatePurchaseRequestPayload;
CreatePurchaseRequisitionsPayload;