diff --git a/src/app/DRE/analitico.tsx b/src/app/DRE/analitico.tsx index 87ffd69..d6d6d1c 100644 --- a/src/app/DRE/analitico.tsx +++ b/src/app/DRE/analitico.tsx @@ -51,6 +51,7 @@ interface AnaliticoItem { codigo_conta: string; conta: string; codigo_centrocusto: string; + centro_custo?: string; valor: number; historico: string; historico2: string; @@ -65,6 +66,10 @@ interface AnaliticoItem { numero_lancamento?: number; ano_mes_comp?: string; codgrupo?: string; + // Novos campos + data_lancamento?: string; + data_compensacao?: string; + data_pagto?: string; } interface AnaliticoProps { @@ -397,9 +402,14 @@ export default function AnaliticoComponent({ filtros }: AnaliticoProps) { console.log('✅ Resposta da API recebida:', result.length, 'registros'); console.log('📝 Primeiros 2 registros:', result.slice(0, 2)); console.log('🔍 Verificando campos específicos:', { + data_lancamento: result[0]?.data_lancamento, + data_compensacao: result[0]?.data_compensacao, data_vencimento: result[0]?.data_vencimento, data_caixa: result[0]?.data_caixa, + data_pagto: result[0]?.data_pagto, entidade: result[0]?.entidade, + tipo_parceiro: result[0]?.tipo_parceiro, + centro_custo: result[0]?.centro_custo, valor: result[0]?.valor, tipo_valor: typeof result[0]?.valor }); @@ -457,38 +467,74 @@ export default function AnaliticoComponent({ filtros }: AnaliticoProps) { ); }, [data, filteredData, columnFilters, columnSorts, handleColumnFilterChange, handleColumnSortChange]); - // Definir colunas do DataGridPro + // Definir colunas do DataGridPro na ordem solicitada const columns = React.useMemo(() => { + const dateCellRenderer = (params: any) => { + if (!params.value) return "-"; + try { + return new Date(params.value).toLocaleDateString("pt-BR"); + } catch (error) { + return params.value; + } + }; + + const currencyCellRenderer = (params: any, showZero: boolean = false) => { + const value = params.value; + if (value === null || value === undefined || value === "") return "-"; + if (!showZero && value === 0) return "-"; + const numValue = typeof value === "string" ? parseFloat(value) : Number(value); + if (isNaN(numValue)) return "-"; + const formatted = new Intl.NumberFormat("pt-BR", { + style: "currency", + currency: "BRL", + }).format(numValue); + return ( + + {formatted} + + ); + }; + const baseColumns = [ + { + field: "data_lancamento", + headerName: "Dt Lanc", + width: 120, + sortable: true, + resizable: true, + renderCell: dateCellRenderer, + }, + { + field: "data_compensacao", + headerName: "Dt Comp", + width: 120, + sortable: true, + resizable: true, + renderCell: dateCellRenderer, + }, { field: "data_vencimento", headerName: "Dt Venc", - width: 150, + width: 120, sortable: true, resizable: true, - renderCell: (params: any) => { - if (!params.value) return "-"; - try { - return new Date(params.value).toLocaleDateString("pt-BR"); - } catch (error) { - return params.value; - } - }, + renderCell: dateCellRenderer, }, { field: "data_caixa", headerName: "Dt Caixa", - width: 130, + width: 120, sortable: true, resizable: true, - renderCell: (params: any) => { - if (!params.value) return "-"; - try { - return new Date(params.value).toLocaleDateString("pt-BR"); - } catch (error) { - return params.value; - } - }, + renderCell: dateCellRenderer, + }, + { + field: "data_pagto", + headerName: "Dt Pagto", + width: 120, + sortable: true, + resizable: true, + renderCell: dateCellRenderer, }, { field: "entidade", @@ -498,10 +544,18 @@ export default function AnaliticoComponent({ filtros }: AnaliticoProps) { resizable: true, renderCell: (params: any) => params.value || "-", }, + { + field: "tipo_parceiro", + headerName: "Tipo Parc", + width: 120, + sortable: true, + resizable: true, + renderCell: (params: any) => params.value || "-", + }, { field: "codigo_fornecedor", headerName: "Cod.Fornec", - width: 140, + width: 120, sortable: true, resizable: true, }, @@ -515,15 +569,24 @@ export default function AnaliticoComponent({ filtros }: AnaliticoProps) { }, { field: "codigo_centrocusto", - headerName: "C Custo", - width: 130, + headerName: "Cod.CC", + width: 100, sortable: true, resizable: true, }, + { + field: "centro_custo", + headerName: "Centro Custo", + flex: 1, + minWidth: 200, + sortable: true, + resizable: true, + renderCell: (params: any) => params.value || "-", + }, { field: "codigo_conta", headerName: "Cod.Conta", - width: 150, + width: 120, sortable: true, resizable: true, }, @@ -535,97 +598,41 @@ export default function AnaliticoComponent({ filtros }: AnaliticoProps) { sortable: true, resizable: true, }, - { - field: "valor", - headerName: "Vl.Realizado", - type: "number" as const, - width: 140, - sortable: true, - resizable: true, - renderCell: (params: any) => { - const value = params.value; - if (value === null || value === undefined || value === "") return "-"; - const numValue = typeof value === "string" ? parseFloat(value) : Number(value); - if (isNaN(numValue)) return "-"; - const formatted = new Intl.NumberFormat("pt-BR", { - style: "currency", - currency: "BRL", - }).format(numValue); - return ( - - {formatted} - - ); - }, + { + field: "valor", + headerName: "Vl.Realizado", + type: "number" as const, + width: 140, + sortable: true, + resizable: true, + renderCell: (params: any) => currencyCellRenderer(params, true), }, - { - field: "valor_previsto", - headerName: "Vl.Previsto", - type: "number" as const, - width: 130, - sortable: true, - resizable: true, - renderCell: (params: any) => { - const value = params.value; - if (value === null || value === undefined || value === "" || value === 0) return "-"; - const numValue = typeof value === "string" ? parseFloat(value) : Number(value); - if (isNaN(numValue)) return "-"; - const formatted = new Intl.NumberFormat("pt-BR", { - style: "currency", - currency: "BRL", - }).format(numValue); - return ( - - {formatted} - - ); - }, + { + field: "valor_previsto", + headerName: "Vl.Previsto", + type: "number" as const, + width: 130, + sortable: true, + resizable: true, + renderCell: (params: any) => currencyCellRenderer(params, false), }, - { - field: "valor_confirmado", - headerName: "Vl.Confirmado", - type: "number" as const, - width: 140, - sortable: true, - resizable: true, - renderCell: (params: any) => { - const value = params.value; - if (value === null || value === undefined || value === "" || value === 0) return "-"; - const numValue = typeof value === "string" ? parseFloat(value) : Number(value); - if (isNaN(numValue)) return "-"; - const formatted = new Intl.NumberFormat("pt-BR", { - style: "currency", - currency: "BRL", - }).format(numValue); - return ( - - {formatted} - - ); - }, + { + field: "valor_confirmado", + headerName: "Vl.Confirmado", + type: "number" as const, + width: 140, + sortable: true, + resizable: true, + renderCell: (params: any) => currencyCellRenderer(params, false), }, - { - field: "valor_pago", - headerName: "Vl.Pago", - type: "number" as const, - width: 130, - sortable: true, - resizable: true, - renderCell: (params: any) => { - const value = params.value; - if (value === null || value === undefined || value === "" || value === 0) return "-"; - const numValue = typeof value === "string" ? parseFloat(value) : Number(value); - if (isNaN(numValue)) return "-"; - const formatted = new Intl.NumberFormat("pt-BR", { - style: "currency", - currency: "BRL", - }).format(numValue); - return ( - - {formatted} - - ); - }, + { + field: "valor_pago", + headerName: "Vl.Pago", + type: "number" as const, + width: 120, + sortable: true, + resizable: true, + renderCell: (params: any) => currencyCellRenderer(params, false), }, { field: "historico", @@ -646,7 +653,7 @@ export default function AnaliticoComponent({ filtros }: AnaliticoProps) { { field: "numero_lancamento", headerName: "Num.Lanc", - width: 80, + width: 100, sortable: true, resizable: true, renderCell: (params: any) => params.value || "-", @@ -740,25 +747,36 @@ export default function AnaliticoComponent({ filtros }: AnaliticoProps) { if (sortedAndFilteredData.length === 0) return; const exportData = sortedAndFilteredData.map((item) => ({ - "Data Vencimento": item.data_vencimento + "DTLANC": item.data_lancamento + ? new Date(item.data_lancamento).toLocaleDateString("pt-BR") + : "-", + "DTCOMPENSACAO": item.data_compensacao + ? new Date(item.data_compensacao).toLocaleDateString("pt-BR") + : "-", + "DTVENC": item.data_vencimento ? new Date(item.data_vencimento).toLocaleDateString("pt-BR") : "-", - "Data Caixa": item.data_caixa + "DTCAIXA": item.data_caixa ? new Date(item.data_caixa).toLocaleDateString("pt-BR") : "-", - "Entidade": item.entidade || "-", - "Código Fornecedor": item.codigo_fornecedor || "-", - "Fornecedor": item.nome_fornecedor || "-", - "Código Centro Custo": item.codigo_centrocusto || "-", - "Código Conta": item.codigo_conta || "-", - "Conta": item.conta || "-", - "Valor Realizado": typeof item.valor === "string" ? parseFloat(item.valor) : (item.valor || 0), - "Valor Previsto": typeof item.valor_previsto === "string" ? parseFloat(item.valor_previsto) : (item.valor_previsto || 0), - "Valor Confirmado": typeof item.valor_confirmado === "string" ? parseFloat(item.valor_confirmado) : (item.valor_confirmado || 0), - "Valor Pago": typeof item.valor_pago === "string" ? parseFloat(item.valor_pago) : (item.valor_pago || 0), - "Histórico": item.historico || "-", - "Histórico 2": item.historico2 || "-", - "Número Lançamento": item.numero_lancamento || "-", + "DTPAGTO": item.data_pagto + ? new Date(item.data_pagto).toLocaleDateString("pt-BR") + : "-", + "ENTIDADE": item.entidade || "-", + "TIPOPARCEIRO": item.tipo_parceiro || "-", + "CODFORNEC": item.codigo_fornecedor || "-", + "FORNECEDOR": item.nome_fornecedor || "-", + "CODIGOCENTROCUSTO": item.codigo_centrocusto || "-", + "CENTROCUSTO": item.centro_custo || "-", + "CODCONTA": item.codigo_conta || "-", + "CONTA": item.conta || "-", + "VLREALIZADO": typeof item.valor === "string" ? parseFloat(item.valor) : (item.valor || 0), + "VLPREVISTO": typeof item.valor_previsto === "string" ? parseFloat(item.valor_previsto) : (item.valor_previsto || 0), + "VLCONFIRMADO": typeof item.valor_confirmado === "string" ? parseFloat(item.valor_confirmado) : (item.valor_confirmado || 0), + "VLPAGO": typeof item.valor_pago === "string" ? parseFloat(item.valor_pago) : (item.valor_pago || 0), + "HISTORICO": item.historico || "-", + "HISTORICO2": item.historico2 || "-", + "NUMLANC": item.numero_lancamento || "-", })); const wb = XLSX.utils.book_new(); @@ -869,9 +887,9 @@ export default function AnaliticoComponent({ filtros }: AnaliticoProps) { )} )} - {data.length > 0 && ( -
+
+ |
Descrição
|
{mesesDisponiveis.map((mes) => (
+ |
{mes}
|
-
+ |
%
|
+ |
Total
|
-
+ |
%
|
|
|---|