Merge branch 'develop'
diff --git a/erpnext/__version__.py b/erpnext/__version__.py
index e98ce43..f2ff8cd 100644
--- a/erpnext/__version__.py
+++ b/erpnext/__version__.py
@@ -1,2 +1,2 @@
from __future__ import unicode_literals
-__version__ = '5.0.13'
+__version__ = '5.0.14'
diff --git a/erpnext/accounts/doctype/journal_entry/journal_entry.js b/erpnext/accounts/doctype/journal_entry/journal_entry.js
index 5ff9e5f..3ea92e1 100644
--- a/erpnext/accounts/doctype/journal_entry/journal_entry.js
+++ b/erpnext/accounts/doctype/journal_entry/journal_entry.js
@@ -4,7 +4,7 @@
frappe.provide("erpnext.accounts");
frappe.require("assets/erpnext/js/utils.js");
-erpnext.accounts.JournalVoucher = frappe.ui.form.Controller.extend({
+erpnext.accounts.JournalEntry = frappe.ui.form.Controller.extend({
onload: function() {
this.load_defaults();
this.setup_queries();
@@ -130,10 +130,31 @@
cur_frm.cscript.update_totals(me.frm.doc);
}
});
- }
+ },
+
+ accounts_add: function(doc, cdt, cdn) {
+ var row = frappe.get_doc(cdt, cdn);
+ $.each(doc.accounts, function(i, d) {
+ if(d.account && d.party && d.party_type) {
+ row.account = d.account;
+ row.party = d.party;
+ row.party_type = d.party_type;
+ }
+ });
+
+ // set difference
+ if(doc.difference) {
+ if(doc.difference > 0) {
+ row.credit = doc.difference;
+ } else {
+ row.debit = -doc.difference;
+ }
+ }
+ },
+
});
-cur_frm.script_manager.make(erpnext.accounts.JournalVoucher);
+cur_frm.script_manager.make(erpnext.accounts.JournalEntry);
cur_frm.cscript.refresh = function(doc) {
erpnext.toggle_naming_series();
diff --git a/erpnext/accounts/doctype/journal_entry/journal_entry.py b/erpnext/accounts/doctype/journal_entry/journal_entry.py
index 1e2b352..1f296e5 100644
--- a/erpnext/accounts/doctype/journal_entry/journal_entry.py
+++ b/erpnext/accounts/doctype/journal_entry/journal_entry.py
@@ -81,7 +81,8 @@
frappe.throw(_("Row {0}: Party Type and Party is only applicable against Receivable / Payable account").format(d.idx))
def check_credit_limit(self):
- customers = list(set([d.party for d in self.get("accounts") if d.party_type=="Customer" and flt(d.debit) > 0]))
+ customers = list(set([d.party for d in self.get("accounts")
+ if d.party_type=="Customer" and d.party and flt(d.debit) > 0]))
if customers:
from erpnext.selling.doctype.customer.customer import check_credit_limit
for customer in customers:
diff --git a/erpnext/accounts/doctype/pricing_rule/pricing_rule.py b/erpnext/accounts/doctype/pricing_rule/pricing_rule.py
index 0ed4433..70d6fb9 100644
--- a/erpnext/accounts/doctype/pricing_rule/pricing_rule.py
+++ b/erpnext/accounts/doctype/pricing_rule/pricing_rule.py
@@ -205,9 +205,9 @@
def filter_pricing_rules(args, pricing_rules):
# filter for qty
- if pricing_rules and args.get("qty"):
- pricing_rules = filter(lambda x: (args.qty>=flt(x.min_qty)
- and (args.qty<=x.max_qty if x.max_qty else True)), pricing_rules)
+ if pricing_rules:
+ pricing_rules = filter(lambda x: (flt(args.get("qty"))>=flt(x.min_qty)
+ and (flt(args.get("qty"))<=x.max_qty if x.max_qty else True)), pricing_rules)
# find pricing rule with highest priority
if pricing_rules:
diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.js b/erpnext/accounts/doctype/sales_invoice/sales_invoice.js
index 57e17b6..b35fa8a 100644
--- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.js
+++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.js
@@ -65,7 +65,7 @@
});
if(!from_delivery_note) {
- cur_frm.page.add_menu_item(__('Make Delivery'), cur_frm.cscript['Make Delivery Note'], "icon-truck")
+ cur_frm.add_custom_button(__('Make Delivery'), cur_frm.cscript['Make Delivery Note'], "icon-truck")
}
}
@@ -75,14 +75,14 @@
}
// Show buttons only when pos view is active
- if (doc.docstatus===0 && !cur_frm.page.current_view_name!=="pos") {
+ if (cint(doc.docstatus==0) && cur_frm.page.current_view_name!=="pos") {
cur_frm.cscript.sales_order_btn();
cur_frm.cscript.delivery_note_btn();
}
},
sales_order_btn: function() {
- this.$sales_order_btn = cur_frm.page.add_menu_item(__('From Sales Order'),
+ this.$sales_order_btn = cur_frm.add_custom_button(__('From Sales Order'),
function() {
frappe.model.map_current_doc({
method: "erpnext.selling.doctype.sales_order.sales_order.make_sales_invoice",
@@ -99,7 +99,7 @@
},
delivery_note_btn: function() {
- this.$delivery_note_btn = cur_frm.page.add_menu_item(__('From Delivery Note'),
+ this.$delivery_note_btn = cur_frm.add_custom_button(__('From Delivery Note'),
function() {
frappe.model.map_current_doc({
method: "erpnext.stock.doctype.delivery_note.delivery_note.make_sales_invoice",
diff --git a/erpnext/accounts/general_ledger.py b/erpnext/accounts/general_ledger.py
index 76b5309..75dcbbf 100644
--- a/erpnext/accounts/general_ledger.py
+++ b/erpnext/accounts/general_ledger.py
@@ -101,7 +101,6 @@
debit_credit_diff += entry.debit - entry.credit
debit_credit_diff = flt(debit_credit_diff, precision)
- print debit_credit_diff, 1.0 / (10**precision)
if abs(debit_credit_diff) >= (2.0 / (10**precision)):
frappe.throw(_("Debit and Credit not equal for {0} #{1}. Difference is {2}.")
.format(gl_map[0].voucher_type, gl_map[0].voucher_no, debit_credit_diff))
diff --git a/erpnext/accounts/report/gross_profit/gross_profit.py b/erpnext/accounts/report/gross_profit/gross_profit.py
index 98a121a..dd7def8 100644
--- a/erpnext/accounts/report/gross_profit/gross_profit.py
+++ b/erpnext/accounts/report/gross_profit/gross_profit.py
@@ -183,8 +183,6 @@
my_sle = self.sle.get((item_code, row.warehouse))
for i, sle in enumerate(my_sle):
# find the stock valution rate from stock ledger entry
- print sle.voucher_type, row.parenttype, sle.voucher_no, row.parent, \
- sle.voucher_detail_no, row.item_row
if sle.voucher_type == row.parenttype and row.parent == sle.voucher_no and \
sle.voucher_detail_no == row.item_row:
previous_stock_value = len(my_sle) > i+1 and \
diff --git a/erpnext/config/learn.py b/erpnext/config/learn.py
index 146bb21..ffcd76e 100644
--- a/erpnext/config/learn.py
+++ b/erpnext/config/learn.py
@@ -31,7 +31,7 @@
{
"type": "help",
"label": _("Opening Stock Balance"),
- "youtube_id": "yPgrtfeCTs"
+ "youtube_id": "0yPgrtfeCTs"
},
{
"type": "help",
@@ -106,7 +106,7 @@
{
"type": "help",
"label": _("Opening Stock Balance"),
- "youtube_id": "yPgrtfeCTs"
+ "youtube_id": "0yPgrtfeCTs"
},
{
"type": "help",
diff --git a/erpnext/config/stock.py b/erpnext/config/stock.py
index 86ec458..70bb258 100644
--- a/erpnext/config/stock.py
+++ b/erpnext/config/stock.py
@@ -266,7 +266,7 @@
{
"type": "help",
"label": _("Opening Stock Balance"),
- "youtube_id": "yPgrtfeCTs"
+ "youtube_id": "0yPgrtfeCTs"
},
{
"type": "help",
diff --git a/erpnext/crm/doctype/newsletter_list/newsletter_list.py b/erpnext/crm/doctype/newsletter_list/newsletter_list.py
index 1eb95ea..3a580d3 100644
--- a/erpnext/crm/doctype/newsletter_list/newsletter_list.py
+++ b/erpnext/crm/doctype/newsletter_list/newsletter_list.py
@@ -44,11 +44,14 @@
return self.update_total_subscribers()
def update_total_subscribers(self):
- self.total_subscribers = frappe.db.sql("""select count(*) from `tabNewsletter List Subscriber`
- where newsletter_list=%s""", self.name)[0][0]
+ self.total_subscribers = self.get_total_subscribers()
self.db_update()
return self.total_subscribers
+ def get_total_subscribers(self):
+ return frappe.db.sql("""select count(*) from `tabNewsletter List Subscriber`
+ where newsletter_list=%s""", self.name)[0][0]
+
def on_trash(self):
for d in frappe.get_all("Newsletter List Subscriber", "name", {"newsletter_list": self.name}):
frappe.delete_doc("Newsletter List Subscriber", d.name)
diff --git a/erpnext/hooks.py b/erpnext/hooks.py
index 47ea8f5..0d75a53 100644
--- a/erpnext/hooks.py
+++ b/erpnext/hooks.py
@@ -5,7 +5,7 @@
app_description = "Open Source Enterprise Resource Planning for Small and Midsized Organizations"
app_icon = "icon-th"
app_color = "#e74c3c"
-app_version = "5.0.13"
+app_version = "5.0.14"
error_report_email = "support@erpnext.com"
diff --git a/erpnext/hr/doctype/leave_allocation/leave_allocation.py b/erpnext/hr/doctype/leave_allocation/leave_allocation.py
index 272ec39..4e74b28 100755
--- a/erpnext/hr/doctype/leave_allocation/leave_allocation.py
+++ b/erpnext/hr/doctype/leave_allocation/leave_allocation.py
@@ -23,9 +23,6 @@
def on_update(self):
self.get_total_allocated_leaves()
- def on_cancel(self):
- self.check_for_leave_application()
-
def validate_new_leaves_allocated_value(self):
"""validate that leave allocation is in multiples of 0.5"""
if flt(self.new_leaves_allocated) % 0.5:
diff --git a/erpnext/setup/doctype/naming_series/naming_series.py b/erpnext/setup/doctype/naming_series/naming_series.py
index 1b98682..5105fcd 100644
--- a/erpnext/setup/doctype/naming_series/naming_series.py
+++ b/erpnext/setup/doctype/naming_series/naming_series.py
@@ -12,7 +12,6 @@
class NamingSeriesNotSetError(frappe.ValidationError): pass
class NamingSeries(Document):
-
def get_transactions(self, arg=None):
doctypes = list(set(frappe.db.sql_list("""select parent
from `tabDocField` where fieldname='naming_series'""")
diff --git a/erpnext/stock/get_item_details.py b/erpnext/stock/get_item_details.py
index 3f73932..399946b 100644
--- a/erpnext/stock/get_item_details.py
+++ b/erpnext/stock/get_item_details.py
@@ -163,8 +163,8 @@
"uom": item.stock_uom,
"min_order_qty": flt(item.min_order_qty) if args.parenttype == "Material Request" else "",
"conversion_factor": 1.0,
- "qty": args.qty or 0.0,
- "stock_qty": 0.0,
+ "qty": args.qty or 1.0,
+ "stock_qty": 1.0,
"price_list_rate": 0.0,
"base_price_list_rate": 0.0,
"rate": 0.0,
diff --git a/erpnext/templates/print_formats/includes/item_table_description.html b/erpnext/templates/print_formats/includes/item_table_description.html
index 34f95b9..107abe0 100644
--- a/erpnext/templates/print_formats/includes/item_table_description.html
+++ b/erpnext/templates/print_formats/includes/item_table_description.html
@@ -7,8 +7,8 @@
{% if doc.in_format_data("item_code") and not doc.is_print_hide("item_code") -%}
<div class="primary">{{ doc.item_code }}</div>
{%- endif %}
- {% if (doc.in_format_data("item_name") and
- (not doc.in_format_data("item_code") or doc.is_print_hide("item_code")
+ {% if (doc.in_format_data("item_name") and not doc.is_print_hide("item_name") and
+ (not doc.in_format_data("item_code") or doc.is_print_hide("item_code")
or doc.item_code != doc.item_name)) -%}
<div class="primary">{{ doc.get_formatted("item_name") }}</div>
{%- endif %}
diff --git a/setup.py b/setup.py
index b2079d6..255951a 100644
--- a/setup.py
+++ b/setup.py
@@ -1,6 +1,6 @@
from setuptools import setup, find_packages
-version = "5.0.13"
+version = "5.0.14"
with open("requirements.txt", "r") as f:
install_requires = f.readlines()