public static function updateFaixaDescontoPermitido()
 {
     $FaixaDescontoPermitidoTO = new FaixaDescontoPermitidoTO();
     $FaixaDescontoPermitidoDao = new FaixaDescontoPermitidoDao();
     $validator = new DataValidator();
     $FaixaDescontoPermitidoTO->id = isset($_POST["id"]) ? $_POST["id"] : null;
     $FaixaDescontoPermitidoTO->perc_desconto_max = isset($_POST["perc_desconto_max"]) ? $_POST["perc_desconto_max"] : null;
     $FaixaDescontoPermitidoTO->id_empreendimento = isset($_POST["id_empreendimento"]) ? $_POST["id_empreendimento"] : null;
     $usuarios = isset($_POST["usuarios"]) && count($_POST["usuarios"]) > 0 ? $_POST["usuarios"] : false;
     $delete_usuarios = isset($_POST["delete_usuarios"]) && count($_POST["delete_usuarios"]) > 0 ? $_POST["delete_usuarios"] : false;
     $validator->set_msg('O ID da faixa é obrigatório')->set('id', $FaixaDescontoPermitidoTO->id)->is_required();
     $validator->set_msg('Informe o valor máximo de desconto desta faixa')->set('perc_desconto_max', $FaixaDescontoPermitidoTO->perc_desconto_max)->is_required();
     $validator->set_msg('O id do empreendimento é obrigatório')->set('id_empreendimento', $FaixaDescontoPermitidoTO->id_empreendimento)->is_required();
     if ($FaixaDescontoPermitidoDao->verificarFaixa($FaixaDescontoPermitidoTO->perc_desconto_max, $FaixaDescontoPermitidoTO->id_empreendimento, $FaixaDescontoPermitidoTO->id) && $FaixaDescontoPermitidoTO->perc_desconto_max > 0) {
         $validator->_errors['perc_desconto_max'][] = 'Já existe outra faixa com este valor máximo ';
     }
     if (!$validator->validate()) {
         Flight::response()->status(406)->header('Content-Type', 'application/json')->write(json_encode($validator->get_errors()))->send();
         return;
     }
     $lastInsertId = $FaixaDescontoPermitidoDao->updateFaixaDescontoPermitido($FaixaDescontoPermitidoTO);
     if ($lastInsertId) {
         $UsuarioFaixaDescontoPermitidoDao = new UsuarioFaixaDescontoPermitidoDao();
         $UsuarioFaixaDescontoPermitidoTO = new UsuarioFaixaDescontoPermitidoTO();
         if ($usuarios) {
             $Dao = new Dao();
             $Dao->setTimeZone($FaixaDescontoPermitidoTO->id_empreendimento);
             $UsuarioFaixaDescontoPermitidoTO->dta_entrada = date('Y-m-d H:i:s');
             foreach ($usuarios as $usuario) {
                 $UsuarioFaixaDescontoPermitidoTO->id_usuario = $usuario['id_usuario'];
                 $UsuarioFaixaDescontoPermitidoTO->id_faixa_desconto_permitido = $FaixaDescontoPermitidoTO->id;
                 $UsuarioFaixaDescontoPermitidoTO->flg_ativo = $usuario['flg_ativo'];
                 $UsuarioFaixaDescontoPermitidoTO->id_responsavel_atv = $usuario['id_responsavel_atv'];
                 if (!$UsuarioFaixaDescontoPermitidoDao->saveUsuarioFaixaDescontoPermitido($UsuarioFaixaDescontoPermitidoTO)) {
                     Flight::halt(500, 'Erro ao vincular usuario a faixa ');
                 }
             }
         }
         if ($delete_usuarios) {
             foreach ($delete_usuarios as $usuario) {
                 if (!$UsuarioFaixaDescontoPermitidoDao->deleteUsuarioFaixaDescontoPermitido($usuario['id_rel'])) {
                     Flight::halt(500, 'Erro ao deletar usuario');
                 }
             }
         }
         Flight::halt(201);
     } else {
         Flight::halt(500, 'Erro ao inserir Desconto');
     }
 }
 public static function gravarMovimentacoes()
 {
     $MovimentacaoCaixaTO = new MovimentacaoCaixaTO();
     $MovimentacaoCaixaDao = new MovimentacaoCaixaDao();
     $PagamentoClienteTO = new PagamentoClienteTO();
     $PagamentoClienteDao = new PagamentoClienteDao();
     $ControlePagamentoVendaTO = new ControlePagamentoVendaTO();
     $ControlePagamentoVendaDao = new ControlePagamentoVendaDao();
     $MaquinetaDao = new MaquinetaDao();
     $pagamentos = $_POST['pagamentos'];
     $id_venda = isset($_POST['id_venda']) ? $_POST['id_venda'] : NULL;
     $id_venda = empty($_POST['id_venda']) ? NULL : $id_venda;
     $id_cliente = $_POST['id_cliente'];
     $id_empreendimento = $_POST['id_empreendimento'];
     $flg_comanda = isset($_POST['id_mesa']) && is_numeric($_POST['id_mesa']) ? 1 : 0;
     $Dao = new Dao();
     $Dao->setTimeZone($id_empreendimento);
     $dta_entrada = date('Y-m-d H:i:s');
     $id_controle_pagamento = $ControlePagamentoVendaDao->saveControlePagamento($dta_entrada);
     if (!$id_controle_pagamento) {
         Flight::halt(500, 'erro ao inserir pagamento ao cliente');
     }
     foreach ($pagamentos as $key => $value) {
         $parcela = null;
         if ($value['id_tipo_movimentacao'] != 5 && $value['id_forma_pagamento'] != 6) {
             $PagamentoClienteTO->id_cliente = isset($value['id_cliente']) ? $value['id_cliente'] : "";
             $PagamentoClienteTO->id_controle_pagamento = $id_controle_pagamento;
             $PagamentoClienteTO->id_forma_pagamento = isset($value['id_forma_pagamento']) ? $value['id_forma_pagamento'] : "";
             $PagamentoClienteTO->valor_pagamento = isset($value['valor']) ? $value['valor_pagamento'] : "";
             if ($value['id_forma_pagamento'] == 2) {
                 $PagamentoClienteTO->status_pagamento = 0;
             } else {
                 if ($value['id_forma_pagamento'] == 4) {
                     $PagamentoClienteTO->status_pagamento = isset($value['status_pagamento']) ? $value['status_pagamento'] : 0;
                     $PagamentoClienteTO->doc_boleto = isset($value['doc_boleto']) ? $value['doc_boleto'] : NULL;
                     $PagamentoClienteTO->num_boleto = isset($value['num_boleto']) ? $value['num_boleto'] : NULL;
                 } else {
                     $PagamentoClienteTO->status_pagamento = isset($value['status_pagamento']) && ((int) $value['status_pagamento'] == 1 || (int) $value['status_pagamento'] == 0) ? (int) $value['status_pagamento'] : 1;
                 }
             }
             $PagamentoClienteTO->data_pagamento = isset($value['data_pagamento']) ? $value['data_pagamento'] : "";
             $PagamentoClienteTO->id_empreendimento = isset($value['id_empreendimento']) ? $value['id_empreendimento'] : "";
             $PagamentoClienteTO->id_plano_conta = isset($value['id_plano_conta']) ? $value['id_plano_conta'] : "";
             $PagamentoClienteTO->id_conta_bancaria = isset($value['id_conta_bancaria']) ? $value['id_conta_bancaria'] : NULL;
             $PagamentoClienteTO->flg_caixa_fechado = 0;
             $PagamentoClienteTO->id_banco = isset($value['id_banco']) ? $value['id_banco'] : NULL;
             $PagamentoClienteTO->num_conta_corrente = isset($value['num_conta_corrente']) ? $value['num_conta_corrente'] : NULL;
             $PagamentoClienteTO->num_cheque = isset($value['num_cheque']) ? $value['num_cheque'] : NULL;
             $PagamentoClienteTO->flg_cheque_predatado = isset($value['flg_cheque_predatado']) ? $value['flg_cheque_predatado'] : NULL;
             $PagamentoClienteTO->id_vale_troca = (int) $value['id_forma_pagamento'] == 7 ? $value['id_vale_troca'] : NULL;
             $PagamentoClienteTO->agencia_transferencia = isset($value['agencia_transferencia']) ? $value['agencia_transferencia'] : NULL;
             $PagamentoClienteTO->conta_transferencia = isset($value['conta_transferencia']) ? $value['conta_transferencia'] : NULL;
             $PagamentoClienteTO->proprietario_conta_transferencia = isset($value['proprietario_conta_transferencia']) ? $value['proprietario_conta_transferencia'] : NULL;
             $PagamentoClienteTO->id_conta_transferencia_destino = isset($value['id_conta_transferencia_destino']) ? $value['id_conta_transferencia_destino'] : NULL;
             $PagamentoClienteTO->id_venda = isset($value['id_venda']) ? $value['id_venda'] : NULL;
             $PagamentoClienteTO->id_item_venda = isset($value['id_item_venda']) ? $value['id_item_venda'] : NULL;
             if ($value['id_forma_pagamento'] == 5) {
                 $maquineta = $MaquinetaDao->getMaquineta($value['id_maquineta']);
                 $txa_maquineta = $maquineta['per_margem_debito'];
                 $PagamentoClienteTO->id_maquineta = isset($value['id_maquineta']) ? $value['id_maquineta'] : NULL;
                 $PagamentoClienteTO->taxa_maquineta = $txa_maquineta;
             } else {
                 $PagamentoClienteTO->id_maquineta = NULL;
                 $PagamentoClienteTO->taxa_maquineta = NULL;
             }
             $PagamentoClienteTO->id_cliente = is_numeric($PagamentoClienteTO->id_cliente) ? $PagamentoClienteTO->id_cliente : $value['id_cliente_lancamento'];
             $id_lancamento_entrada = $PagamentoClienteDao->savePagamentoCliente($PagamentoClienteTO);
             if (!$id_lancamento_entrada) {
                 Flight::halt(500, 'erro ao inserir pagamento ao cliente');
             }
         } else {
             if ($value['id_tipo_movimentacao'] != 5) {
                 $repeat_parcelas = 0;
                 $id_parcelamento = false;
                 $arr_parcelas = $value['parcelas'];
                 $n_parcelas = count($arr_parcelas);
                 foreach ($arr_parcelas as $key_par => $parcela) {
                     $maquineta = $MaquinetaDao->getMaquineta($parcela['id_maquineta']);
                     $txa_maquineta = $MaquinetaDao->getTaxaMaquineta($parcela['id_maquineta'], $n_parcelas);
                     $PagamentoClienteTO->id_cliente = isset($parcela['id_cliente']) ? $parcela['id_cliente'] : "";
                     $PagamentoClienteTO->id_controle_pagamento = $id_controle_pagamento;
                     $PagamentoClienteTO->id_forma_pagamento = isset($parcela['id_forma_pagamento']) ? $parcela['id_forma_pagamento'] : "";
                     $PagamentoClienteTO->valor_pagamento = isset($parcela['valor_pagamento']) ? $parcela['valor_pagamento'] : "";
                     $PagamentoClienteTO->status_pagamento = 0;
                     $PagamentoClienteTO->data_pagamento = isset($parcela['data_pagamento']) ? $parcela['data_pagamento'] : "";
                     $PagamentoClienteTO->obs_pagamento = isset($parcela['obs_pagamento']) ? $parcela['obs_pagamento'] : "";
                     $PagamentoClienteTO->id_empreendimento = isset($parcela['id_empreendimento']) ? $parcela['id_empreendimento'] : "";
                     $PagamentoClienteTO->id_banco = isset($parcela['id_banco']) ? $parcela['id_banco'] : "";
                     $PagamentoClienteTO->num_conta_corrente = isset($parcela['num_conta_corrente']) ? $parcela['num_conta_corrente'] : "";
                     $PagamentoClienteTO->num_cheque = isset($parcela['num_cheque']) ? $parcela['num_cheque'] : "";
                     $PagamentoClienteTO->flg_cheque_predatado = isset($parcela['flg_cheque_predatado']) ? $parcela['flg_cheque_predatado'] : "";
                     $PagamentoClienteTO->id_plano_conta = isset($parcela['id_plano_conta']) ? $parcela['id_plano_conta'] : "";
                     $PagamentoClienteTO->id_conta_bancaria = isset($parcela['id_conta_bancaria']) ? $parcela['id_conta_bancaria'] : "";
                     $PagamentoClienteTO->id_maquineta = isset($parcela['id_maquineta']) ? $parcela['id_maquineta'] : NULL;
                     $PagamentoClienteTO->taxa_maquineta = $txa_maquineta;
                     $PagamentoClienteTO->id_venda = isset($parcela['id_venda']) ? $parcela['id_venda'] : NULL;
                     $PagamentoClienteTO->id_item_venda = isset($parcela['id_item_venda']) ? $parcela['id_item_venda'] : NULL;
                     $PagamentoClienteTO->id_parcelamento = is_numeric($id_parcelamento) ? $id_parcelamento : NULL;
                     $PagamentoClienteTO->id_cliente = is_numeric($PagamentoClienteTO->id_cliente) ? $PagamentoClienteTO->id_cliente : $parcela['id_cliente_lancamento'];
                     $PagamentoClienteTO->flg_caixa_fechado = 0;
                     if ($PagamentoClienteTO->id_forma_pagamento != 2) {
                         $PagamentoClienteTO->id_banco = NULL;
                         $PagamentoClienteTO->num_conta_corrente = NULL;
                         $PagamentoClienteTO->num_cheque = NULL;
                         $PagamentoClienteTO->flg_cheque_predatado = NULL;
                     }
                     $id_lancamento_entrada = $PagamentoClienteDao->savePagamentoCliente($PagamentoClienteTO);
                     if (!$id_lancamento_entrada) {
                         Flight::halt(500, 'erro ao inserir pagamento ao cliente');
                     }
                     $MovimentacaoCaixaTO->id_abertura_caixa = isset($parcela['id_abertura_caixa']) ? $parcela['id_abertura_caixa'] : NULL;
                     $MovimentacaoCaixaTO->id_plano_conta = isset($parcela['id_plano_conta']) ? $parcela['id_plano_conta'] : NULL;
                     $MovimentacaoCaixaTO->id_tipo_movimentacao = isset($parcela['id_tipo_movimentacao']) ? $parcela['id_tipo_movimentacao'] : NULL;
                     $MovimentacaoCaixaTO->dsc_movimentacao = $id_venda == NULL ? 'Pagamento' : 'Venda';
                     $MovimentacaoCaixaTO->id_maquineta = isset($parcela['id_maquineta']) ? $parcela['id_maquineta'] : NULL;
                     $MovimentacaoCaixaTO->id_venda = $id_venda;
                     $MovimentacaoCaixaTO->id_lancamento_entrada = $id_lancamento_entrada;
                     $valor_pagamento = isset($parcela['valor']) ? $parcela['valor'] : NULL;
                     $MovimentacaoCaixaTO->para_receber = $parcela['id_tipo_movimentacao'] == 5 ? $parcela['valor'] : NULL;
                     $MovimentacaoCaixaTO->dta_movimentacao = $dta_entrada;
                     $MovimentacaoCaixaTO->id_item_venda = isset($parcela['id_item_venda']) ? $parcela['id_item_venda'] : NULL;
                     if (!$MovimentacaoCaixaDao->saveMovimentacao($MovimentacaoCaixaTO)) {
                         Flight::halt(500, 'erro ao inserir movimentacao');
                     }
                     $id_parcelamento = is_numeric($id_parcelamento) ? $id_parcelamento : $id_lancamento_entrada;
                 }
                 $id_lancamento_entrada = $id_parcelamento;
             }
         }
         if ($parcela == null) {
             $MovimentacaoCaixaTO->id_abertura_caixa = isset($value['id_abertura_caixa']) ? $value['id_abertura_caixa'] : NULL;
             $MovimentacaoCaixaTO->id_plano_conta = isset($value['id_plano_conta']) ? $value['id_plano_conta'] : NULL;
             $MovimentacaoCaixaTO->id_tipo_movimentacao = isset($value['id_tipo_movimentacao']) ? $value['id_tipo_movimentacao'] : NULL;
             $MovimentacaoCaixaTO->dsc_movimentacao = $id_venda == NULL ? 'Pagamento' : 'Venda';
             $MovimentacaoCaixaTO->id_maquineta = isset($value['id_maquineta']) ? $value['id_maquineta'] : NULL;
             $MovimentacaoCaixaTO->id_venda = $id_venda;
             $MovimentacaoCaixaTO->id_lancamento_entrada = $value['id_tipo_movimentacao'] != 5 ? $id_lancamento_entrada : NULL;
             $valor_pagamento = isset($value['valor']) ? $value['valor'] : NULL;
             $MovimentacaoCaixaTO->para_receber = $value['id_tipo_movimentacao'] == 5 ? $value['valor'] : NULL;
             $MovimentacaoCaixaTO->dta_movimentacao = $dta_entrada;
             $MovimentacaoCaixaTO->id_item_venda = isset($value['id_item_venda']) ? $value['id_item_venda'] : NULL;
             if (!$MovimentacaoCaixaDao->saveMovimentacao($MovimentacaoCaixaTO)) {
                 Flight::halt(500, 'erro ao inserir movimentacao');
             }
         }
     }
     $UsuarioDao = new UsuarioDao();
     if (is_numeric($id_cliente)) {
         $vlr_saldo_devedor = $UsuarioDao->getSaldoDevedor($id_empreendimento, $id_cliente);
         $vlr_saldo_devedor = $vlr_saldo_devedor["vlr_saldo_devedor"];
     } else {
         $vlr_saldo_devedor = 0;
     }
     $MesaDao = new MesaDao();
     $mesa = null;
     if ((int) $flg_comanda == 1) {
         $mesa = $MesaDao->getResumoMesa($_POST['id_mesa']);
     }
     Flight::response()->status(201)->header('Content-Type', 'application/json')->write(json_encode(array('vlr_saldo_devedor' => $vlr_saldo_devedor, 'id_controle_pagamento' => $id_controle_pagamento, 'mesa' => $mesa)))->send();
 }
 public function finalizarPedido($id_pedido_venda, $caixa)
 {
     $ItemPedidoVendaDao = new ItemPedidoVendaDao();
     $pedido_venda = $this->getPedidoVenda($id_pedido_venda);
     $pedido_venda['itens'] = $ItemPedidoVendaDao->getItens($id_pedido_venda, null, null);
     $pedido_gerado = $this->getPedidoMaster($pedido_venda['id']);
     $pedido_gerado['itens'] = $ItemPedidoVendaDao->getItens($pedido_gerado['id'], null, null);
     $id_empreendimento = $pedido_venda['id_empreendimento'];
     $produtos_venda = array();
     $Dao = new Dao();
     $out = array();
     $Dao->setTimeZone($id_empreendimento);
     $dta = date('Y-m-d H:i:s');
     $EstoqueDao = new EstoqueDao();
     $EstoqueTO = new EstoqueTO();
     $VendaTO = new VendaTO();
     $VendaDao = new VendaDao();
     $ItemVendaTO = new ItemVendaTO();
     $ItemVendaDao = new ItemVendaDao();
     $EstoqueEntradaTO = new EstoqueEntradaTO();
     $EstoqueEntradaDao = new EstoqueEntradaDao();
     $EstoqueEntradaTO->id_empreendimento = $id_empreendimento;
     $EstoqueEntradaTO->id_deposito = $caixa['id_deposito'];
     $EstoqueEntradaTO->id_pedido_venda = $id_pedido_venda;
     $EstoqueEntradaTO->dta_entrada = $dta;
     $id_estoque_entrada = $EstoqueEntradaDao->saveEstoqueEntrada($EstoqueEntradaTO);
     if ($id_estoque_entrada) {
         $ItemEstoqueEntradaTO = new ItemEstoqueEntradaTO();
         $ItemEstoqueEntradaDao = new ItemEstoqueEntradaDao();
         foreach ($pedido_gerado['itens'] as $key => $value) {
             $ItemEstoqueEntradaTO->id_estoque_entrada = $id_estoque_entrada;
             $ItemEstoqueEntradaTO->id_produto = $value['id_produto'];
             $ItemEstoqueEntradaTO->qtd_item = $value['qtd'];
             $ItemEstoqueEntradaTO->vlr_custo = NULL;
             $ItemEstoqueEntradaTO->perc_imposto = NULL;
             $ItemEstoqueEntradaTO->perc_desconto = NULL;
             $ItemEstoqueEntradaTO->dta_validade = '2099-12-31';
             if ($ItemEstoqueEntradaDao->saveItemEstoqueEntrada($ItemEstoqueEntradaTO)) {
                 $EstoqueTO = new EstoqueTO();
                 $EstoqueDao = new EstoqueDao();
                 $PrecoProdutoTO = new PrecoProdutoTO();
                 $PrecoProdutoDao = new PrecoProdutoDao();
                 $EstoqueTO->id_deposito = $EstoqueEntradaTO->id_deposito;
                 $EstoqueTO->id_produto = $ItemEstoqueEntradaTO->id_produto;
                 $EstoqueTO->qtd_item = $ItemEstoqueEntradaTO->qtd_item;
                 $EstoqueTO->dta_validade = $ItemEstoqueEntradaTO->dta_validade;
                 if (!$EstoqueDao->atualizaEstoque($EstoqueTO)) {
                     Flight::halt(500, 'erro ao atualizar estoque');
                 }
             } else {
                 Flight::halt(500, 'erro ao inserir itens da entrada');
             }
         }
     } else {
         Flight::halt(500, 'erro ao inserir entrada no estoque');
     }
     $VendaTO->id_usuario = $pedido_venda['id_usuario'];
     $VendaTO->id_cliente = $pedido_venda['id_cliente'];
     $VendaTO->venda_confirmada = 1;
     $VendaTO->id_empreendimento = $pedido_venda['id_empreendimento'];
     $VendaTO->id_status_venda = 2;
     $VendaTO->id_pedido_venda = $pedido_venda['id'];
     $id_venda = $VendaDao->saveVenda($VendaTO);
     if (!$id_venda) {
         Flight::halt(500, 'erro ao inserir venda');
     }
     foreach ($pedido_gerado['itens'] as $key => $value) {
         $ItemVendaTO->id_venda = $id_venda;
         $ItemVendaTO->id_produto = $value['id_produto'];
         $ItemVendaTO->desconto_aplicado = $value['desconto_aplicado'];
         $ItemVendaTO->valor_desconto = $value['valor_desconto'];
         $ItemVendaTO->qtd = $value['qtd'];
         $ItemVendaTO->valor_real_item = $value['valor_real_item'];
         $ItemVendaTO->vlr_custo = $value['vlr_custo'];
         $ItemVendaTO->perc_imposto_compra = $value['perc_imposto_compra'];
         $ItemVendaTO->perc_desconto_compra = $value['perc_desconto_compra'];
         $ItemVendaTO->perc_margem_aplicada = $value['perc_margem_aplicada'];
         if (!$ItemVendaDao->saveItemVenda($ItemVendaTO)) {
             Flight::halt(500, 'erro ao inserir os itens da venda');
         }
         if (!$EstoqueDao->baixaEstoquePDV($id_empreendimento, $id_venda, $value['id_produto'], $caixa['id_deposito'], $value['qtd'])) {
             Flight::halt(500, 'error ao atualizar estoque');
         }
     }
     $this->changeStatusPedido($id_pedido_venda, 3);
     Flight::halt(201);
 }
 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 gravarMovimentacoes($pagamentos, $id_pedido_venda, $id_cliente, $id_empreendimento)
 {
     $MovimentacaoCaixaTO = new MovimentacaoCaixaTO();
     $MovimentacaoCaixaDao = new MovimentacaoCaixaDao();
     $PagamentoClienteTO = new PagamentoClienteTO();
     $PagamentoClienteDao = new PagamentoClienteDao();
     $ControlePagamentoVendaTO = new ControlePagamentoVendaTO();
     $ControlePagamentoVendaDao = new ControlePagamentoVendaDao();
     $MaquinetaDao = new MaquinetaDao();
     $pagamentos = $pagamentos;
     $id_pedido_venda = $id_pedido_venda;
     $id_cliente = $id_cliente;
     $id_empreendimento = $id_empreendimento;
     $Dao = new Dao();
     $Dao->setTimeZone($id_empreendimento);
     $dta_entrada = date('Y-m-d H:i:s');
     $id_controle_pagamento = $ControlePagamentoVendaDao->saveControlePagamento($dta_entrada);
     if (!$id_controle_pagamento) {
         Flight::halt(500, 'erro ao inserir pagamento ao cliente');
     }
     foreach ($pagamentos as $key => $value) {
         $parcela = null;
         if ($value['id_tipo_movimentacao'] != 5 && $value['id_forma_pagamento'] != 6) {
             $PagamentoClienteTO->id_cliente = isset($value['id_cliente']) ? $value['id_cliente'] : "";
             $PagamentoClienteTO->id_controle_pagamento = $id_controle_pagamento;
             $PagamentoClienteTO->id_forma_pagamento = isset($value['id_forma_pagamento']) ? $value['id_forma_pagamento'] : "";
             $PagamentoClienteTO->valor_pagamento = isset($value['valor']) ? $value['valor_pagamento'] : "";
             if ($value['id_forma_pagamento'] == 2) {
                 $PagamentoClienteTO->status_pagamento = 0;
             } else {
                 if ($value['id_forma_pagamento'] == 4) {
                     $PagamentoClienteTO->status_pagamento = isset($value['status_pagamento']) ? $value['status_pagamento'] : 0;
                     $PagamentoClienteTO->doc_boleto = isset($value['doc_boleto']) ? $value['doc_boleto'] : NULL;
                     $PagamentoClienteTO->num_boleto = isset($value['num_boleto']) ? $value['num_boleto'] : NULL;
                 } else {
                     $PagamentoClienteTO->status_pagamento = 1;
                 }
             }
             $PagamentoClienteTO->data_pagamento = isset($value['data_pagamento']) ? $value['data_pagamento'] : "";
             $PagamentoClienteTO->id_empreendimento = isset($value['id_empreendimento']) ? $value['id_empreendimento'] : "";
             $PagamentoClienteTO->id_plano_conta = isset($value['id_plano_conta']) ? $value['id_plano_conta'] : "";
             $PagamentoClienteTO->id_conta_bancaria = isset($value['id_conta_bancaria']) ? $value['id_conta_bancaria'] : NULL;
             $PagamentoClienteTO->flg_caixa_fechado = 0;
             $PagamentoClienteTO->id_banco = isset($value['id_banco']) ? $value['id_banco'] : NULL;
             $PagamentoClienteTO->num_conta_corrente = isset($value['num_conta_corrente']) ? $value['num_conta_corrente'] : NULL;
             $PagamentoClienteTO->num_cheque = isset($value['num_cheque']) ? $value['num_cheque'] : NULL;
             $PagamentoClienteTO->flg_cheque_predatado = isset($value['flg_cheque_predatado']) ? $value['flg_cheque_predatado'] : NULL;
             $PagamentoClienteTO->id_vale_troca = (int) $value['id_forma_pagamento'] == 7 ? $value['id_vale_troca'] : NULL;
             $PagamentoClienteTO->agencia_transferencia = isset($value['agencia_transferencia']) ? $value['agencia_transferencia'] : NULL;
             $PagamentoClienteTO->conta_transferencia = isset($value['conta_transferencia']) ? $value['conta_transferencia'] : NULL;
             $PagamentoClienteTO->proprietario_conta_transferencia = isset($value['proprietario_conta_transferencia']) ? $value['proprietario_conta_transferencia'] : NULL;
             $PagamentoClienteTO->id_conta_transferencia_destino = isset($value['id_conta_transferencia_destino']) ? $value['id_conta_transferencia_destino'] : NULL;
             if ($value['id_forma_pagamento'] == 5) {
                 $maquineta = $MaquinetaDao->getMaquineta($value['id_maquineta']);
                 $txa_maquineta = $maquineta['per_margem_debito'];
                 $PagamentoClienteTO->id_maquineta = isset($value['id_maquineta']) ? $value['id_maquineta'] : NULL;
                 $PagamentoClienteTO->taxa_maquineta = $txa_maquineta;
             } else {
                 $PagamentoClienteTO->id_maquineta = NULL;
                 $PagamentoClienteTO->taxa_maquineta = NULL;
             }
             $PagamentoClienteTO->id_cliente = is_numeric($PagamentoClienteTO->id_cliente) ? $PagamentoClienteTO->id_cliente : $value['id_cliente_lancamento'];
             $id_lancamento_entrada = $PagamentoClienteDao->savePagamentoCliente($PagamentoClienteTO);
             if (!$id_lancamento_entrada) {
                 Flight::halt(500, 'erro ao inserir pagamento ao cliente');
             }
         } else {
             if ($value['id_tipo_movimentacao'] != 5) {
                 $repeat_parcelas = 0;
                 $id_parcelamento = false;
                 $arr_parcelas = $value['parcelas'];
                 $n_parcelas = count($arr_parcelas);
                 foreach ($arr_parcelas as $key_par => $parcela) {
                     $maquineta = $MaquinetaDao->getMaquineta($parcela['id_maquineta']);
                     $txa_maquineta = $MaquinetaDao->getTaxaMaquineta($parcela['id_maquineta'], $n_parcelas);
                     $PagamentoClienteTO->id_cliente = isset($parcela['id_cliente']) ? $parcela['id_cliente'] : "";
                     $PagamentoClienteTO->id_controle_pagamento = $id_controle_pagamento;
                     $PagamentoClienteTO->id_forma_pagamento = isset($parcela['id_forma_pagamento']) ? $parcela['id_forma_pagamento'] : "";
                     $PagamentoClienteTO->valor_pagamento = isset($parcela['valor_pagamento']) ? $parcela['valor_pagamento'] : "";
                     $PagamentoClienteTO->status_pagamento = 0;
                     $PagamentoClienteTO->data_pagamento = isset($parcela['data_pagamento']) ? $parcela['data_pagamento'] : "";
                     $PagamentoClienteTO->obs_pagamento = isset($parcela['obs_pagamento']) ? $parcela['obs_pagamento'] : "";
                     $PagamentoClienteTO->id_empreendimento = isset($parcela['id_empreendimento']) ? $parcela['id_empreendimento'] : "";
                     $PagamentoClienteTO->id_banco = isset($parcela['id_banco']) ? $parcela['id_banco'] : "";
                     $PagamentoClienteTO->num_conta_corrente = isset($parcela['num_conta_corrente']) ? $parcela['num_conta_corrente'] : "";
                     $PagamentoClienteTO->num_cheque = isset($parcela['num_cheque']) ? $parcela['num_cheque'] : "";
                     $PagamentoClienteTO->flg_cheque_predatado = isset($parcela['flg_cheque_predatado']) ? $parcela['flg_cheque_predatado'] : "";
                     $PagamentoClienteTO->id_plano_conta = isset($parcela['id_plano_conta']) ? $parcela['id_plano_conta'] : "";
                     $PagamentoClienteTO->id_conta_bancaria = isset($parcela['id_conta_bancaria']) ? $parcela['id_conta_bancaria'] : "";
                     $PagamentoClienteTO->id_maquineta = isset($parcela['id_maquineta']) ? $parcela['id_maquineta'] : NULL;
                     $PagamentoClienteTO->taxa_maquineta = $txa_maquineta;
                     $PagamentoClienteTO->id_parcelamento = is_numeric($id_parcelamento) ? $id_parcelamento : NULL;
                     $PagamentoClienteTO->id_cliente = is_numeric($PagamentoClienteTO->id_cliente) ? $PagamentoClienteTO->id_cliente : $parcela['id_cliente_lancamento'];
                     $PagamentoClienteTO->flg_caixa_fechado = 0;
                     if ($PagamentoClienteTO->id_forma_pagamento != 2) {
                         $PagamentoClienteTO->id_banco = NULL;
                         $PagamentoClienteTO->num_conta_corrente = NULL;
                         $PagamentoClienteTO->num_cheque = NULL;
                         $PagamentoClienteTO->flg_cheque_predatado = NULL;
                     }
                     $id_lancamento_entrada = $PagamentoClienteDao->savePagamentoCliente($PagamentoClienteTO);
                     if (!$id_lancamento_entrada) {
                         Flight::halt(500, 'erro ao inserir pagamento ao cliente');
                     }
                     $MovimentacaoCaixaTO->id_abertura_caixa = isset($parcela['id_abertura_caixa']) ? $parcela['id_abertura_caixa'] : NULL;
                     $MovimentacaoCaixaTO->id_plano_conta = isset($parcela['id_plano_conta']) ? $parcela['id_plano_conta'] : NULL;
                     $MovimentacaoCaixaTO->id_tipo_movimentacao = isset($parcela['id_tipo_movimentacao']) ? $parcela['id_tipo_movimentacao'] : NULL;
                     $MovimentacaoCaixaTO->dsc_movimentacao = 'Pedido de Venda';
                     $MovimentacaoCaixaTO->id_maquineta = isset($parcela['id_maquineta']) ? $parcela['id_maquineta'] : NULL;
                     $MovimentacaoCaixaTO->id_pedido_venda = $id_pedido_venda;
                     $MovimentacaoCaixaTO->id_lancamento_entrada = $id_lancamento_entrada;
                     $valor_pagamento = isset($parcela['valor']) ? $parcela['valor'] : NULL;
                     $MovimentacaoCaixaTO->para_receber = $parcela['id_tipo_movimentacao'] == 5 ? $parcela['valor'] : NULL;
                     $MovimentacaoCaixaTO->dta_movimentacao = $dta_entrada;
                     if (!$MovimentacaoCaixaDao->saveMovimentacao($MovimentacaoCaixaTO)) {
                         Flight::halt(500, 'erro ao inserir movimentacao');
                     }
                     $id_parcelamento = is_numeric($id_parcelamento) ? $id_parcelamento : $id_lancamento_entrada;
                 }
                 $id_lancamento_entrada = $id_parcelamento;
             }
         }
         if ($parcela == null) {
             $MovimentacaoCaixaTO->id_abertura_caixa = isset($value['id_abertura_caixa']) ? $value['id_abertura_caixa'] : NULL;
             $MovimentacaoCaixaTO->id_plano_conta = isset($value['id_plano_conta']) ? $value['id_plano_conta'] : NULL;
             $MovimentacaoCaixaTO->id_tipo_movimentacao = isset($value['id_tipo_movimentacao']) ? $value['id_tipo_movimentacao'] : NULL;
             $MovimentacaoCaixaTO->dsc_movimentacao = 'Pedido de Venda';
             $MovimentacaoCaixaTO->id_maquineta = isset($value['id_maquineta']) ? $value['id_maquineta'] : NULL;
             $MovimentacaoCaixaTO->id_pedido_venda = $id_pedido_venda;
             $MovimentacaoCaixaTO->id_lancamento_entrada = $value['id_tipo_movimentacao'] != 5 ? $id_lancamento_entrada : NULL;
             $valor_pagamento = isset($value['valor']) ? $value['valor'] : NULL;
             $MovimentacaoCaixaTO->para_receber = $value['id_tipo_movimentacao'] == 5 ? $value['valor'] : NULL;
             $MovimentacaoCaixaTO->dta_movimentacao = $dta_entrada;
             if (!$MovimentacaoCaixaDao->saveMovimentacao($MovimentacaoCaixaTO)) {
                 Flight::halt(500, 'erro ao inserir movimentacao');
             }
         }
     }
     return true;
 }
 public static function changeStatus($id_ordem_producao, $id_status_change, $id_empreendimento, $id_usuario)
 {
     $OrdemProducaoDao = new OrdemProducaoDao();
     $ItensOrdemProducaoDao = new ItensOrdemProducaoDao();
     $EstoqueDao = new EstoqueDao();
     $Dao = new Dao();
     $ProdutoDao = new ProdutoDao();
     $out = array();
     $Dao->setTimeZone($id_empreendimento);
     $dta_change = date('Y-m-d H:i:s');
     $itens = $ItensOrdemProducaoDao->getItensOrdemProducao(null, null, array('tiop.id_ordem_producao' => $id_ordem_producao));
     $aux = array();
     $insumos = array();
     $OrdensProducao = $OrdemProducaoDao->getOrdemProducao(NULL, NULL, array('top->id' => $id_ordem_producao));
     $OrdensProducao = $OrdensProducao[0];
     $status = $OrdemProducaoDao->getStatus(array("id" => $id_status_change));
     $status = $status[0];
     foreach ($itens as $key => $value) {
         $item_aux = $value;
         $item_aux['qtd_produzir'] = (int) $value['qtd'];
         $item_aux['itens'] = $ProdutoDao->getInsumos($value['id_produto'], null);
         $aux[$value['id_produto']] = $item_aux;
         foreach ($item_aux['itens'] as $key_i => $value_i) {
             $qtd_produzir = $item_aux['qtd_produzir'];
             $qtd = $value_i['qtd'];
             if (isset($insumos[$value_i['id']])) {
                 $insumos[$value_i['id']]['qtd'] += $qtd_produzir * $qtd;
             } else {
                 $insumos[$value_i['id']] = array('qtd' => $qtd_produzir * $qtd);
             }
         }
     }
     if ((int) $id_status_change == 2 || (int) $id_status_change == 3) {
         foreach ($insumos as $key => $value) {
             $qtd = (int) $value['qtd'];
             $estoque = $EstoqueDao->getQtdProduto($id_empreendimento, $key, null, $OrdensProducao['id_deposito']);
             $estoque_real = $estoque - $qtd;
             if ($estoque_real < 0) {
                 $out[] = array((double) $key);
             }
         }
     }
     if (count($out) > 0) {
         Flight::response()->status(406)->header('Content-Type', 'application/json')->write(json_encode(array('out_estoque' => $out, 'lista' => $aux)))->send();
         return;
     }
     try {
         $Conexao = new Conexao();
         $Conexao::$alto_commit = false;
         $Conexao::getInstance();
         $Conexao->beginTransaction();
         if ((int) $id_status_change == 3) {
             $EstoqueEntradaTO = new EstoqueEntradaTO();
             $EstoqueEntradaDao = new EstoqueEntradaDao();
             $EstoqueEntradaTO->id_empreendimento = $id_empreendimento;
             $EstoqueEntradaTO->id_deposito = $OrdensProducao['id_deposito'];
             $EstoqueEntradaTO->id_ordem_producao = $id_ordem_producao;
             $EstoqueEntradaTO->dta_entrada = $dta_change;
             $EstoqueEntradaTO->id_usuario = $id_usuario;
             $id_estoque_entrada = $EstoqueEntradaDao->saveEstoqueEntrada($EstoqueEntradaTO);
             if ($id_estoque_entrada) {
                 $ItemEstoqueEntradaTO = new ItemEstoqueEntradaTO();
                 $ItemEstoqueEntradaDao = new ItemEstoqueEntradaDao();
                 foreach ($itens as $key => $value) {
                     $ItemEstoqueEntradaTO->id_estoque_entrada = $id_estoque_entrada;
                     $ItemEstoqueEntradaTO->id_produto = $value['id_produto'];
                     $ItemEstoqueEntradaTO->qtd_item = $value['qtd'];
                     $ItemEstoqueEntradaTO->vlr_custo = NULL;
                     $ItemEstoqueEntradaTO->perc_imposto = NULL;
                     $ItemEstoqueEntradaTO->perc_desconto = NULL;
                     $ItemEstoqueEntradaTO->dta_validade = '2099-12-31';
                     $id_item_estoque_entrada = $ItemEstoqueEntradaDao->saveItemEstoqueEntrada($ItemEstoqueEntradaTO);
                     if ($id_item_estoque_entrada) {
                         $EstoqueTO = new EstoqueTO();
                         $EstoqueDao = new EstoqueDao();
                         $PrecoProdutoTO = new PrecoProdutoTO();
                         $PrecoProdutoDao = new PrecoProdutoDao();
                         $EstoqueTO->id_deposito = $EstoqueEntradaTO->id_deposito;
                         $EstoqueTO->id_produto = $ItemEstoqueEntradaTO->id_produto;
                         $EstoqueTO->qtd_item = $ItemEstoqueEntradaTO->qtd_item;
                         $EstoqueTO->dta_validade = $ItemEstoqueEntradaTO->dta_validade;
                         $dadosTrigger = new StdClass();
                         $dadosTrigger->qtd_entrada = $EstoqueTO->qtd_item;
                         $dadosTrigger->acao_movimentacao = 'ENTRADA';
                         $dadosTrigger->id_tipo_movimentacao_estoque = 4;
                         $dadosTrigger->id_estoque_entrada = $id_estoque_entrada;
                         $dadosTrigger->id_item_estoque_entrada = $id_item_estoque_entrada;
                         $dadosTrigger->id_responsavel = $id_usuario;
                         $dadosTrigger->id_empreendimento = $id_empreendimento;
                         $dadosTrigger->id_ordem_producao = $id_ordem_producao;
                         if (!$EstoqueDao->atualizaEstoque($EstoqueTO, 'update', $dadosTrigger)) {
                             $Conexao->back();
                             Flight::halt(500, 'erro ao atualizar estoque');
                         }
                     } else {
                         $Conexao->back();
                         Flight::halt(500, 'erro ao inserir itens da entrada');
                     }
                 }
             } else {
                 $Conexao->back();
                 Flight::halt(500, 'erro ao inserir entrada no estoque');
             }
             foreach ($insumos as $key => $value) {
                 if (!$EstoqueDao->baixaEstoqueOrdemProducao($OrdensProducao['id_empreendimento'], $OrdensProducao['id'], $key, $OrdensProducao['id_deposito'], $value['qtd'], $id_usuario)) {
                     $Conexao->back();
                     Flight::halt(500, 'error ao atualizar saida estoque');
                 }
             }
         }
         if (!$OrdemProducaoDao->ChangeStatus($id_ordem_producao, $id_status_change, $dta_change)) {
             $Conexao->back();
             Flight::halt(500, 'Erro ao cadastrar mudança de status 1');
         }
         if (!$OrdemProducaoDao->savechangeOrdemProducao($id_ordem_producao, $id_status_change, $dta_change)) {
             $Conexao->back();
             Flight::halt(500, 'Erro ao cadastrar mudança de status 2');
         }
         $Conexao->commit();
         Flight::response()->status(201)->header('Content-Type', 'application/json')->write(json_encode(array('status' => $status)))->send();
     } catch (Exception $e) {
         $Conexao->back();
         jsonException($e);
     }
 }