[lead] [address] store lead address in Address doctype, with link field=lead
diff --git a/utilities/doctype/address/address.py b/utilities/doctype/address/address.py
index cfcbea5..c475da1 100644
--- a/utilities/doctype/address/address.py
+++ b/utilities/doctype/address/address.py
@@ -27,7 +27,7 @@
def autoname(self):
if not self.doc.address_title:
- self.doc.address_title = self.doc.customer or self.doc.supplier or self.doc.sales_partner
+ self.doc.address_title = self.doc.customer or self.doc.supplier or self.doc.sales_partner or self.doc.lead
if self.doc.address_title:
self.doc.name = cstr(self.doc.address_title).strip() + "-" + cstr(self.doc.address_type).strip()
@@ -35,40 +35,32 @@
else:
webnotes.msgprint("""Address Title is mandatory.""", raise_exception=True)
-
def validate(self):
self.validate_primary_address()
self.validate_shipping_address()
def validate_primary_address(self):
"""Validate that there can only be one primary address for particular customer, supplier"""
- sql = webnotes.conn.sql
if self.doc.is_primary_address == 1:
- if self.doc.customer:
- sql("update tabAddress set is_primary_address=0 where customer = '%s'" % (self.doc.customer))
- elif self.doc.supplier:
- sql("update tabAddress set is_primary_address=0 where supplier = '%s'" % (self.doc.supplier))
- elif self.doc.sales_partner:
- sql("update tabAddress set is_primary_address=0 where sales_partner = '%s'" % (self.doc.sales_partner))
- elif not self.doc.is_shipping_address:
- if self.doc.customer:
- if not sql("select name from tabAddress where is_primary_address=1 and customer = '%s'" % (self.doc.customer)):
- self.doc.is_primary_address = 1
- elif self.doc.supplier:
- if not sql("select name from tabAddress where is_primary_address=1 and supplier = '%s'" % (self.doc.supplier)):
- self.doc.is_primary_address = 1
- elif self.doc.sales_partner:
- if not sql("select name from tabAddress where is_primary_address=1 and sales_partner = '%s'" % (self.doc.sales_partner)):
- self.doc.is_primary_address = 1
-
+ self._unset_other("is_primary_address")
+
+ elif self.doc.is_shipping_address != 1:
+ for fieldname in ["customer", "supplier", "sales_partner", "lead"]:
+ if self.doc.fields.get(fieldname):
+ if not webnotes.conn.sql("""select name from `tabAddress` where is_primary_address=1
+ and `%s`=%s and name!=%s""" % (fieldname, "%s", "%s"),
+ (self.doc.fields[fieldname], self.doc.name)):
+ self.doc.is_primary_address = 1
+ break
def validate_shipping_address(self):
"""Validate that there can only be one shipping address for particular customer, supplier"""
- sql = webnotes.conn.sql
if self.doc.is_shipping_address == 1:
- if self.doc.customer:
- sql("update tabAddress set is_shipping_address=0 where customer = '%s'" % (self.doc.customer))
- elif self.doc.supplier:
- sql("update tabAddress set is_shipping_address=0 where supplier = '%s'" % (self.doc.supplier))
- elif self.doc.sales_partner:
- sql("update tabAddress set is_shipping_address=0 where sales_partner = '%s'" % (self.doc.sales_partner))
+ self._unset_other("is_shipping_address")
+
+ def _unset_other(self, is_address_type):
+ for fieldname in ["customer", "supplier", "sales_partner", "lead"]:
+ if self.doc.fields.get(fieldname):
+ webnotes.conn.sql("""update `tabAddress` set `%s`=0 where `%s`=%s and name!=%s""" %
+ (is_address_type, fieldname, "%s", "%s"), (self.doc.fields[fieldname], self.doc.name))
+ break
\ No newline at end of file
diff --git a/utilities/doctype/address/address.txt b/utilities/doctype/address/address.txt
index 757beb9..ed39c75 100644
--- a/utilities/doctype/address/address.txt
+++ b/utilities/doctype/address/address.txt
@@ -2,7 +2,7 @@
{
"creation": "2013-01-10 16:34:32",
"docstatus": 0,
- "modified": "2013-01-29 13:24:45",
+ "modified": "2013-06-28 17:06:32",
"modified_by": "Administrator",
"owner": "Administrator"
},
@@ -46,11 +46,11 @@
"label": "Address Details"
},
{
- "description": "e.g. Office, Billing, Shipping",
"doctype": "DocField",
"fieldname": "address_type",
- "fieldtype": "Data",
+ "fieldtype": "Select",
"label": "Address Type",
+ "options": "Billing\nShipping\nOffice\nPersonal\nPlant\nPostal\nShop\nSubsidiary\nWarehouse\nOther",
"reqd": 1
},
{
@@ -145,7 +145,7 @@
"doctype": "DocField",
"fieldname": "is_primary_address",
"fieldtype": "Check",
- "label": "Is Primary Address"
+ "label": "Preferred Billing Address"
},
{
"default": "0",
@@ -154,7 +154,7 @@
"fieldname": "is_shipping_address",
"fieldtype": "Check",
"in_list_view": 1,
- "label": "Is Shipping Address"
+ "label": "Preferred Shipping Address"
},
{
"doctype": "DocField",
@@ -208,6 +208,27 @@
"options": "Sales Partner"
},
{
+ "doctype": "DocField",
+ "fieldname": "column_break_22",
+ "fieldtype": "Column Break"
+ },
+ {
+ "depends_on": "eval:!doc.supplier && !doc.sales_partner",
+ "doctype": "DocField",
+ "fieldname": "lead",
+ "fieldtype": "Link",
+ "label": "Lead",
+ "options": "Lead"
+ },
+ {
+ "depends_on": "eval:!doc.supplier && !doc.sales_partner",
+ "doctype": "DocField",
+ "fieldname": "lead_name",
+ "fieldtype": "Data",
+ "label": "Lead Name",
+ "read_only": 1
+ },
+ {
"doctype": "DocPerm",
"role": "Sales User"
},
diff --git a/utilities/transaction_base.py b/utilities/transaction_base.py
index c86a50e..2def0ea 100644
--- a/utilities/transaction_base.py
+++ b/utilities/transaction_base.py
@@ -170,21 +170,30 @@
# Get Lead Details
# -----------------------
- def get_lead_details(self, name):
- details = webnotes.conn.sql("select name, lead_name, address_line1, address_line2, city, country, state, pincode, territory, phone, mobile_no, email_id, company_name from `tabLead` where name = '%s'" %(name), as_dict = 1)
-
- extract = lambda x: details and details[0] and details[0].get(x,'') or ''
- address_fields = [('','address_line1'),('\n','address_line2'),('\n','city'),(' ','pincode'),('\n','state'),('\n','country'),('\nPhone: ','contact_no')]
- address_display = ''.join([a[0]+extract(a[1]) for a in address_fields if extract(a[1])])
- if address_display.startswith('\n'): address_display = address_display[1:]
+ def get_lead_details(self, name):
+ details = webnotes.conn.sql("""select name, lead_name, address_line1, address_line2, city, country, state, pincode
+ from `tabAddress` where lead=%s""", name, as_dict=True)
+ lead = webnotes.conn.get_value("Lead", name,
+ ["territory", "phone", "mobile_no", "email_id", "company_name", "lead_name"], as_dict=True) or {}
+
+ address_display = ""
+ if details:
+ details = details[0]
+ for separator, fieldname in (('','address_line1'), ('\n','address_line2'), ('\n','city'),
+ (' ','pincode'), ('\n','state'), ('\n','country'), ('\nPhone: ', 'phone')):
+ if details.get(fieldname):
+ address_display += separator + details.get(fieldname)
+
+ if address_display.startswith('\n'):
+ address_display = address_display[1:]
ret = {
- 'contact_display' : extract('lead_name'),
+ 'contact_display' : lead.get('lead_name'),
'address_display' : address_display,
- 'territory' : extract('territory'),
- 'contact_mobile' : extract('mobile_no'),
- 'contact_email' : extract('email_id'),
- 'customer_name' : extract('company_name') or extract('lead_name')
+ 'territory' : lead.get('territory'),
+ 'contact_mobile' : lead.get('mobile_no'),
+ 'contact_email' : lead.get('email_id'),
+ 'customer_name' : lead.get('company_name') or lead.get('lead_name')
}
return ret