-
Notifications
You must be signed in to change notification settings - Fork 106
/
Copy pathschemas.py
122 lines (93 loc) · 2.75 KB
/
schemas.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
# Copyright 2023 ACSONE SA/NV
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from extendable_pydantic import StrictExtendableBaseModel
class AddressCreate(StrictExtendableBaseModel, extra="ignore"):
"""
used to create new address (res.partner)
state and country can be name or code
"""
name: str | None = None
street: str | None = None
street2: str | None = None
zip: str | None = None
city: str | None = None
phone: str | None = None
mobile: str | None = None
email: str | None = None
state_id: int | None = None
country_id: int | None = None
def to_res_partner_vals(self) -> dict:
vals = {
"name": self.name,
"street": self.street,
"street2": self.street2,
"zip": self.zip,
"city": self.city,
"phone": self.phone,
"mobile": self.mobile,
"email": self.email,
"state_id": self.state_id,
"country_id": self.country_id,
}
return vals
class AddressUpdate(StrictExtendableBaseModel, extra="ignore"):
"""
used to update address (res.partner)
state and country can be name or code
"""
name: str | None = None
street: str | None = None
street2: str | None = None
zip: str | None = None
city: str | None = None
phone: str | None = None
mobile: str | None = None
email: str | None = None
state_id: int | None = None
country_id: int | None = None
def to_res_partner_vals(self) -> dict:
fields = [
"name",
"street",
"street2",
"zip",
"city",
"phone",
"mobile",
"email",
"state_id",
"country_id",
]
values = self.model_dump(exclude_unset=True)
return {f: values[f] for f in fields if f in values}
# --- Invoicing Address ---
class InvoicingAddressCreate(AddressCreate):
"""
Creation of Invoicing Address
Remark: it is actually not used since
the invoicing address is the authenticated
partner's address
"""
vat: str | None = None
def to_res_partner_vals(self) -> dict:
vals = super().to_res_partner_vals()
vals["vat"] = self.vat
return vals
class InvoicingAddressUpdate(AddressUpdate):
"""
Update of Invoicing Address
"""
vat: str | None = None
def to_res_partner_vals(self) -> dict:
vals = super().to_res_partner_vals()
vals["vat"] = self.vat
return vals
# --- Delivery Address ---
class DeliveryAddressCreate(AddressCreate):
"""
Creation of Delivery Address
"""
class DeliveryAddressUpdate(AddressUpdate):
"""
Update of Delivery Address
"""