From ef7d9c22d40decf96e7805f0c4ab2dbb8811d55b Mon Sep 17 00:00:00 2001 From: yuxianghui <1608204036@qq.com> Date: Tue, 11 Jul 2023 17:40:14 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=A0=B9=E6=8D=AE=E5=B7=A5?= =?UTF-8?q?=E4=BD=9C=E6=97=A5=E5=8E=86=E8=AE=BE=E7=BD=AE=E7=9A=84=E5=B7=A5?= =?UTF-8?q?=E4=BD=9C=E6=97=A5=E5=AD=97=E6=AE=B5=E5=88=9B=E5=BB=BA=E5=B7=A5?= =?UTF-8?q?=E4=BD=9C=E6=97=A5=E5=8E=86=E7=9A=84=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_plan_management/models/calendar_base.py | 83 ++++++++++++++++----- sf_plan_management/views/plan_base_view.xml | 8 +- 2 files changed, 68 insertions(+), 23 deletions(-) diff --git a/sf_plan_management/models/calendar_base.py b/sf_plan_management/models/calendar_base.py index 5d75aea2..3cd41a1e 100644 --- a/sf_plan_management/models/calendar_base.py +++ b/sf_plan_management/models/calendar_base.py @@ -1,3 +1,5 @@ +from datetime import datetime, timedelta + from odoo import models, fields, api import re @@ -88,16 +90,49 @@ class WorkLogSetting(models.Model): else: record.duration = str(round(end_h - st_h + (end_m - st_m) / 60 + 24, 2)) - # @api.model - # def create(self, vals_list): - # """ - # 创建新工作日历设置记录时,同时根据所选的休息日新建工作日历的休息日记录 - # :param vals_list: - # :return: - # """ - # - # - # return super(WorkLogSetting, self).create(vals_list) + @api.onchange('day_off_id') + def _onchange_day_off_id(self): + # 先删除之前创建的工作日历事件记录 + self.env['sf.work.schedule.calendar'].search([ + ('calendar_code', '=', self.code), ('name_id', '=', self.name)]).unlink() + + # 获取当年的一月一号的日期 + year = fields.Datetime.now().year # 2023 + first_day = datetime(year, 1, 1).date() # 2023-01-01 + day_of_week = first_day.strftime("%A") # 星期日 + + # 根据day_of_week,将其设置为起始0,循环周一到周日,按循环顺序设置为0-6 + # 列:{'星期日': 0, '星期一': 1, '星期二': 2, '星期三': 3, '星期四': 4, '星期五': 5, '星期六': 6} + desc = {} + desc_weekdays = ['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期日'] + status = False + ints = 0 + while len(desc) < 7: + if len(desc) != 0: + for week in desc_weekdays: + if len(desc) < 7: + desc.update({week: ints}) + ints += 1 + else: + for week in desc_weekdays: + if status: + desc.update({week: ints}) + ints += 1 + if day_of_week == week: + desc.update({week: ints}) + status = True + ints += 1 + + # 创建工作日历的休息日事件 + # day_off_ids = self.day_off_id.mapped('name') + # for week in day_off_ids: + # num = desc[week] + # while num <= 30: + # target_date = first_day + timedelta(days=num) + # self.env['sf.work.schedule.calendar'].create({'name': '休息日', + # 'name_id': self.name.id, + # 'date_time': target_date}) + # num += 7 class WorkingShift(models.Model): @@ -132,20 +167,24 @@ class DayOff(models.Model): _description = '休息日' name = fields.Selection([ - ('周一', '周一'), - ('周二', '周二'), - ('周三', '周三'), - ('周四', '周四'), - ('周五', '周五'), - ('周六', '周六'), - ('周日', '周日')], '休息日名称') + ('星期一', '星期一'), + ('星期二', '星期二'), + ('星期三', '星期三'), + ('星期四', '星期四'), + ('星期五', '星期五'), + ('星期六', '星期六'), + ('星期日', '星期日')], '休息日名称') class WorkScheduleCalendar(models.Model): _name = 'sf.work.schedule.calendar' - _description = '工作安排日历' + _description = '工作日历' + + name = fields.Selection([('休息日', '休息日'), ('计划停机', '计划停机')], '日历事件名称') + date_time = fields.Date('休息时间') name_id = fields.Many2one('sf.work.log.setting', '工作日历名称') + calendar_code = fields.Char('工作日历编码') day_off_id = fields.Many2many('sf.day.off', string='休息日') scheduled_outage = fields.Char('计划停机') monthly_rest_days = fields.Char('月休息天数', readonly=True) @@ -153,6 +192,10 @@ class WorkScheduleCalendar(models.Model): monthly_planned_downtime = fields.Char('月计划停机时长', readonly=True) annual_planned_downtime = fields.Char('年计划停机时长', readonly=True) - name = fields.Selection([('休息日', '休息日'),('计划停机', '计划停机')], '名称') - date_time = fields.Datetime('休息时间') + @api.onchange('name_id') + def _onchange_name_id(self): + for record in self: + record.calendar_code = record.name_id.code + + diff --git a/sf_plan_management/views/plan_base_view.xml b/sf_plan_management/views/plan_base_view.xml index bc4cd2a4..c07a1b85 100644 --- a/sf_plan_management/views/plan_base_view.xml +++ b/sf_plan_management/views/plan_base_view.xml @@ -16,6 +16,7 @@ + @@ -140,9 +141,9 @@ - + - 工作安排日历 + 工作日历 sf.work.schedule.calendar @@ -154,7 +155,7 @@ - 工作安排日历 + 工作日历 sf.work.schedule.calendar
@@ -166,6 +167,7 @@ +