diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json index bd845069cd..5f4833c34c 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 ffc5a1d398..1ded27211b 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 d374bb7747..fe158a6f00 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 1b8bf2717b..6664c4d4af 100644 --- a/erpnext/config/accounting.py +++ b/erpnext/config/accounting.py @@ -78,6 +78,11 @@ def get_data(): "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 { @@ -131,6 +136,11 @@ def get_data(): "name": "Currency Exchange", "description": _("Currency exchange rate master.") }, + { + "type": "doctype", + "name": "Exchange Rate Revaluation", + "description": _("Exchange Rate Revaluation master.") + }, { "type": "doctype", "name": "Payment Gateway Account", diff --git a/erpnext/crm/doctype/lead/lead.py b/erpnext/crm/doctype/lead/lead.py index 442b6c2db2..d42502dc3b 100644 --- a/erpnext/crm/doctype/lead/lead.py +++ b/erpnext/crm/doctype/lead/lead.py @@ -10,6 +10,7 @@ from frappe.model.mapper import get_mapped_doc 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 @@ def get_lead_details(lead, posting_date=None, company=None): 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 2e02e75b73..4d4593641a 100644 --- a/erpnext/crm/doctype/opportunity/opportunity.py +++ b/erpnext/crm/doctype/opportunity/opportunity.py @@ -10,6 +10,7 @@ from erpnext.setup.utils import get_exchange_rate 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 @@ def assign_to_user(doc, subject_field): "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 d8532fa116..608e8b2225 100644 --- a/erpnext/hooks.py +++ b/erpnext/hooks.py @@ -74,7 +74,7 @@ website_generators = ["Item Group", "Item", "BOM", "Sales Partner", 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 968a1c4571..9ca1260fe0 100644 --- a/erpnext/hr/doctype/additional_salary/additional_salary.py +++ b/erpnext/hr/doctype/additional_salary/additional_salary.py @@ -51,7 +51,7 @@ def get_additional_salary_component(employee, start_date, end_date): 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 9b6dba5ff8..c613a13223 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(employee, on_date): 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 @@ def get_max_benefits_remaining(employee, on_date, payroll_period): 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 @@ def get_benefit_component_amount(employee, start_date, end_date, struct_row, sal '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 bf150b1232..8be67a866a 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 @@ def get_last_payroll_period_benefits(employee, sal_slip_start_date, sal_slip_end 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 b33451bc35..1d398ccd59 100644 --- a/erpnext/hr/doctype/salary_component/salary_component.js +++ b/erpnext/hr/doctype/salary_component/salary_component.js @@ -75,5 +75,5 @@ var set_value_for_condition_and_formula = function(frm) { 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 f7ce08c737..697d224092 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 0ec3cd6413..8f2649ad21 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 86c50d08ba..4e9fcce898 100644 --- a/erpnext/hr/doctype/salary_slip/salary_slip.js +++ b/erpnext/hr/doctype/salary_slip/salary_slip.js @@ -132,9 +132,6 @@ var get_emp_and_leave_details = function(doc, dt, dn) { }); } -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 @@ cur_frm.cscript.amount = function(doc,dt,dn){ 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 calculate_earning_total = function(doc, dt, dn, reset_amount) { 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 calculate_ded_total = function(doc, dt, dn, reset_amount) { 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 @@ var calculate_ded_total = function(doc, dt, dn, reset_amount) { 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 6ddcd1baa3..f2d77222d5 100644 --- a/erpnext/hr/doctype/salary_slip/salary_slip.py +++ b/erpnext/hr/doctype/salary_slip/salary_slip.py @@ -131,11 +131,12 @@ class SalarySlip(TransactionBase): 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 @@ class SalarySlip(TransactionBase): '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 @@ class SalarySlip(TransactionBase): 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 @@ class SalarySlip(TransactionBase): ) 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 @@ class SalarySlip(TransactionBase): 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 79d75bfdf6..e3f37e7105 100755 --- a/erpnext/hr/doctype/salary_structure/salary_structure.js +++ b/erpnext/hr/doctype/salary_structure/salary_structure.js @@ -246,7 +246,7 @@ frappe.ui.form.on('Salary Detail', { 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 202ae9bcfe..26efd00d47 100644 --- a/erpnext/hr/doctype/salary_structure/salary_structure.py +++ b/erpnext/hr/doctype/salary_structure/salary_structure.py @@ -18,7 +18,7 @@ class SalaryStructure(Document): 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 create_salary_structures_assignment(employee, salary_structure, from_date, b 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 20c7d23249..ceaf4a6ac7 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\": \"
{%= __("No address added yet.") %}
{% } %} - + diff --git a/erpnext/public/js/templates/contact_list.html b/erpnext/public/js/templates/contact_list.html index 2144893961..893b4e0ec2 100644 --- a/erpnext/public/js/templates/contact_list.html +++ b/erpnext/public/js/templates/contact_list.html @@ -10,7 +10,7 @@ – {%= contact_list[i].designation %} {% } %} {%= __("Edit") %} @@ -33,6 +33,6 @@ {% if(!contact_list.length) { %}{%= __("No contacts added yet.") %}
{% } %} -