61 lines
2.7 KiB
Python
61 lines
2.7 KiB
Python
|
# -*- coding: utf-8 -*-
|
||
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||
|
|
||
|
from odoo import fields, models, api
|
||
|
|
||
|
from odoo.addons.hr_homeworking.models.hr_homeworking import DAYS
|
||
|
|
||
|
class HomeworkLocationWizard(models.TransientModel):
|
||
|
_name = 'homework.location.wizard'
|
||
|
_description = 'Set Homework Location Wizard'
|
||
|
|
||
|
work_location_id = fields.Many2one('hr.work.location', required=True, string="Location")
|
||
|
work_location_name = fields.Char(related='work_location_id.name', string="Location name")
|
||
|
work_location_type = fields.Selection(related="work_location_id.location_type")
|
||
|
employee_id = fields.Many2one('hr.employee', default=lambda self: self.env.user.employee_id, required=True, ondelete="cascade")
|
||
|
employee_name = fields.Char(related="employee_id.name")
|
||
|
|
||
|
weekly = fields.Boolean(default=False)
|
||
|
date = fields.Date(string="Date")
|
||
|
day_week_string = fields.Char(compute="_compute_day_week_string")
|
||
|
|
||
|
@api.depends('date')
|
||
|
def _compute_day_week_string(self):
|
||
|
for record in self:
|
||
|
record.day_week_string = record.date.strftime("%A")
|
||
|
|
||
|
def set_employee_location(self):
|
||
|
self.ensure_one()
|
||
|
default_employee_id = self.env.context.get('default_employee_id') or self.env.user.employee_id.id
|
||
|
employee_id = self.env['hr.employee'].browse(self.employee_id.id or default_employee_id)
|
||
|
employee_location = self.env['hr.employee.location'].search([
|
||
|
('date', '=', self.date),
|
||
|
('employee_id', '=', employee_id.id)
|
||
|
])
|
||
|
weekday = self.date.weekday()
|
||
|
default_location_for_current_date = DAYS[weekday]
|
||
|
if self.weekly:
|
||
|
# delete any exceptions on the current date
|
||
|
if employee_location:
|
||
|
employee_location.unlink()
|
||
|
employee_id.write({
|
||
|
default_location_for_current_date: self.work_location_id.id,
|
||
|
})
|
||
|
else:
|
||
|
# check if work_location_id is the same as the default one for that day
|
||
|
if self.work_location_id.id == employee_id[default_location_for_current_date].id:
|
||
|
employee_location.unlink()
|
||
|
# check if worklocation is set for that employee that day
|
||
|
elif employee_location:
|
||
|
employee_location.write({
|
||
|
'date': self.date,
|
||
|
'employee_id': employee_id.id,
|
||
|
'work_location_id': self.work_location_id.id
|
||
|
})
|
||
|
else:
|
||
|
self.env['hr.employee.location'].create({
|
||
|
'date': self.date,
|
||
|
'employee_id': employee_id.id,
|
||
|
'work_location_id': self.work_location_id.id
|
||
|
})
|