예제 #1
0
 public static SpecificationRevision ToEntity(this SpecRevModel aSpecRevModel, int aSpecId, short aSpecRevId)
 {
     return(new SpecificationRevision()
     {
         SpecId = aSpecId,
         SpecRevId = aSpecRevId,
         Description = aSpecRevModel.Description,
         ExternalRev = aSpecRevModel.ExternalRev,
         SamplePlan = (aSpecRevModel.SamplePlanId == 0) ? null : aSpecRevModel.SamplePlanId,
         CreatedByEmp = aSpecRevModel.EmployeeNumber,
         DateCreated = DateTime.Now.Date,
         TimeCreated = DateTime.Now.TimeOfDay
     });
 }
예제 #2
0
        public async Task <ActionResult <int> > RevUpSpec(SpecRevModel aSpecRevModel)
        {
            try
            {
                var data = await SpecService.RevUpSpec(aSpecRevModel);

                return(Ok(JsonSerializer.Serialize(data)));
            }
            catch (Exception ex)
            {
                _logger.LogError("SpecController.RevUpSpec(SpecRevModel aSpecRevModel) Not able to rev up spec revision ({specRev}). | Message: {exMessage} | StackTrace: {stackTrace}", JsonSerializer.Serialize(aSpecRevModel), ex.Message, ex.StackTrace);
                return(BadRequest(ex.Message));
            }
        }
예제 #3
0
        public static SpecRevModel ToHydratedModel(this SpecificationRevision aSpecRevEntity)
        {
            var resultModel = new SpecRevModel()
            {
                SpecId         = aSpecRevEntity.SpecId,
                InternalRev    = aSpecRevEntity.SpecRevId,
                Description    = aSpecRevEntity.Description,
                ExternalRev    = aSpecRevEntity.ExternalRev,
                SamplePlanId   = aSpecRevEntity.SamplePlan,
                SamplePlan     = (aSpecRevEntity.SamplePlanNavigation != null) ? aSpecRevEntity.SamplePlanNavigation.ToHydratedModel() : null,
                EmployeeNumber = aSpecRevEntity.CreatedByEmp,
                DateCreated    = aSpecRevEntity.DateCreated,
                TimeCreated    = aSpecRevEntity.TimeCreated,

                SubLevels = aSpecRevEntity.SpecSubLevel.ToHydratedModels()
            };

            resultModel.SamplePlan = (aSpecRevEntity.SamplePlanNavigation != null)? aSpecRevEntity.SamplePlanNavigation.ToHydratedModel() : null;

            return(resultModel);
        }
        public async Task <ActionResult> OnPost()
        {
            Message = new PopUpMessageModel();

            if (!ModelState.IsValid) //ToDo: Is this even used?
            {
                Message.Text          = ModelState.ToString();
                Message.IsMessageGood = false;

                return(Page());
            }

            if (!(await SpecDataAccess.CheckIfCodeIsUnique(SpecCode)) && CurrentSpecId == 0)
            {
                Message = new PopUpMessageModel()
                {
                    IsMessageGood = false,
                    Text          = "A specification with that code already exists"
                };

                await SetUpProperties(CurrentSpecId);

                return(Page());
            }

            var theSpec = new SpecModel()
            {
                Id   = CurrentSpecId,
                Code = SpecCode
            };

            var theSpecRev = new SpecRevModel()
            {
                //Date & Time Modified will be set at the API level.
                SpecId         = CurrentSpecId,
                Description    = SpecDescription,
                ExternalRev    = ExternalRev,
                EmployeeNumber = 941,
                SamplePlanId   = SamplePlanId
            };

            var theSubLevelList = new List <SpecSubLevelModel>(); //This will be assigned to theSpec.Sublevels at the end.

            byte subLevelSeq = 0;

            //Sublevel 1
            if (SubLevelName1 != null)
            {
                subLevelSeq++;
                theSubLevelList.Add(BuildSubLevelFromPage(subLevelSeq, SubLevelName1, ChoiceList1, IsSubLevelReq1, DefaultChoice1));
            }

            //Sublevel 2
            if (SubLevelName2 != null)
            {
                subLevelSeq++;
                theSubLevelList.Add(BuildSubLevelFromPage(subLevelSeq, SubLevelName2, ChoiceList2, IsSubLevelReq2, DefaultChoice2));
            }

            //Sublevel 3
            if (SubLevelName3 != null)
            {
                subLevelSeq++;
                theSubLevelList.Add(BuildSubLevelFromPage(subLevelSeq, SubLevelName3, ChoiceList3, IsSubLevelReq3, DefaultChoice3));
            }

            //Sublevel 4
            if (SubLevelName4 != null)
            {
                subLevelSeq++;
                theSubLevelList.Add(BuildSubLevelFromPage(subLevelSeq, SubLevelName4, ChoiceList4, IsSubLevelReq4, DefaultChoice4));
            }

            //Sublevel 5
            if (SubLevelName5 != null)
            {
                subLevelSeq++;
                theSubLevelList.Add(BuildSubLevelFromPage(subLevelSeq, SubLevelName5, ChoiceList5, IsSubLevelReq5, DefaultChoice5));
            }

            //Sublevel 6
            if (SubLevelName6 != null)
            {
                subLevelSeq++;
                theSubLevelList.Add(BuildSubLevelFromPage(subLevelSeq, SubLevelName6, ChoiceList6, IsSubLevelReq6, DefaultChoice6));
            }


            theSpecRev.SubLevels = theSubLevelList;
            var theSpecRevsTempList = new List <SpecRevModel>();

            theSpecRevsTempList.Add(theSpecRev); //This is just a list of one to hold the rev because Specification Model takes a list of revs, not just one.
            theSpec.SpecRevModels = theSpecRevsTempList;
            var theReturnedSpecId = 0;           //This is the SpecId that will be returned from the DataAccess after creating a new Spec or Reving up a Spec.

            if (CurrentSpecId == 0)              //New Spec
            {
                theReturnedSpecId = await SpecDataAccess.CreateNewHydratedSpec(theSpec);

                CurrentSpecId         = theReturnedSpecId;
                Message.Text          = "Spec created successfully.";
                Message.IsMessageGood = true;
            }
            else if (WasRevUpSelected) //Spec is being Reved-Up.
            {
                theSpec.Id        = CurrentSpecId;
                theReturnedSpecId = await SpecDataAccess.RevUpSpec(theSpecRev);

                Message.Text          = "Spec reved-up successfully";
                Message.IsMessageGood = true;
            }
            await SetUpProperties(theReturnedSpecId);

            return(Page());
        }
