public static function BaixaProdutoClinica()
 {
     try {
         $id_empreendimento = $_POST['id_empreendimento'];
         $id_deposito = $_POST['id_deposito'];
         $id_usuario = $_POST['id_usuario'];
         $id_profissional = $_POST['id_profissional'];
         $produtos = $_POST['produtos'];
         $EstoqueDao = new EstoqueDao();
         $out = array();
         $out_desconto = array();
         $produtos_estoque = array();
         foreach ($produtos as $key => $value) {
             if (!isset($produtos_estoque[$value['id']])) {
                 $produtos_estoque[$value['id']]['qtd_saida'] = 0;
                 $produtos_estoque[$value['id']]['id'] = $value['id'];
             }
             $produtos_estoque[$value['id']]['qtd_saida'] += (int) $value['qtd_saida'];
         }
         foreach ($produtos_estoque as $key => $value) {
             $qtd_saida = (int) $value['qtd_saida'];
             $estoque = $EstoqueDao->getQtdProduto($id_empreendimento, $value['id'], null, $id_deposito);
             $estoque_real = $estoque - $qtd_saida;
             if ($estoque_real < 0) {
                 $out[$value['id']] = array('qtd_saida' => $qtd_saida, 'qtd_estoque' => $estoque);
             }
         }
         if (count($out) > 0) {
             Flight::response()->status(406)->header('Content-Type', 'application/json')->write(json_encode(array('out_estoque' => $out)))->send();
             return;
         }
         $EstoqueDao = new EstoqueDao();
         $EstoqueDao->baixaEstoqueClinica($id_empreendimento, $produtos, $id_deposito, null, $id_usuario, $id_profissional, 1);
     } catch (Exception $e) {
         jsonException($e);
     }
 }
 public static function saveVendaLoja()
 {
     $EstoqueDao = new EstoqueDao();
     $ConfiguracaoDao = new ConfiguracaoDao();
     $out = array();
     $produtos = $_POST['produtos'];
     $venda = $_POST['venda'];
     $id_empreendimento = $venda['id_empreendimento'];
     $config = $ConfiguracaoDao->getConfiguracoes($id_empreendimento);
     foreach ($produtos as $key => $value) {
         $qtd = (int) $value['qtd'];
         $estoque = $EstoqueDao->getQtdProduto($id_empreendimento, $value['id_produto']);
         $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;
     }
     $VendaDao = new VendaDao();
     $VendaTO = new VendaTO();
     $VendaTO->id_usuario = $config['id_usuario_venda_vitrine'];
     $VendaTO->id_cliente = isset($venda['id_cliente']) ? $venda['id_cliente'] : '';
     $VendaTO->venda_confirmada = isset($venda['venda_confirmada']) ? $venda['venda_confirmada'] : 0;
     $VendaTO->id_empreendimento = isset($venda['id_empreendimento']) ? $venda['id_empreendimento'] : '';
     $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');
         }
     }
     Flight::halt(201);
 }
 public function getAcessorios($id_empreendimento, $offset, $limit, $busca = array())
 {
     $offset = $offset == null ? 0 : $offset;
     $limit = $limit == null ? 0 : $limit;
     $sql = "SELECT \n\t\t\t\t\ttp.id \t\t\tAS id_produto,\n\t\t\t\t\ttp.nome \t\tAS nome_produto,\n\t\t\t\t\ttt.id \t\t\tAS id_tamanho,\n\t\t\t\t\ttt.nome_tamanho,\n\t\t\t\t\ttcp.id \t\t\tAS id_cor,\n\t\t\t\t\ttcp.nome_cor,\n\t\t\t\t\ttf.id \t\t\tAS id_fabricante,\n\t\t\t\t\ttf.nome_fabricante,\n\t\t\t\t\ttpp.perc_desconto_compra,tpp.perc_imposto_compra,tpp.perc_venda_atacado,tpp.perc_venda_intermediario,tpp.perc_venda_varejo,\n\t\t\t\t\tROUND(( ifnull(tpp.vlr_custo,0) + (ifnull(tpp.vlr_custo,0) * ifnull(tpp.perc_imposto_compra,0) )) - ( ( ifnull(tpp.vlr_custo,2) + (ifnull(tpp.vlr_custo,0) * ifnull(tpp.perc_imposto_compra,0) )) * ifnull(tpp.perc_desconto_compra,0)   ) ,2) AS vlr_custo_real,\n\t\t\t\t\tROUND(ROUND((ifnull(tpp.vlr_custo,0) + (ifnull(tpp.vlr_custo,0) * ifnull(tpp.perc_imposto_compra,0))) - (ifnull(tpp.vlr_custo,0) * ifnull(tpp.perc_desconto_compra,0)),2) + (ROUND((ifnull(tpp.vlr_custo,0) + (ifnull(tpp.vlr_custo,0) * ifnull(tpp.perc_imposto_compra,0))) - (ifnull(tpp.vlr_custo,0) * ifnull(tpp.perc_desconto_compra,0)),2) * ifnull(perc_venda_atacado,0)),2) AS vlr_venda_atacado,\n\t\t\t\t\tROUND(ROUND((ifnull(tpp.vlr_custo,0) + (ifnull(tpp.vlr_custo,0) * ifnull(tpp.perc_imposto_compra,0))) - (ifnull(tpp.vlr_custo,0) * ifnull(tpp.perc_desconto_compra,0)),2) + (ROUND((ifnull(tpp.vlr_custo,0) + (ifnull(tpp.vlr_custo,0) * ifnull(tpp.perc_imposto_compra,0))) - (ifnull(tpp.vlr_custo,0) * ifnull(tpp.perc_desconto_compra,0)),2) * ifnull(perc_venda_intermediario,0)),2) AS vlr_venda_intermediario,\n\t\t\t\t\tROUND(ROUND((ifnull(tpp.vlr_custo,0) + (ifnull(tpp.vlr_custo,0) * ifnull(tpp.perc_imposto_compra,0))) - (ifnull(tpp.vlr_custo,0) * ifnull(tpp.perc_desconto_compra,0)),2) + (ROUND((ifnull(tpp.vlr_custo,0) + (ifnull(tpp.vlr_custo,0) * ifnull(tpp.perc_imposto_compra,0))) - (ifnull(tpp.vlr_custo,0) * ifnull(tpp.perc_desconto_compra,0)),2) * ifnull(perc_venda_varejo,0)),2) AS vlr_venda_varejo\n\t\t\t\tFROM tbl_produtos AS tp\n\t\t\t\tINNER JOIN tbl_produto_empreendimento \t\tAS tpe \t\tON tp.id \t\t\t= tpe.id_produto \n\t\t\t\tINNER JOIN tbl_valor_campo_extra_produto \tAS tvcep \tON tp.id \t\t\t= tvcep.id_produto \n\t\t\t\tINNER JOIN tbl_campo_extra_produto \t\t\tAS tcep \tON tvcep.id_campo \t= tcep.id \n\t\t\t\tLEFT JOIN tbl_cor_produto \t\t\t\t\tAS tcp \t\tON tp.id_cor \t\t= tcp.id \n\t\t\t\tLEFT JOIN tbl_tamanho \t\t\t\t\t\tAS tt \t\tON tp.id_tamanho \t= tt.id \n\t\t\t\tLEFT JOIN tbl_fabricante \t\t\t\t\tAS tf \t\tON tp.id_fabricante = tf.id\n\t\t\t\tLEFT JOIN tbl_preco_produto \t\t\t\tAS tpp \t\tON tpp.id_produto   = tp.id AND tpp.id_empreendimento = {$id_empreendimento} \n\t\t\t\tWHERE \n\t\t\t\t\ttpe.id_empreendimento  = {$id_empreendimento} AND \n\t\t\t\t\ttp.flg_excluido \t  != 1  \t\t\t\tAND \n\t\t\t\t\ttcep.nome_campo \t   = 'flg_acessorio' \tAND \n\t\t\t\t\ttvcep.valor_campo\t   = '1'\n\t\t\t \t";
     if (is_array($busca) && count($busca) > 0) {
         $where = prepareWhere($busca);
         $sql .= " AND " . $where;
     }
     if ($limit > 0) {
         $pag = $offset / $limit + 1;
         $Paginacao = new PaginacaoController($sql);
         $Paginacao->num_paginas = 10;
         $Paginacao->resultados_pagina = $limit;
         $Paginacao->paginarResultado($pag);
         $links_paginacao = $Paginacao->paginasDisponiveis($pag);
         $sql = $Paginacao->_sql_paginacao;
     }
     $select = $this->conn->prepare($sql);
     if ($select->execute()) {
         if ($select->rowCount() > 0) {
             $saida = array();
             $saida['acessorios'] = parse_arr_values($select->fetchAll(PDO::FETCH_ASSOC), 'all');
             $EstoqueDao = new EstoqueDao();
             foreach ($saida['acessorios'] as $key => $prd) {
                 $saida['acessorios'][$key]['qtd_real_estoque'] = $EstoqueDao->getQtdProduto($id_empreendimento, $prd['id_produto'], null, null);
             }
             $saida['paginacao'] = isset($links_paginacao) ? $links_paginacao : null;
             return $saida;
         } else {
             return false;
         }
     } else {
         throw new ExceptionJSON("Erro ao Buscar Acessorios#" . json_encode($select->errorInfo()), 4, ExceptionJSON::SELECT);
     }
 }
 public function getAnaliticoEstoque($id_deposito, $id_empreendimento, $offset, $limit)
 {
     $sql = "SELECT\n\t\t\t\t\tpro.id,\n\t\t\t\t\tpro.nome,\n\t\t\t\t\tfab.nome_fabricante,\n\t\t\t\t\ttcp.nome_cor AS sabor,\n\t\t\t\t\ttt.nome_tamanho AS peso,\n\t\t\t\t\test.qtd_item,\n\t\t\t\t\test.dta_validade,\n\t\t\t\t\ttpp.vlr_custo,\n\t\t\t\t\ttpp.perc_imposto_compra,\n\t\t\t\t\ttpp.perc_desconto_compra,\n\t\t\t\t\ttpp.perc_venda_atacado,\n\t\t\t\t\ttpp.perc_venda_intermediario,\n\t\t\t\t\ttpp.perc_venda_varejo\n\t\t\t\tFROM tbl_preco_produto \t\tAS tpp\n\t\t\t\tINNER JOIN tbl_estoque \t\tAS est ON est.id_produto = tpp.id_produto\n\t\t\t\tINNER JOIN tbl_produtos \tAS pro ON pro.id = tpp.id_produto\n\t\t\t\tLEFT JOIN tbl_cor_produto               AS tcp ON tcp.id = pro.id_cor \n\t\t\t\tLEFT JOIN tbl_tamanho                   AS tt ON tt.id = pro.id_tamanho\n\t\t\t\tLEFT JOIN tbl_fabricante \tAS fab ON fab.id = pro.id_fabricante\n\t\t\t\tWHERE est.id_deposito = {$id_deposito} and tpp.id_empreendimento = {$id_empreendimento}\n\t\t\t\tORDER BY pro.nome ASC, tt.nome_tamanho ASC , tcp.nome_cor ASC";
     if ($limit > 0) {
         $pag = $offset / $limit + 1;
         $Paginacao = new PaginacaoController($sql);
         $Paginacao->num_paginas = 10;
         $Paginacao->resultados_pagina = $limit;
         $Paginacao->paginarResultado($pag);
         $links_paginacao = $Paginacao->paginasDisponiveis($pag);
         $sql = $Paginacao->_sql_paginacao;
     }
     $select = $this->conn->prepare($sql);
     if ($select->execute()) {
         if ($select->rowCount() > 0) {
             $data['dados'] = $select->fetchAll(PDO::FETCH_ASSOC);
             $prdDao = new ProdutoDao();
             $estDao = new EstoqueDao();
             // Calculando preços de custo e venda, e disponbilidade de estoque
             foreach ($data['dados'] as $key => $value) {
                 $data['dados'][$key]['vlr_custo'] = (double) $data['dados'][$key]['vlr_custo'];
                 $data['dados'][$key]['perc_imposto_compra'] = (double) $data['dados'][$key]['perc_imposto_compra'];
                 $data['dados'][$key]['perc_desconto_compra'] = (double) $data['dados'][$key]['perc_desconto_compra'];
                 $data['dados'][$key]['perc_venda_atacado'] = (double) $data['dados'][$key]['perc_venda_atacado'];
                 $data['dados'][$key]['perc_venda_intermediario'] = (double) $data['dados'][$key]['perc_venda_intermediario'];
                 $data['dados'][$key]['perc_venda_varejo'] = (double) $data['dados'][$key]['perc_venda_varejo'];
                 $data['dados'][$key]['vlr_custo_total'] = 0;
                 $data['dados'][$key]['vlr_total_venda_atacado'] = 0;
                 $data['dados'][$key]['vlr_total_venda_intermediario'] = 0;
                 $data['dados'][$key]['vlr_total_venda_varejo'] = 0;
                 $vlr_custo_real = $prdDao->calculaValorCustoReal($data['dados'][$key]['vlr_custo'], $data['dados'][$key]['perc_imposto_compra'], $data['dados'][$key]['perc_desconto_compra']);
                 $data['dados'][$key]['id'] = (int) $data['dados'][$key]['id'];
                 $data['dados'][$key]['qtd_item'] = (int) $data['dados'][$key]['qtd_item'];
                 $data['dados'][$key]['vlr_custo_real'] = $vlr_custo_real;
                 $data['dados'][$key]['vlr_venda_atacado'] = $prdDao->calculaValorVenda($vlr_custo_real, $data['dados'][$key]['perc_venda_atacado']);
                 $data['dados'][$key]['vlr_venda_intermediario'] = $prdDao->calculaValorVenda($vlr_custo_real, $data['dados'][$key]['perc_venda_intermediario']);
                 $data['dados'][$key]['vlr_venda_varejo'] = $prdDao->calculaValorVenda($vlr_custo_real, $data['dados'][$key]['perc_venda_varejo']);
                 $data['dados'][$key]['qtd_item'] = $estDao->getQtdProduto($id_empreendimento, $data['dados'][$key]['id'], $data['dados'][$key]['dta_validade']);
                 if ($data['dados'][$key]['qtd_item'] == 0) {
                     unset($data['dados'][$key]);
                 } else {
                     $data['dados'][$key]['vlr_custo_total'] += $data['dados'][$key]['qtd_item'] * $data['dados'][$key]['vlr_custo_real'];
                     $data['dados'][$key]['vlr_total_venda_atacado'] += $data['dados'][$key]['qtd_item'] * $data['dados'][$key]['vlr_venda_atacado'];
                     $data['dados'][$key]['vlr_total_venda_intermediario'] += $data['dados'][$key]['qtd_item'] * $data['dados'][$key]['vlr_venda_intermediario'];
                     $data['dados'][$key]['vlr_total_venda_varejo'] += $data['dados'][$key]['qtd_item'] * $data['dados'][$key]['vlr_venda_varejo'];
                 }
             }
             $data['paginacao'] = isset($links_paginacao) ? $links_paginacao : null;
             return $data;
         } else {
             return false;
         }
     } else {
         return false;
     }
 }
 public static function getQtdProduto($id_empreendimento, $id_produto)
 {
     $EstoqueDao = new EstoqueDao();
     $qtd = $EstoqueDao->getQtdProduto($id_empreendimento, $id_produto);
     if ($qtd >= 0) {
         Flight::json($qtd);
     } else {
         Flight::halt(500, 'error ao solicitar estoque do produto');
     }
 }
 public function getProdutosExport($offset, $limit, $busca)
 {
     $offset = $offset == null ? 0 : $offset;
     $limit = $limit == null ? 0 : $limit;
     $id_empreendimento = null;
     if (array_key_exists('tpe->id_empreendimento', $busca)) {
         $id_empreendimento = $busca['tpe->id_empreendimento'];
     }
     $sql = "SELECT DISTINCT\n\t\t\t\t\tpro.id as id_produto,\n\t\t\t\t\tpro.nome ,\n\t\t\t\t\tfab.nome_fabricante,\n\t\t\t\t\tpro.peso,\n\t\t\t\t\tNULL AS qtd_item,\n\t\t\t\t\tROUND((tpp.vlr_custo + (tpp.vlr_custo * tpp.perc_imposto_compra)) - (tpp.vlr_custo * tpp.perc_desconto_compra),2) AS vlr_custo_real,\n\t\t\t\t\tROUND(ROUND((tpp.vlr_custo + (tpp.vlr_custo * tpp.perc_imposto_compra)) - (tpp.vlr_custo * tpp.perc_desconto_compra),2) + (ROUND((tpp.vlr_custo + (tpp.vlr_custo * tpp.perc_imposto_compra)) - (tpp.vlr_custo * tpp.perc_desconto_compra),2) * perc_venda_atacado),2) AS vlr_venda_atacado,\n\t\t\t\t\tROUND(ROUND((tpp.vlr_custo + (tpp.vlr_custo * tpp.perc_imposto_compra)) - (tpp.vlr_custo * tpp.perc_desconto_compra),2) + (ROUND((tpp.vlr_custo + (tpp.vlr_custo * tpp.perc_imposto_compra)) - (tpp.vlr_custo * tpp.perc_desconto_compra),2) * perc_venda_intermediario),2) AS vlr_venda_intermediario,\n\t\t\t\t\tROUND(ROUND((tpp.vlr_custo + (tpp.vlr_custo * tpp.perc_imposto_compra)) - (tpp.vlr_custo * tpp.perc_desconto_compra),2) + (ROUND((tpp.vlr_custo + (tpp.vlr_custo * tpp.perc_imposto_compra)) - (tpp.vlr_custo * tpp.perc_desconto_compra),2) * perc_venda_varejo),2) AS vlr_venda_varejo,\n\t\t\t\t\ttpp.perc_venda_atacado,\n\t\t\t\t\ttpp.perc_venda_intermediario,\n\t\t\t\t\ttpp.perc_venda_varejo\n\t\t\t\tFROM tbl_produtos \t\t\t\t\t\tAS pro\n\t\t\t\tLEFT JOIN tbl_fabricante \t\t\t\tAS fab ON pro.id_fabricante = fab.id\n\t\t\t\tLEFT JOIN tbl_produto_empreendimento \tAS tpe ON tpe.id_produto = pro.id\n\t\t\t\tLEFT JOIN tbl_preco_produto \t\t\tAS tpp ON tpp.id_produto = pro.id\n\t\t\t\tLEFT JOIN tbl_estoque \t\t\t\t\tAS est ON est.id_produto = pro.id ";
     if (is_array($busca) && count($busca) > 0) {
         $where = prepareWhere($busca);
         $sql .= " WHERE " . $where;
     }
     $sql .= " GROUP BY pro.id ";
     $sql .= " ORDER BY pro.id ASC ";
     if ($limit > 0) {
         $pag = $offset / $limit + 1;
         $Paginacao = new PaginacaoController($sql);
         $Paginacao->num_paginas = 10;
         $Paginacao->resultados_pagina = $limit;
         $Paginacao->paginarResultado($pag);
         $links_paginacao = $Paginacao->paginasDisponiveis($pag);
         $sql = $Paginacao->_sql_paginacao;
     }
     $select = $this->conn->prepare($sql);
     if ($select->execute()) {
         if ($select->rowCount() > 0) {
             $FornecedorDao = new FornecedorDao();
             $EstoqueDao = new EstoqueDao();
             $produtos = $select->fetchAll(PDO::FETCH_ASSOC);
             foreach ($produtos as $key => $value) {
                 if (!is_null($id_empreendimento)) {
                     $produtos[$key]['perc_venda_atacado'] = number_format($produtos[$key]['perc_venda_atacado'] * 100, 2, ',', '.');
                 }
                 $produtos[$key]['perc_venda_intermediario'] = number_format($produtos[$key]['perc_venda_intermediario'] * 100, 2, ',', '.');
                 $produtos[$key]['perc_venda_varejo'] = number_format($produtos[$key]['perc_venda_varejo'] * 100, 2, ',', '.');
                 $produtos[$key]['vlr_custo_real'] = number_format($produtos[$key]['vlr_custo_real'], 2, ',', '.');
                 $produtos[$key]['vlr_venda_atacado'] = number_format($produtos[$key]['vlr_venda_intermediario'], 2, ',', '.');
                 $produtos[$key]['vlr_venda_intermediario'] = number_format($produtos[$key]['vlr_venda_intermediario'], 2, ',', '.');
                 $produtos[$key]['vlr_venda_varejo'] = number_format($produtos[$key]['vlr_venda_varejo'], 2, ',', '.');
                 $produtos[$key]['qtd_item'] = $EstoqueDao->getQtdProduto($id_empreendimento, $value['id_produto'], null, null);
             }
             $head = array("ID", "Produto", "Fabricante", "Peso", "Qtd", "Vlr Custo", "Vlr Atacado", "Vlr Intermediário", "Vlr Varejo", "% Atacado", "% Intermediário", "% Varejo");
             $filename = "example";
             header("Content-type: text/csv");
             header("Content-Disposition: attachment; filename={$filename}.csv");
             header("Pragma: no-cache");
             header("Expires: 0");
             $outputBuffer = fopen("php://output", 'w');
             fputcsv($outputBuffer, $head);
             foreach ($produtos as $val) {
                 fputcsv($outputBuffer, $val);
             }
             fclose($outputBuffer);
             die;
             return $produtos;
         } else {
             return false;
         }
     } else {
         return false;
     }
 }
 public static function editItemComanda()
 {
     try {
         $ItemVendaTO = new ItemVendaTO();
         $MesaDao = new MesaDao();
         $Conexao = new Conexao();
         $Conexao::getInstance();
         $EstoqueDao = new EstoqueDao();
         $itemVenda = $ItemVendaTO->__setAll($_POST['campos'], true);
         $produtos[] = $_POST['campos'];
         $where = $_POST['where'];
         $out = array();
         foreach ($produtos as $key => $value) {
             if (!isset($produtos_estoque[$value['id_produto']])) {
                 $produtos_estoque[$value['id_produto']] = $value;
                 $produtos_estoque[$value['id_produto']]['qtd'] = 0;
                 $produtos_estoque[$value['id_produto']]['id_produto'] = $value['id_produto'];
             }
             $produtos_estoque[$value['id_produto']]['qtd'] += (int) $value['qtd'];
         }
         foreach ($produtos_estoque as $key => $value) {
             $qtd = (int) $value['qtd'];
             $estoque = $EstoqueDao->getQtdProduto($value['id_empreendimento'], $value['id_produto'], null, $value['id_deposito'], $value['id_venda']);
             $estoque_real = $estoque - $qtd;
             if ($estoque_real < 0) {
                 $out[] = array((double) $value['id_produto']);
             }
         }
         if (count($out) > 0) {
             $Conexao->rumQuery('UNLOCK TABLES;', false);
             Flight::response()->status(406)->header('Content-Type', 'application/json')->write(json_encode(array('out_estoque' => $out)))->send();
             return;
         }
         $MesaDao->editItemComanda($itemVenda, $where);
         $mesa = $MesaDao->getResumoMesa($_POST['id_mesa']);
         Flight::response()->status(200)->header('Content-Type', 'application/json')->write(json_encode(array('mesa' => $mesa)))->send();
     } catch (Exception $e) {
         jsonException($e);
     }
 }
 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 verificarEstoqueTransferencia()
 {
     try {
         $TransferenciaEstoqueTO = new stdClass();
         $TransferenciaEstoqueDao = new TransferenciaEstoqueDao();
         $EstoqueDao = new EstoqueDao();
         $TransferenciaEstoqueTO->id = isset($_POST['id']) ? $_POST['id'] : NULL;
         $TransferenciaEstoqueTO->id_usuario_transferencia = isset($_POST['id_usuario_transferencia']) ? $_POST['id_usuario_transferencia'] : NULL;
         $TransferenciaEstoqueTO->id_status_transferencia = isset($_POST['id_status_transferencia']) ? $_POST['id_status_transferencia'] : NULL;
         $TransferenciaEstoqueTO->id_empreendimento_transferencia = isset($_POST['id_empreendimento_transferencia']) ? $_POST['id_empreendimento_transferencia'] : NULL;
         $produtos = $_POST['produtos'];
         $produtos_estoque = array();
         $out = array();
         foreach ($produtos as $key => $value) {
             if (!isset($produtos_estoque[$value['id']])) {
                 $produtos_estoque[$value['id']]['qtd_transferida'] = 0;
                 $produtos_estoque[$value['id']]['id'] = $value['id'];
             }
             $produtos_estoque[$value['id']]['qtd_transferida'] += (int) $value['qtd_transferida'];
             $produtos_estoque[$value['id']]['id_deposito_saida'] = $value['id_deposito_saida'];
         }
         foreach ($produtos_estoque as $key => $value) {
             $qtd_transferida = (int) $value['qtd_transferida'];
             $estoque = $EstoqueDao->getQtdProduto($TransferenciaEstoqueTO->id_empreendimento_transferencia, $value['id'], null, $value['id_deposito_saida']);
             $estoque_real = $estoque - $qtd_transferida;
             if ($estoque_real < 0) {
                 $out[$value['id']] = array('qtd_transferida' => $qtd_transferida, 'qtd_estoque' => $estoque);
             }
         }
         if (count($out) > 0) {
             Flight::response()->status(406)->header('Content-Type', 'application/json')->write(json_encode(array('out_estoque' => $out)))->send();
             return;
         }
     } catch (Exception $e) {
         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);
     }
 }