Skip to content

Commit

Permalink
Merge branch 'E-04371-OKTA' into E-04371-Okta
Browse files Browse the repository at this point in the history
  • Loading branch information
deandreJones authored Aug 31, 2023
2 parents 9774cdf + 7f14c2f commit 91c4ff7
Show file tree
Hide file tree
Showing 14 changed files with 359 additions and 66 deletions.
63 changes: 63 additions & 0 deletions cmd/load-spreadsheet-data/load-updated-loa-trnsn-ids.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
import os, sys, pandas as pd
from datetime import datetime

if len(sys.argv) < 2:
sys.exit("Input file required.")


# Generate to gitignored tmp directory to prevent committing secure data
current_dir = os.getcwd()
destination_directory = 'tmp/generated-secure-migrations'
filename = f"{datetime.now().strftime('%Y%m%d%H%M%S')}_update_loa_trnsn_ids.up.sql"
secure_migration_filename = (
f'{current_dir}/{destination_directory}/{filename}'
)

destination_path = f'{current_dir}/{destination_directory}'
if not os.path.exists(destination_path):
os.makedirs(destination_path)

with open(secure_migration_filename, "w+") as f:
f.write('-- Update loa_trnsn_id column constraint\n')
f.write('ALTER TABLE lines_of_accounting ALTER COLUMN loa_trnsn_id TYPE varchar (3);\n')

# Skip the first and last rows which are just "unclassified"
input_file = pd.read_excel(sys.argv[1], skiprows=1, skipfooter=1)

# Missing values should be NULL
input_file = input_file.fillna('NULL')

f.write('-- Update lines_of_accounting with updated loa_trnsn_id values, mapped by loa_sys_id\n')
f.write('UPDATE lines_of_accounting AS loas SET\n')
f.write('\tloa_trnsn_id = updated.loa_trnsn_id\n')
f.write('FROM (VALUES\n')

has_written_at_least_one_value_to_file = False
for index, row in input_file.iterrows():
loa_sys_id = row['LOA_SYS_ID']
loa_hs_gds_cd = row['LOA_HS_GDS_CD']
loa_trnsn_id = row['LOA_TRNSN_ID']

# Ignore rows where loa_sys_id is missing
if loa_sys_id == 'NULL':
continue

# Ignore rows where the loa_hs_gds_cd does not have a value, as we did during the original import
if loa_hs_gds_cd == 'NULL':
continue

# Add single quotes around non-null values, otherwise, just use NULL
loa_trnsn_id_write_value = loa_trnsn_id if loa_trnsn_id == 'NULL' else f"'{loa_trnsn_id}'"

if has_written_at_least_one_value_to_file:
# prepend next line with a comma and a newline
f.write(',\n')

f.write(f'\t({loa_sys_id}, {loa_trnsn_id_write_value})')

# Now that at least one entry has been added to the file, we know to prepend the rest with `,\n`
has_written_at_least_one_value_to_file = True

