Merge branch 'develop' of https://github.com/frappe/erpnext into develop
diff --git a/erpnext/accounts/doctype/account/account.json b/erpnext/accounts/doctype/account/account.json
index 66e7108..ce03877 100644
--- a/erpnext/accounts/doctype/account/account.json
+++ b/erpnext/accounts/doctype/account/account.json
@@ -25,6 +25,7 @@
    "oldfieldtype": "Section Break", 
    "permlevel": 0, 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "read_only": 0, 
    "report_hide": 0, 
    "reqd": 0, 
@@ -46,6 +47,7 @@
    "no_copy": 0, 
    "permlevel": 0, 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "read_only": 0, 
    "report_hide": 0, 
    "reqd": 0, 
@@ -71,6 +73,7 @@
    "oldfieldtype": "Data", 
    "permlevel": 0, 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "read_only": 1, 
    "report_hide": 0, 
    "reqd": 1, 
@@ -95,6 +98,7 @@
    "permlevel": 0, 
    "precision": "", 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "read_only": 0, 
    "report_hide": 0, 
    "reqd": 0, 
@@ -120,6 +124,7 @@
    "options": "Company", 
    "permlevel": 0, 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "read_only": 1, 
    "report_hide": 0, 
    "reqd": 1, 
@@ -143,6 +148,7 @@
    "options": "\nAsset\nLiability\nIncome\nExpense\nEquity", 
    "permlevel": 0, 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "read_only": 1, 
    "report_hide": 0, 
    "reqd": 0, 
@@ -166,6 +172,7 @@
    "options": "\nBalance Sheet\nProfit and Loss", 
    "permlevel": 0, 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "read_only": 1, 
    "report_hide": 0, 
    "reqd": 0, 
@@ -191,6 +198,7 @@
    "permlevel": 0, 
    "precision": "", 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "read_only": 0, 
    "report_hide": 0, 
    "reqd": 0, 
@@ -212,6 +220,7 @@
    "no_copy": 0, 
    "permlevel": 0, 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "read_only": 0, 
    "report_hide": 0, 
    "reqd": 0, 
@@ -238,6 +247,7 @@
    "options": "Account", 
    "permlevel": 0, 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "read_only": 0, 
    "report_hide": 0, 
    "reqd": 1, 
@@ -261,9 +271,10 @@
    "no_copy": 0, 
    "oldfieldname": "account_type", 
    "oldfieldtype": "Select", 
-   "options": "\nBank\nCash\nTax\nChargeable\nWarehouse\nReceivable\nPayable\nEquity\nFixed Asset\nCost of Goods Sold\nExpense Account\nRound Off\nIncome Account\nStock Received But Not Billed\nExpenses Included In Valuation\nStock Adjustment\nStock\nTemporary", 
+   "options": "\nBank\nCash\nDepreciation\nTax\nChargeable\nWarehouse\nReceivable\nPayable\nEquity\nFixed Asset\nCost of Goods Sold\nExpense Account\nRound Off\nIncome Account\nStock Received But Not Billed\nExpenses Included In Valuation\nStock Adjustment\nStock\nTemporary", 
    "permlevel": 0, 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "read_only": 0, 
    "report_hide": 0, 
    "reqd": 0, 
@@ -289,6 +300,7 @@
    "oldfieldtype": "Currency", 
    "permlevel": 0, 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "read_only": 0, 
    "report_hide": 0, 
    "reqd": 0, 
@@ -315,6 +327,7 @@
    "options": "No\nYes", 
    "permlevel": 0, 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "read_only": 0, 
    "report_hide": 0, 
    "reqd": 0, 
@@ -338,6 +351,7 @@
    "options": "Warehouse", 
    "permlevel": 0, 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "read_only": 0, 
    "report_hide": 0, 
    "reqd": 0, 
@@ -361,6 +375,7 @@
    "options": "\nDebit\nCredit", 
    "permlevel": 0, 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "read_only": 0, 
    "report_hide": 0, 
    "reqd": 0, 
@@ -383,6 +398,7 @@
    "no_copy": 0, 
    "permlevel": 0, 
    "print_hide": 1, 
