import { DataTableColumnHeader } from '@/components/data-table-column-header'; import { Badge } from '@/components/ui/badge'; import { Button } from '@/components/ui/button'; import { Tooltip, TooltipContent, TooltipTrigger, } from '@/components/ui/tooltip'; import { usePermission } from '@/hooks/use-permission'; import * as orderRoutes from '@/routes/order'; import type { Order } from '@/types/order'; import { ORDER_CHANNEL, ORDER_STATUS, PAYMENT_METHOD } from '@/types/order'; import { Link } from '@inertiajs/react'; import type { ColumnDef } from '@tanstack/react-table'; import { FileText, Pencil, Printer, Trash2 } from 'lucide-react'; interface ColumnProps { onDelete: (order: Order) => void; onPrint: (order: Order) => void; } export const getColumns = ({ onDelete, onPrint, }: ColumnProps): ColumnDef[] => [ { accessorKey: 'user.name', header: ({ column }) => ( ), cell: ({ row }) => ( {row.original.user?.name || '-'} ), meta: { title: 'Pegawai' }, }, { accessorKey: 'order_number', header: ({ column }) => ( ), cell: ({ row }) => (
{row.original.order_number} {row.original.created_at_formatted}
), meta: { title: 'No. Order' }, }, { accessorKey: 'customer_name', header: ({ column }) => ( ), cell: ({ row }) => (
{row.original.customer_name} {ORDER_CHANNEL[row.original.order_channel] || row.original.order_channel}
), meta: { title: 'Pelanggan' }, }, { accessorKey: 'cogs', header: ({ column }) => ( ), cell: ({ row }) => ( {row.original.cogs_formatted} ), meta: { title: 'Modal' }, }, { accessorKey: 'items', header: ({ column }) => ( ), cell: ({ row }) => { const items = row.original.items; if (!items || !Array.isArray(items) || items.length === 0) { return ( - ); } return (
{items.slice(0, 2).map((item, i) => (
{item.product?.name}: {' '} {item.qty} x {item.price_formatted}
))} {items.length > 2 && ( +{items.length - 2} item lainnya... )}
); }, meta: { title: 'Item' }, }, { accessorKey: 'total', header: ({ column }) => ( ), cell: ({ row }) => { const order = row.original; return (
Subtotal: {order.subtotal_formatted}
Potongan: - {order.discount_formatted}
Total Tagihan: {order.total_formatted}
Dibayar ({PAYMENT_METHOD[order.payment_method]}): {order.payment_formatted}
{ORDER_STATUS[order.order_status]?.label ?? order.order_status}
); }, meta: { title: 'Total' }, }, { id: 'actions', header: 'Aksi', cell: ({ row }) => { const order = row.original; const { hasPermission } = usePermission(); return (

Invoice

Cetak Struk

{hasPermission('Edit:Order') && (

Ubah

)} {hasPermission('Delete:Order') && (

Hapus

)}
); }, meta: { title: 'Aksi' }, }, ];