fix(FE): adjust sapronak calculation to closing detail page

This commit is contained in:
randy-ar
2025-12-08 10:24:41 +07:00
31 changed files with 2081 additions and 1585 deletions
+57 -41
View File
@@ -1,60 +1,76 @@
import DUMMY_SAPRONAK_CALCULATION from '@/dummy/closing.dummy';
import { BaseApiService } from './base';
import { BaseApiResponse } from '@/types/api/api-general';
import { ClosingSales, SapronakCalculation } from '@/types/api/closing/closing';
import axios from 'axios';
export class ClosingApiService extends BaseApiService<
ClosingSales,
unknown,
unknown
> {
import { BaseApiService } from '@/services/api/base';
import {
Closing,
ClosingGeneralInformation,
ClosingIncomingSapronak,
ClosingOutgoingSapronak,
ClosingSapronakCalculation,
} from '@/types/api/closing';
import { httpClient, httpClientFetcher } from '@/services/http/client';
import { BaseApiResponse } from '@/types/api/api-general';
export class ClosingApiService extends BaseApiService<Closing, null, null> {
constructor(basePath: string) {
super(basePath);
}
async getPenjualan(
id: number
): Promise<BaseApiResponse<ClosingSales> | undefined> {
async getAllIncomingSapronakFetcher(
endpoint: string
): Promise<BaseApiResponse<ClosingIncomingSapronak[]>> {
return await httpClientFetcher<BaseApiResponse<ClosingIncomingSapronak[]>>(
endpoint
);
}
async getAllOutgoingSapronakFetcher(
endpoint: string
): Promise<BaseApiResponse<ClosingOutgoingSapronak[]>> {
return await httpClientFetcher<BaseApiResponse<ClosingOutgoingSapronak[]>>(
endpoint
);
}
async getGeneralInfo(id: number) {
try {
const getPenjualanPath = `${id}/penjualan`;
return await this.customRequest<BaseApiResponse<ClosingSales>>(
getPenjualanPath
);
} catch {
const getGeneralInfoPath = `${this.basePath}/${id}`;
const getGeneralInfoRes =
await httpClient<BaseApiResponse<ClosingGeneralInformation>>(
getGeneralInfoPath
);
return getGeneralInfoRes;
} catch (error) {
if (
axios.isAxiosError<BaseApiResponse<ClosingGeneralInformation>>(error)
) {
return error.response?.data;
}
return undefined;
}
}
async getPerhitunganSapronak(
projectFlockId: number
): Promise<BaseApiResponse<SapronakCalculation> | undefined> {
// Dummy implementation - simulate API call with delay
return new Promise((resolve) => {
setTimeout(() => {
resolve({
code: 200,
status: 'success',
message: 'Retrieved sapronak calculation successfully',
data: DUMMY_SAPRONAK_CALCULATION,
});
}, 500); // Simulate 500ms network delay
});
/*
// Real API implementation - uncomment when backend is ready
id: number
): Promise<BaseApiResponse<ClosingSapronakCalculation> | undefined> {
try {
const path = `${this.basePath}/${projectFlockId}/perhitungan_sapronak`;
return await httpClient<BaseApiResponse<SapronakCalculation>>(path, {
method: 'GET',
});
} catch (error: unknown) {
if (axios.isAxiosError<BaseApiResponse<SapronakCalculation>>(error)) {
const path = `${this.basePath}/${id}/perhitungan_sapronak`;
return await httpClient<BaseApiResponse<ClosingSapronakCalculation>>(
path,
{
method: 'GET',
}
);
} catch (error) {
if (
axios.isAxiosError<BaseApiResponse<ClosingSapronakCalculation>>(error)
) {
return error.response?.data;
}
return undefined;
}
*/
}
}