Merge pull request #3442 from nabinhait/develop

fixes in stock entry and report
diff --git a/erpnext/accounts/doctype/journal_entry/journal_entry.py b/erpnext/accounts/doctype/journal_entry/journal_entry.py
index efbd1e9..831fcd7 100644
--- a/erpnext/accounts/doctype/journal_entry/journal_entry.py
+++ b/erpnext/accounts/doctype/journal_entry/journal_entry.py
@@ -458,11 +458,11 @@
 	if voucher_type=="Bank Entry":
 		account = frappe.db.get_value("Company", company, "default_bank_account")
 		if not account:
-			account = frappe.db.get_value("Account", {"company": company, "account_type": "Bank"})
+			account = frappe.db.get_value("Account", {"company": company, "account_type": "Bank", "is_group": 0})
 	elif voucher_type=="Cash Entry":
 		account = frappe.db.get_value("Company", company, "default_cash_account")
 		if not account:
-			account = frappe.db.get_value("Account", {"company": company, "account_type": "Cash"})
+			account = frappe.db.get_value("Account", {"company": company, "account_type": "Cash", "is_group": 0})
 
 	if account:
 		return {
@@ -538,15 +538,13 @@
 
 
 def get_against_jv(doctype, txt, searchfield, start, page_len, filters):
-	if not filters.get("party"):
-		return []
 	return frappe.db.sql("""select jv.name, jv.posting_date, jv.user_remark
 		from `tabJournal Entry` jv, `tabJournal Entry Account` jv_detail
-		where jv_detail.parent = jv.name and jv_detail.account = %s and jv_detail.party = %s
+		where jv_detail.parent = jv.name and jv_detail.account = %s and ifnull(jv_detail.party, '') = %s
 		and (ifnull(jv_detail.against_invoice, '') = '' and ifnull(jv_detail.against_voucher, '') = ''
 		and ifnull(jv_detail.against_jv, '') = '' )
 		and jv.docstatus = 1 and jv.{0} like %s order by jv.name desc limit %s, %s""".format(searchfield),
-		(filters["account"], filters["party"], "%{0}%".format(txt), start, page_len))
+		(filters["account"], cstr(filters["party"]), "%{0}%".format(txt), start, page_len))
 
 @frappe.whitelist()
 def get_outstanding(args):
