Merge pull request #6956 from rohitwaghchaure/payment_entry_issue

[Fix] Payment entry, exchange rate is not set properly
diff --git a/erpnext/__init__.py b/erpnext/__init__.py
index a92e105..d0fec44 100644
--- a/erpnext/__init__.py
+++ b/erpnext/__init__.py
@@ -2,7 +2,7 @@
 from __future__ import unicode_literals
 import frappe
 
-__version__ = '7.1.12'
+__version__ = '7.1.13'
 
 def get_default_company(user=None):
 	'''Get default company for user'''
diff --git a/erpnext/hr/doctype/salary_component/salary_component.json b/erpnext/hr/doctype/salary_component/salary_component.json
index 33fb793..64f91c7 100644
--- a/erpnext/hr/doctype/salary_component/salary_component.json
+++ b/erpnext/hr/doctype/salary_component/salary_component.json
@@ -31,6 +31,7 @@
    "print_hide": 0, 
    "print_hide_if_no_value": 0, 
    "read_only": 0, 
+   "remember_last_selected_value": 0, 
    "report_hide": 0, 
    "reqd": 1, 
    "search_index": 0, 
@@ -58,8 +59,9 @@
    "print_hide_if_no_value": 0, 
    "print_width": "120px", 
    "read_only": 0, 
+   "remember_last_selected_value": 0, 
    "report_hide": 0, 
-   "reqd": 0, 
+   "reqd": 1, 
    "search_index": 0, 
    "set_only_once": 0, 
    "unique": 0, 
@@ -86,6 +88,7 @@
    "print_hide": 0, 
    "print_hide_if_no_value": 0, 
    "read_only": 0, 
+   "remember_last_selected_value": 0, 
    "report_hide": 0, 
    "reqd": 1, 
    "search_index": 0, 
@@ -112,6 +115,7 @@
    "print_hide": 0, 
    "print_hide_if_no_value": 0, 
    "read_only": 0, 
+   "remember_last_selected_value": 0, 
    "report_hide": 0, 
    "reqd": 0, 
    "search_index": 0, 
@@ -137,6 +141,7 @@
    "print_hide": 0, 
    "print_hide_if_no_value": 0, 
    "read_only": 0, 
+   "remember_last_selected_value": 0, 
    "report_hide": 0, 
    "reqd": 0, 
    "search_index": 0, 
@@ -164,6 +169,7 @@
    "print_hide": 0, 
    "print_hide_if_no_value": 0, 
    "read_only": 0, 
+   "remember_last_selected_value": 0, 
    "report_hide": 0, 
    "reqd": 0, 
    "search_index": 0, 
@@ -182,7 +188,7 @@
  "issingle": 0, 
  "istable": 0, 
  "max_attachments": 0, 
- "modified": "2016-08-31 08:08:47.359578", 
+ "modified": "2016-11-16 12:44:37.733773", 
  "modified_by": "Administrator", 
  "module": "HR", 
  "name": "Salary Component", 
@@ -199,6 +205,7 @@
    "export": 1, 
    "if_owner": 0, 
    "import": 0, 
+   "is_custom": 0, 
    "permlevel": 0, 
    "print": 1, 
    "read": 1, 
diff --git a/erpnext/hr/doctype/salary_component/salary_component.py b/erpnext/hr/doctype/salary_component/salary_component.py
index ca69568..8af7311 100644
--- a/erpnext/hr/doctype/salary_component/salary_component.py
+++ b/erpnext/hr/doctype/salary_component/salary_component.py
@@ -10,7 +10,6 @@
 class SalaryComponent(Document):
 	def validate(self):
 		self.validate_abbr()
-		
 
 	def validate_abbr(self):
 		if not self.salary_component_abbr:
@@ -21,8 +20,5 @@
 		if self.get('__islocal') and len(self.salary_component_abbr) > 5:
 			frappe.throw(_("Abbreviation cannot have more than 5 characters"))
 
-		if not self.salary_component_abbr.strip():
-			frappe.throw(_("Abbreviation is mandatory"))
-
 		if frappe.db.sql("select salary_component_abbr from `tabSalary Component` where name!=%s and salary_component_abbr=%s", (self.name, self.salary_component_abbr)):
 			frappe.throw(_("Abbreviation already used for another salary component"))
\ No newline at end of file
diff --git a/erpnext/patches/v7_1/update_missing_salary_component_type.py b/erpnext/patches/v7_1/update_missing_salary_component_type.py
index 7f6002d..f0e3f6a 100644
--- a/erpnext/patches/v7_1/update_missing_salary_component_type.py
+++ b/erpnext/patches/v7_1/update_missing_salary_component_type.py
@@ -1,6 +1,7 @@
 from __future__ import unicode_literals
 
 import frappe
+from frappe.utils import cstr
 
 '''
 Some components do not have type set, try and guess whether they turn up in
@@ -8,18 +9,38 @@
 '''
 
 def execute():
-	for s in frappe.db.sql('select name from `tabSalary Component` where ifnull(type, "")=""'):
-		compontent = frappe.get_doc('Salary Component', s[0])
+	for s in frappe.db.sql('''select name, type, salary_component_abbr from `tabSalary Component` 
+			where ifnull(type, "")="" or ifnull(salary_component_abbr, "") = ""''', as_dict=1):
+			
+		component = frappe.get_doc('Salary Component', s.name)
 
 		# guess
-		guess = frappe.db.sql('''select
-			parentfield from `tabSalary Detail`
-			where salary_component=%s limit 1''', s[0])
+		if not s.type:
+			guess = frappe.db.sql('''select
+				parentfield from `tabSalary Detail`
+				where salary_component=%s limit 1''', s.name)
 
-		if guess:
-			compontent.type = 'Earning' if guess[0][0]=='earnings' else 'Deduction'
+			if guess:
+				component.type = 'Earning' if guess[0][0]=='earnings' else 'Deduction'
 
-		else:
-			compontent.type = 'Deduction'
-
-		compontent.save()
\ No newline at end of file
+			else:
+				component.type = 'Deduction'
+				
+		if not s.salary_component_abbr:
+			abbr = ''.join([c[0] for c in component.salary_component.split()]).upper()
+			
+			abbr_count = frappe.db.sql("""
+				select 
+					count(name) 
+				from 
+					`tabSalary Component` 
+				where 
+					salary_component_abbr = %s or salary_component_abbr like %s
+				""", (abbr, abbr + "-%%"))
+				
+			if abbr_count and abbr_count[0][0] > 0:
+				abbr = abbr + "-" + cstr(abbr_count[0][0])
+				
+			component.salary_component_abbr = abbr
+			
+		component.save()
\ No newline at end of file