mirror of
https://gitlab.com/mbugroup/lti-web-client.git
synced 2026-05-20 13:32:00 +00:00
refactor(FE): Move Movement FormData into API service
This commit is contained in:
@@ -55,16 +55,8 @@ const MovementForm = ({ type = 'add', initialValues }: MovementFormProps) => {
|
|||||||
|
|
||||||
// ===== FORM HANDLERS =====
|
// ===== FORM HANDLERS =====
|
||||||
const createMovementHandler = useCallback(
|
const createMovementHandler = useCallback(
|
||||||
async (payload: CreateMovementPayload, documents: File[] = []) => {
|
async (payload: CreateMovementPayload) => {
|
||||||
const formData = new FormData();
|
const res = await MovementApi.createMovement(payload);
|
||||||
formData.append('data', JSON.stringify(payload));
|
|
||||||
documents.forEach((file, index) => {
|
|
||||||
formData.append(`documents[${index}]`, file);
|
|
||||||
});
|
|
||||||
|
|
||||||
const res = await MovementApi.create(
|
|
||||||
formData as unknown as CreateMovementPayload
|
|
||||||
);
|
|
||||||
if (isResponseError(res)) {
|
if (isResponseError(res)) {
|
||||||
setMovementFormErrorMessage(res.message);
|
setMovementFormErrorMessage(res.message);
|
||||||
return;
|
return;
|
||||||
@@ -218,20 +210,23 @@ const MovementForm = ({ type = 'add', initialValues }: MovementFormProps) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
const payload: CreateMovementPayload = {
|
const payload: CreateMovementPayload = {
|
||||||
transfer_reason: values.transfer_reason,
|
data: {
|
||||||
transfer_date: values.transfer_date,
|
transfer_reason: values.transfer_reason,
|
||||||
source_warehouse_id: values.source_warehouse_id,
|
transfer_date: values.transfer_date,
|
||||||
destination_warehouse_id: values.destination_warehouse_id,
|
source_warehouse_id: values.source_warehouse_id,
|
||||||
products: values.products.map((p) => ({
|
destination_warehouse_id: values.destination_warehouse_id,
|
||||||
product_id: p.product_id,
|
products: values.products.map((p) => ({
|
||||||
product_qty: parseInt(p.product_qty.toString()) || 0,
|
product_id: p.product_id,
|
||||||
})),
|
product_qty: parseInt(p.product_qty.toString()) || 0,
|
||||||
deliveries: deliveriesPayload,
|
})),
|
||||||
|
deliveries: deliveriesPayload,
|
||||||
|
},
|
||||||
|
documents: documents.length > 0 ? documents : undefined,
|
||||||
};
|
};
|
||||||
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case 'add':
|
case 'add':
|
||||||
await createMovementHandler(payload, documents);
|
await createMovementHandler(payload);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import { BaseApiService } from '@/services/api/base';
|
import { BaseApiService } from '@/services/api/base';
|
||||||
|
import { BaseApiResponse } from '@/types/api/api-general';
|
||||||
import {
|
import {
|
||||||
CreateProductWarehousePayload,
|
CreateProductWarehousePayload,
|
||||||
ProductWarehouse,
|
ProductWarehouse,
|
||||||
@@ -20,11 +21,38 @@ export const ProductWarehouseApi = new BaseApiService<
|
|||||||
UpdateProductWarehousePayload
|
UpdateProductWarehousePayload
|
||||||
>('/inventory/product-warehouses');
|
>('/inventory/product-warehouses');
|
||||||
|
|
||||||
export const MovementApi = new BaseApiService<
|
export class MovementApiService extends BaseApiService<
|
||||||
Movement,
|
Movement,
|
||||||
CreateMovementPayload,
|
CreateMovementPayload,
|
||||||
unknown
|
unknown
|
||||||
>('/inventory/transfers');
|
> {
|
||||||
|
constructor(basePath: string) {
|
||||||
|
super(basePath);
|
||||||
|
}
|
||||||
|
|
||||||
|
async createMovement(
|
||||||
|
payload: CreateMovementPayload
|
||||||
|
): Promise<BaseApiResponse<Movement> | undefined> {
|
||||||
|
const formData = new FormData();
|
||||||
|
|
||||||
|
// Append data as JSON string
|
||||||
|
formData.append('data', JSON.stringify(payload.data));
|
||||||
|
|
||||||
|
// Append documents if any
|
||||||
|
if (payload.documents && payload.documents.length > 0) {
|
||||||
|
payload.documents.forEach((file) => {
|
||||||
|
formData.append('documents', file);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return await this.customRequest<BaseApiResponse<Movement>>('', {
|
||||||
|
method: 'POST',
|
||||||
|
payload: formData as unknown as Record<string, unknown>,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export const MovementApi = new MovementApiService('/inventory/transfers');
|
||||||
|
|
||||||
export const InventoryAdjustmentApi = new BaseApiService<
|
export const InventoryAdjustmentApi = new BaseApiService<
|
||||||
InventoryAdjustment,
|
InventoryAdjustment,
|
||||||
|
|||||||
+6
-1
@@ -49,7 +49,7 @@ export type BaseMovement = {
|
|||||||
|
|
||||||
export type Movement = BaseMetadata & BaseMovement;
|
export type Movement = BaseMetadata & BaseMovement;
|
||||||
|
|
||||||
export type CreateMovementPayload = {
|
export type CreateMovementPayloadData = {
|
||||||
transfer_reason: string;
|
transfer_reason: string;
|
||||||
transfer_date: string;
|
transfer_date: string;
|
||||||
source_warehouse_id: number;
|
source_warehouse_id: number;
|
||||||
@@ -71,3 +71,8 @@ export type CreateMovementPayload = {
|
|||||||
}[];
|
}[];
|
||||||
}[];
|
}[];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export type CreateMovementPayload = {
|
||||||
|
data: CreateMovementPayloadData;
|
||||||
|
documents?: File[];
|
||||||
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user