public function exportarExcel()
 {
     $this->temPermissaoConsultar();
     $producaoModel = new ModelProducao();
     $produtoProducaoDAO = new ProdutoProducaoDAO();
     $produtoModel = new ModelProduto();
     $produtoDAO = new ProdutoDAO();
     $producaoModel->set('ativo', 1);
     $retornoFiltros = $this->filtrarProducao($producaoModel);
     $producoes = $this->producaoDAO->consultarPorPermissao($retornoFiltros['objeto']);
     $produtoModel->set('ativo', 1);
     $produtos = $produtoDAO->consultar($produtoModel);
     if ($producoes) {
         require LIBS . 'PHPExcel/Classes/PHPExcel.php';
         $phpExcel = new PHPExcel();
         $phpExcel->getProperties()->setCreator(ControleSessao::$nome_usuario)->setTitle('ProduçãoEmitidaEm-' . date('dd-mm-YYYY-HH-ii-ss'));
         $phpExcel->setActiveSheetIndex(0)->setCellValue('A1', 'Nome Base')->setCellValue('B1', 'Cod. Agência')->setCellValue('C1', 'Agência de Produção')->setCellValue('D1', 'Matrícula Orientador')->setCellValue('E1', 'Orientador')->setCellValue('F1', 'Matrícula Supervisor')->setCellValue('G1', 'Supervisor')->setCellValue('H1', 'Regional')->setCellValue('I1', 'Nome Cliente')->setCellValue('J1', 'CPF / CNPJ')->setCellValue('K1', 'Endereço')->setCellValue('L1', 'Complemento')->setCellValue('M1', 'Bairro')->setCellValue('N1', 'CEP')->setCellValue('O1', 'Cidade')->setCellValue('P1', 'UF')->setCellValue('Q1', 'Tipo de endereço')->setCellValue('R1', 'DDD Residencial')->setCellValue('S1', 'Telefone Residencial')->setCellValue('T1', 'DDD Comercial')->setCellValue('U1', 'Telefone Comercial')->setCellValue('V1', 'Data Assinatura Contrato')->setCellValue('W1', 'Tipo de Produto')->setCellValue('X1', 'Modalidade')->setCellValue('Y1', 'Status Contrato')->setCellValue('Z1', 'Status da Visita de Orientacao')->setCellValue('AA1', 'Motivo da não orientação')->setCellValue('AB1', 'Valor Solicitado')->setCellValue('AC1', 'Valor Concedido')->setCellValue('AD1', 'Qtd de Parcelas')->setCellValue('AE1', 'Dia do Vencimento')->setCellValue('AF1', 'Tipo de Aval')->setCellValue('AG1', 'Data da Última Parcela')->setCellValue('AH1', 'Origem do Cliente');
         $x = 2;
         foreach ($producoes as $producao) {
             $produtoProducaoModel = new ModelProdutoProducao();
             $produtoProducaoModel->set('id_producao', $producao->get('id_producao'));
             $produtosProducao = $produtoProducaoDAO->consultarProdutoProducao($produtoProducaoModel);
             if ($produtosProducao) {
                 //CASO ENTRE ou RETIRE ALGUM ITEM NA LINHA ACIMA, ALTERAR AQUI TAMBÉM.
                 if ($produtos) {
                     $p = 'I';
                     $c = 'J';
                     foreach ($produtos as $produto) {
                         $phpExcel->setActiveSheetIndex(0)->setCellValue('A' . $p . '1', 'Produto - ' . $produto->get('nome'))->setCellValue('A' . $c . '1', 'Número Contrato - ' . $produto->get('nome'));
                         foreach ($produtosProducao as $prodProd) {
                             $p1 = $p;
                             $c1 = $c;
                             if ($produto->get('id') == $prodProd->get('id_produto')) {
                                 $phpExcel->setActiveSheetIndex(0)->setCellValue('A' . $p1 . $x, $prodProd->get('nome_produto'))->setCellValue('A' . $c1 . $x, $prodProd->get('numero_contrato'));
                             } else {
                                 $p1++;
                                 $c1++;
                             }
                         }
                         $p++;
                         $p++;
                         $c++;
                         $c++;
                         $p1++;
                         $p1++;
                         $c1++;
                         $c1++;
                     }
                 }
             }
             $phpExcel->setActiveSheetIndex(0)->setCellValue('A' . $x, $producao->get('nome_centro_base'))->setCellValue('B' . $x, $producao->get('codigo_agencia_producao'))->setCellValue('C' . $x, $producao->get('nome_agencia_producao'))->setCellValue('D' . $x, $producao->get('mat_orientador'))->setCellValue('E' . $x, $producao->get('nome_orientador'))->setCellValue('F' . $x, $producao->get('mat_supervisor'))->setCellValue('G' . $x, $producao->get('nome_supervisor'))->setCellValue('H' . $x, $producao->get('nome_centro_regional'))->setCellValue('I' . $x, $producao->get('nome_cliente'));
             if ($producao->get('cpf')) {
                 $phpExcel->setActiveSheetIndex(0)->setCellValue('J' . $x, formataCPF($producao->get('cpf')));
             } elseif ($producao->get('cnpj')) {
                 $phpExcel->setActiveSheetIndex(0)->setCellValue('J' . $x, formataCNPJ($producao->get('cnpj')));
             }
             $phpExcel->setActiveSheetIndex(0)->setCellValue('K' . $x, $producao->get('endereco'))->setCellValue('L' . $x, $producao->get('complemento'))->setCellValue('M' . $x, $producao->get('bairro'))->setCellValue('N' . $x, mask($producao->get('cep'), '#####-###'))->setCellValue('O' . $x, $producao->get('cidade'))->setCellValue('P' . $x, $producao->get('nome_uf'))->setCellValue('Q' . $x, $this->retornarTipoEndereco($producao->get('id_tipo_endereco')))->setCellValue('R' . $x, substr($producao->get('telefone'), 0, 2))->setCellValue('S' . $x, substr($producao->get('telefone'), 2))->setCellValue('T' . $x, substr($producao->get('telefone_comercial'), 0, 2))->setCellValue('U' . $x, substr($producao->get('telefone_comercial'), 2))->setCellValue('V' . $x, formatDataWEB($producao->get('data_assinatura_contrato')))->setCellValue('W' . $x, $producao->get('tipo_mpo'))->setCellValue('X' . $x, $producao->get('nome_modalidade'))->setCellValue('Y' . $x, $producao->get('nome_status_contrato'))->setCellValue('Z' . $x, $producao->get('status_visita_orientacao') ? $producao->get('status_visita_orientacao') : null)->setCellValue('AA' . $x, $producao->get('motivo_nao_orientacao') ? $producao->get('motivo_nao_orientacao') : null)->setCellValue('AB' . $x, $producao->get('valor_solicitado') ? 'R$ ' . number_format($producao->get('valor_solicitado'), 2, ',', '.') : null)->setCellValue('AC' . $x, $producao->get('valor_aprovado') ? 'R$ ' . number_format($producao->get('valor_aprovado'), 2, ',', '.') : null)->setCellValue('AD' . $x, $producao->get('qtd_parcelas'))->setCellValue('AE' . $x, $producao->get('dia_vencimento'))->setCellValue('AF' . $x, $producao->get('nome_tipo_aval'))->setCellValue('AG' . $x, formatDataWEB($producao->get('data_ultima_parcela')))->setCellValue('AH' . $x, $producao->get('nome_origem_cliente'));
             $x++;
         }
         //_debug('die', 1);
         $phpExcel->getActiveSheet()->setTitle('Produção');
         $phpExcel->setActiveSheetIndex(0);
         header('Content-Type: application/vnd.ms-excel');
         header('Content-Disposition: attachment;filename="01simple.xls"');
         header('Cache-Control: max-age=0');
         header('Cache-Control: max-age=1');
         header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
         // Date in the past
         header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
         // always modified
         header('Cache-Control: cache, must-revalidate');
         // HTTP/1.1
         header('Pragma: public');
         // HTTP/1.0
         $objWriter = PHPExcel_IOFactory::createWriter($phpExcel, 'Excel5');
         $objWriter->save('php://output');
     }
 }
 public function validarNumeroContrato()
 {
     $arrNumerosContrato = $this->params['numero_contrato'];
     $erroEmTipoMPO = $this->validarTipoMPO($arrNumerosContrato);
     $codigos_produtos = Constantes::$cod_produto;
     if ($this->codigos_produtos) {
         $codigos_produtos = $this->codigos_produtos;
     }
     if (is_array($arrNumerosContrato) && count(array_filter($arrNumerosContrato)) <= 0) {
         $this->erro++;
         $this->msg .= "Selecione pelo menos um número de contrato.<br>";
     } elseif ($produtos = $this->validarProdutosUnicos()) {
         $this->erro++;
         foreach ($produtos as $produto) {
             $produtoMsg[] = $produto->get('numero_contrato') . " (<a href='" . SITE . "Producao_Cadastro/index/" . $produto->get('id') . "' target='_bank'>clique aqui para editar</a>)";
         }
         $this->msg .= "O(s) produto(s) " . implode(', ', $produtoMsg) . " já consta(m) na base de dados.<br>";
     } else {
         if ($contratosDuplicados = $this->verificarDuplicidadeArray()) {
             $this->erro++;
             foreach ($contratosDuplicados as $contrato) {
                 $produtoMsg[] = $contrato;
             }
             $this->msg .= "O(s) produto(s) " . implode(', ', $produtoMsg) . " foi digitado mais de uma vez para essa produção.<br>";
         } else {
             if (!$erroEmTipoMPO) {
                 $produtoDao = new ProdutoDAO();
                 $produtoModel = new ModelProduto();
                 foreach ($arrNumerosContrato as $i => $contrato) {
                     if (isset($arrNumerosContrato[$i]) && $arrNumerosContrato[$i] != "") {
                         $produtoModel->set('id', $i);
                         $produto = $produtoDao->consultar($produtoModel);
                         if ($produto) {
                             $produto = $produto[0];
                             $regex = Constantes::$regex_produtos[$produto->get('id')];
                             if (strpos($regex, '|cod_produto|') === false) {
                                 if (!validaSeguro($contrato)) {
                                     $this->erro++;
                                     $this->msg .= "O número do contrato <b>" . $produto->get('nome') . ": " . $contrato . "</b> apresentou divergência. Por favor, revise o número digitado.<br>";
                                 } else {
                                     $regex = str_replace('|agencia_producao|', $this->params['agencia_producao'], $regex);
                                     $regex = str_replace('|cod_produto_seguro|', implode('|', Constantes::$cod_produtos_seguro), $regex);
                                     $testeNumeroContrato = preg_match('/' . $regex . '/', $contrato, $matches);
                                     if ($testeNumeroContrato === 0 || $testeNumeroContrato === false) {
                                         $this->erro++;
                                         $this->msg .= "O número do contrato <b>" . $produto->get('nome') . ": " . $contrato . "</b> apresentou divergência. Por favor, revise o número digitado.<br>";
                                     }
                                 }
                             } else {
                                 if (!validaMPOouGCO($contrato)) {
                                     $this->erro++;
                                     $this->msg .= "O número do contrato <b>" . $produto->get('nome') . ": " . $contrato . "</b> apresentou divergência. Por favor, revise o número digitado.<br>";
                                 } else {
                                     $regex = str_replace('|agencia_producao|', $this->params['agencia_producao'], $regex);
                                     $regex = str_replace('|cod_produto|', implode('|', $codigos_produtos), $regex);
                                     $testeNumeroContrato = preg_match('/' . $regex . '/', $contrato, $matches);
                                     if ($testeNumeroContrato === 0 || $testeNumeroContrato === false) {
                                         $this->erro++;
                                         $this->msg .= "O número do contrato  <b>" . $produto->get('nome') . " </b> apresentou divergência. Por favor, revise o número digitado.<br>";
                                     }
                                 }
                             }
                         } else {
                             $this->erro++;
                             $this->msg .= "Um dos produtos informados, não foi encontrado na base.";
                             break;
                         }
                     }
                 }
             }
         }
     }
 }