diff --git a/src/app/production/chickin/add/kandang/page.tsx b/src/app/production/chickin/add/kandang/page.tsx deleted file mode 100644 index 6f624672..00000000 --- a/src/app/production/chickin/add/kandang/page.tsx +++ /dev/null @@ -1,15 +0,0 @@ -'use client'; - -import { useRouter, useSearchParams } from 'next/navigation'; - -export default function AddChickinKandang() { - const router = useRouter(); - const searchParams = useSearchParams(); - const kandangId = searchParams.get('kandangId'); - - return ( -
-

Tambah Chickin untuk Kandang ID: {kandangId}

-
- ); -} diff --git a/src/app/production/chickin/add/page.tsx b/src/app/production/chickin/add/page.tsx deleted file mode 100644 index 2f68e86c..00000000 --- a/src/app/production/chickin/add/page.tsx +++ /dev/null @@ -1,426 +0,0 @@ -'use client'; - -import Badge from '@/components/Badge'; -import Button from '@/components/Button'; -import Card from '@/components/Card'; -import SelectInput, { OptionType } from '@/components/input/SelectInput'; -import Modal, { useModal } from '@/components/Modal'; -import ConfirmationModal from '@/components/modal/ConfirmationModal'; -import ChickinForm from '@/components/pages/production/chickin/form/ChickinForm'; -import PillBadge from '@/components/PillBadge'; -import Table from '@/components/Table'; -import { isResponseError, isResponseSuccess } from '@/lib/api-helper'; -import { cn } from '@/lib/helper'; -import { ProjectFlockApi } from '@/services/api/production'; -import { useTableFilter } from '@/services/hooks/useTableFilter'; -import { BaseApiResponse } from '@/types/api/api-general'; -import { Kandang } from '@/types/api/master-data/kandang'; -import { ProjectFlock } from '@/types/api/production/project-flock'; -import { ProjectFlockKandang } from '@/types/api/production/project-flock-kandang'; -import { Icon } from '@iconify/react'; -import { useRouter, useSearchParams } from 'next/navigation'; -import { useState } from 'react'; -import { is } from 'react-day-picker/locale'; - -import useSWR from 'swr'; - -const AddChickin = () => { - const router = useRouter(); - const searchParams = useSearchParams(); - const projectFlockId = searchParams.get('projectFlockId'); - - // Tables Props - const { state: tableFilterState } = useTableFilter({ - initial: { search: '' }, - paramMap: { page: 'page', pageSize: 'limit' }, - }); - - // States - const [selectedKandang, setSelectedKandang] = useState( - undefined - ); - const [projectFlockKandang, setProjectFlockKandang] = - useState>(); - const [isLoadingProjectFlockKandang, setIsLoadingProjectFlockKandang] = - useState(false); - const [searchProjectFlock, setSearchProjectFlock] = useState(''); - const [selectedProjectFlock, setSelectedProjectFlock] = - useState(null); - - // Fetch Data - const { data: projectFlock, isLoading: isLoadingProjectFlock } = useSWR( - projectFlockId ?? selectedProjectFlock?.value.toString(), - (id: number) => ProjectFlockApi.getSingle(id) - ); - const { data: listProjectFlock, isLoading: isLoadingListProjectFlock } = - useSWR( - `${ProjectFlockApi.basePath}?${new URLSearchParams({ - search: searchProjectFlock, - }).toString()}`, - ProjectFlockApi.getAllFetcher - ); - - const getProjectFlockKandangUrl = `/kandangs/lookup`; - // Mapping Options - const options = isResponseSuccess(listProjectFlock) - ? listProjectFlock?.data.map((projectFlock) => { - return { - value: projectFlock.id, - label: `${projectFlock?.flock?.name} - Periode ${projectFlock?.period}`, - }; - }) - : []; - - const chickinModal = useModal(); - const alertModal = useModal(); - - // Handle Function - const handleChickinClick = async (kandang: Kandang) => { - setIsLoadingProjectFlockKandang(true); - setSelectedKandang(kandang); - const ProjectFlockKandangRes = await ProjectFlockApi.customRequest< - BaseApiResponse, - 'GET' - >(getProjectFlockKandangUrl, { - method: 'GET', - params: { - project_flock_id: projectFlockId ?? selectedProjectFlock?.value ?? 0, - kandang_id: kandang.id, - }, - }); - if (isResponseSuccess(ProjectFlockKandangRes)) { - setProjectFlockKandang(ProjectFlockKandangRes); - setIsLoadingProjectFlockKandang(false); - if ( - ProjectFlockKandangRes.data.available_quantity && - ProjectFlockKandangRes.data.available_quantity > 0 - ) { - chickinModal.openModal(); - } else { - alertModal.openModal(); - } - } - }; - const handleAfterSubmit = () => { - chickinModal.closeModal(); - router.push('/production/chickin'); - }; - const handleChangeProjectFlock = (val: OptionType | null) => { - setSelectedProjectFlock(val); - if (projectFlockId) { - router.push('/production/chickin/add'); - } - }; - - return ( - <> - <> -
-
-
- -

- Daftar Kandang Project Flock -

-
-
- -
-
- { - setSearchProjectFlock(val); - }} - isLoading={isLoadingListProjectFlock} - value={ - isResponseSuccess(projectFlock) - ? { - label: `${projectFlock.data?.flock?.name}`, - value: projectFlock.data?.id, - } - : undefined - } - onChange={(val) => { - handleChangeProjectFlock(val as OptionType); - }} - isSearchable - isClearable - startAdornment={ - isResponseSuccess(projectFlock) && ( - - Periode {projectFlock.data?.period} - - ) - } - /> -
-
-
- - - emptyContent={ -
- {projectFlockId && isResponseError(projectFlock) ? ( - - {projectFlock.message} - - ) : ( - - Pilih project flock terlebih dahulu... - - )} -
- } - data={isResponseSuccess(projectFlock) ? [projectFlock.data] : []} - columns={[ - { - header: 'Area', - accessorKey: 'area.name', - }, - { - header: 'Lokasi', - accessorKey: 'location.name', - }, - { - header: 'Nama Flock', - accessorKey: 'flock.name', - }, - { - header: 'Kategori', - accessorKey: 'category', - }, - { - header: 'Status', - accessorKey: 'status', - cell: (props) => { - return props.row.original.approval.step_name ? ( - { - switch ( - props.row.original.approval.step_name.toUpperCase() - ) { - case 'AKTIF': - return 'red'; - case 'PENGAJUAN': - return 'green'; - default: - return 'gray'; - } - })()} - content={props.row.original.approval.step_name - .toLowerCase() - .replace(/_/g, ' ') - .replace(/\b\w/g, (char) => char.toUpperCase())} - /> - ) : ( - '-' - ); - }, - }, - { - header: 'Periode', - accessorKey: 'period', - }, - { - header: 'FCR Layer', - accessorKey: 'fcr.name', - }, - ]} - page={undefined} - className={{ - containerClassName: cn({ - 'mb-20': - isResponseSuccess(projectFlock) && - projectFlock.data?.kandangs?.length === 0, - }), - tableWrapperClassName: 'overflow-x-auto min-h-full!', - tableClassName: 'font-inter w-full table-auto min-h-full!', - headerRowClassName: 'border-b border-b-gray-200', - headerColumnClassName: - 'px-6 py-3 text-xs font-semibold text-gray-500 last:flex last:flex-row last:justify-end', - bodyRowClassName: 'border-b border-b-gray-200', - bodyColumnClassName: - 'px-6 py-3 last:flex last:flex-row last:justify-end', - paginationClassName: 'hidden', - }} - /> -
- - - emptyContent={ -
- {projectFlockId && isResponseError(projectFlock) ? ( - - {projectFlock.message} - - ) : ( - - Pilih project flock terlebih dahulu... - - )} -
- } - data={ - isResponseSuccess(projectFlock) - ? projectFlock.data?.kandangs - : [] - } - columns={[ - { - header: '#', - cell: (props) => - tableFilterState.pageSize * (tableFilterState.page - 1) + - props.row.index + - 1, - }, - { - accessorFn: () => - isResponseSuccess(projectFlock) - ? projectFlock.data.area.name - : '', - header: 'Area', - }, - { - accessorFn: () => - isResponseSuccess(projectFlock) - ? projectFlock.data.location.name - : '', - header: 'Lokasi', - }, - { - accessorKey: 'name', - header: 'Kandang', - }, - { - accessorKey: 'capacity', - header: 'Kapasitas', - }, - { - accessorKey: 'pic.name', - header: 'Penanggung Jawab', - }, - { - header: 'Aksi', - cell: (props) => { - return ( - <> - - - ); - }, - }, - ]} - page={undefined} - className={{ - containerClassName: cn({ - 'mb-20': - isResponseSuccess(projectFlock) && - projectFlock.data?.kandangs?.length === 0, - }), - tableWrapperClassName: 'overflow-x-auto min-h-full!', - tableClassName: 'font-inter w-full table-auto min-h-full!', - headerRowClassName: 'border-b border-b-gray-200', - headerColumnClassName: - 'px-6 py-3 text-xs font-semibold text-gray-500 last:flex last:flex-row last:justify-end', - bodyRowClassName: 'border-b border-b-gray-200', - bodyColumnClassName: - 'px-6 py-3 last:flex last:flex-row last:justify-end', - paginationClassName: 'hidden', - }} - /> -
-
- -
-

