From 19a8a6cdc0430e2913f1ed34b3299ba2c77a1d0d Mon Sep 17 00:00:00 2001 From: Deepesh Garg <42651287+deepeshgarg007@users.noreply.github.com> Date: Wed, 16 Jan 2019 18:54:37 +0530 Subject: [PATCH] fix: Address and contact report (#6763) --- .../addresses_and_contacts.py | 54 ++++++++----------- 1 file changed, 22 insertions(+), 32 deletions(-) diff --git a/frappe/contacts/report/addresses_and_contacts/addresses_and_contacts.py b/frappe/contacts/report/addresses_and_contacts/addresses_and_contacts.py index edb69b831d..16451d0d46 100644 --- a/frappe/contacts/report/addresses_and_contacts/addresses_and_contacts.py +++ b/frappe/contacts/report/addresses_and_contacts/addresses_and_contacts.py @@ -2,7 +2,6 @@ # For license information, please see license.txt from __future__ import unicode_literals -from six.moves import range from six import iteritems import frappe @@ -35,66 +34,57 @@ def get_columns(filters): ] def get_data(filters): - data = [] party_type = filters.get("party_type") party = filters.get("party_name") return get_party_addresses_and_contact(party_type, party) -def get_party_addresses_and_contact(party_type, party): +def get_party_addresses_and_contact(reference_doctype, reference_name): data = [] filters = None - party_details = frappe._dict() + reference_details = frappe._dict() - if not party_type: + if not reference_doctype: return [] - if party: - filters = { "name": party } + if reference_name: + filters = { "name": reference_name } - party_list = [d[0] for d in frappe.get_list(party_type, filters=filters, fields=["name"], as_list=True)] - for d in party_list: - party_details.setdefault(d, frappe._dict()) + reference_list = [d[0] for d in frappe.get_list(reference_doctype, filters=filters, fields=["name"], as_list=True)] + for d in reference_list: + reference_details.setdefault(d, frappe._dict()) - party_details = get_party_details(party_type, party_list, "Address", party_details) - party_details = get_party_details(party_type, party_list, "Contact", party_details) + reference_details = get_party_details(reference_doctype, "Address", reference_list, reference_details) + reference_details = get_party_details(reference_doctype, "Contact", reference_list, reference_details) - for party, details in iteritems(party_details): + for reference_name, details in iteritems(reference_details): addresses = details.get("address", []) contacts = details.get("contact", []) if not any([addresses, contacts]): - result = [party] + result = [reference_name] result.extend(add_blank_columns_for("Contact")) result.extend(add_blank_columns_for("Address")) data.append(result) else: - addresses = map(list, addresses) - contacts = map(list, contacts) + result = [reference_name] + result.extend(list(addresses) or add_blank_columns_for("Address")) + result.extend(list(contacts) or add_blank_columns_for("Contact")) + data.append(result) - max_length = max(len(addresses), len(contacts)) - for idx in range(0, max_length): - result = [party] - address = addresses[idx] if idx < len(addresses) else add_blank_columns_for("Address") - contact = contacts[idx] if idx < len(contacts) else add_blank_columns_for("Contact") - result.extend(address) - result.extend(contact) - - data.append(result) return data -def get_party_details(party_type, party_list, doctype, party_details): +def get_party_details(reference_doctype, doctype, reference_list, reference_details): filters = [ - ["Dynamic Link", "link_doctype", "=", party_type], - ["Dynamic Link", "link_name", "in", party_list] + ["Dynamic Link", "link_doctype", "=", reference_doctype], + ["Dynamic Link", "link_name", "in", reference_list] ] fields = ["`tabDynamic Link`.link_name"] + field_map.get(doctype, []) records = frappe.get_list(doctype, filters=filters, fields=fields, as_list=True) for d in records: - details = party_details.get(d[0]) or {} - details.setdefault(frappe.scrub(doctype), []).append(d[1:]) + reference_details[d[0]][frappe.scrub(doctype)] = d[1:] - return party_details + return reference_details def add_blank_columns_for(doctype): - return ["" for field in field_map.get(doctype, [])] \ No newline at end of file + return ["" for _ in field_map.get(doctype, [])] \ No newline at end of file