public static function updateFornecedor()
 {
     $FornecedorTO = new FornecedorTO();
     $FornecedorDao = new FornecedorDao();
     $FornecedorTO->id = isset($_POST['id']) ? $_POST['id'] : NULL;
     $FornecedorTO->nome_fornecedor = isset($_POST['nome_fornecedor']) ? $_POST['nome_fornecedor'] : NULL;
     $FornecedorTO->id_empreendimento = isset($_POST['id_empreendimento']) ? $_POST['id_empreendimento'] : NULL;
     $FornecedorTO->tipo_cadastro = isset($_POST['tipo_cadastro']) ? $_POST['tipo_cadastro'] : NULL;
     $FornecedorTO->num_cpf = isset($_POST['num_cpf']) ? $_POST['num_cpf'] : NULL;
     $FornecedorTO->num_cnpj = isset($_POST['num_cnpj']) ? $_POST['num_cnpj'] : NULL;
     $FornecedorTO->num_inscricao_estadual = isset($_POST['num_inscricao_estadual']) ? $_POST['num_inscricao_estadual'] : NULL;
     $FornecedorTO->nme_fantasia = isset($_POST['nme_fantasia']) ? $_POST['nme_fantasia'] : NULL;
     $FornecedorTO->num_cep = isset($_POST['num_cep']) ? $_POST['num_cep'] : NULL;
     $FornecedorTO->nme_endereco = isset($_POST['nme_endereco']) ? $_POST['nme_endereco'] : NULL;
     $FornecedorTO->num_logradouro = isset($_POST['num_logradouro']) ? $_POST['num_logradouro'] : NULL;
     $FornecedorTO->nme_bairro = isset($_POST['nme_bairro']) ? $_POST['nme_bairro'] : NULL;
     $FornecedorTO->cod_estado = isset($_POST['cod_estado']) ? $_POST['cod_estado'] : NULL;
     $FornecedorTO->cod_cidade = isset($_POST['cod_cidade']) ? $_POST['cod_cidade'] : NULL;
     $FornecedorTO->id_banco = isset($_POST['id_banco']) ? $_POST['id_banco'] : NULL;
     $FornecedorTO->num_agencia = isset($_POST['num_agencia']) ? $_POST['num_agencia'] : NULL;
     $FornecedorTO->num_conta = isset($_POST['num_conta']) ? $_POST['num_conta'] : NULL;
     $FornecedorTO->end_complemento = isset($_POST['end_complemento']) ? $_POST['end_complemento'] : NULL;
     $FornecedorTO->id_plano_contas_padrao = isset($_POST['id_plano_contas_padrao']) ? $_POST['id_plano_contas_padrao'] : NULL;
     $telefones = isset($_POST['telefones']) && is_array($_POST['telefones']) && count($_POST['telefones']) > 0 ? $_POST['telefones'] : false;
     if ($FornecedorTO->tipo_cadastro == 'pj') {
         $FornecedorTO->num_cpf = NULL;
     } else {
         if ($FornecedorTO->tipo_cadastro == 'pf') {
             $FornecedorTO->num_cnpj = NULL;
             $FornecedorTO->num_inscricao_estadual = NULL;
             $FornecedorTO->nme_fantasia = NULL;
         }
     }
     $validator = new DataValidator();
     $validator->set_msg('O codigo do fornecedor é obrigatório')->set('id', $FornecedorTO->id)->is_required();
     if ($FornecedorTO->tipo_cadastro == 'pj' and !empty($FornecedorTO->num_cnpj) and !empty($FornecedorTO->id)) {
         $aux = $FornecedorDao->fornecedorExists(array('cplSql' => "num_cnpj = '" . $FornecedorTO->num_cnpj . "' AND id_empreendimento = " . $FornecedorTO->id_empreendimento . " AND id !=" . $FornecedorTO->id));
         $validator->set_msg('CNPJ já cadastrado')->set('num_cnpj', $aux)->is_equals(false);
     } else {
         if ($FornecedorTO->tipo_cadastro == 'pf' and !empty($FornecedorTO->num_cpf) and !empty($FornecedorTO->id)) {
             $aux = $FornecedorDao->fornecedorExists(array('cplSql' => "num_cpf = '" . $FornecedorTO->num_cpf . "' AND id_empreendimento = " . $FornecedorTO->id_empreendimento . " AND id !=" . $FornecedorTO->id));
             $validator->set_msg('CPF já cadastrado')->set('num_cpf', $aux)->is_equals(false);
         }
     }
     $validator->set_msg($FornecedorTO->tipo_cadastro == 'pj' ? 'A Razão Social é obrigatória' : 'O nome é obrigatório')->set('nome_fornecedor', $FornecedorTO->nome_fornecedor)->is_required();
     $validator->set_msg('o codigo do empreendimento é obrigatório')->set('id_empreendimento', $FornecedorTO->id_empreendimento)->is_num();
     if (!$validator->validate()) {
         Flight::response()->status(406)->header('Content-Type', 'application/json')->write(json_encode($validator->get_errors()))->send();
         return;
     }
     if ($FornecedorDao->updateFornecedor($FornecedorTO)) {
         $TelefoneDao = new TelefoneDao();
         if ($telefones) {
             $TelefoneDao->updateTelefones($telefones, $FornecedorTO->id);
         }
         Flight::halt(200);
     } else {
         Flight::halt(500, 'erro ao atualizar');
     }
 }
 public static function requestUpdateFornecedor()
 {
     try {
         $dados = $_POST;
         $id_empreendimento = $dados['id_empreendimento'];
         $PrestaShopDao = new PrestaShopDao($dados['id_empreendimento']);
         $ReferenciaIntegracaoDao = new ReferenciaIntegracaoDao();
         $ReferenciaFornecedorTO = new ReferenciaIntegracaoTO();
         $ReferenciaFornecedorTO->sistema_integrado = 'PrestaShop';
         $ReferenciaFornecedorTO->tabela = 'tbl_fornecedores';
         $ReferenciaFornecedorTO->id_item_referencia = $dados['fornecedor']['id'];
         $ReferenciaFornecedorTO->tipo = 'fornecedor';
         $ReferenciaFornecedorTO->id_empreendimento = $id_empreendimento;
         $referenciaFornecedor = $ReferenciaIntegracaoDao->refExists($ReferenciaFornecedorTO, true);
         if (!$referenciaFornecedor) {
             self::requestSaveFornecedor();
             return;
             //throw new Exception('Não existe uma referencia para o fornecedor #'.$dados['fornecedor']['id'], 1);
         }
         $ReferenciaEstadoTO = new ReferenciaIntegracaoTO();
         $ReferenciaEstadoTO->sistema_integrado = 'PrestaShop';
         $ReferenciaEstadoTO->tabela = 'tb_estados';
         $ReferenciaEstadoTO->id_item_referencia = $dados['address']['id_state'];
         $ReferenciaEstadoTO->tipo = 'estado';
         $referenciaEstado = $ReferenciaIntegracaoDao->refExists($ReferenciaEstadoTO, true);
         if (!$referenciaEstado) {
             throw new Exception('Não existe uma referencia para o estado #' . $dados['id_state'], 1);
         }
         $ReferenciaBrasilTO = new ReferenciaIntegracaoTO();
         $ReferenciaBrasilTO->sistema_integrado = 'PrestaShop';
         $ReferenciaBrasilTO->tipo = 'brasil';
         $referenciaBrasil = $ReferenciaIntegracaoDao->refExists($ReferenciaBrasilTO);
         if (!$referenciaBrasil) {
             throw new Exception('Não existe uma referencia para o Pais Brasil', 1);
         }
         $FornecedorTO = new stdClass();
         $FornecedorDao = new FornecedorDao();
         $FornecedorTO->id = $referenciaFornecedor['id_item'];
         $FornecedorTO->nome_fornecedor = $dados['fornecedor']['name'];
         $FornecedorTO->id_empreendimento = $id_empreendimento;
         $FornecedorTO->num_cep = $dados['address']['postcode'];
         $FornecedorTO->nme_endereco = $dados['address']['address'];
         $FornecedorTO->nme_bairro = $dados['address']['address2'];
         $FornecedorTO->cod_estado = $referenciaEstado['id_item'];
         if (!$FornecedorDao->updateFornecedor($FornecedorTO)) {
             throw new Exception('Erro ao cadastrar o fornecedor', 1);
         }
         $ReferenciaIntegracaoTO = new ReferenciaIntegracaoTO();
         $ReferenciaIntegracaoTO->sistema_integrado = 'PrestaShop';
         $ReferenciaIntegracaoTO->tabela = 'tbl_fornecedores';
         $ReferenciaIntegracaoTO->id_item = $referenciaFornecedor['id_item'];
         $ReferenciaIntegracaoTO->id_item_referencia = $dados['fornecedor']['id'];
         $ReferenciaIntegracaoTO->tipo = 'fornecedor';
         $ReferenciaIntegracaoTO->id_empreendimento = $id_empreendimento;
         if (isset($dados['address']['phone'])) {
             $ReferenciaTelefoneTO = new ReferenciaIntegracaoTO();
             $ReferenciaTelefoneTO->sistema_integrado = 'PrestaShop';
             $ReferenciaTelefoneTO->tabela = 'tbl_telefone';
             $ReferenciaTelefoneTO->id_item_referencia = $dados['fornecedor']['id'];
             $ReferenciaTelefoneTO->tipo = 'telefone_fornecedor';
             $ReferenciaTelefoneTO->id_empreendimento = $id_empreendimento;
             $referenciaTelefone = $ReferenciaIntegracaoDao->refExists($ReferenciaTelefoneTO, true);
             $TelefoneDao = new TelefoneDao();
             $telefones[0] = array('num_telefone' => $dados['address']['phone'], 'tbl_referencia' => 'tbl_fornecedores');
             if ($referenciaTelefone) {
                 $telefones[0]['id'] = $referenciaTelefone['id_item'];
                 if (!$TelefoneDao->updateTelefones($telefones, $referenciaFornecedor['id_item'])) {
                     throw new Exception('erro ao atualizar telefones do fornecedor', 1);
                 }
             } else {
                 $TelefoneTO = new TelefoneTO();
                 $TelefoneTO->tbl_referencia = 'tbl_fornecedores';
                 $TelefoneTO->id_referencia = $referenciaFornecedor['id_item'];
                 $TelefoneTO->num_telefone = $dados['address']['phone'];
                 $id_telefone = $TelefoneDao->saveTelefone($TelefoneTO);
                 if (!$id_telefone) {
                     throw new Exception('erro ao inserir telefone do fornecedor', 1);
                 }
                 $ReferenciaTelefoneTO->id_item = $id_telefone;
                 if (!$ReferenciaIntegracaoDao->save($ReferenciaTelefoneTO)) {
                     throw new Exception('erro ao inserir referencia', 1);
                 }
             }
         }
     } catch (Exception $e) {
         $log = new KLogger("logs/logErrorPrestaShop.txt", KLogger::DEBUG);
         $log->LogError($e->getMessage() . '- file:' . $e->getFile() . ' - line:' . $e->getLine());
         $log->LogDebug(json_encode($_POST));
         $log->LogJunp();
         Flight::halt(500, $e->getMessage() . '- file:' . $e->getFile() . ' - line:' . $e->getLine());
     }
 }