diff --git a/apps/ofm/migrations/0013_mroomslot_ticket.py b/apps/ofm/migrations/0013_mroomslot_ticket.py new file mode 100644 index 00000000..765fd55a --- /dev/null +++ b/apps/ofm/migrations/0013_mroomslot_ticket.py @@ -0,0 +1,20 @@ +# Generated by Django 3.2.12 on 2025-09-25 07:41 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('wf', '0003_workflow_view_path'), + ('ofm', '0012_publicity_ticket'), + ] + + operations = [ + migrations.AddField( + model_name='mroomslot', + name='ticket', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='mrooms_ticket', to='wf.ticket', verbose_name='关联会议室'), + ), + ] diff --git a/apps/ofm/models.py b/apps/ofm/models.py index e3e2fdba..3ce5f27a 100644 --- a/apps/ofm/models.py +++ b/apps/ofm/models.py @@ -36,6 +36,8 @@ class MroomSlot(BaseModel): booking = models.ForeignKey(MroomBooking, on_delete=models.CASCADE, related_name="slot_b") mdate = models.DateField('会议日期', db_index=True) slot = models.PositiveIntegerField('时段', help_text='0-47') + ticket = models.ForeignKey('wf.ticket', verbose_name='关联会议室', + on_delete=models.SET_NULL, related_name='mrooms_ticket', null=True, blank=True, db_constraint=False) class Meta: unique_together = ('mroom', 'mdate', 'slot') diff --git a/apps/ofm/services.py b/apps/ofm/services.py index 8a17900d..a781592b 100644 --- a/apps/ofm/services.py +++ b/apps/ofm/services.py @@ -1,7 +1,7 @@ from apps.wf.models import Ticket # TicketFlow, Transition, Workflow, CustomField, State, -from apps.ofm.models import LendingSeal, Vehicle, BorrowRecord, Publicity +from apps.ofm.models import LendingSeal, Vehicle, BorrowRecord, Publicity, MroomSlot from rest_framework.exceptions import ParseError @@ -10,6 +10,20 @@ def seal_submit_validate(ins: LendingSeal): raise ParseError('该日志已提交!') if ins.mtask and ins.mtask.state == LendingSeal.MTASK_STOP: raise ParseError('该任务已停止!') + +def bind_mslot(ticket: Ticket, transition, new_ticket_data: dict): + ins = MroomSlot.objects.get(id=new_ticket_data['t_id']) + ticket_data = ticket.ticket_data + ticket_data.update({ + 't_model': 'mroomslot', + 't_id': ins.id, + }) + ticket.ticket_data = ticket_data + ticket.create_by = ins.create_by + ticket.save() + if ins.ticket is None: + ins.ticket = ticket + ins.save() def bind_lendingseal(ticket: Ticket, transition, new_ticket_data: dict): ins = LendingSeal.objects.get(id=new_ticket_data['t_id'])