'use client'; import Button from '@/components/Button'; import Card from '@/components/Card'; import { FormHeader } from '@/components/helper/form/FormHeader'; import { useModal } from '@/components/Modal'; import ConfirmationModal from '@/components/modal/ConfirmationModal'; import ConfirmationModalWithNotes from '@/components/modal/ConfirmationModalWithNotes'; import ApprovalSteps, { useApprovalSteps, } from '@/components/pages/ApprovalSteps'; import Table from '@/components/Table'; import { MARKETING_APPROVAL_LINE } from '@/config/approval-line'; import { cn, formatCurrency, formatDate, formatNumber, formatTitleCase, formatVechicleNumber, } from '@/lib/helper'; import { MarketingApi, SalesOrderApi, } from '@/services/api/marketing/marketing'; import { BaseDelivery, BaseSalesOrder, Marketing, } from '@/types/api/marketing/marketing'; import { Icon } from '@iconify/react'; import { useRouter } from 'next/navigation'; import { useState } from 'react'; import toast from 'react-hot-toast'; import SalesOrderExport from '@/components/pages/marketing/pdf/SalesOrderExport'; import DeliveryOrderExport from '@/components/pages/marketing/pdf/DeliveryOrderExport'; import RequirePermission from '@/components/helper/RequirePermission'; import Badge from '@/components/Badge'; const MarketingDetail = ({ initialValues, refresh, }: { initialValues?: Marketing; refresh?: () => void; }) => { const router = useRouter(); const [approvalAction, setApprovalAction] = useState<'APPROVED' | 'REJECTED'>( 'APPROVED' ); const [grandTotal, setGrandTotal] = useState( initialValues?.sales_order ?.map((item) => item.total_price) .reduce((a, b) => a + b, 0) ); const [isLoading, setIsLoading] = useState(false); const deleteModal = useModal(); const confirmationModal = useModal(); const deliveryModal = useModal(); const { approvals, isLoading: isLoadingApproval, refresh: refreshApproval, } = useApprovalSteps({ latestApproval: initialValues?.latest_approval, approvalLines: MARKETING_APPROVAL_LINE, moduleName: 'MARKETINGS', moduleId: initialValues?.id as number as unknown as string, }); const approveClickHandler = () => { setApprovalAction('APPROVED'); confirmationModal.openModal(); }; const rejectClickHandler = () => { setApprovalAction('REJECTED'); confirmationModal.openModal(); }; const deleteClickHandler = () => { deleteModal.openModal(); }; const confirmationModalDeleteClickHandler = async () => { setIsLoading(true); const res = await MarketingApi.delete(initialValues?.id as number); deleteModal.closeModal(); router.push('/marketing'); toast.success(res?.message as string); refresh?.(); setIsLoading(false); }; const confirmationModalApproveClickHandler = async (notes: string) => { setIsLoading(true); const res = await SalesOrderApi.singleApproval( initialValues?.id as number, approvalAction, notes ); setIsLoading(false); confirmationModal.closeModal(); toast.success(res?.message as string); refresh?.(); refreshApproval?.(); }; const confirmationModalDeliveryClickHandler = async (notes: string) => { setIsLoading(true); const res = await SalesOrderApi.delivery( initialValues?.id as number, notes ); setIsLoading(false); deliveryModal.closeModal(); toast.success(res?.message as string); refresh?.(); refreshApproval?.(); router.push( `/marketing/detail/delivery-orders/edit?marketingId=${initialValues?.id}` ); }; const approval = initialValues?.latest_approval; const isRejected = approval?.action == 'REJECTED'; const isApproved = approval?.action == 'APPROVED'; return ( <>
| No. Sales Order | : | {initialValues?.so_number} |
| No. Delivery Order | : | {initialValues?.delivery_order ?.map((item) => item.do_number) .join(', ')} |
| Nama Pelanggan | : | {initialValues?.customer?.name} |
| Status | : |
|
| Tanggal Penjualan | : | {formatDate(initialValues?.so_date, 'DD MMM yyyy')} |
| Total Penjualan | : | {formatCurrency(grandTotal as number)} |
| Catatan | : | {initialValues?.notes ?? '-'} |
| Dokumen Penjualan | : |
|
| Dokumen Pengiriman | : |
{initialValues?.delivery_order?.map((item, index) => (
|