Merge branch 'develop' into income-tax-period-factor-dev
diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json
index bd84506..5f4833c 100644
--- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json
+++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json
@@ -1882,6 +1882,7 @@
    "collapsible": 0,
    "collapsible_depends_on": "",
    "columns": 0,
+   "fetch_if_empty": 0,
    "fieldname": "pricing_rule_details",
    "fieldtype": "Section Break",
    "hidden": 0,
@@ -1915,6 +1916,7 @@
    "collapsible": 0,
    "collapsible_depends_on": "",
    "columns": 0,
+   "fetch_if_empty": 0,
    "fieldname": "pricing_rules",
    "fieldtype": "Table",
    "hidden": 0,
@@ -2318,6 +2320,7 @@
    "bold": 0,
    "collapsible": 0,
    "columns": 0,
+   "fetch_if_empty": 0,
    "fieldname": "tax_category",
    "fieldtype": "Link",
    "hidden": 0,
@@ -2449,6 +2452,7 @@
    "bold": 0,
    "collapsible": 0,
    "columns": 0,
+   "fetch_if_empty": 0,
    "fieldname": "taxes_and_charges",
    "fieldtype": "Link",
    "hidden": 0,
@@ -2483,6 +2487,7 @@
    "bold": 0,
    "collapsible": 0,
    "columns": 0,
+   "fetch_if_empty": 0,
    "fieldname": "taxes",
    "fieldtype": "Table",
    "hidden": 0,
@@ -3947,7 +3952,7 @@
    "bold": 0,
    "collapsible": 0,
    "columns": 0,
-   "default": "1",
+   "default": "",
    "fetch_if_empty": 0,
    "fieldname": "allocate_advances_automatically",
    "fieldtype": "Check",
@@ -4957,18 +4962,16 @@
   }
  ],
  "has_web_view": 0,
- "hide_heading": 0,
  "hide_toolbar": 0,
  "icon": "fa fa-file-text",
  "idx": 204,
- "image_view": 0,
  "in_create": 0,
  "is_submittable": 1,
  "issingle": 0,
  "istable": 0,
  "max_attachments": 0,
  "menu_index": 0,
- "modified": "2019-04-11 16:08:22.288425",
+ "modified": "2019-04-22 12:08:12.648559",
  "modified_by": "Administrator",
  "module": "Accounts",
  "name": "Purchase Invoice",
@@ -5073,7 +5076,6 @@
  ],
  "quick_entry": 0,
  "read_only": 0,
- "read_only_onload": 1,
  "search_fields": "posting_date, supplier, bill_no, base_grand_total, outstanding_amount",
  "show_name_in_global_search": 1,
  "sort_field": "modified",
diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.json b/erpnext/accounts/doctype/sales_invoice/sales_invoice.json
index ffc5a1d..1ded272 100644
--- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.json
+++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.json
@@ -3731,7 +3731,7 @@
    "bold": 0,
    "collapsible": 0,
    "columns": 0,
-   "default": "1",
+   "default": "",
    "fetch_if_empty": 0,
    "fieldname": "allocate_advances_automatically",
    "fieldtype": "Check",
@@ -5915,7 +5915,7 @@
  "istable": 0,
  "max_attachments": 0,
  "menu_index": 0,
- "modified": "2019-04-11 17:08:11.629845",
+ "modified": "2019-04-22 12:07:58.168803",
  "modified_by": "Administrator",
  "module": "Accounts",
  "name": "Sales Invoice",
@@ -6010,4 +6010,4 @@
  "track_changes": 1,
  "track_seen": 1,
  "track_views": 0
-}
\ No newline at end of file
+}
diff --git a/erpnext/accounts/report/share_ledger/share_ledger.json b/erpnext/accounts/report/share_ledger/share_ledger.json
index d374bb7..fe158a6 100644
--- a/erpnext/accounts/report/share_ledger/share_ledger.json
+++ b/erpnext/accounts/report/share_ledger/share_ledger.json
@@ -1,23 +1,27 @@
 {
  "add_total_row": 0, 
- "apply_user_permissions": 1, 
  "creation": "2017-12-27 16:15:52.615453", 
+ "disable_prepared_report": 0, 
  "disabled": 0, 
  "docstatus": 0, 
  "doctype": "Report", 
  "idx": 0, 
  "is_standard": "Yes", 
- "modified": "2017-12-27 16:46:54.422356", 
+ "modified": "2019-04-19 10:50:36.061588", 
  "modified_by": "Administrator", 
  "module": "Accounts", 
  "name": "Share Ledger", 
  "owner": "Administrator", 
+ "prepared_report": 0, 
  "ref_doctype": "Share Transfer", 
  "report_name": "Share Ledger", 
  "report_type": "Script Report", 
  "roles": [
   {
    "role": "Administrator"
+  }, 
+  {
+   "role": "System Manager"
   }
  ]
 }
\ No newline at end of file
diff --git a/erpnext/config/accounting.py b/erpnext/config/accounting.py
index 1b8bf27..6664c4d 100644
--- a/erpnext/config/accounting.py
+++ b/erpnext/config/accounting.py
@@ -78,6 +78,11 @@
 					"name": "Payment Entry",
 					"description": _("Bank/Cash transactions against party or for internal transfer")
 				},
+				{
+					"type": "doctype",
+					"name": "Payment Term",
+					"description": _("Payment Terms based on conditions")
+				},
 
 				# Reports
 				{
@@ -133,6 +138,11 @@
 				},
 				{
 					"type": "doctype",
+					"name": "Exchange Rate Revaluation",
+					"description": _("Exchange Rate Revaluation master.")
+				},
+				{
+					"type": "doctype",
 					"name": "Payment Gateway Account",
 					"description": _("Setup Gateway accounts.")
 				},
diff --git a/erpnext/crm/doctype/lead/lead.py b/erpnext/crm/doctype/lead/lead.py
index 442b6c2..d42502d 100644
--- a/erpnext/crm/doctype/lead/lead.py
+++ b/erpnext/crm/doctype/lead/lead.py
@@ -10,6 +10,7 @@
 from erpnext.controllers.selling_controller import SellingController
 from frappe.contacts.address_and_contact import load_address_and_contact
 from erpnext.accounts.party import set_taxes
+from frappe.email.inbox import link_communication_to_document
 
 sender_field = "email_id"
 
@@ -199,3 +200,29 @@
 		out['taxes_and_charges'] = taxes_and_charges
 
 	return out
+
+@frappe.whitelist()
+def make_lead_from_communication(communication, ignore_communication_links=False):
+	""" raise a issue from email """
+
+	doc = frappe.get_doc("Communication", communication)
+	lead_name = None
+	if doc.sender:
+		lead_name = frappe.db.get_value("Lead", {"email_id": doc.sender})
+	if not lead_name and doc.phone_no:
+		lead_name = frappe.db.get_value("Lead", {"mobile_no": doc.phone_no})
+	if not lead_name:
+		lead = frappe.get_doc({
+			"doctype": "Lead",
+			"lead_name": doc.sender_full_name,
+			"email_id": doc.sender,
+			"mobile_no": doc.phone_no
+		})
+		lead.flags.ignore_mandatory = True
+		lead.flags.ignore_permissions = True
+		lead.insert()
+
+		lead_name = lead.name
+
+	link_communication_to_document(doc, "Lead", lead_name, ignore_communication_links)
+	return lead_name
\ No newline at end of file
diff --git a/erpnext/crm/doctype/opportunity/opportunity.py b/erpnext/crm/doctype/opportunity/opportunity.py
index 2e02e75..4d45936 100644
--- a/erpnext/crm/doctype/opportunity/opportunity.py
+++ b/erpnext/crm/doctype/opportunity/opportunity.py
@@ -10,6 +10,7 @@
 from erpnext.utilities.transaction_base import TransactionBase
 from erpnext.accounts.party import get_party_account_currency
 from frappe.desk.form import assign_to
+from frappe.email.inbox import link_communication_to_document
 
 subject_field = "title"
 sender_field = "contact_email"
@@ -349,3 +350,23 @@
 				"name": doc.name,
 				"description": doc.get(subject_field)
 			})
