添加功能

This commit is contained in:
李鹏宇
2026-08-06 15:56:40 +08:00
parent 4c95b70784
commit 0a73f646e3
+36 -29
View File
@@ -164,51 +164,58 @@ class RoomBooking(models.Model):
"""两个时间范围是否有重叠"""
return b1_start < b2_stop and b2_start < b1_stop
# 班子会:党的 party_char 非空(党已上会),班子与党的时间不能重叠
if is_class_meeting:
def _check_time_order_and_overlap(target_bookings, target_type_name):
"""
检查前置会议是否早于当前会议,且时间不重叠
target_bookings: 前置会议记录集
target_type_name: 前置会议类型名称(用于错误提示)
"""
for tb in target_bookings:
if not (tb.start_datetime and tb.stop_datetime):
continue
# 前置会议必须早于当前会议
if tb.start_datetime >= record.start_datetime:
raise UserError(
f'议题“{issue.name}”的{target_type_name}会议时间({tb.start_datetime} ~ {tb.stop_datetime})'
f'必须早于{record.meeting_type_id.name}会议时间({record.start_datetime} ~ {record.stop_datetime})!'
)
# 时间不能重叠
if _has_overlap(record.start_datetime, record.stop_datetime,
tb.start_datetime, tb.stop_datetime):
raise UserError(
f'议题“{issue.name}”的{target_type_name}会议时间({tb.start_datetime} ~ {tb.stop_datetime})'
f'与{record.meeting_type_id.name}会议时间({record.start_datetime} ~ {record.stop_datetime})有重叠!'
)
# ========== 班子会:党的 party_char 非空(党已上会),班子必须晚于党,且时间不能重叠 ==========
if is_class_meeting and line.issue_library_id.is_party == True:
clean_party = re.sub(r'<[^>]+>', '', issue.party_char or '').strip()
if clean_party:
party_bookings = other_bookings.filtered(
lambda b: b.meeting_type_id and '党' in str(b.meeting_type_id.name)
and b.start_datetime and b.stop_datetime
and b.start_datetime and b.stop_datetime
)
for pb in party_bookings:
if _has_overlap(record.start_datetime, record.stop_datetime,
pb.start_datetime, pb.stop_datetime):
raise UserError(
f'议题“{issue.name}”的党会议时间({pb.start_datetime} ~ {pb.stop_datetime})'
f'与班子会议时间({record.start_datetime} ~ {record.stop_datetime})有重叠'
)
_check_time_order_and_overlap(party_bookings, '党')
# 董事会:如果班子已上会,董事与班子的时间不能重叠;否则如果党已上会,董事与党的时间不能重叠
if is_boss_meeting:
# ========== 董事会:如果班子已上会,董事必须晚于班子;否则如果党已上会,董事必须晚于党 ==========
if is_boss_meeting and line.issue_library_id.is_class == True:
clean_class = re.sub(r'<[^>]+>', '', issue.class_char or '').strip()
if clean_class:
class_bookings = other_bookings.filtered(
lambda b: b.meeting_type_id and '班子' in str(b.meeting_type_id.name)
and b.start_datetime and b.stop_datetime
and b.start_datetime and b.stop_datetime
)
for cb in class_bookings:
if _has_overlap(record.start_datetime, record.stop_datetime,
cb.start_datetime, cb.stop_datetime):
raise UserError(
f'议题“{issue.name}”的班子会议时间({cb.start_datetime} ~ {cb.stop_datetime})'
f'与董事会议时间({record.start_datetime} ~ {record.stop_datetime})有重叠'
)
_check_time_order_and_overlap(class_bookings, '班子')
else:
clean_party = re.sub(r'<[^>]+>', '', issue.party_char or '').strip()
if clean_party:
if clean_party and line.issue_library_id.is_party == True:
party_bookings = other_bookings.filtered(
lambda b: b.meeting_type_id and '党' in str(b.meeting_type_id.name)
and b.start_datetime and b.stop_datetime
and b.start_datetime and b.stop_datetime
)
for pb in party_bookings:
if _has_overlap(record.start_datetime, record.stop_datetime,
pb.start_datetime, pb.stop_datetime):
raise UserError(
f'议题“{issue.name}”的党会议时间({pb.start_datetime} ~ {pb.stop_datetime})'
f'与董事会议时间({record.start_datetime} ~ {record.stop_datetime})有重叠'
)
_check_time_order_and_overlap(party_bookings, '党')
@api.depends_context('uid', 'company')
@api.depends('company_id')