From 0f7f4e891c3624222ac12cf6855e02e210b829be Mon Sep 17 00:00:00 2001 From: rstubryan Date: Wed, 17 Dec 2025 09:50:36 +0700 Subject: [PATCH] feat(FE-357): Add marketing sales report API and types --- src/config/constant.ts | 11 +++++ src/services/api/report/marketing-sale.ts | 50 +++++++++++++++++++++++ src/types/api/report/hpp-per-kandang.d.ts | 41 +++++++++++++++++++ 3 files changed, 102 insertions(+) create mode 100644 src/services/api/report/marketing-sale.ts create mode 100644 src/types/api/report/hpp-per-kandang.d.ts diff --git a/src/config/constant.ts b/src/config/constant.ts index 96fc8401..6d25f56a 100644 --- a/src/config/constant.ts +++ b/src/config/constant.ts @@ -45,6 +45,17 @@ export const MAIN_DRAWER_LINKS: SidebarMenuItem[] = [ link: '/closing', icon: 'heroicons-outline:presentation-chart-bar', }, + { + text: 'Laporan', + link: '/report', + icon: 'mdi:chart-box-outline', + submenu: [ + { + text: 'Penjualan', + link: '/report/marketing', + }, + ], + }, { text: 'Persediaan', link: '/inventory', diff --git a/src/services/api/report/marketing-sale.ts b/src/services/api/report/marketing-sale.ts new file mode 100644 index 00000000..c18871e3 --- /dev/null +++ b/src/services/api/report/marketing-sale.ts @@ -0,0 +1,50 @@ +import { BaseApiService } from '@/services/api/base'; +import { BaseApiResponse } from '@/types/api/api-general'; +import { HppPerkandang } from '@/types/api/report/hpp-per-kandang'; + +export class MarketingSaleReportService extends BaseApiService< + HppPerkandang, + unknown, + unknown +> { + constructor(basePath: string) { + super(basePath); + } + + async getHppPerKandangReport( + area_id?: number, + location_id?: number, + kandang_id?: number, + weight_min?: number, + weight_max?: number, + period?: string, + sort_by?: string, + show_unrecorded?: boolean, + page?: number, + limit?: number + ): Promise | undefined> { + return await this.customRequest>( + `hpp-per-kandang`, + { + method: 'GET', + params: { + area_id: area_id, + location_id: location_id, + kandang_id: kandang_id, + weight_min: weight_min, + weight_max: weight_max, + period: period, + sort_by: sort_by, + show_unrecorded: show_unrecorded, + page: page, + limit: limit, + }, + } + ); + } +} + +// TODO: REPLACE WITH PRODUCTION URL +export const SaleReportApi = new MarketingSaleReportService( + 'http://localhost:4010/api/reports/marketings/hpp-per-kandang' +); diff --git a/src/types/api/report/hpp-per-kandang.d.ts b/src/types/api/report/hpp-per-kandang.d.ts new file mode 100644 index 00000000..fab7b5c6 --- /dev/null +++ b/src/types/api/report/hpp-per-kandang.d.ts @@ -0,0 +1,41 @@ +import { BaseMetadata } from '@/types/api/api-general'; +import { Supplier } from '@/types/api/supplier/supplier'; +import { Kandang } from '@/types/api/master-data/kandang'; + +export type BaseHppPerKandangSummary = { + total_remaining_chicken_birds: number; + total_remaining_chicken_weight_kg: number; + average_weight_kg: number; + total_remaining_value_rp: number; + total_egg_production_pieces: number; + total_egg_production_kg: number; + average_egg_hpp_rp_per_kg: number; + total_egg_value_rp: number; +}; + +export type BaseHppPerkandang = { + id: number; + kandang: Kandang; + weight_range: { + weight_min: number; + weight_max: number; + }; + remaining_chicken_birds: number; + remaining_chicken_weight_kg: number; + avg_weight_kg: number; + egg_production_pieces: number; + egg_production_kg: number; + egg_hpp_rp_per_kg: number; + egg_value_rp: number; + feed_suppliers: Supplier; + doc_suppliers: Supplier; + average_doc_price_rp: number; + hpp_rp: number; + remaining_value_rp: number; +}; + +export type HppPerkandang = BaseMetadata & { + periods: string; + rows: SalesReport[]; + summary: BaseSalesReportSummary; +};