Skip to content

Commit e4be9e4

Browse files
committed
[IMP] hr_appraisal_oca: improve search view
1 parent 613514a commit e4be9e4

2 files changed

Lines changed: 121 additions & 57 deletions

File tree

hr_appraisal_oca/models/hr_appraisal.py

Lines changed: 34 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ class HrAppraisal(models.Model):
4545
"hr.job", string="Job Position", related="employee_id.job_id"
4646
)
4747
department_id = fields.Many2one(
48-
"hr.department", "Department", compute="_compute_department"
48+
"hr.department", string="Department", related="employee_id.department_id"
4949
)
5050
company_id = fields.Many2one(
5151
"res.company",
@@ -66,12 +66,8 @@ class HrAppraisal(models.Model):
6666
required=True,
6767
tracking=True,
6868
)
69-
employee_feedback = fields.Html(
70-
compute="_compute_employee_feedback", store=True, readonly=False
71-
)
72-
manager_feedback = fields.Html(
73-
compute="_compute_manager_feedback", store=True, readonly=False
74-
)
69+
employee_feedback = fields.Html(readonly=False, copy=False)
70+
manager_feedback = fields.Html(readonly=False, copy=False)
7571
employee_feedback_published = fields.Boolean(default=True, tracking=True)
7672
manager_feedback_published = fields.Boolean(default=True, tracking=True)
7773
can_see_employee_publish = fields.Boolean(
@@ -105,8 +101,6 @@ class HrAppraisal(models.Model):
105101
)
106102
tag_ids = fields.Many2many("hr.appraisal.tag", string="Tags")
107103
active = fields.Boolean(default=True)
108-
employee_feedback_template = fields.Html(compute="_compute_feedback_templates")
109-
manager_feedback_template = fields.Html(compute="_compute_feedback_templates")
110104

111105
@api.model
112106
def default_get(self, fields_list):
@@ -125,6 +119,27 @@ def default_get(self, fields_list):
125119
)
126120
if default_template_id:
127121
res["appraisal_template_id"] = default_template_id
122+
tmpl_id = res.get("appraisal_template_id")
123+
if tmpl_id:
124+
data = (
125+
self.env["hr.appraisal.template"]
126+
.browse(tmpl_id)
127+
.read(
128+
[
129+
"appraisal_employee_feedback_template",
130+
"appraisal_manager_feedback_template",
131+
]
132+
)
133+
)
134+
vals = data[0] if data else {}
135+
if not res.get("employee_feedback"):
136+
res["employee_feedback"] = (
137+
vals.get("appraisal_employee_feedback_template") or ""
138+
)
139+
if not res.get("manager_feedback"):
140+
res["manager_feedback"] = (
141+
vals.get("appraisal_manager_feedback_template") or ""
142+
)
128143
return res
129144

130145
@api.model
@@ -189,31 +204,6 @@ def _compute_employee_domain_ids(self):
189204
def _compute_manager_user(self):
190205
self.manager_user_ids = [(6, 0, self.manager_ids.user_id.ids)]
191206

192-
@api.depends("appraisal_template_id")
193-
def _compute_employee_feedback(self):
194-
for appraisal in self.filtered(lambda a: a.state == "1_new"):
195-
appraisal.employee_feedback = appraisal.employee_feedback_template
196-
197-
@api.depends("appraisal_template_id")
198-
def _compute_manager_feedback(self):
199-
for appraisal in self.filtered(lambda a: a.state == "1_new"):
200-
appraisal.manager_feedback = appraisal.manager_feedback_template
201-
202-
@api.depends("appraisal_template_id")
203-
def _compute_feedback_templates(self):
204-
for appraisal in self:
205-
template = appraisal.appraisal_template_id
206-
appraisal.employee_feedback_template = (
207-
template.appraisal_employee_feedback_template
208-
if appraisal.appraisal_template_id
209-
else False
210-
)
211-
appraisal.manager_feedback_template = (
212-
template.appraisal_manager_feedback_template
213-
if appraisal.appraisal_template_id
214-
else False
215-
)
216-
217207
@api.depends("employee_id")
218208
def _compute_manager_ids(self):
219209
for record in self:
@@ -243,13 +233,16 @@ def write(self, vals):
243233
activities.action_feedback()
244234
return super().write(vals)
245235

246-
@api.depends("employee_id")
247-
def _compute_department(self):
248-
for appraisal in self:
249-
if appraisal.employee_id:
250-
appraisal.department_id = appraisal.employee_id.department_id
251-
else:
252-
appraisal.department_id = False
236+
@api.onchange("appraisal_template_id")
237+
def _onchange_appraisal_template_id(self):
238+
for rec in self:
239+
if rec.state != "1_new":
240+
continue
241+
tmpl = rec.appraisal_template_id
242+
if not tmpl:
243+
continue
244+
rec.employee_feedback = tmpl.appraisal_employee_feedback_template or ""
245+
rec.manager_feedback = tmpl.appraisal_manager_feedback_template or ""
253246

254247
@api.depends_context("uid")
255248
@api.depends("state", "employee_id")

hr_appraisal_oca/views/hr_appraisal_form_view.xml

