public function getProdutos($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']; } $id_deposito_estoque = null; if (array_key_exists('id_deposito_estoque', $busca)) { $id_deposito_estoque = $busca['id_deposito_estoque']; unset($busca['id_deposito_estoque']); } if (!array_key_exists('pro->flg_excluido', $busca)) { $busca['(pro->flg_excluido']['exp'] = '=0 OR pro.flg_excluido IS NULL)'; } $sql = "SELECT DISTINCT\n\t\t\tpro.id as id_produto,\n\t\t\tpro.*,\n\t\t\ttcp.nome_cor AS sabor ,\n\t\t\ttt.nome_tamanho AS peso,\n\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\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\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\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\n\t\t\tfab.nome_fabricante,\n\t\t\ttpp.vlr_custo,\n\t\t\ttpp.perc_imposto_compra,\n\t\t\ttpp.perc_desconto_compra,\n\t\t\ttpp.perc_venda_atacado,\n\t\t\ttpp.perc_venda_intermediario,\n\t\t\ttpp.perc_venda_varejo,\n\t\t\ttpp.dta_ultima_atualizacao,\n\t\t\ttcinf.num_item AS FormaAquisicao ,\n\t\t\ttcino.num_item AS OrigemMercadoria,\n\t\t\ttcint.num_item AS TipoTributacaoIPI \n\t\t\tFROM tbl_produtos \t\t\t\t\t\tAS pro\n\t\t\tLEFT JOIN tbl_fabricante \t\t\t\tAS fab ON pro.id_fabricante = fab.id\n\t\t\tLEFT JOIN tbl_produto_empreendimento \tAS tpe ON tpe.id_produto = pro.id\n\t\t\tLEFT JOIN tbl_preco_produto \t\t\tAS tpp ON (tpp.id_produto = pro.id AND tpe.id_empreendimento = tpp.id_empreendimento) \n\t\t\tLEFT JOIN tbl_cor_produto AS tcp ON tcp.id = pro.id_cor \n\t\t\tLEFT JOIN tbl_tamanho AS tt ON tt.id = pro.id_tamanho\n\t\t\tLEFT JOIN tbl_estoque \t\t\t\t\tAS est ON est.id_produto = pro.id \n\t\t\tLEFT JOIN tbl_controle_item_nfe AS tcinf ON pro.cod_forma_aquisicao = tcinf.cod_controle_item_nfe\n\t\t\tLEFT JOIN tbl_controle_item_nfe AS tcino ON pro.cod_origem_mercadoria = tcino.cod_controle_item_nfe\n\t\t\tLEFT JOIN tbl_controle_item_nfe AS tcint ON pro.cod_tipo_tributacao_ipi = tcint.cod_controle_item_nfe\n\t\t\tLEFT JOIN tbl_produto_combinacao AS tpc ON pro.id = tpc.id_combinacao"; if (is_array($busca) && count($busca) > 0) { $where = prepareWhere($busca); $sql .= " WHERE " . $where; } $sql .= " GROUP BY pro.id "; $sql .= " ORDER 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) { $ProdutoCombinacaoDao = new ProdutoCombinacaoDao(); $ProdutoCategoriaDao = new ProdutoCategoriaDao(); $FornecedorDao = new FornecedorDao(); $EstoqueDao = new EstoqueDao(); $saida['produtos'] = parse_arr_values($select->fetchAll(PDO::FETCH_ASSOC), 'all', null, array('codigo_barra', 'cod_ncm')); foreach ($saida['produtos'] as $key => $value) { $vlr_custo = (double) $value['vlr_custo_real']; $perc_venda_atacado = (double) $value['perc_venda_atacado']; $perc_venda_intermediario = (double) $value['perc_venda_intermediario']; $perc_venda_varejo = (double) $value['perc_venda_varejo']; $saida['produtos'][$key]['id_produto'] = (int) $saida['produtos'][$key]['id_produto']; $saida['produtos'][$key]['qtd_minima_estoque'] = (int) $saida['produtos'][$key]['qtd_minima_estoque']; $saida['produtos'][$key]['vlr_custo_real'] = (double) $saida['produtos'][$key]['vlr_custo_real']; $saida['produtos'][$key]['vlr_custo'] = (double) $saida['produtos'][$key]['vlr_custo']; $saida['produtos'][$key]['vlr_venda_atacado'] = $vlr_custo + $vlr_custo * $perc_venda_atacado; $saida['produtos'][$key]['vlr_venda_intermediario'] = $vlr_custo + $vlr_custo * $perc_venda_intermediario; $saida['produtos'][$key]['vlr_venda_varejo'] = $vlr_custo + $vlr_custo * $perc_venda_varejo; $saida['produtos'][$key]['perc_imposto_compra'] = (double) $saida['produtos'][$key]['perc_imposto_compra']; $saida['produtos'][$key]['perc_desconto_compra'] = (double) $saida['produtos'][$key]['perc_desconto_compra']; $saida['produtos'][$key]['perc_venda_atacado'] = (double) $saida['produtos'][$key]['perc_venda_atacado']; $saida['produtos'][$key]['perc_venda_intermediario'] = (double) $saida['produtos'][$key]['perc_venda_intermediario']; $saida['produtos'][$key]['perc_venda_varejo'] = (double) $saida['produtos'][$key]['perc_venda_varejo']; $saida['produtos'][$key]['categorias'] = $ProdutoCategoriaDao->get(array("tce.id_empreendimento" => $id_empreendimento, "tpc.id_produto" => $value['id'])); $saida['produtos'][$key]['combinacoes'] = $ProdutoCombinacaoDao->get(null, null, array("tpc.id_produto" => $value['id'])); $saida['produtos'][$key]['combinacoes'] = $saida['produtos'][$key]['combinacoes'] ? $saida['produtos'][$key]['combinacoes'] : array(); if (!is_null($id_empreendimento)) { $saida['produtos'][$key]['qtd_item'] = $EstoqueDao->getQtdProduto($id_empreendimento, $value['id_produto'], null, $id_deposito_estoque); } $saida['produtos'][$key]['fornecedores'] = $FornecedorDao->getFornecedoresByProduto(array('prd.id' => $value['id'])); } $saida['paginacao'] = isset($links_paginacao) ? $links_paginacao : null; return $saida; } else { return false; } } else { return false; } }
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(); }