TransWar File Browser

Path: C:\

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

$tipoExport = strtolower(trim($_GET['tipo'] ?? 'movimentacoes'));
$clienteDocFilter = trim($_GET['cliente_documento'] ?? '');
$search = trim($_GET['search'] ?? '');
$dataInicio = trim($_GET['data_inicio'] ?? '');
$dataFim = trim($_GET['data_fim'] ?? '');

if ($tipoExport === 'estoque') {
    // -------------------------------------------------------------
    // EXPORTAÇÃO 1: Posição Consolidada de Saldo de Estoque
    // -------------------------------------------------------------
    $estoque = get_estoque_consolidado(!empty($clienteDocFilter) ? $clienteDocFilter : null);

    if (!empty($search)) {
        $estoque = array_filter($estoque, function($item) use ($search) {
            return (stristr($item['codigo'], $search) !== false || stristr($item['nome'], $search) !== false);
        });
    }

    $filename = 'posicao_estoque_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, [
        'CNPJ/CPF Cliente',
        'Codigo SKU',
        'Nome Produto',
        'Fator Palete',
        'Qtd Entradas',
        'Qtd Saidas',
        'Saldo Pecas Estoque',
        'Paletes Exatos Estoque',
        'Posicoes Paletes Ceil Estoque',
        'Status Estoque'
    ], ';');

    foreach ($estoque as $item) {
        $status = ($item['saldo_pecas'] < 0) ? 'ESTOQUE NEGATIVO' : ($item['has_fator'] ? 'OK' : 'PENDENTE FATOR');

        fputcsv($output, [
            $item['cliente_documento'],
            $item['codigo'],
            $item['nome'],
            $item['has_fator'] ? number_format((float)$item['fator_palete'], 2, ',', '.') : 'PENDENTE',
            number_format($item['entradas'], 2, ',', '.'),
            number_format($item['saidas'], 2, ',', '.'),
            number_format($item['saldo_pecas'], 2, ',', '.'),
            number_format($item['paletes_exato'], 2, ',', '.'),
            $item['paletes_ceil'],
            $status
        ], ';');
    }

    fclose($output);
    exit;

} else {
    // -------------------------------------------------------------
    // EXPORTAÇÃO 2: Relatório Diário de Movimentações
    // -------------------------------------------------------------
    $movimentacoes = load_json('movimentacoes.json');
    $produtosMap = get_produtos_map();

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

    // Filtrar por data
    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;
        });
    }

    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');

    fprintf($output, chr(0xEF).chr(0xBB).chr(0xBF));

    fputcsv($output, [
        'Data Emissao',
        'Tipo Movimento',
        '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'])) : '';
        $tipoMov = $mov['tipo'] ?? 'SAIDA';
        $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);

                $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,
                    $tipoMov,
                    $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;
}