Merge pull request #2151 from ankitjavalkarwork/fix1999

Allow renaming for Sales Partner Doctype
diff --git a/erpnext/accounts/doctype/c_form/c_form.json b/erpnext/accounts/doctype/c_form/c_form.json
index ca0ac3a..0fa6635 100644
--- a/erpnext/accounts/doctype/c_form/c_form.json
+++ b/erpnext/accounts/doctype/c_form/c_form.json
@@ -1,181 +1,182 @@
 {
- "autoname": "naming_series:",
- "creation": "2013-03-07 11:55:06",
- "docstatus": 0,
- "doctype": "DocType",
+ "allow_import": 1, 
+ "autoname": "naming_series:", 
+ "creation": "2013-03-07 11:55:06", 
+ "docstatus": 0, 
+ "doctype": "DocType", 
  "fields": [
   {
-   "fieldname": "column_break0",
-   "fieldtype": "Column Break",
-   "permlevel": 0,
-   "print_width": "50%",
-   "read_only": 0,
+   "fieldname": "column_break0", 
+   "fieldtype": "Column Break", 
+   "permlevel": 0, 
+   "print_width": "50%", 
+   "read_only": 0, 
    "width": "50%"
-  },
+  }, 
   {
-   "fieldname": "naming_series",
-   "fieldtype": "Select",
-   "label": "Series",
-   "options": "C-FORM-",
-   "permlevel": 0,
-   "read_only": 0,
+   "fieldname": "naming_series", 
+   "fieldtype": "Select", 
+   "label": "Series", 
+   "options": "C-FORM-", 
+   "permlevel": 0, 
+   "read_only": 0, 
    "reqd": 1
-  },
+  }, 
   {
-   "fieldname": "c_form_no",
-   "fieldtype": "Data",
-   "in_list_view": 1,
-   "label": "C-Form No",
-   "permlevel": 0,
-   "read_only": 0,
+   "fieldname": "c_form_no", 
+   "fieldtype": "Data", 
+   "in_list_view": 1, 
+   "label": "C-Form No", 
+   "permlevel": 0, 
+   "read_only": 0, 
    "reqd": 1
-  },
+  }, 
   {
-   "fieldname": "received_date",
-   "fieldtype": "Date",
-   "in_list_view": 1,
-   "label": "Received Date",
-   "permlevel": 0,
-   "read_only": 0,
+   "fieldname": "received_date", 
+   "fieldtype": "Date", 
+   "in_list_view": 1, 
+   "label": "Received Date", 
+   "permlevel": 0, 
+   "read_only": 0, 
    "reqd": 1
-  },
+  }, 
   {
-   "fieldname": "customer",
-   "fieldtype": "Link",
-   "in_list_view": 1,
-   "label": "Customer",
-   "options": "Customer",
-   "permlevel": 0,
-   "read_only": 0,
+   "fieldname": "customer", 
+   "fieldtype": "Link", 
+   "in_list_view": 1, 
+   "label": "Customer", 
+   "options": "Customer", 
+   "permlevel": 0, 
+   "read_only": 0, 
    "reqd": 1
-  },
+  }, 
   {
-   "fieldname": "column_break1",
-   "fieldtype": "Column Break",
-   "permlevel": 0,
-   "print_width": "50%",
-   "read_only": 0,
+   "fieldname": "column_break1", 
+   "fieldtype": "Column Break", 
+   "permlevel": 0, 
+   "print_width": "50%", 
+   "read_only": 0, 
    "width": "50%"
-  },
+  }, 
   {
-   "fieldname": "company",
-   "fieldtype": "Link",
-   "label": "Company",
-   "options": "Company",
-   "permlevel": 0,
+   "fieldname": "company", 
+   "fieldtype": "Link", 
+   "label": "Company", 
+   "options": "Company", 
+   "permlevel": 0, 
    "read_only": 0
-  },
+  }, 
   {
-   "fieldname": "fiscal_year",
-   "fieldtype": "Link",
-   "label": "Fiscal Year",
-   "options": "Fiscal Year",
-   "permlevel": 0,
-   "read_only": 0,
+   "fieldname": "fiscal_year", 
+   "fieldtype": "Link", 
+   "label": "Fiscal Year", 
+   "options": "Fiscal Year", 
+   "permlevel": 0, 
+   "read_only": 0, 
    "reqd": 1
-  },
+  }, 
   {
-   "fieldname": "quarter",
-   "fieldtype": "Select",
-   "label": "Quarter",
-   "options": "\nI\nII\nIII\nIV",
-   "permlevel": 0,
+   "fieldname": "quarter", 
+   "fieldtype": "Select", 
+   "label": "Quarter", 
+   "options": "\nI\nII\nIII\nIV", 
+   "permlevel": 0, 
    "read_only": 0
-  },
+  }, 
   {
-   "fieldname": "total_amount",
-   "fieldtype": "Currency",
-   "label": "Total Amount",
-   "options": "Company:company:default_currency",
-   "permlevel": 0,
-   "read_only": 0,
+   "fieldname": "total_amount", 
+   "fieldtype": "Currency", 
+   "label": "Total Amount", 
+   "options": "Company:company:default_currency", 
+   "permlevel": 0, 
+   "read_only": 0, 
    "reqd": 1
-  },
+  }, 
   {
-   "fieldname": "state",
-   "fieldtype": "Data",
-   "label": "State",
-   "permlevel": 0,
-   "read_only": 0,
+   "fieldname": "state", 
+   "fieldtype": "Data", 
+   "label": "State", 
+   "permlevel": 0, 
+   "read_only": 0, 
    "reqd": 1
-  },
+  }, 
   {
-   "fieldname": "section_break0",
-   "fieldtype": "Section Break",
-   "permlevel": 0,
+   "fieldname": "section_break0", 
+   "fieldtype": "Section Break", 
+   "permlevel": 0, 
    "read_only": 0
-  },
+  }, 
   {
-   "fieldname": "invoice_details",
-   "fieldtype": "Table",
-   "label": "Invoice Details",
-   "options": "C-Form Invoice Detail",
-   "permlevel": 0,
+   "fieldname": "invoice_details", 
+   "fieldtype": "Table", 
+   "label": "Invoice Details", 
+   "options": "C-Form Invoice Detail", 
+   "permlevel": 0, 
    "read_only": 0
-  },
+  }, 
   {
-   "fieldname": "total_invoiced_amount",
-   "fieldtype": "Currency",
-   "label": "Total Invoiced Amount",
-   "options": "Company:company:default_currency",
-   "permlevel": 0,
-   "print_hide": 0,
+   "fieldname": "total_invoiced_amount", 
+   "fieldtype": "Currency", 
+   "label": "Total Invoiced Amount", 
+   "options": "Company:company:default_currency", 
+   "permlevel": 0, 
+   "print_hide": 0, 
    "read_only": 1
-  },
+  }, 
   {
-   "fieldname": "amended_from",
-   "fieldtype": "Link",
-   "ignore_user_permissions": 1,
-   "label": "Amended From",
-   "no_copy": 1,
-   "options": "C-Form",
-   "permlevel": 0,
-   "print_hide": 1,
+   "fieldname": "amended_from", 
+   "fieldtype": "Link", 
+   "ignore_user_permissions": 1, 
+   "label": "Amended From", 
+   "no_copy": 1, 
+   "options": "C-Form", 
+   "permlevel": 0, 
+   "print_hide": 1, 
    "read_only": 1
   }
