public static function saveMovimentacaoSangria()
 {
     $MovimentacaoCaixaTO = new MovimentacaoCaixaTO();
     $MovimentacaoCaixaDao = new MovimentacaoCaixaDao();
     $MovimentacaoCaixaTO->id_abertura_caixa = isset($_POST['id_abertura_caixa']) ? $_POST['id_abertura_caixa'] : NULL;
     $MovimentacaoCaixaTO->id_plano_conta = isset($_POST['id_plano_conta']) ? $_POST['id_plano_conta'] : NULL;
     $MovimentacaoCaixaTO->id_tipo_movimentacao = isset($_POST['id_tipo_movimentacao']) ? $_POST['id_tipo_movimentacao'] : NULL;
     $MovimentacaoCaixaTO->id_venda = isset($_POST['id_venda']) ? $_POST['id_venda'] : NULL;
     $conta_destino = isset($_POST['id_conta_bancaria_destino']) ? $_POST['id_conta_bancaria_destino'] : NULL;
     $valor_pagamento = isset($_POST['valor_pagamento']) ? $_POST['valor_pagamento'] : NULL;
     $obs_pagamento = isset($_POST['obs_pagamento']) ? $_POST['obs_pagamento'] : NULL;
     $validator = new DataValidator();
     $validator->set_msg('O ID da abertura de caixa e obrigatório')->set('id_abertura_caixa', $MovimentacaoCaixaTO->id_abertura_caixa)->is_required();
     $validator->set_msg('O ID do plano é obrigatório')->set('id_plano_conta', $MovimentacaoCaixaTO->id_plano_conta)->is_required();
     $validator->set_msg('O ID do tipo da movimentacao é obrigatório')->set('id_tipo_movimentacao', $MovimentacaoCaixaTO->id_tipo_movimentacao)->is_required();
     $validator->set_msg('A Conta de destino é obrigatória')->set('conta_destino', $conta_destino)->is_required();
     $validator->set_msg('O valor da retirada é obrigatório')->set('valor_retirada', $valor_pagamento)->is_required();
     $AberturaCaixaDao = new AberturaCaixaDao();
     $valor_em_caixa = $AberturaCaixaDao->vlrEmCaixa($MovimentacaoCaixaTO->id_abertura_caixa, 3);
     $valor_em_caixa = $valor_em_caixa['vlr_em_caixa'];
     if ($valor_em_caixa < (double) $valor_pagamento) {
         $validator->_errors['valor_nao_permitido'][] = 'Operação não permitida, o valor da sangria e maior que o valor em dinheiro no caixa';
     }
     if (!$validator->validate()) {
         Flight::response()->status(406)->header('Content-Type', 'application/json')->write(json_encode($validator->get_errors()))->send();
         return;
     }
     try {
         $PagamentoFornecedorTO = new PagamentoFornecedorTO();
         $PagamentoFornecedorDao = new PagamentoFornecedorDao();
         $id_empreendimento = $_POST['id_empreendimento'];
         $Dao = new Dao();
         $Dao->setTimeZone($id_empreendimento);
         $dta_movimentacao = date('Y-m-d H:i:s');
         $PagamentoFornecedorTO->id_fornecedor = isset($_POST['id_fornecedor']) ? $_POST['id_fornecedor'] : "";
         $PagamentoFornecedorTO->id_forma_pagamento = isset($_POST['id_forma_pagamento']) ? $_POST['id_forma_pagamento'] : "";
         $PagamentoFornecedorTO->valor_pagamento = isset($_POST['valor_pagamento']) ? $_POST['valor_pagamento'] : "";
         $PagamentoFornecedorTO->status_pagamento = isset($_POST['status_pagamento']) ? $_POST['status_pagamento'] : "";
         $PagamentoFornecedorTO->data_pagamento = $dta_movimentacao;
         $PagamentoFornecedorTO->id_empreendimento = isset($_POST['id_empreendimento']) ? $_POST['id_empreendimento'] : "";
         $PagamentoFornecedorTO->id_plano_conta = isset($_POST['id_plano_conta']) ? $_POST['id_plano_conta'] : "";
         $PagamentoFornecedorTO->id_conta_bancaria = isset($_POST['id_conta_bancaria']) ? $_POST['id_conta_bancaria'] : "";
         $PagamentoFornecedorTO->obs_pagamento = isset($_POST['obs_pagamento']) ? $_POST['obs_pagamento'] : NULL;
         $PagamentoFornecedorTO->flg_transferencia_conta = 1;
         $id_lancamento_saida = $PagamentoFornecedorDao->savePagamentoFornecedor($PagamentoFornecedorTO);
         if (!$id_lancamento_saida) {
             Flight::halt(500, 'erro ao inserir pagamento ao fornecedor');
         }
         $PagamentoClienteTO = new PagamentoClienteTO();
         $PagamentoClienteDao = new PagamentoClienteDao();
         $PagamentoClienteTO->id_cliente = isset($_POST['id_cliente']) ? $_POST['id_cliente'] : "";
         $PagamentoClienteTO->id_forma_pagamento = isset($_POST['id_forma_pagamento']) ? $_POST['id_forma_pagamento'] : "";
         $PagamentoClienteTO->valor_pagamento = isset($_POST['valor_pagamento']) ? $_POST['valor_pagamento'] : "";
         $PagamentoClienteTO->status_pagamento = isset($_POST['status_pagamento']) ? $_POST['status_pagamento'] : "";
         $PagamentoClienteTO->data_pagamento = $dta_movimentacao;
         $PagamentoClienteTO->id_empreendimento = isset($_POST['id_empreendimento']) ? $_POST['id_empreendimento'] : "";
         $PagamentoClienteTO->id_plano_conta = isset($_POST['id_plano_conta']) ? $_POST['id_plano_conta'] : "";
         $PagamentoClienteTO->id_conta_bancaria = isset($_POST['id_conta_bancaria_destino']) ? $_POST['id_conta_bancaria_destino'] : "";
         $PagamentoClienteTO->obs_pagamento = isset($_POST['obs_pagamento']) ? $_POST['obs_pagamento'] : NULL;
         $PagamentoClienteTO->flg_transferencia_conta = 1;
         $id_lancamento_entrada = $PagamentoClienteDao->savePagamentoCliente($PagamentoClienteTO);
         if (!$id_lancamento_entrada) {
             Flight::halt(500, 'erro ao inserir pagamento ao cliente');
         }
         $MovimentacaoCaixaTO->id_lancamento_entrada = $id_lancamento_entrada;
         $MovimentacaoCaixaTO->id_lancamento_saida = $id_lancamento_saida;
         $MovimentacaoCaixaTO->dsc_movimentacao = isset($_POST['dsc_movimentacao']) ? $_POST['dsc_movimentacao'] : NULL;
         $MovimentacaoCaixaTO->dta_movimentacao = $dta_movimentacao;
         if (!$MovimentacaoCaixaDao->saveMovimentacao($MovimentacaoCaixaTO)) {
             Flight::halt(500, 'erro ao inserir movimentacao');
         }
         Flight::halt(201);
     } catch (Exception $e) {
         Flight::halt(500, $e->getMessage());
     }
 }
 public static function savePagamentoFornecedor()
 {
     $PagamentoFornecedorTO = new PagamentoFornecedorTO();
     $PagamentoFornecedorDao = new PagamentoFornecedorDao();
     $pagamentos = $_POST['pagamentos'];
     foreach ($pagamentos as $key => $pagamento) {
         $PagamentoFornecedorTO->id_fornecedor = isset($pagamento['id_fornecedor']) ? $pagamento['id_fornecedor'] : "";
         $PagamentoFornecedorTO->id_forma_pagamento = isset($pagamento['id_forma_pagamento']) ? $pagamento['id_forma_pagamento'] : "";
         $PagamentoFornecedorTO->valor_pagamento = isset($pagamento['valor_pagamento']) ? $pagamento['valor_pagamento'] : "";
         $PagamentoFornecedorTO->status_pagamento = isset($pagamento['status_pagamento']) ? $pagamento['status_pagamento'] : "";
         $PagamentoFornecedorTO->data_pagamento = isset($pagamento['data_pagamento']) ? $pagamento['data_pagamento'] : "";
         $PagamentoFornecedorTO->obs_pagamento = isset($pagamento['obs_pagamento']) ? $pagamento['obs_pagamento'] : "";
         $PagamentoFornecedorTO->id_empreendimento = isset($pagamento['id_empreendimento']) ? $pagamento['id_empreendimento'] : "";
         $PagamentoFornecedorTO->id_banco = isset($pagamento['id_banco']) ? $pagamento['id_banco'] : "";
         $PagamentoFornecedorTO->num_conta_corrente = isset($pagamento['num_conta_corrente']) ? $pagamento['num_conta_corrente'] : "";
         $PagamentoFornecedorTO->num_cheque = isset($pagamento['num_cheque']) ? $pagamento['num_cheque'] : "";
         $PagamentoFornecedorTO->flg_cheque_predatado = isset($pagamento['flg_cheque_predatado']) ? $pagamento['flg_cheque_predatado'] : "";
         $PagamentoFornecedorTO->id_plano_conta = isset($pagamento['id_plano_conta']) ? $pagamento['id_plano_conta'] : "";
         $PagamentoFornecedorTO->id_conta_bancaria = isset($pagamento['id_conta_bancaria']) ? $pagamento['id_conta_bancaria'] : "";
         $validator = new DataValidator();
         $validator->set_msg('É obrigatório selecionar um fornecedor')->set('id_fornecedor', $PagamentoFornecedorTO->id_fornecedor)->is_required();
         $validator->set_msg('É obrigatório selecionar uma forma de pagamento')->set('id_forma_pagamento', $PagamentoFornecedorTO->id_forma_pagamento)->is_required();
         $validator->set_msg('É obrigatório informar o valor do pagamento')->set('valor_pagamento', $PagamentoFornecedorTO->valor_pagamento)->is_required();
         $validator->set_msg('É obrigatório selecionar um status para o pagamento')->set('status_pagamento', $PagamentoFornecedorTO->status_pagamento)->is_num();
         $validator->set_msg('Formato da data invalido')->set('data_pagamento', $PagamentoFornecedorTO->data_pagamento)->is_date("Y-m-d");
         $validator->set_msg('O codigo do empreendimento obrigatório')->set('id_empreendimento', $PagamentoFornecedorTO->id_empreendimento)->is_required();
         $validator->set_msg('É obrigatório selecionar um plano')->set('id_plano_conta', $PagamentoFornecedorTO->id_plano_conta)->is_required();
         $validator->set_msg('É obrigatório informar uma conta')->set('id_conta_bancaria', $PagamentoFornecedorTO->id_conta_bancaria)->is_required();
         if ($PagamentoFornecedorTO->id_forma_pagamento == 2) {
             $validator->set_msg('É obrigatório selecionar um banco')->set('id_banco', $PagamentoFornecedorTO->id_banco)->is_required();
             $validator->set_msg('É obrigatório informar o numero da conta corrente')->set('num_conta_corrente', $PagamentoFornecedorTO->num_conta_corrente)->is_required();
             $validator->set_msg('É obrigatório informar o numero do cheque')->set('num_cheque', $PagamentoFornecedorTO->num_cheque)->is_required("d/m/Y");
             $validator->set_msg('É obrigatório selecionar se o cheuque e pre-datado ou não ')->set('flg_cheque_predatado', $PagamentoFornecedorTO->flg_cheque_predatado)->contains(array(1, 0));
         }
     }
     if (!$validator->validate()) {
         Flight::response()->status(406)->header('Content-Type', 'application/json')->write(json_encode($validator->get_errors()))->send();
         return;
     }
     foreach ($pagamentos as $key => $pagamento) {
         $PagamentoFornecedorTO->id_fornecedor = isset($pagamento['id_fornecedor']) ? $pagamento['id_fornecedor'] : "";
         $PagamentoFornecedorTO->id_forma_pagamento = isset($pagamento['id_forma_pagamento']) ? $pagamento['id_forma_pagamento'] : "";
         $PagamentoFornecedorTO->valor_pagamento = isset($pagamento['valor_pagamento']) ? $pagamento['valor_pagamento'] : "";
         $PagamentoFornecedorTO->status_pagamento = isset($pagamento['status_pagamento']) ? $pagamento['status_pagamento'] : "";
         $PagamentoFornecedorTO->data_pagamento = isset($pagamento['data_pagamento']) ? $pagamento['data_pagamento'] : "";
         $PagamentoFornecedorTO->obs_pagamento = isset($pagamento['obs_pagamento']) ? $pagamento['obs_pagamento'] : "";
         $PagamentoFornecedorTO->id_empreendimento = isset($pagamento['id_empreendimento']) ? $pagamento['id_empreendimento'] : "";
         $PagamentoFornecedorTO->id_banco = isset($pagamento['id_banco']) ? $pagamento['id_banco'] : "";
         $PagamentoFornecedorTO->num_conta_corrente = isset($pagamento['num_conta_corrente']) ? $pagamento['num_conta_corrente'] : "";
         $PagamentoFornecedorTO->num_cheque = isset($pagamento['num_cheque']) ? $pagamento['num_cheque'] : "";
         $PagamentoFornecedorTO->flg_cheque_predatado = isset($pagamento['flg_cheque_predatado']) ? $pagamento['flg_cheque_predatado'] : "";
         $PagamentoFornecedorTO->id_plano_conta = isset($pagamento['id_plano_conta']) ? $pagamento['id_plano_conta'] : "";
         $PagamentoFornecedorTO->id_conta_bancaria = isset($pagamento['id_conta_bancaria']) ? $pagamento['id_conta_bancaria'] : "";
         if ($PagamentoFornecedorTO->id_forma_pagamento != 2) {
             $PagamentoFornecedorTO->id_banco = NULL;
             $PagamentoFornecedorTO->num_conta_corrente = NULL;
             $PagamentoFornecedorTO->num_cheque = NULL;
             $PagamentoFornecedorTO->flg_cheque_predatado = NULL;
         }
         if (!$PagamentoFornecedorDao->savePagamentoFornecedor($PagamentoFornecedorTO)) {
             Flight::halt(500, 'erro ao inserir pagamento ao fornecedor');
         }
     }
     Flight::halt(201);
 }