Skip to content

Commit bc982ec

Browse files
mergify[bot]barredterraMarcCon
authored
feat(Magazine Address List): retrieve external contacts (LAN-900) (backport #321) (#325)
Co-authored-by: Raffael Meyer <14891507+barredterra@users.noreply.github.com> Co-authored-by: Marc <147735520+MarcCon@users.noreply.github.com> Co-authored-by: barredterra <14891507+barredterra@users.noreply.github.com>
1 parent 387569a commit bc982ec

1 file changed

Lines changed: 67 additions & 3 deletions

File tree

landa/organization_management/report/magazine_address_list/magazine_address_list.py

Lines changed: 67 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -139,9 +139,73 @@ def append_country_if_exists(row):
139139
# replace NaNs with empty strings
140140
data.fillna("", inplace=True)
141141
# convert data back to tuple
142-
data.reset_index(inplace=True)
143-
data = tuple(data.itertuples(index=False, name=None))
144-
return data
142+
data = data.reset_index()
143+
member_rows = list(data.itertuples(index=False, name=None))
144+
145+
ec_filters = {"is_magazine_recipient": 1}
146+
for key in ["first_name", "last_name"]:
147+
if key in self.filter_name:
148+
ec_filters[key] = self.filter_name[key]
149+
if "organization" in self.filter_member:
150+
ec_filters["organization"] = self.filter_member["organization"]
151+
152+
external_contacts = frappe.get_list(
153+
"External Contact",
154+
filters=ec_filters,
155+
fields=["name", "first_name", "last_name", "organization"],
156+
as_list=True,
157+
)
158+
159+
external_contact_rows = []
160+
if external_contacts:
161+
ec_ids = [ec[0] for ec in external_contacts]
162+
addresses = frappe.get_list(
163+
"Address",
164+
filters=[
165+
["Dynamic Link", "link_doctype", "=", "External Contact"],
166+
["Dynamic Link", "link_name", "in", ec_ids],
167+
["disabled", "=", 0],
168+
],
169+
fields=[
170+
"address_line1",
171+
"pincode",
172+
"city",
173+
"country",
174+
"`tabDynamic Link`.link_name as ec_name",
175+
],
176+
as_list=True,
177+
)
178+
address_map = {}
179+
for address_line1, pincode, city, country, ec_name in addresses:
180+
if ec_name not in address_map:
181+
address_map[ec_name] = (address_line1, pincode, city, country)
182+
183+
for ec_name, first_name, last_name, organization in external_contacts:
184+
address_line1, pincode, city, country = address_map.get(ec_name, ("", "", "", ""))
185+
full_address = f"{address_line1}, {pincode} {city}" if address_line1 else ""
186+
if country and country != "Germany":
187+
full_address = f"{full_address}, {country}"
188+
189+
external_contact_rows.append(
190+
(
191+
"",
192+
first_name,
193+
last_name,
194+
organization,
195+
_("External Contact"),
196+
1,
197+
"",
198+
0,
199+
address_line1,
200+
pincode,
201+
city,
202+
"" if country == "Germany" else (country or ""),
203+
full_address,
204+
1,
205+
)
206+
)
207+
208+
return member_rows + external_contact_rows
145209

146210
def get_columns(self):
147211
return [

0 commit comments

Comments
 (0)