Skip to content

Commit 6878746

Browse files
committed
[UPD] base_wamas_ubl: update address export
1 parent 171bdc4 commit 6878746

15 files changed

+243
-54
lines changed

base_wamas_ubl/lib/wamas/test_utils.py

+51-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,20 @@
11
import ast
22
import unittest
33

4+
import xmltodict
5+
from dotty_dict import Dotty
46
from freezegun import freeze_time
5-
from utils import dict2wamas, file_open, file_path
7+
from utils import (
8+
dict2wamas,
9+
file_open,
10+
file_path,
11+
get_address_elements,
12+
get_Adrs_Adr,
13+
get_Adrs_Name,
14+
get_Adrs_Name2,
15+
get_Adrs_Name3,
16+
get_Adrs_Name4,
17+
)
618

719

820
class TestUtils(unittest.TestCase):
@@ -29,6 +41,44 @@ def testDict2wamas(self):
2941
output = dict2wamas(ast.literal_eval(str_dict_input), telegram)
3042
self.assertEqual(output, expected_output)
3143

44+
def testGetAddressNamePicking(self):
45+
infile = file_open(
46+
file_path("tests/samples/UBL2WAMAS-SAMPLE_AUSK_AUSP-DESPATCH_ADVICE.xml")
47+
).read()
48+
dict_item = Dotty(xmltodict.parse(infile))
49+
address_elements = get_address_elements(dict_item)
50+
self.assertEqual(
51+
address_elements,
52+
{
53+
"ContactName": "Chester Reed",
54+
"PartyName": "YourCompany",
55+
"Department": "Department_1",
56+
"StreetName": "250 Executive Park Blvd, Suite 3400",
57+
"AdditionalStreetName": "AdditionalStreetName_1",
58+
},
59+
)
60+
self.assertEqual(get_Adrs_Name(address_elements), "Chester Reed")
61+
self.assertEqual(get_Adrs_Name2(address_elements), "YourCompany")
62+
self.assertEqual(get_Adrs_Name3(address_elements), "Department_1")
63+
self.assertEqual(
64+
get_Adrs_Name4(address_elements), "250 Executive Park Blvd, Suite 3400"
65+
)
66+
self.assertEqual(get_Adrs_Adr(address_elements), "AdditionalStreetName_1")
67+
68+
def testGetAddressNameFromDict(self):
69+
address_elements = {
70+
"ContactName": "Nom",
71+
"PartyName": "YourCompany",
72+
"Department": "Nom3",
73+
"StreetName": "Nom4",
74+
"AdditionalStreetName": "Adresse",
75+
}
76+
self.assertEqual(get_Adrs_Name(address_elements), "Nom")
77+
self.assertEqual(get_Adrs_Name2(address_elements), "YourCompany")
78+
self.assertEqual(get_Adrs_Name3(address_elements), "Nom3")
79+
self.assertEqual(get_Adrs_Name4(address_elements), "Nom4")
80+
self.assertEqual(get_Adrs_Adr(address_elements), "Adresse")
81+
3282

