public EditCostAuthorityObligationRequestsViewModel(ProjectFirmaModels.Models.ObligationRequest obligationRequest)
 {
     HasCostAuthorityJsonListWithoutFakeRow = false;
     CostAuthorityJsonList = new List <CostAuthorityJson> {
         new CostAuthorityJson()
     };
 }
        public ObligationRequestDetailViewData(FirmaSession currentFirmaSession,
                                               ProjectFirmaModels.Models.ObligationRequest obligationRequest,
                                               bool userCanInteractWithSubmissionNotes,
                                               EntityNotesViewData obligationRequestNotesViewData) : base(currentFirmaSession)
        {
            PageTitle         = $"Obligation Request: {obligationRequest.GetObligationRequestNumber()}";
            EntityName        = "Obligation Request Detail";
            ObligationRequest = obligationRequest;
            IndexUrl          = SitkaRoute <ObligationRequestController> .BuildUrlFromExpression(c => c.ObligationRequestIndex());

            EditObligationRequestBasicsUrl = SitkaRoute <ObligationRequestController> .BuildUrlFromExpression(c => c.Edit(obligationRequest));

            EditRequisitionInformationUrl = SitkaRoute <ObligationRequestController> .BuildUrlFromExpression(c => c.EditRequisitionInformation(obligationRequest));

            UserCanEditObligationRequest       = new ObligationRequestCreateFeature().HasPermissionByFirmaSession(currentFirmaSession);
            UserCanEditRequisitionInformation  = new ObligationRequestCreateFeature().HasPermissionByFirmaSession(currentFirmaSession);
            UserCanInteractWithSubmissionNotes = userCanInteractWithSubmissionNotes;
            ObligationRequestNotesViewData     = obligationRequestNotesViewData;

            // Potential Matches
            PotentialMatches = obligationRequest.CostAuthorityObligationRequests
                               .SelectMany(x => x.CostAuthorityObligationRequestPotentialObligationNumberMatches).ToList();
            PotentialMatchesGridName    = "potentialMatchesGrid";
            PotentialMatchesGridSpec    = new CostAuthorityObligationRequestPotentialObligationNumberMatchGridSpec(currentFirmaSession);
            PotentialMatchesGridDataUrl = SitkaRoute <ObligationRequestController> .BuildUrlFromExpression(cac => cac.PotentialObligationRequestMatchesJsonData(obligationRequest));

            ShowPotentialMatches = obligationRequest.ObligationNumber == null &&
                                   obligationRequest.Agreement == null &&
                                   PotentialMatches.Any();

            var costAuthorityIDList = obligationRequest.Agreement != null
                ? obligationRequest.Agreement.AgreementCostAuthorities
                                      .Select(x => x.CostAuthorityID).ToList()
                : new List <int>();

            // Match Status
            MatchStatus = GetMatchStatus(obligationRequest, PotentialMatches);

            // Unmatch Dialog
            string unmatchUrl = SitkaRoute <ObligationRequestController> .BuildUrlFromExpression(x => x.ConfirmObligationRequestUnmatch(obligationRequest));

            var extraCssClassesForAButton = new List <string>()
            {
                "btn", "btn-sm", "btn-firma"
            };

            UnmatchObligationRequestButtonHtml =
                ModalDialogFormHelper.MakeConfirmDialogLink("Unmatch", unmatchUrl, "Unmatch Obligation Request", "Unmatch", extraCssClassesForAButton, true);

            CostAuthorityObligationRequestGridName = "costAuthorityObligationRequestGrid";
            CostAuthorityObligationRequestGridSpec = new CostAuthorityObligationRequestGridSpec(CurrentFirmaSession, obligationRequest.ObligationRequestStatus == ObligationRequestStatus.Draft, costAuthorityIDList)
            {
                ObjectNameSingular  = $"{FieldDefinitionEnum.CostAuthorityWorkBreakdownStructure.ToType().GetFieldDefinitionLabel()} associated with {FieldDefinitionEnum.ObligationRequest.ToType().GetFieldDefinitionLabel()} {obligationRequest.ObligationRequestID.ToString("D4")}",
                ObjectNamePlural    = $"{FieldDefinitionEnum.CostAuthorityWorkBreakdownStructure.ToType().GetFieldDefinitionLabelPluralized()} associated with {FieldDefinitionEnum.ObligationRequest.ToType().GetFieldDefinitionLabel()} {obligationRequest.ObligationRequestID.ToString("D4")}",
                SaveFiltersInCookie = true
            };
            CostAuthorityObligationRequestGridDataUrl = SitkaRoute <ObligationRequestController> .BuildUrlFromExpression(cac => cac.CostAuthorityObligationRequestsJsonData(obligationRequest));
        }
 /// <summary>
 /// Constructor for building a new object with MinimalConstructor required fields, using objects whenever possible
 /// </summary>
 public ObligationRequestSubmissionNote(ObligationRequest obligationRequest, string note, DateTime createDate) : this()
 {
     // Mark this as a new object by setting primary key with special value
     this.ObligationRequestSubmissionNoteID = ModelObjectHelpers.MakeNextUnsavedPrimaryKeyValue();
     this.ObligationRequestID = obligationRequest.ObligationRequestID;
     this.ObligationRequest   = obligationRequest;
     obligationRequest.ObligationRequestSubmissionNotes.Add(this);
     this.Note       = note;
     this.CreateDate = createDate;
 }
 /// <summary>
 /// Constructor for building a new object with MinimalConstructor required fields, using objects whenever possible
 /// </summary>
 public CostAuthorityObligationRequest(CostAuthority costAuthority, ObligationRequest obligationRequest) : this()
 {
     // Mark this as a new object by setting primary key with special value
     this.CostAuthorityObligationRequestID = ModelObjectHelpers.MakeNextUnsavedPrimaryKeyValue();
     this.CostAuthorityID = costAuthority.CostAuthorityID;
     this.CostAuthority   = costAuthority;
     costAuthority.CostAuthorityObligationRequests.Add(this);
     this.ObligationRequestID = obligationRequest.ObligationRequestID;
     this.ObligationRequest   = obligationRequest;
     obligationRequest.CostAuthorityObligationRequests.Add(this);
 }
 public void UpdateModel(ProjectFirmaModels.Models.ObligationRequest obligationRequest, FirmaSession currentFirmaSession)
 {
     obligationRequest.AgreementID           = AgreementID;
     obligationRequest.RequisitionNumber     = RequisitionNumber;
     obligationRequest.RequisitionDate       = RequisitionDate;
     obligationRequest.ContractSpecialist    = ContractSpecialist;
     obligationRequest.AssignedDate          = AssignedDate;
     obligationRequest.DateSentForDeptReview = DateSentForDeptReview;
     obligationRequest.DCApprovalDate        = DCApprovalDate;
     obligationRequest.ActualAwardDate       = ActualAwardDate;
 }
 public EditRequisitionInformationViewModel(ProjectFirmaModels.Models.ObligationRequest obligationRequest)
 {
     AgreementID           = obligationRequest.AgreementID;
     RequisitionNumber     = obligationRequest.RequisitionNumber;
     RequisitionDate       = obligationRequest.RequisitionDate;
     ContractSpecialist    = obligationRequest.ContractSpecialist;
     AssignedDate          = obligationRequest.AssignedDate;
     DateSentForDeptReview = obligationRequest.DateSentForDeptReview;
     DCApprovalDate        = obligationRequest.DCApprovalDate;
     ActualAwardDate       = obligationRequest.ActualAwardDate;
 }
 public EditObligationRequestViewModel(ProjectFirmaModels.Models.ObligationRequest obligationRequest)
 {
     IsModification            = obligationRequest.IsModification;
     AgreementID               = obligationRequest.AgreementID;
     ContractTypeID            = obligationRequest.ContractTypeID;
     ObligationRequestStatusID = obligationRequest.ObligationRequestStatusID;
     DescriptionOfNeed         = obligationRequest.DescriptionOfNeed;
     ReclamationObligationRequestFundingPriorityID = obligationRequest.ReclamationObligationRequestFundingPriorityID;
     TargetAwardDate     = obligationRequest.TargetAwardDate;
     Palt                = obligationRequest.PALT;
     TargetSubmittalDate = obligationRequest.TargetSubmittalDate;
 }
