private BulkUploadViewModel BuildAssetsForDisplay(string rawCsv, int tenantId) { string[] csvRawLines = ProcessCsvLines(rawCsv); string[] csvHeader = ProcessCsvHeader(csvRawLines[0]); IList <Asset> assets = new List <Asset>(); IList <List <string> > errors = new List <List <string> >(); string[] csvLines = RemoveBlankLines(csvRawLines); for (int i = 1; i < csvLines.Length; i++) { ConvertedAsset convertedAsset = ProcessLineToAsset(csvHeader, csvLines[i], tenantId, i); assets.Add(convertedAsset.Asset); if (convertedAsset.Errors.Count > 0) { errors.Add(convertedAsset.Errors); } convertedAsset.Asset.TenantId = tenantId; convertedAsset.Asset.AssetMakeId = convertedAsset.Asset.AssetMake.LookupId; convertedAsset.Asset.CategoryId = convertedAsset.Asset.Category.LookupId; convertedAsset.Asset.WarrantyPeriodId = convertedAsset.Asset.WarrantyPeriod.LookupId; } Mapper.CreateMap <Asset, AssetViewModel>(); var assetsForView = Mapper.Map <IList <AssetViewModel> >(assets); BulkUploadViewModel response = new BulkUploadViewModel { Errors = errors, Assets = assetsForView }; return(response); }
private ConvertedAssetsDto BuildAssets(string rawCsv, int tenantId) { string[] csvRawLines = ProcessCsvLines(rawCsv); string[] csvHeader = ProcessCsvHeader(csvRawLines[0]); string[] csvLines = RemoveBlankLines(csvRawLines); List <Lookup> lookups = new List <Lookup>(); IList <Asset> assets = new List <Asset>(); IList <List <string> > errors = new List <List <string> >(); for (int i = 1; i < csvLines.Length; i++) { ConvertedAsset convertedAsset = ProcessLineToAsset(csvHeader, csvLines[i], tenantId, i); if (!string.IsNullOrWhiteSpace(convertedAsset.Asset.Model) && !string.IsNullOrWhiteSpace(convertedAsset.Asset.SerialNumber)) { assets.Add(convertedAsset.Asset); errors.Add(convertedAsset.Errors); convertedAsset.Asset.TenantId = tenantId; convertedAsset.Asset.AssetMakeId = convertedAsset.Asset.AssetMake.LookupId; convertedAsset.Asset.CategoryId = convertedAsset.Asset.Category.LookupId; convertedAsset.Asset.WarrantyPeriodId = convertedAsset.Asset.WarrantyPeriod.LookupId; LoadLookupsForAsset(convertedAsset.Asset, lookups); } } ConvertedAssetsDto response = new ConvertedAssetsDto { Errors = errors.ToList(), Assets = assets.ToList() }; return(response); }
/// <summary> /// Create and asset object that can be saved to the database for a single row in the csv file /// </summary> /// <param name="header"></param> /// <param name="line"></param> /// <returns></returns> public ConvertedAsset ProcessLineToAsset(string[] header, string line, int tenantId, int rowId) { ConvertedAsset convertedAsset = new ConvertedAsset(); convertedAsset.Errors = new List<string>(); string[] linesArray = line.Split(','); Asset asset = new Asset(); for (int i = 0; i < linesArray.Length; i++) { asset.AssetId = rowId; switch (header[i].ToLower()) { case "model": asset.Model = linesArray[i]; break; case "serialnumber": asset.SerialNumber = linesArray[i]; break; case "purchasedate": DateTime purchaseDate; if (DateTime.TryParse(linesArray[i], out purchaseDate)) { asset.PurchaseDate = purchaseDate; } else { convertedAsset.Errors.Add(string.Format(HIResources.Strings.ImportError_PurchaseDate, rowId, linesArray[i])); } break; case "warrantyperiod": string warrantyPeriodDescription = linesArray[i]; Lookup warrantyPeriod = LookupRepository.Single( x => x.Type.Description == EnumHelper.LookupTypes.WarrantyPeriod.ToString() && x.Description.Equals(warrantyPeriodDescription, StringComparison.InvariantCultureIgnoreCase)); if (warrantyPeriod == null) { LookupType type = LookupTypesRepository.Single( x => x.Description == EnumHelper.LookupTypes.WarrantyPeriod.ToString()); warrantyPeriod = new Lookup { Description = warrantyPeriodDescription, LookupTypeId = type.LookupTypeId, TenantId = tenantId, Type = type }; } asset.WarrantyPeriod = warrantyPeriod; break; case "obsolescencedate": DateTime obsolescenseDate; if (DateTime.TryParse(linesArray[i], out obsolescenseDate)) { asset.ObsolescenseDate = obsolescenseDate; } else { convertedAsset.Errors.Add(string.Format(HIResources.Strings.ImportError_ObsolescenseDate, rowId, linesArray[i])); } break; case "pricepaid": decimal pricePaid; if(decimal.TryParse(linesArray[i], out pricePaid)) { asset.PricePaid = pricePaid; } else { convertedAsset.Errors.Add(string.Format(HIResources.Strings.ImportError_PricePaid, rowId, linesArray[i])); } break; case "assetmake": string assetMakeDescription = linesArray[i]; Lookup assetMake = LookupRepository.Single( x=> x.Type.Description == EnumHelper.LookupTypes.Make.ToString() && x.Description.Equals(assetMakeDescription, StringComparison.InvariantCultureIgnoreCase)); if (assetMake == null) { LookupType type = LookupTypesRepository.Single( x => x.Description == EnumHelper.LookupTypes.Make.ToString()); assetMake = new Lookup { Description = assetMakeDescription, LookupTypeId = type.LookupTypeId, TenantId = tenantId, Type = type }; } asset.AssetMake = assetMake; break; case "category": string categoryDescription = linesArray[i]; Lookup category = LookupRepository.Single( x => x.Type.Description == EnumHelper.LookupTypes.Category.ToString() && x.Description.Equals(categoryDescription, StringComparison.InvariantCultureIgnoreCase)); if (category == null) { LookupType type = LookupTypesRepository.Single( x => x.Description == EnumHelper.LookupTypes.Category.ToString()); category = new Lookup { Description = categoryDescription, LookupTypeId = type.LookupTypeId, TenantId = tenantId, Type = type }; } asset.Category = category; break; case "locationdescription": asset.LocationDescription = linesArray[i]; break; default: break; } } if(string.IsNullOrWhiteSpace(asset.Model)) { convertedAsset.Errors.Add(string.Format(HIResources.Strings.ImportError_ModelMissing, asset.AssetId)); } if(string.IsNullOrWhiteSpace(asset.Model)) { convertedAsset.Errors.Add(string.Format(HIResources.Strings.ImportError_SerialNumberMissing, asset.AssetId)); } convertedAsset.Asset = asset; return convertedAsset; }
/// <summary> /// Create and asset object that can be saved to the database for a single row in the csv file /// </summary> /// <param name="header"></param> /// <param name="line"></param> /// <returns></returns> public ConvertedAsset ProcessLineToAsset(string[] header, string line, int tenantId, int rowId) { ConvertedAsset convertedAsset = new ConvertedAsset(); convertedAsset.Errors = new List <string>(); string[] linesArray = line.Split(','); Asset asset = new Asset(); for (int i = 0; i < linesArray.Length; i++) { asset.AssetId = rowId; switch (header[i].ToLower()) { case "model": asset.Model = linesArray[i]; break; case "serialnumber": asset.SerialNumber = linesArray[i]; break; case "purchasedate": DateTime purchaseDate; if (DateTime.TryParse(linesArray[i], out purchaseDate)) { asset.PurchaseDate = purchaseDate; } else { convertedAsset.Errors.Add(string.Format(HIResources.Strings.ImportError_PurchaseDate, rowId, linesArray[i])); } break; case "warrantyperiod": string warrantyPeriodDescription = linesArray[i]; Lookup warrantyPeriod = LookupRepository.Single( x => x.Type.Description == EnumHelper.LookupTypes.WarrantyPeriod.ToString() && x.Description.Equals(warrantyPeriodDescription, StringComparison.InvariantCultureIgnoreCase)); if (warrantyPeriod == null) { LookupType type = LookupTypesRepository.Single( x => x.Description == EnumHelper.LookupTypes.WarrantyPeriod.ToString()); warrantyPeriod = new Lookup { Description = warrantyPeriodDescription, LookupTypeId = type.LookupTypeId, TenantId = tenantId, Type = type }; } asset.WarrantyPeriod = warrantyPeriod; break; case "obsolescencedate": DateTime obsolescenseDate; if (DateTime.TryParse(linesArray[i], out obsolescenseDate)) { asset.ObsolescenseDate = obsolescenseDate; } else { convertedAsset.Errors.Add(string.Format(HIResources.Strings.ImportError_ObsolescenseDate, rowId, linesArray[i])); } break; case "pricepaid": decimal pricePaid; if (decimal.TryParse(linesArray[i], out pricePaid)) { asset.PricePaid = pricePaid; } else { convertedAsset.Errors.Add(string.Format(HIResources.Strings.ImportError_PricePaid, rowId, linesArray[i])); } break; case "assetmake": string assetMakeDescription = linesArray[i]; Lookup assetMake = LookupRepository.Single( x => x.Type.Description == EnumHelper.LookupTypes.Make.ToString() && x.Description.Equals(assetMakeDescription, StringComparison.InvariantCultureIgnoreCase)); if (assetMake == null) { LookupType type = LookupTypesRepository.Single( x => x.Description == EnumHelper.LookupTypes.Make.ToString()); assetMake = new Lookup { Description = assetMakeDescription, LookupTypeId = type.LookupTypeId, TenantId = tenantId, Type = type }; } asset.AssetMake = assetMake; break; case "category": string categoryDescription = linesArray[i]; Lookup category = LookupRepository.Single( x => x.Type.Description == EnumHelper.LookupTypes.Category.ToString() && x.Description.Equals(categoryDescription, StringComparison.InvariantCultureIgnoreCase)); if (category == null) { LookupType type = LookupTypesRepository.Single( x => x.Description == EnumHelper.LookupTypes.Category.ToString()); category = new Lookup { Description = categoryDescription, LookupTypeId = type.LookupTypeId, TenantId = tenantId, Type = type }; } asset.Category = category; break; case "locationdescription": asset.LocationDescription = linesArray[i]; break; default: break; } } if (string.IsNullOrWhiteSpace(asset.Model)) { convertedAsset.Errors.Add(string.Format(HIResources.Strings.ImportError_ModelMissing, asset.AssetId)); } if (string.IsNullOrWhiteSpace(asset.Model)) { convertedAsset.Errors.Add(string.Format(HIResources.Strings.ImportError_SerialNumberMissing, asset.AssetId)); } convertedAsset.Asset = asset; return(convertedAsset); }