public static function changeStatusPedido($id_pedido, $id_status_pedido, $id_deposito = null)
 {
     $PedidoVendaDao = new PedidoVendaDao();
     $Conexao = new Conexao();
     $Conexao->beginTransaction();
     if ((int) $id_status_pedido == 2) {
         $PedidoVendaDao = new PedidoVendaDao();
         $EstoqueDao = new EstoqueDao();
         $ItemPedidoVendaDao = new ItemPedidoVendaDao();
         $pedido_venda = $PedidoVendaDao->getPedidoVenda($id_pedido);
         $pedido_venda['itens'] = $ItemPedidoVendaDao->getItens($id_pedido, null, null);
         $arr_qtd = array();
         $out = array();
         foreach ($pedido_venda['itens'] as $x => $y) {
             if (!isset($arr_qtd[$y['id_produto']])) {
                 $arr_qtd[$y['id_produto']] = 0;
             }
             $arr_qtd[$y['id_produto']] += (int) $y['qtd'];
         }
         foreach ($arr_qtd as $id_produto => $value) {
             $id_empreendimento = $pedido_venda['id_empreendimento'];
             $qtd = (int) $value;
             $estoque = $EstoqueDao->getQtdProduto($pedido_venda['id_empreendimento'], $id_produto, null, $id_deposito);
             $estoque_real = $estoque - $qtd;
             if ($estoque_real < 0) {
                 $out[] = array((double) $id_produto);
             }
         }
         if (count($out) > 0) {
             Flight::response()->status(406)->header('Content-Type', 'application/json')->write(json_encode(array('out_estoque' => $out)))->send();
             return;
         }
         if (!$EstoqueDao->baixaEstoquePedido($id_empreendimento, $id_pedido, $pedido_venda['itens'], $id_deposito, $value['qtd'])) {
             $Conexao->back();
             Flight::halt(500, 'Erro ao dar baixa no estoque');
         }
     }
     if (!$PedidoVendaDao->changeStatusPedido($id_pedido, $id_status_pedido)) {
         $Conexao->back();
         Flight::halt(500, 'Erro ao mudar status');
     }
     if ((int) $id_status_pedido == 4) {
         $id_status_venda = 3;
     } else {
         if ((int) $id_status_pedido == 5) {
             $id_status_venda = 4;
         }
     }
     if (isset($id_status_venda)) {
         $PedidoVendaDao->changeStatusVenda($id_pedido, $id_status_venda);
     }
     Flight::json($PedidoVendaDao->getStatusByid($id_status_pedido));
 }
 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);
     }
 }
 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);
     }
 }