+@frappe.whitelist()
+def make_opportunity_from_communication(communication, ignore_communication_links=False):
+	from erpnext.crm.doctype.lead.lead import make_lead_from_communication
+	doc = frappe.get_doc("Communication", communication)
+
+	lead = doc.reference_name if doc.reference_doctype == "Lead" else None
+	if not lead:
+		lead = make_lead_from_communication(communication, ignore_communication_links=True)
+
+	enquiry_from = "Lead"
+
+	opportunity = frappe.get_doc({
+		"doctype": "Opportunity",
+		"enquiry_from": enquiry_from,
+		"lead": lead
+	}).insert(ignore_permissions=True)
+
+	link_communication_to_document(doc, "Opportunity", opportunity.name, ignore_communication_links)
+
+	return opportunity.name
diff --git a/erpnext/hooks.py b/erpnext/hooks.py
index d8532fa..608e8b2 100644
--- a/erpnext/hooks.py
+++ b/erpnext/hooks.py
@@ -74,7 +74,7 @@
 
 website_context = {
 	"favicon": 	"/assets/erpnext/images/favicon.png",
-	"splash_image": "/assets/erpnext/images/erpnext-12.svg"
+	"splash_image": "/assets/erpnext/images/erp-icon.svg"
 }
 
 website_route_rules = [
diff --git a/erpnext/hr/doctype/additional_salary/additional_salary.py b/erpnext/hr/doctype/additional_salary/additional_salary.py
index 968a1c4..9ca1260 100644
--- a/erpnext/hr/doctype/additional_salary/additional_salary.py
+++ b/erpnext/hr/doctype/additional_salary/additional_salary.py
@@ -51,7 +51,7 @@
 	for d in additional_components:
 		component = frappe.get_doc("Salary Component", d.salary_component)
 		struct_row = {'salary_component': d.salary_component}
-		for field in ["depends_on_lwp", "abbr", "is_tax_applicable", "variable_based_on_taxable_salary", "is_additional_component"]:
+		for field in ["depends_on_payment_days", "abbr", "is_tax_applicable", "variable_based_on_taxable_salary", "is_additional_component"]:
 			struct_row[field] = component.get(field)
 
 		additional_components_list.append({
diff --git a/erpnext/hr/doctype/employee_benefit_application/employee_benefit_application.py b/erpnext/hr/doctype/employee_benefit_application/employee_benefit_application.py
index 9b6dba5..c613a13 100644
--- a/erpnext/hr/doctype/employee_benefit_application/employee_benefit_application.py
+++ b/erpnext/hr/doctype/employee_benefit_application/employee_benefit_application.py
@@ -113,7 +113,7 @@
 def get_max_benefits_remaining(employee, on_date, payroll_period):
 	max_benefits = get_max_benefits(employee, on_date)
 	if max_benefits and max_benefits > 0:
-		have_depends_on_lwp = False
+		have_depends_on_payment_days = False
 		per_day_amount_total = 0
 		payroll_period_days = get_payroll_period_days(on_date, on_date, employee)[0]
 		payroll_period_obj = frappe.get_doc("Payroll Period", payroll_period)
@@ -122,22 +122,22 @@
 		prev_sal_slip_flexi_total = get_sal_slip_total_benefit_given(employee, payroll_period_obj)
 
 		if prev_sal_slip_flexi_total > 0:
-			# Check salary structure hold depends_on_lwp component
+			# Check salary structure hold depends_on_payment_days component
 			# If yes then find the amount per day of each component and find the sum
 			sal_struct_name = get_assigned_salary_structure(employee, on_date)
 			if sal_struct_name:
 				sal_struct = frappe.get_doc("Salary Structure", sal_struct_name)
 				for sal_struct_row in sal_struct.get("earnings"):
 					salary_component = frappe.get_doc("Salary Component", sal_struct_row.salary_component)
-					if salary_component.depends_on_lwp == 1 and salary_component.pay_against_benefit_claim != 1:
-						have_depends_on_lwp = True
+					if salary_component.depends_on_payment_days == 1 and salary_component.pay_against_benefit_claim != 1:
+						have_depends_on_payment_days = True
 						benefit_amount = get_benefit_pro_rata_ratio_amount(sal_struct, salary_component.max_benefit_amount)
 						amount_per_day = benefit_amount / payroll_period_days
 						per_day_amount_total += amount_per_day
 
 			# Then the sum multiply with the no of lwp in that period
 			# Include that amount to the prev_sal_slip_flexi_total to get the actual
-			if have_depends_on_lwp and per_day_amount_total > 0:
+			if have_depends_on_payment_days and per_day_amount_total > 0:
 				holidays = get_holidays_for_employee(employee, payroll_period_obj.start_date, on_date)
 				working_days = date_diff(on_date, payroll_period_obj.start_date) + 1
 				leave_days = calculate_lwp(employee, payroll_period_obj.start_date, holidays, working_days)
@@ -185,7 +185,7 @@
 		'payroll_period': payroll_period
 	})
 
-	if frappe.db.get_value("Salary Component", struct_row.salary_component, "depends_on_lwp") != 1:
+	if frappe.db.get_value("Salary Component", struct_row.salary_component, "depends_on_payment_days") != 1:
 		if frequency == "Monthly" and actual_payroll_days in range(360, 370):
 			period_length = 1
 			period_factor = 12
diff --git a/erpnext/hr/doctype/employee_benefit_claim/employee_benefit_claim.py b/erpnext/hr/doctype/employee_benefit_claim/employee_benefit_claim.py
index bf150b1..8be67a8 100644
--- a/erpnext/hr/doctype/employee_benefit_claim/employee_benefit_claim.py
+++ b/erpnext/hr/doctype/employee_benefit_claim/employee_benefit_claim.py
@@ -170,7 +170,7 @@
 						amount += current_claimed_amount
 						struct_row = {}
 						salary_components_dict = {}
-						struct_row['depends_on_lwp'] = salary_component.depends_on_lwp
+						struct_row['depends_on_payment_days'] = salary_component.depends_on_payment_days
 						struct_row['salary_component'] = salary_component.name
 						struct_row['abbr'] = salary_component.salary_component_abbr
 						struct_row['do_not_include_in_total'] = salary_component.do_not_include_in_total
diff --git a/erpnext/hr/doctype/salary_component/salary_component.js b/erpnext/hr/doctype/salary_component/salary_component.js
index b33451b..1d398cc 100644
--- a/erpnext/hr/doctype/salary_component/salary_component.js
+++ b/erpnext/hr/doctype/salary_component/salary_component.js
@@ -75,5 +75,5 @@
 	frm.set_value("amount_based_on_formula", 0);
 	frm.set_value("statistical_component", 0);
 	frm.set_value("do_not_include_in_total", 0);
-	frm.set_value("depends_on_lwp", 0);
+	frm.set_value("depends_on_payment_days", 0);
 };