+   "print_hide_if_no_value": 0, 
    "read_only": 1, 
    "report_hide": 0, 
    "reqd": 0, 
@@ -405,6 +421,7 @@
    "no_copy": 0, 
    "permlevel": 0, 
    "print_hide": 1, 
+   "print_hide_if_no_value": 0, 
    "read_only": 1, 
    "report_hide": 0, 
    "reqd": 0, 
@@ -427,6 +444,7 @@
    "no_copy": 0, 
    "permlevel": 0, 
    "print_hide": 1, 
+   "print_hide_if_no_value": 0, 
    "read_only": 1, 
    "report_hide": 0, 
    "reqd": 0, 
@@ -445,7 +463,7 @@
  "issingle": 0, 
  "istable": 0, 
  "max_attachments": 0, 
- "modified": "2015-11-16 06:29:41.535663", 
+ "modified": "2015-12-12 10:19:54.365839", 
  "modified_by": "Administrator", 
  "module": "Accounts", 
  "name": "Account", 
diff --git a/erpnext/accounts/report/cash_flow/__init__.py b/erpnext/accounts/report/cash_flow/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/erpnext/accounts/report/cash_flow/__init__.py
diff --git a/erpnext/accounts/report/cash_flow/cash_flow.js b/erpnext/accounts/report/cash_flow/cash_flow.js
new file mode 100644
index 0000000..c8fb04c
--- /dev/null
+++ b/erpnext/accounts/report/cash_flow/cash_flow.js
@@ -0,0 +1,6 @@
+// Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and contributors
+// For license information, please see license.txt
+
+frappe.require("assets/erpnext/js/financial_statements.js");
+
+frappe.query_reports["Cash Flow"] = erpnext.financial_statements;
diff --git a/erpnext/accounts/report/cash_flow/cash_flow.json b/erpnext/accounts/report/cash_flow/cash_flow.json
new file mode 100644
index 0000000..d0f2e04
--- /dev/null
+++ b/erpnext/accounts/report/cash_flow/cash_flow.json
@@ -0,0 +1,18 @@
+{
+ "add_total_row": 0, 
+ "apply_user_permissions": 1, 
+ "creation": "2015-12-12 10:22:45.383203", 
+ "disabled": 0, 
+ "docstatus": 0, 
+ "doctype": "Report", 
+ "idx": 0, 
+ "is_standard": "Yes", 
+ "modified": "2015-12-12 10:22:45.383203", 
+ "modified_by": "Administrator", 
+ "module": "Accounts", 
+ "name": "Cash Flow", 
+ "owner": "Administrator", 
+ "ref_doctype": "GL Entry", 
+ "report_name": "Cash Flow", 
+ "report_type": "Script Report"
+}
\ No newline at end of file
diff --git a/erpnext/accounts/report/cash_flow/cash_flow.py b/erpnext/accounts/report/cash_flow/cash_flow.py
new file mode 100644
index 0000000..3e5efea
--- /dev/null
+++ b/erpnext/accounts/report/cash_flow/cash_flow.py
@@ -0,0 +1,72 @@
+# Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and contributors
+# For license information, please see license.txt
+
+from __future__ import unicode_literals
+from frappe import _
+from erpnext.accounts.report.financial_statements import (get_period_list, get_columns, get_data, get_data_account_type, add_total_row_account)
+from erpnext.accounts.report.profit_and_loss_statement.profit_and_loss_statement import get_net_profit_loss
+
+
+def execute(filters=None):
+    period_list = get_period_list(filters.fiscal_year, filters.periodicity)
+
+    operation_accounts = {"section_name": "Operations",
+                          "section_footer": _("Net Cash from Operations"),
+                          "section_header": _("Cash Flow from Operations"),
+                          "account_types": [{"account_type": "Depreciation", "label": _("Depreciation")},
+                                            {"account_type": "Receivable", "label": _("Net Change in Accounts Receivable")},
+                                            {"account_type": "Payable", "label": _("Net Change in Accounts Payable")},
+                                            {"account_type": "Warehouse", "label": _("Net Change in Inventory")}]}
+
+    investing_accounts = {"section_name": "Investing",
+                          "section_footer": _("Net Cash from Investing"),
+                          "section_header": _("Cash Flow from Investing"),
+                          "account_types": [{"account_type": "Fixed Asset", "label": _("Net Change in Fixed Asset")},
+                                            ]}
+
+    financing_accounts = {"section_name": "Financing",
+                          "section_footer": _("Net Cash from Financing"),
+                          "section_header": _("Cash Flow from Financing"),
+                          "account_types": [{"account_type": "Equity", "label": _("Net Change in Equity")},
+                                            ]}
+
+    # combine all cash flow accounts for iteration
+    cash_flow_accounts = []
+    cash_flow_accounts.append(operation_accounts)
+    cash_flow_accounts.append(investing_accounts)
+    cash_flow_accounts.append(financing_accounts)
+
+    # compute net income
+    income = get_data(filters.company, "Income", "Credit", period_list, ignore_closing_entries=True)
+    expense = get_data(filters.company, "Expense", "Debit", period_list, ignore_closing_entries=True)
+    net_profit_loss = get_net_profit_loss(income, expense, period_list)
+
+    data = []
+
+    for cash_flow_account in cash_flow_accounts:
+
+        section_data = []
+        value = {"account_name": cash_flow_account['section_header'], "parent_account": None,
+                 "indent": 0.0, "account": cash_flow_account['section_header']}
+        data.append(value)
+
+        if len(data) == 1:
+            # add first net income in operations section
+            if net_profit_loss:
+                net_profit_loss.update({"indent": 1, "parent_account": operation_accounts['section_header']})
+                data.append(net_profit_loss)
+                section_data.append(net_profit_loss)
+
+        for account in cash_flow_account['account_types']:
+            account_data = get_data_account_type(filters.company, account['account_type'], period_list)
+            account_data.update({"account_name": account['label'], "indent": 1,
+                                 "parent_account": cash_flow_account['section_header']})
+            data.append(account_data)
+            section_data.append(account_data)
+
+        add_total_row_account(data, section_data, cash_flow_account['section_footer'], period_list)
+
+    add_total_row_account(data, data, _("Net Change in Cash"), period_list)
+    columns = get_columns(period_list)
+
+    return columns, data
diff --git a/erpnext/accounts/report/financial_statements.py b/erpnext/accounts/report/financial_statements.py
index 5cdf553..be13ea5 100644
--- a/erpnext/accounts/report/financial_statements.py
+++ b/erpnext/accounts/report/financial_statements.py
@@ -258,3 +258,35 @@
 		})
 
 	return columns
