Fixes for model-cleanup frappe/frappe#478
diff --git a/erpnext/accounts/party.py b/erpnext/accounts/party.py
index 601fcd1..6cabf1d 100644
--- a/erpnext/accounts/party.py
+++ b/erpnext/accounts/party.py
@@ -11,15 +11,15 @@
from erpnext.utilities.doctype.contact.contact import get_contact_details
@frappe.whitelist()
-def get_party_details(party=None, account=None, party_type="Customer", company=None,
+def get_party_details(party=None, account=None, party_type="Customer", company=None,
posting_date=None, price_list=None, currency=None):
return _get_party_details(party, account, party_type, company, posting_date, price_list, currency)
-def _get_party_details(party=None, account=None, party_type="Customer", company=None,
+def _get_party_details(party=None, account=None, party_type="Customer", company=None,
posting_date=None, price_list=None, currency=None, ignore_permissions=False):
out = frappe._dict(set_account_and_due_date(party, account, party_type, company, posting_date))
-
+
party = out[party_type.lower()]
if not ignore_permissions and not frappe.has_permission(party_type, "read", party):
@@ -31,38 +31,41 @@
set_contact_details(out, party, party_type)
set_other_values(out, party, party_type)
set_price_list(out, party, party_type, price_list)
-
+
if not out.get("currency"):
out["currency"] = currency
-
+
# sales team
if party_type=="Customer":
out["sales_team"] = [{
- "sales_person": d.sales_person,
+ "sales_person": d.sales_person,
"sales_designation": d.sales_designation
} for d in party.get("sales_team")]
-
+
return out
def set_address_details(out, party, party_type):
billing_address_field = "customer_address" if party_type == "Lead" \
else party_type.lower() + "_address"
- out[billing_address_field] = frappe.db.get_value("Address",
+ out[billing_address_field] = frappe.db.get_value("Address",
{party_type.lower(): party.name, "is_primary_address":1}, "name")
-
+
# address display
out.address_display = get_address_display(out[billing_address_field])
-
+
# shipping address
if party_type in ["Customer", "Lead"]:
- out.shipping_address_name = frappe.db.get_value("Address",
+ out.shipping_address_name = frappe.db.get_value("Address",
{party_type.lower(): party.name, "is_shipping_address":1}, "name")
out.shipping_address = get_address_display(out["shipping_address_name"])
-
+
def set_contact_details(out, party, party_type):
- out.contact_person = frappe.db.get_value("Contact",
+ out.contact_person = frappe.db.get_value("Contact",
{party_type.lower(): party.name, "is_primary_contact":1}, "name")
-
+
+ if not out.contact_person:
+ return
+
out.update(get_contact_details(out.contact_person))
def set_other_values(out, party, party_type):
@@ -73,7 +76,7 @@
to_copy = ["supplier_name", "supplier_type"]
for f in to_copy:
out[f] = party.get(f)
-
+
# fields prepended with default in Customer doctype
for f in ['currency', 'taxes_and_charges'] \
+ (['sales_partner', 'commission_rate'] if party_type=="Customer" else []):
@@ -81,16 +84,16 @@
out[f] = party.get("default_" + f)
def set_price_list(out, party, party_type, given_price_list):
- # price list
+ # price list
price_list = get_restrictions().get("Price List")
if isinstance(price_list, list):
price_list = None
if not price_list:
price_list = party.default_price_list
-
+
if not price_list and party_type=="Customer":
- price_list = frappe.db.get_value("Customer Group",
+ price_list = frappe.db.get_value("Customer Group",
party.customer_group, "default_price_list")
if not price_list:
@@ -98,9 +101,9 @@
if price_list:
out.price_list_currency = frappe.db.get_value("Price List", price_list, "currency")
-
+
out["selling_price_list" if party.doctype=="Customer" else "buying_price_list"] = price_list
-
+
def set_account_and_due_date(party, account, party_type, company, posting_date):
if not posting_date:
@@ -108,13 +111,13 @@
return {
party_type.lower(): party
}
-
+
if party:
account = get_party_account(company, party, party_type)
elif account:
party = frappe.db.get_value('Account', account, 'master_name')
- account_fieldname = "debit_to" if party_type=="Customer" else "credit_to"
+ account_fieldname = "debit_to" if party_type=="Customer" else "credit_to"
out = {
party_type.lower(): party,
@@ -133,8 +136,8 @@
if not acc_head:
create_party_account(party, party_type, company)
-
- return acc_head
+
+ return acc_head
def get_due_date(posting_date, party, party_type, account, company):
"""Set Due Date = Posting Date + Credit Days"""
@@ -147,34 +150,34 @@
credit_days = frappe.db.get_value(party_type, party, "credit_days")
if company and not credit_days:
credit_days = frappe.db.get_value("Company", company, "credit_days")
-
+
due_date = add_days(posting_date, credit_days) if credit_days else posting_date
- return due_date
+ return due_date
def create_party_account(party, party_type, company):
if not company:
frappe.throw(_("Company is required"))
-
- company_details = frappe.db.get_value("Company", company,
+
+ company_details = frappe.db.get_value("Company", company,
["abbr", "receivables_group", "payables_group"], as_dict=True)
if not frappe.db.exists("Account", (party + " - " + company_details.abbr)):
parent_account = company_details.receivables_group \
if party_type=="Customer" else company_details.payables_group
if not parent_account:
frappe.throw(_("Please enter Account Receivable/Payable group in company master"))
-
+
# create
account = frappe.get_doc({
"doctype": "Account",
'account_name': party,
- 'parent_account': parent_account,
+ 'parent_account': parent_account,
'group_or_ledger':'Ledger',
- 'company': company,
- 'master_type': party_type,
+ 'company': company,
+ 'master_type': party_type,
'master_name': party,
"freeze_account": "No",
"report_type": "Balance Sheet"
}).insert(ignore_permissions=True)
-
+
frappe.msgprint(_("Account Created") + ": " + account.name)
diff --git a/erpnext/buying/doctype/buying_settings/buying_settings.json b/erpnext/buying/doctype/buying_settings/buying_settings.json
index 808c39d..602b0b7 100644
--- a/erpnext/buying/doctype/buying_settings/buying_settings.json
+++ b/erpnext/buying/doctype/buying_settings/buying_settings.json
@@ -1,75 +1,75 @@
{
- "creation": "2013-06-25 11:04:03.000000",
- "description": "Settings for Buying Module",
- "docstatus": 0,
- "doctype": "DocType",
- "document_type": "Other",
+ "creation": "2013-06-25 11:04:03.000000",
+ "description": "Settings for Buying Module",
+ "docstatus": 0,
+ "doctype": "DocType",
+ "document_type": "Other",
"fields": [
{
- "default": "Supplier Name",
- "fieldname": "supp_master_name",
- "fieldtype": "Select",
- "label": "Supplier Naming By",
- "options": "Supplier Name\nNaming Series",
+ "default": "Supplier Name",
+ "fieldname": "supp_master_name",
+ "fieldtype": "Select",
+ "label": "Supplier Naming By",
+ "options": "Supplier Name\nNaming Series",
"permlevel": 0
- },
+ },
{
- "fieldname": "supplier_type",
- "fieldtype": "Link",
- "label": "Default Supplier Type",
- "options": "Supplier Type",
+ "fieldname": "supplier_type",
+ "fieldtype": "Link",
+ "label": "Default Supplier Type",
+ "options": "Supplier Type",
"permlevel": 0
- },
+ },
{
- "fieldname": "buying_price_list",
- "fieldtype": "Link",
- "label": "Default Buying Price List",
- "options": "Price List",
+ "fieldname": "buying_price_list",
+ "fieldtype": "Link",
+ "label": "Default Buying Price List",
+ "options": "Price List",
"permlevel": 0
- },
+ },
{
- "fieldname": "column_break_3",
- "fieldtype": "Column Break",
+ "fieldname": "column_break_3",
+ "fieldtype": "Column Break",
"permlevel": 0
- },
+ },
{
- "fieldname": "maintain_same_rate",
- "fieldtype": "Check",
- "label": "Maintain same rate throughout purchase cycle",
+ "fieldname": "maintain_same_rate",
+ "fieldtype": "Check",
+ "label": "Maintain same rate throughout purchase cycle",
"permlevel": 0
- },
+ },
{
- "fieldname": "po_required",
- "fieldtype": "Select",
- "label": "Purchase Order Required",
- "options": "No\nYes",
+ "fieldname": "po_required",
+ "fieldtype": "Select",
+ "label": "Purchase Order Required",
+ "options": "No\nYes",
"permlevel": 0
- },
+ },
{
- "fieldname": "pr_required",
- "fieldtype": "Select",
- "label": "Purchase Receipt Required",
- "options": "No\nYes",
+ "fieldname": "pr_required",
+ "fieldtype": "Select",
+ "label": "Purchase Receipt Required",
+ "options": "No\nYes",
"permlevel": 0
}
- ],
- "icon": "icon-cog",
- "idx": 1,
- "issingle": 1,
- "modified": "2014-02-19 19:02:00.000000",
- "modified_by": "Administrator",
- "module": "Buying",
- "name": "Buying Settings",
- "owner": "Administrator",
+ ],
+ "icon": "icon-cog",
+ "idx": 1,
+ "issingle": 1,
+ "modified": "2014-02-19 19:02:00.000000",
+ "modified_by": "Administrator",
+ "module": "Buying",
+ "name": "Buying Settings",
+ "owner": "Administrator",
"permissions": [
{
- "create": 1,
- "email": 1,
- "permlevel": 0,
- "print": 1,
- "read": 1,
- "role": "System Manager",
+ "create": 1,
+ "email": 1,
+ "permlevel": 0,
+ "print": 1,
+ "read": 1,
+ "role": "System Manager",
"write": 1
}
]
-}
\ No newline at end of file
+}
diff --git a/erpnext/buying/doctype/supplier/supplier.py b/erpnext/buying/doctype/supplier/supplier.py
index e48c0bf..7c9236f 100644
--- a/erpnext/buying/doctype/supplier/supplier.py
+++ b/erpnext/buying/doctype/supplier/supplier.py
@@ -24,15 +24,15 @@
self.name = make_autoname(self.naming_series + '.#####')
def update_address(self):
- frappe.db.sql("""update `tabAddress` set supplier_name=%s, modified=NOW()
+ frappe.db.sql("""update `tabAddress` set supplier_name=%s, modified=NOW()
where supplier=%s""", (self.supplier_name, self.name))
def update_contact(self):
- frappe.db.sql("""update `tabContact` set supplier_name=%s, modified=NOW()
+ frappe.db.sql("""update `tabContact` set supplier_name=%s, modified=NOW()
where supplier=%s""", (self.supplier_name, self.name))
def update_credit_days_limit(self):
- frappe.db.sql("""update tabAccount set credit_days = %s where name = %s""",
+ frappe.db.sql("""update tabAccount set credit_days = %s where name = %s""",
(cint(self.credit_days), self.name + " - " + self.get_company_abbr()))
def on_update(self):
@@ -47,45 +47,45 @@
# update credit days and limit in account
self.update_credit_days_limit()
-
+
def get_company_abbr(self):
return frappe.db.sql("select abbr from tabCompany where name=%s", self.company)[0][0]
-
+
def validate(self):
#validation for Naming Series mandatory field...
if frappe.defaults.get_global_default('supp_master_name') == 'Naming Series':
if not self.naming_series:
msgprint("Series is Mandatory.", raise_exception=1)
-
+
def get_contacts(self,nm):
if nm:
contact_details =frappe.db.convert_to_lists(frappe.db.sql("select name, CONCAT(IFNULL(first_name,''),' ',IFNULL(last_name,'')),contact_no,email_id from `tabContact` where supplier = %s", nm))
-
+
return contact_details
else:
return ''
-
+
def delete_supplier_address(self):
for rec in frappe.db.sql("select * from `tabAddress` where supplier=%s", (self.name,), as_dict=1):
frappe.db.sql("delete from `tabAddress` where name=%s",(rec['name']))
-
+
def delete_supplier_contact(self):
- for contact in frappe.db.sql_list("""select name from `tabContact`
+ for contact in frappe.db.sql_list("""select name from `tabContact`
where supplier=%s""", self.name):
frappe.delete_doc("Contact", contact)
-
+
def delete_supplier_account(self):
"""delete supplier's ledger if exist and check balance before deletion"""
acc = frappe.db.sql("select name from `tabAccount` where master_type = 'Supplier' \
and master_name = %s and docstatus < 2", self.name)
if acc:
frappe.delete_doc('Account', acc[0][0])
-
+
def on_trash(self):
self.delete_supplier_address()
self.delete_supplier_contact()
self.delete_supplier_account()
-
+
def before_rename(self, olddn, newdn, merge=False):
from erpnext.accounts.utils import rename_account_for
rename_account_for("Supplier", olddn, newdn, merge, self.company)
@@ -99,7 +99,7 @@
self.update_supplier_address(newdn, set_field)
def update_supplier_address(self, newdn, set_field):
- frappe.db.sql("""update `tabAddress` set address_title=%(newdn)s
+ frappe.db.sql("""update `tabAddress` set address_title=%(newdn)s
{set_field} where supplier=%(newdn)s"""\
.format(set_field=set_field), ({"newdn": newdn}))
@@ -107,19 +107,19 @@
def get_dashboard_info(supplier):
if not frappe.has_permission("Supplier", "read", supplier):
frappe.msgprint("No Permission", raise_exception=True)
-
+
out = {}
for doctype in ["Supplier Quotation", "Purchase Order", "Purchase Receipt", "Purchase Invoice"]:
- out[doctype] = frappe.db.get_value(doctype,
+ out[doctype] = frappe.db.get_value(doctype,
{"supplier": supplier, "docstatus": ["!=", 2] }, "count(*)")
-
- billing = frappe.db.sql("""select sum(grand_total), sum(outstanding_amount)
- from `tabPurchase Invoice`
- where supplier=%s
+
+ billing = frappe.db.sql("""select sum(grand_total), sum(outstanding_amount)
+ from `tabPurchase Invoice`
+ where supplier=%s
and docstatus = 1
and fiscal_year = %s""", (supplier, frappe.db.get_default("fiscal_year")))
-
+
out["total_billing"] = billing[0][0]
out["total_unpaid"] = billing[0][1]
-
- return out
\ No newline at end of file
+
+ return out
diff --git a/erpnext/selling/doctype/selling_settings/selling_settings.json b/erpnext/selling/doctype/selling_settings/selling_settings.json
index ade8449..cc61278 100644
--- a/erpnext/selling/doctype/selling_settings/selling_settings.json
+++ b/erpnext/selling/doctype/selling_settings/selling_settings.json
@@ -1,90 +1,90 @@
{
- "creation": "2013-06-25 10:25:16.000000",
- "description": "Settings for Selling Module",
- "docstatus": 0,
- "doctype": "DocType",
- "document_type": "Other",
+ "creation": "2013-06-25 10:25:16.000000",
+ "description": "Settings for Selling Module",
+ "docstatus": 0,
+ "doctype": "DocType",
+ "document_type": "Other",
"fields": [
{
- "default": "Customer Name",
- "fieldname": "cust_master_name",
- "fieldtype": "Select",
- "label": "Customer Naming By",
- "options": "Customer Name\nNaming Series",
+ "default": "Customer Name",
+ "fieldname": "cust_master_name",
+ "fieldtype": "Select",
+ "label": "Customer Naming By",
+ "options": "Customer Name\nNaming Series",
"permlevel": 0
- },
+ },
{
- "description": "<a href=\"#Sales Browser/Customer Group\">Add / Edit</a>",
- "fieldname": "customer_group",
- "fieldtype": "Link",
- "label": "Default Customer Group",
- "options": "Customer Group",
+ "description": "<a href=\"#Sales Browser/Customer Group\">Add / Edit</a>",
+ "fieldname": "customer_group",
+ "fieldtype": "Link",
+ "label": "Default Customer Group",
+ "options": "Customer Group",
"permlevel": 0
- },
+ },
{
- "description": "<a href=\"#Sales Browser/Territory\">Add / Edit</a>",
- "fieldname": "territory",
- "fieldtype": "Link",
- "label": "Default Territory",
- "options": "Territory",
+ "description": "<a href=\"#Sales Browser/Territory\">Add / Edit</a>",
+ "fieldname": "territory",
+ "fieldtype": "Link",
+ "label": "Default Territory",
+ "options": "Territory",
"permlevel": 0
- },
+ },
{
- "fieldname": "selling_price_list",
- "fieldtype": "Link",
- "label": "Default Price List",
- "options": "Price List",
+ "fieldname": "selling_price_list",
+ "fieldtype": "Link",
+ "label": "Default Price List",
+ "options": "Price List",
"permlevel": 0
- },
+ },
{
- "fieldname": "column_break_5",
- "fieldtype": "Column Break",
+ "fieldname": "column_break_5",
+ "fieldtype": "Column Break",
"permlevel": 0
- },
+ },
{
- "fieldname": "so_required",
- "fieldtype": "Select",
- "label": "Sales Order Required",
- "options": "No\nYes",
+ "fieldname": "so_required",
+ "fieldtype": "Select",
+ "label": "Sales Order Required",
+ "options": "No\nYes",
"permlevel": 0
- },
+ },
{
- "fieldname": "dn_required",
- "fieldtype": "Select",
- "label": "Delivery Note Required",
- "options": "No\nYes",
+ "fieldname": "dn_required",
+ "fieldtype": "Select",
+ "label": "Delivery Note Required",
+ "options": "No\nYes",
"permlevel": 0
- },
+ },
{
- "fieldname": "maintain_same_sales_rate",
- "fieldtype": "Check",
- "label": "Maintain Same Rate Throughout Sales Cycle",
+ "fieldname": "maintain_same_sales_rate",
+ "fieldtype": "Check",
+ "label": "Maintain Same Rate Throughout Sales Cycle",
"permlevel": 0
- },
+ },
{
- "fieldname": "editable_price_list_rate",
- "fieldtype": "Check",
- "label": "Allow user to edit Price List Rate in transactions",
+ "fieldname": "editable_price_list_rate",
+ "fieldtype": "Check",
+ "label": "Allow user to edit Price List Rate in transactions",
"permlevel": 0
}
- ],
- "icon": "icon-cog",
- "idx": 1,
- "issingle": 1,
- "modified": "2014-02-19 18:35:36.000000",
- "modified_by": "Administrator",
- "module": "Selling",
- "name": "Selling Settings",
- "owner": "Administrator",
+ ],
+ "icon": "icon-cog",
+ "idx": 1,
+ "issingle": 1,
+ "modified": "2014-02-19 18:35:36.000000",
+ "modified_by": "Administrator",
+ "module": "Selling",
+ "name": "Selling Settings",
+ "owner": "Administrator",
"permissions": [
{
- "create": 1,
- "email": 1,
- "permlevel": 0,
- "print": 1,
- "read": 1,
- "role": "System Manager",
+ "create": 1,
+ "email": 1,
+ "permlevel": 0,
+ "print": 1,
+ "read": 1,
+ "role": "System Manager",
"write": 1
}
]
-}
\ No newline at end of file
+}
diff --git a/erpnext/setup/install.py b/erpnext/setup/install.py
index 5128e36..71b6203 100644
--- a/erpnext/setup/install.py
+++ b/erpnext/setup/install.py
@@ -20,7 +20,7 @@
def import_country_and_currency():
from frappe.country_info import get_all
data = get_all()
-
+
for name in data:
country = frappe._dict(data[name])
if not frappe.db.exists("Country", name):
@@ -31,7 +31,7 @@
"date_format": country.date_format or "dd-mm-yyyy",
"time_zones": "\n".join(country.timezones or [])
}).insert()
-
+
if country.currency and not frappe.db.exists("Currency", country.currency):
frappe.get_doc({
"doctype": "Currency",
@@ -44,6 +44,9 @@
def import_defaults():
records = [
+ # role
+ {'doctype': "Role", "role_name": "Analytics"},
+
# item group
{'doctype': 'Item Group', 'item_group_name': 'All Item Groups', 'is_group': 'Yes', 'parent_item_group': ''},
{'doctype': 'Item Group', 'item_group_name': 'Products', 'is_group': 'No', 'parent_item_group': 'All Item Groups'},
@@ -51,40 +54,40 @@
{'doctype': 'Item Group', 'item_group_name': 'Services', 'is_group': 'No', 'parent_item_group': 'All Item Groups'},
{'doctype': 'Item Group', 'item_group_name': 'Sub Assemblies', 'is_group': 'No', 'parent_item_group': 'All Item Groups'},
{'doctype': 'Item Group', 'item_group_name': 'Consumable', 'is_group': 'No', 'parent_item_group': 'All Item Groups'},
-
+
# deduction type
{'doctype': 'Deduction Type', 'name': 'Income Tax', 'description': 'Income Tax', 'deduction_name': 'Income Tax'},
{'doctype': 'Deduction Type', 'name': 'Professional Tax', 'description': 'Professional Tax', 'deduction_name': 'Professional Tax'},
{'doctype': 'Deduction Type', 'name': 'Provident Fund', 'description': 'Provident fund', 'deduction_name': 'Provident Fund'},
-
+
# earning type
{'doctype': 'Earning Type', 'name': 'Basic', 'description': 'Basic', 'earning_name': 'Basic', 'taxable': 'Yes'},
{'doctype': 'Earning Type', 'name': 'House Rent Allowance', 'description': 'House Rent Allowance', 'earning_name': 'House Rent Allowance', 'taxable': 'No'},
-
+
# expense claim type
{'doctype': 'Expense Claim Type', 'name': 'Calls', 'expense_type': 'Calls'},
{'doctype': 'Expense Claim Type', 'name': 'Food', 'expense_type': 'Food'},
{'doctype': 'Expense Claim Type', 'name': 'Medical', 'expense_type': 'Medical'},
{'doctype': 'Expense Claim Type', 'name': 'Others', 'expense_type': 'Others'},
{'doctype': 'Expense Claim Type', 'name': 'Travel', 'expense_type': 'Travel'},
-
+
# leave type
{'doctype': 'Leave Type', 'leave_type_name': 'Casual Leave', 'name': 'Casual Leave', 'is_encash': 1, 'is_carry_forward': 1, 'max_days_allowed': '3', },
{'doctype': 'Leave Type', 'leave_type_name': 'Compensatory Off', 'name': 'Compensatory Off', 'is_encash': 0, 'is_carry_forward': 0, },
{'doctype': 'Leave Type', 'leave_type_name': 'Sick Leave', 'name': 'Sick Leave', 'is_encash': 0, 'is_carry_forward': 0, },
{'doctype': 'Leave Type', 'leave_type_name': 'Privilege Leave', 'name': 'Privilege Leave', 'is_encash': 0, 'is_carry_forward': 0, },
{'doctype': 'Leave Type', 'leave_type_name': 'Leave Without Pay', 'name': 'Leave Without Pay', 'is_encash': 0, 'is_carry_forward': 0, 'is_lwp':1},
-
+
# territory
{'doctype': 'Territory', 'territory_name': 'All Territories', 'is_group': 'Yes', 'name': 'All Territories', 'parent_territory': ''},
-
+
# customer group
{'doctype': 'Customer Group', 'customer_group_name': 'All Customer Groups', 'is_group': 'Yes', 'name': 'All Customer Groups', 'parent_customer_group': ''},
{'doctype': 'Customer Group', 'customer_group_name': 'Individual', 'is_group': 'No', 'parent_customer_group': 'All Customer Groups'},
{'doctype': 'Customer Group', 'customer_group_name': 'Commercial', 'is_group': 'No', 'parent_customer_group': 'All Customer Groups'},
{'doctype': 'Customer Group', 'customer_group_name': 'Non Profit', 'is_group': 'No', 'parent_customer_group': 'All Customer Groups'},
{'doctype': 'Customer Group', 'customer_group_name': 'Government', 'is_group': 'No', 'parent_customer_group': 'All Customer Groups'},
-
+
# supplier type
{'doctype': 'Supplier Type', 'supplier_type': 'Services'},
{'doctype': 'Supplier Type', 'supplier_type': 'Local'},
@@ -93,33 +96,33 @@
{'doctype': 'Supplier Type', 'supplier_type': 'Hardware'},
{'doctype': 'Supplier Type', 'supplier_type': 'Pharmaceutical'},
{'doctype': 'Supplier Type', 'supplier_type': 'Distributor'},
-
+
# Sales Person
{'doctype': 'Sales Person', 'sales_person_name': 'Sales Team', 'is_group': "Yes", "parent_sales_person": ""},
-
+
# UOM
- {'uom_name': 'Unit', 'doctype': 'UOM', 'name': 'Unit', "must_be_whole_number": 1},
- {'uom_name': 'Box', 'doctype': 'UOM', 'name': 'Box', "must_be_whole_number": 1},
- {'uom_name': 'Kg', 'doctype': 'UOM', 'name': 'Kg'},
- {'uom_name': 'Nos', 'doctype': 'UOM', 'name': 'Nos', "must_be_whole_number": 1},
- {'uom_name': 'Pair', 'doctype': 'UOM', 'name': 'Pair', "must_be_whole_number": 1},
- {'uom_name': 'Set', 'doctype': 'UOM', 'name': 'Set', "must_be_whole_number": 1},
+ {'uom_name': 'Unit', 'doctype': 'UOM', 'name': 'Unit', "must_be_whole_number": 1},
+ {'uom_name': 'Box', 'doctype': 'UOM', 'name': 'Box', "must_be_whole_number": 1},
+ {'uom_name': 'Kg', 'doctype': 'UOM', 'name': 'Kg'},
+ {'uom_name': 'Nos', 'doctype': 'UOM', 'name': 'Nos', "must_be_whole_number": 1},
+ {'uom_name': 'Pair', 'doctype': 'UOM', 'name': 'Pair', "must_be_whole_number": 1},
+ {'uom_name': 'Set', 'doctype': 'UOM', 'name': 'Set', "must_be_whole_number": 1},
{'uom_name': 'Hour', 'doctype': 'UOM', 'name': 'Hour'},
- {'uom_name': 'Minute', 'doctype': 'UOM', 'name': 'Minute'},
+ {'uom_name': 'Minute', 'doctype': 'UOM', 'name': 'Minute'},
]
-
+
from frappe.modules import scrub
for r in records:
doc = frappe.get_doc(r)
-
+
# ignore mandatory for root
parent_link_field = ("parent_" + scrub(doc.doctype))
if doc.meta.get_field(parent_link_field) and not doc.get(parent_link_field):
doc.ignore_mandatory = True
-
+
doc.insert()
-
+
def feature_setup():
"""save global defaults and features setup"""
doc = frappe.get_doc("Features Setup", "Features Setup")
diff --git a/erpnext/setup/page/setup_wizard/setup_wizard.py b/erpnext/setup/page/setup_wizard/setup_wizard.py
index 2bd906f..a2fb7d7 100644
--- a/erpnext/setup/page/setup_wizard/setup_wizard.py
+++ b/erpnext/setup/page/setup_wizard/setup_wizard.py
@@ -80,7 +80,6 @@
'year_end_date': args.get('fy_end_date'),
}).insert()
- print args
# Company
frappe.get_doc({
"doctype":"Company",
@@ -97,16 +96,16 @@
def create_price_lists(args):
for pl_type in ["Selling", "Buying"]:
frappe.get_doc({
- "doctype": "Price List",
- "price_list_name": "Standard " + pl_type,
- "enabled": 1,
- "buying": 1 if pl_type == "Buying" else 0,
- "selling": 1 if pl_type == "Selling" else 0,
- "currency": args["currency"],
- "valid_for_territories": {
- "territory": "All Territories"
- }
- }).insert()
+ "doctype": "Price List",
+ "price_list_name": "Standard " + pl_type,
+ "enabled": 1,
+ "buying": 1 if pl_type == "Buying" else 0,
+ "selling": 1 if pl_type == "Selling" else 0,
+ "currency": args["currency"],
+ "valid_for_territories": [{
+ "territory": "All Territories"
+ }]
+ }).insert()
def set_defaults(args):
# enable default currency
diff --git a/erpnext/stock/doctype/price_list/price_list.py b/erpnext/stock/doctype/price_list/price_list.py
index fa53aba..424d6a2 100644
--- a/erpnext/stock/doctype/price_list/price_list.py
+++ b/erpnext/stock/doctype/price_list/price_list.py
@@ -12,8 +12,11 @@
def validate(self):
if not cint(self.buying) and not cint(self.selling):
throw(_("Price List must be applicable for Buying or Selling"))
-
- if not self.get("valid_for_territories"):
+
+ try:
+ # at least one territory
+ self.validate_table_has_rows("valid_for_territories")
+ except frappe.EmptyTableError:
# if no territory, set default territory
if frappe.defaults.get_user_default("territory"):
self.append("valid_for_territories", {
@@ -21,8 +24,7 @@
"territory": frappe.defaults.get_user_default("territory")
})
else:
- # at least one territory
- self.validate_table_has_rows("valid_for_territories")
+ raise
def on_update(self):
self.set_default_if_missing()
@@ -38,8 +40,8 @@
frappe.set_value("Buying Settings", "Buying Settings", "buying_price_list", self.name)
def update_item_price(self):
- frappe.db.sql("""update `tabItem Price` set currency=%s,
- buying=%s, selling=%s, modified=NOW() where price_list=%s""",
+ frappe.db.sql("""update `tabItem Price` set currency=%s,
+ buying=%s, selling=%s, modified=NOW() where price_list=%s""",
(self.currency, cint(self.buying), cint(self.selling), self.name))
def on_trash(self):
@@ -50,6 +52,6 @@
if self.name == b.get(price_list_fieldname):
b.set(price_list_fieldname, None)
b.save()
-
+
for module in ["Selling", "Buying"]:
- _update_default_price_list(module)
\ No newline at end of file
+ _update_default_price_list(module)