public function updatePessoaFisica(PessoaFisicaTO $PessoaFisicaTO)
 {
     $sql = 'UPDATE tbl_pessoa_fisica SET cpf = :cpf , rg = :rg WHERE usuarios_id = :usuarios_id';
     $update = $this->conn->prepare($sql);
     $update->bindValue(':usuarios_id', $PessoaFisicaTO->usuarios_id, PDO::PARAM_STR);
     $update->bindValue(':cpf', $PessoaFisicaTO->cpf, PDO::PARAM_STR);
     $update->bindValue(':rg', $PessoaFisicaTO->rg, PDO::PARAM_STR);
     if ($update->execute()) {
         if ($this->existisPessoaFisica($PessoaFisicaTO->usuarios_id)) {
             return true;
         } else {
             $PessoaJuridicaDao = new PessoaJuridicaDao();
             if (!$PessoaJuridicaDao->deletePessoaJuridica($PessoaFisicaTO->usuarios_id)) {
                 return false;
             }
             return $this->savePessoaFisica($PessoaFisicaTO);
         }
     } else {
         return false;
     }
 }
 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 cadastroRapidoClientePedido()
 {
     $ClienteTO = new ClienteTO();
     $PessoaFisicaTO = new PessoaFisicaTO();
     $PessoaJuridicaTO = new PessoaJuridicaTO();
     $ClienteDao = new ClienteDao();
     $AutenticacaoTO = new AutenticacaoTO();
     $validator = new DataValidator();
     $ClienteTO->nome = isset($_POST["nome"]) ? $_POST["nome"] : "";
     $ClienteTO->status = isset($_POST["status"]) ? $_POST["status"] : "1";
     $ClienteTO->id_perfil = 6;
     $ClienteTO->id_empreendimento = isset($_POST["id_empreendimento"]) ? $_POST["id_empreendimento"] : NULL;
     $ClienteTO->email = isset($_POST["email"]) ? $_POST["email"] : "";
     $ClienteTO->tel_fixo = isset($_POST["tel_fixo"]) ? $_POST["tel_fixo"] : NULL;
     $ClienteTO->celular = isset($_POST["celular"]) ? $_POST["celular"] : NULL;
     $ClienteTO->indicacao = isset($_POST["indicacao"]) ? $_POST["indicacao"] : NULL;
     $ClienteTO->id_como_encontrou = isset($_POST["id_como_encontrou"]) ? $_POST["id_como_encontrou"] : NULL;
     $ClienteTO->id = isset($_POST["id"]) ? $_POST["id"] : NULL;
     $tipo_cadastro = "pf";
     $empreendimentos = isset($_POST['empreendimentos']) ? $_POST['empreendimentos'] : array();
     $acao_cliente = isset($_POST['acao_cliente']) ? $_POST['acao_cliente'] : 'insert';
     if ($acao_cliente == 'update') {
         $validator->set_msg('O ID do cliente é obrigatório')->set('id', $ClienteTO->id)->is_required();
     }
     $validator->set_msg('O nome do cliente é obrigatório')->set('nome', $ClienteTO->nome)->is_required();
     $validator->set_msg('informe o status do cliente')->set('status', $ClienteTO->status)->is_num();
     $validator->set_msg('E-mail inválido')->set('email', $ClienteTO->email)->is_email();
     $validator->set_msg('O número do Tel. Fixo é obrigatório')->set('tel_fixo', $ClienteTO->tel_fixo)->is_num();
     $validator->set_msg('O codigo do empreendimento é obrigatório')->set('id_empreendimento', $ClienteTO->id_empreendimento)->is_required();
     $validator->set_msg('O perfil é obrigatório')->set('id_perfil', $ClienteTO->id_perfil)->is_required();
     if (!(isset($empreendimentos) && is_array($empreendimentos) && count($empreendimentos) > 0)) {
         $validator->_errors['empreendimentos'][] = 'É obrigatório informar pelo menos um empreendimento';
     }
     if (!$validator->validate()) {
         Flight::response()->status(406)->header('Content-Type', 'application/json')->write(json_encode($validator->get_errors()))->send();
         return;
     }
     if ($acao_cliente == 'insert') {
         $last_id = $ClienteDao->saveCliente($ClienteTO);
     }
     if ($acao_cliente == 'update') {
         $last_id = $ClienteDao->updateCliente($ClienteTO);
     }
     $EmpreendimentoDao = new EmpreendimentoDao();
     $UsuarioEmpreendimentoTO = new UsuarioEmpreendimentoTO();
     if ($last_id && $acao_cliente == "insert") {
         $UsuarioEmpreendimentoTO->id_usuario = $last_id;
         $EmpreendimentoDao->delAllUsuarioEmp($UsuarioEmpreendimentoTO);
         if ($tipo_cadastro == "pf") {
             $PessoaFisicaDao = new PessoaFisicaDao();
             $PessoaFisicaTO->usuarios_id = $last_id;
             if (!$PessoaFisicaDao->savePessoaFisica($PessoaFisicaTO)) {
                 Flight::halt(500, 'Erro ao cadastrar o cliente PF');
             }
         } else {
             if ($tipo_cadastro == "pj") {
                 $PessoaJuridicaDao = new PessoaJuridicaDao();
                 $PessoaJuridicaTO->usuarios_id = $last_id;
                 if (!$PessoaJuridicaDao->savePessoaJuridica($PessoaJuridicaTO)) {
                     Flight::halt(500, 'Erro ao cadastrar o cliente PJ');
                 }
             }
         }
         $UsuarioEmpreendimentoTO->id_usuario = $last_id;
         foreach ($empreendimentos as $key => $value) {
             $UsuarioEmpreendimentoTO->id_empreendimento = $value['id'];
             if (!$EmpreendimentoDao->saveUsuarioEmpreendimento($UsuarioEmpreendimentoTO)) {
                 Flight::halt(500, 'erro ao lincar usuario ao empreendimento');
             }
         }
         Flight::response()->status(201)->header('Content-Type', 'application/json')->write(json_encode(array('id_cliente' => $last_id)))->send();
     } else {
         if ($last_id == false) {
             Flight::halt(500, 'Erro ao cadastrar o cliente');
         } else {
             Flight::response()->status(200)->header('Content-Type', 'application/json')->write(json_encode(array('id_cliente' => $ClienteTO->id)))->send();
         }
     }
 }