public GetProductVariantsFromFileResult ValidateFile(Stream rawFile) { var items = new List<BulkStockUpdateDataTransferObject>(); var errors = new List<string>(); if (rawFile != null) { using (var file = new CsvReader(new StreamReader(rawFile))) { while (file.Read()) { if (file.FieldHeaders.Length == 4) { return GetProductVariantsFromFileResult.Failure(new List<string> { "You have attempted to import a file in the warehoused stock format into the simple stock updater." }); } string sku = file.GetField<string>(1), name = file.GetField<string>(0); string handle = name ?? sku; var pv = new BulkStockUpdateDataTransferObject { Name = name, SKU = sku }; if (sku.HasValue()) pv.SKU = sku; else errors.Add(string.Format("SKU is required for {0}.", handle)); var stockValue = file.GetField<string>(2); int stockRemaining; if (int.TryParse(stockValue, out stockRemaining)) pv.StockRemaining = stockRemaining; else errors.Add(string.Format("Stock value for {0} is not a valid number.", handle)); items.Add(pv); } } } return errors.Any() ? GetProductVariantsFromFileResult.Failure(errors) : GetProductVariantsFromFileResult.Success(items); }
public List<BulkStockUpdateDataTransferObject> ValidateAndBulkStockUpdateProductVariants(Stream rawFile, ref Dictionary<string, List<string>> parseErrors) { var items = new List<BulkStockUpdateDataTransferObject>(); if (rawFile != null) { using (var file = new CsvReader(new StreamReader(rawFile))) { while (file.Read()) { string sku = file.GetField<string>(1), name = file.GetField<string>(0); string handle = sku.HasValue() ? sku : SeoHelper.TidyUrl(name); if (parseErrors.All(x => x.Key != handle)) parseErrors.Add(handle, new List<string>()); var pv = new BulkStockUpdateDataTransferObject { Name = file.GetField<string>(0), SKU = file.GetField<string>(1) }; if (file.GetField<string>(1).HasValue()) pv.SKU = file.GetField<string>(1); else parseErrors[handle].Add("SKU is required."); if (!GeneralHelper.IsValidInput<int>(file.GetField<string>(2))) parseErrors[handle].Add("Stock value is not a valid number."); else pv.StockRemaining = file.GetField<string>(2).HasValue() ? Int32.Parse(file.GetField<string>(2)) : 0; items.Add(pv); } } } parseErrors = parseErrors.Where(x => x.Value.Any()).ToDictionary(pair => pair.Key, pair => pair.Value); return items; }