Пример #8
0
        public static HtmlString EditCostAuthorityObligationRequestsButton(this ProjectFirmaModels.Models.ObligationRequest obligationRequest)
        {
            var disabledState     = obligationRequest.ObligationRequestStatus != ObligationRequestStatus.Draft ? ModalDialogFormHelper.DisabledState.Disabled : ModalDialogFormHelper.DisabledState.NotDisabled;
            var disabledHoverText = disabledState == ModalDialogFormHelper.DisabledState.Disabled
                ? "You cannot Add Obligation Item Budget Projections because this Obligation Request is not in a Draft state."
                : null;

            return(ModalDialogFormHelper.ModalDialogFormLink(MakeProjectNewObligationsText(), EditCostAuthorityObligationRequestsUrl(obligationRequest),
                                                             $"Create new Obligation Item Budget Projections", 1100, "Save",
                                                             "Cancel",
                                                             new List <string> {
                "btn", "btn-firma"
            }, null, null, disabledState, disabledHoverText));
        }
Пример #9
0
 public EditCostAuthorityObligationRequestViewData(
     ProjectFirmaModels.Models.FirmaPage projectStatusFirmaPage
     , FirmaSession currentFirmaSession
     , ProjectFirmaModels.Models.ObligationRequest obligationRequest
     , List <ProjectFirmaModels.Models.Organization> allOrganizations
     , List <Person> allPeople
     , List <ProjectFirmaModels.Models.BudgetObjectCode> allBudgetObjectCodes
     ) : base(currentFirmaSession)
 {
     ProjectStatusFirmaPage = new ViewPageContentViewData(projectStatusFirmaPage, currentFirmaSession);
     ObligationRequest      = obligationRequest;
     Organizations          = allOrganizations.OrderBy(x => x.GetDisplayName()).ToSelectListWithEmptyFirstRow(x => x.OrganizationID.ToString(), x => x.GetDisplayName());
     People            = allPeople.OrderBy(x => x.GetFullNameFirstLast()).ToSelectListWithEmptyFirstRow(x => x.PersonID.ToString(), x => x.GetFullNameFirstLast());
     BudgetObjectCodes = allBudgetObjectCodes.OrderBy(x => x.GetDisplayName()).ToSelectListWithEmptyFirstRow(x => x.BudgetObjectCodeID.ToString(), x => x.GetDisplayName());
 }
 public void UpdateModel(ProjectFirmaModels.Models.ObligationRequest obligationRequest, FirmaSession currentFirmaSession)
 {
     if (IsModification)
     {
         obligationRequest.AgreementID = AgreementID;
     }
     else
     {
         obligationRequest.AgreementID = null;
     }
     obligationRequest.IsModification            = IsModification;
     obligationRequest.ContractTypeID            = ContractTypeID;
     obligationRequest.ObligationRequestStatusID = ObligationRequestStatusID;
     obligationRequest.DescriptionOfNeed         = DescriptionOfNeed;
     obligationRequest.ReclamationObligationRequestFundingPriorityID = ReclamationObligationRequestFundingPriorityID;
     obligationRequest.TargetAwardDate     = TargetAwardDate;
     obligationRequest.PALT                = Palt;
     obligationRequest.TargetSubmittalDate = TargetSubmittalDate;
 }
        /// <summary>
        /// I'm trying to be thorough here about possibilities, but if this proves overcomplicated don't hesitate to do something different than this.
        /// -- SLG 7/30/2020
        /// </summary>
        /// <param name="obligationRequest"></param>
        /// <param name="potentialMatches"></param>
        /// <returns></returns>
        private static ObligationRequestMatchStatus GetMatchStatus(ProjectFirmaModels.Models.ObligationRequest obligationRequest,
                                                                   List <CostAuthorityObligationRequestPotentialObligationNumberMatch> potentialMatches)
        {
            bool hasExistingMatch            = obligationRequest.ObligationNumber != null;
            bool hasAnyPotentialMatches      = potentialMatches.Any();
            bool hasExactlyOnePotentialMatch = potentialMatches.Count == 1;
            bool hasSeveralPotentialMatches  = potentialMatches.Count > 1;

            if (!hasExistingMatch && !hasAnyPotentialMatches)
            {
                return(ObligationRequestMatchStatus.UnmatchedNoMatchesAvailable);
            }

            if (!hasExistingMatch && hasAnyPotentialMatches)
            {
                return(ObligationRequestMatchStatus.UnmatchedMatchesAvailable);
            }

            if (hasExistingMatch && !hasAnyPotentialMatches)
            {
                // I believe MJ has seen this during testing, so we'll handle it.
                return(ObligationRequestMatchStatus.MatchedButNoCorrespondingPotentialMatches);
            }

            if (hasExistingMatch && hasExactlyOnePotentialMatch)
            {
                // Make sure that if there is only one match, and the ObligationRequest it already matched,
                // it is to this particular match.
                Check.Ensure(obligationRequest.ObligationNumberID == potentialMatches.Single().ObligationNumberID);
                return(ObligationRequestMatchStatus.MatchedToOnlyAvailableMatch);
            }

            if (hasExistingMatch && hasSeveralPotentialMatches)
            {
                return(ObligationRequestMatchStatus.MatchedToOneOfSeveralPotentialMatches);
            }

            throw new Exception($"Unhandled combination of match conditions. hasExistingMatch: {hasExistingMatch.ToString()} matchCount: {potentialMatches.Count}");
        }
        public EditCostAuthorityObligationRequestsViewData(
            ProjectFirmaModels.Models.FirmaPage editCostAuthorityObligationRequestsFirmaPage
            , FirmaSession currentFirmaSession
            , List <ProjectFirmaModels.Models.CostAuthority> allCostAuthorities
            , ProjectFirmaModels.Models.ObligationRequest obligationRequest
            , List <ProjectFirmaModels.Models.Organization> allOrganizations
            , List <Person> allPeople
            , List <ProjectFirmaModels.Models.BudgetObjectCode> allBudgetObjectCodes
            ) : base(currentFirmaSession, editCostAuthorityObligationRequestsFirmaPage)
        {
            var costAuthoritiesToOmit =
                obligationRequest.CostAuthorityObligationRequests.Select(x => x.CostAuthorityID);
            var reclamationCostAuthoritiesToUse = allCostAuthorities
                                                  .Where(x => !costAuthoritiesToOmit.Contains(x.CostAuthorityID)).ToList();

            CostAuthorities = reclamationCostAuthoritiesToUse
                              .OrderBy(x => x.CostAuthorityWorkBreakdownStructure)
                              .ToSelectListWithEmptyFirstRow(x => x.CostAuthorityID.ToString(), x => x.CostAuthorityWorkBreakdownStructure, "Select CAWBS");
            CostAuthorityJsonList = new CostAuthorityJsonList(reclamationCostAuthoritiesToUse.Select(x => new CostAuthorityJson(x)).ToList());
            EditCostAuthorityObligationRequestsFirmaPage = new ViewPageContentViewData(editCostAuthorityObligationRequestsFirmaPage, currentFirmaSession);
            Organizations     = allOrganizations.OrderBy(x => x.GetDisplayName()).ToSelectListWithEmptyFirstRow(x => x.OrganizationID.ToString(), x => x.GetDisplayName());
            People            = allPeople.OrderBy(x => x.GetFullNameFirstLast()).ToSelectListWithEmptyFirstRow(x => x.PersonID.ToString(), x => x.GetFullNameFirstLast());
            BudgetObjectCodes = allBudgetObjectCodes.OrderBy(x => x.GetDisplayName()).ToSelectListWithEmptyFirstRow(x => x.BudgetObjectCodeID.ToString(), x => x.GetDisplayName());
        }
 /// <summary>
 /// Creates a "blank" object of this type and populates primitives with defaults
 /// </summary>
 public static CostAuthorityObligationRequest CreateNewBlank(CostAuthority costAuthority, ObligationRequest obligationRequest)
 {
     return(new CostAuthorityObligationRequest(costAuthority, obligationRequest));
 }
Пример #14
0
 private static string EditCostAuthorityObligationRequestsUrl(this ProjectFirmaModels.Models.ObligationRequest obligationRequest)
 {
     return(SitkaRoute <ObligationRequestController> .BuildUrlFromExpression(x => x.EditCostAuthorityObligationRequests(obligationRequest.PrimaryKey)));
 }
 /// <summary>
 /// Creates a "blank" object of this type and populates primitives with defaults
 /// </summary>
 public static ObligationRequestSubmissionNote CreateNewBlank(ObligationRequest obligationRequest)
 {
     return(new ObligationRequestSubmissionNote(obligationRequest, default(string), default(DateTime)));
 }
 public static void DeleteObligationRequest(this IQueryable <ObligationRequest> obligationRequests, ObligationRequest obligationRequestToDelete)
 {
     DeleteObligationRequest(obligationRequests, new List <ObligationRequest> {
         obligationRequestToDelete
     });
 }
Пример #17
0
 public ConfirmObligationRequestUnmatchViewData(FirmaSession currentFirmaSession,
                                                ProjectFirmaModels.Models.ObligationRequest obligationRequest) : base(currentFirmaSession)
 {
     this.ObligationRequest = obligationRequest;
 }