Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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));
        }