diff --git a/erpnext/accounts/doctype/share_transfer/share_transfer.js b/erpnext/accounts/doctype/share_transfer/share_transfer.js
index af23b2656de..7ef47de9dfc 100644
--- a/erpnext/accounts/doctype/share_transfer/share_transfer.js
+++ b/erpnext/accounts/doctype/share_transfer/share_transfer.js
@@ -16,7 +16,7 @@ frappe.ui.form.on('Share Transfer', {
};
};
});
- if (frm.doc.docstatus == 1) {
+ if (frm.doc.docstatus == 1 && frm.doc.equity_or_liability_account && frm.doc.asset_account ) {
frm.add_custom_button(__('Make Journal Entry'), function () {
erpnext.share_transfer.make_jv(frm);
});
@@ -92,6 +92,7 @@ erpnext.share_transfer.make_jv = function (frm) {
debit_applicant_type = "Shareholder";
debit_applicant = frm.doc.from_shareholder;
}
+
frappe.call({
args: {
"company": frm.doc.company,
diff --git a/erpnext/accounts/doctype/share_transfer/share_transfer.py b/erpnext/accounts/doctype/share_transfer/share_transfer.py
index 1a1f036278d..45de30c68b4 100644
--- a/erpnext/accounts/doctype/share_transfer/share_transfer.py
+++ b/erpnext/accounts/doctype/share_transfer/share_transfer.py
@@ -292,11 +292,14 @@ def make_jv_entry( company, account, amount, payment_account,\
"party_type": debit_applicant_type,
"party": debit_applicant,
})
+
account_amt_list.append({
"account": payment_account,
"credit_in_account_currency": amount,
"party_type": credit_applicant_type,
"party": credit_applicant,
})
+
journal_entry.set("accounts", account_amt_list)
+
return journal_entry.as_dict()
\ No newline at end of file
diff --git a/erpnext/accounts/print_format/sales_invoice_return/sales_invoice_return.html b/erpnext/accounts/print_format/sales_invoice_return/sales_invoice_return.html
index 2c015192c4b..1d758e89355 100644
--- a/erpnext/accounts/print_format/sales_invoice_return/sales_invoice_return.html
+++ b/erpnext/accounts/print_format/sales_invoice_return/sales_invoice_return.html
@@ -9,7 +9,7 @@
{% if doc.get(df.fieldname) != None -%}
- {{ frappe.utils.fmt_money((doc[df.fieldname])|int|abs, currency=doc.currency) }}
+ {{ frappe.utils.fmt_money((doc[df.fieldname])|abs, currency=doc.currency) }}
{% endif %}
@@ -26,7 +26,7 @@
{{ charge.get_formatted("description") }}
- {{ frappe.utils.fmt_money((charge.tax_amount)|int|abs, currency=doc.currency) }}
+ {{ frappe.utils.fmt_money((charge.tax_amount)|abs, currency=doc.currency) }}
{%- endif -%}
@@ -65,8 +65,10 @@
{% for tdf in visible_columns %}
{% if not d.flags.compact_item_print or tdf.fieldname in doc.get(df.fieldname)[0].flags.compact_item_fields %}
- {% if tdf.fieldtype == 'Currency' %}
- {{ frappe.utils.fmt_money((d[tdf.fieldname])|int|abs, currency=doc.currency) }}
+ {% if tdf.fieldname == 'qty' %}
+ {{ (d[tdf.fieldname])|abs }}
+ {% elif tdf.fieldtype == 'Currency' %}
+ {{ frappe.utils.fmt_money((d[tdf.fieldname])|abs, currency=doc.currency) }}
{% else %}
{{ print_value(tdf, d, doc, visible_columns) }}
{% endif %}
@@ -117,7 +119,7 @@
{{ render_currency(df, doc) }}
{% elif df.fieldtype =='Table' %}
{{ render_table(df, doc)}}
- {% elif doc[df.fieldname] %}
+ {% elif doc[df.fieldname] and df.fieldname != 'total_qty' %}
{{ render_field(df, doc) }}
{% endif %}
{% endfor %}
diff --git a/erpnext/hr/doctype/loan/loan.py b/erpnext/hr/doctype/loan/loan.py
index 6cf0c2fc7f8..d83fbb7fed0 100644
--- a/erpnext/hr/doctype/loan/loan.py
+++ b/erpnext/hr/doctype/loan/loan.py
@@ -124,6 +124,7 @@ def update_disbursement_status(doc):
""", (doc.payment_account, doc.name), as_dict=1)[0]
disbursement_date = None
+ status = ''
if not disbursement or disbursement.disbursed_amount == 0:
status = "Sanctioned"
elif disbursement.disbursed_amount == doc.loan_amount:
diff --git a/erpnext/manufacturing/doctype/bom/bom.js b/erpnext/manufacturing/doctype/bom/bom.js
index 9248ac0fe85..b9591d6054b 100644
--- a/erpnext/manufacturing/doctype/bom/bom.js
+++ b/erpnext/manufacturing/doctype/bom/bom.js
@@ -117,7 +117,7 @@ frappe.ui.form.on("BOM", {
args: {
update_parent: true,
from_child_bom:false,
- save: false
+ save: frm.doc.docstatus === 1 ? true : false
},
callback: function(r) {
refresh_field("items");
diff --git a/erpnext/manufacturing/doctype/bom/bom.py b/erpnext/manufacturing/doctype/bom/bom.py
index 3ad16e5b65d..437f1694b91 100644
--- a/erpnext/manufacturing/doctype/bom/bom.py
+++ b/erpnext/manufacturing/doctype/bom/bom.py
@@ -34,7 +34,8 @@ class BOM(WebsiteGenerator):
# name can be BOM/ITEM/001, BOM/ITEM/001-1, BOM-ITEM-001, BOM-ITEM-001-1
# split by item
- names = [name.split(self.item)[-1][1:] for name in names]
+ names = [name.split(self.item, 1) for name in names]
+ names = [d[-1][1:] for d in filter(lambda x: len(x) > 1 and x[-1], names)]
# split by (-) if cancelled
names = [cint(name.split('-')[-1]) for name in names]
diff --git a/erpnext/stock/report/itemwise_recommended_reorder_level/itemwise_recommended_reorder_level.py b/erpnext/stock/report/itemwise_recommended_reorder_level/itemwise_recommended_reorder_level.py
index 618fd152ff0..9a972104a27 100644
--- a/erpnext/stock/report/itemwise_recommended_reorder_level/itemwise_recommended_reorder_level.py
+++ b/erpnext/stock/report/itemwise_recommended_reorder_level/itemwise_recommended_reorder_level.py
@@ -24,7 +24,7 @@ def execute(filters=None):
data = []
for item in items:
- total_outgoing = consumed_item_map.get(item.name, 0) + delivered_item_map.get(item.name,0)
+ total_outgoing = flt(consumed_item_map.get(item.name, 0)) + flt(delivered_item_map.get(item.name,0))
avg_daily_outgoing = flt(total_outgoing / diff, float_preceision)
reorder_level = (avg_daily_outgoing * flt(item.lead_time_days)) + flt(item.safety_stock)
@@ -55,18 +55,20 @@ def get_item_info(filters):
def get_consumed_items(condition):
- cn_items = frappe.db.sql("""select se_item.item_code,
- sum(se_item.transfer_qty) as 'consume_qty'
- from `tabStock Entry` se, `tabStock Entry Detail` se_item
- where se.name = se_item.parent and se.docstatus = 1
- and (ifnull(se_item.t_warehouse, '') = '' or se.purpose = 'Subcontract') %s
- group by se_item.item_code""" % (condition), as_dict=1)
+ consumed_items = frappe.db.sql("""
+ select item_code, abs(sum(actual_qty)) as consumed_qty
+ from `tabStock Ledger Entry`
+ where actual_qty < 0
+ and voucher_type not in ('Delivery Note', 'Sales Invoice')
+ %s
+ group by item_code
+ """ % condition, as_dict=1)
- cn_items_map = {}
- for item in cn_items:
- cn_items_map.setdefault(item.item_code, item.consume_qty)
+ consumed_items_map = {}
+ for item in consumed_items:
+ consumed_items_map.setdefault(item.item_code, item.consumed_qty)
- return cn_items_map
+ return consumed_items_map
def get_delivered_items(condition):
dn_items = frappe.db.sql("""select dn_item.item_code, sum(dn_item.stock_qty) as dn_qty