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