public function atualizaEstoquePrestaShop($id_empreendimento, $id_item, $id_item_referencia, $id_combinaco)
 {
     $xmlProduto = $this->webService->get(array('resource' => 'products', 'id' => $id_item_referencia));
     $resourcesProduto = $xmlProduto->children()->children();
     $stock_available = $resourcesProduto->xpath('//stock_availables[id_product_attribute=' . $id_combinaco . ']');
     if (count($stock_available) != 1) {
         return array('status' => false, 'errors' => array(array("id stock_availables não pode ser encontrado")));
     }
     $xml = $this->webService->get(array('resource' => 'stock_availables', 'id' => $stock_available[0]->id));
     $resources = $xml->children()->children();
     $ConfiguracaoDao = new ConfiguracaoDao();
     $config = $ConfiguracaoDao->getConfiguracoes($id_empreendimento);
     $prestashop_depositos = isset($config['prestashop_depositos']) && is_array(json_decode($config['prestashop_depositos'])) ? json_decode($config['prestashop_depositos']) : array();
     $EstoqueDao = new EstoqueDao();
     $estoque = $EstoqueDao->getEstoque(null, null, array('prd.id' => $id_item, 'emp->id_empreendimento' => $id_empreendimento));
     $estoque = isset($estoque['produtos']) && is_array($estoque['produtos']) ? $estoque['produtos'] : array();
     $qtd_estoque = 0;
     foreach ($estoque as $item) {
         if (in_array($item['id_deposito'], $prestashop_depositos)) {
             $qtd_estoque += (int) $item['qtd_item'];
         }
     }
     $resources->quantity = $qtd_estoque;
     try {
         $opt = array('resource' => 'stock_availables');
         $opt['id'] = $stock_available[0]->id;
         $opt['putXml'] = $xml->asXML();
         $xml = $this->webService->edit($opt);
         return array('status' => true, 'responseXml' => $xml->asXML(), 'stock_availables' => $xml->stock_availables);
     } catch (PrestaShopWebserviceException $e) {
         return array('status' => false, 'errors' => $this->webService->response->errors);
     }
 }
 public static function getEstoque($offset, $limit)
 {
     $EstoqueDao = new EstoqueDao();
     if (isset($_GET['get_combinacao']) && $_GET['get_combinacao'] == 'true' && isset($_GET['prd->id'])) {
         $in = array((int) $_GET['prd->id']);
         $ProdutoCombinacaoDao = new ProdutoCombinacaoDao();
         $combinacoes = $ProdutoCombinacaoDao->get(null, null, array("tpc.id_produto" => $_GET['prd->id']));
         $combinacoes = $combinacoes ? $combinacoes : array();
         unset($_GET['get_combinacao']);
         foreach ($combinacoes as $key => $value) {
             if ($_GET['prd->id'] != $value['id_combinacao']) {
                 $in[] = (int) $value['id_combinacao'];
             }
         }
         $_GET['prd->id'] = array('exp' => ' IN (' . join(',', $in) . ')');
     }
     $produtos = $EstoqueDao->getEstoque($offset, $limit, $_GET);
     if ($produtos) {
         Flight::json($produtos);
     } else {
         Flight::halt(404, 'Produtos não encontrados');
     }
 }
 public static function baixaEstoque($id_empreendimento, $id_usuario, $produtos, $id_transferencia_estoque, $validade = false)
 {
     $EstoqueSaidaTO = new EstoqueSaidaTO();
     $EstoqueSaidaDao = new EstoqueSaidaDao();
     $EstoqueDao = new EstoqueDao();
     $EstoqueSaidaTO->id_empreendimento = $id_empreendimento;
     $EstoqueSaidaTO->id_usuario = $id_usuario;
     $EstoqueSaidaTO->id_transferencia_estoque = $id_transferencia_estoque;
     $id_estoque_saida = $EstoqueSaidaDao->saveEstoqueSaida($EstoqueSaidaTO);
     foreach ($produtos as $key => $produto) {
         if ((int) $produto['qtd_transferida'] > 0) {
             $busca = array("orderby" => " etq.qtd_item DESC,dta_validade ASC ", "etq.id_deposito" => $produto['id_deposito_saida'], "prd.id" => $produto['id_produto'], "etq.qtd_item" => array('exp' => '>0'));
             if ($validade) {
                 $busca['etq.dta_validade'] = $produto['dta_validade'];
             }
             $estoque = parse_arr_values($EstoqueDao->getEstoque(null, null, $busca), 'all');
             $estoque = $estoque['produtos'];
             $estoque_saida = array();
             $qtd_saida_restante = $produto['qtd_transferida'];
             foreach ($estoque as $key => $value) {
                 $qtd_item = $value['qtd_item'];
                 if ($qtd_item >= $qtd_saida_restante) {
                     $estoque_saida[] = array('id' => $value['id'], 'qtd_item' => $qtd_item - $qtd_saida_restante, 'dta_validade' => $value['dta_validade'], 'qtd_saida' => $qtd_saida_restante, 'id_deposito' => $value['id_deposito'], 'id_produto' => $value['id_produto']);
                     break;
                 } else {
                     $qtd_saida_restante = abs($qtd_item - $qtd_saida_restante);
                     $estoque_saida[] = array('id' => $value['id'], 'qtd_item' => 0, 'dta_validade' => $value['dta_validade'], 'qtd_saida' => $qtd_item, 'id_deposito' => $value['id_deposito'], 'id_produto' => $value['id_produto']);
                 }
             }
             $sql = "";
             $ItemEstoqueSaidaTO = new ItemEstoqueSaidaTO();
             $ItemEstoqueSaidaDao = new ItemEstoqueSaidaDao();
             foreach ($estoque_saida as $key => $value) {
                 $ItemEstoqueSaidaTO->id_estoque_saida = $id_estoque_saida;
                 $ItemEstoqueSaidaTO->id_deposito = $value['id_deposito'];
                 $ItemEstoqueSaidaTO->id_produto = $value['id_produto'];
                 $ItemEstoqueSaidaTO->dta_validade = $value['dta_validade'];
                 $ItemEstoqueSaidaTO->qtd_item = $value['qtd_saida'];
                 $id_item_estoque_saida = $ItemEstoqueSaidaDao->saveItemEstoqueSaida($ItemEstoqueSaidaTO);
                 if (!$id_item_estoque_saida) {
                     return false;
                 }
                 $dadosTrigger = new StdClass();
                 $dadosTrigger->qtd_saida = $value['qtd_saida'];
                 $dadosTrigger->acao_movimentacao = 'SAIDA';
                 $dadosTrigger->id_tipo_movimentacao_estoque = 5;
                 $dadosTrigger->id_estoque_saida = $id_estoque_saida;
                 $dadosTrigger->id_item_estoque_saida = $id_item_estoque_saida;
                 $dadosTrigger->id_responsavel = $id_usuario;
                 $dadosTrigger->id_empreendimento = $id_empreendimento;
                 $dadosTrigger->id_transferencia = $id_transferencia_estoque;
                 $varTriggerSql = "";
                 $TRGTblEstoqueAUTO = new TRGTblEstoqueAUTO();
                 $TRGTblEstoqueAUTO->__setAll($dadosTrigger);
                 if (!empty($dadosTrigger)) {
                     foreach ($TRGTblEstoqueAUTO as $keyTrigger => $valueTrigger) {
                         if ($valueTrigger == null) {
                             $varTriggerSql .= "SET @{$keyTrigger} = NULL;";
                         } else {
                             $varTriggerSql .= "SET @{$keyTrigger} = '{$valueTrigger}';";
                         }
                     }
                 }
                 $sql = 'UPDATE tbl_estoque SET qtd_item = ' . $value['qtd_item'] . ', dta_ultima_atualizacao = NOW() WHERE id = ' . $value['id'] . ';';
                 $EstoqueDao->rumQuery($varTriggerSql, false);
                 $EstoqueDao->rumQuery($sql, false);
             }
             /*foreach ($estoque_saida as $key => $value) {
             			$sql .= 'UPDATE tbl_estoque SET qtd_item = '.$value['qtd_item'].', dta_ultima_atualizacao = NOW() WHERE id = '.$value['id'].';';
             		}
             		$EstoqueDao->rumQuery($sql);*/
         }
     }
     return true;
 }