3383
if __name__ == "__main__":
3484
unittest.main()
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<DespatchAdvice xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" xmlns="urn:oasis:names:specification:ubl:schema:xsd:DespatchAdvice-2">
3+
<cbc:UBLVersionID>2.2</cbc:UBLVersionID>
4+
<cbc:ID>1673980/1700802</cbc:ID>
5+
<cbc:Note/>
6+
<cbc:IssueDate>2023-04-30</cbc:IssueDate>
7+
<cac:OrderReference>
8+
<cbc:ID>1700802</cbc:ID>
9+
</cac:OrderReference>
10+
<cac:DespatchSupplierParty>
11+
<cac:Party>
12+
<cac:PartyName>
13+
<cbc:Name></cbc:Name>
14+
</cac:PartyName>
15+
<cac:PostalAddress>
16+
<cbc:StreetName></cbc:StreetName>
17+
<cbc:CityName></cbc:CityName>
18+
<cbc:PostalZone></cbc:PostalZone>
19+
<cac:Country>
20+
<cbc:IdentificationCode></cbc:IdentificationCode>
21+
</cac:Country>
22+
</cac:PostalAddress>
23+
<cac:PartyTaxScheme>
24+
<cbc:CompanyID></cbc:CompanyID>
25+
<cac:TaxScheme>
26+
<cbc:ID></cbc:ID>
27+
<cbc:TaxTypeCode></cbc:TaxTypeCode>
28+
</cac:TaxScheme>
29+
</cac:PartyTaxScheme>
30+
<cac:Contact>
31+
<cbc:Name></cbc:Name>
32+
<cbc:Telephone></cbc:Telephone>
33+
<cbc:ElectronicMail></cbc:ElectronicMail>
34+
</cac:Contact>
35+
</cac:Party>
36+
</cac:DespatchSupplierParty>
37+
<cac:DeliveryCustomerParty>
38+
<cac:Party>
39+
<cac:PartyName>
40+
<cbc:Name>YourCompany</cbc:Name>
41+
</cac:PartyName>
42+
<cac:PostalAddress>
43+
<cbc:StreetName>250 Executive Park Blvd, Suite 3400</cbc:StreetName>
44+
<cbc:AdditionalStreetName>AdditionalStreetName_1</cbc:AdditionalStreetName>
45+
<cbc:Department>Department_1</cbc:Department>
46+
<cbc:CityName>San Francisco</cbc:CityName>
47+
<cbc:PostalZone>94134</cbc:PostalZone>
48+
<cbc:CountrySubentity>California</cbc:CountrySubentity>
49+
<cac:Country>
50+
<cbc:IdentificationCode>US</cbc:IdentificationCode>
51+
</cac:Country>
52+
</cac:PostalAddress>
53+
<cac:PartyTaxScheme>
54+
<cbc:CompanyID></cbc:CompanyID>
55+
<cac:TaxScheme>
56+
<cbc:ID></cbc:ID>
57+
<cbc:TaxTypeCode></cbc:TaxTypeCode>
58+
</cac:TaxScheme>
59+
</cac:PartyTaxScheme>
60+
<cac:Contact>
61+
<cbc:Name>Chester Reed</cbc:Name>
62+
<cbc:Telephone>(979)-904-8902</cbc:Telephone>
63+
<cbc:Telefax></cbc:Telefax>
64+
<cbc:ElectronicMail>chester.reed79@example.com</cbc:ElectronicMail>
65+
</cac:Contact>
66+
</cac:Party>
67+
</cac:DeliveryCustomerParty>
68+
<cac:Shipment>
69+
<cbc:ID>GE 2/120185</cbc:ID>
70+
<cac:Delivery>
71+
<cac:EstimatedDeliveryPeriod>
72+
<cbc:EndDate>2023-04-13</cbc:EndDate>
73+
<cbc:EndTime>11:00:00</cbc:EndTime>
74+
</cac:EstimatedDeliveryPeriod>
75+
<cac:Despatch>
76+
<cac:DespatchLocation>
77+
<cbc:ID>Quai-22</cbc:ID>
78+
</cac:DespatchLocation>
79+
</cac:Despatch>
80+
</cac:Delivery>
81+
</cac:Shipment>
82+
<cac:DespatchLine>
83+
<cbc:ID>10001</cbc:ID>
84+
<cbc:DeliveredQuantity unitCode="XBO">1500</cbc:DeliveredQuantity>
85+
<cac:OrderLineReference>
86+
<cbc:LineID>000011</cbc:LineID>
87+
</cac:OrderLineReference>
88+
<cac:Item>
89+
<cac:SellersItemIdentification>
90+
<cbc:ID>7076</cbc:ID>
91+
</cac:SellersItemIdentification>
92+
</cac:Item>
93+
</cac:DespatchLine>
94+
</DespatchAdvice>

base_wamas_ubl/lib/wamas/utils.py

+47
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,50 @@ def convert_unit_code(key, val):
217217
return val
218218

219219

