Merge pull request #4935 from shreyasp/sales-inv-WN-SUP17465
[Minor] Fix print settings for custom print format
diff --git a/erpnext/accounts/report/balance_sheet/balance_sheet.py b/erpnext/accounts/report/balance_sheet/balance_sheet.py
index fd88afd..7e05b95 100644
--- a/erpnext/accounts/report/balance_sheet/balance_sheet.py
+++ b/erpnext/accounts/report/balance_sheet/balance_sheet.py
@@ -19,7 +19,7 @@
data = []
data.extend(asset or [])
- data.extend(liability or [])
+ data.extend(liability or [])
data.extend(equity or [])
if provisional_profit_loss:
data.append(provisional_profit_loss)
@@ -43,11 +43,11 @@
for period in period_list:
effective_liability = 0.0
if liability:
- effective_liability += flt(liability[-2][period.key])
+ effective_liability += flt(liability[-2].get(period.key))
if equity:
- effective_liability += flt(equity[-2][period.key])
+ effective_liability += flt(equity[-2].get(period.key))
- provisional_profit_loss[period.key] = flt(asset[-2][period.key]) - effective_liability
+ provisional_profit_loss[period.key] = flt(asset[-2].get(period.key)) - effective_liability
if provisional_profit_loss[period.key]:
has_value = True
diff --git a/erpnext/accounts/report/financial_statements.py b/erpnext/accounts/report/financial_statements.py
index d84f18f..0f10b94 100644
--- a/erpnext/accounts/report/financial_statements.py
+++ b/erpnext/accounts/report/financial_statements.py
@@ -92,7 +92,7 @@
if not accounts:
return None
- accounts, accounts_by_name = filter_accounts(accounts)
+ accounts, accounts_by_name, parent_children_map = filter_accounts(accounts)
company_currency = frappe.db.get_value("Company", company, "default_currency")
@@ -109,6 +109,7 @@
calculate_values(accounts_by_name, gl_entries_by_account, period_list, accumulated_values)
accumulate_values_into_parents(accounts, accounts_by_name, period_list, accumulated_values)
out = prepare_data(accounts, balance_must_be, period_list, company_currency)
+ out = filter_out_zero_value_rows(out, parent_children_map)
if out:
add_total_row(out, balance_must_be, period_list, company_currency)
@@ -134,15 +135,15 @@
d.get(period.key, 0.0)
def prepare_data(accounts, balance_must_be, period_list, company_currency):
- out = []
+ data = []
year_start_date = period_list[0]["year_start_date"].strftime("%Y-%m-%d")
year_end_date = period_list[-1]["year_end_date"].strftime("%Y-%m-%d")
-
+
for d in accounts:
# add to output
has_value = False
total = 0
- row = {
+ row = frappe._dict({
"account_name": d.account_name,
"account": d.name,
"parent_account": d.parent_account,
@@ -150,7 +151,7 @@
"year_start_date": year_start_date,
"year_end_date": year_end_date,
"currency": company_currency
- }
+ })
for period in period_list:
if d.get(period.key):
# change sign based on Debit or Credit, since calculation is done using (debit - credit)
@@ -163,11 +164,25 @@
has_value = True
total += flt(row[period.key])
- if has_value:
- row["total"] = total
- out.append(row)
+ row["has_value"] = has_value
+ row["total"] = total
+ data.append(row)
+
+ return data
+
+def filter_out_zero_value_rows(data, parent_children_map):
+ data_with_value = []
+ for d in data:
+ if d.get("has_value"):
+ data_with_value.append(d)
+ else:
+ children = [child.name for child in parent_children_map.get(d.account) or []]
+ for row in data:
+ if row.account in children and row.get("has_value"):
+ data_with_value.append(d)
+ break
- return out
+ return data_with_value
def add_total_row(out, balance_must_be, period_list, company_currency):
total_row = {
@@ -187,10 +202,11 @@
total_row["total"] += flt(row["total"])
row["total"] = ""
- out.append(total_row)
+ if total_row.has_key("total"):
+ out.append(total_row)
- # blank row after Total
- out.append({})
+ # blank row after Total
+ out.append({})
def get_accounts(company, root_type):
return frappe.db.sql("""select name, parent_account, lft, rgt, root_type, report_type, account_name from `tabAccount`
@@ -218,7 +234,7 @@
add_to_list(None, 0)
- return filtered_accounts, accounts_by_name
+ return filtered_accounts, accounts_by_name, parent_children_map
def sort_root_accounts(roots):
"""Sort root types as Asset, Liability, Equity, Income, Expense"""
diff --git a/erpnext/stock/report/stock_balance/stock_balance.js b/erpnext/stock/report/stock_balance/stock_balance.js
index db334f8..1af32ed 100644
--- a/erpnext/stock/report/stock_balance/stock_balance.js
+++ b/erpnext/stock/report/stock_balance/stock_balance.js
@@ -22,7 +22,40 @@
"label": __("Item"),
"fieldtype": "Link",
"width": "80",
- "options": "Item"
+ "options": "Item",
+ "reqd": 1,
+ "on_change": function(me) {
+ frappe.query_reports["Stock Balance"].toggle_mandatory_filters(me);
+ }
+ },
+ {
+ "fieldname": "warehouse",
+ "label": __("Warehouse"),
+ "fieldtype": "Link",
+ "width": "80",
+ "options": "Warehouse",
+ "reqd": 1,
+ "on_change": function(me) {
+ frappe.query_reports["Stock Balance"].toggle_mandatory_filters(me);
+ }
+ },
+ ],
+
+ "toggle_mandatory_filters": function(me) {
+ var values = me.get_values(false);
+ var item_filter = me.filters_by_name["item_code"];
+ var warehouse_filter = me.filters_by_name["warehouse"];
+
+ if (values.item_code) {
+ warehouse_filter.df.reqd = 0;
+ } else if (values.warehouse) {
+ item_filter.df.reqd = 0;
+ } else {
+ item_filter.df.reqd = 1;
+ warehouse_filter.df.reqd = 1;
}
- ]
+
+ item_filter.set_mandatory(values.item_code);
+ warehouse_filter.set_mandatory(values.warehouse);
+ }
}
diff --git a/erpnext/stock/report/stock_balance/stock_balance.py b/erpnext/stock/report/stock_balance/stock_balance.py
index 7dd728f..d465050 100644
--- a/erpnext/stock/report/stock_balance/stock_balance.py
+++ b/erpnext/stock/report/stock_balance/stock_balance.py
@@ -9,7 +9,7 @@
def execute(filters=None):
if not filters: filters = {}
- columns = get_columns(filters)
+ columns = get_columns()
item_map = get_item_details(filters)
iwb_map = get_item_warehouse_map(filters)
@@ -30,8 +30,8 @@
return columns, data
-def get_columns(filters):
- """return columns based on filters"""
+def get_columns():
+ """return columns"""
columns = [
_("Item")+":Link/Item:100",
@@ -68,9 +68,11 @@
if filters.get("item_code"):
conditions += " and item_code = '%s'" % frappe.db.escape(filters.get("item_code"), percent=False)
+ if filters.get("warehouse"):
+ conditions += " and warehouse = '%s'" % frappe.db.escape(filters.get("warehouse"), percent=False)
+
return conditions
-#get all details
def get_stock_ledger_entries(filters):
conditions = get_conditions(filters)
return frappe.db.sql("""select item_code, warehouse, posting_date, actual_qty, valuation_rate,
@@ -125,9 +127,13 @@
return iwb_map
def get_item_details(filters):
- item_map = {}
- for d in frappe.db.sql("select name, item_name, stock_uom, item_group, brand, \
- description from tabItem", as_dict=1):
- item_map.setdefault(d.name, d)
+ condition = ''
+ value = ()
+ if filters.get("item_code"):
+ condition = "where item_code=%s"
+ value = (filters["item_code"],)
- return item_map
+ items = frappe.db.sql("""select name, item_name, stock_uom, item_group, brand, description
+ from tabItem {condition}""".format(condition=condition), value, as_dict=1)
+
+ return dict((d.name, d) for d in items)