diff --git a/erpnext/hr/doctype/salary_component/salary_component.json b/erpnext/hr/doctype/salary_component/salary_component.json
index f7ce08c..697d224 100644
--- a/erpnext/hr/doctype/salary_component/salary_component.json
+++ b/erpnext/hr/doctype/salary_component/salary_component.json
@@ -1,5 +1,6 @@
 {
  "allow_copy": 0, 
+ "allow_events_in_timeline": 0, 
  "allow_guest_to_view": 0, 
  "allow_import": 1, 
  "allow_rename": 1, 
@@ -19,6 +20,7 @@
    "bold": 0, 
    "collapsible": 0, 
    "columns": 0, 
+   "fetch_if_empty": 0, 
    "fieldname": "salary_component", 
    "fieldtype": "Data", 
    "hidden": 0, 
@@ -51,6 +53,7 @@
    "bold": 0, 
    "collapsible": 0, 
    "columns": 0, 
+   "fetch_if_empty": 0, 
    "fieldname": "salary_component_abbr", 
    "fieldtype": "Data", 
    "hidden": 0, 
@@ -85,6 +88,7 @@
    "bold": 0, 
    "collapsible": 0, 
    "columns": 0, 
+   "fetch_if_empty": 0, 
    "fieldname": "type", 
    "fieldtype": "Select", 
    "hidden": 0, 
@@ -119,6 +123,7 @@
    "collapsible": 0, 
    "columns": 0, 
    "depends_on": "eval:doc.is_flexible_benefit != 1", 
+   "fetch_if_empty": 0, 
    "fieldname": "is_additional_component", 
    "fieldtype": "Check", 
    "hidden": 0, 
@@ -153,6 +158,7 @@
    "columns": 0, 
    "default": "1", 
    "depends_on": "eval:doc.type == \"Earning\"", 
+   "fetch_if_empty": 0, 
    "fieldname": "is_tax_applicable", 
    "fieldtype": "Check", 
    "hidden": 0, 
@@ -186,6 +192,7 @@
    "collapsible": 0, 
    "columns": 0, 
    "default": "1", 
+   "fetch_if_empty": 0, 
    "fieldname": "is_payable", 
    "fieldtype": "Check", 
    "hidden": 0, 
@@ -218,7 +225,9 @@
    "bold": 0, 
    "collapsible": 0, 
    "columns": 0, 
-   "fieldname": "depends_on_lwp", 
+   "default": "1", 
+   "fetch_if_empty": 0, 
+   "fieldname": "depends_on_payment_days", 
    "fieldtype": "Check", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
@@ -227,7 +236,7 @@
    "in_global_search": 0, 
    "in_list_view": 0, 
    "in_standard_filter": 0, 
-   "label": "Depends on Leave Without Pay", 
+   "label": "Depends on Payment Days", 
    "length": 0, 
    "no_copy": 0, 
    "permlevel": 0, 
@@ -250,6 +259,7 @@
    "bold": 0, 
    "collapsible": 0, 
    "columns": 0, 
+   "fetch_if_empty": 0, 
    "fieldname": "do_not_include_in_total", 
    "fieldtype": "Check", 
    "hidden": 0, 
@@ -282,6 +292,7 @@
    "bold": 0, 
    "collapsible": 0, 
    "columns": 0, 
+   "fetch_if_empty": 0, 
    "fieldname": "column_break_4", 
    "fieldtype": "Column Break", 
    "hidden": 0, 
@@ -313,6 +324,7 @@
    "bold": 0, 
    "collapsible": 0, 
    "columns": 0, 
+   "fetch_if_empty": 0, 
    "fieldname": "disabled", 
    "fieldtype": "Check", 
    "hidden": 0, 
@@ -345,6 +357,7 @@
    "bold": 0, 
    "collapsible": 0, 
    "columns": 0, 
+   "fetch_if_empty": 0, 
    "fieldname": "description", 
    "fieldtype": "Small Text", 
    "hidden": 0, 
@@ -378,6 +391,7 @@
    "collapsible": 0, 
    "columns": 0, 
    "description": "If selected, the value specified or calculated in this component will not contribute to the earnings or deductions. However, it's value can be referenced by other components that can be added or deducted. ", 
+   "fetch_if_empty": 0, 
    "fieldname": "statistical_component", 
    "fieldtype": "Check", 
    "hidden": 0, 
@@ -411,6 +425,7 @@
    "collapsible": 0, 
    "columns": 0, 
    "depends_on": "eval:doc.type==\"Earning\" && doc.is_additional_component != 1 && doc.statistical_component!=1", 
+   "fetch_if_empty": 0, 
    "fieldname": "flexible_benefits", 
    "fieldtype": "Section Break", 
    "hidden": 0, 
@@ -444,6 +459,7 @@
    "collapsible": 0, 
    "columns": 0, 
    "depends_on": "eval:doc.is_additional_component != 1", 
+   "fetch_if_empty": 0, 
    "fieldname": "is_flexible_benefit", 
    "fieldtype": "Check", 
    "hidden": 0, 
@@ -477,6 +493,7 @@
    "collapsible": 0, 
    "columns": 0, 
    "depends_on": "is_flexible_benefit", 
+   "fetch_if_empty": 0, 
    "fieldname": "max_benefit_amount", 
    "fieldtype": "Currency", 
    "hidden": 0, 
@@ -509,6 +526,7 @@
    "bold": 0, 
    "collapsible": 0, 
    "columns": 0, 
+   "fetch_if_empty": 0, 
    "fieldname": "column_break_9", 
    "fieldtype": "Column Break", 
    "hidden": 0, 
@@ -541,6 +559,7 @@
    "collapsible": 0, 
    "columns": 0, 
    "depends_on": "is_flexible_benefit", 
+   "fetch_if_empty": 0, 
    "fieldname": "pay_against_benefit_claim", 
    "fieldtype": "Check", 
    "hidden": 0, 
@@ -574,6 +593,7 @@
    "collapsible": 0, 
    "columns": 0, 
    "depends_on": "eval:doc.is_flexible_benefit == 1 & doc.create_separate_payment_entry_against_benefit_claim !=1", 
+   "fetch_if_empty": 0, 
    "fieldname": "only_tax_impact", 
    "fieldtype": "Check", 
    "hidden": 0, 
@@ -607,6 +627,7 @@
    "collapsible": 0, 
    "columns": 0, 
    "depends_on": "eval:doc.is_flexible_benefit == 1 & doc.only_tax_impact !=1", 
+   "fetch_if_empty": 0, 
    "fieldname": "create_separate_payment_entry_against_benefit_claim", 
    "fieldtype": "Check", 
    "hidden": 0, 
@@ -640,6 +661,7 @@
    "collapsible": 0, 
    "columns": 0, 
    "depends_on": "eval:doc.type=='Deduction'", 
+   "fetch_if_empty": 0, 
    "fieldname": "section_break_11", 
    "fieldtype": "Section Break", 
    "hidden": 0, 
@@ -671,6 +693,7 @@
    "bold": 0, 
    "collapsible": 0, 
    "columns": 0, 
+   "fetch_if_empty": 0, 
    "fieldname": "variable_based_on_taxable_salary", 
    "fieldtype": "Check", 
    "hidden": 0, 
@@ -704,6 +727,7 @@
    "collapsible": 0, 
    "columns": 0, 
    "depends_on": "eval:doc.statistical_component != 1", 
+   "fetch_if_empty": 0, 
    "fieldname": "section_break_5", 
    "fieldtype": "Section Break", 
    "hidden": 0, 
@@ -736,6 +760,7 @@
    "bold": 0, 
    "collapsible": 0, 
    "columns": 0, 
+   "fetch_if_empty": 0, 
    "fieldname": "accounts", 
    "fieldtype": "Table", 
    "hidden": 0, 
@@ -771,6 +796,7 @@
    "collapsible_depends_on": "", 
    "columns": 0, 
    "depends_on": "eval:doc.is_flexible_benefit != 1 && doc.variable_based_on_taxable_salary != 1", 
+   "fetch_if_empty": 0, 
    "fieldname": "condition_and_formula", 
    "fieldtype": "Section Break", 
    "hidden": 0, 
@@ -803,6 +829,7 @@
    "bold": 0, 
    "collapsible": 0, 
    "columns": 0, 
+   "fetch_if_empty": 0, 
    "fieldname": "condition", 
    "fieldtype": "Code", 
    "hidden": 0, 
@@ -836,6 +863,7 @@
    "collapsible": 0, 
    "columns": 0, 
    "default": "", 
+   "fetch_if_empty": 0, 
    "fieldname": "amount_based_on_formula", 
    "fieldtype": "Check", 
    "hidden": 0, 
@@ -869,6 +897,7 @@
    "collapsible": 0, 
    "columns": 0, 
    "depends_on": "eval:doc.amount_based_on_formula!==0", 
+   "fetch_if_empty": 0, 
    "fieldname": "formula", 
    "fieldtype": "Code", 
    "hidden": 0, 
@@ -902,6 +931,7 @@
    "collapsible": 0, 
    "columns": 0, 
    "depends_on": "eval:doc.amount_based_on_formula!==1", 
+   "fetch_if_empty": 0, 
    "fieldname": "amount", 
    "fieldtype": "Currency", 
    "hidden": 0, 
@@ -934,6 +964,7 @@
    "bold": 0, 
    "collapsible": 0, 
    "columns": 0, 
+   "fetch_if_empty": 0, 
    "fieldname": "column_break_28", 
    "fieldtype": "Column Break", 
    "hidden": 0, 
@@ -965,6 +996,7 @@
    "bold": 0, 
    "collapsible": 0, 
    "columns": 0, 
+   "fetch_if_empty": 0, 
    "fieldname": "help", 
    "fieldtype": "HTML", 
    "hidden": 0, 
@@ -1003,7 +1035,7 @@
  "issingle": 0, 
  "istable": 0, 
  "max_attachments": 0, 
- "modified": "2018-09-20 16:44:58.876044", 
+ "modified": "2019-04-16 19:08:55.323567", 
  "modified_by": "Administrator", 
  "module": "HR", 
  "name": "Salary Component", 
diff --git a/erpnext/hr/doctype/salary_detail/salary_detail.json b/erpnext/hr/doctype/salary_detail/salary_detail.json
index 0ec3cd6..8f2649a 100644
--- a/erpnext/hr/doctype/salary_detail/salary_detail.json
+++ b/erpnext/hr/doctype/salary_detail/salary_detail.json
@@ -19,6 +19,7 @@
    "bold": 0, 
    "collapsible": 0, 
    "columns": 0, 
+   "fetch_if_empty": 0, 
    "fieldname": "salary_component", 
    "fieldtype": "Link", 
    "hidden": 0, 
@@ -55,6 +56,7 @@
    "default": "", 
    "depends_on": "eval:doc.parenttype=='Salary Structure'", 
    "fetch_from": "salary_component.salary_component_abbr", 
+   "fetch_if_empty": 0, 
    "fieldname": "abbr", 
    "fieldtype": "Data", 
    "hidden": 0, 
@@ -88,6 +90,7 @@
    "bold": 0, 
    "collapsible": 0, 
    "columns": 0, 
+   "fetch_if_empty": 0, 
    "fieldname": "column_break_3", 
    "fieldtype": "Column Break", 
    "hidden": 0, 
@@ -121,6 +124,7 @@
    "columns": 0, 
    "description": "If selected, the value specified or calculated in this component will not contribute to the earnings or deductions. However, it's value can be referenced by other components that can be added or deducted. ", 
    "fetch_from": "salary_component.statistical_component", 
+   "fetch_if_empty": 0, 
    "fieldname": "statistical_component", 
    "fieldtype": "Check", 
    "hidden": 0, 
@@ -154,6 +158,7 @@
    "collapsible": 0, 
    "columns": 0, 
    "fetch_from": "salary_component.is_tax_applicable", 
+   "fetch_if_empty": 0, 
    "fieldname": "is_tax_applicable", 
    "fieldtype": "Check", 
    "hidden": 0, 
@@ -187,6 +192,7 @@
    "collapsible": 0, 
    "columns": 0, 
    "fetch_from": "salary_component.is_flexible_benefit", 
+   "fetch_if_empty": 0, 
    "fieldname": "is_flexible_benefit", 
    "fieldtype": "Check", 
    "hidden": 0, 
@@ -221,6 +227,7 @@
    "columns": 0, 
    "default": "", 
    "fetch_from": "salary_component.is_additional_component", 
+   "fetch_if_empty": 0, 
    "fieldname": "is_additional_component", 
    "fieldtype": "Check", 
    "hidden": 1, 
@@ -255,6 +262,7 @@
    "columns": 0, 
    "default": "", 
    "fetch_from": "salary_component.variable_based_on_taxable_salary", 
+   "fetch_if_empty": 0, 
    "fieldname": "variable_based_on_taxable_salary", 
    "fieldtype": "Check", 
    "hidden": 0, 
@@ -288,8 +296,9 @@
    "collapsible": 0, 
    "columns": 0, 
    "depends_on": "", 
-   "fetch_from": "salary_component.depends_on_lwp", 
-   "fieldname": "depends_on_lwp", 
+   "fetch_from": "salary_component.depends_on_payment_days", 
+   "fetch_if_empty": 0, 
+   "fieldname": "depends_on_payment_days", 
    "fieldtype": "Check", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
@@ -298,7 +307,7 @@
    "in_global_search": 0, 
    "in_list_view": 0, 
    "in_standard_filter": 0, 
-   "label": "Depends on Leave Without Pay", 
+   "label": "Depends on Payment Days", 
    "length": 0, 
    "no_copy": 0, 
    "permlevel": 0, 
@@ -322,6 +331,7 @@
    "collapsible": 0, 
    "columns": 0, 
    "depends_on": "eval:doc.is_flexible_benefit != 1", 
+   "fetch_if_empty": 0, 
    "fieldname": "section_break_2", 
    "fieldtype": "Section Break", 
    "hidden": 0, 
@@ -354,6 +364,7 @@
    "collapsible": 0, 
    "columns": 0, 
    "depends_on": "eval:doc.parenttype=='Salary Structure'", 
+   "fetch_if_empty": 0, 
    "fieldname": "condition", 
    "fieldtype": "Code", 
    "hidden": 0, 
@@ -389,6 +400,7 @@
    "default": "0", 
    "depends_on": "eval:doc.parenttype=='Salary Structure'", 
    "fetch_from": "", 
+   "fetch_if_empty": 0, 
    "fieldname": "amount_based_on_formula", 
    "fieldtype": "Check", 
    "hidden": 0, 
@@ -425,6 +437,7 @@
    "default": "", 
    "depends_on": "eval:doc.amount_based_on_formula!==0 && doc.parenttype==='Salary Structure'", 
    "description": "", 
+   "fetch_if_empty": 0, 
    "fieldname": "formula", 
    "fieldtype": "Code", 
    "hidden": 0, 
@@ -458,6 +471,7 @@
    "collapsible": 0, 
    "columns": 0, 
    "depends_on": "eval:doc.amount_based_on_formula!==1 || doc.parenttype==='Salary Slip'", 
+   "fetch_if_empty": 0, 
    "fieldname": "amount", 
    "fieldtype": "Currency", 
    "hidden": 0, 
@@ -491,6 +505,7 @@
    "bold": 0, 
    "collapsible": 0, 
    "columns": 0, 
+   "fetch_if_empty": 0, 
    "fieldname": "do_not_include_in_total", 
    "fieldtype": "Check", 
    "hidden": 0, 
@@ -524,6 +539,7 @@
    "collapsible": 0, 
    "columns": 0, 
    "depends_on": "eval:doc.parenttype=='Salary Structure'", 
+   "fetch_if_empty": 0, 
    "fieldname": "default_amount", 
    "fieldtype": "Currency", 
    "hidden": 0, 
@@ -558,6 +574,7 @@
    "collapsible": 0, 
    "columns": 0, 
    "depends_on": "eval:doc.parenttype=='Salary Slip' && doc.parentfield=='deductions' && doc.variable_based_on_taxable_salary == 1", 
+   "fetch_if_empty": 0, 
    "fieldname": "tax_on_flexible_benefit", 
    "fieldtype": "Currency", 
    "hidden": 0, 
@@ -591,6 +608,7 @@
    "collapsible": 0, 
    "columns": 0, 
    "depends_on": "eval:doc.parenttype=='Salary Slip' && doc.parentfield=='deductions' && doc.variable_based_on_taxable_salary == 1", 
+   "fetch_if_empty": 0, 
    "fieldname": "tax_on_additional_salary", 
    "fieldtype": "Currency", 
    "hidden": 0, 
@@ -624,6 +642,7 @@
    "collapsible": 0, 
    "columns": 0, 
    "depends_on": "eval:doc.parenttype=='Salary Structure'", 
+   "fetch_if_empty": 0, 
    "fieldname": "section_break_11", 
    "fieldtype": "Column Break", 
    "hidden": 0, 
@@ -656,6 +675,7 @@
    "collapsible": 0, 
    "columns": 0, 
    "depends_on": "eval:doc.parenttype=='Salary Structure'", 
+   "fetch_if_empty": 0, 
    "fieldname": "condition_and_formula_help", 
    "fieldtype": "HTML", 
    "hidden": 0, 
@@ -693,7 +713,7 @@
  "issingle": 0, 
  "istable": 1, 
  "max_attachments": 0, 
- "modified": "2019-02-04 14:41:56.030991", 
+ "modified": "2019-04-16 19:09:31.726597", 
  "modified_by": "Administrator", 
  "module": "HR", 
  "name": "Salary Detail", 
diff --git a/erpnext/hr/doctype/salary_slip/salary_slip.js b/erpnext/hr/doctype/salary_slip/salary_slip.js
index 86c50d0..4e9fcce 100644
--- a/erpnext/hr/doctype/salary_slip/salary_slip.js
+++ b/erpnext/hr/doctype/salary_slip/salary_slip.js
@@ -132,9 +132,6 @@
 	});
 }
 
