Example #1
0
        public static Medida ToBd(this MedidaDao medidaDao)
        {
            Medida medida = new Medida();

            medida.MedidaID = medidaDao.MedidaID;
            if (!string.IsNullOrEmpty(medidaDao.Descricao))
            {
                medida.Descricao = medidaDao.Descricao.Replace(" ", "").Trim();
            }
            medida.Ativo = medidaDao.Ativo;

            return(medida);
        }
        public JsonResult Incluir(MedidaDao medidaDao)
        {
            try
            {
                medidaBusiness.Incluir(medidaDao);

                return(Json(new { Sucesso = true, Mensagem = "Medida cadastrada com sucesso!" }, JsonRequestBehavior.AllowGet));
            }
            catch (BusinessException ex)
            {
                return(Json(new { Sucesso = false, Mensagem = ex.Message }, JsonRequestBehavior.AllowGet));
            }
            catch (Exception ex)
            {
                return(Json(new { Sucesso = false, Mensagem = "Ocorreu um erro. Medida não cadastrada. Tente novamente." }, JsonRequestBehavior.AllowGet));
            }
        }
        public JsonResult Listar(MedidaDao medidaDao)
        {
            List <MedidaDao> medidas = new List <MedidaDao>();

            try
            {
                medidas = medidaBusiness.Listar(medidaDao);

                return(Json(medidas, JsonRequestBehavior.AllowGet));
            }
            catch (BusinessException ex)
            {
                return(Json(medidas, JsonRequestBehavior.AllowGet));
            }
            catch (Exception ex)
            {
                return(Json(medidas, JsonRequestBehavior.AllowGet));
            }
        }
        public List <MedidaDao> Listar(MedidaDao medidaDao)
        {
            try
            {
                return(medidaRepository.Listar(medidaDao.ToBd()).Select(x => x.ToApp()).ToList());
            }
            catch (BusinessException ex)
            {
                throw ex;
            }
            catch (Exception ex)
            {
                logRepository.Incluir(new Log()
                {
                    Descricao = ex.ToString(), DataHora = DateTime.Now
                });

                throw ex;
            }
        }
        private void ValidarIncluir(MedidaDao medidaDao)
        {
            if (medidaDao == null)
            {
                throw new BusinessException("Medida é obrigatório");
            }

            if (string.IsNullOrEmpty(medidaDao.Descricao))
            {
                throw new BusinessException("Descrição é obrigatório");
            }

            if (medidaRepository.Listar(new Medida()
            {
                Descricao = medidaDao.Descricao.Replace(" ", "").Trim()
            }).FirstOrDefault() != null)
            {
                throw new BusinessException("Medida (Descrição) já cadastrada");
            }
        }
        public int Incluir(MedidaDao medidaDao)
        {
            try
            {
                ValidarIncluir(medidaDao);

                return(medidaRepository.Incluir(medidaDao.ToBd()));
            }
            catch (BusinessException ex)
            {
                throw ex;
            }
            catch (Exception ex)
            {
                logRepository.Incluir(new Log()
                {
                    Descricao = ex.ToString(), DataHora = DateTime.Now
                });

                throw ex;
            }
        }
