private PartialViewResult DuplicateGrantModificationViewEdit(DuplicateGrantModificationViewModel viewModel, GrantModification grantModificationToDuplicate, List <GrantAllocation> grantAllocations)
        {
            var grantModificationStatuses = HttpRequestStorage.DatabaseEntities.GrantModificationStatuses;
            var grantModificationPurposes = GrantModificationPurpose.All;

            var viewData = new DuplicateGrantModificationViewData(grantModificationStatuses, grantModificationPurposes, grantModificationToDuplicate, grantAllocations);

            return(RazorPartialView <DuplicateGrantModification, DuplicateGrantModificationViewData, DuplicateGrantModificationViewModel>(viewData, viewModel));
        }
        public PartialViewResult Duplicate(GrantModificationPrimaryKey grantModificationPrimaryKey)
        {
            var grantModificationToDuplicate = grantModificationPrimaryKey.EntityObject;

            Check.EnsureNotNull(grantModificationToDuplicate);

            //get the grant allocations for the  grant mod
            var grantAllocations = grantModificationToDuplicate.GrantAllocations.ToList();

            var viewModel = new DuplicateGrantModificationViewModel(grantModificationToDuplicate);

            return(DuplicateGrantModificationViewEdit(viewModel, grantModificationToDuplicate, grantAllocations));
        }
        public ActionResult Duplicate(GrantModificationPrimaryKey grantModificationPrimaryKey, DuplicateGrantModificationViewModel viewModel)
        {
            var originalGrantModification = grantModificationPrimaryKey.EntityObject;

            Check.EnsureNotNull(originalGrantModification);

            if (!ModelState.IsValid)
            {
                return(DuplicateGrantModificationViewEdit(viewModel, originalGrantModification, originalGrantModification.GrantAllocations.ToList()));
            }

            var grantModificationStatus = HttpRequestStorage.DatabaseEntities.GrantModificationStatuses.Single(gs => gs.GrantModificationStatusID == viewModel.GrantModificationStatusID);
            var newGrantModification    = GrantModification.CreateNewBlank(originalGrantModification.Grant, grantModificationStatus);

            viewModel.UpdateModel(newGrantModification);
            newGrantModification.GrantModificationStartDate = originalGrantModification.GrantModificationStartDate;
            newGrantModification.GrantModificationEndDate   = originalGrantModification.GrantModificationEndDate;

            if (viewModel.GrantAllocationsToDuplicate != null && viewModel.GrantAllocationsToDuplicate.Any())
            {
                foreach (var allocationID in viewModel.GrantAllocationsToDuplicate)
                {
                    var allocationToCopy =
                        HttpRequestStorage.DatabaseEntities.GrantAllocations.Single(ga =>
                                                                                    ga.GrantAllocationID == allocationID);
                    var newAllocation = GrantAllocation.CreateNewBlank(newGrantModification);
                    newAllocation.GrantAllocationName = allocationToCopy.GrantAllocationName;
                    newAllocation.StartDate           = allocationToCopy.StartDate;
                    newAllocation.EndDate             = allocationToCopy.EndDate;

                    // 10/7/20 TK - not sure we wanna copy these but going for it anyways
                    newAllocation.FederalFundCodeID = allocationToCopy.FederalFundCodeID;
                    newAllocation.OrganizationID    = allocationToCopy.OrganizationID;
                    newAllocation.DNRUplandRegionID = allocationToCopy.DNRUplandRegionID;
                    newAllocation.DivisionID        = allocationToCopy.DivisionID;
                    newAllocation.GrantManagerID    = allocationToCopy.GrantManagerID;

                    // 10/7/20 TK - make sure we setup the budgetLineItems for the new allocation
                    newAllocation.CreateAllGrantAllocationBudgetLineItemsByCostType();
                }
            }

            //need to save changes here, because otherwise the MessageForDisplay will link to an item with a negative ID, causing errors
            HttpRequestStorage.DatabaseEntities.SaveChanges();
            SetMessageForDisplay($"{FieldDefinition.GrantModification.GetFieldDefinitionLabel()} \"{UrlTemplate.MakeHrefString(newGrantModification.GetDetailUrl(), newGrantModification.GrantModificationName)}\" has been created.");
            return(new ModalDialogFormJsonResult());
        }