public IResult ImportMaterialData(IFormFile uploadFile) { var importedFileResult = new ImportedData(); if (Path.GetExtension(uploadFile.FileName) == ".csv") { importedFileResult = new CsvFileReader().ProcessFile(uploadFile.OpenReadStream()); } var result = _materialManagerService.ImportMaterials(importedFileResult); return(result); }
internal void InitReadData() { while (NextRow()) { var newRow = new T(); foreach (var column in Columns) { var value = TryReadColumnInfo(column.Index); SetColumnValue(newRow, column, value); } ImportedData.Add(newRow); } }
/// <summary> /// Map imported row key value pair to material model /// </summary> /// <param name="dataToImport"></param> /// <returns></returns> private List <Material> MapImportedMaterialToModel(ImportedData dataToImport) { var emailClaim = ((ClaimsIdentity)_principal.Identity).GetActiveUserId(); var materials = new List <Material>(); if (dataToImport.RowData != null && dataToImport.RowData.Any()) { materials = dataToImport.RowData.Select(t => { var materialModel = new Material { Materialnumber = t["Material"], Description = t["Description"], ManufactorPartNumber = t["Manufacturer Part no"], ManufactorName = t["Manufacturer Name"], Owner = t["Eier"], License = t["Lisens"], Type = t["Type"], GrossWeight = t["Gross Weight"], SizeDimension = t["Size/dimens."], Quantity = t["Antall på lager pr dato"], IsSparePart = false, PartProperties = new List <PartProperty>(), Documents = new List <ObjectId>(), TechnicalSpecifications = new List <TechnicalSpecification>(), IsActive = true, CreatedBy = emailClaim, CreatedDate = GenericHelper.CurrentDate, ModifiedBy = emailClaim, ModifiedDate = GenericHelper.CurrentDate }; return(materialModel); }).ToList(); } return(materials); }
/// <summary> /// Import material data /// </summary> /// <param name="dataToImport"></param> /// <returns></returns> public IResult ImportMaterials(ImportedData dataToImport) { var result = new Result { Operation = Operation.Create, Status = Status.Success }; try { // 1. Map the incoming data to models var mappedMaterialModels = MapImportedMaterialToModel(dataToImport); // 2. Get the list of new material number(material) as whole. var newMaterialNums = new List <string>(); if (mappedMaterialModels.Any()) { newMaterialNums = mappedMaterialModels.Select(t => t.Materialnumber).ToList(); } // 3. Search the above new material numbers in db and find out the already exist in db. var materialNumsDb = new List <string>(); if (newMaterialNums.Any()) { materialNumsDb = GetAlreadyAddedMaterialNumber(newMaterialNums); } // 4. Prepare seperate list for items to insert and update collection List <Material> materialsForUpdate; List <Material> materialsForInsert; if (materialNumsDb != null && materialNumsDb.Any()) { materialsForInsert = mappedMaterialModels.Where(t => !materialNumsDb.Contains(t.Materialnumber)) .ToList(); materialsForUpdate = mappedMaterialModels.Where(t => materialNumsDb.Contains(t.Materialnumber)) .ToList(); } else { materialsForInsert = mappedMaterialModels; materialsForUpdate = new List <Material>(); } // 5. Insert the material in bulk to db except the already exist if (materialsForInsert.Any()) { _materialRepository.InsertMany(materialsForInsert); } // 6. Update the Already exist materials if (materialsForUpdate.Any()) { materialsForUpdate.ForEach(m => { var updateDefinition = Builders <Material> .Update. Set(x => x.Description, m.Description). Set(x => x.ManufactorPartNumber, m.ManufactorPartNumber). Set(x => x.ManufactorName, m.ManufactorName). Set(x => x.Owner, m.Owner). Set(x => x.License, m.License). Set(x => x.Type, m.Type). Set(x => x.GrossWeight, m.GrossWeight). Set(x => x.SizeDimension, m.SizeDimension). Set(x => x.Quantity, m.Quantity). Set(x => x.ModifiedDate, GenericHelper.CurrentDate); _materialRepository.UpdateOne(t => t.Materialnumber.Equals(m.Materialnumber), updateDefinition); }); } // 7. Map the result with viewmodel var importResult = new MaterialImportResult { InsertedCount = materialsForInsert.Count, UpdatedCount = materialsForUpdate.Count }; result.Body = importResult; } catch (Exception e) { result.Message = e.Message; result.Status = Status.Fail; } return(result); }