- ],
- "icon": "icon-file-text",
- "idx": 1,
- "is_submittable": 1,
- "max_attachments": 3,
- "modified": "2014-05-27 03:49:08.272135",
- "modified_by": "Administrator",
- "module": "Accounts",
- "name": "C-Form",
- "owner": "Administrator",
+ ], 
+ "icon": "icon-file-text", 
+ "idx": 1, 
+ "is_submittable": 1, 
+ "max_attachments": 3, 
+ "modified": "2014-09-05 12:58:43.333698", 
+ "modified_by": "Administrator", 
+ "module": "Accounts", 
+ "name": "C-Form", 
+ "owner": "Administrator", 
  "permissions": [
   {
-   "apply_user_permissions": 1,
-   "create": 1,
-   "email": 1,
-   "permlevel": 0,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "Accounts User",
-   "submit": 0,
+   "apply_user_permissions": 1, 
+   "create": 1, 
+   "email": 1, 
+   "permlevel": 0, 
+   "print": 1, 
+   "read": 1, 
+   "report": 1, 
+   "role": "Accounts User", 
+   "submit": 0, 
    "write": 1
-  },
+  }, 
   {
-   "create": 1,
-   "email": 1,
-   "permlevel": 0,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "Accounts Manager",
-   "submit": 0,
+   "create": 1, 
+   "email": 1, 
+   "permlevel": 0, 
+   "print": 1, 
+   "read": 1, 
+   "report": 1, 
+   "role": "Accounts Manager", 
+   "submit": 0, 
    "write": 1
-  },
+  }, 
   {
-   "amend": 0,
-   "cancel": 0,
-   "create": 0,
-   "permlevel": 1,
-   "read": 1,
-   "report": 1,
-   "role": "All",
+   "amend": 0, 
+   "cancel": 0, 
+   "create": 0, 
+   "permlevel": 1, 
+   "read": 1, 
+   "report": 1, 
+   "role": "All", 
    "submit": 0
   }
  ]