220+
def get_address_elements(dict_item):
221+
return {
222+
"ContactName": dict_item.get(
223+
"DespatchAdvice.cac:DeliveryCustomerParty.cac:Party.cac:Contact.cbc:Name"
224+
),
225+
"PartyName": dict_item.get(
226+
"DespatchAdvice.cac:DeliveryCustomerParty."
227+
"cac:Party.cac:PartyName.cbc:Name"
228+
),
229+
"Department": dict_item.get(
230+
"DespatchAdvice.cac:DeliveryCustomerParty."
231+
"cac:Party.cac:PostalAddress.cbc:Department"
232+
),
233+
"StreetName": dict_item.get(
234+
"DespatchAdvice.cac:DeliveryCustomerParty."
235+
"cac:Party.cac:PostalAddress.cbc:StreetName"
236+
),
237+
"AdditionalStreetName": dict_item.get(
238+
"DespatchAdvice.cac:DeliveryCustomerParty."
239+
"cac:Party.cac:PostalAddress.cbc:AdditionalStreetName"
240+
),
241+
}
242+
243+
244+
def get_Adrs_Name(a):
245+
return a["ContactName"] or a["PartyName"]
246+
247+
248+
def get_Adrs_Name2(a):
249+
return next(filter(None, [a["PartyName"], a["Department"], a["StreetName"]]), "")
250+
251+
252+
def get_Adrs_Name3(a):
253+
return next(filter(None, [a["Department"], a["StreetName"]]), "")
254+
255+
256+
def get_Adrs_Name4(a):
257+
return a["StreetName"]
258+
259+
260+
def get_Adrs_Adr(a):
261+
return a["AdditionalStreetName"] or a["StreetName"]
262+
263+
220264
def generate_wamas_line(dict_item, grammar, **kwargs): # noqa: C901
221265
res = ""
222266
dict_parent_id = kwargs.get("dict_parent_id", {})
@@ -275,6 +319,9 @@ def generate_wamas_line(dict_item, grammar, **kwargs): # noqa: C901
275319
args = (dict_wamas_out,)
276320
args += ast.literal_eval(re.search(r"\((.*?)\)", df_func).group(0))
277321
df_func = "get_date_from_field"
322+
elif "get_Adrs_" in df_func:
323+
address_elements = get_address_elements(dict_item)
324+
args = (address_elements,)
278325

279326
val = globals()[df_func](*args)
280327

base_wamas_ubl/lib/wamas/wamas_grammar/ausk.py

