Files
gzth/yuthon_will_task/models/inherit_room_booking.py
T
2026-03-09 21:24:32 +08:00

83 lines
3.1 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):
task_time_ids = self.env['yuthon.task.time'].search([('name', '=', '30分钟')])
new_record = super(InheritRoomBooking, self).create(vals)
employee_list = []
if new_record.room_users_ids:
for user_id in new_record.room_users_ids:
if user_id.employee_id:
employee_list.append(user_id.employee_id.id)
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"
if task_time_ids:
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)
self.env['yuthon.will.task'].sudo().create({
'name': new_record.name,
'users_ids': [(6, 0, new_record.room_users_ids.ids)],
'employee_ids': [(6, 0, employee_list)],
'task_time_ids': [(6, 0, task_time_ids.ids)],
'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',
})
return new_record