blob: 86130bf7930d69154ea5bb3e2071983d6bbe4824 [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
Rucha Mahabal788e0a12022-04-22 17:25:37 +053012 onload: function(frm) {
Rucha Mahabal8e5327a2022-04-22 21:33:24 +053013 if (frm.doc.__islocal)
14 frm.trigger("clear_property_table");
15 },
16
17 employee: function(frm) {
18 frm.trigger("clear_property_table");
19 },
20
21 clear_property_table: function(frm) {
22 let table = (frm.doctype == "Employee Promotion") ? "promotion_details" : "transfer_details";
23 frm.clear_table(table);
24 frm.refresh_field(table);
25
26 frm.fields_dict[table].grid.wrapper.find(".grid-add-row").hide();
Rucha Mahabalc3dc5d52022-04-21 08:17:00 +053027 },
28
Ranjithfddfffd2018-05-05 13:27:26 +053029 refresh: function(frm) {
Rucha Mahabalcf2e6c62022-04-09 13:15:37 +053030 let table;
31 if (frm.doctype == "Employee Promotion") {
Ranjith9505ea92018-05-05 14:32:42 +053032 table = "promotion_details";
Rucha Mahabalcf2e6c62022-04-09 13:15:37 +053033 } else if (frm.doctype == "Employee Transfer") {
Ranjith86b81e92018-05-05 16:49:51 +053034 table = "transfer_details";
Ranjith9505ea92018-05-05 14:32:42 +053035 }
Rucha Mahabalcf2e6c62022-04-09 13:15:37 +053036
37 if (!table)
38 return;
39
40 frm.fields_dict[table].grid.wrapper.find(".grid-add-row").hide();
Rucha Mahabal788e0a12022-04-22 17:25:37 +053041 frm.events.setup_employee_property_button(frm, table);
Rucha Mahabalcf2e6c62022-04-09 13:15:37 +053042 },
43
44 setup_employee_property_button: function(frm, table) {
45 frm.fields_dict[table].grid.add_custom_button(__("Add Employee Property"), () => {
46 if (!frm.doc.employee) {
47 frappe.msgprint(__("Please select Employee first."));
Ranjithfddfffd2018-05-05 13:27:26 +053048 return;
49 }
Rucha Mahabalcf2e6c62022-04-09 13:15:37 +053050
51 const allowed_fields = [];
Rucha Mahabalcfa4dfe2022-04-22 20:20:04 +053052 const exclude_fields = ["naming_series", "employee", "first_name", "middle_name", "last_name", "marital_status", "ctc",
Rucha Mahabalcf2e6c62022-04-09 13:15:37 +053053 "employee_name", "status", "image", "gender", "date_of_birth", "date_of_joining", "lft", "rgt", "old_parent"];
54
55 const exclude_field_types = ["HTML", "Section Break", "Column Break", "Button", "Read Only", "Tab Break", "Table"];
56
57 frappe.model.with_doctype("Employee", () => {
58 const field_label_map = {};
59 frappe.get_meta("Employee").fields.forEach(d => {
60 field_label_map[d.fieldname] = __(d.label) + ` (${d.fieldname})`;
61 if (!in_list(exclude_field_types, d.fieldtype) && !in_list(exclude_fields, d.fieldname)) {
62 allowed_fields.push({
63 label: field_label_map[d.fieldname],
64 value: d.fieldname,
65 });
Ranjithfddfffd2018-05-05 13:27:26 +053066 }
Rucha Mahabalcf2e6c62022-04-09 13:15:37 +053067 });
68
Rucha Mahabal788e0a12022-04-22 17:25:37 +053069 show_dialog(frm, table, allowed_fields);
Ranjithfddfffd2018-05-05 13:27:26 +053070 });
71 });
72 }
73});
74
75var show_dialog = function(frm, table, field_labels) {
76 var d = new frappe.ui.Dialog({
77 title: "Update Property",
78 fields: [
Rucha Mahabalcf2e6c62022-04-09 13:15:37 +053079 {fieldname: "property", label: __("Select Property"), fieldtype: "Autocomplete", options: field_labels},
Rucha Mahabalc3dc5d52022-04-21 08:17:00 +053080 {fieldname: "current", fieldtype: "Data", label: __("Current"), read_only: true},
81 {fieldname: "new_value", fieldtype: "Data", label: __("New")}
Ranjithfddfffd2018-05-05 13:27:26 +053082 ],
Rucha Mahabalcf2e6c62022-04-09 13:15:37 +053083 primary_action_label: __("Add to Details"),
Ranjithfddfffd2018-05-05 13:27:26 +053084 primary_action: () => {
Rucha Mahabalcf2e6c62022-04-09 13:15:37 +053085 d.get_primary_btn().attr("disabled", true);
86 if (d.data) {
Rucha Mahabalc3dc5d52022-04-21 08:17:00 +053087 d.data.new = d.get_values().new_value;
Ranjithfddfffd2018-05-05 13:27:26 +053088 add_to_details(frm, d, table);
89 }
90 }
91 });
Rucha Mahabalcf2e6c62022-04-09 13:15:37 +053092
Ranjithfddfffd2018-05-05 13:27:26 +053093 d.fields_dict["property"].df.onchange = () => {
94 let property = d.get_values().property;
95 d.data.fieldname = property;
96 if(!property){return;}
97 frappe.call({
98 method: 'erpnext.hr.utils.get_employee_field_property',
99 args: {employee: frm.doc.employee, fieldname: property},
100 callback: function(r) {
Rucha Mahabal788e0a12022-04-22 17:25:37 +0530101 if (r.message) {
Ranjithfddfffd2018-05-05 13:27:26 +0530102 d.data.current = r.message.value;
103 d.data.property = r.message.label;
Rucha Mahabalc3dc5d52022-04-21 08:17:00 +0530104
Ranjithfddfffd2018-05-05 13:27:26 +0530105 d.set_value('current', r.message.value);
106 render_dynamic_field(d, r.message.datatype, r.message.options, property);
107 d.get_primary_btn().attr('disabled', false);
108 }
109 }
110 });
111 };
112 d.get_primary_btn().attr('disabled', true);
113 d.data = {};
114 d.show();
Ranjith9505ea92018-05-05 14:32:42 +0530115};
Ranjithfddfffd2018-05-05 13:27:26 +0530116
117var render_dynamic_field = function(d, fieldtype, options, fieldname) {
118 d.data.new = null;
119 var dynamic_field = frappe.ui.form.make_control({
120 df: {
121 "fieldtype": fieldtype,
122 "fieldname": fieldname,
Rucha Mahabalc3dc5d52022-04-21 08:17:00 +0530123 "options": options || '',
124 "label": __("New")
Ranjithfddfffd2018-05-05 13:27:26 +0530125 },
Rucha Mahabalc3dc5d52022-04-21 08:17:00 +0530126 parent: d.fields_dict.new_value.wrapper,
Ranjithfddfffd2018-05-05 13:27:26 +0530127 only_input: false
128 });
129 dynamic_field.make_input();
Rucha Mahabalc3dc5d52022-04-21 08:17:00 +0530130 d.replace_field("new_value", dynamic_field.df);
Ranjith9505ea92018-05-05 14:32:42 +0530131};
Ranjithfddfffd2018-05-05 13:27:26 +0530132
133var add_to_details = function(frm, d, table) {
134 let data = d.data;
Rucha Mahabalc3dc5d52022-04-21 08:17:00 +0530135 if (data.fieldname) {
Rucha Mahabal788e0a12022-04-22 17:25:37 +0530136 if (validate_duplicate(frm, table, data.fieldname)) {
137 frappe.show_alert({message: __("Property already added"), indicator: "orange"});
Ranjithfddfffd2018-05-05 13:27:26 +0530138 return false;
139 }
Rucha Mahabal788e0a12022-04-22 17:25:37 +0530140 if (data.current == data.new) {
141 frappe.show_alert({message: __("Nothing to change"), indicator: "orange"});
142 d.get_primary_btn().attr("disabled", false);
Ranjithfddfffd2018-05-05 13:27:26 +0530143 return false;
144 }
145 frm.add_child(table, {
146 fieldname: data.fieldname,
147 property: data.property,
148 current: data.current,
149 new: data.new
150 });
151 frm.refresh_field(table);
Rucha Mahabalcf2e6c62022-04-09 13:15:37 +0530152
153 frm.fields_dict[table].grid.wrapper.find(".grid-add-row").hide();
154
Rucha Mahabalc3dc5d52022-04-21 08:17:00 +0530155 d.fields_dict.new_value.$wrapper.html("");
Ranjithfddfffd2018-05-05 13:27:26 +0530156 d.set_value("property", "");
Rucha Mahabalc3dc5d52022-04-21 08:17:00 +0530157 d.set_value("current", "");
Rucha Mahabal788e0a12022-04-22 17:25:37 +0530158 frappe.show_alert({message: __("Added to details"), indicator: "green"});
Ranjithfddfffd2018-05-05 13:27:26 +0530159 d.data = {};
Rucha Mahabalc3dc5d52022-04-21 08:17:00 +0530160 } else {
Rucha Mahabal788e0a12022-04-22 17:25:37 +0530161 frappe.show_alert({message: __("Value missing"), indicator: "red"});
Ranjithfddfffd2018-05-05 13:27:26 +0530162 }
Ranjith9505ea92018-05-05 14:32:42 +0530163};
Ranjithfddfffd2018-05-05 13:27:26 +0530164
165var validate_duplicate = function(frm, table, fieldname){
166 let duplicate = false;
167 $.each(frm.doc[table], function(i, detail) {
168 if(detail.fieldname === fieldname){
169 duplicate = true;
170 return;
171 }
172 });
173 return duplicate;
Ranjith9505ea92018-05-05 14:32:42 +0530174};