f.write('\n) AS updated(loa_sys_id, loa_trnsn_id)\n')
f.write('WHERE updated.loa_sys_id = loas.loa_sys_id;\n')
sys.exit()
Binary file modified config/tls/api.exp.dp3.us.chain.der.p7b
Binary file not shown.
64 changes: 33 additions & 31 deletions config/tls/api.exp.dp3.us.crt
Original file line number Diff line number Diff line change
@@ -1,33 +1,35 @@
-----BEGIN CERTIFICATE-----
MIIFrDCCBJSgAwIBAgIQY5O3DBUKQmj8fdDkgfjuPTANBgkqhkiG9w0BAQsFADCB
jzELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G
A1UEBxMHU2FsZm9yZDEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMTcwNQYDVQQD
Ey5TZWN0aWdvIFJTQSBEb21haW4gVmFsaWRhdGlvbiBTZWN1cmUgU2VydmVyIENB
MB4XDTIzMDgxNjAwMDAwMFoXDTIzMDkyMzIzNTk1OVowGTEXMBUGA1UEAxMOYXBp
LmV4cC5kcDMudXMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDAGT7Y
MsWEQ4NAPjszIB9wqUwJn2/8ykCePtQYJsfeBu95nKRynPHgajHGi/BgB1rNMNWV
rxfsKbtwamps5PkaeLh3M18PMolFJ/rXW+VRKO0ELIUdvOAUqx88glfEhk7f0X9o
ZK5EtNlr+qIhecg4HuyIs36HbN9sBvvspZAIuND/8JM8OHnWPbBrkrjkZdQVwKPI
oTGaBBBgc2wRlL0mYUtNGTFw8JhqdtSQtJy0cjmgqnGSuG0iGAOE+YVSrD9Tam5/
wHvUWN9fSBSaWk+EOK3bQGFxvJbZOB4YSK8iD24rQcKLRlu1TQFxoibKOellv7hU
baphs6DNJWXQlTZXAgMBAAGjggJ3MIICczAfBgNVHSMEGDAWgBSNjF7EVK2K4Xfp
m/mbBeG4AY1h4TAdBgNVHQ4EFgQUYQsWnsAmKfIe3wOZ+w8K1AXZOkIwDgYDVR0P
AQH/BAQDAgWgMAwGA1UdEwEB/wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsG
AQUFBwMCMEkGA1UdIARCMEAwNAYLKwYBBAGyMQECAgcwJTAjBggrBgEFBQcCARYX
aHR0cHM6Ly9zZWN0aWdvLmNvbS9DUFMwCAYGZ4EMAQIBMIGEBggrBgEFBQcBAQR4
MHYwTwYIKwYBBQUHMAKGQ2h0dHA6Ly9jcnQuc2VjdGlnby5jb20vU2VjdGlnb1JT
QURvbWFpblZhbGlkYXRpb25TZWN1cmVTZXJ2ZXJDQS5jcnQwIwYIKwYBBQUHMAGG
F2h0dHA6Ly9vY3NwLnNlY3RpZ28uY29tMBkGA1UdEQQSMBCCDmFwaS5leHAuZHAz
LnVzMIIBBQYKKwYBBAHWeQIEAgSB9gSB8wDxAHYArfe++nz/EMiLnT2cHj4YarRn
KV3PsQwkyoWGNOvcgooAAAGJ/56GTgAABAMARzBFAiBvXgzKBkSZ+d+QL5mKdSSR
omM7sBvCF60TBspxebUoWwIhAPz6UfNZgLEQ0jNFQIjWdgNFj2AeWmmvdlRVAbH/
5Au1AHcAejKMVNi3LbYg6jjgUh7phBZwMhOFTTvSK8E6V6NS61IAAAGJ/56GpAAA
BAMASDBGAiEA2ZJhgP//nZDuKl0yhq8dqEThD8Wi1MoMewQeZy5BVikCIQD92/V7
sTtr3Xwo2w/DXXPNqxh8g7DqwyWY357j/zh53zANBgkqhkiG9w0BAQsFAAOCAQEA
oLDWLRi4VsKrZbMW8rzpRaj5n5NSaT/SozqvNFYc+CLXZg9tw5Sht+0ES7oN4jnj
NkX5FfGMmjDChKdwZnlJqQlk0lfr5MwOwUFbFhd2QCdb9DIgMdKIxtA69eDsoClC
wLa4H7iwneqrJqdBoazEFIfgLx2eVDLFvd1CMTOz17NcOhQfu6e3sowVEE8w1k7b
6BbDgaof1RH6D2orCCR+5Lt/HLGHqCIkCLE29+I6OMy98XjDuFRiuOmCEs/XnvRs
sCHTOar8AhS0mfhTwDM65NoH73YGu0x9yrue63ggEQFxyEwLAkYkDBZzflBDxGs/
2yHosMRiVcZdsf4MnAOlZA==
MIIGJzCCBQ+gAwIBAgIRAJnYZ2WO1CLAL7Jyc6GFkaYwDQYJKoZIhvcNAQELBQAw
gY8xCzAJBgNVBAYTAkdCMRswGQYDVQQIExJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAO
BgNVBAcTB1NhbGZvcmQxGDAWBgNVBAoTD1NlY3RpZ28gTGltaXRlZDE3MDUGA1UE
AxMuU2VjdGlnbyBSU0EgRG9tYWluIFZhbGlkYXRpb24gU2VjdXJlIFNlcnZlciBD
QTAeFw0yMzA4MjUwMDAwMDBaFw0yNDA5MjMyMzU5NTlaMBkxFzAVBgNVBAMTDmFw
aS5leHAuZHAzLnVzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwBk+
2DLFhEODQD47MyAfcKlMCZ9v/MpAnj7UGCbH3gbveZykcpzx4GoxxovwYAdazTDV
la8X7Cm7cGpqbOT5Gni4dzNfDzKJRSf611vlUSjtBCyFHbzgFKsfPIJXxIZO39F/
aGSuRLTZa/qiIXnIOB7siLN+h2zfbAb77KWQCLjQ//CTPDh51j2wa5K45GXUFcCj
yKExmgQQYHNsEZS9JmFLTRkxcPCYanbUkLSctHI5oKpxkrhtIhgDhPmFUqw/U2pu
f8B71FjfX0gUmlpPhDit20BhcbyW2TgeGEivIg9uK0HCi0ZbtU0BcaImyjnpZb+4
VG2qYbOgzSVl0JU2VwIDAQABo4IC8TCCAu0wHwYDVR0jBBgwFoAUjYxexFStiuF3
6Zv5mwXhuAGNYeEwHQYDVR0OBBYEFGELFp7AJinyHt8DmfsPCtQF2TpCMA4GA1Ud
DwEB/wQEAwIFoDAMBgNVHRMBAf8EAjAAMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggr
BgEFBQcDAjBJBgNVHSAEQjBAMDQGCysGAQQBsjEBAgIHMCUwIwYIKwYBBQUHAgEW
F2h0dHBzOi8vc2VjdGlnby5jb20vQ1BTMAgGBmeBDAECATCBhAYIKwYBBQUHAQEE
eDB2ME8GCCsGAQUFBzAChkNodHRwOi8vY3J0LnNlY3RpZ28uY29tL1NlY3RpZ29S
U0FEb21haW5WYWxpZGF0aW9uU2VjdXJlU2VydmVyQ0EuY3J0MCMGCCsGAQUFBzAB
hhdodHRwOi8vb2NzcC5zZWN0aWdvLmNvbTAZBgNVHREEEjAQgg5hcGkuZXhwLmRw
My51czCCAX8GCisGAQQB1nkCBAIEggFvBIIBawFpAHUAdv+IPwq2+5VRwmHM9Ye6
NLSkzbsp3GhCCp/mZ0xaOnQAAAGKKg5KNQAABAMARjBEAiA9H/mNZeEsJkfgZpmS
CcwbpSM66uNB4ucavhWhfxuFnQIgZ4IF9XyIIxvjg1S/Xt0cbhkIWhRErlaE1FME
nMvlMuoAdwDatr9rP7W2Ip+bwrtca+hwkXFsu1GEhTS9pD0wSNf7qwAAAYoqDkqF
AAAEAwBIMEYCIQCG+ADYuRQqVwkVSWK+vLoTfnqiToRGb4Ldnug3v6/LPAIhAIt0
nS6CvRvnUkaCABua5iTL11PLaAVXA0b2+TDIvvSPAHcA7s3QZNXbGs7FXLedtM0T
ojKHRny87N7DUUhZRnEftZsAAAGKKg5KWwAABAMASDBGAiEA2oKWPOxwiao9+frp
eWum121dFJJS9bYbYoReuttH0H4CIQCOmzDdVIgOROhYAT84NT2qNEZEx+B/Au2g
+3aQglpf+jANBgkqhkiG9w0BAQsFAAOCAQEAv6+uGv+Jwip9QqmNfgiY7wZWtZSP
HAi3fzjsgVoWTry6XwPdwud7Vi1YHaK1e9TA3sMMibzbsNiezsFUTk/05Bruh6lk
2F6jIxVhRTZzRE0qMz//t8x5hBxQgH9A+9KaQhZXc/zAhZGsbsz0CmBnNFsyULJj
DBVrZkjAjL41iIwO2iMcDvIRd0mWnSbd9TPPKyn6z79f4nVVDNbr1t/+dSnuKI22
Y2GT0DMMtthe1zSRnbXdu1zfdNI3iGq2i6MGtWOoUY1ROYuyOP5bUH1k1ftnm+Oo
KqiuYXKdvu+seL14OHYaP5TDZTce7OGn8iZD4ZY6nLLA919Cfz0zt9T3YA==
-----END CERTIFICATE-----
Binary file modified config/tls/api.loadtest.dp3.us.chain.der.p7b
Binary file not shown.
68 changes: 34 additions & 34 deletions config/tls/api.loadtest.dp3.us.crt
Original file line number Diff line number Diff line change
@@ -1,36 +1,36 @@
-----BEGIN CERTIFICATE-----
MIIGLTCCBRWgAwIBAgIQbKZa26vVIPynjPDPxS+9mDANBgkqhkiG9w0BAQsFADCB
jzELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G
A1UEBxMHU2FsZm9yZDEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMTcwNQYDVQQD
Ey5TZWN0aWdvIFJTQSBEb21haW4gVmFsaWRhdGlvbiBTZWN1cmUgU2VydmVyIENB
MB4XDTIzMDEwNjAwMDAwMFoXDTIzMDkyMjIzNTk1OVowHjEcMBoGA1UEAxMTYXBp
LmxvYWR0ZXN0LmRwMy51czCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
ALMUQbd0XxvhzWMmTUsL0hwCQRP8tzn0zK1m34k7oxD8QtFtqcDtMBdJIKdcZoJM
cTN+uPIAKFzeLeG0GlP2tQId6iPwtxHNmqvntpdhY8XAM3Tbnd6kJE7TC8ocanvi
LWyEz+yjaX67FjnMv7izzr7vja3dt8vHOTnrObkGOzrUSNR0TdxX0Jp1h0fkiv0L
DzHyAwIa3eE7A376nT4ILHAiGlJWlGz0CS35JRTtBwDZZvu1nRtQXn87aNzhR5CQ
01Z6wLhnUU1JFsi90Hrrna4Ns5AQ2oqnzwXVHJ28A4EOevOr6VWm/C9Rkky1RnqM
zxEpqkveqvI4yHmIu35epcMCAwEAAaOCAvMwggLvMB8GA1UdIwQYMBaAFI2MXsRU
rYrhd+mb+ZsF4bgBjWHhMB0GA1UdDgQWBBSQx3Kn2vf9NyJzNGu5So/Qq8LvDDAO
BgNVHQ8BAf8EBAMCBaAwDAYDVR0TAQH/BAIwADAdBgNVHSUEFjAUBggrBgEFBQcD
AQYIKwYBBQUHAwIwSQYDVR0gBEIwQDA0BgsrBgEEAbIxAQICBzAlMCMGCCsGAQUF
BwIBFhdodHRwczovL3NlY3RpZ28uY29tL0NQUzAIBgZngQwBAgEwgYQGCCsGAQUF
BwEBBHgwdjBPBggrBgEFBQcwAoZDaHR0cDovL2NydC5zZWN0aWdvLmNvbS9TZWN0
aWdvUlNBRG9tYWluVmFsaWRhdGlvblNlY3VyZVNlcnZlckNBLmNydDAjBggrBgEF
BQcwAYYXaHR0cDovL29jc3Auc2VjdGlnby5jb20wHgYDVR0RBBcwFYITYXBpLmxv
YWR0ZXN0LmRwMy51czCCAXwGCisGAQQB1nkCBAIEggFsBIIBaAFmAHYArfe++nz/
EMiLnT2cHj4YarRnKV3PsQwkyoWGNOvcgooAAAGFiKPcggAABAMARzBFAiEAll7N
CypOd/TEEpXsxsTeAfKMcnWthQGDaw6TKBdGwAACIG/oarTEPEXD6fYL8V9FgBAT
FUTfU79vgE+8KfqmIeqkAHUAejKMVNi3LbYg6jjgUh7phBZwMhOFTTvSK8E6V6NS
61IAAAGFiKPcdQAABAMARjBEAiBwU60fnC680c80zae9SUnYoMqBywK2hmfucIXf
Jo2SVAIgeiFb15Awef4Kf2MwBeDHhB85Ev2v6Zdlu2nJE22/1XQAdQDoPtDaPvUG
NTLnVyi8iWvJA9PL0RFr7Otp4Xd9bQa9bgAAAYWIo9w6AAAEAwBGMEQCIGRHjXrC
i4yhkHW6/8NUc9ez/SxdqE3NANCVhCdZaIRqAiBgdC/bnsw6uf7cynS1nCt9B5AG
L5xeYOVtu6fgB4JERzANBgkqhkiG9w0BAQsFAAOCAQEASiG9H47kMcEaT6M39ELK
JtI0Sz9Y6wkKcPvuGN0T6nEaPAgjRS+ZG3NGsXjhjrLnQrs3PxWEduKdLj47xAq8
Gr3j+LLv+EeSU3wIsey8FM8FxmN2HC9NKNQtcIuhSUO12+d5a8EcNQBtLA7ncHa9
diT7h2ZfkYv3nsq8lGSlY//PtduwSsvYM+V0RQz+Dq0TZrygBOABiH+f7E4ZKQlj
KTCbEhFC5jDbm4IE88zBbE29naidgWAttJD6jAdvQ+7lY3yhX2q5z7HcmAAMVxGh
9aaR4FLkc3clgwvr+j0IIqQgtic56PhX6NsC8xXhesuPRWOOVH6b+3FqI0SSMh2h
Ag==
MIIGMTCCBRmgAwIBAgIRAObSiatB91zjrlkLzaI42EgwDQYJKoZIhvcNAQELBQAw
gY8xCzAJBgNVBAYTAkdCMRswGQYDVQQIExJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAO
BgNVBAcTB1NhbGZvcmQxGDAWBgNVBAoTD1NlY3RpZ28gTGltaXRlZDE3MDUGA1UE
AxMuU2VjdGlnbyBSU0EgRG9tYWluIFZhbGlkYXRpb24gU2VjdXJlIFNlcnZlciBD
QTAeFw0yMzA4MjQwMDAwMDBaFw0yNDA5MjIyMzU5NTlaMB4xHDAaBgNVBAMTE2Fw
aS5sb2FkdGVzdC5kcDMudXMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
AQCzFEG3dF8b4c1jJk1LC9IcAkET/Lc59MytZt+JO6MQ/ELRbanA7TAXSSCnXGaC
THEzfrjyAChc3i3htBpT9rUCHeoj8LcRzZqr57aXYWPFwDN0253epCRO0wvKHGp7
4i1shM/so2l+uxY5zL+4s86+742t3bfLxzk56zm5Bjs61EjUdE3cV9CadYdH5Ir9
Cw8x8gMCGt3hOwN++p0+CCxwIhpSVpRs9Akt+SUU7QcA2Wb7tZ0bUF5/O2jc4UeQ
kNNWesC4Z1FNSRbIvdB6652uDbOQENqKp88F1RydvAOBDnrzq+lVpvwvUZJMtUZ6
jM8RKapL3qryOMh5iLt+XqXDAgMBAAGjggL2MIIC8jAfBgNVHSMEGDAWgBSNjF7E
VK2K4Xfpm/mbBeG4AY1h4TAdBgNVHQ4EFgQUkMdyp9r3/TciczRruUqP0KvC7www
DgYDVR0PAQH/BAQDAgWgMAwGA1UdEwEB/wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUH
AwEGCCsGAQUFBwMCMEkGA1UdIARCMEAwNAYLKwYBBAGyMQECAgcwJTAjBggrBgEF
BQcCARYXaHR0cHM6Ly9zZWN0aWdvLmNvbS9DUFMwCAYGZ4EMAQIBMIGEBggrBgEF
BQcBAQR4MHYwTwYIKwYBBQUHMAKGQ2h0dHA6Ly9jcnQuc2VjdGlnby5jb20vU2Vj
dGlnb1JTQURvbWFpblZhbGlkYXRpb25TZWN1cmVTZXJ2ZXJDQS5jcnQwIwYIKwYB
BQUHMAGGF2h0dHA6Ly9vY3NwLnNlY3RpZ28uY29tMB4GA1UdEQQXMBWCE2FwaS5s
b2FkdGVzdC5kcDMudXMwggF/BgorBgEEAdZ5AgQCBIIBbwSCAWsBaQB3AHb/iD8K
tvuVUcJhzPWHujS0pM27KdxoQgqf5mdMWjp0AAABiiTn6VQAAAQDAEgwRgIhAMZs
IwyQArMxkQ8Etk0qHpc5TQPa83xrUIFqrgRX6hf2AiEAis9+SX2fuFCYTSwfsLLP
a7F2aifKyrQSPSzZVQx60QUAdgDatr9rP7W2Ip+bwrtca+hwkXFsu1GEhTS9pD0w
SNf7qwAAAYok5+mmAAAEAwBHMEUCICWFyZh0szQKM6Golr0s4eHXBaXAf4lXGGLE
CPP/qqkcAiEA6i5BknyCyI77pV1TvOZtnKUflh6ciXFCa5YpxbP9SssAdgDuzdBk
1dsazsVct520zROiModGfLzs3sNRSFlGcR+1mwAAAYok5+mBAAAEAwBHMEUCIGVc
4duwRf7mYB0fPNmDfY3A99wMdwaUHIVjjqe2kXtQAiEAh13YuzUs2Tv2zY5yxaR7
dNX3P5so0npliQEaJhauDsEwDQYJKoZIhvcNAQELBQADggEBAH0mHBtGdQcBaY+k
s42T/QZUgiIyALY7B79pCNSIBTK4x5DhXbbCezhnhU2oB/5xqhbhMAy/q80OE1GB
e8YWIjM8i5DG+st/8SxPMcouHsMPz1A5yQ2Lql+JGDn+5Ht6HrU9SjXVQA0ByoOP
iPrNOUZ8hnNkN+zB9N4CmfkHtJo39MKw+V2mCWZWgPmaRdI27CeVU9kkDVZ2C93k
0VbirQCQF18h9AQ1tVtBOvlj5shiIiJ0DAqlkNKRDT1uvjFhtIt/wUV+qrb6lGtu
BYhyP8QJgl12e9qzYS3gT75CJU+hVROGSZz+01XNJONsTpXL2kzj+/iLgBkdD26l
Dk5VUhk=
-----END CERTIFICATE-----
2 changes: 2 additions & 0 deletions migrations/app/migrations_manifest.txt
Original file line number Diff line number Diff line change
Expand Up @@ -846,6 +846,8 @@
20230808155723_add_ns_mayport.up.sql
20230822201206_add_fields_for_sit_to_mto_service_items.up.sql
20230823194524_copy_loginGov_oktaEmail.up.sql
20230808155723_add_ns_mayport.up.sql
20230824200422_update_loa_trnsn_ids.up.sql
20230824224954_ghc_domestic_transit_times_update_data_migration.up.sql
20230828180000_update_mayport_zip.up.sql
20230828180001_update_mayport_services_counseling.up.sql
Expand Down
21 changes: 21 additions & 0 deletions migrations/app/secure/20230824200422_update_loa_trnsn_ids.up.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
-- Local test migration.
-- This will be run on development environments.
-- It should mirror what you intend to apply on loadtest/demo/exp/stg/prd
-- DO NOT include any sensitive data.

