"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(`${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(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(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(endpoint, { next: { tags: ["financialSummaryByProject"] }, }); })