From fb87fead4f642de9c6e923e1ab4619b19358dbdc Mon Sep 17 00:00:00 2001 From: TianyangZhang Date: Tue, 18 Nov 2025 11:19:22 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20ofm=20=E4=BF=AE=E6=94=B9=20ofm=20?= =?UTF-8?q?=E5=AD=97=E6=AE=B5=20=E5=B9=B6=E9=87=8D=E6=96=B0=E7=94=9F?= =?UTF-8?q?=E6=88=90=E8=BF=81=E7=A7=BB=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/ofm/filters.py | 4 +- apps/ofm/migrations/0001_initial.py | 180 +++++++++++++++++- apps/ofm/migrations/0002_lendingseal.py | 48 ----- .../0003_remove_lendingseal_submit_user.py | 17 -- apps/ofm/migrations/0004_vehicle.py | 42 ---- apps/ofm/migrations/0005_vehicle_via.py | 18 -- .../migrations/0006_vehicle_belong_dept.py | 20 -- .../ofm/migrations/0007_auto_20250911_1441.py | 67 ------- .../0008_remove_borrowrecord_borrow_user.py | 17 -- .../migrations/0009_borrowrecord_ticket.py | 20 -- .../ofm/migrations/0010_auto_20250919_0921.py | 53 ------ .../ofm/migrations/0011_auto_20250924_1359.py | 27 --- apps/ofm/migrations/0012_publicity_ticket.py | 20 -- apps/ofm/migrations/0013_mroomslot_ticket.py | 20 -- .../ofm/migrations/0014_auto_20250928_1023.py | 33 ---- .../migrations/0015_alter_vehicle_end_km.py | 18 -- .../ofm/migrations/0016_auto_20250929_1551.py | 35 ---- .../ofm/migrations/0017_auto_20251010_1631.py | 23 --- .../ofm/migrations/0018_auto_20251011_0922.py | 33 ---- .../ofm/migrations/0019_auto_20251011_1128.py | 28 --- .../ofm/migrations/0020_auto_20251011_1427.py | 28 --- .../0021_alter_publicity_publicity_opinion.py | 18 -- .../0022_alter_mroomslot_unique_together.py | 17 -- apps/ofm/migrations/0023_patentinfo.py | 49 ----- .../ofm/migrations/0024_auto_20251022_1005.py | 95 --------- .../migrations/0025_alter_patentinfo_area.py | 18 -- apps/ofm/migrations/0026_paperse.py | 41 ---- .../ofm/migrations/0027_auto_20251029_1426.py | 44 ----- .../0028_papersecret_belong_dept.py | 20 -- .../ofm/migrations/0029_auto_20251103_0939.py | 35 ---- .../ofm/migrations/0030_auto_20251105_1715.py | 23 --- .../ofm/migrations/0031_auto_20251106_1608.py | 28 --- .../ofm/migrations/0032_auto_20251117_1615.py | 70 ------- apps/ofm/models.py | 6 +- apps/ofm/serializers.py | 23 +-- apps/ofm/urls.py | 6 +- apps/ofm/views.py | 139 ++------------ 37 files changed, 209 insertions(+), 1174 deletions(-) delete mode 100644 apps/ofm/migrations/0002_lendingseal.py delete mode 100644 apps/ofm/migrations/0003_remove_lendingseal_submit_user.py delete mode 100644 apps/ofm/migrations/0004_vehicle.py delete mode 100644 apps/ofm/migrations/0005_vehicle_via.py delete mode 100644 apps/ofm/migrations/0006_vehicle_belong_dept.py delete mode 100644 apps/ofm/migrations/0007_auto_20250911_1441.py delete mode 100644 apps/ofm/migrations/0008_remove_borrowrecord_borrow_user.py delete mode 100644 apps/ofm/migrations/0009_borrowrecord_ticket.py delete mode 100644 apps/ofm/migrations/0010_auto_20250919_0921.py delete mode 100644 apps/ofm/migrations/0011_auto_20250924_1359.py delete mode 100644 apps/ofm/migrations/0012_publicity_ticket.py delete mode 100644 apps/ofm/migrations/0013_mroomslot_ticket.py delete mode 100644 apps/ofm/migrations/0014_auto_20250928_1023.py delete mode 100644 apps/ofm/migrations/0015_alter_vehicle_end_km.py delete mode 100644 apps/ofm/migrations/0016_auto_20250929_1551.py delete mode 100644 apps/ofm/migrations/0017_auto_20251010_1631.py delete mode 100644 apps/ofm/migrations/0018_auto_20251011_0922.py delete mode 100644 apps/ofm/migrations/0019_auto_20251011_1128.py delete mode 100644 apps/ofm/migrations/0020_auto_20251011_1427.py delete mode 100644 apps/ofm/migrations/0021_alter_publicity_publicity_opinion.py delete mode 100644 apps/ofm/migrations/0022_alter_mroomslot_unique_together.py delete mode 100644 apps/ofm/migrations/0023_patentinfo.py delete mode 100644 apps/ofm/migrations/0024_auto_20251022_1005.py delete mode 100644 apps/ofm/migrations/0025_alter_patentinfo_area.py delete mode 100644 apps/ofm/migrations/0026_paperse.py delete mode 100644 apps/ofm/migrations/0027_auto_20251029_1426.py delete mode 100644 apps/ofm/migrations/0028_papersecret_belong_dept.py delete mode 100644 apps/ofm/migrations/0029_auto_20251103_0939.py delete mode 100644 apps/ofm/migrations/0030_auto_20251105_1715.py delete mode 100644 apps/ofm/migrations/0031_auto_20251106_1608.py delete mode 100644 apps/ofm/migrations/0032_auto_20251117_1615.py diff --git a/apps/ofm/filters.py b/apps/ofm/filters.py index 0caa8c47..71b00550 100644 --- a/apps/ofm/filters.py +++ b/apps/ofm/filters.py @@ -1,5 +1,5 @@ from django_filters import rest_framework as filters -from apps.ofm.models import MroomBooking, BorrowRecord, Vehicle +from apps.ofm.models import MroomBooking, BorrowRecord, VehicleUse from .models import LendingSeal from apps.utils.filters import MyJsonListFilter @@ -17,7 +17,7 @@ class MroomBookingFilterset(filters.FilterSet): class VehicleFilterset(filters.FilterSet): class Meta: - model = Vehicle + model = VehicleUse fields = { 'slot_vehicle__vehreg': ['exact', 'in'], 'slot_vehicle__vdate': ['exact', 'gte', 'lte'], diff --git a/apps/ofm/migrations/0001_initial.py b/apps/ofm/migrations/0001_initial.py index 84ca7469..47a705ee 100644 --- a/apps/ofm/migrations/0001_initial.py +++ b/apps/ofm/migrations/0001_initial.py @@ -1,6 +1,7 @@ -# Generated by Django 3.2.12 on 2025-06-25 09:29 +# Generated by Django 3.2.12 on 2025-11-18 03:08 from django.conf import settings +import django.core.validators from django.db import migrations, models import django.db.models.deletion import django.utils.timezone @@ -11,7 +12,9 @@ class Migration(migrations.Migration): initial = True dependencies = [ + ('system', '0006_auto_20241213_1249'), migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('wf', '0005_workflow_cate'), ] operations = [ @@ -40,13 +43,114 @@ class Migration(migrations.Migration): ('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')), ('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')), ('title', models.CharField(max_length=100, verbose_name='会议主题')), + ('note', models.TextField(blank=True, null=True, verbose_name='备注')), + ('participant_count', models.PositiveIntegerField(default=0, verbose_name='参会人数')), + ('key_participants', models.TextField(blank=True, null=True, verbose_name='主要参会领导')), + ('belong_dept', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='mroombooking_belong_dept', to='system.dept', verbose_name='所属部门')), ('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='mroombooking_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')), + ('ticket', 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='关联会议室')), ('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='mroombooking_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')), ], options={ 'abstract': False, }, ), + migrations.CreateModel( + name='VehicleReg', + fields=[ + ('id', models.CharField(editable=False, help_text='主键ID', max_length=20, primary_key=True, serialize=False, verbose_name='主键ID')), + ('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')), + ('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')), + ('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')), + ('name', models.CharField(max_length=50, verbose_name='车辆名称')), + ('brand', models.CharField(blank=True, max_length=50, null=True, verbose_name='品牌')), + ('plate', models.CharField(max_length=50, verbose_name='车牌号')), + ('km', models.PositiveIntegerField(blank=True, null=True, verbose_name='行驶里程')), + ('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='vehiclereg_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')), + ('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='vehiclereg_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')), + ], + options={ + 'abstract': False, + }, + ), + migrations.CreateModel( + name='VehicleUse', + fields=[ + ('id', models.CharField(editable=False, help_text='主键ID', max_length=20, primary_key=True, serialize=False, verbose_name='主键ID')), + ('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')), + ('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')), + ('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')), + ('location', models.CharField(blank=True, max_length=100, null=True, verbose_name='出发地点')), + ('via', models.CharField(blank=True, max_length=100, null=True, verbose_name='途经地点')), + ('destination', models.CharField(blank=True, max_length=100, null=True, verbose_name='到达地点')), + ('start_km', models.PositiveIntegerField(verbose_name='出发公里数')), + ('end_km', models.PositiveIntegerField(blank=True, null=True, verbose_name='归还公里数')), + ('actual_km', models.PositiveIntegerField(editable=False, verbose_name='实际行驶公里数')), + ('is_city', models.BooleanField(default=True, verbose_name='是否市内用车')), + ('reason', models.CharField(max_length=100, verbose_name='用车事由')), + ('reception', models.CharField(blank=True, max_length=50, null=True, verbose_name='接待人')), + ('belong_dept', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='vehicleuse_belong_dept', to='system.dept', verbose_name='所属部门')), + ('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='vehicleuse_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')), + ('ticket', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='vehicle_ticket', to='wf.ticket', verbose_name='关联工单')), + ('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='vehicleuse_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')), + ('vehiclereg', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='vehicle_record', to='ofm.vehiclereg')), + ], + options={ + 'abstract': False, + }, + ), + migrations.CreateModel( + name='VehicleSlot', + fields=[ + ('id', models.CharField(editable=False, help_text='主键ID', max_length=20, primary_key=True, serialize=False, verbose_name='主键ID')), + ('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')), + ('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')), + ('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')), + ('vdate', models.DateField(db_index=True, verbose_name='使用日期')), + ('slot', models.PositiveIntegerField(help_text='0-47', verbose_name='时段')), + ('is_inuse', models.BooleanField(default=True, verbose_name='是否占用')), + ('vehicle_use', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='slot_vehicle', to='ofm.vehicleuse')), + ('vehreg', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='slot_record', to='ofm.vehiclereg')), + ], + options={ + 'abstract': False, + }, + ), + migrations.CreateModel( + name='Publicity', + fields=[ + ('id', models.CharField(editable=False, help_text='主键ID', max_length=20, primary_key=True, serialize=False, verbose_name='主键ID')), + ('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')), + ('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')), + ('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')), + ('number', models.CharField(blank=True, max_length=50, null=True, verbose_name='记录编号')), + ('title', models.CharField(max_length=100, verbose_name='送审稿件标题')), + ('participants', models.CharField(max_length=50, verbose_name='所有撰稿人')), + ('pub_dept', models.CharField(blank=True, max_length=50, null=True, verbose_name='部室/研究院')), + ('pfile', models.CharField(blank=True, max_length=100, null=True, verbose_name='稿件路径')), + ('level', models.JSONField(default=list, help_text="['重要', '一般', '非涉密']", verbose_name='涉密等级')), + ('content', models.JSONField(default=list, help_text="['武器装备科研生产综合事项', '其它']", verbose_name='稿件内容涉及')), + ('other_content', models.CharField(blank=True, max_length=100, null=True, verbose_name='其它内容')), + ('report_purpose', models.CharField(blank=True, max_length=100, null=True, verbose_name='宣传报道目的')), + ('channel', models.JSONField(default=list, help_text="['互联网', '信息平台', '官微', '公开发行物', '其它']", verbose_name='发布渠道')), + ('other_channel', models.CharField(blank=True, max_length=50, null=True, verbose_name='其它渠道')), + ('report_name', models.CharField(blank=True, max_length=50, null=True, verbose_name='报道名称')), + ('review', models.JSONField(blank=True, default=list, help_text="['内容不涉及国家秘密和商业秘密,申请公开', '内容涉及国家秘密,申请按涉密渠道发布']", null=True, verbose_name='第一撰稿人自审')), + ('dept_opinion', models.CharField(blank=True, max_length=100, null=True, verbose_name='部门负责人意见')), + ('disposal_method', models.CharField(blank=True, max_length=50, null=True, verbose_name='处理方式')), + ('secret_level', models.CharField(blank=True, max_length=50, null=True, verbose_name='秘密等级')), + ('secret_period', models.CharField(blank=True, max_length=50, null=True, verbose_name='秘密期限')), + ('dept_opinion_review', models.CharField(blank=True, max_length=100, null=True, verbose_name='部门审查意见')), + ('publicity_opinion', models.CharField(blank=True, max_length=100, null=True, verbose_name='宣传报道意见')), + ('belong_dept', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='publicity_belong_dept', to='system.dept', verbose_name='所属部门')), + ('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='publicity_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')), + ('ticket', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='publicity_ticket', to='wf.ticket', verbose_name='关联工单')), + ('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='publicity_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')), + ], + options={ + 'abstract': False, + }, + ), migrations.CreateModel( name='MroomSlot', fields=[ @@ -56,11 +160,83 @@ class Migration(migrations.Migration): ('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')), ('mdate', models.DateField(db_index=True, verbose_name='会议日期')), ('slot', models.PositiveIntegerField(help_text='0-47', verbose_name='时段')), + ('is_inuse', models.BooleanField(default=True, verbose_name='是否占用')), ('booking', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='slot_b', to='ofm.mroombooking')), ('mroom', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='slot_m', to='ofm.mroom')), ], options={ - 'unique_together': {('mroom', 'mdate', 'slot')}, + 'abstract': False, + }, + ), + migrations.CreateModel( + name='LendingSeal', + fields=[ + ('id', models.CharField(editable=False, help_text='主键ID', max_length=20, primary_key=True, serialize=False, verbose_name='主键ID')), + ('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')), + ('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')), + ('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')), + ('seal', models.JSONField(default=list, help_text='[公章,法人章,财务章,合同章,业务章,其他章]', verbose_name='印章信息')), + ('seal_other', models.CharField(blank=True, max_length=50, null=True, verbose_name='其他印章')), + ('filename', models.TextField(verbose_name='文件名称')), + ('file', models.TextField(verbose_name='文件内容')), + ('file_count', models.PositiveIntegerField(verbose_name='用印份数')), + ('is_lending', models.BooleanField(default=False, verbose_name='是否借出')), + ('contacts', models.CharField(blank=True, max_length=50, null=True, validators=[django.core.validators.RegexValidator('^1[3456789]\\d{9}$', '手机号码格式不正确')], verbose_name='联系方式')), + ('lending_date', models.DateField(blank=True, null=True, verbose_name='借出日期')), + ('return_date', models.DateField(blank=True, null=True, verbose_name='拟归还日期')), + ('actual_return_date', models.DateField(blank=True, null=True, verbose_name='实际归还日期')), + ('reason', models.CharField(blank=True, max_length=100, null=True, verbose_name='借用理由')), + ('note', models.TextField(blank=True, null=True, verbose_name='备注')), + ('belong_dept', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='lendingseal_belong_dept', to='system.dept', verbose_name='所属部门')), + ('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='lendingseal_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')), + ('ticket', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='seal_ticket', to='wf.ticket', verbose_name='关联工单')), + ('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='lendingseal_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')), + ], + options={ + 'abstract': False, + }, + ), + migrations.CreateModel( + name='FileRecord', + fields=[ + ('id', models.CharField(editable=False, help_text='主键ID', max_length=20, primary_key=True, serialize=False, verbose_name='主键ID')), + ('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')), + ('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')), + ('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')), + ('name', models.CharField(max_length=100, verbose_name='资料名称')), + ('number', models.CharField(blank=True, max_length=50, null=True, verbose_name='档案编号')), + ('counts', models.CharField(blank=True, max_length=10, null=True, verbose_name='文件份数')), + ('location', models.CharField(blank=True, max_length=100, null=True, verbose_name='存放位置')), + ('contacts', models.CharField(blank=True, max_length=50, null=True, validators=[django.core.validators.RegexValidator('^1[3456789]\\d{9}$', '手机号码格式不正确')], verbose_name='存档人电话')), + ('reciver', models.CharField(blank=True, max_length=50, null=True, verbose_name='接收人(综合办)')), + ('remark', models.TextField(blank=True, max_length=200, null=True, verbose_name='备注')), + ('belong_dept', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='filerecord_belong_dept', to='system.dept', verbose_name='所属部门')), + ('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='filerecord_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')), + ('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='filerecord_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')), + ], + options={ + 'abstract': False, + }, + ), + migrations.CreateModel( + name='BorrowRecord', + fields=[ + ('id', models.CharField(editable=False, help_text='主键ID', max_length=20, primary_key=True, serialize=False, verbose_name='主键ID')), + ('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')), + ('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')), + ('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')), + ('borrow_date', models.DateField(blank=True, null=True, verbose_name='借阅日期')), + ('return_date', models.DateField(blank=True, null=True, verbose_name='归还日期')), + ('contacts', models.CharField(blank=True, max_length=50, null=True, validators=[django.core.validators.RegexValidator('^1[3456789]\\d{9}$', '手机号码格式不正确')], verbose_name='借阅人电话')), + ('remark', models.JSONField(default=list, help_text="['借阅', '复印', '查阅']", verbose_name='用途')), + ('belong_dept', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='borrowrecord_belong_dept', to='system.dept', verbose_name='所属部门')), + ('borrow_file', models.ManyToManyField(related_name='borrow_records', to='ofm.FileRecord')), + ('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='borrowrecord_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')), + ('ticket', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='borrow_ticket', to='wf.ticket', verbose_name='关联工单')), + ('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='borrowrecord_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')), + ], + options={ + 'abstract': False, }, ), ] diff --git a/apps/ofm/migrations/0002_lendingseal.py b/apps/ofm/migrations/0002_lendingseal.py deleted file mode 100644 index 5c1a7837..00000000 --- a/apps/ofm/migrations/0002_lendingseal.py +++ /dev/null @@ -1,48 +0,0 @@ -# Generated by Django 3.2.12 on 2025-09-05 03:07 - -from django.conf import settings -import django.core.validators -from django.db import migrations, models -import django.db.models.deletion -import django.utils.timezone - - -class Migration(migrations.Migration): - - dependencies = [ - ('wf', '0002_alter_state_filter_dept'), - ('system', '0006_auto_20241213_1249'), - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('ofm', '0001_initial'), - ] - - operations = [ - migrations.CreateModel( - name='LendingSeal', - fields=[ - ('id', models.CharField(editable=False, help_text='主键ID', max_length=20, primary_key=True, serialize=False, verbose_name='主键ID')), - ('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')), - ('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')), - ('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')), - ('seal', models.JSONField(default=list, help_text='{"seal_name": "印章名称"}', verbose_name='印章信息')), - ('filename', models.TextField(verbose_name='文件名称')), - ('file', models.TextField(verbose_name='文件内容')), - ('file_count', models.PositiveIntegerField(verbose_name='用印份数')), - ('is_lending', models.BooleanField(default=False, verbose_name='是否借出')), - ('contacts', models.CharField(blank=True, max_length=50, null=True, validators=[django.core.validators.RegexValidator('^1[3456789]\\d{9}$', '手机号码格式不正确')], verbose_name='联系方式')), - ('lending_date', models.DateField(blank=True, null=True, verbose_name='借出日期')), - ('return_date', models.DateField(blank=True, null=True, verbose_name='拟归还日期')), - ('actual_return_date', models.DateField(blank=True, null=True, verbose_name='实际归还日期')), - ('reason', models.CharField(blank=True, max_length=100, null=True, verbose_name='借用理由')), - ('note', models.TextField(blank=True, null=True, verbose_name='备注')), - ('belong_dept', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='lendingseal_belong_dept', to='system.dept', verbose_name='所属部门')), - ('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='lendingseal_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')), - ('submit_user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='seal_submit_user', to=settings.AUTH_USER_MODEL, verbose_name='提交人')), - ('ticket', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='seal_ticket', to='wf.ticket', verbose_name='关联工单')), - ('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='lendingseal_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')), - ], - options={ - 'abstract': False, - }, - ), - ] diff --git a/apps/ofm/migrations/0003_remove_lendingseal_submit_user.py b/apps/ofm/migrations/0003_remove_lendingseal_submit_user.py deleted file mode 100644 index 25d6a559..00000000 --- a/apps/ofm/migrations/0003_remove_lendingseal_submit_user.py +++ /dev/null @@ -1,17 +0,0 @@ -# Generated by Django 3.2.12 on 2025-09-08 03:11 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('ofm', '0002_lendingseal'), - ] - - operations = [ - migrations.RemoveField( - model_name='lendingseal', - name='submit_user', - ), - ] diff --git a/apps/ofm/migrations/0004_vehicle.py b/apps/ofm/migrations/0004_vehicle.py deleted file mode 100644 index b43108a0..00000000 --- a/apps/ofm/migrations/0004_vehicle.py +++ /dev/null @@ -1,42 +0,0 @@ -# Generated by Django 3.2.12 on 2025-09-10 06:26 - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion -import django.utils.timezone - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('wf', '0002_alter_state_filter_dept'), - ('ofm', '0003_remove_lendingseal_submit_user'), - ] - - operations = [ - migrations.CreateModel( - name='Vehicle', - fields=[ - ('id', models.CharField(editable=False, help_text='主键ID', max_length=20, primary_key=True, serialize=False, verbose_name='主键ID')), - ('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')), - ('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')), - ('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')), - ('start_time', models.DateField(blank=True, null=True, verbose_name='出车时间')), - ('end_time', models.DateField(blank=True, null=True, verbose_name='还车时间')), - ('location', models.CharField(blank=True, max_length=100, null=True, verbose_name='出发地点')), - ('destination', models.CharField(blank=True, max_length=100, null=True, verbose_name='到达地点')), - ('start_km', models.PositiveIntegerField(verbose_name='出发公里数')), - ('end_km', models.PositiveIntegerField(verbose_name='归还公里数')), - ('actual_km', models.PositiveIntegerField(editable=False, verbose_name='实际行驶公里数')), - ('is_city', models.BooleanField(default=True, verbose_name='是否市内用车')), - ('reason', models.CharField(max_length=100, verbose_name='用车事由')), - ('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='vehicle_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')), - ('ticket', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='vehicle_ticket', to='wf.ticket', verbose_name='关联工单')), - ('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='vehicle_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')), - ], - options={ - 'abstract': False, - }, - ), - ] diff --git a/apps/ofm/migrations/0005_vehicle_via.py b/apps/ofm/migrations/0005_vehicle_via.py deleted file mode 100644 index b180edb0..00000000 --- a/apps/ofm/migrations/0005_vehicle_via.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.2.12 on 2025-09-10 06:35 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('ofm', '0004_vehicle'), - ] - - operations = [ - migrations.AddField( - model_name='vehicle', - name='via', - field=models.CharField(blank=True, max_length=100, null=True, verbose_name='途经地点'), - ), - ] diff --git a/apps/ofm/migrations/0006_vehicle_belong_dept.py b/apps/ofm/migrations/0006_vehicle_belong_dept.py deleted file mode 100644 index c885f838..00000000 --- a/apps/ofm/migrations/0006_vehicle_belong_dept.py +++ /dev/null @@ -1,20 +0,0 @@ -# Generated by Django 3.2.12 on 2025-09-11 01:53 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('system', '0006_auto_20241213_1249'), - ('ofm', '0005_vehicle_via'), - ] - - operations = [ - migrations.AddField( - model_name='vehicle', - name='belong_dept', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='vehicle_belong_dept', to='system.dept', verbose_name='所属部门'), - ), - ] diff --git a/apps/ofm/migrations/0007_auto_20250911_1441.py b/apps/ofm/migrations/0007_auto_20250911_1441.py deleted file mode 100644 index 74ed9b1c..00000000 --- a/apps/ofm/migrations/0007_auto_20250911_1441.py +++ /dev/null @@ -1,67 +0,0 @@ -# Generated by Django 3.2.12 on 2025-09-11 06:41 - -from django.conf import settings -import django.core.validators -from django.db import migrations, models -import django.db.models.deletion -import django.utils.timezone - - -class Migration(migrations.Migration): - - dependencies = [ - ('system', '0006_auto_20241213_1249'), - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('ofm', '0006_vehicle_belong_dept'), - ] - - operations = [ - migrations.AlterField( - model_name='lendingseal', - name='seal', - field=models.JSONField(default=list, help_text='[公章,法人章,财务章,合同章,业务章,其他章]', verbose_name='印章信息'), - ), - migrations.CreateModel( - name='FileRecord', - fields=[ - ('id', models.CharField(editable=False, help_text='主键ID', max_length=20, primary_key=True, serialize=False, verbose_name='主键ID')), - ('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')), - ('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')), - ('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')), - ('name', models.CharField(max_length=100, verbose_name='资料名称')), - ('number', models.CharField(blank=True, max_length=50, null=True, verbose_name='档案编号')), - ('counts', models.CharField(blank=True, max_length=10, null=True, verbose_name='文件份数')), - ('location', models.CharField(blank=True, max_length=100, null=True, verbose_name='存放位置')), - ('contacts', models.CharField(blank=True, max_length=50, null=True, validators=[django.core.validators.RegexValidator('^1[3456789]\\d{9}$', '手机号码格式不正确')], verbose_name='存档人电话')), - ('reciver', models.CharField(blank=True, max_length=50, null=True, verbose_name='接收人(综合办)')), - ('remark', models.TextField(blank=True, max_length=200, null=True, verbose_name='备注')), - ('belong_dept', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='filerecord_belong_dept', to='system.dept', verbose_name='所属部门')), - ('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='filerecord_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')), - ('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='filerecord_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')), - ], - options={ - 'abstract': False, - }, - ), - migrations.CreateModel( - name='BorrowRecord', - fields=[ - ('id', models.CharField(editable=False, help_text='主键ID', max_length=20, primary_key=True, serialize=False, verbose_name='主键ID')), - ('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')), - ('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')), - ('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')), - ('borrow_date', models.DateField(blank=True, null=True, verbose_name='借阅日期')), - ('return_date', models.DateField(blank=True, null=True, verbose_name='归还日期')), - ('contacts', models.CharField(blank=True, max_length=50, null=True, validators=[django.core.validators.RegexValidator('^1[3456789]\\d{9}$', '手机号码格式不正确')], verbose_name='借阅人电话')), - ('remark', models.JSONField(default=list, help_text=['借阅', '复印', '查阅'], verbose_name='用途')), - ('belong_dept', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='borrowrecord_belong_dept', to='system.dept', verbose_name='所属部门')), - ('borrow_file', models.ManyToManyField(related_name='borrow_records', to='ofm.FileRecord')), - ('borrow_user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='borrow_user', to=settings.AUTH_USER_MODEL)), - ('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='borrowrecord_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')), - ('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='borrowrecord_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')), - ], - options={ - 'abstract': False, - }, - ), - ] diff --git a/apps/ofm/migrations/0008_remove_borrowrecord_borrow_user.py b/apps/ofm/migrations/0008_remove_borrowrecord_borrow_user.py deleted file mode 100644 index e8bfb234..00000000 --- a/apps/ofm/migrations/0008_remove_borrowrecord_borrow_user.py +++ /dev/null @@ -1,17 +0,0 @@ -# Generated by Django 3.2.12 on 2025-09-12 06:42 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('ofm', '0007_auto_20250911_1441'), - ] - - operations = [ - migrations.RemoveField( - model_name='borrowrecord', - name='borrow_user', - ), - ] diff --git a/apps/ofm/migrations/0009_borrowrecord_ticket.py b/apps/ofm/migrations/0009_borrowrecord_ticket.py deleted file mode 100644 index b5056356..00000000 --- a/apps/ofm/migrations/0009_borrowrecord_ticket.py +++ /dev/null @@ -1,20 +0,0 @@ -# Generated by Django 3.2.12 on 2025-09-12 07:00 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('wf', '0002_alter_state_filter_dept'), - ('ofm', '0008_remove_borrowrecord_borrow_user'), - ] - - operations = [ - migrations.AddField( - model_name='borrowrecord', - name='ticket', - field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='borrow_ticket', to='wf.ticket', verbose_name='关联工单'), - ), - ] diff --git a/apps/ofm/migrations/0010_auto_20250919_0921.py b/apps/ofm/migrations/0010_auto_20250919_0921.py deleted file mode 100644 index 528c5882..00000000 --- a/apps/ofm/migrations/0010_auto_20250919_0921.py +++ /dev/null @@ -1,53 +0,0 @@ -# Generated by Django 3.2.12 on 2025-09-19 01:21 - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion -import django.utils.timezone - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('system', '0006_auto_20241213_1249'), - ('ofm', '0009_borrowrecord_ticket'), - ] - - operations = [ - migrations.AddField( - model_name='lendingseal', - name='seal_other', - field=models.CharField(blank=True, max_length=50, null=True, verbose_name='其他印章'), - ), - migrations.CreateModel( - name='Publicity', - fields=[ - ('id', models.CharField(editable=False, help_text='主键ID', max_length=20, primary_key=True, serialize=False, verbose_name='主键ID')), - ('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')), - ('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')), - ('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')), - ('number', models.CharField(max_length=50, verbose_name='记录编号')), - ('title', models.CharField(max_length=100, verbose_name='送审稿件标题')), - ('participants', models.CharField(max_length=50, verbose_name='所有撰稿人')), - ('level', models.JSONField(default=list, help_text=['重要', '一般', '非涉密'], verbose_name='用途')), - ('content', models.JSONField(default=list, help_text=['武器装备科研生产综合事项', '其它'], verbose_name='稿件内容涉及')), - ('other_content', models.CharField(blank=True, max_length=100, null=True, verbose_name='其它内容')), - ('report_purpose', models.CharField(blank=True, max_length=100, null=True, verbose_name='宣传报道目的')), - ('channel', models.JSONField(default=list, help_text=['互联网', '信息平台', '官微', '公开发行物', '其它'], verbose_name='发布渠道')), - ('channel_other', models.CharField(blank=True, max_length=50, null=True, verbose_name='其它渠道')), - ('other_channel', models.CharField(blank=True, max_length=50, null=True, verbose_name='其它渠道')), - ('report_name', models.CharField(blank=True, max_length=50, null=True, verbose_name='报道名称')), - ('review', models.JSONField(default=list, help_text=['内容不涉及国家秘密和商业秘密,申请公开', '内容涉及国家秘密,申请按涉密渠道发布'], verbose_name='第一撰稿人自审')), - ('dept_opinion', models.JSONField(default=list, help_text=['同意', '不同意'], verbose_name='部门负责人意见')), - ('dept_opinion_review', models.CharField(blank=True, max_length=100, null=True, verbose_name='部门审查意见')), - ('publicity_opinion', models.JSONField(default=list, help_text=['同意公开宣传报道', '不同意任何渠道的宣传报道'], verbose_name='宣传统战部审查意见')), - ('belong_dept', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='publicity_belong_dept', to='system.dept', verbose_name='所属部门')), - ('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='publicity_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')), - ('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='publicity_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')), - ], - options={ - 'abstract': False, - }, - ), - ] diff --git a/apps/ofm/migrations/0011_auto_20250924_1359.py b/apps/ofm/migrations/0011_auto_20250924_1359.py deleted file mode 100644 index f30d67fe..00000000 --- a/apps/ofm/migrations/0011_auto_20250924_1359.py +++ /dev/null @@ -1,27 +0,0 @@ -# Generated by Django 3.2.12 on 2025-09-24 05:59 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('ofm', '0010_auto_20250919_0921'), - ] - - operations = [ - migrations.RemoveField( - model_name='publicity', - name='channel_other', - ), - migrations.AddField( - model_name='publicity', - name='pfile', - field=models.CharField(blank=True, max_length=100, null=True, verbose_name='稿件路径'), - ), - migrations.AddField( - model_name='publicity', - name='pub_dept', - field=models.CharField(blank=True, max_length=50, null=True, verbose_name='部室/研究院'), - ), - ] diff --git a/apps/ofm/migrations/0012_publicity_ticket.py b/apps/ofm/migrations/0012_publicity_ticket.py deleted file mode 100644 index 4f643026..00000000 --- a/apps/ofm/migrations/0012_publicity_ticket.py +++ /dev/null @@ -1,20 +0,0 @@ -# Generated by Django 3.2.12 on 2025-09-24 06:07 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('wf', '0003_workflow_view_path'), - ('ofm', '0011_auto_20250924_1359'), - ] - - operations = [ - migrations.AddField( - model_name='publicity', - name='ticket', - field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='publicity_ticket', to='wf.ticket', verbose_name='关联工单'), - ), - ] diff --git a/apps/ofm/migrations/0013_mroomslot_ticket.py b/apps/ofm/migrations/0013_mroomslot_ticket.py deleted file mode 100644 index 765fd55a..00000000 --- a/apps/ofm/migrations/0013_mroomslot_ticket.py +++ /dev/null @@ -1,20 +0,0 @@ -# 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/migrations/0014_auto_20250928_1023.py b/apps/ofm/migrations/0014_auto_20250928_1023.py deleted file mode 100644 index 76e7a782..00000000 --- a/apps/ofm/migrations/0014_auto_20250928_1023.py +++ /dev/null @@ -1,33 +0,0 @@ -# Generated by Django 3.2.12 on 2025-09-28 02:23 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('wf', '0003_workflow_view_path'), - ('ofm', '0013_mroomslot_ticket'), - ] - - operations = [ - migrations.AddField( - model_name='mroombooking', - 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='关联会议室'), - ), - migrations.AddField( - model_name='mroomslot', - name='is_inuse', - field=models.BooleanField(default=True, verbose_name='是否占用'), - ), - migrations.AlterUniqueTogether( - name='mroomslot', - unique_together={('mroom', 'mdate', 'slot', 'is_inuse')}, - ), - migrations.RemoveField( - model_name='mroomslot', - name='ticket', - ), - ] diff --git a/apps/ofm/migrations/0015_alter_vehicle_end_km.py b/apps/ofm/migrations/0015_alter_vehicle_end_km.py deleted file mode 100644 index 53a1ecca..00000000 --- a/apps/ofm/migrations/0015_alter_vehicle_end_km.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.2.12 on 2025-09-28 06:15 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('ofm', '0014_auto_20250928_1023'), - ] - - operations = [ - migrations.AlterField( - model_name='vehicle', - name='end_km', - field=models.PositiveIntegerField(blank=True, null=True, verbose_name='归还公里数'), - ), - ] diff --git a/apps/ofm/migrations/0016_auto_20250929_1551.py b/apps/ofm/migrations/0016_auto_20250929_1551.py deleted file mode 100644 index b8f001dd..00000000 --- a/apps/ofm/migrations/0016_auto_20250929_1551.py +++ /dev/null @@ -1,35 +0,0 @@ -# Generated by Django 3.2.12 on 2025-09-29 07:51 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('system', '0006_auto_20241213_1249'), - ('ofm', '0015_alter_vehicle_end_km'), - ] - - operations = [ - migrations.AddField( - model_name='mroombooking', - name='belong_dept', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='mroombooking_belong_dept', to='system.dept', verbose_name='所属部门'), - ), - migrations.AddField( - model_name='mroombooking', - name='key_participants', - field=models.TextField(blank=True, null=True, verbose_name='主要参会领导'), - ), - migrations.AddField( - model_name='mroombooking', - name='note', - field=models.TextField(blank=True, null=True, verbose_name='备注'), - ), - migrations.AddField( - model_name='mroombooking', - name='participant_count', - field=models.PositiveIntegerField(default=0, verbose_name='参会人数'), - ), - ] diff --git a/apps/ofm/migrations/0017_auto_20251010_1631.py b/apps/ofm/migrations/0017_auto_20251010_1631.py deleted file mode 100644 index 36ce2c26..00000000 --- a/apps/ofm/migrations/0017_auto_20251010_1631.py +++ /dev/null @@ -1,23 +0,0 @@ -# Generated by Django 3.2.12 on 2025-10-10 08:31 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('ofm', '0016_auto_20250929_1551'), - ] - - operations = [ - migrations.AddField( - model_name='publicity', - name='secret_period', - field=models.CharField(blank=True, max_length=50, null=True, verbose_name='秘密期限'), - ), - migrations.AlterField( - model_name='publicity', - name='level', - field=models.JSONField(default=list, help_text=['重要', '一般', '非涉密'], verbose_name='涉密等级'), - ), - ] diff --git a/apps/ofm/migrations/0018_auto_20251011_0922.py b/apps/ofm/migrations/0018_auto_20251011_0922.py deleted file mode 100644 index 6eaba261..00000000 --- a/apps/ofm/migrations/0018_auto_20251011_0922.py +++ /dev/null @@ -1,33 +0,0 @@ -# Generated by Django 3.2.12 on 2025-10-11 01:22 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('ofm', '0017_auto_20251010_1631'), - ] - - operations = [ - migrations.AlterField( - model_name='publicity', - name='dept_opinion', - field=models.JSONField(blank=True, default=list, help_text=['同意', '不同意'], null=True, verbose_name='部门负责人意见'), - ), - migrations.AlterField( - model_name='publicity', - name='number', - field=models.CharField(blank=True, max_length=50, null=True, verbose_name='记录编号'), - ), - migrations.AlterField( - model_name='publicity', - name='publicity_opinion', - field=models.JSONField(blank=True, default=list, help_text=['同意公开宣传报道', '不同意任何渠道的宣传报道'], null=True, verbose_name='宣传统战部审查意见'), - ), - migrations.AlterField( - model_name='publicity', - name='review', - field=models.JSONField(blank=True, default=list, help_text=['内容不涉及国家秘密和商业秘密,申请公开', '内容涉及国家秘密,申请按涉密渠道发布'], null=True, verbose_name='第一撰稿人自审'), - ), - ] diff --git a/apps/ofm/migrations/0019_auto_20251011_1128.py b/apps/ofm/migrations/0019_auto_20251011_1128.py deleted file mode 100644 index 2bc69c66..00000000 --- a/apps/ofm/migrations/0019_auto_20251011_1128.py +++ /dev/null @@ -1,28 +0,0 @@ -# Generated by Django 3.2.12 on 2025-10-11 03:28 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('ofm', '0018_auto_20251011_0922'), - ] - - operations = [ - migrations.AlterField( - model_name='publicity', - name='dept_opinion', - field=models.JSONField(default=list, help_text=['同意', '不同意'], verbose_name='部门负责人意见'), - ), - migrations.AlterField( - model_name='publicity', - name='publicity_opinion', - field=models.JSONField(blank=True, default=list, help_text=['同意公开宣传报道', '不同意任何渠道的宣传报道'], verbose_name='宣传统战部审查意见'), - ), - migrations.AlterField( - model_name='publicity', - name='review', - field=models.JSONField(blank=True, default=list, help_text=['内容不涉及国家秘密和商业秘密,申请公开', '内容涉及国家秘密,申请按涉密渠道发布'], verbose_name='第一撰稿人自审'), - ), - ] diff --git a/apps/ofm/migrations/0020_auto_20251011_1427.py b/apps/ofm/migrations/0020_auto_20251011_1427.py deleted file mode 100644 index 24954f8a..00000000 --- a/apps/ofm/migrations/0020_auto_20251011_1427.py +++ /dev/null @@ -1,28 +0,0 @@ -# Generated by Django 3.2.12 on 2025-10-11 06:27 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('ofm', '0019_auto_20251011_1128'), - ] - - operations = [ - migrations.AlterField( - model_name='publicity', - name='dept_opinion', - field=models.JSONField(blank=True, default=list, help_text=['同意', '不同意'], null=True, verbose_name='部门负责人意见'), - ), - migrations.AlterField( - model_name='publicity', - name='publicity_opinion', - field=models.JSONField(blank=True, default=list, help_text=['同意公开宣传报道', '不同意任何渠道的宣传报道'], null=True, verbose_name='宣传统战部审查意见'), - ), - migrations.AlterField( - model_name='publicity', - name='review', - field=models.JSONField(blank=True, default=list, help_text=['内容不涉及国家秘密和商业秘密,申请公开', '内容涉及国家秘密,申请按涉密渠道发布'], null=True, verbose_name='第一撰稿人自审'), - ), - ] diff --git a/apps/ofm/migrations/0021_alter_publicity_publicity_opinion.py b/apps/ofm/migrations/0021_alter_publicity_publicity_opinion.py deleted file mode 100644 index 86dae1b4..00000000 --- a/apps/ofm/migrations/0021_alter_publicity_publicity_opinion.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.2.12 on 2025-10-13 01:01 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('ofm', '0020_auto_20251011_1427'), - ] - - operations = [ - migrations.AlterField( - model_name='publicity', - name='publicity_opinion', - field=models.CharField(blank=True, max_length=100, null=True, verbose_name='宣传报道意见'), - ), - ] diff --git a/apps/ofm/migrations/0022_alter_mroomslot_unique_together.py b/apps/ofm/migrations/0022_alter_mroomslot_unique_together.py deleted file mode 100644 index 6bdc67b4..00000000 --- a/apps/ofm/migrations/0022_alter_mroomslot_unique_together.py +++ /dev/null @@ -1,17 +0,0 @@ -# Generated by Django 3.2.12 on 2025-10-17 06:50 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('ofm', '0021_alter_publicity_publicity_opinion'), - ] - - operations = [ - migrations.AlterUniqueTogether( - name='mroomslot', - unique_together=set(), - ), - ] diff --git a/apps/ofm/migrations/0023_patentinfo.py b/apps/ofm/migrations/0023_patentinfo.py deleted file mode 100644 index 3de07bd0..00000000 --- a/apps/ofm/migrations/0023_patentinfo.py +++ /dev/null @@ -1,49 +0,0 @@ -# Generated by Django 3.2.12 on 2025-10-21 06:08 - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion -import django.utils.timezone - - -class Migration(migrations.Migration): - - dependencies = [ - ('wf', '0004_workflow_view_path2'), - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('system', '0006_auto_20241213_1249'), - ('ofm', '0022_alter_mroomslot_unique_together'), - ] - - operations = [ - migrations.CreateModel( - name='PatentInfo', - fields=[ - ('id', models.CharField(editable=False, help_text='主键ID', max_length=20, primary_key=True, serialize=False, verbose_name='主键ID')), - ('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')), - ('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')), - ('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')), - ('name', models.CharField(max_length=100, verbose_name='拟申请专利名称')), - ('author', models.CharField(max_length=100, verbose_name='发明人(设计人)')), - ('type', models.CharField(choices=[('invention', '发明专利'), ('utility', '实用新型专利'), ('design', '外观设计专利')], default='invention', max_length=50, verbose_name='专利类型')), - ('is_public', models.BooleanField(default=False, verbose_name='是否公开')), - ('area', models.CharField(choices=[('Domestic', '国内申请'), ('Foreign', '国外申请'), (' PCT', 'PCT申请')], default='Domestic', max_length=50, verbose_name='拟申请地域')), - ('identified', models.BooleanField(default=False, verbose_name='是否进行过科技成果鉴定')), - ('published_article', models.BooleanField(default=False, verbose_name='是否发表过文章')), - ('exhibited', models.BooleanField(default=False, verbose_name='是否参与过展会展出')), - ('applied_to_production', models.BooleanField(default=False, verbose_name='是否参与应用于生产/销售')), - ('participated_in_exchange', models.BooleanField(default=False, verbose_name='是否参与过技术交流')), - ('tech_background_pages', models.PositiveIntegerField(blank=True, null=True, verbose_name='技术背景材料页数')), - ('tech_disclosure_pages', models.PositiveIntegerField(blank=True, null=True, verbose_name='技术交底材料页数')), - ('novelty_report_pages', models.PositiveIntegerField(blank=True, null=True, verbose_name='查新检索报告页数')), - ('diagrams_or_photos_pages', models.PositiveIntegerField(blank=True, null=True, verbose_name='图/照片页数或张数')), - ('belong_dept', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='patentinfo_belong_dept', to='system.dept', verbose_name='所属部门')), - ('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='patentinfo_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')), - ('ticket', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='patentInfo_ticket', to='wf.ticket', verbose_name='关联工单')), - ('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='patentinfo_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')), - ], - options={ - 'abstract': False, - }, - ), - ] diff --git a/apps/ofm/migrations/0024_auto_20251022_1005.py b/apps/ofm/migrations/0024_auto_20251022_1005.py deleted file mode 100644 index ca01922d..00000000 --- a/apps/ofm/migrations/0024_auto_20251022_1005.py +++ /dev/null @@ -1,95 +0,0 @@ -# Generated by Django 3.2.12 on 2025-10-22 02:05 - -import apps.ofm.models -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('ofm', '0023_patentinfo'), - ] - - operations = [ - migrations.RemoveField( - model_name='patentinfo', - name='applied_to_production', - ), - migrations.RemoveField( - model_name='patentinfo', - name='diagrams_or_photos_pages', - ), - migrations.RemoveField( - model_name='patentinfo', - name='exhibited', - ), - migrations.RemoveField( - model_name='patentinfo', - name='identified', - ), - migrations.RemoveField( - model_name='patentinfo', - name='novelty_report_pages', - ), - migrations.RemoveField( - model_name='patentinfo', - name='participated_in_exchange', - ), - migrations.RemoveField( - model_name='patentinfo', - name='published_article', - ), - migrations.RemoveField( - model_name='patentinfo', - name='tech_background_pages', - ), - migrations.RemoveField( - model_name='patentinfo', - name='tech_disclosure_pages', - ), - migrations.AddField( - model_name='patentinfo', - name='other_area', - field=models.CharField(blank=True, max_length=50, null=True, verbose_name='其它申请地域'), - ), - migrations.AddField( - model_name='patentinfo', - name='tech_file', - field=models.JSONField(default=list, help_text='技术文件信息列表,每个条目包含name(名称)page(页数)字段', verbose_name='技术文件'), - ), - migrations.AddField( - model_name='patentinfo', - name='tech_status', - field=models.JSONField(blank=True, default=list, help_text='技术状态信息列表,每个条目包含name(名称)、status(状态)、file(文件)字段', verbose_name='技术状态'), - ), - migrations.AlterField( - model_name='borrowrecord', - name='remark', - field=models.JSONField(default=list, help_text="['借阅', '复印', '查阅']", verbose_name='用途'), - ), - migrations.AlterField( - model_name='publicity', - name='channel', - field=models.JSONField(default=list, help_text="['互联网', '信息平台', '官微', '公开发行物', '其它']", verbose_name='发布渠道'), - ), - migrations.AlterField( - model_name='publicity', - name='content', - field=models.JSONField(default=list, help_text="['武器装备科研生产综合事项', '其它']", verbose_name='稿件内容涉及'), - ), - migrations.AlterField( - model_name='publicity', - name='dept_opinion', - field=models.JSONField(blank=True, default=list, help_text="['同意', '不同意']", null=True, verbose_name='部门负责人意见'), - ), - migrations.AlterField( - model_name='publicity', - name='level', - field=models.JSONField(default=list, help_text="['重要', '一般', '非涉密']", verbose_name='涉密等级'), - ), - migrations.AlterField( - model_name='publicity', - name='review', - field=models.JSONField(blank=True, default=list, help_text="['内容不涉及国家秘密和商业秘密,申请公开', '内容涉及国家秘密,申请按涉密渠道发布']", null=True, verbose_name='第一撰稿人自审'), - ), - ] diff --git a/apps/ofm/migrations/0025_alter_patentinfo_area.py b/apps/ofm/migrations/0025_alter_patentinfo_area.py deleted file mode 100644 index b299f3ba..00000000 --- a/apps/ofm/migrations/0025_alter_patentinfo_area.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.2.12 on 2025-10-24 05:46 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('ofm', '0024_auto_20251022_1005'), - ] - - operations = [ - migrations.AlterField( - model_name='patentinfo', - name='area', - field=models.CharField(choices=[('Domestic', '国内申请'), ('Foreign', '国外申请'), ('PCT', 'PCT申请')], default='Domestic', max_length=50, verbose_name='拟申请地域'), - ), - ] diff --git a/apps/ofm/migrations/0026_paperse.py b/apps/ofm/migrations/0026_paperse.py deleted file mode 100644 index bab14bfa..00000000 --- a/apps/ofm/migrations/0026_paperse.py +++ /dev/null @@ -1,41 +0,0 @@ -# Generated by Django 3.2.12 on 2025-10-29 03:13 - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion -import django.utils.timezone - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('wf', '0004_workflow_view_path2'), - ('ofm', '0025_alter_patentinfo_area'), - ] - - operations = [ - migrations.CreateModel( - name='PaperSe', - fields=[ - ('id', models.CharField(editable=False, help_text='主键ID', max_length=20, primary_key=True, serialize=False, verbose_name='主键ID')), - ('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')), - ('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')), - ('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')), - ('paper_name', models.CharField(max_length=100, verbose_name='拟发表论文名称')), - ('publication_name', models.CharField(max_length=100, verbose_name='拟投期刊名称')), - ('author', models.CharField(max_length=100, verbose_name='作者')), - ('paper_type', models.CharField(max_length=100, verbose_name='拟发表文章类型')), - ('is_chinese_core', models.BooleanField(default=False, verbose_name='是否为中文核心')), - ('is_sci', models.BooleanField(default=False, verbose_name='是否被SCI/EI收录')), - ('tech_status', models.JSONField(blank=True, default=list, help_text='技术状态信息列表,每个条目包含name(名称)、status(状态)、file(文件)字段', verbose_name='技术状态')), - ('tech_file', models.JSONField(default=list, help_text='技术文件信息列表,每个条目包含name(名称)page(页数)字段', verbose_name='技术文件')), - ('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='paperse_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')), - ('ticket', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='paperse_ticket', to='wf.ticket', verbose_name='关联工单')), - ('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='paperse_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')), - ], - options={ - 'abstract': False, - }, - ), - ] diff --git a/apps/ofm/migrations/0027_auto_20251029_1426.py b/apps/ofm/migrations/0027_auto_20251029_1426.py deleted file mode 100644 index 3ff5e9fb..00000000 --- a/apps/ofm/migrations/0027_auto_20251029_1426.py +++ /dev/null @@ -1,44 +0,0 @@ -# Generated by Django 3.2.12 on 2025-10-29 06:26 - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion -import django.utils.timezone - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('wf', '0004_workflow_view_path2'), - ('ofm', '0026_paperse'), - ] - - operations = [ - migrations.CreateModel( - name='Papersecret', - fields=[ - ('id', models.CharField(editable=False, help_text='主键ID', max_length=20, primary_key=True, serialize=False, verbose_name='主键ID')), - ('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')), - ('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')), - ('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')), - ('paper_name', models.CharField(max_length=100, verbose_name='拟发表论文名称')), - ('publication_name', models.CharField(max_length=100, verbose_name='拟投期刊名称')), - ('author', models.CharField(max_length=100, verbose_name='作者')), - ('paper_type', models.CharField(max_length=100, verbose_name='拟发表文章类型')), - ('is_chinese_core', models.BooleanField(default=False, verbose_name='是否为中文核心')), - ('is_sci', models.BooleanField(default=False, verbose_name='是否被SCI/EI收录')), - ('tech_status', models.JSONField(blank=True, default=list, help_text='技术状态信息列表,每个条目包含name(名称)、status(状态)、file(文件)字段', verbose_name='技术状态')), - ('tech_file', models.JSONField(default=list, help_text='技术文件信息列表,每个条目包含name(名称)page(页数)字段', verbose_name='技术文件')), - ('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='papersecret_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')), - ('ticket', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='paperse_ticket', to='wf.ticket', verbose_name='关联工单')), - ('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='papersecret_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')), - ], - options={ - 'abstract': False, - }, - ), - migrations.DeleteModel( - name='PaperSe', - ), - ] diff --git a/apps/ofm/migrations/0028_papersecret_belong_dept.py b/apps/ofm/migrations/0028_papersecret_belong_dept.py deleted file mode 100644 index d25da425..00000000 --- a/apps/ofm/migrations/0028_papersecret_belong_dept.py +++ /dev/null @@ -1,20 +0,0 @@ -# Generated by Django 3.2.12 on 2025-10-30 05:55 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('system', '0006_auto_20241213_1249'), - ('ofm', '0027_auto_20251029_1426'), - ] - - operations = [ - migrations.AddField( - model_name='papersecret', - name='belong_dept', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='papersecret_belong_dept', to='system.dept', verbose_name='所属部门'), - ), - ] diff --git a/apps/ofm/migrations/0029_auto_20251103_0939.py b/apps/ofm/migrations/0029_auto_20251103_0939.py deleted file mode 100644 index 59a28727..00000000 --- a/apps/ofm/migrations/0029_auto_20251103_0939.py +++ /dev/null @@ -1,35 +0,0 @@ -# Generated by Django 3.2.12 on 2025-11-03 01:39 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('ofm', '0028_papersecret_belong_dept'), - ] - - operations = [ - migrations.RemoveField( - model_name='patentinfo', - name='belong_dept', - ), - migrations.RemoveField( - model_name='patentinfo', - name='create_by', - ), - migrations.RemoveField( - model_name='patentinfo', - name='ticket', - ), - migrations.RemoveField( - model_name='patentinfo', - name='update_by', - ), - migrations.DeleteModel( - name='Papersecret', - ), - migrations.DeleteModel( - name='PatentInfo', - ), - ] diff --git a/apps/ofm/migrations/0030_auto_20251105_1715.py b/apps/ofm/migrations/0030_auto_20251105_1715.py deleted file mode 100644 index dde4a501..00000000 --- a/apps/ofm/migrations/0030_auto_20251105_1715.py +++ /dev/null @@ -1,23 +0,0 @@ -# Generated by Django 3.2.12 on 2025-11-05 09:15 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('ofm', '0029_auto_20251103_0939'), - ] - - operations = [ - migrations.AlterField( - model_name='vehicle', - name='end_time', - field=models.DateTimeField(blank=True, null=True, verbose_name='还车时间'), - ), - migrations.AlterField( - model_name='vehicle', - name='start_time', - field=models.DateTimeField(blank=True, null=True, verbose_name='出车时间'), - ), - ] diff --git a/apps/ofm/migrations/0031_auto_20251106_1608.py b/apps/ofm/migrations/0031_auto_20251106_1608.py deleted file mode 100644 index e608421c..00000000 --- a/apps/ofm/migrations/0031_auto_20251106_1608.py +++ /dev/null @@ -1,28 +0,0 @@ -# Generated by Django 3.2.12 on 2025-11-06 08:08 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('ofm', '0030_auto_20251105_1715'), - ] - - operations = [ - migrations.AddField( - model_name='publicity', - name='disposal_method', - field=models.CharField(blank=True, max_length=50, null=True, verbose_name='处理方式'), - ), - migrations.AddField( - model_name='publicity', - name='secret_level', - field=models.CharField(blank=True, max_length=50, null=True, verbose_name='秘密等级'), - ), - migrations.AlterField( - model_name='publicity', - name='dept_opinion', - field=models.CharField(blank=True, max_length=100, null=True, verbose_name='部门负责人意见'), - ), - ] diff --git a/apps/ofm/migrations/0032_auto_20251117_1615.py b/apps/ofm/migrations/0032_auto_20251117_1615.py deleted file mode 100644 index 0095bac9..00000000 --- a/apps/ofm/migrations/0032_auto_20251117_1615.py +++ /dev/null @@ -1,70 +0,0 @@ -# Generated by Django 3.2.12 on 2025-11-17 08:15 - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion -import django.utils.timezone - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('ofm', '0031_auto_20251106_1608'), - ] - - operations = [ - migrations.CreateModel( - name='VehicleReg', - fields=[ - ('id', models.CharField(editable=False, help_text='主键ID', max_length=20, primary_key=True, serialize=False, verbose_name='主键ID')), - ('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')), - ('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')), - ('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')), - ('name', models.CharField(max_length=50, verbose_name='车辆名称')), - ('brand', models.CharField(blank=True, max_length=50, null=True, verbose_name='品牌')), - ('plate', models.CharField(max_length=50, verbose_name='车牌号')), - ('km', models.PositiveIntegerField(blank=True, null=True, verbose_name='行驶里程')), - ('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='vehiclereg_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')), - ('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='vehiclereg_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')), - ], - options={ - 'abstract': False, - }, - ), - migrations.RemoveField( - model_name='vehicle', - name='end_time', - ), - migrations.RemoveField( - model_name='vehicle', - name='start_time', - ), - migrations.AddField( - model_name='vehicle', - name='reception', - field=models.CharField(blank=True, max_length=50, null=True, verbose_name='接待人'), - ), - migrations.CreateModel( - name='VehicleSlot', - fields=[ - ('id', models.CharField(editable=False, help_text='主键ID', max_length=20, primary_key=True, serialize=False, verbose_name='主键ID')), - ('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')), - ('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')), - ('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')), - ('vdate', models.DateField(db_index=True, verbose_name='使用日期')), - ('slot', models.PositiveIntegerField(help_text='0-47', verbose_name='时段')), - ('is_inuse', models.BooleanField(default=True, verbose_name='是否占用')), - ('vehicle', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='slot_vehicle', to='ofm.vehicle')), - ('vehreg', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='slot_record', to='ofm.vehiclereg')), - ], - options={ - 'abstract': False, - }, - ), - migrations.AddField( - model_name='vehicle', - name='vehiclereg', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='vehicle_record', to='ofm.vehiclereg'), - ), - ] diff --git a/apps/ofm/models.py b/apps/ofm/models.py index c20e8db2..379f57bf 100644 --- a/apps/ofm/models.py +++ b/apps/ofm/models.py @@ -53,8 +53,8 @@ class VehicleReg(CommonADModel): plate = models.CharField('车牌号', max_length=50) km = models.PositiveIntegerField('行驶里程', null=True, blank=True) -class Vehicle(CommonBDModel): - """TN: 用车申请""" +class VehicleUse(CommonBDModel): + """TN: 用车记录""" vehiclereg = models.ForeignKey(VehicleReg, on_delete=models.CASCADE, related_name="vehicle_record", null=True, blank=True) location = models.CharField('出发地点', null=True, blank=True, max_length=100) via = models.CharField('途经地点', null=True, blank=True, max_length=100) @@ -82,7 +82,7 @@ class Vehicle(CommonBDModel): class VehicleSlot(BaseModel): vehreg = models.ForeignKey(VehicleReg, on_delete=models.CASCADE, related_name="slot_record") - vehicle = models.ForeignKey(Vehicle, on_delete=models.CASCADE, related_name="slot_vehicle") + vehicle_use = models.ForeignKey(VehicleUse, on_delete=models.CASCADE, related_name="slot_vehicle") vdate = models.DateField('使用日期', db_index=True) slot = models.PositiveIntegerField('时段', help_text='0-47') is_inuse = models.BooleanField('是否占用', default=True) diff --git a/apps/ofm/serializers.py b/apps/ofm/serializers.py index 3150e559..7d4588f6 100644 --- a/apps/ofm/serializers.py +++ b/apps/ofm/serializers.py @@ -1,4 +1,4 @@ -from .models import (Mroom, MroomBooking, MroomSlot, LendingSeal, Vehicle, FileRecord, BorrowRecord, Publicity, VehicleReg, VehicleSlot) +from .models import (Mroom, MroomBooking, MroomSlot, LendingSeal, VehicleUse, FileRecord, BorrowRecord, Publicity, VehicleReg, VehicleSlot) from apps.utils.serializers import CustomModelSerializer from rest_framework import serializers from django.db import transaction @@ -70,7 +70,7 @@ class VehicleRecordSerializer(CustomModelSerializer): fields = '__all__' -class VehicleSerializer(CustomModelSerializer): +class VehicleUseSerializer(CustomModelSerializer): vehreg = serializers.PrimaryKeyRelatedField(queryset=VehicleReg.objects.all(), write_only=True, label="车辆信息") vdate = serializers.DateField(write_only=True, label="预订日期") slots = serializers.ListField(child=serializers.IntegerField(), write_only=True, label="时段索引") @@ -79,7 +79,7 @@ class VehicleSerializer(CustomModelSerializer): belong_dept_name = serializers.CharField(source='belong_dept.name', read_only=True) ticket_ = TicketSimpleSerializer(source='ticket', read_only=True) class Meta: - model = Vehicle + model = VehicleUse fields = '__all__' read_only_fields = EXCLUDE_FIELDS + ['actual_km'] extra_kwargs = {'belong_dept': {'required': True}} @@ -88,31 +88,32 @@ class VehicleSerializer(CustomModelSerializer): vehreg = validated_data.pop('vehreg') slots = validated_data.pop('slots') vdate = validated_data.pop('vdate') - vehicle = super().create(validated_data) - VehicleSlot.objects.filter(vehicle=vehicle).delete() + vehicle_use = super().create(validated_data) + VehicleSlot.objects.filter(vehicle_use=vehicle_use).delete() for slot in slots: if slot < 0 or slot > 47: raise ParseError("时段索引超出范围") ms_exists = VehicleSlot.objects.filter(vehreg=vehreg, vdate=vdate, slot=slot, is_inuse=True).exists() if ms_exists: raise ParseError("时段已预订,请刷新重选") - VehicleSlot.objects.create(vehicle=vehicle, slot=slot, vdate=vdate, vehreg=vehreg, is_inuse=True) - return vehicle + VehicleSlot.objects.create(vehicle_use=vehicle_use, slot=slot, vdate=vdate, vehreg=vehreg, is_inuse=True) + return vehicle_use def update(self, instance, validated_data): vehreg = validated_data.pop('vehreg') slots = validated_data.pop('slots') vdate = validated_data.pop('vdate') - vehicle = super().update(instance, validated_data) - VehicleSlot.objects.filter(vehicle=vehicle).delete() + vehicle_use = super().update(instance, validated_data) + VehicleSlot.objects.filter(vehicle_use=vehicle_use).delete() for slot in slots: if slot < 0 or slot > 47: raise ParseError("时段索引超出范围") ms_exists = VehicleSlot.objects.filter(vehreg=vehreg, vdate=vdate, slot=slot, is_inuse=True).exists() if ms_exists: raise ParseError("时段已预订,请刷新重选") - VehicleSlot.objects.create(vehicle=vehicle, slot=slot, vdate=vdate, vehreg=vehreg, is_inuse=True) - return vehicle + VehicleSlot.objects.create(vehicle_use=vehicle_use, slot=slot, vdate=vdate, vehreg=vehreg, is_inuse=True) + return vehicle_use + class VehSlotSerializer(CustomModelSerializer): veh_name = serializers.CharField(source='vehreg.name', read_only=True) diff --git a/apps/ofm/urls.py b/apps/ofm/urls.py index 44688de4..4a7ce36c 100644 --- a/apps/ofm/urls.py +++ b/apps/ofm/urls.py @@ -1,6 +1,6 @@ from django.urls import path, include from rest_framework.routers import DefaultRouter -from apps.ofm.views import (MroomViewSet, MroomBookingViewSet, MroomSlotViewSet,LendingSealViewSet, VehicleViewSet, +from apps.ofm.views import (MroomViewSet, MroomBookingViewSet, MroomSlotViewSet,LendingSealViewSet, VehicleUseViewSet, VehicleRegViewSet, VehicleSlotViewSet, FilerecordViewSet, FileborrowViewSet, PublicityViewSet) API_BASE_URL = 'api/ofm/' @@ -12,9 +12,9 @@ router.register('mroombooking', MroomBookingViewSet, basename='mroombooking') router.register('mroomslot', MroomSlotViewSet, basename='mroomslot') # router.register('sealmanage', SealManageViewSet, basename='sealmanage') router.register('lendingseal', LendingSealViewSet, basename='lendingseal') -router.register('vehicle', VehicleViewSet, basename='vehicle') +router.register('vehicle-use', VehicleUseViewSet, basename='vehicle_use') router.register('vsolt', VehicleSlotViewSet, basename='vslot') -router.register('vreg', VehicleRegViewSet, basename='vreg') +router.register('vehicle', VehicleRegViewSet, basename='vehicle') router.register('filerecord', FilerecordViewSet, basename='filerecord') router.register('fileborrow', FileborrowViewSet, basename='fileborrow') router.register('publicity', PublicityViewSet, basename='publicity') diff --git a/apps/ofm/views.py b/apps/ofm/views.py index 7d5082a0..26906faa 100644 --- a/apps/ofm/views.py +++ b/apps/ofm/views.py @@ -1,9 +1,9 @@ from django.shortcuts import render from apps.utils.viewsets import CustomModelViewSet, CustomGenericViewSet -from .models import Mroom, MroomBooking, MroomSlot, LendingSeal, Vehicle, VehicleSlot, VehicleReg, FileRecord, BorrowRecord, Publicity +from .models import Mroom, MroomBooking, MroomSlot, LendingSeal, VehicleUse, VehicleSlot, VehicleReg, FileRecord, BorrowRecord, Publicity from .serializers import (MroomSerializer, MroomBookingSerializer, MroomSlotSerializer, LendingSealSerializer, - VehicleSerializer, VehicleRecordSerializer, VehSlotSerializer, FileRecordSerializer, BorrowRecordSerializer, PublicitySerializer) + VehicleUseSerializer, VehicleRecordSerializer, VehSlotSerializer, FileRecordSerializer, BorrowRecordSerializer, PublicitySerializer) from apps.utils.mixins import CustomListModelMixin from rest_framework.exceptions import ParseError from apps.ofm.filters import MroomBookingFilterset, SealFilter, BorrowRecordFilter, VehicleFilterset @@ -133,22 +133,22 @@ class VehicleRegViewSet(CustomModelViewSet): serializer_class = VehicleRecordSerializer ordering = ["-create_time"] -class VehicleViewSet(CustomModelViewSet): - """list: 会议室预订 +class VehicleUseViewSet(CustomModelViewSet): + """list: 车辆使用 - 会议室预订 + 车辆使用 """ - queryset = Vehicle.objects.all() - serializer_class = VehicleSerializer + queryset = VehicleUse.objects.all() + serializer_class = VehicleUseSerializer select_related_fields = ["create_by", "ticket", "belong_dept"] filterset_class = VehicleFilterset def add_info_for_list(self, data): vehicle_ids = [d["id"] for d in data] - slots = VehicleSlot.objects.filter(vehicle__in=vehicle_ids).order_by("vehreg", "vehicle", "vdate", "slot") + slots = VehicleSlot.objects.filter(vehicle__in=vehicle_ids).order_by("vehreg", "vehicle_use", "vdate", "slot") vehicle_info = {} for slot in slots: - vehicle_id = slot.vehicle.id + vehicle_id = slot.vehicle_use.id if vehicle_id not in vehicle_info: vehicle_info[vehicle_id] = { @@ -192,7 +192,7 @@ class VehicleViewSet(CustomModelViewSet): return f"{hours:02d}:{minutes:02d}" def perform_update(self, serializer): - ins:Vehicle = self.get_object() + ins:VehicleUse = self.get_object() ticket = ins.ticket if ticket is None or ticket.state.type == 1: pass @@ -222,7 +222,7 @@ class VehicleSlotViewSet(CustomListModelMixin, CustomGenericViewSet): """ queryset = VehicleSlot.objects.all() serializer_class = VehSlotSerializer - filterset_fields = ["vehreg", "vehicle", "vdate", "is_inuse"] + filterset_fields = ["vehreg", "vehicle_use", "vdate", "is_inuse"] class FilerecordViewSet(CustomModelViewSet): @@ -258,120 +258,3 @@ class PublicityViewSet(CustomModelViewSet): ordering = ["-create_time", "number"] -# class PatentInfoViewSet(CustomModelViewSet): -# """list: 专利 - -# 专利 -# """ -# queryset = PatentInfo.objects.all() -# serializer_class = PatentInfoSerializer -# filterset_fields = ["name", "author", "type"] -# ordering = ["-create_time", "name", "author", "type"] - - -# class PapersecretViewSet(CustomModelViewSet): -# """list: 论文申密审批 - -# 论文申密审批 -# """ -# queryset = Papersecret.objects.all() -# serializer_class = PaperSeSerializer -# filterset_fields = ["paper_name", "author"] -# ordering = ["-create_time", "paper_name"] - - -# class PatentRecordViewSet(CustomModelViewSet): -# """list: 专利台账登记 - -# 专利台账登记 -# """ -# queryset = PatentRecord.objects.all() -# serializer_class = PatentRecordSerializer -# select_related_fields = ["patent"] -# filterset_fields = ["title", "volume_number","inventors"] -# ordering = ["-create_time", "title", "type"] -# search_fields = ["title", "volume_number", "inventors"] - -# def get_queryset(self): -# qs = super().get_queryset() -# patent_type = self.request.query_params.get('patent_type', None) -# if patent_type: -# qs = qs.filter(patent__type=patent_type) -# return qs - - -# @action(detail=False, methods=['get']) -# def patent_name(self, request): -# """获取专利列表""" -# search = request.query_params.get('search', '') -# queryset = PatentInfo.objects.all() -# if search: -# queryset = queryset.filter(name__icontains=search) -# patents = [{'id': patent.id, 'name': patent.name} for patent in queryset] -# return Response(patents) - - -# class PlatformViewSet(CustomModelViewSet): -# """list: 平台 - -# 平台 -# """ -# queryset = Platform.objects.all() -# serializer_class = PlatformSerializer -# filterset_fields = ["name"] -# ordering = ["create_time", "name"] - - -# class ProjectViewSet(CustomModelViewSet): -# """list: 项目 - -# 项目 -# """ -# queryset = Project.objects.all() -# serializer_class = ProjectSerializer -# filterset_fields = ["name"] -# ordering = ["create_time", "name"] - - -# class PatentRecordViewSet(CustomModelViewSet): -# """list: 专利台账登记 - -# 专利台账登记 -# """ -# queryset = PatentRecord.objects.all() -# serializer_class = ProjectMemberSerializer -# filterset_fields = ["patent", "type"] -# ordering = ["create_time", "patent", "type"] - - -# class PaperRecordViewSet(CustomModelViewSet): -# """list: 论文台账登记 - -# 论文台账登记 -# """ -# queryset = PaperRecord.objects.all() -# serializer_class = ProjectMemberSerializer -# filterset_fields = ["index", "title", "paper_code","paper_type", "authors"] -# ordering = ["create_time", "paper", "type"] - - -# class ProjectApprovalViewSet(CustomModelViewSet): -# """list: 立项审批表 - -# 立项审批表 -# """ -# queryset = ProjectApproval.objects.all() -# serializer_class = ProjectApprovalSerializer -# filterset_fields = ["project_start_date"] -# ordering = ["project_start_date"] - - -# class ProjectInfoViewSet(CustomModelViewSet): -# """list: 项目信息 - -# 项目信息 -# """ -# queryset = ProjectInfo.objects.all() -# serializer_class = ProjectInfoSerializer -# filterset_fields = ["serial_number", "name", "platform", "project_source"] -# ordering = ["serial_number", "name"]