From 3830a1b0003feeacfe68f8a475fd2e6e9b21fb07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E5=89=8D=E6=98=8E?= <909355014@qq.com> Date: Mon, 20 Jun 2022 15:18:25 +0800 Subject: [PATCH] =?UTF-8?q?swagger=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/ecm/admin.py | 6 + .../ecm/migrations/0005_auto_20220620_1517.py | 23 ++ apps/ecm/models.py | 9 +- apps/rpm/migrations/0001_initial.py | 204 ++++++++++++++++++ apps/rpm/migrations/__init__.py | 0 apps/rpm/models.py | 4 +- apps/rpm/serializers.py | 30 ++- apps/rpm/urls.py | 7 +- apps/rpm/views.py | 25 ++- server/urls.py | 1 + 10 files changed, 290 insertions(+), 19 deletions(-) create mode 100644 apps/ecm/migrations/0005_auto_20220620_1517.py create mode 100644 apps/rpm/migrations/0001_initial.py create mode 100644 apps/rpm/migrations/__init__.py diff --git a/apps/ecm/admin.py b/apps/ecm/admin.py index 8c38f3f3..a838b6db 100644 --- a/apps/ecm/admin.py +++ b/apps/ecm/admin.py @@ -1,3 +1,9 @@ from django.contrib import admin +from apps.ecm.models import Event + # Register your models here. + +@admin.register(Event) +class EventAdmin(admin.ModelAdmin): + date_hierarchy = 'create_time' \ No newline at end of file diff --git a/apps/ecm/migrations/0005_auto_20220620_1517.py b/apps/ecm/migrations/0005_auto_20220620_1517.py new file mode 100644 index 00000000..63d27f61 --- /dev/null +++ b/apps/ecm/migrations/0005_auto_20220620_1517.py @@ -0,0 +1,23 @@ +# Generated by Django 3.2.12 on 2022-06-20 07:17 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('system', '0001_initial'), + ('ecm', '0004_alter_notifysetting_event_cate'), + ] + + operations = [ + migrations.RemoveField( + model_name='event', + name='imgs', + ), + migrations.AddField( + model_name='event', + name='imgs', + field=models.ManyToManyField(blank=True, to='system.File', verbose_name='事件图片'), + ), + ] diff --git a/apps/ecm/models.py b/apps/ecm/models.py index 15e7190b..182f2dc0 100644 --- a/apps/ecm/models.py +++ b/apps/ecm/models.py @@ -2,7 +2,7 @@ from django.db import models from apps.am.models import Area from apps.hrm.models import Employee from apps.utils.models import BaseModel, CommonAModel, CommonBModel -from apps.system.models import Dept, Post, User +from apps.system.models import Dept, File, Post, User from apps.third.models import TDevice from django.utils import timezone # Create your models here. @@ -24,6 +24,9 @@ class EventCate(CommonAModel): filter_area_level = models.PositiveSmallIntegerField('固定音响区域级别过滤', choices=Area.AREA_LEVEL_CHOICES, default=Area.AREA_LEVEL_1) + def __str__(self): + return self.name + class NotifySetting(CommonAModel): """ @@ -51,7 +54,7 @@ class Event(CommonBModel): 事件 """ cate = models.ForeignKey(EventCate, verbose_name='事件种类', on_delete=models.CASCADE) - imgs = models.JSONField('事件图片', default=list, null=False, blank=True) + imgs = models.ManyToManyField(File, verbose_name='事件图片', blank=True) area = models.ForeignKey(Area, verbose_name='发生区域', on_delete=models.CASCADE) location = models.JSONField('事件点位坐标', default=dict, null=False, blank=True) peope_type = models.CharField('当事人员类型', choices=Employee.PEOPLE_TYPE_CHOICES, @@ -77,7 +80,7 @@ class Remind(BaseModel): on_delete=models.CASCADE, null=True, blank=True) post = models.ForeignKey(Post, verbose_name='岗位', on_delete=models.CASCADE, null=True, blank=True) - dept = models.ForeignKey(Dept, verbose_name='部门', + dept = models.ForeignKey(Dept, verbose_name='部门', on_delete=models.CASCADE, null=True, blank=True) msg = models.TextField('推送文本', null=True, blank=True) is_read = models.BooleanField('站内信已读', default=False) diff --git a/apps/rpm/migrations/0001_initial.py b/apps/rpm/migrations/0001_initial.py new file mode 100644 index 00000000..20d52acc --- /dev/null +++ b/apps/rpm/migrations/0001_initial.py @@ -0,0 +1,204 @@ +# Generated by Django 3.2.12 on 2022-06-20 01:42 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion +import django.utils.timezone + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('hrm', '0002_auto_20220617_1124'), + ('wf', '0001_initial'), + ('system', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='Rcertificate', + 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=20, verbose_name='证书名称')), + ('number', models.CharField(max_length=20, unique=True, verbose_name='证书编号')), + ('type', models.PositiveSmallIntegerField(choices=[(10, '特种作业证书'), (20, '特种设备操作证书'), (30, '安全管理人员证书')], default=10, verbose_name='证书类型')), + ('issue_date', models.DateField(verbose_name='发证日期')), + ('expiration_date', models.DateField(verbose_name='有效期')), + ('review_date', models.DateField(verbose_name='下一次复审日期')), + ('file', models.CharField(blank=True, max_length=1000, null=True, verbose_name='文件地址')), + ('certificate', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='hrm.certificate', verbose_name='关联认可证书')), + ('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='rcertificate_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')), + ], + options={ + 'abstract': False, + }, + ), + migrations.CreateModel( + name='Remployee', + 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=20, verbose_name='姓名')), + ('phone', models.CharField(max_length=11, verbose_name='手机号')), + ('photo', models.CharField(max_length=1000, verbose_name='证件照')), + ('id_number', 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='remployee_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')), + ('employee', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='hrm.employee', verbose_name='成员信息')), + ], + options={ + 'abstract': False, + }, + ), + migrations.CreateModel( + name='Rparty', + 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=20, verbose_name='名称')), + ('number', models.CharField(blank=True, max_length=50, null=True, verbose_name='信用代码')), + ('lawer', models.CharField(blank=True, max_length=20, null=True, verbose_name='法人')), + ('contacter', models.CharField(max_length=20, verbose_name='联系人')), + ('phone', models.CharField(max_length=20, verbose_name='联系电话')), + ('email', models.EmailField(blank=True, max_length=254, null=True, verbose_name='邮箱')), + ('addresss', models.CharField(blank=True, max_length=200, null=True, verbose_name='企业地址')), + ('description', 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='rparty_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='rparty_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')), + ('dept', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='system.dept', verbose_name='关联部门')), + ('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='rparty_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')), + ], + options={ + 'abstract': False, + }, + ), + migrations.CreateModel( + name='Rpj', + 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=20, verbose_name='名称')), + ('type', models.PositiveSmallIntegerField(default=10, verbose_name='项目类型')), + ('contract_number', models.CharField(max_length=20, verbose_name='合同编号')), + ('come_time', models.DateTimeField(verbose_name='进厂时间')), + ('leave_time', models.DateTimeField(verbose_name='离厂时间')), + ('state', models.PositiveSmallIntegerField(default=10, verbose_name='状态')), + ('belong_dept', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='rpj_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='rpj_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')), + ('rparty', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='rpm.rparty', verbose_name='关联相关方')), + ('ticket', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='wf.ticket', verbose_name='关联工单')), + ('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='rpj_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')), + ], + options={ + 'abstract': False, + }, + ), + migrations.CreateModel( + name='Rpjcertificate', + 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=20, verbose_name='证书名称')), + ('number', models.CharField(max_length=20, verbose_name='证书编号')), + ('type', models.PositiveSmallIntegerField(choices=[(10, '特种作业证书'), (20, '特种设备操作证书'), (30, '安全管理人员证书')], default=10, verbose_name='证书类型')), + ('issue_date', models.DateField(verbose_name='发证日期')), + ('expiration_date', models.DateField(verbose_name='有效期')), + ('review_date', models.DateField(verbose_name='下一次复审日期')), + ('file', models.CharField(blank=True, max_length=1000, null=True, verbose_name='文件地址')), + ('rcertificate', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='rpm.rcertificate', verbose_name='关联相关方证书')), + ], + options={ + 'abstract': False, + }, + ), + migrations.CreateModel( + name='Rpjmember', + 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='删除标记')), + ('duty', models.CharField(blank=True, max_length=20, null=True, verbose_name='职责')), + ('is_manager', models.BooleanField(default=False, verbose_name='是否项目负责人')), + ('rcertificates', models.ManyToManyField(through='rpm.Rpjcertificate', to='rpm.Rcertificate')), + ('remployee', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='rpm.remployee', verbose_name='关联人员')), + ('rpj', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='rpm.rpj', verbose_name='关联项目')), + ], + options={ + 'abstract': False, + }, + ), + migrations.CreateModel( + name='Rpjfile', + 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='删除标记')), + ('file_cate', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='system.dictionary', verbose_name='文件种类')), + ('files', models.ManyToManyField(blank=True, to='system.File', verbose_name='文件')), + ('rpj', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='rpm.rpj', verbose_name='关联相关方项目')), + ], + options={ + 'abstract': False, + }, + ), + migrations.AddField( + model_name='rpjcertificate', + name='rpj_member', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='rpm.rpjmember', verbose_name='关联项目成员'), + ), + migrations.CreateModel( + name='Rfile', + 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='删除标记')), + ('file_cate', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='system.dictionary', verbose_name='文件种类')), + ('files', models.ManyToManyField(to='system.File', verbose_name='文件')), + ('rparty', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='rpm.rparty', verbose_name='关联相关方')), + ], + options={ + 'abstract': False, + }, + ), + migrations.AddField( + model_name='remployee', + name='rparty', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='rpm.rparty', verbose_name='所属相关方'), + ), + migrations.AddField( + model_name='remployee', + name='rpj', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='rpm.rpj', verbose_name='最近所属相关方项目'), + ), + migrations.AddField( + model_name='remployee', + name='update_by', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='remployee_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人'), + ), + migrations.AddField( + model_name='rcertificate', + name='remployee', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='rpm.remployee', verbose_name='关联相关方成员'), + ), + migrations.AddField( + model_name='rcertificate', + name='update_by', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='rcertificate_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人'), + ), + ] diff --git a/apps/rpm/migrations/__init__.py b/apps/rpm/migrations/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/apps/rpm/models.py b/apps/rpm/models.py index c845e1a9..88973684 100644 --- a/apps/rpm/models.py +++ b/apps/rpm/models.py @@ -67,13 +67,13 @@ class Rpj(CommonBDModel): on_delete=models.CASCADE, null=True, blank=True) -class RpjFile(BaseModel): +class Rpjfile(BaseModel): """ 相关方项目文件库 """ file_cate = models.ForeignKey(Dictionary, verbose_name='文件种类', on_delete=models.CASCADE, null=True, blank=True) - files = models.ManyToManyField(File, verbose_name='文件') + files = models.ManyToManyField(File, verbose_name='文件', blank=True) rpj = models.ForeignKey(Rpj, verbose_name='关联相关方项目', on_delete=models.CASCADE) diff --git a/apps/rpm/serializers.py b/apps/rpm/serializers.py index edb686b3..5208d9ba 100644 --- a/apps/rpm/serializers.py +++ b/apps/rpm/serializers.py @@ -1,6 +1,6 @@ from apps.hrm.models import Certificate, Employee from apps.hrm.serializers import phone_check -from apps.rpm.models import Rcertificate, Remployee, Rparty, Rpjcertificate, Rpjmember, Rpj +from apps.rpm.models import Rcertificate, Remployee, Rfile, Rparty, Rpjcertificate, Rpjfile, Rpjmember, Rpj from apps.system.models import Dept from apps.utils.constants import EXCLUDE_FIELDS from apps.utils.serializers import CustomModelSerializer @@ -22,7 +22,7 @@ class RpartyCreateUpdateSerializer(CustomModelSerializer): def create(self, validated_data): instance = super().create(validated_data) dept = Dept.objects.create(name=instance.name, - parent=instance.belong_dept) + parent=instance.belong_dept, type='rparty') instance.dept = dept instance.save() return instance @@ -49,7 +49,7 @@ class RpartySimpleSerializer(CustomModelSerializer): class RpartyAssignSerializer(serializers.Serializer): - username = serializers.CharField('用户名') + username = serializers.CharField(label='用户名') class RfileListSerializer(CustomModelSerializer): @@ -57,6 +57,10 @@ class RfileListSerializer(CustomModelSerializer): file_cate_ = DictSerializer(source='file_cate', read_only=True) files_ = FileSerializer(source='files', many=True, read_only=True) + class Meta: + model = Rfile + fields = '__all__' + class RpjCreateUpdateSerializer(CustomModelSerializer): class Meta: @@ -76,7 +80,7 @@ class RemployeeCreateSerializer(CustomModelSerializer): class Meta: model = Remployee - fields = ['name', 'phone', 'photo', 'id_number'] + fields = ['name', 'phone', 'photo', 'id_number', 'rparty'] # model = Employee # exclude = EXCLUDE_FIELDS + ['is_atwork', 'last_check_time', # 'not_work_remark', 'third_info', 'type'] @@ -118,11 +122,11 @@ class RpjmemberCreatesSerializer(CustomModelSerializer): class RpjmemberCreateSerializer(CustomModelSerializer): - rcertificates = serializers.PrimaryKeyRelatedField(label='证书ID', many=True) + rcertificates = serializers.PrimaryKeyRelatedField(label='证书ID', many=True, queryset=Rcertificate.objects.all()) class Meta: model = Rpjmember - fields = ['employee', 'rpj', 'duty', 'is_manager'] + fields = ['remployee', 'rpj', 'duty', 'is_manager', 'rcertificates'] def create(self, validated_data): rpj = validated_data['rpj'] @@ -146,7 +150,7 @@ class RpjmemberCreateSerializer(CustomModelSerializer): class RpjmemberUpdateSerializer(CustomModelSerializer): - rcertificates = serializers.PrimaryKeyRelatedField(label='证书ID', many=True) + rcertificates = serializers.PrimaryKeyRelatedField(label='证书ID', many=True, queryset=Rcertificate.objects.all()) class Meta: model = Rpjmember @@ -173,3 +177,15 @@ class RpjmemberSerializer(CustomModelSerializer): class Meta: model = Rpjmember fields = '__all__' + + +class RpjfileSerializer(CustomModelSerializer): + class Meta: + model = Rpjfile + fields = '__all__' + + +class RpjfileUpdateSerializer(CustomModelSerializer): + class Meta: + model = Rpjfile + fields = ['files'] diff --git a/apps/rpm/urls.py b/apps/rpm/urls.py index e8b8f9f8..68562586 100644 --- a/apps/rpm/urls.py +++ b/apps/rpm/urls.py @@ -1,5 +1,4 @@ -from apps.rpm.models import RpjFile -from apps.rpm.views import RpartyViewSet, RemployeeViewSet, RfileViewSet, RpjViewSet, RpjmemberViewSet +from apps.rpm.views import RpartyViewSet, RemployeeViewSet, RfileViewSet, RpjViewSet, RpjfileViewSet, RpjmemberViewSet from django.urls import path, include from rest_framework.routers import DefaultRouter @@ -12,7 +11,7 @@ router.register('remployee', RemployeeViewSet, basename='remployee') router.register('rfile', RfileViewSet, basename='rfile') router.register('rpj', RpjViewSet, basename='rpj') router.register('rpj_member', RpjmemberViewSet, basename='rpj_member') -router.register('rpj_file', RpjFile, basename='rpj_file') +router.register('rpj_file', RpjfileViewSet, basename='rpj_file') urlpatterns = [ path(API_BASE_URL, include(router.urls)), -] \ No newline at end of file +] diff --git a/apps/rpm/views.py b/apps/rpm/views.py index b32058fa..a2a403dc 100644 --- a/apps/rpm/views.py +++ b/apps/rpm/views.py @@ -1,11 +1,11 @@ from django.shortcuts import render from apps.hrm.models import Certificate, Employee from apps.hrm.serializers import CertificateCreateUpdateSerializer, CertificateSerializer, EmployeeSerializer -from apps.rpm.models import Rcertificate, Remployee, Rparty, Rfile, Rpjmember, Rpj -from apps.rpm.serializers import RcertificateCreateUpdateSerializer, RcertificateSerializer, RemployeeCreateSerializer, RemployeeSerializer, RpartyAssignSerializer, RpartyCreateUpdateSerializer, RfileListSerializer, RpartySerializer, RpjListSerializer, RpjmemberCreateSerializer, RpjmemberCreatesSerializer, RpjCreateUpdateSerializer, RpjmemberSerializer, RpjmemberUpdateSerializer +from apps.rpm.models import Rcertificate, Remployee, Rparty, Rfile, Rpjfile, Rpjmember, Rpj +from apps.rpm.serializers import RcertificateCreateUpdateSerializer, RcertificateSerializer, RemployeeCreateSerializer, RemployeeSerializer, RpartyAssignSerializer, RpartyCreateUpdateSerializer, RfileListSerializer, RpartySerializer, RpjListSerializer, RpjfileSerializer, RpjfileUpdateSerializer, RpjmemberCreateSerializer, RpjmemberCreatesSerializer, RpjCreateUpdateSerializer, RpjmemberSerializer, RpjmemberUpdateSerializer from apps.system.models import Post, User, UserPost from apps.utils.viewsets import CustomGenericViewSet, CustomModelViewSet -from rest_framework.mixins import CreateModelMixin, ListModelMixin, RetrieveModelMixin +from rest_framework.mixins import CreateModelMixin, ListModelMixin, RetrieveModelMixin, DestroyModelMixin, UpdateModelMixin from apps.utils.mixins import CustomDestoryModelMixin from rest_framework.decorators import action from rest_framework.response import Response @@ -161,3 +161,22 @@ class RpjmemberViewSet(CustomModelViewSet): if obj.rpj.state == Rpj.RPJ_CREATE: raise ParseError('项目非创建状态不可删除') return super().destroy(request, *args, **kwargs) + + +class RpjfileViewSet(UpdateModelMixin, DestroyModelMixin, ListModelMixin, CustomGenericViewSet): + perms_map = {'get': '*', 'put': 'rpj:update', 'delete': 'rpj:update'} + queryset = Rpjfile.objects.all() + update_serializer_class = RpjfileUpdateSerializer + serializer_class = RpjfileSerializer + + def update(self, request, *args, **kwargs): + obj = self.get_object() + if obj.rpj.state == Rpj.RPJ_CREATE: + raise ParseError('项目非创建状态不可修改') + return super().update(request, *args, **kwargs) + + def destroy(self, request, *args, **kwargs): + obj = self.get_object() + if obj.rpj.state == Rpj.RPJ_CREATE: + raise ParseError('项目非创建状态不可删除') + return super().destroy(request, *args, **kwargs) diff --git a/server/urls.py b/server/urls.py index 6718178c..7a8b07b7 100755 --- a/server/urls.py +++ b/server/urls.py @@ -51,6 +51,7 @@ urlpatterns = [ path('', include('apps.hrm.urls')), path('', include('apps.am.urls')), path('', include('apps.ecm.urls')), + path('', include('apps.rpm.urls')),