fix: Address and contact report (#6763)
This commit is contained in:
parent
480b31587d
commit
19a8a6cdc0
1 changed files with 22 additions and 32 deletions
|
|
@ -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, [])]
|
||||
return ["" for _ in field_map.get(doctype, [])]
|
||||
Loading…
Add table
Reference in a new issue