-}
+}
\ No newline at end of file
diff --git a/erpnext/controllers/recurring_document.py b/erpnext/controllers/recurring_document.py
index 729c6f7..c7163ae 100644
--- a/erpnext/controllers/recurring_document.py
+++ b/erpnext/controllers/recurring_document.py
@@ -2,14 +2,9 @@
 import frappe
 import frappe.utils
 import frappe.defaults
-
-from frappe.utils import add_days, cint, cstr, date_diff, flt, getdate, nowdate, \
-	get_first_day, get_last_day, comma_and
+from frappe.utils import cint, cstr, getdate, nowdate, get_first_day, get_last_day
 from frappe.model.naming import make_autoname
-
 from frappe import _, msgprint, throw
-from erpnext.accounts.party import get_party_account, get_due_date, get_party_details
-from frappe.model.mapper import get_mapped_doc
 
 month_map = {'Monthly': 1, 'Quarterly': 3, 'Half-yearly': 6, 'Yearly': 12}
 
@@ -51,7 +46,7 @@
 
 					frappe.db.begin()
 					frappe.db.sql("update `tab%s` \
-						set is_recurring = 0 where name = %s" % (doctype, '%s'), 
+						set is_recurring = 0 where name = %s" % (doctype, '%s'),
 						(ref_document))
 					notify_errors(ref_document, doctype, ref_wrapper.customer, ref_wrapper.owner)
 					frappe.db.commit()
