Files
gzth/yuthon_will_task/models/inherit_room_booking.py
T
2026-03-11 20:36:07 +08:00

88 lines
3.2 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 = []
if new_record.room_users_ids:
for user in new_record.room_users_ids:
if user.employee_id:
employee_list.append(user.employee_id.id)
if new_record.recorder_ids:
employee_list.extend(new_record.recorder_ids.ids)
if new_record.host:
employee_list.append(new_record.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