Esempio n. 1
0
        public GetWarehouseStockFromFileResult ValidateFile(Stream rawFile)
        {
            var items  = new List <BulkWarehouseStockUpdateDTO>();
            var errors = new List <string>();

            if (rawFile != null)
            {
                try
                {
                    using (var file = new CsvReader(new StreamReader(rawFile)))
                    {
                        while (file.Read())
                        {
                            string sku  = file.GetField <string>(1),
                                   name = file.GetField <string>(0);
                            var handle  = name ?? sku;

                            var dto = new BulkWarehouseStockUpdateDTO
                            {
                                SKU = sku
                            };

                            if (!string.IsNullOrWhiteSpace(sku))
                            {
                                dto.SKU = sku;
                            }
                            else
                            {
                                errors.Add(string.Format("SKU is required for {0}.", handle));
                            }

                            var warehouseIdValue = file.GetField <string>(2);
                            int warehouseId;
                            if (int.TryParse(warehouseIdValue, out warehouseId))
                            {
                                dto.WarehouseId = warehouseId;
                            }
                            else
                            {
                                errors.Add(string.Format("Warehouse id for {0} is not a valid number.", handle));
                            }

                            var stockLevelValue = file.GetField <string>(3);
                            int stockLevel;
                            if (int.TryParse(stockLevelValue, out stockLevel))
                            {
                                dto.StockLevel = stockLevel;
                            }
                            else
                            {
                                errors.Add(string.Format("Stock level for {0} is not a valid number.", handle));
                            }

                            items.Add(dto);
                        }
                    }
                }
                catch (CsvMissingFieldException exception)
                {
                    CurrentRequestData.ErrorSignal.Raise(exception);
                    return(GetWarehouseStockFromFileResult.Failure(new List <string>
                    {
                        "A field was missing from your import. This likely means you tried to import a simple stock list with the warehoused stock enabled."
                    }));
                }
                catch (Exception exception)
                {
                    CurrentRequestData.ErrorSignal.Raise(exception);
                    return(GetWarehouseStockFromFileResult.Failure(new List <string>
                    {
                        "An error occurred during import, check the logs for exception details"
                    }));
                }
            }

            return(errors.Any()
                ? GetWarehouseStockFromFileResult.Failure(errors)
                : GetWarehouseStockFromFileResult.Success(items));
        }
        public GetWarehouseStockFromFileResult ValidateFile(Stream rawFile)
        {
            var items = new List<BulkWarehouseStockUpdateDTO>();
            var errors = new List<string>();
            if (rawFile != null)
            {
                try
                {
                    using (var file = new CsvReader(new StreamReader(rawFile)))
                    {
                        while (file.Read())
                        {
                            string sku = file.GetField<string>(1).Trim(),
                                name = file.GetField<string>(0);
                            var handle = name ?? sku;

                            var dto = new BulkWarehouseStockUpdateDTO
                            {
                                SKU = sku
                            };

                            if (!string.IsNullOrWhiteSpace(sku))
                                dto.SKU = sku;
                            else
                                errors.Add(string.Format("SKU is required for {0}.", handle));

                            var warehouseIdValue = file.GetField<string>(2);
                            int warehouseId;
                            if (int.TryParse(warehouseIdValue, out warehouseId))
                                dto.WarehouseId = warehouseId;
                            else
                                errors.Add(string.Format("Warehouse id for {0} is not a valid number.", handle));

                            var stockLevelValue = file.GetField<string>(3);
                            int stockLevel;
                            if (int.TryParse(stockLevelValue, out stockLevel))
                                dto.StockLevel = stockLevel;
                            else
                                errors.Add(string.Format("Stock level for {0} is not a valid number.", handle));

                            items.Add(dto);
                        }
                    }

                    var duplicates = items
                        .GroupBy(x => new {x.SKU, x.WarehouseId})
                        .Where(group => group.Count() > 1)
                        .Select(group => new BulkWarehouseStockUpdateDTO
                        {
                            SKU = group.Key.SKU,
                            WarehouseId = group.Key.WarehouseId
                        }).ToList();

                    if (duplicates.Any())
                    {
                        foreach (var bulkWarehouseStockUpdateDto in duplicates)
                        {
                            errors.Add($"A duplicate SKU of {bulkWarehouseStockUpdateDto.SKU} was found for warehouse Id {bulkWarehouseStockUpdateDto.WarehouseId}");
                        }

                    }
                }
                catch (CsvMissingFieldException exception)
                {
                    CurrentRequestData.ErrorSignal.Raise(exception);
                    return GetWarehouseStockFromFileResult.Failure(new List<string>
                    {
                        "A field was missing from your import. This likely means you tried to import a simple stock list with the warehoused stock enabled."
                    });
                }
                catch (Exception exception)
                {
                    CurrentRequestData.ErrorSignal.Raise(exception);
                    return GetWarehouseStockFromFileResult.Failure(new List<string>
                    {
                        "An error occurred during import, check the logs for exception details"
                    });
                }
            }

            return errors.Any()
                ? GetWarehouseStockFromFileResult.Failure(errors)
                : GetWarehouseStockFromFileResult.Success(items);
        }