diff --git a/erpnext/accounts/report/payment_period_based_on_invoice_date/payment_period_based_on_invoice_date.js b/erpnext/accounts/report/payment_period_based_on_invoice_date/payment_period_based_on_invoice_date.js
index fd03cc3..952540c 100644
--- a/erpnext/accounts/report/payment_period_based_on_invoice_date/payment_period_based_on_invoice_date.js
+++ b/erpnext/accounts/report/payment_period_based_on_invoice_date/payment_period_based_on_invoice_date.js
@@ -4,6 +4,14 @@
 frappe.query_reports["Payment Period Based On Invoice Date"] = {
 	"filters": [
 		{
+			fieldname:"company",
+			label: __("Company"),
+			fieldtype: "Link",
+			options: "Company",
+			reqd: 1,
+			default: frappe.defaults.get_user_default("company")
+		},
+		{
 			fieldname: "from_date",
 			label: __("From Date"),
 			fieldtype: "Date",
@@ -23,27 +31,28 @@
 			default: "Incoming"
 		},
 		{
-			fieldname:"account",
-			label: __("Account"),
-			fieldtype: "Link",
-			options: "Account",
-			get_query: function() {
+			"fieldname":"party_type",
+			"label": __("Party Type"),
+			"fieldtype": "Link",
+			"options": "DocType",
+			"get_query": function() {
 				return {
-					query: "erpnext.controllers.queries.get_account_list",
-					filters: {
-						"report_type": "Balance Sheet",
-						company: frappe.query_report.filters_by_name.company.get_value()
-					}
+					filters: {"name": ["in", ["Customer", "Supplier"]]}
 				}
 			}
 		},
 		{
-			fieldname:"company",
-			label: __("Company"),
-			fieldtype: "Link",
-			options: "Company",
-			reqd: 1,
-			default: frappe.defaults.get_user_default("company")
+			"fieldname":"party",
+			"label": __("Party"),
+			"fieldtype": "Dynamic Link",
+			"get_options": function() {
+				var party_type = frappe.query_report.filters_by_name.party_type.get_value();
+				var party = frappe.query_report.filters_by_name.party.get_value();
+				if(party && !party_type) {
+					frappe.throw(__("Please select Party Type first"));
+				}
+				return party_type;
+			}
 		},
 	]
 }
diff --git a/erpnext/accounts/report/payment_period_based_on_invoice_date/payment_period_based_on_invoice_date.py b/erpnext/accounts/report/payment_period_based_on_invoice_date/payment_period_based_on_invoice_date.py
index fdd6e1a..bf5c4e5 100644
--- a/erpnext/accounts/report/payment_period_based_on_invoice_date/payment_period_based_on_invoice_date.py
+++ b/erpnext/accounts/report/payment_period_based_on_invoice_date/payment_period_based_on_invoice_date.py
@@ -20,16 +20,16 @@
 	for d in entries:
 		if d.against_voucher:
 			against_date = d.against_voucher and invoice_posting_date_map[d.against_voucher] or ""
-			outstanding_amount = flt(d.debit) or -1 * flt(d.credit)
+			payment_amount = flt(d.debit) or -1 * flt(d.credit)
 		else:
 			against_date = d.against_invoice and invoice_posting_date_map[d.against_invoice] or ""
-			outstanding_amount = flt(d.credit) or -1 * flt(d.debit)
+			payment_amount = flt(d.credit) or -1 * flt(d.debit)
 
-		row = [d.name, d.account, d.posting_date, d.against_voucher or d.against_invoice,
+		row = [d.name, d.party_type, d.party, d.posting_date, d.against_voucher or d.against_invoice,
 			against_date, d.debit, d.credit, d.cheque_no, d.cheque_date, d.remark]
 
 		if d.against_voucher or d.against_invoice:
-			row += get_ageing_data(30, 60, 90, d.posting_date, against_date, outstanding_amount)
+			row += get_ageing_data(30, 60, 90, d.posting_date, against_date, payment_amount)
 		else:
 			row += ["", "", "", "", ""]
 
@@ -38,7 +38,8 @@
 	return columns, data
 
 def get_columns():
-	return [_("Journal Entry") + ":Link/Journal Entry:140", _("Account") + ":Link/Account:140",
+	return [_("Journal Entry") + ":Link/Journal Entry:140", 
+		_("Party Type") + ":Link/DocType:100", _("Party") + ":Dynamic Link/party_type:140",
 		_("Posting Date") + ":Date:100", _("Against Invoice") + ":Link/Purchase Invoice:130",
 		_("Against Invoice Posting Date") + ":Date:130", _("Debit") + ":Currency:120", _("Credit") + ":Currency:120",
 		_("Reference No") + "::100", _("Reference Date") + ":Date:100", _("Remarks") + "::150", _("Age") +":Int:40",
@@ -46,41 +47,38 @@
 	]
 
 def get_conditions(filters):
-	conditions = ""
-	party = None
+	conditions = []
 
-	if filters.get("account"):
-		party = filters["account"]
-	else:
-		conditions += " and company = '%s'" % frappe.db.escape(filters["company"])
+	if not filters.get("party_type"):
+		if filters.get("payment_type") == "Outgoing":
+			filters["party_type"] = "Supplier"
+		else:
+			filters["party_type"] = "Customer"
+	
+	if filters.get("party_type"):
+		conditions.append("jvd.party_type=%(party_type)s")
 
-		account_type = "Receivable" if filters.get("payment_type") == "Incoming" else "Payable"
+	if filters.get("party"):
+		conditions.append("jvd.party=%(party)s")
 
-		conditions += """ and account in
-			(select name from tabAccount
-				where account_type = '{0}'
-				and company='{1}')""".format(account_type, frappe.db.escape(filters["company"]))
-
-	if party:
-		conditions += " and jvd.party = '%s'" % frappe.db.escape(party)
-	else:
-		conditions += " and ifnull(jvd.party, '') != ''"
+	if filters.get("company"):
+		conditions.append("jv.company=%(company)s")
 
 	if filters.get("from_date"):
-		conditions += " and jv.posting_date >= '%s'" % filters["from_date"]
+		conditions.append("jv.posting_date >= %(from_date)s")
 	if filters.get("to_date"):
-		conditions += " and jv.posting_date <= '%s'" % filters["to_date"]
+		conditions.append("jv.posting_date <= %(to_date)s")
 
-	return conditions
+	return "and {}".format(" and ".join(conditions)) if conditions else ""
 
 def get_entries(filters):
 	conditions = get_conditions(filters)
-	entries =  frappe.db.sql("""select jv.name, jvd.account, jv.posting_date,
+	entries =  frappe.db.sql("""select jv.name, jvd.party_type, jvd.party, jv.posting_date,
 		jvd.against_voucher, jvd.against_invoice, jvd.debit, jvd.credit,
 		jv.cheque_no, jv.cheque_date, jv.remark
 		from `tabJournal Entry Account` jvd, `tabJournal Entry` jv
 		where jvd.parent = jv.name and jv.docstatus=1 %s order by jv.name DESC""" %
-		conditions, as_dict=1, debug=1)
+		conditions, filters, as_dict=1)
 
 	return entries
 
diff --git a/erpnext/setup/doctype/item_group/item_group.py b/erpnext/setup/doctype/item_group/item_group.py
index 831095d..279ff0a 100644
--- a/erpnext/setup/doctype/item_group/item_group.py
+++ b/erpnext/setup/doctype/item_group/item_group.py
@@ -3,7 +3,7 @@
 
 from __future__ import unicode_literals
 import frappe
-
+import urllib
 from frappe.utils.nestedset import NestedSet
 from frappe.website.website_generator import WebsiteGenerator
 from frappe.website.render import clear_cache
@@ -91,7 +91,7 @@
 	# add missing absolute link in files
 	# user may forget it during upload
 	if (context.get("website_image") or "").startswith("files/"):
-		context["website_image"] = "/" + context["website_image"]
+		context["website_image"] = "/" + urllib.quote(context["website_image"])
 	return frappe.get_template("templates/includes/product_in_grid.html").render(context)
 
 def get_group_item_count(item_group):
diff --git a/erpnext/setup/doctype/naming_series/naming_series.py b/erpnext/setup/doctype/naming_series/naming_series.py
index 5105fcd..dc7a90c 100644
--- a/erpnext/setup/doctype/naming_series/naming_series.py
+++ b/erpnext/setup/doctype/naming_series/naming_series.py
@@ -49,7 +49,7 @@
 		self.set_series_for(self.select_doc_for_series, series_list)
 
 		# create series
-		map(self.insert_series, [d.split('.')[0] for d in series_list])
+		map(self.insert_series, [d.split('.')[0] for d in series_list if d.strip()])
 
 		msgprint(_("Series Updated"))
 
diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.py b/erpnext/stock/doctype/stock_entry/stock_entry.py
index e374b3b..da86432 100644
--- a/erpnext/stock/doctype/stock_entry/stock_entry.py
+++ b/erpnext/stock/doctype/stock_entry/stock_entry.py
@@ -112,7 +112,7 @@
 
 			for f in ("uom", "stock_uom", "description", "item_name", "expense_account",
 				"cost_center", "conversion_factor"):
-					if f not in ["expense_account", "cost_center"] or not item.get(f):
+					if f in ["stock_uom", "conversion_factor"] or not item.get(f):
 						item.set(f, item_details.get(f))
 
 			if self.difference_account:
diff --git a/erpnext/stock/report/ordered_items_to_be_delivered/ordered_items_to_be_delivered.json b/erpnext/stock/report/ordered_items_to_be_delivered/ordered_items_to_be_delivered.json
index a32e363..3a18daf 100644
--- a/erpnext/stock/report/ordered_items_to_be_delivered/ordered_items_to_be_delivered.json
+++ b/erpnext/stock/report/ordered_items_to_be_delivered/ordered_items_to_be_delivered.json
@@ -5,12 +5,12 @@
  "doctype": "Report", 
  "idx": 1, 
  "is_standard": "Yes", 
- "modified": "2015-04-07 08:18:14.440193", 
+ "modified": "2015-06-10 15:52:49.492144", 
  "modified_by": "Administrator", 
  "module": "Stock", 
  "name": "Ordered Items To Be Delivered", 
  "owner": "Administrator", 
- "query": "select \n `tabSales Order`.`name` as \"Sales Order:Link/Sales Order:120\",\n `tabSales Order`.`customer` as \"Customer:Link/Customer:120\",\n `tabSales Order`.`transaction_date` as \"Date:Date\",\n `tabSales Order`.`project_name` as \"Project\",\n `tabSales Order Item`.item_code as \"Item:Link/Item:120\",\n `tabSales Order Item`.qty as \"Qty:Float:140\",\n `tabSales Order Item`.delivered_qty as \"Delivered Qty:Float:140\",\n (`tabSales Order Item`.qty - ifnull(`tabSales Order Item`.delivered_qty, 0)) as \"Qty to Deliver:Float:140\",\n `tabSales Order Item`.base_rate as \"Rate:Float:140\",\n `tabSales Order Item`.base_amount as \"Amount:Float:140\",\n ((`tabSales Order Item`.qty - ifnull(`tabSales Order Item`.delivered_qty, 0))*`tabSales Order Item`.base_rate) as \"Amount to Deliver:Float:140\",\n `tabBin`.actual_qty as \"Available Qty:Float:120\",\n `tabBin`.projected_qty as \"Projected Qty:Float:120\",\n `tabSales Order`.`delivery_date` as \"Expected Delivery Date:Date:120\",\n `tabSales Order Item`.item_name as \"Item Name::150\",\n `tabSales Order Item`.description as \"Description::200\",\n `tabSales Order Item`.item_group as \"Item Group:Link/Item Group:120\"\nfrom\n `tabSales Order`, `tabSales Order Item`, `tabBin`\nwhere\n `tabSales Order Item`.`parent` = `tabSales Order`.`name`\n and `tabSales Order`.docstatus = 1\n and `tabSales Order`.status != \"Stopped\"\n and ifnull(`tabSales Order Item`.delivered_qty,0) < ifnull(`tabSales Order Item`.qty,0)\n and `tabBin`.item_code = `tabSales Order Item`.item_code\n and `tabBin`.warehouse = `tabSales Order Item`.warehouse\norder by `tabSales Order`.transaction_date asc", 
+ "query": "select \n `tabSales Order`.`name` as \"Sales Order:Link/Sales Order:120\",\n `tabSales Order`.`customer` as \"Customer:Link/Customer:120\",\n `tabSales Order`.`transaction_date` as \"Date:Date\",\n `tabSales Order`.`project_name` as \"Project\",\n `tabSales Order Item`.item_code as \"Item:Link/Item:120\",\n `tabSales Order Item`.qty as \"Qty:Float:140\",\n `tabSales Order Item`.delivered_qty as \"Delivered Qty:Float:140\",\n (`tabSales Order Item`.qty - ifnull(`tabSales Order Item`.delivered_qty, 0)) as \"Qty to Deliver:Float:140\",\n `tabSales Order Item`.base_rate as \"Rate:Float:140\",\n `tabSales Order Item`.base_amount as \"Amount:Float:140\",\n ((`tabSales Order Item`.qty - ifnull(`tabSales Order Item`.delivered_qty, 0))*`tabSales Order Item`.base_rate) as \"Amount to Deliver:Float:140\",\n `tabBin`.actual_qty as \"Available Qty:Float:120\",\n `tabBin`.projected_qty as \"Projected Qty:Float:120\",\n `tabSales Order`.`delivery_date` as \"Expected Delivery Date:Date:120\",\n `tabSales Order Item`.item_name as \"Item Name::150\",\n `tabSales Order Item`.description as \"Description::200\",\n `tabSales Order Item`.item_group as \"Item Group:Link/Item Group:120\",\n `tabSales Order Item`.warehouse as \"Warehouse:Link/Warehouse:200\"\nfrom\n `tabSales Order`, `tabSales Order Item`, `tabBin`\nwhere\n `tabSales Order Item`.`parent` = `tabSales Order`.`name`\n and `tabSales Order`.docstatus = 1\n and `tabSales Order`.status != \"Stopped\"\n and ifnull(`tabSales Order Item`.delivered_qty,0) < ifnull(`tabSales Order Item`.qty,0)\n and `tabBin`.item_code = `tabSales Order Item`.item_code\n and `tabBin`.warehouse = `tabSales Order Item`.warehouse\norder by `tabSales Order`.transaction_date asc", 
  "ref_doctype": "Delivery Note", 
  "report_name": "Ordered Items To Be Delivered", 
  "report_type": "Query Report"