Ejemplo n.º 1
0
        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));
        }
Ejemplo n.º 2
0
        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)));
            }
        }