public static function updateProduto()
 {
     $ProdutoTO = new ProdutoTO();
     $ProdutoDao = new ProdutoDao();
     $validator = new DataValidator();
     $ProdutoTO->id = isset($_POST["id"]) ? $_POST["id"] : NULL;
     $ProdutoTO->meta_title = isset($_POST["meta_title"]) ? $_POST["meta_title"] : NULL;
     $ProdutoTO->meta_description = isset($_POST["meta_description"]) ? $_POST["meta_description"] : NULL;
     $ProdutoTO->descricao_curta = isset($_POST["descricao_curta"]) ? $_POST["descricao_curta"] : NULL;
     $ProdutoTO->img = isset($_POST["img"]) ? $_POST["img"] : NULL;
     $ProdutoTO->codigo_barra = isset($_POST["codigo_barra"]) ? $_POST["codigo_barra"] : NULL;
     $ProdutoTO->nome = isset($_POST["nome"]) ? $_POST["nome"] : NULL;
     $ProdutoTO->sabor = isset($_POST["sabor"]) ? $_POST["sabor"] : NULL;
     $ProdutoTO->peso = isset($_POST["peso"]) ? $_POST["peso"] : NULL;
     $ProdutoTO->valor_desconto_cliente = isset($_POST["valor_desconto_cliente"]) && !empty($_POST["valor_desconto_cliente"]) ? $_POST["valor_desconto_cliente"] : 0;
     $ProdutoTO->id_fabricante = isset($_POST["id_fabricante"]) && !empty($_POST["id_fabricante"]) ? $_POST["id_fabricante"] : NULL;
     $ProdutoTO->id_importador = isset($_POST["id_importador"]) && !empty($_POST["id_importador"]) ? $_POST["id_importador"] : NULL;
     $ProdutoTO->id_categoria = isset($_POST["id_categoria"]) && !empty($_POST["id_categoria"]) ? $_POST["id_categoria"] : NULL;
     $ProdutoTO->qtd_minima_estoque = isset($_POST["qtd_minima_estoque"]) ? $_POST["qtd_minima_estoque"] : NULL;
     $ProdutoTO->descricao = isset($_POST["descricao"]) ? $_POST["descricao"] : NULL;
     $ProdutoTO->flg_produto_composto = isset($_POST["flg_produto_composto"]) ? $_POST["flg_produto_composto"] : 0;
     $ProdutoTO->id_tamanho = isset($_POST["id_tamanho"]) && is_numeric($_POST["id_tamanho"]) && (int) $_POST["id_tamanho"] > 0 ? $_POST["id_tamanho"] : NULL;
     $ProdutoTO->id_cor = isset($_POST["id_cor"]) && is_numeric($_POST["id_cor"]) && (int) $_POST["id_cor"] > 0 ? $_POST["id_cor"] : NULL;
     $ProdutoTO->cod_ncm = isset($_POST["cod_ncm"]) && is_numeric($_POST["cod_ncm"]) ? $_POST["cod_ncm"] : NULL;
     $ProdutoTO->ex_tipi = isset($_POST["ex_tipi"]) && is_numeric($_POST["ex_tipi"]) ? $_POST["ex_tipi"] : NULL;
     $ProdutoTO->cod_especializacao_ncm = isset($_POST["cod_especializacao_ncm"]) && is_numeric($_POST["cod_especializacao_ncm"]) ? $_POST["cod_especializacao_ncm"] : NULL;
     $ProdutoTO->cod_forma_aquisicao = isset($_POST["cod_forma_aquisicao"]) && is_numeric($_POST["cod_forma_aquisicao"]) ? $_POST["cod_forma_aquisicao"] : NULL;
     $ProdutoTO->cod_origem_mercadoria = isset($_POST["cod_origem_mercadoria"]) && is_numeric($_POST["cod_origem_mercadoria"]) ? $_POST["cod_origem_mercadoria"] : NULL;
     $ProdutoTO->cod_tipo_tributacao_ipi = isset($_POST["cod_tipo_tributacao_ipi"]) && is_numeric($_POST["cod_tipo_tributacao_ipi"]) ? $_POST["cod_tipo_tributacao_ipi"] : NULL;
     $ProdutoTO->cod_regra_tributos = isset($_POST["cod_regra_tributos"]) && is_numeric($_POST["cod_regra_tributos"]) ? $_POST["cod_regra_tributos"] : NULL;
     $ProdutoTO->num_cest = isset($_POST["num_cest"]) && is_numeric($_POST["num_cest"]) ? $_POST["num_cest"] : NULL;
     $ProdutoTO->dsc_unidade_medida = isset($_POST["dsc_unidade_medida"]) ? $_POST["dsc_unidade_medida"] : NULL;
     $id_empreendimento = isset($_POST['id_empreendimento']) ? $_POST['id_empreendimento'] : "";
     $precos = isset($_POST['precos']) && is_array($_POST['precos']) ? $_POST['precos'] : array();
     $fornecedores = isset($_POST['fornecedores']) && is_array($_POST['fornecedores']) ? $_POST['fornecedores'] : array();
     $empreendimentos = isset($_POST['empreendimentos']) && is_array($_POST['empreendimentos']) ? $_POST['empreendimentos'] : array();
     $del_empreendimentos = isset($_POST['del_empreendimentos']) && is_array($_POST['del_empreendimentos']) ? $_POST['del_empreendimentos'] : array();
     $insumos = isset($_POST['insumos']) && is_array($_POST['insumos']) ? $_POST['insumos'] : array();
     $categorias = isset($_POST['categorias']) && is_array($_POST['categorias']) ? $_POST['categorias'] : array();
     if ($ProdutoTO->flg_produto_composto == 1) {
         if (!(isset($insumos) && is_array($insumos) && count($insumos) > 0)) {
             $validator->_errors['insumos'][] = 'É obrigatório informar ao menos um insumo para compor o produto';
         }
     }
     /*
     $validator->set_msg('O ID do produto é obrigatório')
     		  ->set('id',$ProdutoTO->id)
     		  ->is_required();
     
     $validator->set_msg('O codigo do empreendimento é obrigatório')
     		  ->set('id_empreendimento',$id_empreendimento)
     		  ->is_required();
     
     $validator->set_msg('O codigo de barra do produto é obrigatório')
     		  ->set('codigo_barra',$ProdutoTO->codigo_barra)
     		  ->is_required();
     
     $validator->set_msg('O nome do produto é obrigatório')
     		  ->set('nome',$ProdutoTO->nome)
     		  ->is_required();
     
     $validator->set_msg('O sabor do produto é obrigatório')
     		  ->set('sabor',$ProdutoTO->sabor)
     		  ->is_required();
     
     $validator->set_msg('O peso do produto é obrigatório')
     		  ->set('peso',$ProdutoTO->peso)
     		  ->is_required();
     
     $validator->set_msg('O fabricante do produto é obrigatório')
     		  ->set('id_fabricante',$ProdutoTO->id_fabricante)
     		  ->is_required();
     
     $validator->set_msg('O importador do produto é obrigatório')
     		  ->set('id_importador',$ProdutoTO->id_importador)
     		  ->is_required();
     
     $validator->set_msg('A categoria do produto é obrigatório')
     		  ->set('id_categoria',$ProdutoTO->id_categoria)
     		  ->is_required();
     
     $validator->set_msg('A quantidade minina do produto é obrigatório')
     		  ->set('qtd_minima_estoque',$ProdutoTO->qtd_minima_estoque)
     		  ->is_required();
     
     if(!(isset($fornecedores) && is_array($fornecedores) && count($fornecedores) > 0)){
     	$validator->_errors['fornecedores'][] = 'É obrigatório informar pelo menos um fornecedor';
     }
     
     
     $preco['vlr_custo']                = isset($preco['vlr_custo'])                ?  $preco['vlr_custo']                : 0 ;
     $preco['perc_imposto_compra']      = isset($preco['perc_imposto_compra'])      ?  $preco['perc_imposto_compra']      : 0 ;
     $preco['perc_desconto_compra']     = isset($preco['perc_desconto_compra'])     ?  $preco['perc_desconto_compra']     : 0 ;
     $preco['perc_venda_atacado']       = isset($preco['perc_venda_atacado'])       ?  $preco['perc_venda_atacado']       : 0 ;
     $preco['perc_venda_varejo']        = isset($preco['perc_venda_varejo'])        ?  $preco['perc_venda_varejo']        : 0 ;
     $preco['perc_venda_intermediario'] = isset($preco['perc_venda_intermediario']) ?  $preco['perc_venda_intermediario'] : 0 ;
     
     $validator->set_msg('O valor de tabela é obrigatório')
     		  ->set('vlr_custo',$preco['vlr_custo'])
     		  ->is_required();
     */
     if (!(isset($empreendimentos) && is_array($empreendimentos) && count($empreendimentos) > 0)) {
         $validator->_errors['empreendimentos'][] = 'É obrigatório vincular o produto pelo menos a um empreendimento';
     }
     $new_image = false;
     if (isset($_FILES['img'])) {
         $ProdutoTO->img = NULL;
         $status_upload = false;
         $handle = new upload($_FILES['img']);
         $handle->allowed = array('image/jpeg', 'image/jpg');
         if ($handle->uploaded) {
             $handle->Process(CAMINHO_UPLOAD_IMG_PRODUTO);
             if ($handle->processed) {
                 $status_upload = true;
                 $ProdutoTO->img = $handle->file_dst_name;
                 $new_image = CAMINHO_UPLOAD_IMG_PRODUTO . $handle->file_dst_name;
             }
         }
         if (!$status_upload) {
             if ($handle->error == 'Incorrect type of file') {
                 $validator->_errors['img'][] = 'O formato da imagem deve ser jpeg ou jpg';
             } else {
                 Flight::halt(500, 'Ocorreu um erro ao fazer o upload da imagem ' . $handle->error);
             }
         }
     }
     $ProdutoTO->nme_arquivo_nutricional = NULL;
     if (isset($_FILES['arquivo-produto'])) {
         $status_upload_file = false;
         $handle = new upload($_FILES['arquivo-produto']);
         if ($handle->uploaded) {
             $handle->Process(CAMINHO_UPLOAD_FILE_PRODUTO);
             if ($handle->processed) {
                 $status_upload_file = true;
                 $ProdutoTO->nme_arquivo_nutricional = $handle->file_dst_name;
             }
         }
         if (!$status_upload_file) {
             Flight::halt(500, 'Ocorreu um erro ao fazer o upload do arquivo nutricional' . $handle->error);
         }
     }
     if (!$validator->validate()) {
         Flight::response()->status(406)->header('Content-Type', 'application/json')->write(json_encode($validator->get_errors()))->send();
         return;
     }
     if (!$ProdutoDao->updateProduto($ProdutoTO)) {
         Flight::halt(500, 'erro ao atualizar pro');
     }
     if ((int) $ProdutoTO->flg_produto_composto == 1) {
         $ProdutoDao->delInsumos($ProdutoTO->id);
         if (!$ProdutoDao->insertProdutoInsumo($ProdutoTO->id, $insumos)) {
             Flight::halt(500, 'Erro ao cadastrar o insumos');
         }
     }
     $ProdutoCategoriaDao = new ProdutoCategoriaDao();
     $ProdutoCategoriaDao->delCategorias($ProdutoTO->id);
     if (!$ProdutoCategoriaDao->insertProdutoCategorias($ProdutoTO->id, $categorias)) {
         Flight::halt(500, 'Erro ao cadastrar categorias');
     }
     foreach ($del_empreendimentos as $key => $empreendimento) {
         if (isset($empreendimento['id_produto']) && isset($empreendimento['id_empreendimento'])) {
             $ProdutoDao->deleteEmpreendimentoProduto($empreendimento['id_produto'], $empreendimento['id_empreendimento']);
         }
     }
     foreach ($empreendimentos as $key => $empreendimento) {
         if (!isset($empreendimento['id']) || empty($empreendimento['id'])) {
             $ProdutoEmpreendimentoTO = new ProdutoEmpreendimentoTO();
             $ProdutoEmpreendimentoTO->id_produto = $ProdutoTO->id;
             $ProdutoEmpreendimentoTO->id_empreendimento = $empreendimento['id_empreendimento'];
             if (!$ProdutoDao->produtoEmpreendimento($ProdutoEmpreendimentoTO)) {
                 Flight::halt(500, 'Erro ao cadastrar o id_empreendimento');
             }
         }
     }
     foreach ($precos as $preco) {
         $PrecoProdutoTO = new PrecoProdutoTO();
         $PrecoProdutoDao = new PrecoProdutoDao();
         $PrecoProdutoTO->id_produto = $ProdutoTO->id;
         $PrecoProdutoTO->id_empreendimento = $preco['id_empreendimento'];
         $PrecoProdutoTO->vlr_custo = $preco['vlr_custo'];
         $PrecoProdutoTO->perc_imposto_compra = $preco['perc_imposto_compra'];
         $PrecoProdutoTO->perc_desconto_compra = $preco['perc_desconto_compra'];
         $PrecoProdutoTO->perc_venda_atacado = $preco['perc_venda_atacado'];
         $PrecoProdutoTO->perc_venda_intermediario = $preco['perc_venda_intermediario'];
         $PrecoProdutoTO->perc_venda_varejo = $preco['perc_venda_varejo'];
         if ($preco['id_empreendimento'] == $id_empreendimento) {
             $preco_emp_current = $preco;
         }
         if (!$PrecoProdutoDao->atualizaPreco($PrecoProdutoTO)) {
             Flight::halt(500, 'erro ao atualizar preço');
         }
     }
     $ProdutoFornecedorTO = new ProdutoFornecedorTO();
     $ProdutoDao->delAllFornecedor($ProdutoTO->id);
     foreach ($fornecedores as $key => $value) {
         $ProdutoFornecedorTO->id_produto = $ProdutoTO->id;
         $ProdutoFornecedorTO->id_fornecedor = $value['id_fornecedor'];
         if (!$ProdutoDao->fornecedorProduto($ProdutoFornecedorTO)) {
             Flight::halt(500, 'Erro ao cadastrar o produto');
         }
     }
     $InventarioController = new InventarioController();
     $inventario = isset($_POST['inventario']) ? $_POST['inventario'] : array();
     if (is_array($inventario) && count($inventario) > 0) {
         $InventarioController->salveInventarioSimples($inventario, $id_empreendimento);
     }
     $valor_campo_extra = isset($_POST['valor_campo_extra']) ? $_POST['valor_campo_extra'] : array();
     if (is_array($valor_campo_extra) && count($valor_campo_extra) > 0) {
         $CampoExtraProdutoDao = new CampoExtraProdutoDao();
         $CampoExtraProdutoDao->save($id_empreendimento, $_POST['id'], $valor_campo_extra);
     }
     $ProdutoCombinacaoDao = new ProdutoCombinacaoDao();
     $produtos_combinacoes = isset($_POST['combinacoes']) && is_array($_POST['combinacoes']) ? $_POST['combinacoes'] : array();
     $combinacoes = array();
     foreach ($produtos_combinacoes as $produto_combinacao) {
         if (!isset($produto_combinacao['id_produto']) || $produto_combinacao['id_produto'] != $produto_combinacao['id_combinacao']) {
             if (!isset($produto_combinacao['id_produto_combinacao'])) {
                 $r = $ProdutoCombinacaoDao->saveProdutoCombinacao($_POST['id'], $produto_combinacao, $_POST['id_empreendimento']);
                 $combinacoes[] = $r;
             } else {
                 $r = $ProdutoCombinacaoDao->updateProdutoCombinacao($_POST['id'], $produto_combinacao, $_POST['id_empreendimento']);
                 $combinacoes[] = $r;
             }
         } else {
             $combinacoes[] = $produto_combinacao;
         }
     }
     $ProdutoCombinacaoDao->saveCombinacoes($combinacoes, $_POST['id']);
     $saida = array('id' => (int) $ProdutoTO->id);
     if ($new_image) {
         $saida['local_new_image'] = $new_image;
     }
     Flight::response()->status(200)->header('Content-Type', 'application/json')->write(json_encode($saida))->send();
 }
 public static function requestUpdateProduto()
 {
     try {
         $id_empreendimento = $_POST['id_empreendimento'];
         $produto = $_POST['produto'];
         $suppliers = isset($_POST['suppliers']) && is_array($_POST['suppliers']) ? $_POST['suppliers'] : array();
         $ReferenciaIntegracaoDao = new ReferenciaIntegracaoDao();
         $ReferenciaIntegracaoTO = new ReferenciaIntegracaoTO();
         $PrestaShopDao = new PrestaShopDao($id_empreendimento);
         $ProdutoDao = new ProdutoDao();
         $ProdutoTO = new StdClass();
         $ReferenciaIntegracaoTO = new ReferenciaIntegracaoTO();
         $ReferenciaIntegracaoTO->sistema_integrado = 'PrestaShop';
         $ReferenciaIntegracaoTO->tabela = 'tbl_produtos';
         $ReferenciaIntegracaoTO->id_item_referencia = $produto['id'];
         $ReferenciaIntegracaoTO->tipo = 'produto';
         $ReferenciaIntegracaoTO->id_empreendimento = $id_empreendimento;
         $referenciaProduto = $ReferenciaIntegracaoDao->refExists($ReferenciaIntegracaoTO, true);
         if (!$referenciaProduto) {
             self::requestSaveProduto();
             return;
         }
         $PrestaShopDao->requestsaveProdutoFornecedores($dados['id_empreendimento'], $referenciaProduto['id_item'], $produto['id'], $id_empreendimento, $suppliers);
         $ProdutoTO->nome = $produto['name'][1];
         $ProdutoTO->descricao = $produto['description'][1];
         $ProdutoTO->descricao_curta = $produto['description_short'][1];
         $ProdutoTO->codigo_barra = $produto['ean13'];
         if (!$ProdutoDao->produtoUpdate($ProdutoTO, 'id=' . $referenciaProduto['id_item'])) {
             throw new Exception('Erro ao atualizar produto', 1);
         }
         if ((double) $produto['price'] > (double) $produto['wholesale_price'] && (double) $produto['wholesale_price'] > 0) {
             $ex = (double) $produto['price'] - $produto['wholesale_price'];
             $perc_venda_varejo = $ex * 100 / (double) $produto['wholesale_price'];
         } else {
             $perc_venda_varejo = 0;
         }
         $PrecoProdutoDao = new PrecoProdutoDao();
         $PrecoProdutoTO = new PrecoProdutoTO();
         $PrecoProdutoTO->id_produto = $referenciaProduto['id_item'];
         $PrecoProdutoTO->id_empreendimento = $id_empreendimento;
         $PrecoProdutoTO->vlr_custo = $produto['wholesale_price'];
         $PrecoProdutoTO->perc_imposto_compra = 0;
         $PrecoProdutoTO->perc_desconto_compra = 0;
         $PrecoProdutoTO->perc_venda_atacado = 0;
         $PrecoProdutoTO->perc_venda_intermediario = 0;
         $PrecoProdutoTO->perc_venda_varejo = $perc_venda_varejo / 100;
         if (!$PrecoProdutoDao->atualizaPreco($PrecoProdutoTO)) {
             throw new Exception('erro ao cadastrar preço');
         }
         /*if(!$referencia){
         			$self::requestSaveUsuario();
         			return ;
         			//throw new Exception('Referencia não encontrada', 1);
         		}*/
     } catch (Exception $e) {
         $log = new KLogger("logs/logErrorPrestaShop.txt", KLogger::DEBUG);
         $log->LogError($e->getMessage() . '- file:' . $e->getFile() . ' - line:' . $e->getLine());
         $log->LogDebug(json_encode($_POST));
         $log->LogJunp();
         Flight::halt(500, $e->getMessage());
     }
 }
 public function updateProdutoCombinacao($id_produto, $combinacao, $id_empreendimento)
 {
     //var_dump($combinacao);die;
     $id_tamanho = isset($combinacao['id_tamanho']) && is_numeric($combinacao['id_tamanho']) ? $combinacao['id_tamanho'] : 'NULL';
     $id_cor = isset($combinacao['id_cor']) && is_numeric($combinacao['id_cor']) ? $combinacao['id_cor'] : 'NULL';
     $codigo_barra = isset($combinacao['codigo_barra']) && is_numeric($combinacao['codigo_barra']) ? $combinacao['codigo_barra'] : 'NULL';
     $id_combinacao = $combinacao['id_combinacao'];
     $sql_update = "\n\t\t\t\tUPDATE tbl_produtos AS tp\n\t\t\t\tINNER JOIN tbl_produtos AS tp2 ON tp2.id = {$id_produto}\n\t\t\t\t\tSET\n\t\t\t\t\t\ttp.codigo_barra = '{$codigo_barra}',\n\t\t\t\t\t\ttp.nome = tp2.nome,\n\t\t\t\t\t\ttp.img = tp2.img,\n\t\t\t\t\t\ttp.descricao = tp2.descricao,\n\t\t\t\t\t\ttp.em_estoque = tp2.em_estoque,\n\t\t\t\t\t\ttp.qtd = tp2.qtd,\n\t\t\t\t\t\ttp.valor = tp2.valor,\n\t\t\t\t\t\ttp.imposto = tp2.imposto,\n\t\t\t\t\t\ttp.desconto = tp2.desconto,\n\t\t\t\t\t\ttp.valor_desconto = tp2.valor_desconto,\n\t\t\t\t\t\ttp.valor_com_desconto = tp2.valor_com_desconto,\n\t\t\t\t\t\ttp.valor__desconto_imposto = tp2.valor__desconto_imposto,\n\t\t\t\t\t\ttp.custo_compra = tp2.custo_compra,\n\t\t\t\t\t\ttp.margem_atacado = tp2.margem_atacado,\n\t\t\t\t\t\ttp.venda_atacado = tp2.venda_atacado,\n\t\t\t\t\t\ttp.margem_intermediario = tp2.margem_intermediario,\n\t\t\t\t\t\ttp.venda_intermediario = tp2.venda_intermediario,\n\t\t\t\t\t\ttp.margem_varejo = tp2.margem_varejo,\n\t\t\t\t\t\ttp.venda_varejo = tp2.venda_varejo,\n\t\t\t\t\t\ttp.valor_desconto_cliente = tp2.valor_desconto_cliente,\n\t\t\t\t\t\ttp.id_fabricante = tp2.id_fabricante,\n\t\t\t\t\t\ttp.id_importador = tp2.id_importador,\n\t\t\t\t\t\ttp.id_categoria = tp2.id_categoria,\n\t\t\t\t\t\ttp.qtd_minima_estoque = tp2.qtd_minima_estoque,\n\t\t\t\t\t\ttp.nme_arquivo_nutricional = tp2.nme_arquivo_nutricional,\n\t\t\t\t\t\ttp.id_ref = tp2.id_ref,\n\t\t\t\t\t\ttp.id_empreendimento = tp2.id_empreendimento,\n\t\t\t\t\t\ttp.dsc_unidade_medida = tp2.dsc_unidade_medida,\n\t\t\t\t\t\ttp.cod_ncm = tp2.cod_ncm,\n\t\t\t\t\t\ttp.ex_tipi = tp2.ex_tipi,\n\t\t\t\t\t\ttp.cod_especializacao_ncm = tp2.cod_especializacao_ncm,\n\t\t\t\t\t\ttp.cod_forma_aquisicao = tp2.cod_forma_aquisicao,\n\t\t\t\t\t\ttp.cod_origem_mercadoria = tp2.cod_origem_mercadoria,\n\t\t\t\t\t\ttp.cod_tipo_tributacao_ipi = tp2.cod_tipo_tributacao_ipi,\n\t\t\t\t\t\ttp.cod_regra_tributos = tp2.cod_regra_tributos,\n\t\t\t\t\t\ttp.num_cest = tp2.num_cest,\n\t\t\t\t\t\ttp.flg_excluido = tp2.flg_excluido,\n\t\t\t\t\t\ttp.id_tamanho = {$id_tamanho},\n\t\t\t\t\t\ttp.id_cor = {$id_cor},\n\t\t\t\t\t\ttp.flg_produto_composto = tp2.flg_produto_composto,\n\t\t\t\t\t\ttp.nome_original = tp2.nome_original,\n\t\t\t\t\t\ttp.meta_title = tp2.meta_title,\n\t\t\t\t\t\ttp.meta_description = tp2.meta_description,\n\t\t\t\t\t\ttp.descricao_curta = tp2.descricao_curta\n\t\t\t\tWHERE tp.id = {$id_combinacao}\n\t\t";
     $update = $this->conn->prepare($sql_update);
     if (!$update->execute()) {
         $e = $update->errorInfo();
         throw new Exception($e[2], 1);
     }
     $sql_delete = "DELETE FROM tbl_produto_empreendimento WHERE id_produto = {$id_combinacao} ";
     $delete = $this->conn->prepare($sql_delete);
     if (!$delete->execute()) {
         $e = $delete->errorInfo();
         throw new Exception($e[2], 1);
     }
     $sql_emp = "\n\t\t\tINSERT INTO tbl_produto_empreendimento\n\t\t\tSELECT NULL, {$id_combinacao}, id_empreendimento FROM tbl_produto_empreendimento WHERE id_produto = {$id_produto}\n\t\t";
     $insert_emp = $this->conn->prepare($sql_emp);
     if (!$insert_emp->execute()) {
         $e = $insert_emp->errorInfo();
         throw new Exception($insert_emp[2], 1);
     }
     $precos = isset($combinacao['precos']) && is_array($combinacao['precos']) ? $combinacao['precos'] : array();
     foreach ($precos as $preco) {
         $PrecoProdutoTO = new PrecoProdutoTO();
         $PrecoProdutoDao = new PrecoProdutoDao();
         $PrecoProdutoTO->id_produto = $id_combinacao;
         $PrecoProdutoTO->id_empreendimento = $id_empreendimento;
         $PrecoProdutoTO->vlr_custo = $preco['vlr_custo'];
         $PrecoProdutoTO->perc_imposto_compra = isset($preco['perc_imposto_compra']) && is_numeric($preco['perc_imposto_compra']) && $preco['perc_imposto_compra'] != 0 ? (double) $preco['perc_imposto_compra'] / 100 : 0;
         $PrecoProdutoTO->perc_desconto_compra = isset($preco['perc_desconto_compra']) && is_numeric($preco['perc_desconto_compra']) && $preco['perc_desconto_compra'] != 0 ? (double) $preco['perc_desconto_compra'] / 100 : 0;
         $PrecoProdutoTO->perc_venda_atacado = isset($preco['perc_venda_atacado']) && is_numeric($preco['perc_venda_atacado']) && $preco['perc_venda_atacado'] != 0 ? (double) $preco['perc_venda_atacado'] / 100 : 0;
         $PrecoProdutoTO->perc_venda_intermediario = isset($preco['perc_venda_intermediario']) && is_numeric($preco['perc_venda_intermediario']) && $preco['perc_venda_intermediario'] != 0 ? (double) $preco['perc_venda_intermediario'] / 100 : 0;
         $PrecoProdutoTO->perc_venda_varejo = isset($preco['perc_venda_varejo']) && is_numeric($preco['perc_venda_varejo']) && $preco['perc_venda_varejo'] != 0 ? (double) $preco['perc_venda_varejo'] / 100 : 0;
         if (!$PrecoProdutoDao->atualizaPreco($PrecoProdutoTO)) {
             throw new Exception('erro ao atualizar preço da combinação', 1);
         }
     }
     return array('id_produto_combinacao' => $combinacao['id_produto_combinacao'], 'id_combinacao' => $id_combinacao);
 }
 public function exportarProdutos($id_empreendimento)
 {
     $ProdutoDao = new ProdutoDao();
     $produtos = $ProdutoDao->getProdutos(null, null, array("tpe->id_empreendimento" => 1));
     $produtos = $produtos['produtos'];
     foreach ($produtos as $key => $value) {
         $sql = " INSERT INTO tbl_produtos(`codigo_barra`, `nome`, `img`, `descricao`,`sabor`, `peso`) VALUES\n\t\t\t\t\t\t\t\t ('" . $value['codigo_barra'] . "','" . $value['nome'] . "','" . $value['img'] . "','" . $value['descricao'] . "','" . $value['sabor'] . "','" . $value['peso'] . "')";
         $sql_prd = $this->conn->prepare($sql);
         $sql_prd->execute();
         $last_id_produto = $this->conn->lastInsertId();
         $PrecoProdutoTO = new PrecoProdutoTO();
         $PrecoProdutoDao = new PrecoProdutoDao();
         $PrecoProdutoTO->id_produto = $last_id_produto;
         $PrecoProdutoTO->vlr_custo = $value['vlr_venda_atacado'];
         if (!$PrecoProdutoDao->atualizaPreco($PrecoProdutoTO)) {
             return false;
         }
         $ProdutoEmpreendimentoTO = new ProdutoEmpreendimentoTO();
         $ProdutoEmpreendimentoTO->id_produto = $last_id_produto;
         $ProdutoEmpreendimentoTO->id_empreendimento = $id_empreendimento;
         if (!$ProdutoDao->produtoEmpreendimento($ProdutoEmpreendimentoTO)) {
             return false;
         }
     }
     return true;
 }
 public static function importarNFe()
 {
     try {
         // Iniciando uma transação no banco de dados, caso já não acha uma ativa
         $conn = Conexao::getInstance();
         if (!$conn->inTransaction()) {
             $conn->beginTransaction();
         }
         $filename = '';
         $xml = null;
         // Verifica se o arquivo XML foi carregado
         if (isset($_FILES['arquivo-nota'])) {
             $filename = $_FILES['arquivo-nota']['tmp_name'];
         } else {
             Flight::halt(406, 'Nenhum arquivo selecionado!');
         }
         // Carrega os dados do arquivo XML
         $xml = simplexml_load_file($filename);
         // Captura as informações de totais da NF-e
         $vTotalNF = (double) $xml->NFe->infNFe->total->ICMSTot->vNF;
         $vTotalProd = (double) $xml->NFe->infNFe->total->ICMSTot->vProd;
         // Calcula o % de imposto aplicado na NF-e
         $prcImposto = round(($vTotalNF / $vTotalProd - 1) * 100, 2);
         // Pequisa se fornecedor existe no BD
         $paramsPesquisaFornecedor = array();
         $paramsPesquisaFornecedor['frn->id_empreendimento'] = $_GET['id_empreendimento'];
         $paramsPesquisaFornecedor['frn->num_cnpj'] = $xml->NFe->infNFe->emit->CNPJ;
         $fornecedorDao = new FornecedorDao();
         $data['nNF'] = (string) $xml->NFe->infNFe->ide->nNF;
         $data['fornecedor'] = array();
         $aux = $fornecedorDao->getFornecedores(null, null, $paramsPesquisaFornecedor);
         $data['fornecedor']['dados'] = $aux['fornecedores'][0];
         $data['fornecedor']['flg_localizado'] = $data['fornecedor']['dados'] != null;
         // Captura a lista de itens da NF-e
         $itensNF = $xml->NFe->infNFe->det;
         // Percorre a lista de itens da NF-e produrando os mesmo no BD
         $data['itensBD'] = array();
         foreach ($itensNF as $key => $value) {
             // Captura os dados do produto informados na NF-e
             $item = array();
             $item['id_produto'] = null;
             $item['codigo_barra'] = !empty($value->prod->cEAN) ? (string) $value->prod->cEAN : (string) $value->prod->cEANTrib;
             $item['cod_ncm'] = !empty($value->prod->NCM) ? (string) $value->prod->NCM : '';
             $item['dsc_unidade_medida'] = !empty($value->prod->uCom) ? (string) $value->prod->uCom : (string) $value->prod->uTrib;
             $item['num_cest'] = !empty($value->prod->CEST) ? (string) $value->prod->CEST : '';
             $item['nome_produto'] = (string) $value->prod->xProd;
             $item['custo'] = (double) $value->prod->vUnCom;
             $item['qtd'] = (int) $value->prod->qCom;
             $item['imposto'] = $prcImposto;
             $item['vlr_imposto'] = (double) ($item['custo'] * $prcImposto) / 100;
             $item['flg_localizado'] = false;
             $item['nome_fabricante'] = '';
             $item['peso'] = '';
             $item['margem_atacado'] = 0;
             $item['margem_intermediario'] = 0;
             $item['margem_varejo'] = 0;
             if (!empty($item['codigo_barra'])) {
                 // Pesquisa se o produto existe no BD
                 $paramsPesquisaProduto = array();
                 $paramsPesquisaProduto['tpe->id_empreendimento'] = $_GET['id_empreendimento'];
                 $paramsPesquisaProduto['pro->codigo_barra'] = $item['codigo_barra'];
                 $produtoDao = new ProdutoDao();
                 $aux = $produtoDao->getProdutos(null, null, $paramsPesquisaProduto);
                 $produto = $produtoDao->getProdutos(null, null, $paramsPesquisaProduto)['produtos'][0];
                 if ($produto) {
                     // Se o produto foi localizado no BD...
                     // Captura os dados do cadastro do produto no BD
                     $item['id_produto'] = $produto['id_produto'];
                     $item['nome_produto'] = $produto['nome'];
                     $item['nome_fabricante'] = $produto['nome_fabricante'];
                     $item['peso'] = $produto['peso'];
                     //$item['custo'] 					= (($produto['vlr_custo']) ? $produto['vlr_custo'] : $item['custo']);
                     $item['custo'] = $item['custo'];
                     $item['margem_atacado'] = $produto['perc_venda_atacado'];
                     $item['margem_intermediario'] = $produto['perc_venda_intermediario'];
                     $item['margem_varejo'] = $produto['perc_venda_varejo'];
                     $item['flg_localizado'] = true;
                     $PrecoProdutoTO = new PrecoProdutoTO();
                     $PrecoProdutoDao = new PrecoProdutoDao();
                     $PrecoProdutoTO->id_produto = $produto['id'];
                     $PrecoProdutoTO->id_empreendimento = $_GET['id_empreendimento'];
                     $PrecoProdutoTO->vlr_custo = $item['custo'];
                     $PrecoProdutoTO->perc_imposto_compra = $item['imposto'];
                     $PrecoProdutoTO->perc_desconto_compra = $produto['perc_desconto_compra'];
                     $PrecoProdutoTO->perc_venda_atacado = $produto['perc_venda_atacado'];
                     $PrecoProdutoTO->perc_venda_intermediario = $produto['perc_venda_intermediario'];
                     $PrecoProdutoTO->perc_venda_varejo = $produto['perc_venda_varejo'];
                     if (!$PrecoProdutoDao->atualizaPreco($PrecoProdutoTO)) {
                         if ($conn->inTransaction()) {
                             $conn->rollback();
                         }
                         Flight::halt(500, 'erro ao atualizar preço');
                     }
                 } else {
                     if (isset($_GET['flg_cpne']) && (int) $_GET['flg_cpne'] == 1) {
                         // Se marcou para cadastrar produtos não localizados no BD...
                         $prodTO = new ProdutoTO();
                         $prodTO->codigo_barra = $item['codigo_barra'];
                         $prodTO->nome = $item['nome_produto'];
                         $prodTO->cod_ncm = $item['cod_ncm'];
                         $prodTO->dsc_unidade_medida = $item['dsc_unidade_medida'];
                         $prodTO->num_cest = $item['num_cest'];
                         $id_produto = $produtoDao->saveProduto($prodTO);
                         // Cadastro o produto no BD
                         if ($id_produto) {
                             // Se o produto foi cadastrado com sucesso...
                             $prodEmprTO = new ProdutoEmpreendimentoTO();
                             $prodEmprTO->id_produto = $id_produto;
                             $prodEmprTO->id_empreendimento = $_GET['id_empreendimento'];
                             // Associa o produto ao empreendimento
                             if (!$produtoDao->produtoEmpreendimento($prodEmprTO)) {
                                 if ($conn->inTransaction()) {
                                     $conn->rollback();
                                 }
                                 Flight::halt(500, 'Erro ao associar produto [' . $prodTO->nome . '] ao empreendimento [' . $_GET['id_empreendimento'] . ']');
                             }
                             if ($data['fornecedor']['flg_localizado']) {
                                 // Se o fornecedor foi localizado no BD...
                                 $prodFornTO = new ProdutoFornecedorTO();
                                 $prodFornTO->id_produto = (int) $id_produto;
                                 $prodFornTO->id_fornecedor = $data['fornecedor']['dados']['id'];
                                 // Associa o produto ao fornecedor
                                 if (!$produtoDao->fornecedorProduto($prodFornTO)) {
                                     if ($conn->inTransaction()) {
                                         $conn->rollback();
                                     }
                                     Flight::halt(500, 'Erro ao associar produto [' . $prodTO->nome . '] ao fornecedor [' . $data['fornecedor']['dados']['nome_fornecedor'] . ']');
                                 }
                             }
                             $prdProdDao = new PrecoProdutoDao();
                             $prcProdTO = new PrecoProdutoTO();
                             $prcProdTO->id_produto = (int) $id_produto;
                             $prcProdTO->id_empreendimento = $_GET['id_empreendimento'];
                             $prcProdTO->vlr_custo = $item['custo'];
                             $prcProdTO->perc_imposto_compra = $item['imposto'] / 100;
                             $prcProdTO->perc_desconto_compra = 0;
                             $prcProdTO->perc_venda_atacado = 0;
                             $prcProdTO->perc_venda_intermediario = 0;
                             $prcProdTO->perc_venda_varejo = 0;
                             //Cadastra o preço do produto e associa
                             if (!$prdProdDao->atualizaPreco($prcProdTO)) {
                                 if ($conn->inTransaction()) {
                                     $conn->rollback();
                                 }
                                 Flight::halt(500, 'Erro ao atualizar preço do produto [' . $prodTO->nome . ']');
                             }
                             $item['id_produto'] = $id_produto;
                             $item['flg_localizado'] = true;
                         } else {
                             if ($conn->inTransaction()) {
                                 $conn->rollback();
                             }
                             Flight::halt(500, 'erro ao cadastrar produto');
                         }
                     }
                 }
             }
             // Adiciona o item na lista de produtos
             $data['itensBD'][] = $item;
         }
         if ($conn->inTransaction()) {
             $conn->commit();
         }
         // Exclui o arquivo XML criado temporáriamente
         unlink($filename);
         // Retorna os dados da NF-e em formato de JSON
         Flight::json($data);
     } catch (Exception $e) {
         if ($conn->inTransaction()) {
             $conn->rollback();
         }
         jsonException($e);
     }
 }