예제 #5
0
 public async Task <int> RevUpSpec(SpecRevModel aSpecModel)
 {
     return(await DataAccessGeneric.HttpPostRequest <int, SpecRevModel>(Config["APIAddress"] + "api/Spec/RevUpSpec", aSpecModel, _httpContextAccessor.HttpContext));
 }
예제 #6
0
        public async Task <int> RevUpSpec(SpecRevModel aSpecRevModel)
        {
            using (var transaction = await context.Database.BeginTransactionAsync())
            {
                var oldSpecRevId = await context.SpecificationRevision.Where(i => i.SpecId == aSpecRevModel.SpecId).MaxAsync(i => i.SpecRevId);

                if (oldSpecRevId == 0)
                {
                    throw new Exception("Could not find previous revision to rev-up from.");
                }
                short newSpecRevId = (short)(oldSpecRevId + 1);

                var theSpecRevEntity    = aSpecRevModel.ToEntity(aSpecRevModel.SpecId, newSpecRevId);
                var theSubLevelEntities = aSpecRevModel.SubLevels.ToEntities(aSpecRevModel.SpecId, newSpecRevId);

                await context.SpecificationRevision.AddAsync(theSpecRevEntity);

                await context.SpecSubLevel.AddRangeAsync(theSubLevelEntities);

                //Dependency needs to be null and then updated after the save changes.
                foreach (var subLevel in aSpecRevModel.SubLevels)
                {
                    var choicesToAdd = subLevel.Choices.ToEntities(aSpecRevModel.SpecId, newSpecRevId).ToList();
                    foreach (var choice in choicesToAdd)
                    {
                        choice.OnlyValidForChoice = null;
                    }
                    await context.AddRangeAsync(choicesToAdd); //Problem is here and it happens immediatly!!! <--- TODO?
                }

                await context.SaveChangesAsync();

                //Updating entities with dependents
                foreach (var subLevel in aSpecRevModel.SubLevels)
                {
                    var originalChoices = subLevel.Choices.ToList();
                    var choicesToUpdate = await context.SpecChoice.Where(i => i.SpecId == aSpecRevModel.SpecId && i.SpecRevId == theSpecRevEntity.SpecRevId && i.SubLevelSeqId == subLevel.LevelSeq).ToListAsync();

                    foreach (var choice in choicesToUpdate)
                    {
                        choice.OnlyValidForChoice = originalChoices.FirstOrDefault(i => i.ChoiceSeqId == choice.ChoiceSeqId).OnlyValidForChoiceId;
                    }

                    context.UpdateRange(choicesToUpdate);
                    await context.SaveChangesAsync();
                }


                //Default choice in the subLevel has to be null when saving the data for the first time to prevent an issue with circular dependency.  They must be updated after the first save.
                foreach (var subLevel in theSubLevelEntities)
                {
                    subLevel.DefaultChoice = aSpecRevModel.SubLevels.FirstOrDefault(i => i.LevelSeq == subLevel.SubLevelSeqId).DefaultChoice;
                }

                context.UpdateRange(theSubLevelEntities);

                await context.SaveChangesAsync();

                //Any SpecProcessAssign entry using the old spec rev needs to be flagged as inactive AND NeedsReview
                var specProcessAssignEntities = await context.SpecProcessAssign.Where(i => i.SpecId == aSpecRevModel.SpecId && i.SpecRevId == oldSpecRevId && i.Inactive == false && i.ReviewNeeded == false).ToListAsync();

                foreach (var assign in specProcessAssignEntities)
                {
                    assign.Inactive     = true;
                    assign.ReviewNeeded = true;
                }

                context.UpdateRange(specProcessAssignEntities);
                await context.SaveChangesAsync();

                await transaction.CommitAsync();

                return(aSpecRevModel.SpecId);
            }
        }