+
+
+def get_data_account_type(company, account_type, period_list):
+    data = {}
+    for period in period_list:
+        gl_sum = frappe.db.sql_list("""select sum(credit) - sum(debit) FROM `tabGL Entry`
+                                    where company='%s' and posting_date >= '%s' and posting_date <= '%s' and
+                                    account in ( SELECT name FROM tabAccount WHERE account_type = '%s')""" %
+                                    (company, period['from_date'], period['to_date'], account_type))
+        if gl_sum[0]:
+            amount = gl_sum[0]
+        else:
+            amount = 0
+        data.update({"from_date": period['from_date'], "to_date": period['to_date'], period["key"]: amount})
+    return data
+
+
+def add_total_row_account(out, data, label, period_list):
+    # print out
+    total_row = {
+        "account_name": "'" + _("{0}").format(label) + "'",
+        "account": None
+    }
+
+    for row in data:
+        if row.get("parent_account"):
+            for period in period_list:
+                total_row.setdefault(period.key, 0.0)
+                total_row[period.key] += row.get(period.key, 0.0)
+
+    out.append(total_row)
+    out.append({})
diff --git a/erpnext/config/accounts.py b/erpnext/config/accounts.py
index 7fca256..8a27394 100644
--- a/erpnext/config/accounts.py
+++ b/erpnext/config/accounts.py
@@ -231,6 +231,12 @@
 				},
 				{
 					"type": "report",
+					"name": "Cash Flow",
+					"doctype": "GL Entry",
+					"is_query_report": True
+				},
+				{
+					"type": "report",
 					"name": "Profit and Loss Statement",
 					"doctype": "GL Entry",
 					"is_query_report": True