-- Update loa_trnsn_id column constraint
ALTER TABLE lines_of_accounting ALTER COLUMN loa_trnsn_id TYPE varchar (3);
-- Update lines_of_accounting with updated loa_trnsn_id values, mapped by loa_sys_id
UPDATE lines_of_accounting AS loas SET
loa_trnsn_id = updated.loa_trnsn_id
FROM (VALUES
(10002, NULL),
(10001, 'A1'),
(10003, 'B1'),
(10004, NULL),
(10005, 'C1'),
(10006, 'AB'),
(10007, NULL),
(10008, 'C12')
) AS updated(loa_sys_id, loa_trnsn_id)
WHERE updated.loa_sys_id = loas.loa_sys_id;
2 changes: 1 addition & 1 deletion pkg/factory/line_of_accounting_factory.go
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ func BuildFullLineOfAccounting(db *pop.Connection) models.LineOfAccounting {
LoaHsGdsCd: models.StringPointer("12"),
OrgGrpDfasCd: models.StringPointer("12"),
LoaUic: models.StringPointer("123456"),
LoaTrnsnID: models.StringPointer("LoaTrnsnID"),
LoaTrnsnID: models.StringPointer("123"),
LoaSubAcntID: models.StringPointer("123"),
LoaBetCd: models.StringPointer("1234"),
LoaFndTyFgCd: models.StringPointer("1"),
Expand Down
14 changes: 14 additions & 0 deletions pkg/models/re_zip3s.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,3 +45,17 @@ func (r *ReZip3) Validate(_ *pop.Connection) (*validate.Errors, error) {
&validators.UUIDIsPresent{Field: r.DomesticServiceAreaID, Name: "DomesticServiceAreaID"},
), nil
}

