# Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors # For license information, please see license.txt import frappe from frappe import _ from frappe.query_builder.functions import Concat_ws, Date def execute(filters=None): columns, data = get_columns(), get_data(filters) return columns, data def get_columns(): columns = [ { "label": _("Lead"), "fieldname": "name", "fieldtype": "Link", "options": "Lead", "width": 150, }, {"label": _("Lead Name"), "fieldname": "lead_name", "fieldtype": "Data", "width": 120}, {"fieldname": "status", "label": _("Status"), "fieldtype": "Data", "width": 100}, { "fieldname": "lead_owner", "label": _("Lead Owner"), "fieldtype": "Link", "options": "User", "width": 100, }, { "label": _("Territory"), "fieldname": "territory", "fieldtype": "Link", "options": "Territory", "width": 100, }, {"label": _("Source"), "fieldname": "source", "fieldtype": "Data", "width": 120}, {"label": _("Email"), "fieldname": "email_id", "fieldtype": "Data", "width": 120}, {"label": _("Mobile"), "fieldname": "mobile_no", "fieldtype": "Data", "width": 120}, {"label": _("Phone"), "fieldname": "phone", "fieldtype": "Data", "width": 120}, { "label": _("Owner"), "fieldname": "owner", "fieldtype": "Link", "options": "user", "width": 120, }, { "label": _("Company"), "fieldname": "company", "fieldtype": "Link", "options": "Company", "width": 120, }, {"fieldname": "address", "label": _("Address"), "fieldtype": "Data", "width": 130}, {"fieldname": "state", "label": _("State"), "fieldtype": "Data", "width": 100}, {"fieldname": "pincode", "label": _("Postal Code"), "fieldtype": "Data", "width": 90}, { "fieldname": "country", "label": _("Country"), "fieldtype": "Link", "options": "Country", "width": 100, }, ] return columns def get_data(filters): lead = frappe.qb.DocType("Lead") address = frappe.qb.DocType("Address") dynamic_link = frappe.qb.DocType("Dynamic Link") query = ( frappe.qb.from_(lead) .left_join(dynamic_link) .on((lead.name == dynamic_link.link_name) & (dynamic_link.parenttype == "Address")) .left_join(address) .on(address.name == dynamic_link.parent) .select( lead.name, lead.lead_name, lead.status, lead.lead_owner, lead.territory, lead.source, lead.email_id, lead.mobile_no, lead.phone, lead.owner, lead.company, (Concat_ws(", ", address.address_line1, address.address_line2)).as_("address"), address.state, address.pincode, address.country, ) .where(lead.company == filters.company) .where(Date(lead.creation).between(filters.from_date, filters.to_date)) ) if filters.get("territory"): query = query.where(lead.territory == filters.get("territory")) if filters.get("status"): query = query.where(lead.status == filters.get("status")) return query.run(as_dict=1)