mirror of
https://github.com/frappe/erpnext.git
synced 2026-05-31 10:49:09 +00:00
started cleanup of address / contact calls - partly fixed for customer, to fix shipping_address, get_pos_values, for all supplier transactions
This commit is contained in:
@@ -9,16 +9,8 @@ from webnotes.model.doc import addchild
|
||||
|
||||
from erpnext.controllers.status_updater import StatusUpdater
|
||||
|
||||
class TransactionBase(StatusUpdater):
|
||||
def get_default_address_and_contact(self, party_field, party_name=None):
|
||||
"""get a dict of default field values of address and contact for a given party type
|
||||
party_type can be one of: customer, supplier"""
|
||||
if not party_name:
|
||||
party_name = self.doc.fields.get(party_field)
|
||||
|
||||
return get_default_address_and_contact(party_field, party_name,
|
||||
fetch_shipping_address=True if self.meta.get_field("shipping_address_name") else False)
|
||||
|
||||
|
||||
class TransactionBase(StatusUpdater):
|
||||
def set_address_fields(self):
|
||||
party_type, party_name = self.get_party_type_and_name()
|
||||
|
||||
@@ -53,80 +45,14 @@ class TransactionBase(StatusUpdater):
|
||||
break
|
||||
|
||||
return self._party_type_and_name
|
||||
|
||||
def get_customer_defaults(self):
|
||||
if not self.doc.customer: return {}
|
||||
|
||||
out = self.get_default_address_and_contact("customer")
|
||||
|
||||
customer = webnotes.doc("Customer", self.doc.customer)
|
||||
for f in ['customer_name', 'customer_group', 'territory']:
|
||||
out[f] = customer.fields.get(f)
|
||||
|
||||
# fields prepended with default in Customer doctype
|
||||
for f in ['sales_partner', 'commission_rate', 'currency', 'price_list']:
|
||||
if customer.fields.get("default_" + f):
|
||||
out[f] = customer.fields.get("default_" + f)
|
||||
|
||||
return out
|
||||
|
||||
def set_customer_defaults(self):
|
||||
"""
|
||||
For a customer:
|
||||
1. Sets default address and contact
|
||||
2. Sets values like Territory, Customer Group, etc.
|
||||
3. Clears existing Sales Team and fetches the one mentioned in Customer
|
||||
"""
|
||||
customer_defaults = self.get_customer_defaults()
|
||||
|
||||
customer_defaults["selling_price_list"] = customer_defaults.get("price_list") or \
|
||||
webnotes.conn.get_value("Customer Group", self.doc.customer_group, "default_price_list") or \
|
||||
self.doc.selling_price_list
|
||||
|
||||
for fieldname, val in customer_defaults.items():
|
||||
if self.meta.get_field(fieldname):
|
||||
self.doc.fields[fieldname] = val
|
||||
|
||||
if self.meta.get_field("sales_team") and self.doc.customer:
|
||||
self.set_sales_team_for_customer()
|
||||
|
||||
def set_sales_team_for_customer(self):
|
||||
from webnotes.model import default_fields
|
||||
|
||||
# clear table
|
||||
self.doclist = self.doc.clear_table(self.doclist, "sales_team")
|
||||
|
||||
sales_team = webnotes.conn.sql("""select * from `tabSales Team`
|
||||
where parenttype="Customer" and parent=%s""", self.doc.customer, as_dict=True)
|
||||
for i, sales_person in enumerate(sales_team):
|
||||
# remove default fields
|
||||
for fieldname in default_fields:
|
||||
if fieldname in sales_person:
|
||||
del sales_person[fieldname]
|
||||
|
||||
sales_person.update({
|
||||
"doctype": "Sales Team",
|
||||
"parentfield": "sales_team",
|
||||
"idx": i+1
|
||||
})
|
||||
|
||||
# add child
|
||||
self.doclist.append(sales_person)
|
||||
|
||||
|
||||
def get_supplier_defaults(self):
|
||||
out = self.get_default_address_and_contact("supplier")
|
||||
|
||||
supplier = webnotes.doc("Supplier", self.doc.supplier)
|
||||
out["supplier_name"] = supplier.supplier_name
|
||||
if supplier.default_currency:
|
||||
out["currency"] = supplier.default_currency
|
||||
if supplier.default_price_list:
|
||||
out["buying_price_list"] = supplier.default_price_list
|
||||
|
||||
return out
|
||||
from erpnext.buying.doctype.supplier.supplier import get_supplier_details
|
||||
return get_supplier_details(self.doc.supplier)
|
||||
|
||||
def set_supplier_defaults(self):
|
||||
for fieldname, val in self.get_supplier_defaults().items():
|
||||
from erpnext.buying.doctype.supplier.supplier import get_supplier_details
|
||||
for fieldname, val in get_supplier_details(self.doc.supplier).iteritems():
|
||||
if self.meta.get_field(fieldname):
|
||||
self.doc.fields[fieldname] = val
|
||||
|
||||
@@ -143,21 +69,7 @@ class TransactionBase(StatusUpdater):
|
||||
|
||||
def set_lead_defaults(self):
|
||||
self.doc.fields.update(self.get_lead_defaults())
|
||||
|
||||
def get_customer_address(self, args):
|
||||
args = json.loads(args)
|
||||
ret = {
|
||||
'customer_address' : args["address"],
|
||||
'address_display' : get_address_display(args["address"]),
|
||||
}
|
||||
if args.get('contact'):
|
||||
ret.update(map_party_contact_details(args['contact']))
|
||||
|
||||
return ret
|
||||
|
||||
def set_customer_address(self, args):
|
||||
self.doc.fields.update(self.get_customer_address(args))
|
||||
|
||||
|
||||
# TODO deprecate this - used only in sales_order.js
|
||||
def get_shipping_address(self, name):
|
||||
shipping_address = get_default_address("customer", name, is_shipping_address=True)
|
||||
@@ -306,34 +218,6 @@ class TransactionBase(StatusUpdater):
|
||||
for field, condition in fields:
|
||||
if prevdoc_values[field] is not None:
|
||||
self.validate_value(field, condition, prevdoc_values[field], doc)
|
||||
|
||||
def get_default_address_and_contact(party_field, party_name, fetch_shipping_address=False):
|
||||
out = {}
|
||||
|
||||
# get addresses
|
||||
billing_address = get_default_address(party_field, party_name)
|
||||
if billing_address:
|
||||
out[party_field + "_address"] = billing_address
|
||||
out["address_display"] = get_address_display(billing_address)
|
||||
else:
|
||||
out[party_field + "_address"] = out["address_display"] = None
|
||||
|
||||
if fetch_shipping_address:
|
||||
shipping_address = get_default_address(party_field, party_name, is_shipping_address=True)
|
||||
if shipping_address:
|
||||
out["shipping_address_name"] = shipping_address
|
||||
out["shipping_address"] = get_address_display(shipping_address)
|
||||
else:
|
||||
out["shipping_address_name"] = out["shipping_address"] = None
|
||||
|
||||
# get contact
|
||||
if party_field == "lead":
|
||||
out["customer_address"] = out.get("lead_address")
|
||||
out.update(map_lead_contact_details(party_name))
|
||||
else:
|
||||
out.update(map_party_contact_details(None, party_field, party_name))
|
||||
|
||||
return out
|
||||
|
||||
def get_default_address(party_field, party_name, is_shipping_address=False):
|
||||
if is_shipping_address:
|
||||
@@ -352,23 +236,7 @@ def get_default_contact(party_field, party_name):
|
||||
(party_name,))
|
||||
|
||||
return contact[0][0] if contact else None
|
||||
|
||||
def get_address_display(address_dict):
|
||||
if not isinstance(address_dict, dict):
|
||||
address_dict = webnotes.conn.get_value("Address", address_dict, "*", as_dict=True) or {}
|
||||
|
||||
meta = webnotes.get_doctype("Address")
|
||||
sequence = (("", "address_line1"), ("\n", "address_line2"), ("\n", "city"),
|
||||
("\n", "state"), ("\n" + meta.get_label("pincode") + ": ", "pincode"), ("\n", "country"),
|
||||
("\n" + meta.get_label("phone") + ": ", "phone"), ("\n" + meta.get_label("fax") + ": ", "fax"))
|
||||
|
||||
display = ""
|
||||
for separator, fieldname in sequence:
|
||||
if address_dict.get(fieldname):
|
||||
display += separator + address_dict.get(fieldname)
|
||||
|
||||
return display.strip()
|
||||
|
||||
def map_lead_contact_details(party_name):
|
||||
out = {}
|
||||
for fieldname in ["contact_display", "contact_email", "contact_mobile", "contact_phone"]:
|
||||
|
||||
Reference in New Issue
Block a user