|
- "use server";
- import { cache } from "react";
- import { serverFetchJson } from "@/app/utils/fetchUtil";
- import { BASE_API_URL } from "@/config/api";
- import { IndividualTeam } from "../team";
- // import "server-only";
-
-
- export interface FinancialSummaryCardResult {
- teamId: number;
- teamName: string;
- projectNo: number;
- totalFee: number;
- totalBudget: number;
- cumulativeExpenditure: number;
- totalInvoiced: number;
- totalReceived: number;
- cashFlowStatus: string;
- cpi: number;
- }
-
- export type FinancialSummaryType = {
- team: IndividualTeam;
- activeProject: number;
- totalFees: number;
- totalBudget: number;
- cumulativeExpenditure: number;
- manpowerExpense: number;
- projectExpense: number;
- invoicedAmount: number;
- nonInvoicedAmount: number;
- receivedAmount: number;
- cashFlowStatus: String;
- costPerformanceIndex: number;
- projectedCashFlowStatus: String;
- projectedCostPerformanceIndex: number;
- }
-
- export type FinancialSummaryByProject = {
- // project data
- id: number,
- projectCode: string,
- projectName: string,
- custId: number,
- totalFee: number,
- totalBudget: number,
- customerCode: string,
- customerName: string,
- subsidiaryName: string,
- // timesheet data
- cumulativeExpenditure: number,
- manhourExpense: number,
- projectExpense: number,
- // invoice data
- invoicedAmount: number,
- nonInvoicedAmount: number,
- receivedAmount: number,
- // calculation
- cashFlowStatus: string,
- projectedCashFlowStatus: string,
- cpi: number,
- projectedCpi: number,
- }
-
- export interface FinancialSummaryByClient {
- id: number;
- customerName: string;
- customerCode: string;
- subsidiaryName: string;
- totalFee: number,
- totalBudget: number,
- cumulativeExpenditure: number
- manhourExpense: number;
- projectExpense: number;
- invoicedAmount: number;
- nonInvoicedAmount: number
- receivedAmount: number;
- numberOfRecords: number;
- }
-
- export type FinancialByProject = {
- id: number,
- projectName: string,
- projectCode: string,
- team: string,
- teamId: number,
- custId: number,
- customerName: string,
- customerCode: string,
- subsidiary: string,
- totalFee: number,
- totalBudget: number,
- manhourExpense: number,
- invoicedAmount: number,
- paidAmount: number,
- projectExpense: number,
- }
-
- export const preloadFinancialSummaryCard = () => {
- fetchFinancialSummaryCard();
- };
-
- export const fetchFinancialSummaryCard = cache(async () => {
- return serverFetchJson<FinancialSummaryCardResult[]>(`${BASE_API_URL}/dashboard/searchFinancialSummaryCard`);
- });
-
- export const fetchFinancialSummary = cache(async (endDate: string, teamId: number | null, startDate: string | null) => {
- var endpoint = `${BASE_API_URL}/dashboard/getFinancialSummary?endDate=${endDate}`
- if (teamId) endpoint += `&teamIds=${teamId}`
- if (startDate) endpoint += `&startDate=${startDate}`
- return serverFetchJson<FinancialSummaryType[]>(endpoint, {
- next: { tags: ["financialSummary"] },
- });
- })
-
- export const fetchFinancialSummaryByProject = cache(async (endDate: string, teamId: string, startDate?: string ) => {
- var endpoint = `${BASE_API_URL}/dashboard/getFinancialSummaryByProject?endDate=${endDate}&teamId=${teamId}`
- if (startDate) endpoint += `&startDate=${startDate}`
- return serverFetchJson<FinancialSummaryByProject[]>(endpoint, {
- next: { tags: ["financialSummaryByProject"] },
- });
- })
-
- export const fetchFinancialSummaryByProjectV2 = cache(async (teamId: number, endDate: string, startDate: string) => {
- var endpoint = `${BASE_API_URL}/dashboard/getFinancialSummary-final?`
- if (startDate.length > 0) endpoint += `&startDate=${startDate}`
- if (endDate.length > 0) endpoint += `&endDate=${endDate}`
- if (teamId > 0 ) endpoint += `&teamId=${teamId}`
- return serverFetchJson<FinancialByProject[]>(endpoint, {
- next: { tags: ["financialSummaryByProject"] },
- });
- })
|