public static DocumentImportResult Validate(List <RowInfo <Misc.Shipment> > rows) { DocumentImportResult result = new DocumentImportResult() { Invalid = new List <DocumentRowError>(), Valid = new List <Misc.Shipment>() }; foreach (RowInfo <Misc.Shipment> row in rows) { if (row.ErrorColumnIndex > -1) { result.Invalid.Add(new DocumentRowError() { ErrorMessage = row.ErrorMessage, Row = row.RowNumber++, Column = row.ErrorColumnIndex }); } else { List <ValidationResult> results = new List <ValidationResult>(); if (ShouldIgnoreRow(row.Value)) { continue; } if (Validator.TryValidateObject(row.Value, new ValidationContext(row.Value), results, true) == false) { result.Invalid.Add(new DocumentRowError() { ErrorMessage = $"{results.FirstOrDefault()?.ErrorMessage}", Row = row.RowNumber++ }); } else { result.Valid.Add(row.Value); } } } result.Meta = new DocumentImportSummary() { InvalidCount = result.Invalid.Count, ValidCount = result.Valid.Count, TotalCount = rows.Count }; return(result); }
private async Task <BatchProcessResult> ProcessShipments(DocumentImportResult importResult, VerifiedUserContext userContext) { BatchProcessResult processResult = new BatchProcessResult(); if (importResult == null) { return(null); } if (importResult.Valid?.Count < 0) { return(null); } foreach (Misc.Shipment shipment in importResult.Valid) { try { bool isSuccessful = await ProcessShipment(shipment, processResult, userContext); } catch (Exception ex) { BatchProcessFailure failureDto = new BatchProcessFailure(); failureDto.Error = ex.Message; failureDto.Shipment = shipment; processResult.ProcessFailureList.Add(failureDto); } } processResult.InvalidRowFailureList.AddRange(importResult.Invalid); processResult.Meta = new BatchProcessSummary() { ProcessFailureListCount = processResult.ProcessFailureList.Count(), DocumentFailureListCount = processResult.InvalidRowFailureList.Count(), SuccessfulCount = processResult.SuccessfulList.Count(), TotalCount = importResult.Meta.TotalCount }; return(processResult); }
private async Task <BatchProcessResult> GetShipmentListFromFile(IFormFile file, VerifiedUserContext userContext) { BatchProcessResult processResults; if (file == null) { return(new BatchProcessResult()); } using Stream stream = file.OpenReadStream(); List <RowInfo <Misc.Shipment> > shipments = new Mapper(stream).Take <Misc.Shipment>(0, 1000).ToList(); if (shipments == null) { throw new Exception("No shipments found in sheet"); } shipments.RemoveRange(0, 2); DocumentImportResult result = Validate(shipments); processResults = await ProcessShipments(result, userContext); return(await Task.FromResult(processResults)); }