// FetchReZip3Item returns an reZip3 for a given zip3
func FetchReZip3Item(tx *pop.Connection, zip3 string) (*ReZip3, error) {
var reZip3 ReZip3
err := tx.
Where("zip3 = $1", zip3).
First(&reZip3)

if err != nil {
return nil, err
}

return &reZip3, err
}
14 changes: 14 additions & 0 deletions pkg/models/re_zip3s_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"github.com/gofrs/uuid"

"github.com/transcom/mymove/pkg/models"
"github.com/transcom/mymove/pkg/testdatagen"
)

func (suite *ModelSuite) TestReZip3Validations() {
Expand Down Expand Up @@ -44,4 +45,17 @@ func (suite *ModelSuite) TestReZip3Validations() {
}
suite.verifyValidationErrors(&invalidReZip3, expErrors)
})

suite.Run("test FetchReZip3Item", func() {
zip3 := "606"
testdatagen.MakeReZip3(suite.DB(), testdatagen.Assertions{
ReZip3: models.ReZip3{
Zip3: zip3,
},
})

reZip3, err := models.FetchReZip3Item(suite.DB(), zip3)
suite.Nil(err)
suite.Equal(zip3, reZip3.Zip3)
})
}
18 changes: 18 additions & 0 deletions pkg/route/hhg_planner.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ package route
import (
"fmt"

"go.uber.org/zap"

"github.com/transcom/mymove/pkg/appcontext"
"github.com/transcom/mymove/pkg/models"
)
Expand Down Expand Up @@ -63,6 +65,22 @@ func (p *hhgPlanner) ZipTransitDistance(appCtx appcontext.AppContext, source str
return p.dtodPlannerMileage.DTODZip5Distance(appCtx, source, destination)
}

