public static function getTelefones()
 {
     $telefoneDao = new TelefoneDao();
     $items = $telefoneDao->getTelefones($_GET);
     if ($items) {
         Flight::json($items);
     } else {
         Flight::halt(404, 'Nenhum telefone encontrado.');
     }
 }
 public function getFornecedores($offset, $limit, $busca = array())
 {
     $offset = $offset == null ? 0 : $offset;
     $limit = $limit == null ? 0 : $limit;
     $sql = "SELECT DISTINCT frn.* FROM `tbl_fornecedores` AS frn ";
     if (array_key_exists('ped->id', $busca) && array_key_exists('ent->id', $busca)) {
         $sql .= "LEFT JOIN tbl_pedido_fornecedor AS ped ON frn.id = ped.id_fornecedor\n\t\t\t\t\tLEFT JOIN tbl_estoque_entrada AS ent ON ped.id = ent.id_pedido_fornecedor";
     }
     if (array_key_exists('ped->id', $busca) && array_key_exists('ent->id', $busca)) {
         $sql .= " INNER JOIN tbl_produto_fornecedor AS rel ON rel.id_fornecedor = frn.id";
     }
     if (is_array($busca) && count($busca) > 0) {
         $where = prepareWhere($busca);
         $sql .= " WHERE " . $where;
     }
     if ($limit > 0) {
         $pag = $offset / $limit + 1;
         $Paginacao = new PaginacaoController($sql);
         $Paginacao->num_paginas = 10;
         $Paginacao->resultados_pagina = $limit;
         $Paginacao->paginarResultado($pag);
         $links_paginacao = $Paginacao->paginasDisponiveis($pag);
         $sql = $Paginacao->_sql_paginacao;
     }
     $select = $this->conn->prepare($sql);
     if ($select->execute()) {
         if ($select->rowCount() > 0) {
             $EstadoDao = new EstadoDao();
             $CidadeDao = new CidadeDao();
             $telefoneDao = new TelefoneDao();
             $saida['fornecedores'] = parse_arr_values($select->fetchAll(PDO::FETCH_ASSOC), 'all');
             foreach ($saida['fornecedores'] as $key => $value) {
                 $saida['fornecedores'][$key]['cidade'] = $CidadeDao->getCidade($value['cod_cidade']);
                 $saida['fornecedores'][$key]['estado'] = $EstadoDao->getEstado($value['cod_estado']);
                 $saida['fornecedores'][$key]['telefones'] = $telefoneDao->getTelefones(array('tbl_referencia' => 'tbl_fornecedores', 'id_referencia' => $value['id'], 'cplSql' => ' ORDER BY tt.id ASC'));
             }
             $saida['paginacao'] = isset($links_paginacao) ? $links_paginacao : null;
             return $saida;
         } else {
             return false;
         }
     } else {
         return false;
     }
 }
 public static function saveFornecedor()
 {
     $dados = $_POST;
     $validator = new DataValidator();
     $validator->set_msg('O campo nome é obrigatório')->set('nome_fornecedor', getKeyArr($dados, 'nome_fornecedor'))->is_required();
     $validator->set_msg('O campo endereço é obrigatório')->set('nme_endereco', getKeyArr($dados, 'nme_endereco'))->is_required();
     $validator->set_msg('O campo cidade é obrigatório')->set('nome_cidade', getKeyArr($dados, 'nome_cidade'))->is_required();
     if (!$validator->validate()) {
         Flight::response()->status(406)->header('Content-Type', 'application/json')->write(json_encode($validator->get_errors()))->send();
         return;
     }
     $ReferenciaIntegracaoDao = new ReferenciaIntegracaoDao();
     $PrestaShopDao = new PrestaShopDao($dados['id_empreendimento']);
     if (isset($dados['cod_estado']) || is_numeric($dados['cod_estado'])) {
         $ReferenciaEstadoTO = new ReferenciaIntegracaoTO();
         $ReferenciaEstadoTO->sistema_integrado = 'PrestaShop';
         $ReferenciaEstadoTO->tabela = 'tb_estados';
         $ReferenciaEstadoTO->id_item = $dados['cod_estado'];
         $ReferenciaEstadoTO->tipo = 'estado';
         $referenciaEstado = $ReferenciaIntegracaoDao->refExists($ReferenciaEstadoTO);
         if (!$referenciaEstado) {
             Flight::response()->status(500)->header('Content-Type', 'application/json')->write(json_encode(array("message" => "ID de referencia do Estado não pode ser encontrado")))->send();
         }
     } else {
         $referenciaEstado = array('id_item_referencia' => null);
     }
     $ReferenciaBrasilTO = new ReferenciaIntegracaoTO();
     $ReferenciaBrasilTO->sistema_integrado = 'PrestaShop';
     $ReferenciaBrasilTO->tipo = 'brasil';
     $referenciaBrasil = $ReferenciaIntegracaoDao->refExists($ReferenciaBrasilTO);
     if (!$referenciaBrasil) {
         Flight::response()->status(500)->header('Content-Type', 'application/json')->write(json_encode(array("message" => "ID de referencia do Brasil não pode ser encontrado")))->send();
     }
     $sendPrestaShop = new stdClass();
     $sendPrestaShop->id = isset($dados['id']) && is_numeric($dados['id']) ? $dados['id'] : NULL;
     $sendPrestaShop->name = $dados['nome_fornecedor'];
     $sendPrestaShop->active = 1;
     $ReferenciaFornecedorTO = new ReferenciaIntegracaoTO();
     $ReferenciaFornecedorTO->sistema_integrado = 'PrestaShop';
     $ReferenciaFornecedorTO->tabela = 'tbl_fornecedores';
     $ReferenciaFornecedorTO->id_item = $dados['id'];
     $ReferenciaFornecedorTO->tipo = 'fornecedor';
     $ReferenciaFornecedorTO->id_empreendimento = $dados['id_empreendimento'];
     $referenciaFornecedor = $ReferenciaIntegracaoDao->refExists($ReferenciaFornecedorTO);
     if (!$referenciaFornecedor) {
         unset($sendPrestaShop->id);
         $result = $PrestaShopDao->newFornecedor($sendPrestaShop);
         if (!$result['status']) {
             $error = isset($result['errors']) ? $result['errors']->error : array();
             Flight::response()->status(500)->header('Content-Type', 'application/json')->write(json_encode($error))->send();
         }
         $ReferenciaFornecedorTO->id_item_referencia = $result['fornecedor']->id;
         $sendPrestaShop->id = $result['fornecedor']->id;
         $ReferenciaIntegracaoDao->save($ReferenciaFornecedorTO);
         $TelefoneDao = new TelefoneDao();
         $telefones = $TelefoneDao->getTelefones(array('tt.id_referencia' => $dados['id']));
         if (is_array($telefones)) {
             $ReferenciaTelefoneTO = new ReferenciaIntegracaoTO();
             $ReferenciaTelefoneTO->sistema_integrado = 'PrestaShop';
             $ReferenciaTelefoneTO->tabela = 'tbl_telefone';
             $ReferenciaTelefoneTO->id_item = $telefones[0]['id'];
             $ReferenciaTelefoneTO->tipo = 'telefone_fornecedor';
             $ReferenciaTelefoneTO->id_empreendimento = $dados['id_empreendimento'];
             $ReferenciaTelefoneTO->id_item_referencia = $result['fornecedor']->id;
             $referenciaTelefone = $ReferenciaIntegracaoDao->refExists($ReferenciaTelefoneTO);
             if (!$referenciaTelefone) {
                 $ReferenciaIntegracaoDao->save($ReferenciaTelefoneTO);
             }
         }
     } else {
         $sendPrestaShop->id = $referenciaFornecedor['id_item_referencia'];
         $result = $PrestaShopDao->editFornecedor($sendPrestaShop);
         if (!$result['status']) {
             $error = isset($result['errors']) ? $result['errors']->error : array();
             Flight::response()->status(500)->header('Content-Type', 'application/json')->write(json_encode($error))->send();
         }
         $TelefoneDao = new TelefoneDao();
         $telefones = $TelefoneDao->getTelefones(array('tt.id_referencia' => $dados['id']));
         if (is_array($telefones)) {
             $ReferenciaTelefoneTO = new ReferenciaIntegracaoTO();
             $ReferenciaTelefoneTO->sistema_integrado = 'PrestaShop';
             $ReferenciaTelefoneTO->tabela = 'tbl_telefone';
             $ReferenciaTelefoneTO->id_item = $telefones[0]['id'];
             $ReferenciaTelefoneTO->tipo = 'telefone_fornecedor';
             $ReferenciaTelefoneTO->id_empreendimento = $dados['id_empreendimento'];
             $ReferenciaTelefoneTO->id_item_referencia = $referenciaFornecedor['id_item_referencia'];
             $referenciaTelefone = $ReferenciaIntegracaoDao->refExists($ReferenciaTelefoneTO);
             if (!$referenciaTelefone) {
                 $ReferenciaIntegracaoDao->save($ReferenciaTelefoneTO);
             }
         }
     }
     if (isset($dados['num_cep']) && !empty($dados['num_cep'])) {
         $telefone = null;
         if (isset($dados['telefones']) && is_array($dados['telefones'])) {
             if (isset($dados['telefones'][0]) && !empty($dados['telefones'][0]['num_telefone'])) {
                 $telefone = $dados['telefones'][0]['num_telefone'];
             } else {
                 if (isset($dados['telefones'][1]) && !empty($dados['telefones'][1]['num_telefone'])) {
                     $telefone = $dados['telefones'][1]['num_telefone'];
                 }
             }
         }
         $ReferenciaEnderecoTO = new ReferenciaIntegracaoTO();
         $ReferenciaEnderecoTO->sistema_integrado = 'PrestaShop';
         $ReferenciaEnderecoTO->tabela = 'tbl_fornecedores';
         $ReferenciaEnderecoTO->id_item = $dados['id'];
         $ReferenciaEnderecoTO->tipo = 'endereço';
         $ReferenciaEnderecoTO->id_empreendimento = $dados['id_empreendimento'];
         $referenciaEndereco = $ReferenciaIntegracaoDao->refExists($ReferenciaEnderecoTO);
         $sendPrestaShopAddresses = new stdClass();
         $sendPrestaShopAddresses->id_supplier = $sendPrestaShop->id;
         $sendPrestaShopAddresses->id_country = $referenciaBrasil['id_item_referencia'];
         $sendPrestaShopAddresses->id_state = $referenciaEstado['id_item_referencia'];
         $sendPrestaShopAddresses->alias = empty(getKeyArr($dados, 'nome_fornecedor')) ? '' : substr(getKeyArr($dados, 'nome_fornecedor'), 0, 32);
         $sendPrestaShopAddresses->company = getKeyArr($dados, 'nome_fornecedor');
         $sendPrestaShopAddresses->lastname = 'lastname';
         $sendPrestaShopAddresses->firstname = 'firstname';
         $sendPrestaShopAddresses->address1 = getKeyArr($dados, 'nme_endereco');
         $sendPrestaShopAddresses->address2 = getKeyArr($dados, 'nme_bairro');
         $sendPrestaShopAddresses->postcode = getKeyArr($dados, 'num_cep');
         $sendPrestaShopAddresses->city = getKeyArr($dados, 'nome_cidade');
         $sendPrestaShopAddresses->other = getKeyArr($dados, 'end_complemento');
         $sendPrestaShopAddresses->phone = $telefone;
         if (!$referenciaEndereco) {
             unset($sendPrestaShopAddresses->id);
             $resultEndereco = $PrestaShopDao->newEndereco($sendPrestaShopAddresses);
             if (!$resultEndereco['status']) {
                 $error = isset($resultEndereco['errors']) ? $resultEndereco['errors']->error : array();
                 Flight::response()->status(500)->header('Content-Type', 'application/json')->write(json_encode($error))->send();
             }
             $ReferenciaEnderecoTO->id_item_referencia = $resultEndereco['endereco']->id;
             $ReferenciaIntegracaoDao->save($ReferenciaEnderecoTO);
         } else {
             $sendPrestaShopAddresses->id = $referenciaEndereco['id_item_referencia'];
             $resultEndereco = $PrestaShopDao->editEndereco($sendPrestaShopAddresses);
             if (!$resultEndereco['status']) {
                 $error = isset($resultEndereco['errors']) ? $resultEndereco['errors']->error : array();
                 Flight::response()->status(500)->header('Content-Type', 'application/json')->write(json_encode($error))->send();
             }
         }
     }
     echo json_encode($result);
 }