diff --git a/erpnext/hr/doctype/employee_promotion/employee_promotion.json b/erpnext/hr/doctype/employee_promotion/employee_promotion.json index e0fbd23be4..65f53b219a 100644 --- a/erpnext/hr/doctype/employee_promotion/employee_promotion.json +++ b/erpnext/hr/doctype/employee_promotion/employee_promotion.json @@ -1,397 +1,134 @@ { - "allow_copy": 0, - "allow_guest_to_view": 0, - "allow_import": 0, - "allow_rename": 0, - "autoname": "HR-EMP-PRO-.YYYY.-.#####", - "beta": 0, - "creation": "2018-04-13 18:33:59.476562", - "custom": 0, - "docstatus": 0, - "doctype": "DocType", - "document_type": "", - "editable_grid": 1, - "engine": "InnoDB", + "actions": [], + "autoname": "HR-EMP-PRO-.YYYY.-.#####", + "creation": "2018-04-13 18:33:59.476562", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "employee", + "employee_name", + "department", + "column_break_3", + "promotion_date", + "company", + "details_section", + "promotion_details", + "amended_from" + ], "fields": [ { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "employee", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Employee", - "length": 0, - "no_copy": 0, - "options": "Employee", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, + "fieldname": "employee", + "fieldtype": "Link", + "in_list_view": 1, + "label": "Employee", + "options": "Employee", + "reqd": 1 + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fetch_from": "employee.employee_name", - "fieldname": "employee_name", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Employee Name", - "length": 0, - "no_copy": 0, - "options": "", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 1, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, + "fetch_from": "employee.employee_name", + "fieldname": "employee_name", + "fieldtype": "Data", + "label": "Employee Name", + "read_only": 1 + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fetch_from": "employee.department", - "fieldname": "department", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Department", - "length": 0, - "no_copy": 0, - "options": "Department", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 1, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, + "fetch_from": "employee.department", + "fieldname": "department", + "fieldtype": "Link", + "label": "Department", + "options": "Department", + "read_only": 1 + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "column_break_3", - "fieldtype": "Column Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, + "fieldname": "column_break_3", + "fieldtype": "Column Break" + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "promotion_date", - "fieldtype": "Date", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Promotion Date", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, + "fieldname": "promotion_date", + "fieldtype": "Date", + "label": "Promotion Date", + "reqd": 1 + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fetch_from": "employee.company", - "fieldname": "company", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Company", - "length": 0, - "no_copy": 0, - "options": "Company", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, + "fetch_from": "employee.company", + "fieldname": "company", + "fieldtype": "Link", + "label": "Company", + "options": "Company" + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "details_section", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Employee Promotion Details", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, + "description": "Set the properties that should be updated in the Employee master on promotion submission", + "fieldname": "details_section", + "fieldtype": "Section Break", + "label": "Employee Promotion Details" + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "promotion_details", - "fieldtype": "Table", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Employee Promotion Detail", - "length": 0, - "no_copy": 0, - "options": "Employee Property History", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, + "fieldname": "promotion_details", + "fieldtype": "Table", + "options": "Employee Property History", + "reqd": 1 + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "amended_from", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Amended From", - "length": 0, - "no_copy": 1, - "options": "Employee Promotion", - "permlevel": 0, - "print_hide": 1, - "print_hide_if_no_value": 0, - "read_only": 1, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 + "fieldname": "amended_from", + "fieldtype": "Link", + "label": "Amended From", + "no_copy": 1, + "options": "Employee Promotion", + "print_hide": 1, + "read_only": 1 } - ], - "has_web_view": 0, - "hide_heading": 0, - "hide_toolbar": 0, - "idx": 0, - "image_view": 0, - "in_create": 0, - "is_submittable": 1, - "issingle": 0, - "istable": 0, - "max_attachments": 0, - "modified": "2018-08-21 16:15:40.284987", - "modified_by": "Administrator", - "module": "HR", - "name": "Employee Promotion", - "name_case": "", - "owner": "Administrator", + ], + "is_submittable": 1, + "links": [], + "modified": "2022-04-09 12:24:07.667237", + "modified_by": "Administrator", + "module": "HR", + "name": "Employee Promotion", + "naming_rule": "Expression (old style)", + "owner": "Administrator", "permissions": [ { - "amend": 0, - "cancel": 0, - "create": 0, - "delete": 0, - "email": 1, - "export": 1, - "if_owner": 0, - "import": 0, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "Employee", - "set_user_permissions": 0, - "share": 1, - "submit": 0, - "write": 0 - }, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "Employee", + "share": 1 + }, { - "amend": 0, - "cancel": 0, - "create": 1, - "delete": 0, - "email": 1, - "export": 1, - "if_owner": 0, - "import": 0, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "HR User", - "set_user_permissions": 0, - "share": 1, - "submit": 1, + "create": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "HR User", + "share": 1, + "submit": 1, "write": 1 - }, + }, { - "amend": 1, - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "if_owner": 0, - "import": 0, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "HR Manager", - "set_user_permissions": 0, - "share": 1, - "submit": 1, + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "HR Manager", + "share": 1, + "submit": 1, "write": 1 } - ], - "quick_entry": 1, - "read_only": 0, - "read_only_onload": 0, - "show_name_in_global_search": 0, - "sort_field": "modified", - "sort_order": "DESC", - "title_field": "employee_name", - "track_changes": 1, - "track_seen": 0, - "track_views": 0 + ], + "quick_entry": 1, + "sort_field": "modified", + "sort_order": "DESC", + "states": [], + "title_field": "employee_name", + "track_changes": 1 } \ No newline at end of file diff --git a/erpnext/hr/employee_property_update.js b/erpnext/hr/employee_property_update.js index 60d06b41f0..97959ce2d9 100644 --- a/erpnext/hr/employee_property_update.js +++ b/erpnext/hr/employee_property_update.js @@ -8,39 +8,48 @@ frappe.ui.form.on(cur_frm.doctype, { }; }); }, - onload: function(frm){ - if(frm.doc.__islocal){ - if(frm.doctype == "Employee Promotion"){ - frm.doc.promotion_details = []; - }else if (frm.doctype == "Employee Transfer") { - frm.doc.transfer_details = []; - } - } - }, - employee: function(frm) { - frm.add_fetch("employee", "company", "company"); - }, + refresh: function(frm) { - var table; - if(frm.doctype == "Employee Promotion"){ + let table; + if (frm.doctype == "Employee Promotion") { table = "promotion_details"; - }else if (frm.doctype == "Employee Transfer") { + } else if (frm.doctype == "Employee Transfer") { table = "transfer_details"; } - if(!table){return;} - cur_frm.fields_dict[table].grid.wrapper.find('.grid-add-row').hide(); - cur_frm.fields_dict[table].grid.add_custom_button(__('Add Row'), () => { - if(!frm.doc.employee){ - frappe.msgprint(__("Please select Employee")); + + if (!table) + return; + + frm.fields_dict[table].grid.wrapper.find(".grid-add-row").hide(); + frm.events.setup_employee_property_button(frm, table) + }, + + setup_employee_property_button: function(frm, table) { + frm.fields_dict[table].grid.add_custom_button(__("Add Employee Property"), () => { + if (!frm.doc.employee) { + frappe.msgprint(__("Please select Employee first.")); return; } - frappe.call({ - method: 'erpnext.hr.utils.get_employee_fields_label', - callback: function(r) { - if(r.message){ - show_dialog(frm, table, r.message); + + const allowed_fields = []; + const exclude_fields = ["naming_series", "employee", "first_name", "middle_name", "last_name", + "employee_name", "status", "image", "gender", "date_of_birth", "date_of_joining", "lft", "rgt", "old_parent"]; + + const exclude_field_types = ["HTML", "Section Break", "Column Break", "Button", "Read Only", "Tab Break", "Table"]; + + frappe.model.with_doctype("Employee", () => { + const field_label_map = {}; + frappe.get_meta("Employee").fields.forEach(d => { + field_label_map[d.fieldname] = __(d.label) + ` (${d.fieldname})`; + if (!in_list(exclude_field_types, d.fieldtype) && !in_list(exclude_fields, d.fieldname)) { + allowed_fields.push({ + label: field_label_map[d.fieldname], + value: d.fieldname, + }); } - } + }); + + show_dialog(frm, table, allowed_fields) }); }); } @@ -50,14 +59,14 @@ var show_dialog = function(frm, table, field_labels) { var d = new frappe.ui.Dialog({ title: "Update Property", fields: [ - {fieldname: "property", label: __('Select Property'), fieldtype:"Select", options: field_labels}, - {fieldname: "current", fieldtype: "Data", label:__('Current'), read_only: true}, + {fieldname: "property", label: __("Select Property"), fieldtype: "Autocomplete", options: field_labels}, + {fieldname: "current", fieldtype: "Data", label:__("Current"), read_only: true}, {fieldname: "field_html", fieldtype: "HTML"} ], - primary_action_label: __('Add to Details'), + primary_action_label: __("Add to Details"), primary_action: () => { - d.get_primary_btn().attr('disabled', true); - if(d.data) { + d.get_primary_btn().attr("disabled", true); + if (d.data) { var input = $('[data-fieldname="field_html"] input'); d.data.new = input.val(); $(input).remove(); @@ -65,6 +74,7 @@ var show_dialog = function(frm, table, field_labels) { } } }); + d.fields_dict["property"].df.onchange = () => { let property = d.get_values().property; d.data.fieldname = property; @@ -123,6 +133,9 @@ var add_to_details = function(frm, d, table) { new: data.new }); frm.refresh_field(table); + + frm.fields_dict[table].grid.wrapper.find(".grid-add-row").hide(); + d.fields_dict.field_html.$wrapper.html(""); d.set_value("property", ""); d.set_value('current', ""); diff --git a/erpnext/hr/utils.py b/erpnext/hr/utils.py index fd69a9b4f1..3f15011a4f 100644 --- a/erpnext/hr/utils.py +++ b/erpnext/hr/utils.py @@ -88,29 +88,6 @@ def delete_employee_work_history(details, employee, date): frappe.db.delete("Employee Internal Work History", filters) -@frappe.whitelist() -def get_employee_fields_label(): - fields = [] - for df in frappe.get_meta("Employee").get("fields"): - if df.fieldname in [ - "salutation", - "user_id", - "employee_number", - "employment_type", - "holiday_list", - "branch", - "department", - "designation", - "grade", - "notice_number_of_days", - "reports_to", - "leave_policy", - "company_email", - ]: - fields.append({"value": df.fieldname, "label": df.label}) - return fields - - @frappe.whitelist() def get_employee_field_property(employee, fieldname): if employee and fieldname: