import { GridColDef, GridRenderCellParams } from '@mui/x-data-grid-premium'; import Box from '@mui/material/Box'; import Typography from '@mui/material/Typography'; import Chip from '@mui/material/Chip'; import Tooltip from '@mui/material/Tooltip'; import { formatDate, formatDateTime, formatCurrency, formatNumber, } from '../utils/orderFormatters'; import { getStatusChipProps, getPriorityChipProps, } from '../utils/tableHelpers'; interface CreateOrderColumnsOptions { storesMap?: Map; } export const createOrderColumns = (options?: CreateOrderColumnsOptions): GridColDef[] => { const storesMap = options?.storesMap; return [ { field: 'orderId', headerName: 'Pedido', width: 120, minWidth: 100, headerAlign: 'right', align: 'right', renderCell: (params: Readonly) => ( {params.value} ), }, { field: 'createDate', headerName: 'Data', width: 160, minWidth: 140, renderCell: (params: Readonly) => { const dateTime = formatDateTime(params.value); return ( {formatDate(params.value)} {dateTime && ( {dateTime} )} ); }, }, { field: 'customerName', headerName: 'Cliente', width: 300, minWidth: 250, flex: 1, renderCell: (params: Readonly) => ( {params.value} ), }, { field: 'storeId', headerName: 'Filial', width: 200, minWidth: 180, renderCell: (params: Readonly) => { const storeId = String(params.value); const storeName = storesMap?.get(storeId) || storeId; return ( {storeName} ); }, }, { field: 'store', headerName: 'Supervisor', width: 200, minWidth: 180, renderCell: (params: Readonly) => ( {params.value} ), }, { field: 'status', headerName: 'Situação', width: 180, minWidth: 160, renderCell: (params: Readonly) => { const status = params.value as string; const chipProps = getStatusChipProps(status); return ( ); }, }, { field: 'orderType', headerName: 'Tipo', width: 140, minWidth: 120, renderCell: (params: Readonly) => ( {params.value} ), }, { field: 'amount', headerName: 'Valor Total', width: 130, minWidth: 120, type: 'number', aggregable: true, headerAlign: 'right', align: 'right', valueFormatter: (value) => formatCurrency(value as number), renderCell: (params: Readonly) => ( {formatCurrency(params.value)} ), }, { field: 'invoiceNumber', headerName: 'Nota Fiscal', width: 120, minWidth: 110, headerAlign: 'right', align: 'right', renderCell: (params: Readonly) => ( {params.value && params.value !== '-' ? params.value : '-'} ), }, { field: 'billingId', headerName: 'Cobrança', width: 120, minWidth: 110, renderCell: (params: Readonly) => ( {params.value || '-'} ), }, { field: 'sellerName', headerName: 'Vendedor', width: 200, minWidth: 180, renderCell: (params: Readonly) => ( {params.value} ), }, { field: 'deliveryType', headerName: 'Tipo de Entrega', width: 160, minWidth: 140, renderCell: (params: Readonly) => ( {params.value} ), }, { field: 'totalWeight', headerName: 'Peso (kg)', width: 100, minWidth: 90, type: 'number', aggregable: true, headerAlign: 'right', align: 'right', valueFormatter: (value) => formatNumber(value as number), renderCell: (params: Readonly) => ( {formatNumber(params.value)} ), }, { field: 'fatUserName', headerName: 'Usuário Faturou', width: 160, minWidth: 140, renderCell: (params: Readonly) => ( {params.value} ), }, { field: 'customerId', headerName: 'Código Cliente', width: 120, minWidth: 110, headerAlign: 'right', align: 'right', renderCell: (params: Readonly) => ( {params.value || '-'} ), }, { field: 'deliveryDate', headerName: 'Data Entrega', width: 130, minWidth: 120, renderCell: (params: Readonly) => ( {params.value ? formatDate(params.value) : '-'} ), }, { field: 'deliveryLocal', headerName: 'Local Entrega', width: 180, minWidth: 160, renderCell: (params: Readonly) => ( {params.value} ), }, { field: 'deliveryPriority', headerName: 'Prioridade', width: 120, minWidth: 110, renderCell: (params: Readonly) => { const priority = params.value; const chipProps = getPriorityChipProps(priority); if (!chipProps) { return ( - ); } return ( ); }, }, { field: 'invoiceDate', headerName: 'Data Faturamento', width: 150, minWidth: 140, renderCell: (params: Readonly) => { const dateStr = formatDate(params.value); const timeStr = params.row.invoiceTime; return ( {dateStr} {timeStr && ( {timeStr} )} ); }, }, { field: 'invoiceTime', headerName: 'Hora Faturamento', width: 120, minWidth: 110, renderCell: (params: Readonly) => ( {params.value || '-'} ), }, { field: 'confirmDeliveryDate', headerName: 'Data Confirmação Entrega', width: 150, minWidth: 140, renderCell: (params: Readonly) => ( {params.value ? formatDate(params.value) : '-'} ), }, { field: 'paymentName', headerName: 'Pagamento', width: 140, minWidth: 130, renderCell: (params: Readonly) => ( {params.value} ), }, { field: 'sellerId', headerName: 'RCA', width: 100, minWidth: 90, headerAlign: 'right', align: 'right', renderCell: (params: Readonly) => ( {params.value || '-'} ), }, { field: 'partnerName', headerName: 'Parceiro', width: 180, minWidth: 160, renderCell: (params: Readonly) => ( {params.value} ), }, { field: 'codusur2Name', headerName: 'RCA 2', width: 180, minWidth: 160, renderCell: (params: Readonly) => ( {params.value} ), }, { field: 'schedulerDelivery', headerName: 'Agendamento', width: 160, minWidth: 140, renderCell: (params: Readonly) => ( {params.value} ), }, { field: 'emitenteNome', headerName: 'Emitente', width: 180, minWidth: 160, renderCell: (params: Readonly) => ( {params.value} ), }, ]; };