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 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);
     }
 }