예제 #1
0
        public ActionResult Confirm(int id)
        {
            var dataCollection = DataCollectionRepository.Get(id);

            if (dataCollection != null)
            {
                if (VerifyUserRoleWithDataCollectionStatus(dataCollection))
                {
                    var vm = new ApprovalConfirmationViewModel {
                        DataCollectionId = id
                    };
                    PopulateModel(vm, dataCollection, HashCodeRepository.GetByDataCollectionId(dataCollection.Id));
                    return(View(vm));
                }
                return(View("DataCollectionInvalidState"));
            }
            return(View("DataCollectionNotFound"));
        }
예제 #2
0
        public ActionResult SubmitForReapproval(ApprovalConfirmationViewModel vm)
        {
            var collection = DataCollectionRepository.Get(vm.DataCollectionId);

            if (collection == null)
            {
                return(View("DataCollectionNotFound"));
            }
            if (!VerifyUserRoleWithDataCollectionStatus(collection))
            {
                return(View("DataCollectionInvalidState"));
            }

            var hashCode = HashCodeRepository.GetByDataCollectionId(collection.Id);

            PopulateModel(vm, collection, hashCode);

            if (vm.IsChanged)
            {
                // TODO: You can use the URDMS.Integration solution to handle approvals in a robust manner or just alter the database directly as in the
                // commented code below.
                Bus.Send <SubmitForSecondaryReApproval>(m =>
                {
                    m.DataCollectionId = collection.Id;
                    m.ApprovedBy       = CurrentUser.CurtinId;
                    m.ApprovedOn       = DateTime.Now;
                });

                //collection.CurrentState = new DataCollectionState(DataCollectionStatus.RecordAmended, DateTime.Now);
                //DataCollectionRepository.Save(collection);

                // clear out hashcode at this point.
                this.HashCodeRepository.Delete(hashCode);
            }

            return(RedirectToAction("Index"));
        }
예제 #3
0
 private void PopulateModel(ApprovalConfirmationViewModel vm, DataCollection collection, DataCollectionHashCode hashCode)
 {
     vm.IsChanged = hashCode != null && hashCode.IsDifferentHashCode(collection);
     vm.State     = collection.CurrentState.State;
     vm.Title     = collection.Title;
 }
예제 #4
0
 public ActionResult CancelConfirmation(ApprovalConfirmationViewModel vm)
 {
     return(RedirectToAction("Index"));
 }
예제 #5
0
        public ActionResult Confirm(ApprovalConfirmationViewModel vm)
        {
            var collection = DataCollectionRepository.Get(vm.DataCollectionId);

            if (collection == null)
            {
                return(View("DataCollectionNotFound"));
            }

            if (!VerifyUserRoleWithDataCollectionStatus(collection))
            {
                return(View("DataCollectionInvalidState"));
            }

            var hashCode = HashCodeRepository.GetByDataCollectionId(collection.Id);

            PopulateModel(vm, collection, hashCode);

            switch (vm.State)
            {
            case DataCollectionStatus.Submitted:
                if (!vm.IsQaApproved)
                {
                    ModelState.AddModelError("IsQaApproved", "Please confirm approval");
                    return(View(vm));
                }

                // TODO: You can use the URDMS.Integration solution to handle approvals in a robust manner or just alter the database directly as in the
                // commented code below.
                Bus.Send <SubmitForSecondaryApproval>(m =>
                {
                    m.DataCollectionId = collection.Id;
                    m.ApprovedBy       = CurrentUser.CurtinId;
                    m.ApprovedOn       = DateTime.Now;
                });

                //collection.CurrentState = new DataCollectionState(DataCollectionStatus.QaApproved, DateTime.Now);
                //DataCollectionRepository.Save(collection);

                vm.ProposedState = DataCollectionStatus.QaApproved;
                return(View("Approved", vm));

            case DataCollectionStatus.QaApproved:
            case DataCollectionStatus.RecordAmended:
                if (!vm.DoesNotViolateAgreements || !vm.DoesNotViolateConfidentialityAndEthics)
                {
                    if (!vm.DoesNotViolateAgreements)
                    {
                        ModelState.AddModelError("DoesNotViolateAgreements", "Please confirm that agreements are not violated");
                    }
                    if (!vm.DoesNotViolateConfidentialityAndEthics)
                    {
                        ModelState.AddModelError("DoesNotViolateConfidentialityAndEthics", "Please confirm that confidentiality and ethics requirements are met");
                    }
                    return(View(vm));
                }
                // TODO: You can use the URDMS.Integration solution to handle approvals in a robust manner or just alter the database directly as in the
                // commented code below.
                Bus.Send <SubmitForFinalApproval>(m =>
                {
                    m.DataCollectionId = collection.Id;
                    m.ApprovedBy       = CurrentUser.CurtinId;
                    m.ApprovedOn       = DateTime.Now;
                });

                //collection.CurrentState = new DataCollectionState(DataCollectionStatus.SecondaryApproved, DateTime.Now);
                //DataCollectionRepository.Save(collection);

                vm.ProposedState = DataCollectionStatus.SecondaryApproved;
                // save hashcode to capture the snapshot of the data
                this.HashCodeRepository.SaveByDataCollection(collection);
                return(View("Approved", vm));

            case DataCollectionStatus.SecondaryApproved:
            {
                if (!vm.IsPublicationApproved)
                {
                    ModelState.AddModelError("IsPublicationApproved", "Please confirm publication approval");
                    return(View(vm));
                }
                // TODO: You can use the URDMS.Integration solution to handle approvals in a robust manner or just alter the database directly as in the
                // commented code below.
                Bus.Send <PublishDataCollection>(m =>
                    {
                        m.DataCollectionId = collection.Id;
                        m.ApprovedBy       = CurrentUser.CurtinId;
                        m.ApprovedOn       = DateTime.Now;
                    });

                //collection.CurrentState = new DataCollectionState(DataCollectionStatus.Publishing, DateTime.Now);
                //DataCollectionRepository.Save(collection);

                vm.ProposedState = DataCollectionStatus.Publishing;
            }

                return(View("Approved", vm));

            default:
                throw new InvalidOperationException();
            }
        }