// Get reZip3s for origin and destination to compare base point cities.
// Dont throw/return errors from this. If we dont find them, we'll just use randMcNallyZip3Distance
sourceReZip3, sErr := models.FetchReZip3Item(appCtx.DB(), sourceZip3)
if sErr != nil {
appCtx.Logger().Error("Failed to fetch the reZip3 item for sourceZip3", zap.Error(sErr))
}
destinationReZip3, dErr := models.FetchReZip3Item(appCtx.DB(), destZip3)
if dErr != nil {
appCtx.Logger().Error("Failed to fetch the reZip3 item for destinationZip3", zap.Error(dErr))
}

// Different zip3, same base point city, use DTOD
if sourceReZip3 != nil && destinationReZip3 != nil && sourceReZip3.BasePointCity == destinationReZip3.BasePointCity {
return p.dtodPlannerMileage.DTODZip5Distance(appCtx, source, destination)
}

return randMcNallyZip3Distance(appCtx, sourceZip3, destZip3)
}

Expand Down
38 changes: 38 additions & 0 deletions pkg/route/hhg_planner_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,44 @@ func (suite *GHCTestSuite) TestHHGZipTransitDistance() {
suite.Equal(1, distance)
})

suite.Run("Uses DTOD for distance when origin/dest zips differ but are in the same base point city", func() {
// Mock DTOD distance response
testSoapClient := &ghcmocks.SoapCaller{}
testSoapClient.On("Call",
mock.Anything,
mock.Anything,
).Return(soapResponseForDistance("166"), nil)

// Create two zip3s in the same base point city (Miami)
testdatagen.MakeReZip3(suite.DB(), testdatagen.Assertions{
ReZip3: models.ReZip3{
Zip3: "330",
BasePointCity: "Miami",
State: "FL",
},
})
testdatagen.MakeReZip3(suite.DB(), testdatagen.Assertions{
ReZip3: models.ReZip3{
Zip3: "331",
BasePointCity: "Miami",
State: "FL",
},
ReDomesticServiceArea: models.ReDomesticServiceArea{
ServiceArea: "005",
},
})

plannerMileage := NewDTODZip5Distance(fakeUsername, fakePassword, testSoapClient)
planner := NewHHGPlanner(plannerMileage)

// Get distance between two zips in the same base point city
distance, err := planner.ZipTransitDistance(suite.AppContextForTest(), "33169", "33040")
suite.NoError(err)

// Ensure DTOD was used for distance
suite.Equal(166, distance)
})

suite.Run("fake DTOD returns an error", func() {
testSoapClient := &ghcmocks.SoapCaller{}
testSoapClient.On("Call",
Expand Down
3 changes: 3 additions & 0 deletions pkg/testdatagen/testharness/dispatch.go
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,9 @@ var actionDispatcher = map[string]actionFunc{
"PrimeSimulatorMoveNeedsShipmentUpdate": func(appCtx appcontext.AppContext) testHarnessResponse {
return MakePrimeSimulatorMoveNeedsShipmentUpdate(appCtx)
},
"MakePrimeSimulatorMoveSameBasePointCity": func(appCtx appcontext.AppContext) testHarnessResponse {
return MakePrimeSimulatorMoveSameBasePointCity(appCtx)
},
"NeedsOrdersUser": func(appCtx appcontext.AppContext) testHarnessResponse {
return MakeNeedsOrdersUser(appCtx.DB())
},
Expand Down
Loading

0 comments on commit 91c4ff7

Please sign in to comment.