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 saveVenda()
 {
     $EstoqueDao = new EstoqueDao();
     $out = array();
     $modo_venda = $_POST['modo_venda'];
     $produtos = $_POST['produtos'];
     $venda = $_POST['venda'];
     $id_empreendimento = $venda['id_empreendimento'];
     $id_deposito = $venda['id_deposito'];
     $pagamentos = $_POST['pagamentos'];
     foreach ($produtos as $key => $value) {
         $qtd = (int) $value['qtd'];
         $estoque = $EstoqueDao->getQtdProduto($id_empreendimento, $value['id_produto'], null, $id_deposito);
         $estoque_real = $estoque - $qtd;
         if ($estoque_real < 0) {
             $out[] = array($value['id_produto']);
         }
     }
     if (count($out) > 0) {
         Flight::response()->status(406)->header('Content-Type', 'application/json')->write(json_encode($out))->send();
         return;
     }
     /*
     Flight::response()->status(500)
     					  ->header('Content-Type', 'application/json')
     					  ->write(json_encode($arrayName))
     					  ->send();
     return ;
     */
     $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'] : '';
     $VendaTO->id_empreendimento = isset($venda['id_empreendimento']) ? $venda['id_empreendimento'] : '';
     $VendaTO->id_status_venda = 4;
     $id_venda = $VendaDao->saveVenda($VendaTO);
     if (!$id_venda) {
         Flight::halt(500, 'erro ao inserir venda');
     }
     $ItemVendaDao = new ItemVendaDao();
     $ItemVendaTO = new ItemVendaTO();
     foreach ($produtos as $key => $value) {
         $ItemVendaTO->id_venda = $id_venda;
         $ItemVendaTO->id_produto = $value['id_produto'];
         $ItemVendaTO->desconto_aplicado = isset($value['desconto_aplicado']) ? $value['desconto_aplicado'] : 0;
         $ItemVendaTO->valor_desconto = isset($value['valor_desconto']) ? $value['valor_desconto'] : 0;
         $ItemVendaTO->qtd = $value['qtd'];
         $ItemVendaTO->valor_real_item = $value['valor_produto'];
         if (!$ItemVendaDao->saveItemVenda($ItemVendaTO)) {
             Flight::halt(500, 'erro ao inserir os itens da venda');
         }
         if (!$EstoqueDao->baixaEstoquePDV($id_empreendimento, $id_venda, $value['id_produto'], $id_deposito, $value['qtd'])) {
             Flight::halt(500, 'error ao atualizar estoque');
         }
     }
     $MovimentacaoCaixaTO = new MovimentacaoCaixaTO();
     $MovimentacaoCaixaDao = new MovimentacaoCaixaDao();
     foreach ($pagamentos as $key => $value) {
         if ($value['id_tipo_movimentacao'] != 5) {
             $PagamentoClienteTO = new PagamentoClienteTO();
             $PagamentoClienteDao = new PagamentoClienteDao();
             $PagamentoClienteTO->id_cliente = isset($value['id_cliente']) ? $value['id_cliente'] : "";
             $PagamentoClienteTO->id_forma_pagamento = isset($value['id_forma_pagamento']) ? $value['id_forma_pagamento'] : "";
             $PagamentoClienteTO->valor_pagamento = isset($value['valor']) ? $value['valor_pagamento'] : "";
             $PagamentoClienteTO->status_pagamento = isset($value['status_pagamento']) ? $value['status_pagamento'] : "";
             $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'] : "";
             $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_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');
             }
         }
         $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 = '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;
         if (!$MovimentacaoCaixaDao->saveMovimentacao($MovimentacaoCaixaTO)) {
             Flight::halt(500, 'erro ao inserir movimentacao');
         }
     }
     $UsuarioDao = new UsuarioDao();
     $vlr_saldo_devedor = $UsuarioDao->getUsuarios(null, null, array('usu.id' => $venda['id_cliente']));
     $vlr_saldo_devedor = $vlr_saldo_devedor['usuarios'][0]["vlr_saldo_devedor"];
     Flight::response()->status(201)->header('Content-Type', 'application/json')->write(json_encode(array('id_venda' => $id_venda, 'vlr_saldo_devedor' => $vlr_saldo_devedor)))->send();
 }
 public static function baixaEstoquePDV($id_empreendimento, $id_venda, $id_produto, $qtd_saida)
 {
     $EstoqueDao = new EstoqueDao();
     if (!$EstoqueDao->baixaEstoquePDV($id_empreendimento, $id_venda, $id_produto, $qtd_saida)) {
         Flight::halt(500, 'error ao atualizar estoque');
     }
     Flight::halt(201, 'estoque Atualizado com sucesso');
 }