@@ -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