From 9210233dcfdd0a9d5f9ed429f0971f32311ddd87 Mon Sep 17 00:00:00 2001 From: Daniel Jordan Date: Tue, 7 Jan 2025 21:11:34 +0000 Subject: [PATCH 01/13] initial commit, workin on it --- pkg/models/re_contract.go | 32 ++++++++++ pkg/models/re_rate_area.go | 4 +- pkg/models/re_rate_area_test.go | 6 +- .../per_unit_cents_lookup.go | 8 +-- .../shipment_address_update_requester.go | 59 ++++++++++++------- 5 files changed, 78 insertions(+), 31 deletions(-) diff --git a/pkg/models/re_contract.go b/pkg/models/re_contract.go index 2c4b4a28e35..c0576ce403b 100644 --- a/pkg/models/re_contract.go +++ b/pkg/models/re_contract.go @@ -1,12 +1,17 @@ package models import ( + "database/sql" + "fmt" "time" "github.com/gobuffalo/pop/v6" "github.com/gobuffalo/validate/v3" "github.com/gobuffalo/validate/v3/validators" "github.com/gofrs/uuid" + + "github.com/transcom/mymove/pkg/appcontext" + "github.com/transcom/mymove/pkg/apperror" ) // ReContract represents a contract with pricing information @@ -32,3 +37,30 @@ func (r *ReContract) Validate(_ *pop.Connection) (*validate.Errors, error) { &validators.StringIsPresent{Field: r.Name, Name: "Name"}, ), nil } + +func FetchContractForMove(appCtx appcontext.AppContext, moveID uuid.UUID) (ReContract, error) { + var move Move + err := appCtx.DB().Find(&move, moveID) + if err != nil { + if err == sql.ErrNoRows { + return ReContract{}, apperror.NewNotFoundError(moveID, "looking for Move") + } + return ReContract{}, err + } + + if move.AvailableToPrimeAt == nil { + return ReContract{}, apperror.NewConflictError(moveID, "unable to pick contract because move is not available to prime") + } + + var contractYear ReContractYear + err = appCtx.DB().EagerPreload("Contract").Where("? between start_date and end_date", move.AvailableToPrimeAt). + First(&contractYear) + if err != nil { + if err == sql.ErrNoRows { + return ReContract{}, apperror.NewNotFoundError(uuid.Nil, fmt.Sprintf("no contract year found for %s", move.AvailableToPrimeAt.String())) + } + return ReContract{}, err + } + + return contractYear.Contract, nil +} diff --git a/pkg/models/re_rate_area.go b/pkg/models/re_rate_area.go index 7b613b42a28..72ae7116ab7 100644 --- a/pkg/models/re_rate_area.go +++ b/pkg/models/re_rate_area.go @@ -56,8 +56,8 @@ func FetchReRateAreaItem(tx *pop.Connection, contractID uuid.UUID, code string) } // a db stored proc that takes in an address id & a service code to get the rate area id for an address -func FetchRateAreaID(db *pop.Connection, addressID uuid.UUID, serviceID uuid.UUID, contractID uuid.UUID) (uuid.UUID, error) { - if addressID != uuid.Nil && serviceID != uuid.Nil && contractID != uuid.Nil { +func FetchRateAreaID(db *pop.Connection, addressID uuid.UUID, serviceID *uuid.UUID, contractID uuid.UUID) (uuid.UUID, error) { + if addressID != uuid.Nil && serviceID != nil && contractID != uuid.Nil { var rateAreaID uuid.UUID err := db.RawQuery("SELECT get_rate_area_id($1, $2, $3)", addressID, serviceID, contractID).First(&rateAreaID) if err != nil { diff --git a/pkg/models/re_rate_area_test.go b/pkg/models/re_rate_area_test.go index 87f310c2088..ab279418976 100644 --- a/pkg/models/re_rate_area_test.go +++ b/pkg/models/re_rate_area_test.go @@ -36,16 +36,14 @@ func (suite *ModelSuite) TestFetchRateAreaID() { service := factory.FetchReServiceByCode(suite.DB(), models.ReServiceCodeIHPK) contract := testdatagen.FetchOrMakeReContract(suite.DB(), testdatagen.Assertions{}) address := factory.BuildAddress(suite.DB(), nil, nil) - rateAreaId, err := models.FetchRateAreaID(suite.DB(), address.ID, service.ID, contract.ID) + rateAreaId, err := models.FetchRateAreaID(suite.DB(), address.ID, &service.ID, contract.ID) suite.NotNil(rateAreaId) suite.NoError(err) }) suite.Run("fail - receive error when not all values are provided", func() { - var nilUuid uuid.UUID - contract := testdatagen.FetchOrMakeReContract(suite.DB(), testdatagen.Assertions{}) address := factory.BuildAddress(suite.DB(), nil, nil) - rateAreaId, err := models.FetchRateAreaID(suite.DB(), address.ID, nilUuid, contract.ID) + rateAreaId, err := models.FetchRateAreaID(suite.DB(), address.ID, nil, uuid.Nil) suite.Equal(uuid.Nil, rateAreaId) suite.Error(err) }) diff --git a/pkg/payment_request/service_param_value_lookups/per_unit_cents_lookup.go b/pkg/payment_request/service_param_value_lookups/per_unit_cents_lookup.go index b339fbf43dd..68d59f13d27 100644 --- a/pkg/payment_request/service_param_value_lookups/per_unit_cents_lookup.go +++ b/pkg/payment_request/service_param_value_lookups/per_unit_cents_lookup.go @@ -24,7 +24,7 @@ func (p PerUnitCentsLookup) lookup(appCtx appcontext.AppContext, s *ServiceItemP switch p.ServiceItem.ReService.Code { case models.ReServiceCodeIHPK: // IHPK: Need rate area ID for the pickup address - rateAreaID, err := models.FetchRateAreaID(appCtx.DB(), *p.MTOShipment.PickupAddressID, serviceID, contractID) + rateAreaID, err := models.FetchRateAreaID(appCtx.DB(), *p.MTOShipment.PickupAddressID, &serviceID, contractID) if err != nil { return "", fmt.Errorf("error fetching rate area id for shipment ID: %s and service ID %s: %s", p.MTOShipment.ID, serviceID, err) } @@ -43,7 +43,7 @@ func (p PerUnitCentsLookup) lookup(appCtx appcontext.AppContext, s *ServiceItemP case models.ReServiceCodeIHUPK: // IHUPK: Need rate area ID for the destination address - rateAreaID, err := models.FetchRateAreaID(appCtx.DB(), *p.MTOShipment.PickupAddressID, serviceID, contractID) + rateAreaID, err := models.FetchRateAreaID(appCtx.DB(), *p.MTOShipment.PickupAddressID, &serviceID, contractID) if err != nil { return "", fmt.Errorf("error fetching rate area id for shipment ID: %s and service ID %s: %s", p.MTOShipment.ID, serviceID, err) } @@ -62,11 +62,11 @@ func (p PerUnitCentsLookup) lookup(appCtx appcontext.AppContext, s *ServiceItemP case models.ReServiceCodeISLH: // ISLH: Need rate area IDs for origin and destination - originRateAreaID, err := models.FetchRateAreaID(appCtx.DB(), *p.MTOShipment.PickupAddressID, serviceID, contractID) + originRateAreaID, err := models.FetchRateAreaID(appCtx.DB(), *p.MTOShipment.PickupAddressID, &serviceID, contractID) if err != nil { return "", fmt.Errorf("error fetching rate area id for origin address for shipment ID: %s and service ID %s: %s", p.MTOShipment.ID, serviceID, err) } - destRateAreaID, err := models.FetchRateAreaID(appCtx.DB(), *p.MTOShipment.DestinationAddressID, serviceID, contractID) + destRateAreaID, err := models.FetchRateAreaID(appCtx.DB(), *p.MTOShipment.DestinationAddressID, &serviceID, contractID) if err != nil { return "", fmt.Errorf("error fetching rate area id for destination address for shipment ID: %s and service ID %s: %s", p.MTOShipment.ID, serviceID, err) } diff --git a/pkg/services/shipment_address_update/shipment_address_update_requester.go b/pkg/services/shipment_address_update/shipment_address_update_requester.go index a0ed36fccdd..1c06fb790a8 100644 --- a/pkg/services/shipment_address_update/shipment_address_update_requester.go +++ b/pkg/services/shipment_address_update/shipment_address_update_requester.go @@ -52,32 +52,49 @@ func (f *shipmentAddressUpdateRequester) isAddressChangeDistanceOver50(appCtx ap return true, nil } -func (f *shipmentAddressUpdateRequester) doesDeliveryAddressUpdateChangeServiceArea(appCtx appcontext.AppContext, contractID uuid.UUID, originalDeliveryAddress models.Address, newDeliveryAddress models.Address) (bool, error) { - var existingServiceArea models.ReZip3 - var actualServiceArea models.ReZip3 +func (f *shipmentAddressUpdateRequester) doesDeliveryAddressUpdateChangeServiceOrRateArea(appCtx appcontext.AppContext, contractID uuid.UUID, originalDeliveryAddress models.Address, newDeliveryAddress models.Address, shipment models.MTOShipment) (bool, error) { + if shipment.MarketCode == models.MarketCodeInternational { + // we need to make sure we didn't change rate areas + originalRateArea, err := models.FetchRateAreaID(appCtx.DB(), originalDeliveryAddress.ID, nil, contractID) + if err != nil || originalRateArea == uuid.Nil { + return false, err + } + newRateArea, err := models.FetchRateAreaID(appCtx.DB(), newDeliveryAddress.ID, nil, contractID) + if err != nil || newRateArea == uuid.Nil { + return false, err + } + if originalRateArea != newRateArea { + return true, nil + } else { + return false, nil + } + } else { + var existingServiceArea models.ReZip3 + var actualServiceArea models.ReZip3 - originalZip := originalDeliveryAddress.PostalCode[0:3] - destinationZip := newDeliveryAddress.PostalCode[0:3] + originalZip := originalDeliveryAddress.PostalCode[0:3] + destinationZip := newDeliveryAddress.PostalCode[0:3] - if originalZip == destinationZip { - // If the ZIP hasn't changed, we must be in the same service area - return false, nil - } + if originalZip == destinationZip { + // If the ZIP hasn't changed, we must be in the same service area + return false, nil + } - err := appCtx.DB().Where("zip3 = ?", originalZip).Where("contract_id = ?", contractID).First(&existingServiceArea) - if err != nil { - return false, err - } + err := appCtx.DB().Where("zip3 = ?", originalZip).Where("contract_id = ?", contractID).First(&existingServiceArea) + if err != nil { + return false, err + } - err = appCtx.DB().Where("zip3 = ?", destinationZip).Where("contract_id = ?", contractID).First(&actualServiceArea) - if err != nil { - return false, err - } + err = appCtx.DB().Where("zip3 = ?", destinationZip).Where("contract_id = ?", contractID).First(&actualServiceArea) + if err != nil { + return false, err + } - if existingServiceArea.DomesticServiceAreaID != actualServiceArea.DomesticServiceAreaID { - return true, nil + if existingServiceArea.DomesticServiceAreaID != actualServiceArea.DomesticServiceAreaID { + return true, nil + } + return false, nil } - return false, nil } func (f *shipmentAddressUpdateRequester) doesDeliveryAddressUpdateChangeMileageBracket(appCtx appcontext.AppContext, originalPickupAddress models.Address, originalDeliveryAddress, newDeliveryAddress models.Address) (bool, error) { @@ -333,7 +350,7 @@ func (f *shipmentAddressUpdateRequester) RequestShipmentDeliveryAddressUpdate(ap return nil, err } - updateNeedsTOOReview, err := f.doesDeliveryAddressUpdateChangeServiceArea(appCtx, contract.ID, addressUpdate.OriginalAddress, newAddress) + updateNeedsTOOReview, err := f.doesDeliveryAddressUpdateChangeServiceOrRateArea(appCtx, contract.ID, addressUpdate.OriginalAddress, newAddress, shipment) if err != nil { return nil, err } From 67c56e16a53ab63f7dbda489589bdb7d5f28d670 Mon Sep 17 00:00:00 2001 From: Daniel Jordan Date: Wed, 8 Jan 2025 17:09:26 +0000 Subject: [PATCH 02/13] added functionality, waiting on answers to questions for 50 mile changes for international shipments --- pkg/models/re_oconus_rate_areas.go | 14 +++++++ pkg/models/re_rate_area.go | 16 +++++++- .../shipment_address_update_requester.go | 37 +++++++++++++------ .../AddressUpdatePreview.jsx | 29 ++++++++++----- ...hipmentAddressUpdateReviewRequestModal.jsx | 5 +-- 5 files changed, 76 insertions(+), 25 deletions(-) diff --git a/pkg/models/re_oconus_rate_areas.go b/pkg/models/re_oconus_rate_areas.go index 72b85773159..84def705f95 100644 --- a/pkg/models/re_oconus_rate_areas.go +++ b/pkg/models/re_oconus_rate_areas.go @@ -3,6 +3,7 @@ package models import ( "time" + "github.com/gobuffalo/pop/v6" "github.com/gofrs/uuid" ) @@ -19,3 +20,16 @@ type OconusRateArea struct { func (o OconusRateArea) TableName() string { return "re_oconus_rate_areas" } + +func FetchOconusRateArea(db *pop.Connection, zip string) (*OconusRateArea, error) { + var reOconusRateArea OconusRateArea + err := db.Q(). + InnerJoin("re_rate_areas ra", "re_oconus_rate_areas.rate_area_id = ra.id"). + InnerJoin("us_post_region_cities upc", "upc.id = re_oconus_rate_areas.us_post_region_cities_id"). + Where("upc.uspr_zip_id = ?", zip). + First(&reOconusRateArea) + if err != nil { + return nil, err + } + return &reOconusRateArea, nil +} diff --git a/pkg/models/re_rate_area.go b/pkg/models/re_rate_area.go index 72ae7116ab7..8eb7c56328f 100644 --- a/pkg/models/re_rate_area.go +++ b/pkg/models/re_rate_area.go @@ -57,7 +57,7 @@ func FetchReRateAreaItem(tx *pop.Connection, contractID uuid.UUID, code string) // a db stored proc that takes in an address id & a service code to get the rate area id for an address func FetchRateAreaID(db *pop.Connection, addressID uuid.UUID, serviceID *uuid.UUID, contractID uuid.UUID) (uuid.UUID, error) { - if addressID != uuid.Nil && serviceID != nil && contractID != uuid.Nil { + if addressID != uuid.Nil && contractID != uuid.Nil { var rateAreaID uuid.UUID err := db.RawQuery("SELECT get_rate_area_id($1, $2, $3)", addressID, serviceID, contractID).First(&rateAreaID) if err != nil { @@ -67,3 +67,17 @@ func FetchRateAreaID(db *pop.Connection, addressID uuid.UUID, serviceID *uuid.UU } return uuid.Nil, fmt.Errorf("error fetching rate area ID - required parameters not provided") } + +func FetchConusRateAreaByPostalCode(db *pop.Connection, zip string, contractID uuid.UUID) (*ReRateArea, error) { + var reRateArea ReRateArea + postalCode := zip[0:3] + err := db.Q(). + InnerJoin("re_zip3s rz", "rz.rate_area_id = re_rate_areas.id"). + Where("zip3 = ?", postalCode). + Where("re_rate_areas.contract_id = ?", contractID). + First(&reRateArea) + if err != nil { + return nil, err + } + return &reRateArea, nil +} diff --git a/pkg/services/shipment_address_update/shipment_address_update_requester.go b/pkg/services/shipment_address_update/shipment_address_update_requester.go index 1c06fb790a8..a1fef897a65 100644 --- a/pkg/services/shipment_address_update/shipment_address_update_requester.go +++ b/pkg/services/shipment_address_update/shipment_address_update_requester.go @@ -38,10 +38,10 @@ func NewShipmentAddressUpdateRequester(planner route.Planner, addressCreator ser } } -func (f *shipmentAddressUpdateRequester) isAddressChangeDistanceOver50(appCtx appcontext.AppContext, addressUpdate models.ShipmentAddressUpdate) (bool, error) { +func (f *shipmentAddressUpdateRequester) isAddressChangeDistanceOver50(appCtx appcontext.AppContext, addressUpdate models.ShipmentAddressUpdate, isInternationalShipment bool) (bool, error) { - //We calculate and set the distance between the old and new address - distance, err := f.planner.ZipTransitDistance(appCtx, addressUpdate.OriginalAddress.PostalCode, addressUpdate.NewAddress.PostalCode, false, false) + // We calculate and set the distance between the old and new address + distance, err := f.planner.ZipTransitDistance(appCtx, addressUpdate.OriginalAddress.PostalCode, addressUpdate.NewAddress.PostalCode, false, isInternationalShipment) if err != nil { return false, err } @@ -53,17 +53,30 @@ func (f *shipmentAddressUpdateRequester) isAddressChangeDistanceOver50(appCtx ap } func (f *shipmentAddressUpdateRequester) doesDeliveryAddressUpdateChangeServiceOrRateArea(appCtx appcontext.AppContext, contractID uuid.UUID, originalDeliveryAddress models.Address, newDeliveryAddress models.Address, shipment models.MTOShipment) (bool, error) { + // international shipments find their rate areas differently than domestic if shipment.MarketCode == models.MarketCodeInternational { - // we need to make sure we didn't change rate areas + // we already have the origin address in the db so we can check the rate area using the db func originalRateArea, err := models.FetchRateAreaID(appCtx.DB(), originalDeliveryAddress.ID, nil, contractID) if err != nil || originalRateArea == uuid.Nil { return false, err } - newRateArea, err := models.FetchRateAreaID(appCtx.DB(), newDeliveryAddress.ID, nil, contractID) - if err != nil || newRateArea == uuid.Nil { + // since the new address isn't created yet we can't use the db func since it doesn't have an id, + // we need to manually find the rate area using the postal code + var updateRateArea uuid.UUID + newRateArea, err := models.FetchOconusRateArea(appCtx.DB(), newDeliveryAddress.PostalCode) + if err != nil && err != sql.ErrNoRows { return false, err + } else if err == sql.ErrNoRows { // if we got no rows then the new address is likely CONUS + newRateArea, err := models.FetchConusRateAreaByPostalCode(appCtx.DB(), newDeliveryAddress.PostalCode, contractID) + if err != nil && err != sql.ErrNoRows { + return false, err + } + updateRateArea = newRateArea.ID + } else { + updateRateArea = newRateArea.RateAreaId } - if originalRateArea != newRateArea { + // if these are different, we need the TOO to approve this request since it will change ISLH pricing + if originalRateArea != updateRateArea { return true, nil } else { return false, nil @@ -355,7 +368,8 @@ func (f *shipmentAddressUpdateRequester) RequestShipmentDeliveryAddressUpdate(ap return nil, err } - if !updateNeedsTOOReview { + // international shipments don't need to be concerned with shorthaul/linehaul + if !updateNeedsTOOReview && shipment.MarketCode != models.MarketCodeInternational { if shipment.ShipmentType == models.MTOShipmentTypeHHG { updateNeedsTOOReview, err = f.doesDeliveryAddressUpdateChangeShipmentPricingType(*shipment.PickupAddress, addressUpdate.OriginalAddress, newAddress) if err != nil { @@ -371,7 +385,7 @@ func (f *shipmentAddressUpdateRequester) RequestShipmentDeliveryAddressUpdate(ap } } - if !updateNeedsTOOReview { + if !updateNeedsTOOReview && shipment.MarketCode != models.MarketCodeInternational { if shipment.ShipmentType == models.MTOShipmentTypeHHG { updateNeedsTOOReview, err = f.doesDeliveryAddressUpdateChangeMileageBracket(appCtx, *shipment.PickupAddress, addressUpdate.OriginalAddress, newAddress) if err != nil { @@ -388,7 +402,8 @@ func (f *shipmentAddressUpdateRequester) RequestShipmentDeliveryAddressUpdate(ap } if !updateNeedsTOOReview { - updateNeedsTOOReview, err = f.isAddressChangeDistanceOver50(appCtx, addressUpdate) + internationalShipment := shipment.MarketCode == models.MarketCodeInternational + updateNeedsTOOReview, err = f.isAddressChangeDistanceOver50(appCtx, addressUpdate, internationalShipment) if err != nil { return nil, err } @@ -407,7 +422,7 @@ func (f *shipmentAddressUpdateRequester) RequestShipmentDeliveryAddressUpdate(ap return apperror.NewQueryError("ShipmentAddressUpdate", txnErr, "error saving shipment address update request") } - //Get the move + // Get the move var move models.Move err := txnAppCtx.DB().Find(&move, shipment.MoveTaskOrderID) if err != nil { diff --git a/src/components/Office/AddressUpdatePreview/AddressUpdatePreview.jsx b/src/components/Office/AddressUpdatePreview/AddressUpdatePreview.jsx index 74a2ac1e06b..7ab6cd9cf4b 100644 --- a/src/components/Office/AddressUpdatePreview/AddressUpdatePreview.jsx +++ b/src/components/Office/AddressUpdatePreview/AddressUpdatePreview.jsx @@ -9,23 +9,34 @@ import DataTable from 'components/DataTable/index'; import { formatTwoLineAddress } from 'utils/shipmentDisplay'; import DataTableWrapper from 'components/DataTableWrapper'; import { ShipmentAddressUpdateShape } from 'types'; +import { MARKET_CODES } from 'shared/constants'; -const AddressUpdatePreview = ({ deliveryAddressUpdate }) => { +const AddressUpdatePreview = ({ deliveryAddressUpdate, shipment }) => { const { originalAddress, newAddress, contractorRemarks } = deliveryAddressUpdate; const newSitMileage = deliveryAddressUpdate.newSitDistanceBetween; + const { marketCode } = shipment; return (

