Merge branch 'schema/bulk-approve-marketings-expenses' into 'development'

fix: schema update for bulk approve

See merge request mbugroup/lti-web-client!416
This commit is contained in:
Adnan Zahir
2026-04-22 10:14:25 +07:00
5 changed files with 59 additions and 26 deletions
@@ -144,9 +144,11 @@ export const DeliveryProductToFieldValues = (
delivery: BaseDeliveryOrder
): DeliveryOrderProductFormValues[] => {
const data = delivery.deliveries.map((item) => {
const salesOrder = salesOrders.find(
(so) => so.product_warehouse.id === item.product_warehouse.id
);
const salesOrder =
salesOrders.find((so) => so.id === item.marketing_product_id) ??
salesOrders.find(
(so) => so.product_warehouse.id === item.product_warehouse.id
);
const warehouseOption = {
value: item.product_warehouse.warehouse.id,
label: item.product_warehouse.warehouse.name,
@@ -180,7 +182,7 @@ export const DeliveryProductToFieldValues = (
vehicle_number: item.vehicle_number,
delivery_date: formatDate(delivery.delivery_date, 'yyyy-MM-DD'),
do_number: delivery.do_number,
marketing_product_id: salesOrder?.id,
marketing_product_id: item.marketing_product_id ?? salesOrder?.id,
marketing_type: salesOrder?.marketing_type
? {
value: salesOrder?.marketing_type,
@@ -194,7 +196,7 @@ export const DeliveryProductToFieldValues = (
}
: null,
marketing_product: {
id: salesOrder?.id,
id: item.marketing_product_id ?? salesOrder?.id,
vehicle_number: item.vehicle_number,
warehouse_id: item.product_warehouse.warehouse.id,
warehouse: warehouseOption,
+7 -21
View File
@@ -2,6 +2,7 @@ import axios from 'axios';
import { BaseApiService } from '@/services/api/base';
import { BaseApiResponse, GroupedApprovals } from '@/types/api/api-general';
import {
BulkApproveExpensePayload,
CreateExpensePayload,
CreateExpenseRealizationPayload,
Expense,
@@ -330,34 +331,19 @@ export class ExpenseApiService extends BaseApiService<
}
}
async bulkApprovals(
ids: number[],
status:
| 'HEAD_AREA'
| 'UNIT_VICE_PRESIDENT'
| 'FINANCE'
| 'REALISASI'
| 'SELESAI',
date: string, // YYYY-MM-DD
notes: string
): Promise<BaseApiResponse<Expense> | undefined> {
async bulkApproveToStatus(
payload: BulkApproveExpensePayload
): Promise<BaseApiResponse<Expense | Expense[]> | undefined> {
try {
const bulkApproveRes = await httpClient<BaseApiResponse<Expense>>(
return await httpClient<BaseApiResponse<Expense | Expense[]>>(
`${this.basePath}/approvals/bulk`,
{
method: 'POST',
body: {
approvable_ids: ids,
status: status,
date: date,
notes: notes,
},
body: payload,
}
);
return bulkApproveRes;
} catch (error) {
if (axios.isAxiosError<BaseApiResponse<Expense>>(error)) {
if (axios.isAxiosError<BaseApiResponse<Expense | Expense[]>>(error)) {
return error.response?.data;
}
+22
View File
@@ -2,7 +2,9 @@ import { isResponseError } from '@/lib/api-helper';
import { BaseApiService } from '@/services/api/base';
import { httpClient, httpClientFetcher } from '@/services/http/client';
import { BaseApiResponse } from '@/types/api/api-general';
import axios from 'axios';
import {
BulkApproveMarketingPayload,
Marketing,
CreateSalesOrderPayload,
UpdateSalesOrderPayload,
@@ -73,6 +75,26 @@ export class SalesOrderService extends BaseApiService<
}
}
async bulkApproveToStatus(
payload: BulkApproveMarketingPayload
): Promise<BaseApiResponse<Marketing | Marketing[]> | undefined> {
try {
return await httpClient<BaseApiResponse<Marketing | Marketing[]>>(
'/marketing/approvals/bulk',
{
method: 'POST',
body: payload,
}
);
} catch (error) {
if (axios.isAxiosError<BaseApiResponse<Marketing | Marketing[]>>(error)) {
return error.response?.data;
}
return undefined;
}
}
/**
* Delivery
*/
+13
View File
@@ -99,3 +99,16 @@ export type CreateExpenseRealizationPayload = {
};
export type UpdateExpenseRealizationPayload = CreateExpenseRealizationPayload;
export type ExpenseBulkApprovalStatus =
| 'HEAD_AREA'
| 'UNIT_VICE_PRESIDENT'
| 'FINANCE'
| 'REALISASI';
export type BulkApproveExpensePayload = {
approvable_ids: number[];
status: ExpenseBulkApprovalStatus;
date?: string;
notes?: string;
};
+10
View File
@@ -54,6 +54,7 @@ export type BaseDeliveryOrder = {
};
export type BaseDelivery = {
marketing_product_id: number;
product_warehouse: ProductWarehouse;
qty: number;
unit_price: number;
@@ -162,3 +163,12 @@ export type UpdateDeliveryOrderProductPayload =
export type UpdateSalesOrderPayload = CreateSalesOrderPayload;
export type UpdateDeliveryOrderPayload = CreateDeliveryOrderPayload;
export type MarketingBulkApprovalStatus = 'SALES_ORDER' | 'DELIVERY';
export type BulkApproveMarketingPayload = {
approvable_ids: number[];
status: MarketingBulkApprovalStatus;
date?: string;
notes?: string;
};