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; } }
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; } }