public static function saveEmpreendimento()
 {
     date_default_timezone_set('America/Sao_Paulo');
     // Preparando objetos
     $EmpreendimentoTO = new EmpreendimentoTO();
     $EmpreendimentoTO->nome_empreendimento = isset($_POST['nome_empreendimento']) ? $_POST['nome_empreendimento'] : '';
     $EmpreendimentoTO->flg_teste = isset($_POST['flg_teste']) && ((int) $_POST['flg_teste'] == 1 || (int) $_POST['flg_teste'] == 0) ? (int) $_POST['flg_teste'] : NULL;
     $EmpreendimentoTO->qtd_dias_teste = isset($_POST['qtd_dias_teste']) ? $_POST['qtd_dias_teste'] : NULL;
     $EmpreendimentoTO->dta_cadastro = date('Y-m-d H:i:s');
     $EmpreendimentoTO->num_cnpj = isset($_POST['num_cnpj']) ? $_POST['num_cnpj'] : '';
     $EmpreendimentoTO->num_inscricao_estadual = isset($_POST['num_inscricao_estadual']) ? $_POST['num_inscricao_estadual'] : '';
     $EmpreendimentoTO->nme_razao_social = isset($_POST['nme_razao_social']) ? $_POST['nme_razao_social'] : '';
     $EmpreendimentoTO->nme_fantasia = isset($_POST['nme_fantasia']) ? $_POST['nme_fantasia'] : '';
     $EmpreendimentoTO->nme_logradouro = isset($_POST['nme_logradouro']) ? $_POST['nme_logradouro'] : '';
     $EmpreendimentoTO->num_logradouro = isset($_POST['num_logradouro']) ? $_POST['num_logradouro'] : '';
     $EmpreendimentoTO->nme_bairro_logradouro = isset($_POST['nme_bairro_logradouro']) ? $_POST['nme_bairro_logradouro'] : '';
     $EmpreendimentoTO->cod_cidade = isset($_POST['cod_cidade']) ? $_POST['cod_cidade'] : NULL;
     $EmpreendimentoTO->cod_estado = isset($_POST['cod_estado']) ? $_POST['cod_estado'] : NULL;
     $EmpreendimentoTO->cod_regime_tributario = isset($_POST['cod_regime_tributario']) && is_numeric($_POST["cod_regime_tributario"]) ? $_POST['cod_regime_tributario'] : NULL;
     $EmpreendimentoTO->cod_regime_pis_cofins = isset($_POST['cod_regime_pis_cofins']) && is_numeric($_POST["cod_regime_pis_cofins"]) ? $_POST['cod_regime_pis_cofins'] : NULL;
     $EmpreendimentoTO->cod_tipo_empresa = isset($_POST['cod_tipo_empresa']) && is_numeric($_POST["cod_tipo_empresa"]) ? $_POST['cod_tipo_empresa'] : NULL;
     $EmpreendimentoTO->flg_contribuinte_icms = isset($_POST['flg_contribuinte_icms']) ? (int) $_POST['flg_contribuinte_icms'] : 0;
     $EmpreendimentoTO->flg_contribuinte_ipi = isset($_POST['flg_contribuinte_ipi']) ? (int) $_POST['flg_contribuinte_ipi'] : 0;
     $EmpreendimentoTO->cod_zoneamento = isset($_POST['cod_zoneamento']) && is_numeric($_POST["cod_zoneamento"]) ? $_POST['cod_zoneamento'] : NULL;
     $EmpreendimentoTO->num_percentual_credito_simples = isset($_POST['num_percentual_credito_simples']) && is_numeric($_POST["num_percentual_credito_simples"]) ? $_POST['num_percentual_credito_simples'] : NULL;
     $EmpreendimentoTO->num_cep = isset($_POST['num_cep']) ? $_POST['num_cep'] : NULL;
     $EmpreendimentoTO->num_inscricao_estadual_st = isset($_POST['num_inscricao_estadual_st']) ? $_POST['num_inscricao_estadual_st'] : NULL;
     $UsuarioEmpreendimentoTO = new UsuarioEmpreendimentoTO();
     $UsuarioEmpreendimentoTO->id_usuario = isset($_POST['id_usuario']) ? $_POST['id_usuario'] : '';
     $regime_especial = isset($_POST['regime_especial']) ? $_POST['regime_especial'] : array();
     // Validação de campos obrigatórios
     $validator = new DataValidator();
     $validator->set_msg('O nome do Empreendimento é obrigatório')->set('nome_empreendimento', $EmpreendimentoTO->nome_empreendimento)->is_required();
     $validator->set_msg('O ID do usuario é obrigatório')->set('id_usuario', $UsuarioEmpreendimentoTO->id_usuario)->is_required();
     if ($EmpreendimentoTO->flg_teste == 1) {
         $validator->set_msg('A quantidade de dias para teste é obrigatória')->set('qtd_dias_teste', $EmpreendimentoTO->qtd_dias_teste)->is_required()->set_msg('Este campo é obrigatóriamente numérico')->is_num()->set_msg('Este campo deve ser obrigatóriamente maior que 0 (zero)')->min_value(1, true);
     } else {
         $EmpreendimentoTO->qtd_dias_teste = null;
     }
     if (!$validator->validate()) {
         Flight::response()->status(406)->header('Content-Type', 'application/json')->write(json_encode($validator->get_errors()))->send();
         return;
     }
     try {
         $EmpreendimentoDao = new EmpreendimentoDao();
         $last_id_empreendimento = $EmpreendimentoDao->saveEmpreendimento($EmpreendimentoTO);
         if (!$last_id_empreendimento) {
             Flight::halt(500, 'erro ao salvar empreendimento');
         } else {
             $RegimeEspecialDao = new RegimeEspecialDao();
             $RegimeEspecialDao->saveRegimeEmpreendimento($regime_especial, $last_id_empreendimento);
             $arrConfigs = array();
             $arrConfigs['id_plano_fechamento_caixa'] = "-1";
             $arrConfigs['id_plano_caixa'] = "-1";
             $arrConfigs['id_fornecedor_movimentacao_caixa'] = "-1";
             $arrConfigs['id_cliente_movimentacao_caixa'] = "-1";
             $arrConfigs['path_logo_rel'] = "-1";
             $arrConfigs['id_produto_debito_anterior_cliente'] = "-1";
             $arrConfigs['id_conta_bancaria_padrao_fechamento_automatico'] = "-1";
             $arrConfigs['id_usuario_venda_vitrine'] = "-1";
             $arrConfigs['time_zone'] = "America/Sao_Paulo";
             // salvar id_cliente_movimentacao_caixa = CLIENTE LOJA FÍSICA
             $cliMovCaixaTO = new ClienteTO();
             $cliMovCaixaTO->nome = "CLIENTE LOJA FÍSICA";
             $cliMovCaixaTO->id_perfil = 6;
             $cliMovCaixaTO->id_empreendimento = $last_id_empreendimento;
             $cliMovCaixaDao = new ClienteDao();
             $last_id_cliMovCaixa = $cliMovCaixaDao->saveCliente($cliMovCaixaTO);
             if (!$last_id_cliMovCaixa) {
                 Flight::halt(500, 'erro ao criar [CLIENTE LOJA FÍSICA] padrão para o empreendimento [$last_id_empreendimento]');
             }
             $UsuarioEmpreendimentoTO->id_usuario = $last_id_cliMovCaixa;
             $UsuarioEmpreendimentoTO->id_empreendimento = $last_id_empreendimento;
             if (!$EmpreendimentoDao->saveUsuarioEmpreendimento($UsuarioEmpreendimentoTO)) {
                 Flight::halt(500, 'erro ao associar [CLIENTE LOJA FÍSICA] ao empreendimento');
             }
             $arrConfigs['id_cliente_movimentacao_caixa'] = $last_id_cliMovCaixa;
             // salvar id_usuario_venda_vitrine = CLIENTE LOJA VIRTUAL
             $cliVenVitrineTO = new ClienteTO();
             $cliVenVitrineTO->nome = "CLIENTE LOJA VIRTUAL";
             $cliVenVitrineTO->id_perfil = 6;
             $cliVenVitrineTO->id_empreendimento = $last_id_empreendimento;
             $cliVenVitrineDao = new ClienteDao();
             $last_id_cliVenVitrine = $cliVenVitrineDao->saveCliente($cliVenVitrineTO);
             if (!$last_id_cliVenVitrine) {
                 Flight::halt(500, 'erro ao criar [CLIENTE LOJA VIRTUAL] padrão para o empreendimento [$last_id_empreendimento]');
             }
             $UsuarioEmpreendimentoTO->id_usuario = $last_id_cliVenVitrine;
             $UsuarioEmpreendimentoTO->id_empreendimento = $last_id_empreendimento;
             if (!$EmpreendimentoDao->saveUsuarioEmpreendimento($UsuarioEmpreendimentoTO)) {
                 Flight::halt(500, 'erro ao associar [CLIENTE LOJA VIRTUAL] ao empreendimento');
             }
             $arrConfigs['id_usuario_venda_vitrine'] = $last_id_cliVenVitrine;
             // salvar id_fornecedor_movimentacao_caixa = CLIENTE LOJA FÍSICA
             $forMovCaixaTO = new FornecedorTO();
             $forMovCaixaTO->nome_fornecedor = "FORNECEDOR MOVIMENTACÃO DE CAIXA ";
             $forMovCaixaTO->id_empreendimento = $last_id_empreendimento;
             $forMovCaixaDao = new FornecedorDao();
             $last_id_forMovCaixa = $forMovCaixaDao->saveFornecedor($forMovCaixaTO);
             if (!$last_id_forMovCaixa) {
                 Flight::halt(500, 'erro ao criar [CLIENTE LOJA VIRTUAL] padrão para o empreendimento [$last_id_empreendimento]');
             }
             $arrConfigs['id_fornecedor_movimentacao_caixa'] = $last_id_forMovCaixa;
             // id_produto_debito_anterior_cliente = DÉBITO ANTERIOR
             $prodDebAnteriorTO = new ProdutoTO();
             $prodDebAnteriorTO->nome = "DÉBITO ANTERIOR";
             $prodDebAnteriorDao = new ProdutoDao();
             $last_id_prodDebAnterior = $prodDebAnteriorDao->saveProduto($prodDebAnteriorTO);
             if (!$last_id_prodDebAnterior) {
                 Flight::halt(500, 'erro ao criar [DÉBITO ANTERIOR] padrão para o empreendimento [$last_id_empreendimento]');
             }
             $ProdutoEmpreendimentoTO = new ProdutoEmpreendimentoTO();
             $ProdutoEmpreendimentoTO->id_produto = $last_id_prodDebAnterior;
             $ProdutoEmpreendimentoTO->id_empreendimento = $last_id_empreendimento;
             if (!$prodDebAnteriorDao->produtoEmpreendimento($ProdutoEmpreendimentoTO)) {
                 Flight::halt(500, 'Erro ao associar o produto [DÉBITO ANTERIOR] o id_empreendimento');
             }
             $arrConfigs['id_produto_debito_anterior_cliente'] = $last_id_prodDebAnterior;
             // id_conta_bancaria_padrao_fechamento_automatico = CAIXA INTERNO
             $ContaBancariaTO = new ContaBancariaTO();
             $ContaBancariaDao = new ContaBancariaDao();
             $ContaBancariaTO->dsc_conta_bancaria = 'Caixa interno';
             $ContaBancariaTO->id_tipo_conta = 3;
             $ContaBancariaTO->id_empreendimento = $last_id_empreendimento;
             $ContaBancariaTO->id_banco = 104;
             $lastIdContaBancaria = $ContaBancariaDao->saveConta($ContaBancariaTO);
             if (!$lastIdContaBancaria) {
                 Flight::halt(500, 'erro ao criar conta  [CAIXA INTERNO] padrão para fechamento de caixa');
             }
             $arrConfigs['id_conta_bancaria_padrao_fechamento_automatico'] = $lastIdContaBancaria;
             //Cadastrando Plano de contas
             if (!$EmpreendimentoDao->PlanoContaEmpreendimento($last_id_empreendimento)) {
                 Flight::halt(500, 'erro ao criar Plano de contas');
             }
             $arrConfigs['id_plano_caixa'] = $EmpreendimentoDao->getIdPlanoCaixa($last_id_empreendimento);
             $arrConfigs['id_plano_fechamento_caixa'] = $EmpreendimentoDao->getIdPlanoFechamentoCaixa($last_id_empreendimento);
             //Cadastrando cores
             if (!$EmpreendimentoDao->InsertCores($last_id_empreendimento)) {
                 Flight::halt(500, 'erro ao criar cores');
             }
             //Cadastrando chave de configurações
             foreach ($arrConfigs as $key => $value) {
                 $configDao = new ConfiguracaoDao();
                 if (!$configDao->saveKey($key, $value, $last_id_empreendimento)) {
                     Flight::halt(500, 'erro ao criar [$key][$value] padrão para o empreendimento [$last_id_empreendimento]');
                     die;
                 }
             }
             $empreendimento_usuario = array(array('id_usuario' => 222, 'id_empreendimento' => $last_id_empreendimento), array('id_usuario' => 498, 'id_empreendimento' => $last_id_empreendimento));
             foreach ($empreendimento_usuario as $key => $value) {
                 $UsuarioEmpreendimentoTO->id_empreendimento = $value['id_empreendimento'];
                 $UsuarioEmpreendimentoTO->id_usuario = $value['id_usuario'];
                 if (!$EmpreendimentoDao->saveUsuarioEmpreendimento($UsuarioEmpreendimentoTO)) {
                     Flight::halt(500, 'erro ao vincular usuarios ao empreendimento');
                 }
             }
             Flight::halt(201);
         }
     } catch (Exception $e) {
         Flight::halt(500, $e->getMessage());
     }
 }
 public static function saveConta()
 {
     $ContaBancariaTO = new ContaBancariaTO();
     $ContaBancariaDao = new ContaBancariaDao();
     $ContaBancariaTO->dsc_conta_bancaria = isset($_POST['dsc_conta_bancaria']) ? $_POST['dsc_conta_bancaria'] : NULL;
     $ContaBancariaTO->id_banco = isset($_POST['id_banco']) ? $_POST['id_banco'] : NULL;
     $ContaBancariaTO->num_agencia = isset($_POST['num_agencia']) ? $_POST['num_agencia'] : NULL;
     $ContaBancariaTO->num_conta_corrente = isset($_POST['num_conta_corrente']) ? $_POST['num_conta_corrente'] : NULL;
     $ContaBancariaTO->id_tipo_conta = isset($_POST['id_tipo_conta']) ? $_POST['id_tipo_conta'] : NULL;
     $ContaBancariaTO->perc_taxa_maquineta = isset($_POST['perc_taxa_maquineta']) ? $_POST['perc_taxa_maquineta'] : NULL;
     $ContaBancariaTO->id_empreendimento = isset($_POST['id_empreendimento']) ? $_POST['id_empreendimento'] : NULL;
     $ContaBancariaTO->pth_local = isset($_POST['pth_local']) ? $_POST['pth_local'] : NULL;
     $ContaBancariaTO->qtd_vias_impressao = isset($_POST['qtd_vias_impressao']) ? $_POST['qtd_vias_impressao'] : 1;
     $ContaBancariaTO->id_deposito = isset($_POST['id_deposito']) ? $_POST['id_deposito'] : NULL;
     $ContaBancariaTO->id_ws_web = isset($_POST['id_ws_web']) ? $_POST['id_ws_web'] : NULL;
     $ContaBancariaTO->id_ws_dsk = isset($_POST['id_ws_dsk']) ? $_POST['id_ws_dsk'] : NULL;
     $ContaBancariaTO->flg_imprimir_sat_cfe = isset($_POST['flg_imprimir_sat_cfe']) ? $_POST['flg_imprimir_sat_cfe'] : 0;
     $ContaBancariaTO->cod_operacao_padrao_sat_cfe = isset($_POST['cod_operacao_padrao_sat_cfe']) ? $_POST['cod_operacao_padrao_sat_cfe'] : NULL;
     $ContaBancariaTO->mod_impressora = isset($_POST['mod_impressora']) ? $_POST['mod_impressora'] : NULL;
     $depositos = isset($_POST['depositos']) && is_array($_POST['depositos']) ? $_POST['depositos'] : array();
     $validator = new DataValidator();
     $validator->set_msg('A descrição é obrigatório')->set('dsc_conta_bancaria', $ContaBancariaTO->dsc_conta_bancaria)->is_required();
     if ((int) $ContaBancariaTO->flg_imprimir_sat_cfe == 1) {
         $validator->set_msg('O código da operação é obrigatório')->set('cod_operacao_padrao_sat_cfe', $ContaBancariaTO->cod_operacao_padrao_sat_cfe)->is_required();
     }
     /*
     $validator->set_msg('A escolha do banco é obrigatório')
     		  ->set('id_banco',$ContaBancariaTO->id_banco)
     		  ->is_required();
     
     $validator->set_msg('O numero da agencia é obrigatório')
     		  ->set('num_agencia',$ContaBancariaTO->num_agencia)
     		  ->is_required();
     
     $validator->set_msg('O numero da conta corrente é obrigatório')
     		  ->set('num_conta_corrente',$ContaBancariaTO->num_conta_corrente)
     		  ->is_required();
     */
     $validator->set_msg('O tipo da conta é obrigatório')->set('id_tipo_conta', $ContaBancariaTO->id_tipo_conta)->is_required();
     /*if($ContaBancariaTO->id_tipo_conta == 5){
     			$validator->set_msg('O depósito é obrigatório')
     					  ->set('id_deposito',$ContaBancariaTO->id_deposito)
     					  ->is_required();
     		}*/
     /*
     $validator->set_msg('A taixa da maquineta é obrigatório')
     		  ->set('perc_taxa_maquineta',$ContaBancariaTO->perc_taxa_maquineta)
     		  ->is_required();
     */
     if ($ContaBancariaTO->id_tipo_conta == 5) {
         $validator->set_msg('Informe um IP válido')->set('pth_local', $ContaBancariaTO->pth_local)->is_ip();
     }
     if (!$validator->validate()) {
         Flight::response()->status(406)->header('Content-Type', 'application/json')->write(json_encode($validator->get_errors()))->send();
         return;
     }
     try {
         $id_conta_bancaria = $ContaBancariaDao->saveConta($ContaBancariaTO);
         if ($ContaBancariaTO->id_tipo_conta == 5 && count($depositos > 0)) {
             $CaixaDepositoDao = new CaixaDepositoDao();
             foreach ($depositos as $deposito) {
                 $CaixaDepositoTO = new CaixaDepositoTO();
                 $deposito['id_caixa'] = $id_conta_bancaria;
                 $CaixaDepositoTO->__setAll($deposito);
                 $CaixaDepositoDao->saveCaixaDeposito($CaixaDepositoTO);
             }
         }
         Flight::halt(201);
     } catch (Exception $e) {
         Flight::halt(500, $e->getMessage());
     }
 }