import Badge from '@/components/Badge'; import Button from '@/components/Button'; import Card from '@/components/Card'; import { RadioGroup, RadioGroupItem } from '@/components/input/RadioInput'; import Tooltip from '@/components/Tooltip'; import DrawerHeader from '@/components/helper/drawer/DrawerHeader'; import { cn, formatCurrency, formatDate, formatNumber } from '@/lib/helper'; import { ProjectFlock } from '@/types/api/production/project-flock'; import { Icon } from '@iconify/react'; import Link from 'next/link'; import { useRouter } from 'next/navigation'; import { useState } from 'react'; import { useModal } from '@/components/Modal'; import ConfirmationModal from '@/components/modal/ConfirmationModal'; import { ProjectFlockApi } from '@/services/api/production/project-flock'; import { isResponseError, isResponseSuccess } from '@/lib/api-helper'; import toast from 'react-hot-toast'; import useSWR from 'swr'; import RequirePermission from '@/components/helper/RequirePermission'; import ApprovalStepsV2 from '@/components/helper/ApprovalStepsV2'; import { APPROVAL_WORKFLOWS } from '@/config/constant'; import Table from '@/components/Table'; import { ProjectFlockFormConfirmationTableType } from '../form/ProjectFlockForm'; import { ColumnDef } from '@tanstack/react-table'; import StatusBadge from '@/components/helper/StatusBadge'; import { ProjectFlockKandangApi } from '@/services/api/production/project-flock-kandang'; const ProjectFlockDetail = ({ projectFlock, }: { projectFlock: ProjectFlock; }) => { const router = useRouter(); const deleteModal = useModal(); const [isDeleteLoading, setIsDeleteLoading] = useState(false); const [openBudgets, setOpenBudget] = useState(false); const [selectedKandangId, setSelectedKandangId] = useState( null ); const selectedKandang = projectFlock.kandangs?.find( (kandang) => kandang.id === Number(selectedKandangId) ); const { data: projectFlockKandang, isLoading: projectFlockKandangLoading } = useSWR( selectedKandangId ? `${ProjectFlockKandangApi.basePath}/get-detail/${selectedKandangId}` : null, selectedKandangId ? () => ProjectFlockKandangApi.getSingle( Number(selectedKandang?.project_flock_kandang_id) ) : null ); const { data: projectFlockApprovalResponse } = useSWR( projectFlock.id ? ['approval-project-flock', projectFlock.id] : undefined, ([, id]) => ProjectFlockApi.getApprovalLineHistory(Number(id)) ); const projectFlockApproval = isResponseSuccess(projectFlockApprovalResponse) ? projectFlockApprovalResponse.data : undefined; const { data: projectFlockKandangApprovalResponse } = useSWR( selectedKandang?.project_flock_kandang_id ? [ 'approval-project-flock-kandang', selectedKandang?.project_flock_kandang_id, ] : undefined, ([, id]) => ProjectFlockKandangApi.getApprovalLineHistory(Number(id)) ); const projectFlockKandangApproval = isResponseSuccess( projectFlockKandangApprovalResponse ) ? projectFlockKandangApprovalResponse.data : undefined; const confirmationTableColumns: ColumnDef[] = [ { header: 'Label', accessorKey: 'label', enableSorting: false, cell: ({ row }) => { const isSubRow = row.depth > 0; return ( <> {!isSubRow && row.original.label} {isSubRow && (
{row.original.label}
)} ); }, }, { header: 'Value', accessorKey: 'value', enableSorting: false, cell: ({ row }) => row.original.value, }, ]; const confirmationTableData: ProjectFlockFormConfirmationTableType[] = [ { label: 'Tanggal', value: formatDate(projectFlock.created_at, 'DD MMMM YYYY'), }, { label: 'Area', value: projectFlock.area.name ?? '-', }, { label: 'Lokasi', value: projectFlock.location.name ?? '-', }, { label: 'Flock', value: projectFlock.flock_name ?? '-', }, { label: 'Kategori', value: projectFlock.category ?? '-', }, { label: 'Standar Produksi', value: projectFlock.production_standard.name ?? '-', }, { label: 'Periode', value: projectFlock.period ?? '-', }, ]; const confirmationModalDeleteClickHandler = async () => { setIsDeleteLoading(true); const deleteProjectFlockRes = await ProjectFlockApi.delete( projectFlock?.id as number ); if (isResponseSuccess(deleteProjectFlockRes)) { toast.success(deleteProjectFlockRes?.message as string); router.push('/production/project-flock'); } if (isResponseError(deleteProjectFlockRes)) { toast.error(deleteProjectFlockRes?.message as string); } setIsDeleteLoading(false); }; return ( <>
{/* Header */}

Informasi Umum

columns={confirmationTableColumns} data={confirmationTableData} withPagination={false} pageSize={10000} expanded={true} getSubRows={(row) => row.subRows} className={{ headerRowClassName: 'border-b border-base-content/10', bodyRowClassName: 'border-none', bodySubRowClassName: () => 'border-none', bodySubRowColumnClassName: () => 'first:p-0', }} />

Kandang Aktif

{ setOpenBudget(!openBudgets); }} text={ <> {` ${formatCurrency( (projectFlock.project_budgets ?? []).reduce( (acc, curr) => acc + curr.price * curr.qty, 0 ) )}`} } className={{ badge: 'w-fit text-nowrap cursor-pointer' }} />
{/* Card List Project Budgets */} {openBudgets && (projectFlock.project_budgets ?? []).map((budget) => (
{' '} Jenis Produk
{budget?.nonstock?.name}
{' '} Nama Satuan
{budget?.nonstock?.uom?.name}
{' '} Jumlah Pembelian
{formatNumber(budget.qty)}
{' '} Harga Satuan
{formatCurrency(budget.price)}
{' '} Total Harga
{formatCurrency(budget.price * budget.qty)}
))} {/* Card Kandangs */} setSelectedKandangId(e.target.value)} value={selectedKandangId?.toString()} size='md' color='neutral' disabled={projectFlock?.approval?.step_number == 1} > {projectFlock.kandangs?.map((kandang) => (
projectFlock?.approval?.step_number > 1 && setSelectedKandangId(kandang?.id?.toString()) } >
Kapasitas {kandang?.capacity} Ekor
))}
); }; export default ProjectFlockDetail;