-cur_frm.cscript.employee = function(doc,dt,dn){
-	get_emp_and_leave_details(doc, dt, dn);
-}
 
 cur_frm.cscript.leave_without_pay = function(doc,dt,dn){
 	if (doc.employee && doc.start_date && doc.end_date) {
@@ -160,7 +157,7 @@
 	calculate_all(doc, dt, dn);
 }
 
-cur_frm.cscript.depends_on_lwp = function(doc,dt,dn){
+cur_frm.cscript.depends_on_payment_days = function(doc,dt,dn){
 	calculate_earning_total(doc, dt, dn, true);
 	calculate_ded_total(doc, dt, dn, true);
 	calculate_net_pay(doc, dt, dn);
@@ -174,7 +171,7 @@
 	var tbl = doc.earnings || [];
 	var total_earn = 0;
 	for(var i = 0; i < tbl.length; i++){
-		if(cint(tbl[i].depends_on_lwp) == 1) {
+		if(cint(tbl[i].depends_on_payment_days) == 1) {
 			tbl[i].amount =  Math.round(tbl[i].default_amount)*(flt(doc.payment_days) /
 				cint(doc.total_working_days)*100)/100;
 		} else if(reset_amount && tbl[i].default_amount) {
@@ -196,7 +193,7 @@
 	var tbl = doc.deductions || [];
 	var total_ded = 0;
 	for(var i = 0; i < tbl.length; i++){
-		if(cint(tbl[i].depends_on_lwp) == 1) {
+		if(cint(tbl[i].depends_on_payment_days) == 1) {
 			tbl[i].amount = Math.round(tbl[i].default_amount)*(flt(doc.payment_days)/cint(doc.total_working_days)*100)/100;
 		} else if(reset_amount && tbl[i].default_amount) {
 			tbl[i].amount = tbl[i].default_amount;
@@ -209,16 +206,12 @@
 	refresh_many(['deductions', 'total_deduction']);
 }
 
-// Calculate net payable amount
-// ------------------------------------------------------------------------
 var calculate_net_pay = function(doc, dt, dn) {
 	doc.net_pay = flt(doc.gross_pay) - flt(doc.total_deduction);
 	doc.rounded_total = Math.round(doc.net_pay);
 	refresh_many(['net_pay', 'rounded_total']);
 }
 
-// validate
-// ------------------------------------------------------------------------
 cur_frm.cscript.validate = function(doc, dt, dn) {
 	calculate_all(doc, dt, dn);
 }
diff --git a/erpnext/hr/doctype/salary_slip/salary_slip.py b/erpnext/hr/doctype/salary_slip/salary_slip.py
index 6ddcd1b..f2d7722 100644
--- a/erpnext/hr/doctype/salary_slip/salary_slip.py
+++ b/erpnext/hr/doctype/salary_slip/salary_slip.py
@@ -131,11 +131,12 @@
 		for d in self.get(key):
 			if d.salary_component == struct_row.salary_component:
 				component_row = d
+
 		if not component_row:
 			self.append(key, {
 				'amount': amount,
 				'default_amount': amount,
-				'depends_on_lwp' : struct_row.depends_on_lwp,
+				'depends_on_payment_days' : struct_row.depends_on_payment_days,
 				'salary_component' : struct_row.salary_component,
 				'abbr' : struct_row.abbr,
 				'do_not_include_in_total' : struct_row.do_not_include_in_total,
@@ -147,12 +148,11 @@
 				'tax_on_additional_salary': additional_tax
 			})
 		else:
-			if overwrite:
-				component_row.default_amount = amount
-				component_row.amount = amount
-			else:
-				component_row.default_amount += amount
-				component_row.amount = component_row.default_amount
+			if not overwrite:
+				amount += struct_row.get("default_amount", 0)
+
+			component_row.default_amount = amount
+			component_row.amount = amount
 
 			component_row.tax_on_flexible_benefit = benefit_tax
 			component_row.tax_on_additional_salary = additional_tax
@@ -418,7 +418,7 @@
 
 		for d in self.get(component_type):
 			if (self.salary_structure and
-				cint(d.depends_on_lwp) and
+				cint(d.depends_on_payment_days) and
 				(not
 				    self.salary_slip_based_on_timesheet or
 					getdate(self.start_date) < joining_date or
@@ -431,7 +431,7 @@
 				)
 
 			elif not self.payment_days and not self.salary_slip_based_on_timesheet and \
-				cint(d.depends_on_lwp):
+				cint(d.depends_on_payment_days):
 				d.amount = 0
 			elif not d.amount:
 				d.amount = d.default_amount
@@ -794,7 +794,7 @@
 		component = frappe.get_doc("Salary Component", salary_component)
 		# Data for update_component_row
 		struct_row = {}
-		struct_row['depends_on_lwp'] = component.depends_on_lwp
+		struct_row['depends_on_payment_days'] = component.depends_on_payment_days
 		struct_row['salary_component'] = component.name
 		struct_row['abbr'] = component.salary_component_abbr
 		struct_row['do_not_include_in_total'] = component.do_not_include_in_total
diff --git a/erpnext/hr/doctype/salary_structure/salary_structure.js b/erpnext/hr/doctype/salary_structure/salary_structure.js
index 79d75bf..e3f37e7 100755
--- a/erpnext/hr/doctype/salary_structure/salary_structure.js
+++ b/erpnext/hr/doctype/salary_structure/salary_structure.js
@@ -246,7 +246,7 @@
 							frappe.model.set_value(cdt, cdn, 'amount', result.amount);
 						}
 						frappe.model.set_value(cdt, cdn, 'statistical_component', result.statistical_component);
-						frappe.model.set_value(cdt, cdn, 'depends_on_lwp', result.depends_on_lwp);
+						frappe.model.set_value(cdt, cdn, 'depends_on_payment_days', result.depends_on_payment_days);
 						frappe.model.set_value(cdt, cdn, 'do_not_include_in_total', result.do_not_include_in_total);
 						frappe.model.set_value(cdt, cdn, 'variable_based_on_taxable_salary', result.variable_based_on_taxable_salary);
 						frappe.model.set_value(cdt, cdn, 'is_tax_applicable', result.is_tax_applicable);
diff --git a/erpnext/hr/doctype/salary_structure/salary_structure.py b/erpnext/hr/doctype/salary_structure/salary_structure.py
index 202ae9b..26efd00 100644
--- a/erpnext/hr/doctype/salary_structure/salary_structure.py
+++ b/erpnext/hr/doctype/salary_structure/salary_structure.py
@@ -18,7 +18,7 @@
 		self.validate_max_benefits_with_flexi()
 
 	def set_missing_values(self):
-		overwritten_fields = ["depends_on_lwp", "variable_based_on_taxable_salary", "is_tax_applicable", "is_flexible_benefit"]
+		overwritten_fields = ["depends_on_payment_days", "variable_based_on_taxable_salary", "is_tax_applicable", "is_flexible_benefit"]
 		overwritten_fields_if_missing = ["amount_based_on_formula", "formula", "amount"]
 		for table in ["earnings", "deductions"]:
 			for d in self.get(table):
@@ -126,7 +126,7 @@
 
 def get_existing_assignments(employees, salary_structure,from_date):
 	salary_structures_assignments = frappe.db.sql_list("""
-		select distinct employee from `tabSalary Structure Assignment` 
+		select distinct employee from `tabSalary Structure Assignment`
 		where salary_structure=%s and employee in (%s)
 		and from_date=%s and docstatus=1
 	""" % ('%s', ', '.join(['%s']*len(employees)),'%s'), [salary_structure] + employees+[from_date])
diff --git a/erpnext/hr/print_format/salary_slip_based_on_timesheet/salary_slip_based_on_timesheet.json b/erpnext/hr/print_format/salary_slip_based_on_timesheet/salary_slip_based_on_timesheet.json
index 20c7d23..ceaf4a6 100644
--- a/erpnext/hr/print_format/salary_slip_based_on_timesheet/salary_slip_based_on_timesheet.json
+++ b/erpnext/hr/print_format/salary_slip_based_on_timesheet/salary_slip_based_on_timesheet.json
@@ -1,18 +1,18 @@
 {
- "creation": "2016-07-07 12:38:32.447281", 
- "custom_format": 0, 
- "disabled": 0, 
- "doc_type": "Salary Slip", 
- "docstatus": 0, 
- "doctype": "Print Format", 
- "font": "Default", 
- "format_data": "[{\"fieldname\": \"print_heading_template\", \"fieldtype\": \"HTML\", \"options\": \"  <h3 style=\\\"text-align: right;\\\">{{doc.name}}</h3><div><hr></div>  \"}, {\"fieldtype\": \"Section Break\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"employee\"}, {\"print_hide\": 0, \"fieldname\": \"employee_name\"}, {\"print_hide\": 0, \"fieldname\": \"department\"}, {\"print_hide\": 0, \"fieldname\": \"designation\"}, {\"print_hide\": 0, \"fieldname\": \"branch\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"start_date\"}, {\"print_hide\": 0, \"fieldname\": \"end_date\"}, {\"print_hide\": 0, \"fieldname\": \"total_working_hours\"}, {\"print_hide\": 0, \"fieldname\": \"hour_rate\"}, {\"fieldtype\": \"Section Break\"}, {\"fieldtype\": \"Column Break\"}, {\"visible_columns\": [{\"print_hide\": 0, \"fieldname\": \"time_sheet\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"working_hours\", \"print_width\": \"\"}], \"print_hide\": 0, \"fieldname\": \"timesheets\"}, {\"fieldtype\": \"Column Break\"}, {\"fieldtype\": \"Section Break\"}, {\"fieldtype\": \"Column Break\"}, {\"visible_columns\": [{\"print_hide\": 0, \"fieldname\": \"salary_component\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"amount\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"depends_on_lwp\", \"print_width\": \"\"}], \"print_hide\": 0, \"fieldname\": \"earnings\"}, {\"fieldtype\": \"Column Break\"}, {\"visible_columns\": [{\"print_hide\": 0, \"fieldname\": \"salary_component\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"amount\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"depends_on_lwp\", \"print_width\": \"\"}], \"print_hide\": 0, \"fieldname\": \"deductions\"}, {\"fieldtype\": \"Section Break\"}, {\"fieldtype\": \"Column Break\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"gross_pay\"}, {\"print_hide\": 0, \"fieldname\": \"total_deduction\"}, {\"print_hide\": 0, \"fieldname\": \"net_pay\"}, {\"print_hide\": 0, \"fieldname\": \"rounded_total\"}, {\"print_hide\": 0, \"fieldname\": \"total_in_words\"}]", 
- "idx": 0, 
- "modified": "2016-08-21 21:02:59.896033", 
- "modified_by": "Administrator", 
- "name": "Salary Slip based on Timesheet", 
- "owner": "Administrator", 
- "print_format_builder": 1, 
- "print_format_type": "Server", 
+ "creation": "2016-07-07 12:38:32.447281",
+ "custom_format": 0,
+ "disabled": 0,
+ "doc_type": "Salary Slip",
+ "docstatus": 0,
+ "doctype": "Print Format",
+ "font": "Default",
+ "format_data": "[{\"fieldname\": \"print_heading_template\", \"fieldtype\": \"HTML\", \"options\": \"  <h3 style=\\\"text-align: right;\\\">{{doc.name}}</h3><div><hr></div>  \"}, {\"fieldtype\": \"Section Break\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"employee\"}, {\"print_hide\": 0, \"fieldname\": \"employee_name\"}, {\"print_hide\": 0, \"fieldname\": \"department\"}, {\"print_hide\": 0, \"fieldname\": \"designation\"}, {\"print_hide\": 0, \"fieldname\": \"branch\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"start_date\"}, {\"print_hide\": 0, \"fieldname\": \"end_date\"}, {\"print_hide\": 0, \"fieldname\": \"total_working_hours\"}, {\"print_hide\": 0, \"fieldname\": \"hour_rate\"}, {\"fieldtype\": \"Section Break\"}, {\"fieldtype\": \"Column Break\"}, {\"visible_columns\": [{\"print_hide\": 0, \"fieldname\": \"time_sheet\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"working_hours\", \"print_width\": \"\"}], \"print_hide\": 0, \"fieldname\": \"timesheets\"}, {\"fieldtype\": \"Column Break\"}, {\"fieldtype\": \"Section Break\"}, {\"fieldtype\": \"Column Break\"}, {\"visible_columns\": [{\"print_hide\": 0, \"fieldname\": \"salary_component\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"amount\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"depends_on_payment_days\", \"print_width\": \"\"}], \"print_hide\": 0, \"fieldname\": \"earnings\"}, {\"fieldtype\": \"Column Break\"}, {\"visible_columns\": [{\"print_hide\": 0, \"fieldname\": \"salary_component\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"amount\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"depends_on_payment_days\", \"print_width\": \"\"}], \"print_hide\": 0, \"fieldname\": \"deductions\"}, {\"fieldtype\": \"Section Break\"}, {\"fieldtype\": \"Column Break\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"gross_pay\"}, {\"print_hide\": 0, \"fieldname\": \"total_deduction\"}, {\"print_hide\": 0, \"fieldname\": \"net_pay\"}, {\"print_hide\": 0, \"fieldname\": \"rounded_total\"}, {\"print_hide\": 0, \"fieldname\": \"total_in_words\"}]",
+ "idx": 0,
+ "modified": "2016-08-21 21:02:59.896033",
+ "modified_by": "Administrator",
+ "name": "Salary Slip based on Timesheet",
+ "owner": "Administrator",
+ "print_format_builder": 1,
+ "print_format_type": "Server",
  "standard": "Yes"
 }
\ No newline at end of file
diff --git a/erpnext/hr/print_format/salary_slip_standard/salary_slip_standard.json b/erpnext/hr/print_format/salary_slip_standard/salary_slip_standard.json
index 9f299df..b01239f 100644
--- a/erpnext/hr/print_format/salary_slip_standard/salary_slip_standard.json
+++ b/erpnext/hr/print_format/salary_slip_standard/salary_slip_standard.json
@@ -1,22 +1,22 @@
 {
- "align_labels_right": 0, 
- "creation": "2016-07-07 11:45:14.872204", 
- "custom_format": 0, 
- "disabled": 0, 
- "doc_type": "Salary Slip", 
- "docstatus": 0, 
- "doctype": "Print Format", 
- "font": "Default", 
- "format_data": "[{\"fieldname\": \"print_heading_template\", \"fieldtype\": \"Custom HTML\", \"options\": \"   <h3 style=\\\"text-align: right;\\\"><span style=\\\"line-height: 1.42857;\\\">{{doc.name}}</span></h3>\\n<div>\\n    <hr style=\\\"text-align: center;\\\">\\n</div>   \"}, {\"fieldtype\": \"Section Break\", \"label\": \"\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"employee\", \"label\": \"Employee\"}, {\"print_hide\": 0, \"fieldname\": \"company\", \"label\": \"Company\"}, {\"print_hide\": 0, \"fieldname\": \"employee_name\", \"label\": \"Employee Name\"}, {\"print_hide\": 0, \"fieldname\": \"department\", \"label\": \"Department\"}, {\"print_hide\": 0, \"fieldname\": \"designation\", \"label\": \"Designation\"}, {\"print_hide\": 0, \"fieldname\": \"branch\", \"label\": \"Branch\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"start_date\", \"label\": \"Start Date\"}, {\"print_hide\": 0, \"fieldname\": \"end_date\", \"label\": \"End Date\"}, {\"print_hide\": 0, \"fieldname\": \"total_working_days\", \"label\": \"Working Days\"}, {\"print_hide\": 0, \"fieldname\": \"leave_without_pay\", \"label\": \"Leave Without Pay\"}, {\"print_hide\": 0, \"fieldname\": \"payment_days\", \"label\": \"Payment Days\"}, {\"fieldtype\": \"Section Break\", \"label\": \"\"}, {\"fieldtype\": \"Column Break\"}, {\"visible_columns\": [{\"print_hide\": 0, \"fieldname\": \"salary_component\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"amount\", \"print_width\": \"\"}], \"print_hide\": 0, \"fieldname\": \"earnings\", \"label\": \"Earnings\"}, {\"fieldtype\": \"Column Break\"}, {\"visible_columns\": [{\"print_hide\": 0, \"fieldname\": \"salary_component\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"amount\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"depends_on_lwp\", \"print_width\": \"\"}], \"print_hide\": 0, \"fieldname\": \"deductions\", \"label\": \"Deductions\"}, {\"fieldtype\": \"Section Break\", \"label\": \"\"}, {\"fieldtype\": \"Column Break\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"gross_pay\", \"label\": \"Gross Pay\"}, {\"print_hide\": 0, \"fieldname\": \"total_deduction\", \"label\": \"Total Deduction\"}, {\"print_hide\": 0, \"fieldname\": \"net_pay\", \"label\": \"Net Pay\"}, {\"print_hide\": 0, \"fieldname\": \"rounded_total\", \"label\": \"Rounded Total\"}, {\"print_hide\": 0, \"fieldname\": \"total_in_words\", \"label\": \"Total in words\"}]", 
- "idx": 0, 
- "line_breaks": 0, 
- "modified": "2018-07-24 19:31:39.040701", 
- "modified_by": "Administrator", 
- "module": "HR", 
- "name": "Salary Slip Standard", 
- "owner": "Administrator", 
- "print_format_builder": 1, 
- "print_format_type": "Server", 
- "show_section_headings": 0, 
+ "align_labels_right": 0,
+ "creation": "2016-07-07 11:45:14.872204",
+ "custom_format": 0,
+ "disabled": 0,
+ "doc_type": "Salary Slip",
+ "docstatus": 0,
+ "doctype": "Print Format",
+ "font": "Default",
+ "format_data": "[{\"fieldname\": \"print_heading_template\", \"fieldtype\": \"Custom HTML\", \"options\": \"   <h3 style=\\\"text-align: right;\\\"><span style=\\\"line-height: 1.42857;\\\">{{doc.name}}</span></h3>\\n<div>\\n    <hr style=\\\"text-align: center;\\\">\\n</div>   \"}, {\"fieldtype\": \"Section Break\", \"label\": \"\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"employee\", \"label\": \"Employee\"}, {\"print_hide\": 0, \"fieldname\": \"company\", \"label\": \"Company\"}, {\"print_hide\": 0, \"fieldname\": \"employee_name\", \"label\": \"Employee Name\"}, {\"print_hide\": 0, \"fieldname\": \"department\", \"label\": \"Department\"}, {\"print_hide\": 0, \"fieldname\": \"designation\", \"label\": \"Designation\"}, {\"print_hide\": 0, \"fieldname\": \"branch\", \"label\": \"Branch\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"start_date\", \"label\": \"Start Date\"}, {\"print_hide\": 0, \"fieldname\": \"end_date\", \"label\": \"End Date\"}, {\"print_hide\": 0, \"fieldname\": \"total_working_days\", \"label\": \"Working Days\"}, {\"print_hide\": 0, \"fieldname\": \"leave_without_pay\", \"label\": \"Leave Without Pay\"}, {\"print_hide\": 0, \"fieldname\": \"payment_days\", \"label\": \"Payment Days\"}, {\"fieldtype\": \"Section Break\", \"label\": \"\"}, {\"fieldtype\": \"Column Break\"}, {\"visible_columns\": [{\"print_hide\": 0, \"fieldname\": \"salary_component\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"amount\", \"print_width\": \"\"}], \"print_hide\": 0, \"fieldname\": \"earnings\", \"label\": \"Earnings\"}, {\"fieldtype\": \"Column Break\"}, {\"visible_columns\": [{\"print_hide\": 0, \"fieldname\": \"salary_component\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"amount\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"depends_on_payment_days\", \"print_width\": \"\"}], \"print_hide\": 0, \"fieldname\": \"deductions\", \"label\": \"Deductions\"}, {\"fieldtype\": \"Section Break\", \"label\": \"\"}, {\"fieldtype\": \"Column Break\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"gross_pay\", \"label\": \"Gross Pay\"}, {\"print_hide\": 0, \"fieldname\": \"total_deduction\", \"label\": \"Total Deduction\"}, {\"print_hide\": 0, \"fieldname\": \"net_pay\", \"label\": \"Net Pay\"}, {\"print_hide\": 0, \"fieldname\": \"rounded_total\", \"label\": \"Rounded Total\"}, {\"print_hide\": 0, \"fieldname\": \"total_in_words\", \"label\": \"Total in words\"}]",
+ "idx": 0,
+ "line_breaks": 0,
+ "modified": "2018-07-24 19:31:39.040701",
+ "modified_by": "Administrator",
+ "module": "HR",
+ "name": "Salary Slip Standard",
+ "owner": "Administrator",
+ "print_format_builder": 1,
+ "print_format_type": "Server",
+ "show_section_headings": 0,
  "standard": "Yes"
 }
\ No newline at end of file
diff --git a/erpnext/patches.txt b/erpnext/patches.txt
index ccfd37d..6daa85f 100644
--- a/erpnext/patches.txt
+++ b/erpnext/patches.txt
@@ -597,3 +597,5 @@
 erpnext.patches.v12_0.move_item_tax_to_item_tax_template
 erpnext.patches.v11_1.set_variant_based_on
 erpnext.patches.v11_1.woocommerce_set_creation_user
+erpnext.patches.v11_1.set_salary_details_submittable
+erpnext.patches.v11_1.rename_depends_on_lwp
diff --git a/erpnext/patches/v11_1/rename_depends_on_lwp.py b/erpnext/patches/v11_1/rename_depends_on_lwp.py
new file mode 100644
index 0000000..20d8867
--- /dev/null
+++ b/erpnext/patches/v11_1/rename_depends_on_lwp.py
@@ -0,0 +1,13 @@
+# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
+# License: GNU General Public License v3. See license.txt
+
+from __future__ import unicode_literals
+import frappe
+from frappe import scrub
+from frappe.model.utils.rename_field import rename_field
+
+def execute():
+	for doctype in ("Salary Component", "Salary Detail"):
+		if "depends_on_lwp" in frappe.db.get_table_columns(doctype):
+			frappe.reload_doc("hr", "doctype", scrub(doctype))
+			rename_field(doctype, "depends_on_lwp", "depends_on_payment_days")
\ No newline at end of file
diff --git a/erpnext/patches/v11_1/set_salary_details_submittable.py b/erpnext/patches/v11_1/set_salary_details_submittable.py
new file mode 100644
index 0000000..6d847ec
--- /dev/null
+++ b/erpnext/patches/v11_1/set_salary_details_submittable.py
@@ -0,0 +1,9 @@
+from __future__ import unicode_literals
+import frappe
+
+def execute():
+	frappe.db.sql("""
+		update `tabSalary Structure` ss, `tabSalary Detail` sd
+		set sd.docstatus=1
+		where ss.name=sd.parent and ss.docstatus=1 and sd.parenttype='Salary Structure'
+	""")
diff --git a/erpnext/patches/v7_0/rename_salary_components.py b/erpnext/patches/v7_0/rename_salary_components.py
index de92fc6..bc48e34 100644
--- a/erpnext/patches/v7_0/rename_salary_components.py
+++ b/erpnext/patches/v7_0/rename_salary_components.py
@@ -5,79 +5,79 @@
 def execute():
 	if not frappe.db.exists("DocType", "Salary Structure Earning"):
 		return
-	
+
 	frappe.reload_doc("hr", "doctype", "salary_detail")
 	frappe.reload_doc("hr", "doctype", "salary_component")
-	
+
 	standard_cols = ["name", "creation", "modified", "owner", "modified_by", "parent", "parenttype", "parentfield", "idx"]
-	
+
 	dt_cols = {
 		"Salary Structure Deduction": ["d_type", "d_modified_amt", "depend_on_lwp"],
 		"Salary Structure Earning": ["e_type", "modified_value", "depend_on_lwp"],
 		"Salary Slip Earning": ["e_type", "e_modified_amount", "e_depends_on_lwp", "e_amount"],
 		"Salary Slip Deduction": ["d_type", "d_modified_amount", "d_depends_on_lwp", "d_amount"],
 	}
-	
+
 	earning_type_exists = True if "earning_type" in frappe.db.get_table_columns("Salary Slip Earning") else False
 	e_type_exists = True if "e_type" in frappe.db.get_table_columns("Salary Slip Earning") else False
-	
-	
+
+
 	if e_type_exists and earning_type_exists:
-		frappe.db.sql("""update `tabSalary Slip Earning` 
+		frappe.db.sql("""update `tabSalary Slip Earning`
 			set e_type = earning_type, e_modified_amount = earning_amount
 			where e_type is null and earning_type is not null""")
 
-		frappe.db.sql("""update `tabSalary Structure Earning` set e_type = earning_type 
+		frappe.db.sql("""update `tabSalary Structure Earning` set e_type = earning_type
 			where e_type is null and earning_type is not null""")
 
-		frappe.db.sql("""update `tabSalary Slip Deduction` set 
+		frappe.db.sql("""update `tabSalary Slip Deduction` set
 			d_type = deduction_type, d_modified_amount = deduction_amount
 			where d_type is null and deduction_type is not null""")
 
-		frappe.db.sql("""update `tabSalary Structure Deduction` set d_type = deduction_type 
+		frappe.db.sql("""update `tabSalary Structure Deduction` set d_type = deduction_type
 			where d_type is null and deduction_type is not null""")
-			
+
 	if earning_type_exists and not e_type_exists:
 		for val in dt_cols.values():
 			if val[0] == "e_type":
 				val[0] = "earning_type"
-			
+
 			if val[0] == "d_type":
 				val[0] = "deduction_type"
-				
+
 			if val[1] == "e_modified_amount":
 				val[1]  ="earning_amount"
-				
+
 			if val[1] == "d_modified_amount":
 				val[1]  ="deduction_amount"
-			
 
-	
-	target_cols = standard_cols + ["salary_component", "amount", "depends_on_lwp", "default_amount"]
-	target_cols = "`" + "`, `".join(target_cols) + "`"		
-	
-	for doctype, cols in dt_cols.items():		
+
+
+	target_cols = standard_cols + ["salary_component", "amount", "depends_on_payment_days", "default_amount"]
+	target_cols = "`" + "`, `".join(target_cols) + "`"
+
+	for doctype, cols in dt_cols.items():
 		source_cols = "`" + "`, `".join(standard_cols + cols) + "`"
 		if len(cols) == 3:
 			source_cols += ", 0"
-		
-		
+
+
 		frappe.db.sql("""INSERT INTO `tabSalary Detail` ({0}) SELECT {1} FROM `tab{2}`"""
 			.format(target_cols, source_cols, doctype))
-			
-	
+
+
 	dt_cols_de = {
 		"Deduction Type": ["deduction_name", "description"],
 		"Earning Type": ["earning_name", "description"],
 	}
-	
+
 	standard_cols_de = standard_cols
-	
+
 
 	target_cols = standard_cols_de + ["salary_component", "description"]
-	target_cols = "`" + "`, `".join(target_cols) + "`"		
-	
-	for doctype, cols in dt_cols_de.items():		
+	target_cols = "`" + "`, `".join(target_cols) + "`"
+
+	for doctype, cols in dt_cols_de.items():
 		source_cols = "`" + "`, `".join(standard_cols_de + cols) + "`"
 		try:
 			frappe.db.sql("""INSERT INTO `tabSalary Component` ({0}) SELECT {1} FROM `tab{2}`"""
@@ -85,10 +85,10 @@
 		except Exception as e:
 			if e.args[0]==1062:
 				pass
-			
+
 	update_customizations()
-			
-	for doctype in ["Salary Structure Deduction", "Salary Structure Earning", "Salary Slip Earning", 
+
+	for doctype in ["Salary Structure Deduction", "Salary Structure Earning", "Salary Slip Earning",
 			"Salary Slip Deduction", "Deduction Type", "Earning Type"] :
 		frappe.delete_doc("DocType", doctype)
 
@@ -96,35 +96,35 @@
 def update_customizations():
 	dt_cols = {
 		"Salary Structure Deduction": {
-			"d_type": "salary_component", 
-			"deduction_type": "salary_component", 
+			"d_type": "salary_component",
+			"deduction_type": "salary_component",
 			"d_modified_amt": "amount",
-			"depend_on_lwp": "depends_on_lwp"
+			"depend_on_lwp": "depends_on_payment_days"
 		},
 		"Salary Structure Earning": {
-			"e_type": "salary_component", 
-			"earning_type": "salary_component", 
+			"e_type": "salary_component",
+			"earning_type": "salary_component",
 			"modified_value": "amount",
-			"depend_on_lwp": "depends_on_lwp"
+			"depend_on_lwp": "depends_on_payment_days"
 		},
 		"Salary Slip Earning": {
-			"e_type": "salary_component", 
-			"earning_type": "salary_component", 
+			"e_type": "salary_component",
+			"earning_type": "salary_component",
 			"e_modified_amount": "amount",
 			"e_amount" : "default_amount",
-			"e_depends_on_lwp": "depends_on_lwp"
+			"e_depends_on_lwp": "depends_on_payment_days"
 		},
 		"Salary Slip Deduction": {
-			"d_type": "salary_component", 
-			"deduction_type": "salary_component", 
+			"d_type": "salary_component",
+			"deduction_type": "salary_component",
 			"d_modified_amount": "amount",
 			"d_amount" : "default_amount",
-			"d_depends_on_lwp": "depends_on_lwp"
+			"d_depends_on_lwp": "depends_on_payment_days"
 		}
 	}
-	
+
 	update_property_setters_and_custom_fields("Salary Detail", dt_cols)
-	
+
 	dt_cols = {
 		"Earning Type": {
 			"earning_name": "salary_component"
@@ -133,17 +133,17 @@
 			"deduction_name": "salary_component"
 		}
 	}
-	
+
 	update_property_setters_and_custom_fields("Salary Component", dt_cols)
-	
-	
-	
-	
+
+
+
+
 def update_property_setters_and_custom_fields(new_dt, dt_cols):
 	for doctype, cols in dt_cols.items():
 		frappe.db.sql("update `tabProperty Setter` set doc_type = %s where doc_type=%s", (new_dt, doctype))
 		frappe.db.sql("update `tabCustom Field` set dt = %s where dt=%s", (new_dt, doctype))
-		
-		
+
+
 		for old_fieldname, new_fieldname in cols.items():
 			update_property_setters(new_dt, old_fieldname, new_fieldname)
diff --git a/erpnext/public/js/communication.js b/erpnext/public/js/communication.js
index 49701b8..5316eb4 100644
--- a/erpnext/public/js/communication.js
+++ b/erpnext/public/js/communication.js
@@ -33,7 +33,7 @@
 
 	make_lead_from_communication: (frm) => {
 		return frappe.call({
-			method: "frappe.email.inbox.make_lead_from_communication",
+			method: "erpnext.crm.doctype.lead.lead.make_lead_from_communication",
 			args: {
 				communication: frm.doc.name
 			},
@@ -48,7 +48,7 @@
 
 	make_issue_from_communication: (frm) => {
 		return frappe.call({
-			method: "frappe.email.inbox.make_issue_from_communication",
+			method: "erpnext.support.doctype.issue.issue.make_issue_from_communication",
 			args: {
 				communication: frm.doc.name
 			},
@@ -63,7 +63,7 @@
 
 	make_opportunity_from_communication: (frm) => {
 		return frappe.call({
-			method: "frappe.email.inbox.make_opportunity_from_communication",
+			method: "erpnext.crm.doctype.opportunity.opportunity.make_opportunity_from_communication",
 			args: {
 				communication: frm.doc.name
 			},
diff --git a/erpnext/public/js/templates/address_list.html b/erpnext/public/js/templates/address_list.html
index 0bc86ed..2379ef6 100644
--- a/erpnext/public/js/templates/address_list.html
+++ b/erpnext/public/js/templates/address_list.html
@@ -9,7 +9,7 @@
             <span class="text-muted">({%= __("Shipping") %})</span>{% } %}
 
         <a href="#Form/Address/{%= encodeURIComponent(addr_list[i].name) %}"
-            class="btn btn-light btn-xs pull-right"
+            class="btn btn-default btn-xs pull-right"
 				style="margin-top:-3px; margin-right: -5px;">
             {%= __("Edit") %}</a>
     </p>
@@ -19,5 +19,5 @@
 {% if(!addr_list.length) { %}
 <p class="text-muted small">{%= __("No address added yet.") %}</p>
 {% } %}
-<p><button class="btn btn-xs btn-light btn-address">{{ __("New Address") }}</button></p>
+<p><button class="btn btn-xs btn-default btn-address">{{ __("New Address") }}</button></p>
 
diff --git a/erpnext/public/js/templates/contact_list.html b/erpnext/public/js/templates/contact_list.html
index 2144893..893b4e0 100644
--- a/erpnext/public/js/templates/contact_list.html
+++ b/erpnext/public/js/templates/contact_list.html
@@ -10,7 +10,7 @@
 			 <span class="text-muted">&ndash; {%= contact_list[i].designation %}</span>
 			{% } %}
 			<a href="#Form/Contact/{%= encodeURIComponent(contact_list[i].name) %}"
-				class="btn btn-xs btn-light pull-right"
+				class="btn btn-xs btn-default pull-right"
 				style="margin-top:-3px; margin-right: -5px;">
 				{%= __("Edit") %}</a>
 		</p>
@@ -33,6 +33,6 @@
 {% if(!contact_list.length) { %}
 <p class="text-muted small">{%= __("No contacts added yet.") %}</p>
 {% } %}
-<p><button class="btn btn-xs btn-light btn-contact">
+<p><button class="btn btn-xs btn-default btn-contact">
 	{{ __("New Contact") }}</button>
 </p>
\ No newline at end of file
diff --git a/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py b/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py
index a9aa1d5..7faabf4 100644
--- a/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py
+++ b/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py
@@ -227,12 +227,18 @@
 
 		for d in inter_state_supply.get("Unregistered", []):
 			self.report_dict["inter_sup"]["unreg_details"].append(d)
+			self.report_dict["sup_details"]["osup_det"]["txval"] += d["txval"]
+			self.report_dict["sup_details"]["osup_det"]["iamt"] += d["iamt"]
 
 		for d in inter_state_supply.get("Registered Composition", []):
 			self.report_dict["inter_sup"]["comp_details"].append(d)
+			self.report_dict["sup_details"]["osup_det"]["txval"] += d["txval"]
+			self.report_dict["sup_details"]["osup_det"]["iamt"] += d["iamt"]
 
 		for d in inter_state_supply.get("UIN Holders", []):
 			self.report_dict["inter_sup"]["uin_details"].append(d)
+			self.report_dict["sup_details"]["osup_det"]["txval"] += d["txval"]
+			self.report_dict["sup_details"]["osup_det"]["iamt"] += d["iamt"]
 
 	def get_total_taxable_value(self, doctype, reverse_charge):
 
@@ -296,7 +302,7 @@
 
 			inter_state_supply_details[d.gst_category].append({
 				"pos": get_state_code(d.gst_state),
-				"txval": d.total,
+				"txval": d.total - d.tax_amount,
 				"iamt": d.tax_amount
 			})
 
diff --git a/erpnext/regional/doctype/gstr_3b_report/test_gstr_3b_report.py b/erpnext/regional/doctype/gstr_3b_report/test_gstr_3b_report.py
index d50eaeb..4667107 100644
--- a/erpnext/regional/doctype/gstr_3b_report/test_gstr_3b_report.py
+++ b/erpnext/regional/doctype/gstr_3b_report/test_gstr_3b_report.py
@@ -57,7 +57,7 @@
 
 		output = json.loads(report.json_output)
 
-		self.assertEqual(output["sup_details"]["osup_det"]["iamt"], 18),
+		self.assertEqual(output["sup_details"]["osup_det"]["iamt"], 36),
 		self.assertEqual(output["sup_details"]["osup_zero"]["iamt"], 18),
 		self.assertEqual(output["inter_sup"]["unreg_details"][0]["iamt"], 18),
 		self.assertEqual(output["sup_details"]["osup_nil_exmp"]["txval"], 100),
diff --git a/erpnext/regional/report/irs_1099/irs_1099.py b/erpnext/regional/report/irs_1099/irs_1099.py
index 0cb4a3a..67834d1 100644
--- a/erpnext/regional/report/irs_1099/irs_1099.py
+++ b/erpnext/regional/report/irs_1099/irs_1099.py
@@ -97,9 +97,7 @@
 		row["recipient_street_address"], row["recipient_city_state"] = get_street_address_html("Supplier", row.supplier)
 		row["payments"] = fmt_money(row["payments"], precision=0, currency="USD")
 		frappe._dict(row)
-		print(row)
 		pdf = get_pdf(render_template(template, row), output=output if output else None)
-		print(pdf)
 	frappe.local.response.filename = filters.fiscal_year + " " + filters.company + " IRS 1099 Forms"
 	frappe.local.response.filecontent = read_multi_pdf(output)
 	frappe.local.response.type = "download"
diff --git a/erpnext/stock/report/stock_ledger/stock_ledger.py b/erpnext/stock/report/stock_ledger/stock_ledger.py
index 20b5e45..70da5b5 100644
--- a/erpnext/stock/report/stock_ledger/stock_ledger.py
+++ b/erpnext/stock/report/stock_ledger/stock_ledger.py
@@ -154,10 +154,10 @@
 		"posting_date": filters.from_date,
 		"posting_time": "00:00:00"
 	})
-	row = [""]*len(columns)
-	row[1] = _("'Opening'")
-	for i, v in ((9, 'qty_after_transaction'), (11, 'valuation_rate'), (12, 'stock_value')):
-			row[i] = last_entry.get(v, 0)
+	row = {}
+	row["item_code"] = _("'Opening'")
+	for dummy, v in ((9, 'qty_after_transaction'), (11, 'valuation_rate'), (12, 'stock_value')):
+			row[v] = last_entry.get(v, 0)
 
 	return row
 
diff --git a/erpnext/support/doctype/issue/issue.py b/erpnext/support/doctype/issue/issue.py
index 01677ae..d626def 100644
--- a/erpnext/support/doctype/issue/issue.py
+++ b/erpnext/support/doctype/issue/issue.py
@@ -13,6 +13,7 @@
 from frappe.utils.user import is_website_user
 from ..service_level_agreement.service_level_agreement import get_active_service_level_agreement_for
 from erpnext.crm.doctype.opportunity.opportunity import assign_to_user
+from frappe.email.inbox import link_communication_to_document
 
 sender_field = "raised_by"
 
@@ -294,3 +295,19 @@
 			"doctype": "Task"
 		}
 	}, target_doc)
+@frappe.whitelist()
+def make_issue_from_communication(communication, ignore_communication_links=False):
+	""" raise a issue from email """
+
+	doc = frappe.get_doc("Communication", communication)
+	issue = frappe.get_doc({
+		"doctype": "Issue",
+		"subject": doc.subject,
+		"communication_medium": doc.communication_medium,
+		"raised_by": doc.sender or "",
+		"raised_by_phone": doc.phone_no or ""
+	}).insert(ignore_permissions=True)
+
+	link_communication_to_document(doc, "Issue", issue.name, ignore_communication_links)
+
+	return issue.name