public ActionResult Topup(int?id) { if (id == null) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } StockReagent stockreagent = _uow.StockReagentRepository.Get(id); if (stockreagent == null) { return(HttpNotFound()); } var devices = _uow.DeviceRepository.Get().ToList(); var userDepartment = _uow.GetUserDepartment(); var vReagent = new StockReagentTopUpViewModel() { ReagentId = stockreagent.ReagentId, LotNumber = stockreagent.LotNumber, IdCode = stockreagent.IdCode, ReagentName = stockreagent.ReagentName, LastModifiedBy = stockreagent.LastModifiedBy, Grade = stockreagent.Grade, GradeAdditionalNotes = stockreagent.GradeAdditionalNotes, DateReceived = stockreagent.DateReceived, DateCreated = stockreagent.DateCreated, CreatedBy = stockreagent.CreatedBy, ExpiryDate = stockreagent.ExpiryDate, DateModified = stockreagent.DateModified, BalanceDevices = devices.Where(item => item.DeviceType.Equals("Balance") && item.Department == userDepartment && !item.IsArchived).ToList(), VolumetricDevices = devices.Where(item => item.DeviceType.Equals("Volumetric") && item.Department == userDepartment && !item.IsArchived).ToList() }; foreach (var invItem in stockreagent.InventoryItems) { if (stockreagent.ReagentId == invItem.StockReagent.ReagentId) { vReagent.CatalogueCode = invItem.CatalogueCode; vReagent.CertificateOfAnalysis = invItem.CertificatesOfAnalysis.Where(x => x.InventoryItem.InventoryItemId == invItem.InventoryItemId).First(); vReagent.MSDS = invItem.MSDS.Where(x => x.InventoryItem.InventoryItemId == invItem.InventoryItemId).First(); vReagent.UsedFor = invItem.UsedFor; vReagent.Department = invItem.Department; vReagent.CatalogueCode = invItem.CatalogueCode; vReagent.AllCertificatesOfAnalysis = invItem.CertificatesOfAnalysis.OrderByDescending(x => x.DateAdded).Where(x => x.InventoryItem.InventoryItemId == invItem.InventoryItemId).ToList(); vReagent.MSDSNotes = invItem.MSDS.Where(x => x.InventoryItem.InventoryItemId == invItem.InventoryItemId).First().MSDSNotes; vReagent.SupplierName = invItem.SupplierName; vReagent.NumberOfBottles = invItem.NumberOfBottles; vReagent.InitialAmount = invItem.InitialAmount == null ? invItem.InitialAmount = "N/A" : invItem.InitialAmount.Contains("Other") ? invItem.InitialAmount + " (" + invItem.OtherUnitExplained + ")" : invItem.InitialAmount; } } return(View(vReagent)); }
public ActionResult Topup([Bind(Include = "ReagentId,NewMSDSNotes,NewLotNumber,NewExpiryDate,NewDateReceived,IsExpiryDateBasedOnDays,DaysUntilExpired,CatalogueCode")] StockReagentTopUpViewModel model, HttpPostedFileBase uploadCofA, HttpPostedFileBase uploadMSDS) { var reagent = _uow.StockReagentRepository.Get(model.ReagentId); if (reagent == null) { return(HttpNotFound()); } if (!ModelState.IsValid) { //handle error var errors = ModelState.Values.SelectMany(v => v.Errors); return(View(SetTopupReagent(model, reagent))); } var user = _uow.GetCurrentUser(); var invRepo = _uow.InventoryItemRepository; var department = user.Department; var numOfItems = invRepo.Get().Count(); model.NumberOfBottles = reagent.InventoryItems.Where(item => item.CatalogueCode.Equals(reagent.CatalogueCode)).First().NumberOfBottles; //upload CofA and MSDS if (uploadCofA != null) { var cofa = new CertificateOfAnalysis() { FileName = uploadCofA.FileName, ContentType = uploadCofA.ContentType, DateAdded = DateTime.Today }; using (var reader = new System.IO.BinaryReader(uploadCofA.InputStream)) { cofa.Content = reader.ReadBytes(uploadCofA.ContentLength); } //model.CertificateOfAnalysis = cofa; reagent.InventoryItems.Where(item => item.CatalogueCode.Equals(reagent.CatalogueCode)).First().CertificatesOfAnalysis.Add(cofa); } if (uploadMSDS != null) { var msds = new MSDS() { FileName = uploadMSDS.FileName, ContentType = uploadMSDS.ContentType, DateAdded = DateTime.Today, MSDSNotes = model.MSDSNotes }; using (var reader = new System.IO.BinaryReader(uploadMSDS.InputStream)) { msds.Content = reader.ReadBytes(uploadMSDS.ContentLength); } //model.MSDS = msds; //reagent.InventoryItems.Where(item => item.CatalogueCode.Equals(model.CatalogueCode)).First().MSDS.Add(msds); var msdsRepo = _uow.MSDSRepository; var oldSDS = msdsRepo.Get() .Where(item => item.InventoryItem.StockReagent != null && item.InventoryItem.StockReagent.CatalogueCode == reagent.CatalogueCode) .First(); oldSDS.Content = msds.Content; oldSDS.FileName = msds.FileName; oldSDS.ContentType = msds.ContentType; oldSDS.DateAdded = DateTime.Today; msdsRepo.Update(oldSDS); } //write record(s) to the db var result = CheckModelState.Invalid;//default to invalid to expect the worst //set new propeties to create new entity based on old StockReagent newReagent = null; if (model.NumberOfBottles > 1) { for (int i = 1; i <= model.NumberOfBottles; i++) { newReagent = new StockReagent() { ExpiryDate = model.NewExpiryDate, IdCode = department.Location.LocationCode + "-" + (numOfItems + 1) + "-" + model.NewLotNumber + "/" + i,//append number of bottles LotNumber = model.NewLotNumber, DateCreated = DateTime.Today, CreatedBy = user.UserName, CatalogueCode = reagent.CatalogueCode, Grade = reagent.Grade, GradeAdditionalNotes = reagent.GradeAdditionalNotes, DateModified = null, DaysUntilExpired = model.DaysUntilExpired, LastModifiedBy = null, ReagentName = reagent.ReagentName, //InventoryItems = reagent.InventoryItems, DateOpened = null, DateReceived = model.NewDateReceived }; //reagent.InventoryItems.Add(reagent.InventoryItems.Where(x => x.CatalogueCode.Equals(model.CatalogueCode)).First()); _uow.StockReagentRepository.Create(newReagent); result = _uow.Commit(); //creation wasn't successful - break from loop and let switch statement handle the problem if (result != CheckModelState.Valid) { break; } } } else { newReagent = new StockReagent() { ExpiryDate = model.NewExpiryDate, IdCode = department.Location.LocationCode + "-" + (numOfItems + 1) + "-" + model.NewLotNumber,//only 1 bottle, no need to concatenate LotNumber = model.NewLotNumber, DateCreated = DateTime.Today, CreatedBy = user.UserName, CatalogueCode = reagent.CatalogueCode, Grade = reagent.Grade, GradeAdditionalNotes = reagent.GradeAdditionalNotes, DateModified = null, DaysUntilExpired = model.DaysUntilExpired, LastModifiedBy = null, ReagentName = reagent.ReagentName, InventoryItems = reagent.InventoryItems, DateOpened = null, DateReceived = model.NewDateReceived }; //reagent.InventoryItems.Add(inventoryItem); _uow.StockReagentRepository.Create(newReagent); result = _uow.Commit(); } switch (result) { case CheckModelState.Invalid: ModelState.AddModelError("", "The creation of " + reagent.ReagentName + " failed. Please double check all inputs and try again."); return(View(SetTopupReagent(model, reagent))); case CheckModelState.DataError: ModelState.AddModelError("", "Unable to save changes. Try again, and if the problem persists please contact your system administrator."); return(View(SetTopupReagent(model, reagent))); case CheckModelState.Error: ModelState.AddModelError("", "There was an error. Please try again."); return(View(SetTopupReagent(model, reagent))); case CheckModelState.Valid: //save pressed return(RedirectToAction("Index")); default: ModelState.AddModelError("", "An unknown error occurred."); return(View(SetTopupReagent(model, reagent))); } }