blob: 97959ce2d96ecff4f9887545cd07f7082333b2bd [file] [log] [blame]
Ranjithfddfffd2018-05-05 13:27:26 +05301frappe.ui.form.on(cur_frm.doctype, {
Ranjith9505ea92018-05-05 14:32:42 +05302 setup: function(frm) {
3 frm.set_query("employee", function() {
4 return {
Ranjithfddfffd2018-05-05 13:27:26 +05305 filters: {
6 "status": "Active"
7 }
8 };
Ranjith9505ea92018-05-05 14:32:42 +05309 });
10 },
Rucha Mahabalcf2e6c62022-04-09 13:15:37 +053011
Ranjithfddfffd2018-05-05 13:27:26 +053012 refresh: function(frm) {
Rucha Mahabalcf2e6c62022-04-09 13:15:37 +053013 let table;
14 if (frm.doctype == "Employee Promotion") {
Ranjith9505ea92018-05-05 14:32:42 +053015 table = "promotion_details";
Rucha Mahabalcf2e6c62022-04-09 13:15:37 +053016 } else if (frm.doctype == "Employee Transfer") {
Ranjith86b81e92018-05-05 16:49:51 +053017 table = "transfer_details";
Ranjith9505ea92018-05-05 14:32:42 +053018 }
Rucha Mahabalcf2e6c62022-04-09 13:15:37 +053019
20 if (!table)
21 return;
22
23 frm.fields_dict[table].grid.wrapper.find(".grid-add-row").hide();
24 frm.events.setup_employee_property_button(frm, table)
25 },
26
27 setup_employee_property_button: function(frm, table) {
28 frm.fields_dict[table].grid.add_custom_button(__("Add Employee Property"), () => {
29 if (!frm.doc.employee) {
30 frappe.msgprint(__("Please select Employee first."));
Ranjithfddfffd2018-05-05 13:27:26 +053031 return;
32 }
Rucha Mahabalcf2e6c62022-04-09 13:15:37 +053033
34 const allowed_fields = [];
35 const exclude_fields = ["naming_series", "employee", "first_name", "middle_name", "last_name",
36 "employee_name", "status", "image", "gender", "date_of_birth", "date_of_joining", "lft", "rgt", "old_parent"];
37
38 const exclude_field_types = ["HTML", "Section Break", "Column Break", "Button", "Read Only", "Tab Break", "Table"];
39
40 frappe.model.with_doctype("Employee", () => {
41 const field_label_map = {};
42 frappe.get_meta("Employee").fields.forEach(d => {
43 field_label_map[d.fieldname] = __(d.label) + ` (${d.fieldname})`;
44 if (!in_list(exclude_field_types, d.fieldtype) && !in_list(exclude_fields, d.fieldname)) {
45 allowed_fields.push({
46 label: field_label_map[d.fieldname],
47 value: d.fieldname,
48 });
Ranjithfddfffd2018-05-05 13:27:26 +053049 }
Rucha Mahabalcf2e6c62022-04-09 13:15:37 +053050 });
51
52 show_dialog(frm, table, allowed_fields)
Ranjithfddfffd2018-05-05 13:27:26 +053053 });
54 });
55 }
56});
57
58var show_dialog = function(frm, table, field_labels) {
59 var d = new frappe.ui.Dialog({
60 title: "Update Property",
61 fields: [
Rucha Mahabalcf2e6c62022-04-09 13:15:37 +053062 {fieldname: "property", label: __("Select Property"), fieldtype: "Autocomplete", options: field_labels},
63 {fieldname: "current", fieldtype: "Data", label:__("Current"), read_only: true},
Ranjithfddfffd2018-05-05 13:27:26 +053064 {fieldname: "field_html", fieldtype: "HTML"}
65 ],
Rucha Mahabalcf2e6c62022-04-09 13:15:37 +053066 primary_action_label: __("Add to Details"),
Ranjithfddfffd2018-05-05 13:27:26 +053067 primary_action: () => {
Rucha Mahabalcf2e6c62022-04-09 13:15:37 +053068 d.get_primary_btn().attr("disabled", true);
69 if (d.data) {
Shreya14069c92018-05-15 15:19:24 +053070 var input = $('[data-fieldname="field_html"] input');
71 d.data.new = input.val();
72 $(input).remove();
Ranjithfddfffd2018-05-05 13:27:26 +053073 add_to_details(frm, d, table);
74 }
75 }
76 });
Rucha Mahabalcf2e6c62022-04-09 13:15:37 +053077
Ranjithfddfffd2018-05-05 13:27:26 +053078 d.fields_dict["property"].df.onchange = () => {
79 let property = d.get_values().property;
80 d.data.fieldname = property;
81 if(!property){return;}
82 frappe.call({
83 method: 'erpnext.hr.utils.get_employee_field_property',
84 args: {employee: frm.doc.employee, fieldname: property},
85 callback: function(r) {
86 if(r.message){
87 d.data.current = r.message.value;
88 d.data.property = r.message.label;
89 d.fields_dict.field_html.$wrapper.html("");
90 d.set_value('current', r.message.value);
91 render_dynamic_field(d, r.message.datatype, r.message.options, property);
92 d.get_primary_btn().attr('disabled', false);
93 }
94 }
95 });
96 };
97 d.get_primary_btn().attr('disabled', true);
98 d.data = {};
99 d.show();
Ranjith9505ea92018-05-05 14:32:42 +0530100};
Ranjithfddfffd2018-05-05 13:27:26 +0530101
102var render_dynamic_field = function(d, fieldtype, options, fieldname) {
103 d.data.new = null;
104 var dynamic_field = frappe.ui.form.make_control({
105 df: {
106 "fieldtype": fieldtype,
107 "fieldname": fieldname,
108 "options": options || ''
109 },
110 parent: d.fields_dict.field_html.wrapper,
111 only_input: false
112 });
113 dynamic_field.make_input();
114 $(dynamic_field.label_area).text(__("New"));
Ranjith9505ea92018-05-05 14:32:42 +0530115};
Ranjithfddfffd2018-05-05 13:27:26 +0530116
117var add_to_details = function(frm, d, table) {
118 let data = d.data;
119 if(data.fieldname){
120 if(validate_duplicate(frm, table, data.fieldname)){
121 frappe.show_alert({message:__("Property already added"), indicator:'orange'});
122 return false;
123 }
124 if(data.current == data.new){
125 frappe.show_alert({message:__("Nothing to change"), indicator:'orange'});
126 d.get_primary_btn().attr('disabled', false);
127 return false;
128 }
129 frm.add_child(table, {
130 fieldname: data.fieldname,
131 property: data.property,
132 current: data.current,
133 new: data.new
134 });
135 frm.refresh_field(table);
Rucha Mahabalcf2e6c62022-04-09 13:15:37 +0530136
137 frm.fields_dict[table].grid.wrapper.find(".grid-add-row").hide();
138
Ranjithfddfffd2018-05-05 13:27:26 +0530139 d.fields_dict.field_html.$wrapper.html("");
140 d.set_value("property", "");
141 d.set_value('current', "");
142 frappe.show_alert({message:__("Added to details"),indicator:'green'});
143 d.data = {};
144 }else {
145 frappe.show_alert({message:__("Value missing"),indicator:'red'});
146 }
Ranjith9505ea92018-05-05 14:32:42 +0530147};
Ranjithfddfffd2018-05-05 13:27:26 +0530148
149var validate_duplicate = function(frm, table, fieldname){
150 let duplicate = false;
151 $.each(frm.doc[table], function(i, detail) {
152 if(detail.fieldname === fieldname){
153 duplicate = true;
154 return;
155 }
156 });
157 return duplicate;
Ranjith9505ea92018-05-05 14:32:42 +0530158};