TransWar File Browser

Path: C:\

<?php
require_once __DIR__ . '/includes/functions.php';

$movimentacoes = load_json('movimentacoes.json');
$produtosMap = get_produtos_map();

$clienteDocFilter = trim($_GET['cliente_documento'] ?? '');
$dataInicio = trim($_GET['data_inicio'] ?? '');
$dataFim = trim($_GET['data_fim'] ?? '');

// Filtrar movimentações por cliente se informado
if (!empty($clienteDocFilter)) {
    $movimentacoes = array_filter($movimentacoes, function($m) use ($clienteDocFilter) {
        $doc = !empty($m['destinatario_documento']) ? $m['destinatario_documento'] : 'GERAL';
        return $doc === $clienteDocFilter;
    });
}

// Filtrar movimentações por data se informado
if (!empty($dataInicio) || !empty($dataFim)) {
    $movimentacoes = array_filter($movimentacoes, function($m) use ($dataInicio, $dataFim) {
        $d = $m['data_emissao'] ?? '';
        if (!empty($dataInicio) && $d < $dataInicio) return false;
        if (!empty($dataFim) && $d > $dataFim) return false;
        return true;
    });
}

// Ordenar por data em ordem cronológica
usort($movimentacoes, function($a, $b) {
    return strcmp($a['data_emissao'] ?? '', $b['data_emissao'] ?? '');
});

$filename = 'fechamento_armazenagem_' . date('Ymd_His') . '.csv';

header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename="' . $filename . '"');
header('Pragma: no-cache');
header('Expires: 0');

$output = fopen('php://output', 'w');

// UTF-8 BOM para Excel
fprintf($output, chr(0xEF).chr(0xBB).chr(0xBF));

// Cabeçalho CSV
fputcsv($output, [
    'Data Emissao',
    'Numero NF',
    'Chave NFe',
    'CNPJ/CPF Destinatario',
    'Nome Destinatario',
    'Codigo Produto',
    'Nome Produto',
    'Quantidade Pecas',
    'Fator Palete',
    'Paletes Exatos',
    'Posicoes Paletes Ceil',
    'Valor Item (RS)',
    'Valor Total NF (RS)'
], ';');

foreach ($movimentacoes as $mov) {
    $dataEmissao = !empty($mov['data_emissao']) ? date('d/m/Y', strtotime($mov['data_emissao'])) : '';
    $numeroNfe = $mov['numero_nfe'] ?? '';
    $chaveNfe = $mov['chave_nfe'] ?? '';
    $destDoc = !empty($mov['destinatario_documento']) ? $mov['destinatario_documento'] : 'GERAL';
    $destNome = !empty($mov['destinatario_nome']) ? $mov['destinatario_nome'] : 'Cliente Não Informado';
    $valorNfe = number_format((float)($mov['valor_nfe'] ?? 0), 2, ',', '.');

    if (!empty($mov['itens']) && is_array($mov['itens'])) {
        foreach ($mov['itens'] as $item) {
            $codigo = $item['codigo'] ?? '';
            $nome = $item['nome'] ?? '';
            $qtd = (float)($item['quantidade'] ?? 0);
            $vTotItem = (float)($item['valor_total'] ?? 0);

            // Buscar Fator Palete por cliente_documento|codigo ou fallback codigo
            $compositeKey = $destDoc . '|' . $codigo;
            $fator = null;
            if (isset($produtosMap[$compositeKey])) {
                $fator = $produtosMap[$compositeKey]['fator_palete'];
            } elseif (isset($produtosMap[$codigo])) {
                $fator = $produtosMap[$codigo]['fator_palete'];
            }

            $calc = calculate_item_pallets($qtd, $fator);

            fputcsv($output, [
                $dataEmissao,
                $numeroNfe,
                $chaveNfe,
                $destDoc,
                $destNome,
                $codigo,
                $nome,
                number_format($qtd, 2, ',', '.'),
                $calc['has_fator'] ? number_format((float)$fator, 2, ',', '.') : 'PENDENTE',
                number_format($calc['exato'], 2, ',', '.'),
                $calc['ceil'],
                number_format($vTotItem, 2, ',', '.'),
                $valorNfe
            ], ';');
        }
    }
}

fclose($output);
exit;