mirror of
https://gitlab.com/mbugroup/lti-web-client.git
synced 2026-05-20 13:32:00 +00:00
refactor(FE-327): Map Indonesian sales fields and add API sample
This commit is contained in:
@@ -7,7 +7,7 @@ import Table, { CustomHeaderRow } from '@/components/Table';
|
|||||||
import Card from '@/components/Card';
|
import Card from '@/components/Card';
|
||||||
import Badge from '@/components/Badge';
|
import Badge from '@/components/Badge';
|
||||||
import { formatCurrency, formatNumber, formatDate } from '@/lib/helper';
|
import { formatCurrency, formatNumber, formatDate } from '@/lib/helper';
|
||||||
import { BaseClosingSales } from '@/types/api/closing/closing';
|
import { BaseClosingSales, BaseSales } from '@/types/api/closing/closing';
|
||||||
|
|
||||||
interface SalesReportTableProps {
|
interface SalesReportTableProps {
|
||||||
type?: 'detail';
|
type?: 'detail';
|
||||||
@@ -110,8 +110,7 @@ const generateCustomHeaders = (template: {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// TODO: TEMPORARY - Remove this when backend API returns English field names
|
// TODO: TEMPORARY - Remove this when backend API returns English field names
|
||||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
const mapIndonesianDataToEnglish = (data: BaseClosingSales): BaseSales[] => {
|
||||||
const mapIndonesianDataToEnglish = (data: any): BaseClosingSales[] => {
|
|
||||||
if (!data || !data.penjualan || !Array.isArray(data.penjualan)) {
|
if (!data || !data.penjualan || !Array.isArray(data.penjualan)) {
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
@@ -120,11 +119,11 @@ const mapIndonesianDataToEnglish = (data: any): BaseClosingSales[] => {
|
|||||||
return data.penjualan.map((item: any) => ({
|
return data.penjualan.map((item: any) => ({
|
||||||
id: item.id,
|
id: item.id,
|
||||||
realization_date: item.tanggal_realisasi,
|
realization_date: item.tanggal_realisasi,
|
||||||
|
week_age: item.umur_minggu,
|
||||||
age_label: item.umur_label,
|
age_label: item.umur_label,
|
||||||
umur_minggu: item.umur_minggu,
|
|
||||||
delivery_order_number: item.no_do,
|
delivery_order_number: item.no_do,
|
||||||
product: item.produk,
|
product: item.produk,
|
||||||
jenis_produk: item.jenis_produk,
|
product_category: item.jenis_produk,
|
||||||
customer: item.customer,
|
customer: item.customer,
|
||||||
quantity: item.qty,
|
quantity: item.qty,
|
||||||
weight: item.kg,
|
weight: item.kg,
|
||||||
@@ -132,6 +131,7 @@ const mapIndonesianDataToEnglish = (data: any): BaseClosingSales[] => {
|
|||||||
price: item.harga,
|
price: item.harga,
|
||||||
total: item.total,
|
total: item.total,
|
||||||
kandang: item.kandang,
|
kandang: item.kandang,
|
||||||
|
kandang_id: item.kandang_id,
|
||||||
payment_status: item.status_pembayaran,
|
payment_status: item.status_pembayaran,
|
||||||
}));
|
}));
|
||||||
};
|
};
|
||||||
@@ -143,16 +143,14 @@ const SalesReportTable = ({
|
|||||||
}: SalesReportTableProps) => {
|
}: SalesReportTableProps) => {
|
||||||
const [activeTabId, setActiveTabId] = useState<string>('penjualan');
|
const [activeTabId, setActiveTabId] = useState<string>('penjualan');
|
||||||
|
|
||||||
const salesBroilerData: BaseClosingSales[] = useMemo(() => {
|
const salesBroilerData: BaseSales[] = useMemo(() => {
|
||||||
if (activeTabId === 'penjualan' && initialValues) {
|
if (activeTabId === 'penjualan' && initialValues) {
|
||||||
// TODO: TEMPORARY - Remove this when backend API returns English field names
|
// TODO: TEMPORARY - Remove this when backend API returns English field names
|
||||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
||||||
// @ts-ignore
|
|
||||||
if (initialValues.penjualan && Array.isArray(initialValues.penjualan)) {
|
if (initialValues.penjualan && Array.isArray(initialValues.penjualan)) {
|
||||||
return mapIndonesianDataToEnglish(initialValues);
|
return mapIndonesianDataToEnglish(initialValues);
|
||||||
}
|
}
|
||||||
// END TODO
|
// END TODO
|
||||||
return [initialValues];
|
return [];
|
||||||
}
|
}
|
||||||
return [];
|
return [];
|
||||||
}, [initialValues, activeTabId]);
|
}, [initialValues, activeTabId]);
|
||||||
@@ -208,7 +206,7 @@ const SalesReportTable = ({
|
|||||||
};
|
};
|
||||||
}, [salesBroilerData]);
|
}, [salesBroilerData]);
|
||||||
|
|
||||||
const salesColumns: ColumnDef<BaseClosingSales>[] = useMemo(
|
const salesColumns: ColumnDef<BaseSales>[] = useMemo(
|
||||||
() => [
|
() => [
|
||||||
{
|
{
|
||||||
id: 'realization_date',
|
id: 'realization_date',
|
||||||
@@ -418,9 +416,7 @@ const SalesReportTable = ({
|
|||||||
label: 'Penjualan',
|
label: 'Penjualan',
|
||||||
content: (
|
content: (
|
||||||
<div className='p-4'>
|
<div className='p-4'>
|
||||||
<h2 className='text-xl font-semibold mb-4'>
|
<h2 className='text-xl font-semibold mb-4'>Penjualan</h2>
|
||||||
Penjualan {'(diisi dengan jenis penjualan)'}
|
|
||||||
</h2>
|
|
||||||
<Card
|
<Card
|
||||||
className={{
|
className={{
|
||||||
wrapper: 'w-full bg-base-100',
|
wrapper: 'w-full bg-base-100',
|
||||||
@@ -486,6 +482,78 @@ const SalesReportTable = ({
|
|||||||
variant='lifted'
|
variant='lifted'
|
||||||
/>
|
/>
|
||||||
</section>
|
</section>
|
||||||
|
<section className='w-ful'>
|
||||||
|
<Card
|
||||||
|
collapsible={true}
|
||||||
|
defaultCollapsed={true}
|
||||||
|
className={{ wrapper: 'w-full bg-base-100' }}
|
||||||
|
title='(Latest) API Response Sample BE for Sales Report Data'
|
||||||
|
>
|
||||||
|
<pre>
|
||||||
|
{JSON.stringify(
|
||||||
|
{
|
||||||
|
code: 200,
|
||||||
|
status: 'success',
|
||||||
|
message: 'Retrieved sales report successfully',
|
||||||
|
data: {
|
||||||
|
project_type: 'GROWING',
|
||||||
|
flock_id: '1',
|
||||||
|
period: 10,
|
||||||
|
sales: [
|
||||||
|
{
|
||||||
|
id: 1,
|
||||||
|
realization_date: '2025-12-05T02:22:17.443165Z',
|
||||||
|
age: 20,
|
||||||
|
do_number: 'SO-DO-10001',
|
||||||
|
product: {
|
||||||
|
id: 1,
|
||||||
|
name: 'Laptop Gaming X500',
|
||||||
|
product_price: 15000000,
|
||||||
|
selling_price: 16500000.5,
|
||||||
|
uom: {
|
||||||
|
id: 1,
|
||||||
|
name: 'KG',
|
||||||
|
},
|
||||||
|
flags: ['Best Seller', 'New Arrival'],
|
||||||
|
product_category: {
|
||||||
|
id: 5,
|
||||||
|
name: 'Elektronik',
|
||||||
|
code: 'DOC',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
customer: {
|
||||||
|
id: 12345,
|
||||||
|
name: 'PT. Solusi Teknologi Nusantara',
|
||||||
|
type: 'Perusahaan',
|
||||||
|
account_number: 'ACC1234567890',
|
||||||
|
balance: 5000000.75,
|
||||||
|
pic: {
|
||||||
|
id: 101,
|
||||||
|
name: 'Budi Santoso',
|
||||||
|
email: 'budi.santoso@example.com',
|
||||||
|
role: 'Manajer Akun',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
qty: 6348,
|
||||||
|
weight: 19142,
|
||||||
|
avg_weight: 3.02,
|
||||||
|
price: 26419,
|
||||||
|
total_price: 505712498,
|
||||||
|
kandang: {
|
||||||
|
id: 1,
|
||||||
|
name: 'cibeber 1',
|
||||||
|
},
|
||||||
|
payment_status: 'Paid',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
null,
|
||||||
|
2
|
||||||
|
)}
|
||||||
|
</pre>
|
||||||
|
</Card>
|
||||||
|
</section>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user