Example #7
0
        public void ImportarXML(NotaFiscalDao notaFiscalDao, out List <string> mensagemErro, out List <string> mensagemSucesso, out int qtdNFeImportada)
        {
            try
            {
                qtdNFeImportada = 0;
                mensagemErro    = new List <string>();
                mensagemSucesso = new List <string>();

                var lojaDepositoDao = lojaRepository.Listar(new Loja()
                {
                    Deposito = true, Ativo = true
                }).FirstOrDefault();

                // se não houver loja depósito, retorna
                if (lojaDepositoDao == null)
                {
                    mensagemErro.Add("Loja de depósito não cadastrada");
                    qtdNFeImportada = 0;
                    return;
                }

                using (var scope = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions()
                {
                    Timeout = TimeSpan.FromMinutes(10)
                }))
                {
                    XNamespace nsNFe = "http://www.portalfiscal.inf.br/nfe";

                    foreach (Stream item in notaFiscalDao.Arquivo)
                    {
                        var    todosProdutoAtualizados = true;
                        string xmlString = string.Empty;

                        using (StreamReader sr = new StreamReader(item))
                            xmlString = sr.ReadToEnd();

                        if (string.IsNullOrEmpty(xmlString))
                        {
                            mensagemErro.Add("XML está vazio");
                            continue;
                        }

                        XDocument xml = XDocument.Parse(xmlString, LoadOptions.None);

                        IEnumerable <XElement> noNFe = xml.Descendants(nsNFe + "NFe");

                        if (!noNFe.Any())
                        {
                            mensagemErro.Add("XML não é uma NFe (NFe)");
                            continue;
                        }

                        IEnumerable <XElement> NFe            = xml.Descendants(nsNFe + "NFe");
                        IEnumerable <XElement> NFe_infNFe     = NFe.Elements(nsNFe + "infNFe");
                        IEnumerable <XElement> NFe_infNFe_det = NFe_infNFe.Elements(nsNFe + "det");
                        IEnumerable <XElement> NFe_infNFe_ide = NFe_infNFe.Elements(nsNFe + "ide");

                        if (NFe_infNFe_det == null || NFe_infNFe_det.Count() <= 0)
                        {
                            mensagemErro.Add("XML não tem produtos (det)");
                            continue;
                        }

                        if (NFe_infNFe_ide == null)
                        {
                            mensagemErro.Add("XML não tem identificação (ide)");
                            continue;
                        }

                        var NFe_infNFe_nNF = NFe_infNFe_ide.Elements(nsNFe + "nNF").FirstOrDefault();
                        if (NFe_infNFe_nNF == null)
                        {
                            mensagemErro.Add("XML não tem número (nNF)");
                            continue;
                        }

                        int numeroNfe;
                        int.TryParse(NFe_infNFe_nNF.Value, out numeroNfe);

                        if (numeroNfe <= 0)
                        {
                            mensagemErro.Add("XML tem número inválido (nNF)");
                            continue;
                        }

                        var NFe_infNFe_dhEmi = NFe_infNFe_ide.Elements(nsNFe + "dhEmi").FirstOrDefault();
                        if (NFe_infNFe_dhEmi == null)
                        {
                            mensagemErro.Add("XML não tem data de emissão (dhEmi)");
                            continue;
                        }

                        DateTime dataEmissaoNfe;
                        DateTime.TryParse(NFe_infNFe_dhEmi.Value, out dataEmissaoNfe);

                        if (dataEmissaoNfe == DateTime.MinValue)
                        {
                            mensagemErro.Add("XML tem data de emissão inválida (dhEmi)");
                            continue;
                        }

                        var notafiscalDao = new NotaFiscalDao()
                        {
                            Numero = numeroNfe, LojaDao = new LojaDao()
                            {
                                LojaID = lojaDepositoDao.LojaID
                            }, DataEmissao = dataEmissaoNfe, DataCadastro = DateTime.Now
                        };
                        var notaFiscalId = Incluir(notafiscalDao);

                        foreach (XElement det in NFe_infNFe_det)
                        {
                            XElement NFe_infNFe_det_prod = det.Elements(nsNFe + "prod").FirstOrDefault();

                            if (NFe_infNFe_det_prod == null)
                            {
                                mensagemErro.Add("Produto não encontrado no XML (prod)");
                                continue;
                            }

                            XElement NFe_infNFe_det_prod_cProd = NFe_infNFe_det_prod.Elements(nsNFe + "cProd").FirstOrDefault();
                            XElement NFe_infNFe_det_prod_qCom  = NFe_infNFe_det_prod.Elements(nsNFe + "qCom").FirstOrDefault();
                            XElement NFe_infNFe_det_prod_xProd = NFe_infNFe_det_prod.Elements(nsNFe + "xProd").FirstOrDefault();
                            XElement NFe_infNFe_det_prod_vProd = NFe_infNFe_det_prod.Elements(nsNFe + "vProd").FirstOrDefault();

                            long   cProd = 0;
                            short  qCom  = 0;
                            double vProd = 0;

                            if (NFe_infNFe_det_prod_cProd != null)
                            {
                                cProd = Convert.ToInt64(NFe_infNFe_det_prod_cProd.Value);
                            }

                            if (NFe_infNFe_det_prod_qCom != null)
                            {
                                qCom = Convert.ToInt16(Math.Floor(Convert.ToDecimal(NFe_infNFe_det_prod_qCom.Value, new CultureInfo("en-US").NumberFormat)));
                            }

                            if (NFe_infNFe_det_prod_vProd != null)
                            {
                                vProd = Convert.ToDouble(NFe_infNFe_det_prod_vProd.Value, new CultureInfo("en-US").NumberFormat);
                            }

                            if (cProd <= 0)
                            {
                                mensagemErro.Add("Código do produto não encontrado no XML");
                            }

                            if (qCom <= 0)
                            {
                                mensagemErro.Add("Quantidade do produto não encontrado no XML");
                            }

                            if (cProd <= 0 || qCom <= 0)
                            {
                                continue;
                            }

                            var produtoExisteNaLojaDeposito = produtoRepository.ListarEmLoja(0, cProd, 0, lojaDepositoDao.LojaID);
                            var atualizado = false;

                            if (produtoExisteNaLojaDeposito != null && produtoExisteNaLojaDeposito.ProdutoID > 0)
                            {
                                atualizado = produtoRepository.Atualizar(lojaDepositoDao.LojaID, cProd, qCom);

                                if (atualizado)
                                {
                                    mensagemSucesso.Add(string.Format("Produto {0}: Atualizado a quantidade do estoque do depósito em {1}", cProd, qCom));
                                }
                            }
                            else
                            {
                                var produtoDao = new ProdutoDao()
                                {
                                    Numero = cProd, Quantidade = qCom, Ativo = true, Preco = vProd
                                };

                                // encontra a medida dentro do campo xProd
                                var regexMedida = Regex.Match(NFe_infNFe_det_prod_xProd.Value, @"[0-9]?[0-9]?[0-9]?\s[X-x]?\s[0-9]?[0-9]?[0-9]?\s[X-x]?\s[0-9]?[0-9]?[0-9]");
                                var medidaDao   = new MedidaDao()
                                {
                                    Descricao = regexMedida.Value.Replace(" ", "")
                                };

                                // se encontrar a medida na base de dados, associa ao produto. Caso contrário, cadastra-a
                                var medida = medidaBusiness.Listar(medidaDao).FirstOrDefault();
                                if (medida == null)
                                {
                                    int medidaId = medidaBusiness.Incluir(medidaDao);

                                    produtoDao.MedidaDao.MedidaID = medidaId;
                                    produtoDao.MedidaDao.Ativo    = true;
                                }
                                else
                                {
                                    produtoDao.MedidaDao = medida;
                                }

                                // encontra a categoria dentro do campo xProd
                                var regexCategoria     = Regex.Match(NFe_infNFe_det_prod_xProd.Value, @"^[^\s]+");
                                var descricaoCategoria = regexCategoria.Value;

                                if (descricaoCategoria == "BAU")
                                {
                                    descricaoCategoria = "BAÚ";
                                }
                                else if (descricaoCategoria == "COLCHAO")
                                {
                                    descricaoCategoria = "COLCHÃO";
                                }
                                else if (descricaoCategoria == "ORTOPEDICO")
                                {
                                    descricaoCategoria = "ORTOPÉDICO";
                                }
                                else if (descricaoCategoria == "SOFA")
                                {
                                    descricaoCategoria = "SOFÁ";
                                }
                                else if (descricaoCategoria == "COLCHAO")
                                {
                                    descricaoCategoria = "COLCHÃO";
                                }

                                var categoriaDao = categoriaBusiness.Listar(new CategoriaDao()
                                {
                                    Descricao = descricaoCategoria
                                }).FirstOrDefault();

                                // se encontrar a categoria na base de dados, associa ao produto. Caso contrário, cadastra-a
                                if (categoriaDao == null)
                                {
                                    var categoriaId = categoriaBusiness.Incluir(categoriaDao);

                                    produtoDao.CategoriaDao.FirstOrDefault().CategoriaID = categoriaId;
                                    produtoDao.CategoriaDao.FirstOrDefault().Ativo       = true;
                                }
                                else
                                {
                                    produtoDao.CategoriaDao.Clear();
                                    produtoDao.CategoriaDao.Add(categoriaDao);
                                }

                                produtoDao.Descricao = NFe_infNFe_det_prod_xProd.Value.Substring(0, regexMedida.Index).Trim();

                                // cadastra o produto
                                var produtoId = produtoRepository.Incluir(produtoDao.ToBd());

                                // atualiza a quantidade desse produto na loja do depósito
                                produtoRepository.Atualizar(lojaDepositoDao.LojaID, cProd, qCom);

                                notaFiscalProdutoBusiness.Incluir(new NotaFiscalProdutoDao()
                                {
                                    NotaFiscalID = notaFiscalId, ProdutoDao = new ProdutoDao()
                                    {
                                        ProdutoID = produtoId
                                    }, Quantidade = qCom
                                });

                                mensagemSucesso.Add(string.Format("Produto {0}: Cadastrado em todas as lojas e atualizado a quantidade do estoque do depósito em {1}", cProd, qCom));
                            }
                        }

                        if (todosProdutoAtualizados)
                        {
                            qtdNFeImportada++;
                        }
                    }

                    scope.Complete();
                }

                mensagemSucesso.Add(string.Format("{0} notas fiscais importadas com sucesso", qtdNFeImportada));
            }
            catch (BusinessException ex)
            {
                throw ex;
            }
            catch (Exception ex)
            {
                logRepository.Incluir(new Log()
                {
                    Descricao = ex.ToString(), DataHora = DateTime.Now
                });

                throw ex;
            }
        }