# Part of the gem360 onboarding. See LICENSE / project docs for details. from dateutil.relativedelta import relativedelta from odoo import api, fields, models class HrVersion(models.Model): """GemBG-Besoldungsfelder auf der Payroll-Version des Mitarbeiters. § 66 Abs 2 Bgld. GemBG 2014: Die Vorrückung erfolgt mit dem ersten Tag jenes Monats, der auf die Vollendung weiterer vier Jahre des Besoldungsdienstalters folgt (Vorrückungstermin); für bestimmte Gruppen zwei Jahre (§ 150c Abs 2, § 150d ff). Überleitungsfälle (§§ 157a ff) können einen einmalig vorgezogenen Termin haben — daher ist der berechnete Termin manuell überschreibbar. """ _inherit = 'hr.version' entlohnungsgruppe_id = fields.Many2one( 'gemeinde.payroll.entlohnungsgruppe', index=True, groups="hr_payroll.group_hr_payroll_user", tracking=True) entlohnungsstufe = fields.Integer( groups="hr_payroll.group_hr_payroll_user", tracking=True) besoldungsdienstalter = fields.Date( string='Besoldungsdienstalter (ab)', groups="hr_payroll.group_hr_payroll_user", tracking=True) vorrueckungstermin = fields.Date( compute='_compute_vorrueckungstermin', store=True, readonly=False, groups="hr_payroll.group_hr_payroll_user", tracking=True, help="Vorschlag nach § 66 Abs 2 GemBG (BDA + Vorrückungszeitraum); " "bei Überleitungsfällen manuell korrigierbar.") @api.depends('entlohnungsgruppe_id', 'besoldungsdienstalter') def _compute_vorrueckungstermin(self): for version in self: bda = version.besoldungsdienstalter gruppe = version.entlohnungsgruppe_id if not bda or not gruppe: version.vorrueckungstermin = False continue period = gruppe.vorrueckungszeitraum_jahre or 4 today = fields.Date.context_today(version) elapsed_years = relativedelta(today, bda).years next_maturity = bda + relativedelta( years=(elapsed_years // period + 1) * period) version.vorrueckungstermin = ( fields.Date.end_of(next_maturity, 'month') + relativedelta(days=1) ) def _get_katalog_entgelt(self, datum=None): """Katalog-Position (Monatsentgelt) der Version zum Stichtag.""" self.ensure_one() return self.entlohnungsgruppe_id._get_entgelt( self.entlohnungsstufe, datum) class HrEmployee(models.Model): _inherit = 'hr.employee' entlohnungsgruppe_id = fields.Many2one( related="version_id.entlohnungsgruppe_id", inherited=True, readonly=False, groups="hr_payroll.group_hr_payroll_user") entlohnungsstufe = fields.Integer( related="version_id.entlohnungsstufe", inherited=True, readonly=False, groups="hr_payroll.group_hr_payroll_user") besoldungsdienstalter = fields.Date( related="version_id.besoldungsdienstalter", inherited=True, readonly=False, groups="hr_payroll.group_hr_payroll_user") vorrueckungstermin = fields.Date( related="version_id.vorrueckungstermin", inherited=True, readonly=False, groups="hr_payroll.group_hr_payroll_user")