public static function saveProduto()
 {
     $dados = $_POST;
     $validator = new DataValidator();
     $validator->set_msg('O campo código de barra deve ter obrigatóriamente no máximo 13 caracteres ')->set('senha', empty(getKeyArr($dados, 'codigo_barra')) ? 0 : getKeyArr($dados, 'codigo_barra'))->max_length(13, true);
     if (!$validator->validate()) {
         Flight::response()->status(406)->header('Content-Type', 'application/json')->write(json_encode($validator->get_errors()))->send();
         return;
     }
     $ReferenciaIntegracaoDao = new ReferenciaIntegracaoDao();
     $ReferenciaIntegracaoTO = new ReferenciaIntegracaoTO();
     $PrestaShopDao = new PrestaShopDao($dados['id_empreendimento']);
     $ProdutoCombinacaoDao = new ProdutoCombinacaoDao();
     $ReferenciaIntegracaoTO->sistema_integrado = 'PrestaShop';
     $ReferenciaIntegracaoTO->tabela = 'tbl_produtos';
     $ReferenciaIntegracaoTO->id_item = $dados['id'];
     $ReferenciaIntegracaoTO->id_item_referencia = NULL;
     $ReferenciaIntegracaoTO->tipo = 'produto';
     $ReferenciaIntegracaoTO->id_empreendimento = $dados['id_empreendimento'];
     $referencia = $ReferenciaIntegracaoDao->refExists($ReferenciaIntegracaoTO);
     if (!$referencia) {
         $comb = $ProdutoCombinacaoDao->get(null, null, array('tpc.id_combinacao' => $dados['id']));
         if ($comb && $comb[0]['id_produto'] != $comb[0]['id_combinacao']) {
             $combinacao = $comb[0];
             $refCombinacao = new ReferenciaIntegracaoTO();
             $refCombinacao->sistema_integrado = 'PrestaShop';
             $refCombinacao->tabela = 'tbl_produto_combinacao';
             $refCombinacao->id_item = $combinacao['id_produto_combinacao'];
             $refCombinacao->tipo = 'combinacao';
             $refCombinacao->id_empreendimento = $dados['id_empreendimento'];
             $referenciaCombination = $ReferenciaIntegracaoDao->refExists($refCombinacao);
             $itemAux = array();
             $refTamanho = $ReferenciaIntegracaoDao->get(array('sistema_integrado' => 'PrestaShop', 'tabela' => 'tbl_tamanho', 'id_item' => $combinacao['id_tamanho'], 'tipo' => 'tamanho', 'id_empreendimento' => $dados['id_empreendimento'], 'flg_excluido' => 0));
             if ($refTamanho) {
                 $itemAux[] = $refTamanho['id_item_referencia'];
             }
             $refCor = $ReferenciaIntegracaoDao->get(array('sistema_integrado' => 'PrestaShop', 'tabela' => 'tbl_cor_produto', 'id_item' => $combinacao['id_cor'], 'tipo' => 'cor', 'id_empreendimento' => $dados['id_empreendimento'], 'flg_excluido' => 0));
             if ($refCor) {
                 $itemAux[] = $refCor['id_item_referencia'];
             }
             $refCombinacao = new ReferenciaIntegracaoTO();
             $refCombinacao->sistema_integrado = 'PrestaShop';
             $refCombinacao->tabela = 'tbl_produtos';
             $refCombinacao->id_item = $combinacao['id_produto'];
             $refCombinacao->tipo = 'produto';
             $refCombinacao->id_empreendimento = $dados['id_empreendimento'];
             $refProdutoPrincipal = $ReferenciaIntegracaoDao->refExists($refCombinacao);
             if (!$refProdutoPrincipal) {
                 Flight::halt(500, 'Referencia do produto principal da combinação não foi encontrado');
             }
             $sendCombination = new StdClass();
             $sendCombination->id_product = $refProdutoPrincipal['id_item_referencia'];
             $sendCombination->minimal_quantity = 0;
             $sendCombination->product_option_values = $itemAux;
             if (!$referenciaCombination) {
                 $aux = $PrestaShopDao->newCombination($sendCombination);
                 $refCombinacao->id_item_referencia = $aux['combination']->id;
                 $ReferenciaIntegracaoDao->save($refCombinacao);
                 $PrestaShopDao->atualizaEstoquePrestaShop($dados['id_empreendimento'], $dados['id'], $refProdutoPrincipal['id_item_referencia'], $aux['combination']->id);
                 echo json_encode($aux);
                 return;
             } else {
                 $PrestaShopDao->atualizaEstoquePrestaShop($dados['id_empreendimento'], $dados['id'], $refProdutoPrincipal['id_item_referencia'], $referenciaCombination['id_item_referencia']);
                 $sendCombination->id = $referenciaCombination['id_item_referencia'];
                 $aux = $PrestaShopDao->editCombination($sendCombination);
                 echo json_encode($aux);
                 return;
             }
         }
     }
     if (isset($dados['precos']) && is_array($dados['precos'])) {
         $preco_emp_current = getArrayINarray('id_empreendimento', $dados['id_empreendimento'], $dados['precos']);
     }
     $ConfiguracaoDao = new ConfiguracaoDao();
     $config = $ConfiguracaoDao->getConfiguracoes($dados['id_empreendimento']);
     $product = new StdClass();
     $product->name = $dados['nome'];
     $product->price = isset($preco_emp_current['valor_venda_varejo']) ? round($preco_emp_current['valor_venda_varejo'], 2) : 0;
     $product->wholesale_price = isset($preco_emp_current['vlr_custo']) ? $preco_emp_current['vlr_custo'] : 0;
     $product->description = getKeyArr($dados, 'descricao');
     $product->active = 1;
     $product->id_supplier = 0;
     $product->description_short = getKeyArr($dados, 'descricao_curta');
     $product->meta_description = getKeyArr($dados, 'meta_description');
     $product->meta_title = getKeyArr($dados, 'meta_title');
     $product->id_empreendimento = $dados['id_empreendimento'];
     $product->categories = isset($dados['categorias']) && is_array($dados['categorias']) ? $dados['categorias'] : array();
     $product->available_for_order = 1;
     $product->show_price = 1;
     $product->ean13 = getKeyArr($dados, 'codigo_barra');
     $product->reference = $dados['id'];
     if (isset($dados['id_fabricante']) && is_numeric($dados['id_fabricante'])) {
         $refFab = $ReferenciaIntegracaoDao->get(array('sistema_integrado' => 'PrestaShop', 'tabela' => 'tbl_fabricante', 'id_item' => $dados['id_fabricante'], 'tipo' => 'fabricante', 'id_empreendimento' => $dados['id_empreendimento'], 'flg_excluido' => 0));
         if ($refFab) {
             $product->id_manufacturer = $refFab['id_item_referencia'];
         }
     }
     $fornecedores = array();
     $id_supplier = 0;
     if (isset($dados['fornecedores']) && is_array($dados['fornecedores']) && count($dados['fornecedores']) > 0) {
         foreach ($dados['fornecedores'] as $key => $fornecedor) {
             $referenciaForcedor = $ReferenciaIntegracaoDao->get(array('sistema_integrado' => 'PrestaShop', 'tabela' => 'tbl_fornecedores', 'id_item' => $fornecedor['id_fornecedor'], 'tipo' => 'fornecedor', 'id_empreendimento' => $dados['id_empreendimento'], 'flg_excluido' => 0));
             if ($referenciaForcedor) {
                 $fornecedores[] = $referenciaForcedor['id_item_referencia'];
                 $product->id_supplier = $product->id_supplier == 0 ? $referenciaForcedor['id_item_referencia'] : $product->id_supplier;
             }
         }
     }
     if (count($product->categories) > 0) {
         $referenciaCategoria = $ReferenciaIntegracaoDao->get(array('sistema_integrado' => 'PrestaShop', 'tabela' => 'tbl_categorias', 'id_item' => $dados['id_categoria'], 'tipo' => 'categoria', 'id_empreendimento' => $dados['id_empreendimento'], 'flg_excluido' => 0));
         if (!$referenciaCategoria) {
             Flight::halt(500, 'A Referencia para a categoria não foi encontrada');
         }
         $product->id_category_default = $referenciaCategoria['id_item_referencia'];
     } else {
         $product->categories = array($config['prestashop_id_categoria_inicio']);
         $product->id_category_default = $config['prestashop_id_categoria_inicio'];
         $product->category = $config['prestashop_id_categoria_inicio'];
     }
     if ($referencia) {
         $combinacoes = $ProdutoCombinacaoDao->get(null, null, array('tpc.id_produto' => $dados['id']));
         $combinacoes = $combinacoes ? $combinacoes : array();
         $id_combinacoes_prestashop = array();
         foreach ($combinacoes as $combinacao) {
             $refCombinacao = new ReferenciaIntegracaoTO();
             $refCombinacao->sistema_integrado = 'PrestaShop';
             $refCombinacao->tabela = 'tbl_produto_combinacao';
             $refCombinacao->id_item = $combinacao['id_produto_combinacao'];
             $refCombinacao->tipo = 'combinacao';
             $refCombinacao->id_empreendimento = $dados['id_empreendimento'];
             $referenciaCombination = $ReferenciaIntegracaoDao->refExists($refCombinacao);
             $itemAux = array();
             $refTamanho = $ReferenciaIntegracaoDao->get(array('sistema_integrado' => 'PrestaShop', 'tabela' => 'tbl_tamanho', 'id_item' => $combinacao['id_tamanho'], 'tipo' => 'tamanho', 'id_empreendimento' => $dados['id_empreendimento'], 'flg_excluido' => 0));
             if ($refTamanho) {
                 $itemAux[] = $refTamanho['id_item_referencia'];
             }
             $refCor = $ReferenciaIntegracaoDao->get(array('sistema_integrado' => 'PrestaShop', 'tabela' => 'tbl_cor_produto', 'id_item' => $combinacao['id_cor'], 'tipo' => 'cor', 'id_empreendimento' => $dados['id_empreendimento'], 'flg_excluido' => 0));
             if ($refCor) {
                 $itemAux[] = $refCor['id_item_referencia'];
             }
             $sendCombination = new StdClass();
             $sendCombination->id_product = $referencia['id_item_referencia'];
             $sendCombination->minimal_quantity = 0;
             $sendCombination->product_option_values = $itemAux;
             if (!$referenciaCombination) {
                 $aux = $PrestaShopDao->newCombination($sendCombination);
                 $refCombinacao->id_item_referencia = $aux['combination']->id;
                 $id_combinacoes_prestashop[] = $aux['combination']->id;
                 $PrestaShopDao->atualizaEstoquePrestaShop($dados['id_empreendimento'], $combinacao['id_combinacao'], $referencia['id_item_referencia'], $aux['combination']->id);
                 if ($combinacao['id_produto'] == $combinacao['id_combinacao']) {
                     $id_default_combination = $aux['combination']->id;
                 }
                 $ReferenciaIntegracaoDao->save($refCombinacao);
             } else {
                 $id_combinacoes_prestashop[] = $referenciaCombination['id_item_referencia'];
                 $sendCombination->id = $referenciaCombination['id_item_referencia'];
                 $aux = $PrestaShopDao->editCombination($sendCombination);
                 $PrestaShopDao->atualizaEstoquePrestaShop($dados['id_empreendimento'], $combinacao['id_combinacao'], $referencia['id_item_referencia'], $referenciaCombination['id_item_referencia']);
                 if ($combinacao['id_produto'] == $combinacao['id_combinacao']) {
                     $id_default_combination = $aux['combination']->id;
                 }
             }
         }
         if (count($combinacoes) == 0) {
             $PrestaShopDao->atualizaEstoquePrestaShop($dados['id_empreendimento'], $dados['id'], $referencia['id_item_referencia'], 0);
         }
         $PrestaShopDao->deleteCombination($id_combinacoes_prestashop, $referencia['id_item_referencia']);
         $ReferenciaIntegracaoTO->id_item_referencia = $referencia['id_item_referencia'];
         $product->id = $ReferenciaIntegracaoTO->id_item_referencia;
         $set_cover = false;
         if (isset($dados['local_new_image']) && !empty($dados['local_new_image'])) {
             $busca = new StdClass();
             $busca->sistema_integrado = 'PrestaShop';
             $busca->tabela = 'tbl_produtos';
             $busca->id_item = $dados['id'];
             $busca->tipo = 'imagem';
             $busca->id_empreendimento = $dados['id_empreendimento'];
             $referenciaImg = $ReferenciaIntegracaoDao->refExists($busca);
             if ($referenciaImg) {
                 $busca->id_item_referencia = $referenciaImg['id_item_referencia'];
                 $PrestaShopDao->delteImageProduto($ReferenciaIntegracaoTO->id_item_referencia, $busca->id_item_referencia);
             }
             if (is_file($dados['local_new_image'])) {
                 $obj_img = $PrestaShopDao->newImage($dados['local_new_image'], $ReferenciaIntegracaoTO->id_item_referencia);
                 if ($obj_img) {
                     $set_cover = true;
                     $busca->id_item_referencia = $obj_img->id;
                     if ($referenciaImg) {
                         $ReferenciaIntegracaoDao->updateRef($busca, 'id=' . $referenciaImg['id']);
                     } else {
                         $ReferenciaIntegracaoDao->save($busca);
                     }
                 }
             }
         }
         if (isset($id_default_combination)) {
             $product->id_default_combination = $id_default_combination;
         }
         $result = $resultPrestaShop = $PrestaShopDao->editProducts($product);
         self::saveProdutoFornecedores($dados['id_empreendimento'], $fornecedores, $referencia['id_item_referencia']);
         if ($set_cover) {
             $PrestaShopDao->setImageCoverProduct($ReferenciaIntegracaoTO->id_item_referencia, $obj_img->id);
         }
         echo json_encode($result);
     } else {
         $resultPrestaShop = $PrestaShopDao->newProducts($product);
         $ReferenciaIntegracaoTO->id_item_referencia = $resultPrestaShop['produto']->id;
         $ReferenciaIntegracaoDao->save($ReferenciaIntegracaoTO);
         self::saveProdutoFornecedores($dados['id_empreendimento'], $fornecedores, $resultPrestaShop['produto']->id);
         $combinacoes = $ProdutoCombinacaoDao->get(null, null, array('tpc.id_produto' => $dados['id']));
         $combinacoes = $combinacoes ? $combinacoes : array();
         $id_combinacoes_prestashop = array();
         foreach ($combinacoes as $combinacao) {
             $itemAux = array();
             $refTamanho = $ReferenciaIntegracaoDao->get(array('sistema_integrado' => 'PrestaShop', 'tabela' => 'tbl_tamanho', 'id_item' => $combinacao['id_tamanho'], 'tipo' => 'tamanho', 'id_empreendimento' => $dados['id_empreendimento'], 'flg_excluido' => 0));
             if ($refTamanho) {
                 $itemAux[] = $refTamanho['id_item_referencia'];
             }
             $refCor = $ReferenciaIntegracaoDao->get(array('sistema_integrado' => 'PrestaShop', 'tabela' => 'tbl_cor_produto', 'id_item' => $combinacao['id_cor'], 'tipo' => 'cor', 'id_empreendimento' => $dados['id_empreendimento'], 'flg_excluido' => 0));
             if ($refCor) {
                 $itemAux[] = $refCor['id_item_referencia'];
             }
             $sendCombination = new StdClass();
             $sendCombination->id_product = $resultPrestaShop['produto']->id;
             $sendCombination->minimal_quantity = 0;
             $sendCombination->product_option_values = $itemAux;
             $aux = $PrestaShopDao->newCombination($sendCombination);
             $id_combinacoes_prestashop[] = $aux['combination']->id;
             $PrestaShopDao->atualizaEstoquePrestaShop($dados['id_empreendimento'], $combinacao['id_combinacao'], $aux['combination']->id, $aux['combination']->id);
             if ($combinacao['id_produto'] == $combinacao['id_combinacao']) {
                 $PrestaShopDao->defaultProductAttribute($resultPrestaShop['produto']->id, $aux['combination']->id);
             }
             $refCombinacao = new ReferenciaIntegracaoTO();
             $refCombinacao->sistema_integrado = 'PrestaShop';
             $refCombinacao->tabela = 'tbl_produto_combinacao';
             $refCombinacao->id_item = $combinacao['id_produto_combinacao'];
             $refCombinacao->id_item_referencia = $aux['combination']->id;
             $refCombinacao->tipo = 'combinacao';
             $refCombinacao->id_empreendimento = $dados['id_empreendimento'];
             $ReferenciaIntegracaoDao->save($refCombinacao);
         }
         if (count($combinacoes) == 0) {
             $PrestaShopDao->atualizaEstoquePrestaShop($dados['id_empreendimento'], $dados['id'], $resultPrestaShop['produto']->id, 0);
         }
         if (isset($dados['local_new_image']) && !empty($dados['local_new_image']) && is_file($dados['local_new_image'])) {
             $obj_img = $PrestaShopDao->newImage($dados['local_new_image'], $ReferenciaIntegracaoTO->id_item_referencia);
             if ($obj_img) {
                 $set_cover = false;
                 $PrestaShopDao->setImageCoverProduct($ReferenciaIntegracaoTO->id_item_referencia, $obj_img->id);
                 $busca = new StdClass();
                 $busca->sistema_integrado = 'PrestaShop';
                 $busca->tabela = 'tbl_produtos';
                 $busca->id_item = $dados['id'];
                 $busca->id_item_referencia = $obj_img->id;
                 $busca->tipo = 'imagem';
                 $busca->id_empreendimento = $dados['id_empreendimento'];
                 $ReferenciaIntegracaoDao->save($busca);
             }
         }
         echo json_encode($resultPrestaShop);
     }
 }
 public function requestsaveProdutoFornecedores($id_item, $id_item_referencia, $id_empreendimento, $arr)
 {
     $FornecedorDao = new FornecedorDao();
     $ProdutoDao = new ProdutoDao();
     $ProdutoFornecedorDao = new ProdutoFornecedorDao();
     $ReferenciaIntegracaoDao = new ReferenciaIntegracaoDao();
     $fornecedores = $FornecedorDao->getFornecedoresByProduto(array('prd.id' => $id_item));
     $fornecedores = $fornecedores ? $fornecedores : array();
     $ids = array();
     $arr = is_array($arr) ? $arr : array();
     foreach ($arr as $key => $value) {
         $ReferenciaIntegracaoTO = new ReferenciaIntegracaoTO();
         $ReferenciaIntegracaoTO->sistema_integrado = 'PrestaShop';
         $ReferenciaIntegracaoTO->tabela = 'tbl_fornecedores';
         $ReferenciaIntegracaoTO->id_item_referencia = $value;
         $ReferenciaIntegracaoTO->tipo = 'fornecedor';
         $ReferenciaIntegracaoTO->id_empreendimento = $id_empreendimento;
         $referencia = $ReferenciaIntegracaoDao->refExists($ReferenciaIntegracaoTO, true);
         if ($referencia) {
             $ids[] = $referencia['id_item'];
             $find = getArrayINarray('id_fornecedor', $referencia['id_item'], $fornecedores);
             if ($find == false) {
                 $ProdutoFornecedorTO = new ProdutoFornecedorTO();
                 $ProdutoFornecedorTO->id_produto = $id_item;
                 $ProdutoFornecedorTO->id_fornecedor = $referencia['id_item'];
                 if (!$ProdutoDao->fornecedorProduto($ProdutoFornecedorTO)) {
                     throw new Exception('erro ao vincular fornecedoor ao enpreendimento ', 1);
                 }
             }
         }
     }
     foreach ($fornecedores as $value) {
         if (!in_array($value['id_fornecedor'], $ids)) {
             $ProdutoFornecedorDao->deleteItem('id=' . $value['id_produto_fornecedor']);
         }
     }
 }