diff --git a/migrations/app/migrations_manifest.txt b/migrations/app/migrations_manifest.txt index 32afaa072da..9151f5ec112 100644 --- a/migrations/app/migrations_manifest.txt +++ b/migrations/app/migrations_manifest.txt @@ -1058,6 +1058,9 @@ 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 +20241220213134_add_destination_gbloc_db_function.up.sql +20241224172258_add_and_update_po_box_zip.up.sql +20241226173330_add_intl_param_values_to_service_params_table.up.sql 20241227153723_remove_empty_string_emplid_values.up.sql 20241227202424_insert_transportation_offices_camp_pendelton.up.sql 20241230190638_remove_AK_zips_from_zip3.up.sql diff --git a/migrations/app/schema/20241220213134_add_destination_gbloc_db_function.up.sql b/migrations/app/schema/20241220213134_add_destination_gbloc_db_function.up.sql new file mode 100644 index 00000000000..0375f64d044 --- /dev/null +++ b/migrations/app/schema/20241220213134_add_destination_gbloc_db_function.up.sql @@ -0,0 +1,90 @@ +-- this function will handle getting the destination GBLOC associated with a shipment's destination address +-- this only applies to OCONUS destination addresses on a shipment, but this can also checks domestic shipments +CREATE OR REPLACE FUNCTION get_destination_gbloc_for_shipment(shipment_id UUID) +RETURNS TEXT AS $$ +DECLARE + service_member_affiliation TEXT; + zip TEXT; + gbloc_result TEXT; + alaska_zone_ii BOOLEAN; + market_code TEXT; +BEGIN + -- get the shipment's market code to determine conditionals + SELECT ms.market_code + INTO market_code + FROM mto_shipments ms + WHERE ms.id = shipment_id; + + -- if it's a domestic shipment, use postal_code_to_gblocs + IF market_code = 'd' THEN + SELECT upc.uspr_zip_id + INTO zip + FROM addresses a + JOIN us_post_region_cities upc ON a.us_post_region_cities_id = upc.id + WHERE a.id = (SELECT destination_address_id FROM mto_shipments WHERE id = shipment_id); + + SELECT gbloc + INTO gbloc_result + FROM postal_code_to_gblocs + WHERE postal_code = zip + LIMIT 1; + + IF gbloc_result IS NULL THEN + RETURN NULL; + END IF; + + RETURN gbloc_result; + + ELSEIF market_code = 'i' THEN + -- if it's 'i' then we need to check for some exceptions + SELECT sm.affiliation + INTO service_member_affiliation + FROM service_members sm + JOIN orders o ON o.service_member_id = sm.id + JOIN moves m ON m.orders_id = o.id + JOIN mto_shipments ms ON ms.move_id = m.id + WHERE ms.id = shipment_id; + + -- if the service member is USMC, return 'USMC' + IF service_member_affiliation = 'MARINES' THEN + RETURN 'USMC'; + END IF; + + SELECT upc.uspr_zip_id + INTO zip + FROM addresses a + JOIN us_post_region_cities upc ON a.us_post_region_cities_id = upc.id + WHERE a.id = (SELECT destination_address_id FROM mto_shipments WHERE id = shipment_id); + + -- check if the postal code (uspr_zip_id) is in Alaska Zone II + SELECT EXISTS ( + SELECT 1 + FROM re_oconus_rate_areas ro + JOIN re_rate_areas ra ON ro.rate_area_id = ra.id + JOIN us_post_region_cities upc ON upc.id = ro.us_post_region_cities_id + WHERE upc.uspr_zip_id = zip + AND ra.code = 'US8190100' -- Alaska Zone II Code + ) + INTO alaska_zone_ii; + + -- if the service member is USAF or USSF and the address is in Alaska Zone II, return 'MBFL' + IF (service_member_affiliation = 'AIR_FORCE' OR service_member_affiliation = 'SPACE_FORCE') AND alaska_zone_ii THEN + RETURN 'MBFL'; + END IF; + + -- for all other branches except USMC, return the gbloc from the postal_code_to_gbloc table based on the zip + SELECT gbloc + INTO gbloc_result + FROM postal_code_to_gblocs + WHERE postal_code = zip + LIMIT 1; + + IF gbloc_result IS NULL THEN + RETURN NULL; + END IF; + + RETURN gbloc_result; + END IF; + +END; +$$ LANGUAGE plpgsql; diff --git a/migrations/app/schema/20241224172258_add_and_update_po_box_zip.up.sql b/migrations/app/schema/20241224172258_add_and_update_po_box_zip.up.sql new file mode 100644 index 00000000000..284efb6bd89 --- /dev/null +++ b/migrations/app/schema/20241224172258_add_and_update_po_box_zip.up.sql @@ -0,0 +1,2721 @@ +--add is_po_box to re_us_post_regions +ALTER TABLE re_us_post_regions + ADD is_po_box bool default FALSE; + +COMMENT ON COLUMN re_us_post_regions.is_po_box iS 'Indicates if zip code is PO Box only'; + +--create index for is_po_box +CREATE INDEX IF NOT EXISTS idx_re_us_post_regions_is_po_box ON re_us_post_regions(is_po_box); + +--add is_po_box to v_locations +CREATE OR REPLACE VIEW v_locations AS +select uprc.id uprc_id, + c.city_name, + s.state, + upr.uspr_zip_id, + uprc.usprc_county_nm, + r.country, + uprc.cities_id, + upr.state_id, + uprc.us_post_regions_id, + c.country_id, + upr.is_po_box + from us_post_region_cities uprc, + re_cities c, + re_us_post_regions upr, + re_states s, + re_countries r + where uprc.cities_id = c.id + and uprc.us_post_regions_id = upr.id + and upr.state_id = s.id + and c.country_id = r.id; + +--set is_po_box +update re_us_post_regions set is_po_box = TRUE where id = '3039101a-e3e4-4230-9f7b-b30d38147c44'; +update re_us_post_regions set is_po_box = TRUE where id = 'e18233cf-60c8-4f6e-8aab-faa56cef95d9'; +update re_us_post_regions set is_po_box = TRUE where id = '29709b7a-81f9-4a68-af52-396a286abebe'; +update re_us_post_regions set is_po_box = TRUE where id = 'f659110b-6f65-4588-990d-6f01f2451498'; +update re_us_post_regions set is_po_box = TRUE where id = '771613ac-5db3-44ad-ae1b-2709d738e396'; +update re_us_post_regions set is_po_box = TRUE where id = 'bbcab91d-a1b8-4a89-86e8-175b1e55b9ad'; +update re_us_post_regions set is_po_box = TRUE where id = 'fb9b2098-2e46-41d6-8f6b-617865e3114a'; +update re_us_post_regions set is_po_box = TRUE where id = 'fb9b2098-2e46-41d6-8f6b-617865e3114a'; +update re_us_post_regions set is_po_box = TRUE where id = 'ea4f53c1-ef96-4e84-b161-dc2d76ce6f44'; +update re_us_post_regions set is_po_box = TRUE where id = '5fa056b3-df3b-4ad5-a4bd-b65d872fbba6'; +update re_us_post_regions set is_po_box = TRUE where id = 'b0b30208-5121-4a3d-88c6-113413b7de16'; +update re_us_post_regions set is_po_box = TRUE where id = '0ca99c15-18c5-415c-ac86-d78540342059'; +update re_us_post_regions set is_po_box = TRUE where id = 'd72f94f0-b602-48f8-aadb-c448b82ac909'; +update re_us_post_regions set is_po_box = TRUE where id = '94a495a3-402d-4cc9-a8c4-a0f2673a893f'; +update re_us_post_regions set is_po_box = TRUE where id = '0acc38db-3f11-43f4-aca6-d678ef1672d5'; +update re_us_post_regions set is_po_box = TRUE where id = 'd41dfb37-6a36-4faf-a4cc-0b81800791ef'; +update re_us_post_regions set is_po_box = TRUE where id = '01634ffe-2afc-40e4-a99b-dbf9ac3ce90c'; +update re_us_post_regions set is_po_box = TRUE where id = '828908a0-3cac-4250-919a-2013ac9854af'; +update re_us_post_regions set is_po_box = TRUE where id = '89c952ad-5feb-4893-92a5-ced054b591f6'; +update re_us_post_regions set is_po_box = TRUE where id = '3bf7f5e2-1846-4f2b-91cf-24b9d167d7a2'; +update re_us_post_regions set is_po_box = TRUE where id = 'c2561fd5-788e-4700-891a-aaf2a3f5b074'; +update re_us_post_regions set is_po_box = TRUE where id = '6b4c595a-6ac6-48fe-bdef-62ac74233b90'; +update re_us_post_regions set is_po_box = TRUE where id = 'b29e8134-a0b8-46b4-9ac6-200662551e2c'; +update re_us_post_regions set is_po_box = TRUE where id = 'f33f8241-b629-4b03-aa79-0367319d5774'; +update re_us_post_regions set is_po_box = TRUE where id = 'f6d4ab48-e453-407c-a2a7-9044767c5db8'; +update re_us_post_regions set is_po_box = TRUE where id = 'f6d4ab48-e453-407c-a2a7-9044767c5db8'; +update re_us_post_regions set is_po_box = TRUE where id = 'f6d4ab48-e453-407c-a2a7-9044767c5db8'; +update re_us_post_regions set is_po_box = TRUE where id = 'f6d4ab48-e453-407c-a2a7-9044767c5db8'; +update re_us_post_regions set is_po_box = TRUE where id = 'f6d4ab48-e453-407c-a2a7-9044767c5db8'; +update re_us_post_regions set is_po_box = TRUE where id = 'f6d4ab48-e453-407c-a2a7-9044767c5db8'; +update re_us_post_regions set is_po_box = TRUE where id = 'f6d4ab48-e453-407c-a2a7-9044767c5db8'; +update re_us_post_regions set is_po_box = TRUE where id = 'f6d4ab48-e453-407c-a2a7-9044767c5db8'; +update re_us_post_regions set is_po_box = TRUE where id = 'f6d4ab48-e453-407c-a2a7-9044767c5db8'; +update re_us_post_regions set is_po_box = TRUE where id = 'f6d4ab48-e453-407c-a2a7-9044767c5db8'; +update re_us_post_regions set is_po_box = TRUE where id = '2f78c5d7-0c27-4982-9e13-3cc4e027cd9d'; +update re_us_post_regions set is_po_box = TRUE where id = '2f78c5d7-0c27-4982-9e13-3cc4e027cd9d'; +update re_us_post_regions set is_po_box = TRUE where id = '2f78c5d7-0c27-4982-9e13-3cc4e027cd9d'; +update re_us_post_regions set is_po_box = TRUE where id = '38e0a4fc-7ccd-4ea4-ae5f-3aa8026a515b'; +update re_us_post_regions set is_po_box = TRUE where id = '88a0a323-02b9-4cda-bd1c-b93b08bb7361'; +update re_us_post_regions set is_po_box = TRUE where id = 'f338aebc-7a43-456d-b786-1f4c083f5ab6'; +update re_us_post_regions set is_po_box = TRUE where id = '71173e6f-741c-4fc7-94de-e8e36fdcc5fa'; +update re_us_post_regions set is_po_box = TRUE where id = '7431d5e6-d573-400c-9aad-fd3a8d3e68ac'; +update re_us_post_regions set is_po_box = TRUE where id = 'ff7828be-8d9e-4654-ae66-3c16d4a3e36a'; +update re_us_post_regions set is_po_box = TRUE where id = '3cb459f9-a0b8-450b-b68a-149c48169234'; +update re_us_post_regions set is_po_box = TRUE where id = 'c64995c3-6edb-4555-9484-c6bbc0f1dfe9'; +update re_us_post_regions set is_po_box = TRUE where id = 'a646ca74-872b-4e2e-9554-42a208ad1869'; +update re_us_post_regions set is_po_box = TRUE where id = '687ce49e-1a9b-4ea8-94a3-bc3f950a7cf8'; +update re_us_post_regions set is_po_box = TRUE where id = '2f1d993f-aa12-4d67-8217-44b0853e551b'; +update re_us_post_regions set is_po_box = TRUE where id = '8d87aace-9dfc-4823-b955-b55267cea9a2'; +update re_us_post_regions set is_po_box = TRUE where id = '4b17e4a7-ea0c-41a0-a56f-b7d060a354b1'; +update re_us_post_regions set is_po_box = TRUE where id = '8038bb71-37d3-4668-8276-4ed77347817d'; +update re_us_post_regions set is_po_box = TRUE where id = 'bc9f0a36-fd3d-4266-85de-88b488e290c3'; +update re_us_post_regions set is_po_box = TRUE where id = '4ff1066a-7efc-4219-9bbb-ef12f561fc07'; +update re_us_post_regions set is_po_box = TRUE where id = '4ff1066a-7efc-4219-9bbb-ef12f561fc07'; +update re_us_post_regions set is_po_box = TRUE where id = '2808b98c-f522-4c38-b9fb-42f25f597618'; +update re_us_post_regions set is_po_box = TRUE where id = 'ae3d7d92-59d9-427e-8d1d-68ebe14c53a2'; +update re_us_post_regions set is_po_box = TRUE where id = '92438c3c-9e49-44a8-89d6-e2ec0b048d7e'; +update re_us_post_regions set is_po_box = TRUE where id = 'fc9bb59f-2afc-495e-bd94-f4463b9db17e'; +update re_us_post_regions set is_po_box = TRUE where id = '365054c3-080a-4293-8e40-801d806b33fd'; +update re_us_post_regions set is_po_box = TRUE where id = '9f733b3c-029f-449f-a8da-bc8020c58cf9'; +update re_us_post_regions set is_po_box = TRUE where id = 'fda33b63-2586-4473-8178-4722c5a9bcf4'; +update re_us_post_regions set is_po_box = TRUE where id = 'bce3cbad-b147-4696-886f-16ed35d5e78e'; +update re_us_post_regions set is_po_box = TRUE where id = '9029ef2d-a341-4962-9d4f-041533fbd45c'; +update re_us_post_regions set is_po_box = TRUE where id = '8cc59680-782b-40ff-8bc2-7b8abe8f048b'; +update re_us_post_regions set is_po_box = TRUE where id = '52dab1f2-27b4-43da-a7dd-10b941d8ceb9'; +update re_us_post_regions set is_po_box = TRUE where id = 'a419e6a8-2690-4dc0-aed6-fabbfbc53172'; +update re_us_post_regions set is_po_box = TRUE where id = 'c0c78424-9936-4103-b3e3-0a78df582608'; +update re_us_post_regions set is_po_box = TRUE where id = 'c0c78424-9936-4103-b3e3-0a78df582608'; +update re_us_post_regions set is_po_box = TRUE where id = '2c22f407-5caa-4b08-af14-f30c652b9932'; +update re_us_post_regions set is_po_box = TRUE where id = '2c22f407-5caa-4b08-af14-f30c652b9932'; +update re_us_post_regions set is_po_box = TRUE where id = '2c22f407-5caa-4b08-af14-f30c652b9932'; +update re_us_post_regions set is_po_box = TRUE where id = 'a3e74c9c-9c06-4897-8d17-768e792db2c4'; +update re_us_post_regions set is_po_box = TRUE where id = '80e96737-868e-495a-9220-bd258665159b'; +update re_us_post_regions set is_po_box = TRUE where id = '266189c2-8027-4e62-a7fc-36e563b4c6f4'; +update re_us_post_regions set is_po_box = TRUE where id = '0e87c1e7-9d7f-4820-be3c-8faa0f6315e9'; +update re_us_post_regions set is_po_box = TRUE where id = 'a76679d7-e687-4057-8bfe-344cdee42039'; +update re_us_post_regions set is_po_box = TRUE where id = 'a76679d7-e687-4057-8bfe-344cdee42039'; +update re_us_post_regions set is_po_box = TRUE where id = 'a76679d7-e687-4057-8bfe-344cdee42039'; +update re_us_post_regions set is_po_box = TRUE where id = '441f074a-12f8-4151-934a-77d204112066'; +update re_us_post_regions set is_po_box = TRUE where id = '85600e6f-be9e-429a-82e5-f4af548a1e26'; +update re_us_post_regions set is_po_box = TRUE where id = '85600e6f-be9e-429a-82e5-f4af548a1e26'; +update re_us_post_regions set is_po_box = TRUE where id = '85600e6f-be9e-429a-82e5-f4af548a1e26'; +update re_us_post_regions set is_po_box = TRUE where id = 'b01017a1-e52a-4f4a-bdfc-a1be336ded6e'; +update re_us_post_regions set is_po_box = TRUE where id = 'd14bd8a8-83bb-46f3-a7e0-e12d25e44486'; +update re_us_post_regions set is_po_box = TRUE where id = 'd14bd8a8-83bb-46f3-a7e0-e12d25e44486'; +update re_us_post_regions set is_po_box = TRUE where id = 'c661e0cf-6286-4e3f-a973-0b474b0b9988'; +update re_us_post_regions set is_po_box = TRUE where id = '344090a5-2a2b-480e-8316-b01309c25d56'; +update re_us_post_regions set is_po_box = TRUE where id = '344090a5-2a2b-480e-8316-b01309c25d56'; +update re_us_post_regions set is_po_box = TRUE where id = '344090a5-2a2b-480e-8316-b01309c25d56'; +update re_us_post_regions set is_po_box = TRUE where id = '6a68427e-cdce-46d1-9320-fe90bccb1d42'; +update re_us_post_regions set is_po_box = TRUE where id = '9a67fe22-f695-480e-a651-d656b0d120a7'; +update re_us_post_regions set is_po_box = TRUE where id = 'a77d5935-ee84-4a87-9212-2bbb6098578f'; +update re_us_post_regions set is_po_box = TRUE where id = '876ed881-4fac-43d1-8ac4-5d54ab9f36cf'; +update re_us_post_regions set is_po_box = TRUE where id = 'a9aca378-aa1e-4399-a959-62b4f5b91a1a'; +update re_us_post_regions set is_po_box = TRUE where id = 'a9aca378-aa1e-4399-a959-62b4f5b91a1a'; +update re_us_post_regions set is_po_box = TRUE where id = 'deb24e10-93c2-41c8-9942-de478bb51f1d'; +update re_us_post_regions set is_po_box = TRUE where id = '19eea59c-eb5c-483f-9bee-caa4f7b5a5a2'; +update re_us_post_regions set is_po_box = TRUE where id = '1e8c5640-c35c-4450-a1db-d9f666747e84'; +update re_us_post_regions set is_po_box = TRUE where id = '20f8625a-1f5a-46bc-8fa1-fa73ae4cbc46'; +update re_us_post_regions set is_po_box = TRUE where id = 'b7d64e1b-5893-4180-a421-75b3372fec5e'; +update re_us_post_regions set is_po_box = TRUE where id = '4ca5d1a2-2ee9-4ce5-b91d-569ac87617b8'; +update re_us_post_regions set is_po_box = TRUE where id = '7d038492-c65b-4df2-b040-ace8bf802d00'; +update re_us_post_regions set is_po_box = TRUE where id = '609a9434-e3e8-4b85-b1bf-c7b0b6f3d934'; +update re_us_post_regions set is_po_box = TRUE where id = '7e603fde-48fb-42a3-b660-fd50bbdbd208'; +update re_us_post_regions set is_po_box = TRUE where id = 'fc2203c7-2355-4e7c-a187-1577a3047049'; +update re_us_post_regions set is_po_box = TRUE where id = 'fc2203c7-2355-4e7c-a187-1577a3047049'; +update re_us_post_regions set is_po_box = TRUE where id = 'fc2203c7-2355-4e7c-a187-1577a3047049'; +update re_us_post_regions set is_po_box = TRUE where id = '7a2a7f06-d707-49f1-953c-39071dffb404'; +update re_us_post_regions set is_po_box = TRUE where id = 'ea532a46-7dde-4126-8b40-b47a20c29722'; +update re_us_post_regions set is_po_box = TRUE where id = 'ea532a46-7dde-4126-8b40-b47a20c29722'; +update re_us_post_regions set is_po_box = TRUE where id = '31c13795-f7d8-4737-95ea-b647a4374c96'; +update re_us_post_regions set is_po_box = TRUE where id = '3238aff1-6a40-4025-b45d-645078e21b32'; +update re_us_post_regions set is_po_box = TRUE where id = '3238aff1-6a40-4025-b45d-645078e21b32'; +update re_us_post_regions set is_po_box = TRUE where id = '971c0fbb-c879-437c-b7bc-9278478e35e0'; +update re_us_post_regions set is_po_box = TRUE where id = 'e513a198-a94e-4e4a-85f1-eead5e57c37a'; +update re_us_post_regions set is_po_box = TRUE where id = 'bdf92f46-f667-4aa9-a227-3e54a169b265'; +update re_us_post_regions set is_po_box = TRUE where id = '0c46dfce-e4fd-4460-aed5-40df834d4ce3'; +update re_us_post_regions set is_po_box = TRUE where id = '0c46dfce-e4fd-4460-aed5-40df834d4ce3'; +update re_us_post_regions set is_po_box = TRUE where id = '85150a1e-0452-4cfb-a6fb-8f14f91c256f'; +update re_us_post_regions set is_po_box = TRUE where id = 'a1587f2d-b3d6-4b39-9ad7-b92f8d1650c5'; +update re_us_post_regions set is_po_box = TRUE where id = 'a1587f2d-b3d6-4b39-9ad7-b92f8d1650c5'; +update re_us_post_regions set is_po_box = TRUE where id = 'a1587f2d-b3d6-4b39-9ad7-b92f8d1650c5'; +update re_us_post_regions set is_po_box = TRUE where id = 'a1587f2d-b3d6-4b39-9ad7-b92f8d1650c5'; +update re_us_post_regions set is_po_box = TRUE where id = 'a1587f2d-b3d6-4b39-9ad7-b92f8d1650c5'; +update re_us_post_regions set is_po_box = TRUE where id = 'a1587f2d-b3d6-4b39-9ad7-b92f8d1650c5'; +update re_us_post_regions set is_po_box = TRUE where id = 'a1587f2d-b3d6-4b39-9ad7-b92f8d1650c5'; +update re_us_post_regions set is_po_box = TRUE where id = 'a1587f2d-b3d6-4b39-9ad7-b92f8d1650c5'; +update re_us_post_regions set is_po_box = TRUE where id = '073b89f2-e219-4522-8bee-4c797be2900c'; +update re_us_post_regions set is_po_box = TRUE where id = '073b89f2-e219-4522-8bee-4c797be2900c'; +update re_us_post_regions set is_po_box = TRUE where id = 'f29e14f4-9c27-4e37-8df3-65969e53a034'; +update re_us_post_regions set is_po_box = TRUE where id = '9b5e50c1-8582-4cec-ae5a-288b8c2b81c0'; +update re_us_post_regions set is_po_box = TRUE where id = '6382ffa1-798d-45de-a2fd-d7a2bce40965'; +update re_us_post_regions set is_po_box = TRUE where id = 'e8539219-2a56-4a6b-9428-c6e8889d3234'; +update re_us_post_regions set is_po_box = TRUE where id = 'bd9cddbd-4e13-40ba-89a2-0ba42c5739b9'; +update re_us_post_regions set is_po_box = TRUE where id = 'd0c96416-c46b-44e7-ab89-82543edb59c3'; +update re_us_post_regions set is_po_box = TRUE where id = 'd0c96416-c46b-44e7-ab89-82543edb59c3'; +update re_us_post_regions set is_po_box = TRUE where id = 'd0c96416-c46b-44e7-ab89-82543edb59c3'; +update re_us_post_regions set is_po_box = TRUE where id = '52c55edf-7fa6-42ab-9647-4fe71c12d261'; +update re_us_post_regions set is_po_box = TRUE where id = '2a9aa8b9-c8e6-44ce-aecf-65dcc7d63900'; +update re_us_post_regions set is_po_box = TRUE where id = 'a2c6fdc6-7e17-4f7f-9a60-2b80458d81e9'; +update re_us_post_regions set is_po_box = TRUE where id = '408b042a-9e1b-4baf-9579-17478657f12c'; +update re_us_post_regions set is_po_box = TRUE where id = '2a5579db-34fc-4007-b32a-699758c35fec'; +update re_us_post_regions set is_po_box = TRUE where id = 'f1f0a35a-a051-48af-b9b8-de1ee9e8c1d4'; +update re_us_post_regions set is_po_box = TRUE where id = 'f1f0a35a-a051-48af-b9b8-de1ee9e8c1d4'; +update re_us_post_regions set is_po_box = TRUE where id = '59bdc738-423d-4b91-916d-c763d3e33cd5'; +update re_us_post_regions set is_po_box = TRUE where id = '59bdc738-423d-4b91-916d-c763d3e33cd5'; +update re_us_post_regions set is_po_box = TRUE where id = '70cd67d7-7112-41a0-a339-b51f8254482d'; +update re_us_post_regions set is_po_box = TRUE where id = '5d73393d-0d7a-4e1c-bae4-e7e095639776'; +update re_us_post_regions set is_po_box = TRUE where id = '27ce7174-28b7-4a1b-a2de-42a6a3dd5e13'; +update re_us_post_regions set is_po_box = TRUE where id = 'dc2e5359-3f3c-4f7b-b1da-93ad1a5a2c85'; +update re_us_post_regions set is_po_box = TRUE where id = '3fabd497-06f6-46ab-a4f5-52d6774362f2'; +update re_us_post_regions set is_po_box = TRUE where id = 'e4dafeba-09bb-45a8-a0d3-7b6d7cef1de2'; +update re_us_post_regions set is_po_box = TRUE where id = 'e4dafeba-09bb-45a8-a0d3-7b6d7cef1de2'; +update re_us_post_regions set is_po_box = TRUE where id = 'c523ff25-a942-4b0a-bf66-c383d7db5487'; +update re_us_post_regions set is_po_box = TRUE where id = 'e647745a-a779-44db-8d2c-f56e42d54f87'; +update re_us_post_regions set is_po_box = TRUE where id = 'c3eea926-7dae-4638-84b0-7ce7245f0803'; +update re_us_post_regions set is_po_box = TRUE where id = 'c3eea926-7dae-4638-84b0-7ce7245f0803'; +update re_us_post_regions set is_po_box = TRUE where id = '773a959b-8874-4be1-9654-de699e520d85'; +update re_us_post_regions set is_po_box = TRUE where id = '28a671bf-e713-4299-a278-fc08216e3787'; +update re_us_post_regions set is_po_box = TRUE where id = 'e463cf9c-893e-4c86-9c57-f29b3c8c50a2'; +update re_us_post_regions set is_po_box = TRUE where id = '4d1b3c62-71c9-4e53-ad3c-fc3aa3f616e4'; +update re_us_post_regions set is_po_box = TRUE where id = '464ab6ee-233d-4839-abb4-d2b7700f238d'; +update re_us_post_regions set is_po_box = TRUE where id = 'ec291c92-d1ae-420d-9590-1f2e021dff07'; +update re_us_post_regions set is_po_box = TRUE where id = 'f3874f2f-362b-4fde-9fd1-8e80e8d280ef'; +update re_us_post_regions set is_po_box = TRUE where id = '33c7f569-301e-47c1-8987-56672f6114a8'; +update re_us_post_regions set is_po_box = TRUE where id = '5154cf51-4586-4631-a3df-d6835d8aba06'; +update re_us_post_regions set is_po_box = TRUE where id = '6834a8c1-6b61-44ad-8307-949869f8633f'; +update re_us_post_regions set is_po_box = TRUE where id = 'cddbed98-c3f0-4b72-bd85-613fe1f090f6'; +update re_us_post_regions set is_po_box = TRUE where id = '023414ce-2ef0-42ab-8f6d-679727796d8f'; +update re_us_post_regions set is_po_box = TRUE where id = 'd18072d9-e1bb-47ff-8ea0-469dab75b77f'; +update re_us_post_regions set is_po_box = TRUE where id = 'a4361410-2ab6-4b41-8052-830c19d7f292'; +update re_us_post_regions set is_po_box = TRUE where id = '6224adc4-3dd6-4c1a-869b-d4bbd246d39c'; +update re_us_post_regions set is_po_box = TRUE where id = '227148b8-cf32-4d6c-8ba2-be9e3b85d7ad'; +update re_us_post_regions set is_po_box = TRUE where id = '227148b8-cf32-4d6c-8ba2-be9e3b85d7ad'; +update re_us_post_regions set is_po_box = TRUE where id = 'e5ac8fc3-81e8-4c60-89ba-4d63bb2df359'; +update re_us_post_regions set is_po_box = TRUE where id = 'e5ac8fc3-81e8-4c60-89ba-4d63bb2df359'; +update re_us_post_regions set is_po_box = TRUE where id = '45dc7df8-ed90-49e0-9ab5-07cc28669075'; +update re_us_post_regions set is_po_box = TRUE where id = 'd4f2a400-35a9-4ca5-8ba9-09d56abca308'; +update re_us_post_regions set is_po_box = TRUE where id = '8871e231-0131-4889-a589-0043d5919e1c'; +update re_us_post_regions set is_po_box = TRUE where id = '31ce704e-427a-4014-b890-f837c216a808'; +update re_us_post_regions set is_po_box = TRUE where id = 'cf2f51dd-28ba-4cee-97fb-4a5de8b16af0'; +update re_us_post_regions set is_po_box = TRUE where id = '74d37923-b885-4f53-9c43-2cbf427dada9'; +update re_us_post_regions set is_po_box = TRUE where id = 'b15c5560-9fb8-4d48-b9b9-0b11bec17841'; +update re_us_post_regions set is_po_box = TRUE where id = 'b15c5560-9fb8-4d48-b9b9-0b11bec17841'; +update re_us_post_regions set is_po_box = TRUE where id = '2a16a88f-88d5-47bc-9f06-46939b97662e'; +update re_us_post_regions set is_po_box = TRUE where id = 'f87543c9-b097-412b-aa58-9be1212b2016'; +update re_us_post_regions set is_po_box = TRUE where id = 'f87543c9-b097-412b-aa58-9be1212b2016'; +update re_us_post_regions set is_po_box = TRUE where id = 'fad82781-919b-4791-8007-bcc41daacd9f'; +update re_us_post_regions set is_po_box = TRUE where id = 'fad82781-919b-4791-8007-bcc41daacd9f'; +update re_us_post_regions set is_po_box = TRUE where id = 'b38b6068-f0a0-4373-b9aa-5d300fdd11e0'; +update re_us_post_regions set is_po_box = TRUE where id = '67d58e5d-1c32-4fea-adf7-61f03717c5fc'; +update re_us_post_regions set is_po_box = TRUE where id = 'd3d1e89e-8ac5-42db-9e6e-5a9aeef5a65c'; +update re_us_post_regions set is_po_box = TRUE where id = 'acfc9c82-d2ad-43bd-af1e-a0e9d060473f'; +update re_us_post_regions set is_po_box = TRUE where id = '490e1eb5-86ae-4183-bf45-1e8a0128aeb8'; +update re_us_post_regions set is_po_box = TRUE where id = 'a380baf0-0f85-489e-a4e6-438e65ba01a2'; +update re_us_post_regions set is_po_box = TRUE where id = '9468b753-b419-4053-8152-f438d48b8f11'; +update re_us_post_regions set is_po_box = TRUE where id = '9468b753-b419-4053-8152-f438d48b8f11'; +update re_us_post_regions set is_po_box = TRUE where id = 'a7f4ccbe-70c1-4cb3-9b51-cf764a169e98'; +update re_us_post_regions set is_po_box = TRUE where id = '585e4aaf-152f-4b42-8fd2-d593c9f0ae7c'; +update re_us_post_regions set is_po_box = TRUE where id = '47723e09-fa82-4622-91d3-5a710e7bab15'; +update re_us_post_regions set is_po_box = TRUE where id = 'f52640ce-8ef5-4083-a936-5477716cf010'; +update re_us_post_regions set is_po_box = TRUE where id = '1f508edb-74f6-476f-9ecd-2673cc22ef08'; +update re_us_post_regions set is_po_box = TRUE where id = 'fc400944-f7df-4d36-94ed-9ea47d66cc06'; +update re_us_post_regions set is_po_box = TRUE where id = 'fc400944-f7df-4d36-94ed-9ea47d66cc06'; +update re_us_post_regions set is_po_box = TRUE where id = 'e25dc1a1-6e5e-4fb3-b1be-7809be76df66'; +update re_us_post_regions set is_po_box = TRUE where id = 'b664ba12-bf64-4f85-bc9a-a6c3de2eb005'; +update re_us_post_regions set is_po_box = TRUE where id = 'b6edd770-77e4-4d61-ae33-e83ad782bb6f'; +update re_us_post_regions set is_po_box = TRUE where id = 'ba3f50cb-7eab-4bc7-bef7-04521219c50c'; +update re_us_post_regions set is_po_box = TRUE where id = '8046a57e-432f-4106-a2f9-2c23048d9853'; +update re_us_post_regions set is_po_box = TRUE where id = '8046a57e-432f-4106-a2f9-2c23048d9853'; +update re_us_post_regions set is_po_box = TRUE where id = '8006a68a-6489-4fd6-9237-91a47ab25019'; +update re_us_post_regions set is_po_box = TRUE where id = 'be1c9b15-87e1-4c39-84fe-82bff9b00b9b'; +update re_us_post_regions set is_po_box = TRUE where id = 'a0b0026c-a999-4530-b4ec-787b54b44b63'; +update re_us_post_regions set is_po_box = TRUE where id = 'a0b0026c-a999-4530-b4ec-787b54b44b63'; +update re_us_post_regions set is_po_box = TRUE where id = '39fb0325-f001-4f14-9d57-4ff33fac2f2e'; +update re_us_post_regions set is_po_box = TRUE where id = 'e1aaf5b4-1174-4811-8fb1-a198b74468c8'; +update re_us_post_regions set is_po_box = TRUE where id = 'a6eb9a65-e77f-4241-b4ed-01587df50496'; +update re_us_post_regions set is_po_box = TRUE where id = 'a6eb9a65-e77f-4241-b4ed-01587df50496'; +update re_us_post_regions set is_po_box = TRUE where id = '97c2fe92-06bf-4c76-bf11-89f946a9d1c4'; +update re_us_post_regions set is_po_box = TRUE where id = '97c2fe92-06bf-4c76-bf11-89f946a9d1c4'; +update re_us_post_regions set is_po_box = TRUE where id = '289129b3-dde1-4711-9b20-328a8e13c3cd'; +update re_us_post_regions set is_po_box = TRUE where id = '289129b3-dde1-4711-9b20-328a8e13c3cd'; +update re_us_post_regions set is_po_box = TRUE where id = '289129b3-dde1-4711-9b20-328a8e13c3cd'; +update re_us_post_regions set is_po_box = TRUE where id = '393f99da-0456-462e-823c-eb76b28cc34c'; +update re_us_post_regions set is_po_box = TRUE where id = '78063250-c8ae-4e12-8650-6e8f24c16d89'; +update re_us_post_regions set is_po_box = TRUE where id = 'bd720226-a263-408e-bf5c-fafd6f96b66e'; +update re_us_post_regions set is_po_box = TRUE where id = 'bd720226-a263-408e-bf5c-fafd6f96b66e'; +update re_us_post_regions set is_po_box = TRUE where id = 'bf9fbfa0-a3dd-4791-92ec-8b631d58f5ad'; +update re_us_post_regions set is_po_box = TRUE where id = 'c90c9059-01b1-4b61-b25e-a60ee57fd166'; +update re_us_post_regions set is_po_box = TRUE where id = 'dc49b8bd-5b54-4b14-a816-f15b1c96aa59'; +update re_us_post_regions set is_po_box = TRUE where id = '392775a0-f658-4b4d-8aa1-739c0038a958'; +update re_us_post_regions set is_po_box = TRUE where id = '916c707d-350c-4a7a-bcde-74663185eeb1'; +update re_us_post_regions set is_po_box = TRUE where id = '39fd4e53-1804-4487-81d3-fd4f0b7f8754'; +update re_us_post_regions set is_po_box = TRUE where id = '4784636f-b335-4922-8dee-c5d7b94ff4e4'; +update re_us_post_regions set is_po_box = TRUE where id = 'a7638ed1-5b99-45f3-9ad8-073f5392396b'; +update re_us_post_regions set is_po_box = TRUE where id = '0ffee6ef-1806-416f-a687-9f95059e3a79'; +update re_us_post_regions set is_po_box = TRUE where id = '02bc5cad-d81d-41b0-bf04-262c00770afc'; +update re_us_post_regions set is_po_box = TRUE where id = 'b9dd5348-b2c5-489b-930f-f29c8939ad26'; +update re_us_post_regions set is_po_box = TRUE where id = '5b74ffca-dd8a-4325-8074-9852711d83d8'; +update re_us_post_regions set is_po_box = TRUE where id = '8f40e2dd-9a7f-4ad9-b1b2-7e1b1b45fc06'; +update re_us_post_regions set is_po_box = TRUE where id = '81f63b6c-dd4f-4e38-b37d-388f88ec99ef'; +update re_us_post_regions set is_po_box = TRUE where id = '81f63b6c-dd4f-4e38-b37d-388f88ec99ef'; +update re_us_post_regions set is_po_box = TRUE where id = 'f9510981-c20c-400a-9a1f-4a2f1af94fd2'; +update re_us_post_regions set is_po_box = TRUE where id = '6c02f187-fd1d-45d1-9048-bf7fba6c4a51'; +update re_us_post_regions set is_po_box = TRUE where id = '9bc41c5b-2056-4f66-ba37-3cce22c019ba'; +update re_us_post_regions set is_po_box = TRUE where id = '9693ea96-cd4a-4fdd-afd1-efd72251e6ea'; +update re_us_post_regions set is_po_box = TRUE where id = 'cf4f1e72-efa1-45ef-b5f2-9dd52ccfacfd'; +update re_us_post_regions set is_po_box = TRUE where id = 'ec38a461-88de-4e17-a196-7eda42a0df77'; +update re_us_post_regions set is_po_box = TRUE where id = '4babfde5-cd0e-49ca-a87b-d6317a848769'; +update re_us_post_regions set is_po_box = TRUE where id = '4babfde5-cd0e-49ca-a87b-d6317a848769'; +update re_us_post_regions set is_po_box = TRUE where id = 'e40a450d-b740-4d8d-8dcf-5d266058c1f4'; +update re_us_post_regions set is_po_box = TRUE where id = '22100e71-aa9c-468d-8e03-08956a017bde'; +update re_us_post_regions set is_po_box = TRUE where id = '39d5b469-e0b5-499b-858b-ef5bc32f395c'; +update re_us_post_regions set is_po_box = TRUE where id = '8e881ea3-6bfa-4e08-8316-3277418e797b'; +update re_us_post_regions set is_po_box = TRUE where id = '8e881ea3-6bfa-4e08-8316-3277418e797b'; +update re_us_post_regions set is_po_box = TRUE where id = '059b359a-3a7a-49c3-9312-30658482e64d'; +update re_us_post_regions set is_po_box = TRUE where id = '059b359a-3a7a-49c3-9312-30658482e64d'; +update re_us_post_regions set is_po_box = TRUE where id = '059b359a-3a7a-49c3-9312-30658482e64d'; +update re_us_post_regions set is_po_box = TRUE where id = '02d5a453-9a9d-434d-98d0-6b25b4969602'; +update re_us_post_regions set is_po_box = TRUE where id = '02d5a453-9a9d-434d-98d0-6b25b4969602'; +update re_us_post_regions set is_po_box = TRUE where id = 'acad0c92-7585-4c40-8b70-9389c910c5c1'; +update re_us_post_regions set is_po_box = TRUE where id = '2019cc09-7e45-451d-965b-4c78049e4055'; +update re_us_post_regions set is_po_box = TRUE where id = '9ad9e579-4f89-4abe-a607-fb70a6f14746'; +update re_us_post_regions set is_po_box = TRUE where id = '9ad9e579-4f89-4abe-a607-fb70a6f14746'; +update re_us_post_regions set is_po_box = TRUE where id = '77050242-416f-4386-bd48-9badd60ef626'; +update re_us_post_regions set is_po_box = TRUE where id = 'c25f1b94-1994-48e0-b070-6d8117d35616'; +update re_us_post_regions set is_po_box = TRUE where id = '835a7b79-c7d1-4452-bb18-8f4c673cb28e'; +update re_us_post_regions set is_po_box = TRUE where id = 'dfaa0793-f9dc-4ac8-88b7-a8c5a00764ab'; +update re_us_post_regions set is_po_box = TRUE where id = '12ede3f9-598a-4399-b2f0-807b985834b5'; +update re_us_post_regions set is_po_box = TRUE where id = '9460a940-e9b4-4619-a2d6-e7aa79a8ceef'; +update re_us_post_regions set is_po_box = TRUE where id = 'cbe4fd0e-ce7c-43a4-af91-d215c9650b14'; +update re_us_post_regions set is_po_box = TRUE where id = '3617ce9d-6599-4a82-86b2-b7d0e3249895'; +update re_us_post_regions set is_po_box = TRUE where id = '3617ce9d-6599-4a82-86b2-b7d0e3249895'; +update re_us_post_regions set is_po_box = TRUE where id = '24eea082-62fa-41cf-bd5b-e47f06240371'; +update re_us_post_regions set is_po_box = TRUE where id = '2fa9d1fa-088a-41f6-9690-d4d230ed5b71'; +update re_us_post_regions set is_po_box = TRUE where id = 'ffaa18a4-83ed-41a5-a981-e2ad707eab46'; +update re_us_post_regions set is_po_box = TRUE where id = '79571b3b-6d84-4699-aaff-d31199018ef9'; +update re_us_post_regions set is_po_box = TRUE where id = '79571b3b-6d84-4699-aaff-d31199018ef9'; +update re_us_post_regions set is_po_box = TRUE where id = 'ae7a7b17-1e95-4d18-905e-69f80d17e545'; +update re_us_post_regions set is_po_box = TRUE where id = 'ae7a7b17-1e95-4d18-905e-69f80d17e545'; +update re_us_post_regions set is_po_box = TRUE where id = '6478aed3-31cb-4322-9aae-d7892f8dc131'; +update re_us_post_regions set is_po_box = TRUE where id = 'dffabe87-4fab-42d2-a35b-2ddb9b868754'; +update re_us_post_regions set is_po_box = TRUE where id = '673ea38c-4579-414d-a5db-24cf0dd65629'; +update re_us_post_regions set is_po_box = TRUE where id = '2796035d-4f59-437b-bff5-413e42db3f6a'; +update re_us_post_regions set is_po_box = TRUE where id = 'ba009a5e-f7ac-4041-affa-4b62a6f44de2'; +update re_us_post_regions set is_po_box = TRUE where id = 'ba009a5e-f7ac-4041-affa-4b62a6f44de2'; +update re_us_post_regions set is_po_box = TRUE where id = 'd9ef05db-43a1-401b-a28e-c43c2ad9c7b3'; +update re_us_post_regions set is_po_box = TRUE where id = '2c46499a-fb4a-4ddf-8928-7336e4ce6272'; +update re_us_post_regions set is_po_box = TRUE where id = '16d50324-92bd-4255-9bce-866d0a9de745'; +update re_us_post_regions set is_po_box = TRUE where id = 'b1de4d91-08c2-408c-8672-baa4de400d19'; +update re_us_post_regions set is_po_box = TRUE where id = '65041a3e-76bf-4878-8a49-b9ea2c79dc6c'; +update re_us_post_regions set is_po_box = TRUE where id = '79a97fa5-45d0-4dad-8c41-175893feb0a4'; +update re_us_post_regions set is_po_box = TRUE where id = '50c64e72-4762-4313-91cc-bf5af8b50b8b'; +update re_us_post_regions set is_po_box = TRUE where id = 'd7dff60e-ebad-4e4c-a798-229fb3dd8d6b'; +update re_us_post_regions set is_po_box = TRUE where id = 'f6d3c815-9fcb-46e0-b0c8-53ba4439c97e'; +update re_us_post_regions set is_po_box = TRUE where id = '6b1ed46f-66b4-4ab8-91c6-680708896359'; +update re_us_post_regions set is_po_box = TRUE where id = 'dabaa6be-23b3-40ab-9233-d9f69b755060'; +update re_us_post_regions set is_po_box = TRUE where id = '82da7c98-85e8-461e-9e38-fb5c3d72627c'; +update re_us_post_regions set is_po_box = TRUE where id = '82da7c98-85e8-461e-9e38-fb5c3d72627c'; +update re_us_post_regions set is_po_box = TRUE where id = '57f50ab0-4e1c-4025-a52d-aa945bb965f7'; +update re_us_post_regions set is_po_box = TRUE where id = '7d22c0c8-7778-40f0-ad80-2cc512276777'; +update re_us_post_regions set is_po_box = TRUE where id = '7d22c0c8-7778-40f0-ad80-2cc512276777'; +update re_us_post_regions set is_po_box = TRUE where id = '9dcb2fe0-c6e1-46c0-8ff2-eb358a20094b'; +update re_us_post_regions set is_po_box = TRUE where id = '9dcb2fe0-c6e1-46c0-8ff2-eb358a20094b'; +update re_us_post_regions set is_po_box = TRUE where id = '465d3254-970e-46b9-a98e-ae13ce226ac7'; +update re_us_post_regions set is_po_box = TRUE where id = '75e45a5b-fa79-46eb-8337-d37e8a40b0fb'; +update re_us_post_regions set is_po_box = TRUE where id = '723a732d-c1f1-4694-8ff4-f8ce01468fde'; +update re_us_post_regions set is_po_box = TRUE where id = '5bf5a80c-4ee8-4add-b86a-f001f1eb8783'; +update re_us_post_regions set is_po_box = TRUE where id = '01d156f6-3ac9-4579-8674-bb026c2d1017'; +update re_us_post_regions set is_po_box = TRUE where id = '866e5172-a9cd-488f-a68a-9b8dd7a509da'; +update re_us_post_regions set is_po_box = TRUE where id = 'ca456f57-bb2c-4c0a-bf36-a4b4bda51b9f'; +update re_us_post_regions set is_po_box = TRUE where id = '0eb5c9ca-2621-4196-b1e2-34938fd6876a'; +update re_us_post_regions set is_po_box = TRUE where id = '2172d9cb-208b-4597-b01b-d3b7844b83fc'; +update re_us_post_regions set is_po_box = TRUE where id = 'ee2bf139-e2fa-4bf0-9fdf-6382ee32e4fe'; +update re_us_post_regions set is_po_box = TRUE where id = 'b3ae5fe1-0426-4e5f-8174-814c011d9a64'; +update re_us_post_regions set is_po_box = TRUE where id = 'cc5e3568-936e-4112-af52-265806e3add5'; +update re_us_post_regions set is_po_box = TRUE where id = '1a4b9013-d1e3-4fc4-b9e5-a4a8caabc5e4'; +update re_us_post_regions set is_po_box = TRUE where id = 'a5788c94-785a-4b37-b89c-9ef13ef89515'; +update re_us_post_regions set is_po_box = TRUE where id = 'cec01177-8b44-446e-9f17-ea8b0627bf3c'; +update re_us_post_regions set is_po_box = TRUE where id = 'cec01177-8b44-446e-9f17-ea8b0627bf3c'; +update re_us_post_regions set is_po_box = TRUE where id = 'cec01177-8b44-446e-9f17-ea8b0627bf3c'; +update re_us_post_regions set is_po_box = TRUE where id = 'f1a94a78-70dd-431d-b80e-0ff31320b0f8'; +update re_us_post_regions set is_po_box = TRUE where id = '0ab94b63-bde6-40b9-888e-401a11ee9887'; +update re_us_post_regions set is_po_box = TRUE where id = 'aca486e1-904d-413a-9162-1621dd922b8f'; +update re_us_post_regions set is_po_box = TRUE where id = '92e9ddbd-e130-4ea1-8ff1-c5333cbec00d'; +update re_us_post_regions set is_po_box = TRUE where id = '92e9ddbd-e130-4ea1-8ff1-c5333cbec00d'; +update re_us_post_regions set is_po_box = TRUE where id = 'b85646f2-d4c9-4216-a248-3963fb56efb5'; +update re_us_post_regions set is_po_box = TRUE where id = 'b85646f2-d4c9-4216-a248-3963fb56efb5'; +update re_us_post_regions set is_po_box = TRUE where id = 'a9a39f3a-7580-4763-978a-e8fa456ed167'; +update re_us_post_regions set is_po_box = TRUE where id = '0ffe5d02-2428-446d-a995-a26ddbb8ad57'; +update re_us_post_regions set is_po_box = TRUE where id = '0ffe5d02-2428-446d-a995-a26ddbb8ad57'; +update re_us_post_regions set is_po_box = TRUE where id = 'c0d6fcb7-c8ae-4e9a-87be-06694bb5c0f3'; +update re_us_post_regions set is_po_box = TRUE where id = '5f67892f-4850-40da-a2e5-d40c24eb9b6e'; +update re_us_post_regions set is_po_box = TRUE where id = '5f67892f-4850-40da-a2e5-d40c24eb9b6e'; +update re_us_post_regions set is_po_box = TRUE where id = '5f67892f-4850-40da-a2e5-d40c24eb9b6e'; +update re_us_post_regions set is_po_box = TRUE where id = 'fb4a3c93-c877-47bc-b5de-f66cf0308bb7'; +update re_us_post_regions set is_po_box = TRUE where id = '0adf863a-359f-4272-8722-c6b6fce3b4c7'; +update re_us_post_regions set is_po_box = TRUE where id = '19bad29a-9af4-4b4c-99e3-03d9a979bed9'; +update re_us_post_regions set is_po_box = TRUE where id = '59b8554a-eb6c-4664-aea6-00d91057acfc'; +update re_us_post_regions set is_po_box = TRUE where id = '59b8554a-eb6c-4664-aea6-00d91057acfc'; +update re_us_post_regions set is_po_box = TRUE where id = '59b8554a-eb6c-4664-aea6-00d91057acfc'; +update re_us_post_regions set is_po_box = TRUE where id = 'ab35cd01-440a-4ab0-bab7-5352a123a45c'; +update re_us_post_regions set is_po_box = TRUE where id = 'f2e8fc60-c410-43d7-a9fa-65ab99e62150'; +update re_us_post_regions set is_po_box = TRUE where id = 'ab640803-82cf-4387-9b21-1e06d6f7a026'; +update re_us_post_regions set is_po_box = TRUE where id = '8a2bea3f-0788-4e00-84b4-12ea9f14e810'; +update re_us_post_regions set is_po_box = TRUE where id = 'a251ee59-2bee-40d6-82b4-e63943e319cc'; +update re_us_post_regions set is_po_box = TRUE where id = '5ac5b909-22de-4c65-a4c9-594ab808124b'; +update re_us_post_regions set is_po_box = TRUE where id = '3d363ea7-aba6-4e68-9a90-acd73d76b8f0'; +update re_us_post_regions set is_po_box = TRUE where id = 'bc303799-fa49-4f90-a4f6-babe55731593'; +update re_us_post_regions set is_po_box = TRUE where id = '8e276d77-0cde-4498-acbd-ca94b3332dfb'; +update re_us_post_regions set is_po_box = TRUE where id = '8e276d77-0cde-4498-acbd-ca94b3332dfb'; +update re_us_post_regions set is_po_box = TRUE where id = '0841595a-4c9d-4414-8c22-6d072e60a317'; +update re_us_post_regions set is_po_box = TRUE where id = '5dae622b-7718-46ca-93ba-1727ccdd32ee'; +update re_us_post_regions set is_po_box = TRUE where id = 'f320c9d0-46d7-4690-b21b-56bc6bec59bd'; +update re_us_post_regions set is_po_box = TRUE where id = '523fd717-ef48-4ed8-a289-e6d84a00978d'; +update re_us_post_regions set is_po_box = TRUE where id = 'a02912ef-0e42-432f-bbc7-4708f4378a8a'; +update re_us_post_regions set is_po_box = TRUE where id = '5c40764c-0579-4483-926f-68daf9eb388d'; +update re_us_post_regions set is_po_box = TRUE where id = '5c40764c-0579-4483-926f-68daf9eb388d'; +update re_us_post_regions set is_po_box = TRUE where id = '8558d8ee-888e-4b91-9583-b1d9aea00a9c'; +update re_us_post_regions set is_po_box = TRUE where id = '9dc96cac-2911-426b-9fb5-8b52ff0e2ee5'; +update re_us_post_regions set is_po_box = TRUE where id = 'd81efc0e-20a5-44fc-b560-010d8fb7bc06'; +update re_us_post_regions set is_po_box = TRUE where id = 'ecdbdb33-d914-49fd-b4ee-02dc1758e075'; +update re_us_post_regions set is_po_box = TRUE where id = '25a541b6-db75-4237-bf57-af89f376d234'; +update re_us_post_regions set is_po_box = TRUE where id = '25a541b6-db75-4237-bf57-af89f376d234'; +update re_us_post_regions set is_po_box = TRUE where id = 'e467a866-d3ec-4818-9fbe-04313b66aae8'; +update re_us_post_regions set is_po_box = TRUE where id = '0281b641-0c19-40f8-9d37-887feda15d53'; +update re_us_post_regions set is_po_box = TRUE where id = 'a9dd697f-b982-419e-88a0-cea051eb4ccf'; +update re_us_post_regions set is_po_box = TRUE where id = 'dfeda0b2-bd98-48e6-8a0e-0860faae768f'; +update re_us_post_regions set is_po_box = TRUE where id = '3e0f8603-c20a-4d3f-97ae-232107df55a8'; +update re_us_post_regions set is_po_box = TRUE where id = 'e497dcdf-3b95-4eeb-a188-5ae9fb90db9a'; +update re_us_post_regions set is_po_box = TRUE where id = '1d86014f-2765-483c-9ee8-7f6940056e99'; +update re_us_post_regions set is_po_box = TRUE where id = '09571c3f-6dca-49fd-807a-5cc24fe08d69'; +update re_us_post_regions set is_po_box = TRUE where id = 'a3851576-783f-4102-9879-4164274af0ed'; +update re_us_post_regions set is_po_box = TRUE where id = '492069da-f3e7-4ae4-97c2-f8acd5ced104'; +update re_us_post_regions set is_po_box = TRUE where id = '5afd9140-939d-4a06-b264-17e5f81db614'; +update re_us_post_regions set is_po_box = TRUE where id = 'e246a46f-305f-4abc-b776-321b0e33f531'; +update re_us_post_regions set is_po_box = TRUE where id = '02e1ff15-a366-4e9d-bd94-687c32a44925'; +update re_us_post_regions set is_po_box = TRUE where id = '5bf0d133-ac52-4d2a-a354-78673c14c270'; +update re_us_post_regions set is_po_box = TRUE where id = 'bf6c2d63-3052-49a8-bdfa-1ec24556adef'; +update re_us_post_regions set is_po_box = TRUE where id = 'c0296caf-e983-4ca8-a3ea-9d703858e94e'; +update re_us_post_regions set is_po_box = TRUE where id = 'ce5462cb-c039-4694-bde2-992352b085c5'; +update re_us_post_regions set is_po_box = TRUE where id = '477debc2-50f1-4484-8841-7368d7e1e2d4'; +update re_us_post_regions set is_po_box = TRUE where id = '94d3f6c5-3e56-4c59-baac-0b4a39cc7625'; +update re_us_post_regions set is_po_box = TRUE where id = '7aa51613-9449-4053-a784-8d72b38a6556'; +update re_us_post_regions set is_po_box = TRUE where id = '04ee1ec8-1be9-4ad5-aeff-244e8a117e03'; +update re_us_post_regions set is_po_box = TRUE where id = 'ae5380cb-154a-4b9e-83d6-2f9e6b06949a'; +update re_us_post_regions set is_po_box = TRUE where id = '337e7127-1913-48be-bec0-437e9dc13447'; +update re_us_post_regions set is_po_box = TRUE where id = 'b521114f-71c2-457d-8fe9-c549c76c27ab'; +update re_us_post_regions set is_po_box = TRUE where id = 'b521114f-71c2-457d-8fe9-c549c76c27ab'; +update re_us_post_regions set is_po_box = TRUE where id = 'b521114f-71c2-457d-8fe9-c549c76c27ab'; +update re_us_post_regions set is_po_box = TRUE where id = 'a081a8c3-06e8-4af2-8035-729390252737'; +update re_us_post_regions set is_po_box = TRUE where id = '1948be7e-491e-4aae-94c6-8c2c56b34389'; +update re_us_post_regions set is_po_box = TRUE where id = '1948be7e-491e-4aae-94c6-8c2c56b34389'; +update re_us_post_regions set is_po_box = TRUE where id = '1948be7e-491e-4aae-94c6-8c2c56b34389'; +update re_us_post_regions set is_po_box = TRUE where id = 'ee35e586-5767-4d76-ac24-3e6bd48a4643'; +update re_us_post_regions set is_po_box = TRUE where id = 'f47b1243-f2b1-4e2f-b8d2-240de3bd1684'; +update re_us_post_regions set is_po_box = TRUE where id = 'f47b1243-f2b1-4e2f-b8d2-240de3bd1684'; +update re_us_post_regions set is_po_box = TRUE where id = '1bad6138-cc28-4543-b0cf-0bef30af0608'; +update re_us_post_regions set is_po_box = TRUE where id = '1bad6138-cc28-4543-b0cf-0bef30af0608'; +update re_us_post_regions set is_po_box = TRUE where id = '1bad6138-cc28-4543-b0cf-0bef30af0608'; +update re_us_post_regions set is_po_box = TRUE where id = '79bed68b-d563-46f4-878e-ec88aa4a34fd'; +update re_us_post_regions set is_po_box = TRUE where id = 'b7aaaf42-9fee-4e75-9bb0-f0b66d996df0'; +update re_us_post_regions set is_po_box = TRUE where id = '45312b52-61c2-4ac4-9838-38dde1a57114'; +update re_us_post_regions set is_po_box = TRUE where id = 'c373bedf-bb51-40cf-a2d9-678a7f1de2b7'; +update re_us_post_regions set is_po_box = TRUE where id = 'bfb51e45-9d28-470c-88be-a89f244e5620'; +update re_us_post_regions set is_po_box = TRUE where id = '1ad023e9-a628-413e-aa97-d7a3766f30c1'; +update re_us_post_regions set is_po_box = TRUE where id = '053f4f93-9f18-4991-9a01-4ea0e08cbbf6'; +update re_us_post_regions set is_po_box = TRUE where id = '22d0a149-d5a1-4624-a8fb-a64c6de09309'; +update re_us_post_regions set is_po_box = TRUE where id = '1e385bed-5228-47ab-b919-9dc62b0fc81a'; +update re_us_post_regions set is_po_box = TRUE where id = '68a581bf-6b3c-4b4d-8b8a-173f680dfdb1'; +update re_us_post_regions set is_po_box = TRUE where id = '68a581bf-6b3c-4b4d-8b8a-173f680dfdb1'; +update re_us_post_regions set is_po_box = TRUE where id = '68a581bf-6b3c-4b4d-8b8a-173f680dfdb1'; +update re_us_post_regions set is_po_box = TRUE where id = 'b6474bd7-a06b-4974-b9ac-0deff397bee9'; +update re_us_post_regions set is_po_box = TRUE where id = '700c4ef7-7044-45b4-a6ba-ba52cc6de095'; +update re_us_post_regions set is_po_box = TRUE where id = '10d32311-add3-48fc-bc1a-790735632351'; +update re_us_post_regions set is_po_box = TRUE where id = 'c850a9ac-181f-4f6f-81fa-e6666490790e'; +update re_us_post_regions set is_po_box = TRUE where id = 'c850a9ac-181f-4f6f-81fa-e6666490790e'; +update re_us_post_regions set is_po_box = TRUE where id = '099911d1-500f-49b3-be22-aff330828a7e'; +update re_us_post_regions set is_po_box = TRUE where id = '099911d1-500f-49b3-be22-aff330828a7e'; +update re_us_post_regions set is_po_box = TRUE where id = '099911d1-500f-49b3-be22-aff330828a7e'; +update re_us_post_regions set is_po_box = TRUE where id = '5e1f9d59-d577-44a4-b008-655b35e828b5'; +update re_us_post_regions set is_po_box = TRUE where id = '5e1f9d59-d577-44a4-b008-655b35e828b5'; +update re_us_post_regions set is_po_box = TRUE where id = '5e1f9d59-d577-44a4-b008-655b35e828b5'; +update re_us_post_regions set is_po_box = TRUE where id = '5e1f9d59-d577-44a4-b008-655b35e828b5'; +update re_us_post_regions set is_po_box = TRUE where id = 'c4384804-145a-4cea-93ec-0018ebe5e1c5'; +update re_us_post_regions set is_po_box = TRUE where id = 'f6d42a71-692c-49ad-9517-0565eb76970e'; +update re_us_post_regions set is_po_box = TRUE where id = '29696fa6-f3d9-4abc-af59-e48288e81794'; +update re_us_post_regions set is_po_box = TRUE where id = '4a1f0780-1c54-4bec-860b-69d14964174e'; +update re_us_post_regions set is_po_box = TRUE where id = '4a1f0780-1c54-4bec-860b-69d14964174e'; +update re_us_post_regions set is_po_box = TRUE where id = '4a1f0780-1c54-4bec-860b-69d14964174e'; +update re_us_post_regions set is_po_box = TRUE where id = '4a1f0780-1c54-4bec-860b-69d14964174e'; +update re_us_post_regions set is_po_box = TRUE where id = 'c5ae66e1-43f8-4f20-b251-37c8c7368c13'; +update re_us_post_regions set is_po_box = TRUE where id = '1c159160-bea4-45d7-829c-eb08d7c345a9'; +update re_us_post_regions set is_po_box = TRUE where id = '4e49cd1f-0fa2-4c17-866c-92f8fc403800'; +update re_us_post_regions set is_po_box = TRUE where id = '2254bf2e-c87b-4c9a-bd24-c0d3ace356ec'; +update re_us_post_regions set is_po_box = TRUE where id = '2254bf2e-c87b-4c9a-bd24-c0d3ace356ec'; +update re_us_post_regions set is_po_box = TRUE where id = '2254bf2e-c87b-4c9a-bd24-c0d3ace356ec'; +update re_us_post_regions set is_po_box = TRUE where id = 'b73b518f-c0f9-4ccd-8e30-77b391aa29b7'; +update re_us_post_regions set is_po_box = TRUE where id = 'a4a7952e-bc15-4dc8-9703-114b8428a093'; +update re_us_post_regions set is_po_box = TRUE where id = '9ecd16a7-cb3d-4921-8db3-69d3829178c7'; +update re_us_post_regions set is_po_box = TRUE where id = '2b66b917-5f0f-4430-9d99-cd0ceeab6616'; +update re_us_post_regions set is_po_box = TRUE where id = '1ad54eea-37fa-4d3c-9226-d6b28c7a6539'; +update re_us_post_regions set is_po_box = TRUE where id = 'd017665a-181d-4dd8-a030-46e11ba6ddb2'; +update re_us_post_regions set is_po_box = TRUE where id = '5c377154-7f63-4ab9-a004-e4d6df5da5d6'; +update re_us_post_regions set is_po_box = TRUE where id = 'c9336494-d0e0-4d55-80cd-d33fcba1e8c3'; +update re_us_post_regions set is_po_box = TRUE where id = 'ad274d2f-024a-4fff-a83c-0cc4e2fa6958'; +update re_us_post_regions set is_po_box = TRUE where id = 'cedd7214-db75-4643-8770-2d9903f7c13a'; +update re_us_post_regions set is_po_box = TRUE where id = '3f768333-0d50-4337-8d9c-f9c2e05d076e'; +update re_us_post_regions set is_po_box = TRUE where id = '3f768333-0d50-4337-8d9c-f9c2e05d076e'; +update re_us_post_regions set is_po_box = TRUE where id = '8b5627d8-aea6-4632-b34e-b0fff76841dc'; +update re_us_post_regions set is_po_box = TRUE where id = 'a1252c32-b1b5-476a-a8dd-f1db11626229'; +update re_us_post_regions set is_po_box = TRUE where id = 'a1f258b3-51c5-4b05-8258-347930cc831f'; +update re_us_post_regions set is_po_box = TRUE where id = '372eec71-3f1d-4d32-aaf2-a0c26f591f04'; +update re_us_post_regions set is_po_box = TRUE where id = '372eec71-3f1d-4d32-aaf2-a0c26f591f04'; +update re_us_post_regions set is_po_box = TRUE where id = '7d6880fc-d930-407c-9b28-aa0e0a503db6'; +update re_us_post_regions set is_po_box = TRUE where id = '7d6880fc-d930-407c-9b28-aa0e0a503db6'; +update re_us_post_regions set is_po_box = TRUE where id = '95be4dff-0385-4d57-881e-da51f2660f5a'; +update re_us_post_regions set is_po_box = TRUE where id = 'e3981390-e86d-486a-bbf9-faa483a2a222'; +update re_us_post_regions set is_po_box = TRUE where id = 'e3981390-e86d-486a-bbf9-faa483a2a222'; +update re_us_post_regions set is_po_box = TRUE where id = '4201b17f-f2f4-4c7a-a742-0f2cd6c232ad'; +update re_us_post_regions set is_po_box = TRUE where id = 'd6b524a1-4a20-4950-8196-d41d365df324'; +update re_us_post_regions set is_po_box = TRUE where id = '3deefcd9-8d5c-4f51-b2de-e602c163d37f'; +update re_us_post_regions set is_po_box = TRUE where id = '06e35832-0161-4c85-b9ff-227a3f010b11'; +update re_us_post_regions set is_po_box = TRUE where id = '06e35832-0161-4c85-b9ff-227a3f010b11'; +update re_us_post_regions set is_po_box = TRUE where id = '2387ccb5-9256-4855-9c70-44070d360ecb'; +update re_us_post_regions set is_po_box = TRUE where id = 'f592cb89-95f4-42e0-9836-af7b8a2d8863'; +update re_us_post_regions set is_po_box = TRUE where id = '553e519c-7295-456d-8ae8-230fb750ad08'; +update re_us_post_regions set is_po_box = TRUE where id = 'e5ecb938-53dc-4c7d-ae03-10cf077456ac'; +update re_us_post_regions set is_po_box = TRUE where id = '07aaf378-7247-4676-9d6f-054021a17125'; +update re_us_post_regions set is_po_box = TRUE where id = '0f29e6c9-b7f7-4652-84b6-dc94d863efd0'; +update re_us_post_regions set is_po_box = TRUE where id = 'dcddfe9e-0304-4ce3-aa4e-5b1db209e4a9'; +update re_us_post_regions set is_po_box = TRUE where id = 'f520b9f2-5518-4ab2-9d67-e6faa86e4295'; +update re_us_post_regions set is_po_box = TRUE where id = '5e0ffc8b-36c9-4fd4-b667-a2cef9974d6e'; +update re_us_post_regions set is_po_box = TRUE where id = '5d33140a-138e-490f-aa1e-68ad1fe2dc0c'; +update re_us_post_regions set is_po_box = TRUE where id = 'bf9f981f-70ad-4f92-b1a5-d2ce8535f544'; +update re_us_post_regions set is_po_box = TRUE where id = '15c3eaac-9e96-4562-a100-c783fb5d3c63'; +update re_us_post_regions set is_po_box = TRUE where id = '15c3eaac-9e96-4562-a100-c783fb5d3c63'; +update re_us_post_regions set is_po_box = TRUE where id = 'aeac3c1b-08a4-47b8-b83d-9a938a528210'; +update re_us_post_regions set is_po_box = TRUE where id = '8ae2d414-1e97-4546-b99a-ed28a332ffc2'; +update re_us_post_regions set is_po_box = TRUE where id = '2f2644e5-8f59-489f-8145-a0dba748235f'; +update re_us_post_regions set is_po_box = TRUE where id = '6140321b-c4d0-4cfe-8b2e-2ea4a2b19d44'; +update re_us_post_regions set is_po_box = TRUE where id = '81411ee3-9bed-4827-85df-3714b2c83f8b'; +update re_us_post_regions set is_po_box = TRUE where id = '032b5688-9838-40bf-a38c-1aead80dfe92'; +update re_us_post_regions set is_po_box = TRUE where id = '24b6965d-2e0a-4f18-b2e2-3c821bfd25c9'; +update re_us_post_regions set is_po_box = TRUE where id = '0911d7e2-2e9c-4de8-b52a-e8bf0c7cf6e5'; +update re_us_post_regions set is_po_box = TRUE where id = '45265b02-1263-49d9-a5ce-f74baadca980'; +update re_us_post_regions set is_po_box = TRUE where id = 'a4072246-fc84-4d3c-a4ef-93cde224fc39'; +update re_us_post_regions set is_po_box = TRUE where id = 'f5b0e589-23b6-4ee8-bf5b-bcc9d4953319'; +update re_us_post_regions set is_po_box = TRUE where id = '15284443-70fb-4aae-a990-d20b334055f3'; +update re_us_post_regions set is_po_box = TRUE where id = 'bfc2f7a7-0042-44f0-9f29-a0d7e939a9b2'; +update re_us_post_regions set is_po_box = TRUE where id = '613dc97c-50b3-4b7f-9317-3dfa0361885b'; +update re_us_post_regions set is_po_box = TRUE where id = '9d0d42c0-a333-4b1b-960e-b9f16da201f2'; +update re_us_post_regions set is_po_box = TRUE where id = '9d0d42c0-a333-4b1b-960e-b9f16da201f2'; +update re_us_post_regions set is_po_box = TRUE where id = '8dc3bb64-0fe8-479e-b0a0-4aec435e2d83'; +update re_us_post_regions set is_po_box = TRUE where id = '8dc3bb64-0fe8-479e-b0a0-4aec435e2d83'; +update re_us_post_regions set is_po_box = TRUE where id = 'e51330d5-0f76-46ab-b5f4-bd0d1cf204a2'; +update re_us_post_regions set is_po_box = TRUE where id = '67e1f1b3-a4cb-48de-b915-f91ee61b6924'; +update re_us_post_regions set is_po_box = TRUE where id = 'c8d9500c-126a-45c9-9e83-c275db75d831'; +update re_us_post_regions set is_po_box = TRUE where id = 'b3e11f8e-9d0f-4dcc-a021-bdce58fe4b6f'; +update re_us_post_regions set is_po_box = TRUE where id = 'b1d29559-fc5e-4ec9-8f75-7d80e2578659'; +update re_us_post_regions set is_po_box = TRUE where id = 'fa433afb-8824-4cd8-91ba-45c13be717f5'; +update re_us_post_regions set is_po_box = TRUE where id = '2782563f-1f19-4e31-8737-5a689f3a735c'; +update re_us_post_regions set is_po_box = TRUE where id = 'cdb11941-0f45-46de-8bd0-46790e4bfcc1'; +update re_us_post_regions set is_po_box = TRUE where id = 'cdb11941-0f45-46de-8bd0-46790e4bfcc1'; +update re_us_post_regions set is_po_box = TRUE where id = '5f807e8f-4252-4872-ac27-c199daf1cc74'; +update re_us_post_regions set is_po_box = TRUE where id = '924a103c-097e-4749-b7e6-5294044de498'; +update re_us_post_regions set is_po_box = TRUE where id = 'ac08991d-b5bd-4d4d-9e1a-f1a8efdeda0a'; +update re_us_post_regions set is_po_box = TRUE where id = 'a36bccd4-7551-4410-a4bf-8e4f840468cc'; +update re_us_post_regions set is_po_box = TRUE where id = '27ed8ca9-503d-4759-8230-7e86c0432a80'; +update re_us_post_regions set is_po_box = TRUE where id = '2b127ad7-dda4-4453-b444-007b44784a71'; +update re_us_post_regions set is_po_box = TRUE where id = '69306c44-a3e5-4ba1-812b-445d7778593a'; +update re_us_post_regions set is_po_box = TRUE where id = '2b6cfa23-0387-44ac-ad49-6f57a09b3b58'; +update re_us_post_regions set is_po_box = TRUE where id = 'dc905075-293a-42d3-8895-324ba236bb61'; +update re_us_post_regions set is_po_box = TRUE where id = '7269b62c-f7b0-4004-bfb6-63382bc87639'; +update re_us_post_regions set is_po_box = TRUE where id = '07b0d069-c1ad-4572-9eed-3a49de1106dd'; +update re_us_post_regions set is_po_box = TRUE where id = '07b0d069-c1ad-4572-9eed-3a49de1106dd'; +update re_us_post_regions set is_po_box = TRUE where id = 'fb3b7c3e-d93c-436b-aa53-2581d59e6fe8'; +update re_us_post_regions set is_po_box = TRUE where id = '26c42d3e-7c2d-426f-aa11-e2fa5cbd11a2'; +update re_us_post_regions set is_po_box = TRUE where id = 'b0faadca-b3ea-4576-b4d9-7888df3fd7b2'; +update re_us_post_regions set is_po_box = TRUE where id = '0b758cb8-81d9-436b-89e2-a51a589e7406'; +update re_us_post_regions set is_po_box = TRUE where id = 'adbaa2c6-4461-451d-803a-ef7171830e31'; +update re_us_post_regions set is_po_box = TRUE where id = 'adbaa2c6-4461-451d-803a-ef7171830e31'; +update re_us_post_regions set is_po_box = TRUE where id = 'adbaa2c6-4461-451d-803a-ef7171830e31'; +update re_us_post_regions set is_po_box = TRUE where id = 'f1697a59-ea7f-41c2-8a13-7c9d506c4142'; +update re_us_post_regions set is_po_box = TRUE where id = '243af5a8-6235-4005-b743-4399746b2968'; +update re_us_post_regions set is_po_box = TRUE where id = 'd3967746-51c4-4057-86e9-4ae02dc78607'; +update re_us_post_regions set is_po_box = TRUE where id = 'c84490b5-2049-48b8-8204-7c7c9a3d2000'; +update re_us_post_regions set is_po_box = TRUE where id = '8ae11109-0ad1-467b-94a9-0e2dd6d142c9'; +update re_us_post_regions set is_po_box = TRUE where id = '2f00f012-6fe5-4f49-b601-5c85ecd645cf'; +update re_us_post_regions set is_po_box = TRUE where id = '2f00f012-6fe5-4f49-b601-5c85ecd645cf'; +update re_us_post_regions set is_po_box = TRUE where id = '2f00f012-6fe5-4f49-b601-5c85ecd645cf'; +update re_us_post_regions set is_po_box = TRUE where id = '759860fe-0320-4480-8d95-8e0ae974c01c'; +update re_us_post_regions set is_po_box = TRUE where id = '3888fb64-3239-48f3-953d-c70d1d159ee7'; +update re_us_post_regions set is_po_box = TRUE where id = '57bfd954-a5c8-4e11-a5ae-f4564b1c570e'; +update re_us_post_regions set is_po_box = TRUE where id = '03e34af3-7262-4ab7-be3c-4ec3096307d2'; +update re_us_post_regions set is_po_box = TRUE where id = '28ba4a6f-5f9b-4e23-8775-1ee8b3c39849'; +update re_us_post_regions set is_po_box = TRUE where id = 'df1b827f-bfd1-4755-8df1-b5c88f128a32'; +update re_us_post_regions set is_po_box = TRUE where id = '12c0ab76-80b5-4433-9028-2f7cc5f53991'; +update re_us_post_regions set is_po_box = TRUE where id = 'db880159-114e-40ca-9ef0-8f2337572bd8'; +update re_us_post_regions set is_po_box = TRUE where id = '4f1c0921-3e68-4788-a84d-15dbbc6f5579'; +update re_us_post_regions set is_po_box = TRUE where id = '4f1c0921-3e68-4788-a84d-15dbbc6f5579'; +update re_us_post_regions set is_po_box = TRUE where id = '0d0359cb-90f7-4986-97f5-088c68722ae0'; +update re_us_post_regions set is_po_box = TRUE where id = '320b4b4d-1a20-4cbc-979a-c68fcda1921f'; +update re_us_post_regions set is_po_box = TRUE where id = '9db21c20-6037-4e7f-a463-6f0fd58da9cd'; +update re_us_post_regions set is_po_box = TRUE where id = '20676917-adee-4257-b871-d6ce068d2a48'; +update re_us_post_regions set is_po_box = TRUE where id = 'fc3ac2a5-1dbb-42e5-9039-002e94206cc2'; +update re_us_post_regions set is_po_box = TRUE where id = 'ba5476e6-7450-4c5f-a214-4af7e656c0ef'; +update re_us_post_regions set is_po_box = TRUE where id = 'c446fab4-474a-40c0-b509-1c2f6138fa98'; +update re_us_post_regions set is_po_box = TRUE where id = '8f68886e-84d0-4942-88e4-30342099679d'; +update re_us_post_regions set is_po_box = TRUE where id = 'd62e5626-6c5b-4331-bc0d-a3e39fef89b4'; +update re_us_post_regions set is_po_box = TRUE where id = 'd62e5626-6c5b-4331-bc0d-a3e39fef89b4'; +update re_us_post_regions set is_po_box = TRUE where id = '53280ef5-e989-463f-8fcc-ab87dfb78e27'; +update re_us_post_regions set is_po_box = TRUE where id = '48029c25-c8ab-46b3-98ec-9ef84a4fb100'; +update re_us_post_regions set is_po_box = TRUE where id = 'a066acf9-3e96-46df-8691-bc06fbfa550c'; +update re_us_post_regions set is_po_box = TRUE where id = '212d6f81-bd3e-4156-a320-351416c5d754'; +update re_us_post_regions set is_po_box = TRUE where id = '6b83651a-6c81-475c-b180-48c83039135f'; +update re_us_post_regions set is_po_box = TRUE where id = 'f1e23a6d-ea6b-43fd-b7f5-86654d87a7f6'; +update re_us_post_regions set is_po_box = TRUE where id = '470ad2b1-947d-4848-8b2e-0d6cd59b8e67'; +update re_us_post_regions set is_po_box = TRUE where id = '3437f5d3-4f6b-43f8-bdd5-0b672411fe20'; +update re_us_post_regions set is_po_box = TRUE where id = '66dcaa39-8022-459d-b205-44e15a5687e9'; +update re_us_post_regions set is_po_box = TRUE where id = 'c38cf10a-18f0-4335-a8ea-4bf815ddc7f1'; +update re_us_post_regions set is_po_box = TRUE where id = '9d364822-b237-4a84-9f0f-01a9c6b8971d'; +update re_us_post_regions set is_po_box = TRUE where id = '9d364822-b237-4a84-9f0f-01a9c6b8971d'; +update re_us_post_regions set is_po_box = TRUE where id = 'dcb98253-0c35-46cf-bb81-db0ef6650b67'; +update re_us_post_regions set is_po_box = TRUE where id = 'dcb98253-0c35-46cf-bb81-db0ef6650b67'; +update re_us_post_regions set is_po_box = TRUE where id = 'fdc6393c-ecf2-4bd3-9cac-c90d462e0bab'; +update re_us_post_regions set is_po_box = TRUE where id = 'fdc6393c-ecf2-4bd3-9cac-c90d462e0bab'; +update re_us_post_regions set is_po_box = TRUE where id = 'eef22296-11e0-40c9-9866-beb83a6d8337'; +update re_us_post_regions set is_po_box = TRUE where id = 'f403e19f-a627-4864-a75a-f842958ab3e0'; +update re_us_post_regions set is_po_box = TRUE where id = '4276646d-58c8-49d5-9012-c49ef04497bc'; +update re_us_post_regions set is_po_box = TRUE where id = '27c9fb6e-7827-478e-a24d-1174bc915a5a'; +update re_us_post_regions set is_po_box = TRUE where id = '7bdd2fca-48c8-4c3a-a7c2-ac97e17cc0a8'; +update re_us_post_regions set is_po_box = TRUE where id = '7bdd2fca-48c8-4c3a-a7c2-ac97e17cc0a8'; +update re_us_post_regions set is_po_box = TRUE where id = '7bdd2fca-48c8-4c3a-a7c2-ac97e17cc0a8'; +update re_us_post_regions set is_po_box = TRUE where id = '26869184-f0cc-42ae-8bda-bb8f5bf905d2'; +update re_us_post_regions set is_po_box = TRUE where id = '3c4fd90f-5746-4599-a0bc-5a8011e72445'; +update re_us_post_regions set is_po_box = TRUE where id = '1e223939-712a-4b7d-890b-8fbda7fc5111'; +update re_us_post_regions set is_po_box = TRUE where id = '274d0a95-5b99-4e4d-ba48-9fd8859dfc75'; +update re_us_post_regions set is_po_box = TRUE where id = '2f84e7bb-3c03-4727-a6a4-5d9bb4eede69'; +update re_us_post_regions set is_po_box = TRUE where id = '4d757193-6c6b-4e16-95d4-a46ec294779f'; +update re_us_post_regions set is_po_box = TRUE where id = 'd1204aa9-5eee-4d0a-a741-e653a1872702'; +update re_us_post_regions set is_po_box = TRUE where id = 'c039dd99-ec2f-4556-b049-edb83aca0832'; +update re_us_post_regions set is_po_box = TRUE where id = '5251d76d-d9b0-44ac-ac16-f6133b20de73'; +update re_us_post_regions set is_po_box = TRUE where id = '165f9473-4e11-4383-afd7-62c792a7fceb'; +update re_us_post_regions set is_po_box = TRUE where id = 'eaeabef7-abc6-46ea-af37-e5e464e47423'; +update re_us_post_regions set is_po_box = TRUE where id = 'eaeabef7-abc6-46ea-af37-e5e464e47423'; +update re_us_post_regions set is_po_box = TRUE where id = '2f211559-5f73-446e-af11-621eef4039bb'; +update re_us_post_regions set is_po_box = TRUE where id = 'c20dc0d2-678e-42d7-9693-3b05e8be82c7'; +update re_us_post_regions set is_po_box = TRUE where id = '23a28533-72ad-43b3-ab31-7f371c2a740b'; +update re_us_post_regions set is_po_box = TRUE where id = '30759d38-096c-4eb3-b35e-70ce6d3f69b1'; +update re_us_post_regions set is_po_box = TRUE where id = '30759d38-096c-4eb3-b35e-70ce6d3f69b1'; +update re_us_post_regions set is_po_box = TRUE where id = 'd8986657-e63e-4e3e-b1ab-712e1cf87f2b'; +update re_us_post_regions set is_po_box = TRUE where id = 'd355212f-c476-4429-b734-045ce0ebb536'; +update re_us_post_regions set is_po_box = TRUE where id = '903dfb70-80d6-4d7e-8a4b-0e1f64332144'; +update re_us_post_regions set is_po_box = TRUE where id = '7601bfa5-a628-416a-abc3-82a4ab899af9'; +update re_us_post_regions set is_po_box = TRUE where id = '4920b55f-f4a1-44c2-a606-8dbb680b4b9f'; +update re_us_post_regions set is_po_box = TRUE where id = '330f6536-fc7b-4df9-81a6-74825109bf55'; +update re_us_post_regions set is_po_box = TRUE where id = '036cba4d-4126-4bc4-af63-32d6b4cad75f'; +update re_us_post_regions set is_po_box = TRUE where id = '036cba4d-4126-4bc4-af63-32d6b4cad75f'; +update re_us_post_regions set is_po_box = TRUE where id = '036cba4d-4126-4bc4-af63-32d6b4cad75f'; +update re_us_post_regions set is_po_box = TRUE where id = '4042c24d-76df-4c13-bbbd-948c7eb08900'; +update re_us_post_regions set is_po_box = TRUE where id = 'ea1f23ba-d61b-43f6-8717-c69160511283'; +update re_us_post_regions set is_po_box = TRUE where id = 'aaba573b-095c-4b9c-8951-f5ba2e2ce9c3'; +update re_us_post_regions set is_po_box = TRUE where id = 'c9e1bb33-ea27-4ca4-a636-c5bf43562f7a'; +update re_us_post_regions set is_po_box = TRUE where id = '678c0f97-c4c5-4f06-873e-d4e8d1757fd0'; +update re_us_post_regions set is_po_box = TRUE where id = '0542db0d-14f6-45f9-b4ab-0196e47b813d'; +update re_us_post_regions set is_po_box = TRUE where id = '0542db0d-14f6-45f9-b4ab-0196e47b813d'; +update re_us_post_regions set is_po_box = TRUE where id = '0542db0d-14f6-45f9-b4ab-0196e47b813d'; +update re_us_post_regions set is_po_box = TRUE where id = '0542db0d-14f6-45f9-b4ab-0196e47b813d'; +update re_us_post_regions set is_po_box = TRUE where id = '0542db0d-14f6-45f9-b4ab-0196e47b813d'; +update re_us_post_regions set is_po_box = TRUE where id = '1fb9e037-8af2-49f4-a265-dd27fb28f7e6'; +update re_us_post_regions set is_po_box = TRUE where id = '1fb9e037-8af2-49f4-a265-dd27fb28f7e6'; +update re_us_post_regions set is_po_box = TRUE where id = '1fb9e037-8af2-49f4-a265-dd27fb28f7e6'; +update re_us_post_regions set is_po_box = TRUE where id = '1fb9e037-8af2-49f4-a265-dd27fb28f7e6'; +update re_us_post_regions set is_po_box = TRUE where id = '29b6f8e1-aabc-4ef0-a17d-632836326849'; +update re_us_post_regions set is_po_box = TRUE where id = '2d5ce5d2-c4ff-45b5-9ff2-e40692c6f16a'; +update re_us_post_regions set is_po_box = TRUE where id = '2fd372df-f38d-46a9-b17b-ed95fbda3ac0'; +update re_us_post_regions set is_po_box = TRUE where id = '1bd0a45d-8b7b-40de-95a5-26ef13d0401d'; +update re_us_post_regions set is_po_box = TRUE where id = '3f825744-4516-4255-8d1e-d383e9152cc2'; +update re_us_post_regions set is_po_box = TRUE where id = '3f825744-4516-4255-8d1e-d383e9152cc2'; +update re_us_post_regions set is_po_box = TRUE where id = '880ec312-b7da-4086-964d-7b0ad13b464c'; +update re_us_post_regions set is_po_box = TRUE where id = 'cb91012e-7d6f-43dc-9632-912ad4e577b8'; +update re_us_post_regions set is_po_box = TRUE where id = '7cb58ca4-44fe-4a67-afae-424a74cd5b61'; +update re_us_post_regions set is_po_box = TRUE where id = 'cb33c860-f9a4-4b18-b257-84e22878a896'; +update re_us_post_regions set is_po_box = TRUE where id = '9b4acea3-ebb7-4ea8-b974-e1e96fb05ab2'; +update re_us_post_regions set is_po_box = TRUE where id = '9af19e33-8113-4c05-b06a-3a4ff1675faf'; +update re_us_post_regions set is_po_box = TRUE where id = 'e9179a38-b625-4266-8ab5-4ea5b5e1dd5c'; +update re_us_post_regions set is_po_box = TRUE where id = 'b20cd43f-5028-4596-829b-724fe4c1c2d7'; +update re_us_post_regions set is_po_box = TRUE where id = '931be654-00f3-436c-87d5-037843de64b0'; +update re_us_post_regions set is_po_box = TRUE where id = '7b683f15-f7f8-4ed3-bf55-79176de04279'; +update re_us_post_regions set is_po_box = TRUE where id = '28ef95b4-d514-48cf-a3ae-bfb79c1c1d97'; +update re_us_post_regions set is_po_box = TRUE where id = '28ef95b4-d514-48cf-a3ae-bfb79c1c1d97'; +update re_us_post_regions set is_po_box = TRUE where id = '10d2961a-3e72-4054-953b-5cb88a8b9cf8'; +update re_us_post_regions set is_po_box = TRUE where id = '18f7c78b-34a2-4026-bd4e-0513c49b1264'; +update re_us_post_regions set is_po_box = TRUE where id = 'b93f776f-cb31-48b1-b6a0-563d589b0598'; +update re_us_post_regions set is_po_box = TRUE where id = 'f08a76b5-1e65-4ad7-b2fc-ffdef30f726e'; +update re_us_post_regions set is_po_box = TRUE where id = '58f29a81-bfc7-41ae-9ee0-99c854cb13ff'; +update re_us_post_regions set is_po_box = TRUE where id = '6624470c-d1ee-4c41-a0c8-73e41e574eef'; +update re_us_post_regions set is_po_box = TRUE where id = 'a723a3fa-bbf5-4137-9c67-73ff921c3ef9'; +update re_us_post_regions set is_po_box = TRUE where id = '102219f6-0a42-4980-be03-b7be3441315d'; +update re_us_post_regions set is_po_box = TRUE where id = 'dd6d819d-4859-49be-92a2-14d8a8241fb8'; +update re_us_post_regions set is_po_box = TRUE where id = 'e4899ee3-434d-4ac9-bc5c-7e26cc29bb5c'; +update re_us_post_regions set is_po_box = TRUE where id = 'db4f6e08-dc55-44b6-9397-da78308c7e5d'; +update re_us_post_regions set is_po_box = TRUE where id = '9b915603-848e-483e-957a-665acbe07fb2'; +update re_us_post_regions set is_po_box = TRUE where id = '9b915603-848e-483e-957a-665acbe07fb2'; +update re_us_post_regions set is_po_box = TRUE where id = '9b915603-848e-483e-957a-665acbe07fb2'; +update re_us_post_regions set is_po_box = TRUE where id = '36811eb0-1cfe-4af6-bacb-bda41e40310b'; +update re_us_post_regions set is_po_box = TRUE where id = '0ace1249-64f2-45ca-80a8-b373df93c049'; +update re_us_post_regions set is_po_box = TRUE where id = 'f3c1c4ac-08a2-4032-91d9-075c1fd717de'; +update re_us_post_regions set is_po_box = TRUE where id = '261f0634-ea49-4f7d-9dbf-7f0bee8df01a'; +update re_us_post_regions set is_po_box = TRUE where id = '261f0634-ea49-4f7d-9dbf-7f0bee8df01a'; +update re_us_post_regions set is_po_box = TRUE where id = '261f0634-ea49-4f7d-9dbf-7f0bee8df01a'; +update re_us_post_regions set is_po_box = TRUE where id = '261f0634-ea49-4f7d-9dbf-7f0bee8df01a'; +update re_us_post_regions set is_po_box = TRUE where id = '96b3b8a1-bdde-42be-942e-a01a8a625fe0'; +update re_us_post_regions set is_po_box = TRUE where id = '21e36fbe-84ca-4c6c-b60e-1dd6de833060'; +update re_us_post_regions set is_po_box = TRUE where id = '0cccfc17-6ef4-430a-8a69-09d6e916a515'; +update re_us_post_regions set is_po_box = TRUE where id = 'e42a7e13-0a6e-46b7-96aa-900d1db04f15'; +update re_us_post_regions set is_po_box = TRUE where id = 'c350be72-a20c-4b22-9704-b538a443f2e3'; +update re_us_post_regions set is_po_box = TRUE where id = 'c20d3251-f211-4c03-a755-58635aeed999'; +update re_us_post_regions set is_po_box = TRUE where id = '3780244d-2f44-4d00-add6-eef982c9fc6f'; +update re_us_post_regions set is_po_box = TRUE where id = 'fc1196d2-0f32-4c27-9e64-88eb9518b48d'; +update re_us_post_regions set is_po_box = TRUE where id = '12f7339c-cdb0-4c9c-87df-a5dd4516158f'; +update re_us_post_regions set is_po_box = TRUE where id = '1b309cde-a239-44ae-b7f4-890f9f8dd9b0'; +update re_us_post_regions set is_po_box = TRUE where id = '2167a955-f904-40e6-ab11-bf95e1420f25'; +update re_us_post_regions set is_po_box = TRUE where id = 'af63870a-5444-4fea-b2cc-693cc4ca0231'; +update re_us_post_regions set is_po_box = TRUE where id = 'af63870a-5444-4fea-b2cc-693cc4ca0231'; +update re_us_post_regions set is_po_box = TRUE where id = '08355a92-6bde-4900-b5d0-808b2e583653'; +update re_us_post_regions set is_po_box = TRUE where id = 'bba59ace-dec1-4ac5-84b7-d134190ee0ab'; +update re_us_post_regions set is_po_box = TRUE where id = 'fd77930c-3ada-4119-b00a-a383308931fd'; +update re_us_post_regions set is_po_box = TRUE where id = 'ca6900b0-a59b-47dd-8f5c-29a2da89c2c2'; +update re_us_post_regions set is_po_box = TRUE where id = '92a15dc2-c315-4e4e-bb9d-ca28f8f4ba1f'; +update re_us_post_regions set is_po_box = TRUE where id = 'ca51c03c-62ba-44b4-908e-a473969de1a1'; +update re_us_post_regions set is_po_box = TRUE where id = 'e453c071-021c-43c6-a0cf-eec7c31865a0'; +update re_us_post_regions set is_po_box = TRUE where id = '599e53ae-2e7a-4ed1-a127-14eabdc7edfd'; +update re_us_post_regions set is_po_box = TRUE where id = '201d8747-4149-4cbf-abd4-3f0abb78656f'; +update re_us_post_regions set is_po_box = TRUE where id = 'ccbc47ae-208f-495f-a99c-cccd2c181b15'; +update re_us_post_regions set is_po_box = TRUE where id = 'ccbc47ae-208f-495f-a99c-cccd2c181b15'; +update re_us_post_regions set is_po_box = TRUE where id = '9fb2c196-1b6a-4d78-a2da-5f6fee24c46c'; +update re_us_post_regions set is_po_box = TRUE where id = 'e66e15cf-ea54-46cc-b527-c4b832db8da5'; +update re_us_post_regions set is_po_box = TRUE where id = 'b88e2235-53f2-47f4-8785-b36878a8b9b7'; +update re_us_post_regions set is_po_box = TRUE where id = '2e8962f5-1cec-4501-a77a-2fade0c0c832'; +update re_us_post_regions set is_po_box = TRUE where id = 'efd5fbf1-76af-47ec-807c-06d02d06ba34'; +update re_us_post_regions set is_po_box = TRUE where id = '1dbae493-465a-44e1-9833-a948b44c5bd1'; +update re_us_post_regions set is_po_box = TRUE where id = '2282bfb5-e8e7-4812-b3ca-8084f303092b'; +update re_us_post_regions set is_po_box = TRUE where id = 'c6f37d17-90fc-4995-88d5-7b4de1834c47'; +update re_us_post_regions set is_po_box = TRUE where id = '50406862-0627-4d67-99e8-bf93eebb2419'; +update re_us_post_regions set is_po_box = TRUE where id = '50406862-0627-4d67-99e8-bf93eebb2419'; +update re_us_post_regions set is_po_box = TRUE where id = '9a2077d2-a8ed-4ef5-8bf7-4aa369f2818d'; +update re_us_post_regions set is_po_box = TRUE where id = 'c64e6e9c-10d5-4d1e-a675-aef8e6e84378'; +update re_us_post_regions set is_po_box = TRUE where id = '51d26e3b-6231-4cc7-96a9-e01ccd1d2fbe'; +update re_us_post_regions set is_po_box = TRUE where id = '83b4c364-cbb0-458f-af17-f79bffef4e25'; +update re_us_post_regions set is_po_box = TRUE where id = '593fe500-b7c8-4eb1-a976-55db3696224b'; +update re_us_post_regions set is_po_box = TRUE where id = 'd7025130-0f19-4ada-bb49-6cd839fa5626'; +update re_us_post_regions set is_po_box = TRUE where id = '4e6f366e-56f9-4ac1-9b90-f74c7ef296d5'; +update re_us_post_regions set is_po_box = TRUE where id = 'c23a393b-b340-4191-a88d-133f9280e3af'; +update re_us_post_regions set is_po_box = TRUE where id = 'c23a393b-b340-4191-a88d-133f9280e3af'; +update re_us_post_regions set is_po_box = TRUE where id = '89295035-9d37-4b16-a11c-d08d821aba05'; +update re_us_post_regions set is_po_box = TRUE where id = '4c67db7d-2019-4a12-aa0f-a8f4a40add0f'; +update re_us_post_regions set is_po_box = TRUE where id = '2ee77b98-2964-4b7e-94d2-7382c056ba6e'; +update re_us_post_regions set is_po_box = TRUE where id = '51453ae0-b305-4b0e-abe9-cf5c046d8b3c'; +update re_us_post_regions set is_po_box = TRUE where id = 'bfc7e491-cf59-4998-827b-fd33cf1ae725'; +update re_us_post_regions set is_po_box = TRUE where id = 'a997245d-ee11-4031-9316-1dd2bcc92d5b'; +update re_us_post_regions set is_po_box = TRUE where id = 'a997245d-ee11-4031-9316-1dd2bcc92d5b'; +update re_us_post_regions set is_po_box = TRUE where id = 'b5dae36c-e663-410c-b919-1dbe4f23b81a'; +update re_us_post_regions set is_po_box = TRUE where id = 'f8c5caca-7e15-4533-9222-b42627cc8317'; +update re_us_post_regions set is_po_box = TRUE where id = 'fe2c1127-2e61-437e-8998-397295400ede'; +update re_us_post_regions set is_po_box = TRUE where id = 'fe2c1127-2e61-437e-8998-397295400ede'; +update re_us_post_regions set is_po_box = TRUE where id = 'bedb4f0b-552e-4a26-a804-65ffb0f673a7'; +update re_us_post_regions set is_po_box = TRUE where id = 'bedb4f0b-552e-4a26-a804-65ffb0f673a7'; +update re_us_post_regions set is_po_box = TRUE where id = '4fe9b9cc-8377-48c8-9ed5-dbd8594158a2'; +update re_us_post_regions set is_po_box = TRUE where id = '4fe9b9cc-8377-48c8-9ed5-dbd8594158a2'; +update re_us_post_regions set is_po_box = TRUE where id = 'b5b93c06-423c-40c8-bf1c-58cab9349fe9'; +update re_us_post_regions set is_po_box = TRUE where id = '0472f2f8-3813-4a49-9ef5-6d82832c5030'; +update re_us_post_regions set is_po_box = TRUE where id = '64b3f88a-eebd-4b23-8e31-befa1b857a38'; +update re_us_post_regions set is_po_box = TRUE where id = '64b3f88a-eebd-4b23-8e31-befa1b857a38'; +update re_us_post_regions set is_po_box = TRUE where id = '9cd3d445-90bf-4f31-8e16-26b172235a91'; +update re_us_post_regions set is_po_box = TRUE where id = '7aac2f70-8f85-48f9-9e34-ff473a7dda68'; +update re_us_post_regions set is_po_box = TRUE where id = 'f1475dcf-88c8-49c2-8c07-3b6434713d6e'; +update re_us_post_regions set is_po_box = TRUE where id = 'f91f6467-afc7-420b-9cd5-5127ebd917a4'; +update re_us_post_regions set is_po_box = TRUE where id = 'f91f6467-afc7-420b-9cd5-5127ebd917a4'; +update re_us_post_regions set is_po_box = TRUE where id = 'f421eb60-d211-45d1-a3d2-0a223f882186'; +update re_us_post_regions set is_po_box = TRUE where id = 'f421eb60-d211-45d1-a3d2-0a223f882186'; +update re_us_post_regions set is_po_box = TRUE where id = 'f421eb60-d211-45d1-a3d2-0a223f882186'; +update re_us_post_regions set is_po_box = TRUE where id = 'f913690a-91f5-4a0c-868e-bd2295cfc6fa'; +update re_us_post_regions set is_po_box = TRUE where id = '2e844ef2-0bac-4799-a671-408ef095799c'; +update re_us_post_regions set is_po_box = TRUE where id = '2e844ef2-0bac-4799-a671-408ef095799c'; +update re_us_post_regions set is_po_box = TRUE where id = '14058e0f-08b4-4f22-a9c9-50bb485387a9'; +update re_us_post_regions set is_po_box = TRUE where id = 'f554766b-5239-4622-8f72-ac26e79fa9f4'; +update re_us_post_regions set is_po_box = TRUE where id = '65f7821b-81fa-4d90-84f9-e3af117f5c38'; +update re_us_post_regions set is_po_box = TRUE where id = '841cbf57-824d-42df-84a7-a4463f2c0bea'; +update re_us_post_regions set is_po_box = TRUE where id = '3c049ccf-0421-4b8a-87de-3eb87e880587'; +update re_us_post_regions set is_po_box = TRUE where id = 'ba91a69f-3074-46eb-9bc6-a7ef2331c89d'; +update re_us_post_regions set is_po_box = TRUE where id = 'ba91a69f-3074-46eb-9bc6-a7ef2331c89d'; +update re_us_post_regions set is_po_box = TRUE where id = '46631990-8c8c-4c2b-9891-2c199fc168fe'; +update re_us_post_regions set is_po_box = TRUE where id = 'ffefcd03-aab1-4ab3-a25f-239011a7cb11'; +update re_us_post_regions set is_po_box = TRUE where id = '5242ff31-03f9-4653-b94d-243b5909d570'; +update re_us_post_regions set is_po_box = TRUE where id = '7a44cc5f-06bc-4d91-81e3-3b637bab3719'; +update re_us_post_regions set is_po_box = TRUE where id = 'f09a492c-ea6c-4679-bc26-0feb514ec822'; +update re_us_post_regions set is_po_box = TRUE where id = 'be4548af-c2cf-4248-8c9e-58ecb81f191f'; +update re_us_post_regions set is_po_box = TRUE where id = 'fc6e0b2e-432a-4078-84ee-2cf409f34a70'; +update re_us_post_regions set is_po_box = TRUE where id = '8c2ba587-a6ab-4743-92cd-2b0d6665c2a4'; +update re_us_post_regions set is_po_box = TRUE where id = '8c2ba587-a6ab-4743-92cd-2b0d6665c2a4'; +update re_us_post_regions set is_po_box = TRUE where id = '6823ecc8-c6f4-449c-8552-c49ba136168c'; +update re_us_post_regions set is_po_box = TRUE where id = 'ca2676bf-5e54-4c06-98e3-3a75a9a04d63'; +update re_us_post_regions set is_po_box = TRUE where id = 'ca2676bf-5e54-4c06-98e3-3a75a9a04d63'; +update re_us_post_regions set is_po_box = TRUE where id = '4bbddb34-47d2-42a8-80f0-2c0a89a42270'; +update re_us_post_regions set is_po_box = TRUE where id = '13aada05-8821-4f88-8811-dc8aa611c26c'; +update re_us_post_regions set is_po_box = TRUE where id = '13aada05-8821-4f88-8811-dc8aa611c26c'; +update re_us_post_regions set is_po_box = TRUE where id = '192926ea-56d1-4526-b2a2-181f2642ad56'; +update re_us_post_regions set is_po_box = TRUE where id = '9b5d8c74-6833-48d2-8105-bab40fa29497'; +update re_us_post_regions set is_po_box = TRUE where id = '9b5d8c74-6833-48d2-8105-bab40fa29497'; +update re_us_post_regions set is_po_box = TRUE where id = '9b5d8c74-6833-48d2-8105-bab40fa29497'; +update re_us_post_regions set is_po_box = TRUE where id = '865dc2b1-8c50-4f7f-8d23-143057209de3'; +update re_us_post_regions set is_po_box = TRUE where id = 'd135444f-4109-4175-9ed4-73908e6d6e56'; +update re_us_post_regions set is_po_box = TRUE where id = '11fc78a9-25a0-45e8-9483-0cd1cd244cc8'; +update re_us_post_regions set is_po_box = TRUE where id = '0c92af61-7c97-4864-a340-07e9e6e43e0c'; +update re_us_post_regions set is_po_box = TRUE where id = '0c92af61-7c97-4864-a340-07e9e6e43e0c'; +update re_us_post_regions set is_po_box = TRUE where id = '15c9707e-0075-4c5c-852a-ffee7006dc0d'; +update re_us_post_regions set is_po_box = TRUE where id = 'c8230fdb-b721-4308-b795-b4eaf2d01ea0'; +update re_us_post_regions set is_po_box = TRUE where id = 'bba649e9-ff9c-4dd4-b71b-8233659e552a'; +update re_us_post_regions set is_po_box = TRUE where id = '4f429061-d590-4f79-b51e-559b5e7f36ca'; +update re_us_post_regions set is_po_box = TRUE where id = '1604922b-fd5a-4862-9c6a-e899675f0898'; +update re_us_post_regions set is_po_box = TRUE where id = '4919ad2e-60e2-4e83-ae74-a618757dee5a'; +update re_us_post_regions set is_po_box = TRUE where id = '30025f6d-aab2-4ec0-be4f-f51453549522'; +update re_us_post_regions set is_po_box = TRUE where id = '30025f6d-aab2-4ec0-be4f-f51453549522'; +update re_us_post_regions set is_po_box = TRUE where id = '3e819ec6-d63d-47b0-be17-04d6e5a57538'; +update re_us_post_regions set is_po_box = TRUE where id = '26c61d6d-28c5-447a-91a0-0e33b705e5cc'; +update re_us_post_regions set is_po_box = TRUE where id = '16d8ec1e-87f8-4d4b-b2b0-2a52abbaf6bb'; +update re_us_post_regions set is_po_box = TRUE where id = '1e5670d5-59db-4af2-9199-90b3b7a88269'; +update re_us_post_regions set is_po_box = TRUE where id = 'fae820e7-1f8c-4f75-8067-db816e2379be'; +update re_us_post_regions set is_po_box = TRUE where id = 'ac915399-2f6a-463b-96dd-79c8cad2489a'; +update re_us_post_regions set is_po_box = TRUE where id = 'ac915399-2f6a-463b-96dd-79c8cad2489a'; +update re_us_post_regions set is_po_box = TRUE where id = 'd13e8a25-dabe-4d55-87de-13e1dbdd9d3c'; +update re_us_post_regions set is_po_box = TRUE where id = 'd13e8a25-dabe-4d55-87de-13e1dbdd9d3c'; +update re_us_post_regions set is_po_box = TRUE where id = 'a68162a3-52fe-4c3b-8f46-95fba38f50fa'; +update re_us_post_regions set is_po_box = TRUE where id = '97017af8-408e-420f-973e-a4528e2e2339'; +update re_us_post_regions set is_po_box = TRUE where id = '6badb0e6-8392-492c-893a-d62e051ba121'; +update re_us_post_regions set is_po_box = TRUE where id = '6badb0e6-8392-492c-893a-d62e051ba121'; +update re_us_post_regions set is_po_box = TRUE where id = '21d5bb3e-afff-4729-91a0-99f05eba9ca6'; +update re_us_post_regions set is_po_box = TRUE where id = 'c84f510a-1617-4753-b6a9-7e12e357fa84'; +update re_us_post_regions set is_po_box = TRUE where id = '53e42b0b-7bc1-457a-b8b2-c0c40cf11dd6'; +update re_us_post_regions set is_po_box = TRUE where id = '53e42b0b-7bc1-457a-b8b2-c0c40cf11dd6'; +update re_us_post_regions set is_po_box = TRUE where id = '1eed3067-4e93-438d-9bb1-16797dccec8e'; +update re_us_post_regions set is_po_box = TRUE where id = '486a5a86-702c-40bb-bb5f-3702c85e5995'; +update re_us_post_regions set is_po_box = TRUE where id = '687f6b11-0566-4b81-983b-e57f79080c1f'; +update re_us_post_regions set is_po_box = TRUE where id = '6a121e5d-af62-4f72-829c-beac502a69fd'; +update re_us_post_regions set is_po_box = TRUE where id = '7e1aec32-8a39-478c-aa56-c59973e42fae'; +update re_us_post_regions set is_po_box = TRUE where id = 'e51755bc-9874-4bf3-b6b8-7606676dd284'; +update re_us_post_regions set is_po_box = TRUE where id = '859dcabb-1eac-48c9-9a99-366e9da882bf'; +update re_us_post_regions set is_po_box = TRUE where id = '859dcabb-1eac-48c9-9a99-366e9da882bf'; +update re_us_post_regions set is_po_box = TRUE where id = '527dace5-fa20-4efb-86c0-3124be4277fa'; +update re_us_post_regions set is_po_box = TRUE where id = '527dace5-fa20-4efb-86c0-3124be4277fa'; +update re_us_post_regions set is_po_box = TRUE where id = '527dace5-fa20-4efb-86c0-3124be4277fa'; +update re_us_post_regions set is_po_box = TRUE where id = 'c5edc087-f2f6-49c9-ad7f-d96ed3fbaede'; +update re_us_post_regions set is_po_box = TRUE where id = 'b2399e32-48b3-4cd3-986c-53d8814a7163'; +update re_us_post_regions set is_po_box = TRUE where id = '7e057d96-accf-4e75-bf0e-253f9b9570f4'; +update re_us_post_regions set is_po_box = TRUE where id = '14f956ab-b6c2-4255-888e-b440482cf7be'; +update re_us_post_regions set is_po_box = TRUE where id = 'bd18eac6-6652-456f-9ddd-c5538eaf76b0'; +update re_us_post_regions set is_po_box = TRUE where id = '36faa266-0f86-447f-be24-9a33d2212614'; +update re_us_post_regions set is_po_box = TRUE where id = 'cbce0b9b-4432-4f1c-9999-804e2adb7ccc'; +update re_us_post_regions set is_po_box = TRUE where id = '15fdb611-5e75-44d1-864f-eb54b12001fa'; +update re_us_post_regions set is_po_box = TRUE where id = '15fdb611-5e75-44d1-864f-eb54b12001fa'; +update re_us_post_regions set is_po_box = TRUE where id = '7e22b427-95e2-4e3e-9019-6d90677b96c3'; +update re_us_post_regions set is_po_box = TRUE where id = '6ab72291-4f26-40a1-bf65-bd7ecdd94c75'; +update re_us_post_regions set is_po_box = TRUE where id = '0c1925b9-c0d4-451c-8d26-f9d4501129c5'; +update re_us_post_regions set is_po_box = TRUE where id = '0c1925b9-c0d4-451c-8d26-f9d4501129c5'; +update re_us_post_regions set is_po_box = TRUE where id = '7ed6cb3a-02dc-4ec5-bb77-adf9d14069b5'; +update re_us_post_regions set is_po_box = TRUE where id = 'ffe9aab2-4b1d-460e-9575-4938ae0e9234'; +update re_us_post_regions set is_po_box = TRUE where id = '7b68044a-02fe-4c64-a92b-832818d40feb'; +update re_us_post_regions set is_po_box = TRUE where id = '77bfa8fd-e2c8-4a99-b511-be889bfb87fc'; +update re_us_post_regions set is_po_box = TRUE where id = '77bfa8fd-e2c8-4a99-b511-be889bfb87fc'; +update re_us_post_regions set is_po_box = TRUE where id = '77bfa8fd-e2c8-4a99-b511-be889bfb87fc'; +update re_us_post_regions set is_po_box = TRUE where id = '5a903d55-bac3-47bf-8293-9744db2205bf'; +update re_us_post_regions set is_po_box = TRUE where id = 'd451d180-790e-4e07-8357-3aef94902ef3'; +update re_us_post_regions set is_po_box = TRUE where id = '62b1e798-1f94-4d4c-90ad-3731d7c7e178'; +update re_us_post_regions set is_po_box = TRUE where id = '120bcf8c-2aa2-43cf-8271-0cc5cb9acb6f'; +update re_us_post_regions set is_po_box = TRUE where id = '44667048-b074-45ee-82df-6943380917ec'; +update re_us_post_regions set is_po_box = TRUE where id = 'aa4220cf-7515-4a6d-8ba5-1531b14cc61e'; +update re_us_post_regions set is_po_box = TRUE where id = '9123070f-6175-4b26-b9e9-a31817d287e7'; +update re_us_post_regions set is_po_box = TRUE where id = '7481544c-0402-4035-87ad-164199da10e0'; +update re_us_post_regions set is_po_box = TRUE where id = '7481544c-0402-4035-87ad-164199da10e0'; +update re_us_post_regions set is_po_box = TRUE where id = '7481544c-0402-4035-87ad-164199da10e0'; +update re_us_post_regions set is_po_box = TRUE where id = '7481544c-0402-4035-87ad-164199da10e0'; +update re_us_post_regions set is_po_box = TRUE where id = '6cf0583e-bf8c-4a30-a352-9f6367ca2cd3'; +update re_us_post_regions set is_po_box = TRUE where id = 'a8e40bcc-92d6-4f56-8c84-be7a398c0b91'; +update re_us_post_regions set is_po_box = TRUE where id = '9dd2f1ce-93d9-46ae-9ec7-7f1b0e9f91ff'; +update re_us_post_regions set is_po_box = TRUE where id = '8e03aa86-6f93-4aef-b30d-4c65389d3b56'; +update re_us_post_regions set is_po_box = TRUE where id = '8e03aa86-6f93-4aef-b30d-4c65389d3b56'; +update re_us_post_regions set is_po_box = TRUE where id = 'df0c2f34-3daf-408e-a378-89c399967617'; +update re_us_post_regions set is_po_box = TRUE where id = '96acaf3a-9903-4741-9207-23c0ce0999c5'; +update re_us_post_regions set is_po_box = TRUE where id = 'ca1d8d6d-6155-43e0-b54e-330b3da9af36'; +update re_us_post_regions set is_po_box = TRUE where id = '5ba66c9b-aca2-4c1f-a6e0-ad208605a1e2'; +update re_us_post_regions set is_po_box = TRUE where id = 'f4498eeb-1cd1-48a1-af93-308e8bae8de3'; +update re_us_post_regions set is_po_box = TRUE where id = 'd21e6af0-bb89-4de9-8ba2-6a7baf8835a4'; +update re_us_post_regions set is_po_box = TRUE where id = 'fa566105-625c-47b1-852d-f02b71a67cef'; +update re_us_post_regions set is_po_box = TRUE where id = '76416b3c-0535-40f2-9dcf-324c12a6c499'; +update re_us_post_regions set is_po_box = TRUE where id = 'fed10c21-eeb0-442c-9f63-1f11a95e622a'; +update re_us_post_regions set is_po_box = TRUE where id = 'fed10c21-eeb0-442c-9f63-1f11a95e622a'; +update re_us_post_regions set is_po_box = TRUE where id = 'a7ef682f-9a0e-44a8-b2f7-81ecd0093a77'; +update re_us_post_regions set is_po_box = TRUE where id = '61a6e4f0-82df-4223-a46d-f9b856c47d19'; +update re_us_post_regions set is_po_box = TRUE where id = '61a6e4f0-82df-4223-a46d-f9b856c47d19'; +update re_us_post_regions set is_po_box = TRUE where id = 'f2736240-c485-4b63-9e62-7e77e9355c67'; +update re_us_post_regions set is_po_box = TRUE where id = 'f2736240-c485-4b63-9e62-7e77e9355c67'; +update re_us_post_regions set is_po_box = TRUE where id = 'f2736240-c485-4b63-9e62-7e77e9355c67'; +update re_us_post_regions set is_po_box = TRUE where id = 'f7326e69-8cd6-4678-a008-df4b410132b4'; +update re_us_post_regions set is_po_box = TRUE where id = 'cc6d4d0d-353f-45b2-b3ff-f1340120f975'; +update re_us_post_regions set is_po_box = TRUE where id = 'e2327f96-bb32-4cb1-9ea6-bd698ee1b53b'; +update re_us_post_regions set is_po_box = TRUE where id = 'e2327f96-bb32-4cb1-9ea6-bd698ee1b53b'; +update re_us_post_regions set is_po_box = TRUE where id = '95ba7425-0ea3-445b-9e93-3830e09a3329'; +update re_us_post_regions set is_po_box = TRUE where id = '58930476-f3d0-4aa6-99bb-7ac61572e389'; +update re_us_post_regions set is_po_box = TRUE where id = '33fad444-3b1d-43cf-9769-5574ff03566a'; +update re_us_post_regions set is_po_box = TRUE where id = '3bb91060-d2d3-48af-840d-15dfb3991e1f'; +update re_us_post_regions set is_po_box = TRUE where id = '3bb91060-d2d3-48af-840d-15dfb3991e1f'; +update re_us_post_regions set is_po_box = TRUE where id = '3b9078e1-3146-41d6-800a-b14edf9ba4a0'; +update re_us_post_regions set is_po_box = TRUE where id = '01ec9b7a-67e8-4fa0-bfa0-e420da05ecf9'; +update re_us_post_regions set is_po_box = TRUE where id = '27a59da1-c8d0-4328-874f-346b08ef5b26'; +update re_us_post_regions set is_po_box = TRUE where id = '439df7cf-78ce-4ee8-878b-f2c9d36be840'; +update re_us_post_regions set is_po_box = TRUE where id = '4f35bd4b-d6bf-4341-a1e3-9b4293424f85'; +update re_us_post_regions set is_po_box = TRUE where id = 'b723443b-b42b-4e43-b994-a998116c822b'; +update re_us_post_regions set is_po_box = TRUE where id = 'b723443b-b42b-4e43-b994-a998116c822b'; +update re_us_post_regions set is_po_box = TRUE where id = '7f8f1ac3-671b-4aae-98a2-b5be8e3f973b'; +update re_us_post_regions set is_po_box = TRUE where id = '7f8f1ac3-671b-4aae-98a2-b5be8e3f973b'; +update re_us_post_regions set is_po_box = TRUE where id = '7f8f1ac3-671b-4aae-98a2-b5be8e3f973b'; +update re_us_post_regions set is_po_box = TRUE where id = '50d15593-7cd5-45a9-8a0c-5417a612a183'; +update re_us_post_regions set is_po_box = TRUE where id = '348d9b63-7bfe-4127-9523-fec8d53ee163'; +update re_us_post_regions set is_po_box = TRUE where id = 'a40c3d0d-7888-45c4-9d46-75f2223c45fa'; +update re_us_post_regions set is_po_box = TRUE where id = '3fa9ec31-6d8f-4149-8db8-ed363f97c1f8'; +update re_us_post_regions set is_po_box = TRUE where id = '78b06f3f-ad26-4c6e-964b-60bc7788ecfa'; +update re_us_post_regions set is_po_box = TRUE where id = '015b57f6-bc59-4b17-b95e-50472e19544d'; +update re_us_post_regions set is_po_box = TRUE where id = '28b8171a-0412-4425-8f35-a7eb24b59db4'; +update re_us_post_regions set is_po_box = TRUE where id = 'd3d564e0-37a3-4e38-b419-83a3870afb6a'; +update re_us_post_regions set is_po_box = TRUE where id = 'ddc18fdb-c80e-4ab0-91dc-e099c2215153'; +update re_us_post_regions set is_po_box = TRUE where id = '7b801bf3-2f86-4f84-8188-6717aaf92718'; +update re_us_post_regions set is_po_box = TRUE where id = '41f9520e-f696-460b-95e0-9edbc1e8a3cd'; +update re_us_post_regions set is_po_box = TRUE where id = '41f9520e-f696-460b-95e0-9edbc1e8a3cd'; +update re_us_post_regions set is_po_box = TRUE where id = 'cd72eda1-f42d-4af4-a4fa-ddf92247be23'; +update re_us_post_regions set is_po_box = TRUE where id = '5a054bcd-cba0-48a9-9159-f8f9646eda0d'; +update re_us_post_regions set is_po_box = TRUE where id = '275e55ca-07c6-495e-9be8-c1b5a29424a5'; +update re_us_post_regions set is_po_box = TRUE where id = '6bb6a87d-df7b-42d3-82f9-5fee60f6f4a3'; +update re_us_post_regions set is_po_box = TRUE where id = 'd31edff3-655b-4470-ae3a-4a24b2330d00'; +update re_us_post_regions set is_po_box = TRUE where id = '8fce0a9c-1fb0-4735-8a5c-0852941c561d'; +update re_us_post_regions set is_po_box = TRUE where id = '705c0b98-45d1-474a-9f9e-19498644eb95'; +update re_us_post_regions set is_po_box = TRUE where id = 'ecbc6dcd-c226-42c3-abaa-c4074144345c'; +update re_us_post_regions set is_po_box = TRUE where id = 'ecbc6dcd-c226-42c3-abaa-c4074144345c'; +update re_us_post_regions set is_po_box = TRUE where id = '4235b288-e18c-42e2-a369-e433d0e42635'; +update re_us_post_regions set is_po_box = TRUE where id = 'ab0161b2-ad38-4b4e-8eb8-81d9afeee61b'; +update re_us_post_regions set is_po_box = TRUE where id = 'f9ef7e9f-f5c8-4d41-8c52-e6e17c2698ca'; +update re_us_post_regions set is_po_box = TRUE where id = '6110eb22-54f6-4b0b-abf3-1ef2ed2dadfd'; +update re_us_post_regions set is_po_box = TRUE where id = '31694006-8276-4957-8119-d8a804283157'; +update re_us_post_regions set is_po_box = TRUE where id = 'e1af3bba-405a-4253-93cc-e65dbff18bbe'; +update re_us_post_regions set is_po_box = TRUE where id = 'e1af3bba-405a-4253-93cc-e65dbff18bbe'; +update re_us_post_regions set is_po_box = TRUE where id = 'e1af3bba-405a-4253-93cc-e65dbff18bbe'; +update re_us_post_regions set is_po_box = TRUE where id = '70a39843-81de-4f2a-938f-5a2eacafd24c'; +update re_us_post_regions set is_po_box = TRUE where id = '4aa2b1e5-e62f-441e-9985-1e96784e737f'; +update re_us_post_regions set is_po_box = TRUE where id = '5564df6b-e84b-4ba8-819f-aa42226ed60c'; +update re_us_post_regions set is_po_box = TRUE where id = 'b11d452f-db29-4649-9ad9-1cb47918f833'; +update re_us_post_regions set is_po_box = TRUE where id = 'ad61784e-eef9-484e-bad0-f17e14380600'; +update re_us_post_regions set is_po_box = TRUE where id = '506dc8b8-cf81-40f0-91ad-82a9a8ffb530'; +update re_us_post_regions set is_po_box = TRUE where id = '1dc8a9ef-e28e-421a-87ab-8e37c924486f'; +update re_us_post_regions set is_po_box = TRUE where id = '41f2fa0b-7d44-4a17-99fa-960ccd02dce4'; +update re_us_post_regions set is_po_box = TRUE where id = '7b4fc63e-9d61-42d6-b0d9-472fb88bf0fb'; +update re_us_post_regions set is_po_box = TRUE where id = '4de6a62d-a120-4e0c-928f-11b8655d7bb9'; +update re_us_post_regions set is_po_box = TRUE where id = '381c99cf-dd72-4c32-b962-9a5328ff9618'; +update re_us_post_regions set is_po_box = TRUE where id = '381c99cf-dd72-4c32-b962-9a5328ff9618'; +update re_us_post_regions set is_po_box = TRUE where id = 'b92e74fa-4ec9-4654-9b00-b5d8705a849e'; +update re_us_post_regions set is_po_box = TRUE where id = '1bab1f37-9b82-488a-bbc2-c500ba68256a'; +update re_us_post_regions set is_po_box = TRUE where id = 'bd4cb68f-05c1-4f5a-8ad9-932f3c8b2f12'; +update re_us_post_regions set is_po_box = TRUE where id = 'dfcfbba0-88e0-4ccf-bda3-e3c424e55ab3'; +update re_us_post_regions set is_po_box = TRUE where id = '31474ff1-c2b9-4371-81cf-fe23a732f359'; +update re_us_post_regions set is_po_box = TRUE where id = '31474ff1-c2b9-4371-81cf-fe23a732f359'; +update re_us_post_regions set is_po_box = TRUE where id = '2c19b43a-48d8-4d8b-baeb-df88392a2495'; +update re_us_post_regions set is_po_box = TRUE where id = '55656045-72d2-449c-b934-f8bff4cd6b9d'; +update re_us_post_regions set is_po_box = TRUE where id = '28fe0449-c2cf-4674-a24e-bc39d1baa410'; +update re_us_post_regions set is_po_box = TRUE where id = '28fe0449-c2cf-4674-a24e-bc39d1baa410'; +update re_us_post_regions set is_po_box = TRUE where id = '588da357-2e20-4cba-95a7-f38c6f19519e'; +update re_us_post_regions set is_po_box = TRUE where id = 'ee4364e8-d7f3-4de0-b934-b9eaae3584ac'; +update re_us_post_regions set is_po_box = TRUE where id = 'ee4364e8-d7f3-4de0-b934-b9eaae3584ac'; +update re_us_post_regions set is_po_box = TRUE where id = '1eeec27a-de7b-430d-9b83-b406c0f09708'; +update re_us_post_regions set is_po_box = TRUE where id = '7c3edd17-474d-46de-a0a4-14949a85d4d8'; +update re_us_post_regions set is_po_box = TRUE where id = '5dd2de25-2b1f-4e2c-aa60-cb8236bc232b'; +update re_us_post_regions set is_po_box = TRUE where id = '5dd2de25-2b1f-4e2c-aa60-cb8236bc232b'; +update re_us_post_regions set is_po_box = TRUE where id = '5dd2de25-2b1f-4e2c-aa60-cb8236bc232b'; +update re_us_post_regions set is_po_box = TRUE where id = 'ffa02b85-82c6-41c8-a9c6-b8289bbfb9c5'; +update re_us_post_regions set is_po_box = TRUE where id = '9f6d2756-6842-4a78-8451-f0833705e250'; +update re_us_post_regions set is_po_box = TRUE where id = 'b7eed8b2-d462-426b-bbe8-209c566a8860'; +update re_us_post_regions set is_po_box = TRUE where id = '2a2a0734-15e4-43e8-9b63-03b578814aee'; +update re_us_post_regions set is_po_box = TRUE where id = '2a2a0734-15e4-43e8-9b63-03b578814aee'; +update re_us_post_regions set is_po_box = TRUE where id = '7b4df26a-f586-48c1-8152-c0c5c2503aae'; +update re_us_post_regions set is_po_box = TRUE where id = 'ffe88cc7-b4eb-40f2-8a0e-40ad302d9a08'; +update re_us_post_regions set is_po_box = TRUE where id = '7f8cb00e-950f-4a08-86ed-7455c0b58b80'; +update re_us_post_regions set is_po_box = TRUE where id = '7f8cb00e-950f-4a08-86ed-7455c0b58b80'; +update re_us_post_regions set is_po_box = TRUE where id = '586ff228-94c8-426c-9fac-7bce6342e978'; +update re_us_post_regions set is_po_box = TRUE where id = '72b8f33d-20f6-4d5d-b5cf-f4aa63c151cf'; +update re_us_post_regions set is_po_box = TRUE where id = '4ad0bc87-d878-43a0-b655-17450b9b4e73'; +update re_us_post_regions set is_po_box = TRUE where id = 'b951b270-894a-42d1-9c3f-2f702ce4ce15'; +update re_us_post_regions set is_po_box = TRUE where id = '47e6be77-df56-4ae8-b27e-7a7edd6e1e3d'; +update re_us_post_regions set is_po_box = TRUE where id = '734d4a21-f0dc-45a1-ba96-2a3324900998'; +update re_us_post_regions set is_po_box = TRUE where id = '70bd1f0f-8709-4483-8f99-a8085caa897a'; +update re_us_post_regions set is_po_box = TRUE where id = '70bd1f0f-8709-4483-8f99-a8085caa897a'; +update re_us_post_regions set is_po_box = TRUE where id = '5b96572b-0009-4df5-af22-157339d02f37'; +update re_us_post_regions set is_po_box = TRUE where id = '5b96572b-0009-4df5-af22-157339d02f37'; +update re_us_post_regions set is_po_box = TRUE where id = 'e60689c7-3384-4f10-90ee-301bcf336ada'; +update re_us_post_regions set is_po_box = TRUE where id = 'ea9de62c-aa4f-4205-bcb3-eeae6d0424ae'; +update re_us_post_regions set is_po_box = TRUE where id = 'a701def2-dd32-4212-8174-c867c7101479'; +update re_us_post_regions set is_po_box = TRUE where id = 'e03685aa-332b-4077-8bf4-4a2e4d4fa82e'; +update re_us_post_regions set is_po_box = TRUE where id = '71d40130-15a3-4cc9-97e4-ebd94d8bb4f4'; +update re_us_post_regions set is_po_box = TRUE where id = '11314919-2365-43c9-ad59-b768b9cae20f'; +update re_us_post_regions set is_po_box = TRUE where id = 'fc92ca2d-4c62-4350-b9b8-59aad1c3169d'; +update re_us_post_regions set is_po_box = TRUE where id = 'ada7f028-e437-4628-94e8-7219f6db42e9'; +update re_us_post_regions set is_po_box = TRUE where id = 'aaa7e0dd-b51b-486e-8a8e-e80c83e0b77d'; +update re_us_post_regions set is_po_box = TRUE where id = 'e07957ed-f7f4-46b0-8e40-1133fb0befba'; +update re_us_post_regions set is_po_box = TRUE where id = '29461d44-4209-467c-a164-ab8fb492b0ef'; +update re_us_post_regions set is_po_box = TRUE where id = 'd91b3d78-aafb-4cb1-8b0a-3424d225b658'; +update re_us_post_regions set is_po_box = TRUE where id = 'bb008596-7d87-46bf-8df8-ae596527ac02'; +update re_us_post_regions set is_po_box = TRUE where id = 'bb008596-7d87-46bf-8df8-ae596527ac02'; +update re_us_post_regions set is_po_box = TRUE where id = 'bee03259-0980-4bdb-8693-7ca4f0378ef7'; +update re_us_post_regions set is_po_box = TRUE where id = '0bddb6fa-abee-42f8-a8cf-2fbbd229e27b'; +update re_us_post_regions set is_po_box = TRUE where id = '9768a621-df4e-4b4e-b18f-221a664dc97e'; +update re_us_post_regions set is_po_box = TRUE where id = '2c0ee1cc-2c5d-46a4-a8d3-0bc6888e5093'; +update re_us_post_regions set is_po_box = TRUE where id = '91d51ef4-6f25-4d18-b790-307f44589314'; +update re_us_post_regions set is_po_box = TRUE where id = '232dbc91-9709-481f-bf08-86c30e7db49f'; +update re_us_post_regions set is_po_box = TRUE where id = '60494401-6df0-47e9-b084-95d1d754b2d3'; +update re_us_post_regions set is_po_box = TRUE where id = 'f57a9f1c-15d8-43d3-bc1b-d8f49fb5b7ab'; +update re_us_post_regions set is_po_box = TRUE where id = '1c06dc66-2fbe-48bd-8553-9c3478653ac6'; +update re_us_post_regions set is_po_box = TRUE where id = '72ad7f88-228a-4b7a-b56a-0651b0dcc6d5'; +update re_us_post_regions set is_po_box = TRUE where id = '10927594-5310-4575-81e2-28b536a394c7'; +update re_us_post_regions set is_po_box = TRUE where id = '0ddb4aef-03e9-47b0-a431-102eea4881f0'; +update re_us_post_regions set is_po_box = TRUE where id = '147061fa-6a78-46c5-8d6d-f385177e0e69'; +update re_us_post_regions set is_po_box = TRUE where id = 'a9cdf23e-6f50-48c3-bb17-9434a5325286'; +update re_us_post_regions set is_po_box = TRUE where id = '5dfea24a-bc7d-4c5f-8eb6-ebf88bf21a81'; +update re_us_post_regions set is_po_box = TRUE where id = '0565ce16-2004-4f9d-b2b9-c8c71f5a2a24'; +update re_us_post_regions set is_po_box = TRUE where id = 'e4a81535-c85b-46a5-9bab-b066585e3384'; +update re_us_post_regions set is_po_box = TRUE where id = '78986ed9-07fb-401f-84d0-dcdbcbc3f4b2'; +update re_us_post_regions set is_po_box = TRUE where id = '711b9843-56b5-4796-b475-a8dd35c397a9'; +update re_us_post_regions set is_po_box = TRUE where id = '711b9843-56b5-4796-b475-a8dd35c397a9'; +update re_us_post_regions set is_po_box = TRUE where id = '711b9843-56b5-4796-b475-a8dd35c397a9'; +update re_us_post_regions set is_po_box = TRUE where id = '8eaf6e60-7671-4b1a-a964-b4a042afa0e2'; +update re_us_post_regions set is_po_box = TRUE where id = 'f1cbe223-ad7d-4242-a19e-c098a88cc096'; +update re_us_post_regions set is_po_box = TRUE where id = 'f09d0ce9-94e4-4d7c-bce2-2aee525d95b7'; +update re_us_post_regions set is_po_box = TRUE where id = '15358141-fc43-4e51-add0-9d2e89d2a08f'; +update re_us_post_regions set is_po_box = TRUE where id = '15358141-fc43-4e51-add0-9d2e89d2a08f'; +update re_us_post_regions set is_po_box = TRUE where id = '15358141-fc43-4e51-add0-9d2e89d2a08f'; +update re_us_post_regions set is_po_box = TRUE where id = '15358141-fc43-4e51-add0-9d2e89d2a08f'; +update re_us_post_regions set is_po_box = TRUE where id = 'c7fcad36-bbca-4d44-ac15-01106b244ca2'; +update re_us_post_regions set is_po_box = TRUE where id = 'ad70f00b-a488-4694-8707-d07e0ecb0a72'; +update re_us_post_regions set is_po_box = TRUE where id = 'ad70f00b-a488-4694-8707-d07e0ecb0a72'; +update re_us_post_regions set is_po_box = TRUE where id = 'ad70f00b-a488-4694-8707-d07e0ecb0a72'; +update re_us_post_regions set is_po_box = TRUE where id = 'ad70f00b-a488-4694-8707-d07e0ecb0a72'; +update re_us_post_regions set is_po_box = TRUE where id = 'ad70f00b-a488-4694-8707-d07e0ecb0a72'; +update re_us_post_regions set is_po_box = TRUE where id = '9509b11a-cc87-4cda-93b2-2d07b60bca21'; +update re_us_post_regions set is_po_box = TRUE where id = 'efd10966-e9d5-494b-a07c-1a4c22be2030'; +update re_us_post_regions set is_po_box = TRUE where id = 'ff66da8b-3147-4a0f-bbce-91605737db67'; +update re_us_post_regions set is_po_box = TRUE where id = '887145c3-2358-4bb1-ad90-09939e8d96b4'; +update re_us_post_regions set is_po_box = TRUE where id = '05dea2a1-5f18-46a3-b88a-78a640301d5e'; +update re_us_post_regions set is_po_box = TRUE where id = 'dcd67f49-a166-457a-a993-e0b08455273a'; +update re_us_post_regions set is_po_box = TRUE where id = '187af1a3-7052-4fd5-b2d2-d935d690b944'; +update re_us_post_regions set is_po_box = TRUE where id = 'a94045e1-5b76-41e5-b363-ddb463d0189d'; +update re_us_post_regions set is_po_box = TRUE where id = 'a94045e1-5b76-41e5-b363-ddb463d0189d'; +update re_us_post_regions set is_po_box = TRUE where id = '02c0a1dc-51cc-4496-862b-c8ef7093aa35'; +update re_us_post_regions set is_po_box = TRUE where id = '361d1d46-abe1-4152-af17-f420f601bcfb'; +update re_us_post_regions set is_po_box = TRUE where id = '8e77634c-364e-4b00-9522-debbd26d931e'; +update re_us_post_regions set is_po_box = TRUE where id = '3902d3d5-eec8-48be-a31e-10bf573121ad'; +update re_us_post_regions set is_po_box = TRUE where id = '30f6906e-9ce7-43e6-b6e5-7064a2f4efae'; +update re_us_post_regions set is_po_box = TRUE where id = '30f6906e-9ce7-43e6-b6e5-7064a2f4efae'; +update re_us_post_regions set is_po_box = TRUE where id = 'e601defc-25a1-4b5e-a28e-7744ab580b89'; +update re_us_post_regions set is_po_box = TRUE where id = '16c273d4-375d-47c1-baa6-e168cba53263'; +update re_us_post_regions set is_po_box = TRUE where id = 'ae6f797a-63e4-43c9-9e2d-fd9f979a2790'; +update re_us_post_regions set is_po_box = TRUE where id = '7900bfde-fbda-4cdb-a297-3876f62280ea'; +update re_us_post_regions set is_po_box = TRUE where id = 'a3b0db80-3f04-4314-bed6-1b8d08a2160a'; +update re_us_post_regions set is_po_box = TRUE where id = 'cbd02b0c-5e75-4acc-ae35-51444062d026'; +update re_us_post_regions set is_po_box = TRUE where id = '21039ffb-5af7-4ef4-90a0-23651b88c676'; +update re_us_post_regions set is_po_box = TRUE where id = '629a2728-4e42-4c61-8bf6-a1e908b7097d'; +update re_us_post_regions set is_po_box = TRUE where id = 'f7ecc45c-3e06-4311-8579-51e6abe3aff5'; +update re_us_post_regions set is_po_box = TRUE where id = '02d08092-50b8-4cd4-982b-37031abd7076'; +update re_us_post_regions set is_po_box = TRUE where id = '78d60b28-f418-47f1-8657-7227c6d0a53d'; +update re_us_post_regions set is_po_box = TRUE where id = '78d60b28-f418-47f1-8657-7227c6d0a53d'; +update re_us_post_regions set is_po_box = TRUE where id = 'a5fd6e5a-4401-4e6f-beb3-b8870e64f61b'; +update re_us_post_regions set is_po_box = TRUE where id = '654174e8-1d80-4aa7-96cc-22da028197b7'; +update re_us_post_regions set is_po_box = TRUE where id = 'cc02053f-5894-41af-a8ef-13195a8e8f3a'; +update re_us_post_regions set is_po_box = TRUE where id = '8edbfeed-a8f8-4600-9b1e-ebe09fdfd5ae'; +update re_us_post_regions set is_po_box = TRUE where id = '9fdd2bec-fe0a-4778-bb25-7dc37acadf1c'; +update re_us_post_regions set is_po_box = TRUE where id = 'e7f78d03-2df1-48cc-ba8c-45f560b226c9'; +update re_us_post_regions set is_po_box = TRUE where id = 'a8f55b70-6d26-4d69-a682-a371e1dbd056'; +update re_us_post_regions set is_po_box = TRUE where id = '31f4c18c-3192-4f63-910b-bf33c6b9e061'; +update re_us_post_regions set is_po_box = TRUE where id = '31f4c18c-3192-4f63-910b-bf33c6b9e061'; +update re_us_post_regions set is_po_box = TRUE where id = '11d80fb0-829f-48bf-9f88-14f2c9c01edd'; +update re_us_post_regions set is_po_box = TRUE where id = '56e776b0-fc9c-49b7-89ca-f4341569e319'; +update re_us_post_regions set is_po_box = TRUE where id = '56e776b0-fc9c-49b7-89ca-f4341569e319'; +update re_us_post_regions set is_po_box = TRUE where id = '44fe7d92-11f7-4576-a05f-6b52a25d726c'; +update re_us_post_regions set is_po_box = TRUE where id = '44fe7d92-11f7-4576-a05f-6b52a25d726c'; +update re_us_post_regions set is_po_box = TRUE where id = 'd96af160-a386-4f7e-b61f-5353c3e08551'; +update re_us_post_regions set is_po_box = TRUE where id = 'd96af160-a386-4f7e-b61f-5353c3e08551'; +update re_us_post_regions set is_po_box = TRUE where id = '4f7beab9-b8c8-4dc4-a836-3b9b0834783f'; +update re_us_post_regions set is_po_box = TRUE where id = '640224e0-9613-4197-8c73-f78a98009df3'; +update re_us_post_regions set is_po_box = TRUE where id = 'f59437c9-f818-41b5-8ed4-513c1d4d5f3b'; +update re_us_post_regions set is_po_box = TRUE where id = 'f59437c9-f818-41b5-8ed4-513c1d4d5f3b'; +update re_us_post_regions set is_po_box = TRUE where id = '4c93f658-691b-44a2-8bb7-c60b2dc45503'; +update re_us_post_regions set is_po_box = TRUE where id = '45e95378-48a3-4384-8726-e18b85be2bb0'; +update re_us_post_regions set is_po_box = TRUE where id = '3616bc47-1375-4713-9307-98f76101501c'; +update re_us_post_regions set is_po_box = TRUE where id = 'b30d5c88-09bb-4b66-91d8-3e7fe5f9453f'; +update re_us_post_regions set is_po_box = TRUE where id = '0f0b6ddc-24ab-4fdf-a786-9c6b9dd803cd'; +update re_us_post_regions set is_po_box = TRUE where id = 'd1a70c89-e8e4-49bb-9bcf-d19c4eeeedd4'; +update re_us_post_regions set is_po_box = TRUE where id = 'd1a70c89-e8e4-49bb-9bcf-d19c4eeeedd4'; +update re_us_post_regions set is_po_box = TRUE where id = 'd1a70c89-e8e4-49bb-9bcf-d19c4eeeedd4'; +update re_us_post_regions set is_po_box = TRUE where id = '8fc90b5e-f32d-4cd6-9b22-e510b4a73d86'; +update re_us_post_regions set is_po_box = TRUE where id = '8fc90b5e-f32d-4cd6-9b22-e510b4a73d86'; +update re_us_post_regions set is_po_box = TRUE where id = 'a01d5869-cd11-4c62-bfde-1cf80681d146'; +update re_us_post_regions set is_po_box = TRUE where id = '070ef09d-f948-47cd-86ed-3010443a60e8'; +update re_us_post_regions set is_po_box = TRUE where id = '76092c14-3161-45bc-9a6b-5eac75cb3b72'; +update re_us_post_regions set is_po_box = TRUE where id = 'eb7361ad-de3d-4298-bdc8-43a8bc8ed19b'; +update re_us_post_regions set is_po_box = TRUE where id = '0dc252e9-b008-41a4-8494-a67474b123af'; +update re_us_post_regions set is_po_box = TRUE where id = '297b70c1-f95a-4097-8f45-d89ebe96be2c'; +update re_us_post_regions set is_po_box = TRUE where id = '736abb77-3cf7-4caa-87bf-4d78106f9c36'; +update re_us_post_regions set is_po_box = TRUE where id = '2f370f08-502d-4642-8136-d8a61265a9f2'; +update re_us_post_regions set is_po_box = TRUE where id = '446e77af-4084-4aca-92ae-fed8d6daf50d'; +update re_us_post_regions set is_po_box = TRUE where id = '607f6f35-bc00-4ac7-b240-86a5deebf735'; +update re_us_post_regions set is_po_box = TRUE where id = 'db86626f-0fd8-4c72-9084-b59f72368e19'; +update re_us_post_regions set is_po_box = TRUE where id = 'abb58344-e03c-4530-96ff-e80eb6f3525d'; +update re_us_post_regions set is_po_box = TRUE where id = '4b74645b-1cfb-4314-b522-b72cd5ce3e59'; +update re_us_post_regions set is_po_box = TRUE where id = '05e2bf23-23c9-4085-84dc-299a506986ac'; +update re_us_post_regions set is_po_box = TRUE where id = '7247a475-08c3-415a-aac0-cefb7f99a60e'; +update re_us_post_regions set is_po_box = TRUE where id = 'ed44b64c-a20c-462d-870e-de118817fa1a'; +update re_us_post_regions set is_po_box = TRUE where id = 'badf04a8-e5f8-4007-ba54-2975cc4636a0'; +update re_us_post_regions set is_po_box = TRUE where id = '9e2eba70-878b-4559-90eb-b71810ed3098'; +update re_us_post_regions set is_po_box = TRUE where id = '3e7d0b03-499c-424d-8827-007dcd49ec0a'; +update re_us_post_regions set is_po_box = TRUE where id = 'c08fa224-8b0d-4179-9681-891f7f1d960c'; +update re_us_post_regions set is_po_box = TRUE where id = 'a1272018-a71e-4a0a-b0ef-bba9b1680c8c'; +update re_us_post_regions set is_po_box = TRUE where id = 'eeec6a21-7eaa-4136-a002-db35a9e2bc99'; +update re_us_post_regions set is_po_box = TRUE where id = '7b3aa47e-28cb-4adf-a62c-a4db441b0213'; +update re_us_post_regions set is_po_box = TRUE where id = 'd67713b7-b44e-4c0b-b981-c8d043faf6d4'; +update re_us_post_regions set is_po_box = TRUE where id = '795c7716-1ecd-4b8c-8522-212cbe6b7f4b'; +update re_us_post_regions set is_po_box = TRUE where id = '37e37956-2943-4e90-a7bc-0d4d350b7e26'; +update re_us_post_regions set is_po_box = TRUE where id = '8b098f77-0b64-4107-bae6-5c6242b228a3'; +update re_us_post_regions set is_po_box = TRUE where id = '369c521b-6c87-4cc0-88e6-c76ad2b7e9c1'; +update re_us_post_regions set is_po_box = TRUE where id = '369c521b-6c87-4cc0-88e6-c76ad2b7e9c1'; +update re_us_post_regions set is_po_box = TRUE where id = 'b391be0e-559d-485c-b487-6a5d74aeba37'; +update re_us_post_regions set is_po_box = TRUE where id = '2a572d7f-b458-423c-9e9b-ac667b43eaca'; +update re_us_post_regions set is_po_box = TRUE where id = '2a572d7f-b458-423c-9e9b-ac667b43eaca'; +update re_us_post_regions set is_po_box = TRUE where id = '2a572d7f-b458-423c-9e9b-ac667b43eaca'; +update re_us_post_regions set is_po_box = TRUE where id = '2a572d7f-b458-423c-9e9b-ac667b43eaca'; +update re_us_post_regions set is_po_box = TRUE where id = 'a93217a4-4868-4dae-a685-8bf9430fc03c'; +update re_us_post_regions set is_po_box = TRUE where id = 'e057c202-1433-4e3d-82ed-b9ba2b6e9fac'; +update re_us_post_regions set is_po_box = TRUE where id = 'c00464de-ef50-4e32-bb47-e7459b8cbb79'; +update re_us_post_regions set is_po_box = TRUE where id = '179d4bfb-7579-4245-9c50-808fdf9d6eed'; +update re_us_post_regions set is_po_box = TRUE where id = '9acd1abe-9230-4669-9edb-d14050587969'; +update re_us_post_regions set is_po_box = TRUE where id = '3d460ff5-2e2b-4c8a-b1db-f923d8766aac'; +update re_us_post_regions set is_po_box = TRUE where id = '17c687f9-b609-4ce7-85f0-bee2d21f61bf'; +update re_us_post_regions set is_po_box = TRUE where id = '137e2405-8676-43fe-a413-de6589783a44'; +update re_us_post_regions set is_po_box = TRUE where id = '93f33dbc-6bf0-42cc-a126-13e2fea5dfd5'; +update re_us_post_regions set is_po_box = TRUE where id = 'ef3af3ca-119c-4a6a-824a-1e1b8141e1dd'; +update re_us_post_regions set is_po_box = TRUE where id = '72089949-0936-40e0-bbdc-e5559606934c'; +update re_us_post_regions set is_po_box = TRUE where id = 'a872cb35-5500-4651-b7c4-d9bd2910b865'; +update re_us_post_regions set is_po_box = TRUE where id = '2b18fdf1-4848-41d1-85e8-9caebdcd287f'; +update re_us_post_regions set is_po_box = TRUE where id = '4b4ec7d2-c1f2-4c35-ab5b-973ec19c5bf5'; +update re_us_post_regions set is_po_box = TRUE where id = '3fa25b84-6496-488f-8df8-9407ae1106c1'; +update re_us_post_regions set is_po_box = TRUE where id = 'c3d302db-87e4-437c-a7e1-4c87b7a8332b'; +update re_us_post_regions set is_po_box = TRUE where id = '894379de-7ecf-486c-8ec6-76c798ce35d0'; +update re_us_post_regions set is_po_box = TRUE where id = '4a45d127-f8ac-4191-9ffb-f159864efef4'; +update re_us_post_regions set is_po_box = TRUE where id = 'e1bb7a6e-332e-46df-a52c-407909ccc889'; +update re_us_post_regions set is_po_box = TRUE where id = '7d56624d-4700-43fc-9602-354e3eb036ee'; +update re_us_post_regions set is_po_box = TRUE where id = '4eaf3842-f02b-425b-97d5-79ea7d8cec85'; +update re_us_post_regions set is_po_box = TRUE where id = '4eaf3842-f02b-425b-97d5-79ea7d8cec85'; +update re_us_post_regions set is_po_box = TRUE where id = '4eaf3842-f02b-425b-97d5-79ea7d8cec85'; +update re_us_post_regions set is_po_box = TRUE where id = '5153c068-51bd-40db-ac6c-e1bcca4af435'; +update re_us_post_regions set is_po_box = TRUE where id = '2b9d3e57-f096-407f-834b-cb6b0b0f5003'; +update re_us_post_regions set is_po_box = TRUE where id = '352c30d5-e642-4d1f-9f9d-e2e117878f3e'; +update re_us_post_regions set is_po_box = TRUE where id = '0ca3bdb8-115e-4738-a852-dcb9574e4ecf'; +update re_us_post_regions set is_po_box = TRUE where id = '0ca3bdb8-115e-4738-a852-dcb9574e4ecf'; +update re_us_post_regions set is_po_box = TRUE where id = '6a0cccac-64e9-45f6-a54b-ac3beda566e7'; +update re_us_post_regions set is_po_box = TRUE where id = '00f20164-2fe3-49b5-8852-76be781d00f6'; +update re_us_post_regions set is_po_box = TRUE where id = '5e64a31d-baa2-4a60-b378-3ba8321e8c8f'; +update re_us_post_regions set is_po_box = TRUE where id = '5f1eee2d-c5de-43d2-beea-65c5ff8568fc'; +update re_us_post_regions set is_po_box = TRUE where id = '8b0b4314-28c4-43e9-962b-666411fa9c05'; +update re_us_post_regions set is_po_box = TRUE where id = '56dbe5f5-09f3-4367-8c78-4cfa28a76a7a'; +update re_us_post_regions set is_po_box = TRUE where id = 'f086ac99-4868-4da8-8db4-1abd6a09606a'; +update re_us_post_regions set is_po_box = TRUE where id = 'be454a8b-9b7c-4457-97bb-dfa93fc1d166'; +update re_us_post_regions set is_po_box = TRUE where id = 'd3b6abe7-29a3-49dd-943d-1c1048b7e7f6'; +update re_us_post_regions set is_po_box = TRUE where id = 'cada2ad3-63a6-4c4d-82d1-930cb4ae860d'; +update re_us_post_regions set is_po_box = TRUE where id = 'ea93b909-cfab-4a0d-a832-9d810a722127'; +update re_us_post_regions set is_po_box = TRUE where id = '395c9ba5-15be-4ee9-adf8-6a4cc56efb02'; +update re_us_post_regions set is_po_box = TRUE where id = '276abcb7-c7ee-4d8a-b0e5-4c6409cc88ec'; +update re_us_post_regions set is_po_box = TRUE where id = '108fad23-1aaf-4ce7-8469-a125142038c0'; +update re_us_post_regions set is_po_box = TRUE where id = 'aa13d039-9640-454e-b41f-0fa01dbddeb8'; +update re_us_post_regions set is_po_box = TRUE where id = 'c36c40f0-707d-4fa9-b85c-7f68950e11f3'; +update re_us_post_regions set is_po_box = TRUE where id = 'e93b0e2f-94c3-4350-8775-40611f9816a3'; +update re_us_post_regions set is_po_box = TRUE where id = '6d5a6721-a1db-42e6-a6ef-1179fb8a3689'; +update re_us_post_regions set is_po_box = TRUE where id = '49611046-ec89-425f-9793-55368de416e5'; +update re_us_post_regions set is_po_box = TRUE where id = '8d8e6dd2-965c-4e0b-96b2-277f3e2b819a'; +update re_us_post_regions set is_po_box = TRUE where id = '252548bd-326a-468f-9e4b-6659883fdc10'; +update re_us_post_regions set is_po_box = TRUE where id = '84cd2af3-9bd5-4017-98d6-e9bbf6231a1b'; +update re_us_post_regions set is_po_box = TRUE where id = '4df854c9-044a-449a-bc72-789c9456f3c7'; +update re_us_post_regions set is_po_box = TRUE where id = '8e0da27f-54bf-4680-bb18-48734c62826c'; +update re_us_post_regions set is_po_box = TRUE where id = '3c877bfa-b2a5-4f73-9555-4bc7d2674f03'; +update re_us_post_regions set is_po_box = TRUE where id = '7a0365c0-e30c-4daf-aa81-6f0618646a59'; +update re_us_post_regions set is_po_box = TRUE where id = 'b600dd5b-567e-46c8-a65b-6c7d38ef9e8a'; +update re_us_post_regions set is_po_box = TRUE where id = 'd7139638-769f-4303-a0df-38836e93d706'; +update re_us_post_regions set is_po_box = TRUE where id = '4a32184b-b0b7-4d6a-b34c-450b15f085f0'; +update re_us_post_regions set is_po_box = TRUE where id = '28b13fe7-79f3-41d3-8ece-57a3a59276eb'; +update re_us_post_regions set is_po_box = TRUE where id = '551590b0-5be7-4d30-ae31-b67791e52c96'; +update re_us_post_regions set is_po_box = TRUE where id = 'a377e950-52e3-4a5a-b7ab-fce68e399c79'; +update re_us_post_regions set is_po_box = TRUE where id = '7ec9a1c8-74a1-4aa7-9aee-857a920bfc5c'; +update re_us_post_regions set is_po_box = TRUE where id = '55c092b1-de10-4a96-b34f-151c8d16fbec'; +update re_us_post_regions set is_po_box = TRUE where id = '55c092b1-de10-4a96-b34f-151c8d16fbec'; +update re_us_post_regions set is_po_box = TRUE where id = '469e9872-787c-4cce-8a78-759dc90414a8'; +update re_us_post_regions set is_po_box = TRUE where id = '469e9872-787c-4cce-8a78-759dc90414a8'; +update re_us_post_regions set is_po_box = TRUE where id = '469e9872-787c-4cce-8a78-759dc90414a8'; +update re_us_post_regions set is_po_box = TRUE where id = '0be3c992-8145-4f78-896f-7e871bb5462a'; +update re_us_post_regions set is_po_box = TRUE where id = '0be3c992-8145-4f78-896f-7e871bb5462a'; +update re_us_post_regions set is_po_box = TRUE where id = '7c2f979e-419d-4a8c-b92a-05229bb26ec5'; +update re_us_post_regions set is_po_box = TRUE where id = '9284af91-65e3-48be-adc3-d15453fbdd80'; +update re_us_post_regions set is_po_box = TRUE where id = '9899154f-4732-429e-8434-4441c13e4191'; +update re_us_post_regions set is_po_box = TRUE where id = 'd940ebd4-09e7-45a1-9d10-a2882f1cf2e2'; +update re_us_post_regions set is_po_box = TRUE where id = '301d1a44-593d-488d-890a-3c3a7f14c5a9'; +update re_us_post_regions set is_po_box = TRUE where id = '5ec01594-ae5a-4c7e-bf19-de27adb70252'; +update re_us_post_regions set is_po_box = TRUE where id = '3ae319e2-a7a5-45c3-a67b-627b24149a09'; +update re_us_post_regions set is_po_box = TRUE where id = '913fed5a-0415-42ff-bceb-a1c827f46bfd'; +update re_us_post_regions set is_po_box = TRUE where id = '0fe89988-8ffd-4266-b355-0b9a43bf7305'; +update re_us_post_regions set is_po_box = TRUE where id = 'fcf6115f-9596-485c-8545-8082d8848bc7'; +update re_us_post_regions set is_po_box = TRUE where id = '330d70c3-5504-4a76-a8fc-d4335bdf5299'; +update re_us_post_regions set is_po_box = TRUE where id = 'a61242df-eee9-45e9-b6b6-b5186138a12e'; +update re_us_post_regions set is_po_box = TRUE where id = '7759be18-8fb3-4097-a545-83d66264dcfe'; +update re_us_post_regions set is_po_box = TRUE where id = '338954e0-26c2-466d-b349-6ed1cd335acb'; +update re_us_post_regions set is_po_box = TRUE where id = '10b972fe-cb67-4e9b-b1b7-ca98564c0084'; +update re_us_post_regions set is_po_box = TRUE where id = '697ae974-bf72-41d5-b080-75eab1acdd53'; +update re_us_post_regions set is_po_box = TRUE where id = 'c13afe3e-48d3-4c6f-8a02-9310bbf7b6f5'; +update re_us_post_regions set is_po_box = TRUE where id = 'c13afe3e-48d3-4c6f-8a02-9310bbf7b6f5'; +update re_us_post_regions set is_po_box = TRUE where id = 'ec27fb6c-453b-4eb9-b8ef-a69cef62c392'; +update re_us_post_regions set is_po_box = TRUE where id = 'abeef15e-8cc9-4ef1-94f7-31060000bc3c'; +update re_us_post_regions set is_po_box = TRUE where id = 'e76ad3f8-8f42-4da8-9bcc-9b1631a2f9a0'; +update re_us_post_regions set is_po_box = TRUE where id = 'b074782b-1efe-4349-ab69-1e9317b24630'; +update re_us_post_regions set is_po_box = TRUE where id = '03e607f2-667d-4464-8dfd-55efeaf7b7c4'; +update re_us_post_regions set is_po_box = TRUE where id = 'fa26c52a-ded0-47e6-a60e-23495af36b27'; +update re_us_post_regions set is_po_box = TRUE where id = 'a58dce0e-b352-44b7-a431-6fd21036821e'; +update re_us_post_regions set is_po_box = TRUE where id = '108d924d-356c-4c88-aedc-20bc931e5ef2'; +update re_us_post_regions set is_po_box = TRUE where id = '6ca72a5a-5139-45ef-92df-43a23c66ee28'; +update re_us_post_regions set is_po_box = TRUE where id = 'e0f3d67a-1dd8-4bf2-8c84-c1630730b28d'; +update re_us_post_regions set is_po_box = TRUE where id = 'e0f3d67a-1dd8-4bf2-8c84-c1630730b28d'; +update re_us_post_regions set is_po_box = TRUE where id = 'e0f3d67a-1dd8-4bf2-8c84-c1630730b28d'; +update re_us_post_regions set is_po_box = TRUE where id = 'e0f3d67a-1dd8-4bf2-8c84-c1630730b28d'; +update re_us_post_regions set is_po_box = TRUE where id = 'e0f3d67a-1dd8-4bf2-8c84-c1630730b28d'; +update re_us_post_regions set is_po_box = TRUE where id = '9816591d-cfb4-450b-8510-eafe5748c265'; +update re_us_post_regions set is_po_box = TRUE where id = '409d6853-725c-4132-bc9e-3a5d27771940'; +update re_us_post_regions set is_po_box = TRUE where id = '2bada3d8-2cc3-4671-a45b-7882d4a23000'; +update re_us_post_regions set is_po_box = TRUE where id = 'c3bf2d44-da3a-4149-a8d1-4005f50adf9e'; +update re_us_post_regions set is_po_box = TRUE where id = 'c53c2b2d-f40f-447a-9bb8-ff1968efc1a6'; +update re_us_post_regions set is_po_box = TRUE where id = 'dd38ca3f-cef6-4b95-afdd-8e6fb7ee1666'; +update re_us_post_regions set is_po_box = TRUE where id = '3104f383-fb18-4286-b1a4-74d0f1332fe7'; +update re_us_post_regions set is_po_box = TRUE where id = '41400d3b-db83-40a6-9f23-6b2f7f52c644'; +update re_us_post_regions set is_po_box = TRUE where id = '12c827dd-b38f-4ecf-bbb2-e3c7a7e09846'; +update re_us_post_regions set is_po_box = TRUE where id = '12c827dd-b38f-4ecf-bbb2-e3c7a7e09846'; +update re_us_post_regions set is_po_box = TRUE where id = '12c827dd-b38f-4ecf-bbb2-e3c7a7e09846'; +update re_us_post_regions set is_po_box = TRUE where id = '222ee47a-5e1c-4185-8d7f-006adafc5073'; +update re_us_post_regions set is_po_box = TRUE where id = '91881b20-e5de-42de-87df-7e58843dc837'; +update re_us_post_regions set is_po_box = TRUE where id = '4800ffc7-4920-471b-8551-c7c3debda928'; +update re_us_post_regions set is_po_box = TRUE where id = '80594b25-922f-4271-8f78-8dc21c2c60e5'; +update re_us_post_regions set is_po_box = TRUE where id = '80594b25-922f-4271-8f78-8dc21c2c60e5'; +update re_us_post_regions set is_po_box = TRUE where id = '80594b25-922f-4271-8f78-8dc21c2c60e5'; +update re_us_post_regions set is_po_box = TRUE where id = '3543b17f-e72f-447f-9250-48ac6c925875'; +update re_us_post_regions set is_po_box = TRUE where id = '3543b17f-e72f-447f-9250-48ac6c925875'; +update re_us_post_regions set is_po_box = TRUE where id = '0c653ef0-208e-45f1-b09c-e19a67bda4d0'; +update re_us_post_regions set is_po_box = TRUE where id = 'e4693ae0-cd1a-417b-89dc-ed44dd515d76'; +update re_us_post_regions set is_po_box = TRUE where id = '8a014f7d-79aa-4c75-97dd-eedc75bbec02'; +update re_us_post_regions set is_po_box = TRUE where id = 'b6093141-6b5d-4e17-a9b5-2f187336797a'; +update re_us_post_regions set is_po_box = TRUE where id = '9185445c-027b-4a7f-b908-72988b706ef7'; +update re_us_post_regions set is_po_box = TRUE where id = '9185445c-027b-4a7f-b908-72988b706ef7'; +update re_us_post_regions set is_po_box = TRUE where id = 'cad3daba-1103-42d2-9757-3a5d9f5d2f30'; +update re_us_post_regions set is_po_box = TRUE where id = 'ef80fcae-23fc-431f-b96a-295eacbcb860'; +update re_us_post_regions set is_po_box = TRUE where id = 'fd20c531-8b68-4ee1-8f28-e0745bba4b70'; +update re_us_post_regions set is_po_box = TRUE where id = '7bc74d44-caf4-4dec-8835-b6b10ce47c56'; +update re_us_post_regions set is_po_box = TRUE where id = '88398e68-19ca-4ddb-883b-4e389f2f8ebf'; +update re_us_post_regions set is_po_box = TRUE where id = '88398e68-19ca-4ddb-883b-4e389f2f8ebf'; +update re_us_post_regions set is_po_box = TRUE where id = '1a236b76-5d34-4ed1-8769-47fc2c8221a7'; +update re_us_post_regions set is_po_box = TRUE where id = 'ed7d69e1-5a83-4234-a76d-50d23a4295bf'; +update re_us_post_regions set is_po_box = TRUE where id = '1f974006-22a7-42f0-99b4-c5afdee23802'; +update re_us_post_regions set is_po_box = TRUE where id = '4330549b-b9de-4593-ae8b-2e7e25f94eab'; +update re_us_post_regions set is_po_box = TRUE where id = 'c95e0de6-1c52-4ebf-be08-275fe62d0cfa'; +update re_us_post_regions set is_po_box = TRUE where id = '824dcb44-a4da-4b97-abf5-b28c9f93f1fa'; +update re_us_post_regions set is_po_box = TRUE where id = '769a5419-ec0d-422f-9f6c-849c18125c51'; +update re_us_post_regions set is_po_box = TRUE where id = '43a550e5-5084-4e04-a167-00fbfdde2ed0'; +update re_us_post_regions set is_po_box = TRUE where id = '43a550e5-5084-4e04-a167-00fbfdde2ed0'; +update re_us_post_regions set is_po_box = TRUE where id = '6aa45d7d-dbc0-4c64-b433-f17cdc864241'; +update re_us_post_regions set is_po_box = TRUE where id = '6aa45d7d-dbc0-4c64-b433-f17cdc864241'; +update re_us_post_regions set is_po_box = TRUE where id = '6aa45d7d-dbc0-4c64-b433-f17cdc864241'; +update re_us_post_regions set is_po_box = TRUE where id = '98b76d9a-c58b-4f6e-8449-54b97c3f520b'; +update re_us_post_regions set is_po_box = TRUE where id = '91ae38a1-168e-416f-a6f5-80eb048ff7c6'; +update re_us_post_regions set is_po_box = TRUE where id = 'ef01932d-396f-4b0d-baf1-7c6f7339c007'; +update re_us_post_regions set is_po_box = TRUE where id = 'fad7d31b-1903-440f-9904-7a328c2e3df6'; +update re_us_post_regions set is_po_box = TRUE where id = 'fad7d31b-1903-440f-9904-7a328c2e3df6'; +update re_us_post_regions set is_po_box = TRUE where id = 'fad7d31b-1903-440f-9904-7a328c2e3df6'; +update re_us_post_regions set is_po_box = TRUE where id = 'a21ce13d-bbca-4cb1-95fd-77cd87fd3c05'; +update re_us_post_regions set is_po_box = TRUE where id = 'a21ce13d-bbca-4cb1-95fd-77cd87fd3c05'; +update re_us_post_regions set is_po_box = TRUE where id = '5022c1cb-0b74-474d-873b-3a53b28f538c'; +update re_us_post_regions set is_po_box = TRUE where id = '2249121d-ca9c-41dc-b68e-c3f73db73a8c'; +update re_us_post_regions set is_po_box = TRUE where id = '8095c4d7-4f73-4f8c-9061-fa44280e3cf1'; +update re_us_post_regions set is_po_box = TRUE where id = '8095c4d7-4f73-4f8c-9061-fa44280e3cf1'; +update re_us_post_regions set is_po_box = TRUE where id = '8095c4d7-4f73-4f8c-9061-fa44280e3cf1'; +update re_us_post_regions set is_po_box = TRUE where id = '12848966-22f2-47c4-badb-c8fbd764a2ac'; +update re_us_post_regions set is_po_box = TRUE where id = '857bf045-db49-4995-a3c1-62bd1b74e88f'; +update re_us_post_regions set is_po_box = TRUE where id = 'c0a28a44-9843-4994-a9ff-86f77389b5dc'; +update re_us_post_regions set is_po_box = TRUE where id = '7a5654ed-1bd4-42aa-9078-052432e37a9a'; +update re_us_post_regions set is_po_box = TRUE where id = '3f0cd447-01ab-4be7-a425-ab85343d5557'; +update re_us_post_regions set is_po_box = TRUE where id = '5cb93a87-ce3d-4d86-9734-e07c2dc8d98d'; +update re_us_post_regions set is_po_box = TRUE where id = '8c7ff50c-2ded-4594-8557-d8e063f43271'; +update re_us_post_regions set is_po_box = TRUE where id = '58e6b409-b091-4f95-ac04-4a808a9ad4a0'; +update re_us_post_regions set is_po_box = TRUE where id = '58e6b409-b091-4f95-ac04-4a808a9ad4a0'; +update re_us_post_regions set is_po_box = TRUE where id = '1be65846-9765-4e2b-bca0-a7380fffb325'; +update re_us_post_regions set is_po_box = TRUE where id = '1be65846-9765-4e2b-bca0-a7380fffb325'; +update re_us_post_regions set is_po_box = TRUE where id = 'd589d7dc-5599-45a2-bdbd-15efaefddd05'; +update re_us_post_regions set is_po_box = TRUE where id = '4a2e5ec4-ef4c-494e-be22-8c9ccc2f6929'; +update re_us_post_regions set is_po_box = TRUE where id = 'accc6cac-9c1d-45d6-b2fa-b1deaf623e62'; +update re_us_post_regions set is_po_box = TRUE where id = '6621e75b-f313-4c41-896f-6a2661f9a4f8'; +update re_us_post_regions set is_po_box = TRUE where id = '250d75cc-2e87-42ae-917f-971b4d2b4def'; +update re_us_post_regions set is_po_box = TRUE where id = '6a89828a-4c8e-4ef1-a683-3b5db7b6537b'; +update re_us_post_regions set is_po_box = TRUE where id = 'bbe22f6f-4a29-4f06-88c5-bd7368fe40ac'; +update re_us_post_regions set is_po_box = TRUE where id = 'f768655b-d795-4794-acca-898fb9e6165f'; +update re_us_post_regions set is_po_box = TRUE where id = 'e608a15c-9cb8-4c8c-b5d5-ff782feeb2ce'; +update re_us_post_regions set is_po_box = TRUE where id = '9c9fa4ce-af83-4e90-99f5-941ed958a0a0'; +update re_us_post_regions set is_po_box = TRUE where id = '9c9fa4ce-af83-4e90-99f5-941ed958a0a0'; +update re_us_post_regions set is_po_box = TRUE where id = '6b8fa977-1016-4904-9e38-00b163cdafa7'; +update re_us_post_regions set is_po_box = TRUE where id = '6b8fa977-1016-4904-9e38-00b163cdafa7'; +update re_us_post_regions set is_po_box = TRUE where id = '6b8fa977-1016-4904-9e38-00b163cdafa7'; +update re_us_post_regions set is_po_box = TRUE where id = '81642ead-2b96-4897-b914-62866372836b'; +update re_us_post_regions set is_po_box = TRUE where id = '7a7fe827-58ca-41f3-80c1-49fb3414c744'; +update re_us_post_regions set is_po_box = TRUE where id = '350e8269-b93e-45d6-b48f-b5c40e85b4f1'; +update re_us_post_regions set is_po_box = TRUE where id = 'dff74cd9-33cd-4e55-a384-654da160e32f'; +update re_us_post_regions set is_po_box = TRUE where id = '4028f160-7fa0-43e2-a34f-2874fb753797'; +update re_us_post_regions set is_po_box = TRUE where id = '77f1b20a-0657-4a4a-ae60-799ee3bb547c'; +update re_us_post_regions set is_po_box = TRUE where id = '3f9e4901-a26a-4b84-a2f8-9b46fac0686c'; +update re_us_post_regions set is_po_box = TRUE where id = '232d1030-d25b-4b65-9868-5f7f9eb9e689'; +update re_us_post_regions set is_po_box = TRUE where id = 'c7a16588-14f0-4215-9eb5-eb19b16e65df'; +update re_us_post_regions set is_po_box = TRUE where id = '5f96817a-a8ee-4fa5-a3aa-4ec05d43c094'; +update re_us_post_regions set is_po_box = TRUE where id = 'c0e40363-5f5e-4e32-b86f-da1337962cb6'; +update re_us_post_regions set is_po_box = TRUE where id = 'f4e5ea81-3ba7-48d9-bcbb-4b8995e98c57'; +update re_us_post_regions set is_po_box = TRUE where id = '32a5b8d0-53b6-4625-8b3c-6171940edf4e'; +update re_us_post_regions set is_po_box = TRUE where id = '1f7758dd-eaa2-4cca-aad2-17fdf6849d85'; +update re_us_post_regions set is_po_box = TRUE where id = '1e20dd17-9be9-4501-be63-5ddd752e0bbe'; +update re_us_post_regions set is_po_box = TRUE where id = '1e20dd17-9be9-4501-be63-5ddd752e0bbe'; +update re_us_post_regions set is_po_box = TRUE where id = '3e7e596a-56cb-45e9-9b4e-299750768c13'; +update re_us_post_regions set is_po_box = TRUE where id = 'bc284119-e014-4ee7-89dc-31004d1de5a4'; +update re_us_post_regions set is_po_box = TRUE where id = '0349d290-7467-43fc-accb-501b6dd77b7a'; +update re_us_post_regions set is_po_box = TRUE where id = '0349d290-7467-43fc-accb-501b6dd77b7a'; +update re_us_post_regions set is_po_box = TRUE where id = '0423d78a-78f3-4fd0-a88f-1e0076ce649a'; +update re_us_post_regions set is_po_box = TRUE where id = '859a14cd-13dd-4279-a75c-4fcc68586407'; +update re_us_post_regions set is_po_box = TRUE where id = 'adc49a61-7346-436a-9ed5-008b383a4168'; +update re_us_post_regions set is_po_box = TRUE where id = 'f6cea0ce-d078-4555-9917-ee292464902e'; +update re_us_post_regions set is_po_box = TRUE where id = '3c5201cf-4c76-496a-9f46-af12453ccbab'; +update re_us_post_regions set is_po_box = TRUE where id = 'c1ab752a-a028-4c01-9d2e-8b1259fefcee'; +update re_us_post_regions set is_po_box = TRUE where id = '46d3c8e9-2d50-4b61-9ada-e25b4b79d9ed'; +update re_us_post_regions set is_po_box = TRUE where id = '53258fdc-eecf-4662-acc0-652de98a8afd'; +update re_us_post_regions set is_po_box = TRUE where id = '4e483eb8-9100-49d5-873b-b42e9088a53e'; +update re_us_post_regions set is_po_box = TRUE where id = '4e483eb8-9100-49d5-873b-b42e9088a53e'; +update re_us_post_regions set is_po_box = TRUE where id = '4e483eb8-9100-49d5-873b-b42e9088a53e'; +update re_us_post_regions set is_po_box = TRUE where id = '1bd9453c-f61e-4125-8cef-6b4b997ba7f5'; +update re_us_post_regions set is_po_box = TRUE where id = 'ee64c22b-53a6-4ad7-9d70-14045c4ad1e2'; +update re_us_post_regions set is_po_box = TRUE where id = '02a058ab-196d-41de-9ccf-0266735b1370'; +update re_us_post_regions set is_po_box = TRUE where id = '4ee77ad9-53b4-426c-8c08-ea3edeb17f89'; +update re_us_post_regions set is_po_box = TRUE where id = 'd29dd982-6c5e-4025-aa72-201a3f015b1c'; +update re_us_post_regions set is_po_box = TRUE where id = '03184004-a710-472e-adab-3b1fe7288eab'; +update re_us_post_regions set is_po_box = TRUE where id = '03184004-a710-472e-adab-3b1fe7288eab'; +update re_us_post_regions set is_po_box = TRUE where id = '5f413e80-3543-47eb-a48f-224bac5d8a53'; +update re_us_post_regions set is_po_box = TRUE where id = 'd4f21a08-1e72-4773-ac4e-c09853558c0e'; +update re_us_post_regions set is_po_box = TRUE where id = '967fdb36-9720-49a6-bcc4-284f52ac6bab'; +update re_us_post_regions set is_po_box = TRUE where id = '967fdb36-9720-49a6-bcc4-284f52ac6bab'; +update re_us_post_regions set is_po_box = TRUE where id = '62e99078-572d-402f-855b-f866f7684805'; +update re_us_post_regions set is_po_box = TRUE where id = 'ba6d1ae9-b21c-4eea-83df-e841a65e762b'; +update re_us_post_regions set is_po_box = TRUE where id = '2b6f2480-a7b0-4325-909a-c0acf468a586'; +update re_us_post_regions set is_po_box = TRUE where id = 'f17462d0-4375-48d4-b068-300c6f8d508b'; +update re_us_post_regions set is_po_box = TRUE where id = 'afd350c7-1aaa-4a74-b4cf-6ed6c1da877d'; +update re_us_post_regions set is_po_box = TRUE where id = 'c158b01a-d8ce-4c3f-bd53-a9beb2eaadd9'; +update re_us_post_regions set is_po_box = TRUE where id = 'c158b01a-d8ce-4c3f-bd53-a9beb2eaadd9'; +update re_us_post_regions set is_po_box = TRUE where id = 'd447d09c-7e8c-42c9-8f16-c23e5798c45d'; +update re_us_post_regions set is_po_box = TRUE where id = 'dc89b2f2-451f-47bd-a865-40f71cbe0560'; +update re_us_post_regions set is_po_box = TRUE where id = 'dc89b2f2-451f-47bd-a865-40f71cbe0560'; +update re_us_post_regions set is_po_box = TRUE where id = 'dc89b2f2-451f-47bd-a865-40f71cbe0560'; +update re_us_post_regions set is_po_box = TRUE where id = '30d6c757-2caf-4f58-80df-53323a8dbb50'; +update re_us_post_regions set is_po_box = TRUE where id = '03e0c3a2-e32e-4009-87a0-1be5c62d1758'; +update re_us_post_regions set is_po_box = TRUE where id = '0438a52e-c258-4f4c-aa3f-57d8eff5a74b'; +update re_us_post_regions set is_po_box = TRUE where id = '5e86bbf3-f4bf-42af-a9b7-ed33acadf5ac'; +update re_us_post_regions set is_po_box = TRUE where id = '1ab52e8f-db75-491d-abfa-227ea47ac55c'; +update re_us_post_regions set is_po_box = TRUE where id = 'f00b32d3-da67-4a61-8b82-c76445e59f5c'; +update re_us_post_regions set is_po_box = TRUE where id = 'f00b32d3-da67-4a61-8b82-c76445e59f5c'; +update re_us_post_regions set is_po_box = TRUE where id = 'b5d55ece-54de-4f22-86c7-9f8dec2dc029'; +update re_us_post_regions set is_po_box = TRUE where id = 'b5d55ece-54de-4f22-86c7-9f8dec2dc029'; +update re_us_post_regions set is_po_box = TRUE where id = '650c6683-0be2-4486-8b04-252b0ebc204b'; +update re_us_post_regions set is_po_box = TRUE where id = '650c6683-0be2-4486-8b04-252b0ebc204b'; +update re_us_post_regions set is_po_box = TRUE where id = '9b054164-d946-421d-ad59-b3cba005e265'; +update re_us_post_regions set is_po_box = TRUE where id = '9b054164-d946-421d-ad59-b3cba005e265'; +update re_us_post_regions set is_po_box = TRUE where id = '15c2a3d3-0522-4b55-b305-3d1fc924dd65'; +update re_us_post_regions set is_po_box = TRUE where id = '15c2a3d3-0522-4b55-b305-3d1fc924dd65'; +update re_us_post_regions set is_po_box = TRUE where id = 'dc75814e-fc50-4f0a-8271-362fe3ebe0c6'; +update re_us_post_regions set is_po_box = TRUE where id = 'f79eab30-1e82-486e-917e-b63f01d10d21'; +update re_us_post_regions set is_po_box = TRUE where id = '9f3af991-4658-4701-877e-c0ba3a0add3e'; +update re_us_post_regions set is_po_box = TRUE where id = '9f3af991-4658-4701-877e-c0ba3a0add3e'; +update re_us_post_regions set is_po_box = TRUE where id = '34cd9d62-f708-43ee-aada-7e36382ed2ec'; +update re_us_post_regions set is_po_box = TRUE where id = '34cd9d62-f708-43ee-aada-7e36382ed2ec'; +update re_us_post_regions set is_po_box = TRUE where id = '67b592d2-2f6d-4a80-98c2-c6307d282b81'; +update re_us_post_regions set is_po_box = TRUE where id = '0f09737d-337b-44c2-afa4-7a1f18376d81'; +update re_us_post_regions set is_po_box = TRUE where id = '3bb51e0f-3f66-4951-90e8-415dd7cd350f'; +update re_us_post_regions set is_po_box = TRUE where id = '3bb51e0f-3f66-4951-90e8-415dd7cd350f'; +update re_us_post_regions set is_po_box = TRUE where id = '3bb51e0f-3f66-4951-90e8-415dd7cd350f'; +update re_us_post_regions set is_po_box = TRUE where id = '3bb51e0f-3f66-4951-90e8-415dd7cd350f'; +update re_us_post_regions set is_po_box = TRUE where id = '5cdefd72-f4db-43e2-b5e3-655af3e53676'; +update re_us_post_regions set is_po_box = TRUE where id = '9f44a61f-24da-4086-aaa9-99a81cc1ccc9'; +update re_us_post_regions set is_po_box = TRUE where id = 'e64834d2-4a70-4c90-8fec-cb8aa8e877dd'; +update re_us_post_regions set is_po_box = TRUE where id = '54e29190-8679-44b4-9169-5aa6d2fc41b1'; +update re_us_post_regions set is_po_box = TRUE where id = '54e29190-8679-44b4-9169-5aa6d2fc41b1'; +update re_us_post_regions set is_po_box = TRUE where id = '96fd66cb-bd5d-49e4-92d0-10417ac3016c'; +update re_us_post_regions set is_po_box = TRUE where id = 'df7639af-8f13-40bf-a33c-8b6f8128d9e7'; +update re_us_post_regions set is_po_box = TRUE where id = 'd88cc477-a580-4d85-abd3-bcbeb2130450'; +update re_us_post_regions set is_po_box = TRUE where id = '5f12043e-36a8-41b8-8bed-11858bc32a51'; +update re_us_post_regions set is_po_box = TRUE where id = 'ae06b313-e5b6-445d-b80b-53b235e589d1'; +update re_us_post_regions set is_po_box = TRUE where id = '447258fb-58c6-4ab3-913b-dff7f4e8ea1d'; +update re_us_post_regions set is_po_box = TRUE where id = '5cd78b4e-ca2e-42de-90b5-423db17ee500'; +update re_us_post_regions set is_po_box = TRUE where id = '5002c9e1-6932-4a4b-8fef-c4b9a883247a'; +update re_us_post_regions set is_po_box = TRUE where id = '139a4d87-02f5-4965-af8c-3fa59c21057a'; +update re_us_post_regions set is_po_box = TRUE where id = 'b177afe4-d726-487f-bcb8-9390b9fdbc09'; +update re_us_post_regions set is_po_box = TRUE where id = 'b177afe4-d726-487f-bcb8-9390b9fdbc09'; +update re_us_post_regions set is_po_box = TRUE where id = 'b177afe4-d726-487f-bcb8-9390b9fdbc09'; +update re_us_post_regions set is_po_box = TRUE where id = '8a563d02-9302-4322-a9d4-2230b471c113'; +update re_us_post_regions set is_po_box = TRUE where id = '8a563d02-9302-4322-a9d4-2230b471c113'; +update re_us_post_regions set is_po_box = TRUE where id = '8a563d02-9302-4322-a9d4-2230b471c113'; +update re_us_post_regions set is_po_box = TRUE where id = '30e22cff-6596-4cc6-a489-2f9df8b4bec0'; +update re_us_post_regions set is_po_box = TRUE where id = '5a4f09b1-f85c-4e60-8feb-3128c64b15ab'; +update re_us_post_regions set is_po_box = TRUE where id = '0e05ec48-2718-4ac6-9221-3d98d9b8f7c8'; +update re_us_post_regions set is_po_box = TRUE where id = '7dd4b89a-7e27-47ee-aca9-2a150542e443'; +update re_us_post_regions set is_po_box = TRUE where id = '65505e3f-0c44-4448-8191-740c1c6b0618'; +update re_us_post_regions set is_po_box = TRUE where id = 'a218b543-1b1b-47aa-88f2-f9615c1c18a9'; +update re_us_post_regions set is_po_box = TRUE where id = 'e34e5dd3-fd03-4f69-ac2c-00dcceea3c5a'; +update re_us_post_regions set is_po_box = TRUE where id = 'e34e5dd3-fd03-4f69-ac2c-00dcceea3c5a'; +update re_us_post_regions set is_po_box = TRUE where id = '022a0228-abdf-4937-85b6-be9a3492f1ef'; +update re_us_post_regions set is_po_box = TRUE where id = '3d9ac91b-7938-4b16-a822-c9222b173b51'; +update re_us_post_regions set is_po_box = TRUE where id = '407bd0c1-0605-4dff-913c-532c7b94e2ee'; +update re_us_post_regions set is_po_box = TRUE where id = 'f51f9c09-1a96-4079-9938-1cb0a8fc3525'; +update re_us_post_regions set is_po_box = TRUE where id = '432b3e50-069f-4080-96b4-b941a5bd9c67'; +update re_us_post_regions set is_po_box = TRUE where id = '8825ae46-72a7-4a2a-84c3-51d3cddf3e44'; +update re_us_post_regions set is_po_box = TRUE where id = '8825ae46-72a7-4a2a-84c3-51d3cddf3e44'; +update re_us_post_regions set is_po_box = TRUE where id = '1c52ff96-5697-489b-a5cf-7db012f20f6b'; +update re_us_post_regions set is_po_box = TRUE where id = '1c52ff96-5697-489b-a5cf-7db012f20f6b'; +update re_us_post_regions set is_po_box = TRUE where id = '4eca8cf5-4fc2-4fbb-9d14-996104451ec2'; +update re_us_post_regions set is_po_box = TRUE where id = '9b841920-1520-4cf0-8d17-19b871a5064f'; +update re_us_post_regions set is_po_box = TRUE where id = '9b841920-1520-4cf0-8d17-19b871a5064f'; +update re_us_post_regions set is_po_box = TRUE where id = '5681433b-aaaf-46f4-b17a-977990dfec7c'; +update re_us_post_regions set is_po_box = TRUE where id = '2e1bb532-c764-4cea-9258-604ddc427805'; +update re_us_post_regions set is_po_box = TRUE where id = '87748adb-8114-4452-a630-7bfbebe3d58f'; +update re_us_post_regions set is_po_box = TRUE where id = '87748adb-8114-4452-a630-7bfbebe3d58f'; +update re_us_post_regions set is_po_box = TRUE where id = '8bd4a90e-c813-443d-b335-0bbe89dd6245'; +update re_us_post_regions set is_po_box = TRUE where id = 'da5d5c90-87d9-4f01-8761-3cb319c46047'; +update re_us_post_regions set is_po_box = TRUE where id = 'da5d5c90-87d9-4f01-8761-3cb319c46047'; +update re_us_post_regions set is_po_box = TRUE where id = 'da5d5c90-87d9-4f01-8761-3cb319c46047'; +update re_us_post_regions set is_po_box = TRUE where id = '41c7101e-fae0-477c-99bb-a2d93fe51aad'; +update re_us_post_regions set is_po_box = TRUE where id = '9462991d-d0db-4726-98b8-a63aa5f85cf2'; +update re_us_post_regions set is_po_box = TRUE where id = '55021737-e61f-4f9d-a321-ad185793ab3b'; +update re_us_post_regions set is_po_box = TRUE where id = '11f17c64-00d0-4687-9c11-b960d3963391'; +update re_us_post_regions set is_po_box = TRUE where id = '11f17c64-00d0-4687-9c11-b960d3963391'; +update re_us_post_regions set is_po_box = TRUE where id = 'db05a7a7-db7c-47a6-b7d1-74fe309ca290'; +update re_us_post_regions set is_po_box = TRUE where id = '66acb544-b9a2-4aa3-b660-70144cefb24a'; +update re_us_post_regions set is_po_box = TRUE where id = '91c36af7-df3c-410a-a7f9-925be53783bf'; +update re_us_post_regions set is_po_box = TRUE where id = '5e4e68e6-527a-4f7c-8292-a5e694d78dcf'; +update re_us_post_regions set is_po_box = TRUE where id = 'b4e87044-ccae-41b6-9b2f-0e7fba456c21'; +update re_us_post_regions set is_po_box = TRUE where id = '06fac11a-be4f-4e17-8788-07c26c723b6c'; +update re_us_post_regions set is_po_box = TRUE where id = '06fac11a-be4f-4e17-8788-07c26c723b6c'; +update re_us_post_regions set is_po_box = TRUE where id = '468694bf-ab5a-4755-910d-77c8517eb67f'; +update re_us_post_regions set is_po_box = TRUE where id = '42d3ef8f-1285-4b29-a003-5d2a9262e7d6'; +update re_us_post_regions set is_po_box = TRUE where id = '42d3ef8f-1285-4b29-a003-5d2a9262e7d6'; +update re_us_post_regions set is_po_box = TRUE where id = 'aa990f46-6488-4764-a603-6908a464d76e'; +update re_us_post_regions set is_po_box = TRUE where id = 'b94c86bb-473a-4371-bb76-a56328bc3bb4'; +update re_us_post_regions set is_po_box = TRUE where id = 'b94c86bb-473a-4371-bb76-a56328bc3bb4'; +update re_us_post_regions set is_po_box = TRUE where id = 'ae7d4d97-72a0-4448-a49f-b5265553f8ec'; +update re_us_post_regions set is_po_box = TRUE where id = '0e317b6e-58f9-4e45-aa98-d40ea1d2998a'; +update re_us_post_regions set is_po_box = TRUE where id = 'a3f08f49-7b0b-46fd-a874-dae3b3a9f675'; +update re_us_post_regions set is_po_box = TRUE where id = '82a84a09-aecb-45af-8253-bb7260837f85'; +update re_us_post_regions set is_po_box = TRUE where id = 'a660727b-79a4-4eef-b7ed-027be6153583'; +update re_us_post_regions set is_po_box = TRUE where id = '413954ec-03e1-4882-a1f6-57c81a5ed909'; +update re_us_post_regions set is_po_box = TRUE where id = '413954ec-03e1-4882-a1f6-57c81a5ed909'; +update re_us_post_regions set is_po_box = TRUE where id = '08e8bbc8-dd0b-4e8b-a514-d4e349807d7c'; +update re_us_post_regions set is_po_box = TRUE where id = '57d06389-811e-48f1-95d3-2154a2fb7c58'; +update re_us_post_regions set is_po_box = TRUE where id = '57d06389-811e-48f1-95d3-2154a2fb7c58'; +update re_us_post_regions set is_po_box = TRUE where id = '57d06389-811e-48f1-95d3-2154a2fb7c58'; +update re_us_post_regions set is_po_box = TRUE where id = 'c0d65bc7-646e-4fb8-98f1-9f610eff92a3'; +update re_us_post_regions set is_po_box = TRUE where id = 'abed0bdf-d433-4214-a0d1-29e03ac3496c'; +update re_us_post_regions set is_po_box = TRUE where id = 'da6a9510-f7f2-4087-b0b9-3c017e83aadc'; +update re_us_post_regions set is_po_box = TRUE where id = 'b428252e-b231-487a-b96e-dc5298eaf2e3'; +update re_us_post_regions set is_po_box = TRUE where id = 'd53cd115-c61b-412a-a0d2-e1b0b312ed3f'; +update re_us_post_regions set is_po_box = TRUE where id = '2270edf4-8f4a-42cc-b6f7-63d3c3e5fd96'; +update re_us_post_regions set is_po_box = TRUE where id = 'd8b80326-8654-42f5-9dd4-5f54a0a5df52'; +update re_us_post_regions set is_po_box = TRUE where id = 'e8bb0f53-cabf-4de1-89a2-96c34050f39a'; +update re_us_post_regions set is_po_box = TRUE where id = '4c14fac2-846a-4959-92e2-a028acbca23a'; +update re_us_post_regions set is_po_box = TRUE where id = '926b31de-310f-4dd9-b32f-bc5dd989091d'; +update re_us_post_regions set is_po_box = TRUE where id = '9012cfa6-2842-461f-9bb6-e50a0c19c4b0'; +update re_us_post_regions set is_po_box = TRUE where id = '9012cfa6-2842-461f-9bb6-e50a0c19c4b0'; +update re_us_post_regions set is_po_box = TRUE where id = '9012cfa6-2842-461f-9bb6-e50a0c19c4b0'; +update re_us_post_regions set is_po_box = TRUE where id = '292e3310-5ac5-4ae8-a674-70820801bb03'; +update re_us_post_regions set is_po_box = TRUE where id = '73877a4b-db42-4f55-8716-eb793371008f'; +update re_us_post_regions set is_po_box = TRUE where id = '07f6acad-e208-44ed-90c2-26b2a66f7542'; +update re_us_post_regions set is_po_box = TRUE where id = 'd54153f9-76d1-4694-a0ca-27ce84ffed09'; +update re_us_post_regions set is_po_box = TRUE where id = '9906f636-d6d2-47b6-9769-5010ec1c6b93'; +update re_us_post_regions set is_po_box = TRUE where id = '3d3adb92-037a-414d-b5d9-7cb631c78176'; +update re_us_post_regions set is_po_box = TRUE where id = '9efc70a5-7dc4-4c26-ade9-b2627715ab89'; +update re_us_post_regions set is_po_box = TRUE where id = 'ef59d027-d92c-412a-bf21-ba9aa1bd79c0'; +update re_us_post_regions set is_po_box = TRUE where id = '738979d9-4e37-4990-873c-84d0e97ce606'; +update re_us_post_regions set is_po_box = TRUE where id = 'e34c2ea3-c021-48ef-9dea-061f67c2f245'; +update re_us_post_regions set is_po_box = TRUE where id = 'a55f713b-d4d8-46a1-81b9-8dbb72432c9e'; +update re_us_post_regions set is_po_box = TRUE where id = '737826b2-dcfb-488c-ac36-89903d363374'; +update re_us_post_regions set is_po_box = TRUE where id = 'fb1a47e8-e48c-49f4-b1ce-3f4039469d9e'; +update re_us_post_regions set is_po_box = TRUE where id = '4546fe02-7fc5-4f5b-a846-bdd4c20f771e'; +update re_us_post_regions set is_po_box = TRUE where id = 'ac44e012-7ba0-4d88-935b-20ff26bb50fd'; +update re_us_post_regions set is_po_box = TRUE where id = '649e12b4-b7e7-4a7f-a2ed-0917a57a70a2'; +update re_us_post_regions set is_po_box = TRUE where id = 'd790437e-0832-41fa-a6f2-912d8ea45bf6'; +update re_us_post_regions set is_po_box = TRUE where id = '2c3c12b5-cdd6-4940-b996-65c163af88c5'; +update re_us_post_regions set is_po_box = TRUE where id = 'fe8b0cfa-aa55-4018-855a-6dec5b7a157c'; +update re_us_post_regions set is_po_box = TRUE where id = '7524fece-973d-4cda-836d-4d3a3710f7c8'; +update re_us_post_regions set is_po_box = TRUE where id = 'f1593b12-c79f-44d5-9694-93581e9a875b'; +update re_us_post_regions set is_po_box = TRUE where id = 'f1593b12-c79f-44d5-9694-93581e9a875b'; +update re_us_post_regions set is_po_box = TRUE where id = '55be7e1a-47b4-4c5f-a5be-a7f1eaa76c4d'; +update re_us_post_regions set is_po_box = TRUE where id = '55be7e1a-47b4-4c5f-a5be-a7f1eaa76c4d'; +update re_us_post_regions set is_po_box = TRUE where id = '3f4b6ea2-c82a-4573-bfae-3ff1f9616666'; +update re_us_post_regions set is_po_box = TRUE where id = 'ab4f18b5-1b7e-4968-9f13-dfdd4e53b243'; +update re_us_post_regions set is_po_box = TRUE where id = '09842f23-1ed4-4050-a329-efdeb4dfdb12'; +update re_us_post_regions set is_po_box = TRUE where id = '63e0d307-5801-4e2f-914a-e00cde270764'; +update re_us_post_regions set is_po_box = TRUE where id = '04ce26c2-a56a-44a9-b562-a1676844b492'; +update re_us_post_regions set is_po_box = TRUE where id = '176495ed-3975-49fa-be01-63e05329cf27'; +update re_us_post_regions set is_po_box = TRUE where id = '176495ed-3975-49fa-be01-63e05329cf27'; +update re_us_post_regions set is_po_box = TRUE where id = '176495ed-3975-49fa-be01-63e05329cf27'; +update re_us_post_regions set is_po_box = TRUE where id = '1609d413-ea64-4bed-806d-bb4f591afbf9'; +update re_us_post_regions set is_po_box = TRUE where id = '61b2a187-adce-4d1f-8a92-b0f849aa1ceb'; +update re_us_post_regions set is_po_box = TRUE where id = '87200674-1f51-45c3-80a9-bb68409a103e'; +update re_us_post_regions set is_po_box = TRUE where id = '32b2d7e8-46b2-4fb4-b7a7-1597b1754583'; +update re_us_post_regions set is_po_box = TRUE where id = '337e3337-2d49-4010-b8e9-7ea54f2897fb'; +update re_us_post_regions set is_po_box = TRUE where id = '628e0901-6793-4ee9-92eb-b5ff58880920'; +update re_us_post_regions set is_po_box = TRUE where id = 'bdf45215-64d7-4706-bd8d-3ea2a948942e'; +update re_us_post_regions set is_po_box = TRUE where id = 'ce1aba3f-7748-4ae8-b100-26c70ecb9787'; +update re_us_post_regions set is_po_box = TRUE where id = '0d94ed9a-80d0-4a8d-9fb6-de13453f5ee3'; +update re_us_post_regions set is_po_box = TRUE where id = '0d94ed9a-80d0-4a8d-9fb6-de13453f5ee3'; +update re_us_post_regions set is_po_box = TRUE where id = '0d94ed9a-80d0-4a8d-9fb6-de13453f5ee3'; +update re_us_post_regions set is_po_box = TRUE where id = '95813311-6524-4780-9ff8-75a525908d98'; +update re_us_post_regions set is_po_box = TRUE where id = 'f0fbcb9a-b53f-4b66-97eb-4acb979b2126'; +update re_us_post_regions set is_po_box = TRUE where id = 'f0fbcb9a-b53f-4b66-97eb-4acb979b2126'; +update re_us_post_regions set is_po_box = TRUE where id = 'f0fbcb9a-b53f-4b66-97eb-4acb979b2126'; +update re_us_post_regions set is_po_box = TRUE where id = 'f0fbcb9a-b53f-4b66-97eb-4acb979b2126'; +update re_us_post_regions set is_po_box = TRUE where id = '1e564384-b2e4-4139-9dac-860c61c68189'; +update re_us_post_regions set is_po_box = TRUE where id = '1e564384-b2e4-4139-9dac-860c61c68189'; +update re_us_post_regions set is_po_box = TRUE where id = '2624e924-9fc3-42be-9012-509be0c27772'; +update re_us_post_regions set is_po_box = TRUE where id = 'd7135cc4-51ab-46e2-a435-d2c4879e990f'; +update re_us_post_regions set is_po_box = TRUE where id = 'ac5b9d27-681d-4f85-8251-2ee11a26534f'; +update re_us_post_regions set is_po_box = TRUE where id = '5340ff58-de28-4d50-8913-e676bd4f3b99'; +update re_us_post_regions set is_po_box = TRUE where id = '0b6db455-32c1-4fb6-afea-0a80804168e1'; +update re_us_post_regions set is_po_box = TRUE where id = '3559abf9-cc7f-4dfb-9097-7ec76e5c2114'; +update re_us_post_regions set is_po_box = TRUE where id = '2ce60b72-d2c3-46de-bb12-e6a40cdc3e29'; +update re_us_post_regions set is_po_box = TRUE where id = 'c6ad74fc-c7db-454b-8e29-eed8bd6ab447'; +update re_us_post_regions set is_po_box = TRUE where id = 'c6ad74fc-c7db-454b-8e29-eed8bd6ab447'; +update re_us_post_regions set is_po_box = TRUE where id = 'c6ad74fc-c7db-454b-8e29-eed8bd6ab447'; +update re_us_post_regions set is_po_box = TRUE where id = 'c0bae6de-9839-4bf6-b915-3304ec42f042'; +update re_us_post_regions set is_po_box = TRUE where id = 'c0bae6de-9839-4bf6-b915-3304ec42f042'; +update re_us_post_regions set is_po_box = TRUE where id = 'c0bae6de-9839-4bf6-b915-3304ec42f042'; +update re_us_post_regions set is_po_box = TRUE where id = 'c0bae6de-9839-4bf6-b915-3304ec42f042'; +update re_us_post_regions set is_po_box = TRUE where id = 'c0bae6de-9839-4bf6-b915-3304ec42f042'; +update re_us_post_regions set is_po_box = TRUE where id = '5622c6ac-ccea-4d27-861c-5c3d14979f35'; +update re_us_post_regions set is_po_box = TRUE where id = 'e6108d2e-34ec-49de-a340-35db2941d08c'; +update re_us_post_regions set is_po_box = TRUE where id = '9fe1b8e9-86bc-4296-9c49-66565b915551'; +update re_us_post_regions set is_po_box = TRUE where id = '8e1cecab-ce01-46e5-8dd4-b4bf2bf689f8'; +update re_us_post_regions set is_po_box = TRUE where id = '85002b7f-ccab-42f0-ab1b-cc9048b3c700'; +update re_us_post_regions set is_po_box = TRUE where id = 'e75e65cb-2bad-4e66-bfbf-4c97a37993d5'; +update re_us_post_regions set is_po_box = TRUE where id = '7f3b7239-263c-43cc-b46c-b4d87876d907'; +update re_us_post_regions set is_po_box = TRUE where id = '31319e91-410f-4132-9032-0d1ab972955c'; +update re_us_post_regions set is_po_box = TRUE where id = 'b5eb733c-4084-4a9d-a593-280681564e55'; +update re_us_post_regions set is_po_box = TRUE where id = 'b5eb733c-4084-4a9d-a593-280681564e55'; +update re_us_post_regions set is_po_box = TRUE where id = 'b5eb733c-4084-4a9d-a593-280681564e55'; +update re_us_post_regions set is_po_box = TRUE where id = '1aca6a37-42df-447d-a18e-a73220bb867c'; +update re_us_post_regions set is_po_box = TRUE where id = 'af53c4c8-9088-4735-9d5d-f2ef3b5c4908'; +update re_us_post_regions set is_po_box = TRUE where id = '7c5e1700-e1f3-43d3-9533-c45acd8eb3f9'; +update re_us_post_regions set is_po_box = TRUE where id = 'e8c83038-1d8c-4f9f-b4f0-9c9b7aabc32b'; +update re_us_post_regions set is_po_box = TRUE where id = 'ed326968-b34b-4291-9a7e-d904e3ac3284'; +update re_us_post_regions set is_po_box = TRUE where id = 'ed326968-b34b-4291-9a7e-d904e3ac3284'; +update re_us_post_regions set is_po_box = TRUE where id = 'eaf1ea1e-f3d5-4190-a9f6-72ee152c7d0f'; +update re_us_post_regions set is_po_box = TRUE where id = '25eccb45-e74b-484c-941f-1ac672aeeecf'; +update re_us_post_regions set is_po_box = TRUE where id = '25eccb45-e74b-484c-941f-1ac672aeeecf'; +update re_us_post_regions set is_po_box = TRUE where id = 'a73281ff-23d5-4384-a6eb-50a09e10335f'; +update re_us_post_regions set is_po_box = TRUE where id = 'e212c386-fce5-4705-8582-eff581688770'; +update re_us_post_regions set is_po_box = TRUE where id = 'dd34501f-8a18-4cf2-a37e-dfe267c3513e'; +update re_us_post_regions set is_po_box = TRUE where id = '5d4a03b0-718f-42f2-b831-2bf88e4146a1'; +update re_us_post_regions set is_po_box = TRUE where id = '241bc52d-606f-4df9-8edd-8e88e70a2c03'; +update re_us_post_regions set is_po_box = TRUE where id = '94189d2b-6623-4c6a-b422-f34f50317ac8'; +update re_us_post_regions set is_po_box = TRUE where id = '267f1641-c224-4e22-8bed-c5e29794083c'; +update re_us_post_regions set is_po_box = TRUE where id = '956f670c-30b8-473d-a2be-4d94b79bdf30'; +update re_us_post_regions set is_po_box = TRUE where id = 'd0038d10-daa7-4ee4-940b-938246f5419b'; +update re_us_post_regions set is_po_box = TRUE where id = '877cbfce-6a03-481c-afad-0cadb278d743'; +update re_us_post_regions set is_po_box = TRUE where id = '19d5fb7c-9725-4af5-a677-85264a436cee'; +update re_us_post_regions set is_po_box = TRUE where id = 'c13a4fcc-1b05-47e9-912a-f77914a823fa'; +update re_us_post_regions set is_po_box = TRUE where id = 'c13a4fcc-1b05-47e9-912a-f77914a823fa'; +update re_us_post_regions set is_po_box = TRUE where id = '1b1664a8-22ed-481d-bbeb-328aa5ba3fee'; +update re_us_post_regions set is_po_box = TRUE where id = '1b1664a8-22ed-481d-bbeb-328aa5ba3fee'; +update re_us_post_regions set is_po_box = TRUE where id = '8379b269-4d51-40d9-9e47-4b7b636459ff'; +update re_us_post_regions set is_po_box = TRUE where id = '83a7f1fd-d873-4bf9-b6c7-fc4bd6474a9c'; +update re_us_post_regions set is_po_box = TRUE where id = 'e7451d75-cf0e-4b91-b909-59ab869ad104'; +update re_us_post_regions set is_po_box = TRUE where id = 'ca41ba46-37e0-4c03-a424-a2937497d9f0'; +update re_us_post_regions set is_po_box = TRUE where id = '5dcc43ed-d14c-444a-bd73-2fbf2053c019'; +update re_us_post_regions set is_po_box = TRUE where id = '2024f1f9-b9d5-4dc3-b951-14781a22a155'; +update re_us_post_regions set is_po_box = TRUE where id = '82d0d650-5edf-4ab9-a50b-a0c6731d358a'; +update re_us_post_regions set is_po_box = TRUE where id = 'b1c26687-4bb7-4c39-9b3f-e35a9d2abb9f'; +update re_us_post_regions set is_po_box = TRUE where id = 'c19b33c2-53a8-4351-b3aa-b27434d07fd4'; +update re_us_post_regions set is_po_box = TRUE where id = '1f62618a-13e2-4714-9079-d0e4e6c3f8e7'; +update re_us_post_regions set is_po_box = TRUE where id = '08f3635f-7c22-483f-83b8-51f6c9d84a26'; +update re_us_post_regions set is_po_box = TRUE where id = 'b263f30f-367f-489a-8b04-efa070acf181'; +update re_us_post_regions set is_po_box = TRUE where id = '0bb1dbaf-85e8-4cf5-b40a-3c72cbf8a65e'; +update re_us_post_regions set is_po_box = TRUE where id = 'aa49b09f-558c-4e2c-871a-5d946d619c9d'; +update re_us_post_regions set is_po_box = TRUE where id = 'e23216ee-73ac-4746-9bf5-a1f502c82e63'; +update re_us_post_regions set is_po_box = TRUE where id = 'e23216ee-73ac-4746-9bf5-a1f502c82e63'; +update re_us_post_regions set is_po_box = TRUE where id = 'a174461d-5b5c-42f0-ac51-b950475e6d5b'; +update re_us_post_regions set is_po_box = TRUE where id = '58cafb50-61da-4bae-908b-a3dbbe75a0df'; +update re_us_post_regions set is_po_box = TRUE where id = '93189018-8c47-4a89-a5cd-bc4f83b7493e'; +update re_us_post_regions set is_po_box = TRUE where id = '156f4848-4691-42f2-97b3-67fb56b408dc'; +update re_us_post_regions set is_po_box = TRUE where id = '1cbeb855-82d5-4e0f-83e6-b9951db2f061'; +update re_us_post_regions set is_po_box = TRUE where id = 'e5d1d785-3684-4d86-a6b4-f8ada56e2cdc'; +update re_us_post_regions set is_po_box = TRUE where id = 'e5d1d785-3684-4d86-a6b4-f8ada56e2cdc'; +update re_us_post_regions set is_po_box = TRUE where id = 'b01d63b6-b2b9-4e5a-a82a-f52e165583cb'; +update re_us_post_regions set is_po_box = TRUE where id = 'ab509872-d1f9-4efb-8838-2f972fa3224f'; +update re_us_post_regions set is_po_box = TRUE where id = 'cce177b9-87e8-41c3-bc40-e087f48e5dea'; +update re_us_post_regions set is_po_box = TRUE where id = '21b17728-10ee-4d07-960d-5d740d8cf532'; +update re_us_post_regions set is_po_box = TRUE where id = 'd3b50036-aa2f-49df-b155-1b186ae8603c'; +update re_us_post_regions set is_po_box = TRUE where id = 'c7e79d6e-99ec-453c-82ec-8d3e3c8b4388'; +update re_us_post_regions set is_po_box = TRUE where id = 'c7e79d6e-99ec-453c-82ec-8d3e3c8b4388'; +update re_us_post_regions set is_po_box = TRUE where id = '2b8cb2c6-e98a-47e1-b33c-b062f7c0201c'; +update re_us_post_regions set is_po_box = TRUE where id = '70a4955e-e193-43b0-ac7c-972aac8111f1'; +update re_us_post_regions set is_po_box = TRUE where id = '8c3e5425-c92a-4b61-a7b8-53f3e4ca9922'; +update re_us_post_regions set is_po_box = TRUE where id = '31f1ec24-6e37-446e-ba52-252028056135'; +update re_us_post_regions set is_po_box = TRUE where id = '23370b7f-846c-4afc-bc38-e6e699778417'; +update re_us_post_regions set is_po_box = TRUE where id = 'b2ca7f5f-3f9a-4941-b948-1e5e872b29e1'; +update re_us_post_regions set is_po_box = TRUE where id = 'b2ca7f5f-3f9a-4941-b948-1e5e872b29e1'; +update re_us_post_regions set is_po_box = TRUE where id = 'e74ae6aa-4736-4fbb-af4e-b3f72c495add'; +update re_us_post_regions set is_po_box = TRUE where id = 'ec359557-831a-4faa-89f3-63907b256fe8'; +update re_us_post_regions set is_po_box = TRUE where id = 'e75c2d82-e5e4-4106-8124-2e3c90a348cd'; +update re_us_post_regions set is_po_box = TRUE where id = 'ca3a7d8c-fd45-4501-9608-8f27aa99ff59'; +update re_us_post_regions set is_po_box = TRUE where id = 'dd3c01c0-ccef-490c-8bf0-3c29e0f7fe4c'; +update re_us_post_regions set is_po_box = TRUE where id = 'b0149737-e70a-486b-a263-85c89110b03c'; +update re_us_post_regions set is_po_box = TRUE where id = '1f01ab19-deb9-445b-a2dc-daf875f09fa4'; +update re_us_post_regions set is_po_box = TRUE where id = '1f01ab19-deb9-445b-a2dc-daf875f09fa4'; +update re_us_post_regions set is_po_box = TRUE where id = '1f01ab19-deb9-445b-a2dc-daf875f09fa4'; +update re_us_post_regions set is_po_box = TRUE where id = '5d215474-4213-428e-b367-8ebca5c1b090'; +update re_us_post_regions set is_po_box = TRUE where id = '1eda1a1f-b4fd-470d-818c-6b2893f04a52'; +update re_us_post_regions set is_po_box = TRUE where id = 'fa8091d1-724a-4571-a797-d42e60285b1c'; +update re_us_post_regions set is_po_box = TRUE where id = '533f1882-1ddf-444d-96b5-be71512a3340'; +update re_us_post_regions set is_po_box = TRUE where id = '03b186eb-6243-428e-a226-be26ddfe7e38'; +update re_us_post_regions set is_po_box = TRUE where id = '23050300-d1fd-478a-b1da-2a7e6f954a1c'; +update re_us_post_regions set is_po_box = TRUE where id = 'b0ac3ad0-61b1-4b80-8cca-b767aba1a729'; +update re_us_post_regions set is_po_box = TRUE where id = 'a5a43060-e45c-49eb-9f2e-921fc9adb7bf'; +update re_us_post_regions set is_po_box = TRUE where id = 'a5a43060-e45c-49eb-9f2e-921fc9adb7bf'; +update re_us_post_regions set is_po_box = TRUE where id = 'c117c628-7227-4fd2-a4d9-0140c619180e'; +update re_us_post_regions set is_po_box = TRUE where id = '6d53401f-8d0e-4086-90f0-a91224122c79'; +update re_us_post_regions set is_po_box = TRUE where id = 'f6859c96-1644-4c01-9b0c-5155668f4c34'; +update re_us_post_regions set is_po_box = TRUE where id = '08e6b9b7-4f5f-47b5-8a62-03f19face177'; +update re_us_post_regions set is_po_box = TRUE where id = '08e6b9b7-4f5f-47b5-8a62-03f19face177'; +update re_us_post_regions set is_po_box = TRUE where id = 'af8f5712-3498-4868-8323-d16b05ec1f3c'; +update re_us_post_regions set is_po_box = TRUE where id = '48f8babd-0eec-4086-9915-3353ebe8e971'; +update re_us_post_regions set is_po_box = TRUE where id = '5d3f3dc4-0704-4583-ba34-e0c5684eb8c0'; +update re_us_post_regions set is_po_box = TRUE where id = '5d3f3dc4-0704-4583-ba34-e0c5684eb8c0'; +update re_us_post_regions set is_po_box = TRUE where id = '5d3f3dc4-0704-4583-ba34-e0c5684eb8c0'; +update re_us_post_regions set is_po_box = TRUE where id = '3ddc67fb-e37a-4666-8e24-f1817ed6015e'; +update re_us_post_regions set is_po_box = TRUE where id = '382fcf9f-61de-4486-bcfe-62425e4d989c'; +update re_us_post_regions set is_po_box = TRUE where id = '9d3050b8-b63d-4b4b-9811-feb0fee1ddf0'; +update re_us_post_regions set is_po_box = TRUE where id = '474436a3-ca8b-4c9c-a234-5b0f49cfbd91'; +update re_us_post_regions set is_po_box = TRUE where id = 'e1de750b-1ff9-4bbb-8358-79ae3feed8cc'; +update re_us_post_regions set is_po_box = TRUE where id = '786105ac-be88-49d3-89ac-8238ca8c1423'; +update re_us_post_regions set is_po_box = TRUE where id = 'd2fee675-bed5-40bf-9f9e-336487517653'; +update re_us_post_regions set is_po_box = TRUE where id = '14699e6f-9f85-4ee2-a359-a3de179bf4ae'; +update re_us_post_regions set is_po_box = TRUE where id = '04e112a4-16de-4d6c-9f18-e9435f5a38c1'; +update re_us_post_regions set is_po_box = TRUE where id = '5de2ad4b-e121-4c8e-bfa0-5fad890958e0'; +update re_us_post_regions set is_po_box = TRUE where id = 'bd323787-b553-4a8c-9f62-0d68f783c29d'; +update re_us_post_regions set is_po_box = TRUE where id = 'ec5b8316-65b4-47ec-a854-df92726940e8'; +update re_us_post_regions set is_po_box = TRUE where id = 'aa9d1a9f-5123-4dfd-9ce2-4562967c2f6a'; +update re_us_post_regions set is_po_box = TRUE where id = 'ae5f51aa-217c-4aa0-9243-b9ff5a43d467'; +update re_us_post_regions set is_po_box = TRUE where id = 'd4cbafcd-fbbb-4879-a993-43a49ddd06a9'; +update re_us_post_regions set is_po_box = TRUE where id = '2ea4faaf-1538-4c7d-87fc-34559efacf91'; +update re_us_post_regions set is_po_box = TRUE where id = '2ea4faaf-1538-4c7d-87fc-34559efacf91'; +update re_us_post_regions set is_po_box = TRUE where id = '76a1b3ec-8686-4334-a2b3-b14579ea9049'; +update re_us_post_regions set is_po_box = TRUE where id = 'c7ee3596-ee5b-4586-8537-66f325a12518'; +update re_us_post_regions set is_po_box = TRUE where id = 'c7ee3596-ee5b-4586-8537-66f325a12518'; +update re_us_post_regions set is_po_box = TRUE where id = '30fae371-5ca7-44b0-9211-fae41f0466bd'; +update re_us_post_regions set is_po_box = TRUE where id = '58e14156-674c-43a6-9c07-3c20adc193b0'; +update re_us_post_regions set is_po_box = TRUE where id = 'b472ac7d-e558-42f8-a711-3633e9d61b5e'; +update re_us_post_regions set is_po_box = TRUE where id = 'c5820afb-314f-4bf4-bb24-1cb97c5b849c'; +update re_us_post_regions set is_po_box = TRUE where id = 'cc9e862c-7c0e-4aa9-ae57-7447ec693bee'; +update re_us_post_regions set is_po_box = TRUE where id = 'cc9e862c-7c0e-4aa9-ae57-7447ec693bee'; +update re_us_post_regions set is_po_box = TRUE where id = '4643b8ca-1c46-49a7-ab2b-deafadac2682'; +update re_us_post_regions set is_po_box = TRUE where id = '0b1ee948-60f3-4a1c-bba3-64b92c185d94'; +update re_us_post_regions set is_po_box = TRUE where id = '6fddd2b8-a13a-4b9f-905b-6a7b5e4e81bb'; +update re_us_post_regions set is_po_box = TRUE where id = '0c9f8d49-1b01-4ad5-ad8a-7d3a31ba7c79'; +update re_us_post_regions set is_po_box = TRUE where id = '0c9f8d49-1b01-4ad5-ad8a-7d3a31ba7c79'; +update re_us_post_regions set is_po_box = TRUE where id = '0c9f8d49-1b01-4ad5-ad8a-7d3a31ba7c79'; +update re_us_post_regions set is_po_box = TRUE where id = '3c702272-bd4a-4a6c-bc93-8cba075885f7'; +update re_us_post_regions set is_po_box = TRUE where id = '82fec221-8643-408c-bda0-1b6b470aead3'; +update re_us_post_regions set is_po_box = TRUE where id = '4b238043-24da-4f1b-bc7b-f35d8a598309'; +update re_us_post_regions set is_po_box = TRUE where id = '4a81da2a-bf4e-465a-9c87-03e411cdc129'; +update re_us_post_regions set is_po_box = TRUE where id = 'fb37aae1-e7a1-4a12-acf0-667ca88aaec9'; +update re_us_post_regions set is_po_box = TRUE where id = '35d10680-f80a-48f0-9ac7-79cc1359213e'; +update re_us_post_regions set is_po_box = TRUE where id = 'df806b3b-c7ed-4213-aa20-505cf18f4a1d'; +update re_us_post_regions set is_po_box = TRUE where id = 'df806b3b-c7ed-4213-aa20-505cf18f4a1d'; +update re_us_post_regions set is_po_box = TRUE where id = 'df806b3b-c7ed-4213-aa20-505cf18f4a1d'; +update re_us_post_regions set is_po_box = TRUE where id = '0371c71b-25bb-470c-a49c-b616743e048d'; +update re_us_post_regions set is_po_box = TRUE where id = 'f4c57542-e3c3-4ca7-8101-569e15456b05'; +update re_us_post_regions set is_po_box = TRUE where id = '75a5a25f-6698-45ad-a35d-3c5b9e395ef9'; +update re_us_post_regions set is_po_box = TRUE where id = '45ae77d6-6672-4123-b455-bb925949c28f'; +update re_us_post_regions set is_po_box = TRUE where id = 'ddaede55-5b50-418b-a943-879d2fdc2fce'; +update re_us_post_regions set is_po_box = TRUE where id = '507940cf-7b27-48bb-a524-a7ec4cfc0e70'; +update re_us_post_regions set is_po_box = TRUE where id = '507940cf-7b27-48bb-a524-a7ec4cfc0e70'; +update re_us_post_regions set is_po_box = TRUE where id = 'b5eb9dfd-b085-4c2f-977f-be882c05fe94'; +update re_us_post_regions set is_po_box = TRUE where id = 'b5eb9dfd-b085-4c2f-977f-be882c05fe94'; +update re_us_post_regions set is_po_box = TRUE where id = '54696971-d2cc-4e20-b70c-dbef27f948c3'; +update re_us_post_regions set is_po_box = TRUE where id = '54696971-d2cc-4e20-b70c-dbef27f948c3'; +update re_us_post_regions set is_po_box = TRUE where id = '9265a200-9380-4b31-88c7-e4db08bfcc5d'; +update re_us_post_regions set is_po_box = TRUE where id = '9265a200-9380-4b31-88c7-e4db08bfcc5d'; +update re_us_post_regions set is_po_box = TRUE where id = 'a94f134f-1186-4000-89e0-a0aae142e873'; +update re_us_post_regions set is_po_box = TRUE where id = '2d52168d-c224-4bd7-ab6b-f164e655bfdc'; +update re_us_post_regions set is_po_box = TRUE where id = 'b942d85a-318a-4689-80b8-22bd5cf18fc2'; +update re_us_post_regions set is_po_box = TRUE where id = 'b942d85a-318a-4689-80b8-22bd5cf18fc2'; +update re_us_post_regions set is_po_box = TRUE where id = 'b942d85a-318a-4689-80b8-22bd5cf18fc2'; +update re_us_post_regions set is_po_box = TRUE where id = '2334c74d-2807-43a5-a19e-e767bd7daa83'; +update re_us_post_regions set is_po_box = TRUE where id = '38091c6c-1324-48e1-90b4-59034616378e'; +update re_us_post_regions set is_po_box = TRUE where id = '18c31311-3738-4be1-b9e4-c94b55b41bda'; +update re_us_post_regions set is_po_box = TRUE where id = 'edfa6078-31a6-4eeb-a6d5-2a2ad70d8e7c'; +update re_us_post_regions set is_po_box = TRUE where id = 'f59b9f25-f96a-44f4-9134-d3d525e81d55'; +update re_us_post_regions set is_po_box = TRUE where id = 'f192d087-ce23-4bb4-a5c9-d051e32dd7fc'; +update re_us_post_regions set is_po_box = TRUE where id = '2ea7915c-bcfd-4556-8199-5112ea786b16'; +update re_us_post_regions set is_po_box = TRUE where id = '4f2bf436-cc43-4ce7-af2a-cae0440f1f34'; +update re_us_post_regions set is_po_box = TRUE where id = '494ec549-7c21-4c7c-ada5-fe4f6661f921'; +update re_us_post_regions set is_po_box = TRUE where id = 'd53763b1-df25-48be-88b2-3c8fe440f381'; +update re_us_post_regions set is_po_box = TRUE where id = '154cad2f-1126-4a97-89bf-a007cc875071'; +update re_us_post_regions set is_po_box = TRUE where id = '394d6b8c-6acf-4782-b711-3a90bca2182e'; +update re_us_post_regions set is_po_box = TRUE where id = '550a5a2b-6477-4381-84b5-2e870a4fbe2d'; +update re_us_post_regions set is_po_box = TRUE where id = '8f0d6f3a-6367-4ce9-be22-7dd376aa4a85'; +update re_us_post_regions set is_po_box = TRUE where id = 'f283ff95-8d22-43d3-9cb2-d36a536e7aa9'; +update re_us_post_regions set is_po_box = TRUE where id = 'eb95a820-b5fa-4b1a-842e-103504321d75'; +update re_us_post_regions set is_po_box = TRUE where id = '73c2f509-4895-4747-93dd-fc0883a452e6'; +update re_us_post_regions set is_po_box = TRUE where id = '4174f0ee-ef7a-4baf-8b1a-270141fb7a58'; +update re_us_post_regions set is_po_box = TRUE where id = 'cb11b700-173f-4df7-9851-841dfcbbb327'; +update re_us_post_regions set is_po_box = TRUE where id = '29131101-ca09-41e3-9b1d-77c6c6005f0d'; +update re_us_post_regions set is_po_box = TRUE where id = '3af423a2-bf3c-438a-8b5e-3074fb307768'; +update re_us_post_regions set is_po_box = TRUE where id = '3af423a2-bf3c-438a-8b5e-3074fb307768'; +update re_us_post_regions set is_po_box = TRUE where id = '0e8a1bee-6f53-47af-b94f-30c8a0427353'; +update re_us_post_regions set is_po_box = TRUE where id = 'e642899c-1b74-4e75-929c-1671e7820c38'; +update re_us_post_regions set is_po_box = TRUE where id = 'e642899c-1b74-4e75-929c-1671e7820c38'; +update re_us_post_regions set is_po_box = TRUE where id = '1b25300c-5654-4224-8000-2f36bd56348d'; +update re_us_post_regions set is_po_box = TRUE where id = '1b25300c-5654-4224-8000-2f36bd56348d'; +update re_us_post_regions set is_po_box = TRUE where id = '199db6e6-09a7-4ed9-8585-11a14f848315'; +update re_us_post_regions set is_po_box = TRUE where id = 'e02cccea-5322-4b42-bc56-328bae3ddf49'; +update re_us_post_regions set is_po_box = TRUE where id = 'b113f99c-e665-45c7-b980-88cf9cc6f927'; +update re_us_post_regions set is_po_box = TRUE where id = 'fbf42394-0ca1-4a3b-b75d-e4bcf49abc7e'; +update re_us_post_regions set is_po_box = TRUE where id = 'fe10117d-a24d-4c97-b76e-70dcf20e81ac'; +update re_us_post_regions set is_po_box = TRUE where id = '4d3a0e57-bb62-40c1-bf1f-6633eb690293'; +update re_us_post_regions set is_po_box = TRUE where id = '4d3a0e57-bb62-40c1-bf1f-6633eb690293'; +update re_us_post_regions set is_po_box = TRUE where id = '9135f726-e3ee-49ca-8b6c-bb1cdf64665e'; +update re_us_post_regions set is_po_box = TRUE where id = '93ce929e-8cfd-444d-8bcc-fbe60a5f11a4'; +update re_us_post_regions set is_po_box = TRUE where id = '7c37f4b4-6ee0-40d5-b915-7b9926001ab7'; +update re_us_post_regions set is_po_box = TRUE where id = '0069cb68-5629-460d-8a79-df6c9033a423'; +update re_us_post_regions set is_po_box = TRUE where id = '0069cb68-5629-460d-8a79-df6c9033a423'; +update re_us_post_regions set is_po_box = TRUE where id = '0069cb68-5629-460d-8a79-df6c9033a423'; +update re_us_post_regions set is_po_box = TRUE where id = '0069cb68-5629-460d-8a79-df6c9033a423'; +update re_us_post_regions set is_po_box = TRUE where id = '0069cb68-5629-460d-8a79-df6c9033a423'; +update re_us_post_regions set is_po_box = TRUE where id = '0ae27d6d-e416-456a-927a-020b146e2ad9'; +update re_us_post_regions set is_po_box = TRUE where id = '32e5e7ae-9346-4714-8935-195c2be8831d'; +update re_us_post_regions set is_po_box = TRUE where id = '868b0353-498c-4686-b4b0-cbabb5207b1d'; +update re_us_post_regions set is_po_box = TRUE where id = '61c285cb-90a7-4f56-ba3a-77321f0623fc'; +update re_us_post_regions set is_po_box = TRUE where id = '38f87c08-cd61-4e9b-9e97-bfe4812c6516'; +update re_us_post_regions set is_po_box = TRUE where id = '93202ea4-268c-4c7f-809a-9488c485f621'; +update re_us_post_regions set is_po_box = TRUE where id = 'ffc832d4-d0a4-48e8-806d-df873be45964'; +update re_us_post_regions set is_po_box = TRUE where id = '81a043d9-e9f4-432b-99da-a020c129841f'; +update re_us_post_regions set is_po_box = TRUE where id = 'afab5d91-c0a3-4ef7-a6da-87166217e7d8'; +update re_us_post_regions set is_po_box = TRUE where id = 'ba6eb79e-c7ae-4d4b-a6dc-19e1c587fef5'; +update re_us_post_regions set is_po_box = TRUE where id = '7c57d899-626a-435b-ae1a-9ec4d9366de6'; +update re_us_post_regions set is_po_box = TRUE where id = '3d6bf3f3-180b-4c8c-ad5d-f54ef6e6c99f'; +update re_us_post_regions set is_po_box = TRUE where id = '4e8da77a-3bef-4763-8d8f-4c57699b6e79'; +update re_us_post_regions set is_po_box = TRUE where id = 'c1f41a49-97ea-4b82-919f-f620b1a9cd74'; +update re_us_post_regions set is_po_box = TRUE where id = 'dcebca04-c220-47ca-9ee2-de38c03d0b20'; +update re_us_post_regions set is_po_box = TRUE where id = 'ad3282b2-3476-4eee-bba1-ebc73727ea73'; +update re_us_post_regions set is_po_box = TRUE where id = '16c9961f-4c88-4fe1-bff6-b4f889d48ae2'; +update re_us_post_regions set is_po_box = TRUE where id = '16c9961f-4c88-4fe1-bff6-b4f889d48ae2'; +update re_us_post_regions set is_po_box = TRUE where id = '2799dd5e-c090-49ad-93ac-40dfebf095c3'; +update re_us_post_regions set is_po_box = TRUE where id = 'a0f79e40-b17b-4774-89ec-6919b4008f1b'; +update re_us_post_regions set is_po_box = TRUE where id = 'b17132a0-921c-4da7-8c62-a6a160263a4d'; +update re_us_post_regions set is_po_box = TRUE where id = '77540b43-6ddd-4d7f-9bb4-4ecbd7808f26'; +update re_us_post_regions set is_po_box = TRUE where id = '03c8150f-89bf-4826-a950-63f0ae244849'; +update re_us_post_regions set is_po_box = TRUE where id = 'c2e9b5b0-811c-4e22-a9cc-3b35f8593019'; +update re_us_post_regions set is_po_box = TRUE where id = 'd4ec231b-cd21-4cdc-bdd5-11d22df51a39'; +update re_us_post_regions set is_po_box = TRUE where id = '5f6843e6-2775-4323-b5cb-b9e623722a7e'; +update re_us_post_regions set is_po_box = TRUE where id = '76722504-fe4b-47dc-8749-7a0e0dbe9be5'; +update re_us_post_regions set is_po_box = TRUE where id = '7aac73d5-642d-4897-aca0-69adbd600cf5'; +update re_us_post_regions set is_po_box = TRUE where id = '52acdc4a-7420-4989-9bfe-0bb7b6fcbf40'; +update re_us_post_regions set is_po_box = TRUE where id = '52acdc4a-7420-4989-9bfe-0bb7b6fcbf40'; +update re_us_post_regions set is_po_box = TRUE where id = '0fdb8b6c-9a6c-45df-9c92-d55ccd0e6ffb'; +update re_us_post_regions set is_po_box = TRUE where id = 'dbbbb948-3511-42d6-ba87-6b170e964177'; +update re_us_post_regions set is_po_box = TRUE where id = '73f9b7d0-bdce-4308-98b9-c5878db0046f'; +update re_us_post_regions set is_po_box = TRUE where id = '157b7fff-adb3-47fd-9566-076526d62835'; +update re_us_post_regions set is_po_box = TRUE where id = 'a48853de-215d-4a41-9ba5-96d71b1c05f0'; +update re_us_post_regions set is_po_box = TRUE where id = 'abc0e46d-ab65-4624-8ba0-9b05661d90fd'; +update re_us_post_regions set is_po_box = TRUE where id = '6eac7e7d-cb06-458d-bbb0-4997d89f1d69'; +update re_us_post_regions set is_po_box = TRUE where id = '33f0f0a0-808c-4e31-8f01-01e1dc8b82c0'; +update re_us_post_regions set is_po_box = TRUE where id = 'c7ce2fc7-071e-4847-8bba-56bd27e142db'; +update re_us_post_regions set is_po_box = TRUE where id = 'ff6db9d4-1ee0-4cdb-8732-d1a43a099660'; +update re_us_post_regions set is_po_box = TRUE where id = '637ec063-6f23-4a3d-934b-790322317b44'; +update re_us_post_regions set is_po_box = TRUE where id = '725c6e28-43af-471e-b225-233fe0dba18b'; +update re_us_post_regions set is_po_box = TRUE where id = '725c6e28-43af-471e-b225-233fe0dba18b'; +update re_us_post_regions set is_po_box = TRUE where id = '725c6e28-43af-471e-b225-233fe0dba18b'; +update re_us_post_regions set is_po_box = TRUE where id = '1daed352-69fa-470a-bbed-4162e46e1d3a'; +update re_us_post_regions set is_po_box = TRUE where id = 'be9ef215-a128-48ec-85ef-9c4bfd92f4bd'; +update re_us_post_regions set is_po_box = TRUE where id = '8691d28f-e334-41f3-bb92-91292f569a54'; +update re_us_post_regions set is_po_box = TRUE where id = 'dfed3430-6195-459c-809a-e9b3814a4aa7'; +update re_us_post_regions set is_po_box = TRUE where id = 'dfed3430-6195-459c-809a-e9b3814a4aa7'; +update re_us_post_regions set is_po_box = TRUE where id = '2cd1c161-b2ab-4d32-ac12-36ed595a62b2'; +update re_us_post_regions set is_po_box = TRUE where id = '91be1931-9bfe-4a66-a89e-003cfc407a29'; +update re_us_post_regions set is_po_box = TRUE where id = '6e7b522f-ac2e-4d19-bf0e-3a8bc9fefcf8'; +update re_us_post_regions set is_po_box = TRUE where id = '8d3776d5-fa48-4ad1-82c5-5eb3b830dfcf'; +update re_us_post_regions set is_po_box = TRUE where id = '8d3776d5-fa48-4ad1-82c5-5eb3b830dfcf'; +update re_us_post_regions set is_po_box = TRUE where id = 'f52652cb-502d-4a5f-ab71-271a10980c1e'; +update re_us_post_regions set is_po_box = TRUE where id = 'f52652cb-502d-4a5f-ab71-271a10980c1e'; +update re_us_post_regions set is_po_box = TRUE where id = 'c6679297-8753-42c8-a204-592bce0e844d'; +update re_us_post_regions set is_po_box = TRUE where id = 'e3f8fa77-3fb3-4704-a120-6ba3d5b1ef2b'; +update re_us_post_regions set is_po_box = TRUE where id = 'c31c4387-18cb-4d6e-a6a0-910ce306082f'; +update re_us_post_regions set is_po_box = TRUE where id = 'da62e8d9-6e0e-4bb5-8097-2b5b7530e18b'; +update re_us_post_regions set is_po_box = TRUE where id = '7f1fc515-684c-4cbf-8875-62b7182af176'; +update re_us_post_regions set is_po_box = TRUE where id = '25fd0426-c58a-4cd4-a909-0e87348808d9'; +update re_us_post_regions set is_po_box = TRUE where id = 'daab6ad1-193a-42f8-b6fa-285cf97a44dc'; +update re_us_post_regions set is_po_box = TRUE where id = 'ee8c7e6d-2c1b-4425-a78a-5d7465c92fd5'; +update re_us_post_regions set is_po_box = TRUE where id = 'c912c615-54c9-462c-bff1-1dcc731b9a12'; +update re_us_post_regions set is_po_box = TRUE where id = '91681e33-6fb3-4efa-843d-213a7d18c0c9'; +update re_us_post_regions set is_po_box = TRUE where id = '1f7814d0-cc98-4a68-9af3-d0d405b8daa0'; +update re_us_post_regions set is_po_box = TRUE where id = '1f7814d0-cc98-4a68-9af3-d0d405b8daa0'; +update re_us_post_regions set is_po_box = TRUE where id = '3817fe3c-4f64-4b76-8565-fb037cc8d8b3'; +update re_us_post_regions set is_po_box = TRUE where id = '0f65ce33-3461-49f2-9649-797f29e807e6'; +update re_us_post_regions set is_po_box = TRUE where id = '0f65ce33-3461-49f2-9649-797f29e807e6'; +update re_us_post_regions set is_po_box = TRUE where id = '10a6e910-1b61-4455-825d-42f2e3adbd63'; +update re_us_post_regions set is_po_box = TRUE where id = '358268f6-b57a-4290-a266-819e7e8de13c'; +update re_us_post_regions set is_po_box = TRUE where id = '0209aeb0-6542-49ff-811d-7f82decd5b2a'; +update re_us_post_regions set is_po_box = TRUE where id = '11c4c5af-f745-4f8d-9e94-4ade85849bc1'; +update re_us_post_regions set is_po_box = TRUE where id = 'b929f964-6dab-4004-88c1-f7a312611851'; +update re_us_post_regions set is_po_box = TRUE where id = 'd6bf63f4-c387-42ed-b951-4ef0e99b329e'; +update re_us_post_regions set is_po_box = TRUE where id = 'cb1eef45-b948-4036-8f6d-ba6da76b7b4c'; +update re_us_post_regions set is_po_box = TRUE where id = '60c99769-6956-4d8d-91be-3444110fd963'; +update re_us_post_regions set is_po_box = TRUE where id = '19ab1142-bd8c-488c-b1e8-bc59b1afb014'; +update re_us_post_regions set is_po_box = TRUE where id = 'f83b6f9f-950d-44ae-bff6-38d51be45d25'; +update re_us_post_regions set is_po_box = TRUE where id = '5b2ef8ec-d153-41d4-9a61-3226f9184fe8'; +update re_us_post_regions set is_po_box = TRUE where id = '880c665b-ae00-40ce-9668-61e080d41563'; +update re_us_post_regions set is_po_box = TRUE where id = '880c665b-ae00-40ce-9668-61e080d41563'; +update re_us_post_regions set is_po_box = TRUE where id = '880c665b-ae00-40ce-9668-61e080d41563'; +update re_us_post_regions set is_po_box = TRUE where id = '880c665b-ae00-40ce-9668-61e080d41563'; +update re_us_post_regions set is_po_box = TRUE where id = '880c665b-ae00-40ce-9668-61e080d41563'; +update re_us_post_regions set is_po_box = TRUE where id = '5320a535-2e1f-4fc0-90f7-3ba7be0e2fce'; +update re_us_post_regions set is_po_box = TRUE where id = 'c1cd65c5-8c85-49c1-979f-313a4492bc0a'; +update re_us_post_regions set is_po_box = TRUE where id = 'e38956a0-e1f6-4416-af42-2fed22922d59'; +update re_us_post_regions set is_po_box = TRUE where id = '0f8dae49-541b-446a-8ca2-a1640ee6004f'; +update re_us_post_regions set is_po_box = TRUE where id = 'b0c1e325-112a-4080-94fd-78ac4fdf10e0'; +update re_us_post_regions set is_po_box = TRUE where id = '502e60a0-3d93-40ed-8f0f-a713e11fb986'; +update re_us_post_regions set is_po_box = TRUE where id = 'e50b4517-cea0-4358-8464-357127125028'; +update re_us_post_regions set is_po_box = TRUE where id = 'e50b4517-cea0-4358-8464-357127125028'; +update re_us_post_regions set is_po_box = TRUE where id = '62fb213a-679e-46a0-ab4c-11d1b664c147'; +update re_us_post_regions set is_po_box = TRUE where id = '158ea1cb-9d76-4935-ae4d-034b8841ce61'; +update re_us_post_regions set is_po_box = TRUE where id = '158ea1cb-9d76-4935-ae4d-034b8841ce61'; +update re_us_post_regions set is_po_box = TRUE where id = 'f8af175e-6bb8-4bdc-bbae-e918bbee4a79'; +update re_us_post_regions set is_po_box = TRUE where id = '29e488a9-1ee5-44b3-9f7c-bccc0a88ad21'; +update re_us_post_regions set is_po_box = TRUE where id = '7e1cd6e6-0183-40d4-b8b1-95484944c75a'; +update re_us_post_regions set is_po_box = TRUE where id = '2cb7041d-7c7c-46aa-849f-14f1768d92ff'; +update re_us_post_regions set is_po_box = TRUE where id = '86d7dd57-dd73-48a1-aedd-0482003d2211'; +update re_us_post_regions set is_po_box = TRUE where id = '1652b680-3c27-4f59-a9b3-e3e32dc11c86'; +update re_us_post_regions set is_po_box = TRUE where id = '007edb79-3341-48a1-a708-915204be26bc'; +update re_us_post_regions set is_po_box = TRUE where id = '4c9a52b0-5544-4d01-bb29-f9a95dd1dbeb'; +update re_us_post_regions set is_po_box = TRUE where id = '95d726fd-1952-43c7-a5e8-cc6b92ce2b03'; +update re_us_post_regions set is_po_box = TRUE where id = '845f3218-ffb1-49cc-86e0-c127e99b2a01'; +update re_us_post_regions set is_po_box = TRUE where id = '94c47fec-734d-4c1e-8956-1e3cf8d56c3a'; +update re_us_post_regions set is_po_box = TRUE where id = '94c47fec-734d-4c1e-8956-1e3cf8d56c3a'; +update re_us_post_regions set is_po_box = TRUE where id = '94c47fec-734d-4c1e-8956-1e3cf8d56c3a'; +update re_us_post_regions set is_po_box = TRUE where id = '650896d8-248c-49b4-8fee-9b38615baeeb'; +update re_us_post_regions set is_po_box = TRUE where id = '832903bb-c8aa-4a77-8d23-eeded942c80d'; +update re_us_post_regions set is_po_box = TRUE where id = 'c975f7f9-4d77-4eb2-aad0-3e119aa700ee'; +update re_us_post_regions set is_po_box = TRUE where id = 'cd6070b9-1e96-4f5b-b49b-919f8d958d81'; +update re_us_post_regions set is_po_box = TRUE where id = '4e5b40f1-40fb-4026-b0a1-b1919bf5bd10'; +update re_us_post_regions set is_po_box = TRUE where id = '4e5b40f1-40fb-4026-b0a1-b1919bf5bd10'; +update re_us_post_regions set is_po_box = TRUE where id = '7b7d9709-6923-46e5-835f-c8b37ea791ee'; +update re_us_post_regions set is_po_box = TRUE where id = '7b7d9709-6923-46e5-835f-c8b37ea791ee'; +update re_us_post_regions set is_po_box = TRUE where id = '898af229-09ec-492e-9358-094cce29de96'; +update re_us_post_regions set is_po_box = TRUE where id = '45f8df74-baf6-498b-8aa5-ebc46628479b'; +update re_us_post_regions set is_po_box = TRUE where id = '38b75ab3-ad73-4ea2-bb23-6f1a82719acd'; +update re_us_post_regions set is_po_box = TRUE where id = '38b75ab3-ad73-4ea2-bb23-6f1a82719acd'; +update re_us_post_regions set is_po_box = TRUE where id = '38b75ab3-ad73-4ea2-bb23-6f1a82719acd'; +update re_us_post_regions set is_po_box = TRUE where id = '4f64e4ff-7a76-4da8-aae9-d57e4772a162'; +update re_us_post_regions set is_po_box = TRUE where id = '54dd11d2-2fb2-4b4c-a44b-e45dc040579d'; +update re_us_post_regions set is_po_box = TRUE where id = '54dd11d2-2fb2-4b4c-a44b-e45dc040579d'; +update re_us_post_regions set is_po_box = TRUE where id = '246ce2ae-15d2-4bc3-9c2a-11810c455b62'; +update re_us_post_regions set is_po_box = TRUE where id = 'a9284be9-5565-4621-93bb-21fc76c634e8'; +update re_us_post_regions set is_po_box = TRUE where id = 'fa614473-03c4-4197-86a0-70db6f94226c'; +update re_us_post_regions set is_po_box = TRUE where id = 'afa3ab7b-03e8-4367-94da-564b0d2e6277'; +update re_us_post_regions set is_po_box = TRUE where id = 'da1e881d-7b04-4aa2-b794-ce7509e430ac'; +update re_us_post_regions set is_po_box = TRUE where id = 'f8a25599-9569-4b02-a510-b018c1bfd83c'; +update re_us_post_regions set is_po_box = TRUE where id = 'c7473d84-c4ac-45af-8648-9cd1717f533a'; +update re_us_post_regions set is_po_box = TRUE where id = 'ab636f64-e87b-47ae-bfdd-94c379589e05'; +update re_us_post_regions set is_po_box = TRUE where id = '3a2bce76-236f-41e3-92d7-8acd88cc775f'; +update re_us_post_regions set is_po_box = TRUE where id = 'ef451ed8-f6f1-4bfb-8d9f-98e309f9f13b'; +update re_us_post_regions set is_po_box = TRUE where id = 'ef451ed8-f6f1-4bfb-8d9f-98e309f9f13b'; +update re_us_post_regions set is_po_box = TRUE where id = '7db33e33-3014-4554-89e8-b05bda2bdc93'; +update re_us_post_regions set is_po_box = TRUE where id = '2efe9324-c7e4-4d0f-87eb-73b8840596de'; +update re_us_post_regions set is_po_box = TRUE where id = '9f588e82-b542-4ee7-8d42-a7aed22c5102'; +update re_us_post_regions set is_po_box = TRUE where id = '9f588e82-b542-4ee7-8d42-a7aed22c5102'; +update re_us_post_regions set is_po_box = TRUE where id = '199c780a-9352-4eeb-81f4-d6cfac0ba981'; +update re_us_post_regions set is_po_box = TRUE where id = '523b911d-842e-41ef-8de7-503c821feb94'; +update re_us_post_regions set is_po_box = TRUE where id = 'e30631b7-c357-4010-9c03-9120f1c58aad'; +update re_us_post_regions set is_po_box = TRUE where id = '38fee823-601c-4b79-9679-0c82cfdd4d8b'; +update re_us_post_regions set is_po_box = TRUE where id = '3263ced9-2e98-4c84-9927-010932dd3a94'; +update re_us_post_regions set is_po_box = TRUE where id = 'c6f7d2f0-ea33-4a37-94c7-ba31f523683e'; +update re_us_post_regions set is_po_box = TRUE where id = 'bcf78917-d9b5-48fd-8188-aa42e3587a6a'; +update re_us_post_regions set is_po_box = TRUE where id = '4ea0a953-5023-4e12-a963-d17597cbab2d'; +update re_us_post_regions set is_po_box = TRUE where id = '91f45f33-15d2-4389-aef3-70fc2e53555e'; +update re_us_post_regions set is_po_box = TRUE where id = '1e37fc87-68a9-49ee-9337-fcbbcde2f880'; +update re_us_post_regions set is_po_box = TRUE where id = 'e1c2b0e0-8c29-43d7-82da-e86d9f7abe95'; +update re_us_post_regions set is_po_box = TRUE where id = 'e1c2b0e0-8c29-43d7-82da-e86d9f7abe95'; +update re_us_post_regions set is_po_box = TRUE where id = 'e1c2b0e0-8c29-43d7-82da-e86d9f7abe95'; +update re_us_post_regions set is_po_box = TRUE where id = 'e1c2b0e0-8c29-43d7-82da-e86d9f7abe95'; +update re_us_post_regions set is_po_box = TRUE where id = 'e1c2b0e0-8c29-43d7-82da-e86d9f7abe95'; +update re_us_post_regions set is_po_box = TRUE where id = '1bc32f15-32c8-4f03-8995-c5112a774d60'; +update re_us_post_regions set is_po_box = TRUE where id = '1bc32f15-32c8-4f03-8995-c5112a774d60'; +update re_us_post_regions set is_po_box = TRUE where id = '1bc32f15-32c8-4f03-8995-c5112a774d60'; +update re_us_post_regions set is_po_box = TRUE where id = 'fab0ee41-ad6f-402c-8ce1-30c7fe108911'; +update re_us_post_regions set is_po_box = TRUE where id = '6e67ce35-63f8-4ae8-814a-dc416ff42262'; +update re_us_post_regions set is_po_box = TRUE where id = '508ec475-a4c5-48a6-b8b2-7e21a9027eb1'; +update re_us_post_regions set is_po_box = TRUE where id = 'bcf22aed-c397-478b-be3d-cc501ddab2a0'; +update re_us_post_regions set is_po_box = TRUE where id = '707fb6b1-de3c-4d16-9a40-200a5c7fa709'; +update re_us_post_regions set is_po_box = TRUE where id = 'f2e2b10a-976e-454f-b02b-a5e1e118e562'; +update re_us_post_regions set is_po_box = TRUE where id = 'f7254439-76a9-4664-8c0b-0bf0bb3a8dd7'; +update re_us_post_regions set is_po_box = TRUE where id = 'f7254439-76a9-4664-8c0b-0bf0bb3a8dd7'; +update re_us_post_regions set is_po_box = TRUE where id = 'f7254439-76a9-4664-8c0b-0bf0bb3a8dd7'; +update re_us_post_regions set is_po_box = TRUE where id = '647d40af-27e3-4748-ae6e-b74c70fd96f9'; +update re_us_post_regions set is_po_box = TRUE where id = '2ce7172c-f366-4672-b876-453e6c50f56f'; +update re_us_post_regions set is_po_box = TRUE where id = '41f3691b-4893-43c8-8f73-f0292d5db832'; +update re_us_post_regions set is_po_box = TRUE where id = '4931fd1b-5092-41f6-a752-e1a9f7771bdd'; +update re_us_post_regions set is_po_box = TRUE where id = '76e92ee0-de92-4c53-9cf2-7730c60f8162'; +update re_us_post_regions set is_po_box = TRUE where id = '1e28aa53-9052-4aa3-8d0d-d4a77d554238'; +update re_us_post_regions set is_po_box = TRUE where id = '1e28aa53-9052-4aa3-8d0d-d4a77d554238'; +update re_us_post_regions set is_po_box = TRUE where id = 'd67de9c5-fa83-46d9-942d-2312b822f71a'; +update re_us_post_regions set is_po_box = TRUE where id = '169b9ccd-363b-4830-91a7-35d8086f96ef'; +update re_us_post_regions set is_po_box = TRUE where id = 'c4eca402-7c19-43bd-b535-32abf3af7f57'; +update re_us_post_regions set is_po_box = TRUE where id = 'c4eca402-7c19-43bd-b535-32abf3af7f57'; +update re_us_post_regions set is_po_box = TRUE where id = 'c4eca402-7c19-43bd-b535-32abf3af7f57'; +update re_us_post_regions set is_po_box = TRUE where id = '81f3a613-27bc-4ba8-ace9-6811701eb6ef'; +update re_us_post_regions set is_po_box = TRUE where id = '81f3a613-27bc-4ba8-ace9-6811701eb6ef'; +update re_us_post_regions set is_po_box = TRUE where id = '3f8d959c-bd82-4d9f-956a-24148341d367'; +update re_us_post_regions set is_po_box = TRUE where id = '479146ef-2cb8-4bcf-91a6-c680345dcd5f'; +update re_us_post_regions set is_po_box = TRUE where id = '5b1d8a12-c0dd-4094-a6e6-8a7ec64c6c00'; +update re_us_post_regions set is_po_box = TRUE where id = '5b1d8a12-c0dd-4094-a6e6-8a7ec64c6c00'; +update re_us_post_regions set is_po_box = TRUE where id = 'bfd1e97d-9ef8-4c02-8b81-95ee47b19e86'; +update re_us_post_regions set is_po_box = TRUE where id = 'be160a3f-a568-4bb0-8622-0134432a57e5'; +update re_us_post_regions set is_po_box = TRUE where id = '45c7e189-18da-402a-8792-adcb65f1e921'; +update re_us_post_regions set is_po_box = TRUE where id = '9a206716-6905-4552-b9f2-bd5867fdd1a2'; +update re_us_post_regions set is_po_box = TRUE where id = '9a206716-6905-4552-b9f2-bd5867fdd1a2'; +update re_us_post_regions set is_po_box = TRUE where id = '9a206716-6905-4552-b9f2-bd5867fdd1a2'; +update re_us_post_regions set is_po_box = TRUE where id = '9c8fba2f-b2b8-4347-b927-acb4dab3133e'; +update re_us_post_regions set is_po_box = TRUE where id = '429dbc3e-4a6a-4422-8996-55d67e8fc0ed'; +update re_us_post_regions set is_po_box = TRUE where id = '9ed3061a-fb19-4925-8132-8c93d2566a72'; +update re_us_post_regions set is_po_box = TRUE where id = 'c093c507-4202-4743-b018-11d1a79d762a'; +update re_us_post_regions set is_po_box = TRUE where id = '8d86bfe3-26d7-4408-a7c7-5970d49fefe5'; +update re_us_post_regions set is_po_box = TRUE where id = '89d26aa1-7796-48c3-9a59-6065457d8304'; +update re_us_post_regions set is_po_box = TRUE where id = '6c40efcd-55df-4bb8-bc2a-e4f9cdb09272'; +update re_us_post_regions set is_po_box = TRUE where id = '6c40efcd-55df-4bb8-bc2a-e4f9cdb09272'; +update re_us_post_regions set is_po_box = TRUE where id = 'af418a02-d2da-49bb-8779-93675181b5b5'; +update re_us_post_regions set is_po_box = TRUE where id = 'af418a02-d2da-49bb-8779-93675181b5b5'; +update re_us_post_regions set is_po_box = TRUE where id = 'af418a02-d2da-49bb-8779-93675181b5b5'; +update re_us_post_regions set is_po_box = TRUE where id = 'ab8399f2-3391-4136-9fb6-ad03e175d172'; +update re_us_post_regions set is_po_box = TRUE where id = 'ee084ba8-0f64-48a2-8ec5-1a4344c5a428'; +update re_us_post_regions set is_po_box = TRUE where id = 'ee084ba8-0f64-48a2-8ec5-1a4344c5a428'; +update re_us_post_regions set is_po_box = TRUE where id = 'e94c6144-9b31-4ff8-9eab-0bcb61bd6dac'; +update re_us_post_regions set is_po_box = TRUE where id = 'e94c6144-9b31-4ff8-9eab-0bcb61bd6dac'; +update re_us_post_regions set is_po_box = TRUE where id = '5c229e19-44b1-482c-97ff-4adaab4083ee'; +update re_us_post_regions set is_po_box = TRUE where id = 'f634c70b-a436-42ae-8810-58e3fd7184e5'; +update re_us_post_regions set is_po_box = TRUE where id = '40862a7b-2029-424b-af6b-4dbb82ee2df4'; +update re_us_post_regions set is_po_box = TRUE where id = '9b71f577-4515-4b84-ab0d-a7c31b3103be'; +update re_us_post_regions set is_po_box = TRUE where id = '0e3dfe70-0600-4eaf-975d-61ee81cd3a76'; +update re_us_post_regions set is_po_box = TRUE where id = 'ab129607-7f17-4a6a-a5cb-1aab2f309bf1'; +update re_us_post_regions set is_po_box = TRUE where id = '5560517f-0ecc-4352-972b-a4d21a26ddf3'; +update re_us_post_regions set is_po_box = TRUE where id = 'e0439634-85db-441b-a882-4136a3932548'; +update re_us_post_regions set is_po_box = TRUE where id = '572d202e-64a3-4943-b11a-6856fad172ea'; +update re_us_post_regions set is_po_box = TRUE where id = '7dad7a79-bbb0-4310-82ea-2c03026b13f4'; +update re_us_post_regions set is_po_box = TRUE where id = 'b03f61b8-2ad8-4bf4-907d-80ba37171ca1'; +update re_us_post_regions set is_po_box = TRUE where id = 'b03f61b8-2ad8-4bf4-907d-80ba37171ca1'; +update re_us_post_regions set is_po_box = TRUE where id = '000153db-61fb-4b87-a863-b4e6c0550c84'; +update re_us_post_regions set is_po_box = TRUE where id = '000153db-61fb-4b87-a863-b4e6c0550c84'; +update re_us_post_regions set is_po_box = TRUE where id = 'd45f5dde-f8fe-4f0d-addf-5e0e4ec1c784'; +update re_us_post_regions set is_po_box = TRUE where id = '543f94b8-d1cf-449b-8fa4-8b32daaf821a'; +update re_us_post_regions set is_po_box = TRUE where id = 'f3ff3809-4051-4c17-a6ea-80d45a0944ac'; +update re_us_post_regions set is_po_box = TRUE where id = '5832a0fd-51db-43e0-843c-4bc6d4b055ec'; +update re_us_post_regions set is_po_box = TRUE where id = 'e0ed05a3-bf6b-4e32-a4b2-30a7d6eca50a'; +update re_us_post_regions set is_po_box = TRUE where id = '4b9749a7-9794-4b39-91c3-ef8e6f258cc9'; +update re_us_post_regions set is_po_box = TRUE where id = 'b48044b0-04c2-4543-baa4-0800d839b581'; +update re_us_post_regions set is_po_box = TRUE where id = '931d9396-e4c0-4afb-a468-9729ff89f2f0'; +update re_us_post_regions set is_po_box = TRUE where id = '4cb15991-8c58-415c-888f-d61002004e2e'; +update re_us_post_regions set is_po_box = TRUE where id = '62421514-7bfb-4c7a-abac-7da29498b70e'; +update re_us_post_regions set is_po_box = TRUE where id = '28bdfbc5-4b29-459b-9adb-caba317ad524'; +update re_us_post_regions set is_po_box = TRUE where id = '498c78b6-125b-4642-a8e6-31e22874f632'; +update re_us_post_regions set is_po_box = TRUE where id = '3b1d6a46-87ce-4475-bf0b-d427b663763b'; +update re_us_post_regions set is_po_box = TRUE where id = '56cb44f2-5f33-4839-940f-92d9b8c6ecb0'; +update re_us_post_regions set is_po_box = TRUE where id = 'db80ea4b-875b-4cf9-b4d1-c55f31ed0251'; +update re_us_post_regions set is_po_box = TRUE where id = '1704f9ab-fb1c-434c-a462-ccaf8977f109'; +update re_us_post_regions set is_po_box = TRUE where id = '385f7a20-791a-4ab7-b37c-0147ca1d14d9'; +update re_us_post_regions set is_po_box = TRUE where id = 'f3d50cef-a2ca-47cb-8051-310291fc9be2'; +update re_us_post_regions set is_po_box = TRUE where id = '3268813a-322b-4f34-b86f-7120728b9e93'; +update re_us_post_regions set is_po_box = TRUE where id = '4dac741d-24f9-45b2-a90a-c71d65c56f25'; +update re_us_post_regions set is_po_box = TRUE where id = 'ddefa1b1-edc5-46aa-8303-062716e1e281'; +update re_us_post_regions set is_po_box = TRUE where id = 'ddefa1b1-edc5-46aa-8303-062716e1e281'; +update re_us_post_regions set is_po_box = TRUE where id = 'ac46e737-536a-454a-aaa4-f7f12fdc811f'; +update re_us_post_regions set is_po_box = TRUE where id = 'c16c2ee1-b517-46ed-a91f-4c7e70c464fd'; +update re_us_post_regions set is_po_box = TRUE where id = 'f1538a6c-47c0-4e9e-b0f4-9bd97836e58e'; +update re_us_post_regions set is_po_box = TRUE where id = 'f1538a6c-47c0-4e9e-b0f4-9bd97836e58e'; +update re_us_post_regions set is_po_box = TRUE where id = '1e6a82c9-3c55-42bf-ae6a-7afe5be4d8f5'; +update re_us_post_regions set is_po_box = TRUE where id = '1e6a82c9-3c55-42bf-ae6a-7afe5be4d8f5'; +update re_us_post_regions set is_po_box = TRUE where id = '9b46fe72-b770-42c1-869e-dc40c4ce0b84'; +update re_us_post_regions set is_po_box = TRUE where id = 'c68e0ca3-273f-49e9-a613-38f95887fc18'; +update re_us_post_regions set is_po_box = TRUE where id = 'c68e0ca3-273f-49e9-a613-38f95887fc18'; +update re_us_post_regions set is_po_box = TRUE where id = 'f29ecc00-0186-4c3b-b3e7-11266b7cfa67'; +update re_us_post_regions set is_po_box = TRUE where id = 'ede87698-fd01-4b5e-ad6e-f0b2f405ccff'; +update re_us_post_regions set is_po_box = TRUE where id = '0c0d2f32-a133-479b-a7ac-01445452eaae'; +update re_us_post_regions set is_po_box = TRUE where id = 'c8ef39a1-78a9-4fce-97b8-66343bb3cf56'; +update re_us_post_regions set is_po_box = TRUE where id = '4b41dd95-5652-493a-a169-25e4691c9b0d'; +update re_us_post_regions set is_po_box = TRUE where id = '4b41dd95-5652-493a-a169-25e4691c9b0d'; +update re_us_post_regions set is_po_box = TRUE where id = '23b08668-9c55-40fc-901e-c058445bebae'; +update re_us_post_regions set is_po_box = TRUE where id = '23b08668-9c55-40fc-901e-c058445bebae'; +update re_us_post_regions set is_po_box = TRUE where id = '49cd102e-cde6-429d-ba65-b7ffb52c8de4'; +update re_us_post_regions set is_po_box = TRUE where id = 'e5a426e1-912a-410b-a4ea-4ed45f78c8cc'; +update re_us_post_regions set is_po_box = TRUE where id = '6a17ef52-08f3-4ac8-99e1-b47622b6ea1c'; +update re_us_post_regions set is_po_box = TRUE where id = '9d3c2a9d-d1ca-40ee-aca9-5653eadf6aee'; +update re_us_post_regions set is_po_box = TRUE where id = 'b99faa5e-783c-41ef-835a-4234b2bdcb56'; +update re_us_post_regions set is_po_box = TRUE where id = 'b99faa5e-783c-41ef-835a-4234b2bdcb56'; +update re_us_post_regions set is_po_box = TRUE where id = '0055ba0f-3116-4bbc-8b98-a7e94206d692'; +update re_us_post_regions set is_po_box = TRUE where id = 'ccf6c974-f108-4799-98af-477fed5d2716'; +update re_us_post_regions set is_po_box = TRUE where id = '02707508-6cbe-4479-8b7f-60ad8e6d9faa'; +update re_us_post_regions set is_po_box = TRUE where id = 'ead5a7cb-0bbc-4eb3-ad1a-005590cfdff8'; +update re_us_post_regions set is_po_box = TRUE where id = 'ead5a7cb-0bbc-4eb3-ad1a-005590cfdff8'; +update re_us_post_regions set is_po_box = TRUE where id = 'd3888347-b6f6-422b-902d-cee9b962304f'; +update re_us_post_regions set is_po_box = TRUE where id = 'fc243e06-373f-485b-82de-37c0076d6cb5'; +update re_us_post_regions set is_po_box = TRUE where id = 'fc243e06-373f-485b-82de-37c0076d6cb5'; +update re_us_post_regions set is_po_box = TRUE where id = 'd3199cc0-59a8-4aa9-b467-204d15a503f1'; +update re_us_post_regions set is_po_box = TRUE where id = '7e36d412-e96c-4068-9473-906f3f6f990c'; +update re_us_post_regions set is_po_box = TRUE where id = '1f997ebd-ccb9-47ce-8f75-79da7ccd3541'; +update re_us_post_regions set is_po_box = TRUE where id = '1f997ebd-ccb9-47ce-8f75-79da7ccd3541'; +update re_us_post_regions set is_po_box = TRUE where id = '1f997ebd-ccb9-47ce-8f75-79da7ccd3541'; +update re_us_post_regions set is_po_box = TRUE where id = '3c292b4c-cce4-4424-99b7-c0f332cec6c8'; +update re_us_post_regions set is_po_box = TRUE where id = '3c292b4c-cce4-4424-99b7-c0f332cec6c8'; +update re_us_post_regions set is_po_box = TRUE where id = '739e2225-6d26-4b0c-bed8-dfff631de36f'; +update re_us_post_regions set is_po_box = TRUE where id = '36ec5509-4e8f-40f7-8b58-a138ab681797'; +update re_us_post_regions set is_po_box = TRUE where id = '36ec5509-4e8f-40f7-8b58-a138ab681797'; +update re_us_post_regions set is_po_box = TRUE where id = '1dec2122-681c-4bf4-8364-b1ebf68546cd'; +update re_us_post_regions set is_po_box = TRUE where id = 'ba168b11-b4b1-4776-8a25-dc77aa1adb3d'; +update re_us_post_regions set is_po_box = TRUE where id = 'f81b0fad-b6d7-4bd9-83b0-282c534b45b7'; +update re_us_post_regions set is_po_box = TRUE where id = 'b0821d48-2eb2-4369-9f21-67e9c3090d1c'; +update re_us_post_regions set is_po_box = TRUE where id = '8bf20b22-0b48-412f-bdd3-0da47f08f2bf'; +update re_us_post_regions set is_po_box = TRUE where id = 'b4535649-4d5f-4f7a-9fae-3fd9bc5f5a5e'; +update re_us_post_regions set is_po_box = TRUE where id = 'eaf566f1-520c-41be-bbc0-69865be62567'; +update re_us_post_regions set is_po_box = TRUE where id = '49abfb30-4950-4460-a058-fa138a0eaf9a'; +update re_us_post_regions set is_po_box = TRUE where id = 'a23c3ce8-a247-4b0d-821d-f1ed562735f1'; +update re_us_post_regions set is_po_box = TRUE where id = 'a23c3ce8-a247-4b0d-821d-f1ed562735f1'; +update re_us_post_regions set is_po_box = TRUE where id = 'a23c3ce8-a247-4b0d-821d-f1ed562735f1'; +update re_us_post_regions set is_po_box = TRUE where id = 'a23c3ce8-a247-4b0d-821d-f1ed562735f1'; +update re_us_post_regions set is_po_box = TRUE where id = 'fd2a289f-a1cd-46ed-903f-6005ee2a6253'; +update re_us_post_regions set is_po_box = TRUE where id = 'fd2a289f-a1cd-46ed-903f-6005ee2a6253'; +update re_us_post_regions set is_po_box = TRUE where id = '99dd23e9-eee1-42d7-b754-c8bf27a58263'; +update re_us_post_regions set is_po_box = TRUE where id = '9b197ee3-6746-4f47-9109-58257b318777'; +update re_us_post_regions set is_po_box = TRUE where id = '7e5e0503-588f-41b3-be28-013d706da518'; +update re_us_post_regions set is_po_box = TRUE where id = '19726c76-e313-47e3-8259-d58163857e95'; +update re_us_post_regions set is_po_box = TRUE where id = '19726c76-e313-47e3-8259-d58163857e95'; +update re_us_post_regions set is_po_box = TRUE where id = '573b244c-1fd7-431e-ae34-eba72b89f9ae'; +update re_us_post_regions set is_po_box = TRUE where id = 'ab334469-02ca-402c-80c4-1ffe5b9d5ecf'; +update re_us_post_regions set is_po_box = TRUE where id = '7ca1920b-6ce9-4507-935d-b7915a36ed73'; +update re_us_post_regions set is_po_box = TRUE where id = '50c0434a-a744-4689-854c-2f20efabfdbc'; +update re_us_post_regions set is_po_box = TRUE where id = '0c477b60-1486-4c19-a0d5-bb83a3ed0a2c'; +update re_us_post_regions set is_po_box = TRUE where id = '0c477b60-1486-4c19-a0d5-bb83a3ed0a2c'; +update re_us_post_regions set is_po_box = TRUE where id = 'f0d9d348-a0cb-4933-8b75-e0622706ab4a'; +update re_us_post_regions set is_po_box = TRUE where id = 'cabc33fb-c0de-496a-b659-a7f928c15223'; +update re_us_post_regions set is_po_box = TRUE where id = '03b8d77b-d153-49f8-906f-cd14ba1455df'; +update re_us_post_regions set is_po_box = TRUE where id = '03b8d77b-d153-49f8-906f-cd14ba1455df'; +update re_us_post_regions set is_po_box = TRUE where id = '03b8d77b-d153-49f8-906f-cd14ba1455df'; +update re_us_post_regions set is_po_box = TRUE where id = 'd4220d3f-09c2-4882-9803-b6dbf0f09b53'; +update re_us_post_regions set is_po_box = TRUE where id = 'eb834595-1a75-431a-a3b3-71948be2560d'; +update re_us_post_regions set is_po_box = TRUE where id = 'e809932f-0ecd-44e7-a3b4-f14f9b8eda5d'; +update re_us_post_regions set is_po_box = TRUE where id = '304f0cb1-d545-4195-93ec-780958397fd4'; +update re_us_post_regions set is_po_box = TRUE where id = '8eeadf15-89e4-41dd-90aa-02820112539c'; +update re_us_post_regions set is_po_box = TRUE where id = 'abf71915-a4e1-4c22-a853-e67c3cc4d061'; +update re_us_post_regions set is_po_box = TRUE where id = 'eaafbb03-81ff-4db2-87b0-1a5ee50962b4'; +update re_us_post_regions set is_po_box = TRUE where id = '2e302de8-3e2a-4545-bd91-aaa443b9abfe'; +update re_us_post_regions set is_po_box = TRUE where id = 'd678131b-d4b2-4559-b7f5-942ba55a6a5d'; +update re_us_post_regions set is_po_box = TRUE where id = '9356c7d8-f53f-4112-a4af-513eae96ad42'; +update re_us_post_regions set is_po_box = TRUE where id = 'b74c4901-12da-4290-960e-7773bb09f096'; +update re_us_post_regions set is_po_box = TRUE where id = '0bd4f58b-3164-4db7-a320-88225e06fdc5'; +update re_us_post_regions set is_po_box = TRUE where id = '55729183-dace-4ece-93c2-2418e650dc8a'; +update re_us_post_regions set is_po_box = TRUE where id = '5315a8ec-a240-40e8-84fe-828d72dd75bd'; +update re_us_post_regions set is_po_box = TRUE where id = 'acc6fc61-15e7-4b62-a779-71a535bc5b7c'; +update re_us_post_regions set is_po_box = TRUE where id = '7ef9a070-d475-47d0-9a4e-5f10df6a0a73'; +update re_us_post_regions set is_po_box = TRUE where id = 'd37649b5-fd97-4f98-bb7e-d93dcbcfbbb5'; +update re_us_post_regions set is_po_box = TRUE where id = 'b115caf0-3825-40af-8f4f-5be0da8a1001'; +update re_us_post_regions set is_po_box = TRUE where id = 'b61d6b98-523c-4648-a765-760976cacfcd'; +update re_us_post_regions set is_po_box = TRUE where id = '13e07dd1-5cef-4eff-b1b2-273849692023'; +update re_us_post_regions set is_po_box = TRUE where id = '13e07dd1-5cef-4eff-b1b2-273849692023'; +update re_us_post_regions set is_po_box = TRUE where id = '13e07dd1-5cef-4eff-b1b2-273849692023'; +update re_us_post_regions set is_po_box = TRUE where id = '0998fb23-15c4-4947-9d32-176d948d4fad'; +update re_us_post_regions set is_po_box = TRUE where id = 'd26c439d-90b2-48b3-b4f1-446f443910eb'; +update re_us_post_regions set is_po_box = TRUE where id = 'd26c439d-90b2-48b3-b4f1-446f443910eb'; +update re_us_post_regions set is_po_box = TRUE where id = '96966e5b-d261-475e-9416-06e43ec0a596'; +update re_us_post_regions set is_po_box = TRUE where id = '40d6f711-24fe-484c-84f7-6d9d815fc489'; +update re_us_post_regions set is_po_box = TRUE where id = 'b698ae58-1687-4cf5-a4f1-7a84cfcf2302'; +update re_us_post_regions set is_po_box = TRUE where id = 'b698ae58-1687-4cf5-a4f1-7a84cfcf2302'; +update re_us_post_regions set is_po_box = TRUE where id = '75004838-109f-48c6-a304-2aaebb8144af'; +update re_us_post_regions set is_po_box = TRUE where id = '1b8a9536-b625-4964-b439-72200b1acc12'; +update re_us_post_regions set is_po_box = TRUE where id = '7985fd68-f26b-4d31-8fe9-70356289d26c'; +update re_us_post_regions set is_po_box = TRUE where id = '0c54290d-be81-4911-a2e1-3a7e9a34b52a'; +update re_us_post_regions set is_po_box = TRUE where id = '4b34e953-1122-491a-8c3c-721d0f313fda'; +update re_us_post_regions set is_po_box = TRUE where id = 'bb9158e7-466c-4fad-9fba-8376c49653e7'; +update re_us_post_regions set is_po_box = TRUE where id = '4c55750f-d538-47bc-ad1d-df67faaf7e85'; +update re_us_post_regions set is_po_box = TRUE where id = '74cbed66-9f27-4ac7-a03e-12c90ced0ed7'; +update re_us_post_regions set is_po_box = TRUE where id = 'ec87b0bb-7cf9-431d-87ae-7f74bca23efd'; +update re_us_post_regions set is_po_box = TRUE where id = 'fb09961d-ec60-40be-8fd3-21082c281f5d'; +update re_us_post_regions set is_po_box = TRUE where id = '0000e120-e8df-484b-818c-7b5312da0e4a'; +update re_us_post_regions set is_po_box = TRUE where id = '5d743ec7-98d6-4615-8481-8999600dd99d'; +update re_us_post_regions set is_po_box = TRUE where id = '0845f691-75ea-48b4-9111-1f76474874de'; +update re_us_post_regions set is_po_box = TRUE where id = 'cde8439b-6f28-47d0-9a0e-3286519ffa94'; +update re_us_post_regions set is_po_box = TRUE where id = 'cc528309-5549-4002-93e4-139e8eebb59b'; +update re_us_post_regions set is_po_box = TRUE where id = 'de5bf85d-0cc8-4323-8139-c6d04fe929bf'; +update re_us_post_regions set is_po_box = TRUE where id = 'de5bf85d-0cc8-4323-8139-c6d04fe929bf'; +update re_us_post_regions set is_po_box = TRUE where id = 'de5bf85d-0cc8-4323-8139-c6d04fe929bf'; +update re_us_post_regions set is_po_box = TRUE where id = 'de5bf85d-0cc8-4323-8139-c6d04fe929bf'; +update re_us_post_regions set is_po_box = TRUE where id = 'c22b7e70-0a52-4fa5-8a10-646dcb2e9994'; +update re_us_post_regions set is_po_box = TRUE where id = 'a649a505-e05c-4ecb-97be-659abb33e1db'; +update re_us_post_regions set is_po_box = TRUE where id = 'eb979e35-6da8-4085-b69b-b3a5ca020f82'; +update re_us_post_regions set is_po_box = TRUE where id = '5ada712d-3629-4879-a394-a908e48c7a24'; +update re_us_post_regions set is_po_box = TRUE where id = '37ea91b5-6396-4b2e-9efd-6f27358fb241'; +update re_us_post_regions set is_po_box = TRUE where id = '3ddc7c37-d4de-4428-95c1-f068a64d5e91'; +update re_us_post_regions set is_po_box = TRUE where id = '2b682a7e-b596-40d4-89b8-429efc79571e'; +update re_us_post_regions set is_po_box = TRUE where id = 'c9f6c00f-2dd9-4ea5-909e-d8f89b78008b'; +update re_us_post_regions set is_po_box = TRUE where id = '6b524dc3-870b-43a8-9a91-d0372cf7f6e0'; +update re_us_post_regions set is_po_box = TRUE where id = '6b524dc3-870b-43a8-9a91-d0372cf7f6e0'; +update re_us_post_regions set is_po_box = TRUE where id = '0866a38f-8928-466b-97de-dc605940ebc4'; +update re_us_post_regions set is_po_box = TRUE where id = '383e8e06-fda7-416e-8514-dbc481178afe'; +update re_us_post_regions set is_po_box = TRUE where id = 'a58f75bf-ef5c-4f9e-9797-7e6d081813ab'; +update re_us_post_regions set is_po_box = TRUE where id = 'ce3bbbab-b0e8-4fe4-ae40-b9f6f7efa385'; +update re_us_post_regions set is_po_box = TRUE where id = 'aeb1e40d-7bcc-4822-ab1c-b2205a7f1178'; +update re_us_post_regions set is_po_box = TRUE where id = 'a4884791-96d2-44bf-ba41-5b7b85044a8c'; +update re_us_post_regions set is_po_box = TRUE where id = 'a4884791-96d2-44bf-ba41-5b7b85044a8c'; +update re_us_post_regions set is_po_box = TRUE where id = 'c0e4386f-6341-4864-939e-3dc5d5fa1f3b'; +update re_us_post_regions set is_po_box = TRUE where id = 'c0e4386f-6341-4864-939e-3dc5d5fa1f3b'; +update re_us_post_regions set is_po_box = TRUE where id = '9bba1fc1-2db6-4565-aadf-2d1fb819263a'; +update re_us_post_regions set is_po_box = TRUE where id = '9bba1fc1-2db6-4565-aadf-2d1fb819263a'; +update re_us_post_regions set is_po_box = TRUE where id = '9bba1fc1-2db6-4565-aadf-2d1fb819263a'; +update re_us_post_regions set is_po_box = TRUE where id = '9bba1fc1-2db6-4565-aadf-2d1fb819263a'; +update re_us_post_regions set is_po_box = TRUE where id = '9bba1fc1-2db6-4565-aadf-2d1fb819263a'; +update re_us_post_regions set is_po_box = TRUE where id = '2495d6e0-4fc6-4209-8edb-54002d426333'; +update re_us_post_regions set is_po_box = TRUE where id = '1eaa4a9e-c12c-47d8-ae42-356308152838'; +update re_us_post_regions set is_po_box = TRUE where id = '16934701-68ab-4ff6-8042-a739287aace2'; +update re_us_post_regions set is_po_box = TRUE where id = 'd374c06d-b812-47b9-b65c-3f91268c3015'; +update re_us_post_regions set is_po_box = TRUE where id = '22dd6172-bee9-4c31-8ae3-04d2ab8892b6'; +update re_us_post_regions set is_po_box = TRUE where id = 'b1c901bd-d017-4740-8e66-7322f47f2d7d'; +update re_us_post_regions set is_po_box = TRUE where id = 'ccc178ce-1a3e-4bf0-88fc-5757bf323210'; +update re_us_post_regions set is_po_box = TRUE where id = '7e4c5ce4-d753-4032-ad56-3ddf1c1acb7f'; +update re_us_post_regions set is_po_box = TRUE where id = '610f5b9b-d02a-4c92-a353-01abc8f1ac6c'; +update re_us_post_regions set is_po_box = TRUE where id = '055ed55d-9fba-4512-af7a-9d607aebdb0f'; +update re_us_post_regions set is_po_box = TRUE where id = 'eeb7fa84-317b-4a0d-ae65-232a122aa141'; +update re_us_post_regions set is_po_box = TRUE where id = 'eeb7fa84-317b-4a0d-ae65-232a122aa141'; +update re_us_post_regions set is_po_box = TRUE where id = 'e3bdc7eb-76c2-4708-820c-6beaee21a295'; +update re_us_post_regions set is_po_box = TRUE where id = 'e3bdc7eb-76c2-4708-820c-6beaee21a295'; +update re_us_post_regions set is_po_box = TRUE where id = '61d95786-c610-48d5-a848-67078a5d2d93'; +update re_us_post_regions set is_po_box = TRUE where id = '85925e63-f043-4328-aeac-8925f86fe383'; +update re_us_post_regions set is_po_box = TRUE where id = '85925e63-f043-4328-aeac-8925f86fe383'; +update re_us_post_regions set is_po_box = TRUE where id = '85925e63-f043-4328-aeac-8925f86fe383'; +update re_us_post_regions set is_po_box = TRUE where id = 'b5395113-e110-4665-95ca-f5bc8ac1e534'; +update re_us_post_regions set is_po_box = TRUE where id = 'b5395113-e110-4665-95ca-f5bc8ac1e534'; +update re_us_post_regions set is_po_box = TRUE where id = 'b5395113-e110-4665-95ca-f5bc8ac1e534'; +update re_us_post_regions set is_po_box = TRUE where id = '75f24443-24cc-4d98-8cbd-0f2554eb54d9'; +update re_us_post_regions set is_po_box = TRUE where id = '75f24443-24cc-4d98-8cbd-0f2554eb54d9'; +update re_us_post_regions set is_po_box = TRUE where id = '8edf0070-65a8-4c89-8c58-0fb5d72d5d4e'; +update re_us_post_regions set is_po_box = TRUE where id = '424603e9-fb0e-48a0-9443-8b17c4fdb408'; +update re_us_post_regions set is_po_box = TRUE where id = '212efa23-b0aa-47e5-8660-9701e13045d7'; +update re_us_post_regions set is_po_box = TRUE where id = '212efa23-b0aa-47e5-8660-9701e13045d7'; +update re_us_post_regions set is_po_box = TRUE where id = '212efa23-b0aa-47e5-8660-9701e13045d7'; +update re_us_post_regions set is_po_box = TRUE where id = '97dbfb64-0413-4a21-b647-73a257a8aba3'; +update re_us_post_regions set is_po_box = TRUE where id = '764aa220-ea3c-4367-8611-32fedc5da8d7'; +update re_us_post_regions set is_po_box = TRUE where id = '4abfb68a-a507-4547-89bd-d19cd4a14550'; +update re_us_post_regions set is_po_box = TRUE where id = '1ee78c0e-bbff-4c52-b29c-f0757630e521'; +update re_us_post_regions set is_po_box = TRUE where id = '5f9def83-92b1-422e-a15c-419baebe2678'; +update re_us_post_regions set is_po_box = TRUE where id = '892a1fd2-a287-4991-990e-4ea8c274533f'; +update re_us_post_regions set is_po_box = TRUE where id = 'ccad647d-2075-467c-9a7a-30b611e713be'; +update re_us_post_regions set is_po_box = TRUE where id = 'ccad647d-2075-467c-9a7a-30b611e713be'; +update re_us_post_regions set is_po_box = TRUE where id = '9376c0b3-460f-4407-a1c9-6d25bb5d8b6b'; +update re_us_post_regions set is_po_box = TRUE where id = '55d567f3-4f55-46df-b1be-ff3b1a11800b'; +update re_us_post_regions set is_po_box = TRUE where id = '207f7e68-e833-4c3d-8bbf-23d158190745'; +update re_us_post_regions set is_po_box = TRUE where id = 'a93c0a92-c91b-4d9b-9c92-7967c364ba23'; +update re_us_post_regions set is_po_box = TRUE where id = '49aa6335-e160-48ae-a75e-2b2d44946960'; +update re_us_post_regions set is_po_box = TRUE where id = 'd0fbdabd-e2fb-4f26-9b9a-472e25671625'; +update re_us_post_regions set is_po_box = TRUE where id = '2ebae6f4-4418-4afa-bcdc-63569e018e0c'; +update re_us_post_regions set is_po_box = TRUE where id = 'c4a78f2b-8388-418b-85f6-31fa91a54ad8'; +update re_us_post_regions set is_po_box = TRUE where id = 'c4a78f2b-8388-418b-85f6-31fa91a54ad8'; +update re_us_post_regions set is_po_box = TRUE where id = 'c4a78f2b-8388-418b-85f6-31fa91a54ad8'; +update re_us_post_regions set is_po_box = TRUE where id = '9925c551-2232-4337-abde-c8f1751d62f9'; +update re_us_post_regions set is_po_box = TRUE where id = '9925c551-2232-4337-abde-c8f1751d62f9'; +update re_us_post_regions set is_po_box = TRUE where id = '1d259518-daba-4d39-abfd-2ff55d4e376b'; +update re_us_post_regions set is_po_box = TRUE where id = 'bb9f21e5-1d2a-41c8-b7ed-40cb631e8f3d'; +update re_us_post_regions set is_po_box = TRUE where id = '7c138eea-8297-4a51-b5c1-6df6c4e1dbb3'; +update re_us_post_regions set is_po_box = TRUE where id = '1e94a563-8110-4e18-8403-69b0ba943e99'; +update re_us_post_regions set is_po_box = TRUE where id = '6831ca4e-3dd8-4e59-96c8-34acb62d5768'; +update re_us_post_regions set is_po_box = TRUE where id = '6831ca4e-3dd8-4e59-96c8-34acb62d5768'; +update re_us_post_regions set is_po_box = TRUE where id = '9d656f63-fe9e-475e-8582-778e0659f607'; +update re_us_post_regions set is_po_box = TRUE where id = 'c643e23f-6ddb-471a-bc09-3ba86eca2a6b'; +update re_us_post_regions set is_po_box = TRUE where id = 'a34d7810-90ac-4f27-9024-99cd1e82b43b'; +update re_us_post_regions set is_po_box = TRUE where id = 'b379553e-376d-492e-86de-ff77d514715b'; +update re_us_post_regions set is_po_box = TRUE where id = '01c989d0-b876-4eb1-bd6d-6a909adc5c9b'; +update re_us_post_regions set is_po_box = TRUE where id = '6e0271d8-9347-49a1-8fde-ea82176c09d6'; +update re_us_post_regions set is_po_box = TRUE where id = 'fbb765d2-b2dd-4001-a095-9fe64797952c'; +update re_us_post_regions set is_po_box = TRUE where id = 'fc2b6494-6516-4f20-9d19-236bc88e7b89'; +update re_us_post_regions set is_po_box = TRUE where id = 'ea2c78bd-e62b-4974-8cb9-3a853161c47b'; +update re_us_post_regions set is_po_box = TRUE where id = 'ab027ef5-00de-4d74-82ee-2127e6df8975'; +update re_us_post_regions set is_po_box = TRUE where id = '58bebace-8e94-4458-9ef7-47edd247189f'; +update re_us_post_regions set is_po_box = TRUE where id = 'abe290ea-484d-461f-8fdf-6dac7e9366a8'; +update re_us_post_regions set is_po_box = TRUE where id = '37dda7b9-441d-4f23-8c1a-420864f92b01'; +update re_us_post_regions set is_po_box = TRUE where id = 'c9428412-6ada-40e1-b6a4-fd0eaa7510e6'; +update re_us_post_regions set is_po_box = TRUE where id = '8ac29900-3a96-419e-a4ee-3f0b0e3a040f'; +update re_us_post_regions set is_po_box = TRUE where id = '79b35d5c-8b3a-4737-b19b-cf7b6170dce2'; +update re_us_post_regions set is_po_box = TRUE where id = '1a6d7029-8431-49a6-9bf0-108e16787301'; +update re_us_post_regions set is_po_box = TRUE where id = '5c7f65df-be3f-4d53-bc60-eaf7958a1d24'; +update re_us_post_regions set is_po_box = TRUE where id = 'd3d1ef0a-9831-4433-b49d-b9c6bda5a540'; +update re_us_post_regions set is_po_box = TRUE where id = '8f9d52d4-3239-4089-992a-9e4a480d9f85'; +update re_us_post_regions set is_po_box = TRUE where id = 'bdcf7a23-3bf3-406e-a403-77a6d11a3607'; +update re_us_post_regions set is_po_box = TRUE where id = 'c376e50d-cff7-4dec-8e72-88a3b89ad00f'; +update re_us_post_regions set is_po_box = TRUE where id = '31602d74-51b7-43ec-b392-28eabf299554'; +update re_us_post_regions set is_po_box = TRUE where id = '42ffee11-efa1-4f91-9b51-bc9232b34a85'; +update re_us_post_regions set is_po_box = TRUE where id = 'a60be572-3f24-4c28-b4cd-894d35acedb0'; +update re_us_post_regions set is_po_box = TRUE where id = 'c1fbe48d-f288-4bbd-be02-bb154703f0e9'; +update re_us_post_regions set is_po_box = TRUE where id = 'c1fbe48d-f288-4bbd-be02-bb154703f0e9'; +update re_us_post_regions set is_po_box = TRUE where id = '6435b44c-d7ed-43ba-96c4-248ddf0efe12'; +update re_us_post_regions set is_po_box = TRUE where id = 'c39b4796-379b-452d-85d6-f85299991fc9'; +update re_us_post_regions set is_po_box = TRUE where id = '3f056d5f-1545-421d-b206-2df3cf1bc5ff'; +update re_us_post_regions set is_po_box = TRUE where id = 'e6806163-9d21-4b2d-8a00-7e38eba39c0a'; +update re_us_post_regions set is_po_box = TRUE where id = '43cb538c-fa50-4e6b-b12c-28e42e5c172c'; +update re_us_post_regions set is_po_box = TRUE where id = '43cb538c-fa50-4e6b-b12c-28e42e5c172c'; +update re_us_post_regions set is_po_box = TRUE where id = 'd8b80edf-d722-4dd0-b272-eb7985914744'; +update re_us_post_regions set is_po_box = TRUE where id = '15c811a0-af64-4797-83bd-493f7eec5609'; +update re_us_post_regions set is_po_box = TRUE where id = '15c811a0-af64-4797-83bd-493f7eec5609'; +update re_us_post_regions set is_po_box = TRUE where id = 'ee4cd8cd-a9cd-46ee-bf92-a1f9dd16e1b7'; +update re_us_post_regions set is_po_box = TRUE where id = '7e04a294-0395-4fd8-a315-d652d4c5918f'; +update re_us_post_regions set is_po_box = TRUE where id = '5de4b353-0c04-4c11-9e50-041c7ad44284'; +update re_us_post_regions set is_po_box = TRUE where id = '8843aeba-c931-4c62-a1f8-cbcf668d04ad'; +update re_us_post_regions set is_po_box = TRUE where id = '8788ed95-2580-46c2-9321-74ae232515e9'; +update re_us_post_regions set is_po_box = TRUE where id = '8788ed95-2580-46c2-9321-74ae232515e9'; +update re_us_post_regions set is_po_box = TRUE where id = 'bb1c0bbd-bdb4-4311-8187-eca5010b2e2c'; +update re_us_post_regions set is_po_box = TRUE where id = 'bb1c0bbd-bdb4-4311-8187-eca5010b2e2c'; +update re_us_post_regions set is_po_box = TRUE where id = 'bb1c0bbd-bdb4-4311-8187-eca5010b2e2c'; +update re_us_post_regions set is_po_box = TRUE where id = 'e215b6cd-70bd-4ae8-88de-27f4c25128b2'; +update re_us_post_regions set is_po_box = TRUE where id = '7d3ee714-8ea5-4ea2-abc6-1feb14ba12ae'; +update re_us_post_regions set is_po_box = TRUE where id = 'cb570222-e12f-4585-9e80-e0005b146ad1'; +update re_us_post_regions set is_po_box = TRUE where id = '596859e6-8c14-4db9-b909-1730213ec5cb'; +update re_us_post_regions set is_po_box = TRUE where id = 'c128809c-b9e3-482e-a682-73969da7b82b'; +update re_us_post_regions set is_po_box = TRUE where id = '52237a8a-5ed0-4554-847f-59d612129517'; +update re_us_post_regions set is_po_box = TRUE where id = '6425f023-512c-42f4-a90a-0bf9f3a714c5'; +update re_us_post_regions set is_po_box = TRUE where id = '53b34798-de13-4278-8f1c-21c650611a21'; +update re_us_post_regions set is_po_box = TRUE where id = '9e77582b-33bf-4e29-89c2-62fc017e8fc9'; +update re_us_post_regions set is_po_box = TRUE where id = '9e77582b-33bf-4e29-89c2-62fc017e8fc9'; +update re_us_post_regions set is_po_box = TRUE where id = '9e77582b-33bf-4e29-89c2-62fc017e8fc9'; +update re_us_post_regions set is_po_box = TRUE where id = '8bb58a64-e7b2-4368-9a40-fc2ae0203b5c'; +update re_us_post_regions set is_po_box = TRUE where id = 'f88eca32-568e-48c5-845d-27efaa6e7443'; +update re_us_post_regions set is_po_box = TRUE where id = '10c0b071-e9dd-4184-88e0-3fb0c9ab1def'; +update re_us_post_regions set is_po_box = TRUE where id = '7707f968-2589-4f07-82fd-358bb1181137'; +update re_us_post_regions set is_po_box = TRUE where id = '92ebc1e7-455f-487a-8921-537488946e10'; +update re_us_post_regions set is_po_box = TRUE where id = '365f7a45-c5c5-485b-93f2-ac10216aff84'; +update re_us_post_regions set is_po_box = TRUE where id = '23a8fccf-59cc-4364-ba10-452c33f61b48'; +update re_us_post_regions set is_po_box = TRUE where id = '6d217dd4-b75a-499c-9176-ac310f748a4a'; +update re_us_post_regions set is_po_box = TRUE where id = '7fb81201-2bb0-4674-8c90-bfad119a5261'; +update re_us_post_regions set is_po_box = TRUE where id = '7fb81201-2bb0-4674-8c90-bfad119a5261'; +update re_us_post_regions set is_po_box = TRUE where id = '7fb81201-2bb0-4674-8c90-bfad119a5261'; +update re_us_post_regions set is_po_box = TRUE where id = 'e349d6a8-41dc-4903-bfcb-b244e08865c6'; +update re_us_post_regions set is_po_box = TRUE where id = 'd8afb5c0-74c5-42af-b179-ae88f656d1e5'; +update re_us_post_regions set is_po_box = TRUE where id = 'e69100c7-06e9-4d30-aff6-7966d4e4ba01'; +update re_us_post_regions set is_po_box = TRUE where id = 'c0c0c26a-d075-40ca-a398-b2f55d51500f'; +update re_us_post_regions set is_po_box = TRUE where id = 'ba7c4ece-6330-4aa6-abe2-4dc8dfc1fbe6'; +update re_us_post_regions set is_po_box = TRUE where id = 'ba7c4ece-6330-4aa6-abe2-4dc8dfc1fbe6'; +update re_us_post_regions set is_po_box = TRUE where id = 'ba7c4ece-6330-4aa6-abe2-4dc8dfc1fbe6'; +update re_us_post_regions set is_po_box = TRUE where id = 'a92c8eb6-8ee7-401b-9ed6-fc6aa7d4e043'; +update re_us_post_regions set is_po_box = TRUE where id = 'a92c8eb6-8ee7-401b-9ed6-fc6aa7d4e043'; +update re_us_post_regions set is_po_box = TRUE where id = '25cbb362-9bdf-48bb-8c85-892ef17d4642'; +update re_us_post_regions set is_po_box = TRUE where id = '20d124e0-41e1-4c04-83ec-10230b3d5a49'; +update re_us_post_regions set is_po_box = TRUE where id = '20d124e0-41e1-4c04-83ec-10230b3d5a49'; +update re_us_post_regions set is_po_box = TRUE where id = 'e38d4d2d-1b88-47fa-8088-2b15c0a95c1c'; +update re_us_post_regions set is_po_box = TRUE where id = '853cf6de-98bb-45fe-a36a-34bc4012fba5'; +update re_us_post_regions set is_po_box = TRUE where id = '853cf6de-98bb-45fe-a36a-34bc4012fba5'; +update re_us_post_regions set is_po_box = TRUE where id = '853cf6de-98bb-45fe-a36a-34bc4012fba5'; +update re_us_post_regions set is_po_box = TRUE where id = '853cf6de-98bb-45fe-a36a-34bc4012fba5'; +update re_us_post_regions set is_po_box = TRUE where id = '853cf6de-98bb-45fe-a36a-34bc4012fba5'; +update re_us_post_regions set is_po_box = TRUE where id = '853cf6de-98bb-45fe-a36a-34bc4012fba5'; +update re_us_post_regions set is_po_box = TRUE where id = 'cdefade4-d8a0-4eb8-ab83-b07eddc946c8'; +update re_us_post_regions set is_po_box = TRUE where id = 'bd0cf10c-2751-4466-9d62-7a2b980a004c'; +update re_us_post_regions set is_po_box = TRUE where id = 'a40b2f4c-cbdb-4681-a851-7bd33fb0c0d1'; +update re_us_post_regions set is_po_box = TRUE where id = 'f7ea3c82-28f1-45fe-a3b8-00624f735ff3'; +update re_us_post_regions set is_po_box = TRUE where id = '239622ef-d64c-4352-a257-8ae7ca35bf23'; +update re_us_post_regions set is_po_box = TRUE where id = 'b793adcb-0557-4ba1-9a9e-79ea57e7abe8'; +update re_us_post_regions set is_po_box = TRUE where id = '255ec63d-cf98-404a-bd57-cfc0993f5278'; +update re_us_post_regions set is_po_box = TRUE where id = '6e2c0308-639b-4c25-8b90-2e0eb93bba55'; +update re_us_post_regions set is_po_box = TRUE where id = 'ddcaccda-dd06-4256-b82a-c76ede66e6a8'; +update re_us_post_regions set is_po_box = TRUE where id = '137eb924-42dc-4cae-9f91-ae00bbdd003a'; +update re_us_post_regions set is_po_box = TRUE where id = 'dbbeea48-2dd8-47ea-b728-d47a719661a4'; +update re_us_post_regions set is_po_box = TRUE where id = 'dbbeea48-2dd8-47ea-b728-d47a719661a4'; +update re_us_post_regions set is_po_box = TRUE where id = '7897c812-4018-469a-89f7-a638ce2690e2'; +update re_us_post_regions set is_po_box = TRUE where id = '7897c812-4018-469a-89f7-a638ce2690e2'; +update re_us_post_regions set is_po_box = TRUE where id = 'e6822e14-c9d3-4da0-8b4d-3a6da5c8d6d2'; +update re_us_post_regions set is_po_box = TRUE where id = 'e6822e14-c9d3-4da0-8b4d-3a6da5c8d6d2'; +update re_us_post_regions set is_po_box = TRUE where id = 'e6822e14-c9d3-4da0-8b4d-3a6da5c8d6d2'; +update re_us_post_regions set is_po_box = TRUE where id = 'e6822e14-c9d3-4da0-8b4d-3a6da5c8d6d2'; +update re_us_post_regions set is_po_box = TRUE where id = '5093f4ab-8b9f-4102-8c27-dac5662ff72d'; +update re_us_post_regions set is_po_box = TRUE where id = '5093f4ab-8b9f-4102-8c27-dac5662ff72d'; +update re_us_post_regions set is_po_box = TRUE where id = '6b032f02-8ad7-47f5-aa55-3321892cb28e'; +update re_us_post_regions set is_po_box = TRUE where id = '6b032f02-8ad7-47f5-aa55-3321892cb28e'; +update re_us_post_regions set is_po_box = TRUE where id = '106be84e-57d9-4fa7-9be1-5722d26344ec'; +update re_us_post_regions set is_po_box = TRUE where id = '106be84e-57d9-4fa7-9be1-5722d26344ec'; +update re_us_post_regions set is_po_box = TRUE where id = '703baf23-0286-434c-bf53-8900387e17e7'; +update re_us_post_regions set is_po_box = TRUE where id = '7985a021-d929-464a-8184-2dcb40a6595c'; +update re_us_post_regions set is_po_box = TRUE where id = '4422b60f-85d5-49c1-8dfc-9a411ac77515'; +update re_us_post_regions set is_po_box = TRUE where id = '4422b60f-85d5-49c1-8dfc-9a411ac77515'; +update re_us_post_regions set is_po_box = TRUE where id = 'c982969b-f483-420e-b37c-a89d748f599d'; +update re_us_post_regions set is_po_box = TRUE where id = '269b3617-4228-4d48-9817-dc0c611ef150'; +update re_us_post_regions set is_po_box = TRUE where id = 'a4a3b3e5-f4b4-4a7a-ab7d-c17e9ba593c8'; +update re_us_post_regions set is_po_box = TRUE where id = '078f962c-c87e-4c7c-87e9-ca82ab6006e8'; +update re_us_post_regions set is_po_box = TRUE where id = '79277ff6-d8d5-4de9-8e6d-1d878bf1d66e'; +update re_us_post_regions set is_po_box = TRUE where id = 'adef89b3-7054-432f-9648-d8a63fa6f6da'; +update re_us_post_regions set is_po_box = TRUE where id = 'e0d37109-3214-473c-90fd-269d006a4c3d'; +update re_us_post_regions set is_po_box = TRUE where id = '4ea03e51-1eb3-4fbe-8bf2-8acfe4587b85'; +update re_us_post_regions set is_po_box = TRUE where id = '4ea03e51-1eb3-4fbe-8bf2-8acfe4587b85'; +update re_us_post_regions set is_po_box = TRUE where id = '45a51661-d76b-4c4c-b672-8febe8494366'; +update re_us_post_regions set is_po_box = TRUE where id = '29cf9357-c66f-432c-8e48-6104e0f27c25'; +update re_us_post_regions set is_po_box = TRUE where id = '29cf9357-c66f-432c-8e48-6104e0f27c25'; +update re_us_post_regions set is_po_box = TRUE where id = 'da11782e-1d8f-4488-969d-93789678342b'; +update re_us_post_regions set is_po_box = TRUE where id = '0ff96eed-7f1f-4f8c-91aa-f094a71d511f'; +update re_us_post_regions set is_po_box = TRUE where id = '0ff96eed-7f1f-4f8c-91aa-f094a71d511f'; +update re_us_post_regions set is_po_box = TRUE where id = '0ff96eed-7f1f-4f8c-91aa-f094a71d511f'; +update re_us_post_regions set is_po_box = TRUE where id = '0ff96eed-7f1f-4f8c-91aa-f094a71d511f'; +update re_us_post_regions set is_po_box = TRUE where id = '6aaa978d-ebbe-4207-b56d-aca73ac54b05'; +update re_us_post_regions set is_po_box = TRUE where id = '65153820-7ca4-4ec8-a7af-d9f6bbdee89e'; +update re_us_post_regions set is_po_box = TRUE where id = '65153820-7ca4-4ec8-a7af-d9f6bbdee89e'; +update re_us_post_regions set is_po_box = TRUE where id = '1081db6c-4e62-4cfa-b7a3-7b2b1cef249c'; +update re_us_post_regions set is_po_box = TRUE where id = '6331f7c2-644b-47ba-a513-0a09632e4278'; +update re_us_post_regions set is_po_box = TRUE where id = 'd6e0f90a-4326-4354-aa48-1f0e7bcfa928'; +update re_us_post_regions set is_po_box = TRUE where id = '513e1f88-cb70-4a07-bb52-dd46be482848'; +update re_us_post_regions set is_po_box = TRUE where id = 'deeb52b8-e57c-48c1-ba80-fb2f822d9b9a'; +update re_us_post_regions set is_po_box = TRUE where id = 'deeb52b8-e57c-48c1-ba80-fb2f822d9b9a'; +update re_us_post_regions set is_po_box = TRUE where id = '541b93ac-c1dc-495d-87a4-5b1dc78e7a41'; +update re_us_post_regions set is_po_box = TRUE where id = '988990c0-bfcb-47dc-b98a-106c35d38fb6'; +update re_us_post_regions set is_po_box = TRUE where id = '2881fe2d-0134-4206-9f1a-9205f0cbbffa'; +update re_us_post_regions set is_po_box = TRUE where id = '6f2d3d27-316a-4367-a6d7-095e6ae0011c'; +update re_us_post_regions set is_po_box = TRUE where id = '86041770-cc6d-427c-b797-8f1363136da1'; +update re_us_post_regions set is_po_box = TRUE where id = 'df8d7dee-66e0-40a5-8da6-cae5fd540ac8'; +update re_us_post_regions set is_po_box = TRUE where id = '7dffe4be-ce45-44fa-a414-b0e39848ad7c'; +update re_us_post_regions set is_po_box = TRUE where id = '472ba7a8-f9b1-4aea-8d4b-9d936cfc4f00'; +update re_us_post_regions set is_po_box = TRUE where id = 'fecaf415-c4af-4b90-8311-d83b74cd1d5d'; +update re_us_post_regions set is_po_box = TRUE where id = '649d95c8-09f1-4dd7-a20c-10635f181caf'; +update re_us_post_regions set is_po_box = TRUE where id = 'f4034bbf-7bad-400a-a6da-84557a4e308d'; +update re_us_post_regions set is_po_box = TRUE where id = '7592b3c3-45e0-45ed-983a-abc8784d0f28'; +update re_us_post_regions set is_po_box = TRUE where id = '7592b3c3-45e0-45ed-983a-abc8784d0f28'; +update re_us_post_regions set is_po_box = TRUE where id = '62e09020-7442-4b7d-820f-e019c35e796f'; +update re_us_post_regions set is_po_box = TRUE where id = '1bbf10f2-ec1d-4c03-b910-49396373c18d'; +update re_us_post_regions set is_po_box = TRUE where id = 'a6baf368-33ea-40eb-92b5-539dee2ca415'; +update re_us_post_regions set is_po_box = TRUE where id = 'a7bc2b11-729c-48c0-8330-d654379780e7'; +update re_us_post_regions set is_po_box = TRUE where id = 'b33c0791-6da8-425c-923e-6202c1dfdbf7'; +update re_us_post_regions set is_po_box = TRUE where id = 'b33c0791-6da8-425c-923e-6202c1dfdbf7'; +update re_us_post_regions set is_po_box = TRUE where id = 'b33c0791-6da8-425c-923e-6202c1dfdbf7'; +update re_us_post_regions set is_po_box = TRUE where id = '06ffa7a6-2188-4b37-9b52-8115dc43c624'; +update re_us_post_regions set is_po_box = TRUE where id = 'a910d5b3-580c-4d9c-adb5-599902d8de76'; +update re_us_post_regions set is_po_box = TRUE where id = 'a1b514db-9e90-4744-9075-ce8829423618'; +update re_us_post_regions set is_po_box = TRUE where id = '827d19b8-98a1-4492-af5a-ca017d641ec3'; +update re_us_post_regions set is_po_box = TRUE where id = '2eb31c7e-f48f-44b9-861b-109547ddf1d9'; +update re_us_post_regions set is_po_box = TRUE where id = 'cc8894dd-b1a3-466f-b84f-c4933418b7c3'; +update re_us_post_regions set is_po_box = TRUE where id = '9fbd00d5-0936-4a2d-980d-b4a6abeabad0'; +update re_us_post_regions set is_po_box = TRUE where id = 'e784ddec-3ed7-4579-a1f3-6446afe1a4e2'; +update re_us_post_regions set is_po_box = TRUE where id = 'a221a38f-8a86-443c-ac5d-41ab26fcb188'; +update re_us_post_regions set is_po_box = TRUE where id = '5f9cc849-fa41-4a22-9eff-e22762a44b43'; +update re_us_post_regions set is_po_box = TRUE where id = 'ff881e6a-aee6-4a38-86c8-cdc6a94940e8'; +update re_us_post_regions set is_po_box = TRUE where id = 'aff83383-d3a7-435b-82f8-6afa5916a4c5'; +update re_us_post_regions set is_po_box = TRUE where id = 'aff83383-d3a7-435b-82f8-6afa5916a4c5'; +update re_us_post_regions set is_po_box = TRUE where id = 'dbdd6f17-cb68-402c-9022-9a2cb34286c6'; +update re_us_post_regions set is_po_box = TRUE where id = 'ef3f8d24-69af-4dda-b0f8-75fcabee02cb'; +update re_us_post_regions set is_po_box = TRUE where id = 'b22163a8-6cfa-46cc-86ee-4ee587e3fdc0'; +update re_us_post_regions set is_po_box = TRUE where id = 'd05c05bd-c5e0-4f42-903a-eb76b9a5eab6'; +update re_us_post_regions set is_po_box = TRUE where id = 'd9668980-ab97-4e04-9a77-b490f4acf8af'; +update re_us_post_regions set is_po_box = TRUE where id = 'd9668980-ab97-4e04-9a77-b490f4acf8af'; +update re_us_post_regions set is_po_box = TRUE where id = 'd9668980-ab97-4e04-9a77-b490f4acf8af'; +update re_us_post_regions set is_po_box = TRUE where id = 'd9668980-ab97-4e04-9a77-b490f4acf8af'; +update re_us_post_regions set is_po_box = TRUE where id = '129e77e7-5131-4373-ade3-57c0fb9d4236'; +update re_us_post_regions set is_po_box = TRUE where id = 'c40ee4b2-475d-4e73-9abc-ee727351c569'; +update re_us_post_regions set is_po_box = TRUE where id = 'd4e6bf87-3115-4715-8de2-bcdbd793fbaa'; +update re_us_post_regions set is_po_box = TRUE where id = 'd4e6bf87-3115-4715-8de2-bcdbd793fbaa'; +update re_us_post_regions set is_po_box = TRUE where id = 'd4e6bf87-3115-4715-8de2-bcdbd793fbaa'; +update re_us_post_regions set is_po_box = TRUE where id = 'c4960f77-b507-4f7c-a3ad-0f67b5f3bdeb'; +update re_us_post_regions set is_po_box = TRUE where id = 'd7e93f8c-59da-472b-9670-e23ddf57c3b5'; +update re_us_post_regions set is_po_box = TRUE where id = 'f7154a2a-9c23-493d-85d0-10873ced6c68'; +update re_us_post_regions set is_po_box = TRUE where id = 'ade92005-e861-4e28-a690-475be7a08d8b'; +update re_us_post_regions set is_po_box = TRUE where id = '70639005-2217-4ab0-b918-3cc45db3989b'; +update re_us_post_regions set is_po_box = TRUE where id = '2574f0a2-00ed-489f-95f1-65b162e9a68a'; +update re_us_post_regions set is_po_box = TRUE where id = 'a03c3595-72b5-41d0-8933-ccf44aef274f'; +update re_us_post_regions set is_po_box = TRUE where id = '7dc78159-1382-4903-9e7b-a6492c40ad31'; +update re_us_post_regions set is_po_box = TRUE where id = '7dc78159-1382-4903-9e7b-a6492c40ad31'; +update re_us_post_regions set is_po_box = TRUE where id = 'a627cd07-0dbb-4773-9607-774889e2645b'; +update re_us_post_regions set is_po_box = TRUE where id = 'a627cd07-0dbb-4773-9607-774889e2645b'; +update re_us_post_regions set is_po_box = TRUE where id = 'a627cd07-0dbb-4773-9607-774889e2645b'; +update re_us_post_regions set is_po_box = TRUE where id = '41e032d0-b306-4047-b690-994b781db8c7'; +update re_us_post_regions set is_po_box = TRUE where id = '39f3da7c-8246-4232-9a02-62712db60458'; +update re_us_post_regions set is_po_box = TRUE where id = 'b7d3a1b5-8283-45fa-b834-357c610e294f'; +update re_us_post_regions set is_po_box = TRUE where id = 'f66562f7-b995-4bf1-823e-6e47eb51524e'; +update re_us_post_regions set is_po_box = TRUE where id = 'f66562f7-b995-4bf1-823e-6e47eb51524e'; +update re_us_post_regions set is_po_box = TRUE where id = 'bfa49035-9051-40e6-85e1-5cf8a5405e3f'; +update re_us_post_regions set is_po_box = TRUE where id = '7e2b054a-ad8d-4c81-8b7b-ab6cfbec79e0'; +update re_us_post_regions set is_po_box = TRUE where id = 'aedb5401-6500-4acc-8019-dc81b866f379'; +update re_us_post_regions set is_po_box = TRUE where id = '9a82d8c1-80b3-4921-9a34-09b0c409f718'; +update re_us_post_regions set is_po_box = TRUE where id = 'b51fb01c-71e6-44f5-8caf-04814147f187'; +update re_us_post_regions set is_po_box = TRUE where id = '4048d949-3c33-44bc-b2df-5c57be49a5f4'; +update re_us_post_regions set is_po_box = TRUE where id = 'd6b0f77d-ba45-432d-b880-57d50d718600'; +update re_us_post_regions set is_po_box = TRUE where id = 'a192fec7-d8fb-47a9-b8db-d039bdf2396d'; +update re_us_post_regions set is_po_box = TRUE where id = '213aca4e-c461-4086-942c-b1f14d2ace6c'; +update re_us_post_regions set is_po_box = TRUE where id = '213aca4e-c461-4086-942c-b1f14d2ace6c'; +update re_us_post_regions set is_po_box = TRUE where id = 'd5fdec1a-26b8-49e7-8922-3add921dfecd'; +update re_us_post_regions set is_po_box = TRUE where id = '8f9dd108-533c-4ee9-95f6-8ff0c3c7ebd6'; +update re_us_post_regions set is_po_box = TRUE where id = '552d7592-72b0-431b-ae5d-be8d20bf5090'; +update re_us_post_regions set is_po_box = TRUE where id = 'c903aa4d-d2fc-4fd2-a68e-c8343a26f7c0'; +update re_us_post_regions set is_po_box = TRUE where id = '47b89d74-aae0-47b5-a97f-ccd67a486af4'; +update re_us_post_regions set is_po_box = TRUE where id = '657b8a22-3300-478f-bc61-9815a5ce32c3'; +update re_us_post_regions set is_po_box = TRUE where id = '6c5291e9-9bd2-49b3-bc36-d23593e79d6c'; +update re_us_post_regions set is_po_box = TRUE where id = '6c5291e9-9bd2-49b3-bc36-d23593e79d6c'; +update re_us_post_regions set is_po_box = TRUE where id = '317d6d25-661f-4465-9905-00f848212c41'; +update re_us_post_regions set is_po_box = TRUE where id = '1b08e122-e689-418c-a03f-7b0c596cad3d'; +update re_us_post_regions set is_po_box = TRUE where id = 'c2627140-69e6-4821-9477-5a1cde597d36'; +update re_us_post_regions set is_po_box = TRUE where id = '3a3f6949-4562-47f5-b7a5-76d5d60ba223'; +update re_us_post_regions set is_po_box = TRUE where id = 'edd06877-efe6-4648-92d6-57132c6f9bda'; +update re_us_post_regions set is_po_box = TRUE where id = 'edd06877-efe6-4648-92d6-57132c6f9bda'; +update re_us_post_regions set is_po_box = TRUE where id = 'b48addd9-4502-47a5-a839-76bb21c5d7eb'; +update re_us_post_regions set is_po_box = TRUE where id = 'ef6d9851-3249-43ab-8c77-b3154c64f6b3'; +update re_us_post_regions set is_po_box = TRUE where id = '5dc75a8d-a55c-4172-962b-f1bb58186ab4'; +update re_us_post_regions set is_po_box = TRUE where id = '2c29de0c-7607-4939-8113-a19c3f6dc928'; +update re_us_post_regions set is_po_box = TRUE where id = '610a38dd-b4d3-496b-a846-743589312353'; +update re_us_post_regions set is_po_box = TRUE where id = 'a016c77d-1106-4b1f-af24-55c489dd5427'; +update re_us_post_regions set is_po_box = TRUE where id = 'a016c77d-1106-4b1f-af24-55c489dd5427'; +update re_us_post_regions set is_po_box = TRUE where id = 'a9d3d7c0-b31d-4b9e-a53b-acdabffda2af'; +update re_us_post_regions set is_po_box = TRUE where id = 'ab15dc7d-1da0-4eed-9133-251441583d8a'; +update re_us_post_regions set is_po_box = TRUE where id = 'ab15dc7d-1da0-4eed-9133-251441583d8a'; +update re_us_post_regions set is_po_box = TRUE where id = 'ab15dc7d-1da0-4eed-9133-251441583d8a'; +update re_us_post_regions set is_po_box = TRUE where id = '77790ea3-ac55-4b49-93c9-b59c6f3350ee'; +update re_us_post_regions set is_po_box = TRUE where id = 'ae376e6d-6f5f-4710-9be4-3935f477c680'; +update re_us_post_regions set is_po_box = TRUE where id = 'fe416657-2515-4b54-8826-0a05cfd2400b'; +update re_us_post_regions set is_po_box = TRUE where id = '817f4327-07b0-452a-b2fd-68512baf212c'; +update re_us_post_regions set is_po_box = TRUE where id = '7f24a887-b2f0-46a7-8dc8-f6e06913f322'; +update re_us_post_regions set is_po_box = TRUE where id = '11e30c1f-1dcd-480c-9d36-a9f051185ecb'; +update re_us_post_regions set is_po_box = TRUE where id = '25061dac-b4e7-41c9-8e99-0a02878c4a2e'; +update re_us_post_regions set is_po_box = TRUE where id = 'b90443e4-0362-4250-ae24-a756ce323df9'; +update re_us_post_regions set is_po_box = TRUE where id = '0a8dea1d-d6ba-4a08-b4da-f61dfd550dd9'; +update re_us_post_regions set is_po_box = TRUE where id = '47a170da-aa39-499d-b0bd-d9fe59d106ed'; +update re_us_post_regions set is_po_box = TRUE where id = 'e0bf37eb-f303-4dfa-ac30-2faf67911279'; +update re_us_post_regions set is_po_box = TRUE where id = 'fb83610f-be53-4d33-ab7d-ba0b13fa7482'; +update re_us_post_regions set is_po_box = TRUE where id = 'fb83610f-be53-4d33-ab7d-ba0b13fa7482'; +update re_us_post_regions set is_po_box = TRUE where id = 'fb83610f-be53-4d33-ab7d-ba0b13fa7482'; +update re_us_post_regions set is_po_box = TRUE where id = 'fb83610f-be53-4d33-ab7d-ba0b13fa7482'; +update re_us_post_regions set is_po_box = TRUE where id = 'fb83610f-be53-4d33-ab7d-ba0b13fa7482'; +update re_us_post_regions set is_po_box = TRUE where id = 'fb83610f-be53-4d33-ab7d-ba0b13fa7482'; +update re_us_post_regions set is_po_box = TRUE where id = '9a6cb25e-c0c1-4436-85c5-c71f305d842d'; +update re_us_post_regions set is_po_box = TRUE where id = 'd8983c59-3d02-4812-8dc5-8117084565e0'; +update re_us_post_regions set is_po_box = TRUE where id = 'c73220fb-4f59-4006-a7c4-8a8b037937c9'; +update re_us_post_regions set is_po_box = TRUE where id = 'a1c3e62c-4823-4870-9575-a7dd6e816c99'; +update re_us_post_regions set is_po_box = TRUE where id = '4bb57bc1-b616-4a51-9b01-d51373279a33'; +update re_us_post_regions set is_po_box = TRUE where id = 'cd74c498-ddb9-46b2-b320-de0bd4bf6954'; +update re_us_post_regions set is_po_box = TRUE where id = '849d7e72-7ce7-4a0b-8129-1b91f5349cf2'; +update re_us_post_regions set is_po_box = TRUE where id = '02dee3aa-ece3-4b64-a3fe-2a49eefb76d5'; +update re_us_post_regions set is_po_box = TRUE where id = '269304fe-e006-4614-8603-9197392e8c19'; +update re_us_post_regions set is_po_box = TRUE where id = 'a89f5644-1c14-4207-ada0-93683df8c4a4'; +update re_us_post_regions set is_po_box = TRUE where id = 'dcb58749-9295-41a0-b3aa-623c9f013bef'; +update re_us_post_regions set is_po_box = TRUE where id = 'dcb58749-9295-41a0-b3aa-623c9f013bef'; +update re_us_post_regions set is_po_box = TRUE where id = 'c679e9e7-1424-42e3-b83d-49625c3bd58f'; +update re_us_post_regions set is_po_box = TRUE where id = '321a93ee-f73d-49ff-bdbe-066f6bc1bf53'; +update re_us_post_regions set is_po_box = TRUE where id = '8c1c518b-6d83-477c-abc7-adf174d16c1e'; +update re_us_post_regions set is_po_box = TRUE where id = '92c0e99a-b142-4d9b-a829-1443b3c1b7bd'; +update re_us_post_regions set is_po_box = TRUE where id = '03a6b7cc-3bb9-4f30-a3c4-377e97cac04d'; +update re_us_post_regions set is_po_box = TRUE where id = '92df2d83-8c4e-412d-9456-fc929dfcf08c'; +update re_us_post_regions set is_po_box = TRUE where id = '3b116495-b4f6-4027-8639-2722fce9e42f'; +update re_us_post_regions set is_po_box = TRUE where id = '3b116495-b4f6-4027-8639-2722fce9e42f'; +update re_us_post_regions set is_po_box = TRUE where id = 'acb898e6-8286-4446-84ef-ff2a63ff6269'; +update re_us_post_regions set is_po_box = TRUE where id = 'ab7af87a-f5f6-4725-8e24-ab5ce7401747'; +update re_us_post_regions set is_po_box = TRUE where id = '9f82d762-6da4-4ff8-91a4-8a5c80966069'; +update re_us_post_regions set is_po_box = TRUE where id = 'b20b0b23-fa2a-4aea-9232-73424f9049c0'; +update re_us_post_regions set is_po_box = TRUE where id = 'b20b0b23-fa2a-4aea-9232-73424f9049c0'; +update re_us_post_regions set is_po_box = TRUE where id = 'b20b0b23-fa2a-4aea-9232-73424f9049c0'; +update re_us_post_regions set is_po_box = TRUE where id = 'b20b0b23-fa2a-4aea-9232-73424f9049c0'; +update re_us_post_regions set is_po_box = TRUE where id = 'dce6b30b-c69a-4ca3-b43e-5eb69c7923c1'; +update re_us_post_regions set is_po_box = TRUE where id = 'd60659df-6ecc-4f7e-b81b-24e53fdd62d0'; +update re_us_post_regions set is_po_box = TRUE where id = 'd7a09e10-0a5f-4001-95bd-08749f85c496'; +update re_us_post_regions set is_po_box = TRUE where id = '1dcfd8b6-2c93-4d3a-a0f2-e0d4fd73f55e'; +update re_us_post_regions set is_po_box = TRUE where id = '87cb99ec-7ded-410c-b5a6-fc6865bee573'; +update re_us_post_regions set is_po_box = TRUE where id = '18b3b5bb-68f5-475f-8727-3a64369357a8'; +update re_us_post_regions set is_po_box = TRUE where id = '1774d956-efaa-4f07-8196-4ed1e1219457'; +update re_us_post_regions set is_po_box = TRUE where id = 'be69e6f9-5df2-4ebc-8638-1c3b1664d232'; +update re_us_post_regions set is_po_box = TRUE where id = '37f2c66d-1fd9-4a10-a6c9-fd397edd1b13'; +update re_us_post_regions set is_po_box = TRUE where id = '37f2c66d-1fd9-4a10-a6c9-fd397edd1b13'; +update re_us_post_regions set is_po_box = TRUE where id = '2bfb426a-2529-48b6-b383-976c7eddbcde'; +update re_us_post_regions set is_po_box = TRUE where id = '2bfb426a-2529-48b6-b383-976c7eddbcde'; +update re_us_post_regions set is_po_box = TRUE where id = '2bfb426a-2529-48b6-b383-976c7eddbcde'; +update re_us_post_regions set is_po_box = TRUE where id = 'f230d398-27fb-43e7-b88d-84280bc0e956'; +update re_us_post_regions set is_po_box = TRUE where id = '9799b10e-740e-473e-8aa0-74fcfbc2d2b5'; +update re_us_post_regions set is_po_box = TRUE where id = '635ab011-9222-478e-a42f-6e104b821c64'; +update re_us_post_regions set is_po_box = TRUE where id = 'c8fdc1a2-1616-47b9-9c46-c02659d73ae0'; +update re_us_post_regions set is_po_box = TRUE where id = '07ab912f-b8c1-4adc-a1ba-90fac7c0aee3'; +update re_us_post_regions set is_po_box = TRUE where id = '37ea0c6a-e5ea-4da3-aae7-bc61208c8939'; +update re_us_post_regions set is_po_box = TRUE where id = '1fc03431-f4f2-4c47-9f3b-25c31b6e3d34'; +update re_us_post_regions set is_po_box = TRUE where id = '1177cd39-edc4-4b46-b51b-910aa4567c1c'; +update re_us_post_regions set is_po_box = TRUE where id = '1cd4ab18-5db8-4423-aa43-de911b36a7de'; +update re_us_post_regions set is_po_box = TRUE where id = '58bdd3b3-0aa4-46a2-9790-5bda5a0560d8'; +update re_us_post_regions set is_po_box = TRUE where id = '0b025840-68cb-4ba5-8eee-016ac33d1e8a'; +update re_us_post_regions set is_po_box = TRUE where id = '0b025840-68cb-4ba5-8eee-016ac33d1e8a'; +update re_us_post_regions set is_po_box = TRUE where id = '5e7f315b-1b02-448d-baa9-7321248bda7c'; +update re_us_post_regions set is_po_box = TRUE where id = '155142f3-12c6-46a3-ad4e-a7c95484f9d0'; +update re_us_post_regions set is_po_box = TRUE where id = '202e9390-b838-4c18-abb3-4fe7c9347ac5'; +update re_us_post_regions set is_po_box = TRUE where id = '51884db8-18f1-437d-84fb-cacaed964665'; +update re_us_post_regions set is_po_box = TRUE where id = '986903e2-d40a-45b5-bdfe-9d36351686d8'; +update re_us_post_regions set is_po_box = TRUE where id = 'a99e6795-db01-4a11-87cb-b68257e0a33a'; +update re_us_post_regions set is_po_box = TRUE where id = '0a4df1df-7cb4-43cc-9677-e7d1cf76ac56'; +update re_us_post_regions set is_po_box = TRUE where id = 'd4ed3b9f-fd88-41da-8af1-9af460812734'; +update re_us_post_regions set is_po_box = TRUE where id = 'f2419bf1-01cd-4b6f-8f04-7ca00e3c23a4'; +update re_us_post_regions set is_po_box = TRUE where id = '4ec24fad-c062-41ec-8f3c-73baf7c8d398'; +update re_us_post_regions set is_po_box = TRUE where id = '4f82abde-8714-4d3f-bced-49d2cd6ccea6'; +update re_us_post_regions set is_po_box = TRUE where id = '403e7381-d98d-4569-88d3-0a5e4838b63d'; +update re_us_post_regions set is_po_box = TRUE where id = '4cfa9e83-c188-4c8c-9594-71089da6c8bb'; +update re_us_post_regions set is_po_box = TRUE where id = '8cdac265-6860-4420-9f40-822296d358e3'; +update re_us_post_regions set is_po_box = TRUE where id = '84a7800b-2a3e-4ecd-a3b3-cfe170e663d3'; +update re_us_post_regions set is_po_box = TRUE where id = '84a7800b-2a3e-4ecd-a3b3-cfe170e663d3'; +update re_us_post_regions set is_po_box = TRUE where id = '84a7800b-2a3e-4ecd-a3b3-cfe170e663d3'; +update re_us_post_regions set is_po_box = TRUE where id = 'e4cb89b9-ef96-43a6-95f8-12907eedfdc3'; +update re_us_post_regions set is_po_box = TRUE where id = '75312496-6c09-474a-85f3-54d2b1df2f5d'; +update re_us_post_regions set is_po_box = TRUE where id = 'f6eb7d22-d0fb-42e3-adcd-b8c930fe71ef'; +update re_us_post_regions set is_po_box = TRUE where id = 'f6eb7d22-d0fb-42e3-adcd-b8c930fe71ef'; +update re_us_post_regions set is_po_box = TRUE where id = '61131671-320e-48bf-904b-a25bd7219e75'; +update re_us_post_regions set is_po_box = TRUE where id = '22e06619-9eed-41bc-8ef6-64335e3c7409'; +update re_us_post_regions set is_po_box = TRUE where id = 'a6d9c11f-a2b3-49d6-8a7f-dc7d68f6bf99'; +update re_us_post_regions set is_po_box = TRUE where id = '9ab9a7a3-f01c-496b-9d17-cf45d88dee75'; +update re_us_post_regions set is_po_box = TRUE where id = '80dfdbbd-32db-40c3-9fc3-f6e25776fad2'; +update re_us_post_regions set is_po_box = TRUE where id = '61e7d577-28a5-47c0-b16f-a3541089608c'; +update re_us_post_regions set is_po_box = TRUE where id = '4bbabe7d-e491-465a-b968-17d92f2fa592'; +update re_us_post_regions set is_po_box = TRUE where id = '7fe04ba1-fb9b-440c-9b80-ac03e9499110'; +update re_us_post_regions set is_po_box = TRUE where id = 'c4902d06-222e-4d8e-bf86-ee35495dff4f'; +update re_us_post_regions set is_po_box = TRUE where id = 'c3226470-0043-46ec-a1a6-29f60d8eedcd'; +update re_us_post_regions set is_po_box = TRUE where id = '69079387-83c1-438d-b098-3e9962d6ed45'; +update re_us_post_regions set is_po_box = TRUE where id = '22313c16-d333-4cb0-8ce6-cb4d6e09d3e6'; +update re_us_post_regions set is_po_box = TRUE where id = '0b842240-764d-4b5a-bcb1-97dbd7c5fd1b'; +update re_us_post_regions set is_po_box = TRUE where id = '0b842240-764d-4b5a-bcb1-97dbd7c5fd1b'; +update re_us_post_regions set is_po_box = TRUE where id = '3309df80-b9fd-4c14-8568-aecd8322cf6d'; +update re_us_post_regions set is_po_box = TRUE where id = '7d39e394-bcc4-4d61-88df-66d576dec95d'; +update re_us_post_regions set is_po_box = TRUE where id = '682ea876-61de-4c87-a011-8f968e4ef50a'; +update re_us_post_regions set is_po_box = TRUE where id = '68e071df-f958-4f45-806a-0afc024507c8'; +update re_us_post_regions set is_po_box = TRUE where id = '301ce21a-d65a-4957-b5c6-9b7d46e61316'; +update re_us_post_regions set is_po_box = TRUE where id = '7714c726-ec67-4eb3-99af-7ccc904b1276'; +update re_us_post_regions set is_po_box = TRUE where id = '248439bf-ea90-4b38-b1ff-e005f4feab79'; +update re_us_post_regions set is_po_box = TRUE where id = 'ed534475-ab70-46d6-8ba3-20fdc9c448d0'; +update re_us_post_regions set is_po_box = TRUE where id = 'a69b4558-be6d-43f8-9e1f-1748b1a3e8d3'; +update re_us_post_regions set is_po_box = TRUE where id = 'a69b4558-be6d-43f8-9e1f-1748b1a3e8d3'; +update re_us_post_regions set is_po_box = TRUE where id = 'a69b4558-be6d-43f8-9e1f-1748b1a3e8d3'; +update re_us_post_regions set is_po_box = TRUE where id = '595dbc7d-1768-4fae-89c0-333a7ff25f74'; +update re_us_post_regions set is_po_box = TRUE where id = '595dbc7d-1768-4fae-89c0-333a7ff25f74'; +update re_us_post_regions set is_po_box = TRUE where id = 'b45e12f0-ecfd-408a-b732-fec2ff464fe5'; +update re_us_post_regions set is_po_box = TRUE where id = '08421c22-4eb8-4812-bc8b-312c34dbbb94'; +update re_us_post_regions set is_po_box = TRUE where id = '08421c22-4eb8-4812-bc8b-312c34dbbb94'; +update re_us_post_regions set is_po_box = TRUE where id = '49f4be64-3cd9-48f7-a92b-0706ea672fe3'; +update re_us_post_regions set is_po_box = TRUE where id = '794a486f-9319-4af7-907b-f417db108ec3'; +update re_us_post_regions set is_po_box = TRUE where id = '22c5f637-93c6-4f8c-8be1-51b936a9b214'; +update re_us_post_regions set is_po_box = TRUE where id = 'abd07713-ad7c-46ac-ad26-256afbee5140'; +update re_us_post_regions set is_po_box = TRUE where id = '048b6331-b8e0-4910-904d-d45e1db55b4f'; +update re_us_post_regions set is_po_box = TRUE where id = 'd9a0e245-66d1-4303-b400-8899041f2fe1'; +update re_us_post_regions set is_po_box = TRUE where id = '5c1120ce-2bfd-46f4-9858-1e7f9b446b9a'; +update re_us_post_regions set is_po_box = TRUE where id = '101c3eac-01b0-40b3-ac59-44a82d1ac5a7'; +update re_us_post_regions set is_po_box = TRUE where id = '101c3eac-01b0-40b3-ac59-44a82d1ac5a7'; +update re_us_post_regions set is_po_box = TRUE where id = '0dfd37e1-bd79-43c2-90de-dcd5d762e654'; +update re_us_post_regions set is_po_box = TRUE where id = '565140eb-d3c6-47ac-aa6e-3562e8c0406f'; +update re_us_post_regions set is_po_box = TRUE where id = 'c7adfcc6-9a4c-4fa6-b61b-3ba8160ed8d6'; +update re_us_post_regions set is_po_box = TRUE where id = 'ae734074-128a-4222-bb9e-99654ec97a1b'; +update re_us_post_regions set is_po_box = TRUE where id = '3f69eb01-72b1-47a3-b338-2d9a49cdff44'; +update re_us_post_regions set is_po_box = TRUE where id = '3f69eb01-72b1-47a3-b338-2d9a49cdff44'; +update re_us_post_regions set is_po_box = TRUE where id = '79c81432-7dd5-47ae-9474-b2a5342dbc3a'; +update re_us_post_regions set is_po_box = TRUE where id = 'b849c47d-2da8-4765-94b9-18e894a378c1'; +update re_us_post_regions set is_po_box = TRUE where id = 'cd305193-e96c-41c3-8c86-198d11e6c611'; +update re_us_post_regions set is_po_box = TRUE where id = 'cd305193-e96c-41c3-8c86-198d11e6c611'; +update re_us_post_regions set is_po_box = TRUE where id = 'cd305193-e96c-41c3-8c86-198d11e6c611'; +update re_us_post_regions set is_po_box = TRUE where id = '038dfd68-1fca-4503-8059-63114f03e533'; +update re_us_post_regions set is_po_box = TRUE where id = '75451ada-a522-4b96-a34b-bf1aaca02dd4'; +update re_us_post_regions set is_po_box = TRUE where id = 'b366e721-57b1-4057-946a-ecb4f15a0999'; +update re_us_post_regions set is_po_box = TRUE where id = '0e9236ac-d739-416f-b035-c2e42ceae177'; +update re_us_post_regions set is_po_box = TRUE where id = '312b5ed8-278a-4f4a-94fc-a1327e89c9cb'; +update re_us_post_regions set is_po_box = TRUE where id = '71896683-1a99-49ae-bdff-b3511a264421'; +update re_us_post_regions set is_po_box = TRUE where id = 'ad6b1b5f-d5ce-41e0-ad64-534bb424de7a'; +update re_us_post_regions set is_po_box = TRUE where id = 'b28e9277-e540-4838-be32-684a26e3f4de'; +update re_us_post_regions set is_po_box = TRUE where id = 'df5806c8-30f4-44bd-867c-29e7bedbc023'; +update re_us_post_regions set is_po_box = TRUE where id = 'df5806c8-30f4-44bd-867c-29e7bedbc023'; +update re_us_post_regions set is_po_box = TRUE where id = 'df5806c8-30f4-44bd-867c-29e7bedbc023'; +update re_us_post_regions set is_po_box = TRUE where id = '55a293e9-f454-4277-b9dc-9d8973822c18'; +update re_us_post_regions set is_po_box = TRUE where id = 'ae89e390-f20a-4599-be16-acb8a6916a7c'; +update re_us_post_regions set is_po_box = TRUE where id = 'ccc11e82-e9bc-4ddb-ab82-7f269e86cb2d'; +update re_us_post_regions set is_po_box = TRUE where id = 'e3340d3c-7100-4112-b676-4c26d0a2c83c'; +update re_us_post_regions set is_po_box = TRUE where id = 'f8f4a118-4413-4222-9e9a-0a6455d058e3'; +update re_us_post_regions set is_po_box = TRUE where id = '531b480b-786d-47fd-884b-0777275398c2'; +update re_us_post_regions set is_po_box = TRUE where id = '531b480b-786d-47fd-884b-0777275398c2'; +update re_us_post_regions set is_po_box = TRUE where id = '531b480b-786d-47fd-884b-0777275398c2'; +update re_us_post_regions set is_po_box = TRUE where id = 'b49878d8-30a5-43bd-82cd-8f38024cc9ad'; +update re_us_post_regions set is_po_box = TRUE where id = '7fda73b0-63dd-4e5e-b6b3-966421041190'; +update re_us_post_regions set is_po_box = TRUE where id = 'da9286e1-ac86-4b82-b765-7996936a4c18'; +update re_us_post_regions set is_po_box = TRUE where id = '581efb59-9157-4bac-8621-9b49a6a7f9b1'; +update re_us_post_regions set is_po_box = TRUE where id = '7df27fe4-5e96-4923-8f01-457427406ae7'; +update re_us_post_regions set is_po_box = TRUE where id = '8db64078-5191-4330-b3df-c7c418599f62'; +update re_us_post_regions set is_po_box = TRUE where id = '7521896f-9903-4987-b5e8-c30fdd814d13'; +update re_us_post_regions set is_po_box = TRUE where id = '9bc7262e-f963-4a9e-9fb5-8a7e357ece88'; +update re_us_post_regions set is_po_box = TRUE where id = 'c75090e4-b7c8-490c-9394-3016cadcaf3b'; +update re_us_post_regions set is_po_box = TRUE where id = '7f67910e-5923-4467-8645-a7292509d599'; +update re_us_post_regions set is_po_box = TRUE where id = '70b974d0-b106-429b-9fc8-1788ec933732'; +update re_us_post_regions set is_po_box = TRUE where id = '8e2b3614-ac87-4599-9b13-89ee87b678c4'; +update re_us_post_regions set is_po_box = TRUE where id = 'de6b9409-bfa8-4102-858e-6450a4e53e30'; +update re_us_post_regions set is_po_box = TRUE where id = '3a771406-e703-4325-8fde-4f39850533ef'; +update re_us_post_regions set is_po_box = TRUE where id = 'bbf6a42c-118e-4537-b248-ac4ebfb9b674'; +update re_us_post_regions set is_po_box = TRUE where id = '8b929b7d-1dc5-4449-b9fb-ea4fd0fa7877'; +update re_us_post_regions set is_po_box = TRUE where id = '5806bb51-1157-47af-9cf6-a32bc6efe432'; +update re_us_post_regions set is_po_box = TRUE where id = '5806bb51-1157-47af-9cf6-a32bc6efe432'; +update re_us_post_regions set is_po_box = TRUE where id = '962ea9e7-2dba-4f3b-b408-0b933e229093'; +update re_us_post_regions set is_po_box = TRUE where id = 'e602521f-46a0-42fb-8f27-811b77aaecb5'; +update re_us_post_regions set is_po_box = TRUE where id = '1bb737b0-63b7-4ded-bf24-9c999a526c5d'; +update re_us_post_regions set is_po_box = TRUE where id = '8451dec2-5ebc-484d-b91a-43dbd52b7af4'; +update re_us_post_regions set is_po_box = TRUE where id = 'a56d2bcf-d23f-4734-8483-5db7ad13b54f'; +update re_us_post_regions set is_po_box = TRUE where id = '3cdca048-1102-4c87-b784-0163b9254103'; +update re_us_post_regions set is_po_box = TRUE where id = '84f7e4cc-8dde-4fc5-aa33-8eee8874d028'; +update re_us_post_regions set is_po_box = TRUE where id = '2989526b-12e1-429a-85bc-00c4da7836a6'; +update re_us_post_regions set is_po_box = TRUE where id = 'd9c8cff7-a953-4e08-9364-c980465b656a'; +update re_us_post_regions set is_po_box = TRUE where id = '5e26b80c-dad7-4942-bb92-30bca4ecb12c'; +update re_us_post_regions set is_po_box = TRUE where id = 'ca78be0e-5aa6-4942-a3b0-9eb266fa073c'; +update re_us_post_regions set is_po_box = TRUE where id = 'ca78be0e-5aa6-4942-a3b0-9eb266fa073c'; +update re_us_post_regions set is_po_box = TRUE where id = '98298842-7aac-4b33-97f2-e68c8b5d7030'; +update re_us_post_regions set is_po_box = TRUE where id = '5d45ac0c-ccb9-4927-9100-79a031792ad7'; +update re_us_post_regions set is_po_box = TRUE where id = 'ad76bdcc-78f4-44a5-aa75-ef7ef45ea1f3'; +update re_us_post_regions set is_po_box = TRUE where id = '3c54309c-5e3c-4603-80b1-c288a266a05f'; +update re_us_post_regions set is_po_box = TRUE where id = '49593505-30b9-4398-88a1-c905cd09a3e2'; +update re_us_post_regions set is_po_box = TRUE where id = '8475f9db-60a8-47e1-ba15-7d9db85236c0'; +update re_us_post_regions set is_po_box = TRUE where id = '77ce0ba7-2c2e-43e6-97a5-cb258fe6dcec'; +update re_us_post_regions set is_po_box = TRUE where id = 'd813373d-924e-44a6-9bb7-6069d7835e8c'; +update re_us_post_regions set is_po_box = TRUE where id = 'd813373d-924e-44a6-9bb7-6069d7835e8c'; +update re_us_post_regions set is_po_box = TRUE where id = '85144817-927e-4e0e-8704-e47e73f4b9d0'; +update re_us_post_regions set is_po_box = TRUE where id = 'fbbc3bb2-b636-408c-afed-27130e03a5c7'; +update re_us_post_regions set is_po_box = TRUE where id = '1e0f7b71-fd2d-4ba9-9f59-54d2f8dacf04'; +update re_us_post_regions set is_po_box = TRUE where id = 'eb8ca575-8565-4a9c-ae5b-b1cf93bff4f7'; +update re_us_post_regions set is_po_box = TRUE where id = '39a3fb8b-a1ae-4f46-82a4-3176e13cc6bb'; +update re_us_post_regions set is_po_box = TRUE where id = '9a0cba45-0b59-4365-ba97-c538dc504001'; +update re_us_post_regions set is_po_box = TRUE where id = '9866eb64-1d0e-4a04-bcbb-f232395aa987'; +update re_us_post_regions set is_po_box = TRUE where id = '0d739516-9022-4edb-88c5-cc940c668205'; +update re_us_post_regions set is_po_box = TRUE where id = 'f9e8fdb3-59aa-4bd5-8842-8bac557b8659'; +update re_us_post_regions set is_po_box = TRUE where id = 'a4c247de-f306-47c6-ba3c-6b25d7acdde4'; +update re_us_post_regions set is_po_box = TRUE where id = '52635502-c28a-4355-aa3f-ec604e160844'; +update re_us_post_regions set is_po_box = TRUE where id = '52635502-c28a-4355-aa3f-ec604e160844'; +update re_us_post_regions set is_po_box = TRUE where id = '5a208172-6a55-4019-a14d-ebd9814d3789'; +update re_us_post_regions set is_po_box = TRUE where id = '5a208172-6a55-4019-a14d-ebd9814d3789'; +update re_us_post_regions set is_po_box = TRUE where id = 'c4c81de6-adf7-4136-a9ec-f2ba38a33966'; +update re_us_post_regions set is_po_box = TRUE where id = 'c4c81de6-adf7-4136-a9ec-f2ba38a33966'; +update re_us_post_regions set is_po_box = TRUE where id = '1766327b-3d8f-4a52-bac8-6b530e31a69c'; +update re_us_post_regions set is_po_box = TRUE where id = 'd2def35e-3514-4b75-ae1d-7b7f0f7c832e'; +update re_us_post_regions set is_po_box = TRUE where id = 'd2def35e-3514-4b75-ae1d-7b7f0f7c832e'; +update re_us_post_regions set is_po_box = TRUE where id = 'd2def35e-3514-4b75-ae1d-7b7f0f7c832e'; +update re_us_post_regions set is_po_box = TRUE where id = 'ddd946ee-5c2a-465f-a730-f70bb7c90375'; +update re_us_post_regions set is_po_box = TRUE where id = 'd84e2160-f34c-4309-8edd-7faae767a84c'; +update re_us_post_regions set is_po_box = TRUE where id = 'd84e2160-f34c-4309-8edd-7faae767a84c'; +update re_us_post_regions set is_po_box = TRUE where id = '6758d56e-cde2-42e1-bd63-e018c4ae8bc7'; +update re_us_post_regions set is_po_box = TRUE where id = 'b8adc4c2-7d1e-442d-9120-2208b5321268'; +update re_us_post_regions set is_po_box = TRUE where id = '1e47eef1-6d61-4f4f-bec2-8b3360b7d701'; +update re_us_post_regions set is_po_box = TRUE where id = '5bfe8970-2a46-4bfa-9851-98883bad3903'; +update re_us_post_regions set is_po_box = TRUE where id = '5bfe8970-2a46-4bfa-9851-98883bad3903'; +update re_us_post_regions set is_po_box = TRUE where id = 'db5b282b-4349-4460-b373-b580c399f25b'; +update re_us_post_regions set is_po_box = TRUE where id = 'a24f378a-7cb6-43bf-b4b3-eb83abfabc20'; +update re_us_post_regions set is_po_box = TRUE where id = 'a24f378a-7cb6-43bf-b4b3-eb83abfabc20'; +update re_us_post_regions set is_po_box = TRUE where id = 'f794f2bb-0b01-4207-84b3-0fb0d539fdb9'; +update re_us_post_regions set is_po_box = TRUE where id = '4b313b5a-2a9b-420e-9a2a-ab27de59d64d'; +update re_us_post_regions set is_po_box = TRUE where id = '349d1359-cd84-46da-b638-40b9bc81df46'; +update re_us_post_regions set is_po_box = TRUE where id = '349d1359-cd84-46da-b638-40b9bc81df46'; +update re_us_post_regions set is_po_box = TRUE where id = '349d1359-cd84-46da-b638-40b9bc81df46'; +update re_us_post_regions set is_po_box = TRUE where id = '11da32a1-ceba-4bf4-a9c0-08faea828ba6'; +update re_us_post_regions set is_po_box = TRUE where id = '11da32a1-ceba-4bf4-a9c0-08faea828ba6'; +update re_us_post_regions set is_po_box = TRUE where id = 'bc6af019-0039-4945-99bb-d80b08d31d0a'; +update re_us_post_regions set is_po_box = TRUE where id = 'f445df2f-f047-46cc-8f48-e958341db68b'; +update re_us_post_regions set is_po_box = TRUE where id = 'fa906d0b-f725-4826-8299-d103fdaa6e79'; +update re_us_post_regions set is_po_box = TRUE where id = '5d582f8c-3332-436c-80e9-aa95010e90c6'; +update re_us_post_regions set is_po_box = TRUE where id = '5d582f8c-3332-436c-80e9-aa95010e90c6'; +update re_us_post_regions set is_po_box = TRUE where id = '844183ac-248c-4930-a23f-336c5cf3f20a'; +update re_us_post_regions set is_po_box = TRUE where id = 'e4806f94-7600-4c76-8472-e497c9753a16'; +update re_us_post_regions set is_po_box = TRUE where id = '11ab791e-a55d-4c83-bf16-9a7c04425782'; +update re_us_post_regions set is_po_box = TRUE where id = '11ab791e-a55d-4c83-bf16-9a7c04425782'; +update re_us_post_regions set is_po_box = TRUE where id = '11ab791e-a55d-4c83-bf16-9a7c04425782'; +update re_us_post_regions set is_po_box = TRUE where id = '9ba9c5e1-ff4d-4756-a3f2-9230b7b85d2c'; +update re_us_post_regions set is_po_box = TRUE where id = 'd3622f08-a459-42cb-9d98-359133ee190e'; +update re_us_post_regions set is_po_box = TRUE where id = 'd3622f08-a459-42cb-9d98-359133ee190e'; +update re_us_post_regions set is_po_box = TRUE where id = 'c486902d-bdb0-41f5-9b42-e971b0efbc6d'; +update re_us_post_regions set is_po_box = TRUE where id = 'e49a4876-427c-4569-9396-86959fa9f44b'; +update re_us_post_regions set is_po_box = TRUE where id = 'e9483c11-ae61-4432-a5f7-d36d40528ebb'; +update re_us_post_regions set is_po_box = TRUE where id = 'aeddaf2b-da46-464b-8ae9-7cc970b2f0ea'; +update re_us_post_regions set is_po_box = TRUE where id = 'e436d3c5-44d6-4733-9e1d-6f3760e5a04e'; +update re_us_post_regions set is_po_box = TRUE where id = 'af5430d7-b694-4ecd-a3c5-de60fc482541'; +update re_us_post_regions set is_po_box = TRUE where id = 'af5430d7-b694-4ecd-a3c5-de60fc482541'; +update re_us_post_regions set is_po_box = TRUE where id = 'f360f6ab-5ab4-4a18-9ea3-5c0b8cbec75b'; +update re_us_post_regions set is_po_box = TRUE where id = 'f360f6ab-5ab4-4a18-9ea3-5c0b8cbec75b'; +update re_us_post_regions set is_po_box = TRUE where id = 'e2cdf779-b87b-4d1c-95a9-554a7b8f936c'; +update re_us_post_regions set is_po_box = TRUE where id = 'e2cdf779-b87b-4d1c-95a9-554a7b8f936c'; +update re_us_post_regions set is_po_box = TRUE where id = 'e2cdf779-b87b-4d1c-95a9-554a7b8f936c'; +update re_us_post_regions set is_po_box = TRUE where id = '061a1705-1ddf-45ab-91ec-9380f18177ac'; +update re_us_post_regions set is_po_box = TRUE where id = 'f86cbcfe-cdbc-40ef-a549-af7118c2570a'; +update re_us_post_regions set is_po_box = TRUE where id = 'b0b4f176-028b-4f13-8f8a-ce951dad4bfa'; +update re_us_post_regions set is_po_box = TRUE where id = '443132f5-5c10-4f6e-a0fa-f55374993109'; +update re_us_post_regions set is_po_box = TRUE where id = '443132f5-5c10-4f6e-a0fa-f55374993109'; +update re_us_post_regions set is_po_box = TRUE where id = '981ed536-368c-4beb-83a0-1b8153dbc7d6'; +update re_us_post_regions set is_po_box = TRUE where id = 'e7278491-5d46-4b6d-94a1-938e27d4456a'; +update re_us_post_regions set is_po_box = TRUE where id = '5b94cb81-b1c2-4a03-87e3-51d813356c32'; +update re_us_post_regions set is_po_box = TRUE where id = '3064b719-56e9-4cf5-af34-f2e1ff9cb6ab'; +update re_us_post_regions set is_po_box = TRUE where id = '76f65df1-3316-45bb-9212-001d2f0a902c'; +update re_us_post_regions set is_po_box = TRUE where id = 'f2739854-503e-4345-bc4f-0bddd56e4b92'; +update re_us_post_regions set is_po_box = TRUE where id = '640d43e9-e7c7-4b0f-911a-772f383d916e'; +update re_us_post_regions set is_po_box = TRUE where id = '640d43e9-e7c7-4b0f-911a-772f383d916e'; +update re_us_post_regions set is_po_box = TRUE where id = '640d43e9-e7c7-4b0f-911a-772f383d916e'; +update re_us_post_regions set is_po_box = TRUE where id = '316ae7f7-afe9-4105-93a8-0f66d52546fb'; +update re_us_post_regions set is_po_box = TRUE where id = '3678182c-4ffd-4fb2-a4b8-1ea6ce42d836'; +update re_us_post_regions set is_po_box = TRUE where id = '3678182c-4ffd-4fb2-a4b8-1ea6ce42d836'; +update re_us_post_regions set is_po_box = TRUE where id = 'de26219e-7701-42fb-a4b9-47cc63a6adb0'; +update re_us_post_regions set is_po_box = TRUE where id = '7894957d-efd5-49e1-88d1-0388c668fba9'; +update re_us_post_regions set is_po_box = TRUE where id = '1d908327-ad96-4126-8d24-602a38b432c8'; +update re_us_post_regions set is_po_box = TRUE where id = '641acae8-fc57-4b7c-9494-db0d297100d1'; +update re_us_post_regions set is_po_box = TRUE where id = 'db65767b-0425-4414-b1f1-3456e3d7a46c'; +update re_us_post_regions set is_po_box = TRUE where id = '6af8d8cf-80d1-484b-9cdd-2b77943a4802'; +update re_us_post_regions set is_po_box = TRUE where id = '148024c3-0bb4-4b6c-b83f-c44ab20a1452'; +update re_us_post_regions set is_po_box = TRUE where id = '148024c3-0bb4-4b6c-b83f-c44ab20a1452'; +update re_us_post_regions set is_po_box = TRUE where id = '070c2fe4-f8f9-478d-ade0-1460c3fef3d6'; +update re_us_post_regions set is_po_box = TRUE where id = '409b9233-5e13-4b43-b86b-96862d81d8aa'; +update re_us_post_regions set is_po_box = TRUE where id = '96db9485-a082-4d53-9491-8df65bb76926'; +update re_us_post_regions set is_po_box = TRUE where id = 'c8a9c3c1-e92d-4f68-b7fc-fad8f287c105'; +update re_us_post_regions set is_po_box = TRUE where id = 'ef43ea7a-a98b-454e-bff1-c40d09820c16'; +update re_us_post_regions set is_po_box = TRUE where id = 'fb0186aa-4c3a-4bc2-bfb8-7db92876a8e1'; +update re_us_post_regions set is_po_box = TRUE where id = '102fb63f-2a03-49e8-82b6-a822f3261199'; +update re_us_post_regions set is_po_box = TRUE where id = '3c8984f1-d508-40ae-8186-9e9dc1a89a90'; +update re_us_post_regions set is_po_box = TRUE where id = 'fbda2b31-6757-4d20-ac20-ae18b0e7c728'; +update re_us_post_regions set is_po_box = TRUE where id = 'd2f917e7-8099-4015-895e-aea79372580c'; +update re_us_post_regions set is_po_box = TRUE where id = '5edadfc6-6b8b-48cc-a044-dac19102b7bd'; +update re_us_post_regions set is_po_box = TRUE where id = '00490bac-4b94-4d8b-b93b-9172b3e46ec3'; +update re_us_post_regions set is_po_box = TRUE where id = '33a2ed7e-0b78-45cb-9aa6-1ca0d605ed11'; +update re_us_post_regions set is_po_box = TRUE where id = '33a2ed7e-0b78-45cb-9aa6-1ca0d605ed11'; +update re_us_post_regions set is_po_box = TRUE where id = '33a2ed7e-0b78-45cb-9aa6-1ca0d605ed11'; +update re_us_post_regions set is_po_box = TRUE where id = '567c1dec-c174-4c40-8ebf-ca0a00f25bcc'; +update re_us_post_regions set is_po_box = TRUE where id = 'fbb96bbc-9fb8-4bf8-bda1-bd8bb711d2f7'; +update re_us_post_regions set is_po_box = TRUE where id = 'd718a487-cf13-4b40-92e4-98e334948437'; +update re_us_post_regions set is_po_box = TRUE where id = 'd718a487-cf13-4b40-92e4-98e334948437'; +update re_us_post_regions set is_po_box = TRUE where id = 'd718a487-cf13-4b40-92e4-98e334948437'; +update re_us_post_regions set is_po_box = TRUE where id = 'f076dded-c5d8-42e1-941b-4222236db271'; +update re_us_post_regions set is_po_box = TRUE where id = '7b8f5602-aa81-4dea-9d19-152a66c835bb'; +update re_us_post_regions set is_po_box = TRUE where id = '7b8f5602-aa81-4dea-9d19-152a66c835bb'; +update re_us_post_regions set is_po_box = TRUE where id = '0e89b3bb-1563-493c-b21d-59d8f3cee3ea'; +update re_us_post_regions set is_po_box = TRUE where id = 'fbfd4584-482c-4b1a-a5b3-85ceeba14cff'; \ No newline at end of file diff --git a/migrations/app/schema/20241226173330_add_intl_param_values_to_service_params_table.up.sql b/migrations/app/schema/20241226173330_add_intl_param_values_to_service_params_table.up.sql new file mode 100644 index 00000000000..1186b75a7b2 --- /dev/null +++ b/migrations/app/schema/20241226173330_add_intl_param_values_to_service_params_table.up.sql @@ -0,0 +1,115 @@ +-- dropping function that is not needed anymore +DROP FUNCTION IF EXISTS get_rate_area_id(UUID, UUID); + +-- need to add in param keys for international shipments, this will be used to show breakdowns to the TIO +INSERT INTO service_item_param_keys (id, key,description,type,origin,created_at,updated_at) VALUES + ('d9ad3878-4b94-4722-bbaf-d4b8080f339d','PortZip','ZIP of the port for an international shipment pickup or destination port','STRING','SYSTEM','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957'), + ('597bb77e-0ce7-4ba2-9624-24300962625f','PerUnitCents','Per unit cents for a service item','INTEGER','SYSTEM','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957'); + +-- inserting params for PODFSC +INSERT INTO service_params (id,service_id,service_item_param_key_id,created_at,updated_at,is_optional) VALUES + ('9848562b-50c1-4e6e-aef0-f9539bf243fa'::uuid,'388115e8-abe9-441d-96cf-a39f24baa0a3','adeb57e5-6b1c-4c0f-b5c9-9e57e600303f','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',false), + ('9c244768-07ce-4368-936b-0ac14a8078a4'::uuid,'388115e8-abe9-441d-96cf-a39f24baa0a3','14a93209-370d-42f3-8ca2-479c953be839','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',false), + ('5668accf-afac-46a3-b097-177b74076fc9'::uuid,'388115e8-abe9-441d-96cf-a39f24baa0a3','54c9cc4e-0d46-4956-b92e-be9847f894de','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',false), + ('0e8bd8d5-40fd-46fb-8228-5b66088681a2'::uuid,'388115e8-abe9-441d-96cf-a39f24baa0a3','b9739817-6408-4829-8719-1e26f8a9ceb3','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',false), + ('a22090b4-3ce6-448d-82b0-36592655d822'::uuid,'388115e8-abe9-441d-96cf-a39f24baa0a3','117da2f5-fff0-41e0-bba1-837124373098','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',false), + ('d59c674a-eaf9-4158-8303-dbcb50a7230b'::uuid,'388115e8-abe9-441d-96cf-a39f24baa0a3','6ba0aeca-19f8-4247-a317-fffa81c5d5c1','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',false), + ('450dad51-dcc9-4258-ba56-db39de6a8637'::uuid,'388115e8-abe9-441d-96cf-a39f24baa0a3','0c95581d-67de-48ae-a54b-a3748851d613','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',false), + ('bf006fc0-8f33-4553-b567-a529af04eafe'::uuid,'388115e8-abe9-441d-96cf-a39f24baa0a3','45fce5ce-6a4c-4a6c-ab37-16ee0133628c','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',false), + ('ad005c4b-dd71-4d42-99d8-95de7b1ed571'::uuid,'388115e8-abe9-441d-96cf-a39f24baa0a3','e6096350-9ac4-40aa-90c4-bbdff6e0b194','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',false), + ('274356bc-8139-4e34-9332-ce7396f42c79'::uuid,'388115e8-abe9-441d-96cf-a39f24baa0a3','a1d31d35-c87d-4a7d-b0b8-8b2646b96e43','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',false), + ('aa68a318-fe17-445c-ab53-0505fe48d0bb'::uuid,'388115e8-abe9-441d-96cf-a39f24baa0a3','b79978a7-21b7-4656-af83-25585acffb20','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',true), + ('882e7978-9754-4c8e-bb71-8fe4f4059503'::uuid,'388115e8-abe9-441d-96cf-a39f24baa0a3','d87d82da-3ac2-44e8-bce0-cb4de40f9a72','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',true), + ('8fc4571d-235b-4d4f-90e4-77e7ad9250d5'::uuid,'388115e8-abe9-441d-96cf-a39f24baa0a3','1e6257e9-757d-4d59-8846-727dd8a055e7','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',true), + ('836606ce-894e-4765-bba5-b696cb5fe8cc'::uuid,'388115e8-abe9-441d-96cf-a39f24baa0a3','2cbc2251-eb7d-4c69-a120-9a83785c994b','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',false), + ('08701fa6-6352-4808-88b6-1fe103068f29'::uuid,'388115e8-abe9-441d-96cf-a39f24baa0a3','d9ad3878-4b94-4722-bbaf-d4b8080f339d','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',false); + +-- inserting params for POEFSC +INSERT INTO service_params (id,service_id,service_item_param_key_id,created_at,updated_at,is_optional) VALUES + ('a57c01b1-cb1c-40f7-87e0-99d1dfd69902'::uuid,'f75758d8-2fcd-40ba-9432-3ff3032a71d1','adeb57e5-6b1c-4c0f-b5c9-9e57e600303f','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',false), + ('8f49b289-c1d0-438d-b9fc-3cb234167987'::uuid,'f75758d8-2fcd-40ba-9432-3ff3032a71d1','14a93209-370d-42f3-8ca2-479c953be839','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',false), + ('46742d5d-dde9-4e3c-9e59-f2cf87ff016a'::uuid,'f75758d8-2fcd-40ba-9432-3ff3032a71d1','54c9cc4e-0d46-4956-b92e-be9847f894de','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',false), + ('f6e178a9-5de3-4312-87c5-81d88ae0b45b'::uuid,'f75758d8-2fcd-40ba-9432-3ff3032a71d1','b9739817-6408-4829-8719-1e26f8a9ceb3','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',false), + ('34d4c1a3-b218-4083-93b5-cbbc57688594'::uuid,'f75758d8-2fcd-40ba-9432-3ff3032a71d1','117da2f5-fff0-41e0-bba1-837124373098','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',false), + ('6b07db8d-9f7a-4d33-9a5f-7d98fc7038f1'::uuid,'f75758d8-2fcd-40ba-9432-3ff3032a71d1','6ba0aeca-19f8-4247-a317-fffa81c5d5c1','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',false), + ('9d8cc94b-4d5f-4c62-b9db-b87bb0213b8d'::uuid,'f75758d8-2fcd-40ba-9432-3ff3032a71d1','0c95581d-67de-48ae-a54b-a3748851d613','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',false), + ('d63a9079-c99b-4d92-864f-46cc9bb18388'::uuid,'f75758d8-2fcd-40ba-9432-3ff3032a71d1','45fce5ce-6a4c-4a6c-ab37-16ee0133628c','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',false), + ('625970f9-7c93-4c3d-97fe-62f5a9d598f1'::uuid,'f75758d8-2fcd-40ba-9432-3ff3032a71d1','e6096350-9ac4-40aa-90c4-bbdff6e0b194','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',false), + ('34fa9839-8289-473a-9095-c2b1159ef5d3'::uuid,'f75758d8-2fcd-40ba-9432-3ff3032a71d1','a1d31d35-c87d-4a7d-b0b8-8b2646b96e43','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',false), + ('f747f231-66f5-4a52-bb71-8d7b5f618d23'::uuid,'f75758d8-2fcd-40ba-9432-3ff3032a71d1','b79978a7-21b7-4656-af83-25585acffb20','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',true), + ('0177f93a-15f6-41e5-a3ca-dc8f5bb727ab'::uuid,'f75758d8-2fcd-40ba-9432-3ff3032a71d1','d87d82da-3ac2-44e8-bce0-cb4de40f9a72','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',true), + ('cbf5b41f-2d89-4284-858f-d2cda7b060f7'::uuid,'f75758d8-2fcd-40ba-9432-3ff3032a71d1','1e6257e9-757d-4d59-8846-727dd8a055e7','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',true), + ('ebed3001-93f1-49ba-a935-3d463b0d76fc'::uuid,'f75758d8-2fcd-40ba-9432-3ff3032a71d1','2cbc2251-eb7d-4c69-a120-9a83785c994b','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',false), + ('aa7c3492-be44-46dd-983e-478623edc0be'::uuid,'f75758d8-2fcd-40ba-9432-3ff3032a71d1','d9ad3878-4b94-4722-bbaf-d4b8080f339d','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',false); + + +-- inserting params for ISLH +INSERT INTO service_params (id,service_id,service_item_param_key_id,created_at,updated_at,is_optional) VALUES + ('7e2e4b79-2f4c-451e-a28f-df1ad61c4f3b'::uuid,'9f3d551a-0725-430e-897e-80ee9add3ae9','164050e3-e35b-480d-bf6e-ed2fab86f370','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',true), + ('adff4edb-1f78-45de-9269-29016d09d597'::uuid,'9f3d551a-0725-430e-897e-80ee9add3ae9','e6096350-9ac4-40aa-90c4-bbdff6e0b194','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',false), + ('2239c77e-e073-47f3-aed7-e1edc6b8a9a4'::uuid,'9f3d551a-0725-430e-897e-80ee9add3ae9','45fce5ce-6a4c-4a6c-ab37-16ee0133628c','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',false), + ('53ab68f9-8da7-48fa-80ac-bf91f05a4650'::uuid,'9f3d551a-0725-430e-897e-80ee9add3ae9','b9739817-6408-4829-8719-1e26f8a9ceb3','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',false), + ('e9d3bc63-bc4a-43d0-98f1-48e3e51d2307'::uuid,'9f3d551a-0725-430e-897e-80ee9add3ae9','0c95581d-67de-48ae-a54b-a3748851d613','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',false), + ('6632cbad-3fa0-46b8-a1ac-0b2bb5123401'::uuid,'9f3d551a-0725-430e-897e-80ee9add3ae9','b79978a7-21b7-4656-af83-25585acffb20','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',true), + ('4ef58b87-8a93-44ec-b5c8-5b5779d8392e'::uuid,'9f3d551a-0725-430e-897e-80ee9add3ae9','599bbc21-8d1d-4039-9a89-ff52e3582144','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',false), + ('d53e5f61-e92f-4ecb-9e1d-72ab8a99790f'::uuid,'9f3d551a-0725-430e-897e-80ee9add3ae9','a335e38a-7d95-4ba3-9c8b-75a5e00948bc','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',true), + ('d94d2c5e-e91a-47d1-96b3-1c5d68a745dd'::uuid,'9f3d551a-0725-430e-897e-80ee9add3ae9','b03af5dc-7701-4e22-a986-d1889a2a8f27','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',true), + ('7b8db256-e881-451e-a722-6431784e957f'::uuid,'9f3d551a-0725-430e-897e-80ee9add3ae9','add5114b-2a23-4e23-92b3-6dd0778dfc33','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',true), + ('fedbd62d-d2fa-42b1-b6f6-c9c07e8c4014'::uuid,'9f3d551a-0725-430e-897e-80ee9add3ae9','a1d31d35-c87d-4a7d-b0b8-8b2646b96e43','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',false), + ('c7a66e66-dabe-4f0b-a70d-f9639e87761a'::uuid,'9f3d551a-0725-430e-897e-80ee9add3ae9','2e091a7d-a1fd-4017-9f2d-73ad752a30c2','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',false), + ('18f8b39f-37a5-4536-85d8-4b8b0a6bff94'::uuid,'9f3d551a-0725-430e-897e-80ee9add3ae9','739bbc23-cd08-4612-8e5d-da992202344e','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',false), + ('7f20ed2e-1bdf-4370-b028-1251c07d3da1'::uuid,'9f3d551a-0725-430e-897e-80ee9add3ae9','95ee2e21-b232-4d74-9ec5-218564a8a8b9','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',false), + ('a5be6b6f-e007-4d9f-8b1b-63e8ed5c4337'::uuid,'9f3d551a-0725-430e-897e-80ee9add3ae9','9de7fd2a-75c7-4c5c-ba5d-1a92f0b2f5f4','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',false), + ('df5665d7-7b3d-487d-9d71-95d0e2832ae1'::uuid,'9f3d551a-0725-430e-897e-80ee9add3ae9','d87d82da-3ac2-44e8-bce0-cb4de40f9a72','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',true), + ('c08f7ab1-6c3c-4627-b22f-1e987ba6f4f2'::uuid,'9f3d551a-0725-430e-897e-80ee9add3ae9','1e6257e9-757d-4d59-8846-727dd8a055e7','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',true), + ('4d9ed9b0-957d-4e6a-a3d4-5e2e2784ef62'::uuid,'9f3d551a-0725-430e-897e-80ee9add3ae9','14a93209-370d-42f3-8ca2-479c953be839','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',true), + ('6acb30b9-65a0-4902-85ed-1acb6f4ac930'::uuid,'9f3d551a-0725-430e-897e-80ee9add3ae9','5335e243-ab5b-4906-b84f-bd8c35ba64b3','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',false), + ('fd83c2ba-0c59-4598-81d6-b56cc8d9979d'::uuid,'9f3d551a-0725-430e-897e-80ee9add3ae9','2cbc2251-eb7d-4c69-a120-9a83785c994b','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',false), + ('b370c895-e356-4d2c-a200-c2c67ac51011'::uuid,'9f3d551a-0725-430e-897e-80ee9add3ae9','597bb77e-0ce7-4ba2-9624-24300962625f','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',false); + +-- inserting params fo IOSFSC +INSERT INTO service_params (id,service_id,service_item_param_key_id,created_at,updated_at,is_optional) VALUES + ('f61ab040-dab4-4505-906d-d9a3a5da3515'::uuid,'81e29d0c-02a6-4a7a-be02-554deb3ee49e','0c95581d-67de-48ae-a54b-a3748851d613','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',false), + ('421053c8-7b4a-44fc-8c73-14b72755c1f7'::uuid,'81e29d0c-02a6-4a7a-be02-554deb3ee49e','117da2f5-fff0-41e0-bba1-837124373098','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',false), + ('8f8a8783-0ca2-4f0f-961f-07d1e3cdbf64'::uuid,'81e29d0c-02a6-4a7a-be02-554deb3ee49e','14a93209-370d-42f3-8ca2-479c953be839','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',false), + ('ab332c8f-f46e-4d49-b29a-6adf7e67f9c7'::uuid,'81e29d0c-02a6-4a7a-be02-554deb3ee49e','1e6257e9-757d-4d59-8846-727dd8a055e7','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',true), + ('a6e24b83-9cb4-4e56-9e38-7bdbd9d5c5fe'::uuid,'81e29d0c-02a6-4a7a-be02-554deb3ee49e','84d86517-9b88-4520-8d67-5ba892b85d10','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',false), + ('4e05a7c7-bd0a-4c94-a99b-f052a8812aef'::uuid,'81e29d0c-02a6-4a7a-be02-554deb3ee49e','54c9cc4e-0d46-4956-b92e-be9847f894de','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',false), + ('8ec5cd5d-d249-42e9-b11d-76a243d4045f'::uuid,'81e29d0c-02a6-4a7a-be02-554deb3ee49e','6ba0aeca-19f8-4247-a317-fffa81c5d5c1','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',false), + ('2b6b9d89-65f3-4291-9e44-48d18d2a4070'::uuid,'81e29d0c-02a6-4a7a-be02-554deb3ee49e','a1d31d35-c87d-4a7d-b0b8-8b2646b96e43','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',false), + ('a3d3c08f-d2a3-4ad1-b85f-b1daee12d71c'::uuid,'81e29d0c-02a6-4a7a-be02-554deb3ee49e','adeb57e5-6b1c-4c0f-b5c9-9e57e600303f','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',false), + ('94d45661-82ac-479f-b7be-8e7a50ad46db'::uuid,'81e29d0c-02a6-4a7a-be02-554deb3ee49e','b79978a7-21b7-4656-af83-25585acffb20','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',true), + ('c897cfa3-9b06-47b5-8e12-522f0897e59a'::uuid,'81e29d0c-02a6-4a7a-be02-554deb3ee49e','b9739817-6408-4829-8719-1e26f8a9ceb3','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',false), + ('61832b60-2a2d-4e35-a799-b7ff9fa6a01e'::uuid,'81e29d0c-02a6-4a7a-be02-554deb3ee49e','d87d82da-3ac2-44e8-bce0-cb4de40f9a72','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',true), + ('46531d32-91a5-4d98-a206-d0f1e14e2ff4'::uuid,'81e29d0c-02a6-4a7a-be02-554deb3ee49e','cd6d6ddf-7104-4d24-a8d6-d37fed61defe','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',false), + ('a1d4f95e-f28f-4b6a-b83f-8f328f2b2498'::uuid,'81e29d0c-02a6-4a7a-be02-554deb3ee49e','f9753611-4b3e-4bf5-8e00-6d9ce9900f50','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',false); + + +-- inserting params fo IDSFSC +INSERT INTO service_params (id,service_id,service_item_param_key_id,created_at,updated_at,is_optional) VALUES + ('25d90d5b-c58f-45e7-8c60-e7f63a0535b6'::uuid,'690a5fc1-0ea5-4554-8294-a367b5daefa9','0c95581d-67de-48ae-a54b-a3748851d613','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',false), + ('8bb29da3-32e7-4e98-b241-63b8c8c81c3b'::uuid,'690a5fc1-0ea5-4554-8294-a367b5daefa9','117da2f5-fff0-41e0-bba1-837124373098','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',false), + ('b8c12287-dcf6-4f88-bf7b-f7e99283f23d'::uuid,'690a5fc1-0ea5-4554-8294-a367b5daefa9','14a93209-370d-42f3-8ca2-479c953be839','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',false), + ('3b9f3eab-8e18-4888-81f4-c442b4e951cf'::uuid,'690a5fc1-0ea5-4554-8294-a367b5daefa9','1e6257e9-757d-4d59-8846-727dd8a055e7','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',true), + ('7a8430f7-ff55-4a80-b174-e1d4a2f21f25'::uuid,'690a5fc1-0ea5-4554-8294-a367b5daefa9','70eecf7f-beae-4906-95ba-cbfe6797cf3a','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',false), + ('2eaf2e5b-254e-48f0-a2c5-98d04087293f'::uuid,'690a5fc1-0ea5-4554-8294-a367b5daefa9','54c9cc4e-0d46-4956-b92e-be9847f894de','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',false), + ('71f571c5-99a0-420a-b375-bb859e3488a2'::uuid,'690a5fc1-0ea5-4554-8294-a367b5daefa9','6ba0aeca-19f8-4247-a317-fffa81c5d5c1','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',false), + ('cce73f9e-e3db-4d7f-a908-d9985f1b3f27'::uuid,'690a5fc1-0ea5-4554-8294-a367b5daefa9','a1d31d35-c87d-4a7d-b0b8-8b2646b96e43','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',false), + ('46c559e5-9f49-4b7e-98b6-b9d8e2a4e2cf'::uuid,'690a5fc1-0ea5-4554-8294-a367b5daefa9','adeb57e5-6b1c-4c0f-b5c9-9e57e600303f','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',false), + ('4512b905-cb68-4087-90b5-74e80ba9ec16'::uuid,'690a5fc1-0ea5-4554-8294-a367b5daefa9','b79978a7-21b7-4656-af83-25585acffb20','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',true), + ('d9887f60-e930-4f95-b53e-e9f0d8a445d3'::uuid,'690a5fc1-0ea5-4554-8294-a367b5daefa9','b9739817-6408-4829-8719-1e26f8a9ceb3','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',false), + ('f65b54fa-0e1c-45cc-b7f4-b41d356b970d'::uuid,'690a5fc1-0ea5-4554-8294-a367b5daefa9','d87d82da-3ac2-44e8-bce0-cb4de40f9a72','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',true), + ('ce36b6e0-bcbf-4e96-9c5e-bd93fe9084c9'::uuid,'690a5fc1-0ea5-4554-8294-a367b5daefa9','cd6d6ddf-7104-4d24-a8d6-d37fed61defe','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',false), + ('d9acb388-09a5-464b-bb50-bf418b25e96a'::uuid,'690a5fc1-0ea5-4554-8294-a367b5daefa9','f9753611-4b3e-4bf5-8e00-6d9ce9900f50','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',false); + +-- inserting params fo IHPK +INSERT INTO service_params (id,service_id,service_item_param_key_id,created_at,updated_at,is_optional) VALUES + ('d9acb388-09a5-464b-bb50-bf418b25e96b'::uuid,'67ba1eaf-6ffd-49de-9a69-497be7789877','a1d31d35-c87d-4a7d-b0b8-8b2646b96e43','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',false), -- ContractCode + ('0b31db7a-fbab-4e49-8526-00458ac3900c'::uuid,'67ba1eaf-6ffd-49de-9a69-497be7789877','597bb77e-0ce7-4ba2-9624-24300962625f','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',false), -- PerUnitCents + ('9b0a74e3-afc4-4f42-8eb3-828f80fbfaf0'::uuid,'67ba1eaf-6ffd-49de-9a69-497be7789877','95ee2e21-b232-4d74-9ec5-218564a8a8b9','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',false); -- IsPeak + +-- inserting params fo IHUPK +INSERT INTO service_params (id,service_id,service_item_param_key_id,created_at,updated_at,is_optional) VALUES + ('cb110853-6b1d-452b-9607-345721a70313'::uuid,'56e91c2d-015d-4243-9657-3ed34867abaa','a1d31d35-c87d-4a7d-b0b8-8b2646b96e43','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',false), -- ContractCode + ('cc95d5df-1167-4fe9-8682-07f8fbe7c286'::uuid,'56e91c2d-015d-4243-9657-3ed34867abaa','597bb77e-0ce7-4ba2-9624-24300962625f','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',false), -- PerUnitCents + ('759bd482-b2f6-461b-a898-792415efa5f1'::uuid,'56e91c2d-015d-4243-9657-3ed34867abaa','95ee2e21-b232-4d74-9ec5-218564a8a8b9','2024-12-26 15:55:50.041957','2024-12-26 15:55:50.041957',false); -- IsPeak diff --git a/pkg/factory/address_factory.go b/pkg/factory/address_factory.go index 91a49da4445..27d92999d00 100644 --- a/pkg/factory/address_factory.go +++ b/pkg/factory/address_factory.go @@ -1,7 +1,10 @@ package factory import ( + "database/sql" + "github.com/gobuffalo/pop/v6" + "github.com/gofrs/uuid" "github.com/transcom/mymove/pkg/models" "github.com/transcom/mymove/pkg/testdatagen" @@ -24,15 +27,17 @@ func BuildAddress(db *pop.Connection, customs []Customization, traits []Trait) m } // Create default Address + beverlyHillsUsprc := uuid.FromStringOrNil("3b9f0ae6-3b2b-44a6-9fcd-8ead346648c4") address := models.Address{ - StreetAddress1: "123 Any Street", - StreetAddress2: models.StringPointer("P.O. Box 12345"), - StreetAddress3: models.StringPointer("c/o Some Person"), - City: "Beverly Hills", - State: "CA", - PostalCode: "90210", - County: models.StringPointer("LOS ANGELES"), - IsOconus: models.BoolPointer(false), + StreetAddress1: "123 Any Street", + StreetAddress2: models.StringPointer("P.O. Box 12345"), + StreetAddress3: models.StringPointer("c/o Some Person"), + City: "Beverly Hills", + State: "CA", + PostalCode: "90210", + County: models.StringPointer("LOS ANGELES"), + IsOconus: models.BoolPointer(false), + UsPostRegionCityID: &beverlyHillsUsprc, } // Find/create the Country if customization is provided @@ -56,7 +61,7 @@ func BuildAddress(db *pop.Connection, customs []Customization, traits []Trait) m // Overwrite values with those from customizations testdatagen.MergeModels(&address, cAddress) - // This helps assign counties when the factory is called for seed data or tests + // This helps assign counties & us_post_region_cities_id values when the factory is called for seed data or tests // Additionally, also only run if not 90210. 90210's county is by default populated if db != nil && address.PostalCode != "90210" { county, err := models.FindCountyByZipCode(db, address.PostalCode) @@ -72,6 +77,17 @@ func BuildAddress(db *pop.Connection, customs []Customization, traits []Trait) m address.County = models.StringPointer("db nil when created") } + if db != nil && address.PostalCode != "90210" && cAddress.UsPostRegionCityID == nil { + usprc, err := models.FindByZipCode(db, address.PostalCode) + if err != nil && err != sql.ErrNoRows { + address.UsPostRegionCityID = nil + address.UsPostRegionCity = nil + } else if usprc.ID != uuid.Nil { + address.UsPostRegionCityID = &usprc.ID + address.UsPostRegionCity = usprc + } + } + // If db is false, it's a stub. No need to create in database. if db != nil { mustCreate(db, &address) diff --git a/pkg/factory/address_factory_test.go b/pkg/factory/address_factory_test.go index 2e17e564605..7f72a13e9b6 100644 --- a/pkg/factory/address_factory_test.go +++ b/pkg/factory/address_factory_test.go @@ -40,6 +40,7 @@ func (suite *FactorySuite) TestBuildAddress() { suite.Equal(defaultPostalCode, address.PostalCode) suite.Equal(country.ID, *address.CountryId) suite.Equal(defaultCounty, *address.County) + suite.NotNil(*address.UsPostRegionCityID) }) suite.Run("Successful creation of an address with customization", func() { diff --git a/pkg/gen/ghcapi/embedded_spec.go b/pkg/gen/ghcapi/embedded_spec.go index bedc53f5951..4019c4f3ff9 100644 --- a/pkg/gen/ghcapi/embedded_spec.go +++ b/pkg/gen/ghcapi/embedded_spec.go @@ -6403,6 +6403,11 @@ func init() { "x-nullable": true, "example": "LOS ANGELES" }, + "destinationGbloc": { + "type": "string", + "pattern": "^[A-Z]{4}$", + "x-nullable": true + }, "eTag": { "type": "string", "readOnly": true @@ -23151,6 +23156,11 @@ func init() { "x-nullable": true, "example": "LOS ANGELES" }, + "destinationGbloc": { + "type": "string", + "pattern": "^[A-Z]{4}$", + "x-nullable": true + }, "eTag": { "type": "string", "readOnly": true diff --git a/pkg/gen/ghcmessages/address.go b/pkg/gen/ghcmessages/address.go index 47148e32cf7..42bd1d8d69e 100644 --- a/pkg/gen/ghcmessages/address.go +++ b/pkg/gen/ghcmessages/address.go @@ -36,6 +36,10 @@ type Address struct { // Example: LOS ANGELES County *string `json:"county,omitempty"` + // destination gbloc + // Pattern: ^[A-Z]{4}$ + DestinationGbloc *string `json:"destinationGbloc,omitempty"` + // e tag // Read Only: true ETag string `json:"eTag,omitempty"` @@ -91,6 +95,10 @@ func (m *Address) Validate(formats strfmt.Registry) error { res = append(res, err) } + if err := m.validateDestinationGbloc(formats); err != nil { + res = append(res, err) + } + if err := m.validateID(formats); err != nil { res = append(res, err) } @@ -138,6 +146,18 @@ func (m *Address) validateCountry(formats strfmt.Registry) error { return nil } +func (m *Address) validateDestinationGbloc(formats strfmt.Registry) error { + if swag.IsZero(m.DestinationGbloc) { // not required + return nil + } + + if err := validate.Pattern("destinationGbloc", "body", *m.DestinationGbloc, `^[A-Z]{4}$`); err != nil { + return err + } + + return nil +} + func (m *Address) validateID(formats strfmt.Registry) error { if swag.IsZero(m.ID) { // not required return nil diff --git a/pkg/gen/internalapi/embedded_spec.go b/pkg/gen/internalapi/embedded_spec.go index c1351734062..53aee4aa8cf 100644 --- a/pkg/gen/internalapi/embedded_spec.go +++ b/pkg/gen/internalapi/embedded_spec.go @@ -3363,6 +3363,11 @@ func init() { "x-nullable": true, "example": "LOS ANGELES" }, + "destinationGbloc": { + "type": "string", + "pattern": "^[A-Z]{4}$", + "x-nullable": true + }, "eTag": { "type": "string", "readOnly": true @@ -12482,6 +12487,11 @@ func init() { "x-nullable": true, "example": "LOS ANGELES" }, + "destinationGbloc": { + "type": "string", + "pattern": "^[A-Z]{4}$", + "x-nullable": true + }, "eTag": { "type": "string", "readOnly": true diff --git a/pkg/gen/internalmessages/address.go b/pkg/gen/internalmessages/address.go index 529cc0d7110..733df1c0680 100644 --- a/pkg/gen/internalmessages/address.go +++ b/pkg/gen/internalmessages/address.go @@ -36,6 +36,10 @@ type Address struct { // Example: LOS ANGELES County *string `json:"county,omitempty"` + // destination gbloc + // Pattern: ^[A-Z]{4}$ + DestinationGbloc *string `json:"destinationGbloc,omitempty"` + // e tag // Read Only: true ETag string `json:"eTag,omitempty"` @@ -91,6 +95,10 @@ func (m *Address) Validate(formats strfmt.Registry) error { res = append(res, err) } + if err := m.validateDestinationGbloc(formats); err != nil { + res = append(res, err) + } + if err := m.validateID(formats); err != nil { res = append(res, err) } @@ -138,6 +146,18 @@ func (m *Address) validateCountry(formats strfmt.Registry) error { return nil } +func (m *Address) validateDestinationGbloc(formats strfmt.Registry) error { + if swag.IsZero(m.DestinationGbloc) { // not required + return nil + } + + if err := validate.Pattern("destinationGbloc", "body", *m.DestinationGbloc, `^[A-Z]{4}$`); err != nil { + return err + } + + return nil +} + func (m *Address) validateID(formats strfmt.Registry) error { if swag.IsZero(m.ID) { // not required return nil diff --git a/pkg/gen/pptasapi/embedded_spec.go b/pkg/gen/pptasapi/embedded_spec.go index 1757ac556cc..fc54f37df09 100644 --- a/pkg/gen/pptasapi/embedded_spec.go +++ b/pkg/gen/pptasapi/embedded_spec.go @@ -114,6 +114,11 @@ func init() { "x-nullable": true, "example": "LOS ANGELES" }, + "destinationGbloc": { + "type": "string", + "pattern": "^[A-Z]{4}$", + "x-nullable": true + }, "eTag": { "type": "string", "readOnly": true @@ -1008,6 +1013,11 @@ func init() { "x-nullable": true, "example": "LOS ANGELES" }, + "destinationGbloc": { + "type": "string", + "pattern": "^[A-Z]{4}$", + "x-nullable": true + }, "eTag": { "type": "string", "readOnly": true diff --git a/pkg/gen/pptasmessages/address.go b/pkg/gen/pptasmessages/address.go index 1e53ba6d230..0e5a9af985a 100644 --- a/pkg/gen/pptasmessages/address.go +++ b/pkg/gen/pptasmessages/address.go @@ -36,6 +36,10 @@ type Address struct { // Example: LOS ANGELES County *string `json:"county,omitempty"` + // destination gbloc + // Pattern: ^[A-Z]{4}$ + DestinationGbloc *string `json:"destinationGbloc,omitempty"` + // e tag // Read Only: true ETag string `json:"eTag,omitempty"` @@ -91,6 +95,10 @@ func (m *Address) Validate(formats strfmt.Registry) error { res = append(res, err) } + if err := m.validateDestinationGbloc(formats); err != nil { + res = append(res, err) + } + if err := m.validateID(formats); err != nil { res = append(res, err) } @@ -138,6 +146,18 @@ func (m *Address) validateCountry(formats strfmt.Registry) error { return nil } +func (m *Address) validateDestinationGbloc(formats strfmt.Registry) error { + if swag.IsZero(m.DestinationGbloc) { // not required + return nil + } + + if err := validate.Pattern("destinationGbloc", "body", *m.DestinationGbloc, `^[A-Z]{4}$`); err != nil { + return err + } + + return nil +} + func (m *Address) validateID(formats strfmt.Registry) error { if swag.IsZero(m.ID) { // not required return nil diff --git a/pkg/gen/primeapi/embedded_spec.go b/pkg/gen/primeapi/embedded_spec.go index 3cb80be3a33..06bca786cd6 100644 --- a/pkg/gen/primeapi/embedded_spec.go +++ b/pkg/gen/primeapi/embedded_spec.go @@ -1063,7 +1063,7 @@ func init() { }, "/payment-requests": { "post": { - "description": "Creates a new instance of a paymentRequest and is assigned the status ` + "`" + `PENDING` + "`" + `.\nA move task order can have multiple payment requests, and\na final payment request can be marked using boolean ` + "`" + `isFinal` + "`" + `.\n\nIf a ` + "`" + `PENDING` + "`" + ` payment request is recalculated,\na new payment request is created and the original request is\nmarked with the status ` + "`" + `DEPRECATED` + "`" + `.\n\n**NOTE**: In order to create a payment request for most service items, the shipment *must*\nbe updated with the ` + "`" + `PrimeActualWeight` + "`" + ` value via [updateMTOShipment](#operation/updateMTOShipment).\n\n**FSC - Fuel Surcharge** service items require ` + "`" + `ActualPickupDate` + "`" + ` to be updated on the shipment.\n\nA service item can be on several payment requests in the case of partial payment requests and payments.\n\nIn the request, if no params are necessary, then just the ` + "`" + `serviceItem` + "`" + ` ` + "`" + `id` + "`" + ` is required. For example:\n` + "`" + `` + "`" + `` + "`" + `json\n{\n \"isFinal\": false,\n \"moveTaskOrderID\": \"uuid\",\n \"serviceItems\": [\n {\n \"id\": \"uuid\",\n },\n {\n \"id\": \"uuid\",\n \"params\": [\n {\n \"key\": \"Service Item Parameter Name\",\n \"value\": \"Service Item Parameter Value\"\n }\n ]\n }\n ],\n \"pointOfContact\": \"string\"\n}\n` + "`" + `` + "`" + `` + "`" + `\n\nSIT Service Items \u0026 Accepted Payment Request Parameters:\n---\nIf ` + "`" + `WeightBilled` + "`" + ` is not provided then the full shipment weight (` + "`" + `PrimeActualWeight` + "`" + `) will be considered in the calculation.\n\n**NOTE**: Diversions have a unique calcuation for payment requests without a ` + "`" + `WeightBilled` + "`" + ` parameter.\n\nIf you created a payment request for a diversion and ` + "`" + `WeightBilled` + "`" + ` is not provided, then the following will be used in the calculation:\n- The lowest shipment weight (` + "`" + `PrimeActualWeight` + "`" + `) found in the diverted shipment chain.\n- The lowest reweigh weight found in the diverted shipment chain.\n\nThe diverted shipment chain is created by referencing the ` + "`" + `diversion` + "`" + ` boolean, ` + "`" + `divertedFromShipmentId` + "`" + ` UUID, and matching destination to pickup addresses.\nIf the chain cannot be established it will fall back to the ` + "`" + `PrimeActualWeight` + "`" + ` of the current shipment. This is utilized because diverted shipments are all one single shipment, but going to different locations.\nThe lowest weight found is the true shipment weight, and thus we search the chain of shipments for the lowest weight found.\n\n**DOFSIT - Domestic origin 1st day SIT**\n` + "`" + `` + "`" + `` + "`" + `json\n \"params\": [\n {\n \"key\": \"WeightBilled\",\n \"value\": \"integer\"\n }\n ]\n` + "`" + `` + "`" + `` + "`" + `\n\n**DOASIT - Domestic origin add'l SIT** *(SITPaymentRequestStart \u0026 SITPaymentRequestEnd are **REQUIRED**)*\n*To create a paymentRequest for this service item, the ` + "`" + `SITPaymentRequestStart` + "`" + ` and ` + "`" + `SITPaymentRequestEnd` + "`" + ` dates must not overlap previously requested SIT dates.*\n` + "`" + `` + "`" + `` + "`" + `json\n \"params\": [\n {\n \"key\": \"WeightBilled\",\n \"value\": \"integer\"\n },\n {\n \"key\": \"SITPaymentRequestStart\",\n \"value\": \"date\"\n },\n {\n \"key\": \"SITPaymentRequestEnd\",\n \"value\": \"date\"\n }\n ]\n` + "`" + `` + "`" + `` + "`" + `\n\n**DOPSIT - Domestic origin SIT pickup**\n` + "`" + `` + "`" + `` + "`" + `json\n \"params\": [\n {\n \"key\": \"WeightBilled\",\n \"value\": \"integer\"\n }\n ]\n` + "`" + `` + "`" + `` + "`" + `\n\n**DOSHUT - Domestic origin shuttle service**\n` + "`" + `` + "`" + `` + "`" + `json\n \"params\": [\n {\n \"key\": \"WeightBilled\",\n \"value\": \"integer\"\n }\n ]\n` + "`" + `` + "`" + `` + "`" + `\n\n**DDFSIT - Domestic destination 1st day SIT**\n` + "`" + `` + "`" + `` + "`" + `json\n \"params\": [\n {\n \"key\": \"WeightBilled\",\n \"value\": \"integer\"\n }\n ]\n` + "`" + `` + "`" + `` + "`" + `\n\n**DDASIT - Domestic destination add'l SIT** *(SITPaymentRequestStart \u0026 SITPaymentRequestEnd are **REQUIRED**)*\n*To create a paymentRequest for this service item, the ` + "`" + `SITPaymentRequestStart` + "`" + ` and ` + "`" + `SITPaymentRequestEnd` + "`" + ` dates must not overlap previously requested SIT dates.*\n` + "`" + `` + "`" + `` + "`" + `json\n \"params\": [\n {\n \"key\": \"WeightBilled\",\n \"value\": \"integer\"\n },\n {\n \"key\": \"SITPaymentRequestStart\",\n \"value\": \"date\"\n },\n {\n \"key\": \"SITPaymentRequestEnd\",\n \"value\": \"date\"\n }\n ]\n` + "`" + `` + "`" + `` + "`" + `\n\n**DDDSIT - Domestic destination SIT delivery**\n*To create a paymentRequest for this service item, it must first have a final address set via [updateMTOServiceItem](#operation/updateMTOServiceItem).*\n` + "`" + `` + "`" + `` + "`" + `json\n \"params\": [\n {\n \"key\": \"WeightBilled\",\n \"value\": \"integer\"\n }\n ]\n` + "`" + `` + "`" + `` + "`" + `\n\n**DDSHUT - Domestic destination shuttle service**\n` + "`" + `` + "`" + `` + "`" + `json\n \"params\": [\n {\n \"key\": \"WeightBilled\",\n \"value\": \"integer\"\n }\n ]\n` + "`" + `` + "`" + `` + "`" + `\n---\n", + "description": "Creates a new instance of a paymentRequest and is assigned the status ` + "`" + `PENDING` + "`" + `.\nA move task order can have multiple payment requests, and\na final payment request can be marked using boolean ` + "`" + `isFinal` + "`" + `.\n\nIf a ` + "`" + `PENDING` + "`" + ` payment request is recalculated,\na new payment request is created and the original request is\nmarked with the status ` + "`" + `DEPRECATED` + "`" + `.\n\n**NOTE**: In order to create a payment request for most service items, the shipment *must*\nbe updated with the ` + "`" + `PrimeActualWeight` + "`" + ` value via [updateMTOShipment](#operation/updateMTOShipment).\n\nIf ` + "`" + `WeightBilled` + "`" + ` is not provided then the full shipment weight (` + "`" + `PrimeActualWeight` + "`" + `) will be considered in the calculation.\n\n**NOTE**: Diversions have a unique calcuation for payment requests without a ` + "`" + `WeightBilled` + "`" + ` parameter.\n\nIf you created a payment request for a diversion and ` + "`" + `WeightBilled` + "`" + ` is not provided, then the following will be used in the calculation:\n- The lowest shipment weight (` + "`" + `PrimeActualWeight` + "`" + `) found in the diverted shipment chain.\n- The lowest reweigh weight found in the diverted shipment chain.\n\nThe diverted shipment chain is created by referencing the ` + "`" + `diversion` + "`" + ` boolean, ` + "`" + `divertedFromShipmentId` + "`" + ` UUID, and matching destination to pickup addresses.\nIf the chain cannot be established it will fall back to the ` + "`" + `PrimeActualWeight` + "`" + ` of the current shipment. This is utilized because diverted shipments are all one single shipment, but going to different locations.\nThe lowest weight found is the true shipment weight, and thus we search the chain of shipments for the lowest weight found.\n\nA service item can be on several payment requests in the case of partial payment requests and payments.\n\nIn the request, if no params are necessary, then just the ` + "`" + `serviceItem` + "`" + ` ` + "`" + `id` + "`" + ` is required. For example:\n` + "`" + `` + "`" + `` + "`" + `json\n{\n \"isFinal\": false,\n \"moveTaskOrderID\": \"uuid\",\n \"serviceItems\": [\n {\n \"id\": \"uuid\",\n },\n {\n \"id\": \"uuid\",\n \"params\": [\n {\n \"key\": \"Service Item Parameter Name\",\n \"value\": \"Service Item Parameter Value\"\n }\n ]\n }\n ],\n \"pointOfContact\": \"string\"\n}\n` + "`" + `` + "`" + `` + "`" + `\n\nDomestic Basic Service Items \u0026 Accepted Payment Request Parameters:\n---\n\n**DLH - Domestic Linehaul**\n` + "`" + `` + "`" + `` + "`" + `json\n \"params\": [\n {\n \"key\": \"WeightBilled\",\n \"value\": \"integer\"\n }\n ]\n` + "`" + `` + "`" + `` + "`" + `\n\n**DSH - Domestic Shorthaul**\n` + "`" + `` + "`" + `` + "`" + `json\n \"params\": [\n {\n \"key\": \"WeightBilled\",\n \"value\": \"integer\"\n }\n ]\n` + "`" + `` + "`" + `` + "`" + `\n\n**FSC - Fuel Surcharge**\n**NOTE**: FSC requires ` + "`" + `ActualPickupDate` + "`" + ` to be updated on the shipment.\n` + "`" + `` + "`" + `` + "`" + `json\n \"params\": [\n {\n \"key\": \"WeightBilled\",\n \"value\": \"integer\"\n }\n ]\n` + "`" + `` + "`" + `` + "`" + `\n\n**DUPK - Domestic Unpacking**\n` + "`" + `` + "`" + `` + "`" + `json\n \"params\": [\n {\n \"key\": \"WeightBilled\",\n \"value\": \"integer\"\n }\n ]\n` + "`" + `` + "`" + `` + "`" + `\n\n**DPK - Domestic Packing**\n` + "`" + `` + "`" + `` + "`" + `json\n \"params\": [\n {\n \"key\": \"WeightBilled\",\n \"value\": \"integer\"\n }\n ]\n` + "`" + `` + "`" + `` + "`" + `\n\n**DNPK - Domestic NTS Packing**\n` + "`" + `` + "`" + `` + "`" + `json\n \"params\": [\n {\n \"key\": \"WeightBilled\",\n \"value\": \"integer\"\n }\n ]\n` + "`" + `` + "`" + `` + "`" + `\n\n**DPK - Domestic Packing**\n` + "`" + `` + "`" + `` + "`" + `json\n \"params\": [\n {\n \"key\": \"WeightBilled\",\n \"value\": \"integer\"\n }\n ]\n` + "`" + `` + "`" + `` + "`" + `\n\n**DOP - Domestic Origin Price**\n` + "`" + `` + "`" + `` + "`" + `json\n \"params\": [\n {\n \"key\": \"WeightBilled\",\n \"value\": \"integer\"\n }\n ]\n` + "`" + `` + "`" + `` + "`" + `\n\n**DDP - Domestic Destination Price**\n` + "`" + `` + "`" + `` + "`" + `json\n \"params\": [\n {\n \"key\": \"WeightBilled\",\n \"value\": \"integer\"\n }\n ]\n` + "`" + `` + "`" + `` + "`" + `\n\nDomestic SIT Service Items \u0026 Accepted Payment Request Parameters:\n---\n\n**DOFSIT - Domestic origin 1st day SIT**\n` + "`" + `` + "`" + `` + "`" + `json\n \"params\": [\n {\n \"key\": \"WeightBilled\",\n \"value\": \"integer\"\n }\n ]\n` + "`" + `` + "`" + `` + "`" + `\n\n**DOASIT - Domestic origin add'l SIT** *(SITPaymentRequestStart \u0026 SITPaymentRequestEnd are **REQUIRED**)*\n*To create a paymentRequest for this service item, the ` + "`" + `SITPaymentRequestStart` + "`" + ` and ` + "`" + `SITPaymentRequestEnd` + "`" + ` dates must not overlap previously requested SIT dates.*\n` + "`" + `` + "`" + `` + "`" + `json\n \"params\": [\n {\n \"key\": \"WeightBilled\",\n \"value\": \"integer\"\n },\n {\n \"key\": \"SITPaymentRequestStart\",\n \"value\": \"date\"\n },\n {\n \"key\": \"SITPaymentRequestEnd\",\n \"value\": \"date\"\n }\n ]\n` + "`" + `` + "`" + `` + "`" + `\n\n**DOPSIT - Domestic origin SIT pickup**\n` + "`" + `` + "`" + `` + "`" + `json\n \"params\": [\n {\n \"key\": \"WeightBilled\",\n \"value\": \"integer\"\n }\n ]\n` + "`" + `` + "`" + `` + "`" + `\n\n**DOSHUT - Domestic origin shuttle service**\n` + "`" + `` + "`" + `` + "`" + `json\n \"params\": [\n {\n \"key\": \"WeightBilled\",\n \"value\": \"integer\"\n }\n ]\n` + "`" + `` + "`" + `` + "`" + `\n\n**DDFSIT - Domestic destination 1st day SIT**\n` + "`" + `` + "`" + `` + "`" + `json\n \"params\": [\n {\n \"key\": \"WeightBilled\",\n \"value\": \"integer\"\n }\n ]\n` + "`" + `` + "`" + `` + "`" + `\n\n**DDASIT - Domestic destination add'l SIT** *(SITPaymentRequestStart \u0026 SITPaymentRequestEnd are **REQUIRED**)*\n*To create a paymentRequest for this service item, the ` + "`" + `SITPaymentRequestStart` + "`" + ` and ` + "`" + `SITPaymentRequestEnd` + "`" + ` dates must not overlap previously requested SIT dates.*\n` + "`" + `` + "`" + `` + "`" + `json\n \"params\": [\n {\n \"key\": \"WeightBilled\",\n \"value\": \"integer\"\n },\n {\n \"key\": \"SITPaymentRequestStart\",\n \"value\": \"date\"\n },\n {\n \"key\": \"SITPaymentRequestEnd\",\n \"value\": \"date\"\n }\n ]\n` + "`" + `` + "`" + `` + "`" + `\n\n**DDDSIT - Domestic destination SIT delivery**\n*To create a paymentRequest for this service item, it must first have a final address set via [updateMTOServiceItem](#operation/updateMTOServiceItem).*\n` + "`" + `` + "`" + `` + "`" + `json\n \"params\": [\n {\n \"key\": \"WeightBilled\",\n \"value\": \"integer\"\n }\n ]\n` + "`" + `` + "`" + `` + "`" + `\n\n**DDSHUT - Domestic destination shuttle service**\n` + "`" + `` + "`" + `` + "`" + `json\n \"params\": [\n {\n \"key\": \"WeightBilled\",\n \"value\": \"integer\"\n }\n ]\n` + "`" + `` + "`" + `` + "`" + `\n---\n\nInternational Basic Service Items \u0026 Accepted Payment Request Parameters:\n---\nJust like domestic shipments \u0026 service items, if ` + "`" + `WeightBilled` + "`" + ` is not provided then the full shipment weight (` + "`" + `PrimeActualWeight` + "`" + `) will be considered in the calculation.\n**NOTE**: ` + "`" + `POEFSC` + "`" + ` \u0026 ` + "`" + `PODFSC` + "`" + ` service items must have a port associated on the service item in order to successfully add it to a payment request. To update the port of a service item, you must use the (#operation/updateMTOServiceItem) endpoint.\n\n**ISLH - International Shipping \u0026 Linehaul**\n` + "`" + `` + "`" + `` + "`" + `json\n \"params\": [\n {\n \"key\": \"WeightBilled\",\n \"value\": \"integer\"\n }\n ]\n` + "`" + `` + "`" + `` + "`" + `\n\n**IHPK - International HHG Pack**\n` + "`" + `` + "`" + `` + "`" + `json\n \"params\": [\n {\n \"key\": \"WeightBilled\",\n \"value\": \"integer\"\n }\n ]\n` + "`" + `` + "`" + `` + "`" + `\n\n**IHUPK - International HHG Unpack**\n` + "`" + `` + "`" + `` + "`" + `json\n \"params\": [\n {\n \"key\": \"WeightBilled\",\n \"value\": \"integer\"\n }\n ]\n` + "`" + `` + "`" + `` + "`" + `\n\n**POEFSC - International Port of Embarkation Fuel Surcharge**\n **NOTE**: POEFSC requires ` + "`" + `ActualPickupDate` + "`" + ` to be updated on the shipment \u0026 ` + "`" + `POELocation` + "`" + ` on the service item.\n` + "`" + `` + "`" + `` + "`" + `json\n \"params\": [\n {\n \"key\": \"WeightBilled\",\n \"value\": \"integer\"\n }\n ]\n` + "`" + `` + "`" + `` + "`" + `\n\n**PODFSC - International Port of Debarkation Fuel Surcharge**\n**NOTE**: PODFSC requires ` + "`" + `ActualPickupDate` + "`" + ` to be updated on the shipment \u0026 ` + "`" + `PODLocation` + "`" + ` on the service item.\n` + "`" + `` + "`" + `` + "`" + `json\n \"params\": [\n {\n \"key\": \"WeightBilled\",\n \"value\": \"integer\"\n }\n ]\n` + "`" + `` + "`" + `` + "`" + `\n---\n", "consumes": [ "application/json" ], @@ -1214,6 +1214,11 @@ func init() { "x-nullable": true, "example": "LOS ANGELES" }, + "destinationGbloc": { + "type": "string", + "pattern": "^[A-Z]{4}$", + "x-nullable": true + }, "eTag": { "type": "string", "readOnly": true @@ -5941,7 +5946,7 @@ func init() { }, "/payment-requests": { "post": { - "description": "Creates a new instance of a paymentRequest and is assigned the status ` + "`" + `PENDING` + "`" + `.\nA move task order can have multiple payment requests, and\na final payment request can be marked using boolean ` + "`" + `isFinal` + "`" + `.\n\nIf a ` + "`" + `PENDING` + "`" + ` payment request is recalculated,\na new payment request is created and the original request is\nmarked with the status ` + "`" + `DEPRECATED` + "`" + `.\n\n**NOTE**: In order to create a payment request for most service items, the shipment *must*\nbe updated with the ` + "`" + `PrimeActualWeight` + "`" + ` value via [updateMTOShipment](#operation/updateMTOShipment).\n\n**FSC - Fuel Surcharge** service items require ` + "`" + `ActualPickupDate` + "`" + ` to be updated on the shipment.\n\nA service item can be on several payment requests in the case of partial payment requests and payments.\n\nIn the request, if no params are necessary, then just the ` + "`" + `serviceItem` + "`" + ` ` + "`" + `id` + "`" + ` is required. For example:\n` + "`" + `` + "`" + `` + "`" + `json\n{\n \"isFinal\": false,\n \"moveTaskOrderID\": \"uuid\",\n \"serviceItems\": [\n {\n \"id\": \"uuid\",\n },\n {\n \"id\": \"uuid\",\n \"params\": [\n {\n \"key\": \"Service Item Parameter Name\",\n \"value\": \"Service Item Parameter Value\"\n }\n ]\n }\n ],\n \"pointOfContact\": \"string\"\n}\n` + "`" + `` + "`" + `` + "`" + `\n\nSIT Service Items \u0026 Accepted Payment Request Parameters:\n---\nIf ` + "`" + `WeightBilled` + "`" + ` is not provided then the full shipment weight (` + "`" + `PrimeActualWeight` + "`" + `) will be considered in the calculation.\n\n**NOTE**: Diversions have a unique calcuation for payment requests without a ` + "`" + `WeightBilled` + "`" + ` parameter.\n\nIf you created a payment request for a diversion and ` + "`" + `WeightBilled` + "`" + ` is not provided, then the following will be used in the calculation:\n- The lowest shipment weight (` + "`" + `PrimeActualWeight` + "`" + `) found in the diverted shipment chain.\n- The lowest reweigh weight found in the diverted shipment chain.\n\nThe diverted shipment chain is created by referencing the ` + "`" + `diversion` + "`" + ` boolean, ` + "`" + `divertedFromShipmentId` + "`" + ` UUID, and matching destination to pickup addresses.\nIf the chain cannot be established it will fall back to the ` + "`" + `PrimeActualWeight` + "`" + ` of the current shipment. This is utilized because diverted shipments are all one single shipment, but going to different locations.\nThe lowest weight found is the true shipment weight, and thus we search the chain of shipments for the lowest weight found.\n\n**DOFSIT - Domestic origin 1st day SIT**\n` + "`" + `` + "`" + `` + "`" + `json\n \"params\": [\n {\n \"key\": \"WeightBilled\",\n \"value\": \"integer\"\n }\n ]\n` + "`" + `` + "`" + `` + "`" + `\n\n**DOASIT - Domestic origin add'l SIT** *(SITPaymentRequestStart \u0026 SITPaymentRequestEnd are **REQUIRED**)*\n*To create a paymentRequest for this service item, the ` + "`" + `SITPaymentRequestStart` + "`" + ` and ` + "`" + `SITPaymentRequestEnd` + "`" + ` dates must not overlap previously requested SIT dates.*\n` + "`" + `` + "`" + `` + "`" + `json\n \"params\": [\n {\n \"key\": \"WeightBilled\",\n \"value\": \"integer\"\n },\n {\n \"key\": \"SITPaymentRequestStart\",\n \"value\": \"date\"\n },\n {\n \"key\": \"SITPaymentRequestEnd\",\n \"value\": \"date\"\n }\n ]\n` + "`" + `` + "`" + `` + "`" + `\n\n**DOPSIT - Domestic origin SIT pickup**\n` + "`" + `` + "`" + `` + "`" + `json\n \"params\": [\n {\n \"key\": \"WeightBilled\",\n \"value\": \"integer\"\n }\n ]\n` + "`" + `` + "`" + `` + "`" + `\n\n**DOSHUT - Domestic origin shuttle service**\n` + "`" + `` + "`" + `` + "`" + `json\n \"params\": [\n {\n \"key\": \"WeightBilled\",\n \"value\": \"integer\"\n }\n ]\n` + "`" + `` + "`" + `` + "`" + `\n\n**DDFSIT - Domestic destination 1st day SIT**\n` + "`" + `` + "`" + `` + "`" + `json\n \"params\": [\n {\n \"key\": \"WeightBilled\",\n \"value\": \"integer\"\n }\n ]\n` + "`" + `` + "`" + `` + "`" + `\n\n**DDASIT - Domestic destination add'l SIT** *(SITPaymentRequestStart \u0026 SITPaymentRequestEnd are **REQUIRED**)*\n*To create a paymentRequest for this service item, the ` + "`" + `SITPaymentRequestStart` + "`" + ` and ` + "`" + `SITPaymentRequestEnd` + "`" + ` dates must not overlap previously requested SIT dates.*\n` + "`" + `` + "`" + `` + "`" + `json\n \"params\": [\n {\n \"key\": \"WeightBilled\",\n \"value\": \"integer\"\n },\n {\n \"key\": \"SITPaymentRequestStart\",\n \"value\": \"date\"\n },\n {\n \"key\": \"SITPaymentRequestEnd\",\n \"value\": \"date\"\n }\n ]\n` + "`" + `` + "`" + `` + "`" + `\n\n**DDDSIT - Domestic destination SIT delivery**\n*To create a paymentRequest for this service item, it must first have a final address set via [updateMTOServiceItem](#operation/updateMTOServiceItem).*\n` + "`" + `` + "`" + `` + "`" + `json\n \"params\": [\n {\n \"key\": \"WeightBilled\",\n \"value\": \"integer\"\n }\n ]\n` + "`" + `` + "`" + `` + "`" + `\n\n**DDSHUT - Domestic destination shuttle service**\n` + "`" + `` + "`" + `` + "`" + `json\n \"params\": [\n {\n \"key\": \"WeightBilled\",\n \"value\": \"integer\"\n }\n ]\n` + "`" + `` + "`" + `` + "`" + `\n---\n", + "description": "Creates a new instance of a paymentRequest and is assigned the status ` + "`" + `PENDING` + "`" + `.\nA move task order can have multiple payment requests, and\na final payment request can be marked using boolean ` + "`" + `isFinal` + "`" + `.\n\nIf a ` + "`" + `PENDING` + "`" + ` payment request is recalculated,\na new payment request is created and the original request is\nmarked with the status ` + "`" + `DEPRECATED` + "`" + `.\n\n**NOTE**: In order to create a payment request for most service items, the shipment *must*\nbe updated with the ` + "`" + `PrimeActualWeight` + "`" + ` value via [updateMTOShipment](#operation/updateMTOShipment).\n\nIf ` + "`" + `WeightBilled` + "`" + ` is not provided then the full shipment weight (` + "`" + `PrimeActualWeight` + "`" + `) will be considered in the calculation.\n\n**NOTE**: Diversions have a unique calcuation for payment requests without a ` + "`" + `WeightBilled` + "`" + ` parameter.\n\nIf you created a payment request for a diversion and ` + "`" + `WeightBilled` + "`" + ` is not provided, then the following will be used in the calculation:\n- The lowest shipment weight (` + "`" + `PrimeActualWeight` + "`" + `) found in the diverted shipment chain.\n- The lowest reweigh weight found in the diverted shipment chain.\n\nThe diverted shipment chain is created by referencing the ` + "`" + `diversion` + "`" + ` boolean, ` + "`" + `divertedFromShipmentId` + "`" + ` UUID, and matching destination to pickup addresses.\nIf the chain cannot be established it will fall back to the ` + "`" + `PrimeActualWeight` + "`" + ` of the current shipment. This is utilized because diverted shipments are all one single shipment, but going to different locations.\nThe lowest weight found is the true shipment weight, and thus we search the chain of shipments for the lowest weight found.\n\nA service item can be on several payment requests in the case of partial payment requests and payments.\n\nIn the request, if no params are necessary, then just the ` + "`" + `serviceItem` + "`" + ` ` + "`" + `id` + "`" + ` is required. For example:\n` + "`" + `` + "`" + `` + "`" + `json\n{\n \"isFinal\": false,\n \"moveTaskOrderID\": \"uuid\",\n \"serviceItems\": [\n {\n \"id\": \"uuid\",\n },\n {\n \"id\": \"uuid\",\n \"params\": [\n {\n \"key\": \"Service Item Parameter Name\",\n \"value\": \"Service Item Parameter Value\"\n }\n ]\n }\n ],\n \"pointOfContact\": \"string\"\n}\n` + "`" + `` + "`" + `` + "`" + `\n\nDomestic Basic Service Items \u0026 Accepted Payment Request Parameters:\n---\n\n**DLH - Domestic Linehaul**\n` + "`" + `` + "`" + `` + "`" + `json\n \"params\": [\n {\n \"key\": \"WeightBilled\",\n \"value\": \"integer\"\n }\n ]\n` + "`" + `` + "`" + `` + "`" + `\n\n**DSH - Domestic Shorthaul**\n` + "`" + `` + "`" + `` + "`" + `json\n \"params\": [\n {\n \"key\": \"WeightBilled\",\n \"value\": \"integer\"\n }\n ]\n` + "`" + `` + "`" + `` + "`" + `\n\n**FSC - Fuel Surcharge**\n**NOTE**: FSC requires ` + "`" + `ActualPickupDate` + "`" + ` to be updated on the shipment.\n` + "`" + `` + "`" + `` + "`" + `json\n \"params\": [\n {\n \"key\": \"WeightBilled\",\n \"value\": \"integer\"\n }\n ]\n` + "`" + `` + "`" + `` + "`" + `\n\n**DUPK - Domestic Unpacking**\n` + "`" + `` + "`" + `` + "`" + `json\n \"params\": [\n {\n \"key\": \"WeightBilled\",\n \"value\": \"integer\"\n }\n ]\n` + "`" + `` + "`" + `` + "`" + `\n\n**DPK - Domestic Packing**\n` + "`" + `` + "`" + `` + "`" + `json\n \"params\": [\n {\n \"key\": \"WeightBilled\",\n \"value\": \"integer\"\n }\n ]\n` + "`" + `` + "`" + `` + "`" + `\n\n**DNPK - Domestic NTS Packing**\n` + "`" + `` + "`" + `` + "`" + `json\n \"params\": [\n {\n \"key\": \"WeightBilled\",\n \"value\": \"integer\"\n }\n ]\n` + "`" + `` + "`" + `` + "`" + `\n\n**DPK - Domestic Packing**\n` + "`" + `` + "`" + `` + "`" + `json\n \"params\": [\n {\n \"key\": \"WeightBilled\",\n \"value\": \"integer\"\n }\n ]\n` + "`" + `` + "`" + `` + "`" + `\n\n**DOP - Domestic Origin Price**\n` + "`" + `` + "`" + `` + "`" + `json\n \"params\": [\n {\n \"key\": \"WeightBilled\",\n \"value\": \"integer\"\n }\n ]\n` + "`" + `` + "`" + `` + "`" + `\n\n**DDP - Domestic Destination Price**\n` + "`" + `` + "`" + `` + "`" + `json\n \"params\": [\n {\n \"key\": \"WeightBilled\",\n \"value\": \"integer\"\n }\n ]\n` + "`" + `` + "`" + `` + "`" + `\n\nDomestic SIT Service Items \u0026 Accepted Payment Request Parameters:\n---\n\n**DOFSIT - Domestic origin 1st day SIT**\n` + "`" + `` + "`" + `` + "`" + `json\n \"params\": [\n {\n \"key\": \"WeightBilled\",\n \"value\": \"integer\"\n }\n ]\n` + "`" + `` + "`" + `` + "`" + `\n\n**DOASIT - Domestic origin add'l SIT** *(SITPaymentRequestStart \u0026 SITPaymentRequestEnd are **REQUIRED**)*\n*To create a paymentRequest for this service item, the ` + "`" + `SITPaymentRequestStart` + "`" + ` and ` + "`" + `SITPaymentRequestEnd` + "`" + ` dates must not overlap previously requested SIT dates.*\n` + "`" + `` + "`" + `` + "`" + `json\n \"params\": [\n {\n \"key\": \"WeightBilled\",\n \"value\": \"integer\"\n },\n {\n \"key\": \"SITPaymentRequestStart\",\n \"value\": \"date\"\n },\n {\n \"key\": \"SITPaymentRequestEnd\",\n \"value\": \"date\"\n }\n ]\n` + "`" + `` + "`" + `` + "`" + `\n\n**DOPSIT - Domestic origin SIT pickup**\n` + "`" + `` + "`" + `` + "`" + `json\n \"params\": [\n {\n \"key\": \"WeightBilled\",\n \"value\": \"integer\"\n }\n ]\n` + "`" + `` + "`" + `` + "`" + `\n\n**DOSHUT - Domestic origin shuttle service**\n` + "`" + `` + "`" + `` + "`" + `json\n \"params\": [\n {\n \"key\": \"WeightBilled\",\n \"value\": \"integer\"\n }\n ]\n` + "`" + `` + "`" + `` + "`" + `\n\n**DDFSIT - Domestic destination 1st day SIT**\n` + "`" + `` + "`" + `` + "`" + `json\n \"params\": [\n {\n \"key\": \"WeightBilled\",\n \"value\": \"integer\"\n }\n ]\n` + "`" + `` + "`" + `` + "`" + `\n\n**DDASIT - Domestic destination add'l SIT** *(SITPaymentRequestStart \u0026 SITPaymentRequestEnd are **REQUIRED**)*\n*To create a paymentRequest for this service item, the ` + "`" + `SITPaymentRequestStart` + "`" + ` and ` + "`" + `SITPaymentRequestEnd` + "`" + ` dates must not overlap previously requested SIT dates.*\n` + "`" + `` + "`" + `` + "`" + `json\n \"params\": [\n {\n \"key\": \"WeightBilled\",\n \"value\": \"integer\"\n },\n {\n \"key\": \"SITPaymentRequestStart\",\n \"value\": \"date\"\n },\n {\n \"key\": \"SITPaymentRequestEnd\",\n \"value\": \"date\"\n }\n ]\n` + "`" + `` + "`" + `` + "`" + `\n\n**DDDSIT - Domestic destination SIT delivery**\n*To create a paymentRequest for this service item, it must first have a final address set via [updateMTOServiceItem](#operation/updateMTOServiceItem).*\n` + "`" + `` + "`" + `` + "`" + `json\n \"params\": [\n {\n \"key\": \"WeightBilled\",\n \"value\": \"integer\"\n }\n ]\n` + "`" + `` + "`" + `` + "`" + `\n\n**DDSHUT - Domestic destination shuttle service**\n` + "`" + `` + "`" + `` + "`" + `json\n \"params\": [\n {\n \"key\": \"WeightBilled\",\n \"value\": \"integer\"\n }\n ]\n` + "`" + `` + "`" + `` + "`" + `\n---\n\nInternational Basic Service Items \u0026 Accepted Payment Request Parameters:\n---\nJust like domestic shipments \u0026 service items, if ` + "`" + `WeightBilled` + "`" + ` is not provided then the full shipment weight (` + "`" + `PrimeActualWeight` + "`" + `) will be considered in the calculation.\n**NOTE**: ` + "`" + `POEFSC` + "`" + ` \u0026 ` + "`" + `PODFSC` + "`" + ` service items must have a port associated on the service item in order to successfully add it to a payment request. To update the port of a service item, you must use the (#operation/updateMTOServiceItem) endpoint.\n\n**ISLH - International Shipping \u0026 Linehaul**\n` + "`" + `` + "`" + `` + "`" + `json\n \"params\": [\n {\n \"key\": \"WeightBilled\",\n \"value\": \"integer\"\n }\n ]\n` + "`" + `` + "`" + `` + "`" + `\n\n**IHPK - International HHG Pack**\n` + "`" + `` + "`" + `` + "`" + `json\n \"params\": [\n {\n \"key\": \"WeightBilled\",\n \"value\": \"integer\"\n }\n ]\n` + "`" + `` + "`" + `` + "`" + `\n\n**IHUPK - International HHG Unpack**\n` + "`" + `` + "`" + `` + "`" + `json\n \"params\": [\n {\n \"key\": \"WeightBilled\",\n \"value\": \"integer\"\n }\n ]\n` + "`" + `` + "`" + `` + "`" + `\n\n**POEFSC - International Port of Embarkation Fuel Surcharge**\n **NOTE**: POEFSC requires ` + "`" + `ActualPickupDate` + "`" + ` to be updated on the shipment \u0026 ` + "`" + `POELocation` + "`" + ` on the service item.\n` + "`" + `` + "`" + `` + "`" + `json\n \"params\": [\n {\n \"key\": \"WeightBilled\",\n \"value\": \"integer\"\n }\n ]\n` + "`" + `` + "`" + `` + "`" + `\n\n**PODFSC - International Port of Debarkation Fuel Surcharge**\n**NOTE**: PODFSC requires ` + "`" + `ActualPickupDate` + "`" + ` to be updated on the shipment \u0026 ` + "`" + `PODLocation` + "`" + ` on the service item.\n` + "`" + `` + "`" + `` + "`" + `json\n \"params\": [\n {\n \"key\": \"WeightBilled\",\n \"value\": \"integer\"\n }\n ]\n` + "`" + `` + "`" + `` + "`" + `\n---\n", "consumes": [ "application/json" ], @@ -6128,6 +6133,11 @@ func init() { "x-nullable": true, "example": "LOS ANGELES" }, + "destinationGbloc": { + "type": "string", + "pattern": "^[A-Z]{4}$", + "x-nullable": true + }, "eTag": { "type": "string", "readOnly": true diff --git a/pkg/gen/primeapi/primeoperations/payment_request/create_payment_request.go b/pkg/gen/primeapi/primeoperations/payment_request/create_payment_request.go index 1e98d93abe7..d1ca6a38ab8 100644 --- a/pkg/gen/primeapi/primeoperations/payment_request/create_payment_request.go +++ b/pkg/gen/primeapi/primeoperations/payment_request/create_payment_request.go @@ -45,7 +45,17 @@ marked with the status `DEPRECATED`. **NOTE**: In order to create a payment request for most service items, the shipment *must* be updated with the `PrimeActualWeight` value via [updateMTOShipment](#operation/updateMTOShipment). -**FSC - Fuel Surcharge** service items require `ActualPickupDate` to be updated on the shipment. +If `WeightBilled` is not provided then the full shipment weight (`PrimeActualWeight`) will be considered in the calculation. + +**NOTE**: Diversions have a unique calcuation for payment requests without a `WeightBilled` parameter. + +If you created a payment request for a diversion and `WeightBilled` is not provided, then the following will be used in the calculation: +- The lowest shipment weight (`PrimeActualWeight`) found in the diverted shipment chain. +- The lowest reweigh weight found in the diverted shipment chain. + +The diverted shipment chain is created by referencing the `diversion` boolean, `divertedFromShipmentId` UUID, and matching destination to pickup addresses. +If the chain cannot be established it will fall back to the `PrimeActualWeight` of the current shipment. This is utilized because diverted shipments are all one single shipment, but going to different locations. +The lowest weight found is the true shipment weight, and thus we search the chain of shipments for the lowest weight found. A service item can be on several payment requests in the case of partial payment requests and payments. @@ -74,19 +84,120 @@ In the request, if no params are necessary, then just the `serviceItem` `id` is ``` -SIT Service Items & Accepted Payment Request Parameters: +Domestic Basic Service Items & Accepted Payment Request Parameters: --- -If `WeightBilled` is not provided then the full shipment weight (`PrimeActualWeight`) will be considered in the calculation. -**NOTE**: Diversions have a unique calcuation for payment requests without a `WeightBilled` parameter. +**DLH - Domestic Linehaul** +```json -If you created a payment request for a diversion and `WeightBilled` is not provided, then the following will be used in the calculation: -- The lowest shipment weight (`PrimeActualWeight`) found in the diverted shipment chain. -- The lowest reweigh weight found in the diverted shipment chain. + "params": [ + { + "key": "WeightBilled", + "value": "integer" + } + ] -The diverted shipment chain is created by referencing the `diversion` boolean, `divertedFromShipmentId` UUID, and matching destination to pickup addresses. -If the chain cannot be established it will fall back to the `PrimeActualWeight` of the current shipment. This is utilized because diverted shipments are all one single shipment, but going to different locations. -The lowest weight found is the true shipment weight, and thus we search the chain of shipments for the lowest weight found. +``` + +**DSH - Domestic Shorthaul** +```json + + "params": [ + { + "key": "WeightBilled", + "value": "integer" + } + ] + +``` + +**FSC - Fuel Surcharge** +**NOTE**: FSC requires `ActualPickupDate` to be updated on the shipment. +```json + + "params": [ + { + "key": "WeightBilled", + "value": "integer" + } + ] + +``` + +**DUPK - Domestic Unpacking** +```json + + "params": [ + { + "key": "WeightBilled", + "value": "integer" + } + ] + +``` + +**DPK - Domestic Packing** +```json + + "params": [ + { + "key": "WeightBilled", + "value": "integer" + } + ] + +``` + +**DNPK - Domestic NTS Packing** +```json + + "params": [ + { + "key": "WeightBilled", + "value": "integer" + } + ] + +``` + +**DPK - Domestic Packing** +```json + + "params": [ + { + "key": "WeightBilled", + "value": "integer" + } + ] + +``` + +**DOP - Domestic Origin Price** +```json + + "params": [ + { + "key": "WeightBilled", + "value": "integer" + } + ] + +``` + +**DDP - Domestic Destination Price** +```json + + "params": [ + { + "key": "WeightBilled", + "value": "integer" + } + ] + +``` + +Domestic SIT Service Items & Accepted Payment Request Parameters: +--- **DOFSIT - Domestic origin 1st day SIT** ```json @@ -201,6 +312,76 @@ The lowest weight found is the true shipment weight, and thus we search the chai } ] +``` +--- + +International Basic Service Items & Accepted Payment Request Parameters: +--- +Just like domestic shipments & service items, if `WeightBilled` is not provided then the full shipment weight (`PrimeActualWeight`) will be considered in the calculation. +**NOTE**: `POEFSC` & `PODFSC` service items must have a port associated on the service item in order to successfully add it to a payment request. To update the port of a service item, you must use the (#operation/updateMTOServiceItem) endpoint. + +**ISLH - International Shipping & Linehaul** +```json + + "params": [ + { + "key": "WeightBilled", + "value": "integer" + } + ] + +``` + +**IHPK - International HHG Pack** +```json + + "params": [ + { + "key": "WeightBilled", + "value": "integer" + } + ] + +``` + +**IHUPK - International HHG Unpack** +```json + + "params": [ + { + "key": "WeightBilled", + "value": "integer" + } + ] + +``` + +**POEFSC - International Port of Embarkation Fuel Surcharge** + + **NOTE**: POEFSC requires `ActualPickupDate` to be updated on the shipment & `POELocation` on the service item. + +```json + + "params": [ + { + "key": "WeightBilled", + "value": "integer" + } + ] + +``` + +**PODFSC - International Port of Debarkation Fuel Surcharge** +**NOTE**: PODFSC requires `ActualPickupDate` to be updated on the shipment & `PODLocation` on the service item. +```json + + "params": [ + { + "key": "WeightBilled", + "value": "integer" + } + ] + ``` --- */ diff --git a/pkg/gen/primeclient/payment_request/payment_request_client.go b/pkg/gen/primeclient/payment_request/payment_request_client.go index 82eae72610e..b10b46d87cf 100644 --- a/pkg/gen/primeclient/payment_request/payment_request_client.go +++ b/pkg/gen/primeclient/payment_request/payment_request_client.go @@ -52,7 +52,17 @@ marked with the status `DEPRECATED`. **NOTE**: In order to create a payment request for most service items, the shipment *must* be updated with the `PrimeActualWeight` value via [updateMTOShipment](#operation/updateMTOShipment). -**FSC - Fuel Surcharge** service items require `ActualPickupDate` to be updated on the shipment. +If `WeightBilled` is not provided then the full shipment weight (`PrimeActualWeight`) will be considered in the calculation. + +**NOTE**: Diversions have a unique calcuation for payment requests without a `WeightBilled` parameter. + +If you created a payment request for a diversion and `WeightBilled` is not provided, then the following will be used in the calculation: +- The lowest shipment weight (`PrimeActualWeight`) found in the diverted shipment chain. +- The lowest reweigh weight found in the diverted shipment chain. + +The diverted shipment chain is created by referencing the `diversion` boolean, `divertedFromShipmentId` UUID, and matching destination to pickup addresses. +If the chain cannot be established it will fall back to the `PrimeActualWeight` of the current shipment. This is utilized because diverted shipments are all one single shipment, but going to different locations. +The lowest weight found is the true shipment weight, and thus we search the chain of shipments for the lowest weight found. A service item can be on several payment requests in the case of partial payment requests and payments. @@ -81,19 +91,120 @@ In the request, if no params are necessary, then just the `serviceItem` `id` is ``` -SIT Service Items & Accepted Payment Request Parameters: +Domestic Basic Service Items & Accepted Payment Request Parameters: --- -If `WeightBilled` is not provided then the full shipment weight (`PrimeActualWeight`) will be considered in the calculation. -**NOTE**: Diversions have a unique calcuation for payment requests without a `WeightBilled` parameter. +**DLH - Domestic Linehaul** +```json -If you created a payment request for a diversion and `WeightBilled` is not provided, then the following will be used in the calculation: -- The lowest shipment weight (`PrimeActualWeight`) found in the diverted shipment chain. -- The lowest reweigh weight found in the diverted shipment chain. + "params": [ + { + "key": "WeightBilled", + "value": "integer" + } + ] -The diverted shipment chain is created by referencing the `diversion` boolean, `divertedFromShipmentId` UUID, and matching destination to pickup addresses. -If the chain cannot be established it will fall back to the `PrimeActualWeight` of the current shipment. This is utilized because diverted shipments are all one single shipment, but going to different locations. -The lowest weight found is the true shipment weight, and thus we search the chain of shipments for the lowest weight found. +``` + +**DSH - Domestic Shorthaul** +```json + + "params": [ + { + "key": "WeightBilled", + "value": "integer" + } + ] + +``` + +**FSC - Fuel Surcharge** +**NOTE**: FSC requires `ActualPickupDate` to be updated on the shipment. +```json + + "params": [ + { + "key": "WeightBilled", + "value": "integer" + } + ] + +``` + +**DUPK - Domestic Unpacking** +```json + + "params": [ + { + "key": "WeightBilled", + "value": "integer" + } + ] + +``` + +**DPK - Domestic Packing** +```json + + "params": [ + { + "key": "WeightBilled", + "value": "integer" + } + ] + +``` + +**DNPK - Domestic NTS Packing** +```json + + "params": [ + { + "key": "WeightBilled", + "value": "integer" + } + ] + +``` + +**DPK - Domestic Packing** +```json + + "params": [ + { + "key": "WeightBilled", + "value": "integer" + } + ] + +``` + +**DOP - Domestic Origin Price** +```json + + "params": [ + { + "key": "WeightBilled", + "value": "integer" + } + ] + +``` + +**DDP - Domestic Destination Price** +```json + + "params": [ + { + "key": "WeightBilled", + "value": "integer" + } + ] + +``` + +Domestic SIT Service Items & Accepted Payment Request Parameters: +--- **DOFSIT - Domestic origin 1st day SIT** ```json @@ -208,6 +319,76 @@ The lowest weight found is the true shipment weight, and thus we search the chai } ] +``` +--- + +International Basic Service Items & Accepted Payment Request Parameters: +--- +Just like domestic shipments & service items, if `WeightBilled` is not provided then the full shipment weight (`PrimeActualWeight`) will be considered in the calculation. +**NOTE**: `POEFSC` & `PODFSC` service items must have a port associated on the service item in order to successfully add it to a payment request. To update the port of a service item, you must use the (#operation/updateMTOServiceItem) endpoint. + +**ISLH - International Shipping & Linehaul** +```json + + "params": [ + { + "key": "WeightBilled", + "value": "integer" + } + ] + +``` + +**IHPK - International HHG Pack** +```json + + "params": [ + { + "key": "WeightBilled", + "value": "integer" + } + ] + +``` + +**IHUPK - International HHG Unpack** +```json + + "params": [ + { + "key": "WeightBilled", + "value": "integer" + } + ] + +``` + +**POEFSC - International Port of Embarkation Fuel Surcharge** + + **NOTE**: POEFSC requires `ActualPickupDate` to be updated on the shipment & `POELocation` on the service item. + +```json + + "params": [ + { + "key": "WeightBilled", + "value": "integer" + } + ] + +``` + +**PODFSC - International Port of Debarkation Fuel Surcharge** +**NOTE**: PODFSC requires `ActualPickupDate` to be updated on the shipment & `PODLocation` on the service item. +```json + + "params": [ + { + "key": "WeightBilled", + "value": "integer" + } + ] + ``` --- */ diff --git a/pkg/gen/primemessages/address.go b/pkg/gen/primemessages/address.go index 2fe5ba87adb..4ff5b6f7932 100644 --- a/pkg/gen/primemessages/address.go +++ b/pkg/gen/primemessages/address.go @@ -36,6 +36,10 @@ type Address struct { // Example: LOS ANGELES County *string `json:"county,omitempty"` + // destination gbloc + // Pattern: ^[A-Z]{4}$ + DestinationGbloc *string `json:"destinationGbloc,omitempty"` + // e tag // Read Only: true ETag string `json:"eTag,omitempty"` @@ -91,6 +95,10 @@ func (m *Address) Validate(formats strfmt.Registry) error { res = append(res, err) } + if err := m.validateDestinationGbloc(formats); err != nil { + res = append(res, err) + } + if err := m.validateID(formats); err != nil { res = append(res, err) } @@ -138,6 +146,18 @@ func (m *Address) validateCountry(formats strfmt.Registry) error { return nil } +func (m *Address) validateDestinationGbloc(formats strfmt.Registry) error { + if swag.IsZero(m.DestinationGbloc) { // not required + return nil + } + + if err := validate.Pattern("destinationGbloc", "body", *m.DestinationGbloc, `^[A-Z]{4}$`); err != nil { + return err + } + + return nil +} + func (m *Address) validateID(formats strfmt.Registry) error { if swag.IsZero(m.ID) { // not required return nil diff --git a/pkg/gen/primev2api/embedded_spec.go b/pkg/gen/primev2api/embedded_spec.go index c6c054f45ec..1c898ceef1c 100644 --- a/pkg/gen/primev2api/embedded_spec.go +++ b/pkg/gen/primev2api/embedded_spec.go @@ -399,6 +399,11 @@ func init() { "x-nullable": true, "example": "LOS ANGELES" }, + "destinationGbloc": { + "type": "string", + "pattern": "^[A-Z]{4}$", + "x-nullable": true + }, "eTag": { "type": "string", "readOnly": true @@ -4016,6 +4021,11 @@ func init() { "x-nullable": true, "example": "LOS ANGELES" }, + "destinationGbloc": { + "type": "string", + "pattern": "^[A-Z]{4}$", + "x-nullable": true + }, "eTag": { "type": "string", "readOnly": true diff --git a/pkg/gen/primev2messages/address.go b/pkg/gen/primev2messages/address.go index 631419ea719..2f1631a297c 100644 --- a/pkg/gen/primev2messages/address.go +++ b/pkg/gen/primev2messages/address.go @@ -36,6 +36,10 @@ type Address struct { // Example: LOS ANGELES County *string `json:"county,omitempty"` + // destination gbloc + // Pattern: ^[A-Z]{4}$ + DestinationGbloc *string `json:"destinationGbloc,omitempty"` + // e tag // Read Only: true ETag string `json:"eTag,omitempty"` @@ -91,6 +95,10 @@ func (m *Address) Validate(formats strfmt.Registry) error { res = append(res, err) } + if err := m.validateDestinationGbloc(formats); err != nil { + res = append(res, err) + } + if err := m.validateID(formats); err != nil { res = append(res, err) } @@ -138,6 +146,18 @@ func (m *Address) validateCountry(formats strfmt.Registry) error { return nil } +func (m *Address) validateDestinationGbloc(formats strfmt.Registry) error { + if swag.IsZero(m.DestinationGbloc) { // not required + return nil + } + + if err := validate.Pattern("destinationGbloc", "body", *m.DestinationGbloc, `^[A-Z]{4}$`); err != nil { + return err + } + + return nil +} + func (m *Address) validateID(formats strfmt.Registry) error { if swag.IsZero(m.ID) { // not required return nil diff --git a/pkg/gen/primev3api/embedded_spec.go b/pkg/gen/primev3api/embedded_spec.go index 424ab464dbf..5e92ba704ac 100644 --- a/pkg/gen/primev3api/embedded_spec.go +++ b/pkg/gen/primev3api/embedded_spec.go @@ -405,6 +405,11 @@ func init() { "x-nullable": true, "example": "LOS ANGELES" }, + "destinationGbloc": { + "type": "string", + "pattern": "^[A-Z]{4}$", + "x-nullable": true + }, "eTag": { "type": "string", "readOnly": true @@ -4707,6 +4712,11 @@ func init() { "x-nullable": true, "example": "LOS ANGELES" }, + "destinationGbloc": { + "type": "string", + "pattern": "^[A-Z]{4}$", + "x-nullable": true + }, "eTag": { "type": "string", "readOnly": true diff --git a/pkg/gen/primev3messages/address.go b/pkg/gen/primev3messages/address.go index edffd06b01c..43fbf3bc550 100644 --- a/pkg/gen/primev3messages/address.go +++ b/pkg/gen/primev3messages/address.go @@ -36,6 +36,10 @@ type Address struct { // Example: LOS ANGELES County *string `json:"county,omitempty"` + // destination gbloc + // Pattern: ^[A-Z]{4}$ + DestinationGbloc *string `json:"destinationGbloc,omitempty"` + // e tag // Read Only: true ETag string `json:"eTag,omitempty"` @@ -91,6 +95,10 @@ func (m *Address) Validate(formats strfmt.Registry) error { res = append(res, err) } + if err := m.validateDestinationGbloc(formats); err != nil { + res = append(res, err) + } + if err := m.validateID(formats); err != nil { res = append(res, err) } @@ -138,6 +146,18 @@ func (m *Address) validateCountry(formats strfmt.Registry) error { return nil } +func (m *Address) validateDestinationGbloc(formats strfmt.Registry) error { + if swag.IsZero(m.DestinationGbloc) { // not required + return nil + } + + if err := validate.Pattern("destinationGbloc", "body", *m.DestinationGbloc, `^[A-Z]{4}$`); err != nil { + return err + } + + return nil +} + func (m *Address) validateID(formats strfmt.Registry) error { if swag.IsZero(m.ID) { // not required return nil diff --git a/pkg/handlers/primeapi/allowed_payment_service_item_params.go b/pkg/handlers/primeapi/allowed_payment_service_item_params.go index cc40edc4ff8..809582a592a 100644 --- a/pkg/handlers/primeapi/allowed_payment_service_item_params.go +++ b/pkg/handlers/primeapi/allowed_payment_service_item_params.go @@ -67,6 +67,21 @@ var ( models.ReServiceCodeDOSFSC: { models.ServiceItemParamNameWeightBilled, }, + models.ReServiceCodeISLH: { + models.ServiceItemParamNameWeightBilled, + }, + models.ReServiceCodeIHPK: { + models.ServiceItemParamNameWeightBilled, + }, + models.ReServiceCodeIHUPK: { + models.ServiceItemParamNameWeightBilled, + }, + models.ReServiceCodePOEFSC: { + models.ServiceItemParamNameWeightBilled, + }, + models.ReServiceCodePODFSC: { + models.ServiceItemParamNameWeightBilled, + }, } ) diff --git a/pkg/handlers/primeapi/mto_shipment.go b/pkg/handlers/primeapi/mto_shipment.go index 78c7159f2b2..a93967aea89 100644 --- a/pkg/handlers/primeapi/mto_shipment.go +++ b/pkg/handlers/primeapi/mto_shipment.go @@ -67,7 +67,7 @@ type DeleteMTOShipmentHandler struct { services.ShipmentDeleter } -// Handle handler that updates a mto shipment +// Handle handler that deletes a mto shipment func (h DeleteMTOShipmentHandler) Handle(params mtoshipmentops.DeleteMTOShipmentParams) middleware.Responder { return h.AuditableAppContextFromRequestWithErrors(params.HTTPRequest, func(appCtx appcontext.AppContext) (middleware.Responder, error) { diff --git a/pkg/handlers/primeapi/payloads/model_to_payload.go b/pkg/handlers/primeapi/payloads/model_to_payload.go index 10a1e30be8c..8fb3514b767 100644 --- a/pkg/handlers/primeapi/payloads/model_to_payload.go +++ b/pkg/handlers/primeapi/payloads/model_to_payload.go @@ -287,7 +287,8 @@ func Address(address *models.Address) *primemessages.Address { if address == nil { return nil } - return &primemessages.Address{ + + payloadAddress := &primemessages.Address{ ID: strfmt.UUID(address.ID.String()), StreetAddress1: &address.StreetAddress1, StreetAddress2: address.StreetAddress2, @@ -299,6 +300,12 @@ func Address(address *models.Address) *primemessages.Address { County: address.County, ETag: etag.GenerateEtag(address.UpdatedAt), } + + if address.UsPostRegionCityID != nil && address.UsPostRegionCityID != &uuid.Nil { + payloadAddress.UsPostRegionCitiesID = strfmt.UUID(address.UsPostRegionCityID.String()) + } + + return payloadAddress } // StorageFacility payload diff --git a/pkg/handlers/primeapi/payloads/model_to_payload_test.go b/pkg/handlers/primeapi/payloads/model_to_payload_test.go index f1f038d5f6a..2414ca5c253 100644 --- a/pkg/handlers/primeapi/payloads/model_to_payload_test.go +++ b/pkg/handlers/primeapi/payloads/model_to_payload_test.go @@ -595,6 +595,33 @@ func (suite *PayloadsSuite) TestShipmentAddressUpdate() { suite.Equal(strfmt.UUID(shipmentAddressUpdate.ID.String()), result.ID) } +func (suite *PayloadsSuite) TestAddress() { + usprcId := uuid.Must(uuid.NewV4()) + shipmentAddress := &models.Address{ + ID: uuid.Must(uuid.NewV4()), + StreetAddress1: "400 Drive St", + City: "Charleston", + County: models.StringPointer("Charleston"), + State: "SC", + PostalCode: "29404", + UsPostRegionCityID: &usprcId, + } + + result := Address(shipmentAddress) + suite.NotNil(result) + suite.Equal(strfmt.UUID(shipmentAddress.ID.String()), result.ID) + suite.Equal(strfmt.UUID(usprcId.String()), result.UsPostRegionCitiesID) + + result = Address(nil) + suite.Nil(result) + + usprcId = uuid.Nil + shipmentAddress.UsPostRegionCityID = &uuid.Nil + result = Address(shipmentAddress) + suite.NotNil(result) + suite.Equal(strfmt.UUID(""), result.UsPostRegionCitiesID) +} + func (suite *PayloadsSuite) TestMTOServiceItemDCRT() { reServiceCode := models.ReServiceCodeDCRT reason := "reason" diff --git a/pkg/handlers/primeapi/payloads/payload_to_model.go b/pkg/handlers/primeapi/payloads/payload_to_model.go index 0a7b5a0c58a..08a64b02b82 100644 --- a/pkg/handlers/primeapi/payloads/payload_to_model.go +++ b/pkg/handlers/primeapi/payloads/payload_to_model.go @@ -40,6 +40,7 @@ func AddressModel(address *primemessages.Address) *models.Address { ID: uuid.FromStringOrNil(address.ID.String()), StreetAddress2: address.StreetAddress2, StreetAddress3: address.StreetAddress3, + County: address.County, } if address.StreetAddress1 != nil { modelAddress.StreetAddress1 = *address.StreetAddress1 @@ -56,6 +57,10 @@ func AddressModel(address *primemessages.Address) *models.Address { if address.Country != nil { modelAddress.Country = CountryModel(address.Country) } + usPostRegionCitiesID := uuid.FromStringOrNil(address.UsPostRegionCitiesID.String()) + if usPostRegionCitiesID != uuid.Nil { + modelAddress.UsPostRegionCityID = &usPostRegionCitiesID + } return modelAddress } diff --git a/pkg/handlers/primeapi/payloads/payload_to_model_test.go b/pkg/handlers/primeapi/payloads/payload_to_model_test.go index 694e8899174..4ceff5aeb1f 100644 --- a/pkg/handlers/primeapi/payloads/payload_to_model_test.go +++ b/pkg/handlers/primeapi/payloads/payload_to_model_test.go @@ -67,12 +67,14 @@ func (suite *PayloadsSuite) TestMTOServiceItemModel() { originPostalCode := "90210" originStreet1 := "123 Rodeo Dr." originCounty1 := "LOS ANGELES" + originUSPRCID := strfmt.UUID(uuid.Must(uuid.NewV4()).String()) sitHHGActualOriginAddress := primemessages.Address{ - State: &originState, - City: &originCity, - PostalCode: &originPostalCode, - StreetAddress1: &originStreet1, - County: &originCounty1, + State: &originState, + City: &originCity, + PostalCode: &originPostalCode, + StreetAddress1: &originStreet1, + County: &originCounty1, + UsPostRegionCitiesID: originUSPRCID, } destReason := "service member will pick up from storage at destination" @@ -83,11 +85,13 @@ func (suite *PayloadsSuite) TestMTOServiceItemModel() { destPostalCode := "90210" destCounty := "LOS ANGELES" destStreet := "123 Rodeo Dr." + destUSPRCID := strfmt.UUID(uuid.Must(uuid.NewV4()).String()) sitFinalDestAddress := primemessages.Address{ - City: &destCity, - PostalCode: &destPostalCode, - StreetAddress1: &destStreet, - County: &destCounty, + City: &destCity, + PostalCode: &destPostalCode, + StreetAddress1: &destStreet, + County: &destCounty, + UsPostRegionCitiesID: destUSPRCID, } destServiceItem := &primemessages.MTOServiceItemDestSIT{ @@ -333,6 +337,7 @@ func (suite *PayloadsSuite) TestMTOServiceItemModel() { suite.Equal(models.ReServiceCodeDDFSIT, returnedModel.ReService.Code) suite.Equal(destPostalCode, returnedModel.SITDestinationFinalAddress.PostalCode) suite.Equal(destStreet, returnedModel.SITDestinationFinalAddress.StreetAddress1) + suite.Equal(destUSPRCID.String(), returnedModel.SITDestinationFinalAddress.UsPostRegionCityID.String()) }) suite.Run("Success - Returns SIT destination service item model without customer contact fields", func() { @@ -352,6 +357,7 @@ func (suite *PayloadsSuite) TestMTOServiceItemModel() { suite.Equal(models.ReServiceCodeDDFSIT, returnedModel.ReService.Code) suite.Equal(destPostalCode, returnedModel.SITDestinationFinalAddress.PostalCode) suite.Equal(destStreet, returnedModel.SITDestinationFinalAddress.StreetAddress1) + suite.Equal(destUSPRCID.String(), returnedModel.SITDestinationFinalAddress.UsPostRegionCityID.String()) suite.Equal(destReason, *returnedModel.Reason) }) } diff --git a/pkg/handlers/primeapi/payment_request_test.go b/pkg/handlers/primeapi/payment_request_test.go index 768e10c0033..114f03aa49b 100644 --- a/pkg/handlers/primeapi/payment_request_test.go +++ b/pkg/handlers/primeapi/payment_request_test.go @@ -947,13 +947,6 @@ func (suite *HandlerSuite) TestCreatePaymentRequestHandlerInvalidMTOReferenceID( suite.IsType(&paymentrequestop.CreatePaymentRequestUnprocessableEntity{}, response) typedResponse := response.(*paymentrequestop.CreatePaymentRequestUnprocessableEntity) - // Validate outgoing payload - // TODO: Can't validate the response because of the issue noted below. Figure out a way to - // either alter the service or relax the swagger requirements. - // suite.NoError(typedResponse.Payload.Validate(strfmt.Default)) - // CreatePaymentRequestCheck is returning apperror.InvalidCreateInputError without any validation errors - // so InvalidFields won't be added to the payload. - suite.Contains(*typedResponse.Payload.Detail, "has missing ReferenceID") }) @@ -1013,13 +1006,6 @@ func (suite *HandlerSuite) TestCreatePaymentRequestHandlerInvalidMTOReferenceID( suite.IsType(&paymentrequestop.CreatePaymentRequestUnprocessableEntity{}, response) typedResponse := response.(*paymentrequestop.CreatePaymentRequestUnprocessableEntity) - // Validate outgoing payload - // TODO: Can't validate the response because of the issue noted below. Figure out a way to - // either alter the service or relax the swagger requirements. - // suite.NoError(typedResponse.Payload.Validate(strfmt.Default)) - // CreatePaymentRequestCheck is returning apperror.InvalidCreateInputError without any validation errors - // so InvalidFields won't be added to the payload. - suite.Contains(*typedResponse.Payload.Detail, "has missing ReferenceID") }) } diff --git a/pkg/handlers/primeapiv2/payloads/model_to_payload.go b/pkg/handlers/primeapiv2/payloads/model_to_payload.go index c3e83a07cf3..4b624337932 100644 --- a/pkg/handlers/primeapiv2/payloads/model_to_payload.go +++ b/pkg/handlers/primeapiv2/payloads/model_to_payload.go @@ -218,7 +218,7 @@ func Address(address *models.Address) *primev2messages.Address { if address == nil { return nil } - return &primev2messages.Address{ + payloadAddress := &primev2messages.Address{ ID: strfmt.UUID(address.ID.String()), StreetAddress1: &address.StreetAddress1, StreetAddress2: address.StreetAddress2, @@ -230,6 +230,12 @@ func Address(address *models.Address) *primev2messages.Address { County: address.County, ETag: etag.GenerateEtag(address.UpdatedAt), } + + if address.UsPostRegionCityID != nil && address.UsPostRegionCityID != &uuid.Nil { + payloadAddress.UsPostRegionCitiesID = strfmt.UUID(address.UsPostRegionCityID.String()) + } + + return payloadAddress } // StorageFacility payload diff --git a/pkg/handlers/primeapiv2/payloads/model_to_payload_test.go b/pkg/handlers/primeapiv2/payloads/model_to_payload_test.go index ec125590da5..8c250786af4 100644 --- a/pkg/handlers/primeapiv2/payloads/model_to_payload_test.go +++ b/pkg/handlers/primeapiv2/payloads/model_to_payload_test.go @@ -935,3 +935,30 @@ func (suite *PayloadsSuite) TestMarketCode() { suite.Equal("i", result, "Expected result to be 'i' for international market code") }) } + +func (suite *PayloadsSuite) TestAddress() { + usprcId := uuid.Must(uuid.NewV4()) + shipmentAddress := &models.Address{ + ID: uuid.Must(uuid.NewV4()), + StreetAddress1: "400 Drive St", + City: "Charleston", + County: models.StringPointer("Charleston"), + State: "SC", + PostalCode: "29404", + UsPostRegionCityID: &usprcId, + } + + result := Address(shipmentAddress) + suite.NotNil(result) + suite.Equal(strfmt.UUID(shipmentAddress.ID.String()), result.ID) + suite.Equal(strfmt.UUID(usprcId.String()), result.UsPostRegionCitiesID) + + result = Address(nil) + suite.Nil(result) + + usprcId = uuid.Nil + shipmentAddress.UsPostRegionCityID = &uuid.Nil + result = Address(shipmentAddress) + suite.NotNil(result) + suite.Equal(strfmt.UUID(""), result.UsPostRegionCitiesID) +} diff --git a/pkg/handlers/primeapiv2/payloads/payload_to_model.go b/pkg/handlers/primeapiv2/payloads/payload_to_model.go index 8c8b663d123..40c697b3672 100644 --- a/pkg/handlers/primeapiv2/payloads/payload_to_model.go +++ b/pkg/handlers/primeapiv2/payloads/payload_to_model.go @@ -40,6 +40,7 @@ func AddressModel(address *primev2messages.Address) *models.Address { ID: uuid.FromStringOrNil(address.ID.String()), StreetAddress2: address.StreetAddress2, StreetAddress3: address.StreetAddress3, + County: address.County, } if address.StreetAddress1 != nil { modelAddress.StreetAddress1 = *address.StreetAddress1 @@ -56,6 +57,10 @@ func AddressModel(address *primev2messages.Address) *models.Address { if address.Country != nil { modelAddress.Country = CountryModel(address.Country) } + usPostRegionCitiesID := uuid.FromStringOrNil(address.UsPostRegionCitiesID.String()) + if usPostRegionCitiesID != uuid.Nil { + modelAddress.UsPostRegionCityID = &usPostRegionCitiesID + } return modelAddress } diff --git a/pkg/handlers/primeapiv2/payloads/payload_to_model_test.go b/pkg/handlers/primeapiv2/payloads/payload_to_model_test.go index ccfd9a10f21..a576e36173e 100644 --- a/pkg/handlers/primeapiv2/payloads/payload_to_model_test.go +++ b/pkg/handlers/primeapiv2/payloads/payload_to_model_test.go @@ -65,10 +65,12 @@ func (suite *PayloadsSuite) TestMTOServiceItemModel() { destCity := "Beverly Hills" destPostalCode := "90210" destStreet := "123 Rodeo Dr." + destUSPRCID := strfmt.UUID(uuid.Must(uuid.NewV4()).String()) sitFinalDestAddress := primev2messages.Address{ - City: &destCity, - PostalCode: &destPostalCode, - StreetAddress1: &destStreet, + City: &destCity, + PostalCode: &destPostalCode, + StreetAddress1: &destStreet, + UsPostRegionCitiesID: destUSPRCID, } destServiceItem := &primev2messages.MTOServiceItemDestSIT{ @@ -291,6 +293,7 @@ func (suite *PayloadsSuite) TestMTOServiceItemModel() { suite.Equal(models.ReServiceCodeDDFSIT, returnedModel.ReService.Code) suite.Equal(destPostalCode, returnedModel.SITDestinationFinalAddress.PostalCode) suite.Equal(destStreet, returnedModel.SITDestinationFinalAddress.StreetAddress1) + suite.Equal(destUSPRCID.String(), returnedModel.SITDestinationFinalAddress.UsPostRegionCityID.String()) }) suite.Run("Success - Returns SIT destination service item model without customer contact fields", func() { @@ -310,6 +313,7 @@ func (suite *PayloadsSuite) TestMTOServiceItemModel() { suite.Equal(models.ReServiceCodeDDFSIT, returnedModel.ReService.Code) suite.Equal(destPostalCode, returnedModel.SITDestinationFinalAddress.PostalCode) suite.Equal(destStreet, returnedModel.SITDestinationFinalAddress.StreetAddress1) + suite.Equal(destUSPRCID.String(), returnedModel.SITDestinationFinalAddress.UsPostRegionCityID.String()) suite.Equal(destReason, *returnedModel.Reason) }) } diff --git a/pkg/handlers/primeapiv3/payloads/model_to_payload.go b/pkg/handlers/primeapiv3/payloads/model_to_payload.go index 841192ec0e6..fc11ef66bac 100644 --- a/pkg/handlers/primeapiv3/payloads/model_to_payload.go +++ b/pkg/handlers/primeapiv3/payloads/model_to_payload.go @@ -245,18 +245,25 @@ func Address(address *models.Address) *primev3messages.Address { if address == nil { return nil } - return &primev3messages.Address{ - ID: strfmt.UUID(address.ID.String()), - StreetAddress1: &address.StreetAddress1, - StreetAddress2: address.StreetAddress2, - StreetAddress3: address.StreetAddress3, - City: &address.City, - State: &address.State, - PostalCode: &address.PostalCode, - Country: Country(address.Country), - ETag: etag.GenerateEtag(address.UpdatedAt), - County: address.County, + payloadAddress := &primev3messages.Address{ + ID: strfmt.UUID(address.ID.String()), + StreetAddress1: &address.StreetAddress1, + StreetAddress2: address.StreetAddress2, + StreetAddress3: address.StreetAddress3, + City: &address.City, + State: &address.State, + PostalCode: &address.PostalCode, + Country: Country(address.Country), + ETag: etag.GenerateEtag(address.UpdatedAt), + County: address.County, + DestinationGbloc: address.DestinationGbloc, } + + if address.UsPostRegionCityID != nil && address.UsPostRegionCityID != &uuid.Nil { + payloadAddress.UsPostRegionCitiesID = strfmt.UUID(address.UsPostRegionCityID.String()) + } + + return payloadAddress } // PPM Destination payload diff --git a/pkg/handlers/primeapiv3/payloads/model_to_payload_test.go b/pkg/handlers/primeapiv3/payloads/model_to_payload_test.go index cdc4dc13b7c..ef37ecc322d 100644 --- a/pkg/handlers/primeapiv3/payloads/model_to_payload_test.go +++ b/pkg/handlers/primeapiv3/payloads/model_to_payload_test.go @@ -144,12 +144,13 @@ func (suite *PayloadsSuite) TestMoveTaskOrder() { PostalCode: fairbanksAlaskaPostalCode, }, DestinationAddress: &models.Address{ - StreetAddress1: "123 Main St", - StreetAddress2: &streetAddress2, - StreetAddress3: &streetAddress3, - City: "Anchorage", - State: "AK", - PostalCode: anchorageAlaskaPostalCode, + StreetAddress1: "123 Main St", + StreetAddress2: &streetAddress2, + StreetAddress3: &streetAddress3, + City: "Anchorage", + State: "AK", + PostalCode: anchorageAlaskaPostalCode, + DestinationGbloc: models.StringPointer("JEAT"), }, }) newMove.MTOShipments = append(newMove.MTOShipments, models.MTOShipment{ @@ -162,12 +163,13 @@ func (suite *PayloadsSuite) TestMoveTaskOrder() { PostalCode: wasillaAlaskaPostalCode, }, DestinationAddress: &models.Address{ - StreetAddress1: "123 Main St", - StreetAddress2: &streetAddress2, - StreetAddress3: &streetAddress3, - City: "Wasilla", - State: "AK", - PostalCode: wasillaAlaskaPostalCode, + StreetAddress1: "123 Main St", + StreetAddress2: &streetAddress2, + StreetAddress3: &streetAddress3, + City: "Wasilla", + State: "AK", + PostalCode: wasillaAlaskaPostalCode, + DestinationGbloc: models.StringPointer("JEAT"), }, }) newMove.MTOShipments = append(newMove.MTOShipments, models.MTOShipment{ @@ -231,20 +233,22 @@ func (suite *PayloadsSuite) TestMoveTaskOrder() { }) newMove.MTOShipments = append(newMove.MTOShipments, models.MTOShipment{ PickupAddress: &models.Address{ - StreetAddress1: "123 Main St", - StreetAddress2: &streetAddress2, - StreetAddress3: &streetAddress3, - City: "Beverly Hills", - State: "CA", - PostalCode: "90210", + StreetAddress1: "123 Main St", + StreetAddress2: &streetAddress2, + StreetAddress3: &streetAddress3, + City: "Beverly Hills", + State: "CA", + PostalCode: "90210", + DestinationGbloc: models.StringPointer("JEAT"), }, DestinationAddress: &models.Address{ - StreetAddress1: "123 Main St", - StreetAddress2: &streetAddress2, - StreetAddress3: &streetAddress3, - City: "Beverly Hills", - State: "CA", - PostalCode: "90210", + StreetAddress1: "123 Main St", + StreetAddress2: &streetAddress2, + StreetAddress3: &streetAddress3, + City: "Beverly Hills", + State: "CA", + PostalCode: "90210", + DestinationGbloc: models.StringPointer("JEAT"), }, }) @@ -351,6 +355,7 @@ func (suite *PayloadsSuite) TestMoveTaskOrder() { } else { suite.NotNil(shipment.PickupAddress) suite.NotNil(shipment.DestinationAddress) + suite.NotNil(shipment.DestinationAddress.DestinationGbloc) if slices.Contains(expectedAlaskaPostalCodes, *shipment.PickupAddress.PostalCode) { ra, contains := shipmentPostalCodeRateAreaLookupMap[*shipment.PickupAddress.PostalCode] suite.True(contains) @@ -1386,3 +1391,29 @@ func (suite *PayloadsSuite) TestMTOServiceItemPODFSC() { suite.Equal(mtoPayload.MtoShipments[0].PortOfDebarkation.Zip, portLocation.UsPostRegionCity.UsprZipID) suite.Equal(mtoPayload.MtoShipments[0].PortOfDebarkation.Country, portLocation.Country.CountryName) } +func (suite *PayloadsSuite) TestAddress() { + usprcId := uuid.Must(uuid.NewV4()) + shipmentAddress := &models.Address{ + ID: uuid.Must(uuid.NewV4()), + StreetAddress1: "400 Drive St", + City: "Charleston", + County: models.StringPointer("Charleston"), + State: "SC", + PostalCode: "29404", + UsPostRegionCityID: &usprcId, + } + + result := Address(shipmentAddress) + suite.NotNil(result) + suite.Equal(strfmt.UUID(shipmentAddress.ID.String()), result.ID) + suite.Equal(strfmt.UUID(usprcId.String()), result.UsPostRegionCitiesID) + + result = Address(nil) + suite.Nil(result) + + usprcId = uuid.Nil + shipmentAddress.UsPostRegionCityID = &uuid.Nil + result = Address(shipmentAddress) + suite.NotNil(result) + suite.Equal(strfmt.UUID(""), result.UsPostRegionCitiesID) +} diff --git a/pkg/handlers/primeapiv3/payloads/payload_to_model.go b/pkg/handlers/primeapiv3/payloads/payload_to_model.go index aaa2a1a671e..47634cb343a 100644 --- a/pkg/handlers/primeapiv3/payloads/payload_to_model.go +++ b/pkg/handlers/primeapiv3/payloads/payload_to_model.go @@ -41,6 +41,7 @@ func AddressModel(address *primev3messages.Address) *models.Address { ID: uuid.FromStringOrNil(address.ID.String()), StreetAddress2: address.StreetAddress2, StreetAddress3: address.StreetAddress3, + County: address.County, } if address.StreetAddress1 != nil { modelAddress.StreetAddress1 = *address.StreetAddress1 @@ -57,6 +58,10 @@ func AddressModel(address *primev3messages.Address) *models.Address { if address.Country != nil { modelAddress.Country = CountryModel(address.Country) } + usPostRegionCitiesID := uuid.FromStringOrNil(address.UsPostRegionCitiesID.String()) + if usPostRegionCitiesID != uuid.Nil { + modelAddress.UsPostRegionCityID = &usPostRegionCitiesID + } return modelAddress } @@ -94,6 +99,10 @@ func PPMDestinationAddressModel(address *primev3messages.PPMDestinationAddress) if address.Country != nil { modelAddress.Country = CountryModel(address.Country) } + usPostRegionCitiesID := uuid.FromStringOrNil(address.UsPostRegionCitiesID.String()) + if usPostRegionCitiesID != uuid.Nil { + modelAddress.UsPostRegionCityID = &usPostRegionCitiesID + } return modelAddress } @@ -203,6 +212,8 @@ func MTOShipmentModelFromCreate(mtoShipment *primev3messages.CreateMTOShipment) CounselorRemarks: mtoShipment.CounselorRemarks, HasSecondaryPickupAddress: handlers.FmtBool(false), HasSecondaryDeliveryAddress: handlers.FmtBool(false), + HasTertiaryPickupAddress: handlers.FmtBool(false), + HasTertiaryDeliveryAddress: handlers.FmtBool(false), } if mtoShipment.ShipmentType != nil { diff --git a/pkg/handlers/primeapiv3/payloads/payload_to_model_test.go b/pkg/handlers/primeapiv3/payloads/payload_to_model_test.go index 9d9ff85041f..be2e2356114 100644 --- a/pkg/handlers/primeapiv3/payloads/payload_to_model_test.go +++ b/pkg/handlers/primeapiv3/payloads/payload_to_model_test.go @@ -65,10 +65,12 @@ func (suite *PayloadsSuite) TestMTOServiceItemModel() { destCity := "Beverly Hills" destPostalCode := "90210" destStreet := "123 Rodeo Dr." + destUSPRCID := strfmt.UUID(uuid.Must(uuid.NewV4()).String()) sitFinalDestAddress := primev3messages.Address{ - City: &destCity, - PostalCode: &destPostalCode, - StreetAddress1: &destStreet, + City: &destCity, + PostalCode: &destPostalCode, + StreetAddress1: &destStreet, + UsPostRegionCitiesID: destUSPRCID, } destServiceItem := &primev3messages.MTOServiceItemDestSIT{ @@ -291,6 +293,7 @@ func (suite *PayloadsSuite) TestMTOServiceItemModel() { suite.Equal(models.ReServiceCodeDDFSIT, returnedModel.ReService.Code) suite.Equal(destPostalCode, returnedModel.SITDestinationFinalAddress.PostalCode) suite.Equal(destStreet, returnedModel.SITDestinationFinalAddress.StreetAddress1) + suite.Equal(destUSPRCID.String(), returnedModel.SITDestinationFinalAddress.UsPostRegionCityID.String()) }) suite.Run("Success - Returns SIT destination service item model without customer contact fields", func() { @@ -310,6 +313,7 @@ func (suite *PayloadsSuite) TestMTOServiceItemModel() { suite.Equal(models.ReServiceCodeDDFSIT, returnedModel.ReService.Code) suite.Equal(destPostalCode, returnedModel.SITDestinationFinalAddress.PostalCode) suite.Equal(destStreet, returnedModel.SITDestinationFinalAddress.StreetAddress1) + suite.Equal(destUSPRCID.String(), returnedModel.SITDestinationFinalAddress.UsPostRegionCityID.String()) suite.Equal(destReason, *returnedModel.Reason) }) } @@ -496,31 +500,35 @@ func (suite *PayloadsSuite) TestMTOShipmentModelFromCreate() { }) pickupAddress := models.Address{ - StreetAddress1: "some address", - City: "city", - State: "CA", - PostalCode: "90210", + StreetAddress1: "some address", + City: "city", + State: "CA", + PostalCode: "90210", + UsPostRegionCityID: models.UUIDPointer(uuid.Must(uuid.NewV4())), } pickupAddressMessage := primev3messages.Address{ - StreetAddress1: &pickupAddress.StreetAddress1, - City: &pickupAddress.City, - State: &pickupAddress.State, - PostalCode: &pickupAddress.PostalCode, + StreetAddress1: &pickupAddress.StreetAddress1, + City: &pickupAddress.City, + State: &pickupAddress.State, + PostalCode: &pickupAddress.PostalCode, + UsPostRegionCitiesID: strfmt.UUID(pickupAddress.UsPostRegionCityID.String()), } destinationAddress := models.Address{ - StreetAddress1: "some address", - City: "city", - State: "IL", - PostalCode: "62225", + StreetAddress1: "some address", + City: "city", + State: "IL", + PostalCode: "62225", + UsPostRegionCityID: models.UUIDPointer(uuid.Must(uuid.NewV4())), } destinationAddressMessage := primev3messages.Address{ - StreetAddress1: &destinationAddress.StreetAddress1, - City: &destinationAddress.City, - State: &destinationAddress.State, - PostalCode: &destinationAddress.PostalCode, + StreetAddress1: &destinationAddress.StreetAddress1, + City: &destinationAddress.City, + State: &destinationAddress.State, + PostalCode: &destinationAddress.PostalCode, + UsPostRegionCitiesID: strfmt.UUID(destinationAddress.UsPostRegionCityID.String()), } agentEmail := "test@test.gov" @@ -563,7 +571,9 @@ func (suite *PayloadsSuite) TestMTOShipmentModelFromCreate() { suite.Nil(err) suite.NotNil(model.PickupAddress) + suite.NotNil(model.PickupAddress.UsPostRegionCityID) suite.NotNil(model.DestinationAddress) + suite.NotNil(model.DestinationAddress.UsPostRegionCityID) suite.NotNil(model.ShipmentType) suite.NotNil(model.PrimeEstimatedWeight) }) @@ -670,22 +680,25 @@ func (suite *PayloadsSuite) TestPPMShipmentModelFromCreate() { spouseProGearWeight := int64(50) address := models.Address{ - StreetAddress1: "some address", - City: "city", - State: "state", - PostalCode: "12345", + StreetAddress1: "some address", + City: "city", + State: "state", + PostalCode: "12345", + UsPostRegionCityID: models.UUIDPointer(uuid.Must(uuid.NewV4())), } address2 := models.Address{ - StreetAddress1: "some address", - City: "city", - State: "state", - PostalCode: "11111", + StreetAddress1: "some address", + City: "city", + State: "state", + PostalCode: "11111", + UsPostRegionCityID: models.UUIDPointer(uuid.Must(uuid.NewV4())), } address3 := models.Address{ - StreetAddress1: "some address", - City: "city", - State: "state", - PostalCode: "54321", + StreetAddress1: "some address", + City: "city", + State: "state", + PostalCode: "54321", + UsPostRegionCityID: models.UUIDPointer(uuid.Must(uuid.NewV4())), } var pickupAddress primev3messages.Address @@ -696,52 +709,58 @@ func (suite *PayloadsSuite) TestPPMShipmentModelFromCreate() { var tertiaryDestinationAddress primev3messages.Address pickupAddress = primev3messages.Address{ - City: &address.City, - PostalCode: &address.PostalCode, - State: &address.State, - StreetAddress1: &address.StreetAddress1, - StreetAddress2: address.StreetAddress2, - StreetAddress3: address.StreetAddress3, + City: &address.City, + PostalCode: &address.PostalCode, + State: &address.State, + StreetAddress1: &address.StreetAddress1, + StreetAddress2: address.StreetAddress2, + StreetAddress3: address.StreetAddress3, + UsPostRegionCitiesID: strfmt.UUID(address.UsPostRegionCityID.String()), } destinationAddress = primev3messages.PPMDestinationAddress{ - City: &address.City, - PostalCode: &address.PostalCode, - State: &address.State, - StreetAddress1: &address.StreetAddress1, - StreetAddress2: address.StreetAddress2, - StreetAddress3: address.StreetAddress3, + City: &address.City, + PostalCode: &address.PostalCode, + State: &address.State, + StreetAddress1: &address.StreetAddress1, + StreetAddress2: address.StreetAddress2, + StreetAddress3: address.StreetAddress3, + UsPostRegionCitiesID: strfmt.UUID(address.UsPostRegionCityID.String()), } secondaryPickupAddress = primev3messages.Address{ - City: &address2.City, - PostalCode: &address2.PostalCode, - State: &address2.State, - StreetAddress1: &address2.StreetAddress1, - StreetAddress2: address2.StreetAddress2, - StreetAddress3: address2.StreetAddress3, + City: &address2.City, + PostalCode: &address2.PostalCode, + State: &address2.State, + StreetAddress1: &address2.StreetAddress1, + StreetAddress2: address2.StreetAddress2, + StreetAddress3: address2.StreetAddress3, + UsPostRegionCitiesID: strfmt.UUID(address2.UsPostRegionCityID.String()), } secondaryDestinationAddress = primev3messages.Address{ - City: &address2.City, - PostalCode: &address2.PostalCode, - State: &address2.State, - StreetAddress1: &address2.StreetAddress1, - StreetAddress2: address2.StreetAddress2, - StreetAddress3: address2.StreetAddress3, + City: &address2.City, + PostalCode: &address2.PostalCode, + State: &address2.State, + StreetAddress1: &address2.StreetAddress1, + StreetAddress2: address2.StreetAddress2, + StreetAddress3: address2.StreetAddress3, + UsPostRegionCitiesID: strfmt.UUID(address2.UsPostRegionCityID.String()), } tertiaryPickupAddress = primev3messages.Address{ - City: &address3.City, - PostalCode: &address3.PostalCode, - State: &address3.State, - StreetAddress1: &address3.StreetAddress1, - StreetAddress2: address3.StreetAddress2, - StreetAddress3: address3.StreetAddress3, + City: &address3.City, + PostalCode: &address3.PostalCode, + State: &address3.State, + StreetAddress1: &address3.StreetAddress1, + StreetAddress2: address3.StreetAddress2, + StreetAddress3: address3.StreetAddress3, + UsPostRegionCitiesID: strfmt.UUID(address3.UsPostRegionCityID.String()), } tertiaryDestinationAddress = primev3messages.Address{ - City: &address3.City, - PostalCode: &address3.PostalCode, - State: &address3.State, - StreetAddress1: &address3.StreetAddress1, - StreetAddress2: address3.StreetAddress2, - StreetAddress3: address3.StreetAddress3, + City: &address3.City, + PostalCode: &address3.PostalCode, + State: &address3.State, + StreetAddress1: &address3.StreetAddress1, + StreetAddress2: address3.StreetAddress2, + StreetAddress3: address3.StreetAddress3, + UsPostRegionCitiesID: strfmt.UUID(address3.UsPostRegionCityID.String()), } ppmShipment := primev3messages.CreatePPMShipment{ @@ -771,6 +790,12 @@ func (suite *PayloadsSuite) TestPPMShipmentModelFromCreate() { suite.True(*model.HasProGear) suite.Equal(unit.Pound(proGearWeight), *model.ProGearWeight) suite.Equal(unit.Pound(spouseProGearWeight), *model.SpouseProGearWeight) + suite.NotNil(model.PickupAddress.UsPostRegionCityID) + suite.NotNil(model.SecondaryPickupAddress.UsPostRegionCityID) + suite.NotNil(model.TertiaryPickupAddress.UsPostRegionCityID) + suite.NotNil(model.DestinationAddress.UsPostRegionCityID) + suite.NotNil(model.SecondaryDestinationAddress.UsPostRegionCityID) + suite.NotNil(model.TertiaryDestinationAddress.UsPostRegionCityID) suite.True(*model.HasSecondaryPickupAddress) suite.True(*model.HasSecondaryDestinationAddress) suite.True(*model.HasTertiaryPickupAddress) diff --git a/pkg/models/address.go b/pkg/models/address.go index e683f7771ab..d89a163c9aa 100644 --- a/pkg/models/address.go +++ b/pkg/models/address.go @@ -34,6 +34,7 @@ type Address struct { IsOconus *bool `json:"is_oconus" db:"is_oconus"` UsPostRegionCityID *uuid.UUID `json:"us_post_region_cities_id" db:"us_post_region_cities_id"` UsPostRegionCity *UsPostRegionCity `belongs_to:"us_post_region_cities" fk_id:"us_post_region_cities_id"` + DestinationGbloc *string `db:"-"` // this tells Pop not to look in the db for this value } // TableName overrides the table name used by Pop. diff --git a/pkg/models/duty_location.go b/pkg/models/duty_location.go index 57feab234c1..304755da1ab 100644 --- a/pkg/models/duty_location.go +++ b/pkg/models/duty_location.go @@ -119,13 +119,20 @@ func FindDutyLocationsExcludingStates(tx *pop.Connection, search string, exclusi -- search against duty_locations table ( select - id as duty_location_id, - name, - similarity(name, $1) as sim + dl.id as duty_location_id, + dl.name, + similarity(dl.name, $1) as sim from - duty_locations + duty_locations as dl + inner join addresses a on dl.address_id = a.id where - name % $1 + dl.name % $1 + and not exists ( + select 1 + from re_us_post_regions p + where p.uspr_zip_id = a.postal_code + and p.is_po_box = true + ) order by sim desc limit 5 ) -- exclude OCONUS locations that are not active @@ -153,12 +160,20 @@ func FindDutyLocationsExcludingStates(tx *pop.Connection, search string, exclusi ( select duty_location_id, - name, - similarity(name, $1) as sim + dn.name, + similarity(dn.name, $1) as sim from - duty_location_names + duty_location_names as dn + inner join duty_locations dl on dn.duty_location_id = dl.id + inner join addresses a on dl.address_id = a.id where - name % $1 + dn.name % $1 + and not exists ( + select 1 + from re_us_post_regions p + where p.uspr_zip_id = a.postal_code + and p.is_po_box = true + ) order by sim desc limit 5 ) -- exclude OCONUS locations that are not active @@ -198,6 +213,12 @@ func FindDutyLocationsExcludingStates(tx *pop.Connection, search string, exclusi and dl.affiliation is null where a2.postal_code ILIKE $1 + and not exists ( + select 1 + from re_us_post_regions p + where p.uspr_zip_id = a2.postal_code + and p.is_po_box = true + ) limit 5 ) -- exclude OCONUS locations that are not active diff --git a/pkg/models/duty_location_test.go b/pkg/models/duty_location_test.go index e74971d8d65..8727f50d8e5 100644 --- a/pkg/models/duty_location_test.go +++ b/pkg/models/duty_location_test.go @@ -576,3 +576,148 @@ func (suite *ModelSuite) Test_SearchDutyLocations_Exclude_Not_Active_Oconus() { } }) } + +func (suite *ModelSuite) Test_SearchDutyLocations_Exclude_Po_Box_Zip() { + setupDataForDutyLocationSearch := func(postalCode string, dutyLocationName string) models.DutyLocation { + us_country, err := models.FetchCountryByCode(suite.DB(), "US") + suite.NotNil(us_country) + suite.Nil(err) + + usprc, err := models.FindByZipCode(suite.AppContextForTest().DB(), postalCode) + suite.NotNil(usprc) + suite.FatalNoError(err) + + address := models.Address{ + StreetAddress1: "n/a", + City: "SomeCity", + State: "VA", + PostalCode: postalCode, + County: models.StringPointer("SomeCounty"), + IsOconus: models.BoolPointer(true), + UsPostRegionCityID: &usprc.ID, + CountryId: models.UUIDPointer(us_country.ID), + } + suite.MustSave(&address) + + origDutyLocation := factory.BuildDutyLocation(suite.DB(), []factory.Customization{ + { + Model: models.DutyLocation{ + Name: dutyLocationName, + AddressID: address.ID, + ProvidesServicesCounseling: true, + }, + }, + }, nil) + origDutyLocation.Affiliation = nil + suite.MustSave(&origDutyLocation) + + found_duty_location, _ := models.FetchDutyLocation(suite.DB(), origDutyLocation.ID) + + return found_duty_location + } + + const poBoxPostalCode = "92137" + const nonPoBoxPostalCode = "23690" + const nonPoBoxPostalCode2 = "88101" + testDutyLocationName := "test case" + testDutyLocationName2 := "test case 2" + testDutyLocationName3 := "test case 3" + + suite.Run("test search by duty location name - 1 with po box and 2 without po box", func() { + + // duty location with a po box + _ = setupDataForDutyLocationSearch(poBoxPostalCode, testDutyLocationName) + + // duty location without a po box + nonPoBoxDutyLocation := setupDataForDutyLocationSearch(nonPoBoxPostalCode, testDutyLocationName2) + nonPoBoxDutyLocation2 := setupDataForDutyLocationSearch(nonPoBoxPostalCode2, testDutyLocationName3) + + tests := []struct { + query string + dutyLocations []string + }{ + {query: "search duty locations by name test", dutyLocations: []string{testDutyLocationName}}, + } + + expectedDutyLocationNames := []string{nonPoBoxDutyLocation.Name, nonPoBoxDutyLocation2.Name} + + for _, ts := range tests { + dutyLocations, err := models.FindDutyLocationsExcludingStates(suite.DB(), testDutyLocationName, []string{}) + suite.NoError(err) + suite.Require().Equal(2, len(dutyLocations), "Wrong number of duty locations returned from query: %s", ts.query) + for _, o := range dutyLocations { + suite.True(slices.Contains(expectedDutyLocationNames, o.Name)) + } + } + }) + + suite.Run("test search by duty location name - only po box", func() { + + // duty location with a po box + _ = setupDataForDutyLocationSearch(poBoxPostalCode, testDutyLocationName) + + tests := []struct { + query string + dutyLocations []string + }{ + {query: "search duty locations by name test", dutyLocations: []string{testDutyLocationName}}, + } + + for _, ts := range tests { + dutyLocations, err := models.FindDutyLocationsExcludingStates(suite.DB(), testDutyLocationName, []string{}) + suite.NoError(err) + suite.Require().Equal(0, len(dutyLocations), "Wrong number of duty locations returned from query: %s", ts.query) + } + }) + + suite.Run("test search by zip - a po box zip", func() { + + // duty location with a po box + _ = setupDataForDutyLocationSearch(poBoxPostalCode, testDutyLocationName) + + // duty location without a po box + _ = setupDataForDutyLocationSearch(nonPoBoxPostalCode, testDutyLocationName2) + _ = setupDataForDutyLocationSearch(nonPoBoxPostalCode2, testDutyLocationName3) + + tests := []struct { + query string + dutyLocations []string + }{ + {query: "search duty locations by name test", dutyLocations: []string{testDutyLocationName}}, + } + + for _, ts := range tests { + dutyLocations, err := models.FindDutyLocationsExcludingStates(suite.DB(), poBoxPostalCode, []string{}) + suite.NoError(err) + suite.Require().Equal(0, len(dutyLocations), "Wrong number of duty locations returned from query: %s", ts.query) + } + }) + + suite.Run("test search by zip - not a po box zip", func() { + + // duty location with a po box + _ = setupDataForDutyLocationSearch(poBoxPostalCode, testDutyLocationName) + + // duty location without a po box + nonPoBoxDutyLocation := setupDataForDutyLocationSearch(nonPoBoxPostalCode, testDutyLocationName2) + _ = setupDataForDutyLocationSearch(nonPoBoxPostalCode2, testDutyLocationName3) + + tests := []struct { + query string + dutyLocations []string + }{ + {query: "search duty locations by name test", dutyLocations: []string{testDutyLocationName}}, + } + + expectedDutyLocationNames := []string{nonPoBoxDutyLocation.Name} + + for _, ts := range tests { + dutyLocations, err := models.FindDutyLocationsExcludingStates(suite.DB(), nonPoBoxPostalCode, []string{}) + suite.NoError(err) + suite.Require().Equal(1, len(dutyLocations), "Wrong number of duty locations returned from query: %s", ts.query) + for _, o := range dutyLocations { + suite.True(slices.Contains(expectedDutyLocationNames, o.Name)) + } + } + }) +} diff --git a/pkg/models/mto_shipments.go b/pkg/models/mto_shipments.go index d9f677e56da..633cc31e942 100644 --- a/pkg/models/mto_shipments.go +++ b/pkg/models/mto_shipments.go @@ -471,6 +471,25 @@ func UpdateEstimatedPricingForShipmentBasicServiceItems(db *pop.Connection, ship return nil } +// GetDestinationGblocForShipment gets the GBLOC associated with the shipment's destination address +// there are certain exceptions for OCONUS addresses in Alaska Zone II based on affiliation +func GetDestinationGblocForShipment(db *pop.Connection, shipmentID uuid.UUID) (*string, error) { + var gbloc *string + + err := db.RawQuery("SELECT * FROM get_destination_gbloc_for_shipment($1)", shipmentID). + First(&gbloc) + + if err != nil && err != sql.ErrNoRows { + return nil, fmt.Errorf("error fetching destination gbloc for shipment ID: %s with error %w", shipmentID, err) + } + + if gbloc != nil { + return gbloc, nil + } + + return nil, nil +} + // Returns a Shipment for a given id func FetchShipmentByID(db *pop.Connection, shipmentID uuid.UUID) (*MTOShipment, error) { var mtoShipment MTOShipment diff --git a/pkg/models/mto_shipments_test.go b/pkg/models/mto_shipments_test.go index 0af9121e013..4014aa90d12 100644 --- a/pkg/models/mto_shipments_test.go +++ b/pkg/models/mto_shipments_test.go @@ -339,3 +339,149 @@ func (suite *ModelSuite) TestFindShipmentByID() { suite.Equal(models.ErrFetchNotFound, err) }) } + +func (suite *ModelSuite) TestGetDestinationGblocForShipment() { + suite.Run("success - get GBLOC for USAF in AK Zone II", func() { + // Create a USAF move in Alaska Zone II + // this is a hard coded uuid that is a us_post_region_cities_id within AK Zone II + // this should always return MBFL + zone2UUID, err := uuid.FromString("66768964-e0de-41f3-b9be-7ef32e4ae2b4") + suite.FatalNoError(err) + airForce := models.AffiliationAIRFORCE + postalCode := "99501" + + destinationAddress := factory.BuildAddress(suite.DB(), []factory.Customization{ + { + Model: models.Address{ + PostalCode: postalCode, + UsPostRegionCityID: &zone2UUID, + }, + }, + }, nil) + + move := factory.BuildAvailableToPrimeMove(suite.DB(), []factory.Customization{ + { + Model: models.ServiceMember{ + Affiliation: &airForce, + }, + }, + }, nil) + + shipment := factory.BuildMTOShipment(suite.DB(), []factory.Customization{ + { + Model: models.MTOShipment{ + MarketCode: models.MarketCodeInternational, + }, + }, + { + Model: move, + LinkOnly: true, + }, + { + Model: destinationAddress, + LinkOnly: true, + }, + }, nil) + + gbloc, err := models.GetDestinationGblocForShipment(suite.DB(), shipment.ID) + suite.NoError(err) + suite.NotNil(gbloc) + suite.Equal(*gbloc, "MBFL") + }) + suite.Run("success - get GBLOC for Army in AK Zone II", func() { + // Create an ARMY move in Alaska Zone II + zone2UUID, err := uuid.FromString("66768964-e0de-41f3-b9be-7ef32e4ae2b4") + suite.FatalNoError(err) + army := models.AffiliationARMY + postalCode := "99501" + // since we truncate the test db, we need to add the postal_code_to_gbloc value + factory.FetchOrBuildPostalCodeToGBLOC(suite.DB(), "99744", "JEAT") + + destinationAddress := factory.BuildAddress(suite.DB(), []factory.Customization{ + { + Model: models.Address{ + PostalCode: postalCode, + UsPostRegionCityID: &zone2UUID, + }, + }, + }, nil) + + move := factory.BuildAvailableToPrimeMove(suite.DB(), []factory.Customization{ + { + Model: models.ServiceMember{ + Affiliation: &army, + }, + }, + }, nil) + + shipment := factory.BuildMTOShipment(suite.DB(), []factory.Customization{ + { + Model: models.MTOShipment{ + MarketCode: models.MarketCodeInternational, + }, + }, + { + Model: move, + LinkOnly: true, + }, + { + Model: destinationAddress, + LinkOnly: true, + }, + }, nil) + + gbloc, err := models.GetDestinationGblocForShipment(suite.DB(), shipment.ID) + suite.NoError(err) + suite.NotNil(gbloc) + suite.Equal(*gbloc, "JEAT") + }) + suite.Run("success - get GBLOC for USMC in AK Zone II", func() { + // Create a USMC move in Alaska Zone II + // this should always return USMC + zone2UUID, err := uuid.FromString("66768964-e0de-41f3-b9be-7ef32e4ae2b4") + suite.FatalNoError(err) + usmc := models.AffiliationMARINES + postalCode := "99501" + // since we truncate the test db, we need to add the postal_code_to_gbloc value + // this doesn't matter to the db function because it will check for USMC but we are just verifying it won't be JEAT despite the zip matching + factory.FetchOrBuildPostalCodeToGBLOC(suite.DB(), "99744", "JEAT") + + destinationAddress := factory.BuildAddress(suite.DB(), []factory.Customization{ + { + Model: models.Address{ + PostalCode: postalCode, + UsPostRegionCityID: &zone2UUID, + }, + }, + }, nil) + + move := factory.BuildAvailableToPrimeMove(suite.DB(), []factory.Customization{ + { + Model: models.ServiceMember{ + Affiliation: &usmc, + }, + }, + }, nil) + + shipment := factory.BuildMTOShipment(suite.DB(), []factory.Customization{ + { + Model: models.MTOShipment{ + MarketCode: models.MarketCodeInternational, + }, + }, + { + Model: move, + LinkOnly: true, + }, + { + Model: destinationAddress, + LinkOnly: true, + }, + }, nil) + + gbloc, err := models.GetDestinationGblocForShipment(suite.DB(), shipment.ID) + suite.NoError(err) + suite.NotNil(gbloc) + suite.Equal(*gbloc, "USMC") + }) +} diff --git a/pkg/models/order.go b/pkg/models/order.go index da23b6f6c6e..9898e7f27e3 100644 --- a/pkg/models/order.go +++ b/pkg/models/order.go @@ -540,9 +540,8 @@ func (o *Order) IsCompleteForGBL() bool { } func (o *Order) CanSendEmailWithOrdersType() bool { - if o.OrdersType != "BLUEBARK" && o.OrdersType != "SAFETY" { - return true + if o.OrdersType == internalmessages.OrdersTypeBLUEBARK || o.OrdersType == internalmessages.OrdersTypeSAFETY { + return false } - - return false + return true } diff --git a/pkg/models/order_test.go b/pkg/models/order_test.go index 9e3e84f50f8..6ef09fe7598 100644 --- a/pkg/models/order_test.go +++ b/pkg/models/order_test.go @@ -485,3 +485,44 @@ func (suite *ModelSuite) TestSaveOrderWithoutPPM() { suite.Equal(location.ID, orderUpdated.NewDutyLocationID, "Wrong order new_duty_location_id") suite.Equal(newPostalCode, order.NewDutyLocation.Address.PostalCode, "Wrong orig postal code") } + +func (suite *ModelSuite) TestOrderCanSendEmailWithOrdersType() { + suite.Run("Non safety or BB orders can send email", func() { + order := factory.BuildOrder(suite.DB(), []factory.Customization{ + { + Model: m.Order{ + OrdersType: internalmessages.OrdersTypePERMANENTCHANGEOFSTATION, + }, + }, + }, nil) + + canSendEmail := order.CanSendEmailWithOrdersType() + suite.True(canSendEmail) + }) + + suite.Run(" BB orders cannot send email", func() { + order := factory.BuildOrder(suite.DB(), []factory.Customization{ + { + Model: m.Order{ + OrdersType: internalmessages.OrdersTypeBLUEBARK, + }, + }, + }, nil) + + canSendEmail := order.CanSendEmailWithOrdersType() + suite.False(canSendEmail) + }) + + suite.Run("Safety orders cannot send email", func() { + order := factory.BuildOrder(suite.DB(), []factory.Customization{ + { + Model: m.Order{ + OrdersType: internalmessages.OrdersTypeSAFETY, + }, + }, + }, nil) + + canSendEmail := order.CanSendEmailWithOrdersType() + suite.False(canSendEmail) + }) +} diff --git a/pkg/models/re_rate_area.go b/pkg/models/re_rate_area.go index 167b70577ce..7b613b42a28 100644 --- a/pkg/models/re_rate_area.go +++ b/pkg/models/re_rate_area.go @@ -1,6 +1,7 @@ package models import ( + "fmt" "time" "github.com/gobuffalo/pop/v6" @@ -53,3 +54,16 @@ func FetchReRateAreaItem(tx *pop.Connection, contractID uuid.UUID, code string) return &area, err } + +// 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 { + var rateAreaID uuid.UUID + err := db.RawQuery("SELECT get_rate_area_id($1, $2, $3)", addressID, serviceID, contractID).First(&rateAreaID) + if err != nil { + return uuid.Nil, fmt.Errorf("error fetching rate area id for shipment ID: %s, service ID %s, and contract ID: %s: %s", addressID, serviceID, contractID, err) + } + return rateAreaID, nil + } + return uuid.Nil, fmt.Errorf("error fetching rate area ID - required parameters not provided") +} diff --git a/pkg/models/re_rate_area_test.go b/pkg/models/re_rate_area_test.go index a0769056783..87f310c2088 100644 --- a/pkg/models/re_rate_area_test.go +++ b/pkg/models/re_rate_area_test.go @@ -3,7 +3,9 @@ package models_test import ( "github.com/gofrs/uuid" + "github.com/transcom/mymove/pkg/factory" "github.com/transcom/mymove/pkg/models" + "github.com/transcom/mymove/pkg/testdatagen" ) func (suite *ModelSuite) TestReRateAreaValidation() { @@ -28,3 +30,23 @@ func (suite *ModelSuite) TestReRateAreaValidation() { suite.verifyValidationErrors(&emptyReRateArea, expErrors) }) } + +func (suite *ModelSuite) TestFetchRateAreaID() { + suite.Run("success - fetching a rate area ID", func() { + 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) + 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) + suite.Equal(uuid.Nil, rateAreaId) + suite.Error(err) + }) +} diff --git a/pkg/models/re_us_post_regions.go b/pkg/models/re_us_post_regions.go index dc3ff1faf9f..4a1b3c79b8f 100644 --- a/pkg/models/re_us_post_regions.go +++ b/pkg/models/re_us_post_regions.go @@ -12,6 +12,7 @@ type UsPostRegion struct { StateId uuid.UUID `json:"state_id" db:"state_id" rw:"r"` State State `belongs_to:"re_states" fk_id:"state_id" rw:"r"` Zip3 string `json:"zip3" db:"zip3" rw:"r"` + IsPoBox bool `json:"is_po_box" db:"is_po_box" rw:"r"` CreatedAt time.Time `json:"created_at" db:"created_at" rw:"r"` UpdatedAt time.Time `json:"updated_at" db:"updated_at" rw:"r"` } diff --git a/pkg/models/service_item_param_key.go b/pkg/models/service_item_param_key.go index 3bfd789dcc4..0c637cc7d92 100644 --- a/pkg/models/service_item_param_key.go +++ b/pkg/models/service_item_param_key.go @@ -61,6 +61,10 @@ const ( ServiceItemParamNameNTSPackingFactor ServiceItemParamName = "NTSPackingFactor" // ServiceItemParamNameNumberDaysSIT is the param key name NumberDaysSIT ServiceItemParamNameNumberDaysSIT ServiceItemParamName = "NumberDaysSIT" + // ServiceItemParamNamePerUnitCents is the param key name PerUnitCents + ServiceItemParamNamePerUnitCents ServiceItemParamName = "PerUnitCents" + // ServiceItemParamNamePortZip is the param key name PortZip + ServiceItemParamNamePortZip ServiceItemParamName = "PortZip" // ServiceItemParamNamePriceAreaDest is the param key name PriceAreaDest ServiceItemParamNamePriceAreaDest ServiceItemParamName = "PriceAreaDest" // ServiceItemParamNamePriceAreaIntlDest is the param key name PriceAreaIntlDest @@ -275,6 +279,8 @@ var ValidServiceItemParamNames = []ServiceItemParamName{ ServiceItemParamNameStandaloneCrateCap, ServiceItemParamNameUncappedRequestTotal, ServiceItemParamNameLockedPriceCents, + ServiceItemParamNamePerUnitCents, + ServiceItemParamNamePortZip, } // ValidServiceItemParamNameStrings lists all valid service item param key names @@ -349,6 +355,8 @@ var ValidServiceItemParamNameStrings = []string{ string(ServiceItemParamNameStandaloneCrateCap), string(ServiceItemParamNameUncappedRequestTotal), string(ServiceItemParamNameLockedPriceCents), + string(ServiceItemParamNamePerUnitCents), + string(ServiceItemParamNamePortZip), } // ValidServiceItemParamTypes lists all valid service item param types diff --git a/pkg/payment_request/service_param_value_lookups/distance_zip_lookup.go b/pkg/payment_request/service_param_value_lookups/distance_zip_lookup.go index 7b70c559d1d..d2e08c221f0 100644 --- a/pkg/payment_request/service_param_value_lookups/distance_zip_lookup.go +++ b/pkg/payment_request/service_param_value_lookups/distance_zip_lookup.go @@ -23,6 +23,8 @@ func (r DistanceZipLookup) lookup(appCtx appcontext.AppContext, keyData *Service planner := keyData.planner db := appCtx.DB() var distanceMiles int + var totalDistanceMiles int + hasApprovedDestinationSIT := false // Make sure there's an MTOShipment since that's nullable mtoShipmentID := keyData.mtoShipmentID @@ -41,7 +43,12 @@ func (r DistanceZipLookup) lookup(appCtx appcontext.AppContext, keyData *Service } } - err = appCtx.DB().EagerPreload("DeliveryAddressUpdate", "DeliveryAddressUpdate.OriginalAddress", "DeliveryAddressUpdate.NewAddress", "MTOServiceItems", "Distance").Find(&mtoShipment, mtoShipment.ID) + err = appCtx.DB().EagerPreload( + "MTOServiceItems", + "Distance", + "PickupAddress", + "DestinationAddress", + ).Find(&mtoShipment, mtoShipment.ID) if err != nil { return "", err } @@ -49,6 +56,25 @@ func (r DistanceZipLookup) lookup(appCtx appcontext.AppContext, keyData *Service // Now calculate the distance between zips pickupZip := r.PickupAddress.PostalCode destinationZip := r.DestinationAddress.PostalCode + + // if the shipment is international, we need to change the respective ZIP to use the port ZIP and not the address ZIP + if mtoShipment.MarketCode == models.MarketCodeInternational { + portZip, portType, err := models.GetPortLocationInfoForShipment(appCtx.DB(), *mtoShipmentID) + if err != nil { + return "", err + } + if portZip != nil && portType != nil { + // if the port type is POEFSC this means the shipment is CONUS -> OCONUS (pickup -> port) + // if the port type is PODFSC this means the shipment is OCONUS -> CONUS (port -> destination) + if *portType == models.ReServiceCodePOEFSC.String() { + destinationZip = *portZip + } else if *portType == models.ReServiceCodePODFSC.String() { + pickupZip = *portZip + } + } else { + return "", apperror.NewNotFoundError(*mtoShipmentID, "looking for port ZIP for shipment") + } + } errorMsgForPickupZip := fmt.Sprintf("Shipment must have valid pickup zipcode. Received: %s", pickupZip) errorMsgForDestinationZip := fmt.Sprintf("Shipment must have valid destination zipcode. Received: %s", destinationZip) if len(pickupZip) < 5 { @@ -58,57 +84,52 @@ func (r DistanceZipLookup) lookup(appCtx appcontext.AppContext, keyData *Service return "", apperror.NewInvalidInputError(*mtoShipmentID, fmt.Errorf("%s", errorMsgForDestinationZip), nil, errorMsgForDestinationZip) } - serviceCode := keyData.MTOServiceItem.ReService.Code - switch serviceCode { - case models.ReServiceCodeDLH, models.ReServiceCodeDSH, models.ReServiceCodeFSC: - for _, si := range mtoShipment.MTOServiceItems { - siCopy := si - err := appCtx.DB().EagerPreload("ReService", "ApprovedAt").Find(&siCopy, siCopy.ID) - if err != nil { - return "", err - } - - switch siCopy.ReService.Code { - case models.ReServiceCodeDDASIT, models.ReServiceCodeDDDSIT, models.ReServiceCodeDDFSIT, models.ReServiceCodeDDSFSC: - if mtoShipment.DeliveryAddressUpdate != nil && mtoShipment.DeliveryAddressUpdate.Status == models.ShipmentAddressUpdateStatusApproved { - if siCopy.ApprovedAt != nil { - if mtoShipment.DeliveryAddressUpdate.UpdatedAt.After(*siCopy.ApprovedAt) { - destinationZip = mtoShipment.DeliveryAddressUpdate.OriginalAddress.PostalCode - } else { - destinationZip = mtoShipment.DeliveryAddressUpdate.NewAddress.PostalCode - } - } - } - } + for _, si := range mtoShipment.MTOServiceItems { + siCopy := si + err := appCtx.DB().EagerPreload("ReService").Find(&siCopy, siCopy.ID) + if err != nil { + return "", err } - if mtoShipment.DeliveryAddressUpdate != nil && mtoShipment.DeliveryAddressUpdate.Status == models.ShipmentAddressUpdateStatusApproved { - distanceMiles, err = planner.ZipTransitDistance(appCtx, pickupZip, mtoShipment.DeliveryAddressUpdate.NewAddress.PostalCode, false, false) - if err != nil { - return "", err + switch siCopy.ReService.Code { + case models.ReServiceCodeDDASIT, models.ReServiceCodeDDDSIT, models.ReServiceCodeDDFSIT, models.ReServiceCodeDDSFSC: + if siCopy.Status == models.MTOServiceItemStatusApproved { + hasApprovedDestinationSIT = true } - return strconv.Itoa(distanceMiles), nil } } - if mtoShipment.Distance != nil && mtoShipment.ShipmentType != models.MTOShipmentTypePPM { - return strconv.Itoa(mtoShipment.Distance.Int()), nil - } + internationalShipment := mtoShipment.MarketCode == models.MarketCodeInternational if pickupZip == destinationZip { distanceMiles = 1 + totalDistanceMiles = distanceMiles + } else if hasApprovedDestinationSIT { + // from pickup zip to delivery zip + totalDistanceMiles, err = planner.ZipTransitDistance(appCtx, mtoShipment.PickupAddress.PostalCode, mtoShipment.DestinationAddress.PostalCode, false, internationalShipment) + if err != nil { + return "", err + } + // from pickup zip to Destination SIT zip + distanceMiles, err = planner.ZipTransitDistance(appCtx, pickupZip, destinationZip, false, internationalShipment) + if err != nil { + return "", err + } } else { - distanceMiles, err = planner.ZipTransitDistance(appCtx, pickupZip, destinationZip, false, false) + distanceMiles, err = planner.ZipTransitDistance(appCtx, pickupZip, destinationZip, false, internationalShipment) if err != nil { return "", err } + totalDistanceMiles = distanceMiles } - miles := unit.Miles(distanceMiles) - mtoShipment.Distance = &miles - err = db.Save(&mtoShipment) - if err != nil { - return "", err + miles := unit.Miles(totalDistanceMiles) + if mtoShipment.Distance == nil || mtoShipment.Distance.Int() != totalDistanceMiles { + mtoShipment.Distance = &miles + err = db.Save(&mtoShipment) + if err != nil { + return "", err + } } return strconv.Itoa(distanceMiles), nil diff --git a/pkg/payment_request/service_param_value_lookups/distance_zip_lookup_test.go b/pkg/payment_request/service_param_value_lookups/distance_zip_lookup_test.go index f40692f2f1c..eeb37166850 100644 --- a/pkg/payment_request/service_param_value_lookups/distance_zip_lookup_test.go +++ b/pkg/payment_request/service_param_value_lookups/distance_zip_lookup_test.go @@ -63,40 +63,153 @@ func (suite *ServiceParamValueLookupsSuite) TestDistanceLookup() { suite.Equal(unit.Miles(defaultZipDistance), *mtoShipment.Distance) }) - suite.Run("Calculate zip distance lookup without a saved service item", func() { - ppmShipment := factory.BuildPPMShipment(suite.DB(), nil, nil) + suite.Run("Calculate transit zip distance for international shipment with port data", func() { + testdatagen.MakeReContractYear(suite.DB(), testdatagen.Assertions{ + ReContractYear: models.ReContractYear{ + StartDate: time.Now().Add(-24 * time.Hour), + EndDate: time.Now().Add(24 * time.Hour), + }, + }) + portLocation := factory.FetchPortLocation(suite.DB(), []factory.Customization{ + { + Model: models.Port{ + PortCode: "SEA", + }, + }, + }, nil) + mtoServiceItem := factory.BuildMTOServiceItem(suite.DB(), []factory.Customization{ + { + Model: models.ReService{ + Code: models.ReServiceCodePOEFSC, + }, + }, + { + Model: models.Address{ + PostalCode: "74133", + }, + Type: &factory.Addresses.PickupAddress, + }, + { + Model: models.MTOServiceItem{ + POELocationID: &portLocation.ID, + }, + }, + { + Model: models.MTOShipment{ + MarketCode: models.MarketCodeInternational, + }, + }, + }, []factory.Trait{ + factory.GetTraitAvailableToPrimeMove, + }) - distanceZipLookup := DistanceZipLookup{ - PickupAddress: models.Address{PostalCode: ppmShipment.PickupAddress.PostalCode}, - DestinationAddress: models.Address{PostalCode: ppmShipment.DestinationAddress.PostalCode}, - } + paymentRequest := factory.BuildPaymentRequest(suite.DB(), []factory.Customization{ + { + Model: mtoServiceItem.MoveTaskOrder, + LinkOnly: true, + }, + }, nil) - appContext := suite.AppContextForTest() - distance, err := distanceZipLookup.lookup(appContext, &ServiceItemParamKeyData{ - planner: suite.planner, - mtoShipmentID: &ppmShipment.ShipmentID, - }) - suite.NoError(err) + paramLookup, err := ServiceParamLookupInitialize(suite.AppContextForTest(), suite.planner, mtoServiceItem, paymentRequest.ID, paymentRequest.MoveTaskOrderID, nil) + suite.FatalNoError(err) - planner := suite.planner.(*mocks.Planner) - planner.AssertCalled(suite.T(), "ZipTransitDistance", appContext, ppmShipment.PickupAddress.PostalCode, ppmShipment.DestinationAddress.PostalCode, false, false) + distanceStr, err := paramLookup.ServiceParamValue(suite.AppContextForTest(), key) + suite.FatalNoError(err) + expected := strconv.Itoa(defaultInternationalZipDistance) + suite.Equal(expected, distanceStr) - err = suite.DB().Reload(&ppmShipment.Shipment) + var mtoShipment models.MTOShipment + err = suite.DB().Find(&mtoShipment, mtoServiceItem.MTOShipmentID) suite.NoError(err) - suite.Equal(fmt.Sprintf("%d", defaultZipDistance), distance) - suite.Equal(unit.Miles(defaultZipDistance), *ppmShipment.Shipment.Distance) + suite.Equal(unit.Miles(defaultInternationalZipDistance), *mtoShipment.Distance) }) - suite.Run("Call ZipTransitDistance on non-PPMs with shipments that have a distance", func() { - miles := unit.Miles(defaultZipDistance) - ppmShipment := factory.BuildPPMShipment(suite.DB(), []factory.Customization{ + suite.Run("Calculate transit zip distance with an approved Destination SIT service item", func() { + testdatagen.MakeReContractYear(suite.DB(), testdatagen.Assertions{ + ReContractYear: models.ReContractYear{ + StartDate: time.Now().Add(-24 * time.Hour), + EndDate: time.Now().Add(24 * time.Hour), + }, + }) + now := time.Now() + + destinationAddress := factory.BuildAddress(suite.DB(), []factory.Customization{ { - Model: models.MTOShipment{ - Distance: &miles, + Model: models.Address{ + PostalCode: "88101", }, }, }, nil) + + mtoServiceItem := factory.BuildMTOServiceItem(suite.DB(), []factory.Customization{ + { + Model: models.Address{ + PostalCode: "33607", + }, + Type: &factory.Addresses.PickupAddress, + }, + { + Model: models.Address{ + PostalCode: "90210", + }, + Type: &factory.Addresses.DeliveryAddress, + }, + }, []factory.Trait{ + factory.GetTraitAvailableToPrimeMove, + }) + + factory.BuildMTOServiceItem(suite.DB(), []factory.Customization{ + { + Model: models.ReService{ + Code: models.ReServiceCodeDDFSIT, + Name: models.ReServiceCodeDDFSIT.String(), + }, + }, + { + Model: models.MTOServiceItem{ + Status: models.MTOServiceItemStatusApproved, + ApprovedAt: &now, + }, + }, + { + Model: destinationAddress, + LinkOnly: true, + Type: &factory.Addresses.SITDestinationOriginalAddress, + }, + { + Model: mtoServiceItem.MTOShipment, + LinkOnly: true, + }, + }, []factory.Trait{ + factory.GetTraitAvailableToPrimeMove, + }) + + paymentRequest := factory.BuildPaymentRequest(suite.DB(), []factory.Customization{ + { + Model: mtoServiceItem.MoveTaskOrder, + LinkOnly: true, + }, + }, nil) + + paramLookup, err := ServiceParamLookupInitialize(suite.AppContextForTest(), suite.planner, mtoServiceItem, paymentRequest.ID, paymentRequest.MoveTaskOrderID, nil) + suite.FatalNoError(err) + + distanceStr, err := paramLookup.ServiceParamValue(suite.AppContextForTest(), key) + suite.FatalNoError(err) + expected := strconv.Itoa(defaultZipDistance) + suite.Equal(expected, distanceStr) + + var mtoShipment models.MTOShipment + err = suite.DB().Find(&mtoShipment, mtoServiceItem.MTOShipmentID) + suite.NoError(err) + + suite.Equal(unit.Miles(defaultZipDistance), *mtoShipment.Distance) + }) + + suite.Run("Calculate zip distance lookup without a saved service item", func() { + ppmShipment := factory.BuildPPMShipment(suite.DB(), nil, nil) + distanceZipLookup := DistanceZipLookup{ PickupAddress: models.Address{PostalCode: ppmShipment.PickupAddress.PostalCode}, DestinationAddress: models.Address{PostalCode: ppmShipment.DestinationAddress.PostalCode}, @@ -115,40 +228,38 @@ func (suite *ServiceParamValueLookupsSuite) TestDistanceLookup() { err = suite.DB().Reload(&ppmShipment.Shipment) suite.NoError(err) - suite.Equal(unit.Miles(defaultZipDistance), *ppmShipment.Shipment.Distance) suite.Equal(fmt.Sprintf("%d", defaultZipDistance), distance) + suite.Equal(unit.Miles(defaultZipDistance), *ppmShipment.Shipment.Distance) }) - suite.Run("Do not call ZipTransitDistance on PPMs with shipments that have a distance", func() { + suite.Run("Call ZipTransitDistance on PPMs with shipments that have a distance", func() { miles := unit.Miles(defaultZipDistance) - shipment := factory.BuildMTOShipment(suite.DB(), []factory.Customization{ + ppmShipment := factory.BuildPPMShipment(suite.DB(), []factory.Customization{ { Model: models.MTOShipment{ - Distance: &miles, - ShipmentType: models.MTOShipmentTypeHHG, + Distance: &miles, }, }, }, nil) - distanceZipLookup := DistanceZipLookup{ - PickupAddress: models.Address{PostalCode: shipment.PickupAddress.PostalCode}, - DestinationAddress: models.Address{PostalCode: shipment.DestinationAddress.PostalCode}, + PickupAddress: models.Address{PostalCode: ppmShipment.PickupAddress.PostalCode}, + DestinationAddress: models.Address{PostalCode: ppmShipment.DestinationAddress.PostalCode}, } appContext := suite.AppContextForTest() distance, err := distanceZipLookup.lookup(appContext, &ServiceItemParamKeyData{ planner: suite.planner, - mtoShipmentID: &shipment.ID, + mtoShipmentID: &ppmShipment.ShipmentID, }) suite.NoError(err) planner := suite.planner.(*mocks.Planner) - planner.AssertNotCalled(suite.T(), "ZipTransitDistance", appContext, shipment.PickupAddress.PostalCode, shipment.DestinationAddress.PostalCode, false, false) + planner.AssertCalled(suite.T(), "ZipTransitDistance", appContext, ppmShipment.PickupAddress.PostalCode, ppmShipment.DestinationAddress.PostalCode, false, false) - err = suite.DB().Reload(&shipment) + err = suite.DB().Reload(&ppmShipment.Shipment) suite.NoError(err) - suite.Equal(unit.Miles(defaultZipDistance), *shipment.Distance) + suite.Equal(unit.Miles(defaultZipDistance), *ppmShipment.Shipment.Distance) suite.Equal(fmt.Sprintf("%d", defaultZipDistance), distance) }) 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 new file mode 100644 index 00000000000..b339fbf43dd --- /dev/null +++ b/pkg/payment_request/service_param_value_lookups/per_unit_cents_lookup.go @@ -0,0 +1,90 @@ +package serviceparamvaluelookups + +import ( + "fmt" + + "github.com/transcom/mymove/pkg/appcontext" + "github.com/transcom/mymove/pkg/models" + "github.com/transcom/mymove/pkg/services/ghcrateengine" +) + +// PerUnitCents does lookup on the per unit cents value associated with a service item +type PerUnitCentsLookup struct { + ServiceItem models.MTOServiceItem + MTOShipment models.MTOShipment +} + +func (p PerUnitCentsLookup) lookup(appCtx appcontext.AppContext, s *ServiceItemParamKeyData) (string, error) { + serviceID := p.ServiceItem.ReServiceID + contractID := s.ContractID + if p.MTOShipment.RequestedPickupDate == nil { + return "", fmt.Errorf("requested pickup date is required for shipment with id: %s", p.MTOShipment.ID) + } + + 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) + 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) + } + isPeakPeriod := ghcrateengine.IsPeakPeriod(*p.MTOShipment.RequestedPickupDate) + var reIntlOtherPrice models.ReIntlOtherPrice + err = appCtx.DB().Q(). + Where("contract_id = ?", contractID). + Where("service_id = ?", serviceID). + Where("is_peak_period = ?", isPeakPeriod). + Where("rate_area_id = ?", rateAreaID). + First(&reIntlOtherPrice) + if err != nil { + return "", fmt.Errorf("error fetching IHPK per unit cents for contractID: %s, serviceID %s, isPeakPeriod: %t, and rateAreaID: %s: %s", contractID, serviceID, isPeakPeriod, rateAreaID, err) + } + return reIntlOtherPrice.PerUnitCents.ToMillicents().ToCents().String(), nil + + case models.ReServiceCodeIHUPK: + // IHUPK: Need rate area ID for the destination address + 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) + } + isPeakPeriod := ghcrateengine.IsPeakPeriod(*p.MTOShipment.RequestedPickupDate) + var reIntlOtherPrice models.ReIntlOtherPrice + err = appCtx.DB().Q(). + Where("contract_id = ?", contractID). + Where("service_id = ?", serviceID). + Where("is_peak_period = ?", isPeakPeriod). + Where("rate_area_id = ?", rateAreaID). + First(&reIntlOtherPrice) + if err != nil { + return "", fmt.Errorf("error fetching IHUPK per unit cents for contractID: %s, serviceID %s, isPeakPeriod: %t, and rateAreaID: %s: %s", contractID, serviceID, isPeakPeriod, rateAreaID, err) + } + return reIntlOtherPrice.PerUnitCents.ToMillicents().ToCents().String(), nil + + case models.ReServiceCodeISLH: + // ISLH: Need rate area IDs for origin and destination + 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) + 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) + } + isPeakPeriod := ghcrateengine.IsPeakPeriod(*p.MTOShipment.RequestedPickupDate) + var reIntlPrice models.ReIntlPrice + err = appCtx.DB().Q(). + Where("contract_id = ?", contractID). + Where("service_id = ?", serviceID). + Where("is_peak_period = ?", isPeakPeriod). + Where("origin_rate_area_id = ?", originRateAreaID). + Where("destination_rate_area_id = ?", destRateAreaID). + First(&reIntlPrice) + if err != nil { + return "", fmt.Errorf("error fetching ISLH per unit cents for contractID: %s, serviceID %s, isPeakPeriod: %t, originRateAreaID: %s, and destRateAreaID: %s: %s", contractID, serviceID, isPeakPeriod, originRateAreaID, destRateAreaID, err) + } + return reIntlPrice.PerUnitCents.ToMillicents().ToCents().String(), nil + + default: + return "", fmt.Errorf("unsupported service code to retrieve service item param PerUnitCents") + } +} diff --git a/pkg/payment_request/service_param_value_lookups/per_unit_cents_lookup_test.go b/pkg/payment_request/service_param_value_lookups/per_unit_cents_lookup_test.go new file mode 100644 index 00000000000..9937f86217b --- /dev/null +++ b/pkg/payment_request/service_param_value_lookups/per_unit_cents_lookup_test.go @@ -0,0 +1,163 @@ +package serviceparamvaluelookups + +import ( + "time" + + "github.com/gofrs/uuid" + + "github.com/transcom/mymove/pkg/factory" + "github.com/transcom/mymove/pkg/models" + "github.com/transcom/mymove/pkg/testdatagen" +) + +func (suite *ServiceParamValueLookupsSuite) TestPerUnitCentsLookup() { + key := models.ServiceItemParamNamePerUnitCents + var mtoServiceItem models.MTOServiceItem + setupTestData := func(serviceCode models.ReServiceCode) { + testdatagen.MakeReContractYear(suite.DB(), testdatagen.Assertions{ + ReContractYear: models.ReContractYear{ + StartDate: time.Now().Add(-24 * time.Hour), + EndDate: time.Now().Add(24 * time.Hour), + }, + }) + mtoServiceItem = factory.BuildMTOServiceItem(suite.DB(), []factory.Customization{ + { + Model: models.ReService{ + Code: serviceCode, + }, + }, + }, []factory.Trait{factory.GetTraitAvailableToPrimeMove}) + + } + + suite.Run("success - returns perUnitCent value for IHPK", func() { + setupTestData(models.ReServiceCodeIHPK) + + paramLookup, err := ServiceParamLookupInitialize(suite.AppContextForTest(), suite.planner, mtoServiceItem, uuid.Must(uuid.NewV4()), mtoServiceItem.MoveTaskOrderID, nil) + suite.FatalNoError(err) + + perUnitCents, err := paramLookup.ServiceParamValue(suite.AppContextForTest(), key) + suite.FatalNoError(err) + suite.Equal(perUnitCents, "6997") + }) + + suite.Run("success - returns perUnitCent value for IHUPK", func() { + setupTestData(models.ReServiceCodeIHUPK) + + paramLookup, err := ServiceParamLookupInitialize(suite.AppContextForTest(), suite.planner, mtoServiceItem, uuid.Must(uuid.NewV4()), mtoServiceItem.MoveTaskOrderID, nil) + suite.FatalNoError(err) + + perUnitCents, err := paramLookup.ServiceParamValue(suite.AppContextForTest(), key) + suite.FatalNoError(err) + suite.Equal(perUnitCents, "752") + }) + + suite.Run("success - returns perUnitCent value for ISLH", func() { + testdatagen.MakeReContractYear(suite.DB(), testdatagen.Assertions{ + ReContractYear: models.ReContractYear{ + StartDate: time.Now().Add(-24 * time.Hour), + EndDate: time.Now().Add(24 * time.Hour), + }, + }) + move := factory.BuildAvailableToPrimeMove(suite.DB(), nil, nil) + destinationAddress := factory.BuildAddress(suite.DB(), []factory.Customization{ + { + Model: models.Address{ + StreetAddress1: "JBER", + City: "Anchorage", + State: "AK", + PostalCode: "99505", + IsOconus: models.BoolPointer(true), + }, + }, + }, nil) + 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) + shipment := factory.BuildMTOShipment(suite.DB(), []factory.Customization{ + { + Model: models.MTOShipment{ + PickupAddressID: &pickupAddress.ID, + DestinationAddressID: &destinationAddress.ID, + MarketCode: models.MarketCodeInternational, + }, + }, + { + Model: move, + LinkOnly: true, + }, + }, nil) + mtoServiceItem := factory.BuildMTOServiceItem(suite.DB(), []factory.Customization{ + { + Model: move, + LinkOnly: true, + }, + { + Model: shipment, + LinkOnly: true, + }, + { + Model: models.ReService{ + Code: models.ReServiceCodeISLH, + }, + }, + }, nil) + + paramLookup, err := ServiceParamLookupInitialize(suite.AppContextForTest(), suite.planner, mtoServiceItem, uuid.Must(uuid.NewV4()), mtoServiceItem.MoveTaskOrderID, nil) + suite.FatalNoError(err) + + perUnitCents, err := paramLookup.ServiceParamValue(suite.AppContextForTest(), key) + suite.FatalNoError(err) + suite.Equal(perUnitCents, "1605") + }) + + suite.Run("failure - unauthorized service code", func() { + setupTestData(models.ReServiceCodeDUPK) + + paramLookup, err := ServiceParamLookupInitialize(suite.AppContextForTest(), suite.planner, mtoServiceItem, uuid.Must(uuid.NewV4()), mtoServiceItem.MoveTaskOrderID, nil) + suite.FatalNoError(err) + + perUnitCents, err := paramLookup.ServiceParamValue(suite.AppContextForTest(), key) + suite.Error(err) + suite.Equal(perUnitCents, "") + }) + + suite.Run("failure - no requested pickup date on shipment", func() { + testdatagen.MakeReContractYear(suite.DB(), testdatagen.Assertions{ + ReContractYear: models.ReContractYear{ + StartDate: time.Now().Add(-24 * time.Hour), + EndDate: time.Now().Add(24 * time.Hour), + }, + }) + mtoServiceItem = factory.BuildMTOServiceItem(suite.DB(), []factory.Customization{ + { + Model: models.ReService{ + Code: models.ReServiceCodeIHPK, + }, + }, + { + Model: models.MTOShipment{ + RequestedPickupDate: nil, + }, + }, + }, []factory.Trait{factory.GetTraitAvailableToPrimeMove}) + + mtoServiceItem.MTOShipment.RequestedPickupDate = nil + suite.MustSave(&mtoServiceItem.MTOShipment) + + paramLookup, err := ServiceParamLookupInitialize(suite.AppContextForTest(), suite.planner, mtoServiceItem, uuid.Must(uuid.NewV4()), mtoServiceItem.MoveTaskOrderID, nil) + suite.FatalNoError(err) + + perUnitCents, err := paramLookup.ServiceParamValue(suite.AppContextForTest(), key) + suite.Error(err) + suite.Equal(perUnitCents, "") + }) +} diff --git a/pkg/payment_request/service_param_value_lookups/port_zip_lookup.go b/pkg/payment_request/service_param_value_lookups/port_zip_lookup.go new file mode 100644 index 00000000000..3ea8be94315 --- /dev/null +++ b/pkg/payment_request/service_param_value_lookups/port_zip_lookup.go @@ -0,0 +1,35 @@ +package serviceparamvaluelookups + +import ( + "fmt" + + "github.com/gofrs/uuid" + + "github.com/transcom/mymove/pkg/appcontext" + "github.com/transcom/mymove/pkg/models" +) + +// PortZipLookup does lookup on the shipment and finds the port zip +// The mileage calculated is from port <-> pickup/destination so this value is important +type PortZipLookup struct { + ServiceItem models.MTOServiceItem +} + +func (p PortZipLookup) lookup(appCtx appcontext.AppContext, _ *ServiceItemParamKeyData) (string, error) { + var portLocationID *uuid.UUID + if p.ServiceItem.PODLocationID != nil { + portLocationID = p.ServiceItem.PODLocationID + } else if p.ServiceItem.POELocationID != nil { + portLocationID = p.ServiceItem.POELocationID + } else { + return "", fmt.Errorf("unable to find port zip for service item id: %s", p.ServiceItem.ID) + } + var portLocation models.PortLocation + err := appCtx.DB().Q(). + EagerPreload("UsPostRegionCity"). + Where("id = $1", portLocationID).First(&portLocation) + if err != nil { + return "", fmt.Errorf("unable to find port zip with id %s", portLocationID) + } + return portLocation.UsPostRegionCity.UsprZipID, nil +} diff --git a/pkg/payment_request/service_param_value_lookups/port_zip_lookup_test.go b/pkg/payment_request/service_param_value_lookups/port_zip_lookup_test.go new file mode 100644 index 00000000000..4410ba8e198 --- /dev/null +++ b/pkg/payment_request/service_param_value_lookups/port_zip_lookup_test.go @@ -0,0 +1,114 @@ +package serviceparamvaluelookups + +import ( + "time" + + "github.com/gofrs/uuid" + + "github.com/transcom/mymove/pkg/factory" + "github.com/transcom/mymove/pkg/models" + "github.com/transcom/mymove/pkg/testdatagen" +) + +func (suite *ServiceParamValueLookupsSuite) TestPortZipLookup() { + key := models.ServiceItemParamNamePortZip + var mtoServiceItem models.MTOServiceItem + setupTestData := func(serviceCode models.ReServiceCode, portID uuid.UUID) { + testdatagen.MakeReContractYear(suite.DB(), testdatagen.Assertions{ + ReContractYear: models.ReContractYear{ + StartDate: time.Now().Add(-24 * time.Hour), + EndDate: time.Now().Add(24 * time.Hour), + }, + }) + if serviceCode == models.ReServiceCodePOEFSC { + mtoServiceItem = factory.BuildMTOServiceItem(suite.DB(), []factory.Customization{ + { + Model: models.ReService{ + Code: serviceCode, + }, + }, + { + Model: models.MTOServiceItem{ + POELocationID: &portID, + }, + }, + }, []factory.Trait{factory.GetTraitAvailableToPrimeMove}) + } else { + mtoServiceItem = factory.BuildMTOServiceItem(suite.DB(), []factory.Customization{ + { + Model: models.ReService{ + Code: serviceCode, + }, + }, + { + Model: models.MTOServiceItem{ + PODLocationID: &portID, + }, + }, + }, []factory.Trait{factory.GetTraitAvailableToPrimeMove}) + } + } + + suite.Run("success - returns PortZip value for POEFSC", func() { + port := factory.FetchPortLocation(suite.DB(), []factory.Customization{ + { + Model: models.Port{ + PortCode: "SEA", + }, + }, + }, nil) + setupTestData(models.ReServiceCodePOEFSC, port.ID) + + paramLookup, err := ServiceParamLookupInitialize(suite.AppContextForTest(), suite.planner, mtoServiceItem, uuid.Must(uuid.NewV4()), mtoServiceItem.MoveTaskOrderID, nil) + suite.FatalNoError(err) + + portZip, err := paramLookup.ServiceParamValue(suite.AppContextForTest(), key) + suite.FatalNoError(err) + suite.Equal(portZip, port.UsPostRegionCity.UsprZipID) + }) + + suite.Run("success - returns PortZip value for PODFSC", func() { + port := factory.FetchPortLocation(suite.DB(), []factory.Customization{ + { + Model: models.Port{ + PortCode: "PDX", + }, + }, + }, nil) + setupTestData(models.ReServiceCodePODFSC, port.ID) + + paramLookup, err := ServiceParamLookupInitialize(suite.AppContextForTest(), suite.planner, mtoServiceItem, uuid.Must(uuid.NewV4()), mtoServiceItem.MoveTaskOrderID, nil) + suite.FatalNoError(err) + + portZip, err := paramLookup.ServiceParamValue(suite.AppContextForTest(), key) + suite.FatalNoError(err) + suite.Equal(portZip, port.UsPostRegionCity.UsprZipID) + }) + + suite.Run("failure - no port zip on service item", func() { + testdatagen.MakeReContractYear(suite.DB(), testdatagen.Assertions{ + ReContractYear: models.ReContractYear{ + StartDate: time.Now().Add(-24 * time.Hour), + EndDate: time.Now().Add(24 * time.Hour), + }, + }) + mtoServiceItem = factory.BuildMTOServiceItem(suite.DB(), []factory.Customization{ + { + Model: models.ReService{ + Code: models.ReServiceCodePOEFSC, + }, + }, + { + Model: models.MTOServiceItem{ + POELocationID: nil, + }, + }, + }, []factory.Trait{factory.GetTraitAvailableToPrimeMove}) + + paramLookup, err := ServiceParamLookupInitialize(suite.AppContextForTest(), suite.planner, mtoServiceItem, uuid.Must(uuid.NewV4()), mtoServiceItem.MoveTaskOrderID, nil) + suite.FatalNoError(err) + + _, err = paramLookup.ServiceParamValue(suite.AppContextForTest(), key) + suite.Error(err) + }) +} diff --git a/pkg/payment_request/service_param_value_lookups/service_param_value_lookups.go b/pkg/payment_request/service_param_value_lookups/service_param_value_lookups.go index 0bb499be70b..dd8040b95dd 100644 --- a/pkg/payment_request/service_param_value_lookups/service_param_value_lookups.go +++ b/pkg/payment_request/service_param_value_lookups/service_param_value_lookups.go @@ -21,6 +21,7 @@ type ServiceItemParamKeyData struct { MTOServiceItem models.MTOServiceItem PaymentRequestID uuid.UUID MoveTaskOrderID uuid.UUID + ContractID uuid.UUID ContractCode string mtoShipmentID *uuid.UUID paramCache *ServiceParamsCache @@ -85,6 +86,8 @@ var ServiceItemParamsWithLookups = []models.ServiceItemParamName{ models.ServiceItemParamNameStandaloneCrate, models.ServiceItemParamNameStandaloneCrateCap, models.ServiceItemParamNameLockedPriceCents, + models.ServiceItemParamNamePerUnitCents, + models.ServiceItemParamNamePortZip, } // ServiceParamLookupInitialize initializes service parameter lookup @@ -120,6 +123,7 @@ func ServiceParamLookupInitialize( to this query. Otherwise the contract_code field could be added to the MTO. */ ContractCode: contract.Code, + ContractID: contract.ID, } // @@ -280,10 +284,8 @@ func InitializeLookups(appCtx appcontext.AppContext, shipment models.MTOShipment MTOShipment: shipment, } - serviceDestinationAddress, err := GetDestinationForDistanceLookup(appCtx, shipment, &serviceItem) - if err != nil { - return nil - } + serviceDestinationAddress := GetDestinationAfterCheckingSIT(appCtx, shipment, &serviceItem) + lookups[models.ServiceItemParamNameDistanceZip] = DistanceZipLookup{ PickupAddress: *shipment.PickupAddress, DestinationAddress: serviceDestinationAddress, @@ -318,7 +320,7 @@ func InitializeLookups(appCtx appcontext.AppContext, shipment models.MTOShipment } lookups[models.ServiceItemParamNameZipDestAddress] = ZipAddressLookup{ - Address: *shipment.DestinationAddress, + Address: serviceDestinationAddress, } lookups[models.ServiceItemParamNameMTOAvailableToPrimeAt] = MTOAvailableToPrimeAtLookup{} @@ -430,46 +432,51 @@ func InitializeLookups(appCtx appcontext.AppContext, shipment models.MTOShipment ServiceItem: serviceItem, } + lookups[models.ServiceItemParamNamePerUnitCents] = PerUnitCentsLookup{ + ServiceItem: serviceItem, + MTOShipment: shipment, + } + + lookups[models.ServiceItemParamNamePortZip] = PortZipLookup{ + ServiceItem: serviceItem, + } + return lookups } -func GetDestinationForDistanceLookup(appCtx appcontext.AppContext, mtoShipment models.MTOShipment, mtoServiceItem *models.MTOServiceItem) (models.Address, error) { +// check additional conditions to determine the correct destination address to use for HHG shipment DLH, DSH, & FSC. +// we use DeliveryAddressUpdate.SIToriginalAddress if the shipment destination address update was made after Destination SIT was approved. +// if the shipment does not have a Destination SIT and a destination shipment update was made, then we use the new address. +func GetDestinationAfterCheckingSIT(appCtx appcontext.AppContext, mtoShipment models.MTOShipment, mtoServiceItem *models.MTOServiceItem) models.Address { if mtoServiceItem == nil || mtoShipment.ShipmentType != models.MTOShipmentTypeHHG || (mtoServiceItem.ReService.Code != models.ReServiceCodeDLH && mtoServiceItem.ReService.Code != models.ReServiceCodeDSH && mtoServiceItem.ReService.Code != models.ReServiceCodeFSC) { - return *mtoShipment.DestinationAddress, nil + return *mtoShipment.DestinationAddress } shipmentCopy := mtoShipment - err := appCtx.DB().Eager("DeliveryAddressUpdate.Status", "DeliveryAddressUpdate.UpdatedAt", "DeliveryAddressUpdate.OriginalAddress", "DeliveryAddressUpdate.NewAddress", "MTOServiceItems", "DestinationAddress").Find(&shipmentCopy, mtoShipment.ID) + err := appCtx.DB().Eager("MTOServiceItems").Find(&shipmentCopy, mtoShipment.ID) if err != nil { - return models.Address{}, apperror.NewNotFoundError(shipmentCopy.ID, "MTOShipment not found in Destination For Distance Lookup") + return *mtoShipment.DestinationAddress } if len(shipmentCopy.MTOServiceItems) == 0 { - return *mtoShipment.DestinationAddress, nil + return *mtoShipment.DestinationAddress } - var result models.Address + // return SITDestinationOriginalAddress if an approved Destination SIT exists for _, si := range shipmentCopy.MTOServiceItems { siCopy := si - err := appCtx.DB().Eager("ReService").Find(&siCopy, siCopy.ID) + err := appCtx.DB().Eager("ReService", "SITDestinationOriginalAddress").Find(&siCopy, siCopy.ID) if err != nil { - return models.Address{}, apperror.NewNotFoundError(siCopy.ID, "MTOServiceItem not found in Destination For Distance Lookup") + return *mtoShipment.DestinationAddress } switch siCopy.ReService.Code { case models.ReServiceCodeDDASIT, models.ReServiceCodeDDDSIT, models.ReServiceCodeDDFSIT, models.ReServiceCodeDDSFSC: - if shipmentCopy.DeliveryAddressUpdate != nil && shipmentCopy.DeliveryAddressUpdate.Status == models.ShipmentAddressUpdateStatusApproved { - if siCopy.ApprovedAt != nil && shipmentCopy.DeliveryAddressUpdate.UpdatedAt.After(*siCopy.ApprovedAt) { - return shipmentCopy.DeliveryAddressUpdate.OriginalAddress, nil - } - return shipmentCopy.DeliveryAddressUpdate.NewAddress, nil + if siCopy.Status == models.MTOServiceItemStatusApproved && siCopy.SITDestinationOriginalAddress != nil { + return *siCopy.SITDestinationOriginalAddress } } } - if shipmentCopy.DeliveryAddressUpdate.Status == models.ShipmentAddressUpdateStatusApproved { - result = shipmentCopy.DeliveryAddressUpdate.NewAddress - } else { - result = *shipmentCopy.DestinationAddress - } - return result, nil + + return *mtoShipment.DestinationAddress } // serviceItemNeedsParamKey wrapper for using paramCache.ServiceItemNeedsParamKey, if s.paramCache is nil diff --git a/pkg/payment_request/service_param_value_lookups/service_param_value_lookups_test.go b/pkg/payment_request/service_param_value_lookups/service_param_value_lookups_test.go index 1c9138e51ee..39096262c77 100644 --- a/pkg/payment_request/service_param_value_lookups/service_param_value_lookups_test.go +++ b/pkg/payment_request/service_param_value_lookups/service_param_value_lookups_test.go @@ -29,6 +29,7 @@ import ( ) const defaultZipDistance = 1234 +const defaultInternationalZipDistance = 1800 type ServiceParamValueLookupsSuite struct { *testingsuite.PopTestSuite @@ -49,6 +50,13 @@ func TestServiceParamValueLookupsSuite(t *testing.T) { false, false, ).Return(defaultZipDistance, nil) + planner.On("ZipTransitDistance", + mock.AnythingOfType("*appcontext.appContext"), + mock.Anything, + mock.Anything, + false, + true, + ).Return(defaultInternationalZipDistance, nil) ts := &ServiceParamValueLookupsSuite{ PopTestSuite: testingsuite.NewPopTestSuite(testingsuite.CurrentPackage(), testingsuite.WithPerTestTransaction()), @@ -1089,3 +1097,232 @@ func (suite *ServiceParamValueLookupsSuite) TestFetchContractForMove() { suite.Equal(testdatagen.DefaultContractCode, contract.Code) }) } + +func (suite *ServiceParamValueLookupsSuite) TestGetDestinationAfterCheckingSIT() { + suite.Run("returned destination address should be SITDestinationOriginalAddress if an approved Destination SIT exists", func() { + now := time.Now() + destinationAddress := factory.BuildAddress(suite.DB(), []factory.Customization{ + { + Model: models.Address{ + PostalCode: "88101", + }, + }, + }, nil) + + mtoServiceItem := factory.BuildMTOServiceItem(suite.DB(), []factory.Customization{ + { + Model: models.ReService{ + Code: models.ReServiceCodeDLH, + Name: models.ReServiceCodeDLH.String(), + }, + }, + { + Model: models.MTOServiceItem{ + Status: models.MTOServiceItemStatusSubmitted, + }, + }, + { + Model: destinationAddress, + LinkOnly: true, + Type: &factory.Addresses.SITDestinationOriginalAddress, + }, + }, []factory.Trait{ + factory.GetTraitAvailableToPrimeMove, + }) + + factory.BuildMTOServiceItem(suite.DB(), []factory.Customization{ + { + Model: models.ReService{ + Code: models.ReServiceCodeDSH, + Name: models.ReServiceCodeDSH.String(), + }, + }, + { + Model: models.MTOServiceItem{ + Status: models.MTOServiceItemStatusApproved, + }, + }, + { + Model: destinationAddress, + LinkOnly: true, + Type: &factory.Addresses.SITDestinationOriginalAddress, + }, + { + Model: mtoServiceItem.MTOShipment, + LinkOnly: true, + }, + }, []factory.Trait{ + factory.GetTraitAvailableToPrimeMove, + }) + + factory.BuildMTOServiceItem(suite.DB(), []factory.Customization{ + { + Model: models.ReService{ + Code: models.ReServiceCodeFSC, + Name: models.ReServiceCodeFSC.String(), + }, + }, + { + Model: models.MTOServiceItem{ + Status: models.MTOServiceItemStatusApproved, + }, + }, + { + Model: destinationAddress, + LinkOnly: true, + Type: &factory.Addresses.SITDestinationOriginalAddress, + }, + { + Model: mtoServiceItem.MTOShipment, + LinkOnly: true, + }, + }, []factory.Trait{ + factory.GetTraitAvailableToPrimeMove, + }) + + factory.BuildMTOServiceItem(suite.DB(), []factory.Customization{ + { + Model: models.ReService{ + Code: models.ReServiceCodeDDFSIT, + Name: models.ReServiceCodeDDFSIT.String(), + }, + }, + { + Model: models.MTOServiceItem{ + Status: models.MTOServiceItemStatusApproved, + ApprovedAt: &now, + }, + }, + { + Model: destinationAddress, + LinkOnly: true, + Type: &factory.Addresses.SITDestinationOriginalAddress, + }, + { + Model: mtoServiceItem.MTOShipment, + LinkOnly: true, + }, + }, []factory.Trait{ + factory.GetTraitAvailableToPrimeMove, + }) + + serviceDestinationAddress := GetDestinationAfterCheckingSIT(suite.AppContextForTest(), mtoServiceItem.MTOShipment, &mtoServiceItem) + + // with an approved Destination SIT -> serviceDestinationAddress should return same address as SITDestinationOriginalAddress + suite.NotEqual(mtoServiceItem.SITDestinationOriginalAddress.PostalCode, mtoServiceItem.MTOShipment.DestinationAddress.PostalCode) + suite.Equal(mtoServiceItem.SITDestinationOriginalAddress.PostalCode, serviceDestinationAddress.PostalCode) + }) + + suite.Run("returned destination address should be SITDestinationOriginalAddress if an approved Destination SIT exists", func() { + destinationAddress := factory.BuildAddress(suite.DB(), []factory.Customization{ + { + Model: models.Address{ + PostalCode: "88101", + }, + }, + }, nil) + + mtoServiceItem := factory.BuildMTOServiceItem(suite.DB(), []factory.Customization{ + { + Model: models.ReService{ + Code: models.ReServiceCodeDLH, + Name: models.ReServiceCodeDLH.String(), + }, + }, + { + Model: models.MTOServiceItem{ + Status: models.MTOServiceItemStatusSubmitted, + }, + }, + { + Model: destinationAddress, + LinkOnly: true, + Type: &factory.Addresses.SITDestinationOriginalAddress, + }, + }, []factory.Trait{ + factory.GetTraitAvailableToPrimeMove, + }) + + factory.BuildMTOServiceItem(suite.DB(), []factory.Customization{ + { + Model: models.ReService{ + Code: models.ReServiceCodeDSH, + Name: models.ReServiceCodeDSH.String(), + }, + }, + { + Model: models.MTOServiceItem{ + Status: models.MTOServiceItemStatusApproved, + }, + }, + { + Model: destinationAddress, + LinkOnly: true, + Type: &factory.Addresses.SITDestinationOriginalAddress, + }, + { + Model: mtoServiceItem.MTOShipment, + LinkOnly: true, + }, + }, []factory.Trait{ + factory.GetTraitAvailableToPrimeMove, + }) + + factory.BuildMTOServiceItem(suite.DB(), []factory.Customization{ + { + Model: models.ReService{ + Code: models.ReServiceCodeFSC, + Name: models.ReServiceCodeFSC.String(), + }, + }, + { + Model: models.MTOServiceItem{ + Status: models.MTOServiceItemStatusApproved, + }, + }, + { + Model: destinationAddress, + LinkOnly: true, + Type: &factory.Addresses.SITDestinationOriginalAddress, + }, + { + Model: mtoServiceItem.MTOShipment, + LinkOnly: true, + }, + }, []factory.Trait{ + factory.GetTraitAvailableToPrimeMove, + }) + + factory.BuildMTOServiceItem(suite.DB(), []factory.Customization{ + { + Model: models.ReService{ + Code: models.ReServiceCodeDDFSIT, + Name: models.ReServiceCodeDDFSIT.String(), + }, + }, + { + Model: models.MTOServiceItem{ + Status: models.MTOServiceItemStatusSubmitted, + ApprovedAt: nil, + }, + }, + { + Model: destinationAddress, + LinkOnly: true, + Type: &factory.Addresses.SITDestinationOriginalAddress, + }, + { + Model: mtoServiceItem.MTOShipment, + LinkOnly: true, + }, + }, []factory.Trait{ + factory.GetTraitAvailableToPrimeMove, + }) + + serviceDestinationAddress := GetDestinationAfterCheckingSIT(suite.AppContextForTest(), mtoServiceItem.MTOShipment, &mtoServiceItem) + + // without an approved Destination SIT -> serviceDestinationAddress should return same address as MTOShipment.DestinationAddress + suite.Equal(serviceDestinationAddress.PostalCode, mtoServiceItem.MTOShipment.DestinationAddress.PostalCode) + suite.NotEqual(mtoServiceItem.SITDestinationOriginalAddress.PostalCode, serviceDestinationAddress.PostalCode) + }) +} diff --git a/pkg/services/ghc_rate_engine.go b/pkg/services/ghc_rate_engine.go index 5d17e0388ce..2247e3d7426 100644 --- a/pkg/services/ghc_rate_engine.go +++ b/pkg/services/ghc_rate_engine.go @@ -232,3 +232,35 @@ type DomesticOriginSITFuelSurchargePricer interface { ) ParamsPricer } + +// IntlShippingAndLinehaulPricer prices international shipping and linehaul for a move +// +//go:generate mockery --name IntlShippingAndLinehaulPricer +type IntlShippingAndLinehaulPricer interface { + Price(appCtx appcontext.AppContext, contractCode string, requestedPickupDate time.Time, distance unit.Miles, weight unit.Pound, perUnitCents int) (unit.Cents, PricingDisplayParams, error) + ParamsPricer +} + +// IntlHHGPackPricer prices international packing for an iHHG shipment within a move +// +//go:generate mockery --name IntlHHGPackPricer +type IntlHHGPackPricer interface { + Price(appCtx appcontext.AppContext, contractCode string, requestedPickupDate time.Time, weight unit.Pound, perUnitCents int) (unit.Cents, PricingDisplayParams, error) + ParamsPricer +} + +// IntlHHGUnpackPricer prices international unpacking for an iHHG shipment within a move +// +//go:generate mockery --name IntlHHGUnpackPricer +type IntlHHGUnpackPricer interface { + Price(appCtx appcontext.AppContext, contractCode string, requestedPickupDate time.Time, weight unit.Pound, perUnitCents int) (unit.Cents, PricingDisplayParams, error) + ParamsPricer +} + +// IntlPortFuelSurchargePricer prices the POEFSC/PODFSC service items on an iHHG shipment within a move +// +//go:generate mockery --name IntlPortFuelSurchargePricer +type IntlPortFuelSurchargePricer interface { + Price(appCtx appcontext.AppContext, actualPickupDate time.Time, distance unit.Miles, weight unit.Pound, fscWeightBasedDistanceMultiplier float64, eiaFuelPrice unit.Millicents) (unit.Cents, PricingDisplayParams, error) + ParamsPricer +} diff --git a/pkg/services/ghcrateengine/fuel_surcharge_pricer.go b/pkg/services/ghcrateengine/fuel_surcharge_pricer.go index 7371a7f397f..72b71bafce6 100644 --- a/pkg/services/ghcrateengine/fuel_surcharge_pricer.go +++ b/pkg/services/ghcrateengine/fuel_surcharge_pricer.go @@ -27,7 +27,7 @@ func NewFuelSurchargePricer() services.FuelSurchargePricer { return &fuelSurchargePricer{} } -// Price determines the price for a counseling service +// Price determines the price for fuel surcharge func (p fuelSurchargePricer) Price(_ appcontext.AppContext, actualPickupDate time.Time, distance unit.Miles, weight unit.Pound, fscWeightBasedDistanceMultiplier float64, eiaFuelPrice unit.Millicents, isPPM bool) (unit.Cents, services.PricingDisplayParams, error) { // Validate parameters if actualPickupDate.IsZero() { diff --git a/pkg/services/ghcrateengine/intl_hhg_pack_pricer.go b/pkg/services/ghcrateengine/intl_hhg_pack_pricer.go new file mode 100644 index 00000000000..12090aa3bde --- /dev/null +++ b/pkg/services/ghcrateengine/intl_hhg_pack_pricer.go @@ -0,0 +1,45 @@ +package ghcrateengine + +import ( + "time" + + "github.com/transcom/mymove/pkg/appcontext" + "github.com/transcom/mymove/pkg/models" + "github.com/transcom/mymove/pkg/services" + "github.com/transcom/mymove/pkg/unit" +) + +type intlHHGPackPricer struct { +} + +func NewIntlHHGPackPricer() services.IntlHHGPackPricer { + return &intlHHGPackPricer{} +} + +func (p intlHHGPackPricer) Price(appCtx appcontext.AppContext, contractCode string, referenceDate time.Time, weight unit.Pound, perUnitCents int) (unit.Cents, services.PricingDisplayParams, error) { + return priceIntlPackUnpack(appCtx, models.ReServiceCodeIHPK, contractCode, referenceDate, weight, perUnitCents) +} + +func (p intlHHGPackPricer) PriceUsingParams(appCtx appcontext.AppContext, params models.PaymentServiceItemParams) (unit.Cents, services.PricingDisplayParams, error) { + contractCode, err := getParamString(params, models.ServiceItemParamNameContractCode) + if err != nil { + return unit.Cents(0), nil, err + } + + referenceDate, err := getParamTime(params, models.ServiceItemParamNameReferenceDate) + if err != nil { + return unit.Cents(0), nil, err + } + + perUnitCents, err := getParamInt(params, models.ServiceItemParamNamePerUnitCents) + if err != nil { + return unit.Cents(0), nil, err + } + + weightBilled, err := getParamInt(params, models.ServiceItemParamNameWeightBilled) + if err != nil { + return unit.Cents(0), nil, err + } + + return p.Price(appCtx, contractCode, referenceDate, unit.Pound(weightBilled), perUnitCents) +} diff --git a/pkg/services/ghcrateengine/intl_hhg_pack_pricer_test.go b/pkg/services/ghcrateengine/intl_hhg_pack_pricer_test.go new file mode 100644 index 00000000000..9674775b906 --- /dev/null +++ b/pkg/services/ghcrateengine/intl_hhg_pack_pricer_test.go @@ -0,0 +1,115 @@ +package ghcrateengine + +import ( + "fmt" + "strconv" + "time" + + "github.com/transcom/mymove/pkg/factory" + "github.com/transcom/mymove/pkg/models" + "github.com/transcom/mymove/pkg/services" + "github.com/transcom/mymove/pkg/testdatagen" + "github.com/transcom/mymove/pkg/unit" +) + +const ( + ihpkTestContractYearName = "Base Period Year 1" + ihpkTestPerUnitCents = unit.Cents(15000) + ihpkTestTotalCost = unit.Cents(315000) + ihpkTestIsPeakPeriod = true + ihpkTestEscalationCompounded = 1.0000 + ihpkTestWeight = unit.Pound(2100) + ihpkTestPriceCents = unit.Cents(193064) +) + +var ihpkTestRequestedPickupDate = time.Date(testdatagen.TestYear, peakStart.month, peakStart.day, 0, 0, 0, 0, time.UTC) + +func (suite *GHCRateEngineServiceSuite) TestIntlHHGPackPricer() { + pricer := NewIntlHHGPackPricer() + + suite.Run("success using PaymentServiceItemParams", func() { + paymentServiceItem := suite.setupIntlPackServiceItem() + + totalCost, displayParams, err := pricer.PriceUsingParams(suite.AppContextForTest(), paymentServiceItem.PaymentServiceItemParams) + suite.NoError(err) + suite.Equal(ihpkTestTotalCost, totalCost) + + expectedParams := services.PricingDisplayParams{ + {Key: models.ServiceItemParamNameContractYearName, Value: ihpkTestContractYearName}, + {Key: models.ServiceItemParamNameEscalationCompounded, Value: FormatEscalation(ihpkTestEscalationCompounded)}, + {Key: models.ServiceItemParamNameIsPeak, Value: FormatBool(ihpkTestIsPeakPeriod)}, + {Key: models.ServiceItemParamNamePriceRateOrFactor, Value: FormatCents(ihpkTestPerUnitCents)}, + } + suite.validatePricerCreatedParams(expectedParams, displayParams) + }) + + suite.Run("invalid parameters to PriceUsingParams", func() { + paymentServiceItem := suite.setupIntlPackServiceItem() + + // WeightBilled + paymentServiceItem.PaymentServiceItemParams[3].ServiceItemParamKey.Type = models.ServiceItemParamTypeBoolean + _, _, err := pricer.PriceUsingParams(suite.AppContextForTest(), paymentServiceItem.PaymentServiceItemParams) + suite.Error(err) + suite.Contains(err.Error(), fmt.Sprintf("trying to convert %s to an int", models.ServiceItemParamNameWeightBilled)) + + // PerUnitCents + paymentServiceItem.PaymentServiceItemParams[2].ServiceItemParamKey.Type = models.ServiceItemParamTypeBoolean + _, _, err = pricer.PriceUsingParams(suite.AppContextForTest(), paymentServiceItem.PaymentServiceItemParams) + suite.Error(err) + suite.Contains(err.Error(), fmt.Sprintf("trying to convert %s to an int", models.ServiceItemParamNamePerUnitCents)) + + // ReferenceDate + paymentServiceItem.PaymentServiceItemParams[1].ServiceItemParamKey.Type = models.ServiceItemParamTypeBoolean + _, _, err = pricer.PriceUsingParams(suite.AppContextForTest(), paymentServiceItem.PaymentServiceItemParams) + suite.Error(err) + suite.Contains(err.Error(), fmt.Sprintf("trying to convert %s to a time", models.ServiceItemParamNameReferenceDate)) + + // ContractCode + paymentServiceItem.PaymentServiceItemParams[0].ServiceItemParamKey.Type = models.ServiceItemParamTypeBoolean + _, _, err = pricer.PriceUsingParams(suite.AppContextForTest(), paymentServiceItem.PaymentServiceItemParams) + suite.Error(err) + suite.Contains(err.Error(), fmt.Sprintf("trying to convert %s to a string", models.ServiceItemParamNameContractCode)) + }) +} + +func (suite *GHCRateEngineServiceSuite) setupIntlPackServiceItem() models.PaymentServiceItem { + contract := testdatagen.FetchOrMakeReContract(suite.DB(), testdatagen.Assertions{}) + startDate := time.Date(2018, time.January, 1, 12, 0, 0, 0, time.UTC) + endDate := time.Date(2018, time.December, 31, 12, 0, 0, 0, time.UTC) + testdatagen.FetchOrMakeReContractYear(suite.DB(), testdatagen.Assertions{ + ReContractYear: models.ReContractYear{ + Contract: contract, + ContractID: contract.ID, + StartDate: startDate, + EndDate: endDate, + Escalation: 1.0, + EscalationCompounded: 1.0, + }, + }) + return factory.BuildPaymentServiceItemWithParams( + suite.DB(), + models.ReServiceCodeIHPK, + []factory.CreatePaymentServiceItemParams{ + { + Key: models.ServiceItemParamNameContractCode, + KeyType: models.ServiceItemParamTypeString, + Value: contract.Code, + }, + { + Key: models.ServiceItemParamNameReferenceDate, + KeyType: models.ServiceItemParamTypeDate, + Value: ihpkTestRequestedPickupDate.Format(DateParamFormat), + }, + { + Key: models.ServiceItemParamNamePerUnitCents, + KeyType: models.ServiceItemParamTypeInteger, + Value: fmt.Sprintf("%d", int(ihpkTestPerUnitCents)), + }, + { + Key: models.ServiceItemParamNameWeightBilled, + KeyType: models.ServiceItemParamTypeInteger, + Value: strconv.Itoa(ihpkTestWeight.Int()), + }, + }, nil, nil, + ) +} diff --git a/pkg/services/ghcrateengine/intl_hhg_unpack_pricer.go b/pkg/services/ghcrateengine/intl_hhg_unpack_pricer.go new file mode 100644 index 00000000000..d4cb95dd315 --- /dev/null +++ b/pkg/services/ghcrateengine/intl_hhg_unpack_pricer.go @@ -0,0 +1,45 @@ +package ghcrateengine + +import ( + "time" + + "github.com/transcom/mymove/pkg/appcontext" + "github.com/transcom/mymove/pkg/models" + "github.com/transcom/mymove/pkg/services" + "github.com/transcom/mymove/pkg/unit" +) + +type intlHHGUnpackPricer struct { +} + +func NewIntlHHGUnpackPricer() services.IntlHHGUnpackPricer { + return &intlHHGUnpackPricer{} +} + +func (p intlHHGUnpackPricer) Price(appCtx appcontext.AppContext, contractCode string, referenceDate time.Time, weight unit.Pound, perUnitCents int) (unit.Cents, services.PricingDisplayParams, error) { + return priceIntlPackUnpack(appCtx, models.ReServiceCodeIHUPK, contractCode, referenceDate, weight, perUnitCents) +} + +func (p intlHHGUnpackPricer) PriceUsingParams(appCtx appcontext.AppContext, params models.PaymentServiceItemParams) (unit.Cents, services.PricingDisplayParams, error) { + contractCode, err := getParamString(params, models.ServiceItemParamNameContractCode) + if err != nil { + return unit.Cents(0), nil, err + } + + referenceDate, err := getParamTime(params, models.ServiceItemParamNameReferenceDate) + if err != nil { + return unit.Cents(0), nil, err + } + + perUnitCents, err := getParamInt(params, models.ServiceItemParamNamePerUnitCents) + if err != nil { + return unit.Cents(0), nil, err + } + + weightBilled, err := getParamInt(params, models.ServiceItemParamNameWeightBilled) + if err != nil { + return unit.Cents(0), nil, err + } + + return p.Price(appCtx, contractCode, referenceDate, unit.Pound(weightBilled), perUnitCents) +} diff --git a/pkg/services/ghcrateengine/intl_hhg_unpack_pricer_test.go b/pkg/services/ghcrateengine/intl_hhg_unpack_pricer_test.go new file mode 100644 index 00000000000..322027b37b5 --- /dev/null +++ b/pkg/services/ghcrateengine/intl_hhg_unpack_pricer_test.go @@ -0,0 +1,114 @@ +package ghcrateengine + +import ( + "fmt" + "strconv" + "time" + + "github.com/transcom/mymove/pkg/factory" + "github.com/transcom/mymove/pkg/models" + "github.com/transcom/mymove/pkg/services" + "github.com/transcom/mymove/pkg/testdatagen" + "github.com/transcom/mymove/pkg/unit" +) + +const ( + ihupkTestContractYearName = "Base Period Year 1" + ihupkTestPerUnitCents = unit.Cents(1200) + ihupkTestTotalCost = unit.Cents(25200) + ihupkTestIsPeakPeriod = true + ihupkTestEscalationCompounded = 1.0000 + ihpukTestWeight = unit.Pound(2100) +) + +var ihupkTestRequestedPickupDate = time.Date(testdatagen.TestYear, peakStart.month, peakStart.day, 0, 0, 0, 0, time.UTC) + +func (suite *GHCRateEngineServiceSuite) TestIntlHHGUnpackPricer() { + pricer := NewIntlHHGUnpackPricer() + + suite.Run("success using PaymentServiceItemParams", func() { + paymentServiceItem := suite.setupIntlUnpackServiceItem() + + totalCost, displayParams, err := pricer.PriceUsingParams(suite.AppContextForTest(), paymentServiceItem.PaymentServiceItemParams) + suite.NoError(err) + suite.Equal(ihupkTestTotalCost, totalCost) + + expectedParams := services.PricingDisplayParams{ + {Key: models.ServiceItemParamNameContractYearName, Value: ihupkTestContractYearName}, + {Key: models.ServiceItemParamNameEscalationCompounded, Value: FormatEscalation(ihupkTestEscalationCompounded)}, + {Key: models.ServiceItemParamNameIsPeak, Value: FormatBool(ihupkTestIsPeakPeriod)}, + {Key: models.ServiceItemParamNamePriceRateOrFactor, Value: FormatCents(ihupkTestPerUnitCents)}, + } + suite.validatePricerCreatedParams(expectedParams, displayParams) + }) + + suite.Run("invalid parameters to PriceUsingParams", func() { + paymentServiceItem := suite.setupIntlPackServiceItem() + + // WeightBilled + paymentServiceItem.PaymentServiceItemParams[3].ServiceItemParamKey.Type = models.ServiceItemParamTypeBoolean + _, _, err := pricer.PriceUsingParams(suite.AppContextForTest(), paymentServiceItem.PaymentServiceItemParams) + suite.Error(err) + suite.Contains(err.Error(), fmt.Sprintf("trying to convert %s to an int", models.ServiceItemParamNameWeightBilled)) + + // PerUnitCents + paymentServiceItem.PaymentServiceItemParams[2].ServiceItemParamKey.Type = models.ServiceItemParamTypeBoolean + _, _, err = pricer.PriceUsingParams(suite.AppContextForTest(), paymentServiceItem.PaymentServiceItemParams) + suite.Error(err) + suite.Contains(err.Error(), fmt.Sprintf("trying to convert %s to an int", models.ServiceItemParamNamePerUnitCents)) + + // ReferenceDate + paymentServiceItem.PaymentServiceItemParams[1].ServiceItemParamKey.Type = models.ServiceItemParamTypeBoolean + _, _, err = pricer.PriceUsingParams(suite.AppContextForTest(), paymentServiceItem.PaymentServiceItemParams) + suite.Error(err) + suite.Contains(err.Error(), fmt.Sprintf("trying to convert %s to a time", models.ServiceItemParamNameReferenceDate)) + + // ContractCode + paymentServiceItem.PaymentServiceItemParams[0].ServiceItemParamKey.Type = models.ServiceItemParamTypeBoolean + _, _, err = pricer.PriceUsingParams(suite.AppContextForTest(), paymentServiceItem.PaymentServiceItemParams) + suite.Error(err) + suite.Contains(err.Error(), fmt.Sprintf("trying to convert %s to a string", models.ServiceItemParamNameContractCode)) + }) +} + +func (suite *GHCRateEngineServiceSuite) setupIntlUnpackServiceItem() models.PaymentServiceItem { + contract := testdatagen.FetchOrMakeReContract(suite.DB(), testdatagen.Assertions{}) + startDate := time.Date(2018, time.January, 1, 12, 0, 0, 0, time.UTC) + endDate := time.Date(2018, time.December, 31, 12, 0, 0, 0, time.UTC) + testdatagen.FetchOrMakeReContractYear(suite.DB(), testdatagen.Assertions{ + ReContractYear: models.ReContractYear{ + Contract: contract, + ContractID: contract.ID, + StartDate: startDate, + EndDate: endDate, + Escalation: 1.0, + EscalationCompounded: 1.0, + }, + }) + return factory.BuildPaymentServiceItemWithParams( + suite.DB(), + models.ReServiceCodeIHUPK, + []factory.CreatePaymentServiceItemParams{ + { + Key: models.ServiceItemParamNameContractCode, + KeyType: models.ServiceItemParamTypeString, + Value: contract.Code, + }, + { + Key: models.ServiceItemParamNameReferenceDate, + KeyType: models.ServiceItemParamTypeDate, + Value: ihupkTestRequestedPickupDate.Format(DateParamFormat), + }, + { + Key: models.ServiceItemParamNamePerUnitCents, + KeyType: models.ServiceItemParamTypeInteger, + Value: fmt.Sprintf("%d", int(ihupkTestPerUnitCents)), + }, + { + Key: models.ServiceItemParamNameWeightBilled, + KeyType: models.ServiceItemParamTypeInteger, + Value: strconv.Itoa(ihpukTestWeight.Int()), + }, + }, nil, nil, + ) +} diff --git a/pkg/services/ghcrateengine/intl_port_fuel_surcharge_pricer.go b/pkg/services/ghcrateengine/intl_port_fuel_surcharge_pricer.go new file mode 100644 index 00000000000..e970f29a1c0 --- /dev/null +++ b/pkg/services/ghcrateengine/intl_port_fuel_surcharge_pricer.go @@ -0,0 +1,105 @@ +package ghcrateengine + +import ( + "database/sql" + "fmt" + "math" + "time" + + "github.com/gofrs/uuid" + "github.com/pkg/errors" + + "github.com/transcom/mymove/pkg/appcontext" + "github.com/transcom/mymove/pkg/apperror" + "github.com/transcom/mymove/pkg/models" + "github.com/transcom/mymove/pkg/services" + "github.com/transcom/mymove/pkg/unit" +) + +type portFuelSurchargePricer struct { +} + +func NewPortFuelSurchargePricer() services.IntlPortFuelSurchargePricer { + return &portFuelSurchargePricer{} +} + +func (p portFuelSurchargePricer) Price(_ appcontext.AppContext, actualPickupDate time.Time, distance unit.Miles, weight unit.Pound, fscWeightBasedDistanceMultiplier float64, eiaFuelPrice unit.Millicents) (unit.Cents, services.PricingDisplayParams, error) { + // Validate parameters + if actualPickupDate.IsZero() { + return 0, nil, errors.New("ActualPickupDate is required") + } + if distance <= 0 { + return 0, nil, errors.New("Distance must be greater than 0") + } + if weight < minIntlWeightHHG { + return 0, nil, fmt.Errorf("weight must be a minimum of %d", minIntlWeightHHG) + } + if fscWeightBasedDistanceMultiplier == 0 { + return 0, nil, errors.New("WeightBasedDistanceMultiplier is required") + } + if eiaFuelPrice == 0 { + return 0, nil, errors.New("EIAFuelPrice is required") + } + + fscPriceDifferenceInCents := (eiaFuelPrice - baseGHCDieselFuelPrice).Float64() / 1000.0 + fscMultiplier := fscWeightBasedDistanceMultiplier * distance.Float64() + fscPrice := fscMultiplier * fscPriceDifferenceInCents * 100 + totalCost := unit.Cents(math.Round(fscPrice)) + + displayParams := services.PricingDisplayParams{ + {Key: models.ServiceItemParamNameFSCPriceDifferenceInCents, Value: FormatFloat(fscPriceDifferenceInCents, 1)}, + {Key: models.ServiceItemParamNameFSCMultiplier, Value: FormatFloat(fscMultiplier, 7)}, + } + + return totalCost, displayParams, nil +} + +func (p portFuelSurchargePricer) PriceUsingParams(appCtx appcontext.AppContext, params models.PaymentServiceItemParams) (unit.Cents, services.PricingDisplayParams, error) { + actualPickupDate, err := getParamTime(params, models.ServiceItemParamNameActualPickupDate) + if err != nil { + return unit.Cents(0), nil, err + } + + var paymentServiceItem models.PaymentServiceItem + mtoShipment := params[0].PaymentServiceItem.MTOServiceItem.MTOShipment + + if mtoShipment.ID == uuid.Nil { + err = appCtx.DB().Eager("MTOServiceItem", "MTOServiceItem.MTOShipment").Find(&paymentServiceItem, params[0].PaymentServiceItemID) + if err != nil { + switch err { + case sql.ErrNoRows: + return unit.Cents(0), nil, apperror.NewNotFoundError(params[0].PaymentServiceItemID, "looking for PaymentServiceItem") + default: + return unit.Cents(0), nil, apperror.NewQueryError("PaymentServiceItem", err, "") + } + } + mtoShipment = paymentServiceItem.MTOServiceItem.MTOShipment + } + + distance, err := getParamInt(params, models.ServiceItemParamNameDistanceZip) + if err != nil { + return unit.Cents(0), nil, err + } + + weightBilled, err := getParamInt(params, models.ServiceItemParamNameWeightBilled) + if err != nil { + return unit.Cents(0), nil, err + } + + fscWeightBasedDistanceMultiplier, err := getParamFloat(params, models.ServiceItemParamNameFSCWeightBasedDistanceMultiplier) + if err != nil { + return unit.Cents(0), nil, err + } + + eiaFuelPrice, err := getParamInt(params, models.ServiceItemParamNameEIAFuelPrice) + if err != nil { + return unit.Cents(0), nil, err + } + + _, err = getParamString(params, models.ServiceItemParamNamePortZip) + if err != nil { + return unit.Cents(0), nil, err + } + + return p.Price(appCtx, actualPickupDate, unit.Miles(distance), unit.Pound(weightBilled), fscWeightBasedDistanceMultiplier, unit.Millicents(eiaFuelPrice)) +} diff --git a/pkg/services/ghcrateengine/intl_port_fuel_surcharge_pricer_test.go b/pkg/services/ghcrateengine/intl_port_fuel_surcharge_pricer_test.go new file mode 100644 index 00000000000..ce64f248c22 --- /dev/null +++ b/pkg/services/ghcrateengine/intl_port_fuel_surcharge_pricer_test.go @@ -0,0 +1,209 @@ +package ghcrateengine + +import ( + "fmt" + "time" + + "github.com/gofrs/uuid" + + "github.com/transcom/mymove/pkg/apperror" + "github.com/transcom/mymove/pkg/factory" + "github.com/transcom/mymove/pkg/models" + "github.com/transcom/mymove/pkg/services" + "github.com/transcom/mymove/pkg/testdatagen" + "github.com/transcom/mymove/pkg/unit" +) + +const ( + intlPortFscTestDistance = unit.Miles(2276) + intlPortFscTestWeight = unit.Pound(4025) + intlPortFscWeightDistanceMultiplier = float64(0.000417) + intlPortFscFuelPrice = unit.Millicents(281400) + intlPortFscPriceCents = unit.Cents(2980) + intlPortFscPortZip = "99505" +) + +var intlPortFscActualPickupDate = time.Date(testdatagen.TestYear, time.June, 5, 7, 33, 11, 456, time.UTC) + +func (suite *GHCRateEngineServiceSuite) TestIntlPortFuelSurchargePricer() { + intlPortFuelSurchargePricer := NewPortFuelSurchargePricer() + + intlPortFscPriceDifferenceInCents := (intlPortFscFuelPrice - baseGHCDieselFuelPrice).Float64() / 1000.0 + intlPortFscMultiplier := intlPortFscWeightDistanceMultiplier * intlPortFscTestDistance.Float64() + + suite.Run("success using PaymentServiceItemParams", func() { + paymentServiceItem := suite.setupPortFuelSurchargeServiceItem() + priceCents, displayParams, err := intlPortFuelSurchargePricer.PriceUsingParams(suite.AppContextForTest(), paymentServiceItem.PaymentServiceItemParams) + suite.NoError(err) + suite.Equal(intlPortFscPriceCents, priceCents) + + expectedParams := services.PricingDisplayParams{ + {Key: models.ServiceItemParamNameFSCPriceDifferenceInCents, Value: FormatFloat(intlPortFscPriceDifferenceInCents, 1)}, + {Key: models.ServiceItemParamNameFSCMultiplier, Value: FormatFloat(intlPortFscMultiplier, 7)}, + } + suite.validatePricerCreatedParams(expectedParams, displayParams) + }) + + suite.Run("success without PaymentServiceItemParams", func() { + priceCents, _, err := intlPortFuelSurchargePricer.Price(suite.AppContextForTest(), intlPortFscActualPickupDate, intlPortFscTestDistance, intlPortFscTestWeight, intlPortFscWeightDistanceMultiplier, intlPortFscFuelPrice) + suite.NoError(err) + suite.Equal(intlPortFscPriceCents, priceCents) + }) + + suite.Run("sending PaymentServiceItemParams without expected param", func() { + _, _, err := intlPortFuelSurchargePricer.PriceUsingParams(suite.AppContextForTest(), models.PaymentServiceItemParams{}) + suite.Error(err) + }) + + suite.Run("fails using PaymentServiceItemParams with below minimum weight for WeightBilled", func() { + paymentServiceItem := suite.setupPortFuelSurchargeServiceItem() + paramsWithBelowMinimumWeight := paymentServiceItem.PaymentServiceItemParams + weightBilledIndex := 2 + if paramsWithBelowMinimumWeight[weightBilledIndex].ServiceItemParamKey.Key != models.ServiceItemParamNameWeightBilled { + suite.FailNow("failed", "Test needs to adjust the weight of %s but the index is pointing to %s ", models.ServiceItemParamNameWeightBilled, paramsWithBelowMinimumWeight[4].ServiceItemParamKey.Key) + } + paramsWithBelowMinimumWeight[weightBilledIndex].Value = "200" + priceCents, _, err := intlPortFuelSurchargePricer.PriceUsingParams(suite.AppContextForTest(), paramsWithBelowMinimumWeight) + if suite.Error(err) { + suite.Equal("weight must be a minimum of 500", err.Error()) + suite.Equal(unit.Cents(0), priceCents) + } + }) + + suite.Run("FSC is negative if fuel price from EIA is below $2.50", func() { + priceCents, _, err := intlPortFuelSurchargePricer.Price(suite.AppContextForTest(), intlPortFscActualPickupDate, intlPortFscTestDistance, intlPortFscTestWeight, intlPortFscWeightDistanceMultiplier, 242400) + suite.NoError(err) + suite.Equal(unit.Cents(-721), priceCents) + }) + + suite.Run("Price validation errors", func() { + + // No actual pickup date + _, _, err := intlPortFuelSurchargePricer.Price(suite.AppContextForTest(), time.Time{}, intlPortFscTestDistance, intlPortFscTestWeight, intlPortFscWeightDistanceMultiplier, intlPortFscFuelPrice) + suite.Error(err) + suite.Equal("ActualPickupDate is required", err.Error()) + + // No distance + _, _, err = intlPortFuelSurchargePricer.Price(suite.AppContextForTest(), intlPortFscActualPickupDate, unit.Miles(0), intlPortFscTestWeight, intlPortFscWeightDistanceMultiplier, intlPortFscFuelPrice) + suite.Error(err) + suite.Equal("Distance must be greater than 0", err.Error()) + + // No weight + _, _, err = intlPortFuelSurchargePricer.Price(suite.AppContextForTest(), intlPortFscActualPickupDate, intlPortFscTestDistance, unit.Pound(0), intlPortFscWeightDistanceMultiplier, intlPortFscFuelPrice) + suite.Error(err) + suite.Equal(fmt.Sprintf("weight must be a minimum of %d", minDomesticWeight), err.Error()) + + // No weight based distance multiplier + _, _, err = intlPortFuelSurchargePricer.Price(suite.AppContextForTest(), intlPortFscActualPickupDate, intlPortFscTestDistance, intlPortFscTestWeight, 0, intlPortFscFuelPrice) + suite.Error(err) + suite.Equal("WeightBasedDistanceMultiplier is required", err.Error()) + + // No EIA fuel price + _, _, err = intlPortFuelSurchargePricer.Price(suite.AppContextForTest(), intlPortFscActualPickupDate, intlPortFscTestDistance, intlPortFscTestWeight, intlPortFscWeightDistanceMultiplier, 0) + suite.Error(err) + suite.Equal("EIAFuelPrice is required", err.Error()) + }) + + suite.Run("PriceUsingParams validation errors", func() { + paymentServiceItem := suite.setupPortFuelSurchargeServiceItem() + paramsWithBelowMinimumWeight := paymentServiceItem.PaymentServiceItemParams + weightBilledIndex := 2 + if paramsWithBelowMinimumWeight[weightBilledIndex].ServiceItemParamKey.Key != models.ServiceItemParamNameWeightBilled { + suite.FailNow("failed", "Test needs to adjust the weight of %s but the index is pointing to %s ", models.ServiceItemParamNameWeightBilled, paramsWithBelowMinimumWeight[4].ServiceItemParamKey.Key) + } + paramsWithBelowMinimumWeight[weightBilledIndex].Value = "200" + + // No ActualPickupDate + missingActualPickupDate := suite.removeOnePaymentServiceItem(paymentServiceItem.PaymentServiceItemParams, models.ServiceItemParamNameActualPickupDate) + _, _, err := intlPortFuelSurchargePricer.PriceUsingParams(suite.AppContextForTest(), missingActualPickupDate) + suite.Error(err) + suite.Equal("could not find param with key ActualPickupDate", err.Error()) + + // No WeightBilled + missingWeightBilled := suite.removeOnePaymentServiceItem(paymentServiceItem.PaymentServiceItemParams, models.ServiceItemParamNameWeightBilled) + _, _, err = intlPortFuelSurchargePricer.PriceUsingParams(suite.AppContextForTest(), missingWeightBilled) + suite.Error(err) + suite.Equal("could not find param with key WeightBilled", err.Error()) + + // No FSCWeightBasedDistanceMultiplier + missingFSCWeightBasedDistanceMultiplier := suite.removeOnePaymentServiceItem(paymentServiceItem.PaymentServiceItemParams, models.ServiceItemParamNameFSCWeightBasedDistanceMultiplier) + _, _, err = intlPortFuelSurchargePricer.PriceUsingParams(suite.AppContextForTest(), missingFSCWeightBasedDistanceMultiplier) + suite.Error(err) + suite.Equal("could not find param with key FSCWeightBasedDistanceMultiplier", err.Error()) + + // No EIAFuelPrice + missingEIAFuelPrice := suite.removeOnePaymentServiceItem(paymentServiceItem.PaymentServiceItemParams, models.ServiceItemParamNameEIAFuelPrice) + _, _, err = intlPortFuelSurchargePricer.PriceUsingParams(suite.AppContextForTest(), missingEIAFuelPrice) + suite.Error(err) + suite.Equal("could not find param with key EIAFuelPrice", err.Error()) + }) + + suite.Run("can't find distance", func() { + paymentServiceItem := suite.setupPortFuelSurchargeServiceItem() + paramsWithBelowMinimumWeight := paymentServiceItem.PaymentServiceItemParams + weightBilledIndex := 2 + if paramsWithBelowMinimumWeight[weightBilledIndex].ServiceItemParamKey.Key != models.ServiceItemParamNameWeightBilled { + suite.FailNow("failed", "Test needs to adjust the weight of %s but the index is pointing to %s ", models.ServiceItemParamNameWeightBilled, paramsWithBelowMinimumWeight[4].ServiceItemParamKey.Key) + } + paramsWithBelowMinimumWeight[weightBilledIndex].Value = "200" + + paramsWithBadReference := paymentServiceItem.PaymentServiceItemParams + paramsWithBadReference[0].PaymentServiceItemID = uuid.Nil + _, _, err := intlPortFuelSurchargePricer.PriceUsingParams(suite.AppContextForTest(), paramsWithBadReference) + suite.Error(err) + suite.IsType(apperror.NotFoundError{}, err) + }) +} + +func (suite *GHCRateEngineServiceSuite) setupPortFuelSurchargeServiceItem() models.PaymentServiceItem { + model := factory.BuildPaymentServiceItemWithParams( + suite.DB(), + models.ReServiceCodePOEFSC, + []factory.CreatePaymentServiceItemParams{ + { + Key: models.ServiceItemParamNameActualPickupDate, + KeyType: models.ServiceItemParamTypeDate, + Value: intlPortFscActualPickupDate.Format(DateParamFormat), + }, + { + Key: models.ServiceItemParamNameDistanceZip, + KeyType: models.ServiceItemParamTypeInteger, + Value: fmt.Sprintf("%d", int(intlPortFscTestDistance)), + }, + { + Key: models.ServiceItemParamNameWeightBilled, + KeyType: models.ServiceItemParamTypeInteger, + Value: fmt.Sprintf("%d", int(intlPortFscTestWeight)), + }, + { + Key: models.ServiceItemParamNameFSCWeightBasedDistanceMultiplier, + KeyType: models.ServiceItemParamTypeDecimal, + Value: fmt.Sprintf("%.7f", intlPortFscWeightDistanceMultiplier), + }, + { + Key: models.ServiceItemParamNameEIAFuelPrice, + KeyType: models.ServiceItemParamTypeInteger, + Value: fmt.Sprintf("%d", int(intlPortFscFuelPrice)), + }, + { + Key: models.ServiceItemParamNamePortZip, + KeyType: models.ServiceItemParamTypeString, + Value: intlPortFscPortZip, + }, + }, nil, nil, + ) + + var mtoServiceItem models.MTOServiceItem + err := suite.DB().Eager("MTOShipment").Find(&mtoServiceItem, model.MTOServiceItemID) + suite.NoError(err) + + distance := intlPortFscTestDistance + mtoServiceItem.MTOShipment.Distance = &distance + err = suite.DB().Save(&mtoServiceItem.MTOShipment) + suite.NoError(err) + + // the testdatagen factory has some dirty shipment data that we don't want to pass through to the pricer in the test + model.PaymentServiceItemParams[0].PaymentServiceItem.MTOServiceItem = models.MTOServiceItem{} + + return model +} diff --git a/pkg/services/ghcrateengine/intl_shipping_and_linehaul_pricer.go b/pkg/services/ghcrateengine/intl_shipping_and_linehaul_pricer.go new file mode 100644 index 00000000000..3d0ea35c3ba --- /dev/null +++ b/pkg/services/ghcrateengine/intl_shipping_and_linehaul_pricer.go @@ -0,0 +1,108 @@ +package ghcrateengine + +import ( + "fmt" + "math" + "time" + + "github.com/pkg/errors" + + "github.com/transcom/mymove/pkg/appcontext" + "github.com/transcom/mymove/pkg/models" + "github.com/transcom/mymove/pkg/services" + "github.com/transcom/mymove/pkg/unit" +) + +const islhPricerMinimumWeight = unit.Pound(500) + +type intlShippingAndLinehaulPricer struct { +} + +func NewIntlShippingAndLinehaulPricer() services.IntlShippingAndLinehaulPricer { + return &intlShippingAndLinehaulPricer{} +} + +func (p intlShippingAndLinehaulPricer) Price(appCtx appcontext.AppContext, contractCode string, referenceDate time.Time, distance unit.Miles, weight unit.Pound, perUnitCents int) (unit.Cents, services.PricingDisplayParams, error) { + if len(contractCode) == 0 { + return 0, nil, errors.New("ContractCode is required") + } + if referenceDate.IsZero() { + return 0, nil, errors.New("referenceDate is required") + } + if weight < islhPricerMinimumWeight { + return 0, nil, fmt.Errorf("weight must be at least %d", islhPricerMinimumWeight) + } + if perUnitCents == 0 { + return 0, nil, errors.New("PerUnitCents is required") + } + + isPeakPeriod := IsPeakPeriod(referenceDate) + + contract, err := fetchContractByContractCode(appCtx, contractCode) + if err != nil { + return 0, nil, fmt.Errorf("could not find contract with code: %s: %w", contractCode, err) + } + + basePrice := float64(perUnitCents) + escalatedPrice, contractYear, err := escalatePriceForContractYear( + appCtx, + contract.ID, + referenceDate, + true, + basePrice) + if err != nil { + return 0, nil, fmt.Errorf("could not calculate escalated price: %w", err) + } + + escalatedPrice = escalatedPrice * weight.ToCWTFloat64() + totalPriceCents := unit.Cents(math.Round(escalatedPrice)) + + params := services.PricingDisplayParams{ + { + Key: models.ServiceItemParamNameContractYearName, + Value: contractYear.Name, + }, + { + Key: models.ServiceItemParamNameEscalationCompounded, + Value: FormatEscalation(contractYear.EscalationCompounded), + }, + { + Key: models.ServiceItemParamNameIsPeak, + Value: FormatBool(isPeakPeriod), + }, + { + Key: models.ServiceItemParamNamePriceRateOrFactor, + Value: FormatCents(unit.Cents(perUnitCents)), + }} + + return totalPriceCents, params, nil +} + +func (p intlShippingAndLinehaulPricer) PriceUsingParams(appCtx appcontext.AppContext, params models.PaymentServiceItemParams) (unit.Cents, services.PricingDisplayParams, error) { + contractCode, err := getParamString(params, models.ServiceItemParamNameContractCode) + if err != nil { + return unit.Cents(0), nil, err + } + + distance, err := getParamInt(params, models.ServiceItemParamNameDistanceZip) + if err != nil { + return unit.Cents(0), nil, err + } + + referenceDate, err := getParamTime(params, models.ServiceItemParamNameReferenceDate) + if err != nil { + return unit.Cents(0), nil, err + } + + weightBilled, err := getParamInt(params, models.ServiceItemParamNameWeightBilled) + if err != nil { + return unit.Cents(0), nil, err + } + + perUnitCents, err := getParamInt(params, models.ServiceItemParamNamePerUnitCents) + if err != nil { + return unit.Cents(0), nil, err + } + + return p.Price(appCtx, contractCode, referenceDate, unit.Miles(distance), unit.Pound(weightBilled), perUnitCents) +} diff --git a/pkg/services/ghcrateengine/intl_shipping_and_linehaul_pricer_test.go b/pkg/services/ghcrateengine/intl_shipping_and_linehaul_pricer_test.go new file mode 100644 index 00000000000..ef3407b04f0 --- /dev/null +++ b/pkg/services/ghcrateengine/intl_shipping_and_linehaul_pricer_test.go @@ -0,0 +1,144 @@ +package ghcrateengine + +import ( + "fmt" + "strconv" + "time" + + "github.com/transcom/mymove/pkg/factory" + "github.com/transcom/mymove/pkg/models" + "github.com/transcom/mymove/pkg/services" + "github.com/transcom/mymove/pkg/testdatagen" + "github.com/transcom/mymove/pkg/unit" +) + +const ( + islhTestContractYearName = "Base Period Year 1" + islhTestPerUnitCents = unit.Cents(15000) + islhTestTotalCost = unit.Cents(315000) + islhTestIsPeakPeriod = true + islhTestEscalationCompounded = 1.0000 + islhTestWeight = unit.Pound(2100) + islhTestDistance = unit.Miles(1201) +) + +var islhTestRequestedPickupDate = time.Date(testdatagen.TestYear, peakStart.month, peakStart.day, 0, 0, 0, 0, time.UTC) + +func (suite *GHCRateEngineServiceSuite) TestIntlShippingAndLinehaulPricer() { + pricer := NewIntlShippingAndLinehaulPricer() + + suite.Run("success using PaymentServiceItemParams", func() { + paymentServiceItem := suite.setupIntlShippingAndLinehaulServiceItem() + + totalCost, displayParams, err := pricer.PriceUsingParams(suite.AppContextForTest(), paymentServiceItem.PaymentServiceItemParams) + suite.NoError(err) + suite.Equal(islhTestTotalCost, totalCost) + + expectedParams := services.PricingDisplayParams{ + {Key: models.ServiceItemParamNameContractYearName, Value: islhTestContractYearName}, + {Key: models.ServiceItemParamNameEscalationCompounded, Value: FormatEscalation(islhTestEscalationCompounded)}, + {Key: models.ServiceItemParamNameIsPeak, Value: FormatBool(islhTestIsPeakPeriod)}, + {Key: models.ServiceItemParamNamePriceRateOrFactor, Value: FormatCents(islhTestPerUnitCents)}, + } + suite.validatePricerCreatedParams(expectedParams, displayParams) + }) + + suite.Run("invalid parameters to PriceUsingParams", func() { + paymentServiceItem := suite.setupIntlShippingAndLinehaulServiceItem() + + // PerUnitCents + paymentServiceItem.PaymentServiceItemParams[3].ServiceItemParamKey.Type = models.ServiceItemParamTypeBoolean + _, _, err := pricer.PriceUsingParams(suite.AppContextForTest(), paymentServiceItem.PaymentServiceItemParams) + suite.Error(err) + suite.Contains(err.Error(), fmt.Sprintf("trying to convert %s to an int", models.ServiceItemParamNamePerUnitCents)) + + // ReferenceDate + paymentServiceItem.PaymentServiceItemParams[2].ServiceItemParamKey.Type = models.ServiceItemParamTypeBoolean + _, _, err = pricer.PriceUsingParams(suite.AppContextForTest(), paymentServiceItem.PaymentServiceItemParams) + suite.Error(err) + suite.Contains(err.Error(), fmt.Sprintf("trying to convert %s to a time", models.ServiceItemParamNameReferenceDate)) + + // DistanceZip + paymentServiceItem.PaymentServiceItemParams[1].ServiceItemParamKey.Type = models.ServiceItemParamTypeBoolean + _, _, err = pricer.PriceUsingParams(suite.AppContextForTest(), paymentServiceItem.PaymentServiceItemParams) + suite.Error(err) + suite.Contains(err.Error(), fmt.Sprintf("trying to convert %s to an int", models.ServiceItemParamNameDistanceZip)) + + // ContractCode + paymentServiceItem.PaymentServiceItemParams[0].ServiceItemParamKey.Type = models.ServiceItemParamTypeBoolean + _, _, err = pricer.PriceUsingParams(suite.AppContextForTest(), paymentServiceItem.PaymentServiceItemParams) + suite.Error(err) + suite.Contains(err.Error(), fmt.Sprintf("trying to convert %s to a string", models.ServiceItemParamNameContractCode)) + }) + + suite.Run("Price validation errors", func() { + + // No contract code + _, _, err := pricer.Price(suite.AppContextForTest(), "", islhTestRequestedPickupDate, islhTestDistance, islhTestWeight, islhTestPerUnitCents.Int()) + suite.Error(err) + suite.Equal("ContractCode is required", err.Error()) + + // No reference date + _, _, err = pricer.Price(suite.AppContextForTest(), testdatagen.DefaultContractCode, time.Time{}, islhTestDistance, islhTestWeight, islhTestPerUnitCents.Int()) + suite.Error(err) + suite.Equal("referenceDate is required", err.Error()) + + // No weight + _, _, err = pricer.Price(suite.AppContextForTest(), testdatagen.DefaultContractCode, islhTestRequestedPickupDate, islhTestDistance, 0, islhTestPerUnitCents.Int()) + suite.Error(err) + suite.Equal(fmt.Sprintf("weight must be at least %d", minIntlWeightHHG), err.Error()) + + // No per unit cents + _, _, err = pricer.Price(suite.AppContextForTest(), testdatagen.DefaultContractCode, islhTestRequestedPickupDate, islhTestDistance, islhTestWeight, 0) + suite.Error(err) + suite.Equal("PerUnitCents is required", err.Error()) + + }) +} + +func (suite *GHCRateEngineServiceSuite) setupIntlShippingAndLinehaulServiceItem() models.PaymentServiceItem { + contract := testdatagen.FetchOrMakeReContract(suite.DB(), testdatagen.Assertions{}) + startDate := time.Date(2018, time.January, 1, 12, 0, 0, 0, time.UTC) + endDate := time.Date(2018, time.December, 31, 12, 0, 0, 0, time.UTC) + testdatagen.FetchOrMakeReContractYear(suite.DB(), testdatagen.Assertions{ + ReContractYear: models.ReContractYear{ + Contract: contract, + ContractID: contract.ID, + StartDate: startDate, + EndDate: endDate, + Escalation: 1.0, + EscalationCompounded: 1.0, + }, + }) + return factory.BuildPaymentServiceItemWithParams( + suite.DB(), + models.ReServiceCodeISLH, + []factory.CreatePaymentServiceItemParams{ + { + Key: models.ServiceItemParamNameContractCode, + KeyType: models.ServiceItemParamTypeString, + Value: contract.Code, + }, + { + Key: models.ServiceItemParamNameDistanceZip, + KeyType: models.ServiceItemParamTypeInteger, + Value: fmt.Sprintf("%d", int(islhTestDistance)), + }, + { + Key: models.ServiceItemParamNameReferenceDate, + KeyType: models.ServiceItemParamTypeDate, + Value: islhTestRequestedPickupDate.Format(DateParamFormat), + }, + { + Key: models.ServiceItemParamNamePerUnitCents, + KeyType: models.ServiceItemParamTypeInteger, + Value: fmt.Sprintf("%d", int(islhTestPerUnitCents)), + }, + { + Key: models.ServiceItemParamNameWeightBilled, + KeyType: models.ServiceItemParamTypeInteger, + Value: strconv.Itoa(islhTestWeight.Int()), + }, + }, nil, nil, + ) +} diff --git a/pkg/services/ghcrateengine/pricer_helpers.go b/pkg/services/ghcrateengine/pricer_helpers.go index faa802afb0b..cb804b0da49 100644 --- a/pkg/services/ghcrateengine/pricer_helpers.go +++ b/pkg/services/ghcrateengine/pricer_helpers.go @@ -448,10 +448,10 @@ func createPricerGeneratedParams(appCtx appcontext.AppContext, paymentServiceIte Where("key = ?", param.Key). First(&serviceItemParamKey) if err != nil { - return paymentServiceItemParams, fmt.Errorf("Unable to find service item param key for %v", param.Key) + return paymentServiceItemParams, fmt.Errorf("unable to find service item param key for %v", param.Key) } if serviceItemParamKey.Origin != models.ServiceItemParamOriginPricer { - return paymentServiceItemParams, fmt.Errorf("Service item param key is not a pricer param. Param key: %v", serviceItemParamKey.Key) + return paymentServiceItemParams, fmt.Errorf("service item param key is not a pricer param. Param key: %v", serviceItemParamKey.Key) } // Create the PaymentServiceItemParam from the PricingDisplayParam and store it in the DB diff --git a/pkg/services/ghcrateengine/pricer_helpers_intl.go b/pkg/services/ghcrateengine/pricer_helpers_intl.go new file mode 100644 index 00000000000..924dad55537 --- /dev/null +++ b/pkg/services/ghcrateengine/pricer_helpers_intl.go @@ -0,0 +1,66 @@ +package ghcrateengine + +import ( + "fmt" + "math" + "time" + + "github.com/pkg/errors" + + "github.com/transcom/mymove/pkg/appcontext" + "github.com/transcom/mymove/pkg/models" + "github.com/transcom/mymove/pkg/services" + "github.com/transcom/mymove/pkg/unit" +) + +func priceIntlPackUnpack(appCtx appcontext.AppContext, packUnpackCode models.ReServiceCode, contractCode string, referenceDate time.Time, weight unit.Pound, perUnitCents int) (unit.Cents, services.PricingDisplayParams, error) { + if packUnpackCode != models.ReServiceCodeIHPK && packUnpackCode != models.ReServiceCodeIHUPK { + return 0, nil, fmt.Errorf("unsupported pack/unpack code of %s", packUnpackCode) + } + if len(contractCode) == 0 { + return 0, nil, errors.New("ContractCode is required") + } + if referenceDate.IsZero() { + return 0, nil, errors.New("ReferenceDate is required") + } + if perUnitCents == 0 { + return 0, nil, errors.New("PerUnitCents is required") + } + + isPeakPeriod := IsPeakPeriod(referenceDate) + + contract, err := fetchContractByContractCode(appCtx, contractCode) + if err != nil { + return 0, nil, fmt.Errorf("could not find contract with code: %s: %w", contractCode, err) + } + + basePrice := float64(perUnitCents) + escalatedPrice, contractYear, err := escalatePriceForContractYear(appCtx, contract.ID, referenceDate, false, basePrice) + if err != nil { + return 0, nil, fmt.Errorf("could not calculate escalated price: %w", err) + } + + escalatedPrice = escalatedPrice * weight.ToCWTFloat64() + totalCost := unit.Cents(math.Round(escalatedPrice)) + + displayParams := services.PricingDisplayParams{ + { + Key: models.ServiceItemParamNameContractYearName, + Value: contractYear.Name, + }, + { + Key: models.ServiceItemParamNamePriceRateOrFactor, + Value: FormatCents(unit.Cents(perUnitCents)), + }, + { + Key: models.ServiceItemParamNameIsPeak, + Value: FormatBool(isPeakPeriod), + }, + { + Key: models.ServiceItemParamNameEscalationCompounded, + Value: FormatEscalation(contractYear.EscalationCompounded), + }, + } + + return totalCost, displayParams, nil +} diff --git a/pkg/services/ghcrateengine/pricer_helpers_intl_test.go b/pkg/services/ghcrateengine/pricer_helpers_intl_test.go new file mode 100644 index 00000000000..19539e4c976 --- /dev/null +++ b/pkg/services/ghcrateengine/pricer_helpers_intl_test.go @@ -0,0 +1,46 @@ +package ghcrateengine + +import ( + "time" + + "github.com/transcom/mymove/pkg/models" + "github.com/transcom/mymove/pkg/services" + "github.com/transcom/mymove/pkg/testdatagen" +) + +func (suite *GHCRateEngineServiceSuite) TestPriceIntlPackUnpack() { + suite.Run("success with IHPK", func() { + suite.setupIntlPackServiceItem() + totalCost, displayParams, err := priceIntlPackUnpack(suite.AppContextForTest(), models.ReServiceCodeIHPK, testdatagen.DefaultContractCode, ihpkTestRequestedPickupDate, ihpkTestWeight, ihpkTestPerUnitCents.Int()) + suite.NoError(err) + suite.Equal(ihpkTestTotalCost, totalCost) + + expectedParams := services.PricingDisplayParams{ + {Key: models.ServiceItemParamNameContractYearName, Value: ihpkTestContractYearName}, + {Key: models.ServiceItemParamNameEscalationCompounded, Value: FormatEscalation(ihpkTestEscalationCompounded)}, + {Key: models.ServiceItemParamNameIsPeak, Value: FormatBool(ihpkTestIsPeakPeriod)}, + {Key: models.ServiceItemParamNamePriceRateOrFactor, Value: FormatCents(ihpkTestPerUnitCents)}, + } + suite.validatePricerCreatedParams(expectedParams, displayParams) + }) + + suite.Run("Invalid parameters to Price", func() { + suite.setupIntlPackServiceItem() + _, _, err := priceIntlPackUnpack(suite.AppContextForTest(), models.ReServiceCodeDLH, testdatagen.DefaultContractCode, ihpkTestRequestedPickupDate, ihpkTestWeight, ihpkTestPerUnitCents.Int()) + suite.Error(err) + suite.Contains(err.Error(), "unsupported pack/unpack code") + + _, _, err = priceIntlPackUnpack(suite.AppContextForTest(), models.ReServiceCodeIHPK, "", ihpkTestRequestedPickupDate, ihpkTestWeight, ihpkTestPerUnitCents.Int()) + suite.Error(err) + suite.Contains(err.Error(), "ContractCode is required") + + _, _, err = priceIntlPackUnpack(suite.AppContextForTest(), models.ReServiceCodeIHPK, testdatagen.DefaultContractCode, time.Time{}, ihpkTestWeight, ihpkTestPerUnitCents.Int()) + suite.Error(err) + suite.Contains(err.Error(), "ReferenceDate is required") + + _, _, err = priceIntlPackUnpack(suite.AppContextForTest(), models.ReServiceCodeIHPK, testdatagen.DefaultContractCode, ihpkTestRequestedPickupDate, ihpkTestWeight, 0) + suite.Error(err) + suite.Contains(err.Error(), "PerUnitCents is required") + }) + +} diff --git a/pkg/services/ghcrateengine/pricer_helpers_test.go b/pkg/services/ghcrateengine/pricer_helpers_test.go index be3648927e2..06b9ec30044 100644 --- a/pkg/services/ghcrateengine/pricer_helpers_test.go +++ b/pkg/services/ghcrateengine/pricer_helpers_test.go @@ -529,7 +529,7 @@ func (suite *GHCRateEngineServiceSuite) Test_createPricerGeneratedParams() { _, err := createPricerGeneratedParams(suite.AppContextForTest(), subtestData.paymentServiceItem.ID, invalidParam) suite.Error(err) - suite.Contains(err.Error(), "Service item param key is not a pricer param") + suite.Contains(err.Error(), "service item param key is not a pricer param") }) suite.Run("errors if no PricingParms passed from the Pricer", func() { diff --git a/pkg/services/ghcrateengine/pricer_query_helpers.go b/pkg/services/ghcrateengine/pricer_query_helpers.go index 5fc88dd7d5e..84cde4fc64c 100644 --- a/pkg/services/ghcrateengine/pricer_query_helpers.go +++ b/pkg/services/ghcrateengine/pricer_query_helpers.go @@ -103,6 +103,16 @@ func fetchContractsByContractId(appCtx appcontext.AppContext, contractID uuid.UU return contracts, nil } +func fetchContractByContractCode(appCtx appcontext.AppContext, contractCode string) (models.ReContract, error) { + var contract models.ReContract + err := appCtx.DB().Where("code = $1", contractCode).First(&contract) + if err != nil { + return models.ReContract{}, err + } + + return contract, nil +} + func fetchShipmentTypePrice(appCtx appcontext.AppContext, contractCode string, serviceCode models.ReServiceCode, market models.Market) (models.ReShipmentTypePrice, error) { var shipmentTypePrice models.ReShipmentTypePrice err := appCtx.DB().Q(). diff --git a/pkg/services/ghcrateengine/service_item_pricer.go b/pkg/services/ghcrateengine/service_item_pricer.go index 81ad0a42cf5..a673f832b63 100644 --- a/pkg/services/ghcrateengine/service_item_pricer.go +++ b/pkg/services/ghcrateengine/service_item_pricer.go @@ -36,7 +36,6 @@ func (p serviceItemPricer) PriceServiceItem(appCtx appcontext.AppContext, item m // createPricerGeneratedParams will throw an error if pricingParams is an empty slice // currently our pricers are returning empty slices for pricingParams // once all pricers have been updated to return pricingParams - // TODO: this conditional logic should be removed var displayParams models.PaymentServiceItemParams if len(pricingParams) > 0 { displayParams, err = createPricerGeneratedParams(appCtx, item.ID, pricingParams) @@ -94,6 +93,16 @@ func PricerForServiceItem(serviceCode models.ReServiceCode) (services.ParamsPric return NewDomesticOriginSITPickupPricer(), nil case models.ReServiceCodeDDDSIT: return NewDomesticDestinationSITDeliveryPricer(), nil + case models.ReServiceCodeISLH: + return NewIntlShippingAndLinehaulPricer(), nil + case models.ReServiceCodeIHPK: + return NewIntlHHGPackPricer(), nil + case models.ReServiceCodeIHUPK: + return NewIntlHHGUnpackPricer(), nil + case models.ReServiceCodePOEFSC: + return NewPortFuelSurchargePricer(), nil + case models.ReServiceCodePODFSC: + return NewPortFuelSurchargePricer(), nil default: // TODO: We may want a different error type here after all pricers have been implemented return nil, apperror.NewNotImplementedError(fmt.Sprintf("pricer not found for code %s", serviceCode)) diff --git a/pkg/services/ghcrateengine/shared.go b/pkg/services/ghcrateengine/shared.go index 3f89a29cb40..171d8668bb1 100644 --- a/pkg/services/ghcrateengine/shared.go +++ b/pkg/services/ghcrateengine/shared.go @@ -9,6 +9,9 @@ import ( // minDomesticWeight is the minimum weight used in domestic calculations (weights below this are upgraded to the min) const minDomesticWeight = unit.Pound(500) +// minIntlWeightHHG is the minimum weight used in intl calculations (weights below this are upgraded to the min) +const minIntlWeightHHG = unit.Pound(500) + // dateInYear represents a specific date in a year (without caring what year it is) type dateInYear struct { month time.Month diff --git a/pkg/services/mocks/IntlHHGPackPricer.go b/pkg/services/mocks/IntlHHGPackPricer.go new file mode 100644 index 00000000000..a12bed589ec --- /dev/null +++ b/pkg/services/mocks/IntlHHGPackPricer.go @@ -0,0 +1,109 @@ +// Code generated by mockery. DO NOT EDIT. + +package mocks + +import ( + mock "github.com/stretchr/testify/mock" + appcontext "github.com/transcom/mymove/pkg/appcontext" + + models "github.com/transcom/mymove/pkg/models" + + services "github.com/transcom/mymove/pkg/services" + + time "time" + + unit "github.com/transcom/mymove/pkg/unit" +) + +// IntlHHGPackPricer is an autogenerated mock type for the IntlHHGPackPricer type +type IntlHHGPackPricer struct { + mock.Mock +} + +// Price provides a mock function with given fields: appCtx, contractCode, requestedPickupDate, weight, perUnitCents +func (_m *IntlHHGPackPricer) Price(appCtx appcontext.AppContext, contractCode string, requestedPickupDate time.Time, weight unit.Pound, perUnitCents int) (unit.Cents, services.PricingDisplayParams, error) { + ret := _m.Called(appCtx, contractCode, requestedPickupDate, weight, perUnitCents) + + if len(ret) == 0 { + panic("no return value specified for Price") + } + + var r0 unit.Cents + var r1 services.PricingDisplayParams + var r2 error + if rf, ok := ret.Get(0).(func(appcontext.AppContext, string, time.Time, unit.Pound, int) (unit.Cents, services.PricingDisplayParams, error)); ok { + return rf(appCtx, contractCode, requestedPickupDate, weight, perUnitCents) + } + if rf, ok := ret.Get(0).(func(appcontext.AppContext, string, time.Time, unit.Pound, int) unit.Cents); ok { + r0 = rf(appCtx, contractCode, requestedPickupDate, weight, perUnitCents) + } else { + r0 = ret.Get(0).(unit.Cents) + } + + if rf, ok := ret.Get(1).(func(appcontext.AppContext, string, time.Time, unit.Pound, int) services.PricingDisplayParams); ok { + r1 = rf(appCtx, contractCode, requestedPickupDate, weight, perUnitCents) + } else { + if ret.Get(1) != nil { + r1 = ret.Get(1).(services.PricingDisplayParams) + } + } + + if rf, ok := ret.Get(2).(func(appcontext.AppContext, string, time.Time, unit.Pound, int) error); ok { + r2 = rf(appCtx, contractCode, requestedPickupDate, weight, perUnitCents) + } else { + r2 = ret.Error(2) + } + + return r0, r1, r2 +} + +// PriceUsingParams provides a mock function with given fields: appCtx, params +func (_m *IntlHHGPackPricer) PriceUsingParams(appCtx appcontext.AppContext, params models.PaymentServiceItemParams) (unit.Cents, services.PricingDisplayParams, error) { + ret := _m.Called(appCtx, params) + + if len(ret) == 0 { + panic("no return value specified for PriceUsingParams") + } + + var r0 unit.Cents + var r1 services.PricingDisplayParams + var r2 error + if rf, ok := ret.Get(0).(func(appcontext.AppContext, models.PaymentServiceItemParams) (unit.Cents, services.PricingDisplayParams, error)); ok { + return rf(appCtx, params) + } + if rf, ok := ret.Get(0).(func(appcontext.AppContext, models.PaymentServiceItemParams) unit.Cents); ok { + r0 = rf(appCtx, params) + } else { + r0 = ret.Get(0).(unit.Cents) + } + + if rf, ok := ret.Get(1).(func(appcontext.AppContext, models.PaymentServiceItemParams) services.PricingDisplayParams); ok { + r1 = rf(appCtx, params) + } else { + if ret.Get(1) != nil { + r1 = ret.Get(1).(services.PricingDisplayParams) + } + } + + if rf, ok := ret.Get(2).(func(appcontext.AppContext, models.PaymentServiceItemParams) error); ok { + r2 = rf(appCtx, params) + } else { + r2 = ret.Error(2) + } + + return r0, r1, r2 +} + +// NewIntlHHGPackPricer creates a new instance of IntlHHGPackPricer. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +// The first argument is typically a *testing.T value. +func NewIntlHHGPackPricer(t interface { + mock.TestingT + Cleanup(func()) +}) *IntlHHGPackPricer { + mock := &IntlHHGPackPricer{} + mock.Mock.Test(t) + + t.Cleanup(func() { mock.AssertExpectations(t) }) + + return mock +} diff --git a/pkg/services/mocks/IntlHHGUnpackPricer.go b/pkg/services/mocks/IntlHHGUnpackPricer.go new file mode 100644 index 00000000000..d06f97791d5 --- /dev/null +++ b/pkg/services/mocks/IntlHHGUnpackPricer.go @@ -0,0 +1,109 @@ +// Code generated by mockery. DO NOT EDIT. + +package mocks + +import ( + mock "github.com/stretchr/testify/mock" + appcontext "github.com/transcom/mymove/pkg/appcontext" + + models "github.com/transcom/mymove/pkg/models" + + services "github.com/transcom/mymove/pkg/services" + + time "time" + + unit "github.com/transcom/mymove/pkg/unit" +) + +// IntlHHGUnpackPricer is an autogenerated mock type for the IntlHHGUnpackPricer type +type IntlHHGUnpackPricer struct { + mock.Mock +} + +// Price provides a mock function with given fields: appCtx, contractCode, requestedPickupDate, weight, perUnitCents +func (_m *IntlHHGUnpackPricer) Price(appCtx appcontext.AppContext, contractCode string, requestedPickupDate time.Time, weight unit.Pound, perUnitCents int) (unit.Cents, services.PricingDisplayParams, error) { + ret := _m.Called(appCtx, contractCode, requestedPickupDate, weight, perUnitCents) + + if len(ret) == 0 { + panic("no return value specified for Price") + } + + var r0 unit.Cents + var r1 services.PricingDisplayParams + var r2 error + if rf, ok := ret.Get(0).(func(appcontext.AppContext, string, time.Time, unit.Pound, int) (unit.Cents, services.PricingDisplayParams, error)); ok { + return rf(appCtx, contractCode, requestedPickupDate, weight, perUnitCents) + } + if rf, ok := ret.Get(0).(func(appcontext.AppContext, string, time.Time, unit.Pound, int) unit.Cents); ok { + r0 = rf(appCtx, contractCode, requestedPickupDate, weight, perUnitCents) + } else { + r0 = ret.Get(0).(unit.Cents) + } + + if rf, ok := ret.Get(1).(func(appcontext.AppContext, string, time.Time, unit.Pound, int) services.PricingDisplayParams); ok { + r1 = rf(appCtx, contractCode, requestedPickupDate, weight, perUnitCents) + } else { + if ret.Get(1) != nil { + r1 = ret.Get(1).(services.PricingDisplayParams) + } + } + + if rf, ok := ret.Get(2).(func(appcontext.AppContext, string, time.Time, unit.Pound, int) error); ok { + r2 = rf(appCtx, contractCode, requestedPickupDate, weight, perUnitCents) + } else { + r2 = ret.Error(2) + } + + return r0, r1, r2 +} + +// PriceUsingParams provides a mock function with given fields: appCtx, params +func (_m *IntlHHGUnpackPricer) PriceUsingParams(appCtx appcontext.AppContext, params models.PaymentServiceItemParams) (unit.Cents, services.PricingDisplayParams, error) { + ret := _m.Called(appCtx, params) + + if len(ret) == 0 { + panic("no return value specified for PriceUsingParams") + } + + var r0 unit.Cents + var r1 services.PricingDisplayParams + var r2 error + if rf, ok := ret.Get(0).(func(appcontext.AppContext, models.PaymentServiceItemParams) (unit.Cents, services.PricingDisplayParams, error)); ok { + return rf(appCtx, params) + } + if rf, ok := ret.Get(0).(func(appcontext.AppContext, models.PaymentServiceItemParams) unit.Cents); ok { + r0 = rf(appCtx, params) + } else { + r0 = ret.Get(0).(unit.Cents) + } + + if rf, ok := ret.Get(1).(func(appcontext.AppContext, models.PaymentServiceItemParams) services.PricingDisplayParams); ok { + r1 = rf(appCtx, params) + } else { + if ret.Get(1) != nil { + r1 = ret.Get(1).(services.PricingDisplayParams) + } + } + + if rf, ok := ret.Get(2).(func(appcontext.AppContext, models.PaymentServiceItemParams) error); ok { + r2 = rf(appCtx, params) + } else { + r2 = ret.Error(2) + } + + return r0, r1, r2 +} + +// NewIntlHHGUnpackPricer creates a new instance of IntlHHGUnpackPricer. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +// The first argument is typically a *testing.T value. +func NewIntlHHGUnpackPricer(t interface { + mock.TestingT + Cleanup(func()) +}) *IntlHHGUnpackPricer { + mock := &IntlHHGUnpackPricer{} + mock.Mock.Test(t) + + t.Cleanup(func() { mock.AssertExpectations(t) }) + + return mock +} diff --git a/pkg/services/mocks/IntlPortFuelSurchargePricer.go b/pkg/services/mocks/IntlPortFuelSurchargePricer.go new file mode 100644 index 00000000000..1780857c419 --- /dev/null +++ b/pkg/services/mocks/IntlPortFuelSurchargePricer.go @@ -0,0 +1,109 @@ +// Code generated by mockery. DO NOT EDIT. + +package mocks + +import ( + mock "github.com/stretchr/testify/mock" + appcontext "github.com/transcom/mymove/pkg/appcontext" + + models "github.com/transcom/mymove/pkg/models" + + services "github.com/transcom/mymove/pkg/services" + + time "time" + + unit "github.com/transcom/mymove/pkg/unit" +) + +// IntlPortFuelSurchargePricer is an autogenerated mock type for the IntlPortFuelSurchargePricer type +type IntlPortFuelSurchargePricer struct { + mock.Mock +} + +// Price provides a mock function with given fields: appCtx, actualPickupDate, distance, weight, fscWeightBasedDistanceMultiplier, eiaFuelPrice +func (_m *IntlPortFuelSurchargePricer) Price(appCtx appcontext.AppContext, actualPickupDate time.Time, distance unit.Miles, weight unit.Pound, fscWeightBasedDistanceMultiplier float64, eiaFuelPrice unit.Millicents) (unit.Cents, services.PricingDisplayParams, error) { + ret := _m.Called(appCtx, actualPickupDate, distance, weight, fscWeightBasedDistanceMultiplier, eiaFuelPrice) + + if len(ret) == 0 { + panic("no return value specified for Price") + } + + var r0 unit.Cents + var r1 services.PricingDisplayParams + var r2 error + if rf, ok := ret.Get(0).(func(appcontext.AppContext, time.Time, unit.Miles, unit.Pound, float64, unit.Millicents) (unit.Cents, services.PricingDisplayParams, error)); ok { + return rf(appCtx, actualPickupDate, distance, weight, fscWeightBasedDistanceMultiplier, eiaFuelPrice) + } + if rf, ok := ret.Get(0).(func(appcontext.AppContext, time.Time, unit.Miles, unit.Pound, float64, unit.Millicents) unit.Cents); ok { + r0 = rf(appCtx, actualPickupDate, distance, weight, fscWeightBasedDistanceMultiplier, eiaFuelPrice) + } else { + r0 = ret.Get(0).(unit.Cents) + } + + if rf, ok := ret.Get(1).(func(appcontext.AppContext, time.Time, unit.Miles, unit.Pound, float64, unit.Millicents) services.PricingDisplayParams); ok { + r1 = rf(appCtx, actualPickupDate, distance, weight, fscWeightBasedDistanceMultiplier, eiaFuelPrice) + } else { + if ret.Get(1) != nil { + r1 = ret.Get(1).(services.PricingDisplayParams) + } + } + + if rf, ok := ret.Get(2).(func(appcontext.AppContext, time.Time, unit.Miles, unit.Pound, float64, unit.Millicents) error); ok { + r2 = rf(appCtx, actualPickupDate, distance, weight, fscWeightBasedDistanceMultiplier, eiaFuelPrice) + } else { + r2 = ret.Error(2) + } + + return r0, r1, r2 +} + +// PriceUsingParams provides a mock function with given fields: appCtx, params +func (_m *IntlPortFuelSurchargePricer) PriceUsingParams(appCtx appcontext.AppContext, params models.PaymentServiceItemParams) (unit.Cents, services.PricingDisplayParams, error) { + ret := _m.Called(appCtx, params) + + if len(ret) == 0 { + panic("no return value specified for PriceUsingParams") + } + + var r0 unit.Cents + var r1 services.PricingDisplayParams + var r2 error + if rf, ok := ret.Get(0).(func(appcontext.AppContext, models.PaymentServiceItemParams) (unit.Cents, services.PricingDisplayParams, error)); ok { + return rf(appCtx, params) + } + if rf, ok := ret.Get(0).(func(appcontext.AppContext, models.PaymentServiceItemParams) unit.Cents); ok { + r0 = rf(appCtx, params) + } else { + r0 = ret.Get(0).(unit.Cents) + } + + if rf, ok := ret.Get(1).(func(appcontext.AppContext, models.PaymentServiceItemParams) services.PricingDisplayParams); ok { + r1 = rf(appCtx, params) + } else { + if ret.Get(1) != nil { + r1 = ret.Get(1).(services.PricingDisplayParams) + } + } + + if rf, ok := ret.Get(2).(func(appcontext.AppContext, models.PaymentServiceItemParams) error); ok { + r2 = rf(appCtx, params) + } else { + r2 = ret.Error(2) + } + + return r0, r1, r2 +} + +// NewIntlPortFuelSurchargePricer creates a new instance of IntlPortFuelSurchargePricer. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +// The first argument is typically a *testing.T value. +func NewIntlPortFuelSurchargePricer(t interface { + mock.TestingT + Cleanup(func()) +}) *IntlPortFuelSurchargePricer { + mock := &IntlPortFuelSurchargePricer{} + mock.Mock.Test(t) + + t.Cleanup(func() { mock.AssertExpectations(t) }) + + return mock +} diff --git a/pkg/services/mocks/IntlShippingAndLinehaulPricer.go b/pkg/services/mocks/IntlShippingAndLinehaulPricer.go new file mode 100644 index 00000000000..c6e4ca2b557 --- /dev/null +++ b/pkg/services/mocks/IntlShippingAndLinehaulPricer.go @@ -0,0 +1,109 @@ +// Code generated by mockery. DO NOT EDIT. + +package mocks + +import ( + mock "github.com/stretchr/testify/mock" + appcontext "github.com/transcom/mymove/pkg/appcontext" + + models "github.com/transcom/mymove/pkg/models" + + services "github.com/transcom/mymove/pkg/services" + + time "time" + + unit "github.com/transcom/mymove/pkg/unit" +) + +// IntlShippingAndLinehaulPricer is an autogenerated mock type for the IntlShippingAndLinehaulPricer type +type IntlShippingAndLinehaulPricer struct { + mock.Mock +} + +// Price provides a mock function with given fields: appCtx, contractCode, requestedPickupDate, distance, weight, perUnitCents +func (_m *IntlShippingAndLinehaulPricer) Price(appCtx appcontext.AppContext, contractCode string, requestedPickupDate time.Time, distance unit.Miles, weight unit.Pound, perUnitCents int) (unit.Cents, services.PricingDisplayParams, error) { + ret := _m.Called(appCtx, contractCode, requestedPickupDate, distance, weight, perUnitCents) + + if len(ret) == 0 { + panic("no return value specified for Price") + } + + var r0 unit.Cents + var r1 services.PricingDisplayParams + var r2 error + if rf, ok := ret.Get(0).(func(appcontext.AppContext, string, time.Time, unit.Miles, unit.Pound, int) (unit.Cents, services.PricingDisplayParams, error)); ok { + return rf(appCtx, contractCode, requestedPickupDate, distance, weight, perUnitCents) + } + if rf, ok := ret.Get(0).(func(appcontext.AppContext, string, time.Time, unit.Miles, unit.Pound, int) unit.Cents); ok { + r0 = rf(appCtx, contractCode, requestedPickupDate, distance, weight, perUnitCents) + } else { + r0 = ret.Get(0).(unit.Cents) + } + + if rf, ok := ret.Get(1).(func(appcontext.AppContext, string, time.Time, unit.Miles, unit.Pound, int) services.PricingDisplayParams); ok { + r1 = rf(appCtx, contractCode, requestedPickupDate, distance, weight, perUnitCents) + } else { + if ret.Get(1) != nil { + r1 = ret.Get(1).(services.PricingDisplayParams) + } + } + + if rf, ok := ret.Get(2).(func(appcontext.AppContext, string, time.Time, unit.Miles, unit.Pound, int) error); ok { + r2 = rf(appCtx, contractCode, requestedPickupDate, distance, weight, perUnitCents) + } else { + r2 = ret.Error(2) + } + + return r0, r1, r2 +} + +// PriceUsingParams provides a mock function with given fields: appCtx, params +func (_m *IntlShippingAndLinehaulPricer) PriceUsingParams(appCtx appcontext.AppContext, params models.PaymentServiceItemParams) (unit.Cents, services.PricingDisplayParams, error) { + ret := _m.Called(appCtx, params) + + if len(ret) == 0 { + panic("no return value specified for PriceUsingParams") + } + + var r0 unit.Cents + var r1 services.PricingDisplayParams + var r2 error + if rf, ok := ret.Get(0).(func(appcontext.AppContext, models.PaymentServiceItemParams) (unit.Cents, services.PricingDisplayParams, error)); ok { + return rf(appCtx, params) + } + if rf, ok := ret.Get(0).(func(appcontext.AppContext, models.PaymentServiceItemParams) unit.Cents); ok { + r0 = rf(appCtx, params) + } else { + r0 = ret.Get(0).(unit.Cents) + } + + if rf, ok := ret.Get(1).(func(appcontext.AppContext, models.PaymentServiceItemParams) services.PricingDisplayParams); ok { + r1 = rf(appCtx, params) + } else { + if ret.Get(1) != nil { + r1 = ret.Get(1).(services.PricingDisplayParams) + } + } + + if rf, ok := ret.Get(2).(func(appcontext.AppContext, models.PaymentServiceItemParams) error); ok { + r2 = rf(appCtx, params) + } else { + r2 = ret.Error(2) + } + + return r0, r1, r2 +} + +// NewIntlShippingAndLinehaulPricer creates a new instance of IntlShippingAndLinehaulPricer. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +// The first argument is typically a *testing.T value. +func NewIntlShippingAndLinehaulPricer(t interface { + mock.TestingT + Cleanup(func()) +}) *IntlShippingAndLinehaulPricer { + mock := &IntlShippingAndLinehaulPricer{} + mock.Mock.Test(t) + + t.Cleanup(func() { mock.AssertExpectations(t) }) + + return mock +} diff --git a/pkg/services/move_task_order/move_task_order_fetcher.go b/pkg/services/move_task_order/move_task_order_fetcher.go index b63f5960290..1d30aef5ceb 100644 --- a/pkg/services/move_task_order/move_task_order_fetcher.go +++ b/pkg/services/move_task_order/move_task_order_fetcher.go @@ -278,6 +278,18 @@ func (f moveTaskOrderFetcher) FetchMoveTaskOrder(appCtx appcontext.AppContext, s return &models.Move{}, apperror.NewQueryError("MobileHomeShipment", loadErrMH, "") } } + // we need to get the destination GBLOC associated with a shipment's destination address + // USMC always goes to the USMC GBLOC + if mto.MTOShipments[i].DestinationAddress != nil { + if *mto.Orders.ServiceMember.Affiliation == models.AffiliationMARINES { + mto.MTOShipments[i].DestinationAddress.DestinationGbloc = models.StringPointer("USMC") + } else { + mto.MTOShipments[i].DestinationAddress.DestinationGbloc, err = models.GetDestinationGblocForShipment(appCtx.DB(), mto.MTOShipments[i].ID) + if err != nil { + return &models.Move{}, apperror.NewQueryError("Error getting shipment GBLOC", err, "") + } + } + } filteredShipments = append(filteredShipments, mto.MTOShipments[i]) } mto.MTOShipments = filteredShipments diff --git a/pkg/services/move_task_order/move_task_order_fetcher_test.go b/pkg/services/move_task_order/move_task_order_fetcher_test.go index 9ba9f7a8ba2..a80be4aa524 100644 --- a/pkg/services/move_task_order/move_task_order_fetcher_test.go +++ b/pkg/services/move_task_order/move_task_order_fetcher_test.go @@ -344,6 +344,102 @@ func (suite *MoveTaskOrderServiceSuite) TestMoveTaskOrderFetcher() { } }) + suite.Run("Success with Prime available move, returns destination GBLOC in shipment dest address", func() { + zone2UUID, err := uuid.FromString("66768964-e0de-41f3-b9be-7ef32e4ae2b4") + suite.FatalNoError(err) + army := models.AffiliationARMY + postalCode := "99501" + // since we truncate the test db, we need to add the postal_code_to_gbloc value + factory.FetchOrBuildPostalCodeToGBLOC(suite.DB(), "99744", "JEAT") + + destinationAddress := factory.BuildAddress(suite.DB(), []factory.Customization{ + { + Model: models.Address{ + PostalCode: postalCode, + UsPostRegionCityID: &zone2UUID, + }, + }, + }, nil) + + move := factory.BuildAvailableToPrimeMove(suite.DB(), []factory.Customization{ + { + Model: models.ServiceMember{ + Affiliation: &army, + }, + }, + }, nil) + + factory.BuildMTOShipment(suite.DB(), []factory.Customization{ + { + Model: models.MTOShipment{ + MarketCode: models.MarketCodeInternational, + }, + }, + { + Model: move, + LinkOnly: true, + }, + { + Model: destinationAddress, + LinkOnly: true, + }, + }, nil) + searchParams := services.MoveTaskOrderFetcherParams{ + IncludeHidden: false, + Locator: move.Locator, + ExcludeExternalShipments: true, + } + + actualMTO, err := mtoFetcher.FetchMoveTaskOrder(suite.AppContextForTest(), &searchParams) + suite.NoError(err) + suite.NotNil(actualMTO) + + if suite.Len(actualMTO.MTOShipments, 1) { + suite.Equal(move.ID.String(), actualMTO.ID.String()) + // the shipment should have a destination GBLOC value + suite.NotNil(actualMTO.MTOShipments[0].DestinationAddress.DestinationGbloc) + } + }) + + suite.Run("Success with Prime available move, returns USMC destination GBLOC for USMC move", func() { + usmc := models.AffiliationMARINES + + destinationAddress := factory.BuildAddress(suite.DB(), nil, nil) + move := factory.BuildAvailableToPrimeMove(suite.DB(), []factory.Customization{ + { + Model: models.ServiceMember{ + Affiliation: &usmc, + }, + }, + }, nil) + + factory.BuildMTOShipment(suite.DB(), []factory.Customization{ + { + Model: move, + LinkOnly: true, + }, + { + Model: destinationAddress, + LinkOnly: true, + }, + }, nil) + searchParams := services.MoveTaskOrderFetcherParams{ + IncludeHidden: false, + Locator: move.Locator, + ExcludeExternalShipments: true, + } + + actualMTO, err := mtoFetcher.FetchMoveTaskOrder(suite.AppContextForTest(), &searchParams) + suite.NoError(err) + suite.NotNil(actualMTO) + + if suite.Len(actualMTO.MTOShipments, 1) { + suite.Equal(move.ID.String(), actualMTO.ID.String()) + suite.NotNil(actualMTO.MTOShipments[0].DestinationAddress.DestinationGbloc) + suite.Equal(*actualMTO.MTOShipments[0].DestinationAddress.DestinationGbloc, "USMC") + } + }) + suite.Run("Success with move that has only deleted shipments", func() { mtoWithAllShipmentsDeleted := factory.BuildMove(suite.DB(), nil, nil) factory.BuildMTOShipmentMinimal(suite.DB(), []factory.Customization{ diff --git a/pkg/services/payment_request/payment_request_creator.go b/pkg/services/payment_request/payment_request_creator.go index 0b301193287..63b1f0950a7 100644 --- a/pkg/services/payment_request/payment_request_creator.go +++ b/pkg/services/payment_request/payment_request_creator.go @@ -402,7 +402,6 @@ func (p *paymentRequestCreator) createPaymentServiceItem(appCtx appcontext.AppCo paymentServiceItem.PaymentRequestID = paymentRequest.ID paymentServiceItem.PaymentRequest = *paymentRequest paymentServiceItem.Status = models.PaymentServiceItemStatusRequested - // No pricing at this point, so skipping the PriceCents field. paymentServiceItem.RequestedAt = requestedAt verrs, err := appCtx.DB().ValidateAndCreate(&paymentServiceItem) diff --git a/playwright/tests/office/primesimulator/primeSimulatorFlows.spec.js b/playwright/tests/office/primesimulator/primeSimulatorFlows.spec.js index 23b2bfb628f..493423dfd2d 100644 --- a/playwright/tests/office/primesimulator/primeSimulatorFlows.spec.js +++ b/playwright/tests/office/primesimulator/primeSimulatorFlows.spec.js @@ -87,9 +87,10 @@ test.describe('Prime simulator user', () => { await page.locator('input[name="estimatedWeight"]').type('{backspace}7500'); await page.locator('input[name="actualWeight"]').type('{backspace}8000'); await page.locator('input[name="destinationAddress.streetAddress1"]').fill('142 E Barrel Hoop Circle'); - await page.locator('input[name="destinationAddress.city"]').fill('Joshua Tree'); - await page.locator('select[name="destinationAddress.state"]').selectOption({ label: 'CA' }); - await page.locator('input[name="destinationAddress.postalCode"]').fill('92252'); + const locationLookup = 'JOSHUA TREE, CA 92252 (SAN BERNARDINO)'; + await page.locator('input#destinationAddress-location-input').fill('92252'); + await expect(page.getByText(locationLookup, { exact: true })).toBeVisible(); + await page.keyboard.press('Enter'); await page.getByText('Save').click(); await expect(page.getByText('Successfully updated shipment')).toHaveCount(1); @@ -145,9 +146,10 @@ test.describe('Prime simulator user', () => { await page.locator('input[name="estimatedWeight"]').type('{backspace}7500'); await page.locator('input[name="actualWeight"]').type('{backspace}8000'); await page.locator('input[name="destinationAddress.streetAddress1"]').fill('142 E Barrel Hoop Circle'); - await page.locator('input[name="destinationAddress.city"]').fill('Joshua Tree'); - await page.locator('select[name="destinationAddress.state"]').selectOption({ label: 'CA' }); - await page.locator('input[name="destinationAddress.postalCode"]').fill('92252'); + const locationLookup = 'JOSHUA TREE, CA 92252 (SAN BERNARDINO)'; + await page.locator('input#destinationAddress-location-input').fill('92252'); + await expect(page.getByText(locationLookup, { exact: true })).toBeVisible(); + await page.keyboard.press('Enter'); await page.locator('select[name="destinationType"]').selectOption({ label: 'Home of record (HOR)' }); await page.getByText('Save').click(); diff --git a/src/components/Office/AddOrdersForm/AddOrdersForm.jsx b/src/components/Office/AddOrdersForm/AddOrdersForm.jsx index 07949b46c2e..ca0b173a684 100644 --- a/src/components/Office/AddOrdersForm/AddOrdersForm.jsx +++ b/src/components/Office/AddOrdersForm/AddOrdersForm.jsx @@ -23,7 +23,14 @@ import ConnectedFlashMessage from 'containers/FlashMessage/FlashMessage'; let originMeta; let newDutyMeta = ''; -const AddOrdersForm = ({ onSubmit, ordersTypeOptions, initialValues, onBack, isSafetyMoveSelected }) => { +const AddOrdersForm = ({ + onSubmit, + ordersTypeOptions, + initialValues, + onBack, + isSafetyMoveSelected, + isBluebarkMoveSelected, +}) => { const payGradeOptions = dropdownInputOptions(ORDERS_PAY_GRADE_OPTIONS); const [currentDutyLocation, setCurrentDutyLocation] = useState(''); const [newDutyLocation, setNewDutyLocation] = useState(''); @@ -122,7 +129,7 @@ const AddOrdersForm = ({ onSubmit, ordersTypeOptions, initialValues, onBack, isS name="ordersType" options={ordersTypeOptions} required - isDisabled={isSafetyMoveSelected} + isDisabled={isSafetyMoveSelected || isBluebarkMoveSelected} /> diff --git a/src/components/Office/AddOrdersForm/AddOrdersForm.test.jsx b/src/components/Office/AddOrdersForm/AddOrdersForm.test.jsx index f6c4f04e22f..611331d78a9 100644 --- a/src/components/Office/AddOrdersForm/AddOrdersForm.test.jsx +++ b/src/components/Office/AddOrdersForm/AddOrdersForm.test.jsx @@ -194,3 +194,23 @@ describe('AddOrdersForm - OCONUS and Accompanied Tour Test', () => { }); }); }); +describe('AddOrdersForm - Edge Cases and Additional Scenarios', () => { + it('disables orders type when safety move is selected', async () => { + render( + + + , + ); + + expect(screen.getByLabelText('Orders type')).toBeDisabled(); + }); + + it('disables orders type when bluebark move is selected', async () => { + render( + + + , + ); + expect(screen.getByLabelText('Orders type')).toBeDisabled(); + }); +}); diff --git a/src/components/Office/OrdersDetailForm/OrdersDetailForm.jsx b/src/components/Office/OrdersDetailForm/OrdersDetailForm.jsx index b24ff3ae670..26028b4ea69 100644 --- a/src/components/Office/OrdersDetailForm/OrdersDetailForm.jsx +++ b/src/components/Office/OrdersDetailForm/OrdersDetailForm.jsx @@ -8,6 +8,7 @@ import { CheckboxField, DropdownInput, DatePickerInput, DutyLocationInput } from import TextField from 'components/form/fields/TextField/TextField'; import MaskedTextField from 'components/form/fields/MaskedTextField/MaskedTextField'; import { DropdownArrayOf } from 'types/form'; +import { SPECIAL_ORDERS_TYPES } from 'constants/orders'; const OrdersDetailForm = ({ deptIndicatorOptions, @@ -82,12 +83,20 @@ const OrdersDetailForm = ({ { setFormOrdersType(e.target.value); setFieldValue('ordersType', e.target.value); }} - isDisabled={formIsDisabled || formOrdersType === 'SAFETY'} + isDisabled={ + formIsDisabled || + formOrdersType === SPECIAL_ORDERS_TYPES.SAFETY_NON_LABEL || + formOrdersType === SPECIAL_ORDERS_TYPES.BLUEBARK + } /> {showOrdersTypeDetail && ( { ordersType: 'SAFETY', }); + // correct labels are visible + expect(await screen.findByLabelText('Orders type')).toBeDisabled(); + }); + it('has orders type dropdown disabled if bluebark move', async () => { + renderOrdersDetailForm({ + showDepartmentIndicator: false, + showOrdersNumber: false, + showOrdersTypeDetail: false, + showHHGTac: false, + showHHGSac: false, + showNTSTac: false, + showNTSSac: false, + showOrdersAcknowledgement: false, + ordersType: 'BLUEBARK', + }); + // correct labels are visible expect(await screen.findByLabelText('Orders type')).toBeDisabled(); }); diff --git a/src/components/PrimeUI/CreatePaymentRequestForm/CreatePaymentRequestForm.jsx b/src/components/PrimeUI/CreatePaymentRequestForm/CreatePaymentRequestForm.jsx index 3a3edafb556..d5b3f283829 100644 --- a/src/components/PrimeUI/CreatePaymentRequestForm/CreatePaymentRequestForm.jsx +++ b/src/components/PrimeUI/CreatePaymentRequestForm/CreatePaymentRequestForm.jsx @@ -18,6 +18,7 @@ import ServiceItem from 'components/PrimeUI/ServiceItem/ServiceItem'; import Shipment from 'components/PrimeUI/Shipment/Shipment'; import { DatePickerInput } from 'components/form/fields'; import TextField from 'components/form/fields/TextField/TextField'; +import { SERVICE_ITEM_CODES } from 'constants/serviceItems'; const CreatePaymentRequestForm = ({ initialValues, @@ -128,22 +129,27 @@ const CreatePaymentRequestForm = ({ /> )} - {(mtoServiceItem.reServiceCode === 'DLH' || - mtoServiceItem.reServiceCode === 'DSH' || - mtoServiceItem.reServiceCode === 'FSC' || - mtoServiceItem.reServiceCode === 'DUPK' || - mtoServiceItem.reServiceCode === 'DNPK' || - mtoServiceItem.reServiceCode === 'DOFSIT' || - mtoServiceItem.reServiceCode === 'DOPSIT' || - mtoServiceItem.reServiceCode === 'DOSHUT' || - mtoServiceItem.reServiceCode === 'DDFSIT' || - mtoServiceItem.reServiceCode === 'DDDSIT' || - mtoServiceItem.reServiceCode === 'DOP' || - mtoServiceItem.reServiceCode === 'DDP' || - mtoServiceItem.reServiceCode === 'DPK' || - mtoServiceItem.reServiceCode === 'DDSFSC' || - mtoServiceItem.reServiceCode === 'DOSFSC' || - mtoServiceItem.reServiceCode === 'DDSHUT') && ( + {(mtoServiceItem.reServiceCode === SERVICE_ITEM_CODES.DLH || + mtoServiceItem.reServiceCode === SERVICE_ITEM_CODES.DSH || + mtoServiceItem.reServiceCode === SERVICE_ITEM_CODES.FSC || + mtoServiceItem.reServiceCode === SERVICE_ITEM_CODES.DUPK || + mtoServiceItem.reServiceCode === SERVICE_ITEM_CODES.DNPK || + mtoServiceItem.reServiceCode === SERVICE_ITEM_CODES.DOFSIT || + mtoServiceItem.reServiceCode === SERVICE_ITEM_CODES.DOPSIT || + mtoServiceItem.reServiceCode === SERVICE_ITEM_CODES.DOSHUT || + mtoServiceItem.reServiceCode === SERVICE_ITEM_CODES.DDFSIT || + mtoServiceItem.reServiceCode === SERVICE_ITEM_CODES.DDDSIT || + mtoServiceItem.reServiceCode === SERVICE_ITEM_CODES.DOP || + mtoServiceItem.reServiceCode === SERVICE_ITEM_CODES.DDP || + mtoServiceItem.reServiceCode === SERVICE_ITEM_CODES.DPK || + mtoServiceItem.reServiceCode === SERVICE_ITEM_CODES.DDSFSC || + mtoServiceItem.reServiceCode === SERVICE_ITEM_CODES.DOSFSC || + mtoServiceItem.reServiceCode === SERVICE_ITEM_CODES.DDSHUT || + mtoServiceItem.reServiceCode === SERVICE_ITEM_CODES.IHPK || + mtoServiceItem.reServiceCode === SERVICE_ITEM_CODES.IHUPK || + mtoServiceItem.reServiceCode === SERVICE_ITEM_CODES.ISLH || + mtoServiceItem.reServiceCode === SERVICE_ITEM_CODES.POEFSC || + mtoServiceItem.reServiceCode === SERVICE_ITEM_CODES.PODFSC) && ( { { id: '6', reServiceCode: 'DDFSIT', reServiceName: 'Domestic destination 1st day SIT' }, ], 2: [{ id: '5', reServiceCode: 'FSC' }], + 3: [ + { id: '7', reServiceCode: 'IHPK' }, + { id: '8', reServiceCode: 'IHUPK' }, + { id: '8', reServiceCode: 'ISLH' }, + { id: '8', reServiceCode: 'POEFSC' }, + ], }; it('renders the form', async () => { diff --git a/src/components/PrimeUI/CreateShipmentServiceItemForm/OriginSITServiceItemForm.jsx b/src/components/PrimeUI/CreateShipmentServiceItemForm/OriginSITServiceItemForm.jsx index 5135f3da031..dc86b6ad5e1 100644 --- a/src/components/PrimeUI/CreateShipmentServiceItemForm/OriginSITServiceItemForm.jsx +++ b/src/components/PrimeUI/CreateShipmentServiceItemForm/OriginSITServiceItemForm.jsx @@ -2,6 +2,7 @@ import * as Yup from 'yup'; import { Formik } from 'formik'; import { Button } from '@trussworks/react-uswds'; import React from 'react'; +import { useNavigate, useParams, generatePath } from 'react-router-dom'; import PropTypes from 'prop-types'; import { requiredAddressSchema, ZIP_CODE_REGEX } from 'utils/validation'; @@ -13,6 +14,7 @@ import MaskedTextField from 'components/form/fields/MaskedTextField/MaskedTextFi import { DatePickerInput } from 'components/form/fields'; import { AddressFields } from 'components/form/AddressFields/AddressFields'; import { ShipmentShape } from 'types/shipment'; +import { primeSimulatorRoutes } from 'constants/routes'; const originSITValidationSchema = Yup.object().shape({ reason: Yup.string().required('Required'), @@ -37,9 +39,11 @@ const OriginSITServiceItemForm = ({ shipment, submission }) => { sitHHGActualOrigin: { streetAddress1: '', streetAddress2: '', + streetAddress3: '', city: '', state: '', postalCode: '', + county: '', }, }; @@ -54,26 +58,46 @@ const OriginSITServiceItemForm = ({ shipment, submission }) => { submission({ body }); }; + const { moveCodeOrID } = useParams(); + const navigate = useNavigate(); + const handleCancel = () => { + navigate(generatePath(primeSimulatorRoutes.VIEW_MOVE_PATH, { moveCodeOrID })); + }; + return ( -
- - - - - - - - - - - + {({ isValid, isSubmitting, handleSubmit, ...formikProps }) => { + return ( +
+ + + + + + + + + + + + + ); + }}
); }; diff --git a/src/constants/orders.js b/src/constants/orders.js index eb74a318b38..7eeb4ab9e73 100644 --- a/src/constants/orders.js +++ b/src/constants/orders.js @@ -12,6 +12,7 @@ export const SPECIAL_ORDERS_TYPES = { WOUNDED_WARRIOR: 'Wounded Warrior', BLUEBARK: 'BLUEBARK', SAFETY: 'Safety', + SAFETY_NON_LABEL: 'SAFETY', }; export const CHECK_SPECIAL_ORDERS_TYPES = (ordersType) => { diff --git a/src/constants/serviceItems.js b/src/constants/serviceItems.js index 7a1a0f76502..01dad1c3eb0 100644 --- a/src/constants/serviceItems.js +++ b/src/constants/serviceItems.js @@ -147,6 +147,9 @@ const SERVICE_ITEM_CODES = { DDSFSC: 'DDSFSC', POEFSC: 'POEFSC', PODFSC: 'PODFSC', + IHPK: 'IHPK', + IHUPK: 'IHUPK', + ISLH: 'ISLH', }; const SERVICE_ITEMS_ALLOWED_WEIGHT_BILLED_PARAM = [ diff --git a/src/pages/Office/CustomerOnboarding/CreateCustomerForm.jsx b/src/pages/Office/CustomerOnboarding/CreateCustomerForm.jsx index 63ab89641e1..6b4bd9830cb 100644 --- a/src/pages/Office/CustomerOnboarding/CreateCustomerForm.jsx +++ b/src/pages/Office/CustomerOnboarding/CreateCustomerForm.jsx @@ -36,6 +36,7 @@ export const CreateCustomerForm = ({ userPrivileges, setFlashMessage, setCanAddO const [showEmplid, setShowEmplid] = useState(false); const [isSafetyMove, setIsSafetyMove] = useState(false); const [showSafetyMoveHint, setShowSafetyMoveHint] = useState(false); + const [isBluebarkMove, setIsBluebarkMove] = useState(false); const navigate = useNavigate(); const branchOptions = dropdownInputOptions(SERVICE_MEMBER_AGENCY_LABELS); @@ -96,6 +97,7 @@ export const CreateCustomerForm = ({ userPrivileges, setFlashMessage, setCanAddO create_okta_account: '', cac_user: '', is_safety_move: 'false', + is_bluebark: 'false', }; const handleBack = () => { @@ -140,7 +142,7 @@ export const CreateCustomerForm = ({ userPrivileges, setFlashMessage, setCanAddO generatePath(servicesCounselingRoutes.BASE_CUSTOMERS_ORDERS_ADD_PATH, { customerId, }), - { state: { isSafetyMoveSelected: isSafetyMove } }, + { state: { isSafetyMoveSelected: isSafetyMove, isBluebarkMoveSelected: isBluebarkMove } }, ); }) .catch((e) => { @@ -227,6 +229,7 @@ export const CreateCustomerForm = ({ userPrivileges, setFlashMessage, setCanAddO create_okta_account: '', cac_user: 'true', is_safety_move: 'true', + is_bluebark: 'false', }); } else if (value === 'false') { setIsSafetyMove(false); @@ -275,11 +278,34 @@ export const CreateCustomerForm = ({ userPrivileges, setFlashMessage, setCanAddO }); } }; + const handleBluebarkChange = (e) => { + if (e.target.value === 'true') { + setIsBluebarkMove(true); + setIsSafetyMove(false); + setShowEmplid(false); + setValues({ + ...values, + affiliation: e.target.value, + create_okta_account: 'false', + cac_user: 'false', + is_bluebark: 'true', + is_safety_move: 'false', + }); + } else { + setIsBluebarkMove(false); + setShowEmplid(false); + setValues({ + ...values, + affiliation: e.target.value, + is_bluebark: 'false', + }); + } + }; return (

Create Customer Profile

-

Customer Affiliation

+

Special Moves

{isSafetyPrivileged && (
Is this a Safety move? @@ -307,10 +333,39 @@ export const CreateCustomerForm = ({ userPrivileges, setFlashMessage, setCanAddO
)} +
+ Is this a Bluebark move? +
+ + +
+
+
+ +

Customer Affiliation

{ handleChange(e); @@ -410,8 +465,8 @@ export const CreateCustomerForm = ({ userPrivileges, setFlashMessage, setCanAddO required />
- {values.is_safety_move !== 'true' && ( - + {values.is_safety_move !== 'true' && values.is_bluebark !== 'true' && ( +

Okta Account

Do you want to create an Okta account for this customer? @@ -436,8 +491,8 @@ export const CreateCustomerForm = ({ userPrivileges, setFlashMessage, setCanAddO
)} - {values.is_safety_move !== 'true' && ( - + {values.is_safety_move !== 'true' && values.is_bluebark !== 'true' && ( +

Non-CAC Users

Does the customer have a CAC? diff --git a/src/pages/Office/CustomerOnboarding/CreateCustomerForm.test.jsx b/src/pages/Office/CustomerOnboarding/CreateCustomerForm.test.jsx index 24f15c6e0fa..b49f6aea696 100644 --- a/src/pages/Office/CustomerOnboarding/CreateCustomerForm.test.jsx +++ b/src/pages/Office/CustomerOnboarding/CreateCustomerForm.test.jsx @@ -120,6 +120,7 @@ const fakePayload = { create_okta_account: 'true', cac_user: 'false', is_safety_move: false, + is_bluebark: 'false', }; const fakeResponse = { @@ -207,6 +208,12 @@ const safetyPayload = { create_okta_account: 'true', cac_user: 'false', is_safety_move: 'true', + is_bluebark: 'false', +}; + +const bluebarkPayload = { + is_safety_move: 'false', + is_bluebark: 'true', }; const mockUserPrivileges = [ @@ -327,6 +334,7 @@ describe('CreateCustomerForm', () => { expect(mockNavigate).toHaveBeenCalledWith(ordersPath, { state: { isSafetyMoveSelected: false, + isBluebarkMoveSelected: false, }, }); }); @@ -422,6 +430,7 @@ describe('CreateCustomerForm', () => { expect(mockNavigate).toHaveBeenCalledWith(ordersPath, { state: { isSafetyMoveSelected: false, + isBluebarkMoveSelected: false, }, }); }); @@ -519,6 +528,7 @@ describe('CreateCustomerForm', () => { expect(saveBtn).toBeInTheDocument(); await userEvent.type(getByTestId('is-safety-move-yes'), safetyPayload.is_safety_move); + await userEvent.type(getByTestId('is-bluebark-no'), safetyPayload.is_bluebark); await user.selectOptions(getByLabelText('Branch of service'), [safetyPayload.affiliation]); await user.type(getByLabelText('First name'), safetyPayload.first_name); @@ -565,6 +575,7 @@ describe('CreateCustomerForm', () => { expect(mockNavigate).toHaveBeenCalledWith(ordersPath, { state: { isSafetyMoveSelected: true, + isBluebarkMoveSelected: false, }, }); }); @@ -588,7 +599,7 @@ describe('CreateCustomerForm', () => { // check the safety move box await userEvent.type(getByTestId('is-safety-move-yes'), safetyPayload.is_safety_move); - + await userEvent.type(getByTestId('is-bluebark-no'), safetyPayload.is_bluebark); expect(await screen.findByTestId('safetyMoveHint')).toBeInTheDocument(); await user.selectOptions(getByLabelText('Branch of service'), ['COAST_GUARD']); @@ -645,8 +656,84 @@ describe('CreateCustomerForm', () => { expect(mockNavigate).toHaveBeenCalledWith(ordersPath, { state: { isSafetyMoveSelected: true, + isBluebarkMoveSelected: false, }, }); }); - }, 20000); + }, 50000); + + it('disables okta and non cac user inputs when bluebark move is selected', async () => { + createCustomerWithOktaOption.mockImplementation(() => Promise.resolve(fakeResponse)); + isBooleanFlagEnabled.mockImplementation(() => Promise.resolve(true)); + searchLocationByZipCityState.mockImplementation(mockSearchPickupLocation); + + const { getByLabelText, getByTestId, getByRole } = render( + + + , + ); + + const user = userEvent.setup(); + + const saveBtn = await screen.findByRole('button', { name: 'Save' }); + expect(saveBtn).toBeInTheDocument(); + + // check the safety move box + await userEvent.type(getByTestId('is-safety-move-no'), bluebarkPayload.is_safety_move); + await userEvent.type(getByTestId('is-bluebark-yes'), bluebarkPayload.is_bluebark); + + await userEvent.selectOptions(getByLabelText('Branch of service'), ['ARMY']); + await user.type(getByTestId('edipiInput'), safetyPayload.edipi); + + await user.type(getByLabelText('First name'), safetyPayload.first_name); + await user.type(getByLabelText('Last name'), safetyPayload.last_name); + + await user.type(getByLabelText('Best contact phone'), safetyPayload.telephone); + await user.type(getByLabelText('Personal email'), safetyPayload.personal_email); + + await userEvent.type( + getByTestId('residential_address.streetAddress1'), + safetyPayload.residential_address.streetAddress1, + ); + + const locationBox = screen.getAllByRole('combobox'); + + await act(async () => { + await userEvent.type(locationBox[1], 'BEVERLY HILLS'); + const selectedResidentialLocation = await screen.findByText(/90210/); + await userEvent.click(selectedResidentialLocation); + }); + + await userEvent.type( + getByTestId('backup_mailing_address.streetAddress1'), + safetyPayload.backup_mailing_address.streetAddress1, + ); + + await act(async () => { + await userEvent.type(locationBox[2], 'DRYDEN'); + const selectedBackupLocation = await screen.findByText(/04225/); + await userEvent.click(selectedBackupLocation); + }); + + await userEvent.type(getByLabelText('Name'), safetyPayload.backup_contact.name); + await userEvent.type(getByRole('textbox', { name: 'Email' }), safetyPayload.backup_contact.email); + await userEvent.type(getByRole('textbox', { name: 'Phone' }), safetyPayload.backup_contact.telephone); + + expect(saveBtn).toBeInTheDocument(); + + await waitFor(() => { + expect(saveBtn).toBeEnabled(); + }); + await userEvent.click(saveBtn); + + await waitFor(() => { + expect(createCustomerWithOktaOption).toHaveBeenCalled(); + expect(mockNavigate).toHaveBeenCalledWith(ordersPath, { + state: { + isSafetyMoveSelected: false, + isBluebarkMoveSelected: true, + }, + }); + }); + }, 50000); }); diff --git a/src/pages/Office/ServicesCounselingAddOrders/ServicesCounselingAddOrders.jsx b/src/pages/Office/ServicesCounselingAddOrders/ServicesCounselingAddOrders.jsx index 9c269782ec7..40ecb706b6a 100644 --- a/src/pages/Office/ServicesCounselingAddOrders/ServicesCounselingAddOrders.jsx +++ b/src/pages/Office/ServicesCounselingAddOrders/ServicesCounselingAddOrders.jsx @@ -25,6 +25,7 @@ const ServicesCounselingAddOrders = ({ userPrivileges, canAddOrders, setCanAddOr const { customerId } = useParams(); const { state } = useLocation(); const isSafetyMoveSelected = state?.isSafetyMoveSelected; + const isBluebarkMoveSelected = state?.isBluebarkMoveSelected; const navigate = useNavigate(); const [isSafetyMoveFF, setSafetyMoveFF] = useState(false); const [hasSubmitted, setHasSubmitted] = useState(false); @@ -82,13 +83,25 @@ const ServicesCounselingAddOrders = ({ userPrivileges, canAddOrders, setCanAddOr ? userPrivileges?.some((privilege) => privilege.privilegeType === elevatedPrivilegeTypes.SAFETY) : false; - const allowedOrdersTypes = isSafetyPrivileged - ? { ...ORDERS_TYPE_OPTIONS, ...{ SAFETY: 'Safety' } } - : ORDERS_TYPE_OPTIONS; + const allowedOrdersTypes = { + ...ORDERS_TYPE_OPTIONS, + ...(isSafetyPrivileged ? { SAFETY: 'Safety' } : {}), + ...(isBluebarkMoveSelected ? { BLUEBARK: 'BLUEBARK' } : {}), + }; const ordersTypeOptions = dropdownInputOptions(allowedOrdersTypes); + const getInitialOrdersType = () => { + if (isSafetyMoveSelected) { + return 'SAFETY'; + } + if (isBluebarkMoveSelected) { + return 'BLUEBARK'; + } + return ''; + }; + const initialValues = { - ordersType: isSafetyMoveSelected ? 'SAFETY' : '', + ordersType: getInitialOrdersType(), issueDate: '', reportByDate: '', hasDependents: '', @@ -128,13 +141,13 @@ const ServicesCounselingAddOrders = ({ userPrivileges, canAddOrders, setCanAddOr initialValues={initialValues} onBack={handleBack} isSafetyMoveSelected={isSafetyMoveSelected} + isBluebarkMoveSelected={isBluebarkMoveSelected} /> ); }; - const mapStateToProps = (state) => { const canAddOrders = selectCanAddOrders(state); diff --git a/src/pages/PrimeUI/Shipment/PrimeUIShipmentCreateForm.jsx b/src/pages/PrimeUI/Shipment/PrimeUIShipmentCreateForm.jsx index 3f70fb3fb53..534dc315b2a 100644 --- a/src/pages/PrimeUI/Shipment/PrimeUIShipmentCreateForm.jsx +++ b/src/pages/PrimeUI/Shipment/PrimeUIShipmentCreateForm.jsx @@ -18,7 +18,7 @@ import { LOCATION_TYPES } from 'types/sitStatusShape'; const sitLocationOptions = dropdownInputOptions(LOCATION_TYPES); const PrimeUIShipmentCreateForm = () => { - const { values } = useFormikContext(); + const { values, setFieldTouched, setFieldValue } = useFormikContext(); const { shipmentType } = values; const { sitExpected, hasProGear } = values.ppmShipment; const { hasTrailer } = values.boatShipment; @@ -117,6 +117,11 @@ const PrimeUIShipmentCreateForm = () => { ( <>

What address are the movers picking up from?

@@ -153,7 +158,14 @@ const PrimeUIShipmentCreateForm = () => { {hasSecondaryPickupAddress === 'true' && ( <>
Second Pickup Address
- +

Third Pickup Address

@@ -189,7 +201,14 @@ const PrimeUIShipmentCreateForm = () => { {hasTertiaryPickupAddress === 'true' && hasSecondaryPickupAddress === 'true' && ( <>
Third Pickup Address
- + )} @@ -200,6 +219,11 @@ const PrimeUIShipmentCreateForm = () => { name="ppmShipment.destinationAddress" legend="Delivery Address" address1LabelHint="Optional" + locationLookup + formikProps={{ + setFieldTouched, + setFieldValue, + }} render={(fields) => ( <> {fields} @@ -235,7 +259,14 @@ const PrimeUIShipmentCreateForm = () => { {hasSecondaryDestinationAddress === 'true' && ( <>
Second Delivery Address
- +

Third Delivery Address

@@ -271,7 +302,14 @@ const PrimeUIShipmentCreateForm = () => { {hasTertiaryDestinationAddress === 'true' && hasSecondaryDestinationAddress === 'true' && ( <>
Third Delivery Address
- + )} @@ -392,6 +430,11 @@ const PrimeUIShipmentCreateForm = () => {
Pickup Address
( <> {fields} @@ -427,7 +470,14 @@ const PrimeUIShipmentCreateForm = () => { {hasSecondaryPickupAddress === 'true' && ( <>
Second Pickup Address
- +

Third Pickup Address

@@ -463,7 +513,14 @@ const PrimeUIShipmentCreateForm = () => { {hasTertiaryPickupAddress === 'true' && hasSecondaryPickupAddress === 'true' && ( <>
Third Pickup Address
- + )} @@ -474,6 +531,11 @@ const PrimeUIShipmentCreateForm = () => { ( <> {fields} @@ -510,7 +572,14 @@ const PrimeUIShipmentCreateForm = () => { {hasSecondaryDestinationAddress === 'true' && ( <>
Second Delivery Address
- +

Third Delivery Address

@@ -546,7 +615,14 @@ const PrimeUIShipmentCreateForm = () => { {hasTertiaryDestinationAddress === 'true' && hasSecondaryDestinationAddress === 'true' && ( <>
Third Delivery Address
- + )} diff --git a/src/pages/PrimeUI/Shipment/PrimeUIShipmentCreateForm.test.jsx b/src/pages/PrimeUI/Shipment/PrimeUIShipmentCreateForm.test.jsx index 80ea98a6f8a..f9bc849d137 100644 --- a/src/pages/PrimeUI/Shipment/PrimeUIShipmentCreateForm.test.jsx +++ b/src/pages/PrimeUI/Shipment/PrimeUIShipmentCreateForm.test.jsx @@ -227,22 +227,18 @@ describe('PrimeUIShipmentCreateForm', () => { initialValues.ppmShipment.pickupAddress.streetAddress1, ); - expect(await screen.getAllByLabelText('City')[0]).toHaveValue(initialValues.ppmShipment.pickupAddress.city); - expect(await screen.getAllByLabelText('State')[0]).toHaveValue(initialValues.ppmShipment.pickupAddress.state); - expect(await screen.getAllByLabelText('ZIP')[0]).toHaveValue(initialValues.ppmShipment.pickupAddress.postalCode); + expect(screen.getAllByText('City')[0]).toBeInTheDocument(); + expect(screen.getAllByText('State')[0]).toBeInTheDocument(); + expect(screen.getAllByText('County')[0]).toBeInTheDocument(); + expect(screen.getAllByText('ZIP')[0]).toBeInTheDocument(); expect(await screen.getAllByLabelText(/Address 1/)[1]).toHaveValue( initialValues.ppmShipment.secondaryPickupAddress.streetAddress1, ); - expect(await screen.getAllByLabelText(/City/)[1]).toHaveValue( - initialValues.ppmShipment.secondaryPickupAddress.city, - ); - expect(await screen.getAllByLabelText('State')[1]).toHaveValue( - initialValues.ppmShipment.secondaryPickupAddress.state, - ); - expect(await screen.getAllByLabelText('ZIP')[1]).toHaveValue( - initialValues.ppmShipment.secondaryPickupAddress.postalCode, - ); + expect(screen.getAllByText('City')[1]).toBeInTheDocument(); + expect(screen.getAllByText('State')[1]).toBeInTheDocument(); + expect(screen.getAllByText('County')[1]).toBeInTheDocument(); + expect(screen.getAllByText('ZIP')[1]).toBeInTheDocument(); expect(await screen.findByText('Storage In Transit (SIT)')).toBeInTheDocument(); const sitExpectedInput = await screen.findByLabelText('SIT Expected'); diff --git a/src/pages/PrimeUI/Shipment/PrimeUIShipmentUpdate.jsx b/src/pages/PrimeUI/Shipment/PrimeUIShipmentUpdate.jsx index 0a5a5d180b8..33dd0042589 100644 --- a/src/pages/PrimeUI/Shipment/PrimeUIShipmentUpdate.jsx +++ b/src/pages/PrimeUI/Shipment/PrimeUIShipmentUpdate.jsx @@ -408,7 +408,7 @@ const PrimeUIShipmentUpdate = ({ setFlashMessage }) => { validationSchema={validationSchema} validateOnMount > - {({ isValid, isSubmitting, handleSubmit }) => { + {({ isValid, isSubmitting, handleSubmit, setFieldValue, setFieldTouched }) => { return ( {isPPM ? ( @@ -438,6 +438,7 @@ const PrimeUIShipmentUpdate = ({ setFlashMessage }) => { tertiaryDeliveryAddress={initialValues.tertiaryDeliveryAddress} diversion={initialValues.diversion} shipmentType={shipment.shipmentType} + formikProps={{ setFieldValue, setFieldTouched }} /> )}
diff --git a/src/pages/PrimeUI/Shipment/PrimeUIShipmentUpdate.test.jsx b/src/pages/PrimeUI/Shipment/PrimeUIShipmentUpdate.test.jsx index 568902243d6..936cebbb572 100644 --- a/src/pages/PrimeUI/Shipment/PrimeUIShipmentUpdate.test.jsx +++ b/src/pages/PrimeUI/Shipment/PrimeUIShipmentUpdate.test.jsx @@ -25,6 +25,11 @@ const routingParams = { moveCodeOrID: moveId, shipmentId, }; +const ppmRoutingParams = { + moveCode, + moveCodeOrID: moveId, + shipmentId: ppmShipmentId, +}; jest.mock('services/primeApi', () => ({ ...jest.requireActual('services/primeApi'), @@ -293,6 +298,230 @@ const approvedMoveTaskOrder = { }, }; +const approvedPPMMoveTaskOrder = { + moveTaskOrder: { + availableToPrimeAt: '2021-10-18T18:24:41.235Z', + createdAt: '2021-10-18T18:24:41.362Z', + diversion: false, + eTag: 'MjAyMS0xMC0xOFQxODoyNDo0MS4zNjIxNjRa', + excessWeightAcknowledgedAt: null, + excessWeightQualifiedAt: null, + excessWeightUploadId: null, + id: '9c7b255c-2981-4bf8-839f-61c7458e2b4d', + moveCode: 'LR4T8V', + mtoShipments: [ + { + actualPickupDate: null, + approvedDate: null, + counselorRemarks: 'These are counselor remarks for a PPM.', + createdAt: '2022-07-01T13:41:33.261Z', + destinationAddress: { + city: null, + postalCode: null, + state: null, + streetAddress1: null, + }, + eTag: 'MjAyMi0wNy0wMVQxNDoyMzoxOS43MzgzODla', + firstAvailableDeliveryDate: null, + id: '1b695b60-c3ed-401b-b2e3-808d095eb8cc', + moveTaskOrderID: '9c7b255c-2981-4bf8-839f-61c7458e2b4d', + pickupAddress: { + city: null, + postalCode: null, + state: null, + streetAddress1: null, + }, + ppmShipment: { + actualDestinationPostalCode: '30814', + actualMoveDate: '2022-07-13', + actualPickupPostalCode: '90212', + advanceAmountReceived: 598600, + advanceAmountRequested: 598700, + approvedAt: '2022-07-03T14:20:21.620Z', + createdAt: '2022-06-30T13:41:33.265Z', + eTag: 'MjAyMi0wNy0wMVQxNDoyMzoxOS43ODA1Mlo=', + estimatedIncentive: 1000000, + estimatedWeight: 4000, + expectedDepartureDate: '2020-03-15', + hasProGear: true, + hasReceivedAdvance: true, + hasRequestedAdvance: true, + id: 'd733fe2f-b08d-434a-ad8d-551f4d597b03', + proGearWeight: 1987, + reviewedAt: '2022-07-02T14:20:14.636Z', + shipmentId: '1b695b60-c3ed-401b-b2e3-808d095eb8cc', + sitEstimatedCost: 123456, + sitEstimatedDepartureDate: '2022-07-13', + sitEstimatedEntryDate: '2022-07-05', + sitEstimatedWeight: 1100, + sitExpected: true, + sitLocation: 'DESTINATION', + spouseProGearWeight: 498, + status: 'SUBMITTED', + submittedAt: '2022-07-01T13:41:33.252Z', + updatedAt: '2022-07-01T14:23:19.780Z', + pickupAddress: { + city: 'Beverly Hills', + county: 'Los Angeles', + country: 'US', + eTag: 'MjAyMS0xMC0xOFQxODoyNDo0MS4zNjc3Mjda', + id: 'cf159eca-162c-4131-84a0-795e684416a6', + postalCode: '90210', + state: 'CA', + streetAddress1: '123 Any Street', + streetAddress2: 'P.O. Box 12345', + streetAddress3: 'c/o Some Person', + }, + destinationAddress: { + city: 'Fairfield', + county: 'Solano', + country: 'US', + eTag: 'MjAyMS0xMC0xOFQxODoyNDo0MS4zNzI3NDJa', + id: 'bfe61147-5fd7-426e-b473-54ccf77bde35', + postalCode: '94535', + state: 'CO', + streetAddress1: '987 Any Avenue', + streetAddress2: 'P.O. Box 9876', + streetAddress3: 'c/o Some Person', + }, + secondaryDeliveryAddress: { + city: null, + postalCode: null, + state: null, + streetAddress1: null, + }, + secondaryPickupAddress: { + city: null, + postalCode: null, + state: null, + streetAddress1: null, + }, + tertiaryDeliveryAddress: { + city: null, + postalCode: null, + state: null, + streetAddress1: null, + }, + tertiaryPickupAddress: { + city: null, + postalCode: null, + state: null, + streetAddress1: null, + }, + }, + primeEstimatedWeightRecordedDate: null, + requestedPickupDate: null, + requiredDeliveryDate: null, + scheduledPickupDate: null, + shipmentType: 'PPM', + status: 'APPROVED', + updatedAt: '2022-07-01T14:23:19.738Z', + mtoServiceItems: [], + }, + ], + order: { + customer: { + branch: 'AIR_FORCE', + dodID: '5917531070', + eTag: 'MjAyMS0xMC0xOFQxODoyNDo0MS4xNDIxNTZa', + email: 'leo_spaceman_sm@example.com', + firstName: 'Leo', + id: 'e2de409b-edb9-42af-b50f-564458e08ada', + lastName: 'Spacemen', + phone: '555-555-5555', + userID: 'ae204f8a-6222-45a1-9b79-e2d52441b4f2', + }, + customerID: 'e2de409b-edb9-42af-b50f-564458e08ada', + destinationDutyLocation: { + address: { + city: 'Augusta', + country: 'United States', + eTag: 'MjAyMS0xMC0xOFQxODoyMzoxMi4zMTQzNDZa', + id: '5ac95be8-0230-47ea-90b4-b0f6f60de364', + postalCode: '30813', + state: 'GA', + streetAddress1: 'Fort Gordon', + }, + addressID: '5ac95be8-0230-47ea-90b4-b0f6f60de364', + id: '2d5ada83-e09a-47f8-8de6-83ec51694a86', + name: 'Fort Gordon', + }, + eTag: 'MjAyMS0xMC0xOFQxODoyNDo0MS4yMzAxMVo=', + entitlement: { + authorizedWeight: 8000, + dependentsAuthorized: true, + eTag: 'MjAyMS0xMC0xOFQxODoyNDo0MS4xNzc0MjZa', + id: '46ee60c2-9b17-44c7-9202-15a84327fc2f', + nonTemporaryStorage: true, + organizationalClothingAndIndividualEquipment: true, + privatelyOwnedVehicle: true, + proGearWeight: 2000, + proGearWeightSpouse: 500, + requiredMedicalEquipmentWeight: 1000, + storageInTransit: 2, + totalDependents: 1, + totalWeight: 5000, + }, + id: '8cda4825-283c-4910-89f4-1741e2fd9cb7', + linesOfAccounting: 'F8E1', + orderNumber: 'ORDER3', + originDutyLocation: { + address: { + city: 'Des Moines', + country: 'US', + eTag: 'MjAyMS0xMC0xOFQxODoyNDo0MS4yMDgyNjha', + id: 'dbbee525-9c88-40c1-a549-6330b35972d2', + postalCode: '50309', + state: 'IA', + streetAddress1: '987 Other Avenue', + streetAddress2: 'P.O. Box 1234', + streetAddress3: 'c/o Another Person', + }, + addressID: 'dbbee525-9c88-40c1-a549-6330b35972d2', + id: '0ecd8fb1-0551-44c8-a15e-83c5f4e3ae0f', + name: 'XOXhgDSIRS', + }, + reportByDate: '2018-08-01', + }, + orderID: '8cda4825-283c-4910-89f4-1741e2fd9cb7', + paymentRequests: [ + { + eTag: 'MjAyMS0xMC0xOFQxODoyNDo0MS41Nzc2OTha', + id: '532ec513-8297-44b3-91a8-5167650b2869', + isFinal: false, + moveTaskOrderID: '9c7b255c-2981-4bf8-839f-61c7458e2b4d', + paymentRequestNumber: '3301-9920-1', + paymentServiceItems: [ + { + eTag: 'MjAyMS0xMC0xOFQxODoyNDo0MS42Mzc5MzJa', + id: '8fdf0b3a-c102-4084-84fe-22903f20470b', + mtoServiceItemID: '8829fb28-69c1-45d7-98bc-c724478d5106', + paymentRequestID: '532ec513-8297-44b3-91a8-5167650b2869', + referenceID: '3301-9920-8fdf0b3a', + status: 'REQUESTED', + }, + ], + status: 'PENDING', + }, + ], + ppmType: 'PARTIAL', + referenceId: '3301-9920', + updatedAt: '2021-10-18T18:24:41.362Z', + mtoServiceItems: [ + { + reServiceCode: 'STEST', + eTag: 'MjAyMS0xMC0xOFQxODoyNDo0MS41MzE0NjRa', + id: '8829fb28-69c1-45d7-98bc-c724478d5106', + modelType: 'MTOServiceItemBasic', + moveTaskOrderID: '9c7b255c-2981-4bf8-839f-61c7458e2b4d', + mtoShipmentID: 'ce01a5b8-9b44-4511-8a8d-edb60f2a4aee', + reServiceName: 'Test Service', + status: 'APPROVED', + }, + ], + }, +}; + const approvedMoveTaskOrderWithOneHHG = { moveTaskOrder: { availableToPrimeAt: '2021-10-18T18:24:41.235Z', @@ -487,6 +716,12 @@ const mockedComponent = ( ); +const mockedPPMComponent = ( + + + +); + const readyReturnValue = { ...approvedMoveTaskOrder, isLoading: false, @@ -500,6 +735,13 @@ const readyReturnValueWithOneHHG = { isSuccess: true, }; +const readyPPMReturnValue = { + ...approvedPPMMoveTaskOrder, + isLoading: false, + isError: false, + isSuccess: true, +}; + const loadingReturnValue = { ...approvedMoveTaskOrder, isLoading: true, @@ -611,6 +853,24 @@ expect( expect(await screen.findByRole('button', { name: 'Save' })).toBeEnabled(); expect(screen.getByText(/123 Any Street/)).toBeInTheDocument(); }); + + // Tested here rather than on the form because this component parses the data. + // Tests on the form were missing a parsing issue since they were passed fully formed test data. + it('displays all location lookup values', async () => { + usePrimeSimulatorGetMove.mockReturnValue(readyPPMReturnValue); + + render(mockedPPMComponent); + + expect(screen.getByText(/Beverly Hills/)).toBeInTheDocument(); + expect(screen.getByText(/CA/)).toBeInTheDocument(); + expect(screen.getByText(/Los Angeles/)).toBeInTheDocument(); + expect(screen.getByText(/90210/)).toBeInTheDocument(); + + expect(screen.getByText(/Fairfield/)).toBeInTheDocument(); + expect(screen.getByText(/CO/)).toBeInTheDocument(); + expect(screen.getByText(/Solano/)).toBeInTheDocument(); + expect(screen.getByText(/94535/)).toBeInTheDocument(); + }); }); describe('successful submission of form', () => { diff --git a/src/pages/PrimeUI/Shipment/PrimeUIShipmentUpdateAddress.jsx b/src/pages/PrimeUI/Shipment/PrimeUIShipmentUpdateAddress.jsx index 0d234eb1136..7c3c186b45e 100644 --- a/src/pages/PrimeUI/Shipment/PrimeUIShipmentUpdateAddress.jsx +++ b/src/pages/PrimeUI/Shipment/PrimeUIShipmentUpdateAddress.jsx @@ -88,7 +88,8 @@ const PrimeUIShipmentUpdateAddress = () => { if (isError) return ; const onSubmit = (values, { setSubmitting }) => { - const { streetAddress1, streetAddress2, streetAddress3, city, state, postalCode } = values.address; + const { streetAddress1, streetAddress2, streetAddress3, city, county, state, postalCode, usPostRegionCitiesID } = + values.address; const body = { id: values.addressID, @@ -96,8 +97,10 @@ const PrimeUIShipmentUpdateAddress = () => { streetAddress2, streetAddress3, city, + county, state, postalCode, + usPostRegionCitiesID, }; // Check if the address payload contains any blank properties and remove diff --git a/src/pages/PrimeUI/Shipment/PrimeUIShipmentUpdateAddress.test.jsx b/src/pages/PrimeUI/Shipment/PrimeUIShipmentUpdateAddress.test.jsx index ed9eee256f3..a0fc67898d4 100644 --- a/src/pages/PrimeUI/Shipment/PrimeUIShipmentUpdateAddress.test.jsx +++ b/src/pages/PrimeUI/Shipment/PrimeUIShipmentUpdateAddress.test.jsx @@ -54,6 +54,7 @@ const moveTaskOrder = { streetAddress1: '800 Madison Avenue', city: 'New York', state: 'NY', + county: 'New York', postalCode: '10002', }, destinationAddress: { @@ -61,6 +62,7 @@ const moveTaskOrder = { streetAddress1: '100 1st Avenue', city: 'New York', state: 'NY', + county: 'New York', postalCode: '10001', }, }, @@ -134,9 +136,15 @@ describe('PrimeUIShipmentUpdateAddress page', () => { await waitFor(() => { expect(screen.getAllByLabelText('Address 1')[0]).toHaveValue(shipment.pickupAddress.streetAddress1); expect(screen.getAllByLabelText(/Address 2/)[0]).toHaveValue(''); - expect(screen.getAllByLabelText('City')[0]).toHaveValue(shipment.pickupAddress.city); - expect(screen.getAllByLabelText('State')[0]).toHaveValue(shipment.pickupAddress.state); - expect(screen.getAllByLabelText('ZIP')[0]).toHaveValue(shipment.pickupAddress.postalCode); + expect(screen.getAllByLabelText(/Address 3/)[0]).toHaveValue(''); + expect(screen.getAllByText('City')[0]).toBeInTheDocument(); + expect(screen.getAllByText(shipment.pickupAddress.city)[0]).toBeInTheDocument(); + expect(screen.getAllByText('State')[0]).toBeInTheDocument(); + expect(screen.getAllByText(shipment.pickupAddress.state)[0]).toBeInTheDocument(); + expect(screen.getAllByText('County')[0]).toBeInTheDocument(); + expect(screen.getAllByText(shipment.pickupAddress.county)[0]).toBeInTheDocument(); + expect(screen.getAllByText('ZIP')[0]).toBeInTheDocument(); + expect(screen.getAllByText(shipment.pickupAddress.postalCode)[0]).toBeInTheDocument(); }); }); }); diff --git a/src/pages/PrimeUI/Shipment/PrimeUIShipmentUpdateAddressForm.jsx b/src/pages/PrimeUI/Shipment/PrimeUIShipmentUpdateAddressForm.jsx index ec188502922..75098a7af9d 100644 --- a/src/pages/PrimeUI/Shipment/PrimeUIShipmentUpdateAddressForm.jsx +++ b/src/pages/PrimeUI/Shipment/PrimeUIShipmentUpdateAddressForm.jsx @@ -29,25 +29,27 @@ const PrimeUIShipmentUpdateAddressForm = ({ return ( - {({ isValid, isSubmitting, handleSubmit, errors }) => ( - - 0 ? 1 : 0}> - -

{addressLocation}

- -
- -
- - )} + {({ isValid, isSubmitting, handleSubmit, errors, ...formikProps }) => { + return ( +
+ 0 ? 1 : 0}> + +

{addressLocation}

+ +
+ +
+
+ ); + }}
); }; diff --git a/src/pages/PrimeUI/Shipment/PrimeUIShipmentUpdateAddressForm.test.jsx b/src/pages/PrimeUI/Shipment/PrimeUIShipmentUpdateAddressForm.test.jsx index 6d6f433142c..fc01df2ea5e 100644 --- a/src/pages/PrimeUI/Shipment/PrimeUIShipmentUpdateAddressForm.test.jsx +++ b/src/pages/PrimeUI/Shipment/PrimeUIShipmentUpdateAddressForm.test.jsx @@ -82,12 +82,14 @@ describe('PrimeUIShipmentUpdateAddressForm', () => { expect(screen.getByLabelText(/Address 1/)).toBeInTheDocument(); expect(screen.getByLabelText(/Address 2/)).toBeInTheDocument(); expect(screen.getByLabelText(/Address 3/)).toBeInTheDocument(); - expect(screen.getByLabelText('City')).toBeInTheDocument(); - expect(screen.getByLabelText('City')).toHaveValue(shipmentAddress.city); - expect(screen.getByLabelText('State')).toBeInTheDocument(); - expect(screen.getByLabelText('State')).toHaveValue(shipmentAddress.state); - expect(screen.getByLabelText('ZIP')).toBeInTheDocument(); - expect(screen.getByLabelText('ZIP')).toHaveValue(shipmentAddress.postalCode); + expect(screen.getByText('City')).toBeInTheDocument(); + expect(screen.getByText(shipmentAddress.city)).toBeInTheDocument(); + expect(screen.getByText('State')).toBeInTheDocument(); + expect(screen.getByText(shipmentAddress.state)).toBeInTheDocument(); + expect(screen.getByText('County')).toBeInTheDocument(); + expect(screen.getByText(shipmentAddress.county)).toBeInTheDocument(); + expect(screen.getByText('ZIP')).toBeInTheDocument(); + expect(screen.getByText(shipmentAddress.postalCode)).toBeInTheDocument(); expect(screen.getByRole('button', { name: 'Save' })).toBeEnabled(); }); diff --git a/src/pages/PrimeUI/Shipment/PrimeUIShipmentUpdateDestinationAddress.jsx b/src/pages/PrimeUI/Shipment/PrimeUIShipmentUpdateDestinationAddress.jsx index fc479853ab8..8bd474dc9d5 100644 --- a/src/pages/PrimeUI/Shipment/PrimeUIShipmentUpdateDestinationAddress.jsx +++ b/src/pages/PrimeUI/Shipment/PrimeUIShipmentUpdateDestinationAddress.jsx @@ -87,8 +87,10 @@ const PrimeUIShipmentUpdateDestinationAddress = () => { streetAddress2: newAddress.address.streetAddress2, streetAddress3: newAddress.address.streetAddress3, city: newAddress.address.city, + county: newAddress.address.county, state: newAddress.address.state, postalCode: newAddress.address.postalCode, + usPostRegionCitiesID: newAddress.address.usPostRegionCitiesID, }, contractorRemarks: values.contractorRemarks, }; diff --git a/src/pages/PrimeUI/Shipment/PrimeUIShipmentUpdateDestinationAddress.test.jsx b/src/pages/PrimeUI/Shipment/PrimeUIShipmentUpdateDestinationAddress.test.jsx index 9e0c7c7a417..7c41a95769f 100644 --- a/src/pages/PrimeUI/Shipment/PrimeUIShipmentUpdateDestinationAddress.test.jsx +++ b/src/pages/PrimeUI/Shipment/PrimeUIShipmentUpdateDestinationAddress.test.jsx @@ -87,6 +87,7 @@ const testShipmentReturnValue = { streetAddress1: '100 1st Avenue', city: 'New York', state: 'NY', + county: 'New York', postalCode: '10001', }, }, @@ -161,9 +162,17 @@ describe('PrimeUIShipmentUpdateAddress page', () => { expect(screen.getAllByLabelText('Address 1').length).toBe(1); expect(screen.getAllByLabelText('Address 1')[0]).toHaveValue(shipment.destinationAddress.streetAddress1); expect(screen.getAllByLabelText(/Address 2/)[0]).toHaveValue(''); - expect(screen.getAllByLabelText('City')[0]).toHaveValue(shipment.destinationAddress.city); - expect(screen.getAllByLabelText('State')[0]).toHaveValue(shipment.destinationAddress.state); - expect(screen.getAllByLabelText('ZIP')[0]).toHaveValue(shipment.destinationAddress.postalCode); + expect(screen.getAllByLabelText(/Address 3/)[0]).toBeInTheDocument(); + + expect(screen.getAllByText('City')[0]).toBeInTheDocument(); + expect(screen.getAllByText(shipment.destinationAddress.city)[0]).toBeInTheDocument(); + expect(screen.getAllByText('State')[0]).toBeInTheDocument(); + expect(screen.getAllByText(shipment.destinationAddress.state)[0]).toBeInTheDocument(); + expect(screen.getAllByText('County')[0]).toBeInTheDocument(); + expect(screen.getAllByText(shipment.destinationAddress.county)[0]).toBeInTheDocument(); + expect(screen.getAllByText('ZIP')[0]).toBeInTheDocument(); + expect(screen.getAllByText(shipment.destinationAddress.postalCode)[0]).toBeInTheDocument(); + expect(screen.getAllByLabelText('Contractor Remarks')[0]).toHaveValue(''); }); }); diff --git a/src/pages/PrimeUI/Shipment/PrimeUIShipmentUpdateDestinationAddressForm.jsx b/src/pages/PrimeUI/Shipment/PrimeUIShipmentUpdateDestinationAddressForm.jsx index 5ad4224990d..f4176cb68b3 100644 --- a/src/pages/PrimeUI/Shipment/PrimeUIShipmentUpdateDestinationAddressForm.jsx +++ b/src/pages/PrimeUI/Shipment/PrimeUIShipmentUpdateDestinationAddressForm.jsx @@ -27,50 +27,52 @@ const PrimeUIShipmentUpdateDestinationAddressForm = ({ return ( - {({ isValid, isSubmitting, handleSubmit, errors }) => ( -
- 0 ? 1 : 0}> - -

Update Shipment Delivery Address

+ {({ isValid, isSubmitting, handleSubmit, errors, ...formikProps }) => { + return ( + + 0 ? 1 : 0}> -
- This is used to update the delivery address on an already approved{' '} - shipment.
- This also updates the final delivery address for destination SIT service items in the shipment. -
-
- This endpoint should be used for changing the delivery address of HHG & NTSR shipments. -
-
- The address update will be automatically approved unless it changes any of the following: -
- - - the service area
- - mileage bracket for direct delivery
- - domestic short haul to domestic line haul or vice versa
- SIT delivery out over 50 miles{' '} - or - back under 50 miles -
-
-
- If any of those change, the address change will require TOO approval. -
+

Update Shipment Delivery Address

+ +
+ This is used to update the delivery address on an already approved{' '} + shipment.
+ This also updates the final delivery address for destination SIT service items in the shipment. +
+
+ This endpoint should be used for changing the delivery address of HHG & NTSR shipments. +
+
+ The address update will be automatically approved unless it changes any of the following: +
+ + - the service area
+ - mileage bracket for direct delivery
+ - domestic short haul to domestic line haul or vice versa
- SIT delivery out over 50 miles{' '} + or + back under 50 miles +
+
+
+ If any of those change, the address change will require TOO approval. +
+
+ +
- - -
- -
-
- )} + + + + ); + }}
); }; diff --git a/src/pages/PrimeUI/Shipment/PrimeUIShipmentUpdateDestinationAddressForm.test.jsx b/src/pages/PrimeUI/Shipment/PrimeUIShipmentUpdateDestinationAddressForm.test.jsx index c2ca0496a7e..19dc8fb5b2e 100644 --- a/src/pages/PrimeUI/Shipment/PrimeUIShipmentUpdateDestinationAddressForm.test.jsx +++ b/src/pages/PrimeUI/Shipment/PrimeUIShipmentUpdateDestinationAddressForm.test.jsx @@ -23,8 +23,9 @@ describe('PrimeUIShipmentUpdateDestinationAddressForm', () => { id: 'c56a4180-65aa-42ec-a945-5fd21dec0538', streetAddress1: '444 Main Ave', streetAddress2: 'Apartment 9000', - streetAddress3: '', + streetAddress3: 'J. Jonah Jameson', city: 'Anytown', + county: 'SOLANO', state: 'AL', postalCode: '90210', country: 'USA', @@ -72,9 +73,15 @@ describe('PrimeUIShipmentUpdateDestinationAddressForm', () => { ); expect(screen.getByLabelText(/Address 1/)).toBeInTheDocument(); expect(screen.getByLabelText(/Address 2/)).toBeInTheDocument(); - expect(screen.getByLabelText('City')).toBeInTheDocument(); - expect(screen.getByLabelText('State')).toBeInTheDocument(); - expect(screen.getByLabelText('ZIP')).toBeInTheDocument(); + expect(screen.getByLabelText(/Address 3/)).toBeInTheDocument(); + expect(screen.getByText('City')).toBeInTheDocument(); + expect(screen.getByText(initialValuesDestinationAddress.newAddress.address.city)).toBeInTheDocument(); + expect(screen.getByText('State')).toBeInTheDocument(); + expect(screen.getByText(initialValuesDestinationAddress.newAddress.address.state)).toBeInTheDocument(); + expect(screen.getByText('County')).toBeInTheDocument(); + expect(screen.getByText(initialValuesDestinationAddress.newAddress.address.county)).toBeInTheDocument(); + expect(screen.getByText('ZIP')).toBeInTheDocument(); + expect(screen.getByText(initialValuesDestinationAddress.newAddress.address.postalCode)).toBeInTheDocument(); expect(screen.getByRole('button', { name: 'Save' })).toBeEnabled(); }); @@ -89,10 +96,8 @@ describe('PrimeUIShipmentUpdateDestinationAddressForm', () => { ); await userEvent.type(screen.getByLabelText(/Address 1/), '23 City Str'); - await userEvent.type(screen.getByLabelText('City'), 'City'); - await userEvent.clear(screen.getByLabelText('ZIP')); - await userEvent.type(screen.getByLabelText('ZIP'), '90210'); - await userEvent.selectOptions(screen.getByLabelText('State'), ['CA']); + await userEvent.type(screen.getByLabelText(/Address 2/), 'Apt 23'); + await userEvent.type(screen.getByLabelText(/Address 3/), 'C/O Twenty Three'); await userEvent.type(screen.getByLabelText('Contractor Remarks'), 'Test remarks'); const submitBtn = screen.getByRole('button', { name: 'Save' }); @@ -102,23 +107,6 @@ describe('PrimeUIShipmentUpdateDestinationAddressForm', () => { await userEvent.click(submitBtn); }); - it('disables the submit button when the zip is bad', async () => { - renderWithProviders( - , - ); - await userEvent.clear(screen.getByLabelText('ZIP')); - await userEvent.type(screen.getByLabelText('ZIP'), '1'); - (await screen.getByLabelText('ZIP')).blur(); - await waitFor(() => { - expect(screen.getByRole('button', { name: 'Save' })).toBeDisabled(); - }); - }); - it('disables the submit button when the address 1 is missing', async () => { renderWithProviders( { }); }); - it('disables the submit button when city is missing', async () => { + it('does not disable the submit button when address lines 2 or 3 are blank', async () => { renderWithProviders( { name="newAddress.address" />, ); - await userEvent.clear(screen.getByLabelText('City')); - (await screen.getByLabelText('City')).blur(); + + await userEvent.clear(screen.getByLabelText(/Address 3/)); + (await screen.getByLabelText(/Address 3/)).blur(); await waitFor(() => { - expect(screen.getByRole('button', { name: 'Save' })).toBeDisabled(); - expect(screen.getByText('Required')).toBeInTheDocument(); + expect(screen.getByRole('button', { name: 'Save' }).getAttribute('disabled')).toBeFalsy(); + }); + + await userEvent.clear(screen.getByLabelText(/Address 2/)); + (await screen.getByLabelText(/Address 2/)).blur(); + await waitFor(() => { + expect(screen.getByRole('button', { name: 'Save' }).getAttribute('disabled')).toBeFalsy(); }); }); }); diff --git a/src/pages/PrimeUI/Shipment/PrimeUIShipmentUpdateForm.jsx b/src/pages/PrimeUI/Shipment/PrimeUIShipmentUpdateForm.jsx index 080aa08c5ce..f05611aebe0 100644 --- a/src/pages/PrimeUI/Shipment/PrimeUIShipmentUpdateForm.jsx +++ b/src/pages/PrimeUI/Shipment/PrimeUIShipmentUpdateForm.jsx @@ -46,6 +46,7 @@ const PrimeUIShipmentUpdateForm = ({ secondaryDeliveryAddress, tertiaryDeliveryAddress, shipmentType, + formikProps, }) => { const isNTS = shipmentType === SHIPMENT_OPTIONS.NTS; const isNTSR = shipmentType === SHIPMENT_OPTIONS.NTSR; @@ -150,28 +151,38 @@ const PrimeUIShipmentUpdateForm = ({ )}

Shipment Addresses

Pickup Address
- {editablePickupAddress && } + {editablePickupAddress && } {!editablePickupAddress && formatAddress(pickupAddress)} {!isNTSR && ( <>
Second Pickup Address
- {editableSecondaryPickupAddress && } + {editableSecondaryPickupAddress && ( + + )} {!editableSecondaryPickupAddress && formatAddress(secondaryPickupAddress)}
Third Pickup Address
- {editableTertiaryPickupAddress && } + {editableTertiaryPickupAddress && ( + + )} {!editableTertiaryPickupAddress && formatAddress(tertiaryPickupAddress)} )}
Delivery Address
- {editableDestinationAddress && } + {editableDestinationAddress && ( + + )} {!editableDestinationAddress && formatAddress(destinationAddress)} {!isNTS && ( <>
Second Delivery Address
- {editableSecondaryDeliveryAddress && } + {editableSecondaryDeliveryAddress && ( + + )} {!editableSecondaryDeliveryAddress && formatAddress(secondaryDeliveryAddress)}
Third Delivery Address
- {editableTertiaryDeliveryAddress && } + {editableTertiaryDeliveryAddress && ( + + )} {!editableTertiaryDeliveryAddress && formatAddress(tertiaryDeliveryAddress)} )} @@ -199,6 +210,7 @@ PrimeUIShipmentUpdateForm.propTypes = { actualSpouseProGearWeight: PropTypes.string, pickupAddress: ResidentialAddressShape, destinationAddress: ResidentialAddressShape, + formikProps: PropTypes.object.isRequired, }; PrimeUIShipmentUpdateForm.defaultProps = { diff --git a/src/pages/PrimeUI/Shipment/PrimeUIShipmentUpdatePPMForm.jsx b/src/pages/PrimeUI/Shipment/PrimeUIShipmentUpdatePPMForm.jsx index daf02c6b903..3955c36bd71 100644 --- a/src/pages/PrimeUI/Shipment/PrimeUIShipmentUpdatePPMForm.jsx +++ b/src/pages/PrimeUI/Shipment/PrimeUIShipmentUpdatePPMForm.jsx @@ -14,7 +14,7 @@ import MaskedTextField from 'components/form/fields/MaskedTextField/MaskedTextFi const sitLocationOptions = dropdownInputOptions(LOCATION_TYPES); const PrimeUIShipmentUpdatePPMForm = () => { - const { values } = useFormikContext(); + const { values, setFieldTouched, setFieldValue } = useFormikContext(); const { sitExpected, hasProGear, @@ -36,6 +36,11 @@ const PrimeUIShipmentUpdatePPMForm = () => { ( <>

What address are the movers picking up from?

@@ -71,7 +76,14 @@ const PrimeUIShipmentUpdatePPMForm = () => { {hasSecondaryPickupAddress === 'true' && ( <> - +

Third Pickup Address

@@ -101,7 +113,16 @@ const PrimeUIShipmentUpdatePPMForm = () => { />

- {hasTertiaryPickupAddress === 'true' && } + {hasTertiaryPickupAddress === 'true' && ( + + )} )} @@ -112,6 +133,11 @@ const PrimeUIShipmentUpdatePPMForm = () => { name="ppmShipment.destinationAddress" legend="Delivery Address" address1LabelHint="Optional" + locationLookup + formikProps={{ + setFieldTouched, + setFieldValue, + }} render={(fields) => ( <> {fields} @@ -146,7 +172,14 @@ const PrimeUIShipmentUpdatePPMForm = () => {
{hasSecondaryDestinationAddress === 'true' && ( <> - +

Third destination location

@@ -177,7 +210,14 @@ const PrimeUIShipmentUpdatePPMForm = () => { {hasTertiaryDestinationAddress === 'true' && ( - + )} )} diff --git a/src/pages/PrimeUI/Shipment/PrimeUIShipmentUpdatePPMForm.test.jsx b/src/pages/PrimeUI/Shipment/PrimeUIShipmentUpdatePPMForm.test.jsx index 2878c33af59..ca0301f0cdb 100644 --- a/src/pages/PrimeUI/Shipment/PrimeUIShipmentUpdatePPMForm.test.jsx +++ b/src/pages/PrimeUI/Shipment/PrimeUIShipmentUpdatePPMForm.test.jsx @@ -4,6 +4,7 @@ import { Formik } from 'formik'; import PrimeUIShipmentUpdatePPMForm from 'pages/PrimeUI/Shipment/PrimeUIShipmentUpdatePPMForm'; import { formatCustomerDate } from 'utils/formatters'; +import { MockProviders } from 'testUtils'; const shipment = { actualPickupDate: null, @@ -57,16 +58,18 @@ const shipment = { streetAddress1: '111 Test Street', streetAddress2: '222 Test Street', streetAddress3: 'Test Man', - city: 'Test City', - state: 'KY', + city: 'Test City 1', + county: 'Murray 1', + state: 'KY 1', postalCode: '42701', }, secondaryPickupAddress: { streetAddress1: '777 Test Street', streetAddress2: '888 Test Street', streetAddress3: 'Test Man', - city: 'Test City', - state: 'KY', + city: 'Test City 2', + county: 'Murray 2', + state: 'KY 2', postalCode: '42702', }, tertiaryPickupAddress: { @@ -74,6 +77,7 @@ const shipment = { streetAddress2: '234 Test Lane', streetAddress3: 'Test Woman', city: 'Missoula', + county: 'Missoula', state: 'MT', postalCode: '59801', }, @@ -81,8 +85,9 @@ const shipment = { streetAddress1: '222 Test Street', streetAddress2: '333 Test Street', streetAddress3: 'Test Man', - city: 'Test City', - state: 'KY', + city: 'Test City 3', + county: 'Murray 3', + state: 'KY 3', postalCode: '42703', }, secondaryDestinationAddress: { @@ -90,14 +95,16 @@ const shipment = { streetAddress2: '555 Test Street', streetAddress3: 'Test Man', city: 'Test City', - state: 'KY', - postalCode: '42701', + county: 'Murray 4', + state: 'KY 4', + postalCode: '42704', }, tertiaryDestinationAddress: { streetAddress1: '321 Test Lane', streetAddress2: '432 Test Lane', streetAddress3: 'Test Woman', city: 'Silver Spring', + county: 'Montgomery', state: 'MD', postalCode: '20906', }, @@ -157,11 +164,13 @@ const initialValues = { function renderShipmentUpdatePPMForm(props) { render( - -

- - - , + + +
+ + +
+
, ); } @@ -182,9 +191,17 @@ describe('PrimeUIShipmentUpdatePPMForm', () => { expect(await screen.getAllByLabelText(/Address 2/)[0]).toHaveValue( initialValues.ppmShipment.pickupAddress.streetAddress2, ); - expect(await screen.getAllByLabelText('City')[0]).toHaveValue(initialValues.ppmShipment.pickupAddress.city); - expect(await screen.getAllByLabelText('State')[0]).toHaveValue(initialValues.ppmShipment.pickupAddress.state); - expect(await screen.getAllByLabelText('ZIP')[0]).toHaveValue(initialValues.ppmShipment.pickupAddress.postalCode); + expect(await screen.getAllByLabelText(/Address 3/)[0]).toHaveValue( + initialValues.ppmShipment.pickupAddress.streetAddress3, + ); + expect(screen.getAllByText('City')[0]).toBeInTheDocument(); + expect(screen.getAllByText(initialValues.ppmShipment.pickupAddress.city)[0]).toBeInTheDocument(); + expect(screen.getAllByText('State')[0]).toBeInTheDocument(); + expect(screen.getAllByText(initialValues.ppmShipment.pickupAddress.state)[0]).toBeInTheDocument(); + expect(screen.getAllByText('County')[0]).toBeInTheDocument(); + expect(screen.getAllByText(initialValues.ppmShipment.pickupAddress.county)[0]).toBeInTheDocument(); + expect(screen.getAllByText('ZIP')[0]).toBeInTheDocument(); + expect(screen.getAllByText(initialValues.ppmShipment.pickupAddress.postalCode)[0]).toBeInTheDocument(); expect(await screen.getAllByLabelText('Address 1')[1]).toHaveValue( initialValues.ppmShipment.secondaryPickupAddress.streetAddress1, @@ -192,15 +209,17 @@ describe('PrimeUIShipmentUpdatePPMForm', () => { expect(await screen.getAllByLabelText(/Address 2/)[1]).toHaveValue( initialValues.ppmShipment.secondaryPickupAddress.streetAddress2, ); - expect(await screen.getAllByLabelText('City')[1]).toHaveValue( - initialValues.ppmShipment.secondaryPickupAddress.city, - ); - expect(await screen.getAllByLabelText('State')[1]).toHaveValue( - initialValues.ppmShipment.secondaryPickupAddress.state, - ); - expect(await screen.getAllByLabelText('ZIP')[1]).toHaveValue( - initialValues.ppmShipment.secondaryPickupAddress.postalCode, + expect(await screen.getAllByLabelText(/Address 3/)[1]).toHaveValue( + initialValues.ppmShipment.secondaryPickupAddress.streetAddress3, ); + expect(screen.getAllByText('City')[1]).toBeInTheDocument(); + expect(screen.getAllByText(initialValues.ppmShipment.secondaryPickupAddress.city)[0]).toBeInTheDocument(); + expect(screen.getAllByText('State')[1]).toBeInTheDocument(); + expect(screen.getAllByText(initialValues.ppmShipment.secondaryPickupAddress.state)[0]).toBeInTheDocument(); + expect(screen.getAllByText('County')[1]).toBeInTheDocument(); + expect(screen.getAllByText(initialValues.ppmShipment.secondaryPickupAddress.county)[0]).toBeInTheDocument(); + expect(screen.getAllByText('ZIP')[1]).toBeInTheDocument(); + expect(screen.getAllByText(initialValues.ppmShipment.secondaryPickupAddress.postalCode)[0]).toBeInTheDocument(); expect(await screen.getAllByLabelText('Address 1')[2]).toHaveValue( initialValues.ppmShipment.tertiaryPickupAddress.streetAddress1, @@ -208,13 +227,19 @@ describe('PrimeUIShipmentUpdatePPMForm', () => { expect(await screen.getAllByLabelText(/Address 2/)[2]).toHaveValue( initialValues.ppmShipment.tertiaryPickupAddress.streetAddress2, ); - expect(await screen.getAllByLabelText('City')[2]).toHaveValue(initialValues.ppmShipment.tertiaryPickupAddress.city); - expect(await screen.getAllByLabelText('State')[2]).toHaveValue( - initialValues.ppmShipment.tertiaryPickupAddress.state, - ); - expect(await screen.getAllByLabelText('ZIP')[2]).toHaveValue( - initialValues.ppmShipment.tertiaryPickupAddress.postalCode, + expect(await screen.getAllByLabelText(/Address 3/)[2]).toHaveValue( + initialValues.ppmShipment.tertiaryPickupAddress.streetAddress3, ); + expect(screen.getAllByText('City')[2]).toBeInTheDocument(); + expect(screen.getAllByText(initialValues.ppmShipment.tertiaryPickupAddress.city)[0]).toBeInTheDocument(); + expect(screen.getAllByText('State')[2]).toBeInTheDocument(); + expect(screen.getAllByText(initialValues.ppmShipment.tertiaryPickupAddress.state)[0]).toBeInTheDocument(); + expect(screen.getAllByText('County')[2]).toBeInTheDocument(); + expect(screen.getAllByText(initialValues.ppmShipment.tertiaryPickupAddress.county)[0]).toBeInTheDocument(); + expect(screen.getAllByText('ZIP')[2]).toBeInTheDocument(); + expect(screen.getAllByText(initialValues.ppmShipment.tertiaryPickupAddress.postalCode)[0]).toBeInTheDocument(); + + expect(await screen.findByText('Destination Info')).toBeInTheDocument(); expect(await screen.getAllByLabelText(/Address 1/)[3]).toHaveValue( initialValues.ppmShipment.destinationAddress.streetAddress1, @@ -222,11 +247,17 @@ describe('PrimeUIShipmentUpdatePPMForm', () => { expect(await screen.getAllByLabelText(/Address 2/)[3]).toHaveValue( initialValues.ppmShipment.destinationAddress.streetAddress2, ); - expect(await screen.getAllByLabelText('City')[3]).toHaveValue(initialValues.ppmShipment.destinationAddress.city); - expect(await screen.getAllByLabelText('State')[3]).toHaveValue(initialValues.ppmShipment.destinationAddress.state); - expect(await screen.getAllByLabelText(/ZIP/)[3]).toHaveValue( - initialValues.ppmShipment.destinationAddress.postalCode, + expect(await screen.getAllByLabelText(/Address 3/)[3]).toHaveValue( + initialValues.ppmShipment.destinationAddress.streetAddress3, ); + expect(screen.getAllByText('City')[3]).toBeInTheDocument(); + expect(screen.getAllByText(initialValues.ppmShipment.destinationAddress.city)[0]).toBeInTheDocument(); + expect(screen.getAllByText('State')[3]).toBeInTheDocument(); + expect(screen.getAllByText(initialValues.ppmShipment.destinationAddress.state)[0]).toBeInTheDocument(); + expect(screen.getAllByText('County')[3]).toBeInTheDocument(); + expect(screen.getAllByText(initialValues.ppmShipment.destinationAddress.county)[0]).toBeInTheDocument(); + expect(screen.getAllByText('ZIP')[3]).toBeInTheDocument(); + expect(screen.getAllByText(initialValues.ppmShipment.destinationAddress.postalCode)[0]).toBeInTheDocument(); expect(await screen.getAllByLabelText(/Address 1/)[4]).toHaveValue( initialValues.ppmShipment.secondaryDestinationAddress.streetAddress1, @@ -234,15 +265,19 @@ describe('PrimeUIShipmentUpdatePPMForm', () => { expect(await screen.getAllByLabelText(/Address 2/)[4]).toHaveValue( initialValues.ppmShipment.secondaryDestinationAddress.streetAddress2, ); - expect(await screen.getAllByLabelText(/City/)[4]).toHaveValue( - initialValues.ppmShipment.secondaryDestinationAddress.city, - ); - expect(await screen.getAllByLabelText('State')[4]).toHaveValue( - initialValues.ppmShipment.secondaryDestinationAddress.state, - ); - expect(await screen.getAllByLabelText(/ZIP/)[4]).toHaveValue( - initialValues.ppmShipment.secondaryDestinationAddress.postalCode, + expect(await screen.getAllByLabelText(/Address 3/)[4]).toHaveValue( + initialValues.ppmShipment.secondaryDestinationAddress.streetAddress3, ); + expect(screen.getAllByText('City')[4]).toBeInTheDocument(); + expect(screen.getAllByText(initialValues.ppmShipment.secondaryDestinationAddress.city)[0]).toBeInTheDocument(); + expect(screen.getAllByText('State')[4]).toBeInTheDocument(); + expect(screen.getAllByText(initialValues.ppmShipment.secondaryDestinationAddress.state)[0]).toBeInTheDocument(); + expect(screen.getAllByText('County')[4]).toBeInTheDocument(); + expect(screen.getAllByText(initialValues.ppmShipment.secondaryDestinationAddress.county)[0]).toBeInTheDocument(); + expect(screen.getAllByText('ZIP')[4]).toBeInTheDocument(); + expect( + screen.getAllByText(initialValues.ppmShipment.secondaryDestinationAddress.postalCode)[0], + ).toBeInTheDocument(); expect(await screen.getAllByLabelText(/Address 1/)[5]).toHaveValue( initialValues.ppmShipment.tertiaryDestinationAddress.streetAddress1, @@ -250,15 +285,17 @@ describe('PrimeUIShipmentUpdatePPMForm', () => { expect(await screen.getAllByLabelText(/Address 2/)[5]).toHaveValue( initialValues.ppmShipment.tertiaryDestinationAddress.streetAddress2, ); - expect(await screen.getAllByLabelText(/City/)[5]).toHaveValue( - initialValues.ppmShipment.tertiaryDestinationAddress.city, - ); - expect(await screen.getAllByLabelText('State')[5]).toHaveValue( - initialValues.ppmShipment.tertiaryDestinationAddress.state, - ); - expect(await screen.getAllByLabelText(/ZIP/)[5]).toHaveValue( - initialValues.ppmShipment.tertiaryDestinationAddress.postalCode, + expect(await screen.getAllByLabelText(/Address 3/)[5]).toHaveValue( + initialValues.ppmShipment.tertiaryDestinationAddress.streetAddress3, ); + expect(screen.getAllByText('City')[5]).toBeInTheDocument(); + expect(screen.getAllByText(initialValues.ppmShipment.tertiaryDestinationAddress.city)[0]).toBeInTheDocument(); + expect(screen.getAllByText('State')[5]).toBeInTheDocument(); + expect(screen.getAllByText(initialValues.ppmShipment.tertiaryDestinationAddress.state)[0]).toBeInTheDocument(); + expect(screen.getAllByText('County')[5]).toBeInTheDocument(); + expect(screen.getAllByText(initialValues.ppmShipment.tertiaryDestinationAddress.county)[0]).toBeInTheDocument(); + expect(screen.getAllByText('ZIP')[5]).toBeInTheDocument(); + expect(screen.getAllByText(initialValues.ppmShipment.tertiaryDestinationAddress.postalCode)[0]).toBeInTheDocument(); expect(await screen.findByText('Storage In Transit (SIT)')).toBeInTheDocument(); expect(await screen.findByLabelText('SIT Expected')).toBeChecked(); diff --git a/src/utils/formatters.js b/src/utils/formatters.js index 1470ad756ad..60f06a1f6c3 100644 --- a/src/utils/formatters.js +++ b/src/utils/formatters.js @@ -411,8 +411,10 @@ export const formatAddressForPrimeAPI = (address) => { streetAddress2: address.streetAddress2, streetAddress3: address.streetAddress3, city: address.city, + county: address.county, state: address.state, postalCode: address.postalCode, + usPostRegionCitiesID: address.usPostRegionCitiesID, }; }; @@ -424,8 +426,10 @@ export const formatExtraAddressForPrimeAPI = (address) => { streetAddress2: address.streetAddress2, streetAddress3: address.streetAddress3, city: address.city, + county: address.county, state: address.state, postalCode: address.postalCode, + usPostRegionCitiesID: address.usPostRegionCitiesID, }; }; @@ -433,6 +437,7 @@ const emptyAddress = { streetAddress1: '', streetAddress2: '', city: '', + county: '', state: '', postalCode: '', }; @@ -446,8 +451,10 @@ export function fromPrimeAPIAddressFormat(address) { streetAddress2: address.streetAddress2, streetAddress3: address.streetAddress3, city: address.city, + county: address.county, state: address.state, postalCode: address.postalCode, + usPostRegionCitiesID: address.usPostRegionCitiesID, }; } diff --git a/src/utils/formatters.test.js b/src/utils/formatters.test.js index 481cea6cf7a..7a9d8135958 100644 --- a/src/utils/formatters.test.js +++ b/src/utils/formatters.test.js @@ -323,6 +323,8 @@ describe('formatters', () => { streetAddress1: '54321 Any Street', streetAddress2: '', streetAddress3: '', + county: 'Los Angeles', + usPostRegionCitiesID: '7e37ec98-ffae-4c4a-9208-ac80002ac299', }; const addressWithLine2And3 = { @@ -333,6 +335,8 @@ describe('formatters', () => { streetAddress1: '12345 Any Street', streetAddress2: 'Apt 12B', streetAddress3: 'c/o Leo Spaceman', + county: 'Los Angeles', + usPostRegionCitiesID: '7e37ec98-ffae-4c4a-9208-ac80002ac299', }; expect(formatters.formatCustomerContactFullAddress(addressWithoutLine2And3)).toEqual( diff --git a/src/utils/validation.js b/src/utils/validation.js index c50d30e5c02..6053d83ce30 100644 --- a/src/utils/validation.js +++ b/src/utils/validation.js @@ -109,7 +109,9 @@ export const requiredW2AddressSchema = Yup.object().shape({ export const addressSchema = Yup.object().shape({ streetAddress1: Yup.string(), streetAddress2: Yup.string(), + streetAddress3: Yup.string(), city: Yup.string(), + county: Yup.string(), state: Yup.string().length(2, 'Must use state abbreviation'), postalCode: Yup.string().matches(ZIP_CODE_REGEX, 'Must be valid zip code'), }); diff --git a/swagger-def/definitions/Address.yaml b/swagger-def/definitions/Address.yaml index baa869f59b3..0c018795ee2 100644 --- a/swagger-def/definitions/Address.yaml +++ b/swagger-def/definitions/Address.yaml @@ -161,6 +161,10 @@ properties: type: string format: uuid example: c56a4180-65aa-42ec-a945-5fd21dec0538 + destinationGbloc: + type: string + pattern: '^[A-Z]{4}$' + x-nullable: true required: - streetAddress1 - city diff --git a/swagger-def/prime.yaml b/swagger-def/prime.yaml index 3145b3a8e08..f34788446eb 100644 --- a/swagger-def/prime.yaml +++ b/swagger-def/prime.yaml @@ -952,7 +952,17 @@ paths: **NOTE**: In order to create a payment request for most service items, the shipment *must* be updated with the `PrimeActualWeight` value via [updateMTOShipment](#operation/updateMTOShipment). - **FSC - Fuel Surcharge** service items require `ActualPickupDate` to be updated on the shipment. + If `WeightBilled` is not provided then the full shipment weight (`PrimeActualWeight`) will be considered in the calculation. + + **NOTE**: Diversions have a unique calcuation for payment requests without a `WeightBilled` parameter. + + If you created a payment request for a diversion and `WeightBilled` is not provided, then the following will be used in the calculation: + - The lowest shipment weight (`PrimeActualWeight`) found in the diverted shipment chain. + - The lowest reweigh weight found in the diverted shipment chain. + + The diverted shipment chain is created by referencing the `diversion` boolean, `divertedFromShipmentId` UUID, and matching destination to pickup addresses. + If the chain cannot be established it will fall back to the `PrimeActualWeight` of the current shipment. This is utilized because diverted shipments are all one single shipment, but going to different locations. + The lowest weight found is the true shipment weight, and thus we search the chain of shipments for the lowest weight found. A service item can be on several payment requests in the case of partial payment requests and payments. @@ -979,19 +989,102 @@ paths: } ``` - SIT Service Items & Accepted Payment Request Parameters: + Domestic Basic Service Items & Accepted Payment Request Parameters: --- - If `WeightBilled` is not provided then the full shipment weight (`PrimeActualWeight`) will be considered in the calculation. - **NOTE**: Diversions have a unique calcuation for payment requests without a `WeightBilled` parameter. + **DLH - Domestic Linehaul** + ```json + "params": [ + { + "key": "WeightBilled", + "value": "integer" + } + ] + ``` - If you created a payment request for a diversion and `WeightBilled` is not provided, then the following will be used in the calculation: - - The lowest shipment weight (`PrimeActualWeight`) found in the diverted shipment chain. - - The lowest reweigh weight found in the diverted shipment chain. + **DSH - Domestic Shorthaul** + ```json + "params": [ + { + "key": "WeightBilled", + "value": "integer" + } + ] + ``` - The diverted shipment chain is created by referencing the `diversion` boolean, `divertedFromShipmentId` UUID, and matching destination to pickup addresses. - If the chain cannot be established it will fall back to the `PrimeActualWeight` of the current shipment. This is utilized because diverted shipments are all one single shipment, but going to different locations. - The lowest weight found is the true shipment weight, and thus we search the chain of shipments for the lowest weight found. + **FSC - Fuel Surcharge** + **NOTE**: FSC requires `ActualPickupDate` to be updated on the shipment. + ```json + "params": [ + { + "key": "WeightBilled", + "value": "integer" + } + ] + ``` + + **DUPK - Domestic Unpacking** + ```json + "params": [ + { + "key": "WeightBilled", + "value": "integer" + } + ] + ``` + + **DPK - Domestic Packing** + ```json + "params": [ + { + "key": "WeightBilled", + "value": "integer" + } + ] + ``` + + **DNPK - Domestic NTS Packing** + ```json + "params": [ + { + "key": "WeightBilled", + "value": "integer" + } + ] + ``` + + **DPK - Domestic Packing** + ```json + "params": [ + { + "key": "WeightBilled", + "value": "integer" + } + ] + ``` + + **DOP - Domestic Origin Price** + ```json + "params": [ + { + "key": "WeightBilled", + "value": "integer" + } + ] + ``` + + **DDP - Domestic Destination Price** + ```json + "params": [ + { + "key": "WeightBilled", + "value": "integer" + } + ] + ``` + + Domestic SIT Service Items & Accepted Payment Request Parameters: + --- **DOFSIT - Domestic origin 1st day SIT** ```json @@ -1092,6 +1185,64 @@ paths: ] ``` --- + + International Basic Service Items & Accepted Payment Request Parameters: + --- + Just like domestic shipments & service items, if `WeightBilled` is not provided then the full shipment weight (`PrimeActualWeight`) will be considered in the calculation. + **NOTE**: `POEFSC` & `PODFSC` service items must have a port associated on the service item in order to successfully add it to a payment request. To update the port of a service item, you must use the (#operation/updateMTOServiceItem) endpoint. + + **ISLH - International Shipping & Linehaul** + ```json + "params": [ + { + "key": "WeightBilled", + "value": "integer" + } + ] + ``` + + **IHPK - International HHG Pack** + ```json + "params": [ + { + "key": "WeightBilled", + "value": "integer" + } + ] + ``` + + **IHUPK - International HHG Unpack** + ```json + "params": [ + { + "key": "WeightBilled", + "value": "integer" + } + ] + ``` + + **POEFSC - International Port of Embarkation Fuel Surcharge** + **NOTE**: POEFSC requires `ActualPickupDate` to be updated on the shipment & `POELocation` on the service item. + ```json + "params": [ + { + "key": "WeightBilled", + "value": "integer" + } + ] + ``` + + **PODFSC - International Port of Debarkation Fuel Surcharge** + **NOTE**: PODFSC requires `ActualPickupDate` to be updated on the shipment & `PODLocation` on the service item. + ```json + "params": [ + { + "key": "WeightBilled", + "value": "integer" + } + ] + ``` + --- operationId: createPaymentRequest tags: - paymentRequest diff --git a/swagger/ghc.yaml b/swagger/ghc.yaml index 7faf82b166f..4a200885fae 100644 --- a/swagger/ghc.yaml +++ b/swagger/ghc.yaml @@ -8307,6 +8307,10 @@ definitions: type: string format: uuid example: c56a4180-65aa-42ec-a945-5fd21dec0538 + destinationGbloc: + type: string + pattern: ^[A-Z]{4}$ + x-nullable: true required: - streetAddress1 - city diff --git a/swagger/internal.yaml b/swagger/internal.yaml index 84097cd100a..e6026ff442e 100644 --- a/swagger/internal.yaml +++ b/swagger/internal.yaml @@ -2758,6 +2758,10 @@ definitions: type: string format: uuid example: c56a4180-65aa-42ec-a945-5fd21dec0538 + destinationGbloc: + type: string + pattern: ^[A-Z]{4}$ + x-nullable: true required: - streetAddress1 - city diff --git a/swagger/pptas.yaml b/swagger/pptas.yaml index e2aa9b3c525..6b4223b52f7 100644 --- a/swagger/pptas.yaml +++ b/swagger/pptas.yaml @@ -245,6 +245,10 @@ definitions: type: string format: uuid example: c56a4180-65aa-42ec-a945-5fd21dec0538 + destinationGbloc: + type: string + pattern: ^[A-Z]{4}$ + x-nullable: true required: - streetAddress1 - city diff --git a/swagger/prime.yaml b/swagger/prime.yaml index e1af75ce85b..db3883e78e8 100644 --- a/swagger/prime.yaml +++ b/swagger/prime.yaml @@ -1214,8 +1214,34 @@ paths: [updateMTOShipment](#operation/updateMTOShipment). - **FSC - Fuel Surcharge** service items require `ActualPickupDate` to be - updated on the shipment. + If `WeightBilled` is not provided then the full shipment weight + (`PrimeActualWeight`) will be considered in the calculation. + + + **NOTE**: Diversions have a unique calcuation for payment requests + without a `WeightBilled` parameter. + + + If you created a payment request for a diversion and `WeightBilled` is + not provided, then the following will be used in the calculation: + + - The lowest shipment weight (`PrimeActualWeight`) found in the diverted + shipment chain. + + - The lowest reweigh weight found in the diverted shipment chain. + + + The diverted shipment chain is created by referencing the `diversion` + boolean, `divertedFromShipmentId` UUID, and matching destination to + pickup addresses. + + If the chain cannot be established it will fall back to the + `PrimeActualWeight` of the current shipment. This is utilized because + diverted shipments are all one single shipment, but going to different + locations. + + The lowest weight found is the true shipment weight, and thus we search + the chain of shipments for the lowest weight found. A service item can be on several payment requests in the case of partial @@ -1250,38 +1276,124 @@ paths: ``` - SIT Service Items & Accepted Payment Request Parameters: + Domestic Basic Service Items & Accepted Payment Request Parameters: --- - If `WeightBilled` is not provided then the full shipment weight - (`PrimeActualWeight`) will be considered in the calculation. + **DLH - Domestic Linehaul** - **NOTE**: Diversions have a unique calcuation for payment requests - without a `WeightBilled` parameter. + ```json + "params": [ + { + "key": "WeightBilled", + "value": "integer" + } + ] + ``` - If you created a payment request for a diversion and `WeightBilled` is - not provided, then the following will be used in the calculation: + **DSH - Domestic Shorthaul** - - The lowest shipment weight (`PrimeActualWeight`) found in the diverted - shipment chain. + ```json + "params": [ + { + "key": "WeightBilled", + "value": "integer" + } + ] + ``` - - The lowest reweigh weight found in the diverted shipment chain. + **FSC - Fuel Surcharge** - The diverted shipment chain is created by referencing the `diversion` - boolean, `divertedFromShipmentId` UUID, and matching destination to - pickup addresses. + **NOTE**: FSC requires `ActualPickupDate` to be updated on the shipment. - If the chain cannot be established it will fall back to the - `PrimeActualWeight` of the current shipment. This is utilized because - diverted shipments are all one single shipment, but going to different - locations. + ```json + "params": [ + { + "key": "WeightBilled", + "value": "integer" + } + ] + ``` - The lowest weight found is the true shipment weight, and thus we search - the chain of shipments for the lowest weight found. + + **DUPK - Domestic Unpacking** + + ```json + "params": [ + { + "key": "WeightBilled", + "value": "integer" + } + ] + ``` + + + **DPK - Domestic Packing** + + ```json + "params": [ + { + "key": "WeightBilled", + "value": "integer" + } + ] + ``` + + + **DNPK - Domestic NTS Packing** + + ```json + "params": [ + { + "key": "WeightBilled", + "value": "integer" + } + ] + ``` + + + **DPK - Domestic Packing** + + ```json + "params": [ + { + "key": "WeightBilled", + "value": "integer" + } + ] + ``` + + + **DOP - Domestic Origin Price** + + ```json + "params": [ + { + "key": "WeightBilled", + "value": "integer" + } + ] + ``` + + + **DDP - Domestic Destination Price** + + ```json + "params": [ + { + "key": "WeightBilled", + "value": "integer" + } + ] + ``` + + + Domestic SIT Service Items & Accepted Payment Request Parameters: + + --- **DOFSIT - Domestic origin 1st day SIT** @@ -1410,6 +1522,85 @@ paths: ``` --- + + + International Basic Service Items & Accepted Payment Request Parameters: + + --- + + Just like domestic shipments & service items, if `WeightBilled` is not + provided then the full shipment weight (`PrimeActualWeight`) will be + considered in the calculation. + + **NOTE**: `POEFSC` & `PODFSC` service items must have a port associated + on the service item in order to successfully add it to a payment + request. To update the port of a service item, you must use the + (#operation/updateMTOServiceItem) endpoint. + + + **ISLH - International Shipping & Linehaul** + + ```json + "params": [ + { + "key": "WeightBilled", + "value": "integer" + } + ] + ``` + + + **IHPK - International HHG Pack** + + ```json + "params": [ + { + "key": "WeightBilled", + "value": "integer" + } + ] + ``` + + + **IHUPK - International HHG Unpack** + + ```json + "params": [ + { + "key": "WeightBilled", + "value": "integer" + } + ] + ``` + + + **POEFSC - International Port of Embarkation Fuel Surcharge** + **NOTE**: POEFSC requires `ActualPickupDate` to be updated on the shipment & `POELocation` on the service item. + ```json + "params": [ + { + "key": "WeightBilled", + "value": "integer" + } + ] + ``` + + + **PODFSC - International Port of Debarkation Fuel Surcharge** + + **NOTE**: PODFSC requires `ActualPickupDate` to be updated on the + shipment & `PODLocation` on the service item. + + ```json + "params": [ + { + "key": "WeightBilled", + "value": "integer" + } + ] + ``` + + --- operationId: createPaymentRequest tags: - paymentRequest @@ -2971,6 +3162,10 @@ definitions: type: string format: uuid example: c56a4180-65aa-42ec-a945-5fd21dec0538 + destinationGbloc: + type: string + pattern: ^[A-Z]{4}$ + x-nullable: true required: - streetAddress1 - city diff --git a/swagger/prime_v2.yaml b/swagger/prime_v2.yaml index e77b1367ec7..93edac72104 100644 --- a/swagger/prime_v2.yaml +++ b/swagger/prime_v2.yaml @@ -1566,6 +1566,10 @@ definitions: type: string format: uuid example: c56a4180-65aa-42ec-a945-5fd21dec0538 + destinationGbloc: + type: string + pattern: ^[A-Z]{4}$ + x-nullable: true required: - streetAddress1 - city diff --git a/swagger/prime_v3.yaml b/swagger/prime_v3.yaml index c7fce10d0da..0b39e9a9de7 100644 --- a/swagger/prime_v3.yaml +++ b/swagger/prime_v3.yaml @@ -1654,6 +1654,10 @@ definitions: type: string format: uuid example: c56a4180-65aa-42ec-a945-5fd21dec0538 + destinationGbloc: + type: string + pattern: ^[A-Z]{4}$ + x-nullable: true required: - streetAddress1 - city