[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:
committed by
Yannick Tivisse
parent
41cf683f36
commit
c5679f0e22
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user