private async Task <(IEnumerable <SaleFileDataError> errorList, IEnumerable <SaleFileData> dataList)> ValidateSaleTab(SaleFile saleFile, ExcelWorksheet saleTab) { var ListSaleFileDataError = new List <SaleFileDataError>(); var ListSaleFileData = new List <SaleFileData>(); for (var row = 2; row <= saleTab.Dimension.End.Row; row++) { if (saleTab.Cells[row, 1].Value != null && saleTab.Cells[row, 2].Value != null && saleTab.Cells[row, 3].Value != null && saleTab.Cells[row, 4].Value != null && saleTab.Cells[row, 5].Value != null && saleTab.Cells[row, 7].Value != null && saleTab.Cells[row, 8].Value != null && saleTab.Cells[row, 9].Value != null && saleTab.Cells[row, 10].Value != null && saleTab.Cells[row, 11].Value != null) { var saleFileData = new SaleFileData { ShopCode = (saleTab.Cells[row, 2].Value != null) ? saleTab.Cells[row, 2].Value.ToString().Replace(".0", "") : String.Empty, Cnpj = (saleTab.Cells[row, 3].Value != null) ? saleTab.Cells[row, 3].Value.ToString().PadLeft(14, '0').Replace("-", "").Replace("/", "").Replace(".", "").Replace(".0", "") : String.Empty, CpfSalesman = (saleTab.Cells[row, 4].Value != null) ? saleTab.Cells[row, 4].Value.ToString().PadLeft(11, '0').Replace("-", "").Replace(".", "").Replace(".0", "").Trim() : String.Empty, RequestNumber = (saleTab.Cells[row, 10].Value != null) ? saleTab.Cells[row, 10].Value.ToString().Replace(".0", "") : String.Empty, SaleDate = (saleTab.Cells[row, 9].Value != null) && Validation.CheckValidDateFromBr(saleTab.Cells[row, 9].Value.ToString()) ? new DateTime(int.Parse(saleTab.Cells[row, 9].Value.ToString().Split('/')[2]), int.Parse(saleTab.Cells[row, 9].Value.ToString().Split('/')[1]), int.Parse(saleTab.Cells[row, 9].Value.ToString().Split('/')[0])) : DateTime.MinValue, ProductDescription = (saleTab.Cells[row, 7].Value != null) ? saleTab.Cells[row, 7].Value.ToString().Replace("'", "").Substring(0, saleTab.Cells[row, 7].Value.ToString().Length - 1) : String.Empty, Amount = (saleTab.Cells[row, 8].Value != null) ? Convert.ToInt16(saleTab.Cells[row, 8].Value.ToString().Replace(".0", "")) : 0, Category = (saleTab.Cells[row, 6].Value != null) ? saleTab.Cells[row, 6].Value.ToString() : String.Empty, NameSalesman = (saleTab.Cells[row, 5].Value != null) ? saleTab.Cells[row, 5].Value.ToString() : String.Empty, Resale = (saleTab.Cells[row, 1].Value != null) ? saleTab.Cells[row, 1].Value.ToString() : String.Empty, CreatedAt = DateTime.Now, SaleFile = saleFile, SaleFileSkuStatus = await _saleFileSkuStatusRepository.GetById((int)FileSKUStatusEnum.PendingClassification), Product = 0, EanCode = (saleTab.Cells[row, 11].Value != null) ? saleTab.Cells[row, 11].Value.ToString() : String.Empty, }; ListSaleFileDataError.AddRange(await ValidateSpreadsheetRow(saleFileData, saleFile, row, saleFile.CurrentMonth)); ListSaleFileData.Add(saleFileData); } else { ListSaleFileDataError.Add(new SaleFileDataError { CreatedAt = DateTime.Now, Description = "Possui uma coluna não preenchida", SaleFile = saleFile, Line = row }); } } return(ListSaleFileDataError, ListSaleFileData); }
private async Task <IEnumerable <SaleFileDataError> > ValidateSpreadsheetRow(SaleFileData saleFileData, SaleFile saleFile, int line, int month) { var ListSaleFileDataError = new List <SaleFileDataError>(); if (!string.IsNullOrEmpty(saleFileData.EanCode)) { var network = (await _shopUserRepository.CustomFind(x => x.Shop.Cnpj.Equals(saleFileData.Cnpj), x => x.Shop)).FirstOrDefault(); if (network != null) { var product = (await _productRepository.CustomFind(x => x.Ean.Equals(saleFileData.EanCode))).FirstOrDefault(); if (product != null) { saleFileData.Product = product.Id; saleFileData.SaleFileSkuStatus = await _saleFileSkuStatusRepository.GetById((int)FileSKUStatusEnum.AutomaticValidate); } } } if (String.IsNullOrEmpty(saleFileData.ProductDescription)) { ListSaleFileDataError.Add(new SaleFileDataError { CreatedAt = DateTime.Now, Description = "Código produto em branco.", SaleFile = saleFile, Line = line }); } if (String.IsNullOrEmpty(saleFileData.Resale)) { ListSaleFileDataError.Add(new SaleFileDataError { CreatedAt = DateTime.Now, Description = "Revenda em branco.", SaleFile = saleFile, Line = line }); } if (String.IsNullOrEmpty(saleFileData.ShopCode) || saleFileData.ShopCode == "0") { ListSaleFileDataError.Add(new SaleFileDataError { CreatedAt = DateTime.Now, Description = "Código Loja em branco.", SaleFile = saleFile, Line = line }); } if (Convert.ToDateTime(saleFileData.SaleDate) == DateTime.MinValue) { ListSaleFileDataError.Add(new SaleFileDataError { CreatedAt = DateTime.Now, Description = "Data inválida.", SaleFile = saleFile, Line = line }); } else if (Convert.ToDateTime(saleFileData.SaleDate).Month != month) { ListSaleFileDataError.Add(new SaleFileDataError { CreatedAt = DateTime.Now, Description = "Data fora do período informado.", SaleFile = saleFile, Line = line }); } if (String.IsNullOrEmpty(saleFileData.RequestNumber)) { ListSaleFileDataError.Add(new SaleFileDataError { CreatedAt = DateTime.Now, Description = "Número Pedido em branco.", SaleFile = saleFile, Line = line }); } if (String.IsNullOrEmpty(saleFileData.Cnpj)) { ListSaleFileDataError.Add(new SaleFileDataError { CreatedAt = DateTime.Now, Description = "CNPJ em branco.", SaleFile = saleFile, Line = line, }); } else if (!String.IsNullOrEmpty(saleFileData.Cnpj)) { if (!Validation.ValidaCnpj(saleFileData.Cnpj)) { ListSaleFileDataError.Add(new SaleFileDataError { CreatedAt = DateTime.Now, Description = $"CNPJ {saleFileData.Cnpj} inválido.", SaleFile = saleFile, Line = line }); } else { var hasCnpj = await _shopRepository.CustomFind(x => x.Cnpj.Equals(saleFileData.Cnpj)); if (!hasCnpj.Any()) { ListSaleFileDataError.Add(new SaleFileDataError { CreatedAt = DateTime.Now, Description = $"CNPJ {saleFileData.Cnpj} não encontrado.", SaleFile = saleFile, Line = line }); } } } if (String.IsNullOrEmpty(saleFileData.CpfSalesman)) { ListSaleFileDataError.Add(new SaleFileDataError { CreatedAt = DateTime.Now, Description = "CPF em branco.", SaleFile = saleFile, Line = line }); } else if (!String.IsNullOrEmpty(saleFileData.CpfSalesman)) { var user = (await _userRepository.CustomFind(x => x.Cpf.Contains(saleFileData.CpfSalesman), x => x.Office)).FirstOrDefault(); if (user != null && user.Office.Id != (int)OfficeEnum.Salesman) { ListSaleFileDataError.Add(new SaleFileDataError { CreatedAt = DateTime.Now, Description = "Usuario não é um vendedor.", SaleFile = saleFile, Line = line }); } if (!Validation.ValidaCPF(saleFileData.CpfSalesman)) { ListSaleFileDataError.Add(new SaleFileDataError { CreatedAt = DateTime.Now, Description = "CPF inválido.", SaleFile = saleFile, Line = line }); } } if (String.IsNullOrEmpty(saleFileData.NameSalesman)) { ListSaleFileDataError.Add(new SaleFileDataError { CreatedAt = DateTime.Now, Description = "Nome em branco.", SaleFile = saleFile, Line = line }); } else if (!saleFileData.NameSalesman.ToCharArray().All(t => !char.IsDigit(t))) { ListSaleFileDataError.Add(new SaleFileDataError { CreatedAt = DateTime.Now, Description = "Nome inválido.", SaleFile = saleFile, Line = line, }); } if (saleFileData.Amount == 0) { ListSaleFileDataError.Add(new SaleFileDataError { CreatedAt = DateTime.Now, Description = "Quantidade em branco.", SaleFile = saleFile, Line = line }); } if (saleFileData.Amount < 0) { ListSaleFileDataError.Add(new SaleFileDataError { CreatedAt = DateTime.Now, Description = "Quantidade de unidades negativa.", SaleFile = saleFile, Line = line }); } return(ListSaleFileDataError); }