[lead] [address] store lead address in Address doctype, with link field=lead

This commit is contained in:
Anand Doshi
2013-06-28 19:18:33 +05:30
parent b78a4e0f80
commit 8f9f8a43c7
14 changed files with 287 additions and 216 deletions

View File

@@ -27,7 +27,7 @@ class DocType:
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 @@ class DocType:
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

View File

@@ -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",
@@ -207,6 +207,27 @@
"label": "Sales Partner",
"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"

View File

@@ -170,21 +170,30 @@ class TransactionBase(StatusUpdater):
# 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