- Chickin Kandang - {selectedKandang?.name} -

- -
- {isResponseSuccess(projectFlockKandang) && - isResponseSuccess(projectFlock) && - !isLoadingProjectFlockKandang && ( - - )} -
- { - alertModal.closeModal(); - }, - }} - /> - - - ); -}; - -export default AddChickin; diff --git a/src/app/production/chickin/add/kandang/layout.tsx b/src/app/production/project-flock/chickin/add/kandang/layout.tsx similarity index 100% rename from src/app/production/chickin/add/kandang/layout.tsx rename to src/app/production/project-flock/chickin/add/kandang/layout.tsx diff --git a/src/app/production/project-flock/chickin/add/kandang/page.tsx b/src/app/production/project-flock/chickin/add/kandang/page.tsx new file mode 100644 index 00000000..56dfc2db --- /dev/null +++ b/src/app/production/project-flock/chickin/add/kandang/page.tsx @@ -0,0 +1,46 @@ +'use client'; + +import ChickinForm from '@/components/pages/production/chickin/form/ChickinForm'; +import { isResponseSuccess } from '@/lib/api-helper'; +import { ProjectFlockKandangApi } from '@/services/api/production'; +import { useRouter, useSearchParams } from 'next/navigation'; +import useSWR from 'swr'; + +export default function AddChickinKandang() { + const searchParams = useSearchParams(); + const projectFlockKandangId = searchParams.get('projectFlockKandangId'); + const projectFlockId = searchParams.get('projectFlockId'); + const router = useRouter(); + + const { data: projectFlockKandang, isLoading: isLoading } = useSWR( + projectFlockKandangId, + (id: number) => ProjectFlockKandangApi.getSingle(id) + ); + + if (!projectFlockKandangId) { + router.push(`/production/chickin/add?projectFlockId=${projectFlockId}`); + return ( +
+ +
+ ); + } + + if (!isLoading && !projectFlockKandang) { + router.replace('/404'); + return; + } + + return ( + <> +
+ {isLoading && } + {!isLoading && + isResponseSuccess(projectFlockKandang) && + projectFlockId && ( + + )} +
+ + ); +} diff --git a/src/app/production/chickin/add/layout.tsx b/src/app/production/project-flock/chickin/add/layout.tsx similarity index 100% rename from src/app/production/chickin/add/layout.tsx rename to src/app/production/project-flock/chickin/add/layout.tsx diff --git a/src/app/production/project-flock/chickin/add/page.tsx b/src/app/production/project-flock/chickin/add/page.tsx new file mode 100644 index 00000000..3ca09c89 --- /dev/null +++ b/src/app/production/project-flock/chickin/add/page.tsx @@ -0,0 +1,24 @@ +'use client'; + +import { FormHeader } from '@/components/helper/form/FormHeader'; +import ProjectFlockChickinDetail from '@/components/pages/production/project-flock/chickin/ProjectFlockChickinDetail'; +import { useSearchParams } from 'next/navigation'; + +const AddChickin = () => { + const searchParams = useSearchParams(); + const projectFlockId = searchParams.get('projectFlockId'); + + return ( + <> +
+ + +
+ + ); +}; + +export default AddChickin; diff --git a/src/app/production/chickin/detail/layout.tsx b/src/app/production/project-flock/chickin/detail/layout.tsx similarity index 100% rename from src/app/production/chickin/detail/layout.tsx rename to src/app/production/project-flock/chickin/detail/layout.tsx diff --git a/src/app/production/chickin/detail/page.tsx b/src/app/production/project-flock/chickin/detail/page.tsx similarity index 98% rename from src/app/production/chickin/detail/page.tsx rename to src/app/production/project-flock/chickin/detail/page.tsx index be8c5332..d77e5949 100644 --- a/src/app/production/chickin/detail/page.tsx +++ b/src/app/production/project-flock/chickin/detail/page.tsx @@ -312,14 +312,6 @@ const DetailChickin = () => { /> - { - refreshChickin(); - chickinModal.closeModal(); - }} - /> void; } -export const FormHeader = ({ type, title, backUrl }: FormHeaderProps) => { +export const FormHeader = ({ + type, + title, + backUrl, + onBackClick, +}: FormHeaderProps) => { return (
- @@ -18,6 +30,7 @@ export const FormHeader = ({ type, title, backUrl }: FormHeaderProps) => { {type === 'add' && `Tambah ${title}`} {type === 'edit' && `Edit ${title}`} {type === 'detail' && `Detail ${title}`} + {!type && title}
); diff --git a/src/components/pages/marketing/sales-orders/SalesOrderTable.tsx b/src/components/pages/marketing/sales-orders/SalesOrderTable.tsx index eb35e666..c8357e88 100644 --- a/src/components/pages/marketing/sales-orders/SalesOrderTable.tsx +++ b/src/components/pages/marketing/sales-orders/SalesOrderTable.tsx @@ -7,7 +7,8 @@ import { TableRowSizeSelector } from '@/components/table/TableRowSizeSelector'; import { TableToolbar } from '@/components/table/TableToolbar'; import { ROWS_OPTIONS } from '@/config/constant'; import { cn } from '@/lib/helper'; -import { SalesOrder } from '@/types/api/marketing/marketing'; +import { Marketing, MarketingProducts } from '@/types/api/marketing/marketing'; +import { Customer } from '@/types/api/master-data/customer'; import { Icon } from '@iconify/react'; import { CellContext } from '@tanstack/react-table'; import { useCallback, useState } from 'react'; @@ -18,7 +19,7 @@ const RowsOptionsMenu = ({ deleteClickHandler, }: { type: 'dropdown' | 'collapse'; - props: CellContext; + props: CellContext; deleteClickHandler: () => void; }) => { return ( @@ -111,7 +112,59 @@ const SalesOrderTable = () => { /> { header: 'No. Order', }, { - accessorKey: 'tanggal', + accessorKey: 'so_date', header: 'Tanggal', }, { @@ -130,7 +183,7 @@ const SalesOrderTable = () => { header: 'Status', }, { - accessorKey: 'customer', + accessorKey: 'customer.name', header: 'Customer', }, { @@ -138,8 +191,18 @@ const SalesOrderTable = () => { header: 'Grand Total', }, { - accessorKey: 'product_details', + accessorKey: 'marketing_products.length', header: 'Product Details', + cell: (props) => ( +
    + {props.row.original.marketing_products?.map((product) => ( +
  • + {product.product_warehouse.product.name} - Qty:{' '} + {product.qty} +
  • + ))} +
+ ), }, { header: 'Aksi', diff --git a/src/components/pages/production/chickin/ChickinTable.tsx b/src/components/pages/production/chickin/ChickinTable.tsx index cd52c154..db5265c8 100644 --- a/src/components/pages/production/chickin/ChickinTable.tsx +++ b/src/components/pages/production/chickin/ChickinTable.tsx @@ -87,7 +87,7 @@ const ChickinTable = () => {
- { refreshChickins(); chickinModal.closeModal(); }} - /> + /> */} ); @@ -287,7 +287,7 @@ const RowOptionsMenu = ({ return (