public static function saveHistoricoPaciente()
 {
     $HistoricoPacienteTO = new HistoricoPacienteTO();
     $HistoricoPacienteDao = new HistoricoPacienteDao();
     $VendaDao = new VendaDao();
     try {
         $HistoricoPacienteTO->id_paciente = isset($_POST['id_paciente']) ? $_POST['id_paciente'] : NULL;
         $HistoricoPacienteTO->id_usuario = isset($_POST['id_usuario']) ? $_POST['id_usuario'] : NULL;
         $HistoricoPacienteTO->id_profissional = isset($_POST['id_profissional']) ? $_POST['id_profissional'] : NULL;
         $HistoricoPacienteTO->id_acao = isset($_POST['id_acao']) ? $_POST['id_acao'] : NULL;
         $HistoricoPacienteTO->descricao = isset($_POST['descricao']) ? $_POST['descricao'] : NULL;
         $HistoricoPacienteTO->dta = isset($_POST['dta']) ? $_POST['dta'] : NULL;
         $HistoricoPacienteTO->id_empreendimento = isset($_POST['id_empreendimento']) ? $_POST['id_empreendimento'] : NULL;
         $validator = new DataValidator();
         $validator->set_msg('Campo obrigatório')->set('id_usuario', $HistoricoPacienteTO->id_usuario)->is_required();
         $validator->set_msg('Campo obrigatório')->set('id_acao', $HistoricoPacienteTO->id_acao)->is_required();
         $validator->set_msg('Campo obrigatório')->set('id_empreendimento', $HistoricoPacienteTO->id_empreendimento)->is_required();
         if (!$validator->validate()) {
             Flight::response()->status(406)->header('Content-Type', 'application/json')->write(json_encode($validator->get_errors()))->send();
             return;
         }
         $HistoricoPacienteDao->saveHistoricoPaciente($HistoricoPacienteTO);
         Flight::halt(201);
     } catch (Exception $e) {
         jsonException($e, 500);
     }
 }
 public static function read()
 {
     try {
         $Conexao = new Conexao();
         $query = $_GET['query'];
         if (is_array($query)) {
             $dados = array();
             foreach ($query as $key => $value) {
                 $fetchAll = isset($_GET['fetchAll'][$key]) ? strtolower($_GET['fetchAll'][$key]) == 'false' ? false : true : true;
                 $offset = isset($_GET['offset'][$key]) ? $_GET['offset'][$key] : null;
                 $limit = isset($_GET['limit'][$key]) ? $_GET['limit'][$key] : null;
                 $dados[$key] = $Conexao->select($value, $fetchAll, $offset, $limit);
             }
             Flight::json($dados);
         } else {
             $fetchAll = isset($_GET['fetchAll']) ? strtolower($_GET['fetchAll']) == 'false' ? false : true : true;
             $offset = isset($_GET['offset']) ? $_GET['offset'] : null;
             $limit = isset($_GET['limit']) ? $_GET['limit'] : null;
             $dados = $Conexao->select($query, $fetchAll, $offset, $limit);
             Flight::json($dados);
         }
     } catch (Exception $e) {
         $e->sql = $query;
         jsonException($e, 500);
     }
 }
 public static function updateStatus($idNotaFiscal, $id_empreendimento)
 {
     try {
         $NotaFiscalDao = new NotaFiscalDao();
         $ConfiguracaoDao = new ConfiguracaoDao();
         $conf = $ConfiguracaoDao->getConfiguracoes($id_empreendimento);
         $flg_ambiente_nfe = isset($conf['flg_ambiente_nfe']) && ((int) $conf['flg_ambiente_nfe'] == 1 || (int) $conf['flg_ambiente_nfe'] == 0) ? (int) $conf['flg_ambiente_nfe'] : 0;
         $tokens['token_focus_producao'] = isset($conf['token_focus_producao']) ? $conf['token_focus_producao'] : '';
         $tokens['token_focus_homologacao'] = isset($conf['token_focus_homologacao']) ? $conf['token_focus_homologacao'] : '';
         $NfeDao = new NfeDao($flg_ambiente_nfe, $tokens);
         $NfeDao->id_ref = $idNotaFiscal;
         $retornoParceiro = $NfeDao->buscaNfe();
         $nfTO = new stdClass();
         $nfTO->cod_nota_fiscal = $idNotaFiscal;
         $nfTO->status = $retornoParceiro->status;
         $nfTO->status_sefaz = $retornoParceiro->status_sefaz;
         $nfTO->mensagem_sefaz = $retornoParceiro->mensagem_sefaz;
         $nfTO->status_sefaz_cancelamento = isset($retornoParceiro->status_sefaz_cancelamento) ? $retornoParceiro->status_sefaz_cancelamento : NULL;
         $nfTO->mensagem_sefaz_cancelamento = isset($retornoParceiro->mensagem_sefaz_cancelamento) ? $retornoParceiro->mensagem_sefaz_cancelamento : NULL;
         $nfTO->caminho_xml_cancelamento = isset($retornoParceiro->caminho_xml_cancelamento) ? substr($NfeDao->server, 0, -1) . $retornoParceiro->caminho_xml_cancelamento : NULL;
         if ($nfTO->status == 'autorizado') {
             $nfTO->serie = $retornoParceiro->serie;
             $nfTO->numero = $retornoParceiro->numero;
             $nfTO->chave_nfe = $retornoParceiro->chave_nfe;
             $nfTO->caminho_xml_nota_fiscal = substr($NfeDao->server, 0, -1) . $retornoParceiro->caminho_xml_nota_fiscal;
             $nfTO->caminho_danfe = substr($NfeDao->server, 0, -1) . $retornoParceiro->caminho_danfe;
         }
         $NotaFiscalDao->updateNota($nfTO);
         $notaAtualizada = $NotaFiscalDao->getNota($idNotaFiscal);
         Flight::json($notaAtualizada);
     } catch (Exception $e) {
         jsonException($e);
     }
 }
 public static function updateControle()
 {
     try {
         $ControleProteseDao = new ControleProteseDao();
         $where = $_POST['where'];
         $campos = $_POST['campos'];
         $ControleProteseTO = new stdClass();
         foreach ($campos as $key => $value) {
             $ControleProteseTO->{$key} = $value;
         }
         $ControleProteseDao->updateControle($ControleProteseTO, $where);
     } catch (Exception $e) {
         jsonException($e);
     }
 }
 public static function send()
 {
     try {
         error_reporting(E_ERROR);
         $assunto = $_POST['assunto'];
         $corpo = $_POST['corpo'];
         $destinatarios = $_POST['destinatarios'];
         $form_data = isset($_POST['form_data']) ? $_POST['form_data'] : array();
         if (sendMail($assunto, $corpo, $destinatarios, $form_data)) {
             Flight::halt(200);
         } else {
             Flight::halt(500);
         }
     } catch (Exception $e) {
         jsonException($e);
     }
 }
 public static function update()
 {
     try {
         $PerfilUsuarioTO = new PerfilUsuarioTO();
         $PerfilUsuarioDao = new PerfilUsuarioDao();
         $ModuloPerfilTO = new ModuloPerfilTO();
         $ModuloPerfilDao = new ModuloPerfilDao();
         $PerfilUsuarioTO->__setAll($_POST);
         $modulos = isset($_POST['modulos']) ? $_POST['modulos'] : array();
         $empreendimentos = isset($_POST['empreendimentos']) ? $_POST['empreendimentos'] : array();
         $validator = new DataValidator();
         $validator->set_msg('O ID do perfil é obrigatório')->set('nome', $PerfilUsuarioTO->id)->is_required();
         $validator->set_msg('O nome do perfil é obrigatório')->set('nome', $PerfilUsuarioTO->nome)->is_required();
         $validator->set_msg('Deve ser selecionado ao menos um módulo')->set('modulos', count($modulos))->min_value(0);
         $validator->set_msg('Deve ser selecionado ao menos um empreendimento')->set('modulos', count($empreendimentos))->min_value(0);
         if (!$validator->validate()) {
             Flight::response()->status(406)->header('Content-Type', 'application/json')->write(json_encode($validator->get_errors()))->send();
             return;
         }
         $PerfilUsuarioDao->updatePerfil($PerfilUsuarioTO, 'id=' . $PerfilUsuarioTO->id);
         $ModuloPerfilDao->deleteModuloPerfil('id_perfil=' . $PerfilUsuarioTO->id);
         foreach ($modulos as $id_modulo) {
             $ModuloPerfilTO->id_modulo = $id_modulo;
             $ModuloPerfilTO->id_perfil = $PerfilUsuarioTO->id;
             $ModuloPerfilDao->save($ModuloPerfilTO);
         }
         $PerfilUsuarioEmpreendimentoDao = new PerfilUsuarioEmpreendimentoDao();
         $PerfilUsuarioEmpreendimentoDao->deletePerfilUsuarioEmpreendimento('id_perfil=' . $PerfilUsuarioTO->id);
         foreach ($empreendimentos as $empreendimento) {
             $PerfilUsuarioEmpreendimentoTO = new PerfilUsuarioEmpreendimentoTO();
             $empreendimento['id_perfil'] = $PerfilUsuarioTO->id;
             $PerfilUsuarioEmpreendimentoTO->__setAll($empreendimento);
             $PerfilUsuarioEmpreendimentoDao->savePerfilUsuarioEmpreendimento($PerfilUsuarioEmpreendimentoTO);
         }
         Flight::response()->status(200)->header('Content-Type', 'application/json')->write(json_encode(array('id' => $PerfilUsuarioTO->id)))->send();
     } catch (Exception $e) {
         $Conexao = new Conexao();
         $Conexao::getInstance();
         $Conexao->rollback();
         jsonException($e);
     }
 }
 public static function BaixaProdutoClinica()
 {
     try {
         $id_empreendimento = $_POST['id_empreendimento'];
         $id_deposito = $_POST['id_deposito'];
         $id_usuario = $_POST['id_usuario'];
         $id_profissional = $_POST['id_profissional'];
         $produtos = $_POST['produtos'];
         $EstoqueDao = new EstoqueDao();
         $out = array();
         $out_desconto = array();
         $produtos_estoque = array();
         foreach ($produtos as $key => $value) {
             if (!isset($produtos_estoque[$value['id']])) {
                 $produtos_estoque[$value['id']]['qtd_saida'] = 0;
                 $produtos_estoque[$value['id']]['id'] = $value['id'];
             }
             $produtos_estoque[$value['id']]['qtd_saida'] += (int) $value['qtd_saida'];
         }
         foreach ($produtos_estoque as $key => $value) {
             $qtd_saida = (int) $value['qtd_saida'];
             $estoque = $EstoqueDao->getQtdProduto($id_empreendimento, $value['id'], null, $id_deposito);
             $estoque_real = $estoque - $qtd_saida;
             if ($estoque_real < 0) {
                 $out[$value['id']] = array('qtd_saida' => $qtd_saida, 'qtd_estoque' => $estoque);
             }
         }
         if (count($out) > 0) {
             Flight::response()->status(406)->header('Content-Type', 'application/json')->write(json_encode(array('out_estoque' => $out)))->send();
             return;
         }
         $EstoqueDao = new EstoqueDao();
         $EstoqueDao->baixaEstoqueClinica($id_empreendimento, $produtos, $id_deposito, null, $id_usuario, $id_profissional, 1);
     } catch (Exception $e) {
         jsonException($e);
     }
 }
 public static function gravarVenda()
 {
     try {
         $conn = Conexao::getInstance();
         if (!$conn->inTransaction()) {
             $conn->beginTransaction();
         }
         $venda = $_POST['venda'];
         $VendaDao = new VendaDao();
         $VendaTO = new VendaTO();
         $VendaTO->id_usuario = isset($venda['id_usuario']) ? $venda['id_usuario'] : NULL;
         $VendaTO->id_cliente = is_numeric($venda['id_cliente']) ? $venda['id_cliente'] : NULL;
         $VendaTO->venda_confirmada = isset($venda['venda_confirmada']) ? $venda['venda_confirmada'] : NULL;
         $VendaTO->id_empreendimento = isset($venda['id_empreendimento']) ? $venda['id_empreendimento'] : NULL;
         $VendaTO->id_status_venda = isset($venda['id_status_venda']) ? $venda['id_status_venda'] : 4;
         $VendaTO->id = isset($venda['id']) ? $venda['id'] : NULL;
         $VendaTO->dta_venda = isset($venda['dta_venda']) ? $venda['dta_venda'] : NULL;
         $VendaTO->vlr_saldo_anterior = isset($venda['vlr_saldo_anterior']) ? $venda['vlr_saldo_anterior'] : NULL;
         if (isset($venda['newCliente'])) {
             $ClienteTO = new ClienteTO();
             $PessoaFisicaTO = new PessoaFisicaTO();
             $PessoaJuridicaTO = new PessoaJuridicaTO();
             $ClienteDao = new ClienteDao();
             $PessoaFisicaDao = new PessoaFisicaDao();
             $PessoaJuridicaDao = new PessoaJuridicaDao();
             $EmpreendimentoDao = new EmpreendimentoDao();
             $UsuarioEmpreendimentoTO = new UsuarioEmpreendimentoTO();
             $cliente = $venda['newCliente'];
             $empreendimento = $EmpreendimentoDao->getEmpreendimentoById($venda['id_empreendimento']);
             $ClienteTO->nome = NULL;
             $ClienteTO->id_estado = $empreendimento['cod_estado'];
             $ClienteTO->id_cidade = $empreendimento['cod_cidade'];
             $last_id_cliente = $ClienteDao->saveCliente($ClienteTO);
             if ($last_id_cliente) {
                 if ($cliente['tipo_cadastro'] == "pf") {
                     $PessoaFisicaTO->usuarios_id = $last_id_cliente;
                     $PessoaFisicaTO->cpf = $cliente['cpf'];
                     if (!$PessoaFisicaDao->savePessoaFisica($PessoaFisicaTO)) {
                         if ($conn->inTransaction()) {
                             $conn->rollback();
                         }
                         Flight::halt(500, 'Erro ao vincular o cliente ao cpf');
                     }
                 } else {
                     if ($cliente['tipo_cadastro'] == "pj") {
                         $PessoaJuridicaTO->usuarios_id = $last_id_cliente;
                         $PessoaJuridicaTO->cnpj = $cliente['cnpj'];
                         if (!$PessoaJuridicaDao->savePessoaJuridica($PessoaJuridicaTO)) {
                             if ($conn->inTransaction()) {
                                 $conn->rollback();
                             }
                             Flight::halt(500, 'Erro vincular o cliente ao cnpj');
                         }
                     }
                 }
                 $UsuarioEmpreendimentoTO->id_usuario = $last_id_cliente;
                 $UsuarioEmpreendimentoTO->id_empreendimento = $venda['id_empreendimento'];
                 if (!$EmpreendimentoDao->saveUsuarioEmpreendimento($UsuarioEmpreendimentoTO)) {
                     if ($conn->inTransaction()) {
                         $conn->rollback();
                     }
                     Flight::halt(500, 'erro ao vincular usuario ao empreendimento');
                 }
                 $VendaTO->id_cliente = $last_id_cliente;
             } else {
                 if ($conn->inTransaction()) {
                     $conn->rollback();
                 }
                 Flight::halt(500, 'Erro ao cadastrar o cliente');
             }
         }
         if (empty($VendaTO->id)) {
             $id_venda = $VendaDao->saveVenda($VendaTO);
         } else {
             $id_venda = $VendaTO->id;
             $Conexao = new Conexao();
             $Conexao->update($VendaTO, 'tbl_vendas')->where("id = {$id_venda}")->execute();
             $Conexao->delete('tbl_itens_venda')->where("id_venda = {$id_venda}")->execute();
         }
         if (!$id_venda) {
             if ($conn->inTransaction()) {
                 $conn->rollback();
             }
             Flight::halt(500, 'erro ao inserir venda');
         } else {
             if ($conn->inTransaction()) {
                 $conn->commit();
             }
             $dados = array('id_venda' => $id_venda);
             if (isset($last_id_cliente)) {
                 $dados['id_cliente'] = $last_id_cliente;
             }
             Flight::response()->status(201)->header('Content-Type', 'application/json')->write(json_encode($dados))->send();
         }
     } catch (Exception $e) {
         if ($conn->inTransaction()) {
             $conn->rollback();
         }
         jsonException($e);
     }
 }
 public static function cadastrarCliente()
 {
     try {
         $UsuarioDao = new UsuarioDao();
         $ClienteDao = new ClienteDao();
         $ClienteTO = new ClienteTO();
         $PessoaFisicaTO = new PessoaFisicaTO();
         $PessoaFisicaDao = new PessoaFisicaDao();
         $EmpreendimentoDao = new EmpreendimentoDao();
         $UsuarioEmpreendimentoTO = new UsuarioEmpreendimentoTO();
         $validator = new DataValidator();
         $ClienteTO->__setAll($_POST);
         $tipo_cadastro = "pf";
         $PessoaFisicaTO->rg = isset($_POST["rg"]) ? $_POST["rg"] : NULL;
         $PessoaFisicaTO->cpf = isset($_POST["cpf"]) ? $_POST["cpf"] : NULL;
         $UsuarioEmpreendimentoTO->id_empreendimento = isset($_POST['id_empreendimento']) ? $_POST['id_empreendimento'] : array();
         $validator->set_msg('O id_empreendimento é obrigatório')->set('nome', $UsuarioEmpreendimentoTO->id_empreendimento)->is_required();
         if (empty($PessoaFisicaTO->cpf)) {
             $validator->set_msg('O nome do cliente é obrigatório')->set('nome', $ClienteTO->nome)->is_required();
         }
         if (empty($ClienteTO->nome)) {
             $validator->set_msg('O cpf do cliente é obrigatório')->set('cpf', $PessoaFisicaTO->cpf)->is_required();
         }
         if (!empty($ClienteTO->email)) {
             $validator->set_msg('E-mail inválido')->set('email', $ClienteTO->email)->is_email();
         }
         if (!$validator->validate()) {
             Flight::response()->status(406)->header('Content-Type', 'application/json')->write(json_encode($validator->get_errors()))->send();
             return;
         }
         $Conexao = new Conexao();
         $Conexao::getInstance();
         $Conexao->beginTransaction();
         $last_id = $ClienteDao->saveCliente($ClienteTO);
         if ($last_id) {
             $UsuarioEmpreendimentoTO->id_usuario = $last_id;
             $PessoaFisicaTO->usuarios_id = $last_id;
             if (!$PessoaFisicaDao->savePessoaFisica($PessoaFisicaTO)) {
                 $Conexao->rollback();
                 Flight::halt(500, 'Erro ao cadastrar cpf do cliente');
             }
             $UsuarioEmpreendimentoTO->id_usuario = $last_id;
             if (!$EmpreendimentoDao->saveUsuarioEmpreendimento($UsuarioEmpreendimentoTO)) {
                 $Conexao->rollback();
                 Flight::halt(500, 'erro ao lincar usuario ao empreendimento');
             }
             $dados_usuario = $UsuarioDao->getUsuario($UsuarioEmpreendimentoTO->id_empreendimento, $last_id);
             Flight::response()->status(201)->header('Content-Type', 'application/json')->write(json_encode(array('usuario' => $dados_usuario)))->send();
         } else {
             $Conexao->rollback();
             Flight::halt(500, 'Erro ao cadastrar o cliente');
         }
     } catch (Exception $e) {
         if (isset($Conexao)) {
             $Conexao->rollback();
         }
         jsonException($e);
     }
 }
 public static function updateIDWebSocket()
 {
     try {
         $caixa = new stdClass();
         if (isset($_POST['id_ws_web'])) {
             $caixa->id_ws_web = strtolower($_POST['id_ws_web']) == 'null' ? null : $_POST['id_ws_web'];
         }
         if (isset($_POST['id_ws_dsk'])) {
             $caixa->id_ws_dsk = strtolower($_POST['id_ws_dsk']) == 'null' ? null : $_POST['id_ws_dsk'];
         }
         $id_empreendimento = $_POST['id_empreendimento'];
         $pth_local = $_POST['pth_local'];
         $Conexao = new Conexao();
         $Conexao->update($caixa, 'tbl_conta_bancaria')->where("id_empreendimento = {$id_empreendimento} AND pth_local = '{$pth_local}'")->execute();
     } catch (Exception $e) {
         jsonException($e);
     }
 }
 public static function getAgendaAtendimentos()
 {
     try {
         $AtendimentoDao = new AtendimentoDao();
         $id_empreendimento = $_GET['id_empreendimento'];
         $first_date = $_GET['start'];
         $last_date = $_GET['end'];
         $busca['cplSql'] = " date_format(ta.dta_entrada,'%Y-%m-%d') BETWEEN '{$first_date}' AND '{$last_date}' AND ta.id_empreendimento = {$id_empreendimento}";
         $busca['cplSql'] .= is_numeric($_GET['id_profissional_atendimento']) ? ' AND ta.id_profissional_atendimento = ' . $_GET['id_profissional_atendimento'] : "";
         $dados = $AtendimentoDao->getFilaAtendimento(null, null, $busca);
         $saida = array();
         foreach ($dados as $key => $value) {
             $procedimentos = $AtendimentoDao->getAtendimentoProcedimento($value['id']);
             $aux = $procedimentos ? ' (' . $procedimentos[0]['dsc_procedimento'] . ')' : '';
             $color = $procedimentos ? $procedimentos[0]['hex_cor'] : '#6BAFBD';
             $tma = $procedimentos && !empty($procedimentos[0]['tma_procedimento']) ? $procedimentos[0]['tma_procedimento'] : false;
             $dsc_especialidade = $procedimentos ? $procedimentos[0]['dsc_especialidade'] : '';
             $dsc_procedimento = $procedimentos ? $procedimentos[0]['dsc_procedimento'] : '';
             if ($tma) {
                 $end = date('Y-m-d H:i:s', strtotime("+{$tma} minutes", strtotime($value['dta_entrada'])));
             } else {
                 $end = null;
             }
             $saida[] = array('title' => $value['nome_paciente'] . $aux, 'start' => $value['dta_entrada'], 'end' => $end, 'color' => $color, 'dsc_especialidade' => $dsc_especialidade, 'dsc_procedimento' => $dsc_procedimento, 'nome_paciente' => $value['nome_paciente'], 'nome_profissional' => $value['nome_profissional']);
         }
         if ($saida) {
             Flight::json($saida);
         } else {
             Flight::halt(404, 'Não há resultado para a busca');
         }
     } catch (Exception $e) {
         jsonException($e, 500);
     }
 }
 public static function gravarDadosSat()
 {
     try {
         $dadosNf = $_POST;
         $cod_nota_fiscal = isset($dadosNf['dados_emissao']['cod_nota_fiscal']) ? $dadosNf['dados_emissao']['cod_nota_fiscal'] : false;
         $ConfiguracaoDao = new ConfiguracaoDao();
         $id_empreendimento = $_POST['id_empreendimento'];
         $conf = $ConfiguracaoDao->getConfiguracoes($id_empreendimento);
         $tokens['token_focus_producao'] = isset($conf['token_focus_producao']) ? $conf['token_focus_producao'] : '';
         $tokens['token_focus_homologacao'] = isset($conf['token_focus_homologacao']) ? $conf['token_focus_homologacao'] : '';
         $NF = new stdClass();
         /**
          * Informações Gerais
          **/
         $NF->natureza_operacao = isset($dadosNf['dados_emissao']['dsc_operacao']) ? $dadosNf['dados_emissao']['dsc_operacao'] : "";
         $NF->forma_pagamento = isset($dadosNf['dados_emissao']['forma_pagamento']) ? $dadosNf['dados_emissao']['forma_pagamento'] : "";
         //$NF->data_emissao 							= isset($dadosNf['dados_emissao']['data_emissao']) 			? $dadosNf['dados_emissao']['data_emissao'] 		: "" ;
         //$NF->data_entrada_saida 						= isset($dadosNf['dados_emissao']['data_entrada_saida']) 	? $dadosNf['dados_emissao']['data_entrada_saida'] 	: "" ;
         $NF->tipo_documento = isset($dadosNf['dados_emissao']['tipo_documento']) ? $dadosNf['dados_emissao']['tipo_documento'] : "";
         $NF->local_destino = isset($dadosNf['dados_emissao']['local_destino']) ? $dadosNf['dados_emissao']['local_destino'] : "";
         $NF->finalidade_emissao = isset($dadosNf['dados_emissao']['finalidade_emissao']) ? $dadosNf['dados_emissao']['finalidade_emissao'] : "";
         $NF->consumidor_final = isset($dadosNf['dados_emissao']['consumidor_final']) ? $dadosNf['dados_emissao']['consumidor_final'] : "";
         $NF->presenca_comprador = isset($dadosNf['dados_emissao']['presenca_comprador']) ? $dadosNf['dados_emissao']['presenca_comprador'] : "";
         $NF->serie = isset($dadosNf['dados_emissao']['serie_documento_fiscal']) ? $dadosNf['dados_emissao']['serie_documento_fiscal'] : "";
         //$NF->numero										= isset($dadosNf['dados_emissao']['num_documento_fiscal'])  ? $dadosNf['dados_emissao']['num_documento_fiscal'] : "" ;
         /**
          * Dados do Emitente
          **/
         $NF->cnpj_emitente = isset($dadosNf['emitente']['CNPJ']) ? $dadosNf['emitente']['CNPJ'] : "";
         $NF->nome_emitente = isset($dadosNf['emitente']['xNome']) ? $dadosNf['emitente']['xNome'] : "";
         $NF->nome_fantasia_emitente = isset($dadosNf['emitente']['xFant']) ? $dadosNf['emitente']['xFant'] : "";
         $NF->logradouro_emitente = isset($dadosNf['emitente']['nme_logradouro']) ? $dadosNf['emitente']['nme_logradouro'] : "";
         $NF->numero_emitente = isset($dadosNf['emitente']['num_logradouro']) ? $dadosNf['emitente']['num_logradouro'] : "";
         $NF->bairro_emitente = isset($dadosNf['emitente']['nme_bairro_logradouro']) ? $dadosNf['emitente']['nme_bairro_logradouro'] : "";
         $NF->municipio_emitente = isset($dadosNf['emitente']['cidade']['nome']) ? $dadosNf['emitente']['cidade']['nome'] : "";
         $NF->uf_emitente = isset($dadosNf['emitente']['estado']['uf']) ? $dadosNf['emitente']['estado']['uf'] : "";
         $NF->cep_emitente = isset($dadosNf['emitente']['CEP']) ? $dadosNf['emitente']['CEP'] : "";
         $NF->telefone_emitente = "";
         // opcional, tem que colocar na tela
         $NF->inscricao_estadual_emitente = isset($dadosNf['emitente']['IE']) ? $dadosNf['emitente']['IE'] : "";
         $NF->inscricao_municipal_emitente = "";
         // opcional, tem que colocar na tela
         $NF->cnae_fiscal_emitente = "";
         // opcional, tem que colocar na tela
         $NF->regime_tributario_emitente = isset($dadosNf['emitente']['CRT']) ? $dadosNf['emitente']['CRT'] : "";
         /**
          * Dados do Destinatário
          **/
         if ($dadosNf['destinatario']['tipo_cadastro'] == 'pj') {
             $NF->cnpj_destinatario = isset($dadosNf['destinatario']['CNPJ']) ? $dadosNf['destinatario']['CNPJ'] : "";
             $NF->nome_destinatario = isset($dadosNf['destinatario']['xFant']) ? $dadosNf['destinatario']['xFant'] : "";
             $NF->indicador_inscricao_estadual_destinatario = isset($dadosNf['destinatario']['indIEDest']) ? $dadosNf['destinatario']['indIEDest'] : "";
             $NF->inscricao_estadual_destinatario = isset($dadosNf['destinatario']['IE']) ? $dadosNf['destinatario']['IE'] : "";
         } else {
             if ($dadosNf['destinatario']['tipo_cadastro'] == 'pf') {
                 $NF->cpf_destinatario = isset($dadosNf['destinatario']['CPF']) ? $dadosNf['destinatario']['CPF'] : "";
                 $NF->nome_destinatario = isset($dadosNf['destinatario']['xNome']) ? $dadosNf['destinatario']['xNome'] : "";
                 $NF->indicador_inscricao_estadual_destinatario = 9;
             }
         }
         $NF->logradouro_destinatario = isset($dadosNf['destinatario']['nme_logradouro']) ? $dadosNf['destinatario']['nme_logradouro'] : "";
         $NF->numero_destinatario = isset($dadosNf['destinatario']['num_logradouro']) ? $dadosNf['destinatario']['num_logradouro'] : "";
         $NF->complemento_destinatario = "";
         // opcional, tem que colocar na tela
         $NF->bairro_destinatario = isset($dadosNf['destinatario']['nme_bairro_logradouro']) ? $dadosNf['destinatario']['nme_bairro_logradouro'] : "";
         $NF->municipio_destinatario = isset($dadosNf['destinatario']['cidade']['nome']) ? $dadosNf['destinatario']['cidade']['nome'] : "";
         $NF->uf_destinatario = isset($dadosNf['destinatario']['estado']['uf']) ? $dadosNf['destinatario']['estado']['uf'] : "";
         $NF->cep_destinatario = isset($dadosNf['destinatario']['CEP']) ? $dadosNf['destinatario']['CEP'] : "";
         $NF->email_destinatario = isset($dadosNf['destinatario']['email']) ? $dadosNf['destinatario']['email'] : "";
         /**
          * Dados de Transporte
          **/
         $NF->modalidade_frete = isset($dadosNf['transportadora']['modalidade_frete']) ? $dadosNf['transportadora']['modalidade_frete'] : "";
         $NF->cnpj_transportador = isset($dadosNf['transportadora']['CNPJ']) ? $dadosNf['transportadora']['CNPJ'] : "";
         $NF->nome_transportador = isset($dadosNf['transportadora']['xFant']) ? $dadosNf['transportadora']['xFant'] : "";
         $NF->inscricao_estadual_transportador = isset($dadosNf['transportadora']['IE']) ? $dadosNf['transportadora']['IE'] : "";
         $NF->endereco_transportador = isset($dadosNf['transportadora']['nme_logradouro']) ? $dadosNf['transportadora']['nme_logradouro'] : "";
         $NF->municipio_transportador = isset($dadosNf['transportadora']['cidade']['nome']) ? $dadosNf['transportadora']['cidade']['nome'] : "";
         $NF->uf_transportador = isset($dadosNf['transportadora']['estado']['uf']) ? $dadosNf['transportadora']['estado']['uf'] : "";
         /**
          * Totais
          **/
         $NF->icms_base_calculo = isset($dadosNf['ICMSTot']['vBC']) ? $dadosNf['ICMSTot']['vBC'] : "";
         $NF->icms_valor_total = isset($dadosNf['ICMSTot']['vICMS']) ? $dadosNf['ICMSTot']['vICMS'] : "";
         $NF->icms_valor_total_desonerado = isset($dadosNf['ICMSTot']['vICMSDeson']) ? $dadosNf['ICMSTot']['vICMSDeson'] : "";
         $NF->icms_base_calculo_st = isset($dadosNf['ICMSTot']['vBCST']) ? $dadosNf['ICMSTot']['vBCST'] : "";
         $NF->icms_valor_total_st = isset($dadosNf['ICMSTot']['vST']) ? $dadosNf['ICMSTot']['vST'] : "";
         $NF->valor_produtos = isset($dadosNf['ICMSTot']['vProd']) ? $dadosNf['ICMSTot']['vProd'] : "";
         $NF->valor_frete = isset($dadosNf['ICMSTot']['vFrete']) ? $dadosNf['ICMSTot']['vFrete'] : "";
         $NF->valor_seguro = isset($dadosNf['ICMSTot']['vSeg']) ? $dadosNf['ICMSTot']['vSeg'] : "";
         $NF->valor_desconto = isset($dadosNf['ICMSTot']['vDesc']) ? $dadosNf['ICMSTot']['vDesc'] : "";
         $NF->valor_total_ii = isset($dadosNf['ICMSTot']['vII']) ? $dadosNf['ICMSTot']['vII'] : "";
         $NF->valor_ipi = isset($dadosNf['ICMSTot']['vIPI']) ? $dadosNf['ICMSTot']['vIPI'] : "";
         $NF->valor_pis = isset($dadosNf['ICMSTot']['vPIS']) ? $dadosNf['ICMSTot']['vPIS'] : "";
         $NF->valor_cofins = isset($dadosNf['ICMSTot']['vCOFINS']) ? $dadosNf['ICMSTot']['vCOFINS'] : "";
         $NF->valor_outras_despesas = isset($dadosNf['ICMSTot']['vOutro']) ? $dadosNf['ICMSTot']['vOutro'] : "";
         $NF->valor_total = isset($dadosNf['ICMSTot']['vNF']) ? $dadosNf['ICMSTot']['vNF'] : "";
         $NF->items = array();
         foreach ($dadosNf['itens'] as $key => $value) {
             $item = new stdClass();
             $item->numero_item = $key + 1;
             $item->codigo_produto = isset($value['prod']['cProd']) ? $value['prod']['cProd'] : "";
             $item->descricao = isset($value['prod']['xProd']) ? $value['prod']['xProd'] : "";
             $item->codigo_ncm = isset($value['prod']['NCM']) ? $value['prod']['NCM'] : "";
             $item->cfop = isset($value['prod']['CFOP']) ? $value['prod']['CFOP'] : "";
             $item->unidade_comercial = isset($value['prod']['uCom']) ? $value['prod']['uCom'] : "";
             $item->quantidade_comercial = isset($value['prod']['qCom']) ? $value['prod']['qCom'] : "";
             $item->valor_unitario_comercial = isset($value['prod']['vUnCom']) ? $value['prod']['vUnCom'] : "";
             $item->valor_bruto = isset($value['prod']['vProd']) ? $value['prod']['vProd'] : "";
             $item->valor_desconto = isset($value['prod']['vDesc']) ? $value['prod']['vDesc'] : "";
             $item->unidade_tributavel = isset($value['prod']['uTrib']) ? $value['prod']['uTrib'] : "";
             $item->quantidade_tributavel = isset($value['prod']['qTrib']) ? $value['prod']['qTrib'] : "";
             $item->valor_unitario_tributavel = isset($value['prod']['vUnTrib']) ? $value['prod']['vUnTrib'] : "0";
             $item->inclui_no_total = isset($value['prod']['indTot']) ? $value['prod']['indTot'] : "1";
             $item->codigo_cest = isset($value['prod']['CEST']) ? $value['prod']['CEST'] : "";
             /**
              * IPI
              *	clEnq
              *	CNPJProd
              *	cSelo
              *	qSelo
              *	cEnq
              *	CST
              *	vBC
              *	qUnid
              *	vUnid
              *	pIPI
              *	vIPI
              **/
             $item->ipi_classe_enquadramento = isset($value['imposto']['IPI']['clEnq']) ? $value['imposto']['IPI']['clEnq'] : "";
             $item->ipi_cnpj_produtor = isset($value['imposto']['IPI']['CNPJProd']) ? $value['imposto']['IPI']['CNPJProd'] : "";
             $item->ipi_codigo_selo_controle = isset($value['imposto']['IPI']['cSelo']) ? $value['imposto']['IPI']['cSelo'] : "";
             $item->ipi_quantidade_selo_controle = isset($value['imposto']['IPI']['qSelo']) ? $value['imposto']['IPI']['qSelo'] : "";
             $item->ipi_codigo_enquadramento_legal = isset($value['imposto']['IPI']['cEnq']) ? $value['imposto']['IPI']['cEnq'] : "";
             $item->ipi_situacao_tributaria = isset($value['imposto']['IPI']['CST']) ? $value['imposto']['IPI']['CST'] : "";
             $item->ipi_base_calculo = isset($value['imposto']['IPI']['vBC']) ? $value['imposto']['IPI']['vBC'] : "";
             $item->ipi_quantidade_total = isset($value['imposto']['IPI']['qUnid']) ? $value['imposto']['IPI']['qUnid'] : "";
             $item->ipi_valor_por_unidade_tributavel = isset($value['imposto']['IPI']['vUnid']) ? $value['imposto']['IPI']['vUnid'] : "";
             $item->ipi_aliquota = isset($value['imposto']['IPI']['pIPI']) ? $value['imposto']['IPI']['pIPI'] : "";
             $item->ipi_valor = isset($value['imposto']['IPI']['vIPI']) ? $value['imposto']['IPI']['vIPI'] : "";
             /**
              * CAMPOS ICMS
              * 	orig
              * 	CST - CSOSN
              * 	modBC
              * 	pRedBC
              * 	vBC
              * 	vBC_Desonerado *
              * 	pICMS
              * 	pICMS_Desonerado *
              * 	vICMSOp
              * 	pDif
              * 	vICMSDif
              * 	vICMS
              * 	vICMS_Desonerado
              * 	modBCST
              * 	pMVAST
              * 	pRedBCST
              * 	vBCST
              * 	vBCST_NaoDestacado *
              * 	pICMSST
              * 	vICMSST
              * 	vICMSST_NaoDestacado *
              * 	UFST **
              * 	pBCOp *
              * 	vBCSTRet
              * 	vICMSSTRet
              * 	vICMSDeson --> igual a vICMS_Desonerado?
              * 	motDesICMS
              * 	pCredSN *
              * 	vCredICMSSN *
              * 	vBCSTDest --> igual a UFST?
              * 	vICMSSTDest
              **/
             $item->icms_origem = isset($value['imposto']['ICMS']['orig']) ? $value['imposto']['ICMS']['orig'] : "";
             $item->icms_situacao_tributaria = isset($value['imposto']['ICMS']['CST']) ? $value['imposto']['ICMS']['CST'] : (isset($value['imposto']['ICMS']['CSOSN']) ? $value['imposto']['ICMS']['CSOSN'] : "");
             $item->icms_modalidade_base_calculo = isset($value['imposto']['ICMS']['modBC']) ? $value['imposto']['ICMS']['modBC'] : "";
             $item->icms_reducao_base_calculo = isset($value['imposto']['ICMS']['pRedBC']) ? $value['imposto']['ICMS']['pRedBC'] : "";
             $item->icms_base_calculo = isset($value['imposto']['ICMS']['vBC']) ? $value['imposto']['ICMS']['vBC'] : "";
             // $item->vBC_Desonerado 				= isset($value['imposto']['ICMS']['vBC_Desonerado']) 		? $value['imposto']['ICMS']['vBC_Desonerado'] 		: "" ;
             $item->icms_aliquota = isset($value['imposto']['ICMS']['pICMS']) ? $value['imposto']['ICMS']['pICMS'] : "";
             // $item->pICMS_Desonerado 				= isset($value['imposto']['ICMS']['pICMS_Desonerado']) 		? $value['imposto']['ICMS']['pICMS_Desonerado'] 	: "" ;
             $item->icms_valor_operacao = isset($value['imposto']['ICMS']['vICMSOp']) ? $value['imposto']['ICMS']['vICMSOp'] : "";
             $item->icms_percentual_diferimento = isset($value['imposto']['ICMS']['pDif']) ? $value['imposto']['ICMS']['pDif'] : "";
             $item->icms_valor_diferido = isset($value['imposto']['ICMS']['vICMSDif']) ? $value['imposto']['ICMS']['vICMSDif'] : "";
             $item->icms_valor = isset($value['imposto']['ICMS']['vICMS']) ? $value['imposto']['ICMS']['vICMS'] : "";
             $item->icms_valor_desonerado = isset($value['imposto']['ICMS']['vICMS_Desonerado']) ? $value['imposto']['ICMS']['vICMS_Desonerado'] : "";
             $item->icms_modalidade_base_calculo_st = isset($value['imposto']['ICMS']['modBCST']) ? $value['imposto']['ICMS']['modBCST'] : "";
             $item->icms_margem_valor_adicionado_st = isset($value['imposto']['ICMS']['pMVAST']) ? $value['imposto']['ICMS']['pMVAST'] : "";
             $item->icms_reducao_base_calculo_st = isset($value['imposto']['ICMS']['pRedBCST']) ? $value['imposto']['ICMS']['pRedBCST'] : "";
             $item->icms_base_calculo_st = isset($value['imposto']['ICMS']['vBCST']) ? $value['imposto']['ICMS']['vBCST'] : "";
             // $item->vBCST_NaoDestacado 			= isset($value['imposto']['ICMS']['vBCST_NaoDestacado']) 	? $value['imposto']['ICMS']['vBCST_NaoDestacado'] 	: "" ;
             $item->icms_aliquota_st = isset($value['imposto']['ICMS']['pICMSST']) ? $value['imposto']['ICMS']['pICMSST'] : "";
             $item->icms_valor_st = isset($value['imposto']['ICMS']['vICMSST']) ? $value['imposto']['ICMS']['vICMSST'] : "";
             // $item->vICMSST_NaoDestacado 			= isset($value['imposto']['ICMS']['vICMSST_NaoDestacado']) 	? $value['imposto']['ICMS']['vICMSST_NaoDestacado'] : "" ;
             $item->icms_base_calculo_uf_destino = isset($value['imposto']['ICMS']['UFST']) ? $value['imposto']['ICMS']['UFST'] : "";
             // $item->pBCOp 						= isset($value['imposto']['ICMS']['pBCOp']) 				? $value['imposto']['ICMS']['pBCOp'] 				: "" ;
             $item->icms_base_calculo_retido_st = isset($value['imposto']['ICMS']['vBCSTRet']) ? $value['imposto']['ICMS']['vBCSTRet'] : "";
             $item->icms_valor_retido_st = isset($value['imposto']['ICMS']['vICMSSTRet']) ? $value['imposto']['ICMS']['vICMSSTRet'] : "";
             // $item->vICMSDeson 					= isset($value['imposto']['ICMS']['vICMSDeson']) 			? $value['imposto']['ICMS']['vICMSDeson'] 			: "" ;
             $item->icms_motivo_desoneracao = isset($value['imposto']['ICMS']['motDesICMS']) ? $value['imposto']['ICMS']['motDesICMS'] : "";
             $item->icms_aliquota_credito_simples = isset($value['imposto']['ICMS']['pCredSN']) ? $value['imposto']['ICMS']['pCredSN'] : "0";
             // Esse campo não existe na API da focus
             $item->icms_valor_credito_simples = isset($value['imposto']['ICMS']['vCredICMSSN']) ? $value['imposto']['ICMS']['vCredICMSSN'] : "0";
             // $item->vBCSTDest 					= isset($value['imposto']['ICMS']['vBCSTDest']) 			? $value['imposto']['ICMS']['vBCSTDest'] 			: "" ;
             $item->icms_valor_uf_destino = isset($value['imposto']['ICMS']['vICMSSTDest']) ? $value['imposto']['ICMS']['vICMSSTDest'] : "";
             /**
              * CAMPOS PIS
              * 	CST
              * 	vBC
              * 	pPIS
              * 	vPIS
              * 	qBCProd
              * 	vAliqProd
              **/
             $item->pis_situacao_tributaria = isset($value['imposto']['PIS']['CST']) ? $value['imposto']['PIS']['CST'] : "";
             $item->pis_base_calculo = isset($value['imposto']['PIS']['vBC']) ? $value['imposto']['PIS']['vBC'] : "0";
             $item->pis_aliquota_porcentual = isset($value['imposto']['PIS']['pPIS']) ? $value['imposto']['PIS']['pPIS'] : "0";
             $item->pis_valor = isset($value['imposto']['PIS']['vPIS']) ? $value['imposto']['PIS']['vPIS'] : "0";
             $item->pis_quantidade_vendida = isset($value['imposto']['PIS']['qBCProd']) ? $value['imposto']['PIS']['qBCProd'] : "0";
             // $item->vAliqProd						= isset($value['imposto']['PIS']['vAliqProd']) 				? $value['imposto']['PIS']['vAliqProd'] 			: "0" ;
             /**
              * CAMPOS COFINS
              * 	CST
              * 	vBC
              * 	pCOFINS
              * 	qBCProd
              * 	vAliqProd
              * 	vCOFINS
              **/
             $item->cofins_situacao_tributaria = isset($value['imposto']['COFINS']['CST']) ? $value['imposto']['COFINS']['CST'] : "0";
             $item->cofins_base_calculo = isset($value['imposto']['COFINS']['vBC']) ? $value['imposto']['COFINS']['vBC'] : "0";
             $item->cofins_aliquota_porcentual = isset($value['imposto']['COFINS']['pCOFINS']) ? $value['imposto']['COFINS']['pCOFINS'] : "0";
             $item->cofins_quantidade_vendida = isset($value['imposto']['COFINS']['qBCProd']) ? $value['imposto']['COFINS']['qBCProd'] : "0";
             // $item->vAliqProd 					= isset($value['imposto']['COFINS']['vAliqProd']) 			? $value['imposto']['COFINS']['vAliqProd'] 			: "0" ;
             $item->cofins_valor = isset($value['imposto']['COFINS']['vCOFINS']) ? $value['imposto']['COFINS']['vCOFINS'] : "0";
             $NF->items[] = $item;
         }
         //self::validaCamposObrigatoriosFocusNFe($NF);
         //$nfTO = clone $NF;
         $NF = self::removeCampoVazios($NF);
         $conn = Conexao::getInstance();
         $NotaFiscalDao = new NotaFiscalDao();
         $NotaFiscalItemDao = new NotaFiscalItemDao();
         $NotaFiscalItemTO = new NotaFiscalItemTO();
         $NotaFiscalTO = new NotaFiscalTO();
         // Complementando dados para gravar nota
         $NotaFiscalTO->__setAll($NF);
         $NotaFiscalTO->cod_venda = $dadosNf['dados_emissao']['cod_venda'];
         $NotaFiscalTO->cod_empreendimento = $dadosNf['emitente']['identificador'];
         $NotaFiscalTO->cod_cliente = $dadosNf['destinatario']['identificador'];
         $NotaFiscalTO->modelo_documento = $dadosNf['dados_emissao']['nme_modelo_documento'];
         $NotaFiscalTO->perc_credito_simples = isset($dadosNf['emitente']['PercCreditoSimples']) ? $dadosNf['emitente']['PercCreditoSimples'] : NULL;
         $NotaFiscalTO->status = $dadosNf['dados_emissao']['status'];
         $NotaFiscalTO->cep_transportadora = isset($dadosNf['transportadora']['CEP']) ? $dadosNf['transportadora']['CEP'] : NULL;
         $NotaFiscalTO->bairro_transportadora = isset($dadosNf['transportadora']['nme_bairro_logradouro']) ? $dadosNf['transportadora']['nme_bairro_logradouro'] : NULL;
         $NotaFiscalTO->valor_total_tributos = NULL;
         $NotaFiscalTO->tipo_cadastro_destinatario = $dadosNf['destinatario']['tipo_cadastro'];
         $NotaFiscalTO->cod_cidade_emitente = $dadosNf['emitente']['cidade']['id'];
         $NotaFiscalTO->cod_estado_emitente = $dadosNf['emitente']['estado']['id'];
         $NotaFiscalTO->cod_cidade_destinatario = $dadosNf['emitente']['cidade']['id'];
         $NotaFiscalTO->cod_estado_destinatario = $dadosNf['emitente']['estado']['id'];
         $NotaFiscalTO->chave_sat = isset($dadosNf['chave_sat']) ? $dadosNf['chave_sat'] : NULL;
         $NotaFiscalTO->codigo_sefaz_sat = isset($dadosNf['codigo_sefaz_sat']) ? $dadosNf['codigo_sefaz_sat'] : NULL;
         $NotaFiscalTO->data_processado_sat = isset($dadosNf['data_processado_sat']) ? $dadosNf['data_processado_sat'] : NULL;
         $NotaFiscalTO->id_pdv_sat = isset($dadosNf['id_pdv_sat']) ? $dadosNf['id_pdv_sat'] : NULL;
         $NotaFiscalTO->id_qr_code_sat = isset($dadosNf['id_qr_code_sat']) ? $dadosNf['id_qr_code_sat'] : NULL;
         $NotaFiscalTO->msg_sefaz_sat = isset($dadosNf['msg_sefaz_sat']) ? $dadosNf['msg_sefaz_sat'] : NULL;
         $NotaFiscalTO->n_serie_sat = isset($dadosNf['n_serie_sat']) ? $dadosNf['n_serie_sat'] : NULL;
         $NotaFiscalTO->sessao_sat = isset($dadosNf['sessao_sat']) ? $dadosNf['sessao_sat'] : NULL;
         $NotaFiscalTO->tipo_documento_sat = isset($dadosNf['tipo_documento_sat']) ? $dadosNf['tipo_documento_sat'] : NULL;
         $NotaFiscalTO->uuid_sat = isset($dadosNf['uuid_sat']) ? $dadosNf['uuid_sat'] : NULL;
         $NotaFiscalTO->xml_envio_base64 = isset($dadosNf['xml_envio_base64']) ? base64_encode($dadosNf['xml_envio_base64']) : NULL;
         $NotaFiscalTO->codigo_erro_sat = isset($dadosNf['codigo_erro_sat']) ? $dadosNf['codigo_erro_sat'] : NULL;
         $NotaFiscalTO->msg_erro_sat = isset($dadosNf['msg_erro_sat']) ? $dadosNf['msg_erro_sat'] : NULL;
         $NotaFiscalTO->json_erros_base64_sat = isset($dadosNf['json_erros_base64_sat']) ? base64_encode($dadosNf['json_erros_base64_sat']) : NULL;
         $NotaFiscalTO->flg_sat = 1;
         if (is_numeric($cod_nota_fiscal)) {
             $NotaFiscalTO->cod_nota_fiscal = $cod_nota_fiscal;
             $NotaFiscalDao->updateNota($NotaFiscalTO);
         } else {
             $cod_nota_fiscal = $NotaFiscalDao->saveNota($NotaFiscalTO);
         }
         $NotaFiscalItemDao->deleteItems($cod_nota_fiscal);
         foreach ($NF->items as $itemNf) {
             $NotaFiscalItemTO->__setAll($itemNf);
             $NotaFiscalItemTO->cod_nota_fiscal = $cod_nota_fiscal;
             $NotaFiscalItemDao->saveItem($NotaFiscalItemTO);
         }
         /*$NfeDao 			=  new NfeDao($flg_ambiente_nfe) ;
         		$NfeDao->arr_nfe 	= $NF ;
         		$NfeDao->id_ref  	= $cod_nota_fiscal;
         		$retorno 			= $NfeDao->sendNfe();*/
         /*if($retorno->statusCode == 202){
         			$NotaFiscalDao->changeStatusNota('processando_autorizacao', $cod_nota_fiscal);
         		}*/
     } catch (Exception $e) {
         jsonException($e, 500);
     }
 }
 public static function atualizarStatus($cod_nota_fiscal, $cod_empreendimento)
 {
     try {
         // Obtendo configurações da API de consulta de NFS-e
         $confDao = new ConfiguracaoDao();
         $conf = $confDao->getConfiguracoes($cod_empreendimento);
         $flg_ambiente_nfe = isset($conf['flg_ambiente_nfe']) && ((int) $conf['flg_ambiente_nfe'] == 1 || (int) $conf['flg_ambiente_nfe'] == 0) ? (int) $conf['flg_ambiente_nfe'] : 0;
         $apiTokens = array();
         $apiTokens['token_focus_producao'] = isset($conf['token_focus_producao']) ? $conf['token_focus_producao'] : '';
         $apiTokens['token_focus_homologacao'] = isset($conf['token_focus_homologacao']) ? $conf['token_focus_homologacao'] : '';
         $nfseDao = new NFSeDao($flg_ambiente_nfe, $apiTokens);
         $nfseDao->id_ref = $cod_nota_fiscal;
         $retorno = $nfseDao->buscaNFSe();
         $nfTO = new stdClass();
         $nfTO->cod_nota_fiscal = $cod_nota_fiscal;
         $nfTO->status = $retorno->status;
         if ($nfTO->status == 'autorizado') {
             $nfTO->numero = $retorno->numero;
             $nfTO->caminho_xml_nota_fiscal = substr($nfseDao->server, 0, -1) . $retorno->caminho_xml_nota_fiscal;
             $nfTO->caminho_danfe = $retorno->uri;
             $nfTO->mensagem_sefaz = "";
         } else {
             $msg = "";
             foreach ($retorno->erros as $key => $erro) {
                 $msg .= "Cod. Erro: " . $erro->codigo . "\n";
                 $msg .= "Msg. Erro: " . $erro->mensagem . "\n";
                 $msg .= "Msg. Correcao: " . $erro->correcao . "\n\n";
             }
             if (isset($retorno->erros)) {
                 $nfTO->mensagem_sefaz = $msg;
             }
         }
         $nfDao = new NotaFiscalDao();
         $nfDao->updateNota($nfTO);
         Flight::json($nfDao->getNota($cod_nota_fiscal));
     } catch (Exception $e) {
         jsonException($e);
     }
 }
 public static function verificarEstoqueTransferencia()
 {
     try {
         $TransferenciaEstoqueTO = new stdClass();
         $TransferenciaEstoqueDao = new TransferenciaEstoqueDao();
         $EstoqueDao = new EstoqueDao();
         $TransferenciaEstoqueTO->id = isset($_POST['id']) ? $_POST['id'] : NULL;
         $TransferenciaEstoqueTO->id_usuario_transferencia = isset($_POST['id_usuario_transferencia']) ? $_POST['id_usuario_transferencia'] : NULL;
         $TransferenciaEstoqueTO->id_status_transferencia = isset($_POST['id_status_transferencia']) ? $_POST['id_status_transferencia'] : NULL;
         $TransferenciaEstoqueTO->id_empreendimento_transferencia = isset($_POST['id_empreendimento_transferencia']) ? $_POST['id_empreendimento_transferencia'] : NULL;
         $produtos = $_POST['produtos'];
         $produtos_estoque = array();
         $out = array();
         foreach ($produtos as $key => $value) {
             if (!isset($produtos_estoque[$value['id']])) {
                 $produtos_estoque[$value['id']]['qtd_transferida'] = 0;
                 $produtos_estoque[$value['id']]['id'] = $value['id'];
             }
             $produtos_estoque[$value['id']]['qtd_transferida'] += (int) $value['qtd_transferida'];
             $produtos_estoque[$value['id']]['id_deposito_saida'] = $value['id_deposito_saida'];
         }
         foreach ($produtos_estoque as $key => $value) {
             $qtd_transferida = (int) $value['qtd_transferida'];
             $estoque = $EstoqueDao->getQtdProduto($TransferenciaEstoqueTO->id_empreendimento_transferencia, $value['id'], null, $value['id_deposito_saida']);
             $estoque_real = $estoque - $qtd_transferida;
             if ($estoque_real < 0) {
                 $out[$value['id']] = array('qtd_transferida' => $qtd_transferida, 'qtd_estoque' => $estoque);
             }
         }
         if (count($out) > 0) {
             Flight::response()->status(406)->header('Content-Type', 'application/json')->write(json_encode(array('out_estoque' => $out)))->send();
             return;
         }
     } catch (Exception $e) {
         jsonException($e);
     }
 }
 public static function changeStatus($id_ordem_producao, $id_status_change, $id_empreendimento, $id_usuario)
 {
     $OrdemProducaoDao = new OrdemProducaoDao();
     $ItensOrdemProducaoDao = new ItensOrdemProducaoDao();
     $EstoqueDao = new EstoqueDao();
     $Dao = new Dao();
     $ProdutoDao = new ProdutoDao();
     $out = array();
     $Dao->setTimeZone($id_empreendimento);
     $dta_change = date('Y-m-d H:i:s');
     $itens = $ItensOrdemProducaoDao->getItensOrdemProducao(null, null, array('tiop.id_ordem_producao' => $id_ordem_producao));
     $aux = array();
     $insumos = array();
     $OrdensProducao = $OrdemProducaoDao->getOrdemProducao(NULL, NULL, array('top->id' => $id_ordem_producao));
     $OrdensProducao = $OrdensProducao[0];
     $status = $OrdemProducaoDao->getStatus(array("id" => $id_status_change));
     $status = $status[0];
     foreach ($itens as $key => $value) {
         $item_aux = $value;
         $item_aux['qtd_produzir'] = (int) $value['qtd'];
         $item_aux['itens'] = $ProdutoDao->getInsumos($value['id_produto'], null);
         $aux[$value['id_produto']] = $item_aux;
         foreach ($item_aux['itens'] as $key_i => $value_i) {
             $qtd_produzir = $item_aux['qtd_produzir'];
             $qtd = $value_i['qtd'];
             if (isset($insumos[$value_i['id']])) {
                 $insumos[$value_i['id']]['qtd'] += $qtd_produzir * $qtd;
             } else {
                 $insumos[$value_i['id']] = array('qtd' => $qtd_produzir * $qtd);
             }
         }
     }
     if ((int) $id_status_change == 2 || (int) $id_status_change == 3) {
         foreach ($insumos as $key => $value) {
             $qtd = (int) $value['qtd'];
             $estoque = $EstoqueDao->getQtdProduto($id_empreendimento, $key, null, $OrdensProducao['id_deposito']);
             $estoque_real = $estoque - $qtd;
             if ($estoque_real < 0) {
                 $out[] = array((double) $key);
             }
         }
     }
     if (count($out) > 0) {
         Flight::response()->status(406)->header('Content-Type', 'application/json')->write(json_encode(array('out_estoque' => $out, 'lista' => $aux)))->send();
         return;
     }
     try {
         $Conexao = new Conexao();
         $Conexao::$alto_commit = false;
         $Conexao::getInstance();
         $Conexao->beginTransaction();
         if ((int) $id_status_change == 3) {
             $EstoqueEntradaTO = new EstoqueEntradaTO();
             $EstoqueEntradaDao = new EstoqueEntradaDao();
             $EstoqueEntradaTO->id_empreendimento = $id_empreendimento;
             $EstoqueEntradaTO->id_deposito = $OrdensProducao['id_deposito'];
             $EstoqueEntradaTO->id_ordem_producao = $id_ordem_producao;
             $EstoqueEntradaTO->dta_entrada = $dta_change;
             $EstoqueEntradaTO->id_usuario = $id_usuario;
             $id_estoque_entrada = $EstoqueEntradaDao->saveEstoqueEntrada($EstoqueEntradaTO);
             if ($id_estoque_entrada) {
                 $ItemEstoqueEntradaTO = new ItemEstoqueEntradaTO();
                 $ItemEstoqueEntradaDao = new ItemEstoqueEntradaDao();
                 foreach ($itens as $key => $value) {
                     $ItemEstoqueEntradaTO->id_estoque_entrada = $id_estoque_entrada;
                     $ItemEstoqueEntradaTO->id_produto = $value['id_produto'];
                     $ItemEstoqueEntradaTO->qtd_item = $value['qtd'];
                     $ItemEstoqueEntradaTO->vlr_custo = NULL;
                     $ItemEstoqueEntradaTO->perc_imposto = NULL;
                     $ItemEstoqueEntradaTO->perc_desconto = NULL;
                     $ItemEstoqueEntradaTO->dta_validade = '2099-12-31';
                     $id_item_estoque_entrada = $ItemEstoqueEntradaDao->saveItemEstoqueEntrada($ItemEstoqueEntradaTO);
                     if ($id_item_estoque_entrada) {
                         $EstoqueTO = new EstoqueTO();
                         $EstoqueDao = new EstoqueDao();
                         $PrecoProdutoTO = new PrecoProdutoTO();
                         $PrecoProdutoDao = new PrecoProdutoDao();
                         $EstoqueTO->id_deposito = $EstoqueEntradaTO->id_deposito;
                         $EstoqueTO->id_produto = $ItemEstoqueEntradaTO->id_produto;
                         $EstoqueTO->qtd_item = $ItemEstoqueEntradaTO->qtd_item;
                         $EstoqueTO->dta_validade = $ItemEstoqueEntradaTO->dta_validade;
                         $dadosTrigger = new StdClass();
                         $dadosTrigger->qtd_entrada = $EstoqueTO->qtd_item;
                         $dadosTrigger->acao_movimentacao = 'ENTRADA';
                         $dadosTrigger->id_tipo_movimentacao_estoque = 4;
                         $dadosTrigger->id_estoque_entrada = $id_estoque_entrada;
                         $dadosTrigger->id_item_estoque_entrada = $id_item_estoque_entrada;
                         $dadosTrigger->id_responsavel = $id_usuario;
                         $dadosTrigger->id_empreendimento = $id_empreendimento;
                         $dadosTrigger->id_ordem_producao = $id_ordem_producao;
                         if (!$EstoqueDao->atualizaEstoque($EstoqueTO, 'update', $dadosTrigger)) {
                             $Conexao->back();
                             Flight::halt(500, 'erro ao atualizar estoque');
                         }
                     } else {
                         $Conexao->back();
                         Flight::halt(500, 'erro ao inserir itens da entrada');
                     }
                 }
             } else {
                 $Conexao->back();
                 Flight::halt(500, 'erro ao inserir entrada no estoque');
             }
             foreach ($insumos as $key => $value) {
                 if (!$EstoqueDao->baixaEstoqueOrdemProducao($OrdensProducao['id_empreendimento'], $OrdensProducao['id'], $key, $OrdensProducao['id_deposito'], $value['qtd'], $id_usuario)) {
                     $Conexao->back();
                     Flight::halt(500, 'error ao atualizar saida estoque');
                 }
             }
         }
         if (!$OrdemProducaoDao->ChangeStatus($id_ordem_producao, $id_status_change, $dta_change)) {
             $Conexao->back();
             Flight::halt(500, 'Erro ao cadastrar mudança de status 1');
         }
         if (!$OrdemProducaoDao->savechangeOrdemProducao($id_ordem_producao, $id_status_change, $dta_change)) {
             $Conexao->back();
             Flight::halt(500, 'Erro ao cadastrar mudança de status 2');
         }
         $Conexao->commit();
         Flight::response()->status(201)->header('Content-Type', 'application/json')->write(json_encode(array('status' => $status)))->send();
     } catch (Exception $e) {
         $Conexao->back();
         jsonException($e);
     }
 }
 public static function importarNFe()
 {
     try {
         // Iniciando uma transação no banco de dados, caso já não acha uma ativa
         $conn = Conexao::getInstance();
         if (!$conn->inTransaction()) {
             $conn->beginTransaction();
         }
         $filename = '';
         $xml = null;
         // Verifica se o arquivo XML foi carregado
         if (isset($_FILES['arquivo-nota'])) {
             $filename = $_FILES['arquivo-nota']['tmp_name'];
         } else {
             Flight::halt(406, 'Nenhum arquivo selecionado!');
         }
         // Carrega os dados do arquivo XML
         $xml = simplexml_load_file($filename);
         // Captura as informações de totais da NF-e
         $vTotalNF = (double) $xml->NFe->infNFe->total->ICMSTot->vNF;
         $vTotalProd = (double) $xml->NFe->infNFe->total->ICMSTot->vProd;
         // Calcula o % de imposto aplicado na NF-e
         $prcImposto = round(($vTotalNF / $vTotalProd - 1) * 100, 2);
         // Pequisa se fornecedor existe no BD
         $paramsPesquisaFornecedor = array();
         $paramsPesquisaFornecedor['frn->id_empreendimento'] = $_GET['id_empreendimento'];
         $paramsPesquisaFornecedor['frn->num_cnpj'] = $xml->NFe->infNFe->emit->CNPJ;
         $fornecedorDao = new FornecedorDao();
         $data['nNF'] = (string) $xml->NFe->infNFe->ide->nNF;
         $data['fornecedor'] = array();
         $aux = $fornecedorDao->getFornecedores(null, null, $paramsPesquisaFornecedor);
         $data['fornecedor']['dados'] = $aux['fornecedores'][0];
         $data['fornecedor']['flg_localizado'] = $data['fornecedor']['dados'] != null;
         // Captura a lista de itens da NF-e
         $itensNF = $xml->NFe->infNFe->det;
         // Percorre a lista de itens da NF-e produrando os mesmo no BD
         $data['itensBD'] = array();
         foreach ($itensNF as $key => $value) {
             // Captura os dados do produto informados na NF-e
             $item = array();
             $item['id_produto'] = null;
             $item['codigo_barra'] = !empty($value->prod->cEAN) ? (string) $value->prod->cEAN : (string) $value->prod->cEANTrib;
             $item['cod_ncm'] = !empty($value->prod->NCM) ? (string) $value->prod->NCM : '';
             $item['dsc_unidade_medida'] = !empty($value->prod->uCom) ? (string) $value->prod->uCom : (string) $value->prod->uTrib;
             $item['num_cest'] = !empty($value->prod->CEST) ? (string) $value->prod->CEST : '';
             $item['nome_produto'] = (string) $value->prod->xProd;
             $item['custo'] = (double) $value->prod->vUnCom;
             $item['qtd'] = (int) $value->prod->qCom;
             $item['imposto'] = $prcImposto;
             $item['vlr_imposto'] = (double) ($item['custo'] * $prcImposto) / 100;
             $item['flg_localizado'] = false;
             $item['nome_fabricante'] = '';
             $item['peso'] = '';
             $item['margem_atacado'] = 0;
             $item['margem_intermediario'] = 0;
             $item['margem_varejo'] = 0;
             if (!empty($item['codigo_barra'])) {
                 // Pesquisa se o produto existe no BD
                 $paramsPesquisaProduto = array();
                 $paramsPesquisaProduto['tpe->id_empreendimento'] = $_GET['id_empreendimento'];
                 $paramsPesquisaProduto['pro->codigo_barra'] = $item['codigo_barra'];
                 $produtoDao = new ProdutoDao();
                 $aux = $produtoDao->getProdutos(null, null, $paramsPesquisaProduto);
                 $produto = $produtoDao->getProdutos(null, null, $paramsPesquisaProduto)['produtos'][0];
                 if ($produto) {
                     // Se o produto foi localizado no BD...
                     // Captura os dados do cadastro do produto no BD
                     $item['id_produto'] = $produto['id_produto'];
                     $item['nome_produto'] = $produto['nome'];
                     $item['nome_fabricante'] = $produto['nome_fabricante'];
                     $item['peso'] = $produto['peso'];
                     //$item['custo'] 					= (($produto['vlr_custo']) ? $produto['vlr_custo'] : $item['custo']);
                     $item['custo'] = $item['custo'];
                     $item['margem_atacado'] = $produto['perc_venda_atacado'];
                     $item['margem_intermediario'] = $produto['perc_venda_intermediario'];
                     $item['margem_varejo'] = $produto['perc_venda_varejo'];
                     $item['flg_localizado'] = true;
                     $PrecoProdutoTO = new PrecoProdutoTO();
                     $PrecoProdutoDao = new PrecoProdutoDao();
                     $PrecoProdutoTO->id_produto = $produto['id'];
                     $PrecoProdutoTO->id_empreendimento = $_GET['id_empreendimento'];
                     $PrecoProdutoTO->vlr_custo = $item['custo'];
                     $PrecoProdutoTO->perc_imposto_compra = $item['imposto'];
                     $PrecoProdutoTO->perc_desconto_compra = $produto['perc_desconto_compra'];
                     $PrecoProdutoTO->perc_venda_atacado = $produto['perc_venda_atacado'];
                     $PrecoProdutoTO->perc_venda_intermediario = $produto['perc_venda_intermediario'];
                     $PrecoProdutoTO->perc_venda_varejo = $produto['perc_venda_varejo'];
                     if (!$PrecoProdutoDao->atualizaPreco($PrecoProdutoTO)) {
                         if ($conn->inTransaction()) {
                             $conn->rollback();
                         }
                         Flight::halt(500, 'erro ao atualizar preço');
                     }
                 } else {
                     if (isset($_GET['flg_cpne']) && (int) $_GET['flg_cpne'] == 1) {
                         // Se marcou para cadastrar produtos não localizados no BD...
                         $prodTO = new ProdutoTO();
                         $prodTO->codigo_barra = $item['codigo_barra'];
                         $prodTO->nome = $item['nome_produto'];
                         $prodTO->cod_ncm = $item['cod_ncm'];
                         $prodTO->dsc_unidade_medida = $item['dsc_unidade_medida'];
                         $prodTO->num_cest = $item['num_cest'];
                         $id_produto = $produtoDao->saveProduto($prodTO);
                         // Cadastro o produto no BD
                         if ($id_produto) {
                             // Se o produto foi cadastrado com sucesso...
                             $prodEmprTO = new ProdutoEmpreendimentoTO();
                             $prodEmprTO->id_produto = $id_produto;
                             $prodEmprTO->id_empreendimento = $_GET['id_empreendimento'];
                             // Associa o produto ao empreendimento
                             if (!$produtoDao->produtoEmpreendimento($prodEmprTO)) {
                                 if ($conn->inTransaction()) {
                                     $conn->rollback();
                                 }
                                 Flight::halt(500, 'Erro ao associar produto [' . $prodTO->nome . '] ao empreendimento [' . $_GET['id_empreendimento'] . ']');
                             }
                             if ($data['fornecedor']['flg_localizado']) {
                                 // Se o fornecedor foi localizado no BD...
                                 $prodFornTO = new ProdutoFornecedorTO();
                                 $prodFornTO->id_produto = (int) $id_produto;
                                 $prodFornTO->id_fornecedor = $data['fornecedor']['dados']['id'];
                                 // Associa o produto ao fornecedor
                                 if (!$produtoDao->fornecedorProduto($prodFornTO)) {
                                     if ($conn->inTransaction()) {
                                         $conn->rollback();
                                     }
                                     Flight::halt(500, 'Erro ao associar produto [' . $prodTO->nome . '] ao fornecedor [' . $data['fornecedor']['dados']['nome_fornecedor'] . ']');
                                 }
                             }
                             $prdProdDao = new PrecoProdutoDao();
                             $prcProdTO = new PrecoProdutoTO();
                             $prcProdTO->id_produto = (int) $id_produto;
                             $prcProdTO->id_empreendimento = $_GET['id_empreendimento'];
                             $prcProdTO->vlr_custo = $item['custo'];
                             $prcProdTO->perc_imposto_compra = $item['imposto'] / 100;
                             $prcProdTO->perc_desconto_compra = 0;
                             $prcProdTO->perc_venda_atacado = 0;
                             $prcProdTO->perc_venda_intermediario = 0;
                             $prcProdTO->perc_venda_varejo = 0;
                             //Cadastra o preço do produto e associa
                             if (!$prdProdDao->atualizaPreco($prcProdTO)) {
                                 if ($conn->inTransaction()) {
                                     $conn->rollback();
                                 }
                                 Flight::halt(500, 'Erro ao atualizar preço do produto [' . $prodTO->nome . ']');
                             }
                             $item['id_produto'] = $id_produto;
                             $item['flg_localizado'] = true;
                         } else {
                             if ($conn->inTransaction()) {
                                 $conn->rollback();
                             }
                             Flight::halt(500, 'erro ao cadastrar produto');
                         }
                     }
                 }
             }
             // Adiciona o item na lista de produtos
             $data['itensBD'][] = $item;
         }
         if ($conn->inTransaction()) {
             $conn->commit();
         }
         // Exclui o arquivo XML criado temporáriamente
         unlink($filename);
         // Retorna os dados da NF-e em formato de JSON
         Flight::json($data);
     } catch (Exception $e) {
         if ($conn->inTransaction()) {
             $conn->rollback();
         }
         jsonException($e);
     }
 }