Lines changed: 87 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@
142142
invisible="not employee_feedback_published or state != '1_new'"
143143
>Visible &amp; Editable by Manager </span>
144144
<button
145-
class="btn btn-secondary"
145+
class="btn btn-light"
146146
name="action_publish_employee_feedback"
147147
type="object"
148148
icon="fa-circle-o"
@@ -155,7 +155,7 @@
155155
/>
156156
</button>
157157
<button
158-
class="btn btn-secondary"
158+
class="btn btn-light"
159159
name="action_publish_employee_feedback"
160160
type="object"
161161
icon="fa-check-circle"
@@ -176,7 +176,7 @@
176176
<span
177177
class="o_highlight"
178178
style="width: 100%; text-align: center; text-align: center;"
179-
invisible="can_see_employee_publish or employee_feedback_published or not employee_feedback_template"
179+
invisible="can_see_employee_publish or employee_feedback_published or not appraisal_template_id"
180180
>
181181
<div
182182
style="font-size: 1.5em;"
@@ -187,16 +187,13 @@
187187
</span>
188188
<field
189189
name="employee_feedback"
190-
type="html"
191-
options="{'collaborative': true, 'resizable': false}"
190+
widget="html"
191+
force_save="1"
192+
options="{'collaborative': true, 'resizable': false, 'sanitize': true}"
192193
placeholder="Employee feedback..."
193194
invisible="not employee_feedback_published and not can_see_employee_publish"
194195
readonly="state not in ['1_new', '2_pending'] or not can_see_employee_publish"
195196
/>
196-
<field
197-
name="employee_feedback_template"
198-
invisible="not employee_feedback_published or not can_see_employee_publish"
199-
/>
200197
</div>
201198
</div>
202199
</div>
@@ -258,7 +255,7 @@
258255
<span
259256
class="o_highlight"
260257
style="width: 100%; text-align: center; text-align: center;"
261-
invisible="can_see_manager_publish or manager_feedback_published or not manager_feedback_template"
258+
invisible="can_see_manager_publish or manager_feedback_published or not appraisal_template_id"
262259
>
263260
<div
264261
style="font-size: 1.5em;"
@@ -269,16 +266,13 @@
269266
</span>
270267
<field
271268
name="manager_feedback"
272-
type="html"
273-
options="{'collaborative': true, 'resizable': false}"
269+
widget="html"
270+
force_save="1"
271+
options="{'collaborative': true, 'resizable': false,'sanitize': true}"
274272
placeholder="Manager feedback..."
275273
invisible="not manager_feedback_published and not can_see_manager_publish"
276274
readonly="state not in ['1_new', '2_pending'] or not can_see_manager_publish"
277275
/>
278-
<field
279-
name="manager_feedback_template"
280-
invisible="not manager_feedback_published or not can_see_manager_publish"
281-
/>
282276
</div>
283277
</div>
284278
</div>
@@ -349,11 +343,88 @@
349343
<field name="model">hr.appraisal</field>
350344
<field name="arch" type="xml">
351345
<search>
346+
<field name="employee_id" />
347+
<field name="department_id" />
348+
<field name="job_id" />
352349
<filter
353350
string="Archived"
354351
name="archived"
355352
domain="[('active', '=', False)]"
356353
/>
354+
<filter
355+
string="To Confirm"
356+
name="filter_to_confirm"
357+
domain="[('state', '=', '1_new')]"
358+
/>
359+
<filter
360+
string="Confirmed"
361+
name="filter_confirmed"
362+
domain="[('state', '=', '2_pending')]"
363+
/>
364+
<filter
365+
string="Done"
366+
name="filter_done"
367+
domain="[('state', '=', '3_done')]"
368+
/>
369+
<separator />
370+
<filter
371+
string="My Appraisals"
372+
name="my_appraisals"
373+
domain="[('employee_id.user_id', '=', uid)]"
374+
/>
375+
<separator />
376+
<filter
377+
string="Creation Date"
378+
name="filter_create_date"
379+
date="create_date"
380+
/>
381+
<filter
382+
string="Appraisal Date"
383+
name="filter_date_close"
384+
date="date_close"
385+
/>
386+
<separator />
387+
<group expand="0" string="Group By">
388+
<filter
389+
string="Employee"
390+
name="employee"
391+
icon="fa-user"
392+
domain="[]"
393+
context="{'group_by': 'employee_id',
394+
'no_create': True,
395+
'no_quick_create': True,
396+
'no_create_edit': True
397+
}"
398+
/>
399+
<filter
400+
string="Department"
401+
name="group_by_department_id"
402+
context="{'group_by': 'department_id',
403+
'no_create': True,
404+
'no_quick_create': True,
405+
'no_create_edit': True
406+
}"
407+
/>
408+
<filter
409+
string="Job"
410+
name="groupby_job"
411+
context="{'group_by': 'job_id',
412+
'no_create': True,
413+
'no_quick_create': True,
414+
'no_create_edit': True
415+
}"
416+
/>
417+
<filter name="groupby_state" context="{'group_by': 'state'}" />
418+
<filter
419+
string="Creation Date"
420+
name="groupby_create_date"
421+
context="{'group_by': 'create_date'}"
422+
/>
423+
<filter
424+
name="groupby_date_close"
425+
context="{'group_by': 'date_close'}"
426+
/>
427+
</group>
357428
</search>
358429
</field>
359430
</record>

0 commit comments

Comments
 (0)