blob: b11683347c20e78ac76f29f322b4ddf30b618a14 [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 Mahabalc3dc5d52022-04-21 08:17:00 +053013 if (frm.doc.__islocal) {
14 if (frm.doctype == "Employee Promotion") {
15 frm.clear_table("promotion_details");
16 } else if (frm.doctype == "Employee Transfer") {
17 frm.clear_table("transfer_details");
18 }
19 }
20 },
21
Ranjithfddfffd2018-05-05 13:27:26 +053022 refresh: function(frm) {
Rucha Mahabalcf2e6c62022-04-09 13:15:37 +053023 let table;
24 if (frm.doctype == "Employee Promotion") {
Ranjith9505ea92018-05-05 14:32:42 +053025 table = "promotion_details";
Rucha Mahabalcf2e6c62022-04-09 13:15:37 +053026 } else if (frm.doctype == "Employee Transfer") {
Ranjith86b81e92018-05-05 16:49:51 +053027 table = "transfer_details";
Ranjith9505ea92018-05-05 14:32:42 +053028 }
Rucha Mahabalcf2e6c62022-04-09 13:15:37 +053029
30 if (!table)
31 return;
32
33 frm.fields_dict[table].grid.wrapper.find(".grid-add-row").hide();
Rucha Mahabal788e0a12022-04-22 17:25:37 +053034 frm.events.setup_employee_property_button(frm, table);
Rucha Mahabalcf2e6c62022-04-09 13:15:37 +053035 },
36
37 setup_employee_property_button: function(frm, table) {
38 frm.fields_dict[table].grid.add_custom_button(__("Add Employee Property"), () => {
39 if (!frm.doc.employee) {
40 frappe.msgprint(__("Please select Employee first."));
Ranjithfddfffd2018-05-05 13:27:26 +053041 return;
42 }
Rucha Mahabalcf2e6c62022-04-09 13:15:37 +053043
44 const allowed_fields = [];
Rucha Mahabalcfa4dfe2022-04-22 20:20:04 +053045 const exclude_fields = ["naming_series", "employee", "first_name", "middle_name", "last_name", "marital_status", "ctc",
Rucha Mahabalcf2e6c62022-04-09 13:15:37 +053046 "employee_name", "status", "image", "gender", "date_of_birth", "date_of_joining", "lft", "rgt", "old_parent"];
47
48 const exclude_field_types = ["HTML", "Section Break", "Column Break", "Button", "Read Only", "Tab Break", "Table"];
49
50 frappe.model.with_doctype("Employee", () => {
51 const field_label_map = {};
52 frappe.get_meta("Employee").fields.forEach(d => {
53 field_label_map[d.fieldname] = __(d.label) + ` (${d.fieldname})`;
54 if (!in_list(exclude_field_types, d.fieldtype) && !in_list(exclude_fields, d.fieldname)) {
55 allowed_fields.push({
56 label: field_label_map[d.fieldname],
57 value: d.fieldname,
58 });
Ranjithfddfffd2018-05-05 13:27:26 +053059 }
Rucha Mahabalcf2e6c62022-04-09 13:15:37 +053060 });
61
Rucha Mahabal788e0a12022-04-22 17:25:37 +053062 show_dialog(frm, table, allowed_fields);
Ranjithfddfffd2018-05-05 13:27:26 +053063 });
64 });
65 }
66});
67
68var show_dialog = function(frm, table, field_labels) {
69 var d = new frappe.ui.Dialog({
70 title: "Update Property",
71 fields: [
Rucha Mahabalcf2e6c62022-04-09 13:15:37 +053072 {fieldname: "property", label: __("Select Property"), fieldtype: "Autocomplete", options: field_labels},
Rucha Mahabalc3dc5d52022-04-21 08:17:00 +053073 {fieldname: "current", fieldtype: "Data", label: __("Current"), read_only: true},
74 {fieldname: "new_value", fieldtype: "Data", label: __("New")}
Ranjithfddfffd2018-05-05 13:27:26 +053075 ],
Rucha Mahabalcf2e6c62022-04-09 13:15:37 +053076 primary_action_label: __("Add to Details"),
Ranjithfddfffd2018-05-05 13:27:26 +053077 primary_action: () => {
Rucha Mahabalcf2e6c62022-04-09 13:15:37 +053078 d.get_primary_btn().attr("disabled", true);
79 if (d.data) {
Rucha Mahabalc3dc5d52022-04-21 08:17:00 +053080 d.data.new = d.get_values().new_value;
Ranjithfddfffd2018-05-05 13:27:26 +053081 add_to_details(frm, d, table);
82 }
83 }
84 });
Rucha Mahabalcf2e6c62022-04-09 13:15:37 +053085
Ranjithfddfffd2018-05-05 13:27:26 +053086 d.fields_dict["property"].df.onchange = () => {
87 let property = d.get_values().property;
88 d.data.fieldname = property;
89 if(!property){return;}
90 frappe.call({
91 method: 'erpnext.hr.utils.get_employee_field_property',
92 args: {employee: frm.doc.employee, fieldname: property},
93 callback: function(r) {
Rucha Mahabal788e0a12022-04-22 17:25:37 +053094 if (r.message) {
Ranjithfddfffd2018-05-05 13:27:26 +053095 d.data.current = r.message.value;
96 d.data.property = r.message.label;
Rucha Mahabalc3dc5d52022-04-21 08:17:00 +053097
Ranjithfddfffd2018-05-05 13:27:26 +053098 d.set_value('current', r.message.value);
99 render_dynamic_field(d, r.message.datatype, r.message.options, property);
100 d.get_primary_btn().attr('disabled', false);
101 }
102 }
103 });
104 };
105 d.get_primary_btn().attr('disabled', true);
106 d.data = {};
107 d.show();
Ranjith9505ea92018-05-05 14:32:42 +0530108};
Ranjithfddfffd2018-05-05 13:27:26 +0530109
110var render_dynamic_field = function(d, fieldtype, options, fieldname) {
111 d.data.new = null;
112 var dynamic_field = frappe.ui.form.make_control({
113 df: {
114 "fieldtype": fieldtype,
115 "fieldname": fieldname,
Rucha Mahabalc3dc5d52022-04-21 08:17:00 +0530116 "options": options || '',
117 "label": __("New")
Ranjithfddfffd2018-05-05 13:27:26 +0530118 },
Rucha Mahabalc3dc5d52022-04-21 08:17:00 +0530119 parent: d.fields_dict.new_value.wrapper,
Ranjithfddfffd2018-05-05 13:27:26 +0530120 only_input: false
121 });
122 dynamic_field.make_input();
Rucha Mahabalc3dc5d52022-04-21 08:17:00 +0530123 d.replace_field("new_value", dynamic_field.df);
Ranjith9505ea92018-05-05 14:32:42 +0530124};
Ranjithfddfffd2018-05-05 13:27:26 +0530125
126var add_to_details = function(frm, d, table) {
127 let data = d.data;
Rucha Mahabalc3dc5d52022-04-21 08:17:00 +0530128 if (data.fieldname) {
Rucha Mahabal788e0a12022-04-22 17:25:37 +0530129 if (validate_duplicate(frm, table, data.fieldname)) {
130 frappe.show_alert({message: __("Property already added"), indicator: "orange"});
Ranjithfddfffd2018-05-05 13:27:26 +0530131 return false;
132 }
Rucha Mahabal788e0a12022-04-22 17:25:37 +0530133 if (data.current == data.new) {
134 frappe.show_alert({message: __("Nothing to change"), indicator: "orange"});
135 d.get_primary_btn().attr("disabled", false);
Ranjithfddfffd2018-05-05 13:27:26 +0530136 return false;
137 }
138 frm.add_child(table, {
139 fieldname: data.fieldname,
140 property: data.property,
141 current: data.current,
142 new: data.new
143 });
144 frm.refresh_field(table);
Rucha Mahabalcf2e6c62022-04-09 13:15:37 +0530145
146 frm.fields_dict[table].grid.wrapper.find(".grid-add-row").hide();
147
Rucha Mahabalc3dc5d52022-04-21 08:17:00 +0530148 d.fields_dict.new_value.$wrapper.html("");
Ranjithfddfffd2018-05-05 13:27:26 +0530149 d.set_value("property", "");
Rucha Mahabalc3dc5d52022-04-21 08:17:00 +0530150 d.set_value("current", "");
Rucha Mahabal788e0a12022-04-22 17:25:37 +0530151 frappe.show_alert({message: __("Added to details"), indicator: "green"});
Ranjithfddfffd2018-05-05 13:27:26 +0530152 d.data = {};
Rucha Mahabalc3dc5d52022-04-21 08:17:00 +0530153 } else {
Rucha Mahabal788e0a12022-04-22 17:25:37 +0530154 frappe.show_alert({message: __("Value missing"), indicator: "red"});
Ranjithfddfffd2018-05-05 13:27:26 +0530155 }
Ranjith9505ea92018-05-05 14:32:42 +0530156};
Ranjithfddfffd2018-05-05 13:27:26 +0530157
158var validate_duplicate = function(frm, table, fieldname){
159 let duplicate = false;
160 $.each(frm.doc[table], function(i, detail) {
161 if(detail.fieldname === fieldname){
162 duplicate = true;
163 return;
164 }
165 });
166 return duplicate;
Ranjith9505ea92018-05-05 14:32:42 +0530167};