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 function getEstoque($offset, $limit, $busca)
 {
     $offset = $offset == null ? 0 : $offset;
     $limit = $limit == null ? 0 : $limit;
     $group = false;
     $orderby = false;
     $id_deposito = null;
     $id_empreendimento = null;
     if (array_key_exists('group', $busca)) {
         $group = $busca['group'];
         unset($busca['group']);
     }
     if (array_key_exists('qtd->id_deposito', $busca)) {
         $id_deposito = $busca['qtd->id_deposito'];
         unset($busca['qtd->id_deposito']);
     }
     if (array_key_exists('emp->id_empreendimento', $busca)) {
         $id_empreendimento = $busca['emp->id_empreendimento'];
     }
     if (array_key_exists('orderby', $busca)) {
         $orderby = ' ORDER BY ' . $busca['orderby'];
         unset($busca['orderby']);
     }
     $sql = "SELECT\n\t\t\t\t\tpro.id,dep.id AS id_deposito,\n\t\t\t\t\tpro.nome AS nome,\n\t\t\t\t\tpro.codigo_barra,\n\t\t\t\t\tcor.nome_cor as sabor,\n\t\t\t\t\tdep.nme_deposito AS nome_deposito,\n\t\t\t\t\test.id_produto,\n\t\t\t\t\tSUM(est.qtd_item) AS qtd_item,\n\t\t\t\t\test.dta_validade,\n\t\t\t\t\tpro.flg_excluido\n\t\t\t\tFROM `tbl_estoque` AS est\n\t\t\t\tINNER JOIN `tbl_produtos` AS pro ON est.id_produto = pro.id\n\t\t\t\tLEFT JOIN tbl_cor_produto as cor on cor.id = pro.id_cor\n\t\t\t\tLEFT JOIN tbl_tamanho as tam on tam.id = pro.id_tamanho\n\t\t\t\tLEFT JOIN `tbl_fabricante` AS fab ON pro.id_fabricante = fab.id\n\t\t\t\tINNER JOIN `tbl_deposito` AS dep ON dep.id = est.id_deposito\n\t\t\t\tINNER JOIN `tbl_produto_empreendimento` AS tpe ON tpe.id_produto = pro.id";
     if (is_array($busca) && count($busca) > 0) {
         $where = prepareWhere($busca);
         $sql .= " WHERE " . $where . "";
     }
     $sql .= $group ? " GROUP BY " . $group . " HAVING qtd_item > 0 AND (flg_excluido = 0 OR flg_excluido IS NULL) " : "";
     $sql .= $orderby ? $orderby : " ";
     $sql .= " ORDER BY pro.nome 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()) {
         $ProdutoDao = new ProdutoDao();
         if ($select->rowCount() > 0) {
             $saida['produtos'] = $select->fetchAll(PDO::FETCH_ASSOC);
             //Flight::json($aux);
             //var_dump($saida['produtos']);die;
             foreach ($saida['produtos'] as $key => $value) {
                 $aux = $ProdutoDao->getProdutos(null, null, array("pro.id" => $value['id_produto']));
                 $aux = $aux['produtos'][0];
                 $saida['produtos'][$key]['nome_fabricante'] = $aux['nome_fabricante'];
                 $saida['produtos'][$key]['peso'] = $aux['peso'];
                 $saida['produtos'][$key]['vlr_custo_real'] = $aux['vlr_custo_real'];
                 $saida['produtos'][$key]['vlr_venda_atacado'] = $aux['vlr_venda_atacado'];
                 $saida['produtos'][$key]['vlr_venda_intermediario'] = $aux['vlr_venda_intermediario'];
                 $saida['produtos'][$key]['vlr_venda_varejo'] = $aux['vlr_venda_varejo'];
                 $saida['produtos'][$key]['vlr_desconto_cliente'] = $aux['valor_desconto_cliente'] == "" ? 0 : (double) $aux['valor_desconto_cliente'];
                 $saida['produtos'][$key]['perc_imposto_compra'] = $aux['perc_imposto_compra'];
                 $saida['produtos'][$key]['perc_desconto_compra'] = $aux['perc_desconto_compra'];
                 $saida['produtos'][$key]['margem_atacado'] = (double) $aux['perc_venda_atacado'];
                 $saida['produtos'][$key]['margem_intermediario'] = (double) $aux['perc_venda_intermediario'];
                 $saida['produtos'][$key]['margem_varejo'] = (double) $aux['perc_venda_varejo'];
                 $saida['produtos'][$key]['vlr_custo'] = (double) $aux['vlr_custo'];
             }
             $saida['paginacao'] = isset($links_paginacao) ? $links_paginacao : null;
             return $saida;
         } else {
             return false;
         }
     } else {
         return false;
     }
 }
 public function getGradeProdutosEcommerce($offset, $limit, $busca = array(), $id_produto = null)
 {
     $offset = $offset == null ? 0 : $offset;
     $limit = $limit == null ? 0 : $limit;
     if (array_key_exists('grd->id_empreendimento', $busca)) {
         $id_empreendimento = $busca['grd->id_empreendimento'];
     }
     $sql = "SELECT grd.*,\n\t\t\t\t(SELECT ( (CASE WHEN SUM(est.qtd_item) IS NULL THEN 0 ELSE SUM(est.qtd_item) END) - ( CASE WHEN (SELECT SUM(item.qtd) FROM `tbl_vendas` AS ven INNER JOIN tbl_itens_venda AS item ON ven.id = item.id_venda WHERE venda_confirmada = 0 AND id_empreendimento = grd.id_empreendimento AND item.id_produto = prd.id) IS NULL THEN 0 ELSE (SELECT SUM(item.qtd) FROM `tbl_vendas` AS ven INNER JOIN tbl_itens_venda AS item ON ven.id = item.id_venda WHERE venda_confirmada = 0 AND id_empreendimento = grd.id_empreendimento AND item.id_produto = prd.id) END ) ) AS qtd FROM tbl_produtos\tAS prd_sub INNER JOIN tbl_estoque\tAS est ON prd_sub.id = est.id_produto INNER JOIN tbl_produto_empreendimento AS rel ON prd_sub.id = rel.id_produto WHERE rel.id_empreendimento = grd.id_empreendimento AND prd_sub.id = prd.id) AS qtd_real_estoque\n\t\t\t \tFROM `tbl_grade_produtos_ecommerce` AS grd\n\t\t\t\tINNER JOIN `tbl_produtos` AS prd ON grd.id_produto = prd.id\n\t\t\t\tLEFT JOIN  `tbl_fabricante` AS fab ON prd.id_fabricante = fab.id ";
     if (is_numeric($id_produto)) {
         $busca['prd.id'] = $id_produto;
     }
     if (is_array($busca) && count($busca) > 0) {
         $where = prepareWhere($busca);
         $sql .= " WHERE ";
         $sql .= "" . $where;
     }
     $sql .= " GROUP BY prd.id ORDER BY fab.nome_fabricante, prd.nome ";
     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;
     }
     $EstoqueDao = new EstoqueDao();
     $select = $this->conn->prepare($sql);
     $ProdutoDao = new ProdutoDao();
     if ($select->execute()) {
         if ($select->rowCount() > 0) {
             $saida['produtos'] = $select->fetchAll(PDO::FETCH_ASSOC);
             foreach ($saida['produtos'] as $key => $value) {
                 $id_empreendimento = $saida['produtos'][$key]['id_empreendimento'];
                 $aux = $ProdutoDao->getProdutos(null, null, array("pro.id" => $value['id_produto'], "tpe->id_empreendimento" => $id_empreendimento));
                 $aux = $aux['produtos'][0];
                 $saida['produtos'][$key]['nome'] = $aux['nome'];
                 $saida['produtos'][$key]['vlr_custo_real'] = $aux['vlr_custo_real'];
                 $saida['produtos'][$key]['vlr_venda_atacado'] = $aux['vlr_venda_atacado'];
                 $saida['produtos'][$key]['vlr_venda_intermediario'] = $aux['vlr_venda_intermediario'];
                 $saida['produtos'][$key]['vlr_venda_varejo'] = $aux['vlr_venda_varejo'];
                 $saida['produtos'][$key]['vlr_desconto_cliente'] = $aux['valor_desconto_cliente'] == "" ? 0 : (double) $aux['valor_desconto_cliente'];
                 $saida['produtos'][$key]['descricao'] = $aux['descricao'];
                 $saida['produtos'][$key]['nome_fabricante'] = $aux['nome_fabricante'];
                 $saida['produtos'][$key]['peso'] = $aux['peso'];
                 $saida['produtos'][$key]['qtd_real_estoque'] = (int) $saida['produtos'][$key]['qtd_real_estoque'];
                 //$EstoqueDao->getQtdProduto($id_empreendimento,$aux['id_produto']);
                 if (is_file(CAMINHO_UPLOAD_IMG_PRODUTO . $aux['img'])) {
                     $saida['produtos'][$key]['img'] = "assets/imagens/produtos/" . $aux['img'];
                 } else {
                     $saida['produtos'][$key]['img'] = null;
                 }
                 if (is_file(CAMINHO_UPLOAD_FILE_PRODUTO . $aux['nme_arquivo_nutricional'])) {
                     $saida['produtos'][$key]['nme_arquivo_nutricional'] = "assets/arquivos/produtos/" . $aux['nme_arquivo_nutricional'];
                 } else {
                     $saida['produtos'][$key]['nme_arquivo_nutricional'] = null;
                 }
                 /*if($saida['produtos'][$key]['qtd_real_estoque'] <= 0){
                 			unset($saida['produtos'][$key]);
                 		}*/
             }
             if (!is_numeric($id_produto)) {
                 $saida['paginacao'] = isset($links_paginacao) ? $links_paginacao : null;
             } else {
                 $saida = $saida['produtos'][0];
             }
             return $saida;
         } else {
             return false;
         }
     } else {
         return false;
     }
 }
 public static function saveEmpreendimento()
 {
     date_default_timezone_set('America/Sao_Paulo');
     // Preparando objetos
     $EmpreendimentoTO = new EmpreendimentoTO();
     $EmpreendimentoTO->nome_empreendimento = isset($_POST['nome_empreendimento']) ? $_POST['nome_empreendimento'] : '';
     $EmpreendimentoTO->flg_teste = isset($_POST['flg_teste']) && ((int) $_POST['flg_teste'] == 1 || (int) $_POST['flg_teste'] == 0) ? (int) $_POST['flg_teste'] : NULL;
     $EmpreendimentoTO->qtd_dias_teste = isset($_POST['qtd_dias_teste']) ? $_POST['qtd_dias_teste'] : NULL;
     $EmpreendimentoTO->dta_cadastro = date('Y-m-d H:i:s');
     $EmpreendimentoTO->num_cnpj = isset($_POST['num_cnpj']) ? $_POST['num_cnpj'] : '';
     $EmpreendimentoTO->num_inscricao_estadual = isset($_POST['num_inscricao_estadual']) ? $_POST['num_inscricao_estadual'] : '';
     $EmpreendimentoTO->nme_razao_social = isset($_POST['nme_razao_social']) ? $_POST['nme_razao_social'] : '';
     $EmpreendimentoTO->nme_fantasia = isset($_POST['nme_fantasia']) ? $_POST['nme_fantasia'] : '';
     $EmpreendimentoTO->nme_logradouro = isset($_POST['nme_logradouro']) ? $_POST['nme_logradouro'] : '';
     $EmpreendimentoTO->num_logradouro = isset($_POST['num_logradouro']) ? $_POST['num_logradouro'] : '';
     $EmpreendimentoTO->nme_bairro_logradouro = isset($_POST['nme_bairro_logradouro']) ? $_POST['nme_bairro_logradouro'] : '';
     $EmpreendimentoTO->cod_cidade = isset($_POST['cod_cidade']) ? $_POST['cod_cidade'] : NULL;
     $EmpreendimentoTO->cod_estado = isset($_POST['cod_estado']) ? $_POST['cod_estado'] : NULL;
     $EmpreendimentoTO->cod_regime_tributario = isset($_POST['cod_regime_tributario']) && is_numeric($_POST["cod_regime_tributario"]) ? $_POST['cod_regime_tributario'] : NULL;
     $EmpreendimentoTO->cod_regime_pis_cofins = isset($_POST['cod_regime_pis_cofins']) && is_numeric($_POST["cod_regime_pis_cofins"]) ? $_POST['cod_regime_pis_cofins'] : NULL;
     $EmpreendimentoTO->cod_tipo_empresa = isset($_POST['cod_tipo_empresa']) && is_numeric($_POST["cod_tipo_empresa"]) ? $_POST['cod_tipo_empresa'] : NULL;
     $EmpreendimentoTO->flg_contribuinte_icms = isset($_POST['flg_contribuinte_icms']) ? (int) $_POST['flg_contribuinte_icms'] : 0;
     $EmpreendimentoTO->flg_contribuinte_ipi = isset($_POST['flg_contribuinte_ipi']) ? (int) $_POST['flg_contribuinte_ipi'] : 0;
     $EmpreendimentoTO->cod_zoneamento = isset($_POST['cod_zoneamento']) && is_numeric($_POST["cod_zoneamento"]) ? $_POST['cod_zoneamento'] : NULL;
     $EmpreendimentoTO->num_percentual_credito_simples = isset($_POST['num_percentual_credito_simples']) && is_numeric($_POST["num_percentual_credito_simples"]) ? $_POST['num_percentual_credito_simples'] : NULL;
     $EmpreendimentoTO->num_cep = isset($_POST['num_cep']) ? $_POST['num_cep'] : NULL;
     $EmpreendimentoTO->num_inscricao_estadual_st = isset($_POST['num_inscricao_estadual_st']) ? $_POST['num_inscricao_estadual_st'] : NULL;
     $UsuarioEmpreendimentoTO = new UsuarioEmpreendimentoTO();
     $UsuarioEmpreendimentoTO->id_usuario = isset($_POST['id_usuario']) ? $_POST['id_usuario'] : '';
     $regime_especial = isset($_POST['regime_especial']) ? $_POST['regime_especial'] : array();
     // Validação de campos obrigatórios
     $validator = new DataValidator();
     $validator->set_msg('O nome do Empreendimento é obrigatório')->set('nome_empreendimento', $EmpreendimentoTO->nome_empreendimento)->is_required();
     $validator->set_msg('O ID do usuario é obrigatório')->set('id_usuario', $UsuarioEmpreendimentoTO->id_usuario)->is_required();
     if ($EmpreendimentoTO->flg_teste == 1) {
         $validator->set_msg('A quantidade de dias para teste é obrigatória')->set('qtd_dias_teste', $EmpreendimentoTO->qtd_dias_teste)->is_required()->set_msg('Este campo é obrigatóriamente numérico')->is_num()->set_msg('Este campo deve ser obrigatóriamente maior que 0 (zero)')->min_value(1, true);
     } else {
         $EmpreendimentoTO->qtd_dias_teste = null;
     }
     if (!$validator->validate()) {
         Flight::response()->status(406)->header('Content-Type', 'application/json')->write(json_encode($validator->get_errors()))->send();
         return;
     }
     try {
         $EmpreendimentoDao = new EmpreendimentoDao();
         $last_id_empreendimento = $EmpreendimentoDao->saveEmpreendimento($EmpreendimentoTO);
         if (!$last_id_empreendimento) {
             Flight::halt(500, 'erro ao salvar empreendimento');
         } else {
             $RegimeEspecialDao = new RegimeEspecialDao();
             $RegimeEspecialDao->saveRegimeEmpreendimento($regime_especial, $last_id_empreendimento);
             $arrConfigs = array();
             $arrConfigs['id_plano_fechamento_caixa'] = "-1";
             $arrConfigs['id_plano_caixa'] = "-1";
             $arrConfigs['id_fornecedor_movimentacao_caixa'] = "-1";
             $arrConfigs['id_cliente_movimentacao_caixa'] = "-1";
             $arrConfigs['path_logo_rel'] = "-1";
             $arrConfigs['id_produto_debito_anterior_cliente'] = "-1";
             $arrConfigs['id_conta_bancaria_padrao_fechamento_automatico'] = "-1";
             $arrConfigs['id_usuario_venda_vitrine'] = "-1";
             $arrConfigs['time_zone'] = "America/Sao_Paulo";
             // salvar id_cliente_movimentacao_caixa = CLIENTE LOJA FÍSICA
             $cliMovCaixaTO = new ClienteTO();
             $cliMovCaixaTO->nome = "CLIENTE LOJA FÍSICA";
             $cliMovCaixaTO->id_perfil = 6;
             $cliMovCaixaTO->id_empreendimento = $last_id_empreendimento;
             $cliMovCaixaDao = new ClienteDao();
             $last_id_cliMovCaixa = $cliMovCaixaDao->saveCliente($cliMovCaixaTO);
             if (!$last_id_cliMovCaixa) {
                 Flight::halt(500, 'erro ao criar [CLIENTE LOJA FÍSICA] padrão para o empreendimento [$last_id_empreendimento]');
             }
             $UsuarioEmpreendimentoTO->id_usuario = $last_id_cliMovCaixa;
             $UsuarioEmpreendimentoTO->id_empreendimento = $last_id_empreendimento;
             if (!$EmpreendimentoDao->saveUsuarioEmpreendimento($UsuarioEmpreendimentoTO)) {
                 Flight::halt(500, 'erro ao associar [CLIENTE LOJA FÍSICA] ao empreendimento');
             }
             $arrConfigs['id_cliente_movimentacao_caixa'] = $last_id_cliMovCaixa;
             // salvar id_usuario_venda_vitrine = CLIENTE LOJA VIRTUAL
             $cliVenVitrineTO = new ClienteTO();
             $cliVenVitrineTO->nome = "CLIENTE LOJA VIRTUAL";
             $cliVenVitrineTO->id_perfil = 6;
             $cliVenVitrineTO->id_empreendimento = $last_id_empreendimento;
             $cliVenVitrineDao = new ClienteDao();
             $last_id_cliVenVitrine = $cliVenVitrineDao->saveCliente($cliVenVitrineTO);
             if (!$last_id_cliVenVitrine) {
                 Flight::halt(500, 'erro ao criar [CLIENTE LOJA VIRTUAL] padrão para o empreendimento [$last_id_empreendimento]');
             }
             $UsuarioEmpreendimentoTO->id_usuario = $last_id_cliVenVitrine;
             $UsuarioEmpreendimentoTO->id_empreendimento = $last_id_empreendimento;
             if (!$EmpreendimentoDao->saveUsuarioEmpreendimento($UsuarioEmpreendimentoTO)) {
                 Flight::halt(500, 'erro ao associar [CLIENTE LOJA VIRTUAL] ao empreendimento');
             }
             $arrConfigs['id_usuario_venda_vitrine'] = $last_id_cliVenVitrine;
             // salvar id_fornecedor_movimentacao_caixa = CLIENTE LOJA FÍSICA
             $forMovCaixaTO = new FornecedorTO();
             $forMovCaixaTO->nome_fornecedor = "FORNECEDOR MOVIMENTACÃO DE CAIXA ";
             $forMovCaixaTO->id_empreendimento = $last_id_empreendimento;
             $forMovCaixaDao = new FornecedorDao();
             $last_id_forMovCaixa = $forMovCaixaDao->saveFornecedor($forMovCaixaTO);
             if (!$last_id_forMovCaixa) {
                 Flight::halt(500, 'erro ao criar [CLIENTE LOJA VIRTUAL] padrão para o empreendimento [$last_id_empreendimento]');
             }
             $arrConfigs['id_fornecedor_movimentacao_caixa'] = $last_id_forMovCaixa;
             // id_produto_debito_anterior_cliente = DÉBITO ANTERIOR
             $prodDebAnteriorTO = new ProdutoTO();
             $prodDebAnteriorTO->nome = "DÉBITO ANTERIOR";
             $prodDebAnteriorDao = new ProdutoDao();
             $last_id_prodDebAnterior = $prodDebAnteriorDao->saveProduto($prodDebAnteriorTO);
             if (!$last_id_prodDebAnterior) {
                 Flight::halt(500, 'erro ao criar [DÉBITO ANTERIOR] padrão para o empreendimento [$last_id_empreendimento]');
             }
             $ProdutoEmpreendimentoTO = new ProdutoEmpreendimentoTO();
             $ProdutoEmpreendimentoTO->id_produto = $last_id_prodDebAnterior;
             $ProdutoEmpreendimentoTO->id_empreendimento = $last_id_empreendimento;
             if (!$prodDebAnteriorDao->produtoEmpreendimento($ProdutoEmpreendimentoTO)) {
                 Flight::halt(500, 'Erro ao associar o produto [DÉBITO ANTERIOR] o id_empreendimento');
             }
             $arrConfigs['id_produto_debito_anterior_cliente'] = $last_id_prodDebAnterior;
             // id_conta_bancaria_padrao_fechamento_automatico = CAIXA INTERNO
             $ContaBancariaTO = new ContaBancariaTO();
             $ContaBancariaDao = new ContaBancariaDao();
             $ContaBancariaTO->dsc_conta_bancaria = 'Caixa interno';
             $ContaBancariaTO->id_tipo_conta = 3;
             $ContaBancariaTO->id_empreendimento = $last_id_empreendimento;
             $ContaBancariaTO->id_banco = 104;
             $lastIdContaBancaria = $ContaBancariaDao->saveConta($ContaBancariaTO);
             if (!$lastIdContaBancaria) {
                 Flight::halt(500, 'erro ao criar conta  [CAIXA INTERNO] padrão para fechamento de caixa');
             }
             $arrConfigs['id_conta_bancaria_padrao_fechamento_automatico'] = $lastIdContaBancaria;
             //Cadastrando Plano de contas
             if (!$EmpreendimentoDao->PlanoContaEmpreendimento($last_id_empreendimento)) {
                 Flight::halt(500, 'erro ao criar Plano de contas');
             }
             $arrConfigs['id_plano_caixa'] = $EmpreendimentoDao->getIdPlanoCaixa($last_id_empreendimento);
             $arrConfigs['id_plano_fechamento_caixa'] = $EmpreendimentoDao->getIdPlanoFechamentoCaixa($last_id_empreendimento);
             //Cadastrando cores
             if (!$EmpreendimentoDao->InsertCores($last_id_empreendimento)) {
                 Flight::halt(500, 'erro ao criar cores');
             }
             //Cadastrando chave de configurações
             foreach ($arrConfigs as $key => $value) {
                 $configDao = new ConfiguracaoDao();
                 if (!$configDao->saveKey($key, $value, $last_id_empreendimento)) {
                     Flight::halt(500, 'erro ao criar [$key][$value] padrão para o empreendimento [$last_id_empreendimento]');
                     die;
                 }
             }
             $empreendimento_usuario = array(array('id_usuario' => 222, 'id_empreendimento' => $last_id_empreendimento), array('id_usuario' => 498, 'id_empreendimento' => $last_id_empreendimento));
             foreach ($empreendimento_usuario as $key => $value) {
                 $UsuarioEmpreendimentoTO->id_empreendimento = $value['id_empreendimento'];
                 $UsuarioEmpreendimentoTO->id_usuario = $value['id_usuario'];
                 if (!$EmpreendimentoDao->saveUsuarioEmpreendimento($UsuarioEmpreendimentoTO)) {
                     Flight::halt(500, 'erro ao vincular usuarios ao empreendimento');
                 }
             }
             Flight::halt(201);
         }
     } catch (Exception $e) {
         Flight::halt(500, $e->getMessage());
     }
 }
 public static function getInsumos($id_produto)
 {
     $ProdutoDao = new ProdutoDao();
     $produtos = $ProdutoDao->getInsumos($id_produto, $_GET);
     if ($produtos) {
         Flight::json($produtos);
     } else {
         Flight::halt(404, 'Não há resultado para a busca');
     }
 }