@@ -93,12 +88,12 @@
 
 	if ref_wrapper.doctype == "Sales Order":
 		new_document.update({
-			"delivery_date": get_next_date(ref_wrapper.delivery_date, mcount, 
+			"delivery_date": get_next_date(ref_wrapper.delivery_date, mcount,
 				cint(ref_wrapper.repeat_on_day_of_month))
 	})
 
 	new_document.submit()
-	
+
 	return new_document
 
 def get_next_date(dt, mcount, day=None):
@@ -187,11 +182,11 @@
 
 def set_next_date(doc, posting_date):
 	""" Set next date on which recurring document will be created"""
-	
+
 	if not doc.repeat_on_day_of_month:
 		msgprint(_("Please enter 'Repeat on Day of Month' field value"), raise_exception=1)
 
-	next_date = get_next_date(posting_date, month_map[doc.recurring_type], 
+	next_date = get_next_date(posting_date, month_map[doc.recurring_type],
 		cint(doc.repeat_on_day_of_month))
 
 	frappe.db.set(doc, 'next_date', next_date)
diff --git a/erpnext/hr/doctype/expense_claim/expense_claim.js b/erpnext/hr/doctype/expense_claim/expense_claim.js
index 7098445..a4ba2eb 100644
--- a/erpnext/hr/doctype/expense_claim/expense_claim.js
+++ b/erpnext/hr/doctype/expense_claim/expense_claim.js
@@ -80,7 +80,7 @@
 	cur_frm.cscript.set_help(doc);
 
 	if(!doc.__islocal) {
-		cur_frm.toggle_enable("exp_approver", (doc.owner==user && doc.approval_status=="Draft"));
+		cur_frm.toggle_enable("exp_approver", doc.approval_status=="Draft");
 		cur_frm.toggle_enable("approval_status", (doc.exp_approver==user && doc.docstatus==0));
 
 		if(!doc.__islocal && user!=doc.exp_approver)
diff --git a/erpnext/hr/doctype/expense_claim/expense_claim.py b/erpnext/hr/doctype/expense_claim/expense_claim.py
index fda3cf6..560ee02 100644
--- a/erpnext/hr/doctype/expense_claim/expense_claim.py
+++ b/erpnext/hr/doctype/expense_claim/expense_claim.py
@@ -4,13 +4,17 @@
 from __future__ import unicode_literals
 import frappe
 from frappe import _
+from frappe.utils import get_fullname
 from frappe.model.document import Document
 from erpnext.hr.utils import set_employee_name
 
+class InvalidExpenseApproverError(frappe.ValidationError): pass
+
 class ExpenseClaim(Document):
 	def validate(self):
 		self.validate_fiscal_year()
 		self.validate_exp_details()
+		self.validate_expense_approver()
 		set_employee_name(self)
 
 	def on_submit(self):
@@ -24,3 +28,8 @@
 	def validate_exp_details(self):
 		if not self.get('expense_voucher_details'):
 			frappe.throw(_("Please add expense voucher details"))
+
+	def validate_expense_approver(self):
+		if self.exp_approver and "Expense Approver" not in frappe.get_roles(self.exp_approver):
+			frappe.throw(_("{0} ({1}) must have role 'Expense Approver'")\
+				.format(get_fullname(self.exp_approver), self.exp_approver), InvalidExpenseApproverError)
diff --git a/erpnext/hr/doctype/leave_application/leave_application.py b/erpnext/hr/doctype/leave_application/leave_application.py
index 32c4443..1751eb1 100755
--- a/erpnext/hr/doctype/leave_application/leave_application.py
+++ b/erpnext/hr/doctype/leave_application/leave_application.py
@@ -162,8 +162,8 @@
 
 		elif self.leave_approver and not frappe.db.sql("""select name from `tabUserRole`
 			where parent=%s and role='Leave Approver'""", self.leave_approver):
-			frappe.throw(_("{0} must have role 'Leave Approver'").format(get_fullname(self.leave_approver)),
-				InvalidLeaveApproverError)
+			frappe.throw(_("{0} ({1}) must have role 'Leave Approver'")\
+				.format(get_fullname(self.leave_approver), self.leave_approver), InvalidLeaveApproverError)
 
 		elif self.docstatus==1 and len(leave_approvers) and self.leave_approver != frappe.session.user:
 			msgprint(_("Only the selected Leave Approver can submit this Leave Application"),
diff --git a/erpnext/setup/page/setup_wizard/setup_wizard.py b/erpnext/setup/page/setup_wizard/setup_wizard.py
index 1151b1a..d3942e4 100644
--- a/erpnext/setup/page/setup_wizard/setup_wizard.py
+++ b/erpnext/setup/page/setup_wizard/setup_wizard.py
@@ -171,19 +171,26 @@
 
 	global_defaults.save()
 
+	number_format = get_country_info(args.get("country")).get("number_format", "#,###.##")
+
+	# replace these as float number formats, as they have 0 precision
+	# and are currency number formats and not for floats
+	if number_format=="#.###":
+		number_format = "#.###,##"
+	elif number_format=="#,###":
+		number_format = "#,###.##"
+
 	system_settings = frappe.get_doc("System Settings", "System Settings")
 	system_settings.update({
 		"language": args.get("language"),
 		"time_zone": args.get("timezone"),
 		"float_precision": 3,
 		'date_format': frappe.db.get_value("Country", args.get("country"), "date_format"),
-		'number_format': get_country_info(args.get("country")).get("number_format", "#,###.##"),
+		'number_format': number_format,
 		'enable_scheduler': 1
 	})
-
 	system_settings.save()
 
-
 	accounts_settings = frappe.get_doc("Accounts Settings")
 	accounts_settings.auto_accounting_for_stock = 1
 	accounts_settings.save()