mirror of
https://gitlab.com/mbugroup/lti-web-client.git
synced 2026-05-20 13:32:00 +00:00
feat(FE-208): add PurchaseOrderDetail component for displaying approval steps
This commit is contained in:
@@ -0,0 +1,150 @@
|
|||||||
|
'use client';
|
||||||
|
|
||||||
|
import { useMemo } from 'react';
|
||||||
|
|
||||||
|
import ApprovalSteps, {
|
||||||
|
formatGroupedApprovalsToApprovalSteps,
|
||||||
|
} from '@/components/pages/ApprovalSteps';
|
||||||
|
|
||||||
|
import { BaseGroupedApproval } from '@/types/api/api-general';
|
||||||
|
import { PURCHASE_ORDER_APPROVAL_LINE } from '@/config/approval-line';
|
||||||
|
|
||||||
|
interface PurchaseOrderDetailProps {
|
||||||
|
type?: 'detail' | 'edit' | 'approval-purchasing' | 'approval-manager';
|
||||||
|
}
|
||||||
|
|
||||||
|
const dummyGroupedApprovals: BaseGroupedApproval[] = [
|
||||||
|
{
|
||||||
|
step_number: 1,
|
||||||
|
step_name: 'Pengajuan',
|
||||||
|
approvals: [
|
||||||
|
{
|
||||||
|
step_number: 1,
|
||||||
|
step_name: 'Pengajuan',
|
||||||
|
action: 'submit',
|
||||||
|
notes: 'Pengajuan purchase order dibuat',
|
||||||
|
action_by: {
|
||||||
|
id: 1,
|
||||||
|
id_user: 1,
|
||||||
|
email: 'staff@company.com',
|
||||||
|
name: 'Staff Pengajuan',
|
||||||
|
},
|
||||||
|
action_at: '2025-01-10T08:00:00Z',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
step_number: 2,
|
||||||
|
step_name: 'Approval Purchasing',
|
||||||
|
approvals: [
|
||||||
|
{
|
||||||
|
step_number: 2,
|
||||||
|
step_name: 'Approval Purchasing',
|
||||||
|
action: 'approve',
|
||||||
|
notes: 'Purchase order disetujui oleh purchasing',
|
||||||
|
action_by: {
|
||||||
|
id: 2,
|
||||||
|
id_user: 2,
|
||||||
|
email: 'purchasing@company.com',
|
||||||
|
name: 'Ahmad Purchasing',
|
||||||
|
},
|
||||||
|
action_at: '2025-01-10T10:30:00Z',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
step_number: 3,
|
||||||
|
step_name: 'Approval Manager Purchasing',
|
||||||
|
approvals: [
|
||||||
|
{
|
||||||
|
step_number: 3,
|
||||||
|
step_name: 'Approval Manager Purchasing',
|
||||||
|
action: 'approve',
|
||||||
|
notes: 'Purchase order disetujui oleh manager purchasing',
|
||||||
|
action_by: {
|
||||||
|
id: 3,
|
||||||
|
id_user: 3,
|
||||||
|
email: 'manager.purchasing@company.com',
|
||||||
|
name: 'Budi Manager Purchasing',
|
||||||
|
},
|
||||||
|
action_at: '2025-01-10T14:15:00Z',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
step_number: 4,
|
||||||
|
step_name: 'Produk Diterima',
|
||||||
|
approvals: [
|
||||||
|
{
|
||||||
|
step_number: 4,
|
||||||
|
step_name: 'Produk Diterima',
|
||||||
|
action: 'receive',
|
||||||
|
notes: 'Produk telah diterima sesuai pesanan',
|
||||||
|
action_by: {
|
||||||
|
id: 4,
|
||||||
|
id_user: 4,
|
||||||
|
email: 'warehouse@company.com',
|
||||||
|
name: 'Candra Warehouse',
|
||||||
|
},
|
||||||
|
action_at: '2025-01-12T09:00:00Z',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
step_number: 5,
|
||||||
|
step_name: 'Selesai',
|
||||||
|
approvals: [
|
||||||
|
{
|
||||||
|
step_number: 5,
|
||||||
|
step_name: 'Selesai',
|
||||||
|
action: 'complete',
|
||||||
|
notes: 'Purchase order telah selesai diproses',
|
||||||
|
action_by: {
|
||||||
|
id: 5,
|
||||||
|
id_user: 5,
|
||||||
|
email: 'finance@company.com',
|
||||||
|
name: 'Diana Finance',
|
||||||
|
},
|
||||||
|
action_at: '2025-01-12T16:00:00Z',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
const PurchaseOrderDetail = ({ type = 'detail' }: PurchaseOrderDetailProps) => {
|
||||||
|
// ===== STATIC DATA =====
|
||||||
|
const groupedApprovals = dummyGroupedApprovals;
|
||||||
|
const latestApproval =
|
||||||
|
groupedApprovals[groupedApprovals.length - 1]?.approvals[0];
|
||||||
|
|
||||||
|
// ===== COMPUTED VALUES =====
|
||||||
|
const approvalSteps = useMemo(() => {
|
||||||
|
if (!groupedApprovals.length || !latestApproval) return [];
|
||||||
|
|
||||||
|
try {
|
||||||
|
return formatGroupedApprovalsToApprovalSteps(
|
||||||
|
PURCHASE_ORDER_APPROVAL_LINE,
|
||||||
|
groupedApprovals,
|
||||||
|
latestApproval
|
||||||
|
);
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Error formatting approval steps:', error);
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
}, [groupedApprovals, latestApproval]);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<section className='w-full'>
|
||||||
|
{/* Steps */}
|
||||||
|
{approvalSteps.length > 0 ? (
|
||||||
|
<ApprovalSteps approvals={approvalSteps} />
|
||||||
|
) : (
|
||||||
|
<div className='text-center py-8'>
|
||||||
|
<p className='text-gray-500'>Status approval tidak tersedia</p>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
</section>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default PurchaseOrderDetail;
|
||||||
Reference in New Issue
Block a user