require_once "banco-produto.php";
require_once "logica-usuario.php";
verificaUsuario();
$categoria = new Categoria();
$categoria->id = $_POST['categoria_id'];
if (array_key_exists('usado', $_POST)) {
    $usado = 'true';
} else {
    $usado = 'false';
}
$accept = array('LivroFisico', 'Ebook');
if (in_array($_POST['tipoProduto'], $accept)) {
    $produto = new $_POST['tipoProduto'](mysqli_real_escape_string($conexao, $_POST['nome']), $_POST['preco'], $_POST['descricao'], $categoria, $usado);
    $produto->isbn = $_POST['isbn'];
}
$produtoDao = new ProdutoDao($conexao);
if ($produtoDao->insereProduto($produto)) {
    ?>
		<p class="text-success">O produto <?php 
    echo $produto->nome;
    ?>
, <?php 
    echo $produto->getPreco();
    ?>
 foi adicionado.</p>
	<?php 
} else {
    $msg = mysqli_error($conexao);
    ?>
		<p class="text-danger">O produto <?php 
    echo $produto->nome;
 public static function updatePedido()
 {
     $pedido_venda = $_POST['pedido_venda'];
     $itens = $pedido_venda['itens'];
     $chinelos_gerados = $pedido_venda['chinelos_gerados'];
     $pagamentos = isset($_POST['pagamentos']) ? $_POST['pagamentos'] : array();
     $id_empreendimento = $pedido_venda['id_empreendimento'];
     $estampas = isset($pedido_venda['estampas']) ? $pedido_venda['estampas'] : array();
     $PedidoVendaDao = new PedidoVendaDao();
     $PedidoVendaTO = new PedidoVendaTO();
     $ItemPedidoVendaDao = new ItemPedidoVendaDao();
     $ItemPedidoVendaTO = new ItemPedidoVendaTO();
     $PedidoVendaTO->id = isset($pedido_venda['id']) ? $pedido_venda['id'] : NULL;
     $PedidoVendaTO->id_usuario = isset($pedido_venda['id_usuario']) ? $pedido_venda['id_usuario'] : NULL;
     $PedidoVendaTO->id_cliente = is_numeric($pedido_venda['id_cliente']) ? $pedido_venda['id_cliente'] : NULL;
     $PedidoVendaTO->venda_confirmada = 0;
     $PedidoVendaTO->id_empreendimento = isset($pedido_venda['id_empreendimento']) ? $pedido_venda['id_empreendimento'] : '';
     $PedidoVendaTO->id_status_pedido = isset($pedido_venda['id_status_pedido']) ? $pedido_venda['id_status_pedido'] : NULL;
     $PedidoVendaTO->observacao = isset($pedido_venda['observacao']) ? $pedido_venda['observacao'] : NULL;
     $PedidoVendaTO->dta_entrega = isset($pedido_venda['dta_entrega']) ? $pedido_venda['dta_entrega'] : NULL;
     $PedidoVendaTO->canal_venda = isset($pedido_venda['canal_venda']) ? $pedido_venda['canal_venda'] : NULL;
     $PedidoVendaTO->dta_venda = isset($pedido_venda['dta_venda']) ? $pedido_venda['dta_venda'] : NULL;
     $ItemPedidoVendaDao->delete($PedidoVendaTO->id);
     $PedidoVendaDao->updatePedido($PedidoVendaTO);
     $id_pedido_venda = $pedido_venda['id'];
     self::gravarMovimentacoes($pagamentos, $id_pedido_venda, $PedidoVendaTO->id_cliente, $PedidoVendaTO->id_empreendimento);
     $EstampaBasePedidoTO = new EstampaBasePedidoTO();
     $EstampaBasePedidoDao = new EstampaBasePedidoDao();
     foreach ($estampas as $key_arr => $arr) {
         foreach ($arr as $key_est => $estampa) {
             $EstampaBasePedidoTO->id_cor = $estampa['id_cor'];
             $EstampaBasePedidoTO->dsc_local = $estampa['dsc_local'];
             try {
                 $id_estampa_base_pedido = $EstampaBasePedidoDao->saveEstampa($EstampaBasePedidoTO);
                 $estampas[$key_arr][$key_est]['id_estampa_base_pedido'] = $id_estampa_base_pedido;
             } catch (ExceptionJSON $e) {
                 $e->enviaJSON();
             }
         }
     }
     foreach ($itens as $key => $arr) {
         $id_agrupamento_insumos = null;
         foreach ($arr as $value) {
             $ItemPedidoVendaTO->id_pedido_venda = $id_pedido_venda;
             $ItemPedidoVendaTO->id_produto = $value['id_produto'];
             $ItemPedidoVendaTO->desconto_aplicado = isset($value['desconto_aplicado']) ? $value['desconto_aplicado'] : 0;
             $ItemPedidoVendaTO->valor_desconto = isset($value['valor_desconto']) ? $value['valor_desconto'] : 0;
             $ItemPedidoVendaTO->qtd = $value['qtd'];
             $ItemPedidoVendaTO->valor_real_item = $value['valor_real_item'];
             $ItemPedidoVendaTO->vlr_custo = $value['vlr_custo'];
             $ItemPedidoVendaTO->perc_imposto_compra = $value['perc_imposto_compra'];
             $ItemPedidoVendaTO->perc_desconto_compra = $value['perc_desconto_compra'];
             $ItemPedidoVendaTO->perc_margem_aplicada = $value['perc_margem_aplicada'];
             $ItemPedidoVendaTO->tipo_produto = $value['tipo_produto'];
             $ItemPedidoVendaTO->id_produto_base = isset($value['id_produto_base']) && is_numeric($value['id_produto_base']) ? $value['id_produto_base'] : null;
             $ItemPedidoVendaTO->config_grad = $value['config_grad'];
             $ItemPedidoVendaTO->id_agrupamento_insumos = $id_agrupamento_insumos;
             $ItemPedidoVendaTO->flg_brinde = $value['flg_brinde'];
             $ItemPedidoVendaTO->tipo_base = isset($value['tipo_base']) ? $value['tipo_base'] : null;
             $ItemPedidoVendaTO->modelo_base = isset($value['modelo_base']) ? $value['modelo_base'] : null;
             $last_id_item = $ItemPedidoVendaDao->saveItemPedidoVenda($ItemPedidoVendaTO);
             $id_agrupamento_insumos = $id_agrupamento_insumos == null ? $last_id_item : $id_agrupamento_insumos;
             if (!$last_id_item) {
                 Flight::halt(500, 'erro ao inserir os itens da venda');
             }
             if ($value['tipo_produto'] == 'base' && count($estampas) > 0) {
                 $EstampaBasePedidoItemPedidoVendaTO = new EstampaBasePedidoItemPedidoVendaTO();
                 $EstampaBasePedidoItemPedidoVendaDao = new EstampaBasePedidoItemPedidoVendaDao();
                 $key_estampa = (int) $value['flg_brinde'] == 1 ? 'brinde-' . $value['config_grad'] : $value['config_grad'];
                 foreach ($estampas[$key_estampa] as $estampa) {
                     $EstampaBasePedidoItemPedidoVendaTO->id_estampa_base_pedido = $estampa['id_estampa_base_pedido'];
                     $EstampaBasePedidoItemPedidoVendaTO->id_item_pedido_venda = $last_id_item;
                     try {
                         $EstampaBasePedidoItemPedidoVendaDao->save($EstampaBasePedidoItemPedidoVendaTO);
                     } catch (ExceptionJSON $e) {
                         $e->enviaJSON();
                     }
                 }
             }
         }
         $ItemPedidoVendaDao->updateAgrupamento($id_agrupamento_insumos);
     }
     // gravando pedido com chinelos gerados
     $ProdutoTO = new ProdutoTO();
     $ProdutoDao = new ProdutoDao();
     $ProdutoEmpreendimentoTO = new ProdutoEmpreendimentoTO();
     $EstoqueDao = new EstoqueDao();
     $EstoqueTO = new EstoqueTO();
     foreach ($chinelos_gerados as $key => $value) {
         $ProdutoTO->nome = $value['nome'];
         $ProdutoTO->flg_excluido = 1;
         $last_id_produto = $ProdutoDao->saveProduto($ProdutoTO);
         $ProdutoEmpreendimentoTO->id_produto = $last_id_produto;
         $ProdutoEmpreendimentoTO->id_empreendimento = $id_empreendimento;
         if (!$ProdutoDao->produtoEmpreendimento($ProdutoEmpreendimentoTO)) {
             Flight::halt(500, 'Erro ao cadastrar o id_empreendimento');
         }
         $chinelos_gerados[$key]['id_produto'] = $last_id_produto;
     }
     $PedidoVendaTO->id = isset($pedido_venda['id_pedido_gerado']) ? $pedido_venda['id_pedido_gerado'] : NULL;
     $PedidoVendaTO->id_usuario = isset($pedido_venda['id_usuario']) ? $pedido_venda['id_usuario'] : NULL;
     $PedidoVendaTO->id_cliente = is_numeric($pedido_venda['id_cliente']) ? $pedido_venda['id_cliente'] : NULL;
     $PedidoVendaTO->venda_confirmada = isset($pedido_venda['venda_confirmada']) ? $pedido_venda['venda_confirmada'] : NULL;
     $PedidoVendaTO->id_empreendimento = isset($pedido_venda['id_empreendimento']) ? $pedido_venda['id_empreendimento'] : NULL;
     $PedidoVendaTO->id_status_pedido = isset($pedido_venda['id_status_pedido']) ? $pedido_venda['id_status_pedido'] : 1;
     $PedidoVendaTO->observacao = isset($pedido_venda['observacao']) ? $pedido_venda['observacao'] : NULL;
     $PedidoVendaTO->id_pedido_master = $id_pedido_venda;
     $ItemPedidoVendaDao->delete($PedidoVendaTO->id);
     $PedidoVendaDao->updatePedido($PedidoVendaTO);
     $id_pedido_gerado = $pedido_venda['id_pedido_gerado'];
     foreach ($chinelos_gerados as $key => $value) {
         $ItemPedidoVendaTO->id_pedido_venda = $id_pedido_gerado;
         $ItemPedidoVendaTO->id_pedido_master = $id_pedido_venda;
         $ItemPedidoVendaTO->id_produto = $value['id_produto'];
         $ItemPedidoVendaTO->desconto_aplicado = isset($value['desconto_aplicado']) ? $value['desconto_aplicado'] : 0;
         $ItemPedidoVendaTO->valor_desconto = isset($value['valor_desconto']) ? $value['valor_desconto'] : 0;
         $ItemPedidoVendaTO->qtd = $value['qtd'];
         $ItemPedidoVendaTO->valor_real_item = $value['valor_real_item'];
         $ItemPedidoVendaTO->vlr_custo = $value['vlr_custo'];
         $ItemPedidoVendaTO->perc_imposto_compra = 0;
         $ItemPedidoVendaTO->perc_desconto_compra = 0;
         $ItemPedidoVendaTO->perc_margem_aplicada = $value['perc_margem_aplicada'];
         $ItemPedidoVendaTO->tipo_produto = null;
         $ItemPedidoVendaTO->id_produto_base = null;
         $ItemPedidoVendaTO->config_grad = null;
         $ItemPedidoVendaTO->id_agrupamento_insumos = null;
         $ItemPedidoVendaTO->flg_brinde = $value['flg_brinde'];
         if (!$ItemPedidoVendaDao->saveItemPedidoVenda($ItemPedidoVendaTO)) {
             Flight::halt(500, 'erro ao inserir os itens da venda');
         }
     }
     Flight::response()->status(201)->header('Content-Type', 'application/json')->write(json_encode(array('id_pedido_venda' => $id_pedido_venda)))->send();
 }
<?php

require_once "conecta.php";
require_once "cabecalho.php";
require_once "autoload.php";
?>

<table class="table table-striped table-bordered">
	<?php 
$produtoDao = new ProdutoDao($conexao);
$produtos = $produtoDao->listaProdutos();
foreach ($produtos as $produto) {
    ?>
	<tr>
		<td><?php 
    echo $produto->nome;
    ?>
</td>
		<td><?php 
    echo $produto->getPreco();
    ?>
</td>
		<td><?php 
    echo $produto->calculaImposto();
    ?>
</td>
		<td><?php 
    echo $produto->calculaPrecoDeVenda();
    ?>
</td>
		<td><?php 
<?php

require_once "conecta.php";
require_once "cabecalho.php";
require_once "banco-produto.php";
require_once "logica-usuario.php";
require_once "autoload.php";
$id = $_POST['id'];
$produto = new ProdutoDao($conexao);
if ($produto->removeProduto($id)) {
    $_SESSION["success"] = "Produto removido com sucesso.";
} else {
    $_SESSION["danger"] = "Erro ao remover produto.";
}
header("Location: produto-lista.php");
die;
?>
 
Beispiel #10
0
<?php

/*
 * import de classes
 */
require_once '../../lib/jqsImports/JqsAutoImports.php';
$JqsAutoImports = new JqsAutoImports();
$id = $_GET['id'];
$produto = new ProdutoDao();
$est = $produto->localizarProduto($id);
?>

<!DOCTYPE html>
<html>
	<head>				
		<meta charset="utf-8">
		<meta name="viewport" content="width=device-width, initial-scale=1" />
		
		<title>Preciata</title>		
		<link href="../assets/bootstrap-3.3.6-dist/css/bootstrap.min.css" rel="stylesheet" />
		<link href="../assets/estilo_custom.css" rel="stylesheet" />			
		
		<script src="//code.jquery.com/jquery-1.12.0.min.js"></script>
		<script src="//code.jquery.com/jquery-migrate-1.2.1.min.js"></script>
		
		<link rel="stylesheet" href="//code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css">
		<script src="//code.jquery.com/jquery-1.10.2.js"></script>
		<script src="//code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
		<link rel="stylesheet" href="/resources/demos/style.css" />				
		
		<script type="text/javascript" src="../assets/scripts/produtos.js"></script>
 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']);
         }
     }
 }
 public static function calculaNfe()
 {
     $id_empreendimento = $_POST['id_empreendimento'];
     $id_venda = $_POST['id_venda'];
     $cod_operacao = $_POST['cod_operacao'];
     $VendaDao = new VendaDao();
     $UsuarioDao = new UsuarioDao();
     $ItemVendaDao = new ItemVendaDao();
     $EmpreendimentoDao = new EmpreendimentoDao();
     $OperacaoDao = new OperacaoDao();
     $ProdutoDao = new ProdutoDao();
     $EstadoDao = new EstadoDao();
     $CidadeDao = new CidadeDao();
     $ConfiguracaoDao = new ConfiguracaoDao();
     $SerieDocumentoFiscalDao = new SerieDocumentoFiscalDao();
     /**
      * Carregando dados da venda
      **/
     $venda = $VendaDao->getVenda($id_venda);
     $venda['itens'] = $ItemVendaDao->getItens($id_venda);
     $venda['cliente'] = $UsuarioDao->getUsuario($id_empreendimento, $venda['id_cliente']);
     if (isset($venda['cliente']['id_cidade']) && !empty($venda['cliente']['id_cidade'])) {
         $cidadeDestinatario = $CidadeDao->getCidade($venda['cliente']['id_cidade']);
         $estadoDestinatario = $EstadoDao->getEstado($venda['cliente']['id_estado']);
     } else {
         Flight::halt(406, json_encode(array('mensagem' => 'Estado/Cidade não informado no cadastro do cliente!')));
     }
     $venda['empreendimento'] = $EmpreendimentoDao->getEmpreendimentoByIdAndUF($id_empreendimento, $estadoDestinatario['uf']);
     $cidadeEmitente = $CidadeDao->getCidade($venda['empreendimento']['cod_cidade']);
     $estadoEmitente = $EstadoDao->getEstado($venda['empreendimento']['cod_estado']);
     $venda['operacao'] = $OperacaoDao->getOperacao($cod_operacao);
     $configuracoes = $ConfiguracaoDao->getConfiguracoes($id_empreendimento);
     if (!isset($configuracoes['id_serie_padrao_nfe'])) {
         $erros = array("mensagem" => "Configuração \"Modelo Documento/Série Padrão p/ NF-e\" não encontrada");
         Flight::response()->status(406)->header('Content-Type', 'application/json')->write(json_encode($erros))->send();
     }
     $SerieDocumentoFiscal = $SerieDocumentoFiscalDao->getByID($configuracoes['id_serie_padrao_nfe']);
     $dados_emissao = new stdClass();
     $dados_emissao->dsc_operacao = $venda['operacao']['dsc_operacao'];
     $dados_emissao->serie_documento_fiscal = $SerieDocumentoFiscal['serie_documento_fiscal'];
     $dados_emissao->num_documento_fiscal = $SerieDocumentoFiscal['num_ultimo_documento_fiscal']++;
     $dados_emissao->cod_venda = $id_venda;
     $dados_emissao->cod_empreendimento = $id_empreendimento;
     $dados_emissao->nme_modelo_documento = $SerieDocumentoFiscal['dsc_modelo_documento_fiscal'];
     /**
      * Configurando os dados do emitente
      **/
     $emitente = new MotorFiscal\Emitente();
     $emitente->identificador = $venda['empreendimento']['id'];
     $emitente->CNPJ = $venda['empreendimento']['num_cnpj'];
     $emitente->xNome = $venda['empreendimento']['nme_razao_social'];
     $emitente->xFant = $venda['empreendimento']['nme_fantasia'];
     $emitente->IE = $venda['empreendimento']['num_inscricao_estadual'];
     $emitente->IEST = $venda['empreendimento']['num_inscricao_estadual_st'];
     $emitente->CRT = $venda['empreendimento']['num_regime_tributario'];
     $emitente->PercCreditoSimples = $venda['empreendimento']['num_percentual_credito_simples'];
     $emitente->CEP = $venda['empreendimento']['num_cep'];
     $emitente->xLgr = $venda['empreendimento']['nme_logradouro'];
     $emitente->nro = $venda['empreendimento']['num_logradouro'];
     $emitente->xBairro = $venda['empreendimento']['nme_bairro_logradouro'];
     $emitente->cMun = $cidadeEmitente['nome'];
     $emitente->UF = $estadoEmitente['uf'];
     $emitente->id_cidade = $cidadeEmitente['id'];
     $emitente->id_estado = $estadoEmitente['id'];
     $emitente->ContribuinteIPI = $venda['empreendimento']['flg_contribuinte_ipi'];
     $emitente->num_versao_ibpt = $configuracoes['num_versao_ibpt'];
     /**
      * Configurando os dados do destinatário
      **/
     $destinatario = new MotorFiscal\Destinatario();
     $destinatario->identificador = $venda['cliente']['id'];
     $destinatario->CPF = $venda['cliente']['cpf'];
     $destinatario->idEstrangeiro = $venda['cliente']['num_registro_estrangeiro'];
     $destinatario->xNome = $venda['cliente']['nome'];
     $destinatario->email = $venda['cliente']['email'];
     $destinatario->tipo_cadastro = $venda['cliente']['tipo_cadastro'];
     $destinatario->CEP = $venda['cliente']['cep'];
     $destinatario->xLgr = $venda['cliente']['endereco'];
     $destinatario->nro = $venda['cliente']['numero'];
     $destinatario->xBairro = $venda['cliente']['bairro'];
     $destinatario->cMun = $cidadeDestinatario['nome'];
     $destinatario->UF = $estadoDestinatario['uf'];
     $destinatario->id_cidade = $cidadeDestinatario['id'];
     $destinatario->id_estado = $estadoDestinatario['id'];
     if ($venda['cliente']['tipo_cadastro'] === "pj") {
         $destinatario->CNPJ = $venda['cliente']['cnpj'];
         $destinatario->IE = $venda['cliente']['inscricao_estadual'];
         $destinatario->IEST = $venda['cliente']['inscricao_estadual_st'];
         $destinatario->IM = $venda['cliente']['num_inscricao_municipal'];
         $destinatario->xFant = $venda['cliente']['nome_fantasia'];
         if ((int) $venda['cliente']['flg_contribuinte_icms'] === 1) {
             // Se for contribuinte de ICMS
             if ((int) $venda['cliente']['flg_isento_inscricao_estadual'] === 1) {
                 // Se for contribuinte de ICMS ISENTO de incrição
                 $destinatario->indIEDest = 2;
             } else {
                 $destinatario->indIEDest = 1;
             }
             //É contribuinte mas não é ISENTO.
         } else {
             $destinatario->indIEDest = 9;
         }
         // Se não não é contribuinte do ICMS então ele é igual a nove.
     }
     /**
      * Configurando os dados da operação
      **/
     $operacao = new stdClass();
     $operacao->identificador = $venda['operacao']['cod_operacao'];
     $operacao->CFOPMercadoria = $venda['operacao']['num_cfop_mercadoria'];
     $operacao->CFOPMercadoriaST = $venda['operacao']['num_cfop_mercadoria_st'];
     $operacao->CFOPMercadoriaSTSubstituido = $venda['operacao']['num_cfop_mercadoria_st_subst'];
     $operacao->CFOPProduto = $venda['operacao']['num_cfop_produto'];
     $operacao->CFOPProdutoST = $venda['operacao']['num_cfop_produto_st'];
     $operacao->TipoOperacao = 0;
     $operacao->identificacao = 0;
     $operacao->finalidade = 0;
     $operacao->indFinal = 0;
     $operacao->indPres = 0;
     $operacao->NaturezaOperacao = '';
     /**
      * Configurando os parâmetros da NF-e
      **/
     self::$NF = new MotorFiscal\DocumentoFiscal($emitente, $destinatario, $operacao);
     self::$NF->buscaTribFunctionICMS = function ($produto, $operacao, $emitente, $destinatario) {
         return Trib::ICMS($produto, $operacao, $emitente, $destinatario);
     };
     self::$NF->buscaTribFunctionIPI = function ($produto, $operacao, $emitente, $destinatario) {
         return Trib::IPI($produto, $operacao, $emitente, $destinatario);
     };
     self::$NF->buscaTribFunctionPIS = function ($produto, $operacao, $emitente, $destinatario) {
         return Trib::PIS($produto, $operacao, $emitente, $destinatario);
     };
     self::$NF->buscaTribFunctionCOFINS = function ($produto, $operacao, $emitente, $destinatario) {
         return Trib::COFINS($produto, $operacao, $emitente, $destinatario);
     };
     self::$NF->buscaTribFunctionIBPT = function ($produto, $emitente, $detinatario) {
         return Trib::IBPT($produto, $emitente, $detinatario);
     };
     self::$NF->itens = array();
     // Configurando produtos e calculando impostos
     foreach ($venda['itens'] as $key => $item) {
         $item['data'] = $ProdutoDao->getProduto($item['id_produto'], $id_empreendimento);
         $produto = new MotorFiscal\Produto();
         $produto->identificador = $item['data']['id_produto'];
         $produto->cProd = $item['data']['id'];
         $produto->cEAN = $item['data']['codigo_barra'];
         $produto->xProd = $item['data']['nome'];
         $produto->NCM = $item['data']['cod_ncm'];
         $produto->EXTIPI = $item['data']['ex_tipi'];
         $produto->CEST = $item['data']['num_cest'];
         $produto->uCom = $item['data']['dsc_unidade_medida'];
         $produto->qCom = $item['qtd'];
         $produto->vUnCom = $item['vlr_produto'];
         $produto->cEANTrib = $item['data']['codigo_barra'];
         $produto->uTrib = $item['data']['dsc_unidade_medida'];
         $produto->qTrib = $item['qtd'];
         $produto->vUnTrib = $item['vlr_produto'];
         $produto->TipoTributacaoIPI = $item['data']['TipoTributacaoIPI'];
         $produto->FormaAquisicao = $item['data']['FormaAquisicao'];
         $produto->vProd = $item['qtd'] * $item['vlr_produto'];
         $produto->vDesc = $item['qtd'] * $item['valor_desconto_real'];
         // TODO: Dúvidas para sanar com Fischer
         $produto->NVE = 0;
         // Como preencher?
         $produto->CFOP = 0;
         // Como preencher?
         $produto->indTot = 1;
         // Como preencher?
         $produto->vFrete = 0;
         // Como preencher?
         $produto->vOutro = 0;
         // Como preencher?
         $produto->vSeg = 0;
         // Como preencher?
         $item = self::$NF->addItem($produto);
         $venda['itens'][$key] = $item;
     }
     // Consolidando e totalizando
     self::$NF->totalizarDocumento();
     $dadosNf = array('informacoes_adicionais_contribuinte' => $_POST['informacoes_adicionais_contribuinte'], 'dados_emissao' => $dados_emissao, 'emitente' => $emitente, 'destinatario' => $destinatario, 'itens' => self::$NF->itens, 'ICMSTot' => self::$NF->ICMSTot);
     Flight::json($dadosNf);
 }
 public function getEstoque($offset, $limit, $busca)
 {
     $offset = $offset == null ? 0 : $offset;
     $limit = $limit == null ? 0 : $limit;
     $group = false;
     $orderby = false;
     $id_deposito = null;
     $id_empreendimento = null;
     if (array_key_exists('group', $busca)) {
         $group = true;
         unset($busca['group']);
     }
     if (isset($busca['depositos'])) {
         $id_deposito = $busca['depositos'];
         unset($busca['depositos']);
     } else {
         if (array_key_exists('qtd->id_deposito', $busca)) {
             $id_deposito = $busca['qtd->id_deposito'];
             unset($busca['qtd->id_deposito']);
         }
     }
     if (array_key_exists('emp->id_empreendimento', $busca)) {
         $id_empreendimento = $busca['emp->id_empreendimento'];
     }
     if (array_key_exists('orderby', $busca)) {
         $orderby = ' ORDER BY ' . $busca['orderby'];
         unset($busca['orderby']);
     }
     $sql = "SELECT prd.nome AS nome_produto,prd.codigo_barra, tcp.nome_cor AS sabor , tt.nome_tamanho AS peso, dep.nme_deposito AS nome_deposito,etq.*,tde.flg_visivel\n\t\t\t\tFROM `tbl_estoque` AS etq\n\t\t\t\tINNER JOIN `tbl_produtos` AS prd ON etq.id_produto = prd.id\n\t\t\t\tLEFT JOIN `tbl_fabricante` AS fab ON prd.id_fabricante = fab.id\n\t\t\t\tINNER JOIN `tbl_deposito` AS dep ON dep.id = etq.id_deposito\n\t\t\t\tLEFT JOIN tbl_caixa_deposito AS tcd ON etq.id_deposito = tcd.id_deposito \n\t\t\t\tINNER JOIN `tbl_produto_empreendimento` AS emp ON emp.id_produto = prd.id\n\t\t\t\tINNER JOIN tbl_deposito_empreendimento AS tde ON dep.id = tde.id_deposito AND tde.id_empreendimento = emp.id_empreendimento\n\t\t\t\tLEFT JOIN tbl_tamanho                   AS tt ON tt.id = prd.id_tamanho\n\t\t\t\tLEFT JOIN tbl_cor_produto               AS tcp ON tcp.id = prd.id_cor ";
     if (is_array($busca) && count($busca) > 0) {
         $where = prepareWhere($busca);
         $sql .= " WHERE " . $where . "";
     }
     $sql .= $group ? " GROUP BY prd.id " : " GROUP BY etq.id";
     $sql .= $orderby ? $orderby : " ";
     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()) {
         $ProdutoDao = new ProdutoDao();
         if ($select->rowCount() > 0) {
             $saida['produtos'] = $select->fetchAll(PDO::FETCH_ASSOC);
             //Flight::json($aux);
             //var_dump($saida['produtos']);die;
             foreach ($saida['produtos'] as $key => $value) {
                 $aux = $ProdutoDao->getProdutos(null, null, array("pro.id" => $value['id_produto'], "tpe.id_empreendimento" => $id_empreendimento));
                 $aux = $aux['produtos'][0];
                 $saida['produtos'][$key]['nome_fabricante'] = $aux['nome_fabricante'];
                 $saida['produtos'][$key]['codigo_barra'] = $aux['codigo_barra'];
                 $saida['produtos'][$key]['peso'] = $aux['peso'];
                 $saida['produtos'][$key]['vlr_custo_real'] = $aux['vlr_custo_real'];
                 $saida['produtos'][$key]['vlr_venda_atacado'] = $aux['vlr_venda_atacado'];
                 $saida['produtos'][$key]['vlr_venda_intermediario'] = $aux['vlr_venda_intermediario'];
                 $saida['produtos'][$key]['vlr_venda_varejo'] = $aux['vlr_venda_varejo'];
                 $saida['produtos'][$key]['vlr_desconto_cliente'] = $aux['valor_desconto_cliente'] == "" ? 0 : (double) $aux['valor_desconto_cliente'];
                 $saida['produtos'][$key]['perc_imposto_compra'] = $aux['perc_imposto_compra'];
                 $saida['produtos'][$key]['perc_desconto_compra'] = $aux['perc_desconto_compra'];
                 $saida['produtos'][$key]['margem_atacado'] = (double) $aux['perc_venda_atacado'];
                 $saida['produtos'][$key]['margem_intermediario'] = (double) $aux['perc_venda_intermediario'];
                 $saida['produtos'][$key]['margem_varejo'] = (double) $aux['perc_venda_varejo'];
                 $saida['produtos'][$key]['vlr_custo'] = (double) $aux['vlr_custo'];
                 if (!is_null($id_empreendimento)) {
                     $saida['produtos'][$key]['qtd_real_estoque'] = $this->getQtdProduto($id_empreendimento, $value['id_produto'], null, $id_deposito);
                 }
                 if (is_file(CAMINHO_UPLOAD_IMG_PRODUTO . $aux['img'])) {
                     $saida['produtos'][$key]['img'] = "assets/imagens/produtos/" . $aux['img'];
                 } else {
                     $saida['produtos'][$key]['img'] = null;
                 }
             }
             $saida['paginacao'] = isset($links_paginacao) ? $links_paginacao : null;
             return $saida;
         } else {
             return false;
         }
     } else {
         $e = $select->errorInfo();
         throw new Exception($e[2], 1);
     }
 }
 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);
     }
 }
} elseif ($act == "ver_estoque") {
    $param = $_POST['fdBuscarProduto'];
    $estoqueDao = new EstoqueDao();
    $rs = $estoqueDao->verEstoque($param);
    echo $rs;
    /*
     * excluir cliente
     */
} elseif ($act == "del") {
    /*
     * concta o banco de dados
     */
    $con = new JqsConnectionFactory();
    $link = $con->conectar();
    @($id = $_POST['id']);
    $del = new ProdutoDao();
    $del->excluirProduto($id);
    if ($del) {
        $value['status'] = "sucesso";
    } else {
        $value['status'] = "erro";
    }
    echo json_encode($value);
    /*
     * editar cliente
     */
} elseif ($act == "edit") {
    /*
     * dados do formulário de produto
     */
    $id = $_POST['id'];
 public static function requestDeleteProduto()
 {
     try {
         $produto = $_POST['produto'];
         $id_empreendimento = $_POST['id_empreendimento'];
         $ReferenciaIntegracaoDao = new ReferenciaIntegracaoDao();
         $ReferenciaIntegracaoTO = new ReferenciaIntegracaoTO();
         $PrestaShopDao = new PrestaShopDao($id_empreendimento);
         $ProdutoDao = new ProdutoDao();
         $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) {
             throw new Exception('Referencia não encontrada', 1);
         }
         if (!$ProdutoDao->delProduto($referenciaProduto['id_item'])) {
             throw new Exception('Erro ao excluir Produto', 1);
         }
         $obj = new stdClass();
         $obj->flg_excluido = 1;
         $ReferenciaIntegracaoDao->updateRef($obj, 'id=' . $referenciaProduto['id']);
     } 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());
     }
 }
    $nome = $_POST['nome'];
    $descricao = $_POST['descricao'];
    $imagem = $_POST['imagem'];
    $compra = $_POST['compra'];
    $venda = $_POST['venda'];
    $revenda = $_POST['revenda'];
    /*
     * setando modelo de produto
     */
    $produto = new Produto();
    $produto->setId($id);
    $produto->setCodigo($codigo);
    $produto->setNome($nome);
    $produto->setDescricao($descricao);
    $produto->setUrlImagem($imagem);
    /*
     * setando modelo de preços
     */
    $preco = new Preco();
    $preco->setCompra($compra);
    $preco->setVenda($venda);
    $preco->setReVenda($revenda);
    $produtoDAO = new ProdutoDao();
    $produtoDAO->editarProduto($produto, $preco);
    if ($produtoDAO) {
        $value['status'] = "sucesso";
    } else {
        $value['status'] = "erro";
    }
    echo json_encode($value);
}
 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);
     }
 }