[IMP] hr_contract*: improve general usability

*:
hr_contract
hr_work_entry
hr_work_entry_contract

This commit changes several views and methods to improve general usability of the payroll application

TaskID #2783013

closes odoo/odoo#89311

Related: odoo/enterprise#26466
Related: odoo/upgrade#3534
Signed-off-by: Yannick Tivisse (yti) <yti@odoo.com>
This commit is contained in:
Dossogne Bertrand
2022-06-29 12:19:03 +02:00
committed by Yannick Tivisse
parent 41cf683f36
commit c5679f0e22
6 changed files with 62 additions and 7 deletions
@@ -139,8 +139,8 @@
<field name="model">hr.contract.history</field>
<field name="arch" type="xml">
<tree string="Contracts"
js_class="hr_contract_history_list"
default_order = 'is_under_contract, date_start desc'
create="false"
edit="false"
delete="false"
duplicate="false"
@@ -0,0 +1,23 @@
/** @odoo-module **/
import ListController from "web.ListController";
import { _lt } from 'web.core';
export const HrContractHistoryListController = ListController.extend({
/**
* @override
*/
_onCreateRecord(ev) {
if (ev) {
ev.stopPropagation();
}
this.do_action({
name: _lt('New Employee'),
type: 'ir.actions.act_window',
res_model: 'hr.employee',
views: [[false, 'form']],
view_mode: 'form',
});
},
});
@@ -0,0 +1,13 @@
/** @odoo-module **/
import ListView from "web.ListView";
import viewRegistry from 'web.view_registry';
import { HrContractHistoryListController } from "./hr_contract_history_list_controller";
export const HrContractHistoryView = ListView.extend({
config: _.extend({}, ListView.prototype.config, {
Controller: HrContractHistoryListController,
}),
});
viewRegistry.add('hr_contract_history_list', HrContractHistoryView);
@@ -61,7 +61,7 @@
<field name="date_stop" attrs="{'readonly': [('state', '!=', 'draft')]}" />
<label for="duration" string="Period"/>
<div class="o_row">
<field name="duration" nolabel="1" attrs="{'readonly': [('state', '!=', 'draft')]}" /><span class="ml8">Hours</span>
<field name="duration" nolabel="1" widget="float_time" attrs="{'readonly': [('state', '!=', 'draft')]}" /><span class="ml8">Hours</span>
</div>
<field name="company_id" invisible="1"/>
</group>
@@ -78,7 +78,7 @@
<tree multi_edit="1" sample="1">
<field name="name"/>
<field name="work_entry_type_id" options="{'no_create': True, 'no_open': True}"/>
<field name="duration" readonly="1"/>
<field name="duration" widget="float_time" readonly="1"/>
<field name="state"/>
<field name="date_start" string="Beginning" readonly="1"/>
<field name="date_stop" string="End" readonly="1"/>
@@ -86,6 +86,16 @@
</field>
</record>
<record id="hr_work_entry_view_pivot" model="ir.ui.view">
<field name="name">hr.work.entry.pivot</field>
<field name="model">hr.work.entry</field>
<field name="arch" type="xml">
<pivot string="Work Entries" sample="1">
<field name="duration" widget="float_time" readonly="1"/>
</pivot>
</field>
</record>
<record id="hr_work_entry_view_search" model="ir.ui.view">
<field name="name">hr.work.entry.filter</field>
<field name="model">hr.work.entry</field>
@@ -67,7 +67,7 @@ odoo.define('hr_work_entry_contract.WorkEntryControllerMixin', function(require)
/*
Private
*/
_renderWorkEntryButtons: function() {
_renderWorkEntryButtons: function() {
return $('<span>').append(QWeb.render('hr_work_entry.work_entry_button', {
button_text: _t("Regenerate Work Entries"),
event_class: 'btn-regenerate-work-entries',
@@ -88,11 +88,15 @@ odoo.define('hr_work_entry_contract.WorkEntryControllerMixin', function(require)
},
_regenerateWorkEntries: function () {
const all_rows = Object.values(this.model.allRows);
const only_employee = all_rows.length === 1 ? all_rows[0].resId : null;
this.do_action('hr_work_entry_contract.hr_work_entry_regeneration_wizard_action', {
additional_context: {
default_employee_id: only_employee,
date_start: time.date_to_str(this.firstDay),
date_end: time.date_to_str(this.lastDay),
},
on_close: this.reload.bind(this),
});
},
@@ -4,6 +4,7 @@
from odoo import api, fields, models, _
from odoo.exceptions import ValidationError
from dateutil.relativedelta import relativedelta
class HrWorkEntryRegenerationWizard(models.TransientModel):
_name = 'hr.work.entry.regeneration.wizard'
@@ -14,13 +15,19 @@ class HrWorkEntryRegenerationWizard(models.TransientModel):
latest_available_date = fields.Date('Latest date', compute='_compute_latest_available_date')
latest_available_date_message = fields.Char(readonly=True, store=False, default='')
date_from = fields.Date('From', required=True, default=lambda self: self.env.context.get('date_start'))
date_to = fields.Date('To', required=True, default=lambda self: self.env.context.get('date_end'))
date_to = fields.Date('To', required=True, compute='_compute_date_to', store=True,
readonly=False, default=lambda self: self.env.context.get('date_end'))
employee_id = fields.Many2one('hr.employee', 'Employee', required=True)
validated_work_entry_ids = fields.Many2many('hr.work.entry', string='Work Entries Within Interval',
compute='_compute_validated_work_entry_ids')
search_criteria_completed = fields.Boolean(compute='_compute_search_criteria_completed')
valid = fields.Boolean(compute='_compute_valid')
@api.depends('date_from')
def _compute_date_to(self):
for wizard in self:
wizard.date_to = wizard.date_from + relativedelta(months=+1, day=1, days=-1)
@api.depends('employee_id')
def _compute_earliest_available_date(self):
for wizard in self:
@@ -104,5 +111,3 @@ class HrWorkEntryRegenerationWizard(models.TransientModel):
write_vals = {field: False for field in self._work_entry_fields_to_nullify()}
work_entries.write(write_vals)
self.employee_id.generate_work_entries(date_from, date_to, True)
action = self.env["ir.actions.actions"]._for_xml_id('hr_work_entry.hr_work_entry_action')
return action