[lead] [address] store lead address in Address doctype, with link field=lead
This commit is contained in:
parent
b78a4e0f80
commit
8f9f8a43c7
@ -5,6 +5,11 @@ cur_frm.cscript.onload = function(doc, cdt, cdn) {
|
|||||||
cur_frm.fields_dict.customer.get_query = erpnext.utils.customer_query;
|
cur_frm.fields_dict.customer.get_query = erpnext.utils.customer_query;
|
||||||
cur_frm.fields_dict.supplier.get_query = erpnext.utils.supplier_query;
|
cur_frm.fields_dict.supplier.get_query = erpnext.utils.supplier_query;
|
||||||
|
|
||||||
|
if(cur_frm.fields_dict.lead) {
|
||||||
|
cur_frm.fields_dict.lead.get_query = erpnext.utils.lead_query;
|
||||||
|
cur_frm.add_fetch('lead', 'lead_name', 'lead_name');
|
||||||
|
}
|
||||||
|
|
||||||
if(doc.__islocal) {
|
if(doc.__islocal) {
|
||||||
var last_route = wn.route_history.slice(-2, -1)[0];
|
var last_route = wn.route_history.slice(-2, -1)[0];
|
||||||
if(last_route && last_route[0]==="Form") {
|
if(last_route && last_route[0]==="Form") {
|
||||||
@ -13,10 +18,13 @@ cur_frm.cscript.onload = function(doc, cdt, cdn) {
|
|||||||
"Maintenance Schedule"]
|
"Maintenance Schedule"]
|
||||||
.indexOf(last_route[1])!==-1) {
|
.indexOf(last_route[1])!==-1) {
|
||||||
var refdoc = wn.model.get_doc(last_route[1], last_route[2]);
|
var refdoc = wn.model.get_doc(last_route[1], last_route[2]);
|
||||||
|
|
||||||
|
if(refdoc.doctype == "Quotation" ? refdoc.quotation_to=="Customer" : true) {
|
||||||
cur_frm.set_value("customer", refdoc.customer || refdoc.name);
|
cur_frm.set_value("customer", refdoc.customer || refdoc.name);
|
||||||
cur_frm.set_value("customer_name", refdoc.customer_name);
|
cur_frm.set_value("customer_name", refdoc.customer_name);
|
||||||
if(cur_frm.doc.doctype==="Address")
|
if(cur_frm.doc.doctype==="Address")
|
||||||
cur_frm.set_value("address_title", cur_frm.doc.customer)
|
cur_frm.set_value("address_title", cur_frm.doc.customer_name);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if(["Supplier", "Supplier Quotation", "Purchase Order", "Purchase Invoice", "Purchase Receipt"]
|
if(["Supplier", "Supplier Quotation", "Purchase Order", "Purchase Invoice", "Purchase Receipt"]
|
||||||
.indexOf(last_route[1])!==-1) {
|
.indexOf(last_route[1])!==-1) {
|
||||||
@ -24,7 +32,18 @@ cur_frm.cscript.onload = function(doc, cdt, cdn) {
|
|||||||
cur_frm.set_value("supplier", refdoc.supplier || refdoc.name);
|
cur_frm.set_value("supplier", refdoc.supplier || refdoc.name);
|
||||||
cur_frm.set_value("supplier_name", refdoc.supplier_name);
|
cur_frm.set_value("supplier_name", refdoc.supplier_name);
|
||||||
if(cur_frm.doc.doctype==="Address")
|
if(cur_frm.doc.doctype==="Address")
|
||||||
cur_frm.set_value("address_title", cur_frm.doc.supplier)
|
cur_frm.set_value("address_title", cur_frm.doc.supplier_name);
|
||||||
|
}
|
||||||
|
if(["Lead", "Quotation"]
|
||||||
|
.indexOf(last_route[1])!==-1) {
|
||||||
|
var refdoc = wn.model.get_doc(last_route[1], last_route[2]);
|
||||||
|
|
||||||
|
if(refdoc.doctype == "Quotation" ? refdoc.quotation_to=="Lead" : true) {
|
||||||
|
cur_frm.set_value("lead", refdoc.lead || refdoc.name);
|
||||||
|
cur_frm.set_value("lead_name", refdoc.customer_name || refdoc.company_name || refdoc.lead_name);
|
||||||
|
if(cur_frm.doc.doctype==="Address")
|
||||||
|
cur_frm.set_value("address_title", cur_frm.doc.lead_name);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,11 +4,12 @@ def execute():
|
|||||||
webnotes.reload_doc("setup", "doctype", "for_territory")
|
webnotes.reload_doc("setup", "doctype", "for_territory")
|
||||||
webnotes.reload_doc("setup", "doctype", "price_list")
|
webnotes.reload_doc("setup", "doctype", "price_list")
|
||||||
webnotes.reload_doc("accounts", "doctype", "sales_taxes_and_charges_master")
|
webnotes.reload_doc("accounts", "doctype", "sales_taxes_and_charges_master")
|
||||||
|
webnotes.reload_doc("accounts", "doctype", "shipping_rule")
|
||||||
|
|
||||||
from setup.utils import get_root_of
|
from setup.utils import get_root_of
|
||||||
root_territory = get_root_of("Territory")
|
root_territory = get_root_of("Territory")
|
||||||
|
|
||||||
for parenttype in ["Sales Taxes and Charges Master", "Price List"]:
|
for parenttype in ["Sales Taxes and Charges Master", "Price List", "Shipping Rule"]:
|
||||||
for name in webnotes.conn.sql_list("""select name from `tab%s` main
|
for name in webnotes.conn.sql_list("""select name from `tab%s` main
|
||||||
where not exists (select parent from `tabFor Territory` territory
|
where not exists (select parent from `tabFor Territory` territory
|
||||||
where territory.parenttype=%s and territory.parent=main.name)""" % \
|
where territory.parenttype=%s and territory.parent=main.name)""" % \
|
||||||
|
50
patches/june_2013/p10_lead_address.py
Normal file
50
patches/june_2013/p10_lead_address.py
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
import webnotes
|
||||||
|
|
||||||
|
def execute():
|
||||||
|
webnotes.reload_doc("utilities", "doctype", "address")
|
||||||
|
|
||||||
|
webnotes.conn.auto_commit_on_many_writes = True
|
||||||
|
|
||||||
|
for lead in webnotes.conn.sql("""select name as lead, lead_name, address_line1, address_line2, city, country,
|
||||||
|
state, pincode, status, company_name from `tabLead` where not exists
|
||||||
|
(select name from `tabAddress` where `tabAddress`.lead=`tabLead`.name) and
|
||||||
|
(ifnull(address_line1, '')!='' or ifnull(city, '')!='' or ifnull(country, '')!='' or ifnull(pincode, '')!='')""", as_dict=True):
|
||||||
|
if set_in_customer(lead):
|
||||||
|
continue
|
||||||
|
|
||||||
|
create_address_for(lead)
|
||||||
|
|
||||||
|
webnotes.conn.auto_commit_on_many_writes = False
|
||||||
|
|
||||||
|
def set_in_customer(lead):
|
||||||
|
customer = webnotes.conn.get_value("Customer", {"lead_name": lead.lead})
|
||||||
|
if customer:
|
||||||
|
customer_address = webnotes.conn.sql("""select name from `tabAddress`
|
||||||
|
where customer=%s and (address_line1=%s or address_line2=%s or pincode=%s)""",
|
||||||
|
(customer, lead.address_line1, lead.address_line2, lead.pincode))
|
||||||
|
if customer_address:
|
||||||
|
webnotes.conn.sql("""update `tabAddress` set lead=%s, lead_name=%s
|
||||||
|
where name=%s""", (lead.lead, lead.company_name or lead.lead_name, customer_address[0][0]))
|
||||||
|
return True
|
||||||
|
|
||||||
|
return False
|
||||||
|
|
||||||
|
def create_address_for(lead):
|
||||||
|
address_title = lead.company_name or lead.lead_name or lead.lead
|
||||||
|
|
||||||
|
for c in ['%', "'", '"', '#', '*', '?', '`']:
|
||||||
|
address_title = address_title.replace(c, "")
|
||||||
|
|
||||||
|
if webnotes.conn.get_value("Address", address_title.strip() + "-" + "Billing"):
|
||||||
|
address_title += " " + lead.lead
|
||||||
|
|
||||||
|
lead.update({
|
||||||
|
"doctype": "Address",
|
||||||
|
"address_type": "Billing",
|
||||||
|
"address_title": address_title
|
||||||
|
})
|
||||||
|
|
||||||
|
del lead["company_name"]
|
||||||
|
del lead["status"]
|
||||||
|
|
||||||
|
webnotes.bean(lead).insert()
|
@ -247,5 +247,8 @@ patch_list = [
|
|||||||
"patches.june_2013.p06_drop_unused_tables",
|
"patches.june_2013.p06_drop_unused_tables",
|
||||||
"patches.june_2013.p08_shopping_cart_settings",
|
"patches.june_2013.p08_shopping_cart_settings",
|
||||||
"patches.june_2013.p05_remove_search_criteria_reports",
|
"patches.june_2013.p05_remove_search_criteria_reports",
|
||||||
|
"patches.june_2013.p07_taxes_price_list_for_territory",
|
||||||
|
"patches.june_2013.p08_shopping_cart_settings",
|
||||||
"patches.june_2013.p09_update_global_defaults",
|
"patches.june_2013.p09_update_global_defaults",
|
||||||
|
"patches.june_2013.p10_lead_address",
|
||||||
]
|
]
|
@ -14,33 +14,16 @@
|
|||||||
// You should have received a copy of the GNU General Public License
|
// You should have received a copy of the GNU General Public License
|
||||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
// Module CRM
|
|
||||||
|
|
||||||
wn.require('app/utilities/doctype/sms_control/sms_control.js');
|
wn.require('app/utilities/doctype/sms_control/sms_control.js');
|
||||||
|
wn.require('app/setup/doctype/contact_control/contact_control.js');
|
||||||
|
|
||||||
cur_frm.cscript.onload = function(doc, cdt, cdn) {
|
wn.provide("erpnext");
|
||||||
if(user =='Guest'){
|
erpnext.LeadController = wn.ui.form.Controller.extend({
|
||||||
hide_field(['status', 'naming_series', 'order_lost_reason',
|
setup: function() {
|
||||||
'customer', 'rating', 'fax', 'website', 'territory',
|
this.frm.fields_dict.customer.get_query = erpnext.utils.customer_query;
|
||||||
'address_line1', 'address_line2', 'city', 'state',
|
},
|
||||||
'country', 'pincode', 'address', 'lead_owner', 'market_segment',
|
|
||||||
'industry', 'campaign_name', 'interested_in', 'company',
|
|
||||||
'fiscal_year', 'contact_by', 'contact_date', 'last_contact_date',
|
|
||||||
'contact_date_ref', 'to_discuss', 'more_info', 'follow_up',
|
|
||||||
'communication_history', 'cc_to', 'subject', 'message', 'lead_attachment_detail',
|
|
||||||
'Create Customer', 'Create Opportunity', 'transaction_date', 'type', 'source']);
|
|
||||||
doc.source = 'Website';
|
|
||||||
}
|
|
||||||
if(!doc.status) set_multiple(dt,dn,{status:'Open'});
|
|
||||||
|
|
||||||
if (!doc.date){
|
|
||||||
doc.date = date.obj_to_str(new Date());
|
|
||||||
}
|
|
||||||
// set naming series
|
|
||||||
if(user=='Guest') doc.naming_series = 'WebLead';
|
|
||||||
|
|
||||||
cur_frm.add_fetch('customer', 'customer_name', 'company_name');
|
|
||||||
|
|
||||||
|
onload: function() {
|
||||||
if(cur_frm.fields_dict.lead_owner.df.options.match(/^Profile/)) {
|
if(cur_frm.fields_dict.lead_owner.df.options.match(/^Profile/)) {
|
||||||
cur_frm.fields_dict.lead_owner.get_query = erpnext.utils.profile_query;
|
cur_frm.fields_dict.lead_owner.get_query = erpnext.utils.profile_query;
|
||||||
}
|
}
|
||||||
@ -54,38 +37,56 @@ cur_frm.cscript.onload = function(doc, cdt, cdn) {
|
|||||||
<p><a href="#Form/Sales Email Settings">Sales Email Settings</a><br>\
|
<p><a href="#Form/Sales Email Settings">Sales Email Settings</a><br>\
|
||||||
<span class="help">Automatically extract Leads from a mail box e.g. "sales@example.com"</span></p>';
|
<span class="help">Automatically extract Leads from a mail box e.g. "sales@example.com"</span></p>';
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
|
|
||||||
cur_frm.cscript.refresh_custom_buttons = function(doc) {
|
refresh: function() {
|
||||||
cur_frm.clear_custom_buttons();
|
|
||||||
if(!doc.__islocal && !in_list(['Converted', 'Lead Lost'], doc.status)) {
|
|
||||||
if (doc.source != 'Existing Customer') {
|
|
||||||
cur_frm.add_custom_button('Create Customer',
|
|
||||||
cur_frm.cscript['Create Customer']);
|
|
||||||
}
|
|
||||||
cur_frm.add_custom_button('Create Opportunity',
|
|
||||||
cur_frm.cscript['Create Opportunity']);
|
|
||||||
cur_frm.add_custom_button('Send SMS', cur_frm.cscript.send_sms);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
cur_frm.cscript.refresh = function(doc, cdt, cdn) {
|
|
||||||
cur_frm.cscript.refresh_custom_buttons(doc);
|
|
||||||
erpnext.hide_naming_series();
|
erpnext.hide_naming_series();
|
||||||
|
this.frm.clear_custom_buttons();
|
||||||
|
|
||||||
|
this.frm.__is_customer = this.frm.__is_customer || this.frm.doc.__is_customer;
|
||||||
|
if(!this.frm.doc.__islocal && !this.frm.__is_customer) {
|
||||||
|
this.frm.add_custom_button("Create Customer", this.frm.cscript['Create Customer']);
|
||||||
|
this.frm.add_custom_button("Create Opportunity", this.frm.cscript['Create Opportunity']);
|
||||||
|
this.frm.add_custom_button("Send SMS", this.frm.cscript.send_sms);
|
||||||
|
}
|
||||||
|
|
||||||
cur_frm.communication_view = new wn.views.CommunicationList({
|
cur_frm.communication_view = new wn.views.CommunicationList({
|
||||||
list: wn.model.get("Communication", {"lead": doc.name}),
|
list: wn.model.get("Communication", {"lead": this.frm.doc.name}),
|
||||||
parent: cur_frm.fields_dict.communication_html.wrapper,
|
parent: this.frm.fields_dict.communication_html.wrapper,
|
||||||
doc: doc,
|
doc: this.frm.doc,
|
||||||
recipients: doc.email_id
|
recipients: this.frm.doc.email_id
|
||||||
})
|
});
|
||||||
}
|
|
||||||
|
|
||||||
|
if(!this.frm.doc.__islocal) {
|
||||||
|
this.make_address_list();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
make_address_list: function() {
|
||||||
|
var me = this;
|
||||||
|
if(!this.frm.address_list) {
|
||||||
|
this.frm.address_list = new wn.ui.Listing({
|
||||||
|
parent: this.frm.fields_dict['address_html'].wrapper,
|
||||||
|
page_length: 5,
|
||||||
|
new_doctype: "Address",
|
||||||
|
get_query: function() {
|
||||||
|
return 'select name, address_type, address_line1, address_line2, \
|
||||||
|
city, state, country, pincode, fax, email_id, phone, \
|
||||||
|
is_primary_address, is_shipping_address from tabAddress \
|
||||||
|
where lead="'+me.frm.doc.name+'" and docstatus != 2 \
|
||||||
|
order by is_primary_address, is_shipping_address desc'
|
||||||
|
},
|
||||||
|
as_dict: 1,
|
||||||
|
no_results_message: 'No addresses created',
|
||||||
|
render_row: this.render_address_row,
|
||||||
|
});
|
||||||
|
// note: render_address_row is defined in contact_control.js
|
||||||
|
}
|
||||||
|
this.frm.address_list.run();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
cur_frm.cscript.status = function(doc, cdt, cdn){
|
$.extend(cur_frm.cscript, new erpnext.LeadController({frm: cur_frm}));
|
||||||
cur_frm.cscript.refresh(doc, cdt, cdn);
|
|
||||||
}
|
|
||||||
|
|
||||||
cur_frm.cscript['Create Customer'] = function(){
|
cur_frm.cscript['Create Customer'] = function(){
|
||||||
var doc = cur_frm.doc;
|
var doc = cur_frm.doc;
|
||||||
@ -148,10 +149,3 @@ cur_frm.cscript['Create Opportunity'] = function(){
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
//get query select Territory
|
|
||||||
cur_frm.fields_dict['territory'].get_query = function(doc,cdt,cdn) {
|
|
||||||
return 'SELECT `tabTerritory`.`name`,`tabTerritory`.`parent_territory` FROM `tabTerritory` WHERE `tabTerritory`.`is_group` = "No" AND `tabTerritory`.`docstatus`!= 2 AND `tabTerritory`.%(key)s LIKE "%s" ORDER BY `tabTerritory`.`name` ASC LIMIT 50';
|
|
||||||
}
|
|
||||||
|
|
||||||
cur_frm.fields_dict.customer.get_query = erpnext.utils.customer_query;
|
|
@ -38,6 +38,9 @@ class DocType(SellingController):
|
|||||||
|
|
||||||
def onload(self):
|
def onload(self):
|
||||||
self.add_communication_list()
|
self.add_communication_list()
|
||||||
|
customer = webnotes.conn.get_value("Customer", {"lead_name": self.doc.name})
|
||||||
|
if customer:
|
||||||
|
self.doc.fields["__is_customer"] = customer
|
||||||
|
|
||||||
def on_communication_sent(self, comm):
|
def on_communication_sent(self, comm):
|
||||||
webnotes.conn.set(self.doc, 'status', 'Replied')
|
webnotes.conn.set(self.doc, 'status', 'Replied')
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
{
|
{
|
||||||
"creation": "2013-04-10 11:45:37",
|
"creation": "2013-04-10 11:45:37",
|
||||||
"docstatus": 0,
|
"docstatus": 0,
|
||||||
"modified": "2013-06-14 16:20:17",
|
"modified": "2013-06-28 15:08:26",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"owner": "Administrator"
|
"owner": "Administrator"
|
||||||
},
|
},
|
||||||
@ -164,9 +164,33 @@
|
|||||||
"doctype": "DocField",
|
"doctype": "DocField",
|
||||||
"fieldname": "contact_info",
|
"fieldname": "contact_info",
|
||||||
"fieldtype": "Section Break",
|
"fieldtype": "Section Break",
|
||||||
"label": "Contact Info",
|
"label": "Address & Contact",
|
||||||
"oldfieldtype": "Column Break"
|
"oldfieldtype": "Column Break"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"depends_on": "eval:doc.__islocal",
|
||||||
|
"doctype": "DocField",
|
||||||
|
"fieldname": "address_desc",
|
||||||
|
"fieldtype": "HTML",
|
||||||
|
"hidden": 0,
|
||||||
|
"label": "Address Desc",
|
||||||
|
"options": "<em>Addresses will appear only when you save the lead</em>",
|
||||||
|
"print_hide": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"doctype": "DocField",
|
||||||
|
"fieldname": "address_html",
|
||||||
|
"fieldtype": "HTML",
|
||||||
|
"hidden": 0,
|
||||||
|
"label": "Address HTML",
|
||||||
|
"print_hide": 0,
|
||||||
|
"read_only": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"doctype": "DocField",
|
||||||
|
"fieldname": "column_break2",
|
||||||
|
"fieldtype": "Column Break"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"doctype": "DocField",
|
"doctype": "DocField",
|
||||||
"fieldname": "remark",
|
"fieldname": "remark",
|
||||||
@ -219,70 +243,6 @@
|
|||||||
"options": "Territory",
|
"options": "Territory",
|
||||||
"print_hide": 1
|
"print_hide": 1
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"doctype": "DocField",
|
|
||||||
"fieldname": "column_break2",
|
|
||||||
"fieldtype": "Column Break"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"doctype": "DocField",
|
|
||||||
"fieldname": "address_line1",
|
|
||||||
"fieldtype": "Data",
|
|
||||||
"label": "Address Line 1",
|
|
||||||
"oldfieldname": "address_line1",
|
|
||||||
"oldfieldtype": "Data",
|
|
||||||
"print_hide": 1,
|
|
||||||
"reqd": 0
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"doctype": "DocField",
|
|
||||||
"fieldname": "address_line2",
|
|
||||||
"fieldtype": "Data",
|
|
||||||
"label": "Address Line 2",
|
|
||||||
"oldfieldname": "address_line2",
|
|
||||||
"oldfieldtype": "Data",
|
|
||||||
"print_hide": 1
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"doctype": "DocField",
|
|
||||||
"fieldname": "city",
|
|
||||||
"fieldtype": "Data",
|
|
||||||
"label": "City",
|
|
||||||
"oldfieldname": "city",
|
|
||||||
"oldfieldtype": "Select",
|
|
||||||
"print_hide": 1,
|
|
||||||
"reqd": 0
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"doctype": "DocField",
|
|
||||||
"fieldname": "country",
|
|
||||||
"fieldtype": "Select",
|
|
||||||
"label": "Country",
|
|
||||||
"oldfieldname": "country",
|
|
||||||
"oldfieldtype": "Select",
|
|
||||||
"options": "link:Country",
|
|
||||||
"print_hide": 1,
|
|
||||||
"reqd": 0
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"doctype": "DocField",
|
|
||||||
"fieldname": "state",
|
|
||||||
"fieldtype": "Data",
|
|
||||||
"label": "State",
|
|
||||||
"oldfieldname": "state",
|
|
||||||
"oldfieldtype": "Select",
|
|
||||||
"options": "Suggest",
|
|
||||||
"print_hide": 1
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"doctype": "DocField",
|
|
||||||
"fieldname": "pincode",
|
|
||||||
"fieldtype": "Data",
|
|
||||||
"label": "Pin Code",
|
|
||||||
"oldfieldname": "pincode",
|
|
||||||
"oldfieldtype": "Data",
|
|
||||||
"print_hide": 1
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"doctype": "DocField",
|
"doctype": "DocField",
|
||||||
"fieldname": "more_info",
|
"fieldname": "more_info",
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
{
|
{
|
||||||
"creation": "2013-05-24 19:29:08",
|
"creation": "2013-05-24 19:29:08",
|
||||||
"docstatus": 0,
|
"docstatus": 0,
|
||||||
"modified": "2013-06-27 11:31:49",
|
"modified": "2013-06-28 12:47:10",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"owner": "Administrator"
|
"owner": "Administrator"
|
||||||
},
|
},
|
||||||
@ -690,6 +690,24 @@
|
|||||||
"reqd": 0,
|
"reqd": 0,
|
||||||
"search_index": 0
|
"search_index": 0
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"doctype": "DocField",
|
||||||
|
"fieldname": "shipping_address_name",
|
||||||
|
"fieldtype": "Link",
|
||||||
|
"hidden": 0,
|
||||||
|
"label": "Shipping Address Name",
|
||||||
|
"options": "Address",
|
||||||
|
"print_hide": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"doctype": "DocField",
|
||||||
|
"fieldname": "shipping_address",
|
||||||
|
"fieldtype": "Small Text",
|
||||||
|
"hidden": 1,
|
||||||
|
"label": "Shipping Address",
|
||||||
|
"print_hide": 1,
|
||||||
|
"read_only": 1
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"depends_on": "customer",
|
"depends_on": "customer",
|
||||||
"doctype": "DocField",
|
"doctype": "DocField",
|
||||||
|
@ -27,6 +27,9 @@ wn.require("app/js/transaction.js");
|
|||||||
erpnext.selling.SellingController = erpnext.TransactionController.extend({
|
erpnext.selling.SellingController = erpnext.TransactionController.extend({
|
||||||
setup: function() {
|
setup: function() {
|
||||||
this.frm.add_fetch("sales_partner", "commission_rate", "commission_rate");
|
this.frm.add_fetch("sales_partner", "commission_rate", "commission_rate");
|
||||||
|
|
||||||
|
if(this.frm.fields_dict.shipping_address_name && this.frm.fields_dict.customer_address)
|
||||||
|
this.frm.fields_dict.shipping_address_name.get_query = this.frm.fields_dict['customer_address'].get_query;
|
||||||
},
|
},
|
||||||
|
|
||||||
onload: function() {
|
onload: function() {
|
||||||
@ -476,6 +479,27 @@ erpnext.selling.SellingController = erpnext.TransactionController.extend({
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
|
shipping_address_name: function () {
|
||||||
|
var me = this;
|
||||||
|
if(this.frm.doc.shipping_address_name) {
|
||||||
|
wn.model.with_doc("Address", this.frm.doc.shipping_address_name, function(name) {
|
||||||
|
var address = wn.model.get_doc("Address", name);
|
||||||
|
|
||||||
|
var out = $.map(["address_line1", "address_line2", "city"],
|
||||||
|
function(f) { return address[f]; });
|
||||||
|
|
||||||
|
var state_pincode = $.map(["state", "pincode"], function(f) { return address[f]; }).join(" ");
|
||||||
|
if(state_pincode) out.push(state_pincode);
|
||||||
|
|
||||||
|
if(address["country"]) out.push(address["country"]);
|
||||||
|
|
||||||
|
out.concat($.map([["Phone:", address["phone"]], ["Fax:", address["fax"]]],
|
||||||
|
function(val) { return val[1] ? val.join(" ") : null; }));
|
||||||
|
|
||||||
|
me.frm.set_value("shipping_address", out.join("\n"));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// to save previous state of cur_frm.cscript
|
// to save previous state of cur_frm.cscript
|
||||||
|
@ -79,29 +79,6 @@ cur_frm.cscript.customer_address = cur_frm.cscript.contact_person = function(doc
|
|||||||
if(doc.customer) get_server_fields('get_customer_address', JSON.stringify({customer: doc.customer, address: doc.customer_address, contact: doc.contact_person}),'', doc, dt, dn, 1);
|
if(doc.customer) get_server_fields('get_customer_address', JSON.stringify({customer: doc.customer, address: doc.customer_address, contact: doc.contact_person}),'', doc, dt, dn, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
cur_frm.fields_dict.shipping_address_name.get_query = cur_frm.fields_dict['customer_address'].get_query;
|
|
||||||
|
|
||||||
cur_frm.cscript.shipping_address_name = function() {
|
|
||||||
if(cur_frm.doc.shipping_address_name) {
|
|
||||||
wn.model.with_doc("Address", cur_frm.doc.shipping_address_name, function(name) {
|
|
||||||
var address = wn.model.get_doc("Address", name);
|
|
||||||
|
|
||||||
var out = $.map(["address_line1", "address_line2", "city"],
|
|
||||||
function(f) { return address[f]; });
|
|
||||||
|
|
||||||
var state_pincode = $.map(["state", "pincode"], function(f) { return address[f]; }).join(" ");
|
|
||||||
if(state_pincode) out.push(state_pincode);
|
|
||||||
|
|
||||||
if(address["country"]) out.push(address["country"]);
|
|
||||||
|
|
||||||
out.concat($.map([["Phone:", address["phone"]], ["Fax:", address["fax"]]],
|
|
||||||
function(val) { return val[1] ? val.join(" ") : null; }));
|
|
||||||
|
|
||||||
cur_frm.set_value("shipping_address", out.join("\n"));
|
|
||||||
});
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
cur_frm.cscript.pull_quotation_details = function(doc,dt,dn) {
|
cur_frm.cscript.pull_quotation_details = function(doc,dt,dn) {
|
||||||
var callback = function(r,rt){
|
var callback = function(r,rt){
|
||||||
var doc = locals[cur_frm.doctype][cur_frm.docname];
|
var doc = locals[cur_frm.doctype][cur_frm.docname];
|
||||||
|
@ -59,8 +59,8 @@ cur_frm.cscript.render_address_row = function(wrapper, data) {
|
|||||||
// prepare data
|
// prepare data
|
||||||
data.fullname = data.address_type;
|
data.fullname = data.address_type;
|
||||||
data.primary = '';
|
data.primary = '';
|
||||||
if (data.is_primary_address) data.primary += ' [Primary]';
|
if (data.is_primary_address) data.primary += ' [Preferred for Billing]';
|
||||||
if (data.is_shipping_address) data.primary += ' [Shipping]';
|
if (data.is_shipping_address) data.primary += ' [Preferred for Shipping]';
|
||||||
|
|
||||||
// prepare address
|
// prepare address
|
||||||
var address = [];
|
var address = [];
|
||||||
|
@ -27,7 +27,7 @@ class DocType:
|
|||||||
|
|
||||||
def autoname(self):
|
def autoname(self):
|
||||||
if not self.doc.address_title:
|
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:
|
if self.doc.address_title:
|
||||||
self.doc.name = cstr(self.doc.address_title).strip() + "-" + cstr(self.doc.address_type).strip()
|
self.doc.name = cstr(self.doc.address_title).strip() + "-" + cstr(self.doc.address_type).strip()
|
||||||
@ -35,40 +35,32 @@ class DocType:
|
|||||||
else:
|
else:
|
||||||
webnotes.msgprint("""Address Title is mandatory.""", raise_exception=True)
|
webnotes.msgprint("""Address Title is mandatory.""", raise_exception=True)
|
||||||
|
|
||||||
|
|
||||||
def validate(self):
|
def validate(self):
|
||||||
self.validate_primary_address()
|
self.validate_primary_address()
|
||||||
self.validate_shipping_address()
|
self.validate_shipping_address()
|
||||||
|
|
||||||
def validate_primary_address(self):
|
def validate_primary_address(self):
|
||||||
"""Validate that there can only be one primary address for particular customer, supplier"""
|
"""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.is_primary_address == 1:
|
||||||
if self.doc.customer:
|
self._unset_other("is_primary_address")
|
||||||
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
|
|
||||||
|
|
||||||
|
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):
|
def validate_shipping_address(self):
|
||||||
"""Validate that there can only be one shipping address for particular customer, supplier"""
|
"""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.is_shipping_address == 1:
|
||||||
if self.doc.customer:
|
self._unset_other("is_shipping_address")
|
||||||
sql("update tabAddress set is_shipping_address=0 where customer = '%s'" % (self.doc.customer))
|
|
||||||
elif self.doc.supplier:
|
def _unset_other(self, is_address_type):
|
||||||
sql("update tabAddress set is_shipping_address=0 where supplier = '%s'" % (self.doc.supplier))
|
for fieldname in ["customer", "supplier", "sales_partner", "lead"]:
|
||||||
elif self.doc.sales_partner:
|
if self.doc.fields.get(fieldname):
|
||||||
sql("update tabAddress set is_shipping_address=0 where sales_partner = '%s'" % (self.doc.sales_partner))
|
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
|
@ -2,7 +2,7 @@
|
|||||||
{
|
{
|
||||||
"creation": "2013-01-10 16:34:32",
|
"creation": "2013-01-10 16:34:32",
|
||||||
"docstatus": 0,
|
"docstatus": 0,
|
||||||
"modified": "2013-01-29 13:24:45",
|
"modified": "2013-06-28 17:06:32",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"owner": "Administrator"
|
"owner": "Administrator"
|
||||||
},
|
},
|
||||||
@ -46,11 +46,11 @@
|
|||||||
"label": "Address Details"
|
"label": "Address Details"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"description": "e.g. Office, Billing, Shipping",
|
|
||||||
"doctype": "DocField",
|
"doctype": "DocField",
|
||||||
"fieldname": "address_type",
|
"fieldname": "address_type",
|
||||||
"fieldtype": "Data",
|
"fieldtype": "Select",
|
||||||
"label": "Address Type",
|
"label": "Address Type",
|
||||||
|
"options": "Billing\nShipping\nOffice\nPersonal\nPlant\nPostal\nShop\nSubsidiary\nWarehouse\nOther",
|
||||||
"reqd": 1
|
"reqd": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -145,7 +145,7 @@
|
|||||||
"doctype": "DocField",
|
"doctype": "DocField",
|
||||||
"fieldname": "is_primary_address",
|
"fieldname": "is_primary_address",
|
||||||
"fieldtype": "Check",
|
"fieldtype": "Check",
|
||||||
"label": "Is Primary Address"
|
"label": "Preferred Billing Address"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"default": "0",
|
"default": "0",
|
||||||
@ -154,7 +154,7 @@
|
|||||||
"fieldname": "is_shipping_address",
|
"fieldname": "is_shipping_address",
|
||||||
"fieldtype": "Check",
|
"fieldtype": "Check",
|
||||||
"in_list_view": 1,
|
"in_list_view": 1,
|
||||||
"label": "Is Shipping Address"
|
"label": "Preferred Shipping Address"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"doctype": "DocField",
|
"doctype": "DocField",
|
||||||
@ -207,6 +207,27 @@
|
|||||||
"label": "Sales Partner",
|
"label": "Sales Partner",
|
||||||
"options": "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",
|
"doctype": "DocPerm",
|
||||||
"role": "Sales User"
|
"role": "Sales User"
|
||||||
|
@ -171,20 +171,29 @@ class TransactionBase(StatusUpdater):
|
|||||||
# Get Lead Details
|
# Get Lead Details
|
||||||
# -----------------------
|
# -----------------------
|
||||||
def get_lead_details(self, name):
|
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)
|
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 {}
|
||||||
|
|
||||||
extract = lambda x: details and details[0] and details[0].get(x,'') or ''
|
address_display = ""
|
||||||
address_fields = [('','address_line1'),('\n','address_line2'),('\n','city'),(' ','pincode'),('\n','state'),('\n','country'),('\nPhone: ','contact_no')]
|
if details:
|
||||||
address_display = ''.join([a[0]+extract(a[1]) for a in address_fields if extract(a[1])])
|
details = details[0]
|
||||||
if address_display.startswith('\n'): address_display = address_display[1:]
|
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 = {
|
ret = {
|
||||||
'contact_display' : extract('lead_name'),
|
'contact_display' : lead.get('lead_name'),
|
||||||
'address_display' : address_display,
|
'address_display' : address_display,
|
||||||
'territory' : extract('territory'),
|
'territory' : lead.get('territory'),
|
||||||
'contact_mobile' : extract('mobile_no'),
|
'contact_mobile' : lead.get('mobile_no'),
|
||||||
'contact_email' : extract('email_id'),
|
'contact_email' : lead.get('email_id'),
|
||||||
'customer_name' : extract('company_name') or extract('lead_name')
|
'customer_name' : lead.get('company_name') or lead.get('lead_name')
|
||||||
}
|
}
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user