Merge branch 'develop'
diff --git a/erpnext/__version__.py b/erpnext/__version__.py
index 6cf4b96..93c1037 100644
--- a/erpnext/__version__.py
+++ b/erpnext/__version__.py
@@ -1,2 +1,2 @@
from __future__ import unicode_literals
-__version__ = '6.21.0'
+__version__ = '6.21.1'
diff --git a/erpnext/accounts/doctype/payment_gateway_account/payment_gateway_account.py b/erpnext/accounts/doctype/payment_gateway_account/payment_gateway_account.py
index dd971ad..468f877 100644
--- a/erpnext/accounts/doctype/payment_gateway_account/payment_gateway_account.py
+++ b/erpnext/accounts/doctype/payment_gateway_account/payment_gateway_account.py
@@ -11,6 +11,8 @@
self.name = self.gateway + " - " + self.currency
def validate(self):
+ self.currency = frappe.db.get_value("Account", self.payment_account, "account_currency")
+
self.update_default_payment_gateway()
self.set_as_default_if_not_set()
@@ -20,5 +22,6 @@
where is_default = 1 """)
def set_as_default_if_not_set(self):
- if not frappe.db.get_value("Payment Gateway Account", {"is_default": 1, "name": ("!=", self.name)}, "name"):
- self.is_default = 1
+ if not frappe.db.get_value("Payment Gateway Account",
+ {"is_default": 1, "name": ("!=", self.name)}, "name"):
+ self.is_default = 1
diff --git a/erpnext/accounts/doctype/payment_request/payment_request.py b/erpnext/accounts/doctype/payment_request/payment_request.py
index 9e29697..ba7413d 100644
--- a/erpnext/accounts/doctype/payment_request/payment_request.py
+++ b/erpnext/accounts/doctype/payment_request/payment_request.py
@@ -23,7 +23,7 @@
def validate_payment_request(self):
if frappe.db.get_value("Payment Request", {"reference_name": self.reference_name,
"name": ("!=", self.name), "status": ("not in", ["Initiated", "Paid"]), "docstatus": 1}, "name"):
- frappe.throw(_("Payment Request already exists {0}".fomart(self.reference_name)))
+ frappe.throw(_("Payment Request already exists {0}".format(self.reference_name)))
def validate_currency(self):
ref_doc = frappe.get_doc(self.reference_doctype, self.reference_name)
@@ -150,37 +150,43 @@
ref_doc = frappe.get_doc(args.dt, args.dn)
gateway_account = get_gateway_details(args)
- pr = frappe.new_doc("Payment Request")
- pr.update({
- "payment_gateway": gateway_account.name,
- "gateway": gateway_account.gateway,
- "payment_account": gateway_account.payment_account,
- "currency": ref_doc.currency,
- "make_sales_invoice": args.cart or 0,
- "amount": get_amount(ref_doc, args.dt),
- "mute_email": args.mute_email or 0,
- "email_to": args.recipient_id or "",
- "subject": "Payment Request for %s"%args.dn,
- "message": gateway_account.message,
- "payment_url_message": gateway_account.payment_url_message,
- "payment_success_url": gateway_account.payment_success_url,
- "reference_doctype": args.dt,
- "reference_name": args.dn
- })
+ existing_payment_request = frappe.db.get_value("Payment Request",
+ {"reference_doctype": args.dt, "reference_name": args.dn})
+ if existing_payment_request:
+ pr = frappe.get_doc("Payment Request", existing_payment_request)
+ else:
+ pr = frappe.new_doc("Payment Request")
+
+ pr.update({
+ "payment_gateway": gateway_account.name,
+ "gateway": gateway_account.gateway,
+ "payment_account": gateway_account.payment_account,
+ "currency": ref_doc.currency,
+ "make_sales_invoice": args.cart or 0,
+ "amount": get_amount(ref_doc, args.dt),
+ "mute_email": args.mute_email or 0,
+ "email_to": args.recipient_id or "",
+ "subject": "Payment Request for %s"%args.dn,
+ "message": gateway_account.message,
+ "payment_url_message": gateway_account.payment_url_message,
+ "payment_success_url": gateway_account.payment_success_url,
+ "reference_doctype": args.dt,
+ "reference_name": args.dn
+ })
- if args.return_doc:
- return pr
-
- if args.submit_doc:
- pr.insert(ignore_permissions=True)
- pr.submit()
-
- if args.cart:
- generate_payment_request(pr.name)
- frappe.db.commit()
-
- if not args.cart:
+ if args.return_doc:
return pr
+
+ if args.submit_doc:
+ pr.insert(ignore_permissions=True)
+ pr.submit()
+
+ if args.cart:
+ generate_payment_request(pr.name)
+ frappe.db.commit()
+
+ if not args.cart:
+ return pr
return pr.as_dict()
diff --git a/erpnext/hooks.py b/erpnext/hooks.py
index e3a018e..759e820 100644
--- a/erpnext/hooks.py
+++ b/erpnext/hooks.py
@@ -7,7 +7,7 @@
app_description = """ERP made simple"""
app_icon = "icon-th"
app_color = "#e74c3c"
-app_version = "6.21.0"
+app_version = "6.21.1"
app_email = "info@erpnext.com"
app_license = "GNU General Public License (v3)"
source_link = "https://github.com/frappe/erpnext"
diff --git a/erpnext/public/js/controllers/transaction.js b/erpnext/public/js/controllers/transaction.js
index 58c68e8..6f36bdb 100644
--- a/erpnext/public/js/controllers/transaction.js
+++ b/erpnext/public/js/controllers/transaction.js
@@ -270,7 +270,7 @@
me.apply_pricing_rule();
}
}
-
+
var set_party_account = function(set_pricing) {
if (in_list(["Sales Invoice", "Purchase Invoice"], me.frm.doc.doctype)) {
if(me.frm.doc.doctype=="Sales Invoice") {
@@ -280,25 +280,27 @@
var party_type = "Supplier";
var party_account_field = 'credit_to';
}
-
- return frappe.call({
- method: "erpnext.accounts.party.get_party_account",
- args: {
- company: me.frm.doc.company,
- party_type: party_type,
- party: me.frm.doc[frappe.model.scrub(party_type)]
- },
- callback: function(r) {
- if(!r.exc && r.message) {
- me.frm.set_value(party_account_field, r.message);
- set_pricing();
+
+ if(me.frm.doc[frappe.model.scrub(party_type)]) {
+ return frappe.call({
+ method: "erpnext.accounts.party.get_party_account",
+ args: {
+ company: me.frm.doc.company,
+ party_type: party_type,
+ party: me.frm.doc[frappe.model.scrub(party_type)]
+ },
+ callback: function(r) {
+ if(!r.exc && r.message) {
+ me.frm.set_value(party_account_field, r.message);
+ set_pricing();
+ }
}
- }
- });
+ });
+ }
} else {
set_pricing();
}
-
+
}
if (this.frm.doc.posting_date) var date = this.frm.doc.posting_date;
diff --git a/erpnext/selling/doctype/installation_note_item/installation_note_item.json b/erpnext/selling/doctype/installation_note_item/installation_note_item.json
index 758c47f..5be7ca1 100644
--- a/erpnext/selling/doctype/installation_note_item/installation_note_item.json
+++ b/erpnext/selling/doctype/installation_note_item/installation_note_item.json
@@ -26,6 +26,7 @@
"options": "Item",
"permlevel": 0,
"print_hide": 0,
+ "print_hide_if_no_value": 0,
"read_only": 0,
"report_hide": 0,
"reqd": 1,
@@ -37,32 +38,6 @@
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
- "fieldname": "description",
- "fieldtype": "Data",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "in_filter": 0,
- "in_list_view": 1,
- "label": "Description",
- "length": 0,
- "no_copy": 0,
- "oldfieldname": "description",
- "oldfieldtype": "Data",
- "permlevel": 0,
- "print_hide": 0,
- "print_width": "300px",
- "read_only": 1,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "unique": 0,
- "width": "300px"
- },
- {
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
"fieldname": "serial_no",
"fieldtype": "Small Text",
"hidden": 0,
@@ -76,6 +51,7 @@
"oldfieldtype": "Small Text",
"permlevel": 0,
"print_hide": 0,
+ "print_hide_if_no_value": 0,
"print_width": "180px",
"read_only": 0,
"report_hide": 0,
@@ -89,6 +65,58 @@
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
+ "fieldname": "qty",
+ "fieldtype": "Float",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "in_filter": 0,
+ "in_list_view": 1,
+ "label": "Installed Qty",
+ "length": 0,
+ "no_copy": 0,
+ "oldfieldname": "qty",
+ "oldfieldtype": "Currency",
+ "permlevel": 0,
+ "print_hide": 0,
+ "print_hide_if_no_value": 0,
+ "read_only": 0,
+ "report_hide": 0,
+ "reqd": 1,
+ "search_index": 0,
+ "set_only_once": 0,
+ "unique": 0
+ },
+ {
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "fieldname": "description",
+ "fieldtype": "Text Editor",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "in_filter": 0,
+ "in_list_view": 1,
+ "label": "Description",
+ "length": 0,
+ "no_copy": 0,
+ "oldfieldname": "description",
+ "oldfieldtype": "Data",
+ "permlevel": 0,
+ "print_hide": 0,
+ "print_hide_if_no_value": 0,
+ "print_width": "300px",
+ "read_only": 1,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "unique": 0,
+ "width": "300px"
+ },
+ {
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
"fieldname": "prevdoc_detail_docname",
"fieldtype": "Data",
"hidden": 1,
@@ -102,6 +130,7 @@
"oldfieldtype": "Data",
"permlevel": 0,
"print_hide": 1,
+ "print_hide_if_no_value": 0,
"print_width": "150px",
"read_only": 1,
"report_hide": 0,
@@ -128,6 +157,7 @@
"oldfieldtype": "Data",
"permlevel": 0,
"print_hide": 1,
+ "print_hide_if_no_value": 0,
"print_width": "150px",
"read_only": 1,
"report_hide": 0,
@@ -154,6 +184,7 @@
"oldfieldtype": "Data",
"permlevel": 0,
"print_hide": 1,
+ "print_hide_if_no_value": 0,
"print_width": "150px",
"read_only": 1,
"report_hide": 0,
@@ -162,30 +193,6 @@
"set_only_once": 0,
"unique": 0,
"width": "150px"
- },
- {
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "fieldname": "qty",
- "fieldtype": "Float",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "in_filter": 0,
- "in_list_view": 1,
- "label": "Installed Qty",
- "length": 0,
- "no_copy": 0,
- "oldfieldname": "qty",
- "oldfieldtype": "Currency",
- "permlevel": 0,
- "print_hide": 0,
- "read_only": 0,
- "report_hide": 0,
- "reqd": 1,
- "search_index": 0,
- "set_only_once": 0,
- "unique": 0
}
],
"hide_heading": 0,
@@ -197,12 +204,14 @@
"issingle": 0,
"istable": 1,
"max_attachments": 0,
- "modified": "2015-11-16 06:29:47.713471",
+ "menu_index": 0,
+ "modified": "2016-02-10 00:18:55.558356",
"modified_by": "Administrator",
"module": "Selling",
"name": "Installation Note Item",
"owner": "Administrator",
"permissions": [],
"read_only": 0,
- "read_only_onload": 0
+ "read_only_onload": 0,
+ "sort_order": "ASC"
}
\ No newline at end of file
diff --git a/erpnext/setup/setup_wizard/sample_data.py b/erpnext/setup/setup_wizard/sample_data.py
index 095264f..0e9ef06 100644
--- a/erpnext/setup/setup_wizard/sample_data.py
+++ b/erpnext/setup/setup_wizard/sample_data.py
@@ -15,7 +15,7 @@
selling_items = frappe.get_all("Item", filters = {"is_sales_item": 1})
buying_items = frappe.get_all("Item", filters = {"is_purchase_item": 1})
customers = frappe.get_all("Customer")
-
+
if selling_items and customers:
for i in range(3):
customer = random.choice(customers).name
@@ -45,7 +45,7 @@
b.insert(ignore_permissions=True)
- b.add_comment("This is a dummy record")
+ b.add_comment('Comment', text="This is a dummy record")
def make_quote(selling_items, customer):
qtn = frappe.get_doc({
@@ -62,7 +62,7 @@
qtn.insert(ignore_permissions=True)
- qtn.add_comment("This is a dummy record")
+ qtn.add_comment('Comment', text="This is a dummy record")
def make_material_request(buying_items):
for i in buying_items:
@@ -78,7 +78,7 @@
mr.insert()
mr.submit()
- mr.add_comment("This is a dummy record")
+ mr.add_comment('Comment', text="This is a dummy record")
def make_issue():
diff --git a/erpnext/stock/doctype/packing_slip_item/packing_slip_item.json b/erpnext/stock/doctype/packing_slip_item/packing_slip_item.json
index be92998..f8e5041 100644
--- a/erpnext/stock/doctype/packing_slip_item/packing_slip_item.json
+++ b/erpnext/stock/doctype/packing_slip_item/packing_slip_item.json
@@ -7,6 +7,7 @@
"custom": 0,
"docstatus": 0,
"doctype": "DocType",
+ "document_type": "Document",
"fields": [
{
"allow_on_submit": 0,
@@ -24,6 +25,7 @@
"options": "Item",
"permlevel": 0,
"print_hide": 0,
+ "print_hide_if_no_value": 0,
"print_width": "100px",
"read_only": 0,
"report_hide": 0,
@@ -37,6 +39,29 @@
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
+ "fieldname": "column_break_2",
+ "fieldtype": "Column Break",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "in_filter": 0,
+ "in_list_view": 0,
+ "length": 0,
+ "no_copy": 0,
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 0,
+ "print_hide_if_no_value": 0,
+ "read_only": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "unique": 0
+ },
+ {
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
"fieldname": "item_name",
"fieldtype": "Data",
"hidden": 0,
@@ -48,6 +73,7 @@
"no_copy": 0,
"permlevel": 0,
"print_hide": 0,
+ "print_hide_if_no_value": 0,
"print_width": "200px",
"read_only": 1,
"report_hide": 0,
@@ -74,6 +100,31 @@
"permlevel": 0,
"precision": "",
"print_hide": 0,
+ "print_hide_if_no_value": 0,
+ "read_only": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "unique": 0
+ },
+ {
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 1,
+ "fieldname": "desc_section",
+ "fieldtype": "Section Break",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "in_filter": 0,
+ "in_list_view": 0,
+ "label": "Description",
+ "length": 0,
+ "no_copy": 0,
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 0,
+ "print_hide_if_no_value": 0,
"read_only": 0,
"report_hide": 0,
"reqd": 0,
@@ -97,6 +148,31 @@
"permlevel": 0,
"precision": "",
"print_hide": 0,
+ "print_hide_if_no_value": 0,
+ "read_only": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "unique": 0
+ },
+ {
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "fieldname": "quantity_section",
+ "fieldtype": "Section Break",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "in_filter": 0,
+ "in_list_view": 0,
+ "label": "Quantity",
+ "length": 0,
+ "no_copy": 0,
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 0,
+ "print_hide_if_no_value": 0,
"read_only": 0,
"report_hide": 0,
"reqd": 0,
@@ -119,6 +195,7 @@
"no_copy": 0,
"permlevel": 0,
"print_hide": 0,
+ "print_hide_if_no_value": 0,
"print_width": "100px",
"read_only": 0,
"report_hide": 0,
@@ -132,31 +209,6 @@
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
- "fieldname": "stock_uom",
- "fieldtype": "Link",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "in_filter": 0,
- "in_list_view": 0,
- "label": "UOM",
- "length": 0,
- "no_copy": 0,
- "options": "UOM",
- "permlevel": 0,
- "print_hide": 0,
- "print_width": "100px",
- "read_only": 1,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "unique": 0,
- "width": "100px"
- },
- {
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
"fieldname": "net_weight",
"fieldtype": "Float",
"hidden": 0,
@@ -168,6 +220,7 @@
"no_copy": 0,
"permlevel": 0,
"print_hide": 0,
+ "print_hide_if_no_value": 0,
"print_width": "100px",
"read_only": 0,
"report_hide": 0,
@@ -181,6 +234,55 @@
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
+ "fieldname": "column_break_10",
+ "fieldtype": "Column Break",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "in_filter": 0,
+ "in_list_view": 0,
+ "length": 0,
+ "no_copy": 0,
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 0,
+ "print_hide_if_no_value": 0,
+ "read_only": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "unique": 0
+ },
+ {
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "fieldname": "stock_uom",
+ "fieldtype": "Link",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "in_filter": 0,
+ "in_list_view": 0,
+ "label": "UOM",
+ "length": 0,
+ "no_copy": 0,
+ "options": "UOM",
+ "permlevel": 0,
+ "print_hide": 0,
+ "print_hide_if_no_value": 0,
+ "print_width": "100px",
+ "read_only": 1,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "unique": 0,
+ "width": "100px"
+ },
+ {
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
"fieldname": "weight_uom",
"fieldtype": "Link",
"hidden": 0,
@@ -193,6 +295,7 @@
"options": "UOM",
"permlevel": 0,
"print_hide": 0,
+ "print_hide_if_no_value": 0,
"print_width": "100px",
"read_only": 0,
"report_hide": 0,
@@ -217,6 +320,7 @@
"no_copy": 0,
"permlevel": 0,
"print_hide": 0,
+ "print_hide_if_no_value": 0,
"read_only": 0,
"report_hide": 0,
"reqd": 0,
@@ -239,6 +343,7 @@
"no_copy": 0,
"permlevel": 0,
"print_hide": 0,
+ "print_hide_if_no_value": 0,
"read_only": 0,
"report_hide": 0,
"reqd": 0,
@@ -256,7 +361,7 @@
"issingle": 0,
"istable": 1,
"max_attachments": 0,
- "modified": "2015-11-16 06:29:51.313759",
+ "modified": "2016-02-09 14:46:32.332667",
"modified_by": "Administrator",
"module": "Stock",
"name": "Packing Slip Item",
diff --git a/setup.py b/setup.py
index ff91cb8..3754eb5 100644
--- a/setup.py
+++ b/setup.py
@@ -1,7 +1,7 @@
from setuptools import setup, find_packages
from pip.req import parse_requirements
-version = "6.21.0"
+version = "6.21.1"
requirements = parse_requirements("requirements.txt", session="")
setup(