From adc08315de4036365b518d3e80db0a3d62dbceb5 Mon Sep 17 00:00:00 2001 From: Patrick Segura <95709965+patrickseguraoddball@users.noreply.github.com> Date: Fri, 19 Jan 2024 10:37:07 -0600 Subject: [PATCH] [EASI-3685] - Beneficiary removal frequency (#893) * WIP Frequency Types for Plan Payments * Rename migration * [EASI-3713] - Part 1 - FrequencyForm Component and anticipatedPaymentFrequency Implementation (#869) * Added custom form component for frequency type * Fized issue with readonlysection component * Added util functions for readonlysection to maintain order with additional info * Updated snaps * Updated cypress test * Rename migration * Revert "[EASI-3713] - Frequency Updates FE Part 2 (#872)" This reverts commit d8f444802f48fb93989874be5f877c027b16b9b1. * Renamed migration * [EASI-3713] - Re-Approve - Frequency updates fe part 2 (#881) * Added custom form component for frequency type * Fized issue with readonlysection component * Added util functions for readonlysection to maintain order with additional info * Updated snaps * Updated cypress test * Init work for P&P frequency updates * Updatd cypress test * Rename migration * Revert "Merge branch 'EASI-3713/frequency-updates-FE' into EASI-3713/frequency-updates-FE-Part-2" This reverts commit 0680b400f65c190f8c97ecde032542197f9c03cc, reversing changes made to a31f9e559a6e7c171a6e3f54701975e21c938e09. * Revert "Revert "Merge branch 'EASI-3713/frequency-updates-FE' into EASI-3713/frequency-updates-FE-Part-2"" This reverts commit 17393c9ab0e03a1c97a8774ef6f7d3df119362f5. * Rename migration * update snaps * renamed Update_Frequency_Type.sql migration version from 124 to 126 * Fixed migration merge issue with order --------- Co-authored-by: Gary Zhao Co-authored-by: Gary Zhao * [EASI-3713] - Frequency Updates Part 3 (#882) * Added custom form component for frequency type * Fized issue with readonlysection component * Added util functions for readonlysection to maintain order with additional info * Updated snaps * Updated cypress test * Init work for P&P frequency updates * Updatd cypress test * Rename migration * Revert "Merge branch 'EASI-3713/frequency-updates-FE' into EASI-3713/frequency-updates-FE-Part-2" This reverts commit 0680b400f65c190f8c97ecde032542197f9c03cc, reversing changes made to a31f9e559a6e7c171a6e3f54701975e21c938e09. * Revert "Revert "Merge branch 'EASI-3713/frequency-updates-FE' into EASI-3713/frequency-updates-FE-Part-2"" This reverts commit 17393c9ab0e03a1c97a8774ef6f7d3df119362f5. * Rename migration * update snaps * renamed Update_Frequency_Type.sql migration version from 124 to 126 * Fixed migration merge issue with order * Init beneficiary frequency work * Added backend work for new frequency type * Added form work for beneficiary frequency type * Updated tests --------- Co-authored-by: Gary Zhao Co-authored-by: Gary Zhao * [EASI-3713] - Frequency Updates Part 4 (#883) * Added custom form component for frequency type * Fized issue with readonlysection component * Added util functions for readonlysection to maintain order with additional info * Updated snaps * Updated cypress test * Init work for P&P frequency updates * Updatd cypress test * Rename migration * Revert "Merge branch 'EASI-3713/frequency-updates-FE' into EASI-3713/frequency-updates-FE-Part-2" This reverts commit 0680b400f65c190f8c97ecde032542197f9c03cc, reversing changes made to a31f9e559a6e7c171a6e3f54701975e21c938e09. * Revert "Revert "Merge branch 'EASI-3713/frequency-updates-FE' into EASI-3713/frequency-updates-FE-Part-2"" This reverts commit 17393c9ab0e03a1c97a8774ef6f7d3df119362f5. * Rename migration * update snaps * renamed Update_Frequency_Type.sql migration version from 124 to 126 * Fixed migration merge issue with order * Init beneficiary frequency work * Added backend work for new frequency type * Added form work for beneficiary frequency type * Updated tests * Finished BE work for data sharing * Added form elements for opsevalandlearning * Added readonly opsavalandlearning frequency * Updated cypress tests * Added csv * Updated translation form types * Fixed lint error --------- Co-authored-by: Gary Zhao Co-authored-by: Gary Zhao * [EASI-3713] - Rename frequency type (#886) Renamed frequency type minus migrations * Resolved merge conflicts * Addressed issues with previsou revert * Addressed remaining issues with previsou revert * Fixed typo in update sql * Added beneficiaryRemovalFrequency to schema and forms * Added beneficiaryRemovalFrequency to server test and csv * Added props to FrequencyForm, updated snaps * Updated postman collection, removed unneeded null migration default * Removed postman collection link * Fixed semiannually hyphen and updated snaps * Updated snaps * Fixed migration conflicts --------- Co-authored-by: ClayBenson94 Co-authored-by: Gary Zhao Co-authored-by: Gary Zhao --- MINT.postman_collection.json | 4 +- ...V132__Add_Remove_Beneficiary_Frequency.sql | 5 + pkg/graph/generated/generated.go | 267 ++++++++++++++++++ pkg/graph/gqlresolvers/schema.resolvers.go | 5 + .../resolvers/plan_beneficiaries_test.go | 8 + pkg/graph/schema.graphql | 8 + pkg/models/plan_beneficiaries.go | 4 + pkg/storage/SQL/plan_beneficiaries/create.sql | 12 + .../SQL/plan_beneficiaries/get_by_id.sql | 4 + .../get_by_model_plan_id_LOADER.sql | 4 + pkg/storage/SQL/plan_beneficiaries/update.sql | 8 + .../__snapshots__/index.test.tsx.snap | 122 +++++++- src/data/mock/readonly.ts | 8 +- .../Beneficiaries/GetAllBeneficiaries.ts | 4 + .../apolloGQL/Beneficiaries/GetFrequency.ts | 4 + src/gql/gen/graphql.ts | 20 +- src/gql/gen/types/GetAllBeneficiaries.ts | 4 + src/gql/gen/types/GetFrequency.ts | 4 + src/i18n/en-US/modelPlan/beneficiaries.ts | 51 +++- src/queries/GetAllModelData.ts | 4 + src/queries/GetAllSingleModelPlan.ts | 4 + src/queries/types/GetAllModelData.ts | 4 + src/queries/types/GetAllSingleModelData.ts | 4 + src/types/graphql-global-types.ts | 4 + src/types/translation.ts | 4 + src/utils/export/CsvData.ts | 4 + .../__snapshots__/index.test.tsx.snap | 61 +++- .../ReadOnly/Beneficiaries/index.tsx | 25 +- .../__snapshots__/index.test.tsx.snap | 175 ++++++++++++ .../Beneficiaries/Frequency/index.test.tsx | 6 +- .../Beneficiaries/Frequency/index.tsx | 22 ++ 31 files changed, 846 insertions(+), 17 deletions(-) create mode 100644 migrations/V132__Add_Remove_Beneficiary_Frequency.sql diff --git a/MINT.postman_collection.json b/MINT.postman_collection.json index 0ba7ac9ec6..6b44cd1b8b 100644 --- a/MINT.postman_collection.json +++ b/MINT.postman_collection.json @@ -3,7 +3,7 @@ "_postman_id": "e23e8f12-f5f3-4ec1-a657-f55753705490", "name": "MINT", "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json", - "_exporter_id": "20435042" + "_exporter_id": "22120875" }, "item": [ { @@ -298,7 +298,7 @@ "body": { "mode": "graphql", "graphql": { - "query": "mutation updatePlanBeneficiaries{\n updatePlanBeneficiaries (id: \"{{beneficiariesID}}\", changes: \n {\n status: READY_FOR_CLEARANCE\n #Page 1\n beneficiaries: [MEDICAID,MEDICARE_PART_D]\n diseaseSpecificGroup: \"centers for diabetes prevention\"\n # beneficiariesOther:\n # beneficiariesNote:\n # treatDualElligibleDifferent:\n # treatDualElligibleDifferentHow:\n # treatDualElligibleDifferentNote:\n # excludeCertainCharacteristics:\n # excludeCertainCharacteristicsCriteria:\n # excludeCertainCharacteristicsNote:\n #Page 2\n numberPeopleImpacted: 22\n # estimateConfidence:\n confidenceNote: \"Confidence hooray!!!!\"\n # beneficiarySelectionMethod:\n # beneficiarySelectionOther:\n\n # beneficiarySelectionNote:\n # #Page 3\n # beneficiarySelectionFrequency:\n # beneficiarySelectionFrequencyOther:\n # beneficiarySelectionFrequencyNote:\n # beneficiaryOverlap:\n # beneficiaryOverlapNote:\n precedenceRules: [YES, NO]\n precedenceRulesYes: \"This is a 'YES' comment\"\n precedenceRulesNo: \"This is a 'NO' comment\"\n precedenceRulesNote: \"This is a precedence rules note\"\n beneficiarySelectionFrequency: CONTINUALLY\n beneficiarySelectionFrequencyContinually: \"This is a continual frequency note\"\n }) {\n id\n modelPlanID\n beneficiaries\n beneficiariesOther\n beneficiariesNote\n diseaseSpecificGroup\n treatDualElligibleDifferent\n treatDualElligibleDifferentHow\n treatDualElligibleDifferentNote\n excludeCertainCharacteristics\n excludeCertainCharacteristicsCriteria\n excludeCertainCharacteristicsNote\n numberPeopleImpacted\n estimateConfidence\n confidenceNote\n beneficiarySelectionMethod\n beneficiarySelectionOther\n beneficiarySelectionNote\n beneficiarySelectionFrequency\n beneficiarySelectionFrequencyContinually\n beneficiarySelectionFrequencyOther\n beneficiarySelectionFrequencyNote\n beneficiaryOverlap\n beneficiaryOverlapNote\n precedenceRules\n precedenceRulesYes\n precedenceRulesNo\n precedenceRulesNote\n createdBy\n createdDts\n modifiedBy\n modifiedDts\n readyForReviewBy\n readyForReviewDts\n readyForClearanceBy\n readyForClearanceDts\n status\n\n createdByUserAccount \n {\n commonName\n } \n modifiedByUserAccount\n {\n commonName\n } \n readyForReviewByUserAccount \n {\n commonName\n }\n readyForClearanceByUserAccount \n {\n commonName\n } \n }\n}", + "query": "mutation updatePlanBeneficiaries{\n updatePlanBeneficiaries (id: \"{{beneficiariesID}}\", changes: \n {\n status: READY_FOR_CLEARANCE\n #Page 1\n beneficiaries: [MEDICAID,MEDICARE_PART_D]\n diseaseSpecificGroup: \"centers for diabetes prevention\"\n # beneficiariesOther:\n # beneficiariesNote:\n # treatDualElligibleDifferent:\n # treatDualElligibleDifferentHow:\n # treatDualElligibleDifferentNote:\n # excludeCertainCharacteristics:\n # excludeCertainCharacteristicsCriteria:\n # excludeCertainCharacteristicsNote:\n #Page 2\n numberPeopleImpacted: 22\n # estimateConfidence:\n confidenceNote: \"Confidence hooray!!!!\"\n # beneficiarySelectionMethod:\n # beneficiarySelectionOther:\n\n # beneficiarySelectionNote:\n # #Page 3\n # beneficiarySelectionFrequency:\n # beneficiarySelectionFrequencyOther:\n # beneficiarySelectionFrequencyNote:\n # beneficiaryOverlap:\n # beneficiaryOverlapNote:\n precedenceRules: [YES, NO]\n precedenceRulesYes: \"This is a 'YES' comment\"\n precedenceRulesNo: \"This is a 'NO' comment\"\n precedenceRulesNote: \"This is a precedence rules note\"\n }) {\n id\n modelPlanID\n beneficiaries\n beneficiariesOther\n beneficiariesNote\n diseaseSpecificGroup\n treatDualElligibleDifferent\n treatDualElligibleDifferentHow\n treatDualElligibleDifferentNote\n excludeCertainCharacteristics\n excludeCertainCharacteristicsCriteria\n excludeCertainCharacteristicsNote\n numberPeopleImpacted\n estimateConfidence\n confidenceNote\n beneficiarySelectionMethod\n beneficiarySelectionOther\n beneficiarySelectionNote\n beneficiarySelectionFrequency\n beneficiarySelectionFrequencyOther\n beneficiarySelectionFrequencyNote\n beneficiaryRemovalFrequency\n beneficiaryRemovalFrequencyContinually\n beneficiaryRemovalFrequencyOther\n beneficiaryRemovalFrequencyNote\n beneficiaryOverlap\n beneficiaryOverlapNote\n precedenceRules\n precedenceRulesYes\n precedenceRulesNo\n precedenceRulesNote\n createdBy\n createdDts\n modifiedBy\n modifiedDts\n readyForReviewBy\n readyForReviewDts\n readyForClearanceBy\n readyForClearanceDts\n status\n\n createdByUserAccount \n {\n commonName\n } \n modifiedByUserAccount\n {\n commonName\n } \n readyForReviewByUserAccount \n {\n commonName\n }\n readyForClearanceByUserAccount \n {\n commonName\n } \n }\n}", "variables": "" } }, diff --git a/migrations/V132__Add_Remove_Beneficiary_Frequency.sql b/migrations/V132__Add_Remove_Beneficiary_Frequency.sql new file mode 100644 index 0000000000..a77897e278 --- /dev/null +++ b/migrations/V132__Add_Remove_Beneficiary_Frequency.sql @@ -0,0 +1,5 @@ +ALTER TABLE plan_beneficiaries + ADD COLUMN beneficiary_removal_frequency_continually ZERO_STRING, + ADD COLUMN beneficiary_removal_frequency_other ZERO_STRING, + ADD COLUMN beneficiary_removal_frequency_note ZERO_STRING, + ADD COLUMN beneficiary_removal_frequency FREQUENCY_TYPE[]; diff --git a/pkg/graph/generated/generated.go b/pkg/graph/generated/generated.go index 777e532956..c70a64d966 100644 --- a/pkg/graph/generated/generated.go +++ b/pkg/graph/generated/generated.go @@ -367,6 +367,10 @@ type ComplexityRoot struct { BeneficiariesOther func(childComplexity int) int BeneficiaryOverlap func(childComplexity int) int BeneficiaryOverlapNote func(childComplexity int) int + BeneficiaryRemovalFrequency func(childComplexity int) int + BeneficiaryRemovalFrequencyContinually func(childComplexity int) int + BeneficiaryRemovalFrequencyNote func(childComplexity int) int + BeneficiaryRemovalFrequencyOther func(childComplexity int) int BeneficiarySelectionFrequency func(childComplexity int) int BeneficiarySelectionFrequencyContinually func(childComplexity int) int BeneficiarySelectionFrequencyNote func(childComplexity int) int @@ -1059,6 +1063,8 @@ type PlanBeneficiariesResolver interface { BeneficiarySelectionFrequency(ctx context.Context, obj *models.PlanBeneficiaries) ([]models.FrequencyType, error) + BeneficiaryRemovalFrequency(ctx context.Context, obj *models.PlanBeneficiaries) ([]models.FrequencyType, error) + PrecedenceRules(ctx context.Context, obj *models.PlanBeneficiaries) ([]models.YesNoType, error) } type PlanCollaboratorResolver interface { @@ -3079,6 +3085,34 @@ func (e *executableSchema) Complexity(typeName, field string, childComplexity in return e.complexity.PlanBeneficiaries.BeneficiaryOverlapNote(childComplexity), true + case "PlanBeneficiaries.beneficiaryRemovalFrequency": + if e.complexity.PlanBeneficiaries.BeneficiaryRemovalFrequency == nil { + break + } + + return e.complexity.PlanBeneficiaries.BeneficiaryRemovalFrequency(childComplexity), true + + case "PlanBeneficiaries.beneficiaryRemovalFrequencyContinually": + if e.complexity.PlanBeneficiaries.BeneficiaryRemovalFrequencyContinually == nil { + break + } + + return e.complexity.PlanBeneficiaries.BeneficiaryRemovalFrequencyContinually(childComplexity), true + + case "PlanBeneficiaries.beneficiaryRemovalFrequencyNote": + if e.complexity.PlanBeneficiaries.BeneficiaryRemovalFrequencyNote == nil { + break + } + + return e.complexity.PlanBeneficiaries.BeneficiaryRemovalFrequencyNote(childComplexity), true + + case "PlanBeneficiaries.beneficiaryRemovalFrequencyOther": + if e.complexity.PlanBeneficiaries.BeneficiaryRemovalFrequencyOther == nil { + break + } + + return e.complexity.PlanBeneficiaries.BeneficiaryRemovalFrequencyOther(childComplexity), true + case "PlanBeneficiaries.beneficiarySelectionFrequency": if e.complexity.PlanBeneficiaries.BeneficiarySelectionFrequency == nil { break @@ -7741,6 +7775,10 @@ type PlanBeneficiaries { beneficiarySelectionFrequencyContinually: String beneficiarySelectionFrequencyOther: String beneficiarySelectionFrequencyNote: String + beneficiaryRemovalFrequency: [FrequencyType!]! + beneficiaryRemovalFrequencyContinually: String + beneficiaryRemovalFrequencyOther: String + beneficiaryRemovalFrequencyNote: String beneficiaryOverlap: OverlapType beneficiaryOverlapNote: String precedenceRules: [YesNoType!]! @@ -7789,6 +7827,10 @@ input PlanBeneficiariesChanges @goModel(model: "map[string]interface{}") { beneficiarySelectionFrequencyContinually: String beneficiarySelectionFrequencyOther: String beneficiarySelectionFrequencyNote: String + beneficiaryRemovalFrequency: [FrequencyType!] + beneficiaryRemovalFrequencyContinually: String + beneficiaryRemovalFrequencyOther: String + beneficiaryRemovalFrequencyNote: String beneficiaryOverlap: OverlapType beneficiaryOverlapNote: String precedenceRules: [YesNoType!] @@ -15597,6 +15639,14 @@ func (ec *executionContext) fieldContext_ModelPlan_beneficiaries(ctx context.Con return ec.fieldContext_PlanBeneficiaries_beneficiarySelectionFrequencyOther(ctx, field) case "beneficiarySelectionFrequencyNote": return ec.fieldContext_PlanBeneficiaries_beneficiarySelectionFrequencyNote(ctx, field) + case "beneficiaryRemovalFrequency": + return ec.fieldContext_PlanBeneficiaries_beneficiaryRemovalFrequency(ctx, field) + case "beneficiaryRemovalFrequencyContinually": + return ec.fieldContext_PlanBeneficiaries_beneficiaryRemovalFrequencyContinually(ctx, field) + case "beneficiaryRemovalFrequencyOther": + return ec.fieldContext_PlanBeneficiaries_beneficiaryRemovalFrequencyOther(ctx, field) + case "beneficiaryRemovalFrequencyNote": + return ec.fieldContext_PlanBeneficiaries_beneficiaryRemovalFrequencyNote(ctx, field) case "beneficiaryOverlap": return ec.fieldContext_PlanBeneficiaries_beneficiaryOverlap(ctx, field) case "beneficiaryOverlapNote": @@ -17857,6 +17907,14 @@ func (ec *executionContext) fieldContext_Mutation_updatePlanBeneficiaries(ctx co return ec.fieldContext_PlanBeneficiaries_beneficiarySelectionFrequencyOther(ctx, field) case "beneficiarySelectionFrequencyNote": return ec.fieldContext_PlanBeneficiaries_beneficiarySelectionFrequencyNote(ctx, field) + case "beneficiaryRemovalFrequency": + return ec.fieldContext_PlanBeneficiaries_beneficiaryRemovalFrequency(ctx, field) + case "beneficiaryRemovalFrequencyContinually": + return ec.fieldContext_PlanBeneficiaries_beneficiaryRemovalFrequencyContinually(ctx, field) + case "beneficiaryRemovalFrequencyOther": + return ec.fieldContext_PlanBeneficiaries_beneficiaryRemovalFrequencyOther(ctx, field) + case "beneficiaryRemovalFrequencyNote": + return ec.fieldContext_PlanBeneficiaries_beneficiaryRemovalFrequencyNote(ctx, field) case "beneficiaryOverlap": return ec.fieldContext_PlanBeneficiaries_beneficiaryOverlap(ctx, field) case "beneficiaryOverlapNote": @@ -26274,6 +26332,173 @@ func (ec *executionContext) fieldContext_PlanBeneficiaries_beneficiarySelectionF return fc, nil } +func (ec *executionContext) _PlanBeneficiaries_beneficiaryRemovalFrequency(ctx context.Context, field graphql.CollectedField, obj *models.PlanBeneficiaries) (ret graphql.Marshaler) { + fc, err := ec.fieldContext_PlanBeneficiaries_beneficiaryRemovalFrequency(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { + ctx = rctx // use context from middleware stack in children + return ec.resolvers.PlanBeneficiaries().BeneficiaryRemovalFrequency(rctx, obj) + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + if !graphql.HasFieldError(ctx, fc) { + ec.Errorf(ctx, "must not be null") + } + return graphql.Null + } + res := resTmp.([]models.FrequencyType) + fc.Result = res + return ec.marshalNFrequencyType2ᚕgithubᚗcomᚋcmsgovᚋmintᚑappᚋpkgᚋmodelsᚐFrequencyTypeᚄ(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext_PlanBeneficiaries_beneficiaryRemovalFrequency(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "PlanBeneficiaries", + Field: field, + IsMethod: true, + IsResolver: true, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return nil, errors.New("field of type FrequencyType does not have child fields") + }, + } + return fc, nil +} + +func (ec *executionContext) _PlanBeneficiaries_beneficiaryRemovalFrequencyContinually(ctx context.Context, field graphql.CollectedField, obj *models.PlanBeneficiaries) (ret graphql.Marshaler) { + fc, err := ec.fieldContext_PlanBeneficiaries_beneficiaryRemovalFrequencyContinually(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { + ctx = rctx // use context from middleware stack in children + return obj.BeneficiaryRemovalFrequencyContinually, nil + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + return graphql.Null + } + res := resTmp.(*string) + fc.Result = res + return ec.marshalOString2ᚖstring(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext_PlanBeneficiaries_beneficiaryRemovalFrequencyContinually(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "PlanBeneficiaries", + Field: field, + IsMethod: false, + IsResolver: false, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return nil, errors.New("field of type String does not have child fields") + }, + } + return fc, nil +} + +func (ec *executionContext) _PlanBeneficiaries_beneficiaryRemovalFrequencyOther(ctx context.Context, field graphql.CollectedField, obj *models.PlanBeneficiaries) (ret graphql.Marshaler) { + fc, err := ec.fieldContext_PlanBeneficiaries_beneficiaryRemovalFrequencyOther(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { + ctx = rctx // use context from middleware stack in children + return obj.BeneficiaryRemovalFrequencyOther, nil + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + return graphql.Null + } + res := resTmp.(*string) + fc.Result = res + return ec.marshalOString2ᚖstring(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext_PlanBeneficiaries_beneficiaryRemovalFrequencyOther(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "PlanBeneficiaries", + Field: field, + IsMethod: false, + IsResolver: false, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return nil, errors.New("field of type String does not have child fields") + }, + } + return fc, nil +} + +func (ec *executionContext) _PlanBeneficiaries_beneficiaryRemovalFrequencyNote(ctx context.Context, field graphql.CollectedField, obj *models.PlanBeneficiaries) (ret graphql.Marshaler) { + fc, err := ec.fieldContext_PlanBeneficiaries_beneficiaryRemovalFrequencyNote(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { + ctx = rctx // use context from middleware stack in children + return obj.BeneficiaryRemovalFrequencyNote, nil + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + return graphql.Null + } + res := resTmp.(*string) + fc.Result = res + return ec.marshalOString2ᚖstring(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext_PlanBeneficiaries_beneficiaryRemovalFrequencyNote(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "PlanBeneficiaries", + Field: field, + IsMethod: false, + IsResolver: false, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return nil, errors.New("field of type String does not have child fields") + }, + } + return fc, nil +} + func (ec *executionContext) _PlanBeneficiaries_beneficiaryOverlap(ctx context.Context, field graphql.CollectedField, obj *models.PlanBeneficiaries) (ret graphql.Marshaler) { fc, err := ec.fieldContext_PlanBeneficiaries_beneficiaryOverlap(ctx, field) if err != nil { @@ -56573,6 +56798,48 @@ func (ec *executionContext) _PlanBeneficiaries(ctx context.Context, sel ast.Sele out.Values[i] = ec._PlanBeneficiaries_beneficiarySelectionFrequencyOther(ctx, field, obj) case "beneficiarySelectionFrequencyNote": out.Values[i] = ec._PlanBeneficiaries_beneficiarySelectionFrequencyNote(ctx, field, obj) + case "beneficiaryRemovalFrequency": + field := field + + innerFunc := func(ctx context.Context, fs *graphql.FieldSet) (res graphql.Marshaler) { + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + } + }() + res = ec._PlanBeneficiaries_beneficiaryRemovalFrequency(ctx, field, obj) + if res == graphql.Null { + atomic.AddUint32(&fs.Invalids, 1) + } + return res + } + + if field.Deferrable != nil { + dfs, ok := deferred[field.Deferrable.Label] + di := 0 + if ok { + dfs.AddField(field) + di = len(dfs.Values) - 1 + } else { + dfs = graphql.NewFieldSet([]graphql.CollectedField{field}) + deferred[field.Deferrable.Label] = dfs + } + dfs.Concurrently(di, func(ctx context.Context) graphql.Marshaler { + return innerFunc(ctx, dfs) + }) + + // don't run the out.Concurrently() call below + out.Values[i] = graphql.Null + continue + } + + out.Concurrently(i, func(ctx context.Context) graphql.Marshaler { return innerFunc(ctx, out) }) + case "beneficiaryRemovalFrequencyContinually": + out.Values[i] = ec._PlanBeneficiaries_beneficiaryRemovalFrequencyContinually(ctx, field, obj) + case "beneficiaryRemovalFrequencyOther": + out.Values[i] = ec._PlanBeneficiaries_beneficiaryRemovalFrequencyOther(ctx, field, obj) + case "beneficiaryRemovalFrequencyNote": + out.Values[i] = ec._PlanBeneficiaries_beneficiaryRemovalFrequencyNote(ctx, field, obj) case "beneficiaryOverlap": out.Values[i] = ec._PlanBeneficiaries_beneficiaryOverlap(ctx, field, obj) case "beneficiaryOverlapNote": diff --git a/pkg/graph/gqlresolvers/schema.resolvers.go b/pkg/graph/gqlresolvers/schema.resolvers.go index 9c808a7e37..7469a4aebd 100644 --- a/pkg/graph/gqlresolvers/schema.resolvers.go +++ b/pkg/graph/gqlresolvers/schema.resolvers.go @@ -560,6 +560,11 @@ func (r *planBeneficiariesResolver) BeneficiarySelectionFrequency(ctx context.Co return models.ConvertEnums[models.FrequencyType](obj.BeneficiarySelectionFrequency), nil } +// BeneficiaryRemovalFrequency is the resolver for the beneficiaryRemovalFrequency field. +func (r *planBeneficiariesResolver) BeneficiaryRemovalFrequency(ctx context.Context, obj *models.PlanBeneficiaries) ([]models.FrequencyType, error) { + return models.ConvertEnums[models.FrequencyType](obj.BeneficiaryRemovalFrequency), nil +} + // PrecedenceRules is the resolver for the precedenceRules field. func (r *planBeneficiariesResolver) PrecedenceRules(ctx context.Context, obj *models.PlanBeneficiaries) ([]models.YesNoType, error) { return models.ConvertEnums[models.YesNoType](obj.PrecedenceRules), nil diff --git a/pkg/graph/resolvers/plan_beneficiaries_test.go b/pkg/graph/resolvers/plan_beneficiaries_test.go index 853e326f78..f1b53bce8a 100644 --- a/pkg/graph/resolvers/plan_beneficiaries_test.go +++ b/pkg/graph/resolvers/plan_beneficiaries_test.go @@ -77,6 +77,10 @@ func (suite *ResolverSuite) TestPlanBeneficiariesUpdate() { suite.Nil(updatedBeneficiary.BeneficiarySelectionFrequency) suite.Nil(updatedBeneficiary.BeneficiarySelectionFrequencyOther) suite.Nil(updatedBeneficiary.BeneficiarySelectionFrequencyNote) + suite.Nil(updatedBeneficiary.BeneficiaryRemovalFrequency) + suite.Nil(updatedBeneficiary.BeneficiaryRemovalFrequencyContinually) + suite.Nil(updatedBeneficiary.BeneficiaryRemovalFrequencyOther) + suite.Nil(updatedBeneficiary.BeneficiaryRemovalFrequencyNote) suite.Nil(updatedBeneficiary.BeneficiaryOverlap) suite.Nil(updatedBeneficiary.BeneficiaryOverlapNote) suite.Nil(updatedBeneficiary.PrecedenceRules) @@ -116,6 +120,10 @@ func (suite *ResolverSuite) TestPlanBeneficiariesGetByModelPlanID() { suite.Nil(b.BeneficiarySelectionFrequency) suite.Nil(b.BeneficiarySelectionFrequencyOther) suite.Nil(b.BeneficiarySelectionFrequencyNote) + suite.Nil(b.BeneficiaryRemovalFrequency) + suite.Nil(b.BeneficiaryRemovalFrequencyContinually) + suite.Nil(b.BeneficiaryRemovalFrequencyOther) + suite.Nil(b.BeneficiaryRemovalFrequencyNote) suite.Nil(b.BeneficiaryOverlap) suite.Nil(b.BeneficiaryOverlapNote) suite.Nil(b.PrecedenceRules) diff --git a/pkg/graph/schema.graphql b/pkg/graph/schema.graphql index fe81fac34f..93d4b688de 100644 --- a/pkg/graph/schema.graphql +++ b/pkg/graph/schema.graphql @@ -704,6 +704,10 @@ type PlanBeneficiaries { beneficiarySelectionFrequencyContinually: String beneficiarySelectionFrequencyOther: String beneficiarySelectionFrequencyNote: String + beneficiaryRemovalFrequency: [FrequencyType!]! + beneficiaryRemovalFrequencyContinually: String + beneficiaryRemovalFrequencyOther: String + beneficiaryRemovalFrequencyNote: String beneficiaryOverlap: OverlapType beneficiaryOverlapNote: String precedenceRules: [YesNoType!]! @@ -752,6 +756,10 @@ input PlanBeneficiariesChanges @goModel(model: "map[string]interface{}") { beneficiarySelectionFrequencyContinually: String beneficiarySelectionFrequencyOther: String beneficiarySelectionFrequencyNote: String + beneficiaryRemovalFrequency: [FrequencyType!] + beneficiaryRemovalFrequencyContinually: String + beneficiaryRemovalFrequencyOther: String + beneficiaryRemovalFrequencyNote: String beneficiaryOverlap: OverlapType beneficiaryOverlapNote: String precedenceRules: [YesNoType!] diff --git a/pkg/models/plan_beneficiaries.go b/pkg/models/plan_beneficiaries.go index 0656e7555b..4bed42607d 100644 --- a/pkg/models/plan_beneficiaries.go +++ b/pkg/models/plan_beneficiaries.go @@ -33,6 +33,10 @@ type PlanBeneficiaries struct { BeneficiarySelectionFrequencyContinually *string `json:"beneficiarySelectionFrequencyContinually" db:"beneficiary_selection_frequency_continually"` BeneficiarySelectionFrequencyOther *string `json:"beneficiarySelectionFrequencyOther" db:"beneficiary_selection_frequency_other"` BeneficiarySelectionFrequencyNote *string `json:"beneficiarySelectionFrequencyNote" db:"beneficiary_selection_frequency_note"` + BeneficiaryRemovalFrequency pq.StringArray `json:"beneficiaryRemovalFrequency" db:"beneficiary_removal_frequency" statusWeight:"1"` + BeneficiaryRemovalFrequencyContinually *string `json:"beneficiaryRemovalFrequencyContinually" db:"beneficiary_removal_frequency_continually"` + BeneficiaryRemovalFrequencyOther *string `json:"beneficiaryRemovalFrequencyOther" db:"beneficiary_removal_frequency_other"` + BeneficiaryRemovalFrequencyNote *string `json:"beneficiaryRemovalFrequencyNote" db:"beneficiary_removal_frequency_note"` BeneficiaryOverlap *OverlapType `json:"beneficiaryOverlap" db:"beneficiary_overlap" statusWeight:"1"` BeneficiaryOverlapNote *string `json:"beneficiaryOverlapNote" db:"beneficiary_overlap_note"` PrecedenceRules pq.StringArray `json:"precedenceRules" db:"precedence_rules"` diff --git a/pkg/storage/SQL/plan_beneficiaries/create.sql b/pkg/storage/SQL/plan_beneficiaries/create.sql index 173ba71d51..a509cfce08 100644 --- a/pkg/storage/SQL/plan_beneficiaries/create.sql +++ b/pkg/storage/SQL/plan_beneficiaries/create.sql @@ -21,6 +21,10 @@ INSERT INTO plan_beneficiaries( beneficiary_selection_frequency_continually, beneficiary_selection_frequency_other, beneficiary_selection_frequency_note, + beneficiary_removal_frequency, + beneficiary_removal_frequency_continually, + beneficiary_removal_frequency_other, + beneficiary_removal_frequency_note, beneficiary_overlap, beneficiary_overlap_note, precedence_rules, @@ -58,6 +62,10 @@ VALUES ( :beneficiary_selection_frequency_continually, :beneficiary_selection_frequency_other, :beneficiary_selection_frequency_note, + :beneficiary_removal_frequency, + :beneficiary_removal_frequency_continually, + :beneficiary_removal_frequency_other, + :beneficiary_removal_frequency_note, :beneficiary_overlap, :beneficiary_overlap_note, :precedence_rules, @@ -94,6 +102,10 @@ beneficiary_selection_frequency, beneficiary_selection_frequency_continually, beneficiary_selection_frequency_other, beneficiary_selection_frequency_note, +beneficiary_removal_frequency, +beneficiary_removal_frequency_continually, +beneficiary_removal_frequency_other, +beneficiary_removal_frequency_note, beneficiary_overlap, beneficiary_overlap_note, precedence_rules, diff --git a/pkg/storage/SQL/plan_beneficiaries/get_by_id.sql b/pkg/storage/SQL/plan_beneficiaries/get_by_id.sql index 5055291f2b..850aa4c8d6 100644 --- a/pkg/storage/SQL/plan_beneficiaries/get_by_id.sql +++ b/pkg/storage/SQL/plan_beneficiaries/get_by_id.sql @@ -21,6 +21,10 @@ SELECT beneficiary_selection_frequency_continually, beneficiary_selection_frequency_other, beneficiary_selection_frequency_note, + beneficiary_removal_frequency, + beneficiary_removal_frequency_continually, + beneficiary_removal_frequency_other, + beneficiary_removal_frequency_note, beneficiary_overlap, beneficiary_overlap_note, precedence_rules, diff --git a/pkg/storage/SQL/plan_beneficiaries/get_by_model_plan_id_LOADER.sql b/pkg/storage/SQL/plan_beneficiaries/get_by_model_plan_id_LOADER.sql index 9624793cda..0c3efde103 100644 --- a/pkg/storage/SQL/plan_beneficiaries/get_by_model_plan_id_LOADER.sql +++ b/pkg/storage/SQL/plan_beneficiaries/get_by_model_plan_id_LOADER.sql @@ -29,6 +29,10 @@ SELECT benes.beneficiary_selection_frequency_continually, benes.beneficiary_selection_frequency_other, benes.beneficiary_selection_frequency_note, + benes.beneficiary_removal_frequency, + benes.beneficiary_removal_frequency_continually, + benes.beneficiary_removal_frequency_other, + benes.beneficiary_removal_frequency_note, benes.beneficiary_overlap, benes.beneficiary_overlap_note, benes.precedence_rules, diff --git a/pkg/storage/SQL/plan_beneficiaries/update.sql b/pkg/storage/SQL/plan_beneficiaries/update.sql index 518ba2e3ad..d87663512b 100644 --- a/pkg/storage/SQL/plan_beneficiaries/update.sql +++ b/pkg/storage/SQL/plan_beneficiaries/update.sql @@ -20,6 +20,10 @@ SET beneficiary_selection_frequency_continually = :beneficiary_selection_frequency_continually, beneficiary_selection_frequency_other = :beneficiary_selection_frequency_other, beneficiary_selection_frequency_note = :beneficiary_selection_frequency_note, + beneficiary_removal_frequency = :beneficiary_removal_frequency, + beneficiary_removal_frequency_continually = :beneficiary_removal_frequency_continually, + beneficiary_removal_frequency_other = :beneficiary_removal_frequency_other, + beneficiary_removal_frequency_note = :beneficiary_removal_frequency_note, beneficiary_overlap = :beneficiary_overlap, beneficiary_overlap_note = :beneficiary_overlap_note, precedence_rules = :precedence_rules, @@ -56,6 +60,10 @@ beneficiary_selection_frequency, beneficiary_selection_frequency_continually, beneficiary_selection_frequency_other, beneficiary_selection_frequency_note, +beneficiary_removal_frequency, +beneficiary_removal_frequency_continually, +beneficiary_removal_frequency_other, +beneficiary_removal_frequency_note, beneficiary_overlap, beneficiary_overlap_note, precedence_rules, diff --git a/src/components/ShareExport/__snapshots__/index.test.tsx.snap b/src/components/ShareExport/__snapshots__/index.test.tsx.snap index 2c4a211e1d..d01ffa3ae5 100644 --- a/src/components/ShareExport/__snapshots__/index.test.tsx.snap +++ b/src/components/ShareExport/__snapshots__/index.test.tsx.snap @@ -3020,11 +3020,68 @@ exports[`ShareExportModal > matches the snapshot 1`] = `
  • - Annually + Other
    • + > +
    • + Frequency other +
    • +
    + + +
    +
    +

    + Notes +

    +

    + Note frequency +

    +
    +
    + +
    +
    +

    + How frequently are beneficiaries removed? +

    +
      +
    • + Continually +
    • +
        +
      • + Frequency continually +
      • +
    matches the snapshot 2`] = `
  • - Annually + Other
    • + > +
    • + Frequency other +
    • +
    + +
    +
    +
    +

    + Notes +

    +

    + Note frequency +

    +
    +
    +
    +
    +
    +

    + How frequently are beneficiaries removed? +

    +
      +
    • + Continually +
    • +
        +
      • + Frequency continually +
      • +
    ; beneficiaryOverlap?: Maybe; beneficiaryOverlapNote?: Maybe; + beneficiaryRemovalFrequency: Array; + beneficiaryRemovalFrequencyContinually?: Maybe; + beneficiaryRemovalFrequencyNote?: Maybe; + beneficiaryRemovalFrequencyOther?: Maybe; beneficiarySelectionFrequency: Array; beneficiarySelectionFrequencyContinually?: Maybe; beneficiarySelectionFrequencyNote?: Maybe; @@ -1283,6 +1287,10 @@ export type PlanBeneficiariesChanges = { beneficiariesOther?: InputMaybe; beneficiaryOverlap?: InputMaybe; beneficiaryOverlapNote?: InputMaybe; + beneficiaryRemovalFrequency?: InputMaybe>; + beneficiaryRemovalFrequencyContinually?: InputMaybe; + beneficiaryRemovalFrequencyNote?: InputMaybe; + beneficiaryRemovalFrequencyOther?: InputMaybe; beneficiarySelectionFrequency?: InputMaybe>; beneficiarySelectionFrequencyContinually?: InputMaybe; beneficiarySelectionFrequencyNote?: InputMaybe; @@ -2676,7 +2684,7 @@ export type GetAllBeneficiariesQueryVariables = Exact<{ }>; -export type GetAllBeneficiariesQuery = { __typename: 'Query', modelPlan: { __typename: 'ModelPlan', id: UUID, beneficiaries: { __typename: 'PlanBeneficiaries', id: UUID, modelPlanID: UUID, beneficiaries: Array, diseaseSpecificGroup?: string | null, beneficiariesOther?: string | null, beneficiariesNote?: string | null, treatDualElligibleDifferent?: TriStateAnswer | null, treatDualElligibleDifferentHow?: string | null, treatDualElligibleDifferentNote?: string | null, excludeCertainCharacteristics?: TriStateAnswer | null, excludeCertainCharacteristicsCriteria?: string | null, excludeCertainCharacteristicsNote?: string | null, numberPeopleImpacted?: number | null, estimateConfidence?: ConfidenceType | null, confidenceNote?: string | null, beneficiarySelectionMethod: Array, beneficiarySelectionOther?: string | null, beneficiarySelectionNote?: string | null, beneficiarySelectionFrequency: Array, beneficiarySelectionFrequencyContinually?: string | null, beneficiarySelectionFrequencyOther?: string | null, beneficiarySelectionFrequencyNote?: string | null, beneficiaryOverlap?: OverlapType | null, beneficiaryOverlapNote?: string | null, precedenceRules: Array, precedenceRulesYes?: string | null, precedenceRulesNo?: string | null, precedenceRulesNote?: string | null, status: TaskStatus } } }; +export type GetAllBeneficiariesQuery = { __typename: 'Query', modelPlan: { __typename: 'ModelPlan', id: UUID, beneficiaries: { __typename: 'PlanBeneficiaries', id: UUID, modelPlanID: UUID, beneficiaries: Array, diseaseSpecificGroup?: string | null, beneficiariesOther?: string | null, beneficiariesNote?: string | null, treatDualElligibleDifferent?: TriStateAnswer | null, treatDualElligibleDifferentHow?: string | null, treatDualElligibleDifferentNote?: string | null, excludeCertainCharacteristics?: TriStateAnswer | null, excludeCertainCharacteristicsCriteria?: string | null, excludeCertainCharacteristicsNote?: string | null, numberPeopleImpacted?: number | null, estimateConfidence?: ConfidenceType | null, confidenceNote?: string | null, beneficiarySelectionMethod: Array, beneficiarySelectionOther?: string | null, beneficiarySelectionNote?: string | null, beneficiarySelectionFrequency: Array, beneficiarySelectionFrequencyContinually?: string | null, beneficiarySelectionFrequencyOther?: string | null, beneficiarySelectionFrequencyNote?: string | null, beneficiaryRemovalFrequency: Array, beneficiaryRemovalFrequencyContinually?: string | null, beneficiaryRemovalFrequencyNote?: string | null, beneficiaryRemovalFrequencyOther?: string | null, beneficiaryOverlap?: OverlapType | null, beneficiaryOverlapNote?: string | null, precedenceRules: Array, precedenceRulesYes?: string | null, precedenceRulesNo?: string | null, precedenceRulesNote?: string | null, status: TaskStatus } } }; export type GetBeneficiaryIdentificationQueryVariables = Exact<{ id: Scalars['UUID']['input']; @@ -2690,7 +2698,7 @@ export type GetFrequencyQueryVariables = Exact<{ }>; -export type GetFrequencyQuery = { __typename: 'Query', modelPlan: { __typename: 'ModelPlan', id: UUID, modelName: string, beneficiaries: { __typename: 'PlanBeneficiaries', id: UUID, beneficiarySelectionFrequency: Array, beneficiarySelectionFrequencyContinually?: string | null, beneficiarySelectionFrequencyNote?: string | null, beneficiarySelectionFrequencyOther?: string | null, beneficiaryOverlap?: OverlapType | null, beneficiaryOverlapNote?: string | null, precedenceRules: Array, precedenceRulesYes?: string | null, precedenceRulesNo?: string | null, precedenceRulesNote?: string | null, readyForReviewDts?: Time | null, status: TaskStatus, readyForReviewByUserAccount?: { __typename: 'UserAccount', id: UUID, commonName: string } | null }, operationalNeeds: Array<{ __typename: 'OperationalNeed', id: UUID, modifiedDts?: Time | null }> } }; +export type GetFrequencyQuery = { __typename: 'Query', modelPlan: { __typename: 'ModelPlan', id: UUID, modelName: string, beneficiaries: { __typename: 'PlanBeneficiaries', id: UUID, beneficiarySelectionFrequency: Array, beneficiarySelectionFrequencyContinually?: string | null, beneficiarySelectionFrequencyNote?: string | null, beneficiarySelectionFrequencyOther?: string | null, beneficiaryRemovalFrequency: Array, beneficiaryRemovalFrequencyContinually?: string | null, beneficiaryRemovalFrequencyNote?: string | null, beneficiaryRemovalFrequencyOther?: string | null, beneficiaryOverlap?: OverlapType | null, beneficiaryOverlapNote?: string | null, precedenceRules: Array, precedenceRulesYes?: string | null, precedenceRulesNo?: string | null, precedenceRulesNote?: string | null, readyForReviewDts?: Time | null, status: TaskStatus, readyForReviewByUserAccount?: { __typename: 'UserAccount', id: UUID, commonName: string } | null }, operationalNeeds: Array<{ __typename: 'OperationalNeed', id: UUID, modifiedDts?: Time | null }> } }; export type GetPeopleImpactedQueryVariables = Exact<{ id: Scalars['UUID']['input']; @@ -3370,6 +3378,10 @@ export const GetAllBeneficiariesDocument = gql` beneficiarySelectionFrequencyContinually beneficiarySelectionFrequencyOther beneficiarySelectionFrequencyNote + beneficiaryRemovalFrequency + beneficiaryRemovalFrequencyContinually + beneficiaryRemovalFrequencyNote + beneficiaryRemovalFrequencyOther beneficiaryOverlap beneficiaryOverlapNote precedenceRules @@ -3479,6 +3491,10 @@ export const GetFrequencyDocument = gql` beneficiarySelectionFrequencyContinually beneficiarySelectionFrequencyNote beneficiarySelectionFrequencyOther + beneficiaryRemovalFrequency + beneficiaryRemovalFrequencyContinually + beneficiaryRemovalFrequencyNote + beneficiaryRemovalFrequencyOther beneficiaryOverlap beneficiaryOverlapNote precedenceRules diff --git a/src/gql/gen/types/GetAllBeneficiaries.ts b/src/gql/gen/types/GetAllBeneficiaries.ts index d76f24e3cd..8dd90fd0b4 100644 --- a/src/gql/gen/types/GetAllBeneficiaries.ts +++ b/src/gql/gen/types/GetAllBeneficiaries.ts @@ -33,6 +33,10 @@ export interface GetAllBeneficiaries_modelPlan_beneficiaries { beneficiarySelectionFrequencyContinually: string | null; beneficiarySelectionFrequencyOther: string | null; beneficiarySelectionFrequencyNote: string | null; + beneficiaryRemovalFrequency: FrequencyType[]; + beneficiaryRemovalFrequencyContinually: string | null; + beneficiaryRemovalFrequencyNote: string | null; + beneficiaryRemovalFrequencyOther: string | null; beneficiaryOverlap: OverlapType | null; beneficiaryOverlapNote: string | null; precedenceRules: YesNoType[]; diff --git a/src/gql/gen/types/GetFrequency.ts b/src/gql/gen/types/GetFrequency.ts index 9569630036..35912e67d5 100644 --- a/src/gql/gen/types/GetFrequency.ts +++ b/src/gql/gen/types/GetFrequency.ts @@ -22,6 +22,10 @@ export interface GetFrequency_modelPlan_beneficiaries { beneficiarySelectionFrequencyContinually: string | null; beneficiarySelectionFrequencyNote: string | null; beneficiarySelectionFrequencyOther: string | null; + beneficiaryRemovalFrequency: FrequencyType[]; + beneficiaryRemovalFrequencyContinually: string | null; + beneficiaryRemovalFrequencyNote: string | null; + beneficiaryRemovalFrequencyOther: string | null; beneficiaryOverlap: OverlapType | null; beneficiaryOverlapNote: string | null; precedenceRules: YesNoType[]; diff --git a/src/i18n/en-US/modelPlan/beneficiaries.ts b/src/i18n/en-US/modelPlan/beneficiaries.ts index 82e4b49836..f7335cba19 100644 --- a/src/i18n/en-US/modelPlan/beneficiaries.ts +++ b/src/i18n/en-US/modelPlan/beneficiaries.ts @@ -226,7 +226,7 @@ export const beneficiaries: TranslationBeneficiaries = { dbField: 'beneficiary_selection_frequency_continually', label: 'Please specify', dataType: 'string', - formType: 'textarea', + formType: 'text', filterGroups: ['cmmi'] }, beneficiarySelectionFrequencyOther: { @@ -235,7 +235,7 @@ export const beneficiaries: TranslationBeneficiaries = { dbField: 'beneficiary_selection_frequency_other', label: 'Please specify', dataType: 'string', - formType: 'textarea', + formType: 'text', filterGroups: ['cmmi'] }, beneficiarySelectionFrequencyNote: { @@ -244,7 +244,52 @@ export const beneficiaries: TranslationBeneficiaries = { dbField: 'beneficiary_selection_frequency_note', label: 'Notes', dataType: 'string', - formType: 'textarea', + formType: 'text', + filterGroups: ['cmmi'] + }, + beneficiaryRemovalFrequency: { + gqlField: 'beneficiaryRemovalFrequency', + goField: 'BeneficiaryRemovalFrequency', + dbField: 'beneficiary_removal_frequency', + label: 'How frequently are beneficiaries removed?', + dataType: 'enum', + formType: 'checkbox', + options: frequencyOptions, + optionsRelatedInfo: { + ANNUALLY: '', + SEMIANNUALLY: '', + QUARTERLY: '', + MONTHLY: '', + CONTINUALLY: 'beneficiaryRemovalFrequencyContinually', + OTHER: 'beneficiaryRemovalFrequencyOther' + }, + filterGroups: ['cmmi'] + }, + beneficiaryRemovalFrequencyContinually: { + gqlField: 'beneficiaryRemovalFrequencyContinually', + goField: 'BeneficiaryRemovalFrequencyContinually', + dbField: 'beneficiary_removal_frequency_continually', + label: 'Please specify', + dataType: 'string', + formType: 'text', + filterGroups: ['cmmi'] + }, + beneficiaryRemovalFrequencyOther: { + gqlField: 'beneficiaryRemovalFrequencyOther', + goField: 'BeneficiaryRemovalFrequencyOther', + dbField: 'beneficiary_removal_frequency_other', + label: 'Please specify', + dataType: 'string', + formType: 'text', + filterGroups: ['cmmi'] + }, + beneficiaryRemovalFrequencyNote: { + gqlField: 'beneficiaryRemovalFrequencyNote', + goField: 'BeneficiaryRemovalFrequencyNote', + dbField: 'beneficiary_removal_frequency_note', + label: 'Notes', + dataType: 'string', + formType: 'text', filterGroups: ['cmmi'] }, beneficiaryOverlap: { diff --git a/src/queries/GetAllModelData.ts b/src/queries/GetAllModelData.ts index c987c6894a..ee614f5d95 100644 --- a/src/queries/GetAllModelData.ts +++ b/src/queries/GetAllModelData.ts @@ -178,6 +178,10 @@ export default gql` beneficiarySelectionFrequencyContinually beneficiarySelectionFrequencyNote beneficiarySelectionFrequencyOther + beneficiaryRemovalFrequency + beneficiaryRemovalFrequencyContinually + beneficiaryRemovalFrequencyNote + beneficiaryRemovalFrequencyOther precedenceRules precedenceRulesYes precedenceRulesNo diff --git a/src/queries/GetAllSingleModelPlan.ts b/src/queries/GetAllSingleModelPlan.ts index ebcfca2ae7..16b649b1f9 100644 --- a/src/queries/GetAllSingleModelPlan.ts +++ b/src/queries/GetAllSingleModelPlan.ts @@ -177,6 +177,10 @@ export default gql` beneficiarySelectionFrequencyContinually beneficiarySelectionFrequencyNote beneficiarySelectionFrequencyOther + beneficiaryRemovalFrequency + beneficiaryRemovalFrequencyContinually + beneficiaryRemovalFrequencyNote + beneficiaryRemovalFrequencyOther precedenceRules precedenceRulesYes precedenceRulesNo diff --git a/src/queries/types/GetAllModelData.ts b/src/queries/types/GetAllModelData.ts index c24047afc9..bbcff68f0c 100644 --- a/src/queries/types/GetAllModelData.ts +++ b/src/queries/types/GetAllModelData.ts @@ -199,6 +199,10 @@ export interface GetAllModelData_modelPlanCollection_beneficiaries { beneficiarySelectionFrequencyContinually: string | null; beneficiarySelectionFrequencyNote: string | null; beneficiarySelectionFrequencyOther: string | null; + beneficiaryRemovalFrequency: FrequencyType[]; + beneficiaryRemovalFrequencyContinually: string | null; + beneficiaryRemovalFrequencyNote: string | null; + beneficiaryRemovalFrequencyOther: string | null; precedenceRules: YesNoType[]; precedenceRulesYes: string | null; precedenceRulesNo: string | null; diff --git a/src/queries/types/GetAllSingleModelData.ts b/src/queries/types/GetAllSingleModelData.ts index 750e54021d..dfbc4caff0 100644 --- a/src/queries/types/GetAllSingleModelData.ts +++ b/src/queries/types/GetAllSingleModelData.ts @@ -199,6 +199,10 @@ export interface GetAllSingleModelData_modelPlan_beneficiaries { beneficiarySelectionFrequencyContinually: string | null; beneficiarySelectionFrequencyNote: string | null; beneficiarySelectionFrequencyOther: string | null; + beneficiaryRemovalFrequency: FrequencyType[]; + beneficiaryRemovalFrequencyContinually: string | null; + beneficiaryRemovalFrequencyNote: string | null; + beneficiaryRemovalFrequencyOther: string | null; precedenceRules: YesNoType[]; precedenceRulesYes: string | null; precedenceRulesNo: string | null; diff --git a/src/types/graphql-global-types.ts b/src/types/graphql-global-types.ts index cfe37e3af7..604c4a3242 100644 --- a/src/types/graphql-global-types.ts +++ b/src/types/graphql-global-types.ts @@ -728,6 +728,10 @@ export interface PlanBeneficiariesChanges { beneficiarySelectionFrequencyContinually?: string | null; beneficiarySelectionFrequencyOther?: string | null; beneficiarySelectionFrequencyNote?: string | null; + beneficiaryRemovalFrequency?: FrequencyType[] | null; + beneficiaryRemovalFrequencyContinually?: string | null; + beneficiaryRemovalFrequencyOther?: string | null; + beneficiaryRemovalFrequencyNote?: string | null; beneficiaryOverlap?: OverlapType | null; beneficiaryOverlapNote?: string | null; precedenceRules?: YesNoType[] | null; diff --git a/src/types/translation.ts b/src/types/translation.ts index 002e3d0c19..3d6c1ab501 100644 --- a/src/types/translation.ts +++ b/src/types/translation.ts @@ -284,6 +284,10 @@ export type TranslationBeneficiaries = { beneficiarySelectionFrequencyContinually: TranslationFieldProperties; beneficiarySelectionFrequencyOther: TranslationFieldProperties; beneficiarySelectionFrequencyNote: TranslationFieldProperties; + beneficiaryRemovalFrequency: TranslationFieldPropertiesWithOptions; + beneficiaryRemovalFrequencyContinually: TranslationFieldProperties; + beneficiaryRemovalFrequencyOther: TranslationFieldProperties; + beneficiaryRemovalFrequencyNote: TranslationFieldProperties; beneficiaryOverlap: TranslationFieldPropertiesWithOptions; beneficiaryOverlapNote: TranslationFieldProperties; precedenceRules: TranslationFieldPropertiesWithOptions; diff --git a/src/utils/export/CsvData.ts b/src/utils/export/CsvData.ts index 9fbe07195b..4966abe435 100644 --- a/src/utils/export/CsvData.ts +++ b/src/utils/export/CsvData.ts @@ -180,6 +180,10 @@ const csvFields = [ 'beneficiaries.beneficiarySelectionFrequencyContinually', 'beneficiaries.beneficiarySelectionFrequencyNote', 'beneficiaries.beneficiarySelectionFrequencyOther', + 'beneficiaries.beneficiaryRemovalFrequency', + 'beneficiaries.beneficiaryRemovalFrequencyContinually', + 'beneficiaries.beneficiaryRemovalFrequencyNote', + 'beneficiaries.beneficiaryRemovalFrequencyOther', 'beneficiaries.precedenceRules', 'beneficiaries.precedenceRulesYes', 'beneficiaries.precedenceRulesNo', diff --git a/src/views/ModelPlan/ReadOnly/Beneficiaries/__snapshots__/index.test.tsx.snap b/src/views/ModelPlan/ReadOnly/Beneficiaries/__snapshots__/index.test.tsx.snap index fdee43db2d..4945d36192 100644 --- a/src/views/ModelPlan/ReadOnly/Beneficiaries/__snapshots__/index.test.tsx.snap +++ b/src/views/ModelPlan/ReadOnly/Beneficiaries/__snapshots__/index.test.tsx.snap @@ -332,11 +332,68 @@ exports[`Read Only Model Plan Summary -- Beneficiaries > matches snapshot 1`] =
  • - Annually + Other
    • + > +
    • + Frequency other +
    • +
    + +
    +
    +
    +

    + Notes +

    +

    + Note frequency +

    +
    +
    +
    +
    +
    +

    + How frequently are beneficiaries removed? +

    +
      +
    • + Continually +
    • +
        +
      • + Frequency continually +
      • +
    )} + {checkGroupMap( + isViewingFilteredView, + filteredQuestions, + 'beneficiaryRemovalFrequency', + + )} + {checkGroupMap( isViewingFilteredView, filteredQuestions, diff --git a/src/views/ModelPlan/TaskList/Beneficiaries/Frequency/__snapshots__/index.test.tsx.snap b/src/views/ModelPlan/TaskList/Beneficiaries/Frequency/__snapshots__/index.test.tsx.snap index 5453e45d3e..9259cf2774 100644 --- a/src/views/ModelPlan/TaskList/Beneficiaries/Frequency/__snapshots__/index.test.tsx.snap +++ b/src/views/ModelPlan/TaskList/Beneficiaries/Frequency/__snapshots__/index.test.tsx.snap @@ -280,6 +280,181 @@ exports[`Model Plan Beneficiaries > matches snapshot 1`] = `
    +
    + +
    + + +

    +

    +
    + + +

    +

    +
    + + +

    +

    +
    + + +

    +

    +
    + + +

    +

    +
    + + +
    +
    + + +

    +

    +
    + +
    +
    { const { beneficiarySelectionFrequency: beneficiarySelectionFrequencyConfig, + beneficiaryRemovalFrequency: beneficiaryRemovalFrequencyConfig, beneficiaryOverlap: beneficiaryOverlapConfig, precedenceRules: beneficiaryPrecedenceConfig } = usePlanTranslation('beneficiaries'); @@ -78,6 +79,10 @@ const Frequency = () => { beneficiarySelectionFrequencyContinually, beneficiarySelectionFrequencyNote, beneficiarySelectionFrequencyOther, + beneficiaryRemovalFrequency, + beneficiaryRemovalFrequencyContinually, + beneficiaryRemovalFrequencyNote, + beneficiaryRemovalFrequencyOther, beneficiaryOverlap, beneficiaryOverlapNote, precedenceRules, @@ -146,6 +151,11 @@ const Frequency = () => { beneficiarySelectionFrequencyNote: beneficiarySelectionFrequencyNote ?? '', beneficiarySelectionFrequencyOther: beneficiarySelectionFrequencyOther ?? '', + beneficiaryRemovalFrequency: beneficiaryRemovalFrequency ?? null, + beneficiaryRemovalFrequencyContinually: + beneficiaryRemovalFrequencyContinually ?? '', + beneficiaryRemovalFrequencyNote: beneficiaryRemovalFrequencyNote ?? '', + beneficiaryRemovalFrequencyOther: beneficiaryRemovalFrequencyOther ?? '', beneficiaryOverlap: beneficiaryOverlap ?? null, beneficiaryOverlapNote: beneficiaryOverlapNote ?? '', precedenceRules: precedenceRules ?? [], @@ -252,6 +262,18 @@ const Frequency = () => { disabled={loading} /> + +