Delivery Address

- - If approved, the requested update to the delivery address will change one or all of the following: - Service area. - Mileage bracket for direct delivery. - - ZIP3 resulting in Domestic Shorthaul (DSH) changing to Domestic Linehaul (DLH) or vice versa. + {marketCode === MARKET_CODES.DOMESTIC ? ( + + If approved, the requested update to the delivery address will change one or all of the following: + Service area. + Mileage bracket for direct delivery. + + ZIP3 resulting in Domestic Shorthaul (DSH) changing to Domestic Linehaul (DLH) or vice versa. + + Approvals will result in updated pricing for this shipment. Customer may be subject to excess costs. + + ) : ( + + If approved, the requested update to the delivery address will change one or all of the following: + The rate area for the international shipment destination address. + Pricing for the international shipping & linehaul service item. + Approvals will result in updated pricing for this shipment. Customer may be subject to excess costs. - Approvals will result in updated pricing for this shipment. Customer may be subject to excess costs. - + )} {newSitMileage > 50 ? ( diff --git a/src/components/Office/ShipmentAddressUpdateReviewRequestModal/ShipmentAddressUpdateReviewRequestModal.jsx b/src/components/Office/ShipmentAddressUpdateReviewRequestModal/ShipmentAddressUpdateReviewRequestModal.jsx index 4325db1565f..cf1575395de 100644 --- a/src/components/Office/ShipmentAddressUpdateReviewRequestModal/ShipmentAddressUpdateReviewRequestModal.jsx +++ b/src/components/Office/ShipmentAddressUpdateReviewRequestModal/ShipmentAddressUpdateReviewRequestModal.jsx @@ -60,10 +60,7 @@ export const ShipmentAddressUpdateReviewRequestModal = ({ return (
- +

Review Request

From 200a5018533bf84abbd4d01de69966c01fc47e42 Mon Sep 17 00:00:00 2001 From: Daniel Jordan Date: Wed, 8 Jan 2025 21:58:40 +0000 Subject: [PATCH 03/13] added functionality and test for address change, also adding in move history forgottens --- .../shipment_address_update_requester.go | 3 +- .../shipment_address_update_requester_test.go | 138 +++++++++++++++++- .../AddressUpdatePreview.jsx | 3 +- .../AddressUpdatePreview.test.jsx | 55 ++++++- .../Office/ShipmentForm/ShipmentForm.jsx | 1 + src/constants/MoveHistory/Database/Tables.js | 1 + .../reviewShipmentAddressUpdate.jsx | 27 ++++ .../reviewShipmentAddressUpdate.test.jsx | 81 ++++++++++ .../updateServiceItemPricingAndWeights.jsx | 42 ++++++ ...pdateServiceItemPricingAndWeights.test.jsx | 75 ++++++++++ .../MoveHistory/EventTemplates/index.js | 2 + .../MoveHistory/UIDisplay/Operations.js | 1 + 12 files changed, 423 insertions(+), 6 deletions(-) create mode 100644 src/constants/MoveHistory/EventTemplates/ReviewShipmentAddressUpdate/reviewShipmentAddressUpdate.jsx create mode 100644 src/constants/MoveHistory/EventTemplates/ReviewShipmentAddressUpdate/reviewShipmentAddressUpdate.test.jsx create mode 100644 src/constants/MoveHistory/EventTemplates/UpdateMTOServiceItem/updateServiceItemPricingAndWeights.jsx create mode 100644 src/constants/MoveHistory/EventTemplates/UpdateMTOServiceItem/updateServiceItemPricingAndWeights.test.jsx diff --git a/pkg/services/shipment_address_update/shipment_address_update_requester.go b/pkg/services/shipment_address_update/shipment_address_update_requester.go index a1fef897a65..52f433b4bfc 100644 --- a/pkg/services/shipment_address_update/shipment_address_update_requester.go +++ b/pkg/services/shipment_address_update/shipment_address_update_requester.go @@ -504,6 +504,7 @@ func (f *shipmentAddressUpdateRequester) ReviewShipmentAddressChange(appCtx appc addressUpdate.Status = models.ShipmentAddressUpdateStatusApproved addressUpdate.OfficeRemarks = &tooRemarks shipment.DestinationAddress = &addressUpdate.NewAddress + shipment.DestinationAddressID = &addressUpdate.NewAddressID var haulPricingTypeHasChanged bool if shipment.ShipmentType == models.MTOShipmentTypeHHG { @@ -531,7 +532,7 @@ func (f *shipmentAddressUpdateRequester) ReviewShipmentAddressChange(appCtx appc // If the pricing type has changed then we automatically reject the DLH or DSH service item on the shipment since it is now inaccurate var approvedPaymentRequestsExistsForServiceItem bool - if haulPricingTypeHasChanged && len(shipment.MTOServiceItems) > 0 { + if haulPricingTypeHasChanged && len(shipment.MTOServiceItems) > 0 && shipment.MarketCode != models.MarketCodeInternational { serviceItems := shipment.MTOServiceItems autoRejectionRemark := "Automatically rejected due to change in destination address affecting the ZIP code qualification for short haul / line haul." var regeneratedServiceItems models.MTOServiceItems diff --git a/pkg/services/shipment_address_update/shipment_address_update_requester_test.go b/pkg/services/shipment_address_update/shipment_address_update_requester_test.go index 4330b13f9eb..b7579c61d16 100644 --- a/pkg/services/shipment_address_update/shipment_address_update_requester_test.go +++ b/pkg/services/shipment_address_update/shipment_address_update_requester_test.go @@ -66,7 +66,7 @@ func (suite *ShipmentAddressUpdateServiceSuite) TestCreateApprovedShipmentAddres moveRouter := moveservices.NewMoveRouter() addressUpdateRequester := NewShipmentAddressUpdateRequester(mockPlanner, addressCreator, moveRouter) - suite.Run("Successfully create ShipmentAddressUpdate", func() { + suite.Run("Successfully create ShipmentAddressUpdate for a domestic shipment", func() { mockPlanner.On("ZipTransitDistance", mock.AnythingOfType("*appcontext.appContext"), "90210", @@ -108,6 +108,142 @@ func (suite *ShipmentAddressUpdateServiceSuite) TestCreateApprovedShipmentAddres suite.Equal(newAddress.City, updatedShipment.DestinationAddress.City) }) + suite.Run("Successfully create ShipmentAddressUpdate for an international shipment that requires approval", func() { + mockPlanner.On("ZipTransitDistance", + mock.AnythingOfType("*appcontext.appContext"), + "90210", + "94535", + false, + false, + ).Return(2500, nil).Twice() + mockPlanner.On("ZipTransitDistance", + mock.AnythingOfType("*appcontext.appContext"), + "94535", + "94535", + false, + false, + ).Return(2500, nil).Once() + move := setupTestData() + + pickupAddress := factory.BuildAddress(suite.DB(), []factory.Customization{ + { + Model: models.Address{ + StreetAddress1: "Tester Address", + City: "Des Moines", + State: "IA", + PostalCode: "50314", + IsOconus: models.BoolPointer(false), + }, + }, + }, nil) + destinationAddress := factory.BuildAddress(suite.DB(), []factory.Customization{ + { + Model: models.Address{ + StreetAddress1: "JBER", + City: "Anchorage", + State: "AK", + PostalCode: "99505", + IsOconus: models.BoolPointer(true), + }, + }, + }, nil) + shipment := factory.BuildMTOShipmentWithMove(&move, suite.DB(), []factory.Customization{ + { + Model: models.MTOShipment{ + MarketCode: models.MarketCodeInternational, + PickupAddressID: &pickupAddress.ID, + DestinationAddressID: &destinationAddress.ID, + }, + }, + }, nil) + + newAddress := models.Address{ + StreetAddress1: "Colder Ave.", + City: "Klawock", + State: "AK", + PostalCode: "99925", + } + suite.NotEmpty(move.MTOShipments) + update, err := addressUpdateRequester.RequestShipmentDeliveryAddressUpdate(suite.AppContextForTest(), shipment.ID, newAddress, "we really need to change the address", etag.GenerateEtag(shipment.UpdatedAt)) + suite.NoError(err) + suite.NotNil(update) + suite.Equal(models.ShipmentAddressUpdateStatusRequested, update.Status) + + // Make sure the destination address on the shipment was NOT updated + var updatedShipment models.MTOShipment + err = suite.DB().EagerPreload("DestinationAddress").Find(&updatedShipment, shipment.ID) + suite.NoError(err) + + suite.NotEqual(newAddress.StreetAddress1, updatedShipment.DestinationAddress.StreetAddress1) + suite.NotEqual(newAddress.PostalCode, updatedShipment.DestinationAddress.PostalCode) + suite.NotEqual(newAddress.City, updatedShipment.DestinationAddress.City) + }) + + suite.Run("Successfully create ShipmentAddressUpdate for an international shipment that requires approval", func() { + mockPlanner.On("ZipTransitDistance", + mock.AnythingOfType("*appcontext.appContext"), + "99505", + "99506", + false, + true, + ).Return(49, nil) + move := setupTestData() + + pickupAddress := factory.BuildAddress(suite.DB(), []factory.Customization{ + { + Model: models.Address{ + StreetAddress1: "Tester Address", + City: "Des Moines", + State: "IA", + PostalCode: "50314", + IsOconus: models.BoolPointer(false), + }, + }, + }, nil) + destinationAddress := factory.BuildAddress(suite.DB(), []factory.Customization{ + { + Model: models.Address{ + StreetAddress1: "JBER", + City: "Anchorage", + State: "AK", + PostalCode: "99505", + IsOconus: models.BoolPointer(true), + }, + }, + }, nil) + shipment := factory.BuildMTOShipmentWithMove(&move, suite.DB(), []factory.Customization{ + { + Model: models.MTOShipment{ + MarketCode: models.MarketCodeInternational, + PickupAddressID: &pickupAddress.ID, + DestinationAddressID: &destinationAddress.ID, + }, + }, + }, nil) + + // this shouldn't change the rate area + newAddress := models.Address{ + StreetAddress1: "Elsewhere Ave.", + City: "Anchorage", + State: "AK", + PostalCode: "99506", + } + suite.NotEmpty(move.MTOShipments) + update, err := addressUpdateRequester.RequestShipmentDeliveryAddressUpdate(suite.AppContextForTest(), shipment.ID, newAddress, "we really need to change the address", etag.GenerateEtag(shipment.UpdatedAt)) + suite.NoError(err) + suite.NotNil(update) + suite.Equal(models.ShipmentAddressUpdateStatusApproved, update.Status) + + // Make sure the destination address on the shipment was updated + var updatedShipment models.MTOShipment + err = suite.DB().EagerPreload("DestinationAddress").Find(&updatedShipment, shipment.ID) + suite.NoError(err) + + suite.Equal(newAddress.StreetAddress1, updatedShipment.DestinationAddress.StreetAddress1) + suite.Equal(newAddress.PostalCode, updatedShipment.DestinationAddress.PostalCode) + suite.Equal(newAddress.City, updatedShipment.DestinationAddress.City) + }) + suite.Run("Update with invalid etag should fail", func() { move := setupTestData() shipment := factory.BuildMTOShipmentWithMove(&move, suite.DB(), nil, nil) diff --git a/src/components/Office/AddressUpdatePreview/AddressUpdatePreview.jsx b/src/components/Office/AddressUpdatePreview/AddressUpdatePreview.jsx index 7ab6cd9cf4b..dc7e9d3a9d4 100644 --- a/src/components/Office/AddressUpdatePreview/AddressUpdatePreview.jsx +++ b/src/components/Office/AddressUpdatePreview/AddressUpdatePreview.jsx @@ -33,7 +33,8 @@ const AddressUpdatePreview = ({ deliveryAddressUpdate, shipment }) => { If approved, the requested update to the delivery address will change one or all of the following: The rate area for the international shipment destination address. - Pricing for the international shipping & linehaul service item. + Pricing for international shipping & linehaul. + Pricing for POD Fuel Surcharge (if applicable). Approvals will result in updated pricing for this shipment. Customer may be subject to excess costs. )} diff --git a/src/components/Office/AddressUpdatePreview/AddressUpdatePreview.test.jsx b/src/components/Office/AddressUpdatePreview/AddressUpdatePreview.test.jsx index c8578937e06..d95d3d0fef3 100644 --- a/src/components/Office/AddressUpdatePreview/AddressUpdatePreview.test.jsx +++ b/src/components/Office/AddressUpdatePreview/AddressUpdatePreview.test.jsx @@ -3,6 +3,8 @@ import { render, screen, waitFor } from '@testing-library/react'; import AddressUpdatePreview from './AddressUpdatePreview'; +import { MARKET_CODES } from 'shared/constants'; + const mockDeliveryAddressUpdateWithoutSIT = { contractorRemarks: 'Test Contractor Remark', id: 'c49f7921-5a6e-46b4-bb39-022583574453', @@ -66,9 +68,53 @@ const mockDeliveryAddressUpdateWithSIT = { }, status: 'REQUESTED', }; + +const domesticShipment = { + marketCode: MARKET_CODES.DOMESTIC, +}; + +const internationalShipment = { + marketCode: MARKET_CODES.INTERNATIONAL, +}; describe('AddressUpdatePreview', () => { - it('renders all of the address preview information', async () => { - render(); + it('renders all of the address preview information for an international shipment', async () => { + render( + , + ); + // Heading and alert present + expect(screen.getByRole('heading', { name: 'Delivery Address' })).toBeInTheDocument(); + expect(screen.getByTestId('alert')).toBeInTheDocument(); + expect(screen.getByTestId('alert')).toHaveTextContent( + 'If approved, the requested update to the delivery address will change one or all of the following:' + + 'The rate area for the international shipment destination address.' + + 'Pricing for international shipping & linehaul.' + + 'Pricing for POD Fuel Surcharge (if applicable).' + + 'Approvals will result in updated pricing for this shipment. Customer may be subject to excess costs.', + ); + const addressChangePreview = screen.getByTestId('address-change-preview'); + expect(addressChangePreview).toBeInTheDocument(); + const addresses = screen.getAllByTestId('two-line-address'); + expect(addresses).toHaveLength(2); + // Original Address + expect(addressChangePreview).toHaveTextContent('Original Delivery Address'); + expect(addresses[0]).toHaveTextContent('987 Any Avenue'); + expect(addresses[0]).toHaveTextContent('Fairfield, CA 94535'); + // New Address + expect(addressChangePreview).toHaveTextContent('Requested Delivery Address'); + expect(addresses[1]).toHaveTextContent('123 Any Street'); + expect(addresses[1]).toHaveTextContent('Beverly Hills, CA 90210'); + // Request details (contractor remarks) + expect(addressChangePreview).toHaveTextContent('Update request details'); + expect(addressChangePreview).toHaveTextContent('Contractor remarks: Test Contractor Remark'); + }); + + it('renders all of the address preview information for a domestic shipment', async () => { + render( + , + ); // Heading and alert present expect(screen.getByRole('heading', { name: 'Delivery Address' })).toBeInTheDocument(); expect(screen.getByTestId('alert')).toBeInTheDocument(); @@ -102,8 +148,11 @@ describe('AddressUpdatePreview', () => { expect(screen.queryByTestId('destSitAlert')).not.toBeInTheDocument(); }); }); + it('renders the destination SIT alert when shipment contains dest SIT service items', () => { - render(); + render( + , + ); // Heading and alert present expect(screen.getByRole('heading', { name: 'Delivery Address' })).toBeInTheDocument(); expect(screen.getByTestId('destSitAlert')).toBeInTheDocument(); diff --git a/src/components/Office/ShipmentForm/ShipmentForm.jsx b/src/components/Office/ShipmentForm/ShipmentForm.jsx index f4b0a723828..076212d6953 100644 --- a/src/components/Office/ShipmentForm/ShipmentForm.jsx +++ b/src/components/Office/ShipmentForm/ShipmentForm.jsx @@ -788,6 +788,7 @@ const ShipmentForm = (props) => { if (status === ADDRESS_UPDATE_STATUS.APPROVED) { setValues({ ...values, + hasDeliveryAddress: 'yes', delivery: { ...values.delivery, address: mtoShipment.deliveryAddressUpdate.newAddress, diff --git a/src/constants/MoveHistory/Database/Tables.js b/src/constants/MoveHistory/Database/Tables.js index e097f569adf..f860416dda7 100644 --- a/src/constants/MoveHistory/Database/Tables.js +++ b/src/constants/MoveHistory/Database/Tables.js @@ -19,4 +19,5 @@ export default { moving_expenses: 'moving_expenses', progear_weight_tickets: 'progear_weight_tickets', gsr_appeals: 'gsr_appeals', + shipment_address_updates: 'shipment_address_updates', }; diff --git a/src/constants/MoveHistory/EventTemplates/ReviewShipmentAddressUpdate/reviewShipmentAddressUpdate.jsx b/src/constants/MoveHistory/EventTemplates/ReviewShipmentAddressUpdate/reviewShipmentAddressUpdate.jsx new file mode 100644 index 00000000000..f46b20b2da4 --- /dev/null +++ b/src/constants/MoveHistory/EventTemplates/ReviewShipmentAddressUpdate/reviewShipmentAddressUpdate.jsx @@ -0,0 +1,27 @@ +import React from 'react'; + +import o from 'constants/MoveHistory/UIDisplay/Operations'; +import a from 'constants/MoveHistory/Database/Actions'; +import t from 'constants/MoveHistory/Database/Tables'; + +export default { + action: a.UPDATE, + eventName: o.reviewShipmentAddressUpdate, + tableName: t.moves, + getEventNameDisplay: () => { + return 'Shipment Destination Address Request'; + }, + getDetails: ({ changedValues }) => { + if (changedValues.status === 'APPROVED') { + return ( +
+ Status: Approved +
+ ); + } + if (changedValues.status === 'REJECTED') { + return 'Rejected'; + } + return null; + }, +}; diff --git a/src/constants/MoveHistory/EventTemplates/ReviewShipmentAddressUpdate/reviewShipmentAddressUpdate.test.jsx b/src/constants/MoveHistory/EventTemplates/ReviewShipmentAddressUpdate/reviewShipmentAddressUpdate.test.jsx new file mode 100644 index 00000000000..43edc996166 --- /dev/null +++ b/src/constants/MoveHistory/EventTemplates/ReviewShipmentAddressUpdate/reviewShipmentAddressUpdate.test.jsx @@ -0,0 +1,81 @@ +import { render, screen } from '@testing-library/react'; + +import getTemplate from 'constants/MoveHistory/TemplateManager'; +import o from 'constants/MoveHistory/UIDisplay/Operations'; +import a from 'constants/MoveHistory/Database/Actions'; +import t from 'constants/MoveHistory/Database/Tables'; +import e from 'constants/MoveHistory/EventTemplates/ReviewShipmentAddressUpdate/reviewShipmentAddressUpdate'; + +describe('when given a Review Shipment Address Update history record', () => { + const context = [ + { + name: 'Shipment', + }, + ]; + + it('displays the correct event name', () => { + const historyRecord = { + action: a.UPDATE, + changedValues: { + status: 'APPROVED', + }, + context, + eventName: o.reviewShipmentAddressUpdate, + tableName: t.moves, + }; + + const template = getTemplate(historyRecord); + expect(template).toMatchObject(e); + expect(template.getEventNameDisplay(historyRecord)).toEqual('Shipment Destination Address Request'); + }); + + it('displays the status as "Approved"', () => { + const historyRecord = { + action: a.UPDATE, + changedValues: { + status: 'APPROVED', + }, + context, + eventName: o.reviewShipmentAddressUpdate, + tableName: t.moves, + }; + + const template = getTemplate(historyRecord); + + render(template.getDetails(historyRecord)); + expect(screen.getByText('Status')).toBeInTheDocument(); + expect(screen.getByText(/Approved/)).toBeInTheDocument(); + }); + + it('displays the status as "Rejected"', () => { + const historyRecord = { + action: a.UPDATE, + changedValues: { + status: 'REJECTED', + }, + context, + eventName: o.reviewShipmentAddressUpdate, + tableName: t.moves, + }; + + const template = getTemplate(historyRecord); + + render(template.getDetails(historyRecord)); + expect(screen.getByText('Rejected')).toBeInTheDocument(); + }); + + it('returns null if the status is not "APPROVED" or "REJECTED"', () => { + const historyRecord = { + action: a.UPDATE, + changedValues: { + status: 'PENDING', + }, + context, + eventName: o.reviewShipmentAddressUpdate, + tableName: t.moves, + }; + + const template = getTemplate(historyRecord); + expect(template.getDetails(historyRecord)).toBeNull(); + }); +}); diff --git a/src/constants/MoveHistory/EventTemplates/UpdateMTOServiceItem/updateServiceItemPricingAndWeights.jsx b/src/constants/MoveHistory/EventTemplates/UpdateMTOServiceItem/updateServiceItemPricingAndWeights.jsx new file mode 100644 index 00000000000..1397c699d7b --- /dev/null +++ b/src/constants/MoveHistory/EventTemplates/UpdateMTOServiceItem/updateServiceItemPricingAndWeights.jsx @@ -0,0 +1,42 @@ +import React from 'react'; + +import o from 'constants/MoveHistory/UIDisplay/Operations'; +import a from 'constants/MoveHistory/Database/Actions'; +import t from 'constants/MoveHistory/Database/Tables'; +import { formatCents, formatWeight } from 'utils/formatters'; + +export default { + action: a.UPDATE, + eventName: o.updateMTOShipment, + tableName: t.mto_service_items, + getEventNameDisplay: ({ changedValues }) => { + if (changedValues.pricing_estimate) { + return 'Service item estimated price updated'; + } + if (changedValues.estimated_weight) { + return 'Service item estimated weight updated'; + } + return 'Service item updated'; + }, + getDetails: ({ changedValues, context }) => { + if (changedValues.pricing_estimate) { + return ( +
+ Service item: {context[0].name} +
+ Estimated Price: ${formatCents(changedValues.pricing_estimate)} +
+ ); + } + if (changedValues.estimated_weight) { + return ( +
+ Service item: {context[0].name} +
+ Estimated weight: {formatWeight(changedValues.estimated_weight)} +
+ ); + } + return null; + }, +}; diff --git a/src/constants/MoveHistory/EventTemplates/UpdateMTOServiceItem/updateServiceItemPricingAndWeights.test.jsx b/src/constants/MoveHistory/EventTemplates/UpdateMTOServiceItem/updateServiceItemPricingAndWeights.test.jsx new file mode 100644 index 00000000000..eae1e8fe630 --- /dev/null +++ b/src/constants/MoveHistory/EventTemplates/UpdateMTOServiceItem/updateServiceItemPricingAndWeights.test.jsx @@ -0,0 +1,75 @@ +import { render, screen } from '@testing-library/react'; + +import getTemplate from 'constants/MoveHistory/TemplateManager'; +import o from 'constants/MoveHistory/UIDisplay/Operations'; +import a from 'constants/MoveHistory/Database/Actions'; +import t from 'constants/MoveHistory/Database/Tables'; + +describe('when given an UpdateMTOServiceItem history record with pricing/weight changes', () => { + const context = [ + { + name: 'International Shipping & Linehaul', + shipment_type: 'HHG', + shipment_locator: 'RQ38D4-01', + shipment_id_abbr: 'a1b2c', + }, + ]; + + it('correctly matches the service item price update event', () => { + const historyRecord = { + action: a.UPDATE, + changedValues: { + pricing_estimate: 150000, + }, + context, + eventName: o.updateMTOShipment, + tableName: t.mto_service_items, + }; + + const template = getTemplate(historyRecord); + expect(template.getEventNameDisplay(historyRecord)).toEqual('Service item estimated price updated'); + + render(template.getDetails(historyRecord)); + expect(screen.getByText('Service item')).toBeInTheDocument(); + expect(screen.getByText(/International Shipping & Linehaul/)).toBeInTheDocument(); + expect(screen.getByText('Estimated Price')).toBeInTheDocument(); + expect(screen.getByText(/\$1,500\.00/)).toBeInTheDocument(); + }); + + it('correctly matches the service item weight update event', () => { + const historyRecord = { + action: a.UPDATE, + changedValues: { + estimated_weight: 1000, + }, + context, + eventName: o.updateMTOShipment, + tableName: t.mto_service_items, + }; + + const template = getTemplate(historyRecord); + expect(template.getEventNameDisplay(historyRecord)).toEqual('Service item estimated weight updated'); + + render(template.getDetails(historyRecord)); + expect(screen.getByText('Service item')).toBeInTheDocument(); + expect(screen.getByText(/International Shipping & Linehaul/)).toBeInTheDocument(); + expect(screen.getByText('Estimated weight')).toBeInTheDocument(); + expect(screen.getByText(/1,000 lbs/)).toBeInTheDocument(); + }); + + it('returns "Service item updated" for unknown changes', () => { + const historyRecord = { + action: a.UPDATE, + changedValues: { + unknownField: 'some value', + }, + context, + eventName: o.updateMTOShipment, + tableName: t.mto_service_items, + }; + + const template = getTemplate(historyRecord); + expect(template.getEventNameDisplay(historyRecord)).toEqual('Service item updated'); + expect(template.getDetails(historyRecord)).toBeNull(); + }); +}); diff --git a/src/constants/MoveHistory/EventTemplates/index.js b/src/constants/MoveHistory/EventTemplates/index.js index afcbd6b7060..66944d5fb42 100644 --- a/src/constants/MoveHistory/EventTemplates/index.js +++ b/src/constants/MoveHistory/EventTemplates/index.js @@ -29,6 +29,7 @@ export { default as updateBillableWeightAsTIO } from './UpdateBillableWeight/upd export { default as updateBillableWeightRemarksAsTIO } from './UpdateBillableWeight/updateBillableWeightRemarksAsTIO'; export { default as updateMoveTaskOrderStatus } from './UpdateMoveTaskOrderStatus/updateMoveTaskOrderStatus'; export { default as updateMTOServiceItem } from './UpdateMTOServiceItem/updateMTOServiceItem'; +export { default as updateServiceItemPricingAndWeights } from './UpdateMTOServiceItem/updateServiceItemPricingAndWeights'; export { default as updateMTOShipment } from './UpdateMTOShipment/updateMTOShipment'; export { default as updateMTOShipmentAgent } from './UpdateMTOShipment/updateMTOShipmentAgent'; export { default as updateMTOShipmentDeprecatePaymentRequest } from './UpdateMTOShipment/updateMTOShipmentDeprecatePaymentRequest'; @@ -109,3 +110,4 @@ export { default as moveCancelerPPMShipments } from './MoveCanceler/MoveCanceler export { default as cancelMove } from './CancelMove/CancelMove'; export { default as cancelMoveMTOShipments } from './CancelMove/CancelMoveMTOShipments'; export { default as cancelMovePPMShipments } from './CancelMove/CancelMovePPMShipments'; +export { default as reviewShipmentAddressUpdate } from './ReviewShipmentAddressUpdate/reviewShipmentAddressUpdate'; diff --git a/src/constants/MoveHistory/UIDisplay/Operations.js b/src/constants/MoveHistory/UIDisplay/Operations.js index 8ca4a3f5cd0..db1a84b0511 100644 --- a/src/constants/MoveHistory/UIDisplay/Operations.js +++ b/src/constants/MoveHistory/UIDisplay/Operations.js @@ -65,4 +65,5 @@ export default { addAppealToViolation: 'addAppealToViolation', // ghc.yaml addAppealToSeriousIncident: 'addAppealToSeriousIncident', // ghc.yaml cancelMove: 'cancelMove', // internal.yaml + reviewShipmentAddressUpdate: 'reviewShipmentAddressUpdate', // ghc.yaml }; From 0e7ae54ef28ba08031fbc25db00a29c927a3119e Mon Sep 17 00:00:00 2001 From: Daniel Jordan Date: Wed, 8 Jan 2025 22:12:11 +0000 Subject: [PATCH 04/13] added model test --- pkg/models/re_contract_test.go | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/pkg/models/re_contract_test.go b/pkg/models/re_contract_test.go index c2148951ede..9fca3401f22 100644 --- a/pkg/models/re_contract_test.go +++ b/pkg/models/re_contract_test.go @@ -1,7 +1,11 @@ package models_test import ( + "time" + + "github.com/transcom/mymove/pkg/factory" "github.com/transcom/mymove/pkg/models" + "github.com/transcom/mymove/pkg/testdatagen" ) func (suite *ModelSuite) TestReContractValidations() { @@ -23,3 +27,30 @@ func (suite *ModelSuite) TestReContractValidations() { suite.verifyValidationErrors(&emptyReContract, expErrors) }) } + +func (suite *ModelSuite) TestFetchContractForMove() { + suite.Run("finds valid contract", func() { + reContract := testdatagen.FetchOrMakeReContract(suite.DB(), testdatagen.Assertions{}) + testdatagen.FetchOrMakeReContractYear(suite.DB(), testdatagen.Assertions{ + ReContractYear: models.ReContractYear{ + Contract: reContract, + ContractID: reContract.ID, + StartDate: time.Now(), + EndDate: time.Now().Add(time.Hour * 12), + Escalation: 1.0, + EscalationCompounded: 1.0, + }, + }) + move := factory.BuildAvailableToPrimeMove(suite.DB(), nil, nil) + contract, err := models.FetchContractForMove(suite.AppContextForTest(), move.ID) + suite.NoError(err) + suite.Equal(contract.ID, reContract.ID) + }) + + suite.Run("returns error if no contract found", func() { + move := factory.BuildAvailableToPrimeMove(suite.DB(), nil, nil) + contract, err := models.FetchContractForMove(suite.AppContextForTest(), move.ID) + suite.Error(err) + suite.Equal(contract, models.ReContract{}) + }) +} From a66bfe0502734f861f5d630f23ba81f1f9b56b62 Mon Sep 17 00:00:00 2001 From: Maria Traskowsky Date: Fri, 10 Jan 2025 19:01:47 +0000 Subject: [PATCH 05/13] add shipment_address_updates info to move history logs --- migrations/app/migrations_manifest.txt | 1 + ...ent_address_updates_to_move_history.up.sql | 9 +++++++++ .../sql_scripts/move_history_fetcher.sql | 20 +++++++++++++++++++ pkg/gen/ghcapi/embedded_spec.go | 6 ++++-- .../review_shipment_address_update.go | 2 +- .../reviewShipmentAddressUpdate.jsx | 8 ++++++-- .../reviewShipmentAddressUpdate.test.jsx | 11 +++++----- swagger-def/ghc.yaml | 1 + swagger/ghc.yaml | 1 + 9 files changed, 49 insertions(+), 10 deletions(-) create mode 100644 migrations/app/schema/20250110153428_add_shipment_address_updates_to_move_history.up.sql diff --git a/migrations/app/migrations_manifest.txt b/migrations/app/migrations_manifest.txt index a0db58ee090..aa0be3bfeb8 100644 --- a/migrations/app/migrations_manifest.txt +++ b/migrations/app/migrations_manifest.txt @@ -1065,3 +1065,4 @@ 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 +20250110153428_add_shipment_address_updates_to_move_history.up.sql diff --git a/migrations/app/schema/20250110153428_add_shipment_address_updates_to_move_history.up.sql b/migrations/app/schema/20250110153428_add_shipment_address_updates_to_move_history.up.sql new file mode 100644 index 00000000000..ec30212f12c --- /dev/null +++ b/migrations/app/schema/20250110153428_add_shipment_address_updates_to_move_history.up.sql @@ -0,0 +1,9 @@ +-- adding shipment_address_updates table to move history so we can track the activity +SELECT add_audit_history_table( + target_table := 'shipment_address_updates', + audit_rows := BOOLEAN 't', + audit_query_text := BOOLEAN 't', + ignored_cols := ARRAY[ + 'created_at' + ] +); \ No newline at end of file diff --git a/pkg/assets/sql_scripts/move_history_fetcher.sql b/pkg/assets/sql_scripts/move_history_fetcher.sql index dacacf55d78..fc40dbdb138 100644 --- a/pkg/assets/sql_scripts/move_history_fetcher.sql +++ b/pkg/assets/sql_scripts/move_history_fetcher.sql @@ -642,6 +642,21 @@ WITH move AS ( JOIN gsr_appeals ON gsr_appeals.id = audit_history.object_id WHERE audit_history.table_name = 'gsr_appeals' ), + move_shipment_address_updates AS ( + SELECT shipment_address_updates.* + FROM + shipment_address_updates + WHERE + shipment_address_updates.shipment_id = (SELECT id FROM move_shipments.id) + ), + shipment_address_updates_logs as ( + SELECT audit_history.*, + NULL AS context, + NULL AS context_id + FROM + audit_history + JOIN move_shipment_address_updates ON move_shipment_address_updates.id = audit_history.object_id + ), combined_logs AS ( SELECT * @@ -732,6 +747,11 @@ WITH move AS ( * FROM gsr_appeals_logs + UNION + SELECT + * + FROM + shipment_address_updates_logs ) diff --git a/pkg/gen/ghcapi/embedded_spec.go b/pkg/gen/ghcapi/embedded_spec.go index 3b8e14d3e66..2b6a627eb98 100644 --- a/pkg/gen/ghcapi/embedded_spec.go +++ b/pkg/gen/ghcapi/embedded_spec.go @@ -5671,7 +5671,8 @@ func init() { "application/json" ], "tags": [ - "shipment" + "shipment", + "shipment_address_updates" ], "summary": "Allows TOO to review a shipment address update", "operationId": "reviewShipmentAddressUpdate", @@ -22268,7 +22269,8 @@ func init() { "application/json" ], "tags": [ - "shipment" + "shipment", + "shipment_address_updates" ], "summary": "Allows TOO to review a shipment address update", "operationId": "reviewShipmentAddressUpdate", diff --git a/pkg/gen/ghcapi/ghcoperations/shipment/review_shipment_address_update.go b/pkg/gen/ghcapi/ghcoperations/shipment/review_shipment_address_update.go index d4532a282ce..61dafe8bc53 100644 --- a/pkg/gen/ghcapi/ghcoperations/shipment/review_shipment_address_update.go +++ b/pkg/gen/ghcapi/ghcoperations/shipment/review_shipment_address_update.go @@ -36,7 +36,7 @@ func NewReviewShipmentAddressUpdate(ctx *middleware.Context, handler ReviewShipm } /* - ReviewShipmentAddressUpdate swagger:route PATCH /shipments/{shipmentID}/review-shipment-address-update shipment reviewShipmentAddressUpdate + ReviewShipmentAddressUpdate swagger:route PATCH /shipments/{shipmentID}/review-shipment-address-update shipment shipment_address_updates reviewShipmentAddressUpdate # Allows TOO to review a shipment address update diff --git a/src/constants/MoveHistory/EventTemplates/ReviewShipmentAddressUpdate/reviewShipmentAddressUpdate.jsx b/src/constants/MoveHistory/EventTemplates/ReviewShipmentAddressUpdate/reviewShipmentAddressUpdate.jsx index f46b20b2da4..3597791218a 100644 --- a/src/constants/MoveHistory/EventTemplates/ReviewShipmentAddressUpdate/reviewShipmentAddressUpdate.jsx +++ b/src/constants/MoveHistory/EventTemplates/ReviewShipmentAddressUpdate/reviewShipmentAddressUpdate.jsx @@ -7,7 +7,7 @@ import t from 'constants/MoveHistory/Database/Tables'; export default { action: a.UPDATE, eventName: o.reviewShipmentAddressUpdate, - tableName: t.moves, + tableName: t.shipment_address_updates, getEventNameDisplay: () => { return 'Shipment Destination Address Request'; }, @@ -20,7 +20,11 @@ export default { ); } if (changedValues.status === 'REJECTED') { - return 'Rejected'; + return ( +
+ Status: Rejected +
+ ); } return null; }, diff --git a/src/constants/MoveHistory/EventTemplates/ReviewShipmentAddressUpdate/reviewShipmentAddressUpdate.test.jsx b/src/constants/MoveHistory/EventTemplates/ReviewShipmentAddressUpdate/reviewShipmentAddressUpdate.test.jsx index 43edc996166..8077e4f324e 100644 --- a/src/constants/MoveHistory/EventTemplates/ReviewShipmentAddressUpdate/reviewShipmentAddressUpdate.test.jsx +++ b/src/constants/MoveHistory/EventTemplates/ReviewShipmentAddressUpdate/reviewShipmentAddressUpdate.test.jsx @@ -21,7 +21,7 @@ describe('when given a Review Shipment Address Update history record', () => { }, context, eventName: o.reviewShipmentAddressUpdate, - tableName: t.moves, + tableName: t.shipment_address_updates, }; const template = getTemplate(historyRecord); @@ -37,7 +37,7 @@ describe('when given a Review Shipment Address Update history record', () => { }, context, eventName: o.reviewShipmentAddressUpdate, - tableName: t.moves, + tableName: t.shipment_address_updates, }; const template = getTemplate(historyRecord); @@ -55,13 +55,14 @@ describe('when given a Review Shipment Address Update history record', () => { }, context, eventName: o.reviewShipmentAddressUpdate, - tableName: t.moves, + tableName: t.shipment_address_updates, }; const template = getTemplate(historyRecord); render(template.getDetails(historyRecord)); - expect(screen.getByText('Rejected')).toBeInTheDocument(); + expect(screen.getByText('Status')).toBeInTheDocument(); + expect(screen.getByText(/Rejected/)).toBeInTheDocument(); }); it('returns null if the status is not "APPROVED" or "REJECTED"', () => { @@ -72,7 +73,7 @@ describe('when given a Review Shipment Address Update history record', () => { }, context, eventName: o.reviewShipmentAddressUpdate, - tableName: t.moves, + tableName: t.shipment_address_updates, }; const template = getTemplate(historyRecord); diff --git a/swagger-def/ghc.yaml b/swagger-def/ghc.yaml index a0df07f3800..598cc954174 100644 --- a/swagger-def/ghc.yaml +++ b/swagger-def/ghc.yaml @@ -1380,6 +1380,7 @@ paths: $ref: '#/responses/ServerError' tags: - shipment + - shipment_address_updates 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 diff --git a/swagger/ghc.yaml b/swagger/ghc.yaml index 2456656b1c6..0d12e7d1b05 100644 --- a/swagger/ghc.yaml +++ b/swagger/ghc.yaml @@ -1429,6 +1429,7 @@ paths: $ref: '#/responses/ServerError' tags: - shipment + - shipment_address_updates description: >- This endpoint is used to approve a address update request. Office remarks are required. Approving the address update will update the From 77a620bd676e6ef215a3cca063650cb320c9821c Mon Sep 17 00:00:00 2001 From: Maria Traskowsky Date: Fri, 10 Jan 2025 19:41:07 +0000 Subject: [PATCH 06/13] storybook updates --- .../AddressUpdatePreview/AddressUpdatePreview.stories.jsx | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/components/Office/AddressUpdatePreview/AddressUpdatePreview.stories.jsx b/src/components/Office/AddressUpdatePreview/AddressUpdatePreview.stories.jsx index a77d9fcc672..46273140dca 100644 --- a/src/components/Office/AddressUpdatePreview/AddressUpdatePreview.stories.jsx +++ b/src/components/Office/AddressUpdatePreview/AddressUpdatePreview.stories.jsx @@ -2,6 +2,8 @@ import React from 'react'; import AddressUpdatePreview from './AddressUpdatePreview'; +import { MARKET_CODES } from 'shared/constants'; + const mockDeliveryAddressUpdate = { contractorRemarks: 'Test Contractor Remark', id: 'c49f7921-5a6e-46b4-bb39-022583574453', @@ -26,6 +28,10 @@ const mockDeliveryAddressUpdate = { status: 'REQUESTED', }; +const mockShipment = { + marketCode: MARKET_CODES.DOMESTIC, +}; + const destinationSITServiceItems = ['DDDSIT', 'DDFSIT', 'DDASIT', 'DDSFSC']; export default { @@ -39,6 +45,7 @@ export const preview = { ,
From 47ac9bcbd6f97ef4e8a9c3880fd791023230bddf Mon Sep 17 00:00:00 2001 From: Maria Traskowsky Date: Fri, 10 Jan 2025 20:57:06 +0000 Subject: [PATCH 07/13] fix some failing tests, some still broken --- pkg/assets/sql_scripts/move_history_fetcher.sql | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkg/assets/sql_scripts/move_history_fetcher.sql b/pkg/assets/sql_scripts/move_history_fetcher.sql index fc40dbdb138..fc09c0e6490 100644 --- a/pkg/assets/sql_scripts/move_history_fetcher.sql +++ b/pkg/assets/sql_scripts/move_history_fetcher.sql @@ -646,8 +646,7 @@ WITH move AS ( SELECT shipment_address_updates.* FROM shipment_address_updates - WHERE - shipment_address_updates.shipment_id = (SELECT id FROM move_shipments.id) + JOIN move_shipments ON shipment_address_updates.shipment_id = move_shipments.id ), shipment_address_updates_logs as ( SELECT audit_history.*, @@ -655,7 +654,8 @@ WITH move AS ( NULL AS context_id FROM audit_history - JOIN move_shipment_address_updates ON move_shipment_address_updates.id = audit_history.object_id + JOIN move_shipments ON move_shipments.id = move_shipments.id + WHERE audit_history.table_name = 'shipment_address_updates' ), combined_logs AS ( SELECT From bb4442791a6620ec9cba97dbeea2a3d815d00a23 Mon Sep 17 00:00:00 2001 From: Maria Traskowsky Date: Fri, 10 Jan 2025 22:04:20 +0000 Subject: [PATCH 08/13] modify query further --- pkg/assets/sql_scripts/move_history_fetcher.sql | 16 ++++++++++------ .../move_history/move_history_fetcher_test.go | 6 ++++-- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/pkg/assets/sql_scripts/move_history_fetcher.sql b/pkg/assets/sql_scripts/move_history_fetcher.sql index fc09c0e6490..28f88eab583 100644 --- a/pkg/assets/sql_scripts/move_history_fetcher.sql +++ b/pkg/assets/sql_scripts/move_history_fetcher.sql @@ -642,19 +642,23 @@ WITH move AS ( JOIN gsr_appeals ON gsr_appeals.id = audit_history.object_id WHERE audit_history.table_name = 'gsr_appeals' ), - move_shipment_address_updates AS ( - SELECT shipment_address_updates.* - FROM - shipment_address_updates + shipment_address_updates AS ( + SELECT shipment_address_updates.*, + jsonb_agg(jsonb_build_object( + 'status', shipment_address_updates.status + ) + )::TEXT AS context + FROM shipment_address_updates JOIN move_shipments ON shipment_address_updates.shipment_id = move_shipments.id + GROUP BY shipment_address_updates.id ), shipment_address_updates_logs as ( SELECT audit_history.*, - NULL AS context, + shipment_address_updates.context AS context, NULL AS context_id FROM audit_history - JOIN move_shipments ON move_shipments.id = move_shipments.id + JOIN shipment_address_updates ON shipment_address_updates.id = audit_history.object_id WHERE audit_history.table_name = 'shipment_address_updates' ), combined_logs AS ( diff --git a/pkg/services/move_history/move_history_fetcher_test.go b/pkg/services/move_history/move_history_fetcher_test.go index 9da8d13f3bb..161dde49e93 100644 --- a/pkg/services/move_history/move_history_fetcher_test.go +++ b/pkg/services/move_history/move_history_fetcher_test.go @@ -252,8 +252,10 @@ func (suite *MoveHistoryServiceSuite) TestMoveHistoryFetcherFunctionality() { auditHistoryContains := func(auditHistories models.AuditHistories, keyword string) func() (success bool) { return func() (success bool) { for _, record := range auditHistories { - if strings.Contains(*record.ChangedData, keyword) { - return true + if record.ChangedData != nil { + if strings.Contains(*record.ChangedData, keyword) { + return true + } } } return false From f76c232706345edca2765d495b01e9eda7d3b849 Mon Sep 17 00:00:00 2001 From: Daniel Jordan Date: Mon, 13 Jan 2025 15:27:20 +0000 Subject: [PATCH 09/13] little variable reusability goes a long way --- .../shipment_address_update_requester.go | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/pkg/services/shipment_address_update/shipment_address_update_requester.go b/pkg/services/shipment_address_update/shipment_address_update_requester.go index 52f433b4bfc..239f95243f8 100644 --- a/pkg/services/shipment_address_update/shipment_address_update_requester.go +++ b/pkg/services/shipment_address_update/shipment_address_update_requester.go @@ -281,6 +281,7 @@ func (f *shipmentAddressUpdateRequester) RequestShipmentDeliveryAddressUpdate(ap if eTag != etag.GenerateEtag(shipment.UpdatedAt) { return nil, apperror.NewPreconditionFailedError(shipmentID, nil) } + isInternationalShipment := shipment.MarketCode == models.MarketCodeInternational shipmentHasApprovedDestSIT := f.doesShipmentContainApprovedDestinationSIT(shipment) @@ -369,7 +370,7 @@ func (f *shipmentAddressUpdateRequester) RequestShipmentDeliveryAddressUpdate(ap } // international shipments don't need to be concerned with shorthaul/linehaul - if !updateNeedsTOOReview && shipment.MarketCode != models.MarketCodeInternational { + if !updateNeedsTOOReview && !isInternationalShipment { if shipment.ShipmentType == models.MTOShipmentTypeHHG { updateNeedsTOOReview, err = f.doesDeliveryAddressUpdateChangeShipmentPricingType(*shipment.PickupAddress, addressUpdate.OriginalAddress, newAddress) if err != nil { @@ -385,7 +386,7 @@ func (f *shipmentAddressUpdateRequester) RequestShipmentDeliveryAddressUpdate(ap } } - if !updateNeedsTOOReview && shipment.MarketCode != models.MarketCodeInternational { + if !updateNeedsTOOReview && !isInternationalShipment { if shipment.ShipmentType == models.MTOShipmentTypeHHG { updateNeedsTOOReview, err = f.doesDeliveryAddressUpdateChangeMileageBracket(appCtx, *shipment.PickupAddress, addressUpdate.OriginalAddress, newAddress) if err != nil { @@ -402,8 +403,7 @@ func (f *shipmentAddressUpdateRequester) RequestShipmentDeliveryAddressUpdate(ap } if !updateNeedsTOOReview { - internationalShipment := shipment.MarketCode == models.MarketCodeInternational - updateNeedsTOOReview, err = f.isAddressChangeDistanceOver50(appCtx, addressUpdate, internationalShipment) + updateNeedsTOOReview, err = f.isAddressChangeDistanceOver50(appCtx, addressUpdate, isInternationalShipment) if err != nil { return nil, err } @@ -495,6 +495,7 @@ func (f *shipmentAddressUpdateRequester) ReviewShipmentAddressChange(appCtx appc } shipment = addressUpdate.Shipment + isInternationalShipment := shipment.MarketCode == models.MarketCodeInternational if tooApprovalStatus == models.ShipmentAddressUpdateStatusApproved { queryBuilder := query.NewQueryBuilder() @@ -532,7 +533,7 @@ func (f *shipmentAddressUpdateRequester) ReviewShipmentAddressChange(appCtx appc // If the pricing type has changed then we automatically reject the DLH or DSH service item on the shipment since it is now inaccurate var approvedPaymentRequestsExistsForServiceItem bool - if haulPricingTypeHasChanged && len(shipment.MTOServiceItems) > 0 && shipment.MarketCode != models.MarketCodeInternational { + if haulPricingTypeHasChanged && len(shipment.MTOServiceItems) > 0 && !isInternationalShipment { serviceItems := shipment.MTOServiceItems autoRejectionRemark := "Automatically rejected due to change in destination address affecting the ZIP code qualification for short haul / line haul." var regeneratedServiceItems models.MTOServiceItems @@ -638,7 +639,7 @@ func (f *shipmentAddressUpdateRequester) ReviewShipmentAddressChange(appCtx appc // if the shipment has an estimated weight, we need to update the service item pricing since we know the distances have changed // this only applies to international shipments that the TOO is approving the address change for if shipment.PrimeEstimatedWeight != nil && - shipment.MarketCode == models.MarketCodeInternational && + isInternationalShipment && tooApprovalStatus == models.ShipmentAddressUpdateStatusApproved { portZip, portType, err := models.GetPortLocationInfoForShipment(appCtx.DB(), shipment.ID) if err != nil { From 1c998719790ab034452b223dd66089a98923fe84 Mon Sep 17 00:00:00 2001 From: brenna-everett-caci Date: Thu, 16 Jan 2025 20:37:08 +0000 Subject: [PATCH 10/13] remove expiring homesafe certificate in staging --- migrations/app/migrations_manifest.txt | 1 + .../secure/20250116200912_disable_homesafe_stg_cert.up.sql | 4 ++++ 2 files changed, 5 insertions(+) create mode 100644 migrations/app/secure/20250116200912_disable_homesafe_stg_cert.up.sql diff --git a/migrations/app/migrations_manifest.txt b/migrations/app/migrations_manifest.txt index 20fd4c31d51..f5869116716 100644 --- a/migrations/app/migrations_manifest.txt +++ b/migrations/app/migrations_manifest.txt @@ -1070,3 +1070,4 @@ 20250103180420_update_pricing_proc_to_use_local_price_variable.up.sql 20250110001339_update_nts_release_enum_name.up.sql 20250110214012_homesafeconnect_cert.up.sql +20250116200912_disable_homesafe_stg_cert.up.sql diff --git a/migrations/app/secure/20250116200912_disable_homesafe_stg_cert.up.sql b/migrations/app/secure/20250116200912_disable_homesafe_stg_cert.up.sql new file mode 100644 index 00000000000..f9862f58a7c --- /dev/null +++ b/migrations/app/secure/20250116200912_disable_homesafe_stg_cert.up.sql @@ -0,0 +1,4 @@ +-- Local test migration. +-- This will be run on development environments. +-- It should mirror what you intend to apply on prd/stg/exp/demo +-- DO NOT include any sensitive data. From 4552740c1fdd6905e229999eb2394c408fffface Mon Sep 17 00:00:00 2001 From: brenna-everett-caci Date: Fri, 17 Jan 2025 16:19:59 +0000 Subject: [PATCH 11/13] remove expiring homesafe certificate in staging --- config/tls/milmove-cert-bundle.p7b | Bin 63876 -> 93603 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/config/tls/milmove-cert-bundle.p7b b/config/tls/milmove-cert-bundle.p7b index 85eb6a72d7f30320f641ac1d1827f3ef6a25185f..73a285cbeee16c641cfcf4e400b3ba4b0288257f 100644 GIT binary patch literal 93603 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%0DWA5h6km1FLy?Tl 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 From 68e5302c98bbb2b5ebe8924a2aa239cda8f29d94 Mon Sep 17 00:00:00 2001 From: brenna-everett-caci Date: Fri, 17 Jan 2025 21:52:00 +0000 Subject: [PATCH 12/13] remove expiring homesafe certificate in staging --- config/tls/milmove-cert-bundle.p7b | Bin 93603 -> 61660 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/config/tls/milmove-cert-bundle.p7b b/config/tls/milmove-cert-bundle.p7b index 73a285cbeee16c641cfcf4e400b3ba4b0288257f..755ddc7b08a8b5ce1df37469c83b9fd891ecc715 100644 GIT binary patch literal 61660 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 HGsyn~i^DhC literal 93603 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 Date: Tue, 21 Jan 2025 16:00:53 +0000 Subject: [PATCH 13/13] ui changes per PO request --- .../MoveHistory/Database/FieldMappings.js | 3 +++ .../UpdatePaymentRequestStatusMoves.jsx | 10 ++++++---- .../UpdatePaymentRequestStatusMoves.test.jsx | 5 +++-- .../updateServiceItemStatusUpdateMove.jsx | 7 ++++++- .../updateServiceItemStatusUpdateMove.test.jsx | 1 + src/utils/formatters.js | 18 +++++++++++++----- 6 files changed, 32 insertions(+), 12 deletions(-) diff --git a/src/constants/MoveHistory/Database/FieldMappings.js b/src/constants/MoveHistory/Database/FieldMappings.js index 5cfeab3e8a4..7f5e1af179c 100644 --- a/src/constants/MoveHistory/Database/FieldMappings.js +++ b/src/constants/MoveHistory/Database/FieldMappings.js @@ -151,4 +151,7 @@ export default { assigned_sc: 'Counselor assigned', assigned_too: 'Task ordering officer assigned', assigned_tio: 'Task invoicing officer assigned', + re_assigned_sc: 'Counselor reassigned', + re_assigned_too: 'Task ordering officer reassigned', + re_assigned_tio: 'Task invoicing officer reassigned', }; diff --git a/src/constants/MoveHistory/EventTemplates/UpdatePaymentRequestStatus/UpdatePaymentRequestStatusMoves.jsx b/src/constants/MoveHistory/EventTemplates/UpdatePaymentRequestStatus/UpdatePaymentRequestStatusMoves.jsx index fb63a54891d..82fa3b3d2c7 100644 --- a/src/constants/MoveHistory/EventTemplates/UpdatePaymentRequestStatus/UpdatePaymentRequestStatusMoves.jsx +++ b/src/constants/MoveHistory/EventTemplates/UpdatePaymentRequestStatus/UpdatePaymentRequestStatusMoves.jsx @@ -9,8 +9,10 @@ export default { eventName: o.updatePaymentRequestStatus, tableName: t.moves, getEventNameDisplay: () => 'Updated move', - getDetails: ({ changedValues }) => { - if (changedValues?.tio_assigned_id !== undefined) return <> Task Invoicing Officer Unassigned ; - return <> - ; - }, + getDetails: ({ changedValues }) => ( + <> +
Payment Requests Addressed
+ {changedValues?.tio_assigned_id !== undefined ?
Task Invoicing Officer Unassigned
: null} + + ), }; diff --git a/src/constants/MoveHistory/EventTemplates/UpdatePaymentRequestStatus/UpdatePaymentRequestStatusMoves.test.jsx b/src/constants/MoveHistory/EventTemplates/UpdatePaymentRequestStatus/UpdatePaymentRequestStatusMoves.test.jsx index 8e555c10d84..4868aefe01c 100644 --- a/src/constants/MoveHistory/EventTemplates/UpdatePaymentRequestStatus/UpdatePaymentRequestStatusMoves.test.jsx +++ b/src/constants/MoveHistory/EventTemplates/UpdatePaymentRequestStatus/UpdatePaymentRequestStatusMoves.test.jsx @@ -21,11 +21,11 @@ describe('When given a completed services counseling for a move', () => { expect(screen.getByText('Updated move')).toBeInTheDocument(); }); - it('defaults to blank entry if TIO ID is not present in changedValues', () => { + it('displays default when TIO ID is not present', () => { const template = getTemplate(historyRecord); render(template.getDetails(historyRecord)); - expect(screen.getByText('-')).toBeInTheDocument(); + expect(screen.getByText('Payment Requests Addressed')).toBeInTheDocument(); }); it('displays correct details when a TIO is unassigned', () => { @@ -36,6 +36,7 @@ describe('When given a completed services counseling for a move', () => { const template = getTemplate(historyRecord); render(template.getDetails(historyRecord)); + expect(screen.getByText('Payment Requests Addressed')).toBeInTheDocument(); expect(screen.getByText('Task Invoicing Officer Unassigned')).toBeInTheDocument(); }); }); diff --git a/src/constants/MoveHistory/EventTemplates/UpdateServiceItemStatus/updateServiceItemStatusUpdateMove.jsx b/src/constants/MoveHistory/EventTemplates/UpdateServiceItemStatus/updateServiceItemStatusUpdateMove.jsx index 4f0a084d37c..0bd4ffcedd8 100644 --- a/src/constants/MoveHistory/EventTemplates/UpdateServiceItemStatus/updateServiceItemStatusUpdateMove.jsx +++ b/src/constants/MoveHistory/EventTemplates/UpdateServiceItemStatus/updateServiceItemStatusUpdateMove.jsx @@ -14,7 +14,12 @@ export default { return ( <> - {historyRecord.changedValues.too_assigned_id !== undefined ? <>Task Ordering Officer Unassigned : null} + {historyRecord?.changedValues?.too_assigned_id !== undefined ? ( + <> +
Service Items Addressed
+
Task Ordering Officer Unassigned
+ + ) : null} ); }, diff --git a/src/constants/MoveHistory/EventTemplates/UpdateServiceItemStatus/updateServiceItemStatusUpdateMove.test.jsx b/src/constants/MoveHistory/EventTemplates/UpdateServiceItemStatus/updateServiceItemStatusUpdateMove.test.jsx index b77cade3d48..94d6497cd49 100644 --- a/src/constants/MoveHistory/EventTemplates/UpdateServiceItemStatus/updateServiceItemStatusUpdateMove.test.jsx +++ b/src/constants/MoveHistory/EventTemplates/UpdateServiceItemStatus/updateServiceItemStatusUpdateMove.test.jsx @@ -34,6 +34,7 @@ describe('when given a update service item status, update move history record', const template = getTemplate(historyRecord); render(template.getDetails(historyRecord)); + expect(screen.getByText('Service Items Addressed')).toBeInTheDocument(); expect(screen.getByText('Task Ordering Officer Unassigned')).toBeInTheDocument(); }); }); diff --git a/src/utils/formatters.js b/src/utils/formatters.js index 5944ecec67f..d979dcdc624 100644 --- a/src/utils/formatters.js +++ b/src/utils/formatters.js @@ -602,16 +602,24 @@ export const constructSCOrderOconusFields = (values) => { }; export const formatAssignedOfficeUserFromContext = (historyRecord) => { - const { changedValues, context } = historyRecord; + const { changedValues, context, oldValues } = historyRecord; const newValues = {}; if (!context) return newValues; const name = `${context[0].assigned_office_user_last_name}, ${context[0].assigned_office_user_first_name}`; - if (changedValues.sc_assigned_id) newValues.assigned_sc = name; - if (changedValues.too_assigned_id) newValues.assigned_too = name; - if (changedValues.tio_assigned_id) newValues.assigned_tio = name; - + if (changedValues?.sc_assigned_id) { + if (oldValues.sc_assigned_id === null) newValues.assigned_sc = name; + if (oldValues.sc_assigned_id !== null) newValues.re_assigned_sc = name; + } + if (changedValues?.too_assigned_id) { + if (oldValues.too_assigned_id === null) newValues.assigned_too = name; + if (oldValues.too_assigned_id !== null) newValues.re_assigned_too = name; + } + if (changedValues?.tio_assigned_id) { + if (oldValues.tio_assigned_id === null) newValues.assigned_tio = name; + if (oldValues.tio_assigned_id !== null) newValues.re_assigned_tio = name; + } return newValues; }; /**