+5-5
Original file line numberDiff line numberDiff line change
@@ -106,31 +106,31 @@
106106
"dp": False,
107107
"ubl_path": False,
108108
"df_val": False,
109-
"df_func": False,
109+
"df_func": "get_Adrs_Name",
110110
},
111111
"RxAusk_Adrs_Name2": {
112112
"type": "str",
113113
"length": 40,
114114
"dp": False,
115115
"ubl_path": False,
116116
"df_val": False,
117-
"df_func": False,
117+
"df_func": "get_Adrs_Name2",
118118
},
119119
"RxAusk_Adrs_Name3": {
120120
"type": "str",
121121
"length": 40,
122122
"dp": False,
123123
"ubl_path": False,
124124
"df_val": False,
125-
"df_func": False,
125+
"df_func": "get_Adrs_Name3",
126126
},
127127
"RxAusk_Adrs_Name4": {
128128
"type": "str",
129129
"length": 40,
130130
"dp": False,
131131
"ubl_path": False,
132132
"df_val": False,
133-
"df_func": False,
133+
"df_func": "get_Adrs_Name4",
134134
},
135135
"RxAusk_Adrs_Anrede": {
136136
"type": "str",
@@ -146,7 +146,7 @@
146146
"dp": False,
147147
"ubl_path": False,
148148
"df_val": False,
149-
"df_func": False,
149+
"df_func": "get_Adrs_Adr",
150150
},
151151
"RxAusk_Adrs_Adr2": {
152152
"type": "str",

base_wamas_ubl/lib/wamas/wamas_grammar/kretk.py

+7-9
Original file line numberDiff line numberDiff line change
@@ -103,34 +103,33 @@
103103
"type": "str",
104104
"length": 40,
105105
"dp": False,
106-
"ubl_path": "DespatchAdvice.cac:DespatchSupplierParty."
107-
"cac:Party.cac:PartyName.cbc:Name",
106+
"ubl_path": False,
108107
"df_val": False,
109-
"df_func": False,
108+
"df_func": "get_Adrs_Name",
110109
},
111110
"RxKretk_Adrs_Name2": {
112111
"type": "str",
113112
"length": 40,
114113
"dp": False,
115114
"ubl_path": False,
116115
"df_val": False,
117-
"df_func": False,
116+
"df_func": "get_Adrs_Name2",
118117
},
119118
"RxKretk_Adrs_Name3": {
120119
"type": "str",
121120
"length": 40,
122121
"dp": False,
123122
"ubl_path": False,
124123
"df_val": False,
125-
"df_func": False,
124+
"df_func": "get_Adrs_Name3",
126125
},
127126
"RxKretk_Adrs_Name4": {
128127
"type": "str",
129128
"length": 40,
130129
"dp": False,
131130
"ubl_path": False,
132131
"df_val": False,
133-
"df_func": False,
132+
"df_func": "get_Adrs_Name4",
134133
},
135134
"RxKretk_Adrs_Anrede": {
136135
"type": "str",
@@ -144,10 +143,9 @@
144143
"type": "str",
145144
"length": 40,
146145
"dp": False,
147-
"ubl_path": "DespatchAdvice.cac:DespatchSupplierParty."
148-
"cac:Party.cac:PostalAddress.cbc:StreetName",
146+
"ubl_path": False,
149147
"df_val": False,
150-
"df_func": False,
148+
"df_func": "get_Adrs_Adr",
151149
},
152150
"RxKretk_Adrs_Adr2": {
153151
"type": "str",

base_wamas_ubl/lib/wamas/wamas_grammar/weak.py

+7-9
Original file line numberDiff line numberDiff line change
@@ -103,34 +103,33 @@
103103
"type": "str",
104104
"length": 40,
105105
"dp": False,
106-
"ubl_path": "DespatchAdvice.cac:DespatchSupplierParty."
107-
"cac:Party.cac:PartyName.cbc:Name",
106+
"ubl_path": False,
108107
"df_val": False,
109-
"df_func": False,
108+
"df_func": "get_Adrs_Name",
110109
},
111110
"RxWeak_Adrs_Name2": {
112111
"type": "str",
113112
"length": 40,
114113
"dp": False,
115114
"ubl_path": False,
116115
"df_val": False,
117-
"df_func": False,
116+
"df_func": "get_Adrs_Name2",
118117
},
119118
"RxWeak_Adrs_Name3": {
120119
"type": "str",
121120
"length": 40,
122121
"dp": False,
123122
"ubl_path": False,
124123
"df_val": False,
125-
"df_func": False,
124+
"df_func": "get_Adrs_Name3",
126125
},
127126
"RxWeak_Adrs_Name4": {
128127
"type": "str",
129128
"length": 40,
130129
"dp": False,
131130
"ubl_path": False,
132131
"df_val": False,
133-
"df_func": False,
132+
"df_func": "get_Adrs_Name4",
134133
},
135134
"RxWeak_Adrs_Anrede": {
136135
"type": "str",
@@ -144,10 +143,9 @@
144143
"type": "str",
145144
"length": 40,
146145
"dp": False,
147-
"ubl_path": "DespatchAdvice.cac:DespatchSupplierParty."
148-
"cac:Party.cac:PostalAddress.cbc:StreetName",
146+
"ubl_path": False,
149147
"df_val": False,
150-
"df_func": False,
148+
"df_func": "get_Adrs_Adr",
151149
},
152150
"RxWeak_Adrs_Adr2": {
153151
"type": "str",
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
- Error: Length of line does not match expected length
1+
- Error: Length of line does not match expected length
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
- Error: Invalid telegram type: XYZ
1+
- Error: Invalid telegram type: XYZ

base_wamas_ubl/tests/samples/CHECKWAMAS-SAMPLE_OUTPUT.txt

+1
Original file line numberDiff line numberDiff line change
@@ -36,3 +36,4 @@
3636
}
3737
]
3838
}
39+

0 commit comments

Comments
 (0)