114 lines
4.4 KiB
Python
114 lines
4.4 KiB
Python
from odoo import api, fields, models
|
|
from datetime import datetime, timedelta, date
|
|
import logging
|
|
_logger = logging.getLogger(__name__)
|
|
|
|
|
|
class InheritRoomBooking(models.Model):
|
|
_inherit = 'room.booking'
|
|
|
|
def get_no_read_count(self):
|
|
# 1. 计算各类时间参数
|
|
today = date.today() + timedelta(hours=8)
|
|
today_start = datetime.combine(today, datetime.min.time())
|
|
today_end = datetime.combine(today, datetime.max.time())
|
|
domain = [
|
|
('start_datetime', '>=', today_start),
|
|
('start_datetime', '<=', today_end),
|
|
'|',
|
|
('stop_datetime', '=', False),
|
|
('stop_datetime', '>', datetime.now())
|
|
]
|
|
matching_records = self.search(domain)
|
|
count = len(matching_records)
|
|
return count
|
|
|
|
@api.model
|
|
def create(self, vals):
|
|
new_record = super(InheritRoomBooking, self).create(vals)
|
|
employee_list = []
|
|
booking = new_record
|
|
# ① 组织者
|
|
if booking.organizer_id:
|
|
employee_list.append(booking.organizer_id.employee_id.id)
|
|
# ② 记录人
|
|
if booking.user_id.employee_id:
|
|
employee_list.append(booking.user_id.employee_id.id)
|
|
# ③ 出席人员
|
|
if booking.room_users_ids:
|
|
for user in booking.room_users_ids:
|
|
if user.employee_id:
|
|
employee_list.append(user.employee_id.id)
|
|
# ④ 议题传达人
|
|
for line in booking.issue_meeting_line_ids:
|
|
if line.employee_id:
|
|
employee_list.append(line.employee_id.id)
|
|
# ⑤ 列席人员
|
|
for line in booking.issue_meeting_line_ids:
|
|
if line.attendees_ids:
|
|
employee_list.extend(line.attendees_ids.ids)
|
|
# ⑥ 列席角色群组
|
|
for line in booking.issue_meeting_line_ids:
|
|
if line.users_role_group_ids:
|
|
role_group_roles = line.users_role_group_ids.mapped('user_role_ids')
|
|
role_employees = self.env['hr.employee'].search([
|
|
'|',
|
|
('user_role_id', 'in', role_group_roles.ids),
|
|
('user_role_ids', 'in', role_group_roles.ids)
|
|
])
|
|
employee_list.extend(role_employees.ids)
|
|
# ⑦ 主持人
|
|
if booking.host:
|
|
employee_list.append(booking.host.id)
|
|
|
|
# 去重
|
|
employee_list = list(set(employee_list))
|
|
def get_hour_selection(datetime_obj):
|
|
if not datetime_obj:
|
|
return None
|
|
datetime_plus_8h = datetime_obj + timedelta(hours=8)
|
|
hour = datetime_plus_8h.hour
|
|
minute = datetime_plus_8h.minute
|
|
if minute == 0:
|
|
return str(hour)
|
|
elif minute == 15:
|
|
return f"{hour}.25"
|
|
elif minute == 30:
|
|
return f"{hour}.5"
|
|
elif minute == 45:
|
|
return f"{hour}.75"
|
|
else:
|
|
nearest_minute = round(minute / 15) * 15
|
|
if nearest_minute == 60:
|
|
hour += 1
|
|
nearest_minute = 0
|
|
if nearest_minute == 0:
|
|
return str(hour % 24)
|
|
elif nearest_minute == 15:
|
|
return f"{hour % 24}.25"
|
|
elif nearest_minute == 30:
|
|
return f"{hour % 24}.5"
|
|
elif nearest_minute == 45:
|
|
return f"{hour % 24}.75"
|
|
|
|
start_datetime = new_record.start_datetime
|
|
start_date = start_datetime.date()
|
|
request_hour_from = get_hour_selection(new_record.start_datetime)
|
|
request_hour_to = get_hour_selection(new_record.stop_datetime)
|
|
|
|
# ====================== 创建任务 ======================
|
|
task_id = self.env['yuthon.will.task'].sudo().create({
|
|
'name': new_record.name,
|
|
'employee_ids': [(6, 0, employee_list)],
|
|
'task_time_ids': [(6, 0, new_record.task_time_ids.ids)] if new_record.task_time_ids else [],
|
|
'start_date': start_date,
|
|
'request_hour_from': request_hour_from,
|
|
'request_hour_to': request_hour_to,
|
|
'address': new_record.room_id.name,
|
|
'room_booking_id': new_record.id,
|
|
'task_type': 'meet',
|
|
'task_state': 'will',
|
|
})
|
|
task_id._onchange_employee_ids()
|
|
return new_record
|