From 31fd3717a5b65e093b9ab78d62450685e7d628d3 Mon Sep 17 00:00:00 2001 From: deandreJones Date: Tue, 7 Jan 2025 17:08:30 +0000 Subject: [PATCH 01/22] B-21934 --- migrations/app/migrations_manifest.txt | 4 +- ...0106153750_admin_weight_restriction.up.sql | 6 + ...min_weight_restriction_convert_bool.up.sql | 4 + pkg/gen/ghcapi/embedded_spec.go | 28 + .../counseling_update_allowance_payload.go | 3 + pkg/gen/ghcmessages/entitlements.go | 4 + .../ghcmessages/update_allowance_payload.go | 3 + pkg/gen/primeapi/embedded_spec.go | 8 + pkg/gen/primemessages/entitlements.go | 4 + pkg/gen/primev2api/embedded_spec.go | 8 + pkg/gen/primev2messages/entitlements.go | 4 + pkg/gen/primev3api/embedded_spec.go | 8 + pkg/gen/primev3messages/entitlements.go | 4 + pkg/gen/supportapi/embedded_spec.go | 8 + pkg/gen/supportmessages/entitlement.go | 4 + .../internal/payloads/model_to_payload.go | 6 +- .../primeapi/payloads/model_to_payload.go | 1 + .../primeapiv2/payloads/model_to_payload.go | 1 + pkg/models/ghc_entitlements.go | 1 + pkg/services/order/order_updater.go | 8 + .../AllowancesDetailForm.jsx | 22 +- .../AllowancesDetailForm.test.jsx | 37 + .../Office/DefinitionLists/AllowancesList.jsx | 8 + .../MoveHistory/Database/BooleanFields.js | 1 + .../MoveHistory/Database/FieldMappings.js | 1 + .../Office/MoveAllowances/MoveAllowances.jsx | 4 + src/pages/Office/MoveDetails/MoveDetails.jsx | 1 + .../ServicesCounselingMoveAllowances.jsx | 4 + .../ServicesCounselingMoveDetails.jsx | 1 + .../definitions/prime/Entitlements.yaml | 3 + swagger-def/ghc.yaml | 3225 +++++++++-------- swagger-def/support.yaml | 3 + swagger/ghc.yaml | 15 + swagger/prime.yaml | 3 + swagger/prime_v2.yaml | 3 + swagger/prime_v3.yaml | 3 + swagger/support.yaml | 3 + 37 files changed, 1854 insertions(+), 1600 deletions(-) create mode 100644 migrations/app/schema/20250106153750_admin_weight_restriction.up.sql create mode 100644 migrations/app/schema/20250106190758_admin_weight_restriction_convert_bool.up.sql diff --git a/migrations/app/migrations_manifest.txt b/migrations/app/migrations_manifest.txt index 18c13cdaa73..ffaf109d530 100644 --- a/migrations/app/migrations_manifest.txt +++ b/migrations/app/migrations_manifest.txt @@ -1052,10 +1052,12 @@ 20241203024453_add_ppm_max_incentive_column.up.sql 20241204155919_update_ordering_proc.up.sql 20241204210208_retroactive_update_of_ppm_max_and_estimated_incentives_prd.up.sql -20241218201833_add_PPPO_BASE_ELIZABETH.up.sql 20241217163231_update_duty_locations_bad_zips.up.sql 20241217180136_add_AK_zips_to_zip3_distances.up.sql +20241218201833_add_PPPO_BASE_ELIZABETH.up.sql 20241220171035_add_additional_AK_zips_to_zip3_distances.up.sql 20241227153723_remove_empty_string_emplid_values.up.sql 20241230190638_remove_AK_zips_from_zip3.up.sql 20241230190647_add_missing_AK_zips_to_zip3_distances.up.sql +20250106153750_admin_weight_restriction.up.sql +20250106190758_admin_weight_restriction_convert_bool.up.sql diff --git a/migrations/app/schema/20250106153750_admin_weight_restriction.up.sql b/migrations/app/schema/20250106153750_admin_weight_restriction.up.sql new file mode 100644 index 00000000000..a3e6e097e45 --- /dev/null +++ b/migrations/app/schema/20250106153750_admin_weight_restriction.up.sql @@ -0,0 +1,6 @@ +ALTER TABLE entitlements +ADD COLUMN IF NOT EXISTS admin_restricted_weight_location BOOLEAN; + +-- ALTER COLUMN admin_restricted_weight_location TYPE boolean USING (COALESCE(admin_restricted_weight_location, false)), +-- ALTER COLUMN admin_restricted_weight_location SET DEFAULT false, +-- ALTER COLUMN admin_restricted_weight_location SET NOT NULL; \ No newline at end of file diff --git a/migrations/app/schema/20250106190758_admin_weight_restriction_convert_bool.up.sql b/migrations/app/schema/20250106190758_admin_weight_restriction_convert_bool.up.sql new file mode 100644 index 00000000000..f8f923c0ae7 --- /dev/null +++ b/migrations/app/schema/20250106190758_admin_weight_restriction_convert_bool.up.sql @@ -0,0 +1,4 @@ +ALTER TABLE entitlements + ALTER COLUMN admin_restricted_weight_location TYPE boolean USING (COALESCE(admin_restricted_weight_location, false)), + ALTER COLUMN admin_restricted_weight_location SET DEFAULT false, + ALTER COLUMN admin_restricted_weight_location SET NOT NULL; \ No newline at end of file diff --git a/pkg/gen/ghcapi/embedded_spec.go b/pkg/gen/ghcapi/embedded_spec.go index 361f666c222..a0183a05515 100644 --- a/pkg/gen/ghcapi/embedded_spec.go +++ b/pkg/gen/ghcapi/embedded_spec.go @@ -6862,6 +6862,11 @@ func init() { "x-nullable": true, "example": true }, + "adminRestrictedWeightLocation": { + "description": "Indicates if the customer is restricted to a specific location for their admin restricted weight.", + "type": "boolean", + "x-nullable": true + }, "agency": { "$ref": "#/definitions/Affiliation" }, @@ -8043,6 +8048,10 @@ func init() { "x-nullable": true, "example": true }, + "adminRestrictedWeightLocation": { + "type": "boolean", + "example": false + }, "authorizedWeight": { "type": "integer", "x-formatting": "weight", @@ -13790,6 +13799,11 @@ func init() { "x-nullable": true, "example": true }, + "adminRestrictedWeightLocation": { + "description": "Indicates if the customer is restricted to a specific location for their admin restricted weight.", + "type": "boolean", + "x-nullable": true + }, "agency": { "$ref": "#/definitions/Affiliation" }, @@ -23602,6 +23616,11 @@ func init() { "x-nullable": true, "example": true }, + "adminRestrictedWeightLocation": { + "description": "Indicates if the customer is restricted to a specific location for their admin restricted weight.", + "type": "boolean", + "x-nullable": true + }, "agency": { "$ref": "#/definitions/Affiliation" }, @@ -24787,6 +24806,10 @@ func init() { "x-nullable": true, "example": true }, + "adminRestrictedWeightLocation": { + "type": "boolean", + "example": false + }, "authorizedWeight": { "type": "integer", "x-formatting": "weight", @@ -30662,6 +30685,11 @@ func init() { "x-nullable": true, "example": true }, + "adminRestrictedWeightLocation": { + "description": "Indicates if the customer is restricted to a specific location for their admin restricted weight.", + "type": "boolean", + "x-nullable": true + }, "agency": { "$ref": "#/definitions/Affiliation" }, diff --git a/pkg/gen/ghcmessages/counseling_update_allowance_payload.go b/pkg/gen/ghcmessages/counseling_update_allowance_payload.go index d6bed9fac0c..c1a0ce9f418 100644 --- a/pkg/gen/ghcmessages/counseling_update_allowance_payload.go +++ b/pkg/gen/ghcmessages/counseling_update_allowance_payload.go @@ -23,6 +23,9 @@ type CounselingUpdateAllowancePayload struct { // Example: true AccompaniedTour *bool `json:"accompaniedTour,omitempty"` + // Indicates if the customer is restricted to a specific location for their admin restricted weight. + AdminRestrictedWeightLocation *bool `json:"adminRestrictedWeightLocation,omitempty"` + // agency Agency *Affiliation `json:"agency,omitempty"` diff --git a/pkg/gen/ghcmessages/entitlements.go b/pkg/gen/ghcmessages/entitlements.go index 2ee15f3d03a..7699f3be0e3 100644 --- a/pkg/gen/ghcmessages/entitlements.go +++ b/pkg/gen/ghcmessages/entitlements.go @@ -23,6 +23,10 @@ type Entitlements struct { // Example: true AccompaniedTour *bool `json:"accompaniedTour,omitempty"` + // admin restricted weight location + // Example: false + AdminRestrictedWeightLocation bool `json:"adminRestrictedWeightLocation,omitempty"` + // authorized weight // Example: 2000 AuthorizedWeight *int64 `json:"authorizedWeight,omitempty"` diff --git a/pkg/gen/ghcmessages/update_allowance_payload.go b/pkg/gen/ghcmessages/update_allowance_payload.go index ee0d677c0e7..0a63d9b9fa9 100644 --- a/pkg/gen/ghcmessages/update_allowance_payload.go +++ b/pkg/gen/ghcmessages/update_allowance_payload.go @@ -23,6 +23,9 @@ type UpdateAllowancePayload struct { // Example: true AccompaniedTour *bool `json:"accompaniedTour,omitempty"` + // Indicates if the customer is restricted to a specific location for their admin restricted weight. + AdminRestrictedWeightLocation *bool `json:"adminRestrictedWeightLocation,omitempty"` + // agency Agency *Affiliation `json:"agency,omitempty"` diff --git a/pkg/gen/primeapi/embedded_spec.go b/pkg/gen/primeapi/embedded_spec.go index 52039d783cc..5df9a70d690 100644 --- a/pkg/gen/primeapi/embedded_spec.go +++ b/pkg/gen/primeapi/embedded_spec.go @@ -1730,6 +1730,10 @@ func init() { "Entitlements": { "type": "object", "properties": { + "adminRestrictedWeightLocation": { + "type": "boolean", + "example": false + }, "authorizedWeight": { "type": "integer", "x-formatting": "weight", @@ -6624,6 +6628,10 @@ func init() { "Entitlements": { "type": "object", "properties": { + "adminRestrictedWeightLocation": { + "type": "boolean", + "example": false + }, "authorizedWeight": { "type": "integer", "x-formatting": "weight", diff --git a/pkg/gen/primemessages/entitlements.go b/pkg/gen/primemessages/entitlements.go index c51ada24273..a1e606a00aa 100644 --- a/pkg/gen/primemessages/entitlements.go +++ b/pkg/gen/primemessages/entitlements.go @@ -19,6 +19,10 @@ import ( // swagger:model Entitlements type Entitlements struct { + // admin restricted weight location + // Example: false + AdminRestrictedWeightLocation bool `json:"adminRestrictedWeightLocation,omitempty"` + // authorized weight // Example: 2000 AuthorizedWeight *int64 `json:"authorizedWeight,omitempty"` diff --git a/pkg/gen/primev2api/embedded_spec.go b/pkg/gen/primev2api/embedded_spec.go index f0468e10884..849b5f6783b 100644 --- a/pkg/gen/primev2api/embedded_spec.go +++ b/pkg/gen/primev2api/embedded_spec.go @@ -966,6 +966,10 @@ func init() { "Entitlements": { "type": "object", "properties": { + "adminRestrictedWeightLocation": { + "type": "boolean", + "example": false + }, "authorizedWeight": { "type": "integer", "x-formatting": "weight", @@ -4573,6 +4577,10 @@ func init() { "Entitlements": { "type": "object", "properties": { + "adminRestrictedWeightLocation": { + "type": "boolean", + "example": false + }, "authorizedWeight": { "type": "integer", "x-formatting": "weight", diff --git a/pkg/gen/primev2messages/entitlements.go b/pkg/gen/primev2messages/entitlements.go index e29d3f733e3..b39c4b64fd8 100644 --- a/pkg/gen/primev2messages/entitlements.go +++ b/pkg/gen/primev2messages/entitlements.go @@ -19,6 +19,10 @@ import ( // swagger:model Entitlements type Entitlements struct { + // admin restricted weight location + // Example: false + AdminRestrictedWeightLocation bool `json:"adminRestrictedWeightLocation,omitempty"` + // authorized weight // Example: 2000 AuthorizedWeight *int64 `json:"authorizedWeight,omitempty"` diff --git a/pkg/gen/primev3api/embedded_spec.go b/pkg/gen/primev3api/embedded_spec.go index bb5a844cfe0..b5fc1983191 100644 --- a/pkg/gen/primev3api/embedded_spec.go +++ b/pkg/gen/primev3api/embedded_spec.go @@ -1128,6 +1128,10 @@ func init() { "Entitlements": { "type": "object", "properties": { + "adminRestrictedWeightLocation": { + "type": "boolean", + "example": false + }, "authorizedWeight": { "type": "integer", "x-formatting": "weight", @@ -5382,6 +5386,10 @@ func init() { "Entitlements": { "type": "object", "properties": { + "adminRestrictedWeightLocation": { + "type": "boolean", + "example": false + }, "authorizedWeight": { "type": "integer", "x-formatting": "weight", diff --git a/pkg/gen/primev3messages/entitlements.go b/pkg/gen/primev3messages/entitlements.go index 1e228c6350f..d642d70f69b 100644 --- a/pkg/gen/primev3messages/entitlements.go +++ b/pkg/gen/primev3messages/entitlements.go @@ -19,6 +19,10 @@ import ( // swagger:model Entitlements type Entitlements struct { + // admin restricted weight location + // Example: false + AdminRestrictedWeightLocation bool `json:"adminRestrictedWeightLocation,omitempty"` + // authorized weight // Example: 2000 AuthorizedWeight *int64 `json:"authorizedWeight,omitempty"` diff --git a/pkg/gen/supportapi/embedded_spec.go b/pkg/gen/supportapi/embedded_spec.go index 31eea1917ec..c50b1a37c98 100644 --- a/pkg/gen/supportapi/embedded_spec.go +++ b/pkg/gen/supportapi/embedded_spec.go @@ -1110,6 +1110,10 @@ func init() { "Entitlement": { "type": "object", "properties": { + "adminRestrictedWeightLocation": { + "type": "boolean", + "example": false + }, "authorizedWeight": { "type": "integer", "x-formatting": "weight", @@ -3977,6 +3981,10 @@ func init() { "Entitlement": { "type": "object", "properties": { + "adminRestrictedWeightLocation": { + "type": "boolean", + "example": false + }, "authorizedWeight": { "type": "integer", "x-formatting": "weight", diff --git a/pkg/gen/supportmessages/entitlement.go b/pkg/gen/supportmessages/entitlement.go index 434ad8aeed3..4ae036d582c 100644 --- a/pkg/gen/supportmessages/entitlement.go +++ b/pkg/gen/supportmessages/entitlement.go @@ -19,6 +19,10 @@ import ( // swagger:model Entitlement type Entitlement struct { + // admin restricted weight location + // Example: false + AdminRestrictedWeightLocation bool `json:"adminRestrictedWeightLocation,omitempty"` + // authorized weight // Example: 2000 AuthorizedWeight *int64 `json:"authorizedWeight,omitempty"` diff --git a/pkg/handlers/ghcapi/internal/payloads/model_to_payload.go b/pkg/handlers/ghcapi/internal/payloads/model_to_payload.go index caa4aef11d5..482074aa402 100644 --- a/pkg/handlers/ghcapi/internal/payloads/model_to_payload.go +++ b/pkg/handlers/ghcapi/internal/payloads/model_to_payload.go @@ -717,6 +717,7 @@ func Entitlement(entitlement *models.Entitlement) *ghcmessages.Entitlements { } requiredMedicalEquipmentWeight := int64(entitlement.RequiredMedicalEquipmentWeight) gunSafe := entitlement.GunSafe + adminRestrictedWeightLocation := entitlement.AdminRestrictedWeightLocation var accompaniedTour *bool if entitlement.AccompaniedTour != nil { accompaniedTour = models.BoolPointer(*entitlement.AccompaniedTour) @@ -750,8 +751,9 @@ func Entitlement(entitlement *models.Entitlement) *ghcmessages.Entitlements { AccompaniedTour: accompaniedTour, UnaccompaniedBaggageAllowance: ubAllowance, OrganizationalClothingAndIndividualEquipment: entitlement.OrganizationalClothingAndIndividualEquipment, - GunSafe: gunSafe, - ETag: etag.GenerateEtag(entitlement.UpdatedAt), + GunSafe: gunSafe, + AdminRestrictedWeightLocation: adminRestrictedWeightLocation, + ETag: etag.GenerateEtag(entitlement.UpdatedAt), } } diff --git a/pkg/handlers/primeapi/payloads/model_to_payload.go b/pkg/handlers/primeapi/payloads/model_to_payload.go index d5c76723fa4..57ae9b12a4b 100644 --- a/pkg/handlers/primeapi/payloads/model_to_payload.go +++ b/pkg/handlers/primeapi/payloads/model_to_payload.go @@ -217,6 +217,7 @@ func Entitlement(entitlement *models.Entitlement) *primemessages.Entitlements { UnaccompaniedBaggageAllowance: &ubAllowance, DependentsAuthorized: entitlement.DependentsAuthorized, GunSafe: entitlement.GunSafe, + AdminRestrictedWeightLocation: entitlement.AdminRestrictedWeightLocation, NonTemporaryStorage: entitlement.NonTemporaryStorage, PrivatelyOwnedVehicle: entitlement.PrivatelyOwnedVehicle, ProGearWeight: int64(entitlement.ProGearWeight), diff --git a/pkg/handlers/primeapiv2/payloads/model_to_payload.go b/pkg/handlers/primeapiv2/payloads/model_to_payload.go index 56ad6caabcb..2ece0f55833 100644 --- a/pkg/handlers/primeapiv2/payloads/model_to_payload.go +++ b/pkg/handlers/primeapiv2/payloads/model_to_payload.go @@ -162,6 +162,7 @@ func Entitlement(entitlement *models.Entitlement) *primev2messages.Entitlements UnaccompaniedBaggageAllowance: &ubAllowance, DependentsAuthorized: entitlement.DependentsAuthorized, GunSafe: entitlement.GunSafe, + AdminRestrictedWeightLocation: entitlement.AdminRestrictedWeightLocation, NonTemporaryStorage: entitlement.NonTemporaryStorage, PrivatelyOwnedVehicle: entitlement.PrivatelyOwnedVehicle, ProGearWeight: int64(entitlement.ProGearWeight), diff --git a/pkg/models/ghc_entitlements.go b/pkg/models/ghc_entitlements.go index 383caada3a7..7497291cb8c 100644 --- a/pkg/models/ghc_entitlements.go +++ b/pkg/models/ghc_entitlements.go @@ -31,6 +31,7 @@ type Entitlement struct { OrganizationalClothingAndIndividualEquipment bool `db:"organizational_clothing_and_individual_equipment"` ProGearWeight int `db:"pro_gear_weight"` ProGearWeightSpouse int `db:"pro_gear_weight_spouse"` + AdminRestrictedWeightLocation bool `db:"admin_restricted_weight_location"` CreatedAt time.Time `db:"created_at"` UpdatedAt time.Time `db:"updated_at"` } diff --git a/pkg/services/order/order_updater.go b/pkg/services/order/order_updater.go index 38c991a112a..323bd7a0592 100644 --- a/pkg/services/order/order_updater.go +++ b/pkg/services/order/order_updater.go @@ -456,6 +456,10 @@ func allowanceFromTOOPayload(appCtx appcontext.AppContext, existingOrder models. order.Entitlement.GunSafe = *payload.GunSafe } + if payload.AdminRestrictedWeightLocation != nil { + order.Entitlement.AdminRestrictedWeightLocation = *payload.AdminRestrictedWeightLocation + } + if payload.AccompaniedTour != nil { order.Entitlement.AccompaniedTour = payload.AccompaniedTour } @@ -556,6 +560,10 @@ func allowanceFromCounselingPayload(appCtx appcontext.AppContext, existingOrder order.Entitlement.GunSafe = *payload.GunSafe } + if payload.AdminRestrictedWeightLocation != nil { + order.Entitlement.AdminRestrictedWeightLocation = *payload.AdminRestrictedWeightLocation + } + if payload.AccompaniedTour != nil { order.Entitlement.AccompaniedTour = payload.AccompaniedTour } diff --git a/src/components/Office/AllowancesDetailForm/AllowancesDetailForm.jsx b/src/components/Office/AllowancesDetailForm/AllowancesDetailForm.jsx index 94d8bcc2dc3..edc345478ea 100644 --- a/src/components/Office/AllowancesDetailForm/AllowancesDetailForm.jsx +++ b/src/components/Office/AllowancesDetailForm/AllowancesDetailForm.jsx @@ -20,6 +20,8 @@ const AllowancesDetailForm = ({ header, entitlements, branchOptions, formIsDisab entitlements?.dependentsTwelveAndOver || entitlements?.dependentsUnderTwelve ); + const [isAdminWeightLocationChecked, setIsAdminWeightLocationChecked] = useState(false); + useEffect(() => { // Functional component version of "componentDidMount" // By leaving the dependency array empty this will only run once @@ -164,8 +166,26 @@ const AllowancesDetailForm = ({ header, entitlements, branchOptions, formIsDisab isDisabled={formIsDisabled} /> +
+ setIsAdminWeightLocationChecked(e.target.checked)} + /> + {isAdminWeightLocationChecked && ( + + )} +
-
Weight allowance
+
Standard Weight allowance
{formatWeight(entitlements.totalWeight)}
diff --git a/src/components/Office/AllowancesDetailForm/AllowancesDetailForm.test.jsx b/src/components/Office/AllowancesDetailForm/AllowancesDetailForm.test.jsx index 503ab865df3..fcf825bd404 100644 --- a/src/components/Office/AllowancesDetailForm/AllowancesDetailForm.test.jsx +++ b/src/components/Office/AllowancesDetailForm/AllowancesDetailForm.test.jsx @@ -159,3 +159,40 @@ describe('AllowancesDetailForm', () => { expect(screen.queryByLabelText(/Number of dependents of the age 12 or over/)).toBeInTheDocument(); }); }); +describe('AllowancesDetailForm additional tests', () => { + it('renders gun safe checkbox field', async () => { + render( + + + , + ); + + expect(await screen.findByTestId('gunSafeInput')).toBeInTheDocument(); + }); + + it('renders admin weight location section with conditional weight restriction field', async () => { + render( + + + , + ); + + const adminWeightCheckbox = await screen.findByTestId('adminWeightLocation'); + expect(adminWeightCheckbox).toBeInTheDocument(); + expect(screen.queryByTestId('weightRestrictionInput')).not.toBeInTheDocument(); + await act(async () => { + adminWeightCheckbox.click(); + }); + expect(screen.getByTestId('weightRestrictionInput')).toBeInTheDocument(); + }); + + it('displays the total weight allowance correctly', async () => { + render( + + + , + ); + + expect(await screen.findByTestId('weightAllowance')).toHaveTextContent('11,000'); + }); +}); diff --git a/src/components/Office/DefinitionLists/AllowancesList.jsx b/src/components/Office/DefinitionLists/AllowancesList.jsx index 3d5c1e850cc..3e0cf3dd93d 100644 --- a/src/components/Office/DefinitionLists/AllowancesList.jsx +++ b/src/components/Office/DefinitionLists/AllowancesList.jsx @@ -104,6 +104,14 @@ const AllowancesList = ({ info, showVisualCues }) => {
Gun Safe
{info.gunSafe ? 'Authorized' : 'Unauthorized'}
+
+
Admin Restricted Weight Location
+
{info.adminRestrictedWeightLocation ? 'Yes' : 'No'}
+
+
+
Weight Restriction
+
-
+
); diff --git a/src/constants/MoveHistory/Database/BooleanFields.js b/src/constants/MoveHistory/Database/BooleanFields.js index 91654232fd0..6dc78506343 100644 --- a/src/constants/MoveHistory/Database/BooleanFields.js +++ b/src/constants/MoveHistory/Database/BooleanFields.js @@ -12,6 +12,7 @@ export default { missing_receipt: 'missing_receipt', organizational_clothing_and_individual_equipment: 'organizational_clothing_and_individual_equipment', gun_safe: 'gun_safe', + admin_restricted_weight_location: 'admin_restricted_weight_location', email_is_preferred: 'email_is_preferred', phone_is_preferred: 'phone_is_preferred', uses_external_vendor: 'uses_external_vendor', diff --git a/src/constants/MoveHistory/Database/FieldMappings.js b/src/constants/MoveHistory/Database/FieldMappings.js index 737df5b08ae..1b216087f52 100644 --- a/src/constants/MoveHistory/Database/FieldMappings.js +++ b/src/constants/MoveHistory/Database/FieldMappings.js @@ -39,6 +39,7 @@ export default { required_medical_equipment_weight: 'Required medical equipment', organizational_clothing_and_individual_equipment: 'OCIE', gun_safe: 'Gun Safe', + admin_restricted_weight_location: 'Admin restricted weight location', requested_pickup_date: 'Requested pickup date', grade: 'Pay grade', shipment_type: 'Shipment type', diff --git a/src/pages/Office/MoveAllowances/MoveAllowances.jsx b/src/pages/Office/MoveAllowances/MoveAllowances.jsx index 9adf62bdc39..1412c39c972 100644 --- a/src/pages/Office/MoveAllowances/MoveAllowances.jsx +++ b/src/pages/Office/MoveAllowances/MoveAllowances.jsx @@ -98,6 +98,7 @@ const MoveAllowances = () => { organizationalClothingAndIndividualEquipment, storageInTransit, gunSafe, + adminRestrictedWeightLocation, accompaniedTour, dependentsTwelveAndOver, dependentsUnderTwelve, @@ -118,6 +119,7 @@ const MoveAllowances = () => { organizationalClothingAndIndividualEquipment, storageInTransit: Number(storageInTransit), gunSafe, + adminRestrictedWeightLocation, accompaniedTour, dependentsTwelveAndOver: Number(dependentsTwelveAndOver), dependentsUnderTwelve: Number(dependentsUnderTwelve), @@ -133,6 +135,7 @@ const MoveAllowances = () => { requiredMedicalEquipmentWeight, organizationalClothingAndIndividualEquipment, gunSafe, + adminRestrictedWeightLocation, storageInTransit, dependentsUnderTwelve, dependentsTwelveAndOver, @@ -148,6 +151,7 @@ const MoveAllowances = () => { requiredMedicalEquipmentWeight: `${requiredMedicalEquipmentWeight}`, organizationalClothingAndIndividualEquipment, gunSafe, + adminRestrictedWeightLocation, storageInTransit: `${storageInTransit}`, accompaniedTour, dependentsUnderTwelve: `${dependentsUnderTwelve}`, diff --git a/src/pages/Office/MoveDetails/MoveDetails.jsx b/src/pages/Office/MoveDetails/MoveDetails.jsx index d47156e3dc0..49209ee870b 100644 --- a/src/pages/Office/MoveDetails/MoveDetails.jsx +++ b/src/pages/Office/MoveDetails/MoveDetails.jsx @@ -410,6 +410,7 @@ const MoveDetails = ({ requiredMedicalEquipmentWeight: allowances.requiredMedicalEquipmentWeight, organizationalClothingAndIndividualEquipment: allowances.organizationalClothingAndIndividualEquipment, gunSafe: allowances.gunSafe, + adminRestrictedWeightLocation: allowances.adminRestrictedWeightLocation, dependentsUnderTwelve: allowances.dependentsUnderTwelve, dependentsTwelveAndOver: allowances.dependentsTwelveAndOver, accompaniedTour: allowances.accompaniedTour, diff --git a/src/pages/Office/ServicesCounselingMoveAllowances/ServicesCounselingMoveAllowances.jsx b/src/pages/Office/ServicesCounselingMoveAllowances/ServicesCounselingMoveAllowances.jsx index 98a85147767..c954518334c 100644 --- a/src/pages/Office/ServicesCounselingMoveAllowances/ServicesCounselingMoveAllowances.jsx +++ b/src/pages/Office/ServicesCounselingMoveAllowances/ServicesCounselingMoveAllowances.jsx @@ -86,6 +86,7 @@ const ServicesCounselingMoveAllowances = () => { organizationalClothingAndIndividualEquipment, storageInTransit, gunSafe, + adminRestrictedWeightLocation, accompaniedTour, dependentsTwelveAndOver, dependentsUnderTwelve, @@ -106,6 +107,7 @@ const ServicesCounselingMoveAllowances = () => { storageInTransit: Number(storageInTransit), organizationalClothingAndIndividualEquipment, gunSafe, + adminRestrictedWeightLocation, accompaniedTour, dependentsTwelveAndOver: Number(dependentsTwelveAndOver), dependentsUnderTwelve: Number(dependentsUnderTwelve), @@ -121,6 +123,7 @@ const ServicesCounselingMoveAllowances = () => { requiredMedicalEquipmentWeight, organizationalClothingAndIndividualEquipment, gunSafe, + adminRestrictedWeightLocation, storageInTransit, dependentsUnderTwelve, dependentsTwelveAndOver, @@ -136,6 +139,7 @@ const ServicesCounselingMoveAllowances = () => { requiredMedicalEquipmentWeight: `${requiredMedicalEquipmentWeight}`, storageInTransit: `${storageInTransit}`, gunSafe, + adminRestrictedWeightLocation, organizationalClothingAndIndividualEquipment, accompaniedTour, dependentsUnderTwelve: `${dependentsUnderTwelve}`, diff --git a/src/pages/Office/ServicesCounselingMoveDetails/ServicesCounselingMoveDetails.jsx b/src/pages/Office/ServicesCounselingMoveDetails/ServicesCounselingMoveDetails.jsx index 82e50380a2f..da6d6a2a34d 100644 --- a/src/pages/Office/ServicesCounselingMoveDetails/ServicesCounselingMoveDetails.jsx +++ b/src/pages/Office/ServicesCounselingMoveDetails/ServicesCounselingMoveDetails.jsx @@ -387,6 +387,7 @@ const ServicesCounselingMoveDetails = ({ requiredMedicalEquipmentWeight: allowances.requiredMedicalEquipmentWeight, organizationalClothingAndIndividualEquipment: allowances.organizationalClothingAndIndividualEquipment, gunSafe: allowances.gunSafe, + adminRestrictedWeightLocation: allowances.adminRestrictedWeightLocation, dependentsUnderTwelve: allowances.dependentsUnderTwelve, dependentsTwelveAndOver: allowances.dependentsTwelveAndOver, accompaniedTour: allowances.accompaniedTour, diff --git a/swagger-def/definitions/prime/Entitlements.yaml b/swagger-def/definitions/prime/Entitlements.yaml index 5722870f9d7..8a95dccf41c 100644 --- a/swagger-def/definitions/prime/Entitlements.yaml +++ b/swagger-def/definitions/prime/Entitlements.yaml @@ -21,6 +21,9 @@ properties: gunSafe: type: boolean example: false + adminRestrictedWeightLocation: + type: boolean + example: false nonTemporaryStorage: example: false type: boolean diff --git a/swagger-def/ghc.yaml b/swagger-def/ghc.yaml index a0df07f3800..c39682a8598 100644 --- a/swagger-def/ghc.yaml +++ b/swagger-def/ghc.yaml @@ -1,4 +1,4 @@ -swagger: '2.0' +swagger: "2.0" info: contact: email: milmove-developers@caci.com @@ -6,7 +6,7 @@ info: $ref: info/ghc_description.md license: name: MIT - url: 'https://opensource.org/licenses/MIT' + url: "https://opensource.org/licenses/MIT" title: MilMove GHC API version: 0.0.1 basePath: /ghc/v1 @@ -15,7 +15,7 @@ schemes: tags: - name: queues - name: move - - $ref: 'tags/order.yaml' + - $ref: "tags/order.yaml" - name: moveTaskOrder - name: customer - name: mtoServiceItem @@ -31,7 +31,7 @@ tags: - name: paymentRequests - name: reServiceItems paths: - '/customer': + "/customer": post: summary: Creates a customer with Okta option description: Creates a customer with option to also create an Okta profile account based on the office user's input when completing the UI form and submitting. @@ -47,28 +47,28 @@ paths: name: body required: true schema: - $ref: '#/definitions/CreateCustomerPayload' + $ref: "#/definitions/CreateCustomerPayload" responses: - '200': + "200": description: successfully created the customer schema: - $ref: '#/definitions/CreatedCustomer' - '400': - $ref: '#/responses/InvalidRequest' - '401': - $ref: '#/responses/PermissionDenied' - '403': - $ref: '#/responses/PermissionDenied' - '404': - $ref: '#/responses/NotFound' - '409': - $ref: '#/responses/Conflict' - '412': - $ref: '#/responses/PreconditionFailed' - '422': - $ref: '#/responses/UnprocessableEntity' - '500': - $ref: '#/responses/ServerError' + $ref: "#/definitions/CreatedCustomer" + "400": + $ref: "#/responses/InvalidRequest" + "401": + $ref: "#/responses/PermissionDenied" + "403": + $ref: "#/responses/PermissionDenied" + "404": + $ref: "#/responses/NotFound" + "409": + $ref: "#/responses/Conflict" + "412": + $ref: "#/responses/PreconditionFailed" + "422": + $ref: "#/responses/UnprocessableEntity" + "500": + $ref: "#/responses/ServerError" /open/requested-office-users: post: consumes: @@ -92,19 +92,19 @@ paths: name: officeUser description: Office User information schema: - $ref: '#/definitions/OfficeUserCreate' + $ref: "#/definitions/OfficeUserCreate" responses: - '201': + "201": description: successfully requested the creation of provided office user schema: - $ref: '#/definitions/OfficeUser' - '422': + $ref: "#/definitions/OfficeUser" + "422": description: validation error schema: - $ref: '#/definitions/ValidationError' - '500': + $ref: "#/definitions/ValidationError" + "500": description: internal server error - '/customer/{customerID}': + "/customer/{customerID}": parameters: - description: ID of customer to use in: path @@ -117,20 +117,20 @@ paths: - application/json parameters: [] responses: - '200': + "200": description: Successfully retrieved information on an individual customer schema: - $ref: '#/definitions/Customer' - '400': - $ref: '#/responses/InvalidRequest' - '401': - $ref: '#/responses/PermissionDenied' - '403': - $ref: '#/responses/PermissionDenied' - '404': - $ref: '#/responses/NotFound' - '500': - $ref: '#/responses/ServerError' + $ref: "#/definitions/Customer" + "400": + $ref: "#/responses/InvalidRequest" + "401": + $ref: "#/responses/PermissionDenied" + "403": + $ref: "#/responses/PermissionDenied" + "404": + $ref: "#/responses/NotFound" + "500": + $ref: "#/responses/ServerError" tags: - customer description: Returns a given customer @@ -151,30 +151,30 @@ paths: name: body required: true schema: - $ref: '#/definitions/UpdateCustomerPayload' + $ref: "#/definitions/UpdateCustomerPayload" - in: header name: If-Match type: string required: true responses: - '200': + "200": description: updated instance of orders schema: - $ref: '#/definitions/Customer' - '400': - $ref: '#/responses/InvalidRequest' - '401': - $ref: '#/responses/PermissionDenied' - '403': - $ref: '#/responses/PermissionDenied' - '404': - $ref: '#/responses/NotFound' - '412': - $ref: '#/responses/PreconditionFailed' - '422': - $ref: '#/responses/UnprocessableEntity' - '500': - $ref: '#/responses/ServerError' + $ref: "#/definitions/Customer" + "400": + $ref: "#/responses/InvalidRequest" + "401": + $ref: "#/responses/PermissionDenied" + "403": + $ref: "#/responses/PermissionDenied" + "404": + $ref: "#/responses/NotFound" + "412": + $ref: "#/responses/PreconditionFailed" + "422": + $ref: "#/responses/UnprocessableEntity" + "500": + $ref: "#/responses/ServerError" x-permissions: - update.customer /customer/search: @@ -223,22 +223,30 @@ paths: sort: type: string x-nullable: true - enum: [customerName, edipi, emplid, branch, personalEmail, telephone] + enum: + [ + customerName, + edipi, + emplid, + branch, + personalEmail, + telephone, + ] order: type: string x-nullable: true enum: [asc, desc] description: field that results should be sorted by responses: - '200': + "200": description: Successfully returned all customers matching the criteria schema: - $ref: '#/definitions/SearchCustomersResult' - '403': - $ref: '#/responses/PermissionDenied' - '500': - $ref: '#/responses/ServerError' - '/move/{locator}': + $ref: "#/definitions/SearchCustomersResult" + "403": + $ref: "#/responses/PermissionDenied" + "500": + $ref: "#/responses/ServerError" + "/move/{locator}": parameters: - description: Code used to identify a move in the system in: path @@ -250,26 +258,26 @@ paths: - application/json parameters: [] responses: - '200': + "200": description: Successfully retrieved the individual move schema: - $ref: '#/definitions/Move' - '400': - $ref: '#/responses/InvalidRequest' - '401': - $ref: '#/responses/PermissionDenied' - '403': - $ref: '#/responses/PermissionDenied' - '404': - $ref: '#/responses/NotFound' - '500': - $ref: '#/responses/ServerError' + $ref: "#/definitions/Move" + "400": + $ref: "#/responses/InvalidRequest" + "401": + $ref: "#/responses/PermissionDenied" + "403": + $ref: "#/responses/PermissionDenied" + "404": + $ref: "#/responses/NotFound" + "500": + $ref: "#/responses/ServerError" tags: - move description: Returns a given move for a unique alphanumeric locator string summary: Returns a given move operationId: getMove - '/move/{locator}/history': + "/move/{locator}/history": parameters: - description: Code used to identify a move in the system in: path @@ -289,26 +297,26 @@ paths: type: integer description: results per page responses: - '200': + "200": description: Successfully retrieved the individual move history schema: - $ref: '#/definitions/MoveHistoryResult' - '400': - $ref: '#/responses/InvalidRequest' - '401': - $ref: '#/responses/PermissionDenied' - '403': - $ref: '#/responses/PermissionDenied' - '404': - $ref: '#/responses/NotFound' - '500': - $ref: '#/responses/ServerError' + $ref: "#/definitions/MoveHistoryResult" + "400": + $ref: "#/responses/InvalidRequest" + "401": + $ref: "#/responses/PermissionDenied" + "403": + $ref: "#/responses/PermissionDenied" + "404": + $ref: "#/responses/NotFound" + "500": + $ref: "#/responses/ServerError" tags: - move description: Returns the history for a given move for a unique alphanumeric locator string summary: Returns the history of an identified move operationId: getMoveHistory - '/moves/{moveID}/shipment-evaluation-reports-list': + "/moves/{moveID}/shipment-evaluation-reports-list": parameters: - description: Code used to identify a move in the system in: path @@ -320,26 +328,26 @@ paths: produces: - application/json responses: - '200': + "200": description: Successfully retrieved the move's evaluation reports schema: - $ref: '#/definitions/EvaluationReportList' - '400': - $ref: '#/responses/InvalidRequest' - '401': - $ref: '#/responses/PermissionDenied' - '403': - $ref: '#/responses/PermissionDenied' - '404': - $ref: '#/responses/NotFound' - '500': - $ref: '#/responses/ServerError' + $ref: "#/definitions/EvaluationReportList" + "400": + $ref: "#/responses/InvalidRequest" + "401": + $ref: "#/responses/PermissionDenied" + "403": + $ref: "#/responses/PermissionDenied" + "404": + $ref: "#/responses/NotFound" + "500": + $ref: "#/responses/ServerError" tags: - move description: Returns shipment evaluation reports for the specified move that are visible to the current office user summary: Returns shipment evaluation reports for the specified move that are visible to the current office user operationId: getMoveShipmentEvaluationReportsList - '/moves/{moveID}/counseling-evaluation-reports-list': + "/moves/{moveID}/counseling-evaluation-reports-list": parameters: - description: Code used to identify a move in the system in: path @@ -351,26 +359,26 @@ paths: produces: - application/json responses: - '200': + "200": description: Successfully retrieved the move's evaluation reports schema: - $ref: '#/definitions/EvaluationReportList' - '400': - $ref: '#/responses/InvalidRequest' - '401': - $ref: '#/responses/PermissionDenied' - '403': - $ref: '#/responses/PermissionDenied' - '404': - $ref: '#/responses/NotFound' - '500': - $ref: '#/responses/ServerError' + $ref: "#/definitions/EvaluationReportList" + "400": + $ref: "#/responses/InvalidRequest" + "401": + $ref: "#/responses/PermissionDenied" + "403": + $ref: "#/responses/PermissionDenied" + "404": + $ref: "#/responses/NotFound" + "500": + $ref: "#/responses/ServerError" tags: - move description: Returns counseling evaluation reports for the specified move that are visible to the current office user summary: Returns counseling evaluation reports for the specified move that are visible to the current office user operationId: getMoveCounselingEvaluationReportsList - '/moves/{moveID}/cancel': + "/moves/{moveID}/cancel": parameters: - description: ID of the move in: path @@ -385,22 +393,22 @@ paths: - application/json parameters: [] responses: - '200': + "200": description: Successfully canceled move schema: - $ref: '#/definitions/Move' - '403': - $ref: '#/responses/PermissionDenied' - '404': - $ref: '#/responses/NotFound' - '409': - $ref: '#/responses/Conflict' - '412': - $ref: '#/responses/PreconditionFailed' - '422': - $ref: '#/responses/UnprocessableEntity' - '500': - $ref: '#/responses/ServerError' + $ref: "#/definitions/Move" + "403": + $ref: "#/responses/PermissionDenied" + "404": + $ref: "#/responses/NotFound" + "409": + $ref: "#/responses/Conflict" + "412": + $ref: "#/responses/PreconditionFailed" + "422": + $ref: "#/responses/UnprocessableEntity" + "500": + $ref: "#/responses/ServerError" tags: - move description: cancels a move @@ -408,7 +416,7 @@ paths: summary: Cancels a move x-permissions: - update.cancelMoveFlag - '/counseling/orders/{orderID}': + "/counseling/orders/{orderID}": parameters: - description: ID of order to update in: path @@ -431,27 +439,27 @@ paths: name: body required: true schema: - $ref: '#/definitions/CounselingUpdateOrderPayload' + $ref: "#/definitions/CounselingUpdateOrderPayload" - in: header name: If-Match type: string required: true responses: - '200': + "200": description: updated instance of orders schema: - $ref: '#/definitions/Order' - '403': - $ref: '#/responses/PermissionDenied' - '404': - $ref: '#/responses/NotFound' - '412': - $ref: '#/responses/PreconditionFailed' - '422': - $ref: '#/responses/UnprocessableEntity' - '500': - $ref: '#/responses/ServerError' - '/orders': + $ref: "#/definitions/Order" + "403": + $ref: "#/responses/PermissionDenied" + "404": + $ref: "#/responses/NotFound" + "412": + $ref: "#/responses/PreconditionFailed" + "422": + $ref: "#/responses/UnprocessableEntity" + "500": + $ref: "#/responses/ServerError" + "/orders": post: summary: Creates an orders model for a logged-in user description: Creates an instance of orders tied to a service member, which allow for creation of a move and an entitlement. Orders are required before the creation of a move @@ -466,23 +474,23 @@ paths: - in: body name: createOrders schema: - $ref: '#/definitions/CreateOrders' + $ref: "#/definitions/CreateOrders" responses: - '200': + "200": description: created instance of orders schema: - $ref: '#/definitions/Order' - '400': + $ref: "#/definitions/Order" + "400": description: invalid request - '401': + "401": description: request requires user authentication - '403': + "403": description: user is not authorized - '422': - $ref: '#/responses/UnprocessableEntity' - '500': + "422": + $ref: "#/responses/UnprocessableEntity" + "500": description: internal server error - '/orders/{orderID}': + "/orders/{orderID}": parameters: - description: ID of order to use in: path @@ -505,30 +513,30 @@ paths: name: body required: true schema: - $ref: '#/definitions/UpdateOrderPayload' + $ref: "#/definitions/UpdateOrderPayload" - in: header name: If-Match type: string required: true responses: - '200': + "200": description: updated instance of orders schema: - $ref: '#/definitions/Order' - '400': - $ref: '#/responses/InvalidRequest' - '403': - $ref: '#/responses/PermissionDenied' - '404': - $ref: '#/responses/NotFound' - '409': - $ref: '#/responses/Conflict' - '412': - $ref: '#/responses/PreconditionFailed' - '422': - $ref: '#/responses/UnprocessableEntity' - '500': - $ref: '#/responses/ServerError' + $ref: "#/definitions/Order" + "400": + $ref: "#/responses/InvalidRequest" + "403": + $ref: "#/responses/PermissionDenied" + "404": + $ref: "#/responses/NotFound" + "409": + $ref: "#/responses/Conflict" + "412": + $ref: "#/responses/PreconditionFailed" + "422": + $ref: "#/responses/UnprocessableEntity" + "500": + $ref: "#/responses/ServerError" x-permissions: - update.orders get: @@ -536,26 +544,26 @@ paths: - application/json parameters: [] responses: - '200': + "200": description: Successfully retrieved order schema: - $ref: '#/definitions/Order' - '400': - $ref: '#/responses/InvalidRequest' - '401': - $ref: '#/responses/PermissionDenied' - '403': - $ref: '#/responses/PermissionDenied' - '404': - $ref: '#/responses/NotFound' - '500': - $ref: '#/responses/ServerError' + $ref: "#/definitions/Order" + "400": + $ref: "#/responses/InvalidRequest" + "401": + $ref: "#/responses/PermissionDenied" + "403": + $ref: "#/responses/PermissionDenied" + "404": + $ref: "#/responses/NotFound" + "500": + $ref: "#/responses/ServerError" tags: - order description: Gets an order operationId: getOrder summary: Gets an order by ID - '/orders/{orderID}/allowances': + "/orders/{orderID}/allowances": parameters: - description: ID of order to use in: path @@ -578,29 +586,29 @@ paths: name: body required: true schema: - $ref: '#/definitions/UpdateAllowancePayload' + $ref: "#/definitions/UpdateAllowancePayload" - in: header name: If-Match type: string required: true responses: - '200': + "200": description: updated instance of allowance schema: - $ref: '#/definitions/Order' - '403': - $ref: '#/responses/PermissionDenied' - '404': - $ref: '#/responses/NotFound' - '412': - $ref: '#/responses/PreconditionFailed' - '422': - $ref: '#/responses/UnprocessableEntity' - '500': - $ref: '#/responses/ServerError' + $ref: "#/definitions/Order" + "403": + $ref: "#/responses/PermissionDenied" + "404": + $ref: "#/responses/NotFound" + "412": + $ref: "#/responses/PreconditionFailed" + "422": + $ref: "#/responses/UnprocessableEntity" + "500": + $ref: "#/responses/ServerError" x-permissions: - update.allowances - '/orders/{orderID}/acknowledge-excess-weight-risk': + "/orders/{orderID}/acknowledge-excess-weight-risk": parameters: - description: ID of order to use in: path @@ -624,23 +632,23 @@ paths: type: string required: true responses: - '200': + "200": description: updated Move schema: - $ref: '#/definitions/Move' - '403': - $ref: '#/responses/PermissionDenied' - '404': - $ref: '#/responses/NotFound' - '412': - $ref: '#/responses/PreconditionFailed' - '422': - $ref: '#/responses/UnprocessableEntity' - '500': - $ref: '#/responses/ServerError' + $ref: "#/definitions/Move" + "403": + $ref: "#/responses/PermissionDenied" + "404": + $ref: "#/responses/NotFound" + "412": + $ref: "#/responses/PreconditionFailed" + "422": + $ref: "#/responses/UnprocessableEntity" + "500": + $ref: "#/responses/ServerError" x-permissions: - update.excessWeightRisk - '/orders/{orderID}/update-billable-weight': + "/orders/{orderID}/update-billable-weight": parameters: - description: ID of order to use in: path @@ -663,29 +671,29 @@ paths: name: body required: true schema: - $ref: '#/definitions/UpdateBillableWeightPayload' + $ref: "#/definitions/UpdateBillableWeightPayload" - in: header name: If-Match type: string required: true responses: - '200': + "200": description: updated Order schema: - $ref: '#/definitions/Order' - '403': - $ref: '#/responses/PermissionDenied' - '404': - $ref: '#/responses/NotFound' - '412': - $ref: '#/responses/PreconditionFailed' - '422': - $ref: '#/responses/UnprocessableEntity' - '500': - $ref: '#/responses/ServerError' + $ref: "#/definitions/Order" + "403": + $ref: "#/responses/PermissionDenied" + "404": + $ref: "#/responses/NotFound" + "412": + $ref: "#/responses/PreconditionFailed" + "422": + $ref: "#/responses/UnprocessableEntity" + "500": + $ref: "#/responses/ServerError" x-permissions: - update.billableWeight - '/orders/{orderID}/update-max-billable-weight/tio': + "/orders/{orderID}/update-max-billable-weight/tio": parameters: - description: ID of order to use in: path @@ -708,23 +716,23 @@ paths: name: body required: true schema: - $ref: '#/definitions/UpdateMaxBillableWeightAsTIOPayload' - - $ref: 'parameters/ifMatch.yaml' + $ref: "#/definitions/UpdateMaxBillableWeightAsTIOPayload" + - $ref: "parameters/ifMatch.yaml" responses: - '200': + "200": description: updated Order schema: - $ref: '#/definitions/Order' - '403': - $ref: '#/responses/PermissionDenied' - '404': - $ref: '#/responses/NotFound' - '412': - $ref: '#/responses/PreconditionFailed' - '422': - $ref: '#/responses/UnprocessableEntity' - '500': - $ref: '#/responses/ServerError' + $ref: "#/definitions/Order" + "403": + $ref: "#/responses/PermissionDenied" + "404": + $ref: "#/responses/NotFound" + "412": + $ref: "#/responses/PreconditionFailed" + "422": + $ref: "#/responses/UnprocessableEntity" + "500": + $ref: "#/responses/ServerError" x-permissions: - update.maxBillableWeight /orders/{orderID}/upload_amended_orders: @@ -749,23 +757,23 @@ paths: description: The file to upload. required: true responses: - '201': + "201": description: created upload schema: - $ref: 'definitions/Upload.yaml' - '400': + $ref: "definitions/Upload.yaml" + "400": description: invalid request schema: - $ref: '#/definitions/InvalidRequestResponsePayload' - '403': + $ref: "#/definitions/InvalidRequestResponsePayload" + "403": description: not authorized - '404': + "404": description: not found - '413': + "413": description: payload is too large - '500': + "500": description: server error - '/counseling/orders/{orderID}/allowances': + "/counseling/orders/{orderID}/allowances": parameters: - description: ID of order to use in: path @@ -788,27 +796,27 @@ paths: name: body required: true schema: - $ref: '#/definitions/CounselingUpdateAllowancePayload' + $ref: "#/definitions/CounselingUpdateAllowancePayload" - in: header name: If-Match type: string required: true responses: - '200': + "200": description: updated instance of allowance schema: - $ref: '#/definitions/Order' - '403': - $ref: '#/responses/PermissionDenied' - '404': - $ref: '#/responses/NotFound' - '412': - $ref: '#/responses/PreconditionFailed' - '422': - $ref: '#/responses/UnprocessableEntity' - '500': - $ref: '#/responses/ServerError' - '/move-task-orders/{moveTaskOrderID}': + $ref: "#/definitions/Order" + "403": + $ref: "#/responses/PermissionDenied" + "404": + $ref: "#/responses/NotFound" + "412": + $ref: "#/responses/PreconditionFailed" + "422": + $ref: "#/responses/UnprocessableEntity" + "500": + $ref: "#/responses/ServerError" + "/move-task-orders/{moveTaskOrderID}": parameters: - description: ID of move to use in: path @@ -820,26 +828,26 @@ paths: - application/json parameters: [] responses: - '200': + "200": description: Successfully retrieved move task order schema: - $ref: '#/definitions/MoveTaskOrder' - '400': - $ref: '#/responses/InvalidRequest' - '401': - $ref: '#/responses/PermissionDenied' - '403': - $ref: '#/responses/PermissionDenied' - '404': - $ref: '#/responses/NotFound' - '500': - $ref: '#/responses/ServerError' + $ref: "#/definitions/MoveTaskOrder" + "400": + $ref: "#/responses/InvalidRequest" + "401": + $ref: "#/responses/PermissionDenied" + "403": + $ref: "#/responses/PermissionDenied" + "404": + $ref: "#/responses/NotFound" + "500": + $ref: "#/responses/ServerError" tags: - moveTaskOrder description: Gets a move operationId: getMoveTaskOrder summary: Gets a move by ID - '/move_task_orders/{moveTaskOrderID}/mto_service_items': + "/move_task_orders/{moveTaskOrderID}/mto_service_items": parameters: - description: ID of move for mto service item to use in: path @@ -852,22 +860,22 @@ paths: - application/json parameters: [] responses: - '200': + "200": description: Successfully retrieved all line items for a move task order schema: - $ref: 'definitions/MTOServiceItems.yaml' - '404': - $ref: '#/responses/NotFound' - '422': - $ref: '#/responses/UnprocessableEntity' - '500': - $ref: '#/responses/ServerError' + $ref: "definitions/MTOServiceItems.yaml" + "404": + $ref: "#/responses/NotFound" + "422": + $ref: "#/responses/UnprocessableEntity" + "500": + $ref: "#/responses/ServerError" tags: - mtoServiceItem description: Gets all line items for a move operationId: listMTOServiceItems summary: Gets all line items for a move - '/mto-shipments': + "/mto-shipments": post: summary: createMTOShipment description: | @@ -894,21 +902,21 @@ paths: - in: body name: body schema: - $ref: '#/definitions/CreateMTOShipment' + $ref: "#/definitions/CreateMTOShipment" responses: - '200': + "200": description: Successfully created a MTO shipment. schema: - $ref: 'definitions/MTOShipment.yaml' - '400': - $ref: '#/responses/InvalidRequest' - '404': - $ref: '#/responses/NotFound' - '422': - $ref: '#/responses/UnprocessableEntity' - '500': - $ref: '#/responses/ServerError' - '/move_task_orders/{moveTaskOrderID}/mto_shipments': + $ref: "definitions/MTOShipment.yaml" + "400": + $ref: "#/responses/InvalidRequest" + "404": + $ref: "#/responses/NotFound" + "422": + $ref: "#/responses/UnprocessableEntity" + "500": + $ref: "#/responses/ServerError" + "/move_task_orders/{moveTaskOrderID}/mto_shipments": parameters: - description: ID of move task order for mto shipment to use in: path @@ -921,24 +929,24 @@ paths: - application/json parameters: [] responses: - '200': + "200": description: Successfully retrieved all mto shipments for a move task order schema: - $ref: '#/definitions/MTOShipments' - '403': - $ref: '#/responses/PermissionDenied' - '404': - $ref: '#/responses/NotFound' - '422': - $ref: '#/responses/UnprocessableEntity' - '500': - $ref: '#/responses/ServerError' + $ref: "#/definitions/MTOShipments" + "403": + $ref: "#/responses/PermissionDenied" + "404": + $ref: "#/responses/NotFound" + "422": + $ref: "#/responses/UnprocessableEntity" + "500": + $ref: "#/responses/ServerError" tags: - mtoShipment description: Gets all shipments for a move task order operationId: listMTOShipments summary: Gets all shipments for a move task order - '/shipments/{shipmentID}': + "/shipments/{shipmentID}": get: summary: fetches a shipment by ID description: fetches a shipment by ID @@ -955,20 +963,20 @@ paths: format: uuid type: string responses: - '200': + "200": description: Successfully fetched the shipment schema: - $ref: '#/definitions/MTOShipment' - '400': - $ref: '#/responses/InvalidRequest' - '403': - $ref: '#/responses/PermissionDenied' - '404': - $ref: '#/responses/NotFound' - '422': - $ref: '#/responses/UnprocessableEntity' - '500': - $ref: '#/responses/ServerError' + $ref: "#/definitions/MTOShipment" + "400": + $ref: "#/responses/InvalidRequest" + "403": + $ref: "#/responses/PermissionDenied" + "404": + $ref: "#/responses/NotFound" + "422": + $ref: "#/responses/UnprocessableEntity" + "500": + $ref: "#/responses/ServerError" delete: summary: Soft deletes a shipment by ID description: Soft deletes a shipment by ID @@ -985,21 +993,21 @@ paths: format: uuid type: string responses: - '204': + "204": description: Successfully soft deleted the shipment - '400': - $ref: '#/responses/InvalidRequest' - '403': - $ref: '#/responses/PermissionDenied' - '404': - $ref: '#/responses/NotFound' - '409': - $ref: '#/responses/Conflict' - '422': - $ref: '#/responses/UnprocessableEntity' - '500': - $ref: '#/responses/ServerError' - '/move_task_orders/{moveTaskOrderID}/mto_shipments/{shipmentID}': + "400": + $ref: "#/responses/InvalidRequest" + "403": + $ref: "#/responses/PermissionDenied" + "404": + $ref: "#/responses/NotFound" + "409": + $ref: "#/responses/Conflict" + "422": + $ref: "#/responses/UnprocessableEntity" + "500": + $ref: "#/responses/ServerError" + "/move_task_orders/{moveTaskOrderID}/mto_shipments/{shipmentID}": patch: summary: updateMTOShipment description: | @@ -1052,27 +1060,27 @@ paths: - in: body name: body schema: - $ref: '#/definitions/UpdateShipment' + $ref: "#/definitions/UpdateShipment" responses: - '200': + "200": description: Successfully updated the specified MTO shipment. schema: - $ref: 'definitions/MTOShipment.yaml' - '400': - $ref: '#/responses/InvalidRequest' - '401': - $ref: '#/responses/PermissionDenied' - '403': - $ref: '#/responses/PermissionDenied' - '404': - $ref: '#/responses/NotFound' - '412': - $ref: '#/responses/PreconditionFailed' - '422': - $ref: '#/responses/UnprocessableEntity' - '500': - $ref: '#/responses/ServerError' - '/shipments/{shipmentID}/approve': + $ref: "definitions/MTOShipment.yaml" + "400": + $ref: "#/responses/InvalidRequest" + "401": + $ref: "#/responses/PermissionDenied" + "403": + $ref: "#/responses/PermissionDenied" + "404": + $ref: "#/responses/NotFound" + "412": + $ref: "#/responses/PreconditionFailed" + "422": + $ref: "#/responses/UnprocessableEntity" + "500": + $ref: "#/responses/ServerError" + "/shipments/{shipmentID}/approve": parameters: - description: ID of the shipment in: path @@ -1091,22 +1099,22 @@ paths: type: string required: true responses: - '200': + "200": description: Successfully approved the shipment schema: - $ref: 'definitions/MTOShipment.yaml' - '403': - $ref: '#/responses/PermissionDenied' - '404': - $ref: '#/responses/NotFound' - '409': - $ref: '#/responses/Conflict' - '412': - $ref: '#/responses/PreconditionFailed' - '422': - $ref: '#/responses/UnprocessableEntity' - '500': - $ref: '#/responses/ServerError' + $ref: "definitions/MTOShipment.yaml" + "403": + $ref: "#/responses/PermissionDenied" + "404": + $ref: "#/responses/NotFound" + "409": + $ref: "#/responses/Conflict" + "412": + $ref: "#/responses/PreconditionFailed" + "422": + $ref: "#/responses/UnprocessableEntity" + "500": + $ref: "#/responses/ServerError" tags: - shipment description: Approves a shipment @@ -1114,7 +1122,7 @@ paths: summary: Approves a shipment x-permissions: - update.shipment - '/shipments/{shipmentID}/request-diversion': + "/shipments/{shipmentID}/request-diversion": parameters: - description: ID of the shipment in: path @@ -1136,24 +1144,24 @@ paths: name: body required: true schema: - $ref: '#/definitions/RequestDiversion' + $ref: "#/definitions/RequestDiversion" responses: - '200': + "200": description: Successfully requested the shipment diversion schema: - $ref: 'definitions/MTOShipment.yaml' - '403': - $ref: '#/responses/PermissionDenied' - '404': - $ref: '#/responses/NotFound' - '409': - $ref: '#/responses/Conflict' - '412': - $ref: '#/responses/PreconditionFailed' - '422': - $ref: '#/responses/UnprocessableEntity' - '500': - $ref: '#/responses/ServerError' + $ref: "definitions/MTOShipment.yaml" + "403": + $ref: "#/responses/PermissionDenied" + "404": + $ref: "#/responses/NotFound" + "409": + $ref: "#/responses/Conflict" + "412": + $ref: "#/responses/PreconditionFailed" + "422": + $ref: "#/responses/UnprocessableEntity" + "500": + $ref: "#/responses/ServerError" tags: - shipment description: Requests a shipment diversion @@ -1161,7 +1169,7 @@ paths: summary: Requests a shipment diversion x-permissions: - create.shipmentDiversionRequest - '/shipments/{shipmentID}/approve-diversion': + "/shipments/{shipmentID}/approve-diversion": parameters: - description: ID of the shipment in: path @@ -1180,22 +1188,22 @@ paths: type: string required: true responses: - '200': + "200": description: Successfully approved the shipment diversion schema: - $ref: 'definitions/MTOShipment.yaml' - '403': - $ref: '#/responses/PermissionDenied' - '404': - $ref: '#/responses/NotFound' - '409': - $ref: '#/responses/Conflict' - '412': - $ref: '#/responses/PreconditionFailed' - '422': - $ref: '#/responses/UnprocessableEntity' - '500': - $ref: '#/responses/ServerError' + $ref: "definitions/MTOShipment.yaml" + "403": + $ref: "#/responses/PermissionDenied" + "404": + $ref: "#/responses/NotFound" + "409": + $ref: "#/responses/Conflict" + "412": + $ref: "#/responses/PreconditionFailed" + "422": + $ref: "#/responses/UnprocessableEntity" + "500": + $ref: "#/responses/ServerError" x-permissions: - update.shipment tags: @@ -1203,7 +1211,7 @@ paths: description: Approves a shipment diversion operationId: approveShipmentDiversion summary: Approves a shipment diversion - '/shipments/{shipmentID}/reject': + "/shipments/{shipmentID}/reject": parameters: - description: ID of the shipment in: path @@ -1225,30 +1233,30 @@ paths: name: body required: true schema: - $ref: '#/definitions/RejectShipment' + $ref: "#/definitions/RejectShipment" responses: - '200': + "200": description: Successfully rejected the shipment schema: - $ref: 'definitions/MTOShipment.yaml' - '403': - $ref: '#/responses/PermissionDenied' - '404': - $ref: '#/responses/NotFound' - '409': - $ref: '#/responses/Conflict' - '412': - $ref: '#/responses/PreconditionFailed' - '422': - $ref: '#/responses/UnprocessableEntity' - '500': - $ref: '#/responses/ServerError' + $ref: "definitions/MTOShipment.yaml" + "403": + $ref: "#/responses/PermissionDenied" + "404": + $ref: "#/responses/NotFound" + "409": + $ref: "#/responses/Conflict" + "412": + $ref: "#/responses/PreconditionFailed" + "422": + $ref: "#/responses/UnprocessableEntity" + "500": + $ref: "#/responses/ServerError" tags: - shipment description: rejects a shipment operationId: rejectShipment summary: rejects a shipment - '/shipments/{shipmentID}/request-cancellation': + "/shipments/{shipmentID}/request-cancellation": parameters: - description: ID of the shipment in: path @@ -1267,22 +1275,22 @@ paths: type: string required: true responses: - '200': + "200": description: Successfully requested the shipment cancellation schema: - $ref: 'definitions/MTOShipment.yaml' - '403': - $ref: '#/responses/PermissionDenied' - '404': - $ref: '#/responses/NotFound' - '409': - $ref: '#/responses/Conflict' - '412': - $ref: '#/responses/PreconditionFailed' - '422': - $ref: '#/responses/UnprocessableEntity' - '500': - $ref: '#/responses/ServerError' + $ref: "definitions/MTOShipment.yaml" + "403": + $ref: "#/responses/PermissionDenied" + "404": + $ref: "#/responses/NotFound" + "409": + $ref: "#/responses/Conflict" + "412": + $ref: "#/responses/PreconditionFailed" + "422": + $ref: "#/responses/UnprocessableEntity" + "500": + $ref: "#/responses/ServerError" tags: - shipment description: Requests a shipment cancellation @@ -1290,7 +1298,7 @@ paths: summary: Requests a shipment cancellation x-permissions: - create.shipmentCancellation - '/shipments/{shipmentID}/request-reweigh': + "/shipments/{shipmentID}/request-reweigh": parameters: - description: ID of the shipment in: path @@ -1304,22 +1312,22 @@ paths: produces: - application/json responses: - '200': + "200": description: Successfully requested a reweigh of the shipment schema: - $ref: 'definitions/Reweigh.yaml' - '403': - $ref: '#/responses/PermissionDenied' - '404': - $ref: '#/responses/NotFound' - '409': - $ref: '#/responses/Conflict' - '412': - $ref: '#/responses/PreconditionFailed' - '422': - $ref: '#/responses/UnprocessableEntity' - '500': - $ref: '#/responses/ServerError' + $ref: "definitions/Reweigh.yaml" + "403": + $ref: "#/responses/PermissionDenied" + "404": + $ref: "#/responses/NotFound" + "409": + $ref: "#/responses/Conflict" + "412": + $ref: "#/responses/PreconditionFailed" + "422": + $ref: "#/responses/UnprocessableEntity" + "500": + $ref: "#/responses/ServerError" tags: - shipment - reweigh @@ -1328,7 +1336,7 @@ paths: summary: Requests a shipment reweigh x-permissions: - create.reweighRequest - '/shipments/{shipmentID}/review-shipment-address-update': + "/shipments/{shipmentID}/review-shipment-address-update": parameters: - description: ID of the shipment in: path @@ -1362,29 +1370,30 @@ paths: - officeRemarks - status responses: - '200': + "200": description: Successfully requested a shipment address update schema: - $ref: 'definitions/ShipmentAddressUpdate.yaml' - '403': - $ref: '#/responses/PermissionDenied' - '404': - $ref: '#/responses/NotFound' - '409': - $ref: '#/responses/Conflict' - '412': - $ref: '#/responses/PreconditionFailed' - '422': - $ref: '#/responses/UnprocessableEntity' - '500': - $ref: '#/responses/ServerError' + $ref: "definitions/ShipmentAddressUpdate.yaml" + "403": + $ref: "#/responses/PermissionDenied" + "404": + $ref: "#/responses/NotFound" + "409": + $ref: "#/responses/Conflict" + "412": + $ref: "#/responses/PreconditionFailed" + "422": + $ref: "#/responses/UnprocessableEntity" + "500": + $ref: "#/responses/ServerError" tags: - shipment - description: This endpoint is used to approve a address update request. Office remarks are required. + description: + This endpoint is used to approve a address update request. Office remarks are required. Approving the address update will update the Destination Final Address of the associated service item operationId: reviewShipmentAddressUpdate summary: Allows TOO to review a shipment address update - '/shipments/{shipmentID}/sit-extensions': + "/shipments/{shipmentID}/sit-extensions": post: summary: Create an approved SIT Duration Update description: TOO can creates an already-approved SIT Duration Update on behalf of a customer @@ -1406,7 +1415,7 @@ paths: - in: body name: body schema: - $ref: '#/definitions/CreateApprovedSITDurationUpdate' + $ref: "#/definitions/CreateApprovedSITDurationUpdate" required: true - in: header description: We want the shipment's eTag rather than the SIT Duration Update eTag as the SIT Duration Update is always associated with a shipment @@ -1414,23 +1423,23 @@ paths: type: string required: true responses: - '200': + "200": description: Successfully created a SIT Extension. schema: - $ref: 'definitions/MTOShipment.yaml' - '400': - $ref: '#/responses/InvalidRequest' - '403': - $ref: '#/responses/PermissionDenied' - '404': - $ref: '#/responses/NotFound' - '422': - $ref: '#/responses/UnprocessableEntity' - '500': - $ref: '#/responses/ServerError' + $ref: "definitions/MTOShipment.yaml" + "400": + $ref: "#/responses/InvalidRequest" + "403": + $ref: "#/responses/PermissionDenied" + "404": + $ref: "#/responses/NotFound" + "422": + $ref: "#/responses/UnprocessableEntity" + "500": + $ref: "#/responses/ServerError" x-permissions: - create.SITExtension - '/shipments/{shipmentID}/sit-extensions/{sitExtensionID}/approve': + "/shipments/{shipmentID}/sit-extensions/{sitExtensionID}/approve": parameters: - description: ID of the shipment in: path @@ -1454,29 +1463,29 @@ paths: name: body required: true schema: - $ref: '#/definitions/ApproveSITExtension' + $ref: "#/definitions/ApproveSITExtension" - in: header description: We want the shipment's eTag rather than the SIT extension eTag as the SIT extension is always associated with a shipment name: If-Match type: string required: true responses: - '200': + "200": description: Successfully approved a SIT extension schema: - $ref: 'definitions/MTOShipment.yaml' - '403': - $ref: '#/responses/PermissionDenied' - '404': - $ref: '#/responses/NotFound' - '409': - $ref: '#/responses/Conflict' - '412': - $ref: '#/responses/PreconditionFailed' - '422': - $ref: '#/responses/UnprocessableEntity' - '500': - $ref: '#/responses/ServerError' + $ref: "definitions/MTOShipment.yaml" + "403": + $ref: "#/responses/PermissionDenied" + "404": + $ref: "#/responses/NotFound" + "409": + $ref: "#/responses/Conflict" + "412": + $ref: "#/responses/PreconditionFailed" + "422": + $ref: "#/responses/UnprocessableEntity" + "500": + $ref: "#/responses/ServerError" tags: - shipment - sitExtension @@ -1485,7 +1494,7 @@ paths: summary: Approves a SIT extension x-permissions: - update.SITExtension - '/shipments/{shipmentID}/sit-extensions/{sitExtensionID}/deny': + "/shipments/{shipmentID}/sit-extensions/{sitExtensionID}/deny": parameters: - description: ID of the shipment in: path @@ -1509,28 +1518,28 @@ paths: name: body required: true schema: - $ref: '#/definitions/DenySITExtension' + $ref: "#/definitions/DenySITExtension" - in: header name: If-Match type: string required: true responses: - '200': + "200": description: Successfully denied a SIT extension schema: - $ref: 'definitions/MTOShipment.yaml' - '403': - $ref: '#/responses/PermissionDenied' - '404': - $ref: '#/responses/NotFound' - '409': - $ref: '#/responses/Conflict' - '412': - $ref: '#/responses/PreconditionFailed' - '422': - $ref: '#/responses/UnprocessableEntity' - '500': - $ref: '#/responses/ServerError' + $ref: "definitions/MTOShipment.yaml" + "403": + $ref: "#/responses/PermissionDenied" + "404": + $ref: "#/responses/NotFound" + "409": + $ref: "#/responses/Conflict" + "412": + $ref: "#/responses/PreconditionFailed" + "422": + $ref: "#/responses/UnprocessableEntity" + "500": + $ref: "#/responses/ServerError" tags: - shipment - sitExtension @@ -1539,7 +1548,7 @@ paths: summary: Denies a SIT extension x-permissions: - update.SITExtension - '/shipments/{shipmentID}/sit-service-item/convert-to-customer-expense': + "/shipments/{shipmentID}/sit-service-item/convert-to-customer-expense": parameters: - description: ID of the shipment in: path @@ -1557,28 +1566,28 @@ paths: name: body required: true schema: - $ref: '#/definitions/UpdateSITServiceItemCustomerExpense' + $ref: "#/definitions/UpdateSITServiceItemCustomerExpense" - in: header name: If-Match type: string required: true responses: - '200': + "200": description: Successfully converted to customer expense schema: - $ref: 'definitions/MTOShipment.yaml' - '403': - $ref: '#/responses/PermissionDenied' - '404': - $ref: '#/responses/NotFound' - '409': - $ref: '#/responses/Conflict' - '412': - $ref: '#/responses/PreconditionFailed' - '422': - $ref: '#/responses/UnprocessableEntity' - '500': - $ref: '#/responses/ServerError' + $ref: "definitions/MTOShipment.yaml" + "403": + $ref: "#/responses/PermissionDenied" + "404": + $ref: "#/responses/NotFound" + "409": + $ref: "#/responses/Conflict" + "412": + $ref: "#/responses/PreconditionFailed" + "422": + $ref: "#/responses/UnprocessableEntity" + "500": + $ref: "#/responses/ServerError" tags: - shipment - mtoServiceItem @@ -1608,22 +1617,22 @@ paths: produces: - application/json responses: - '200': + "200": description: All PPM documents and associated uploads for the specified PPM shipment. schema: - $ref: 'definitions/PPMDocuments.yaml' - '401': - $ref: '#/responses/PermissionDenied' - '403': - $ref: '#/responses/PermissionDenied' - '422': - $ref: '#/responses/UnprocessableEntity' - '500': - $ref: '#/responses/ServerError' + $ref: "definitions/PPMDocuments.yaml" + "401": + $ref: "#/responses/PermissionDenied" + "403": + $ref: "#/responses/PermissionDenied" + "422": + $ref: "#/responses/UnprocessableEntity" + "500": + $ref: "#/responses/ServerError" /ppm-shipments/{ppmShipmentId}/weight-ticket/{weightTicketId}: parameters: - - $ref: 'parameters/ppmShipmentId.yaml' - - $ref: 'parameters/weightTicketId.yaml' + - $ref: "parameters/ppmShipmentId.yaml" + - $ref: "parameters/weightTicketId.yaml" patch: summary: Updates a weight ticket document description: | @@ -1637,35 +1646,35 @@ paths: produces: - application/json parameters: - - $ref: 'parameters/ifMatch.yaml' + - $ref: "parameters/ifMatch.yaml" - in: body name: updateWeightTicketPayload required: true schema: - $ref: '#/definitions/UpdateWeightTicket' + $ref: "#/definitions/UpdateWeightTicket" responses: - '200': + "200": description: returns an updated weight ticket object schema: - $ref: 'definitions/WeightTicket.yaml' - '400': - $ref: '#/responses/InvalidRequest' - '401': - $ref: '#/responses/PermissionDenied' - '403': - $ref: '#/responses/PermissionDenied' - '404': - $ref: '#/responses/NotFound' - '412': - $ref: '#/responses/PreconditionFailed' - '422': - $ref: '#/responses/UnprocessableEntity' - '500': - $ref: '#/responses/ServerError' + $ref: "definitions/WeightTicket.yaml" + "400": + $ref: "#/responses/InvalidRequest" + "401": + $ref: "#/responses/PermissionDenied" + "403": + $ref: "#/responses/PermissionDenied" + "404": + $ref: "#/responses/NotFound" + "412": + $ref: "#/responses/PreconditionFailed" + "422": + $ref: "#/responses/UnprocessableEntity" + "500": + $ref: "#/responses/ServerError" /ppm-shipments/{ppmShipmentId}/moving-expenses/{movingExpenseId}: parameters: - - $ref: 'parameters/ppmShipmentId.yaml' - - $ref: 'parameters/movingExpenseId.yaml' + - $ref: "parameters/ppmShipmentId.yaml" + - $ref: "parameters/movingExpenseId.yaml" patch: summary: Updates the moving expense description: | @@ -1679,35 +1688,35 @@ paths: produces: - application/json parameters: - - $ref: 'parameters/ifMatch.yaml' + - $ref: "parameters/ifMatch.yaml" - in: body name: updateMovingExpense required: true schema: - $ref: '#/definitions/UpdateMovingExpense' + $ref: "#/definitions/UpdateMovingExpense" responses: - '200': + "200": description: returns an updated moving expense object schema: - $ref: 'definitions/MovingExpense.yaml' - '400': - $ref: '#/responses/InvalidRequest' - '401': - $ref: '#/responses/PermissionDenied' - '403': - $ref: '#/responses/PermissionDenied' - '404': - $ref: '#/responses/NotFound' - '412': - $ref: '#/responses/PreconditionFailed' - '422': - $ref: '#/responses/UnprocessableEntity' - '500': - $ref: '#/responses/ServerError' - /ppm-shipments/{ppmShipmentId}/pro-gear-weight-tickets/{proGearWeightTicketId}: - parameters: - - $ref: 'parameters/ppmShipmentId.yaml' - - $ref: 'parameters/proGearWeightTicketId.yaml' + $ref: "definitions/MovingExpense.yaml" + "400": + $ref: "#/responses/InvalidRequest" + "401": + $ref: "#/responses/PermissionDenied" + "403": + $ref: "#/responses/PermissionDenied" + "404": + $ref: "#/responses/NotFound" + "412": + $ref: "#/responses/PreconditionFailed" + "422": + $ref: "#/responses/UnprocessableEntity" + "500": + $ref: "#/responses/ServerError" + ? /ppm-shipments/{ppmShipmentId}/pro-gear-weight-tickets/{proGearWeightTicketId} + : parameters: + - $ref: "parameters/ppmShipmentId.yaml" + - $ref: "parameters/proGearWeightTicketId.yaml" patch: summary: Updates a pro-gear weight ticket description: | @@ -1721,31 +1730,31 @@ paths: produces: - application/json parameters: - - $ref: 'parameters/ifMatch.yaml' + - $ref: "parameters/ifMatch.yaml" - in: body name: updateProGearWeightTicket required: true schema: - $ref: '#/definitions/UpdateProGearWeightTicket' + $ref: "#/definitions/UpdateProGearWeightTicket" responses: - '200': + "200": description: returns an updated pro-gear weight ticket object schema: - $ref: 'definitions/ProGearWeightTicket.yaml' - '400': - $ref: '#/responses/InvalidRequest' - '401': - $ref: '#/responses/PermissionDenied' - '403': - $ref: '#/responses/PermissionDenied' - '404': - $ref: '#/responses/NotFound' - '412': - $ref: '#/responses/PreconditionFailed' - '422': - $ref: '#/responses/UnprocessableEntity' - '500': - $ref: '#/responses/ServerError' + $ref: "definitions/ProGearWeightTicket.yaml" + "400": + $ref: "#/responses/InvalidRequest" + "401": + $ref: "#/responses/PermissionDenied" + "403": + $ref: "#/responses/PermissionDenied" + "404": + $ref: "#/responses/NotFound" + "412": + $ref: "#/responses/PreconditionFailed" + "422": + $ref: "#/responses/UnprocessableEntity" + "500": + $ref: "#/responses/ServerError" /ppm-shipments/{ppmShipmentId}/aoa-packet: parameters: - description: the id for the ppmshipment with aoa to be downloaded @@ -1767,7 +1776,7 @@ paths: produces: - application/pdf responses: - '200': + "200": headers: Content-Disposition: type: string @@ -1776,19 +1785,19 @@ paths: schema: format: binary type: file - '400': - $ref: '#/responses/InvalidRequest' - '403': - $ref: '#/responses/PermissionDenied' - '404': - $ref: '#/responses/NotFound' - '422': - $ref: '#/responses/UnprocessableEntity' - '500': - $ref: '#/responses/ServerError' + "400": + $ref: "#/responses/InvalidRequest" + "403": + $ref: "#/responses/PermissionDenied" + "404": + $ref: "#/responses/NotFound" + "422": + $ref: "#/responses/UnprocessableEntity" + "500": + $ref: "#/responses/ServerError" /ppm-shipments/{ppmShipmentId}/finish-document-review: parameters: - - $ref: 'parameters/ppmShipmentId.yaml' + - $ref: "parameters/ppmShipmentId.yaml" patch: summary: Updates a PPM shipment's status after document review description: | @@ -1806,26 +1815,26 @@ paths: type: string required: true responses: - '200': + "200": description: Successfully finished document review schema: - $ref: 'definitions/PPMShipment.yaml' - '400': - $ref: '#/responses/InvalidRequest' - '401': - $ref: '#/responses/PermissionDenied' - '403': - $ref: '#/responses/PermissionDenied' - '404': - $ref: '#/responses/NotFound' - '409': - $ref: '#/responses/Conflict' - '412': - $ref: '#/responses/PreconditionFailed' - '422': - $ref: '#/responses/UnprocessableEntity' - '500': - $ref: '#/responses/ServerError' + $ref: "definitions/PPMShipment.yaml" + "400": + $ref: "#/responses/InvalidRequest" + "401": + $ref: "#/responses/PermissionDenied" + "403": + $ref: "#/responses/PermissionDenied" + "404": + $ref: "#/responses/NotFound" + "409": + $ref: "#/responses/Conflict" + "412": + $ref: "#/responses/PreconditionFailed" + "422": + $ref: "#/responses/UnprocessableEntity" + "500": + $ref: "#/responses/ServerError" x-permissions: - update.shipment /ppm-shipments/{ppmShipmentId}/ppm-sit: @@ -1841,7 +1850,7 @@ paths: produces: - application/json parameters: - - $ref: 'parameters/ppmShipmentId.yaml' + - $ref: "parameters/ppmShipmentId.yaml" - in: header name: If-Match type: string @@ -1849,27 +1858,27 @@ paths: - in: body name: body schema: - $ref: 'definitions/PPMShipmentSIT.yaml' + $ref: "definitions/PPMShipmentSIT.yaml" responses: - '200': + "200": description: Successfully finished PPM SIT update schema: - $ref: 'definitions/PPMShipment.yaml' - '400': - $ref: '#/responses/InvalidRequest' - '403': - $ref: '#/responses/PermissionDenied' - '404': - $ref: '#/responses/NotFound' - '412': - $ref: '#/responses/PreconditionFailed' - '422': - $ref: '#/responses/UnprocessableEntity' - '500': - $ref: '#/responses/ServerError' + $ref: "definitions/PPMShipment.yaml" + "400": + $ref: "#/responses/InvalidRequest" + "403": + $ref: "#/responses/PermissionDenied" + "404": + $ref: "#/responses/NotFound" + "412": + $ref: "#/responses/PreconditionFailed" + "422": + $ref: "#/responses/UnprocessableEntity" + "500": + $ref: "#/responses/ServerError" /ppm-shipments/{ppmShipmentId}/closeout: parameters: - - $ref: 'parameters/ppmShipmentId.yaml' + - $ref: "parameters/ppmShipmentId.yaml" get: summary: Get the closeout calcuations for the specified PPM shipment description: | @@ -1880,23 +1889,23 @@ paths: produces: - application/json responses: - '200': + "200": description: Returns closeout for the specified PPM shipment. schema: - $ref: 'definitions/PPMCloseout.yaml' - '400': - $ref: '#/responses/InvalidRequest' - '403': - $ref: '#/responses/PermissionDenied' - '404': - $ref: '#/responses/NotFound' - '422': - $ref: '#/responses/UnprocessableEntity' - '500': - $ref: '#/responses/ServerError' + $ref: "definitions/PPMCloseout.yaml" + "400": + $ref: "#/responses/InvalidRequest" + "403": + $ref: "#/responses/PermissionDenied" + "404": + $ref: "#/responses/NotFound" + "422": + $ref: "#/responses/UnprocessableEntity" + "500": + $ref: "#/responses/ServerError" /ppm-shipments/{ppmShipmentId}/actual-weight: parameters: - - $ref: 'parameters/ppmShipmentId.yaml' + - $ref: "parameters/ppmShipmentId.yaml" get: summary: Get the actual weight for a PPM shipment description: | @@ -1907,23 +1916,23 @@ paths: produces: - application/json responses: - '200': + "200": description: Returns actual weight for the specified PPM shipment. schema: - $ref: 'definitions/PPMActualWeight.yaml' - '400': - $ref: '#/responses/InvalidRequest' - '403': - $ref: '#/responses/PermissionDenied' - '404': - $ref: '#/responses/NotFound' - '422': - $ref: '#/responses/UnprocessableEntity' - '500': - $ref: '#/responses/ServerError' + $ref: "definitions/PPMActualWeight.yaml" + "400": + $ref: "#/responses/InvalidRequest" + "403": + $ref: "#/responses/PermissionDenied" + "404": + $ref: "#/responses/NotFound" + "422": + $ref: "#/responses/UnprocessableEntity" + "500": + $ref: "#/responses/ServerError" /ppm-shipments/{ppmShipmentId}/sit_location/{sitLocation}/sit-estimated-cost: parameters: - - $ref: 'parameters/ppmShipmentId.yaml' + - $ref: "parameters/ppmShipmentId.yaml" - in: path format: string description: location of sit @@ -1961,20 +1970,20 @@ paths: produces: - application/json responses: - '200': + "200": description: Calculates and returns the SIT estimated cost for the specified PPM shipment. schema: - $ref: 'definitions/PPMSITEstimatedCost.yaml' - '400': - $ref: '#/responses/InvalidRequest' - '403': - $ref: '#/responses/PermissionDenied' - '404': - $ref: '#/responses/NotFound' - '422': - $ref: '#/responses/UnprocessableEntity' - '500': - $ref: '#/responses/ServerError' + $ref: "definitions/PPMSITEstimatedCost.yaml" + "400": + $ref: "#/responses/InvalidRequest" + "403": + $ref: "#/responses/PermissionDenied" + "404": + $ref: "#/responses/NotFound" + "422": + $ref: "#/responses/UnprocessableEntity" + "500": + $ref: "#/responses/ServerError" /ppm-shipments/{ppmShipmentId}/payment-packet: get: summary: Returns PPM payment packet @@ -1992,7 +2001,7 @@ paths: produces: - application/pdf responses: - '200': + "200": headers: Content-Disposition: type: string @@ -2001,17 +2010,17 @@ paths: schema: format: binary type: file - '400': + "400": description: invalid request - '401': + "401": description: request requires user authentication - '403': + "403": description: user is not authorized - '404': + "404": description: ppm not found - '500': + "500": description: internal server error - '/move_task_orders/{moveTaskOrderID}/mto_shipments/{shipmentID}/mto-agents': + "/move_task_orders/{moveTaskOrderID}/mto_shipments/{shipmentID}/mto-agents": parameters: - description: ID of move task order in: path @@ -2030,22 +2039,22 @@ paths: - application/json parameters: [] responses: - '200': + "200": description: Successfully retrieved all agents for a move task order schema: - $ref: 'definitions/MTOAgents.yaml' - '404': - $ref: '#/responses/NotFound' - '422': - $ref: '#/responses/UnprocessableEntity' - '500': - $ref: '#/responses/ServerError' + $ref: "definitions/MTOAgents.yaml" + "404": + $ref: "#/responses/NotFound" + "422": + $ref: "#/responses/UnprocessableEntity" + "500": + $ref: "#/responses/ServerError" tags: - mtoAgent description: Fetches a list of agents associated with a move task order. operationId: fetchMTOAgentList summary: Fetch move task order agents. - '/move-task-orders/{moveTaskOrderID}/service-items/{mtoServiceItemID}': + "/move-task-orders/{moveTaskOrderID}/service-items/{mtoServiceItemID}": parameters: - description: ID of move to use in: path @@ -2062,26 +2071,26 @@ paths: - application/json parameters: [] responses: - '200': + "200": description: Successfully retrieved a line item for a move task order by ID schema: - $ref: 'definitions/MTOServiceItemSingle.yaml' - '400': - $ref: '#/responses/InvalidRequest' - '401': - $ref: '#/responses/PermissionDenied' - '403': - $ref: '#/responses/PermissionDenied' - '404': - $ref: '#/responses/NotFound' - '500': - $ref: '#/responses/ServerError' + $ref: "definitions/MTOServiceItemSingle.yaml" + "400": + $ref: "#/responses/InvalidRequest" + "401": + $ref: "#/responses/PermissionDenied" + "403": + $ref: "#/responses/PermissionDenied" + "404": + $ref: "#/responses/NotFound" + "500": + $ref: "#/responses/ServerError" tags: - mtoServiceItem description: Gets a line item by ID for a move by ID operationId: getMTOServiceItem summary: Gets a line item by ID for a move by ID - '/move-task-orders/{moveTaskOrderID}/service-items/{mtoServiceItemID}/status': + "/move-task-orders/{moveTaskOrderID}/service-items/{mtoServiceItemID}/status": parameters: - description: ID of move to use in: path @@ -2103,32 +2112,32 @@ paths: name: body required: true schema: - $ref: '#/definitions/PatchMTOServiceItemStatusPayload' + $ref: "#/definitions/PatchMTOServiceItemStatusPayload" - in: header name: If-Match type: string required: true responses: - '200': + "200": description: >- Successfully updated status for a line item for a move task order by ID schema: - $ref: 'definitions/MTOServiceItem.yaml' - '400': - $ref: '#/responses/InvalidRequest' - '401': - $ref: '#/responses/PermissionDenied' - '403': - $ref: '#/responses/PermissionDenied' - '404': - $ref: '#/responses/NotFound' - '412': - $ref: '#/responses/PreconditionFailed' - '422': - $ref: '#/responses/UnprocessableEntity' - '500': - $ref: '#/responses/ServerError' + $ref: "definitions/MTOServiceItem.yaml" + "400": + $ref: "#/responses/InvalidRequest" + "401": + $ref: "#/responses/PermissionDenied" + "403": + $ref: "#/responses/PermissionDenied" + "404": + $ref: "#/responses/NotFound" + "412": + $ref: "#/responses/PreconditionFailed" + "422": + $ref: "#/responses/UnprocessableEntity" + "500": + $ref: "#/responses/ServerError" tags: - mtoServiceItem description: Changes the status of a line item for a move by ID @@ -2136,7 +2145,7 @@ paths: summary: Change the status of a line item for a move by ID x-permissions: - update.MTOServiceItem - '/service-item/{mtoServiceItemID}/entry-date-update': + "/service-item/{mtoServiceItemID}/entry-date-update": parameters: - description: ID of the service item in: path @@ -2153,32 +2162,32 @@ paths: name: body required: true schema: - $ref: 'definitions/ServiceItemSitEntryDate.yaml' + $ref: "definitions/ServiceItemSitEntryDate.yaml" responses: - '200': + "200": description: Successfully updated SIT entry date schema: - $ref: 'definitions/MTOServiceItemSingle.yaml' - '400': - $ref: '#/responses/InvalidRequest' - '401': - $ref: '#/responses/PermissionDenied' - '403': - $ref: '#/responses/PermissionDenied' - '404': - $ref: '#/responses/NotFound' - '412': - $ref: '#/responses/PreconditionFailed' - '422': - $ref: '#/responses/UnprocessableEntity' - '500': - $ref: '#/responses/ServerError' + $ref: "definitions/MTOServiceItemSingle.yaml" + "400": + $ref: "#/responses/InvalidRequest" + "401": + $ref: "#/responses/PermissionDenied" + "403": + $ref: "#/responses/PermissionDenied" + "404": + $ref: "#/responses/NotFound" + "412": + $ref: "#/responses/PreconditionFailed" + "422": + $ref: "#/responses/UnprocessableEntity" + "500": + $ref: "#/responses/ServerError" tags: - mtoServiceItem description: Locates the service item in the database and updates the SIT entry date for the selected service item and returns the service item operationId: updateServiceItemSitEntryDate summary: Updates a service item's SIT entry date by ID - '/move-task-orders/{moveTaskOrderID}/status': + "/move-task-orders/{moveTaskOrderID}/status": patch: consumes: - application/json @@ -2197,29 +2206,29 @@ paths: - in: body name: serviceItemCodes schema: - $ref: '#/definitions/MTOApprovalServiceItemCodes' + $ref: "#/definitions/MTOApprovalServiceItemCodes" required: true responses: - '200': + "200": description: Successfully updated move task order status schema: - $ref: '#/definitions/Move' - '400': - $ref: '#/responses/InvalidRequest' - '401': - $ref: '#/responses/PermissionDenied' - '403': - $ref: '#/responses/PermissionDenied' - '404': - $ref: '#/responses/NotFound' - '409': - $ref: '#/responses/Conflict' - '412': - $ref: '#/responses/PreconditionFailed' - '422': - $ref: '#/responses/UnprocessableEntity' - '500': - $ref: '#/responses/ServerError' + $ref: "#/definitions/Move" + "400": + $ref: "#/responses/InvalidRequest" + "401": + $ref: "#/responses/PermissionDenied" + "403": + $ref: "#/responses/PermissionDenied" + "404": + $ref: "#/responses/NotFound" + "409": + $ref: "#/responses/Conflict" + "412": + $ref: "#/responses/PreconditionFailed" + "422": + $ref: "#/responses/UnprocessableEntity" + "500": + $ref: "#/responses/ServerError" tags: - moveTaskOrder description: Changes move task order status to make it available to prime @@ -2228,7 +2237,7 @@ paths: x-permissions: - update.move - create.serviceItem - '/move-task-orders/{moveTaskOrderID}/status/service-counseling-completed': + "/move-task-orders/{moveTaskOrderID}/status/service-counseling-completed": patch: consumes: - application/json @@ -2245,33 +2254,33 @@ paths: type: string required: true responses: - '200': + "200": description: Successfully updated move task order status schema: - $ref: '#/definitions/Move' - '400': - $ref: '#/responses/InvalidRequest' - '401': - $ref: '#/responses/PermissionDenied' - '403': - $ref: '#/responses/PermissionDenied' - '404': - $ref: '#/responses/NotFound' - '409': - $ref: '#/responses/Conflict' - '412': - $ref: '#/responses/PreconditionFailed' - '422': - $ref: '#/responses/UnprocessableEntity' - '500': - $ref: '#/responses/ServerError' + $ref: "#/definitions/Move" + "400": + $ref: "#/responses/InvalidRequest" + "401": + $ref: "#/responses/PermissionDenied" + "403": + $ref: "#/responses/PermissionDenied" + "404": + $ref: "#/responses/NotFound" + "409": + $ref: "#/responses/Conflict" + "412": + $ref: "#/responses/PreconditionFailed" + "422": + $ref: "#/responses/UnprocessableEntity" + "500": + $ref: "#/responses/ServerError" tags: - moveTaskOrder description: Changes move (move task order) status to service counseling completed operationId: updateMTOStatusServiceCounselingCompleted summary: Changes move (move task order) status to service counseling completed - '/move-task-orders/{moveTaskOrderID}/payment-service-items/{paymentServiceItemID}/status': - parameters: + ? "/move-task-orders/{moveTaskOrderID}/payment-service-items/{paymentServiceItemID}/status" + : parameters: - description: ID of move to use in: path name: moveTaskOrderID @@ -2292,32 +2301,32 @@ paths: name: body required: true schema: - $ref: '#/definitions/PaymentServiceItem' + $ref: "#/definitions/PaymentServiceItem" - in: header name: If-Match type: string required: true responses: - '200': + "200": description: >- Successfully updated status for a line item for a move task order by ID schema: - $ref: '#/definitions/PaymentServiceItem' - '400': - $ref: '#/responses/InvalidRequest' - '401': - $ref: '#/responses/PermissionDenied' - '403': - $ref: '#/responses/PermissionDenied' - '404': - $ref: '#/responses/NotFound' - '412': - $ref: '#/responses/PreconditionFailed' - '422': - $ref: '#/responses/UnprocessableEntity' - '500': - $ref: '#/responses/ServerError' + $ref: "#/definitions/PaymentServiceItem" + "400": + $ref: "#/responses/InvalidRequest" + "401": + $ref: "#/responses/PermissionDenied" + "403": + $ref: "#/responses/PermissionDenied" + "404": + $ref: "#/responses/NotFound" + "412": + $ref: "#/responses/PreconditionFailed" + "422": + $ref: "#/responses/UnprocessableEntity" + "500": + $ref: "#/responses/ServerError" tags: - paymentServiceItem description: Changes the status of a line item for a move by ID @@ -2325,7 +2334,7 @@ paths: summary: Change the status of a payment service item for a move by ID x-permissions: - update.paymentServiceItemStatus - '/move-task-orders/{moveTaskOrderID}/billable-weights-reviewed-at': + "/move-task-orders/{moveTaskOrderID}/billable-weights-reviewed-at": patch: consumes: - application/json @@ -2342,31 +2351,31 @@ paths: type: string required: true responses: - '200': + "200": description: Successfully updated move task order billableWeightsReviewedAt field schema: - $ref: '#/definitions/Move' - '400': - $ref: '#/responses/InvalidRequest' - '401': - $ref: '#/responses/PermissionDenied' - '403': - $ref: '#/responses/PermissionDenied' - '404': - $ref: '#/responses/NotFound' - '409': - $ref: '#/responses/Conflict' - '412': - $ref: '#/responses/PreconditionFailed' - '422': - $ref: '#/responses/UnprocessableEntity' - '500': - $ref: '#/responses/ServerError' + $ref: "#/definitions/Move" + "400": + $ref: "#/responses/InvalidRequest" + "401": + $ref: "#/responses/PermissionDenied" + "403": + $ref: "#/responses/PermissionDenied" + "404": + $ref: "#/responses/NotFound" + "409": + $ref: "#/responses/Conflict" + "412": + $ref: "#/responses/PreconditionFailed" + "422": + $ref: "#/responses/UnprocessableEntity" + "500": + $ref: "#/responses/ServerError" tags: - moveTaskOrder description: Changes move (move task order) billableWeightsReviewedAt field to a timestamp operationId: updateMTOReviewedBillableWeightsAt - '/move-task-orders/{moveTaskOrderID}/tio-remarks': + "/move-task-orders/{moveTaskOrderID}/tio-remarks": patch: consumes: - application/json @@ -2386,33 +2395,33 @@ paths: name: body required: true schema: - $ref: '#/definitions/Move' + $ref: "#/definitions/Move" responses: - '200': + "200": description: Successfully updated move task order tioRemarks field schema: - $ref: '#/definitions/Move' - '400': - $ref: '#/responses/InvalidRequest' - '401': - $ref: '#/responses/PermissionDenied' - '403': - $ref: '#/responses/PermissionDenied' - '404': - $ref: '#/responses/NotFound' - '409': - $ref: '#/responses/Conflict' - '412': - $ref: '#/responses/PreconditionFailed' - '422': - $ref: '#/responses/UnprocessableEntity' - '500': - $ref: '#/responses/ServerError' + $ref: "#/definitions/Move" + "400": + $ref: "#/responses/InvalidRequest" + "401": + $ref: "#/responses/PermissionDenied" + "403": + $ref: "#/responses/PermissionDenied" + "404": + $ref: "#/responses/NotFound" + "409": + $ref: "#/responses/Conflict" + "412": + $ref: "#/responses/PreconditionFailed" + "422": + $ref: "#/responses/UnprocessableEntity" + "500": + $ref: "#/responses/ServerError" tags: - moveTaskOrder description: Changes move (move task order) billableWeightsReviewedAt field to a timestamp operationId: updateMoveTIORemarks - '/move-task-orders/{moveTaskOrderID}/entitlements': + "/move-task-orders/{moveTaskOrderID}/entitlements": parameters: - description: ID of move to use in: path @@ -2426,24 +2435,24 @@ paths: tags: - moveTaskOrder responses: - '200': + "200": description: Successfully retrieved entitlements schema: - $ref: '#/definitions/Entitlements' - '400': - $ref: '#/responses/InvalidRequest' - '401': - $ref: '#/responses/PermissionDenied' - '403': - $ref: '#/responses/PermissionDenied' - '404': - $ref: '#/responses/NotFound' - '500': - $ref: '#/responses/ServerError' + $ref: "#/definitions/Entitlements" + "400": + $ref: "#/responses/InvalidRequest" + "401": + $ref: "#/responses/PermissionDenied" + "403": + $ref: "#/responses/PermissionDenied" + "404": + $ref: "#/responses/NotFound" + "500": + $ref: "#/responses/ServerError" description: Gets entitlements operationId: getEntitlements summary: Gets entitlements for a move by ID - '/payment-requests/{paymentRequestID}': + "/payment-requests/{paymentRequestID}": parameters: - description: UUID of payment request format: uuid @@ -2456,20 +2465,20 @@ paths: - application/json parameters: [] responses: - '200': + "200": description: fetched instance of payment request schema: - $ref: '#/definitions/PaymentRequest' - '400': - $ref: '#/responses/InvalidRequest' - '401': - $ref: '#/responses/PermissionDenied' - '403': - $ref: '#/responses/PermissionDenied' - '404': - $ref: '#/responses/NotFound' - '500': - $ref: '#/responses/ServerError' + $ref: "#/definitions/PaymentRequest" + "400": + $ref: "#/responses/InvalidRequest" + "401": + $ref: "#/responses/PermissionDenied" + "403": + $ref: "#/responses/PermissionDenied" + "404": + $ref: "#/responses/NotFound" + "500": + $ref: "#/responses/ServerError" tags: - paymentRequests description: Fetches an instance of a payment request by id @@ -2477,7 +2486,7 @@ paths: summary: Fetches a payment request by id x-permissions: - read.paymentRequest - '/moves/{locator}/closeout-office': + "/moves/{locator}/closeout-office": parameters: - description: move code to identify a move to update the PPM shipment's closeout office for Army and Air Force service members format: string @@ -2512,25 +2521,25 @@ paths: type: string required: true responses: - '200': + "200": description: Successfully set the closeout office for the move schema: - $ref: '#/definitions/Move' - '400': - $ref: '#/responses/InvalidRequest' - '401': - $ref: '#/responses/PermissionDenied' - '403': - $ref: '#/responses/PermissionDenied' - '404': - $ref: '#/responses/NotFound' - '412': - $ref: '#/responses/PreconditionFailed' - '422': - $ref: '#/responses/UnprocessableEntity' - '500': - $ref: '#/responses/ServerError' - '/moves/{locator}/customer-support-remarks': + $ref: "#/definitions/Move" + "400": + $ref: "#/responses/InvalidRequest" + "401": + $ref: "#/responses/PermissionDenied" + "403": + $ref: "#/responses/PermissionDenied" + "404": + $ref: "#/responses/NotFound" + "412": + $ref: "#/responses/PreconditionFailed" + "422": + $ref: "#/responses/UnprocessableEntity" + "500": + $ref: "#/responses/ServerError" + "/moves/{locator}/customer-support-remarks": parameters: - description: move code to identify a move for customer support remarks format: string @@ -2547,20 +2556,20 @@ paths: - in: body name: body schema: - $ref: '#/definitions/CreateCustomerSupportRemark' + $ref: "#/definitions/CreateCustomerSupportRemark" responses: - '200': + "200": description: Successfully created customer support remark schema: - $ref: 'definitions/CustomerSupportRemark.yaml' - '400': - $ref: '#/responses/InvalidRequest' - '404': - $ref: '#/responses/NotFound' - '422': - $ref: '#/responses/UnprocessableEntity' - '500': - $ref: '#/responses/ServerError' + $ref: "definitions/CustomerSupportRemark.yaml" + "400": + $ref: "#/responses/InvalidRequest" + "404": + $ref: "#/responses/NotFound" + "422": + $ref: "#/responses/UnprocessableEntity" + "500": + $ref: "#/responses/ServerError" tags: - customerSupportRemarks description: Creates a customer support remark for a move @@ -2571,24 +2580,24 @@ paths: - application/json parameters: [] responses: - '200': + "200": description: Successfully retrieved all line items for a move task order schema: - $ref: 'definitions/CustomerSupportRemarks.yaml' - '403': - $ref: '#/responses/PermissionDenied' - '404': - $ref: '#/responses/NotFound' - '422': - $ref: '#/responses/UnprocessableEntity' - '500': - $ref: '#/responses/ServerError' + $ref: "definitions/CustomerSupportRemarks.yaml" + "403": + $ref: "#/responses/PermissionDenied" + "404": + $ref: "#/responses/NotFound" + "422": + $ref: "#/responses/UnprocessableEntity" + "500": + $ref: "#/responses/ServerError" tags: - customerSupportRemarks description: Fetches customer support remarks for a move operationId: getCustomerSupportRemarksForMove summary: Fetches customer support remarks using the move code (locator). - '/customer-support-remarks/{customerSupportRemarkID}': + "/customer-support-remarks/{customerSupportRemarkID}": parameters: - in: path description: the customer support remark ID to be modified @@ -2611,22 +2620,22 @@ paths: name: body required: true schema: - $ref: '#/definitions/UpdateCustomerSupportRemarkPayload' + $ref: "#/definitions/UpdateCustomerSupportRemarkPayload" responses: - '200': + "200": description: Successfully updated customer support remark schema: - $ref: 'definitions/CustomerSupportRemark.yaml' - '400': - $ref: '#/responses/InvalidRequest' - '403': - $ref: '#/responses/PermissionDenied' - '404': - $ref: '#/responses/NotFound' - '422': - $ref: '#/responses/UnprocessableEntity' - '500': - $ref: '#/responses/ServerError' + $ref: "definitions/CustomerSupportRemark.yaml" + "400": + $ref: "#/responses/InvalidRequest" + "403": + $ref: "#/responses/PermissionDenied" + "404": + $ref: "#/responses/NotFound" + "422": + $ref: "#/responses/UnprocessableEntity" + "500": + $ref: "#/responses/ServerError" delete: summary: Soft deletes a customer support remark by ID description: Soft deletes a customer support remark by ID @@ -2636,21 +2645,21 @@ paths: produces: - application/json responses: - '204': + "204": description: Successfully soft deleted the shipment - '400': - $ref: '#/responses/InvalidRequest' - '403': - $ref: '#/responses/PermissionDenied' - '404': - $ref: '#/responses/NotFound' - '409': - $ref: '#/responses/Conflict' - '422': - $ref: '#/responses/UnprocessableEntity' - '500': - $ref: '#/responses/ServerError' - '/moves/{locator}/evaluation-reports': + "400": + $ref: "#/responses/InvalidRequest" + "403": + $ref: "#/responses/PermissionDenied" + "404": + $ref: "#/responses/NotFound" + "409": + $ref: "#/responses/Conflict" + "422": + $ref: "#/responses/UnprocessableEntity" + "500": + $ref: "#/responses/ServerError" + "/moves/{locator}/evaluation-reports": parameters: - in: path name: locator @@ -2665,20 +2674,20 @@ paths: - in: body name: body schema: - $ref: '#/definitions/CreateEvaluationReport' + $ref: "#/definitions/CreateEvaluationReport" responses: - '200': + "200": description: Successfully created evaluation report schema: - $ref: '#/definitions/EvaluationReport' - '400': - $ref: '#/responses/InvalidRequest' - '404': - $ref: '#/responses/NotFound' - '422': - $ref: '#/responses/UnprocessableEntity' - '500': - $ref: '#/responses/ServerError' + $ref: "#/definitions/EvaluationReport" + "400": + $ref: "#/responses/InvalidRequest" + "404": + $ref: "#/responses/NotFound" + "422": + $ref: "#/responses/UnprocessableEntity" + "500": + $ref: "#/responses/ServerError" x-permissions: - create.evaluationReport tags: @@ -2686,7 +2695,7 @@ paths: description: Creates an evaluation report operationId: createEvaluationReport summary: Creates an evaluation report - '/evaluation-reports/{reportID}/download': + "/evaluation-reports/{reportID}/download": parameters: - in: path description: the evaluation report ID to be downloaded @@ -2703,7 +2712,7 @@ paths: produces: - application/pdf responses: - '200': + "200": headers: Content-Disposition: type: string @@ -2712,13 +2721,13 @@ paths: schema: format: binary type: file - '403': - $ref: '#/responses/PermissionDenied' - '404': - $ref: '#/responses/NotFound' - '500': - $ref: '#/responses/ServerError' - '/evaluation-reports/{reportID}': + "403": + $ref: "#/responses/PermissionDenied" + "404": + $ref: "#/responses/NotFound" + "500": + $ref: "#/responses/ServerError" + "/evaluation-reports/{reportID}": parameters: - in: path description: the evaluation report ID to be modified @@ -2735,18 +2744,18 @@ paths: produces: - application/json responses: - '200': + "200": description: Successfully got the report schema: - $ref: '#/definitions/EvaluationReport' - '400': - $ref: '#/responses/InvalidRequest' - '403': - $ref: '#/responses/PermissionDenied' - '404': - $ref: '#/responses/NotFound' - '500': - $ref: '#/responses/ServerError' + $ref: "#/definitions/EvaluationReport" + "400": + $ref: "#/responses/InvalidRequest" + "403": + $ref: "#/responses/PermissionDenied" + "404": + $ref: "#/responses/NotFound" + "500": + $ref: "#/responses/ServerError" delete: summary: Deletes an evaluation report by ID description: Deletes an evaluation report by ID @@ -2758,20 +2767,20 @@ paths: produces: - application/json responses: - '204': + "204": description: Successfully deleted the report - '400': - $ref: '#/responses/InvalidRequest' - '403': - $ref: '#/responses/PermissionDenied' - '404': - $ref: '#/responses/NotFound' - '409': - $ref: '#/responses/Conflict' - '422': - $ref: '#/responses/UnprocessableEntity' - '500': - $ref: '#/responses/ServerError' + "400": + $ref: "#/responses/InvalidRequest" + "403": + $ref: "#/responses/PermissionDenied" + "404": + $ref: "#/responses/NotFound" + "409": + $ref: "#/responses/Conflict" + "422": + $ref: "#/responses/UnprocessableEntity" + "500": + $ref: "#/responses/ServerError" put: summary: Saves an evaluation report as a draft description: Saves an evaluation report as a draft @@ -2788,7 +2797,7 @@ paths: - in: body name: body schema: - $ref: '#/definitions/EvaluationReport' + $ref: "#/definitions/EvaluationReport" - in: header name: If-Match type: string @@ -2797,23 +2806,23 @@ paths: Optimistic locking is implemented via the `If-Match` header. If the ETag header does not match the value of the resource on the server, the server rejects the change with a `412 Precondition Failed` error. responses: - '204': + "204": description: Successfully saved the report - '400': - $ref: '#/responses/InvalidRequest' - '403': - $ref: '#/responses/PermissionDenied' - '404': - $ref: '#/responses/NotFound' - '409': - $ref: '#/responses/Conflict' - '412': - $ref: '#/responses/PreconditionFailed' - '422': - $ref: '#/responses/UnprocessableEntity' - '500': - $ref: '#/responses/ServerError' - '/evaluation-reports/{reportID}/submit': + "400": + $ref: "#/responses/InvalidRequest" + "403": + $ref: "#/responses/PermissionDenied" + "404": + $ref: "#/responses/NotFound" + "409": + $ref: "#/responses/Conflict" + "412": + $ref: "#/responses/PreconditionFailed" + "422": + $ref: "#/responses/UnprocessableEntity" + "500": + $ref: "#/responses/ServerError" + "/evaluation-reports/{reportID}/submit": parameters: - in: path description: the evaluation report ID to be modified @@ -2838,21 +2847,21 @@ paths: Optimistic locking is implemented via the `If-Match` header. If the ETag header does not match the value of the resource on the server, the server rejects the change with a `412 Precondition Failed` error. responses: - '204': + "204": description: Successfully submitted an evaluation report with the provided ID - '403': - $ref: '#/responses/PermissionDenied' - '404': - $ref: '#/responses/NotFound' - '412': - $ref: '#/responses/PreconditionFailed' - '422': - $ref: '#/responses/UnprocessableEntity' - '500': - $ref: '#/responses/ServerError' + "403": + $ref: "#/responses/PermissionDenied" + "404": + $ref: "#/responses/NotFound" + "412": + $ref: "#/responses/PreconditionFailed" + "422": + $ref: "#/responses/UnprocessableEntity" + "500": + $ref: "#/responses/ServerError" x-permissions: - update.evaluationReport - '/evaluation-reports/{reportID}/appeal/add': + "/evaluation-reports/{reportID}/appeal/add": parameters: - in: path description: the evaluation report ID @@ -2874,23 +2883,23 @@ paths: - in: body name: body schema: - $ref: '#/definitions/CreateAppeal' + $ref: "#/definitions/CreateAppeal" responses: - '204': + "204": description: Successfully added an appeal to a serious incident - '403': - $ref: '#/responses/PermissionDenied' - '404': - $ref: '#/responses/NotFound' - '412': - $ref: '#/responses/PreconditionFailed' - '422': - $ref: '#/responses/UnprocessableEntity' - '500': - $ref: '#/responses/ServerError' + "403": + $ref: "#/responses/PermissionDenied" + "404": + $ref: "#/responses/NotFound" + "412": + $ref: "#/responses/PreconditionFailed" + "422": + $ref: "#/responses/UnprocessableEntity" + "500": + $ref: "#/responses/ServerError" x-permissions: - update.evaluationReport - '/evaluation-reports/{reportID}/{reportViolationID}/appeal/add': + "/evaluation-reports/{reportID}/{reportViolationID}/appeal/add": parameters: - in: path description: the evaluation report ID @@ -2918,23 +2927,23 @@ paths: - in: body name: body schema: - $ref: '#/definitions/CreateAppeal' + $ref: "#/definitions/CreateAppeal" responses: - '204': + "204": description: Successfully added an appeal to a violation - '403': - $ref: '#/responses/PermissionDenied' - '404': - $ref: '#/responses/NotFound' - '412': - $ref: '#/responses/PreconditionFailed' - '422': - $ref: '#/responses/UnprocessableEntity' - '500': - $ref: '#/responses/ServerError' + "403": + $ref: "#/responses/PermissionDenied" + "404": + $ref: "#/responses/NotFound" + "412": + $ref: "#/responses/PreconditionFailed" + "422": + $ref: "#/responses/UnprocessableEntity" + "500": + $ref: "#/responses/ServerError" x-permissions: - update.evaluationReport - '/pws-violations': + "/pws-violations": get: summary: Fetch the possible PWS violations for an evaluation report description: Fetch the possible PWS violations for an evaluation report @@ -2944,19 +2953,19 @@ paths: produces: - application/json responses: - '200': + "200": description: Successfully retrieved the PWS violations schema: - $ref: '#/definitions/PWSViolations' - '400': - $ref: '#/responses/InvalidRequest' - '403': - $ref: '#/responses/PermissionDenied' - '404': - $ref: '#/responses/NotFound' - '500': - $ref: '#/responses/ServerError' - '/report-violations/{reportID}': + $ref: "#/definitions/PWSViolations" + "400": + $ref: "#/responses/InvalidRequest" + "403": + $ref: "#/responses/PermissionDenied" + "404": + $ref: "#/responses/NotFound" + "500": + $ref: "#/responses/ServerError" + "/report-violations/{reportID}": parameters: - in: path description: the evaluation report ID that has associated violations @@ -2973,18 +2982,18 @@ paths: produces: - application/json responses: - '200': + "200": description: Successfully retrieved the report violations schema: - $ref: '#/definitions/ReportViolations' - '400': - $ref: '#/responses/InvalidRequest' - '403': - $ref: '#/responses/PermissionDenied' - '404': - $ref: '#/responses/NotFound' - '500': - $ref: '#/responses/ServerError' + $ref: "#/definitions/ReportViolations" + "400": + $ref: "#/responses/InvalidRequest" + "403": + $ref: "#/responses/PermissionDenied" + "404": + $ref: "#/responses/NotFound" + "500": + $ref: "#/responses/ServerError" post: summary: Associate violations with an evaluation report description: >- @@ -3003,25 +3012,25 @@ paths: - in: body name: body schema: - $ref: '#/definitions/AssociateReportViolations' + $ref: "#/definitions/AssociateReportViolations" responses: - '204': + "204": description: Successfully saved the report violations - '400': - $ref: '#/responses/InvalidRequest' - '403': - $ref: '#/responses/PermissionDenied' - '404': - $ref: '#/responses/NotFound' - '409': - $ref: '#/responses/Conflict' - '422': - $ref: '#/responses/UnprocessableEntity' - '500': - $ref: '#/responses/ServerError' + "400": + $ref: "#/responses/InvalidRequest" + "403": + $ref: "#/responses/PermissionDenied" + "404": + $ref: "#/responses/NotFound" + "409": + $ref: "#/responses/Conflict" + "422": + $ref: "#/responses/UnprocessableEntity" + "500": + $ref: "#/responses/ServerError" x-permissions: - create.reportViolation - '/moves/{locator}/payment-requests': + "/moves/{locator}/payment-requests": parameters: - description: move code to identify a move for payment requests format: string @@ -3034,18 +3043,18 @@ paths: - application/json parameters: [] responses: - '200': + "200": description: Successfully retrieved all line items for a move task order schema: - $ref: '#/definitions/PaymentRequests' - '403': - $ref: '#/responses/PermissionDenied' - '404': - $ref: '#/responses/NotFound' - '422': - $ref: '#/responses/UnprocessableEntity' - '500': - $ref: '#/responses/ServerError' + $ref: "#/definitions/PaymentRequests" + "403": + $ref: "#/responses/PermissionDenied" + "404": + $ref: "#/responses/NotFound" + "422": + $ref: "#/responses/UnprocessableEntity" + "500": + $ref: "#/responses/ServerError" tags: - paymentRequests description: Fetches payment requests for a move @@ -3053,7 +3062,7 @@ paths: summary: Fetches payment requests using the move code (locator). x-permissions: - read.paymentRequest - '/moves/{moveID}/financial-review-flag': + "/moves/{moveID}/financial-review-flag": parameters: - description: ID of move to flag in: path @@ -3091,20 +3100,20 @@ paths: example: false type: boolean responses: - '200': + "200": description: updated Move schema: - $ref: '#/definitions/Move' - '403': - $ref: '#/responses/PermissionDenied' - '404': - $ref: '#/responses/NotFound' - '412': - $ref: '#/responses/PreconditionFailed' - '422': - $ref: '#/responses/UnprocessableEntity' - '500': - $ref: '#/responses/ServerError' + $ref: "#/definitions/Move" + "403": + $ref: "#/responses/PermissionDenied" + "404": + $ref: "#/responses/NotFound" + "412": + $ref: "#/responses/PreconditionFailed" + "422": + $ref: "#/responses/UnprocessableEntity" + "500": + $ref: "#/responses/ServerError" x-permissions: - update.financialReviewFlag /moves/{moveID}/uploadAdditionalDocuments: @@ -3129,25 +3138,25 @@ paths: description: The file to upload. required: true responses: - '201': + "201": description: created upload schema: - $ref: 'definitions/Upload.yaml' - '400': + $ref: "definitions/Upload.yaml" + "400": description: invalid request schema: - $ref: '#/definitions/InvalidRequestResponsePayload' - '403': + $ref: "#/definitions/InvalidRequestResponsePayload" + "403": description: not authorized - '404': + "404": description: not found - '413': + "413": description: payload is too large - '500': + "500": description: server error x-permissions: - create.supportingDocuments - '/payment-requests/{paymentRequestID}/shipments-payment-sit-balance': + "/payment-requests/{paymentRequestID}/shipments-payment-sit-balance": parameters: - description: payment request ID of the payment request with SIT service items being reviewed name: paymentRequestID @@ -3160,18 +3169,18 @@ paths: - application/json parameters: [] responses: - '200': + "200": description: Successfully retrieved shipments and their SIT days balance from all payment requests on the move schema: - $ref: '#/definitions/ShipmentsPaymentSITBalance' - '403': - $ref: '#/responses/PermissionDenied' - '404': - $ref: '#/responses/NotFound' - '422': - $ref: '#/responses/UnprocessableEntity' - '500': - $ref: '#/responses/ServerError' + $ref: "#/definitions/ShipmentsPaymentSITBalance" + "403": + $ref: "#/responses/PermissionDenied" + "404": + $ref: "#/responses/NotFound" + "422": + $ref: "#/responses/UnprocessableEntity" + "500": + $ref: "#/responses/ServerError" tags: - paymentRequests description: Returns all shipment payment request SIT usage to support partial SIT invoicing @@ -3179,7 +3188,7 @@ paths: summary: Returns all shipment payment request SIT usage to support partial SIT invoicing x-permissions: - read.shipmentsPaymentSITBalance - '/payment-requests/{paymentRequestID}/status': + "/payment-requests/{paymentRequestID}/status": patch: consumes: - application/json @@ -3196,30 +3205,30 @@ paths: name: body required: true schema: - $ref: '#/definitions/UpdatePaymentRequestStatusPayload' + $ref: "#/definitions/UpdatePaymentRequestStatusPayload" - in: header name: If-Match type: string required: true responses: - '200': + "200": description: updated payment request schema: - $ref: '#/definitions/PaymentRequest' - '400': - $ref: '#/responses/InvalidRequest' - '401': - $ref: '#/responses/PermissionDenied' - '403': - $ref: '#/responses/PermissionDenied' - '404': - $ref: '#/responses/NotFound' - '412': - $ref: '#/responses/PreconditionFailed' - '422': - $ref: '#/responses/UnprocessableEntity' - '500': - $ref: '#/responses/ServerError' + $ref: "#/definitions/PaymentRequest" + "400": + $ref: "#/responses/InvalidRequest" + "401": + $ref: "#/responses/PermissionDenied" + "403": + $ref: "#/responses/PermissionDenied" + "404": + $ref: "#/responses/NotFound" + "412": + $ref: "#/responses/PreconditionFailed" + "422": + $ref: "#/responses/UnprocessableEntity" + "500": + $ref: "#/responses/ServerError" tags: - paymentRequests description: Updates status of a payment request by id @@ -3227,7 +3236,7 @@ paths: summary: Updates status of a payment request by id x-permissions: - update.paymentRequest - '/payment-requests/{paymentRequestID}/bulkDownload': + "/payment-requests/{paymentRequestID}/bulkDownload": parameters: - description: the id for the payment-request with files to be downloaded in: path @@ -3244,7 +3253,7 @@ paths: produces: - application/pdf responses: - '200': + "200": headers: Content-Disposition: type: string @@ -3253,10 +3262,10 @@ paths: schema: format: binary type: file - '400': - $ref: '#/responses/InvalidRequest' - '500': - $ref: '#/responses/ServerError' + "400": + $ref: "#/responses/InvalidRequest" + "500": + $ref: "#/responses/ServerError" /documents/{documentId}: get: summary: Returns a document @@ -3272,24 +3281,24 @@ paths: required: true description: UUID of the document to return responses: - '200': + "200": description: the requested document schema: - $ref: 'definitions/Document.yaml' - '400': - $ref: '#/responses/InvalidRequest' - '401': - $ref: '#/responses/PermissionDenied' - '403': - $ref: '#/responses/PermissionDenied' - '404': - $ref: '#/responses/NotFound' - '412': - $ref: '#/responses/PreconditionFailed' - '422': - $ref: '#/responses/UnprocessableEntity' - '500': - $ref: '#/responses/ServerError' + $ref: "definitions/Document.yaml" + "400": + $ref: "#/responses/InvalidRequest" + "401": + $ref: "#/responses/PermissionDenied" + "403": + $ref: "#/responses/PermissionDenied" + "404": + $ref: "#/responses/NotFound" + "412": + $ref: "#/responses/PreconditionFailed" + "422": + $ref: "#/responses/UnprocessableEntity" + "500": + $ref: "#/responses/ServerError" /documents: post: summary: Create a new document @@ -3302,17 +3311,17 @@ paths: name: documentPayload required: true schema: - $ref: '#/definitions/PostDocumentPayload' + $ref: "#/definitions/PostDocumentPayload" responses: - '201': + "201": description: created document schema: - $ref: 'definitions/Document.yaml' - '400': + $ref: "definitions/Document.yaml" + "400": description: invalid request - '403': - $ref: '#/responses/PermissionDenied' - '500': + "403": + $ref: "#/responses/PermissionDenied" + "500": description: server error /queues/counseling: get: @@ -3463,14 +3472,14 @@ paths: description: | Used to illustrate which user is assigned to this payment request. responses: - '200': + "200": description: Successfully returned all moves matching the criteria schema: - $ref: '#/definitions/QueueMovesResult' - '403': - $ref: '#/responses/PermissionDenied' - '500': - $ref: '#/responses/ServerError' + $ref: "#/definitions/QueueMovesResult" + "403": + $ref: "#/responses/PermissionDenied" + "500": + $ref: "#/responses/ServerError" /queues/counseling/origin-list: get: produces: @@ -3491,14 +3500,14 @@ paths: type: string description: Used to return an origins list for a GBLOC other than the default of the current user. Requires the HQ role or a secondary transportation office assignment. The parameter is ignored if the requesting user does not have the necessary role or assignment. responses: - '200': + "200": description: Successfully returned all moves matching the criteria schema: - $ref: '#/definitions/Locations' - '403': - $ref: '#/responses/PermissionDenied' - '500': - $ref: '#/responses/ServerError' + $ref: "#/definitions/Locations" + "403": + $ref: "#/responses/PermissionDenied" + "500": + $ref: "#/responses/ServerError" /queues/prime-moves: get: summary: getPrimeMovesQueue @@ -3540,14 +3549,14 @@ paths: type: string description: order type responses: - '200': + "200": description: Successfully retrieved moves. A successful fetch might still return zero moves. schema: - $ref: '#/definitions/ListPrimeMovesResult' - '403': - $ref: '#/responses/PermissionDenied' - '500': - $ref: '#/responses/ServerError' + $ref: "#/definitions/ListPrimeMovesResult" + "403": + $ref: "#/responses/PermissionDenied" + "500": + $ref: "#/responses/ServerError" /queues/moves: get: produces: @@ -3654,14 +3663,14 @@ paths: type: string description: filters using a counselingOffice name of the move responses: - '200': + "200": description: Successfully returned all moves matching the criteria schema: - $ref: '#/definitions/QueueMovesResult' - '403': - $ref: '#/responses/PermissionDenied' - '500': - $ref: '#/responses/ServerError' + $ref: "#/definitions/QueueMovesResult" + "403": + $ref: "#/responses/PermissionDenied" + "500": + $ref: "#/responses/ServerError" /queues/payment-requests: get: produces: @@ -3676,7 +3685,20 @@ paths: - in: query name: sort type: string - enum: [customerName, locator, submittedAt, branch, status, edipi, emplid, age, originDutyLocation, assignedTo, counselingOffice] + enum: + [ + customerName, + locator, + submittedAt, + branch, + status, + edipi, + emplid, + age, + originDutyLocation, + assignedTo, + counselingOffice, + ] description: field that results should be sorted by - in: query name: order @@ -3750,14 +3772,14 @@ paths: description: | Used to return a queue for a GBLOC other than the default of the current user. Requires the HQ role or a secondary transportation office assignment. The parameter is ignored if the requesting user does not have the necessary role or assignment. responses: - '200': + "200": description: Successfully returned all moves matching the criteria schema: - $ref: '#/definitions/QueuePaymentRequestsResult' - '403': - $ref: '#/responses/PermissionDenied' - '500': - $ref: '#/responses/ServerError' + $ref: "#/definitions/QueuePaymentRequestsResult" + "403": + $ref: "#/responses/PermissionDenied" + "500": + $ref: "#/responses/ServerError" /moves/search: post: produces: @@ -3862,15 +3884,15 @@ paths: enum: [asc, desc] description: field that results should be sorted by responses: - '200': + "200": description: Successfully returned all moves matching the criteria schema: - $ref: '#/definitions/SearchMovesResult' - '403': - $ref: '#/responses/PermissionDenied' - '500': - $ref: '#/responses/ServerError' - '/tac/valid': + $ref: "#/definitions/SearchMovesResult" + "403": + $ref: "#/responses/PermissionDenied" + "500": + $ref: "#/responses/ServerError" + "/tac/valid": get: summary: Validation of a TAC value description: Returns a boolean based on whether a tac value is valid or not @@ -3885,23 +3907,23 @@ paths: required: true description: The tac value to validate responses: - '200': + "200": description: Successfully retrieved validation status schema: - $ref: '#/definitions/TacValid' - '400': - $ref: '#/responses/InvalidRequest' - '401': - $ref: '#/responses/PermissionDenied' - '403': - $ref: '#/responses/PermissionDenied' - '404': - $ref: '#/responses/NotFound' - '500': - $ref: '#/responses/ServerError' + $ref: "#/definitions/TacValid" + "400": + $ref: "#/responses/InvalidRequest" + "401": + $ref: "#/responses/PermissionDenied" + "403": + $ref: "#/responses/PermissionDenied" + "404": + $ref: "#/responses/NotFound" + "500": + $ref: "#/responses/ServerError" /lines-of-accounting: post: - summary: 'Fetch line of accounting' + summary: "Fetch line of accounting" description: > Fetches a line of accounting based on provided service member affiliation, effective date, and Transportation Accounting Code (TAC). It uses these parameters to filter the correct Line of Accounting for the provided TAC. It does this by filtering @@ -3913,33 +3935,33 @@ paths: tags: - linesOfAccounting consumes: - - 'application/json' + - "application/json" produces: - - 'application/json' + - "application/json" parameters: - - in: 'body' - name: 'body' - description: 'Service member affiliation, effective date, and TAC code.' + - in: "body" + name: "body" + description: "Service member affiliation, effective date, and TAC code." required: true schema: - $ref: '#/definitions/FetchLineOfAccountingPayload' + $ref: "#/definitions/FetchLineOfAccountingPayload" responses: - '200': - description: 'Successfully retrieved line of accounting' - schema: - $ref: 'definitions/LineOfAccounting.yaml' - '400': - $ref: '#/responses/InvalidRequest' - '401': - $ref: '#/responses/PermissionDenied' - '403': - $ref: '#/responses/PermissionDenied' - '404': - $ref: '#/responses/NotFound' - '422': - $ref: '#/responses/UnprocessableEntity' - '500': - $ref: '#/responses/ServerError' + "200": + description: "Successfully retrieved line of accounting" + schema: + $ref: "definitions/LineOfAccounting.yaml" + "400": + $ref: "#/responses/InvalidRequest" + "401": + $ref: "#/responses/PermissionDenied" + "403": + $ref: "#/responses/PermissionDenied" + "404": + $ref: "#/responses/NotFound" + "422": + $ref: "#/responses/UnprocessableEntity" + "500": + $ref: "#/responses/ServerError" /transportation-offices: get: produces: @@ -3957,20 +3979,20 @@ paths: minLength: 2 description: Search string for transportation offices responses: - '200': + "200": description: Successfully retrieved transportation offices schema: - $ref: '#/definitions/TransportationOffices' - '400': - $ref: '#/responses/InvalidRequest' - '401': - $ref: '#/responses/PermissionDenied' - '403': - $ref: '#/responses/PermissionDenied' - '404': - $ref: '#/responses/NotFound' - '500': - $ref: '#/responses/ServerError' + $ref: "#/definitions/TransportationOffices" + "400": + $ref: "#/responses/InvalidRequest" + "401": + $ref: "#/responses/PermissionDenied" + "403": + $ref: "#/responses/PermissionDenied" + "404": + $ref: "#/responses/NotFound" + "500": + $ref: "#/responses/ServerError" /open/transportation-offices: get: produces: @@ -3988,20 +4010,20 @@ paths: minLength: 2 description: Search string for transportation offices responses: - '200': + "200": description: Successfully retrieved transportation offices schema: - $ref: '#/definitions/TransportationOffices' - '400': - $ref: '#/responses/InvalidRequest' - '401': - $ref: '#/responses/PermissionDenied' - '403': - $ref: '#/responses/PermissionDenied' - '404': - $ref: '#/responses/NotFound' - '500': - $ref: '#/responses/ServerError' + $ref: "#/definitions/TransportationOffices" + "400": + $ref: "#/responses/InvalidRequest" + "401": + $ref: "#/responses/PermissionDenied" + "403": + $ref: "#/responses/PermissionDenied" + "404": + $ref: "#/responses/NotFound" + "500": + $ref: "#/responses/ServerError" /transportation-offices/gblocs: get: produces: @@ -4012,20 +4034,20 @@ paths: tags: - transportationOffice responses: - '200': + "200": description: Successfully retrieved transportation offices schema: - $ref: '#/definitions/GBLOCs' - '400': - $ref: '#/responses/InvalidRequest' - '401': - $ref: '#/responses/PermissionDenied' - '403': - $ref: '#/responses/PermissionDenied' - '404': - $ref: '#/responses/NotFound' - '500': - $ref: '#/responses/ServerError' + $ref: "#/definitions/GBLOCs" + "400": + $ref: "#/responses/InvalidRequest" + "401": + $ref: "#/responses/PermissionDenied" + "403": + $ref: "#/responses/PermissionDenied" + "404": + $ref: "#/responses/NotFound" + "500": + $ref: "#/responses/ServerError" /addresses/zip-city-lookup/{search}: get: summary: Returns city, state, postal code, and county associated with the specified full/partial postal code or city and state string @@ -4034,23 +4056,23 @@ paths: tags: - addresses parameters: - - in: path - name: search - type: string - required: true + - in: path + name: search + type: string + required: true responses: - '200': + "200": description: the requested list of city, state, county, and postal code matches schema: $ref: "#/definitions/VLocations" - '400': - $ref: '#/responses/InvalidRequest' - '403': - $ref: '#/responses/PermissionDenied' - '404': - $ref: '#/responses/NotFound' - '500': - $ref: '#/responses/ServerError' + "400": + $ref: "#/responses/InvalidRequest" + "403": + $ref: "#/responses/PermissionDenied" + "404": + $ref: "#/responses/NotFound" + "500": + $ref: "#/responses/ServerError" /uploads: post: summary: Create a new upload @@ -4075,19 +4097,19 @@ paths: description: The file to upload. required: true responses: - '201': + "201": description: created upload schema: - $ref: 'definitions/Upload.yaml' - '400': + $ref: "definitions/Upload.yaml" + "400": description: invalid request - '403': + "403": description: not authorized - '404': + "404": description: not found - '413': + "413": description: payload is too large - '500': + "500": description: server error /re-service-items: get: @@ -4099,18 +4121,18 @@ paths: tags: - reServiceItems responses: - '200': + "200": description: Successfully retrieved all ReServiceItems. schema: - $ref: '#/definitions/ReServiceItems' - '400': - $ref: '#/responses/InvalidRequest' - '401': - $ref: '#/responses/PermissionDenied' - '404': - $ref: '#/responses/NotFound' - '500': - $ref: '#/responses/ServerError' + $ref: "#/definitions/ReServiceItems" + "400": + $ref: "#/responses/InvalidRequest" + "401": + $ref: "#/responses/PermissionDenied" + "404": + $ref: "#/responses/NotFound" + "500": + $ref: "#/responses/ServerError" /uploads/{uploadID}: delete: summary: Deletes an upload @@ -4131,17 +4153,17 @@ paths: format: uuid description: ID of the order that the upload belongs to responses: - '204': + "204": description: deleted - '400': + "400": description: invalid request schema: - $ref: '#/definitions/InvalidRequestResponsePayload' - '403': + $ref: "#/definitions/InvalidRequestResponsePayload" + "403": description: not authorized - '404': + "404": description: not found - '500': + "500": description: server error /uploads/get/: get: @@ -4149,20 +4171,20 @@ paths: - application/json parameters: [] responses: - '200': + "200": description: Successfully retrieved upload schema: - $ref: 'definitions/Upload.yaml' - '400': - $ref: '#/responses/InvalidRequest' - '401': - $ref: '#/responses/PermissionDenied' - '403': - $ref: '#/responses/PermissionDenied' - '404': - $ref: '#/responses/NotFound' - '500': - $ref: '#/responses/ServerError' + $ref: "definitions/Upload.yaml" + "400": + $ref: "#/responses/InvalidRequest" + "401": + $ref: "#/responses/PermissionDenied" + "403": + $ref: "#/responses/PermissionDenied" + "404": + $ref: "#/responses/NotFound" + "500": + $ref: "#/responses/ServerError" tags: - uploads description: Gets an upload @@ -4197,19 +4219,19 @@ paths: minimum: 0 maximum: 3 responses: - '201': + "201": description: updated upload schema: - $ref: 'definitions/Upload.yaml' - '400': + $ref: "definitions/Upload.yaml" + "400": description: invalid request - '403': + "403": description: not authorized - '404': + "404": description: not found - '413': + "413": description: payload is too large - '500': + "500": description: server error /application_parameters/{parameterName}: get: @@ -4226,15 +4248,15 @@ paths: required: true description: Parameter Name responses: - '200': + "200": description: Application Parameters schema: - $ref: '#/definitions/ApplicationParameters' - '400': + $ref: "#/definitions/ApplicationParameters" + "400": description: invalid request - '401': + "401": description: request requires user authentication - '500': + "500": description: server error /calendar/{countryCode}/is-weekend-holiday/{date}: get: @@ -4261,18 +4283,18 @@ paths: type: string format: date responses: - '200': + "200": description: Successfully determine if given date is weekend and/or holiday for given country. schema: - $ref: '#/definitions/IsDateWeekendHolidayInfo' - '400': - $ref: '#/responses/InvalidRequest' - '401': - $ref: '#/responses/PermissionDenied' - '404': - $ref: '#/responses/NotFound' - '500': - $ref: '#/responses/ServerError' + $ref: "#/definitions/IsDateWeekendHolidayInfo" + "400": + $ref: "#/responses/InvalidRequest" + "401": + $ref: "#/responses/PermissionDenied" + "404": + $ref: "#/responses/NotFound" + "500": + $ref: "#/responses/ServerError" /moves/{moveID}/assignOfficeUser: parameters: - description: ID of the move @@ -4291,16 +4313,16 @@ paths: name: body required: true schema: - $ref: '#/definitions/AssignOfficeUserBody' + $ref: "#/definitions/AssignOfficeUserBody" responses: - '200': + "200": description: Successfully assigned office user to the move schema: - $ref: '#/definitions/Move' - '404': - $ref: '#/responses/NotFound' - '500': - $ref: '#/responses/ServerError' + $ref: "#/definitions/Move" + "404": + $ref: "#/responses/NotFound" + "500": + $ref: "#/responses/ServerError" tags: - move description: assigns either a services counselor, task ordering officer, or task invoicing officer to the move @@ -4327,12 +4349,12 @@ paths: produces: - application/json responses: - '200': + "200": description: Successfully unassigned office user from the move schema: - $ref: '#/definitions/Move' - '500': - $ref: '#/responses/ServerError' + $ref: "#/definitions/Move" + "500": + $ref: "#/responses/ServerError" tags: - move description: unassigns either a services counselor, task ordering officer, or task invoicing officer from the move @@ -4351,7 +4373,7 @@ paths: produces: - application/json responses: - '200': + "200": description: Successfully unlocked officer's move(s). schema: type: object @@ -4359,8 +4381,8 @@ paths: successMessage: type: string example: OK - '500': - $ref: '#/responses/ServerError' + "500": + $ref: "#/responses/ServerError" tags: - move description: >- @@ -4412,7 +4434,7 @@ definitions: - instance ValidationError: allOf: - - $ref: '#/definitions/ClientError' + - $ref: "#/definitions/ClientError" - type: object properties: invalid_fields: @@ -4504,17 +4526,17 @@ definitions: type: string format: uuid transportationOffice: - $ref: 'definitions/TransportationOffice.yaml' + $ref: "definitions/TransportationOffice.yaml" transportationOfficeAssignments: type: array items: - $ref: 'definitions/TransportationOfficeAssignment.yaml' + $ref: "definitions/TransportationOfficeAssignment.yaml" active: type: boolean roles: type: array items: - $ref: '#/definitions/Role' + $ref: "#/definitions/Role" edipi: type: string otherUniqueId: @@ -4562,18 +4584,18 @@ definitions: type: string format: uuid transportationOffice: - $ref: 'definitions/TransportationOffice.yaml' + $ref: "definitions/TransportationOffice.yaml" OfficeUserCreate: type: object properties: email: type: string - example: 'user@userdomain.com' + example: "user@userdomain.com" title: Email x-nullable: false edipi: type: string - example: '1234567890' + example: "1234567890" maxLength: 10 title: EDIPI x-nullable: true @@ -4603,12 +4625,12 @@ definitions: transportationOfficeId: type: string format: uuid - example: 'c56a4180-65aa-42ec-a945-5fd21dec0538' + example: "c56a4180-65aa-42ec-a945-5fd21dec0538" x-nullable: false roles: type: array items: - $ref: '#/definitions/OfficeUserRole' + $ref: "#/definitions/OfficeUserRole" x-nullable: false required: - firstName @@ -4622,12 +4644,12 @@ definitions: properties: name: type: string - example: 'Task Ordering Officer' + example: "Task Ordering Officer" x-nullable: true title: name roleType: type: string - example: 'task_ordering_officer' + example: "task_ordering_officer" x-nullable: true title: roleType Customer: @@ -4661,9 +4683,9 @@ definitions: example: David x-nullable: true current_address: - $ref: 'definitions/Address.yaml' + $ref: "definitions/Address.yaml" backup_contact: - $ref: '#/definitions/BackupContact' + $ref: "#/definitions/BackupContact" id: type: string format: uuid @@ -4686,7 +4708,7 @@ definitions: pattern: '^[2-9]\d{2}-\d{3}-\d{4}$|^$' x-nullable: true backupAddress: - $ref: 'definitions/Address.yaml' + $ref: "definitions/Address.yaml" cacValidated: type: boolean x-nullable: true @@ -4723,9 +4745,9 @@ definitions: example: David x-nullable: true residentialAddress: - $ref: 'definitions/Address.yaml' + $ref: "definitions/Address.yaml" backupContact: - $ref: '#/definitions/BackupContact' + $ref: "#/definitions/BackupContact" id: type: string format: uuid @@ -4751,7 +4773,7 @@ definitions: pattern: '^[2-9]\d{2}-\d{3}-\d{4}$' x-nullable: true backupAddress: - $ref: 'definitions/Address.yaml' + $ref: "definitions/Address.yaml" cacValidated: type: boolean UpdateCustomerPayload: @@ -4783,9 +4805,9 @@ definitions: x-nullable: true current_address: allOf: - - $ref: 'definitions/Address.yaml' + - $ref: "definitions/Address.yaml" backup_contact: - $ref: '#/definitions/BackupContact' + $ref: "#/definitions/BackupContact" phoneIsPreferred: type: boolean emailIsPreferred: @@ -4797,22 +4819,22 @@ definitions: x-nullable: true backupAddress: allOf: - - $ref: 'definitions/Address.yaml' + - $ref: "definitions/Address.yaml" cac_validated: type: boolean CreateCustomerPayload: type: object properties: affiliation: - $ref: 'definitions/Affiliation.yaml' + $ref: "definitions/Affiliation.yaml" edipi: type: string - example: '1234567890' + example: "1234567890" maxLength: 10 x-nullable: false emplid: type: string - example: '9485155' + example: "9485155" maxLength: 7 x-nullable: true firstName: @@ -4850,12 +4872,12 @@ definitions: type: boolean residentialAddress: allOf: - - $ref: 'definitions/Address.yaml' + - $ref: "definitions/Address.yaml" backupContact: - $ref: '#/definitions/BackupContact' + $ref: "#/definitions/BackupContact" backupMailingAddress: allOf: - - $ref: 'definitions/Address.yaml' + - $ref: "definitions/Address.yaml" createOktaAccount: type: boolean cacUser: @@ -4864,7 +4886,7 @@ definitions: type: object properties: departmentIndicator: - $ref: 'definitions/DepartmentIndicator.yaml' + $ref: "definitions/DepartmentIndicator.yaml" effectiveDate: description: > The effective date for the Line Of Accounting (LOA) being fetched. Eg, the orders issue date or the Non-Temporary Storage (NTS) Move Task Order (MTO) approval date. @@ -4875,12 +4897,12 @@ definitions: users per customer request). type: string format: date - example: '2023-01-01' + example: "2023-01-01" tacCode: type: string minLength: 4 maxLength: 4 - example: 'F8J1' + example: "F8J1" SearchCustomersResult: type: object properties: @@ -4891,11 +4913,11 @@ definitions: totalCount: type: integer searchCustomers: - $ref: '#/definitions/SearchCustomers' + $ref: "#/definitions/SearchCustomers" SearchCustomers: type: array items: - $ref: '#/definitions/SearchCustomer' + $ref: "#/definitions/SearchCustomer" SearchCustomer: type: object properties: @@ -4947,6 +4969,9 @@ definitions: gunSafe: type: boolean example: false + adminRestrictedWeightLocation: + type: boolean + example: false nonTemporaryStorage: example: false type: boolean @@ -5102,22 +5127,22 @@ definitions: format: uuid x-nullable: true contractor: - $ref: '#/definitions/Contractor' + $ref: "#/definitions/Contractor" locator: type: string - example: '1K43AR' + example: "1K43AR" ordersId: type: string format: uuid example: c56a4180-65aa-42ec-a945-5fd21dec0538 orders: - $ref: '#/definitions/Order' + $ref: "#/definitions/Order" referenceId: example: 1001-3456 type: string x-nullable: true status: - $ref: '#/definitions/MoveStatus' + $ref: "#/definitions/MoveStatus" excess_weight_qualified_at: type: string format: date-time @@ -5144,7 +5169,7 @@ definitions: x-nullable: true readOnly: true closeoutOffice: - $ref: 'definitions/TransportationOffice.yaml' + $ref: "definitions/TransportationOffice.yaml" closeoutOfficeId: type: string format: uuid @@ -5168,26 +5193,26 @@ definitions: eTag: type: string shipmentGBLOC: - $ref: '#/definitions/GBLOC' + $ref: "#/definitions/GBLOC" lockedByOfficeUserID: type: string format: uuid x-nullable: true lockedByOfficeUser: - $ref: '#/definitions/LockedOfficeUser' + $ref: "#/definitions/LockedOfficeUser" x-nullable: true lockExpiresAt: type: string format: date-time x-nullable: true additionalDocuments: - $ref: 'definitions/Document.yaml' + $ref: "definitions/Document.yaml" SCAssignedUser: - $ref: '#/definitions/AssignedOfficeUser' + $ref: "#/definitions/AssignedOfficeUser" TOOAssignedUser: - $ref: '#/definitions/AssignedOfficeUser' + $ref: "#/definitions/AssignedOfficeUser" TIOAssignedUser: - $ref: '#/definitions/AssignedOfficeUser' + $ref: "#/definitions/AssignedOfficeUser" MoveHistory: properties: id: @@ -5197,11 +5222,11 @@ definitions: type: string historyRecords: description: A list of MoveAuditHistory's connected to the move. - $ref: '#/definitions/MoveAuditHistories' + $ref: "#/definitions/MoveAuditHistories" locator: description: move locator type: string - example: '1K43AR' + example: "1K43AR" referenceId: description: move referenceID example: 1001-3456 @@ -5223,11 +5248,11 @@ definitions: type: string historyRecords: description: A list of MoveAuditHistory's connected to the move. - $ref: '#/definitions/MoveAuditHistories' + $ref: "#/definitions/MoveAuditHistories" locator: description: move locator type: string - example: '1K43AR' + example: "1K43AR" referenceId: description: move referenceID example: 1001-3456 @@ -5236,7 +5261,7 @@ definitions: MoveAuditHistories: type: array items: - $ref: '#/definitions/MoveAuditHistory' + $ref: "#/definitions/MoveAuditHistory" MoveAuditHistory: properties: id: @@ -5333,7 +5358,7 @@ definitions: MoveAuditHistoryItems: type: array items: - $ref: '#/definitions/MoveAuditHistoryItem' + $ref: "#/definitions/MoveAuditHistoryItem" MoveAuditHistoryItem: properties: columnName: @@ -5410,10 +5435,10 @@ definitions: format: uuid type: string customer: - $ref: '#/definitions/Customer' + $ref: "#/definitions/Customer" moveCode: type: string - example: 'H2XFJF' + example: "H2XFJF" first_name: type: string example: John @@ -5423,19 +5448,19 @@ definitions: example: Doe readOnly: true grade: - $ref: '#/definitions/Grade' + $ref: "#/definitions/Grade" agency: - $ref: 'definitions/Affiliation.yaml' + $ref: "definitions/Affiliation.yaml" entitlement: - $ref: '#/definitions/Entitlements' + $ref: "#/definitions/Entitlements" destinationDutyLocation: - $ref: 'definitions/DutyLocation.yaml' + $ref: "definitions/DutyLocation.yaml" destinationDutyLocationGBLOC: - $ref: '#/definitions/GBLOC' + $ref: "#/definitions/GBLOC" originDutyLocation: - $ref: 'definitions/DutyLocation.yaml' + $ref: "definitions/DutyLocation.yaml" originDutyLocationGBLOC: - $ref: '#/definitions/GBLOC' + $ref: "#/definitions/GBLOC" moveTaskOrderID: example: c56a4180-65aa-42ec-a945-5fd21dec0538 format: uuid @@ -5456,42 +5481,42 @@ definitions: order_number: type: string x-nullable: true - example: '030-00362' + example: "030-00362" order_type: - $ref: 'definitions/OrdersType.yaml' + $ref: "definitions/OrdersType.yaml" order_type_detail: - $ref: '#/definitions/OrdersTypeDetail' + $ref: "#/definitions/OrdersTypeDetail" x-nullable: true date_issued: type: string format: date - example: '2020-01-01' + example: "2020-01-01" report_by_date: type: string format: date - example: '2020-01-01' + example: "2020-01-01" department_indicator: - $ref: '#/definitions/DeptIndicator' + $ref: "#/definitions/DeptIndicator" x-nullable: true tac: type: string title: TAC - example: 'F8J1' + example: "F8J1" x-nullable: true sac: type: string title: SAC - example: 'N002214CSW32Y9' + example: "N002214CSW32Y9" x-nullable: true ntsTac: type: string title: NTS TAC - example: 'F8J1' + example: "F8J1" x-nullable: true ntsSac: type: string title: NTS SAC - example: 'N002214CSW32Y9' + example: "N002214CSW32Y9" x-nullable: true has_dependents: type: boolean @@ -5510,7 +5535,7 @@ definitions: naics: type: string orders_type: - $ref: 'definitions/OrdersType.yaml' + $ref: "definitions/OrdersType.yaml" eTag: type: string type: object @@ -5529,7 +5554,7 @@ definitions: Locations: type: array items: - $ref: '#/definitions/Location' + $ref: "#/definitions/Location" OrderBody: type: object properties: @@ -5554,9 +5579,9 @@ definitions: format: date title: Report-by date ordersType: - $ref: 'definitions/OrdersType.yaml' + $ref: "definitions/OrdersType.yaml" ordersTypeDetail: - $ref: '#/definitions/OrdersTypeDetail' + $ref: "#/definitions/OrdersTypeDetail" hasDependents: type: boolean title: Are dependents included in your orders? @@ -5571,21 +5596,21 @@ definitions: type: string title: Orders Number x-nullable: true - example: '030-00362' + example: "030-00362" tac: type: string title: TAC - example: 'F8J1' + example: "F8J1" x-nullable: true sac: type: string title: SAC - example: 'N002214CSW32Y9' + example: "N002214CSW32Y9" x-nullable: true departmentIndicator: - $ref: '#/definitions/DeptIndicator' + $ref: "#/definitions/DeptIndicator" grade: - $ref: '#/definitions/Grade' + $ref: "#/definitions/Grade" originDutyLocationId: type: string format: uuid @@ -5620,25 +5645,25 @@ definitions: type: string description: The date and time that these orders were cut. format: date - example: '2018-04-26' + example: "2018-04-26" title: Orders date reportByDate: type: string description: Report By Date format: date - example: '2018-04-26' + example: "2018-04-26" title: Report-by date ordersType: - $ref: 'definitions/OrdersType.yaml' + $ref: "definitions/OrdersType.yaml" ordersTypeDetail: - $ref: '#/definitions/OrdersTypeDetail' + $ref: "#/definitions/OrdersTypeDetail" ordersNumber: type: string title: Orders Number x-nullable: true - example: '030-00362' + example: "030-00362" departmentIndicator: - $ref: '#/definitions/DeptIndicator' + $ref: "#/definitions/DeptIndicator" x-nullable: true originDutyLocationId: type: string @@ -5653,24 +5678,24 @@ definitions: title: HHG TAC minLength: 4 maxLength: 4 - example: 'F8J1' + example: "F8J1" x-nullable: true sac: title: HHG SAC - example: 'N002214CSW32Y9' + example: "N002214CSW32Y9" $ref: definitions/NullableString.yaml ntsTac: title: NTS TAC minLength: 4 maxLength: 4 - example: 'F8J1' + example: "F8J1" $ref: definitions/NullableString.yaml ntsSac: title: NTS SAC - example: 'N002214CSW32Y9' + example: "N002214CSW32Y9" $ref: definitions/NullableString.yaml grade: - $ref: '#/definitions/Grade' + $ref: "#/definitions/Grade" required: - issueDate - reportByDate @@ -5684,18 +5709,18 @@ definitions: type: string description: The date and time that these orders were cut. format: date - example: '2018-04-26' + example: "2018-04-26" title: Orders date reportByDate: type: string description: Report By Date format: date - example: '2018-04-26' + example: "2018-04-26" title: Report-by date ordersType: - $ref: 'definitions/OrdersType.yaml' + $ref: "definitions/OrdersType.yaml" ordersTypeDetail: - $ref: '#/definitions/OrdersTypeDetail' + $ref: "#/definitions/OrdersTypeDetail" originDutyLocationId: type: string format: uuid @@ -5708,37 +5733,37 @@ definitions: type: string title: Orders Number x-nullable: true - example: '030-00362' + example: "030-00362" tac: type: string title: HHG TAC minLength: 4 maxLength: 4 - example: 'F8J1' + example: "F8J1" x-nullable: true sac: title: HHG SAC - example: 'N002214CSW32Y9' + example: "N002214CSW32Y9" $ref: definitions/NullableString.yaml ntsTac: title: NTS TAC minLength: 4 maxLength: 4 - example: 'F8J1' + example: "F8J1" $ref: definitions/NullableString.yaml ntsSac: title: NTS SAC - example: 'N002214CSW32Y9' + example: "N002214CSW32Y9" $ref: definitions/NullableString.yaml departmentIndicator: - $ref: '#/definitions/DeptIndicator' + $ref: "#/definitions/DeptIndicator" x-nullable: true ordersAcknowledgement: description: Confirmation that the new amended orders were reviewed after previously approving the original orders type: boolean x-nullable: true grade: - $ref: '#/definitions/Grade' + $ref: "#/definitions/Grade" required: - issueDate - reportByDate @@ -5749,12 +5774,12 @@ definitions: type: object properties: grade: - $ref: '#/definitions/Grade' + $ref: "#/definitions/Grade" dependentsAuthorized: type: boolean x-nullable: true agency: - $ref: 'definitions/Affiliation.yaml' + $ref: "definitions/Affiliation.yaml" proGearWeight: description: unit is in lbs example: 2000 @@ -5789,6 +5814,10 @@ definitions: description: True if user is entitled to move a gun safe (up to 500 lbs) as part of their move without it being charged against their weight allowance. type: boolean x-nullable: true + adminRestrictedWeightLocation: + description: Indicates if the customer is restricted to a specific location for their admin restricted weight. + type: boolean + x-nullable: true accompaniedTour: type: boolean example: true @@ -5841,12 +5870,12 @@ definitions: type: object properties: grade: - $ref: '#/definitions/Grade' + $ref: "#/definitions/Grade" dependentsAuthorized: type: boolean x-nullable: true agency: - $ref: 'definitions/Affiliation.yaml' + $ref: "definitions/Affiliation.yaml" proGearWeight: minimum: 0 maximum: 2000 @@ -5881,6 +5910,10 @@ definitions: description: True if user is entitled to move a gun safe (up to 500 lbs) as part of their move without it being charged against their weight allowance. type: boolean x-nullable: true + adminRestrictedWeightLocation: + description: Indicates if the customer is restricted to a specific location for their admin restricted weight. + type: boolean + x-nullable: true accompaniedTour: type: boolean example: true @@ -5916,7 +5949,7 @@ definitions: type: string locator: type: string - example: '1K43AR' + example: "1K43AR" referenceId: example: 1001-3456 type: string @@ -5936,9 +5969,9 @@ definitions: format: date-time type: string destinationAddress: - $ref: 'definitions/Address.yaml' + $ref: "definitions/Address.yaml" pickupAddress: - $ref: 'definitions/Address.yaml' + $ref: "definitions/Address.yaml" destinationDutyLocation: example: 1f2270c7-7166-40ae-981e-b200ebdf3054 format: uuid @@ -5948,7 +5981,7 @@ definitions: format: uuid type: string entitlements: - $ref: '#/definitions/Entitlements' + $ref: "#/definitions/Entitlements" requestedPickupDate: format: date type: string @@ -5961,12 +5994,12 @@ definitions: type: object MoveTaskOrders: items: - $ref: '#/definitions/MoveTaskOrder' + $ref: "#/definitions/MoveTaskOrder" type: array PaymentRequest: properties: proofOfServiceDocs: - $ref: '#/definitions/ProofOfServiceDocs' + $ref: "#/definitions/ProofOfServiceDocs" id: example: c56a4180-65aa-42ec-a945-5fd21dec0538 format: uuid @@ -5976,7 +6009,7 @@ definitions: default: false type: boolean moveTaskOrder: - $ref: '#/definitions/Move' + $ref: "#/definitions/Move" moveTaskOrderID: example: c56a4180-65aa-42ec-a945-5fd21dec0538 format: uuid @@ -5986,9 +6019,9 @@ definitions: type: string x-nullable: true serviceItems: - $ref: '#/definitions/PaymentServiceItems' + $ref: "#/definitions/PaymentServiceItems" status: - $ref: '#/definitions/PaymentRequestStatus' + $ref: "#/definitions/PaymentRequestStatus" paymentRequestNumber: example: 1234-5678-1 readOnly: true @@ -6041,11 +6074,11 @@ definitions: type: object PaymentRequests: items: - $ref: '#/definitions/PaymentRequest' + $ref: "#/definitions/PaymentRequest" type: array PaymentServiceItems: items: - $ref: '#/definitions/PaymentServiceItem' + $ref: "#/definitions/PaymentServiceItem" type: array PaymentServiceItem: properties: @@ -6072,14 +6105,14 @@ definitions: example: Move management type: string mtoShipmentType: - $ref: 'definitions/MTOShipmentType.yaml' + $ref: "definitions/MTOShipmentType.yaml" mtoShipmentID: type: string format: uuid example: c56a4180-65aa-42ec-a945-5fd21dec0538 x-nullable: true status: - $ref: 'definitions/PaymentServiceItemStatus.yaml' + $ref: "definitions/PaymentServiceItemStatus.yaml" priceCents: type: integer format: cents @@ -6094,7 +6127,7 @@ definitions: readOnly: true format: string paymentServiceItemParams: - $ref: 'definitions/PaymentServiceItemParams.yaml' + $ref: "definitions/PaymentServiceItemParams.yaml" eTag: type: string tppsInvoiceAmountPaidPerServiceItemMillicents: @@ -6104,10 +6137,10 @@ definitions: x-nullable: true type: object PaymentRequestStatus: - $ref: 'definitions/PaymentRequestStatus.yaml' + $ref: "definitions/PaymentRequestStatus.yaml" ProofOfServiceDocs: items: - $ref: '#/definitions/ProofOfServiceDoc' + $ref: "#/definitions/ProofOfServiceDoc" type: array ProofOfServiceDoc: properties: @@ -6115,11 +6148,11 @@ definitions: type: boolean uploads: items: - $ref: 'definitions/Upload.yaml' + $ref: "definitions/Upload.yaml" type: array ShipmentsPaymentSITBalance: items: - $ref: '#/definitions/ShipmentPaymentSITBalance' + $ref: "#/definitions/ShipmentPaymentSITBalance" type: array ShipmentPaymentSITBalance: properties: @@ -6159,7 +6192,7 @@ definitions: type: object properties: shipmentType: - $ref: 'definitions/MTOShipmentType.yaml' + $ref: "definitions/MTOShipmentType.yaml" requestedPickupDate: format: date type: string @@ -6188,16 +6221,16 @@ definitions: x-nullable: true pickupAddress: allOf: - - $ref: 'definitions/Address.yaml' + - $ref: "definitions/Address.yaml" destinationAddress: allOf: - - $ref: 'definitions/Address.yaml' + - $ref: "definitions/Address.yaml" secondaryDeliveryAddress: allOf: - - $ref: 'definitions/Address.yaml' + - $ref: "definitions/Address.yaml" secondaryPickupAddress: allOf: - - $ref: 'definitions/Address.yaml' + - $ref: "definitions/Address.yaml" hasSecondaryPickupAddress: type: boolean x-nullable: true @@ -6208,10 +6241,10 @@ definitions: x-omitempty: false tertiaryDeliveryAddress: allOf: - - $ref: 'definitions/Address.yaml' + - $ref: "definitions/Address.yaml" tertiaryPickupAddress: allOf: - - $ref: 'definitions/Address.yaml' + - $ref: "definitions/Address.yaml" hasTertiaryPickupAddress: type: boolean x-nullable: true @@ -6229,14 +6262,14 @@ definitions: x-nullable: true x-omitempty: false destinationType: - $ref: 'definitions/DestinationType.yaml' + $ref: "definitions/DestinationType.yaml" agents: - $ref: 'definitions/MTOAgents.yaml' + $ref: "definitions/MTOAgents.yaml" x-nullable: true tacType: - $ref: 'definitions/LOATypeNullable.yaml' + $ref: "definitions/LOATypeNullable.yaml" sacType: - $ref: 'definitions/LOATypeNullable.yaml' + $ref: "definitions/LOATypeNullable.yaml" usesExternalVendor: type: boolean example: false @@ -6252,13 +6285,13 @@ definitions: x-nullable: true storageFacility: x-nullable: true - $ref: 'definitions/StorageFacility.yaml' + $ref: "definitions/StorageFacility.yaml" ppmShipment: - $ref: '#/definitions/UpdatePPMShipment' + $ref: "#/definitions/UpdatePPMShipment" boatShipment: - $ref: '#/definitions/UpdateBoatShipment' + $ref: "#/definitions/UpdateBoatShipment" mobileHomeShipment: - $ref: '#/definitions/UpdateMobileHomeShipment' + $ref: "#/definitions/UpdateMobileHomeShipment" UpdatePPMShipment: type: object properties: @@ -6274,34 +6307,34 @@ definitions: x-nullable: true pickupAddress: allOf: - - $ref: 'definitions/Address.yaml' + - $ref: "definitions/Address.yaml" actualPickupPostalCode: description: > The actual postal code where the PPM shipment started. To be filled once the customer has moved the shipment. format: zip type: string title: ZIP - example: '90210' + example: "90210" pattern: ^(\d{5})$ x-nullable: true secondaryPickupAddress: allOf: - - $ref: 'definitions/Address.yaml' + - $ref: "definitions/Address.yaml" destinationAddress: allOf: - - $ref: 'definitions/PPMDestinationAddress.yaml' + - $ref: "definitions/PPMDestinationAddress.yaml" actualDestinationPostalCode: description: > The actual postal code where the PPM shipment ended. To be filled once the customer has moved the shipment. format: zip type: string title: ZIP - example: '90210' + example: "90210" pattern: ^(\d{5})$ x-nullable: true secondaryDestinationAddress: allOf: - - $ref: 'definitions/Address.yaml' + - $ref: "definitions/Address.yaml" hasSecondaryPickupAddress: type: boolean x-nullable: true @@ -6312,10 +6345,10 @@ definitions: x-omitempty: false tertiaryPickupAddress: allOf: - - $ref: 'definitions/Address.yaml' + - $ref: "definitions/Address.yaml" tertiaryDestinationAddress: allOf: - - $ref: 'definitions/Address.yaml' + - $ref: "definitions/Address.yaml" hasTertiaryPickupAddress: type: boolean x-nullable: true @@ -6326,13 +6359,13 @@ definitions: x-omitempty: false w2Address: x-nullable: true - $ref: 'definitions/Address.yaml' + $ref: "definitions/Address.yaml" sitExpected: type: boolean x-nullable: true sitLocation: allOf: - - $ref: 'definitions/SITLocationType.yaml' + - $ref: "definitions/SITLocationType.yaml" - x-nullable: true sitEstimatedWeight: type: integer @@ -6390,7 +6423,7 @@ definitions: format: cents x-nullable: true advanceStatus: - $ref: 'definitions/PPMAdvanceStatus.yaml' + $ref: "definitions/PPMAdvanceStatus.yaml" x-nullable: true isActualExpenseReimbursement: description: Used for PPM shipments only. Denotes if this shipment uses the Actual Expense Reimbursement method. @@ -6484,7 +6517,7 @@ definitions: description: Indicates if the trailer that the customer used meets all the criteria to be claimable. type: boolean status: - $ref: 'definitions/PPMDocumentStatus.yaml' + $ref: "definitions/PPMDocumentStatus.yaml" reason: description: The reason the services counselor has excluded or rejected the item. type: string @@ -6499,7 +6532,7 @@ definitions: type: object properties: movingExpenseType: - $ref: 'definitions/OmittableMovingExpenseType.yaml' + $ref: "definitions/OmittableMovingExpenseType.yaml" description: description: A brief description of the expense. type: string @@ -6517,7 +6550,7 @@ definitions: type: string format: date status: - $ref: 'definitions/PPMDocumentStatus.yaml' + $ref: "definitions/PPMDocumentStatus.yaml" reason: description: The reason the services counselor has excluded or rejected the item. type: string @@ -6526,7 +6559,7 @@ definitions: type: integer sitLocation: allOf: - - $ref: 'definitions/SITLocationType.yaml' + - $ref: "definitions/SITLocationType.yaml" - x-nullable: true sitEstimatedCost: description: The estimated amount that the government will pay the service member to put their goods into storage. This estimated storage cost is separate from the estimated incentive. @@ -6554,13 +6587,13 @@ definitions: type: integer minimum: 0 status: - $ref: 'definitions/PPMDocumentStatus.yaml' + $ref: "definitions/PPMDocumentStatus.yaml" reason: description: The reason the services counselor has excluded or rejected the item. type: string MTOShipments: items: - $ref: 'definitions/MTOShipment.yaml' + $ref: "definitions/MTOShipment.yaml" type: array CreateMTOShipment: type: object @@ -6606,17 +6639,17 @@ definitions: example: handle with care x-nullable: true agents: - $ref: 'definitions/MTOAgents.yaml' + $ref: "definitions/MTOAgents.yaml" mtoServiceItems: - $ref: 'definitions/MTOServiceItems.yaml' + $ref: "definitions/MTOServiceItems.yaml" pickupAddress: description: The address where the movers should pick up this shipment. allOf: - - $ref: 'definitions/Address.yaml' + - $ref: "definitions/Address.yaml" destinationAddress: description: Where the movers should deliver this shipment. allOf: - - $ref: 'definitions/Address.yaml' + - $ref: "definitions/Address.yaml" hasSecondaryPickupAddress: type: boolean x-nullable: true @@ -6624,7 +6657,7 @@ definitions: secondaryPickupAddress: description: The address where the movers should pick up this shipment. allOf: - - $ref: 'definitions/Address.yaml' + - $ref: "definitions/Address.yaml" hasSecondaryDeliveryAddress: type: boolean x-nullable: true @@ -6632,7 +6665,7 @@ definitions: secondaryDeliveryAddress: description: Where the movers should deliver this shipment. allOf: - - $ref: 'definitions/Address.yaml' + - $ref: "definitions/Address.yaml" hasTertiaryPickupAddress: type: boolean x-nullable: true @@ -6640,7 +6673,7 @@ definitions: tertiaryPickupAddress: description: The address where the movers should pick up this shipment. allOf: - - $ref: 'definitions/Address.yaml' + - $ref: "definitions/Address.yaml" hasTertiaryDeliveryAddress: type: boolean x-nullable: true @@ -6648,18 +6681,18 @@ definitions: tertiaryDeliveryAddress: description: Where the movers should deliver this shipment. allOf: - - $ref: 'definitions/Address.yaml' + - $ref: "definitions/Address.yaml" destinationType: - $ref: 'definitions/DestinationType.yaml' + $ref: "definitions/DestinationType.yaml" shipmentType: - $ref: 'definitions/MTOShipmentType.yaml' + $ref: "definitions/MTOShipmentType.yaml" tacType: allOf: - - $ref: 'definitions/LOAType.yaml' + - $ref: "definitions/LOAType.yaml" - x-nullable: true sacType: allOf: - - $ref: 'definitions/LOAType.yaml' + - $ref: "definitions/LOAType.yaml" - x-nullable: true usesExternalVendor: type: boolean @@ -6676,13 +6709,13 @@ definitions: x-formatting: weight storageFacility: x-nullable: true - $ref: 'definitions/StorageFacility.yaml' + $ref: "definitions/StorageFacility.yaml" mobileHomeShipment: - $ref: '#/definitions/CreateMobileHomeShipment' + $ref: "#/definitions/CreateMobileHomeShipment" ppmShipment: - $ref: '#/definitions/CreatePPMShipment' + $ref: "#/definitions/CreatePPMShipment" boatShipment: - $ref: '#/definitions/CreateBoatShipment' + $ref: "#/definitions/CreateBoatShipment" required: - moveTaskOrderID - shipmentType @@ -6696,22 +6729,22 @@ definitions: type: string pickupAddress: allOf: - - $ref: 'definitions/Address.yaml' + - $ref: "definitions/Address.yaml" secondaryPickupAddress: allOf: - - $ref: 'definitions/Address.yaml' + - $ref: "definitions/Address.yaml" tertiaryPickupAddress: allOf: - - $ref: 'definitions/Address.yaml' + - $ref: "definitions/Address.yaml" destinationAddress: allOf: - - $ref: 'definitions/PPMDestinationAddress.yaml' + - $ref: "definitions/PPMDestinationAddress.yaml" secondaryDestinationAddress: allOf: - - $ref: 'definitions/Address.yaml' + - $ref: "definitions/Address.yaml" tertiaryDestinationAddress: allOf: - - $ref: 'definitions/Address.yaml' + - $ref: "definitions/Address.yaml" hasSecondaryPickupAddress: type: boolean x-nullable: true @@ -6732,7 +6765,7 @@ definitions: type: boolean sitLocation: allOf: - - $ref: 'definitions/SITLocationType.yaml' + - $ref: "definitions/SITLocationType.yaml" - x-nullable: true sitEstimatedWeight: type: integer @@ -6865,7 +6898,7 @@ definitions: minimum: 1 requestReason: description: Reason from service counselor-provided picklist for SIT Duration Update - example: 'AWAITING_COMPLETION_OF_RESIDENCE' + example: "AWAITING_COMPLETION_OF_RESIDENCE" type: string enum: - SERIOUS_ILLNESS_MEMBER @@ -6912,7 +6945,7 @@ definitions: properties: requestReason: description: Reason from service counselor-provided picklist for SIT Duration Update - example: 'AWAITING_COMPLETION_OF_RESIDENCE' + example: "AWAITING_COMPLETION_OF_RESIDENCE" type: string enum: - SERIOUS_ILLNESS_MEMBER @@ -6973,14 +7006,14 @@ definitions: type: string x-nullable: true status: - $ref: '#/definitions/PaymentRequestStatus' + $ref: "#/definitions/PaymentRequestStatus" eTag: type: string type: object AvailableOfficeUsers: type: array items: - $ref: '#/definitions/AvailableOfficeUser' + $ref: "#/definitions/AvailableOfficeUser" AvailableOfficeUser: type: object properties: @@ -6995,7 +7028,7 @@ definitions: QueueMoves: type: array items: - $ref: '#/definitions/QueueMove' + $ref: "#/definitions/QueueMove" QueueMove: type: object properties: @@ -7003,9 +7036,9 @@ definitions: type: string format: uuid customer: - $ref: '#/definitions/Customer' + $ref: "#/definitions/Customer" status: - $ref: '#/definitions/MoveStatus' + $ref: "#/definitions/MoveStatus" locator: type: string submittedAt: @@ -7021,15 +7054,15 @@ definitions: type: string x-nullable: true departmentIndicator: - $ref: '#/definitions/DeptIndicator' + $ref: "#/definitions/DeptIndicator" shipmentsCount: type: integer originDutyLocation: - $ref: 'definitions/DutyLocation.yaml' + $ref: "definitions/DutyLocation.yaml" destinationDutyLocation: - $ref: 'definitions/DutyLocation.yaml' + $ref: "definitions/DutyLocation.yaml" originGBLOC: - $ref: '#/definitions/GBLOC' + $ref: "#/definitions/GBLOC" ppmType: type: string enum: [FULL, PARTIAL] @@ -7049,14 +7082,14 @@ definitions: format: uuid x-nullable: true lockedByOfficeUser: - $ref: '#/definitions/LockedOfficeUser' + $ref: "#/definitions/LockedOfficeUser" x-nullable: true lockExpiresAt: type: string format: date-time x-nullable: true ppmStatus: - $ref: '#/definitions/PPMStatus' + $ref: "#/definitions/PPMStatus" x-nullable: true counselingOffice: type: string @@ -7066,10 +7099,10 @@ definitions: format: uuid x-nullable: true assignedTo: - $ref: '#/definitions/AssignedOfficeUser' + $ref: "#/definitions/AssignedOfficeUser" x-nullable: true availableOfficeUsers: - $ref: '#/definitions/AvailableOfficeUsers' + $ref: "#/definitions/AvailableOfficeUsers" assignable: type: boolean QueueMovesResult: @@ -7082,7 +7115,7 @@ definitions: totalCount: type: integer queueMoves: - $ref: '#/definitions/QueueMoves' + $ref: "#/definitions/QueueMoves" ListPrimeMove: description: > An abbreviated definition for a move, without all the nested information (shipments, service items, etc). Used to @@ -7095,7 +7128,7 @@ definitions: type: string moveCode: type: string - example: 'HYXFJF' + example: "HYXFJF" readOnly: true createdAt: format: date-time @@ -7135,7 +7168,7 @@ definitions: ListPrimeMoves: type: array items: - $ref: '#/definitions/ListPrimeMove' + $ref: "#/definitions/ListPrimeMove" ListPrimeMovesResult: type: object properties: @@ -7146,7 +7179,7 @@ definitions: totalCount: type: integer queueMoves: - $ref: '#/definitions/ListPrimeMoves' + $ref: "#/definitions/ListPrimeMoves" QueuePaymentRequest: type: object properties: @@ -7157,9 +7190,9 @@ definitions: type: string format: uuid customer: - $ref: '#/definitions/Customer' + $ref: "#/definitions/Customer" status: - $ref: '#/definitions/QueuePaymentRequestStatus' + $ref: "#/definitions/QueuePaymentRequestStatus" age: type: number format: double @@ -7170,11 +7203,11 @@ definitions: locator: type: string departmentIndicator: - $ref: '#/definitions/DeptIndicator' + $ref: "#/definitions/DeptIndicator" originGBLOC: - $ref: '#/definitions/GBLOC' + $ref: "#/definitions/GBLOC" originDutyLocation: - $ref: 'definitions/DutyLocation.yaml' + $ref: "definitions/DutyLocation.yaml" orderType: type: string x-nullable: true @@ -7187,10 +7220,10 @@ definitions: format: date-time x-nullable: true assignedTo: - $ref: '#/definitions/AssignedOfficeUser' + $ref: "#/definitions/AssignedOfficeUser" x-nullable: true availableOfficeUsers: - $ref: '#/definitions/AvailableOfficeUsers' + $ref: "#/definitions/AvailableOfficeUsers" assignable: type: boolean counselingOffice: @@ -7199,7 +7232,7 @@ definitions: QueuePaymentRequests: type: array items: - $ref: '#/definitions/QueuePaymentRequest' + $ref: "#/definitions/QueuePaymentRequest" QueuePaymentRequestsResult: type: object properties: @@ -7210,7 +7243,7 @@ definitions: totalCount: type: integer queuePaymentRequests: - $ref: '#/definitions/QueuePaymentRequests' + $ref: "#/definitions/QueuePaymentRequests" QueuePaymentRequestStatus: enum: - Payment requested @@ -7222,7 +7255,7 @@ definitions: SearchMoves: type: array items: - $ref: '#/definitions/SearchMove' + $ref: "#/definitions/SearchMove" SearchMove: type: object properties: @@ -7246,7 +7279,7 @@ definitions: example: 9551-6199-2 x-nullable: true status: - $ref: '#/definitions/MoveStatus' + $ref: "#/definitions/MoveStatus" locator: type: string branch: @@ -7257,13 +7290,13 @@ definitions: format: zip type: string title: ZIP - example: '90210' + example: "90210" pattern: ^(\d{5})$ destinationDutyLocationPostalCode: format: zip type: string title: ZIP - example: '90210' + example: "90210" pattern: ^(\d{5})$ requestedPickupDate: type: string @@ -7276,9 +7309,9 @@ definitions: format: date x-nullable: true originGBLOC: - $ref: '#/definitions/GBLOC' + $ref: "#/definitions/GBLOC" destinationGBLOC: - $ref: '#/definitions/GBLOC' + $ref: "#/definitions/GBLOC" lockedByOfficeUserID: type: string format: uuid @@ -7300,7 +7333,7 @@ definitions: totalCount: type: integer searchMoves: - $ref: '#/definitions/SearchMoves' + $ref: "#/definitions/SearchMoves" GBLOC: type: string enum: @@ -7395,7 +7428,7 @@ definitions: EvaluationReportList: type: array items: - $ref: '#/definitions/EvaluationReport' + $ref: "#/definitions/EvaluationReport" EvaluationReport: type: object description: An evaluation report @@ -7417,28 +7450,28 @@ definitions: x-nullable: true readOnly: true type: - $ref: '#/definitions/EvaluationReportType' + $ref: "#/definitions/EvaluationReportType" inspectionType: - $ref: '#/definitions/EvaluationReportInspectionType' + $ref: "#/definitions/EvaluationReportInspectionType" x-nullable: true inspectionDate: type: string format: date x-nullable: true officeUser: - $ref: '#/definitions/EvaluationReportOfficeUser' + $ref: "#/definitions/EvaluationReportOfficeUser" location: - $ref: '#/definitions/EvaluationReportLocation' + $ref: "#/definitions/EvaluationReportLocation" x-nullable: true reportViolations: - $ref: '#/definitions/ReportViolations' + $ref: "#/definitions/ReportViolations" x-nullable: true gsrAppeals: - $ref: '#/definitions/GSRAppeals' + $ref: "#/definitions/GSRAppeals" x-nullable: true locationDescription: type: string - example: 'Route 66 at crash inspection site 3' + example: "Route 66 at crash inspection site 3" x-nullable: true observedShipmentDeliveryDate: type: string @@ -7451,18 +7484,18 @@ definitions: timeDepart: type: string x-nullable: true - pattern: '^(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$' - example: '14:30' + pattern: "^(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$" + example: "14:30" evalStart: type: string x-nullable: true - pattern: '^(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$' - example: '15:00' + pattern: "^(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$" + example: "15:00" evalEnd: type: string x-nullable: true - pattern: '^(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$' - example: '18:00' + pattern: "^(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$" + example: "18:00" violationsObserved: type: boolean x-nullable: true @@ -7574,7 +7607,7 @@ definitions: PWSViolations: type: array items: - $ref: '#/definitions/PWSViolation' + $ref: "#/definitions/PWSViolation" AssociateReportViolations: type: object description: A list of PWS violation string ids to associate with an evaluation report @@ -7601,14 +7634,14 @@ definitions: format: uuid type: string violation: - $ref: '#/definitions/PWSViolation' + $ref: "#/definitions/PWSViolation" gsrAppeals: - $ref: '#/definitions/GSRAppeals' + $ref: "#/definitions/GSRAppeals" x-nullable: true ReportViolations: type: array items: - $ref: '#/definitions/ReportViolation' + $ref: "#/definitions/ReportViolation" GSRAppealStatusType: type: string enum: @@ -7617,7 +7650,7 @@ definitions: GSRAppeals: type: array items: - $ref: '#/definitions/GSRAppeal' + $ref: "#/definitions/GSRAppeal" GSRAppeal: type: object description: An object associating appeals on violations and serious incidents @@ -7639,12 +7672,12 @@ definitions: format: uuid type: string officeUser: - $ref: '#/definitions/EvaluationReportOfficeUser' + $ref: "#/definitions/EvaluationReportOfficeUser" isSeriousIncident: type: boolean example: false appealStatus: - $ref: '#/definitions/GSRAppealStatusType' + $ref: "#/definitions/GSRAppealStatusType" remarks: type: string example: Office user remarks @@ -7655,7 +7688,7 @@ definitions: TransportationOffices: type: array items: - $ref: 'definitions/TransportationOffice.yaml' + $ref: "definitions/TransportationOffice.yaml" VLocations: type: array items: @@ -7686,9 +7719,9 @@ definitions: readOnly: true locator: type: string - example: '12432' + example: "12432" status: - $ref: '#/definitions/MoveStatus' + $ref: "#/definitions/MoveStatus" created_at: type: string format: date-time @@ -7700,9 +7733,9 @@ definitions: format: date-time x-nullable: true mto_shipments: - $ref: '#/definitions/MTOShipments' + $ref: "#/definitions/MTOShipments" closeout_office: - $ref: '#/definitions/TransportationOffice' + $ref: "#/definitions/TransportationOffice" cancel_reason: type: string example: Change of orders @@ -7714,7 +7747,7 @@ definitions: type: string readOnly: true additionalDocuments: - $ref: 'definitions/Document.yaml' + $ref: "definitions/Document.yaml" required: - id - orders_id @@ -7732,7 +7765,7 @@ definitions: date: type: string format: date - example: '2018-09-25' + example: "2018-09-25" is_weekend: type: boolean is_holiday: @@ -7771,28 +7804,28 @@ responses: InvalidRequest: description: The request payload is invalid schema: - $ref: '#/definitions/Error' + $ref: "#/definitions/Error" NotFound: description: The requested resource wasn't found schema: - $ref: '#/definitions/Error' + $ref: "#/definitions/Error" Conflict: description: Conflict error schema: - $ref: '#/definitions/Error' + $ref: "#/definitions/Error" PermissionDenied: description: The request was denied schema: - $ref: '#/definitions/Error' + $ref: "#/definitions/Error" ServerError: description: A server error occurred schema: - $ref: '#/definitions/Error' + $ref: "#/definitions/Error" PreconditionFailed: description: Precondition failed schema: - $ref: '#/definitions/Error' + $ref: "#/definitions/Error" UnprocessableEntity: description: The payload was unprocessable. schema: - $ref: '#/definitions/ValidationError' + $ref: "#/definitions/ValidationError" diff --git a/swagger-def/support.yaml b/swagger-def/support.yaml index e3bf2dd4528..5f94bc926db 100644 --- a/swagger-def/support.yaml +++ b/swagger-def/support.yaml @@ -878,6 +878,9 @@ definitions: gunSafe: type: boolean example: false + adminRestrictedWeightLocation: + type: boolean + example: false nonTemporaryStorage: example: false type: boolean diff --git a/swagger/ghc.yaml b/swagger/ghc.yaml index ab568b434c8..83842cc917f 100644 --- a/swagger/ghc.yaml +++ b/swagger/ghc.yaml @@ -5165,6 +5165,9 @@ definitions: gunSafe: type: boolean example: false + adminRestrictedWeightLocation: + type: boolean + example: false nonTemporaryStorage: example: false type: boolean @@ -6051,6 +6054,12 @@ definitions: their move without it being charged against their weight allowance. type: boolean x-nullable: true + adminRestrictedWeightLocation: + description: >- + Indicates if the customer is restricted to a specific location for + their admin restricted weight. + type: boolean + x-nullable: true accompaniedTour: type: boolean example: true @@ -6154,6 +6163,12 @@ definitions: their move without it being charged against their weight allowance. type: boolean x-nullable: true + adminRestrictedWeightLocation: + description: >- + Indicates if the customer is restricted to a specific location for + their admin restricted weight. + type: boolean + x-nullable: true accompaniedTour: type: boolean example: true diff --git a/swagger/prime.yaml b/swagger/prime.yaml index 83ef52b06c7..8af5a4ee92d 100644 --- a/swagger/prime.yaml +++ b/swagger/prime.yaml @@ -3023,6 +3023,9 @@ definitions: gunSafe: type: boolean example: false + adminRestrictedWeightLocation: + type: boolean + example: false nonTemporaryStorage: example: false type: boolean diff --git a/swagger/prime_v2.yaml b/swagger/prime_v2.yaml index 00c4e8d169b..05ac5076d6c 100644 --- a/swagger/prime_v2.yaml +++ b/swagger/prime_v2.yaml @@ -1634,6 +1634,9 @@ definitions: gunSafe: type: boolean example: false + adminRestrictedWeightLocation: + type: boolean + example: false nonTemporaryStorage: example: false type: boolean diff --git a/swagger/prime_v3.yaml b/swagger/prime_v3.yaml index cb7c5a5d10a..398bf9c100d 100644 --- a/swagger/prime_v3.yaml +++ b/swagger/prime_v3.yaml @@ -1722,6 +1722,9 @@ definitions: gunSafe: type: boolean example: false + adminRestrictedWeightLocation: + type: boolean + example: false nonTemporaryStorage: example: false type: boolean diff --git a/swagger/support.yaml b/swagger/support.yaml index 8b0e87f4842..bd09358deef 100644 --- a/swagger/support.yaml +++ b/swagger/support.yaml @@ -953,6 +953,9 @@ definitions: gunSafe: type: boolean example: false + adminRestrictedWeightLocation: + type: boolean + example: false nonTemporaryStorage: example: false type: boolean From 633df9d3b3b37843ce9562db565238e42a86f96a Mon Sep 17 00:00:00 2001 From: deandreJones Date: Wed, 8 Jan 2025 13:42:30 -0600 Subject: [PATCH 02/22] add weight restriction --- migrations/app/migrations_manifest.txt | 1 + ...250107184554_add_weight_restriction.up.sql | 4 +++ pkg/gen/ghcapi/embedded_spec.go | 32 +++++++++++++++++++ .../counseling_update_allowance_payload.go | 4 +++ pkg/gen/ghcmessages/entitlements.go | 4 +++ .../ghcmessages/update_allowance_payload.go | 4 +++ pkg/gen/primeapi/embedded_spec.go | 10 ++++++ pkg/gen/primemessages/entitlements.go | 4 +++ pkg/gen/primev2api/embedded_spec.go | 10 ++++++ pkg/gen/primev2messages/entitlements.go | 4 +++ pkg/gen/primev3api/embedded_spec.go | 10 ++++++ pkg/gen/primev3messages/entitlements.go | 4 +++ pkg/gen/supportapi/embedded_spec.go | 8 +++++ pkg/gen/supportmessages/entitlement.go | 4 +++ .../internal/payloads/model_to_payload.go | 10 ++++-- .../primeapi/payloads/model_to_payload.go | 9 +++--- .../primeapiv2/payloads/model_to_payload.go | 9 +++--- .../primeapiv3/payloads/model_to_payload.go | 9 +++--- .../internal/payloads/model_to_payload.go | 10 +++--- pkg/models/ghc_entitlements.go | 1 + pkg/services/order/order_updater.go | 8 +++-- .../AllowancesDetailForm.jsx | 29 +++++++++++------ .../Office/DefinitionLists/AllowancesList.jsx | 4 ++- .../MoveHistory/Database/FieldMappings.js | 1 + .../Office/MoveAllowances/MoveAllowances.jsx | 4 +++ src/pages/Office/MoveDetails/MoveDetails.jsx | 1 + .../ServicesCounselingMoveAllowances.jsx | 4 +++ .../ServicesCounselingMoveDetails.jsx | 1 + .../definitions/prime/Entitlements.yaml | 4 +++ swagger-def/ghc.yaml | 13 ++++++++ swagger-def/support.yaml | 3 ++ swagger/ghc.yaml | 15 +++++++++ swagger/prime.yaml | 4 +++ swagger/prime_v2.yaml | 4 +++ swagger/prime_v3.yaml | 4 +++ swagger/support.yaml | 3 ++ 36 files changed, 221 insertions(+), 32 deletions(-) create mode 100644 migrations/app/schema/20250107184554_add_weight_restriction.up.sql diff --git a/migrations/app/migrations_manifest.txt b/migrations/app/migrations_manifest.txt index ffaf109d530..5be0ac320d2 100644 --- a/migrations/app/migrations_manifest.txt +++ b/migrations/app/migrations_manifest.txt @@ -1061,3 +1061,4 @@ 20241230190647_add_missing_AK_zips_to_zip3_distances.up.sql 20250106153750_admin_weight_restriction.up.sql 20250106190758_admin_weight_restriction_convert_bool.up.sql +20250107184554_add_weight_restriction.up.sql diff --git a/migrations/app/schema/20250107184554_add_weight_restriction.up.sql b/migrations/app/schema/20250107184554_add_weight_restriction.up.sql new file mode 100644 index 00000000000..6d2a0ce08f6 --- /dev/null +++ b/migrations/app/schema/20250107184554_add_weight_restriction.up.sql @@ -0,0 +1,4 @@ +ALTER TABLE entitlements +ADD column weight_restriction int; + +COMMENT ON COLUMN entitlements.weight_restriction IS 'The weight restricted on the move to a particular location'; diff --git a/pkg/gen/ghcapi/embedded_spec.go b/pkg/gen/ghcapi/embedded_spec.go index a0183a05515..2bdafeafd2d 100644 --- a/pkg/gen/ghcapi/embedded_spec.go +++ b/pkg/gen/ghcapi/embedded_spec.go @@ -6929,6 +6929,13 @@ func init() { "type": "integer", "x-nullable": true, "example": 500 + }, + "weightRestriction": { + "description": "unit is in lbs", + "type": "integer", + "x-formatting": "weight", + "x-nullable": true, + "example": 1500 } } }, @@ -8135,6 +8142,11 @@ func init() { "type": "integer", "x-nullable": true, "example": 3 + }, + "weightRestriction": { + "description": "The amount of weight in pounds that the move is restricted to for a particular location.", + "type": "integer", + "example": 1500 } } }, @@ -13866,6 +13878,10 @@ func init() { "type": "integer", "x-nullable": true, "example": 500 + }, + "weightRestriction": { + "type": "integer", + "example": 1500 } } }, @@ -23687,6 +23703,13 @@ func init() { "type": "integer", "x-nullable": true, "example": 500 + }, + "weightRestriction": { + "description": "unit is in lbs", + "type": "integer", + "x-formatting": "weight", + "x-nullable": true, + "example": 1500 } } }, @@ -24893,6 +24916,11 @@ func init() { "type": "integer", "x-nullable": true, "example": 3 + }, + "weightRestriction": { + "description": "The amount of weight in pounds that the move is restricted to for a particular location.", + "type": "integer", + "example": 1500 } } }, @@ -30756,6 +30784,10 @@ func init() { "type": "integer", "x-nullable": true, "example": 500 + }, + "weightRestriction": { + "type": "integer", + "example": 1500 } } }, diff --git a/pkg/gen/ghcmessages/counseling_update_allowance_payload.go b/pkg/gen/ghcmessages/counseling_update_allowance_payload.go index c1a0ce9f418..78fa59fa9fb 100644 --- a/pkg/gen/ghcmessages/counseling_update_allowance_payload.go +++ b/pkg/gen/ghcmessages/counseling_update_allowance_payload.go @@ -73,6 +73,10 @@ type CounselingUpdateAllowancePayload struct { // ub allowance // Example: 500 UbAllowance *int64 `json:"ubAllowance,omitempty"` + + // unit is in lbs + // Example: 1500 + WeightRestriction *int64 `json:"weightRestriction,omitempty"` } // Validate validates this counseling update allowance payload diff --git a/pkg/gen/ghcmessages/entitlements.go b/pkg/gen/ghcmessages/entitlements.go index 7699f3be0e3..bc8ab2aad65 100644 --- a/pkg/gen/ghcmessages/entitlements.go +++ b/pkg/gen/ghcmessages/entitlements.go @@ -94,6 +94,10 @@ type Entitlements struct { // The amount of weight in pounds that the move is entitled for shipment types of Unaccompanied Baggage. // Example: 3 UnaccompaniedBaggageAllowance *int64 `json:"unaccompaniedBaggageAllowance,omitempty"` + + // The amount of weight in pounds that the move is restricted to for a particular location. + // Example: 1500 + WeightRestriction int64 `json:"weightRestriction,omitempty"` } // Validate validates this entitlements diff --git a/pkg/gen/ghcmessages/update_allowance_payload.go b/pkg/gen/ghcmessages/update_allowance_payload.go index 0a63d9b9fa9..391b664a827 100644 --- a/pkg/gen/ghcmessages/update_allowance_payload.go +++ b/pkg/gen/ghcmessages/update_allowance_payload.go @@ -73,6 +73,10 @@ type UpdateAllowancePayload struct { // ub allowance // Example: 500 UbAllowance *int64 `json:"ubAllowance,omitempty"` + + // weight restriction + // Example: 1500 + WeightRestriction int64 `json:"weightRestriction,omitempty"` } // Validate validates this update allowance payload diff --git a/pkg/gen/primeapi/embedded_spec.go b/pkg/gen/primeapi/embedded_spec.go index 5df9a70d690..a2089ab4ff6 100644 --- a/pkg/gen/primeapi/embedded_spec.go +++ b/pkg/gen/primeapi/embedded_spec.go @@ -1805,6 +1805,11 @@ func init() { "type": "integer", "x-nullable": true, "example": 3 + }, + "weightRestriction": { + "type": "integer", + "x-formatting": "weight", + "example": 1500 } } }, @@ -6703,6 +6708,11 @@ func init() { "type": "integer", "x-nullable": true, "example": 3 + }, + "weightRestriction": { + "type": "integer", + "x-formatting": "weight", + "example": 1500 } } }, diff --git a/pkg/gen/primemessages/entitlements.go b/pkg/gen/primemessages/entitlements.go index a1e606a00aa..f414734eb5d 100644 --- a/pkg/gen/primemessages/entitlements.go +++ b/pkg/gen/primemessages/entitlements.go @@ -83,6 +83,10 @@ type Entitlements struct { // The amount of weight in pounds that the move is entitled for shipment types of Unaccompanied Baggage. // Example: 3 UnaccompaniedBaggageAllowance *int64 `json:"unaccompaniedBaggageAllowance,omitempty"` + + // weight restriction + // Example: 1500 + WeightRestriction int64 `json:"weightRestriction,omitempty"` } // Validate validates this entitlements diff --git a/pkg/gen/primev2api/embedded_spec.go b/pkg/gen/primev2api/embedded_spec.go index 849b5f6783b..7b513facec7 100644 --- a/pkg/gen/primev2api/embedded_spec.go +++ b/pkg/gen/primev2api/embedded_spec.go @@ -1041,6 +1041,11 @@ func init() { "type": "integer", "x-nullable": true, "example": 3 + }, + "weightRestriction": { + "type": "integer", + "x-formatting": "weight", + "example": 1500 } } }, @@ -4652,6 +4657,11 @@ func init() { "type": "integer", "x-nullable": true, "example": 3 + }, + "weightRestriction": { + "type": "integer", + "x-formatting": "weight", + "example": 1500 } } }, diff --git a/pkg/gen/primev2messages/entitlements.go b/pkg/gen/primev2messages/entitlements.go index b39c4b64fd8..20bcf683c79 100644 --- a/pkg/gen/primev2messages/entitlements.go +++ b/pkg/gen/primev2messages/entitlements.go @@ -83,6 +83,10 @@ type Entitlements struct { // The amount of weight in pounds that the move is entitled for shipment types of Unaccompanied Baggage. // Example: 3 UnaccompaniedBaggageAllowance *int64 `json:"unaccompaniedBaggageAllowance,omitempty"` + + // weight restriction + // Example: 1500 + WeightRestriction int64 `json:"weightRestriction,omitempty"` } // Validate validates this entitlements diff --git a/pkg/gen/primev3api/embedded_spec.go b/pkg/gen/primev3api/embedded_spec.go index b5fc1983191..5c2a9e740d7 100644 --- a/pkg/gen/primev3api/embedded_spec.go +++ b/pkg/gen/primev3api/embedded_spec.go @@ -1203,6 +1203,11 @@ func init() { "type": "integer", "x-nullable": true, "example": 3 + }, + "weightRestriction": { + "type": "integer", + "x-formatting": "weight", + "example": 1500 } } }, @@ -5461,6 +5466,11 @@ func init() { "type": "integer", "x-nullable": true, "example": 3 + }, + "weightRestriction": { + "type": "integer", + "x-formatting": "weight", + "example": 1500 } } }, diff --git a/pkg/gen/primev3messages/entitlements.go b/pkg/gen/primev3messages/entitlements.go index d642d70f69b..3e3568aacdc 100644 --- a/pkg/gen/primev3messages/entitlements.go +++ b/pkg/gen/primev3messages/entitlements.go @@ -83,6 +83,10 @@ type Entitlements struct { // The amount of weight in pounds that the move is entitled for shipment types of Unaccompanied Baggage. // Example: 3 UnaccompaniedBaggageAllowance *int64 `json:"unaccompaniedBaggageAllowance,omitempty"` + + // weight restriction + // Example: 1500 + WeightRestriction int64 `json:"weightRestriction,omitempty"` } // Validate validates this entitlements diff --git a/pkg/gen/supportapi/embedded_spec.go b/pkg/gen/supportapi/embedded_spec.go index c50b1a37c98..45e90f65b9e 100644 --- a/pkg/gen/supportapi/embedded_spec.go +++ b/pkg/gen/supportapi/embedded_spec.go @@ -1187,6 +1187,10 @@ func init() { "type": "integer", "x-nullable": true, "example": 3 + }, + "weightRestriction": { + "type": "integer", + "example": 1500 } } }, @@ -4058,6 +4062,10 @@ func init() { "type": "integer", "x-nullable": true, "example": 3 + }, + "weightRestriction": { + "type": "integer", + "example": 1500 } } }, diff --git a/pkg/gen/supportmessages/entitlement.go b/pkg/gen/supportmessages/entitlement.go index 4ae036d582c..2247b355374 100644 --- a/pkg/gen/supportmessages/entitlement.go +++ b/pkg/gen/supportmessages/entitlement.go @@ -85,6 +85,10 @@ type Entitlement struct { // The amount of weight in pounds that the move is entitled for shipment types of Unaccompanied Baggage. // Example: 3 UnaccompaniedBaggageAllowance *int64 `json:"unaccompaniedBaggageAllowance,omitempty"` + + // weight restriction + // Example: 1500 + WeightRestriction int64 `json:"weightRestriction,omitempty"` } // Validate validates this entitlement diff --git a/pkg/handlers/ghcapi/internal/payloads/model_to_payload.go b/pkg/handlers/ghcapi/internal/payloads/model_to_payload.go index 482074aa402..ba1facad756 100644 --- a/pkg/handlers/ghcapi/internal/payloads/model_to_payload.go +++ b/pkg/handlers/ghcapi/internal/payloads/model_to_payload.go @@ -718,6 +718,11 @@ func Entitlement(entitlement *models.Entitlement) *ghcmessages.Entitlements { requiredMedicalEquipmentWeight := int64(entitlement.RequiredMedicalEquipmentWeight) gunSafe := entitlement.GunSafe adminRestrictedWeightLocation := entitlement.AdminRestrictedWeightLocation + + var weightRestriction int64 + wr := int64(entitlement.WeightRestriction) + weightRestriction = wr + var accompaniedTour *bool if entitlement.AccompaniedTour != nil { accompaniedTour = models.BoolPointer(*entitlement.AccompaniedTour) @@ -753,11 +758,10 @@ func Entitlement(entitlement *models.Entitlement) *ghcmessages.Entitlements { OrganizationalClothingAndIndividualEquipment: entitlement.OrganizationalClothingAndIndividualEquipment, GunSafe: gunSafe, AdminRestrictedWeightLocation: adminRestrictedWeightLocation, + WeightRestriction: weightRestriction, ETag: etag.GenerateEtag(entitlement.UpdatedAt), } -} - -// DutyLocation payload +} // DutyLocation payload func DutyLocation(dutyLocation *models.DutyLocation) *ghcmessages.DutyLocation { if dutyLocation == nil { return nil diff --git a/pkg/handlers/primeapi/payloads/model_to_payload.go b/pkg/handlers/primeapi/payloads/model_to_payload.go index 57ae9b12a4b..29d5aed536a 100644 --- a/pkg/handlers/primeapi/payloads/model_to_payload.go +++ b/pkg/handlers/primeapi/payloads/model_to_payload.go @@ -224,10 +224,11 @@ func Entitlement(entitlement *models.Entitlement) *primemessages.Entitlements { ProGearWeightSpouse: int64(entitlement.ProGearWeightSpouse), RequiredMedicalEquipmentWeight: int64(entitlement.RequiredMedicalEquipmentWeight), OrganizationalClothingAndIndividualEquipment: entitlement.OrganizationalClothingAndIndividualEquipment, - StorageInTransit: sit, - TotalDependents: totalDependents, - TotalWeight: totalWeight, - ETag: etag.GenerateEtag(entitlement.UpdatedAt), + StorageInTransit: sit, + TotalDependents: totalDependents, + TotalWeight: totalWeight, + WeightRestriction: int64(entitlement.WeightRestriction), + ETag: etag.GenerateEtag(entitlement.UpdatedAt), } } diff --git a/pkg/handlers/primeapiv2/payloads/model_to_payload.go b/pkg/handlers/primeapiv2/payloads/model_to_payload.go index 2ece0f55833..44183723ac2 100644 --- a/pkg/handlers/primeapiv2/payloads/model_to_payload.go +++ b/pkg/handlers/primeapiv2/payloads/model_to_payload.go @@ -169,10 +169,11 @@ func Entitlement(entitlement *models.Entitlement) *primev2messages.Entitlements ProGearWeightSpouse: int64(entitlement.ProGearWeightSpouse), RequiredMedicalEquipmentWeight: int64(entitlement.RequiredMedicalEquipmentWeight), OrganizationalClothingAndIndividualEquipment: entitlement.OrganizationalClothingAndIndividualEquipment, - StorageInTransit: sit, - TotalDependents: totalDependents, - TotalWeight: totalWeight, - ETag: etag.GenerateEtag(entitlement.UpdatedAt), + StorageInTransit: sit, + TotalDependents: totalDependents, + TotalWeight: totalWeight, + WeightRestriction: int64(entitlement.WeightRestriction), + ETag: etag.GenerateEtag(entitlement.UpdatedAt), } } diff --git a/pkg/handlers/primeapiv3/payloads/model_to_payload.go b/pkg/handlers/primeapiv3/payloads/model_to_payload.go index f4cd6ab2609..5723796265d 100644 --- a/pkg/handlers/primeapiv3/payloads/model_to_payload.go +++ b/pkg/handlers/primeapiv3/payloads/model_to_payload.go @@ -169,10 +169,11 @@ func Entitlement(entitlement *models.Entitlement) *primev3messages.Entitlements ProGearWeightSpouse: int64(entitlement.ProGearWeightSpouse), RequiredMedicalEquipmentWeight: int64(entitlement.RequiredMedicalEquipmentWeight), OrganizationalClothingAndIndividualEquipment: entitlement.OrganizationalClothingAndIndividualEquipment, - StorageInTransit: sit, - TotalDependents: totalDependents, - TotalWeight: totalWeight, - ETag: etag.GenerateEtag(entitlement.UpdatedAt), + StorageInTransit: sit, + TotalDependents: totalDependents, + TotalWeight: totalWeight, + WeightRestriction: int64(entitlement.WeightRestriction), + ETag: etag.GenerateEtag(entitlement.UpdatedAt), } } diff --git a/pkg/handlers/supportapi/internal/payloads/model_to_payload.go b/pkg/handlers/supportapi/internal/payloads/model_to_payload.go index 5e43cd2070b..55d81ac65a8 100644 --- a/pkg/handlers/supportapi/internal/payloads/model_to_payload.go +++ b/pkg/handlers/supportapi/internal/payloads/model_to_payload.go @@ -151,6 +151,7 @@ func Entitlement(entitlement *models.Entitlement) *supportmessages.Entitlement { if entitlement.UBAllowance != nil { ubAllowance = int64(*entitlement.UBAllowance) } + return &supportmessages.Entitlement{ ID: strfmt.UUID(entitlement.ID.String()), AuthorizedWeight: authorizedWeight, @@ -162,10 +163,11 @@ func Entitlement(entitlement *models.Entitlement) *supportmessages.Entitlement { ProGearWeightSpouse: int64(entitlement.ProGearWeightSpouse), RequiredMedicalEquipmentWeight: int64(entitlement.RequiredMedicalEquipmentWeight), OrganizationalClothingAndIndividualEquipment: entitlement.OrganizationalClothingAndIndividualEquipment, - StorageInTransit: sit, - TotalDependents: totalDependents, - TotalWeight: totalWeight, - ETag: etag.GenerateEtag(entitlement.UpdatedAt), + StorageInTransit: sit, + TotalDependents: totalDependents, + TotalWeight: totalWeight, + WeightRestriction: int64(entitlement.WeightRestriction), + ETag: etag.GenerateEtag(entitlement.UpdatedAt), } } diff --git a/pkg/models/ghc_entitlements.go b/pkg/models/ghc_entitlements.go index 7497291cb8c..f8e6a383bf6 100644 --- a/pkg/models/ghc_entitlements.go +++ b/pkg/models/ghc_entitlements.go @@ -32,6 +32,7 @@ type Entitlement struct { ProGearWeight int `db:"pro_gear_weight"` ProGearWeightSpouse int `db:"pro_gear_weight_spouse"` AdminRestrictedWeightLocation bool `db:"admin_restricted_weight_location"` + WeightRestriction int `db:"weight_restriction"` CreatedAt time.Time `db:"created_at"` UpdatedAt time.Time `db:"updated_at"` } diff --git a/pkg/services/order/order_updater.go b/pkg/services/order/order_updater.go index 323bd7a0592..a8692b14653 100644 --- a/pkg/services/order/order_updater.go +++ b/pkg/services/order/order_updater.go @@ -460,6 +460,8 @@ func allowanceFromTOOPayload(appCtx appcontext.AppContext, existingOrder models. order.Entitlement.AdminRestrictedWeightLocation = *payload.AdminRestrictedWeightLocation } + order.Entitlement.WeightRestriction = int(payload.WeightRestriction) + if payload.AccompaniedTour != nil { order.Entitlement.AccompaniedTour = payload.AccompaniedTour } @@ -505,8 +507,8 @@ func allowanceFromTOOPayload(appCtx appcontext.AppContext, existingOrder models. } return order -} +} func allowanceFromCounselingPayload(appCtx appcontext.AppContext, existingOrder models.Order, payload ghcmessages.CounselingUpdateAllowancePayload) models.Order { order := existingOrder @@ -564,6 +566,8 @@ func allowanceFromCounselingPayload(appCtx appcontext.AppContext, existingOrder order.Entitlement.AdminRestrictedWeightLocation = *payload.AdminRestrictedWeightLocation } + order.Entitlement.WeightRestriction = int(*payload.WeightRestriction) + if payload.AccompaniedTour != nil { order.Entitlement.AccompaniedTour = payload.AccompaniedTour } @@ -603,8 +607,8 @@ func allowanceFromCounselingPayload(appCtx appcontext.AppContext, existingOrder } return order -} +} func (f *orderUpdater) saveDocumentForAmendedOrder(appCtx appcontext.AppContext, doc *models.Document) (*models.Document, error) { var docID uuid.UUID if doc != nil { diff --git a/src/components/Office/AllowancesDetailForm/AllowancesDetailForm.jsx b/src/components/Office/AllowancesDetailForm/AllowancesDetailForm.jsx index edc345478ea..23c99ba8862 100644 --- a/src/components/Office/AllowancesDetailForm/AllowancesDetailForm.jsx +++ b/src/components/Office/AllowancesDetailForm/AllowancesDetailForm.jsx @@ -20,8 +20,9 @@ const AllowancesDetailForm = ({ header, entitlements, branchOptions, formIsDisab entitlements?.dependentsTwelveAndOver || entitlements?.dependentsUnderTwelve ); - const [isAdminWeightLocationChecked, setIsAdminWeightLocationChecked] = useState(false); - + const [isAdminWeightLocationChecked, setIsAdminWeightLocationChecked] = useState( + entitlements?.adminRestrictedWeightLocation || false, + ); useEffect(() => { // Functional component version of "componentDidMount" // By leaving the dependency array empty this will only run once @@ -175,15 +176,23 @@ const AllowancesDetailForm = ({ header, entitlements, branchOptions, formIsDisab isDisabled={formIsDisabled} onChange={(e) => setIsAdminWeightLocationChecked(e.target.checked)} /> - {isAdminWeightLocationChecked && ( - - )} + {isAdminWeightLocationChecked && ( + + )} +
Standard Weight allowance
{formatWeight(entitlements.totalWeight)}
diff --git a/src/components/Office/DefinitionLists/AllowancesList.jsx b/src/components/Office/DefinitionLists/AllowancesList.jsx index 3e0cf3dd93d..185a81be3f5 100644 --- a/src/components/Office/DefinitionLists/AllowancesList.jsx +++ b/src/components/Office/DefinitionLists/AllowancesList.jsx @@ -110,7 +110,9 @@ const AllowancesList = ({ info, showVisualCues }) => {
Weight Restriction
-
-
+
+ {info.weightRestriction ? formatWeight(info.weightRestriction) : DEFAULT_EMPTY_VALUE} +
diff --git a/src/constants/MoveHistory/Database/FieldMappings.js b/src/constants/MoveHistory/Database/FieldMappings.js index 1b216087f52..12c7a71d67d 100644 --- a/src/constants/MoveHistory/Database/FieldMappings.js +++ b/src/constants/MoveHistory/Database/FieldMappings.js @@ -40,6 +40,7 @@ export default { organizational_clothing_and_individual_equipment: 'OCIE', gun_safe: 'Gun Safe', admin_restricted_weight_location: 'Admin restricted weight location', + weight_restriction: 'Weight restriction', requested_pickup_date: 'Requested pickup date', grade: 'Pay grade', shipment_type: 'Shipment type', diff --git a/src/pages/Office/MoveAllowances/MoveAllowances.jsx b/src/pages/Office/MoveAllowances/MoveAllowances.jsx index 1412c39c972..346a0c6c263 100644 --- a/src/pages/Office/MoveAllowances/MoveAllowances.jsx +++ b/src/pages/Office/MoveAllowances/MoveAllowances.jsx @@ -99,6 +99,7 @@ const MoveAllowances = () => { storageInTransit, gunSafe, adminRestrictedWeightLocation, + weightRestriction, accompaniedTour, dependentsTwelveAndOver, dependentsUnderTwelve, @@ -120,6 +121,7 @@ const MoveAllowances = () => { storageInTransit: Number(storageInTransit), gunSafe, adminRestrictedWeightLocation, + weightRestriction: Number(weightRestriction), accompaniedTour, dependentsTwelveAndOver: Number(dependentsTwelveAndOver), dependentsUnderTwelve: Number(dependentsUnderTwelve), @@ -136,6 +138,7 @@ const MoveAllowances = () => { organizationalClothingAndIndividualEquipment, gunSafe, adminRestrictedWeightLocation, + weightRestriction, storageInTransit, dependentsUnderTwelve, dependentsTwelveAndOver, @@ -152,6 +155,7 @@ const MoveAllowances = () => { organizationalClothingAndIndividualEquipment, gunSafe, adminRestrictedWeightLocation, + weightRestriction, storageInTransit: `${storageInTransit}`, accompaniedTour, dependentsUnderTwelve: `${dependentsUnderTwelve}`, diff --git a/src/pages/Office/MoveDetails/MoveDetails.jsx b/src/pages/Office/MoveDetails/MoveDetails.jsx index 49209ee870b..81da8df5671 100644 --- a/src/pages/Office/MoveDetails/MoveDetails.jsx +++ b/src/pages/Office/MoveDetails/MoveDetails.jsx @@ -415,6 +415,7 @@ const MoveDetails = ({ dependentsTwelveAndOver: allowances.dependentsTwelveAndOver, accompaniedTour: allowances.accompaniedTour, ubAllowance: allowances.unaccompaniedBaggageAllowance, + weightRestriction: allowances.weightRestriction, }; const customerInfo = { diff --git a/src/pages/Office/ServicesCounselingMoveAllowances/ServicesCounselingMoveAllowances.jsx b/src/pages/Office/ServicesCounselingMoveAllowances/ServicesCounselingMoveAllowances.jsx index c954518334c..299d6de374d 100644 --- a/src/pages/Office/ServicesCounselingMoveAllowances/ServicesCounselingMoveAllowances.jsx +++ b/src/pages/Office/ServicesCounselingMoveAllowances/ServicesCounselingMoveAllowances.jsx @@ -87,6 +87,7 @@ const ServicesCounselingMoveAllowances = () => { storageInTransit, gunSafe, adminRestrictedWeightLocation, + weightRestriction, accompaniedTour, dependentsTwelveAndOver, dependentsUnderTwelve, @@ -108,6 +109,7 @@ const ServicesCounselingMoveAllowances = () => { organizationalClothingAndIndividualEquipment, gunSafe, adminRestrictedWeightLocation, + weightRestriction: Number(weightRestriction), accompaniedTour, dependentsTwelveAndOver: Number(dependentsTwelveAndOver), dependentsUnderTwelve: Number(dependentsUnderTwelve), @@ -124,6 +126,7 @@ const ServicesCounselingMoveAllowances = () => { organizationalClothingAndIndividualEquipment, gunSafe, adminRestrictedWeightLocation, + weightRestriction, storageInTransit, dependentsUnderTwelve, dependentsTwelveAndOver, @@ -140,6 +143,7 @@ const ServicesCounselingMoveAllowances = () => { storageInTransit: `${storageInTransit}`, gunSafe, adminRestrictedWeightLocation, + weightRestriction, organizationalClothingAndIndividualEquipment, accompaniedTour, dependentsUnderTwelve: `${dependentsUnderTwelve}`, diff --git a/src/pages/Office/ServicesCounselingMoveDetails/ServicesCounselingMoveDetails.jsx b/src/pages/Office/ServicesCounselingMoveDetails/ServicesCounselingMoveDetails.jsx index da6d6a2a34d..4fa2f82bbe6 100644 --- a/src/pages/Office/ServicesCounselingMoveDetails/ServicesCounselingMoveDetails.jsx +++ b/src/pages/Office/ServicesCounselingMoveDetails/ServicesCounselingMoveDetails.jsx @@ -392,6 +392,7 @@ const ServicesCounselingMoveDetails = ({ dependentsTwelveAndOver: allowances.dependentsTwelveAndOver, accompaniedTour: allowances.accompaniedTour, ubAllowance: allowances.unaccompaniedBaggageAllowance, + weightRestriction: allowances.weightRestriction, }; const ordersInfo = { diff --git a/swagger-def/definitions/prime/Entitlements.yaml b/swagger-def/definitions/prime/Entitlements.yaml index 8a95dccf41c..45e4f573900 100644 --- a/swagger-def/definitions/prime/Entitlements.yaml +++ b/swagger-def/definitions/prime/Entitlements.yaml @@ -57,6 +57,10 @@ properties: totalDependents: example: 2 type: integer + weightRestriction: + example: 1500 + type: integer + x-formatting: weight eTag: type: string readOnly: true diff --git a/swagger-def/ghc.yaml b/swagger-def/ghc.yaml index c39682a8598..45017e8cb08 100644 --- a/swagger-def/ghc.yaml +++ b/swagger-def/ghc.yaml @@ -5026,6 +5026,10 @@ definitions: example: 3 x-nullable: true description: Indicates the number of dependents of the age twelve or older for a move. This is only present on OCONUS moves. + weightRestriction: + type: integer + example: 1500 + description: The amount of weight in pounds that the move is restricted to for a particular location. eTag: type: string type: object @@ -5837,6 +5841,9 @@ definitions: example: 500 type: integer x-nullable: true + weightRestriction: + example: 1500 + type: integer UpdateBillableWeightPayload: type: object properties: @@ -5933,6 +5940,12 @@ definitions: example: 500 type: integer x-nullable: true + weightRestriction: + example: 1500 + type: integer + description: unit is in lbs + x-formatting: weight + x-nullable: true MoveTaskOrder: description: The Move (MoveTaskOrder) properties: diff --git a/swagger-def/support.yaml b/swagger-def/support.yaml index 5f94bc926db..b487f1bdaea 100644 --- a/swagger-def/support.yaml +++ b/swagger-def/support.yaml @@ -916,6 +916,9 @@ definitions: totalDependents: example: 2 type: integer + weightRestriction: + example: 1500 + type: integer eTag: type: string readOnly: true diff --git a/swagger/ghc.yaml b/swagger/ghc.yaml index 83842cc917f..74a3ff2d4a5 100644 --- a/swagger/ghc.yaml +++ b/swagger/ghc.yaml @@ -5231,6 +5231,12 @@ definitions: description: >- Indicates the number of dependents of the age twelve or older for a move. This is only present on OCONUS moves. + weightRestriction: + type: integer + example: 1500 + description: >- + The amount of weight in pounds that the move is restricted to for a + particular location. eTag: type: string type: object @@ -6086,6 +6092,9 @@ definitions: example: 500 type: integer x-nullable: true + weightRestriction: + example: 1500 + type: integer UpdateBillableWeightPayload: type: object properties: @@ -6195,6 +6204,12 @@ definitions: example: 500 type: integer x-nullable: true + weightRestriction: + example: 1500 + type: integer + description: unit is in lbs + x-formatting: weight + x-nullable: true MoveTaskOrder: description: The Move (MoveTaskOrder) properties: diff --git a/swagger/prime.yaml b/swagger/prime.yaml index 8af5a4ee92d..974b986a39d 100644 --- a/swagger/prime.yaml +++ b/swagger/prime.yaml @@ -3059,6 +3059,10 @@ definitions: totalDependents: example: 2 type: integer + weightRestriction: + example: 1500 + type: integer + x-formatting: weight eTag: type: string readOnly: true diff --git a/swagger/prime_v2.yaml b/swagger/prime_v2.yaml index 05ac5076d6c..20c3c8243b6 100644 --- a/swagger/prime_v2.yaml +++ b/swagger/prime_v2.yaml @@ -1670,6 +1670,10 @@ definitions: totalDependents: example: 2 type: integer + weightRestriction: + example: 1500 + type: integer + x-formatting: weight eTag: type: string readOnly: true diff --git a/swagger/prime_v3.yaml b/swagger/prime_v3.yaml index 398bf9c100d..b7122385c20 100644 --- a/swagger/prime_v3.yaml +++ b/swagger/prime_v3.yaml @@ -1758,6 +1758,10 @@ definitions: totalDependents: example: 2 type: integer + weightRestriction: + example: 1500 + type: integer + x-formatting: weight eTag: type: string readOnly: true diff --git a/swagger/support.yaml b/swagger/support.yaml index bd09358deef..0d90796ada5 100644 --- a/swagger/support.yaml +++ b/swagger/support.yaml @@ -991,6 +991,9 @@ definitions: totalDependents: example: 2 type: integer + weightRestriction: + example: 1500 + type: integer eTag: type: string readOnly: true From aed794679c3dcb22d72ba623cba077b842a738be Mon Sep 17 00:00:00 2001 From: deandreJones Date: Fri, 10 Jan 2025 09:55:07 -0600 Subject: [PATCH 03/22] B-21934 add validation --- src/pages/Office/MoveAllowances/MoveAllowances.jsx | 6 +++++- .../ServicesCounselingMoveAllowances.jsx | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/pages/Office/MoveAllowances/MoveAllowances.jsx b/src/pages/Office/MoveAllowances/MoveAllowances.jsx index 346a0c6c263..18484e884bd 100644 --- a/src/pages/Office/MoveAllowances/MoveAllowances.jsx +++ b/src/pages/Office/MoveAllowances/MoveAllowances.jsx @@ -43,6 +43,10 @@ const validationSchema = Yup.object({ .min(0, 'Storage in transit (days) must be greater than or equal to 0') .transform((value) => (Number.isNaN(value) ? 0 : value)) .notRequired(), + weightRestriction: Yup.number() + .min(0, 'Weight restriction must be greater than or equal to 0') + .transform((value) => (Number.isNaN(value) ? 0 : value)) + .notRequired(), }); const MoveAllowances = () => { @@ -155,7 +159,7 @@ const MoveAllowances = () => { organizationalClothingAndIndividualEquipment, gunSafe, adminRestrictedWeightLocation, - weightRestriction, + weightRestriction: `${weightRestriction}`, storageInTransit: `${storageInTransit}`, accompaniedTour, dependentsUnderTwelve: `${dependentsUnderTwelve}`, diff --git a/src/pages/Office/ServicesCounselingMoveAllowances/ServicesCounselingMoveAllowances.jsx b/src/pages/Office/ServicesCounselingMoveAllowances/ServicesCounselingMoveAllowances.jsx index 299d6de374d..d6a8f85bc6b 100644 --- a/src/pages/Office/ServicesCounselingMoveAllowances/ServicesCounselingMoveAllowances.jsx +++ b/src/pages/Office/ServicesCounselingMoveAllowances/ServicesCounselingMoveAllowances.jsx @@ -143,7 +143,7 @@ const ServicesCounselingMoveAllowances = () => { storageInTransit: `${storageInTransit}`, gunSafe, adminRestrictedWeightLocation, - weightRestriction, + weightRestriction: `${weightRestriction}`, organizationalClothingAndIndividualEquipment, accompaniedTour, dependentsUnderTwelve: `${dependentsUnderTwelve}`, From 0b5ade160f24b62256fd23308f8ccfe40d806181 Mon Sep 17 00:00:00 2001 From: deandreJones Date: Fri, 10 Jan 2025 17:29:03 +0000 Subject: [PATCH 04/22] fix tests --- pkg/factory/entitlement_factory.go | 4 ++++ pkg/handlers/ghcapi/orders_test.go | 2 ++ 2 files changed, 6 insertions(+) diff --git a/pkg/factory/entitlement_factory.go b/pkg/factory/entitlement_factory.go index 235fdaf3be6..2255527c223 100644 --- a/pkg/factory/entitlement_factory.go +++ b/pkg/factory/entitlement_factory.go @@ -47,6 +47,7 @@ func BuildEntitlement(db *pop.Connection, customs []Customization, traits []Trai proGearWeight := 2000 proGearWeightSpouse := 500 ordersType := internalmessages.OrdersTypePERMANENTCHANGEOFSTATION + weightRestriction := 0 // Create default Entitlement entitlement := models.Entitlement{ @@ -59,6 +60,8 @@ func BuildEntitlement(db *pop.Connection, customs []Customization, traits []Trai ProGearWeightSpouse: proGearWeightSpouse, RequiredMedicalEquipmentWeight: rmeWeight, OrganizationalClothingAndIndividualEquipment: ocie, + AdminRestrictedWeightLocation: *setBoolPtr(&cEntitlement.AdminRestrictedWeightLocation, false), + WeightRestriction: weightRestriction, } // Set default calculated values entitlement.SetWeightAllotment(string(*grade), ordersType) @@ -73,4 +76,5 @@ func BuildEntitlement(db *pop.Connection, customs []Customization, traits []Trai } return entitlement + } diff --git a/pkg/handlers/ghcapi/orders_test.go b/pkg/handlers/ghcapi/orders_test.go index 6d3bd880903..ad50d90ef69 100644 --- a/pkg/handlers/ghcapi/orders_test.go +++ b/pkg/handlers/ghcapi/orders_test.go @@ -1476,6 +1476,8 @@ func (suite *HandlerSuite) TestCounselingUpdateAllowanceHandler() { ProGearWeightSpouse: proGearWeightSpouse, RequiredMedicalEquipmentWeight: rmeWeight, StorageInTransit: models.Int64Pointer(80), + AdminRestrictedWeightLocation: models.BoolPointer(false), + WeightRestriction: models.Int64Pointer(0), } request := httptest.NewRequest("PATCH", "/counseling/orders/{orderID}/allowances", nil) From 4f3a8336191b55d861a04ff7921b10b60e10694c Mon Sep 17 00:00:00 2001 From: deandreJones Date: Fri, 10 Jan 2025 18:32:40 +0000 Subject: [PATCH 05/22] more tests --- pkg/services/order/order_updater_test.go | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/pkg/services/order/order_updater_test.go b/pkg/services/order/order_updater_test.go index 1bf72866552..1ed15ea9a89 100644 --- a/pkg/services/order/order_updater_test.go +++ b/pkg/services/order/order_updater_test.go @@ -588,6 +588,8 @@ func (suite *OrderServiceSuite) TestUpdateAllowanceAsTOO() { ProGearWeight: proGearWeight, ProGearWeightSpouse: proGearWeightSpouse, RequiredMedicalEquipmentWeight: rmeWeight, + AdminRestrictedWeightLocation: models.BoolPointer(false), + WeightRestriction: int64(*models.IntPointer(0)), } updatedOrder, _, err := orderUpdater.UpdateAllowanceAsTOO(suite.AppContextForTest(), order.ID, payload, eTag) @@ -630,6 +632,8 @@ func (suite *OrderServiceSuite) TestUpdateAllowanceAsTOO() { AccompaniedTour: models.BoolPointer(true), DependentsTwelveAndOver: models.Int64Pointer(2), DependentsUnderTwelve: models.Int64Pointer(4), + AdminRestrictedWeightLocation: models.BoolPointer(false), + WeightRestriction: int64(*models.IntPointer(0)), } updatedOrder, _, err := orderUpdater.UpdateAllowanceAsTOO(suite.AppContextForTest(), order.ID, payload, eTag) @@ -675,6 +679,8 @@ func (suite *OrderServiceSuite) TestUpdateAllowanceAsTOO() { ProGearWeight: proGearWeight, ProGearWeightSpouse: proGearWeightSpouse, RequiredMedicalEquipmentWeight: rmeWeight, + AdminRestrictedWeightLocation: models.BoolPointer(false), + WeightRestriction: int64(*models.IntPointer(0)), } updatedOrder, _, err := orderUpdater.UpdateAllowanceAsTOO(suite.AppContextForTest(), order.ID, payload, eTag) @@ -747,6 +753,8 @@ func (suite *OrderServiceSuite) TestUpdateAllowanceAsCounselor() { AccompaniedTour: models.BoolPointer(true), DependentsTwelveAndOver: models.Int64Pointer(1), DependentsUnderTwelve: models.Int64Pointer(2), + AdminRestrictedWeightLocation: models.BoolPointer(false), + WeightRestriction: models.Int64Pointer(0), } updatedOrder, _, err := orderUpdater.UpdateAllowanceAsCounselor(suite.AppContextForTest(), order.ID, payload, eTag) @@ -784,6 +792,8 @@ func (suite *OrderServiceSuite) TestUpdateAllowanceAsCounselor() { ProGearWeight: proGearWeight, ProGearWeightSpouse: proGearWeightSpouse, RequiredMedicalEquipmentWeight: rmeWeight, + AdminRestrictedWeightLocation: models.BoolPointer(false), + WeightRestriction: models.Int64Pointer(0), } updatedOrder, _, err := orderUpdater.UpdateAllowanceAsCounselor(suite.AppContextForTest(), order.ID, payload, eTag) @@ -829,6 +839,8 @@ func (suite *OrderServiceSuite) TestUpdateAllowanceAsCounselor() { ProGearWeight: proGearWeight, ProGearWeightSpouse: proGearWeightSpouse, RequiredMedicalEquipmentWeight: rmeWeight, + AdminRestrictedWeightLocation: models.BoolPointer(false), + WeightRestriction: models.Int64Pointer(0), } updatedOrder, _, err := orderUpdater.UpdateAllowanceAsCounselor(suite.AppContextForTest(), order.ID, payload, eTag) @@ -878,6 +890,8 @@ func (suite *OrderServiceSuite) TestUpdateAllowanceAsCounselor() { ProGearWeight: proGearWeight, ProGearWeightSpouse: proGearWeightSpouse, RequiredMedicalEquipmentWeight: rmeWeight, + AdminRestrictedWeightLocation: models.BoolPointer(false), + WeightRestriction: models.Int64Pointer(0), } updatedOrder, _, err := orderUpdater.UpdateAllowanceAsCounselor(suite.AppContextForTest(), orderWithoutDefaults.ID, payload, eTag) @@ -929,6 +943,8 @@ func (suite *OrderServiceSuite) TestUpdateAllowanceAsCounselor() { ProGearWeight: proGearWeight, ProGearWeightSpouse: proGearWeightSpouse, RequiredMedicalEquipmentWeight: rmeWeight, + AdminRestrictedWeightLocation: models.BoolPointer(false), + WeightRestriction: models.Int64Pointer(0), } updatedOrder, _, err := orderUpdater.UpdateAllowanceAsCounselor(suite.AppContextForTest(), order.ID, payload, eTag) @@ -965,6 +981,8 @@ func (suite *OrderServiceSuite) TestUpdateAllowanceAsCounselor() { ProGearWeight: proGearWeight, ProGearWeightSpouse: proGearWeightSpouse, RequiredMedicalEquipmentWeight: rmeWeight, + AdminRestrictedWeightLocation: models.BoolPointer(false), + WeightRestriction: models.Int64Pointer(0), } updatedOrder, _, err := orderUpdater.UpdateAllowanceAsCounselor(suite.AppContextForTest(), order.ID, payload, eTag) From 36be221b878f1c4b992dc0ba9625107f1617f2d3 Mon Sep 17 00:00:00 2001 From: deandreJones Date: Fri, 10 Jan 2025 20:56:40 +0000 Subject: [PATCH 06/22] remove comment --- .../app/schema/20250106153750_admin_weight_restriction.up.sql | 4 ---- 1 file changed, 4 deletions(-) diff --git a/migrations/app/schema/20250106153750_admin_weight_restriction.up.sql b/migrations/app/schema/20250106153750_admin_weight_restriction.up.sql index a3e6e097e45..d5f248d8237 100644 --- a/migrations/app/schema/20250106153750_admin_weight_restriction.up.sql +++ b/migrations/app/schema/20250106153750_admin_weight_restriction.up.sql @@ -1,6 +1,2 @@ ALTER TABLE entitlements ADD COLUMN IF NOT EXISTS admin_restricted_weight_location BOOLEAN; - --- ALTER COLUMN admin_restricted_weight_location TYPE boolean USING (COALESCE(admin_restricted_weight_location, false)), --- ALTER COLUMN admin_restricted_weight_location SET DEFAULT false, --- ALTER COLUMN admin_restricted_weight_location SET NOT NULL; \ No newline at end of file From 8183156977a673ac4255590a5466031a13128696 Mon Sep 17 00:00:00 2001 From: deandreJones Date: Mon, 13 Jan 2025 22:45:18 +0000 Subject: [PATCH 07/22] B-21935 initial --- .../templates/move_submitted_template.html | 4 +-- .../templates/move_submitted_template.txt | 2 +- pkg/notifications/move_approved.go | 26 ++++++++++--------- .../MtoShipmentForm/MtoShipmentForm.jsx | 8 +++--- src/pages/MyMove/Home/index.jsx | 2 +- src/pages/MyMove/MovingInfo.jsx | 6 ++++- 6 files changed, 28 insertions(+), 20 deletions(-) diff --git a/pkg/assets/notifications/templates/move_submitted_template.html b/pkg/assets/notifications/templates/move_submitted_template.html index cce7d87e8b8..17e7c0732ff 100644 --- a/pkg/assets/notifications/templates/move_submitted_template.html +++ b/pkg/assets/notifications/templates/move_submitted_template.html @@ -20,9 +20,9 @@

- Your weight allowance: {{.WeightAllowance}} pounds. + Your standard weight allowance: {{.WeightAllowance}} pounds. That is how much combined weight the government will pay for all movements between authorized locations under your - orders. + orders. Be advised, if you are moving to an administratively restricted HHG weight location this amount could be less.

diff --git a/pkg/assets/notifications/templates/move_submitted_template.txt b/pkg/assets/notifications/templates/move_submitted_template.txt index 72f1c68566d..85516ead51f 100644 --- a/pkg/assets/notifications/templates/move_submitted_template.txt +++ b/pkg/assets/notifications/templates/move_submitted_template.txt @@ -6,7 +6,7 @@ We have assigned you a move code: {{.Locator}}. You can use this code when talki {{ if .OriginDutyLocationPhoneLine -}} To change any information about your move, or to add or cancel shipments, you should contact {{.OriginDutyLocationPhoneLine}} or visit your local transportation office ({{.OneSourceTransportationOfficeLink}}) . {{- end }} {{- if not .OriginDutyLocationPhoneLine }} To change any information about your move, or to add or cancel shipments, you should contact your nearest transportation office. You can find the contact information using the directory of PCS-related contacts ({{.OneSourceTransportationOfficeLink}}) . {{- end }} -Your weight allowance: {{.WeightAllowance}} pounds. That is how much combined weight the government will pay for all movements between authorized locations under your orders. +Your standard weight allowance: {{.WeightAllowance}} pounds. That is how much combined weight the government will pay for all movements between authorized locations under your orders. Be advised, if you are moving to an administratively restricted HHG weight location this amount could be less. If you move more than {{.WeightAllowance}} pounds or ship to/from an other than authorized location, you may owe the government the difference in cost between what you are authorized and what you decide to move. diff --git a/pkg/notifications/move_approved.go b/pkg/notifications/move_approved.go index 96b198d6c8b..fb207acfbe3 100644 --- a/pkg/notifications/move_approved.go +++ b/pkg/notifications/move_approved.go @@ -86,12 +86,13 @@ func (m MoveApproved) emails(appCtx appcontext.AppContext) ([]emailContent, erro } htmlBody, textBody, err := m.renderTemplates(appCtx, moveApprovedEmailData{ - Link: ppmInfoSheetURL.String(), - OriginDutyLocation: originDutyLocation, - DestinationDutyLocation: orders.NewDutyLocation.Name, - OriginDutyLocationPhoneLine: originDutyLocationPhoneLine, - Locator: move.Locator, - MyMoveLink: MyMoveLink, + Link: ppmInfoSheetURL.String(), + OriginDutyLocation: originDutyLocation, + DestinationDutyLocation: orders.NewDutyLocation.Name, + OriginDutyLocationPhoneLine: originDutyLocationPhoneLine, + Locator: move.Locator, + MyMoveLink: MyMoveLink, + AdminRestrictedWeightLocation: orders.Entitlement.AdminRestrictedWeightLocation, }) if err != nil { @@ -128,12 +129,13 @@ func (m MoveApproved) renderTemplates(appCtx appcontext.AppContext, data moveApp // moveApprovedEmailData has content for email template type moveApprovedEmailData struct { - Link string - OriginDutyLocation *string - DestinationDutyLocation string - OriginDutyLocationPhoneLine *string - Locator string - MyMoveLink string + Link string + OriginDutyLocation *string + DestinationDutyLocation string + OriginDutyLocationPhoneLine *string + Locator string + MyMoveLink string + AdminRestrictedWeightLocation bool } // RenderHTML renders the html for the email diff --git a/src/components/Customer/MtoShipmentForm/MtoShipmentForm.jsx b/src/components/Customer/MtoShipmentForm/MtoShipmentForm.jsx index e1fb7f72263..badadb06df0 100644 --- a/src/components/Customer/MtoShipmentForm/MtoShipmentForm.jsx +++ b/src/components/Customer/MtoShipmentForm/MtoShipmentForm.jsx @@ -314,12 +314,14 @@ class MtoShipmentForm extends Component {

{shipmentForm.header[`${shipmentType}`]}

- Remember: You can move + Remember: {isUB - ? ` up to ${formatUBAllowanceWeight( + ? ` You can move up to ${formatUBAllowanceWeight( orders?.entitlement?.ub_allowance, )} for this UB shipment. The weight of your UB is part of your authorized weight allowance` - : ` ${formatWeight(orders.authorizedWeight)} total`} + : ` Your standard weight allowcance is ${formatWeight( + orders.authorizedWeight, + )} total. If you are moving to an administratively restricted HHG weight location this amount may be less. `} . You’ll be billed for any excess weight you move.
diff --git a/src/pages/MyMove/Home/index.jsx b/src/pages/MyMove/Home/index.jsx index 33f7d5bfb34..12544c80b88 100644 --- a/src/pages/MyMove/Home/index.jsx +++ b/src/pages/MyMove/Home/index.jsx @@ -265,7 +265,7 @@ export class Home extends Component {
-
Weight allowance
+
Standard Weight allowance
{formatWeight(orders.authorizedWeight)}.
{move.locator && ( diff --git a/src/pages/MyMove/MovingInfo.jsx b/src/pages/MyMove/MovingInfo.jsx index ebcb960407f..c7afcb3b38a 100644 --- a/src/pages/MyMove/MovingInfo.jsx +++ b/src/pages/MyMove/MovingInfo.jsx @@ -84,8 +84,12 @@ export class MovingInfo extends Component { +

+ If you are moving to an administratively restricted HHG weight location this amount may be less. You + will have to pay for any excess weight above this amount. +

You will have to pay for any excess weight above this allowance, so work hard to make sure you stay within your weight limit. From 0c93aa57967f596fc4600ee1290473c55f4f56bf Mon Sep 17 00:00:00 2001 From: deandreJones Date: Tue, 14 Jan 2025 10:49:39 -0600 Subject: [PATCH 08/22] pointing --- ...250107184554_add_weight_restriction.up.sql | 2 +- pkg/factory/entitlement_factory.go | 4 +-- .../internal/payloads/model_to_payload.go | 5 ++-- .../primeapi/payloads/model_to_payload.go | 4 +-- .../primeapiv2/payloads/model_to_payload.go | 4 +-- .../primeapiv3/payloads/model_to_payload.go | 2 +- .../internal/payloads/model_to_payload.go | 2 +- pkg/models/ghc_entitlements.go | 4 +-- pkg/services/order/order_updater.go | 13 +++++---- pkg/testdatagen/make_entitlement.go | 2 ++ .../AllowancesDetailForm.jsx | 28 +++++++++++++++++-- 11 files changed, 49 insertions(+), 21 deletions(-) diff --git a/migrations/app/schema/20250107184554_add_weight_restriction.up.sql b/migrations/app/schema/20250107184554_add_weight_restriction.up.sql index 6d2a0ce08f6..13166af20ee 100644 --- a/migrations/app/schema/20250107184554_add_weight_restriction.up.sql +++ b/migrations/app/schema/20250107184554_add_weight_restriction.up.sql @@ -1,4 +1,4 @@ ALTER TABLE entitlements -ADD column weight_restriction int; +ADD column IF NOT EXISTS weight_restriction int; COMMENT ON COLUMN entitlements.weight_restriction IS 'The weight restricted on the move to a particular location'; diff --git a/pkg/factory/entitlement_factory.go b/pkg/factory/entitlement_factory.go index 2255527c223..02b2983c45d 100644 --- a/pkg/factory/entitlement_factory.go +++ b/pkg/factory/entitlement_factory.go @@ -60,8 +60,8 @@ func BuildEntitlement(db *pop.Connection, customs []Customization, traits []Trai ProGearWeightSpouse: proGearWeightSpouse, RequiredMedicalEquipmentWeight: rmeWeight, OrganizationalClothingAndIndividualEquipment: ocie, - AdminRestrictedWeightLocation: *setBoolPtr(&cEntitlement.AdminRestrictedWeightLocation, false), - WeightRestriction: weightRestriction, + AdminRestrictedWeightLocation: setBoolPtr(cEntitlement.AdminRestrictedWeightLocation, false), + WeightRestriction: &weightRestriction, } // Set default calculated values entitlement.SetWeightAllotment(string(*grade), ordersType) diff --git a/pkg/handlers/ghcapi/internal/payloads/model_to_payload.go b/pkg/handlers/ghcapi/internal/payloads/model_to_payload.go index ba1facad756..1cc560d69ba 100644 --- a/pkg/handlers/ghcapi/internal/payloads/model_to_payload.go +++ b/pkg/handlers/ghcapi/internal/payloads/model_to_payload.go @@ -720,7 +720,7 @@ func Entitlement(entitlement *models.Entitlement) *ghcmessages.Entitlements { adminRestrictedWeightLocation := entitlement.AdminRestrictedWeightLocation var weightRestriction int64 - wr := int64(entitlement.WeightRestriction) + wr := int64(*entitlement.WeightRestriction) weightRestriction = wr var accompaniedTour *bool @@ -757,10 +757,11 @@ func Entitlement(entitlement *models.Entitlement) *ghcmessages.Entitlements { UnaccompaniedBaggageAllowance: ubAllowance, OrganizationalClothingAndIndividualEquipment: entitlement.OrganizationalClothingAndIndividualEquipment, GunSafe: gunSafe, - AdminRestrictedWeightLocation: adminRestrictedWeightLocation, + AdminRestrictedWeightLocation: *adminRestrictedWeightLocation, WeightRestriction: weightRestriction, ETag: etag.GenerateEtag(entitlement.UpdatedAt), } + } // DutyLocation payload func DutyLocation(dutyLocation *models.DutyLocation) *ghcmessages.DutyLocation { if dutyLocation == nil { diff --git a/pkg/handlers/primeapi/payloads/model_to_payload.go b/pkg/handlers/primeapi/payloads/model_to_payload.go index 29d5aed536a..a708a4a5048 100644 --- a/pkg/handlers/primeapi/payloads/model_to_payload.go +++ b/pkg/handlers/primeapi/payloads/model_to_payload.go @@ -217,7 +217,7 @@ func Entitlement(entitlement *models.Entitlement) *primemessages.Entitlements { UnaccompaniedBaggageAllowance: &ubAllowance, DependentsAuthorized: entitlement.DependentsAuthorized, GunSafe: entitlement.GunSafe, - AdminRestrictedWeightLocation: entitlement.AdminRestrictedWeightLocation, + AdminRestrictedWeightLocation: *entitlement.AdminRestrictedWeightLocation, NonTemporaryStorage: entitlement.NonTemporaryStorage, PrivatelyOwnedVehicle: entitlement.PrivatelyOwnedVehicle, ProGearWeight: int64(entitlement.ProGearWeight), @@ -227,7 +227,7 @@ func Entitlement(entitlement *models.Entitlement) *primemessages.Entitlements { StorageInTransit: sit, TotalDependents: totalDependents, TotalWeight: totalWeight, - WeightRestriction: int64(entitlement.WeightRestriction), + WeightRestriction: int64(*entitlement.WeightRestriction), ETag: etag.GenerateEtag(entitlement.UpdatedAt), } } diff --git a/pkg/handlers/primeapiv2/payloads/model_to_payload.go b/pkg/handlers/primeapiv2/payloads/model_to_payload.go index 44183723ac2..08859d8083a 100644 --- a/pkg/handlers/primeapiv2/payloads/model_to_payload.go +++ b/pkg/handlers/primeapiv2/payloads/model_to_payload.go @@ -162,7 +162,7 @@ func Entitlement(entitlement *models.Entitlement) *primev2messages.Entitlements UnaccompaniedBaggageAllowance: &ubAllowance, DependentsAuthorized: entitlement.DependentsAuthorized, GunSafe: entitlement.GunSafe, - AdminRestrictedWeightLocation: entitlement.AdminRestrictedWeightLocation, + AdminRestrictedWeightLocation: *entitlement.AdminRestrictedWeightLocation, NonTemporaryStorage: entitlement.NonTemporaryStorage, PrivatelyOwnedVehicle: entitlement.PrivatelyOwnedVehicle, ProGearWeight: int64(entitlement.ProGearWeight), @@ -172,7 +172,7 @@ func Entitlement(entitlement *models.Entitlement) *primev2messages.Entitlements StorageInTransit: sit, TotalDependents: totalDependents, TotalWeight: totalWeight, - WeightRestriction: int64(entitlement.WeightRestriction), + WeightRestriction: int64(*entitlement.WeightRestriction), ETag: etag.GenerateEtag(entitlement.UpdatedAt), } } diff --git a/pkg/handlers/primeapiv3/payloads/model_to_payload.go b/pkg/handlers/primeapiv3/payloads/model_to_payload.go index 9e854f11c09..9c54a1d4377 100644 --- a/pkg/handlers/primeapiv3/payloads/model_to_payload.go +++ b/pkg/handlers/primeapiv3/payloads/model_to_payload.go @@ -198,7 +198,7 @@ func Entitlement(entitlement *models.Entitlement) *primev3messages.Entitlements StorageInTransit: sit, TotalDependents: totalDependents, TotalWeight: totalWeight, - WeightRestriction: int64(entitlement.WeightRestriction), + WeightRestriction: int64(*entitlement.WeightRestriction), ETag: etag.GenerateEtag(entitlement.UpdatedAt), } } diff --git a/pkg/handlers/supportapi/internal/payloads/model_to_payload.go b/pkg/handlers/supportapi/internal/payloads/model_to_payload.go index 55d81ac65a8..e1e3c9f18a8 100644 --- a/pkg/handlers/supportapi/internal/payloads/model_to_payload.go +++ b/pkg/handlers/supportapi/internal/payloads/model_to_payload.go @@ -166,7 +166,7 @@ func Entitlement(entitlement *models.Entitlement) *supportmessages.Entitlement { StorageInTransit: sit, TotalDependents: totalDependents, TotalWeight: totalWeight, - WeightRestriction: int64(entitlement.WeightRestriction), + WeightRestriction: int64(*entitlement.WeightRestriction), ETag: etag.GenerateEtag(entitlement.UpdatedAt), } } diff --git a/pkg/models/ghc_entitlements.go b/pkg/models/ghc_entitlements.go index f8e6a383bf6..1bec7547de0 100644 --- a/pkg/models/ghc_entitlements.go +++ b/pkg/models/ghc_entitlements.go @@ -31,8 +31,8 @@ type Entitlement struct { OrganizationalClothingAndIndividualEquipment bool `db:"organizational_clothing_and_individual_equipment"` ProGearWeight int `db:"pro_gear_weight"` ProGearWeightSpouse int `db:"pro_gear_weight_spouse"` - AdminRestrictedWeightLocation bool `db:"admin_restricted_weight_location"` - WeightRestriction int `db:"weight_restriction"` + AdminRestrictedWeightLocation *bool `db:"admin_restricted_weight_location"` + WeightRestriction *int `db:"weight_restriction"` CreatedAt time.Time `db:"created_at"` UpdatedAt time.Time `db:"updated_at"` } diff --git a/pkg/services/order/order_updater.go b/pkg/services/order/order_updater.go index a8692b14653..6075058b43f 100644 --- a/pkg/services/order/order_updater.go +++ b/pkg/services/order/order_updater.go @@ -457,10 +457,11 @@ func allowanceFromTOOPayload(appCtx appcontext.AppContext, existingOrder models. } if payload.AdminRestrictedWeightLocation != nil { - order.Entitlement.AdminRestrictedWeightLocation = *payload.AdminRestrictedWeightLocation + order.Entitlement.AdminRestrictedWeightLocation = payload.AdminRestrictedWeightLocation } - order.Entitlement.WeightRestriction = int(payload.WeightRestriction) + weightRestriction := int(payload.WeightRestriction) + order.Entitlement.WeightRestriction = &weightRestriction if payload.AccompaniedTour != nil { order.Entitlement.AccompaniedTour = payload.AccompaniedTour @@ -563,10 +564,13 @@ func allowanceFromCounselingPayload(appCtx appcontext.AppContext, existingOrder } if payload.AdminRestrictedWeightLocation != nil { - order.Entitlement.AdminRestrictedWeightLocation = *payload.AdminRestrictedWeightLocation + order.Entitlement.AdminRestrictedWeightLocation = payload.AdminRestrictedWeightLocation } - order.Entitlement.WeightRestriction = int(*payload.WeightRestriction) + if payload.WeightRestriction != nil { + weightRestriction := int(*payload.WeightRestriction) + order.Entitlement.WeightRestriction = &weightRestriction + } if payload.AccompaniedTour != nil { order.Entitlement.AccompaniedTour = payload.AccompaniedTour @@ -607,7 +611,6 @@ func allowanceFromCounselingPayload(appCtx appcontext.AppContext, existingOrder } return order - } func (f *orderUpdater) saveDocumentForAmendedOrder(appCtx appcontext.AppContext, doc *models.Document) (*models.Document, error) { var docID uuid.UUID diff --git a/pkg/testdatagen/make_entitlement.go b/pkg/testdatagen/make_entitlement.go index e71bf02cec1..9d9c787df4d 100644 --- a/pkg/testdatagen/make_entitlement.go +++ b/pkg/testdatagen/make_entitlement.go @@ -17,6 +17,7 @@ func makeEntitlement(db *pop.Connection, assertions Assertions) models.Entitleme ordersType := assertions.Order.OrdersType proGearWeight := 2000 proGearWeightSpouse := 500 + falsePtr := false if grade == nil || *grade == "" { grade = models.ServiceMemberGradeE1.Pointer() @@ -32,6 +33,7 @@ func makeEntitlement(db *pop.Connection, assertions Assertions) models.Entitleme ProGearWeightSpouse: proGearWeightSpouse, RequiredMedicalEquipmentWeight: rmeWeight, OrganizationalClothingAndIndividualEquipment: ocie, + AdminRestrictedWeightLocation: &falsePtr, } entitlement.SetWeightAllotment(string(*grade), ordersType) dBAuthorizedWeight := entitlement.AuthorizedWeight() diff --git a/src/components/Office/AllowancesDetailForm/AllowancesDetailForm.jsx b/src/components/Office/AllowancesDetailForm/AllowancesDetailForm.jsx index 23c99ba8862..8e5531ba5bc 100644 --- a/src/components/Office/AllowancesDetailForm/AllowancesDetailForm.jsx +++ b/src/components/Office/AllowancesDetailForm/AllowancesDetailForm.jsx @@ -35,6 +35,29 @@ const AllowancesDetailForm = ({ header, entitlements, branchOptions, formIsDisab checkUBFeatureFlag(); }, []); + useEffect(() => { + if (!isAdminWeightLocationChecked) { + // Find the weight restriction input and reset its value to 0 + const weightRestrictionInput = document.getElementById('weightRestrictionId'); + if (weightRestrictionInput) { + weightRestrictionInput.value = '0'; + } + } + }, [isAdminWeightLocationChecked]); + + const handleAdminWeightLocationChange = (e) => { + setIsAdminWeightLocationChecked(e.target.checked); + if (!e.target.checked) { + const weightRestrictionInput = document.querySelector('input[name="weightRestriction"]'); + if (weightRestrictionInput) { + weightRestrictionInput.value = '0'; + // Trigger change event to ensure form state is updated + const event = new Event('input', { bubbles: true }); + weightRestrictionInput.dispatchEvent(event); + } + } + }; + return (

{header &&

{header}

} @@ -172,9 +195,9 @@ const AllowancesDetailForm = ({ header, entitlements, branchOptions, formIsDisab data-testid="adminWeightLocation" id="adminWeightLocation" name="adminRestrictedWeightLocation" - label="Admin Restricted Weight Location" + label="Admin restricted weight location" isDisabled={formIsDisabled} - onChange={(e) => setIsAdminWeightLocationChecked(e.target.checked)} + onChange={handleAdminWeightLocationChange} />
{isAdminWeightLocationChecked && ( @@ -209,7 +232,6 @@ const AllowancesDetailForm = ({ header, entitlements, branchOptions, formIsDisab ); }; - AllowancesDetailForm.propTypes = { entitlements: EntitlementShape.isRequired, branchOptions: DropdownArrayOf.isRequired, From 47d484691d009bbf3f7fa6570ae218d41df8b192 Mon Sep 17 00:00:00 2001 From: deandreJones Date: Tue, 14 Jan 2025 11:08:26 -0600 Subject: [PATCH 09/22] cupid shuffle --- .../Office/AllowancesDetailForm/AllowancesDetailForm.jsx | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/components/Office/AllowancesDetailForm/AllowancesDetailForm.jsx b/src/components/Office/AllowancesDetailForm/AllowancesDetailForm.jsx index 8e5531ba5bc..739a5ea9d63 100644 --- a/src/components/Office/AllowancesDetailForm/AllowancesDetailForm.jsx +++ b/src/components/Office/AllowancesDetailForm/AllowancesDetailForm.jsx @@ -172,6 +172,10 @@ const AllowancesDetailForm = ({ header, entitlements, branchOptions, formIsDisab lazy={false} // immediate masking evaluation isDisabled={formIsDisabled} /> +
+
Standard Weight allowance
+
{formatWeight(entitlements.totalWeight)}
+
)} - -
-
Standard Weight allowance
-
{formatWeight(entitlements.totalWeight)}
-
Date: Fri, 24 Jan 2025 21:54:06 +0000 Subject: [PATCH 10/22] merge 21934 --- migrations/app/migrations_manifest.txt | 2 -- ...0106153750_admin_weight_restriction.up.sql | 2 -- ...min_weight_restriction_convert_bool.up.sql | 4 --- pkg/gen/ghcapi/embedded_spec.go | 28 ------------------- .../counseling_update_allowance_payload.go | 3 -- pkg/gen/ghcmessages/entitlements.go | 4 --- .../ghcmessages/update_allowance_payload.go | 3 -- pkg/gen/primeapi/embedded_spec.go | 8 ------ pkg/gen/primemessages/entitlements.go | 4 --- pkg/gen/primev2api/embedded_spec.go | 8 ------ pkg/gen/primev2messages/entitlements.go | 4 --- pkg/gen/primev3api/embedded_spec.go | 8 ------ pkg/gen/primev3messages/entitlements.go | 4 --- pkg/gen/supportapi/embedded_spec.go | 8 ------ pkg/gen/supportmessages/entitlement.go | 4 --- .../internal/payloads/model_to_payload.go | 8 ++---- .../payloads/model_to_payload_test.go | 3 ++ pkg/handlers/ghcapi/orders_test.go | 1 - .../primeapi/payloads/model_to_payload.go | 1 - .../payloads/model_to_payload_test.go | 2 ++ .../primeapiv2/payloads/model_to_payload.go | 14 ++++++---- .../payloads/model_to_payload_test.go | 2 ++ .../primeapiv3/payloads/model_to_payload.go | 13 ++++++--- .../payloads/model_to_payload_test.go | 2 ++ pkg/models/ghc_entitlements.go | 1 - pkg/notifications/move_approved.go | 26 ++++++++--------- pkg/services/order/order_updater.go | 8 ------ pkg/services/order/order_updater_test.go | 13 ++------- .../AllowancesDetailForm.jsx | 7 ++--- .../Office/DefinitionLists/AllowancesList.jsx | 7 +++-- .../DefinitionLists/AllowancesList.test.jsx | 6 ++++ .../Office/MoveAllowances/MoveAllowances.jsx | 5 +--- src/pages/Office/MoveDetails/MoveDetails.jsx | 1 - .../ServicesCounselingMoveAllowances.jsx | 5 +--- .../ServicesCounselingMoveDetails.jsx | 1 - .../definitions/prime/Entitlements.yaml | 3 -- swagger-def/ghc.yaml | 11 -------- swagger-def/support.yaml | 3 -- swagger/ghc.yaml | 15 ---------- swagger/prime.yaml | 3 -- swagger/prime_v2.yaml | 3 -- swagger/prime_v3.yaml | 3 -- swagger/support.yaml | 3 -- 43 files changed, 60 insertions(+), 204 deletions(-) delete mode 100644 migrations/app/schema/20250106153750_admin_weight_restriction.up.sql delete mode 100644 migrations/app/schema/20250106190758_admin_weight_restriction_convert_bool.up.sql diff --git a/migrations/app/migrations_manifest.txt b/migrations/app/migrations_manifest.txt index 71123dd5ad9..cdcffa92e7b 100644 --- a/migrations/app/migrations_manifest.txt +++ b/migrations/app/migrations_manifest.txt @@ -1070,8 +1070,6 @@ 20241230190638_remove_AK_zips_from_zip3.up.sql 20241230190647_add_missing_AK_zips_to_zip3_distances.up.sql 20250103180420_update_pricing_proc_to_use_local_price_variable.up.sql -20250106153750_admin_weight_restriction.up.sql -20250106190758_admin_weight_restriction_convert_bool.up.sql 20250107184554_add_weight_restriction.up.sql 20250110001339_update_nts_release_enum_name.up.sql 20250110214012_homesafeconnect_cert.up.sql diff --git a/migrations/app/schema/20250106153750_admin_weight_restriction.up.sql b/migrations/app/schema/20250106153750_admin_weight_restriction.up.sql deleted file mode 100644 index d5f248d8237..00000000000 --- a/migrations/app/schema/20250106153750_admin_weight_restriction.up.sql +++ /dev/null @@ -1,2 +0,0 @@ -ALTER TABLE entitlements -ADD COLUMN IF NOT EXISTS admin_restricted_weight_location BOOLEAN; diff --git a/migrations/app/schema/20250106190758_admin_weight_restriction_convert_bool.up.sql b/migrations/app/schema/20250106190758_admin_weight_restriction_convert_bool.up.sql deleted file mode 100644 index f8f923c0ae7..00000000000 --- a/migrations/app/schema/20250106190758_admin_weight_restriction_convert_bool.up.sql +++ /dev/null @@ -1,4 +0,0 @@ -ALTER TABLE entitlements - ALTER COLUMN admin_restricted_weight_location TYPE boolean USING (COALESCE(admin_restricted_weight_location, false)), - ALTER COLUMN admin_restricted_weight_location SET DEFAULT false, - ALTER COLUMN admin_restricted_weight_location SET NOT NULL; \ No newline at end of file diff --git a/pkg/gen/ghcapi/embedded_spec.go b/pkg/gen/ghcapi/embedded_spec.go index a07887043cc..899c86f9274 100644 --- a/pkg/gen/ghcapi/embedded_spec.go +++ b/pkg/gen/ghcapi/embedded_spec.go @@ -6999,11 +6999,6 @@ func init() { "x-nullable": true, "example": true }, - "adminRestrictedWeightLocation": { - "description": "Indicates if the customer is restricted to a specific location for their admin restricted weight.", - "type": "boolean", - "x-nullable": true - }, "agency": { "$ref": "#/definitions/Affiliation" }, @@ -8191,10 +8186,6 @@ func init() { "x-nullable": true, "example": true }, - "adminRestrictedWeightLocation": { - "type": "boolean", - "example": false - }, "authorizedWeight": { "type": "integer", "x-formatting": "weight", @@ -14083,11 +14074,6 @@ func init() { "x-nullable": true, "example": true }, - "adminRestrictedWeightLocation": { - "description": "Indicates if the customer is restricted to a specific location for their admin restricted weight.", - "type": "boolean", - "x-nullable": true - }, "agency": { "$ref": "#/definitions/Affiliation" }, @@ -24067,11 +24053,6 @@ func init() { "x-nullable": true, "example": true }, - "adminRestrictedWeightLocation": { - "description": "Indicates if the customer is restricted to a specific location for their admin restricted weight.", - "type": "boolean", - "x-nullable": true - }, "agency": { "$ref": "#/definitions/Affiliation" }, @@ -25263,10 +25244,6 @@ func init() { "x-nullable": true, "example": true }, - "adminRestrictedWeightLocation": { - "type": "boolean", - "example": false - }, "authorizedWeight": { "type": "integer", "x-formatting": "weight", @@ -31283,11 +31260,6 @@ func init() { "x-nullable": true, "example": true }, - "adminRestrictedWeightLocation": { - "description": "Indicates if the customer is restricted to a specific location for their admin restricted weight.", - "type": "boolean", - "x-nullable": true - }, "agency": { "$ref": "#/definitions/Affiliation" }, diff --git a/pkg/gen/ghcmessages/counseling_update_allowance_payload.go b/pkg/gen/ghcmessages/counseling_update_allowance_payload.go index 19ef562126b..805a206b000 100644 --- a/pkg/gen/ghcmessages/counseling_update_allowance_payload.go +++ b/pkg/gen/ghcmessages/counseling_update_allowance_payload.go @@ -23,9 +23,6 @@ type CounselingUpdateAllowancePayload struct { // Example: true AccompaniedTour *bool `json:"accompaniedTour,omitempty"` - // Indicates if the customer is restricted to a specific location for their admin restricted weight. - AdminRestrictedWeightLocation *bool `json:"adminRestrictedWeightLocation,omitempty"` - // agency Agency *Affiliation `json:"agency,omitempty"` diff --git a/pkg/gen/ghcmessages/entitlements.go b/pkg/gen/ghcmessages/entitlements.go index 6c8ccba8ac9..e856534cc33 100644 --- a/pkg/gen/ghcmessages/entitlements.go +++ b/pkg/gen/ghcmessages/entitlements.go @@ -23,10 +23,6 @@ type Entitlements struct { // Example: true AccompaniedTour *bool `json:"accompaniedTour,omitempty"` - // admin restricted weight location - // Example: false - AdminRestrictedWeightLocation bool `json:"adminRestrictedWeightLocation,omitempty"` - // authorized weight // Example: 2000 AuthorizedWeight *int64 `json:"authorizedWeight,omitempty"` diff --git a/pkg/gen/ghcmessages/update_allowance_payload.go b/pkg/gen/ghcmessages/update_allowance_payload.go index 7827dd166a8..c0aa957934a 100644 --- a/pkg/gen/ghcmessages/update_allowance_payload.go +++ b/pkg/gen/ghcmessages/update_allowance_payload.go @@ -23,9 +23,6 @@ type UpdateAllowancePayload struct { // Example: true AccompaniedTour *bool `json:"accompaniedTour,omitempty"` - // Indicates if the customer is restricted to a specific location for their admin restricted weight. - AdminRestrictedWeightLocation *bool `json:"adminRestrictedWeightLocation,omitempty"` - // agency Agency *Affiliation `json:"agency,omitempty"` diff --git a/pkg/gen/primeapi/embedded_spec.go b/pkg/gen/primeapi/embedded_spec.go index 0d49f7de7ad..db02db6e057 100644 --- a/pkg/gen/primeapi/embedded_spec.go +++ b/pkg/gen/primeapi/embedded_spec.go @@ -1735,10 +1735,6 @@ func init() { "Entitlements": { "type": "object", "properties": { - "adminRestrictedWeightLocation": { - "type": "boolean", - "example": false - }, "authorizedWeight": { "type": "integer", "x-formatting": "weight", @@ -6694,10 +6690,6 @@ func init() { "Entitlements": { "type": "object", "properties": { - "adminRestrictedWeightLocation": { - "type": "boolean", - "example": false - }, "authorizedWeight": { "type": "integer", "x-formatting": "weight", diff --git a/pkg/gen/primemessages/entitlements.go b/pkg/gen/primemessages/entitlements.go index c34f9074441..65870bfa8e6 100644 --- a/pkg/gen/primemessages/entitlements.go +++ b/pkg/gen/primemessages/entitlements.go @@ -19,10 +19,6 @@ import ( // swagger:model Entitlements type Entitlements struct { - // admin restricted weight location - // Example: false - AdminRestrictedWeightLocation bool `json:"adminRestrictedWeightLocation,omitempty"` - // authorized weight // Example: 2000 AuthorizedWeight *int64 `json:"authorizedWeight,omitempty"` diff --git a/pkg/gen/primev2api/embedded_spec.go b/pkg/gen/primev2api/embedded_spec.go index 875a19b3b00..4d8e6fe6aa9 100644 --- a/pkg/gen/primev2api/embedded_spec.go +++ b/pkg/gen/primev2api/embedded_spec.go @@ -971,10 +971,6 @@ func init() { "Entitlements": { "type": "object", "properties": { - "adminRestrictedWeightLocation": { - "type": "boolean", - "example": false - }, "authorizedWeight": { "type": "integer", "x-formatting": "weight", @@ -4617,10 +4613,6 @@ func init() { "Entitlements": { "type": "object", "properties": { - "adminRestrictedWeightLocation": { - "type": "boolean", - "example": false - }, "authorizedWeight": { "type": "integer", "x-formatting": "weight", diff --git a/pkg/gen/primev2messages/entitlements.go b/pkg/gen/primev2messages/entitlements.go index 8cf36f2525e..58280696ab1 100644 --- a/pkg/gen/primev2messages/entitlements.go +++ b/pkg/gen/primev2messages/entitlements.go @@ -19,10 +19,6 @@ import ( // swagger:model Entitlements type Entitlements struct { - // admin restricted weight location - // Example: false - AdminRestrictedWeightLocation bool `json:"adminRestrictedWeightLocation,omitempty"` - // authorized weight // Example: 2000 AuthorizedWeight *int64 `json:"authorizedWeight,omitempty"` diff --git a/pkg/gen/primev3api/embedded_spec.go b/pkg/gen/primev3api/embedded_spec.go index 9ff0927a459..391eb94ffea 100644 --- a/pkg/gen/primev3api/embedded_spec.go +++ b/pkg/gen/primev3api/embedded_spec.go @@ -1133,10 +1133,6 @@ func init() { "Entitlements": { "type": "object", "properties": { - "adminRestrictedWeightLocation": { - "type": "boolean", - "example": false - }, "authorizedWeight": { "type": "integer", "x-formatting": "weight", @@ -5489,10 +5485,6 @@ func init() { "Entitlements": { "type": "object", "properties": { - "adminRestrictedWeightLocation": { - "type": "boolean", - "example": false - }, "authorizedWeight": { "type": "integer", "x-formatting": "weight", diff --git a/pkg/gen/primev3messages/entitlements.go b/pkg/gen/primev3messages/entitlements.go index 3e19bc830ef..2ef73ccfbf5 100644 --- a/pkg/gen/primev3messages/entitlements.go +++ b/pkg/gen/primev3messages/entitlements.go @@ -19,10 +19,6 @@ import ( // swagger:model Entitlements type Entitlements struct { - // admin restricted weight location - // Example: false - AdminRestrictedWeightLocation bool `json:"adminRestrictedWeightLocation,omitempty"` - // authorized weight // Example: 2000 AuthorizedWeight *int64 `json:"authorizedWeight,omitempty"` diff --git a/pkg/gen/supportapi/embedded_spec.go b/pkg/gen/supportapi/embedded_spec.go index 0b50f60c92a..a742b5fdc95 100644 --- a/pkg/gen/supportapi/embedded_spec.go +++ b/pkg/gen/supportapi/embedded_spec.go @@ -1110,10 +1110,6 @@ func init() { "Entitlement": { "type": "object", "properties": { - "adminRestrictedWeightLocation": { - "type": "boolean", - "example": false - }, "authorizedWeight": { "type": "integer", "x-formatting": "weight", @@ -3986,10 +3982,6 @@ func init() { "Entitlement": { "type": "object", "properties": { - "adminRestrictedWeightLocation": { - "type": "boolean", - "example": false - }, "authorizedWeight": { "type": "integer", "x-formatting": "weight", diff --git a/pkg/gen/supportmessages/entitlement.go b/pkg/gen/supportmessages/entitlement.go index 25fcd62293e..f1fd0f5f8c9 100644 --- a/pkg/gen/supportmessages/entitlement.go +++ b/pkg/gen/supportmessages/entitlement.go @@ -19,10 +19,6 @@ import ( // swagger:model Entitlement type Entitlement struct { - // admin restricted weight location - // Example: false - AdminRestrictedWeightLocation bool `json:"adminRestrictedWeightLocation,omitempty"` - // authorized weight // Example: 2000 AuthorizedWeight *int64 `json:"authorizedWeight,omitempty"` diff --git a/pkg/handlers/ghcapi/internal/payloads/model_to_payload.go b/pkg/handlers/ghcapi/internal/payloads/model_to_payload.go index 0de14bba6ab..7cfe9108a96 100644 --- a/pkg/handlers/ghcapi/internal/payloads/model_to_payload.go +++ b/pkg/handlers/ghcapi/internal/payloads/model_to_payload.go @@ -716,7 +716,6 @@ func Entitlement(entitlement *models.Entitlement) *ghcmessages.Entitlements { } requiredMedicalEquipmentWeight := int64(entitlement.RequiredMedicalEquipmentWeight) gunSafe := entitlement.GunSafe - adminRestrictedWeightLocation := entitlement.AdminRestrictedWeightLocation var accompaniedTour *bool if entitlement.AccompaniedTour != nil { accompaniedTour = models.BoolPointer(*entitlement.AccompaniedTour) @@ -755,10 +754,9 @@ func Entitlement(entitlement *models.Entitlement) *ghcmessages.Entitlements { AccompaniedTour: accompaniedTour, UnaccompaniedBaggageAllowance: ubAllowance, OrganizationalClothingAndIndividualEquipment: entitlement.OrganizationalClothingAndIndividualEquipment, - GunSafe: gunSafe, - AdminRestrictedWeightLocation: adminRestrictedWeightLocation, - WeightRestriction: weightRestriction, - ETag: etag.GenerateEtag(entitlement.UpdatedAt), + GunSafe: gunSafe, + WeightRestriction: weightRestriction, + ETag: etag.GenerateEtag(entitlement.UpdatedAt), } } // DutyLocation payload diff --git a/pkg/handlers/ghcapi/internal/payloads/model_to_payload_test.go b/pkg/handlers/ghcapi/internal/payloads/model_to_payload_test.go index 7e201ca5212..16641b76a6b 100644 --- a/pkg/handlers/ghcapi/internal/payloads/model_to_payload_test.go +++ b/pkg/handlers/ghcapi/internal/payloads/model_to_payload_test.go @@ -641,6 +641,7 @@ func (suite *PayloadsSuite) TestEntitlement() { dependentsTwelveAndOver := 1 authorizedWeight := 8000 ubAllowance := 300 + weightRestriction := 1000 entitlement := &models.Entitlement{ ID: entitlementID, @@ -658,6 +659,7 @@ func (suite *PayloadsSuite) TestEntitlement() { DependentsTwelveAndOver: &dependentsTwelveAndOver, UpdatedAt: time.Now(), UBAllowance: &ubAllowance, + WeightRestriction: &weightRestriction, } returnedEntitlement := Entitlement(entitlement) @@ -679,6 +681,7 @@ func (suite *PayloadsSuite) TestEntitlement() { suite.Equal(models.BoolPointer(accompaniedTour), returnedEntitlement.AccompaniedTour) suite.Equal(dependentsUnderTwelve, int(*returnedEntitlement.DependentsUnderTwelve)) suite.Equal(dependentsTwelveAndOver, int(*returnedEntitlement.DependentsTwelveAndOver)) + suite.Equal(weightRestriction, int(*returnedEntitlement.WeightRestriction)) } func (suite *PayloadsSuite) TestCreateCustomer() { diff --git a/pkg/handlers/ghcapi/orders_test.go b/pkg/handlers/ghcapi/orders_test.go index d0cc3a2cc5e..e84d02e2e1c 100644 --- a/pkg/handlers/ghcapi/orders_test.go +++ b/pkg/handlers/ghcapi/orders_test.go @@ -1480,7 +1480,6 @@ func (suite *HandlerSuite) TestCounselingUpdateAllowanceHandler() { ProGearWeightSpouse: proGearWeightSpouse, RequiredMedicalEquipmentWeight: rmeWeight, StorageInTransit: models.Int64Pointer(80), - AdminRestrictedWeightLocation: models.BoolPointer(false), WeightRestriction: models.Int64Pointer(0), } diff --git a/pkg/handlers/primeapi/payloads/model_to_payload.go b/pkg/handlers/primeapi/payloads/model_to_payload.go index 945af140137..9f7037617f6 100644 --- a/pkg/handlers/primeapi/payloads/model_to_payload.go +++ b/pkg/handlers/primeapi/payloads/model_to_payload.go @@ -249,7 +249,6 @@ func Entitlement(entitlement *models.Entitlement) *primemessages.Entitlements { UnaccompaniedBaggageAllowance: &ubAllowance, DependentsAuthorized: entitlement.DependentsAuthorized, GunSafe: entitlement.GunSafe, - AdminRestrictedWeightLocation: entitlement.AdminRestrictedWeightLocation, NonTemporaryStorage: entitlement.NonTemporaryStorage, PrivatelyOwnedVehicle: entitlement.PrivatelyOwnedVehicle, ProGearWeight: int64(entitlement.ProGearWeight), diff --git a/pkg/handlers/primeapi/payloads/model_to_payload_test.go b/pkg/handlers/primeapi/payloads/model_to_payload_test.go index a643a414699..6914cb1a46e 100644 --- a/pkg/handlers/primeapi/payloads/model_to_payload_test.go +++ b/pkg/handlers/primeapi/payloads/model_to_payload_test.go @@ -338,6 +338,7 @@ func (suite *PayloadsSuite) TestEntitlement() { ProGearWeightSpouse: 750, CreatedAt: time.Now(), UpdatedAt: time.Now(), + WeightRestriction: models.IntPointer(1000), } // TotalWeight needs to read from the internal weightAllotment, in this case 7000 lbs w/o dependents and @@ -360,6 +361,7 @@ func (suite *PayloadsSuite) TestEntitlement() { suite.Equal(true, payload.OrganizationalClothingAndIndividualEquipment) suite.Equal(int64(1000), payload.ProGearWeight) suite.Equal(int64(750), payload.ProGearWeightSpouse) + suite.Equal(int64(1000), *payload.WeightRestriction) suite.NotEmpty(payload.ETag) suite.Equal(etag.GenerateEtag(entitlement.UpdatedAt), payload.ETag) }) diff --git a/pkg/handlers/primeapiv2/payloads/model_to_payload.go b/pkg/handlers/primeapiv2/payloads/model_to_payload.go index dbd0e9792df..b4a5d2e4676 100644 --- a/pkg/handlers/primeapiv2/payloads/model_to_payload.go +++ b/pkg/handlers/primeapiv2/payloads/model_to_payload.go @@ -170,23 +170,27 @@ func Entitlement(entitlement *models.Entitlement) *primev2messages.Entitlements if entitlement.UBAllowance != nil { ubAllowance = int64(*entitlement.UBAllowance) } + var weightRestriction int64 + if entitlement.WeightRestriction != nil { + weightRestriction = int64(*entitlement.WeightRestriction) + } return &primev2messages.Entitlements{ ID: strfmt.UUID(entitlement.ID.String()), AuthorizedWeight: authorizedWeight, UnaccompaniedBaggageAllowance: &ubAllowance, DependentsAuthorized: entitlement.DependentsAuthorized, GunSafe: entitlement.GunSafe, - AdminRestrictedWeightLocation: entitlement.AdminRestrictedWeightLocation, NonTemporaryStorage: entitlement.NonTemporaryStorage, PrivatelyOwnedVehicle: entitlement.PrivatelyOwnedVehicle, ProGearWeight: int64(entitlement.ProGearWeight), ProGearWeightSpouse: int64(entitlement.ProGearWeightSpouse), RequiredMedicalEquipmentWeight: int64(entitlement.RequiredMedicalEquipmentWeight), OrganizationalClothingAndIndividualEquipment: entitlement.OrganizationalClothingAndIndividualEquipment, - StorageInTransit: sit, - TotalDependents: totalDependents, - TotalWeight: totalWeight, - ETag: etag.GenerateEtag(entitlement.UpdatedAt), + StorageInTransit: sit, + TotalDependents: totalDependents, + TotalWeight: totalWeight, + WeightRestriction: &weightRestriction, + ETag: etag.GenerateEtag(entitlement.UpdatedAt), } } diff --git a/pkg/handlers/primeapiv2/payloads/model_to_payload_test.go b/pkg/handlers/primeapiv2/payloads/model_to_payload_test.go index ed333f6fd95..6f7b5ee3ec7 100644 --- a/pkg/handlers/primeapiv2/payloads/model_to_payload_test.go +++ b/pkg/handlers/primeapiv2/payloads/model_to_payload_test.go @@ -289,6 +289,7 @@ func (suite *PayloadsSuite) TestEntitlement() { ProGearWeightSpouse: 0, CreatedAt: time.Now(), UpdatedAt: time.Now(), + WeightRestriction: models.IntPointer(1000), } payload := Entitlement(&entitlement) @@ -311,6 +312,7 @@ func (suite *PayloadsSuite) TestEntitlement() { suite.Equal(int64(0), payload.TotalDependents) suite.Equal(int64(0), payload.TotalWeight) suite.Equal(int64(0), *payload.UnaccompaniedBaggageAllowance) + suite.Equal(int64(1000), *payload.WeightRestriction) }) suite.Run("Success - Returns the entitlement payload with all optional fields populated", func() { diff --git a/pkg/handlers/primeapiv3/payloads/model_to_payload.go b/pkg/handlers/primeapiv3/payloads/model_to_payload.go index 0de1211d151..b4596356952 100644 --- a/pkg/handlers/primeapiv3/payloads/model_to_payload.go +++ b/pkg/handlers/primeapiv3/payloads/model_to_payload.go @@ -198,6 +198,10 @@ func Entitlement(entitlement *models.Entitlement) *primev3messages.Entitlements if entitlement.UBAllowance != nil { ubAllowance = int64(*entitlement.UBAllowance) } + var weightRestriction int64 + if entitlement.WeightRestriction != nil { + weightRestriction = int64(*entitlement.WeightRestriction) + } return &primev3messages.Entitlements{ ID: strfmt.UUID(entitlement.ID.String()), AuthorizedWeight: authorizedWeight, @@ -209,10 +213,11 @@ func Entitlement(entitlement *models.Entitlement) *primev3messages.Entitlements ProGearWeightSpouse: int64(entitlement.ProGearWeightSpouse), RequiredMedicalEquipmentWeight: int64(entitlement.RequiredMedicalEquipmentWeight), OrganizationalClothingAndIndividualEquipment: entitlement.OrganizationalClothingAndIndividualEquipment, - StorageInTransit: sit, - TotalDependents: totalDependents, - TotalWeight: totalWeight, - ETag: etag.GenerateEtag(entitlement.UpdatedAt), + StorageInTransit: sit, + TotalDependents: totalDependents, + TotalWeight: totalWeight, + WeightRestriction: &weightRestriction, + ETag: etag.GenerateEtag(entitlement.UpdatedAt), } } diff --git a/pkg/handlers/primeapiv3/payloads/model_to_payload_test.go b/pkg/handlers/primeapiv3/payloads/model_to_payload_test.go index 345ee203b0b..ea061eecd40 100644 --- a/pkg/handlers/primeapiv3/payloads/model_to_payload_test.go +++ b/pkg/handlers/primeapiv3/payloads/model_to_payload_test.go @@ -531,6 +531,7 @@ func (suite *PayloadsSuite) TestEntitlement() { ProGearWeightSpouse: 0, CreatedAt: time.Now(), UpdatedAt: time.Now(), + WeightRestriction: models.IntPointer(1000), } payload := Entitlement(&entitlement) @@ -553,6 +554,7 @@ func (suite *PayloadsSuite) TestEntitlement() { suite.Equal(int64(0), payload.TotalDependents) suite.Equal(int64(0), payload.TotalWeight) suite.Equal(int64(0), *payload.UnaccompaniedBaggageAllowance) + suite.Equal(int64(1000), *payload.WeightRestriction) }) suite.Run("Success - Returns the entitlement payload with all optional fields populated", func() { diff --git a/pkg/models/ghc_entitlements.go b/pkg/models/ghc_entitlements.go index d516d71eb0b..f56c915ad19 100644 --- a/pkg/models/ghc_entitlements.go +++ b/pkg/models/ghc_entitlements.go @@ -34,7 +34,6 @@ type Entitlement struct { OrganizationalClothingAndIndividualEquipment bool `db:"organizational_clothing_and_individual_equipment"` ProGearWeight int `db:"pro_gear_weight"` ProGearWeightSpouse int `db:"pro_gear_weight_spouse"` - AdminRestrictedWeightLocation bool `db:"admin_restricted_weight_location"` WeightRestriction *int `db:"weight_restriction"` CreatedAt time.Time `db:"created_at"` UpdatedAt time.Time `db:"updated_at"` diff --git a/pkg/notifications/move_approved.go b/pkg/notifications/move_approved.go index fb207acfbe3..96b198d6c8b 100644 --- a/pkg/notifications/move_approved.go +++ b/pkg/notifications/move_approved.go @@ -86,13 +86,12 @@ func (m MoveApproved) emails(appCtx appcontext.AppContext) ([]emailContent, erro } htmlBody, textBody, err := m.renderTemplates(appCtx, moveApprovedEmailData{ - Link: ppmInfoSheetURL.String(), - OriginDutyLocation: originDutyLocation, - DestinationDutyLocation: orders.NewDutyLocation.Name, - OriginDutyLocationPhoneLine: originDutyLocationPhoneLine, - Locator: move.Locator, - MyMoveLink: MyMoveLink, - AdminRestrictedWeightLocation: orders.Entitlement.AdminRestrictedWeightLocation, + Link: ppmInfoSheetURL.String(), + OriginDutyLocation: originDutyLocation, + DestinationDutyLocation: orders.NewDutyLocation.Name, + OriginDutyLocationPhoneLine: originDutyLocationPhoneLine, + Locator: move.Locator, + MyMoveLink: MyMoveLink, }) if err != nil { @@ -129,13 +128,12 @@ func (m MoveApproved) renderTemplates(appCtx appcontext.AppContext, data moveApp // moveApprovedEmailData has content for email template type moveApprovedEmailData struct { - Link string - OriginDutyLocation *string - DestinationDutyLocation string - OriginDutyLocationPhoneLine *string - Locator string - MyMoveLink string - AdminRestrictedWeightLocation bool + Link string + OriginDutyLocation *string + DestinationDutyLocation string + OriginDutyLocationPhoneLine *string + Locator string + MyMoveLink string } // RenderHTML renders the html for the email diff --git a/pkg/services/order/order_updater.go b/pkg/services/order/order_updater.go index 397e7c159cf..bf196fa47d5 100644 --- a/pkg/services/order/order_updater.go +++ b/pkg/services/order/order_updater.go @@ -481,10 +481,6 @@ func allowanceFromTOOPayload(appCtx appcontext.AppContext, existingOrder models. order.Entitlement.GunSafe = *payload.GunSafe } - if payload.AdminRestrictedWeightLocation != nil { - order.Entitlement.AdminRestrictedWeightLocation = *payload.AdminRestrictedWeightLocation - } - if payload.WeightRestriction != nil { weightRestriction := int(*payload.WeightRestriction) order.Entitlement.WeightRestriction = &weightRestriction @@ -593,10 +589,6 @@ func allowanceFromCounselingPayload(appCtx appcontext.AppContext, existingOrder order.Entitlement.GunSafe = *payload.GunSafe } - if payload.AdminRestrictedWeightLocation != nil { - order.Entitlement.AdminRestrictedWeightLocation = *payload.AdminRestrictedWeightLocation - } - if payload.WeightRestriction != nil { weightRestriction := int(*payload.WeightRestriction) order.Entitlement.WeightRestriction = &weightRestriction diff --git a/pkg/services/order/order_updater_test.go b/pkg/services/order/order_updater_test.go index 15ff4cf8b4b..9e86e990f95 100644 --- a/pkg/services/order/order_updater_test.go +++ b/pkg/services/order/order_updater_test.go @@ -588,7 +588,6 @@ func (suite *OrderServiceSuite) TestUpdateAllowanceAsTOO() { ProGearWeight: proGearWeight, ProGearWeightSpouse: proGearWeightSpouse, RequiredMedicalEquipmentWeight: rmeWeight, - AdminRestrictedWeightLocation: models.BoolPointer(false), } updatedOrder, _, err := orderUpdater.UpdateAllowanceAsTOO(suite.AppContextForTest(), order.ID, payload, eTag) @@ -631,7 +630,6 @@ func (suite *OrderServiceSuite) TestUpdateAllowanceAsTOO() { AccompaniedTour: models.BoolPointer(true), DependentsTwelveAndOver: models.Int64Pointer(2), DependentsUnderTwelve: models.Int64Pointer(4), - AdminRestrictedWeightLocation: models.BoolPointer(false), } updatedOrder, _, err := orderUpdater.UpdateAllowanceAsTOO(suite.AppContextForTest(), order.ID, payload, eTag) @@ -677,7 +675,6 @@ func (suite *OrderServiceSuite) TestUpdateAllowanceAsTOO() { ProGearWeight: proGearWeight, ProGearWeightSpouse: proGearWeightSpouse, RequiredMedicalEquipmentWeight: rmeWeight, - AdminRestrictedWeightLocation: models.BoolPointer(false), } updatedOrder, _, err := orderUpdater.UpdateAllowanceAsTOO(suite.AppContextForTest(), order.ID, payload, eTag) @@ -750,7 +747,6 @@ func (suite *OrderServiceSuite) TestUpdateAllowanceAsCounselor() { AccompaniedTour: models.BoolPointer(true), DependentsTwelveAndOver: models.Int64Pointer(1), DependentsUnderTwelve: models.Int64Pointer(2), - AdminRestrictedWeightLocation: models.BoolPointer(false), WeightRestriction: models.Int64Pointer(0), } @@ -780,6 +776,7 @@ func (suite *OrderServiceSuite) TestUpdateAllowanceAsCounselor() { proGearWeightSpouse := models.Int64Pointer(10) rmeWeight := models.Int64Pointer(10000) eTag := etag.GenerateEtag(order.UpdatedAt) + weightRestriction := models.Int64Pointer(5000) payload := ghcmessages.CounselingUpdateAllowancePayload{ Agency: &affiliation, @@ -789,8 +786,7 @@ func (suite *OrderServiceSuite) TestUpdateAllowanceAsCounselor() { ProGearWeight: proGearWeight, ProGearWeightSpouse: proGearWeightSpouse, RequiredMedicalEquipmentWeight: rmeWeight, - AdminRestrictedWeightLocation: models.BoolPointer(false), - WeightRestriction: models.Int64Pointer(0), + WeightRestriction: weightRestriction, } updatedOrder, _, err := orderUpdater.UpdateAllowanceAsCounselor(suite.AppContextForTest(), order.ID, payload, eTag) @@ -811,6 +807,7 @@ func (suite *OrderServiceSuite) TestUpdateAllowanceAsCounselor() { suite.Equal(*payload.OrganizationalClothingAndIndividualEquipment, updatedOrder.Entitlement.OrganizationalClothingAndIndividualEquipment) suite.EqualValues(payload.Agency, fetchedSM.Affiliation) suite.Equal(*updatedOrder.Entitlement.DBAuthorizedWeight, 16000) + suite.Equal(*payload.WeightRestriction, int64(*updatedOrder.Entitlement.WeightRestriction)) }) suite.Run("Updates the allowance when all fields are valid with dependents present and authorized", func() { @@ -836,7 +833,6 @@ func (suite *OrderServiceSuite) TestUpdateAllowanceAsCounselor() { ProGearWeight: proGearWeight, ProGearWeightSpouse: proGearWeightSpouse, RequiredMedicalEquipmentWeight: rmeWeight, - AdminRestrictedWeightLocation: models.BoolPointer(false), WeightRestriction: models.Int64Pointer(0), } @@ -887,7 +883,6 @@ func (suite *OrderServiceSuite) TestUpdateAllowanceAsCounselor() { ProGearWeight: proGearWeight, ProGearWeightSpouse: proGearWeightSpouse, RequiredMedicalEquipmentWeight: rmeWeight, - AdminRestrictedWeightLocation: models.BoolPointer(false), WeightRestriction: models.Int64Pointer(0), } @@ -940,7 +935,6 @@ func (suite *OrderServiceSuite) TestUpdateAllowanceAsCounselor() { ProGearWeight: proGearWeight, ProGearWeightSpouse: proGearWeightSpouse, RequiredMedicalEquipmentWeight: rmeWeight, - AdminRestrictedWeightLocation: models.BoolPointer(false), WeightRestriction: models.Int64Pointer(0), } @@ -978,7 +972,6 @@ func (suite *OrderServiceSuite) TestUpdateAllowanceAsCounselor() { ProGearWeight: proGearWeight, ProGearWeightSpouse: proGearWeightSpouse, RequiredMedicalEquipmentWeight: rmeWeight, - AdminRestrictedWeightLocation: models.BoolPointer(false), WeightRestriction: models.Int64Pointer(0), } diff --git a/src/components/Office/AllowancesDetailForm/AllowancesDetailForm.jsx b/src/components/Office/AllowancesDetailForm/AllowancesDetailForm.jsx index 739a5ea9d63..930ec6faae3 100644 --- a/src/components/Office/AllowancesDetailForm/AllowancesDetailForm.jsx +++ b/src/components/Office/AllowancesDetailForm/AllowancesDetailForm.jsx @@ -20,9 +20,7 @@ const AllowancesDetailForm = ({ header, entitlements, branchOptions, formIsDisab entitlements?.dependentsTwelveAndOver || entitlements?.dependentsUnderTwelve ); - const [isAdminWeightLocationChecked, setIsAdminWeightLocationChecked] = useState( - entitlements?.adminRestrictedWeightLocation || false, - ); + const [isAdminWeightLocationChecked, setIsAdminWeightLocationChecked] = useState(entitlements?.weightRestriction > 0); useEffect(() => { // Functional component version of "componentDidMount" // By leaving the dependency array empty this will only run once @@ -173,7 +171,7 @@ const AllowancesDetailForm = ({ header, entitlements, branchOptions, formIsDisab isDisabled={formIsDisabled} />
-
Standard Weight allowance
+
Standard weight allowance
{formatWeight(entitlements.totalWeight)}
@@ -202,6 +200,7 @@ const AllowancesDetailForm = ({ header, entitlements, branchOptions, formIsDisab label="Admin restricted weight location" isDisabled={formIsDisabled} onChange={handleAdminWeightLocationChange} + checked={entitlements?.weightRestriction > 0} />
{isAdminWeightLocationChecked && ( diff --git a/src/components/Office/DefinitionLists/AllowancesList.jsx b/src/components/Office/DefinitionLists/AllowancesList.jsx index 6b3c69fe5d5..7bdd17862ae 100644 --- a/src/components/Office/DefinitionLists/AllowancesList.jsx +++ b/src/components/Office/DefinitionLists/AllowancesList.jsx @@ -34,7 +34,7 @@ const AllowancesList = ({ info, showVisualCues }) => {
{info.branch ? ORDERS_BRANCH_OPTIONS[info.branch] : ''}
-
Weight allowance
+
Standard weight allowance
{formatWeight(info.totalWeight)}
@@ -104,9 +104,10 @@ const AllowancesList = ({ info, showVisualCues }) => {
{info.gunSafe ? 'Authorized' : 'Unauthorized'}
-
Admin Restricted Weight Location
-
{info.adminRestrictedWeightLocation ? 'Yes' : 'No'}
+
Admin Weight Restricted Location
+
{info.weightRestriction > 0 ? 'Yes' : 'No'}
+
Weight Restriction
diff --git a/src/components/Office/DefinitionLists/AllowancesList.test.jsx b/src/components/Office/DefinitionLists/AllowancesList.test.jsx index 45c2e97f246..5c44421c7f5 100644 --- a/src/components/Office/DefinitionLists/AllowancesList.test.jsx +++ b/src/components/Office/DefinitionLists/AllowancesList.test.jsx @@ -19,6 +19,7 @@ const info = { requiredMedicalEquipmentWeight: 1000, organizationalClothingAndIndividualEquipment: true, ubAllowance: 400, + weightRestriction: 1000, }; const initialValuesOconusAdditions = { @@ -175,4 +176,9 @@ describe('AllowancesList', () => { expect(screen.getByTestId('unaccompaniedBaggageAllowance')).toBeInTheDocument(); expect(screen.getByTestId('unaccompaniedBaggageAllowance').textContent).toEqual('400 lbs'); }); + it('renders weight restriction', () => { + const adminRestrictedWtLoc = { ...info, adminRestrictedWeightLocation: true }; + render(); + expect(screen.getByTestId('weightRestriction').textContent).toEqual('1,000 lbs'); + }); }); diff --git a/src/pages/Office/MoveAllowances/MoveAllowances.jsx b/src/pages/Office/MoveAllowances/MoveAllowances.jsx index 18484e884bd..b2cf0264b3a 100644 --- a/src/pages/Office/MoveAllowances/MoveAllowances.jsx +++ b/src/pages/Office/MoveAllowances/MoveAllowances.jsx @@ -45,6 +45,7 @@ const validationSchema = Yup.object({ .notRequired(), weightRestriction: Yup.number() .min(0, 'Weight restriction must be greater than or equal to 0') + .max(18000, 'Weight restriction cannot exceed 18,000 lbs') .transform((value) => (Number.isNaN(value) ? 0 : value)) .notRequired(), }); @@ -102,7 +103,6 @@ const MoveAllowances = () => { organizationalClothingAndIndividualEquipment, storageInTransit, gunSafe, - adminRestrictedWeightLocation, weightRestriction, accompaniedTour, dependentsTwelveAndOver, @@ -124,7 +124,6 @@ const MoveAllowances = () => { organizationalClothingAndIndividualEquipment, storageInTransit: Number(storageInTransit), gunSafe, - adminRestrictedWeightLocation, weightRestriction: Number(weightRestriction), accompaniedTour, dependentsTwelveAndOver: Number(dependentsTwelveAndOver), @@ -141,7 +140,6 @@ const MoveAllowances = () => { requiredMedicalEquipmentWeight, organizationalClothingAndIndividualEquipment, gunSafe, - adminRestrictedWeightLocation, weightRestriction, storageInTransit, dependentsUnderTwelve, @@ -158,7 +156,6 @@ const MoveAllowances = () => { requiredMedicalEquipmentWeight: `${requiredMedicalEquipmentWeight}`, organizationalClothingAndIndividualEquipment, gunSafe, - adminRestrictedWeightLocation, weightRestriction: `${weightRestriction}`, storageInTransit: `${storageInTransit}`, accompaniedTour, diff --git a/src/pages/Office/MoveDetails/MoveDetails.jsx b/src/pages/Office/MoveDetails/MoveDetails.jsx index fcf27b5b15c..1e74c050cc5 100644 --- a/src/pages/Office/MoveDetails/MoveDetails.jsx +++ b/src/pages/Office/MoveDetails/MoveDetails.jsx @@ -430,7 +430,6 @@ const MoveDetails = ({ requiredMedicalEquipmentWeight: allowances.requiredMedicalEquipmentWeight, organizationalClothingAndIndividualEquipment: allowances.organizationalClothingAndIndividualEquipment, gunSafe: allowances.gunSafe, - adminRestrictedWeightLocation: allowances.adminRestrictedWeightLocation, weightRestriction: allowances.weightRestriction, dependentsUnderTwelve: allowances.dependentsUnderTwelve, dependentsTwelveAndOver: allowances.dependentsTwelveAndOver, diff --git a/src/pages/Office/ServicesCounselingMoveAllowances/ServicesCounselingMoveAllowances.jsx b/src/pages/Office/ServicesCounselingMoveAllowances/ServicesCounselingMoveAllowances.jsx index 4a0cbd3846d..dafd49b76f6 100644 --- a/src/pages/Office/ServicesCounselingMoveAllowances/ServicesCounselingMoveAllowances.jsx +++ b/src/pages/Office/ServicesCounselingMoveAllowances/ServicesCounselingMoveAllowances.jsx @@ -43,6 +43,7 @@ const validationSchema = Yup.object({ .notRequired(), weightRestriction: Yup.number() .min(0, 'Weight restriction must be greater than or equal to 0') + .max(18000, 'Weight restriction cannot exceed 18,000 lbs') .transform((value) => (Number.isNaN(value) ? 0 : value)) .notRequired(), }); @@ -90,7 +91,6 @@ const ServicesCounselingMoveAllowances = () => { organizationalClothingAndIndividualEquipment, storageInTransit, gunSafe, - adminRestrictedWeightLocation, weightRestriction, accompaniedTour, dependentsTwelveAndOver, @@ -112,7 +112,6 @@ const ServicesCounselingMoveAllowances = () => { storageInTransit: Number(storageInTransit), organizationalClothingAndIndividualEquipment, gunSafe, - adminRestrictedWeightLocation, weightRestriction: Number(weightRestriction), accompaniedTour, dependentsTwelveAndOver: Number(dependentsTwelveAndOver), @@ -129,7 +128,6 @@ const ServicesCounselingMoveAllowances = () => { requiredMedicalEquipmentWeight, organizationalClothingAndIndividualEquipment, gunSafe, - adminRestrictedWeightLocation, weightRestriction, storageInTransit, dependentsUnderTwelve, @@ -146,7 +144,6 @@ const ServicesCounselingMoveAllowances = () => { requiredMedicalEquipmentWeight: `${requiredMedicalEquipmentWeight}`, storageInTransit: `${storageInTransit}`, gunSafe, - adminRestrictedWeightLocation, weightRestriction: `${weightRestriction}`, organizationalClothingAndIndividualEquipment, accompaniedTour, diff --git a/src/pages/Office/ServicesCounselingMoveDetails/ServicesCounselingMoveDetails.jsx b/src/pages/Office/ServicesCounselingMoveDetails/ServicesCounselingMoveDetails.jsx index 10322e78921..c5104b99537 100644 --- a/src/pages/Office/ServicesCounselingMoveDetails/ServicesCounselingMoveDetails.jsx +++ b/src/pages/Office/ServicesCounselingMoveDetails/ServicesCounselingMoveDetails.jsx @@ -387,7 +387,6 @@ const ServicesCounselingMoveDetails = ({ requiredMedicalEquipmentWeight: allowances.requiredMedicalEquipmentWeight, organizationalClothingAndIndividualEquipment: allowances.organizationalClothingAndIndividualEquipment, gunSafe: allowances.gunSafe, - adminRestrictedWeightLocation: allowances.adminRestrictedWeightLocation, weightRestriction: allowances.weightRestriction, dependentsUnderTwelve: allowances.dependentsUnderTwelve, dependentsTwelveAndOver: allowances.dependentsTwelveAndOver, diff --git a/swagger-def/definitions/prime/Entitlements.yaml b/swagger-def/definitions/prime/Entitlements.yaml index 164841fc6e2..83a989da2b8 100644 --- a/swagger-def/definitions/prime/Entitlements.yaml +++ b/swagger-def/definitions/prime/Entitlements.yaml @@ -21,9 +21,6 @@ properties: gunSafe: type: boolean example: false - adminRestrictedWeightLocation: - type: boolean - example: false nonTemporaryStorage: example: false type: boolean diff --git a/swagger-def/ghc.yaml b/swagger-def/ghc.yaml index 91168e48ef1..ccf179de2c3 100644 --- a/swagger-def/ghc.yaml +++ b/swagger-def/ghc.yaml @@ -5041,9 +5041,6 @@ definitions: gunSafe: type: boolean example: false - adminRestrictedWeightLocation: - type: boolean - example: false weightRestriction: type: integer example: 1500 @@ -5901,10 +5898,6 @@ definitions: description: True if user is entitled to move a gun safe (up to 500 lbs) as part of their move without it being charged against their weight allowance. type: boolean x-nullable: true - adminRestrictedWeightLocation: - description: Indicates if the customer is restricted to a specific location for their admin restricted weight. - type: boolean - x-nullable: true accompaniedTour: type: boolean example: true @@ -6002,10 +5995,6 @@ definitions: description: True if user is entitled to move a gun safe (up to 500 lbs) as part of their move without it being charged against their weight allowance. type: boolean x-nullable: true - adminRestrictedWeightLocation: - description: Indicates if the customer is restricted to a specific location for their admin restricted weight. - type: boolean - x-nullable: true accompaniedTour: type: boolean example: true diff --git a/swagger-def/support.yaml b/swagger-def/support.yaml index 2eeb7cd3c68..1a531468c77 100644 --- a/swagger-def/support.yaml +++ b/swagger-def/support.yaml @@ -878,9 +878,6 @@ definitions: gunSafe: type: boolean example: false - adminRestrictedWeightLocation: - type: boolean - example: false weightRestriction: example: 1500 type: integer diff --git a/swagger/ghc.yaml b/swagger/ghc.yaml index df3c1822bc1..0ec16edf6cd 100644 --- a/swagger/ghc.yaml +++ b/swagger/ghc.yaml @@ -5244,9 +5244,6 @@ definitions: gunSafe: type: boolean example: false - adminRestrictedWeightLocation: - type: boolean - example: false weightRestriction: type: integer example: 1500 @@ -6153,12 +6150,6 @@ definitions: their move without it being charged against their weight allowance. type: boolean x-nullable: true - adminRestrictedWeightLocation: - description: >- - Indicates if the customer is restricted to a specific location for - their admin restricted weight. - type: boolean - x-nullable: true accompaniedTour: type: boolean example: true @@ -6269,12 +6260,6 @@ definitions: their move without it being charged against their weight allowance. type: boolean x-nullable: true - adminRestrictedWeightLocation: - description: >- - Indicates if the customer is restricted to a specific location for - their admin restricted weight. - type: boolean - x-nullable: true accompaniedTour: type: boolean example: true diff --git a/swagger/prime.yaml b/swagger/prime.yaml index 3fe547b0721..9d37bacb134 100644 --- a/swagger/prime.yaml +++ b/swagger/prime.yaml @@ -3246,9 +3246,6 @@ definitions: gunSafe: type: boolean example: false - adminRestrictedWeightLocation: - type: boolean - example: false nonTemporaryStorage: example: false type: boolean diff --git a/swagger/prime_v2.yaml b/swagger/prime_v2.yaml index c89f0f2794e..f4d2c829d84 100644 --- a/swagger/prime_v2.yaml +++ b/swagger/prime_v2.yaml @@ -1638,9 +1638,6 @@ definitions: gunSafe: type: boolean example: false - adminRestrictedWeightLocation: - type: boolean - example: false nonTemporaryStorage: example: false type: boolean diff --git a/swagger/prime_v3.yaml b/swagger/prime_v3.yaml index 741ebb467dd..cf74acb3640 100644 --- a/swagger/prime_v3.yaml +++ b/swagger/prime_v3.yaml @@ -1745,9 +1745,6 @@ definitions: gunSafe: type: boolean example: false - adminRestrictedWeightLocation: - type: boolean - example: false nonTemporaryStorage: example: false type: boolean diff --git a/swagger/support.yaml b/swagger/support.yaml index b4ea28ca93c..31ecdc921ce 100644 --- a/swagger/support.yaml +++ b/swagger/support.yaml @@ -953,9 +953,6 @@ definitions: gunSafe: type: boolean example: false - adminRestrictedWeightLocation: - type: boolean - example: false weightRestriction: example: 1500 type: integer From 3a3a74bc279e3947f46b6aaf87ae1f8688abf3c1 Mon Sep 17 00:00:00 2001 From: deandreJones Date: Mon, 27 Jan 2025 15:43:23 +0000 Subject: [PATCH 11/22] B-21935 --- .../templates/move_counseled_template.html | 3 + .../templates/move_counseled_template.txt | 4 +- pkg/gen/internalapi/embedded_spec.go | 20 +++++ pkg/gen/internalmessages/entitlement.go | 4 + pkg/gen/internalmessages/orders.go | 3 + pkg/handlers/internalapi/orders.go | 3 + pkg/notifications/move_counseled.go | 10 ++- pkg/notifications/move_counseled_test.go | 53 +++++++++++ .../MtoShipmentForm/MtoShipmentForm.jsx | 2 +- src/pages/MyMove/Home/MoveHome.jsx | 8 +- src/pages/MyMove/Home/MoveHome.test.jsx | 87 +++++++++++++++++++ src/pages/MyMove/Home/index.jsx | 8 +- swagger-def/internal.yaml | 8 ++ swagger/internal.yaml | 8 ++ 14 files changed, 216 insertions(+), 5 deletions(-) diff --git a/pkg/assets/notifications/templates/move_counseled_template.html b/pkg/assets/notifications/templates/move_counseled_template.html index d8c22a243b0..27bfa767bbe 100644 --- a/pkg/assets/notifications/templates/move_counseled_template.html +++ b/pkg/assets/notifications/templates/move_counseled_template.html @@ -2,6 +2,9 @@

This is a confirmation that your counselor has approved move details for the assigned move code{{if .Locator}} {{.Locator}}{{end}}{{if .OriginDutyLocation}} from {{.OriginDutyLocation}}{{end}}{{if .DestinationLocation}} to {{.DestinationLocation}}{{end}} in the MilMove system.

+{{if .WeightRestriction}} +

Your move has been identified as going to an administratively restricted HHG weight location. Your weight restriction is {{.WeightRestriction}}lbs. Be advised, you may be required to pay excess cost if you choose to move more than your weight restriction.

+{{end}}

What this means to you:
If you are doing a Personally Procured Move (PPM), you can start moving your personal property.

diff --git a/pkg/assets/notifications/templates/move_counseled_template.txt b/pkg/assets/notifications/templates/move_counseled_template.txt index 39aead0ef8a..535c27f66e9 100644 --- a/pkg/assets/notifications/templates/move_counseled_template.txt +++ b/pkg/assets/notifications/templates/move_counseled_template.txt @@ -1,7 +1,9 @@ *** DO NOT REPLY directly to this email *** This is a confirmation that your counselor has approved move details for the assigned move code {{.Locator}}{{if .OriginDutyLocation}} from {{.OriginDutyLocation}}{{end}}{{if .DestinationLocation}} to {{.DestinationLocation}}{{end}} in the MilMove system. - +{{if .WeightRestriction}} +

Your move has been identified as going to an administratively restricted HHG weight location. Your weight restriction is {{.WeightRestriction}}lbs. Be advised, you may be required to pay excess cost if you choose to move more than your weight restriction.

+{{end}} What this means to you: If you are doing a Personally Procured Move (PPM), you can start moving your personal property. diff --git a/pkg/gen/internalapi/embedded_spec.go b/pkg/gen/internalapi/embedded_spec.go index c872ff075a7..35d92886247 100644 --- a/pkg/gen/internalapi/embedded_spec.go +++ b/pkg/gen/internalapi/embedded_spec.go @@ -4486,6 +4486,12 @@ func init() { "type": "integer", "x-nullable": true, "example": 3 + }, + "weight_restriction": { + "description": "Indicates the weight restricted to a specific location.", + "type": "integer", + "x-nullable": true, + "example": 1500 } } }, @@ -6037,6 +6043,10 @@ func init() { }, "uploaded_orders": { "$ref": "#/definitions/Document" + }, + "weightRestriction": { + "type": "integer", + "x-nullable": true } } }, @@ -13615,6 +13625,12 @@ func init() { "type": "integer", "x-nullable": true, "example": 3 + }, + "weight_restriction": { + "description": "Indicates the weight restricted to a specific location.", + "type": "integer", + "x-nullable": true, + "example": 1500 } } }, @@ -15168,6 +15184,10 @@ func init() { }, "uploaded_orders": { "$ref": "#/definitions/Document" + }, + "weightRestriction": { + "type": "integer", + "x-nullable": true } } }, diff --git a/pkg/gen/internalmessages/entitlement.go b/pkg/gen/internalmessages/entitlement.go index 703b403758f..083ea350085 100644 --- a/pkg/gen/internalmessages/entitlement.go +++ b/pkg/gen/internalmessages/entitlement.go @@ -42,6 +42,10 @@ type Entitlement struct { // The amount of weight in pounds that the move is entitled for shipment types of Unaccompanied Baggage. // Example: 3 UbAllowance *int64 `json:"ub_allowance,omitempty"` + + // Indicates the weight restricted to a specific location. + // Example: 1500 + WeightRestriction *int64 `json:"weight_restriction,omitempty"` } // Validate validates this entitlement diff --git a/pkg/gen/internalmessages/orders.go b/pkg/gen/internalmessages/orders.go index 6a789163d32..f36800d8445 100644 --- a/pkg/gen/internalmessages/orders.go +++ b/pkg/gen/internalmessages/orders.go @@ -127,6 +127,9 @@ type Orders struct { // uploaded orders // Required: true UploadedOrders *Document `json:"uploaded_orders"` + + // weight restriction + WeightRestriction *int64 `json:"weightRestriction,omitempty"` } // Validate validates this orders diff --git a/pkg/handlers/internalapi/orders.go b/pkg/handlers/internalapi/orders.go index 6e663bff4ea..ce4cf66cde5 100644 --- a/pkg/handlers/internalapi/orders.go +++ b/pkg/handlers/internalapi/orders.go @@ -85,6 +85,9 @@ func payloadForOrdersModel(storer storage.FileStorer, order models.Order) (*inte if order.Entitlement.UBAllowance != nil { entitlement.UbAllowance = models.Int64Pointer(int64(*order.Entitlement.UBAllowance)) } + if order.Entitlement.WeightRestriction != nil { + entitlement.WeightRestriction = models.Int64Pointer(int64(*order.Entitlement.WeightRestriction)) + } } var originDutyLocation models.DutyLocation originDutyLocation = models.DutyLocation{} diff --git a/pkg/notifications/move_counseled.go b/pkg/notifications/move_counseled.go index e519fdcc6a7..a506a118eab 100644 --- a/pkg/notifications/move_counseled.go +++ b/pkg/notifications/move_counseled.go @@ -91,12 +91,19 @@ func (m MoveCounseled) emails(appCtx appcontext.AppContext) ([]emailContent, err return emails, fmt.Errorf("no email found for service member") } + var weightRestriction *int64 + if orders.Entitlement.WeightRestriction != nil { + weightRestrictionInt64 := int64(*orders.Entitlement.WeightRestriction) + weightRestriction = &weightRestrictionInt64 + } + htmlBody, textBody, err := m.renderTemplates(appCtx, MoveCounseledEmailData{ OriginDutyLocation: originDutyLocationName, DestinationLocation: destinationAddress, Locator: move.Locator, MyMoveLink: MyMoveLink, ActualExpenseReimbursement: actualExpenseReimbursement, + WeightRestriction: weightRestriction, }) if err != nil { @@ -115,8 +122,8 @@ func (m MoveCounseled) emails(appCtx appcontext.AppContext) ([]emailContent, err // TODO: Send email to trusted contacts when that's supported return append(emails, smEmail), nil -} +} func (m MoveCounseled) renderTemplates(appCtx appcontext.AppContext, data MoveCounseledEmailData) (string, string, error) { htmlBody, err := m.RenderHTML(appCtx, data) if err != nil { @@ -135,6 +142,7 @@ type MoveCounseledEmailData struct { Locator string MyMoveLink string ActualExpenseReimbursement bool + WeightRestriction *int64 } // RenderHTML renders the html for the email diff --git a/pkg/notifications/move_counseled_test.go b/pkg/notifications/move_counseled_test.go index a66370c27af..54f732a6d87 100644 --- a/pkg/notifications/move_counseled_test.go +++ b/pkg/notifications/move_counseled_test.go @@ -273,3 +273,56 @@ func (suite *NotificationSuite) TestMoveCounseledDestinationIsDutyStationForPpmP suite.Contains(email.htmlBody, "from "+move.Orders.OriginDutyLocation.Name+" to "+move.Orders.NewDutyLocation.Name+" in the ") suite.Contains(email.textBody, "from "+move.Orders.OriginDutyLocation.Name+" to "+move.Orders.NewDutyLocation.Name+" in the ") } + +func (suite *NotificationSuite) TestMoveCounseledHTMLTemplateRenderWithWeightRestriction() { + approver := factory.BuildUser(nil, nil, nil) + move := factory.BuildMove(suite.DB(), nil, nil) + notification := NewMoveCounseled(move.ID) + + originDutyLocation := "origDutyLocation" + + s := MoveCounseledEmailData{ + OriginDutyLocation: &originDutyLocation, + DestinationLocation: "destDutyLocation", + Locator: "abc123", + MyMoveLink: MyMoveLink, + ActualExpenseReimbursement: true, + WeightRestriction: models.Int64Pointer(1500), + } + + expectedHTMLContent := `

*** DO NOT REPLY directly to this email ***

+

This is a confirmation that your counselor has approved move details for the assigned move code abc123 from origDutyLocation to destDutyLocation in the MilMove system.

+

What this means to you:
+

Your move has been identified as going to an administratively restricted HHG weight location. Your weight restriction is {{.WeightRestriction}}lbs. Be advised, you may be required to pay excess cost if you choose to move more than your weight restriction.

+If you are doing a Personally Procured Move (PPM), you can start moving your personal property.

+

Next steps for a PPM: +

    +
  • Please Note: Your PPM has been designated as Actual Expense Reimbursement. This is the standard entitlement for Civilian employees. For uniformed Service Members, your PPM may have been designated as Actual Expense Reimbursement due to failure to receive authorization prior to movement or failure to obtain certified weight tickets. Actual Expense Reimbursement means reimbursement for expenses not to exceed the Government Constructed Cost (GCC).
  • +
  • Remember to get legible certified weight tickets for both the empty and full weights for every trip you perform. If you do not upload legible certified weight tickets, your PPM incentive (or Actual Expense Reimbursement for Civilians) could be affected. Failure to obtain weight tickets will result in losing eligibility to receive your incentive.
  • +

    Note: To receive allowance for Pro-Gear, you must identify allowable items and provide weight tickets separately for Pro-Gear.

    +
  • For authorized storage:
  • +
      +
    • You will need to get weight ticket(s) for the items you store.
    • +
    • Storage costs cannot be paid in advance.
    • +
    +
  • If your counselor approved an Advance Operating Allowance (AOA, or cash advance) for a PPM, log into MilMove to download your AOA Packet, and submit it to finance according to the instructions provided by your counselor. If you have been directed to use your government travel charge card (GTCC) for expenses no further action is required.
  • +
  • Once you complete your PPM, log into MilMove, upload your receipts and weight tickets, and submit your PPM for review.
  • +
+

Next steps for government arranged shipments:
+

    +
  • Your move request will be reviewed by the responsible personal property shipping office and a move task order for services will be placed with HomeSafe Alliance.
  • +
  • Once this order is placed, you will receive an e-mail invitation to create an account in HomeSafe Connect (check your spam or junk folder). This is the system you will use to schedule your pre-move survey.
  • +
  • HomeSafe is required to contact you within one Government Business Day. Once contact has been established, HomeSafe is your primary point of contact. If any information about your move changes at any point during the move, immediately notify your HomeSafe Customer Care Representative of the changes. Remember to keep your contact information updated in MilMove.
  • +
+

Thank you,
+USTRANSCOM MilMove Team

+

The information contained in this email may contain Privacy Act information and is therefore protected under the Privacy Act of 1974. Failure to protect Privacy Act information could result in a $5,000 fine.

` + + htmlContent, err := notification.RenderHTML(suite.AppContextWithSessionForTest(&auth.Session{ + UserID: approver.ID, + ApplicationName: auth.OfficeApp, + }), s) + + suite.NoError(err) + suite.Equal(trimExtraSpaces(expectedHTMLContent), trimExtraSpaces(htmlContent)) +} diff --git a/src/components/Customer/MtoShipmentForm/MtoShipmentForm.jsx b/src/components/Customer/MtoShipmentForm/MtoShipmentForm.jsx index badadb06df0..a7ca94c2646 100644 --- a/src/components/Customer/MtoShipmentForm/MtoShipmentForm.jsx +++ b/src/components/Customer/MtoShipmentForm/MtoShipmentForm.jsx @@ -319,7 +319,7 @@ class MtoShipmentForm extends Component { ? ` You can move up to ${formatUBAllowanceWeight( orders?.entitlement?.ub_allowance, )} for this UB shipment. The weight of your UB is part of your authorized weight allowance` - : ` Your standard weight allowcance is ${formatWeight( + : ` Your standard weight allowance is ${formatWeight( orders.authorizedWeight, )} total. If you are moving to an administratively restricted HHG weight location this amount may be less. `} . You’ll be billed for any excess weight you move. diff --git a/src/pages/MyMove/Home/MoveHome.jsx b/src/pages/MyMove/Home/MoveHome.jsx index 69afb201a28..df26309e2e2 100644 --- a/src/pages/MyMove/Home/MoveHome.jsx +++ b/src/pages/MyMove/Home/MoveHome.jsx @@ -434,9 +434,15 @@ const MoveHome = ({ serviceMemberMoves, isProfileComplete, serviceMember, signed
-
Weight allowance
+
Standard weight allowance
{formatWeight(orders.authorizedWeight)}
+ {orders?.entitlement?.weight_restriction > 0 && ( +
+
Weight Restriction
+
{formatWeight(orders?.entitlement?.weight_restriction)}
+
+ )} {orders?.entitlement?.ub_allowance > 0 && (
UB allowance
diff --git a/src/pages/MyMove/Home/MoveHome.test.jsx b/src/pages/MyMove/Home/MoveHome.test.jsx index aa1da0f83ad..f8c6ce85549 100644 --- a/src/pages/MyMove/Home/MoveHome.test.jsx +++ b/src/pages/MyMove/Home/MoveHome.test.jsx @@ -1794,3 +1794,90 @@ describe('Home component', () => { }); }); }); +describe('renderCustomerHeaderText', () => { + const defaultOrders = { + new_duty_location: { + name: 'Fort Knox, KY 40121', + }, + origin_duty_location: { + name: 'Tinker AFB, OK 73145', + }, + report_by_date: '2024-02-29', + authorizedWeight: 11000, + }; + + const defaultMove = { + moveCode: '4H8VCD', + }; + + it('renders location and report by date correctly', () => { + const wrapper = mountMoveHomeWithProviders({ + ...defaultPropsOrdersWithUploads, + serviceMemberMoves: { + currentMove: [ + { + ...defaultPropsOrdersWithUploads.serviceMemberMoves.currentMove[0], + orders: defaultOrders, + move: defaultMove, + }, + ], + previousMoves: [], + }, + }); + + expect(wrapper.text()).toContain('Fort Knox, KY 40121'); + expect(wrapper.text()).toContain('Tinker AFB, OK 73145'); + expect(wrapper.text()).toContain('29 Feb 2024'); + }); + + it('renders weight restriction when present', () => { + const ordersWithRestriction = { + ...defaultOrders, + entitlement: { + weight_restriction: 9000, + }, + }; + + const wrapper = mountMoveHomeWithProviders({ + ...defaultPropsOrdersWithUploads, + serviceMemberMoves: { + currentMove: [ + { + ...defaultPropsOrdersWithUploads.serviceMemberMoves.currentMove[0], + orders: ordersWithRestriction, + move: defaultMove, + }, + ], + previousMoves: [], + }, + }); + + expect(wrapper.text()).toContain('Weight Restriction'); + expect(wrapper.text()).toContain('9,000 lbs'); + }); + + it('does not render weight restriction when not present', () => { + const ordersWithoutRestriction = { + ...defaultOrders, + entitlement: { + weight_restriction: 0, + }, + }; + + const wrapper = mountMoveHomeWithProviders({ + ...defaultPropsOrdersWithUploads, + serviceMemberMoves: { + currentMove: [ + { + ...defaultPropsOrdersWithUploads.serviceMemberMoves.currentMove[0], + orders: ordersWithoutRestriction, + move: defaultMove, + }, + ], + previousMoves: [], + }, + }); + + expect(wrapper.text()).not.toContain('Weight Restriction'); + }); +}); diff --git a/src/pages/MyMove/Home/index.jsx b/src/pages/MyMove/Home/index.jsx index 12544c80b88..38e20ac42a9 100644 --- a/src/pages/MyMove/Home/index.jsx +++ b/src/pages/MyMove/Home/index.jsx @@ -265,9 +265,15 @@ export class Home extends Component {
-
Standard Weight allowance
+
Standard weight alloowance
{formatWeight(orders.authorizedWeight)}.
+ {orders?.entitlement?.weight_restriction > 0 && ( +
+
Weight Restriction
+
{formatWeight(orders?.entitlement?.weight_restriction)}
+
+ )} {move.locator && (
Move code
diff --git a/swagger-def/internal.yaml b/swagger-def/internal.yaml index 3e9e054343a..17acc89241e 100644 --- a/swagger-def/internal.yaml +++ b/swagger-def/internal.yaml @@ -1408,6 +1408,9 @@ definitions: providesServicesCounseling: type: boolean x-omitempty: false + weightRestriction: + type: integer + x-nullable: true required: - id - service_member_id @@ -1455,6 +1458,11 @@ definitions: example: 3 x-nullable: true description: The amount of weight in pounds that the move is entitled for shipment types of Unaccompanied Baggage. + weight_restriction: + type: integer + example: 1500 + x-nullable: true + description: Indicates the weight restricted to a specific location. CreateUpdateOrders: type: object properties: diff --git a/swagger/internal.yaml b/swagger/internal.yaml index f7275136ef6..2f772c2ffcc 100644 --- a/swagger/internal.yaml +++ b/swagger/internal.yaml @@ -1431,6 +1431,9 @@ definitions: providesServicesCounseling: type: boolean x-omitempty: false + weightRestriction: + type: integer + x-nullable: true required: - id - service_member_id @@ -1489,6 +1492,11 @@ definitions: description: >- The amount of weight in pounds that the move is entitled for shipment types of Unaccompanied Baggage. + weight_restriction: + type: integer + example: 1500 + x-nullable: true + description: Indicates the weight restricted to a specific location. CreateUpdateOrders: type: object properties: From 87ac095c16a103a1a694db18b27832972b9520cc Mon Sep 17 00:00:00 2001 From: deandreJones Date: Mon, 27 Jan 2025 16:21:28 +0000 Subject: [PATCH 12/22] fix test --- src/pages/MyMove/Home/MoveHome.test.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/MyMove/Home/MoveHome.test.jsx b/src/pages/MyMove/Home/MoveHome.test.jsx index f8c6ce85549..f26abfa3289 100644 --- a/src/pages/MyMove/Home/MoveHome.test.jsx +++ b/src/pages/MyMove/Home/MoveHome.test.jsx @@ -1196,7 +1196,7 @@ describe('Home component', () => { wrapper = mountMoveHomeWithProviders(defaultPropsOrdersWithUBAllowance); }); await waitFor(() => { - expect(wrapper.text()).toContain('Weight allowance'); + expect(wrapper.text()).toContain('Standard weight allowance'); expect(wrapper.text()).toContain('11,000 lbs'); expect(wrapper.text()).toContain('UB allowance'); expect(wrapper.text()).toContain('2,000 lbs'); From 1eef9478277e20d7795854f97e1acb5a9ee0a418 Mon Sep 17 00:00:00 2001 From: deandreJones Date: Mon, 27 Jan 2025 16:42:03 +0000 Subject: [PATCH 13/22] fix test --- src/pages/MyMove/Home/MoveHome.test.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/MyMove/Home/MoveHome.test.jsx b/src/pages/MyMove/Home/MoveHome.test.jsx index 03af9f8a81b..82e7c5b53ba 100644 --- a/src/pages/MyMove/Home/MoveHome.test.jsx +++ b/src/pages/MyMove/Home/MoveHome.test.jsx @@ -1200,7 +1200,7 @@ describe('Home component', () => { expect(wrapper.text()).toContain('11,000 lbs'); expect(wrapper.text()).toContain('UB allowance'); expect(wrapper.text()).toContain('2,000 lbs'); - expect(wrapper.text()).toContain('Weight restriction'); + expect(wrapper.text()).not.toContain('Weight restriction'); }); const ubToolTip = wrapper.find('ToolTip'); From 75850822706b8e3c1fc5c3ea101705308d067aba Mon Sep 17 00:00:00 2001 From: deandreJones Date: Mon, 27 Jan 2025 16:53:02 +0000 Subject: [PATCH 14/22] test fix --- src/components/Office/DefinitionLists/AllowancesList.test.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/Office/DefinitionLists/AllowancesList.test.jsx b/src/components/Office/DefinitionLists/AllowancesList.test.jsx index 5c44421c7f5..f0e6c203639 100644 --- a/src/components/Office/DefinitionLists/AllowancesList.test.jsx +++ b/src/components/Office/DefinitionLists/AllowancesList.test.jsx @@ -179,6 +179,6 @@ describe('AllowancesList', () => { it('renders weight restriction', () => { const adminRestrictedWtLoc = { ...info, adminRestrictedWeightLocation: true }; render(); - expect(screen.getByTestId('weightRestriction').textContent).toEqual('1,000 lbs'); + expect(screen.getByTestId('weightRestriction').textContent).toEqual('1,500 lbs'); }); }); From acc62ba1c85c1d60c02ba05a801d4d8f4c9f7680 Mon Sep 17 00:00:00 2001 From: deandreJones Date: Mon, 27 Jan 2025 18:29:59 +0000 Subject: [PATCH 15/22] updates --- pkg/notifications/move_counseled_test.go | 2 +- pkg/notifications/move_submitted_test.go | 12 ++++++------ .../Office/DefinitionLists/AllowancesList.test.jsx | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/pkg/notifications/move_counseled_test.go b/pkg/notifications/move_counseled_test.go index 54f732a6d87..11e1a417b85 100644 --- a/pkg/notifications/move_counseled_test.go +++ b/pkg/notifications/move_counseled_test.go @@ -293,7 +293,7 @@ func (suite *NotificationSuite) TestMoveCounseledHTMLTemplateRenderWithWeightRes expectedHTMLContent := `

*** DO NOT REPLY directly to this email ***

This is a confirmation that your counselor has approved move details for the assigned move code abc123 from origDutyLocation to destDutyLocation in the MilMove system.

What this means to you:
-

Your move has been identified as going to an administratively restricted HHG weight location. Your weight restriction is {{.WeightRestriction}}lbs. Be advised, you may be required to pay excess cost if you choose to move more than your weight restriction.

+

Your move has been identified as going to an administratively restricted HHG weight location. Your weight restriction is 1500lbs. Be advised, you may be required to pay excess cost if you choose to move more than your weight restriction.

If you are doing a Personally Procured Move (PPM), you can start moving your personal property.

Next steps for a PPM:

    diff --git a/pkg/notifications/move_submitted_test.go b/pkg/notifications/move_submitted_test.go index b636d26a536..75c2c9c33b7 100644 --- a/pkg/notifications/move_submitted_test.go +++ b/pkg/notifications/move_submitted_test.go @@ -273,9 +273,9 @@ func (suite *NotificationSuite) TestMoveSubmittedHTMLTemplateRenderWithGovCounse

    - Your weight allowance: 7,999 pounds. + Your standard weight allowance: 7,999 pounds. That is how much combined weight the government will pay for all movements between authorized locations under your - orders. + orders. Be advised, if you are moving to an administratively restricted HHG weight location this amount could be less.

    @@ -385,7 +385,7 @@ func (suite *NotificationSuite) TestMoveSubmittedHTMLTemplateRenderWithoutGovCou

    - Your weight allowance: 7,999 pounds. + Your standard weight allowance: 7,999 pounds. That is how much combined weight the government will pay for all movements between authorized locations under your orders.

    @@ -483,9 +483,9 @@ func (suite *NotificationSuite) TestMoveSubmittedHTMLTemplateRenderNoDutyLocatio

    - Your weight allowance: 7,999 pounds. + Your standard weight allowance: 7,999 pounds. That is how much combined weight the government will pay for all movements between authorized locations under your - orders. + orders. Be advised, if you are moving to an administratively restricted HHG weight location this amount could be less.

    @@ -578,7 +578,7 @@ We have assigned you a move code: abc123. You can use this code when talking to To change any information about your move, or to add or cancel shipments, you should contact 555-555-5555 or visit your local transportation office (` + OneSourceTransportationOfficeLink + `) . -Your weight allowance: 7,999 pounds. That is how much combined weight the government will pay for all movements between authorized locations under your orders. +Your standard weight allowance: 7,999 pounds. That is how much combined weight the government will pay for all movements between authorized locations under your orders. Be advised, if you are moving to an administratively restricted HHG weight location this amount could be less. If you move more than 7,999 pounds or ship to/from an other than authorized location, you may owe the government the difference in cost between what you are authorized and what you decide to move. diff --git a/src/components/Office/DefinitionLists/AllowancesList.test.jsx b/src/components/Office/DefinitionLists/AllowancesList.test.jsx index f0e6c203639..9eed73f1d62 100644 --- a/src/components/Office/DefinitionLists/AllowancesList.test.jsx +++ b/src/components/Office/DefinitionLists/AllowancesList.test.jsx @@ -19,7 +19,7 @@ const info = { requiredMedicalEquipmentWeight: 1000, organizationalClothingAndIndividualEquipment: true, ubAllowance: 400, - weightRestriction: 1000, + weightRestriction: 1500, }; const initialValuesOconusAdditions = { From 284ad453e64177fb2cd5cb36edbc1d0d5b680480 Mon Sep 17 00:00:00 2001 From: deandreJones Date: Mon, 27 Jan 2025 13:30:19 -0600 Subject: [PATCH 16/22] updates --- pkg/notifications/move_counseled_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/notifications/move_counseled_test.go b/pkg/notifications/move_counseled_test.go index 11e1a417b85..c7d90ab77d6 100644 --- a/pkg/notifications/move_counseled_test.go +++ b/pkg/notifications/move_counseled_test.go @@ -292,8 +292,8 @@ func (suite *NotificationSuite) TestMoveCounseledHTMLTemplateRenderWithWeightRes expectedHTMLContent := `

    *** DO NOT REPLY directly to this email ***

    This is a confirmation that your counselor has approved move details for the assigned move code abc123 from origDutyLocation to destDutyLocation in the MilMove system.

    -

    What this means to you:

    Your move has been identified as going to an administratively restricted HHG weight location. Your weight restriction is 1500lbs. Be advised, you may be required to pay excess cost if you choose to move more than your weight restriction.

    +

    What this means to you:
    If you are doing a Personally Procured Move (PPM), you can start moving your personal property.

    Next steps for a PPM:

      From 07264da0191abb190903a8c68cbd407e9c8dbd53 Mon Sep 17 00:00:00 2001 From: deandreJones Date: Mon, 27 Jan 2025 13:52:04 -0600 Subject: [PATCH 17/22] add missing line to emaill test --- pkg/notifications/move_submitted_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/notifications/move_submitted_test.go b/pkg/notifications/move_submitted_test.go index 75c2c9c33b7..7717901dae0 100644 --- a/pkg/notifications/move_submitted_test.go +++ b/pkg/notifications/move_submitted_test.go @@ -387,7 +387,7 @@ func (suite *NotificationSuite) TestMoveSubmittedHTMLTemplateRenderWithoutGovCou

      Your standard weight allowance: 7,999 pounds. That is how much combined weight the government will pay for all movements between authorized locations under your - orders. + orders. Be advised, if you are moving to an administratively restricted HHG weight location this amount could be less.

      From fc1c2e0d908d3052e0b7016a42ed859cd63f2614 Mon Sep 17 00:00:00 2001 From: deandreJones Date: Thu, 30 Jan 2025 16:39:31 +0000 Subject: [PATCH 18/22] remove old file --- migrations/app/migrations_manifest.txt | 1 - .../app/schema/20250107184554_add_weight_restriction.up.sql | 4 ---- 2 files changed, 5 deletions(-) delete mode 100644 migrations/app/schema/20250107184554_add_weight_restriction.up.sql diff --git a/migrations/app/migrations_manifest.txt b/migrations/app/migrations_manifest.txt index ced104e9f39..8f582e3dbde 100644 --- a/migrations/app/migrations_manifest.txt +++ b/migrations/app/migrations_manifest.txt @@ -1071,7 +1071,6 @@ 20241230190638_remove_AK_zips_from_zip3.up.sql 20241230190647_add_missing_AK_zips_to_zip3_distances.up.sql 20250103180420_update_pricing_proc_to_use_local_price_variable.up.sql -20250107184554_add_weight_restriction.up.sql 20250110001339_update_nts_release_enum_name.up.sql 20250110153428_add_shipment_address_updates_to_move_history.up.sql 20250110214012_homesafeconnect_cert.up.sql diff --git a/migrations/app/schema/20250107184554_add_weight_restriction.up.sql b/migrations/app/schema/20250107184554_add_weight_restriction.up.sql deleted file mode 100644 index 13166af20ee..00000000000 --- a/migrations/app/schema/20250107184554_add_weight_restriction.up.sql +++ /dev/null @@ -1,4 +0,0 @@ -ALTER TABLE entitlements -ADD column IF NOT EXISTS weight_restriction int; - -COMMENT ON COLUMN entitlements.weight_restriction IS 'The weight restricted on the move to a particular location'; From 0ecfd7ffcb6ad7eac2dab93512572e5363acb467 Mon Sep 17 00:00:00 2001 From: deandreJones Date: Thu, 30 Jan 2025 18:34:26 +0000 Subject: [PATCH 19/22] spaces --- pkg/handlers/ghcapi/internal/payloads/model_to_payload.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pkg/handlers/ghcapi/internal/payloads/model_to_payload.go b/pkg/handlers/ghcapi/internal/payloads/model_to_payload.go index 655699f8e31..e1e901eb569 100644 --- a/pkg/handlers/ghcapi/internal/payloads/model_to_payload.go +++ b/pkg/handlers/ghcapi/internal/payloads/model_to_payload.go @@ -760,7 +760,9 @@ func Entitlement(entitlement *models.Entitlement) *ghcmessages.Entitlements { ETag: etag.GenerateEtag(entitlement.UpdatedAt), } -} // DutyLocation payload +} + +// DutyLocation payload func DutyLocation(dutyLocation *models.DutyLocation) *ghcmessages.DutyLocation { if dutyLocation == nil { return nil From 841230506bea9a57caedef624ac903d8678c21bb Mon Sep 17 00:00:00 2001 From: deandreJones Date: Mon, 3 Feb 2025 15:07:51 -0600 Subject: [PATCH 20/22] add nil check --- pkg/notifications/move_counseled.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/notifications/move_counseled.go b/pkg/notifications/move_counseled.go index a506a118eab..88b953ded93 100644 --- a/pkg/notifications/move_counseled.go +++ b/pkg/notifications/move_counseled.go @@ -92,7 +92,7 @@ func (m MoveCounseled) emails(appCtx appcontext.AppContext) ([]emailContent, err } var weightRestriction *int64 - if orders.Entitlement.WeightRestriction != nil { + if orders.Entitlement != nil && orders.Entitlement.WeightRestriction != nil { weightRestrictionInt64 := int64(*orders.Entitlement.WeightRestriction) weightRestriction = &weightRestrictionInt64 } From 567586b9b7d11f4099926f920bb59f8a1ec47ad8 Mon Sep 17 00:00:00 2001 From: deandreJones Date: Tue, 4 Feb 2025 13:50:44 -0600 Subject: [PATCH 21/22] updates --- pkg/notifications/move_counseled.go | 7 +++++-- pkg/notifications/move_counseled_test.go | 4 ++-- .../Customer/MtoShipmentForm/MtoShipmentForm.jsx | 2 +- src/pages/MyMove/MovingInfo.jsx | 5 +---- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/pkg/notifications/move_counseled.go b/pkg/notifications/move_counseled.go index 88b953ded93..ea54b9df00b 100644 --- a/pkg/notifications/move_counseled.go +++ b/pkg/notifications/move_counseled.go @@ -6,6 +6,7 @@ import ( html "html/template" text "text/template" + "github.com/dustin/go-humanize" "github.com/gofrs/uuid" "go.uber.org/zap" @@ -97,13 +98,15 @@ func (m MoveCounseled) emails(appCtx appcontext.AppContext) ([]emailContent, err weightRestriction = &weightRestrictionInt64 } + weightRestrictionFormatted := humanize.Comma(int64(*weightRestriction)) + htmlBody, textBody, err := m.renderTemplates(appCtx, MoveCounseledEmailData{ OriginDutyLocation: originDutyLocationName, DestinationLocation: destinationAddress, Locator: move.Locator, MyMoveLink: MyMoveLink, ActualExpenseReimbursement: actualExpenseReimbursement, - WeightRestriction: weightRestriction, + WeightRestriction: weightRestrictionFormatted, }) if err != nil { @@ -142,7 +145,7 @@ type MoveCounseledEmailData struct { Locator string MyMoveLink string ActualExpenseReimbursement bool - WeightRestriction *int64 + WeightRestriction string } // RenderHTML renders the html for the email diff --git a/pkg/notifications/move_counseled_test.go b/pkg/notifications/move_counseled_test.go index c7d90ab77d6..648c7c32c8a 100644 --- a/pkg/notifications/move_counseled_test.go +++ b/pkg/notifications/move_counseled_test.go @@ -287,12 +287,12 @@ func (suite *NotificationSuite) TestMoveCounseledHTMLTemplateRenderWithWeightRes Locator: "abc123", MyMoveLink: MyMoveLink, ActualExpenseReimbursement: true, - WeightRestriction: models.Int64Pointer(1500), + WeightRestriction: "1500", } expectedHTMLContent := `

      *** DO NOT REPLY directly to this email ***

      This is a confirmation that your counselor has approved move details for the assigned move code abc123 from origDutyLocation to destDutyLocation in the MilMove system.

      -

      Your move has been identified as going to an administratively restricted HHG weight location. Your weight restriction is 1500lbs. Be advised, you may be required to pay excess cost if you choose to move more than your weight restriction.

      +

      Your move has been identified as going to an administratively restricted HHG weight location. Your weight restriction is 1,500lbs. Be advised, you may be required to pay excess cost if you choose to move more than your weight restriction.

      What this means to you:
      If you are doing a Personally Procured Move (PPM), you can start moving your personal property.

      Next steps for a PPM: diff --git a/src/components/Customer/MtoShipmentForm/MtoShipmentForm.jsx b/src/components/Customer/MtoShipmentForm/MtoShipmentForm.jsx index a7ca94c2646..d8e04da7494 100644 --- a/src/components/Customer/MtoShipmentForm/MtoShipmentForm.jsx +++ b/src/components/Customer/MtoShipmentForm/MtoShipmentForm.jsx @@ -321,7 +321,7 @@ class MtoShipmentForm extends Component { )} for this UB shipment. The weight of your UB is part of your authorized weight allowance` : ` Your standard weight allowance is ${formatWeight( orders.authorizedWeight, - )} total. If you are moving to an administratively restricted HHG weight location this amount may be less. `} + )} total. If you are moving to an administratively restricted HHG weight location this amount may be less`} . You’ll be billed for any excess weight you move. diff --git a/src/pages/MyMove/MovingInfo.jsx b/src/pages/MyMove/MovingInfo.jsx index c7afcb3b38a..5ea1a6d7b2c 100644 --- a/src/pages/MyMove/MovingInfo.jsx +++ b/src/pages/MyMove/MovingInfo.jsx @@ -86,10 +86,7 @@ export class MovingInfo extends Component { icon="weight-hanging" headline={`Your standard weight allowance is ${formatWeight(entitlementWeight)} for this move.`} > -

      - If you are moving to an administratively restricted HHG weight location this amount may be less. You - will have to pay for any excess weight above this amount. -

      +

      If you are moving to an administratively restricted HHG weight location this amount may be less.

      You will have to pay for any excess weight above this allowance, so work hard to make sure you stay within your weight limit. From f9d4a8c18312acc83fcb99917d4edee19104cdad Mon Sep 17 00:00:00 2001 From: deandreJones Date: Tue, 4 Feb 2025 14:32:17 -0600 Subject: [PATCH 22/22] fix ppm verbiage --- .../EstimatedWeightsProGearForm.jsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/Customer/PPM/Booking/EstimatedWeightsProGearForm/EstimatedWeightsProGearForm.jsx b/src/components/Customer/PPM/Booking/EstimatedWeightsProGearForm/EstimatedWeightsProGearForm.jsx index b83ed79aea2..98fb38d22ec 100644 --- a/src/components/Customer/PPM/Booking/EstimatedWeightsProGearForm/EstimatedWeightsProGearForm.jsx +++ b/src/components/Customer/PPM/Booking/EstimatedWeightsProGearForm/EstimatedWeightsProGearForm.jsx @@ -53,9 +53,9 @@ const EstimatedWeightsProGearForm = ({ orders, mtoShipment, onSubmit, onBack }) return (

      - {`Total weight allowance for your move: ${formatWeight( + {`Remember: Your standard weight allowance is: ${formatWeight( weightAuthorized, - )}`} + )}. If you are moving to an administratively restricted HHG weight location this amount may be less. You will not be reimbursed for any excess weight you move.`}

      PPM