diff --git a/apps/am/admin.py b/apps/am/admin.py index 8c38f3f3..d3ad5c3e 100755 --- a/apps/am/admin.py +++ b/apps/am/admin.py @@ -1,3 +1,9 @@ from django.contrib import admin +from apps.am.models import Area + # Register your models here. + +@admin.register(Area) +class AreaAdmin(admin.ModelAdmin): + date_hierarchy = 'create_time' \ No newline at end of file diff --git a/apps/am/models.py b/apps/am/models.py index 319a6312..2756c97d 100755 --- a/apps/am/models.py +++ b/apps/am/models.py @@ -35,6 +35,9 @@ class Area(CommonBModel): third_info = models.JSONField('三方信息', default=dict, null=False, blank=True) + def __str__(self) -> str: + return self.name + class Access(CommonADModel): """ diff --git a/apps/opm/migrations/0001_initial.py b/apps/opm/migrations/0001_initial.py new file mode 100644 index 00000000..9a85f959 --- /dev/null +++ b/apps/opm/migrations/0001_initial.py @@ -0,0 +1,221 @@ +# Generated by Django 3.2.12 on 2022-06-21 00:56 + +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 = [ + ('hrm', '0002_auto_20220617_1124'), + ('am', '0001_initial'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('system', '0001_initial'), + ('wf', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='Operation', + 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=20, null=True, verbose_name='作业编号')), + ('name', models.CharField(max_length=200, verbose_name='作业简述')), + ('place', models.TextField(blank=True, null=True, verbose_name='具体地点')), + ('start_time', models.DateTimeField(verbose_name='作业开始时间')), + ('end_time', models.DateTimeField(verbose_name='作业结束时间')), + ('state_work', models.CharField(help_text='运行/停机/检修', max_length=20, verbose_name='生产状态')), + ('area', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='am.area', verbose_name='作业区域')), + ('belong_dept', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='operation_belong_dept', to='system.dept', verbose_name='所属部门')), + ('coordinator', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='业务部门协调员')), + ('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='operation_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')), + ('dept_bus', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='op_dept_bus', to='system.dept', verbose_name='业务部门')), + ('dept_ter', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='op_dept_ter', to='system.dept', verbose_name='属地部门')), + ('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='operation_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')), + ], + options={ + 'abstract': False, + }, + ), + migrations.CreateModel( + name='Opl', + 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=20, null=True, verbose_name='作业许可编号')), + ('level', models.CharField(blank=True, help_text='特技/三级/二级/主干道/次干道', max_length=20, null=True, verbose_name='作业级别')), + ('start_time', models.DateTimeField(blank=True, null=True, verbose_name='作业开始时间')), + ('end_time', models.DateTimeField(blank=True, null=True, verbose_name='作业结束时间')), + ('work_time', models.DateTimeField(blank=True, null=True, verbose_name='安装/拆除时间')), + ('accept_time', models.DateTimeField(blank=True, null=True, verbose_name='验收时间')), + ('work_type', models.CharField(blank=True, max_length=20, null=True, verbose_name='安装/拆除')), + ('power', models.PositiveIntegerField(blank=True, null=True, verbose_name='用电功率')), + ('power_to', models.CharField(blank=True, max_length=20, null=True, verbose_name='用电地点')), + ('power_from', models.CharField(blank=True, max_length=20, null=True, verbose_name='电源接入点')), + ('power_end_time', models.DateTimeField(blank=True, null=True, verbose_name='用电截至')), + ('power_start_time', models.DateTimeField(blank=True, null=True, verbose_name='用电开始')), + ('power_days', models.PositiveSmallIntegerField(blank=True, null=True, verbose_name='计划用电天数')), + ('other_risk', models.TextField(blank=True, null=True, verbose_name='其他风险')), + ('other_emr', models.TextField(blank=True, null=True, verbose_name='其他应急处置')), + ('escape_route', models.TextField(blank=True, null=True, verbose_name='逃生路径')), + ('risks_checked', models.JSONField(blank=True, default=list, verbose_name='风险选择')), + ('measures_checked', models.JSONField(blank=True, default=list, verbose_name='措施选择')), + ('close_note', models.PositiveSmallIntegerField(blank=True, choices=[(10, '作业正常结束'), (20, '因计划改变停止作业'), (30, '因发生异常终止作业'), (40, '其他')], help_text='正常结束/计划改变停止/发生异常停止/其他', null=True, verbose_name='作业关闭情况')), + ('close_dos', models.JSONField(blank=True, default=list, verbose_name='关闭工作')), + ('close_desc', 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='opl_belong_dept', to='system.dept', verbose_name='所属部门')), + ], + options={ + 'abstract': False, + }, + ), + migrations.CreateModel( + name='OplCert', + 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(default=10, verbose_name='证书类型')), + ('issue_date', models.DateField(verbose_name='发证日期')), + ('expiration_date', models.DateField(verbose_name='有效期')), + ('review_date', models.DateField(verbose_name='下一次复审日期')), + ('file', models.TextField(blank=True, null=True, verbose_name='文件地址')), + ('certificate', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='hrm.certificate', verbose_name='关联证书')), + ], + options={ + 'abstract': False, + }, + ), + migrations.CreateModel( + name='OplWorker', + 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, help_text='作业人员/起重司机/司索人员/起重指挥/电工', max_length=100, null=True, verbose_name='工作职责')), + ('certificates', models.ManyToManyField(through='opm.OplCert', to='hrm.Certificate', verbose_name='关联证书')), + ('opl', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='opm.opl', verbose_name='作业许可')), + ('worker', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='作业人员')), + ], + options={ + 'abstract': False, + }, + ), + migrations.AddField( + model_name='oplcert', + name='opl_worker', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='opm.oplworker', verbose_name='关联作业人员'), + ), + migrations.CreateModel( + name='OplCate', + 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='删除标记')), + ('code', models.CharField(max_length=10, unique=True, verbose_name='标识')), + ('name', models.CharField(max_length=20, unique=True, verbose_name='名称')), + ('description', models.TextField(blank=True, null=True, verbose_name='描述')), + ('template_export', models.TextField(blank=True, null=True, verbose_name='导出word模板')), + ('close_options', models.ManyToManyField(related_name='oplcate_close_options', to='system.Dictionary', verbose_name='关闭工作')), + ('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='oplcate_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')), + ('measure_options', models.ManyToManyField(related_name='oplcate_measure_options', to='system.Dictionary', verbose_name='控制措施')), + ('risk_options', models.ManyToManyField(related_name='oplcate_risk_options', to='system.Dictionary', verbose_name='风险分析')), + ('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='oplcate_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')), + ('workflow', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='wf.workflow', verbose_name='使用的工作流')), + ], + options={ + 'abstract': False, + }, + ), + migrations.AddField( + model_name='opl', + name='cate', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='opm.oplcate', verbose_name='作业许可种类'), + ), + migrations.AddField( + model_name='opl', + name='charger', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='opl_charger', to=settings.AUTH_USER_MODEL, verbose_name='作业负责人'), + ), + migrations.AddField( + model_name='opl', + name='close_imgs', + field=models.ManyToManyField(blank=True, related_name='opl_close_imgs', to='system.File', verbose_name='作业关闭照片'), + ), + migrations.AddField( + model_name='opl', + name='create_by', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='opl_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人'), + ), + migrations.AddField( + model_name='opl', + name='create_imgs', + field=models.ManyToManyField(blank=True, related_name='opl_create_imgs', to='system.File', verbose_name='作业审批照片'), + ), + migrations.AddField( + model_name='opl', + name='dept_do', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='system.dept', verbose_name='作业部门'), + ), + migrations.AddField( + model_name='opl', + name='monitor', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='opl_monitor', to=settings.AUTH_USER_MODEL, verbose_name='作业监护人'), + ), + migrations.AddField( + model_name='opl', + name='operation', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='opl_operation', to='opm.operation', verbose_name='关联作业'), + ), + migrations.AddField( + model_name='opl', + name='ticket', + field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='wf.ticket', verbose_name='关联工单'), + ), + migrations.AddField( + model_name='opl', + name='update_by', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='opl_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人'), + ), + migrations.AddField( + model_name='opl', + name='workers', + field=models.ManyToManyField(through='opm.OplWorker', to=settings.AUTH_USER_MODEL, verbose_name='作业人员'), + ), + migrations.CreateModel( + name='GasCheck', + 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='删除标记')), + ('check_time', models.DateTimeField(verbose_name='检测时间')), + ('check_place', models.CharField(max_length=100, verbose_name='检测部位')), + ('o2', models.DecimalField(decimal_places=1, max_digits=3)), + ('co', models.PositiveSmallIntegerField()), + ('lel', models.DecimalField(decimal_places=1, max_digits=3)), + ('is_ok', models.BooleanField(default=True, verbose_name='是否正常')), + ('checker', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='检测人')), + ('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='gascheck_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')), + ('opl', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='opm.opl', verbose_name='关联作业许可')), + ('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='gascheck_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')), + ], + options={ + 'abstract': False, + }, + ), + ] diff --git a/apps/opm/migrations/__init__.py b/apps/opm/migrations/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/apps/opm/models.py b/apps/opm/models.py index a808641c..71243255 100644 --- a/apps/opm/models.py +++ b/apps/opm/models.py @@ -1,9 +1,6 @@ from django.db import models -from apps.hrm.models import Certificate -from apps.system.models import Dept, Dictionary, File, User -from apps.utils.models import BaseModel, CommonADModel, CommonAModel, CommonBDModel, CommonBModel -from apps.am.models import Area -from apps.wf.models import Ticket, Workflow +from apps.system.models import User +from apps.utils.models import BaseModel, CommonADModel, CommonAModel, CommonBDModel # Create your models here. @@ -14,11 +11,19 @@ class OplCate(CommonAModel): code = models.CharField('标识', max_length=10, unique=True) name = models.CharField('名称', max_length=20, unique=True) description = models.TextField('描述', null=True, blank=True) - workflow = models.ForeignKey(Workflow, verbose_name='使用的工作流') + workflow = models.ForeignKey('wf.workflow', verbose_name='使用的工作流', + on_delete=models.SET_NULL, + null=True, blank=True) template_export = models.TextField('导出word模板', null=True, blank=True) - risk_options = models.ManyToManyField(Dictionary, verbose_name='风险分析') - measure_options = models.ManyToManyField(Dictionary, verbose_name='控制措施') - close_options = models.ManyToManyField(Dictionary, verbose_name='关闭工作') + risk_options = models.ManyToManyField('system.dictionary', + verbose_name='风险分析', + related_name='oplcate_risk_options') + measure_options = models.ManyToManyField('system.dictionary', + verbose_name='控制措施', + related_name='oplcate_measure_options') + close_options = models.ManyToManyField('system.dictionary', + verbose_name='关闭工作', + related_name='oplcate_close_options') class Operation(CommonBDModel): @@ -36,16 +41,18 @@ class Operation(CommonBDModel): ) number = models.CharField('作业编号', max_length=20, null=True, blank=True) name = models.CharField('作业简述', max_length=200) - area = models.ForeignKey(Area, verbose_name='作业区域', + area = models.ForeignKey('am.area', verbose_name='作业区域', on_delete=models.CASCADE) place = models.TextField('具体地点', null=True, blank=True) start_time = models.DateTimeField('作业开始时间') end_time = models.DateTimeField('作业结束时间') - dept_ter = models.ForeignKey(Dept, verbose_name='属地部门', - on_delete=models.CASCADE) - dept_bus = models.ForeignKey(Dept, verbose_name='业务部门', - on_delete=models.CASCADE) - coordinator = models.ForeignKey(User, verbose_name='业务部门协调员', + dept_ter = models.ForeignKey('system.dept', verbose_name='属地部门', + on_delete=models.CASCADE, + related_name='op_dept_ter') + dept_bus = models.ForeignKey('system.dept', verbose_name='业务部门', + on_delete=models.CASCADE, + related_name='op_dept_bus') + coordinator = models.ForeignKey('system.user', verbose_name='业务部门协调员', on_delete=models.CASCADE) state_work = models.CharField('生产状态', max_length=20, help_text='运行/停机/检修') @@ -69,11 +76,11 @@ class Opl(CommonBDModel): on_delete=models.CASCADE) start_time = models.DateTimeField('作业开始时间', null=True, blank=True) end_time = models.DateTimeField('作业结束时间', null=True, blank=True) - dept_do = models.ForeignKey(Dept, verbose_name='作业部门', + dept_do = models.ForeignKey('system.dept', verbose_name='作业部门', on_delete=models.CASCADE) - charger = models.ForeignKey(User, verbose_name='作业负责人', + charger = models.ForeignKey('system.user', verbose_name='作业负责人', on_delete=models.CASCADE, related_name='opl_charger') - monitor = models.ForeignKey(User, verbose_name='作业监护人', + monitor = models.ForeignKey('system.user', verbose_name='作业监护人', on_delete=models.CASCADE, related_name='opl_monitor') # electrician = models.ForeignKey(User, verbose_name='电工', # on_delete=models.CASCADE, @@ -92,16 +99,18 @@ class Opl(CommonBDModel): escape_route = models.TextField('逃生路径', null=True, blank=True) risks_checked = models.JSONField('风险选择', default=list, null=False, blank=True) measures_checked = models.JSONField('措施选择', default=list, null=False, blank=True) - workers = models.ManyToManyField(User, verbose_name='作业人员', through='opm.oplworker') - create_imgs = models.ManyToManyField(File, verbose_name='作业审批照片') - close_imgs = models.ManyToManyField(File, verbose_name='作业关闭照片') + workers = models.ManyToManyField('system.user', verbose_name='作业人员', through='opm.oplworker') + create_imgs = models.ManyToManyField('system.file', verbose_name='作业审批照片', + related_name='opl_create_imgs', blank=True) + close_imgs = models.ManyToManyField('system.file', verbose_name='作业关闭照片', + related_name='opl_close_imgs', blank=True) close_note = models.PositiveSmallIntegerField('作业关闭情况', choices=CLOSE_CHOICES1, help_text='正常结束/计划改变停止/发生异常停止/其他', null=True, blank=True) close_dos = models.JSONField('关闭工作', default=list, null=False, blank=True) close_desc = models.TextField('作业关闭描述', null=True, blank=True) - ticket = models.OneToOneField(Ticket, verbose_name='关联工单', + ticket = models.OneToOneField('wf.ticket', verbose_name='关联工单', on_delete=models.CASCADE, null=True, blank=True) @@ -110,12 +119,14 @@ class OplWorker(BaseModel): """ 作业许可人员 """ - worker = models.ForeignKey(User, verbose_name='作业人员', + worker = models.ForeignKey('system.user', verbose_name='作业人员', on_delete=models.CASCADE) opl = models.ForeignKey(Opl, verbose_name='作业许可', on_delete=models.CASCADE) - duty = models.CharField('工作职责', null=True, blank=True, help_text='作业人员/起重司机/司索人员/起重指挥/电工') - certificates = models.ManyToManyField(Certificate, verbose_name='关联证书', through='opt.optcert') + duty = models.CharField('工作职责', max_length=100, + null=True, blank=True, + help_text='作业人员/起重司机/司索人员/起重指挥/电工') + certificates = models.ManyToManyField('hrm.certificate', verbose_name='关联证书', through='opm.oplcert') class OplCert(BaseModel): @@ -124,7 +135,7 @@ class OplCert(BaseModel): """ opl_worker = models.ForeignKey(OplWorker, verbose_name='关联作业人员', on_delete=models.CASCADE) - certificate = models.ForeignKey(Certificate, verbose_name='关联证书', + certificate = models.ForeignKey('hrm.certificate', verbose_name='关联证书', on_delete=models.CASCADE) name = models.CharField('证书名称', max_length=20) number = models.CharField('证书编号', max_length=20) @@ -140,10 +151,10 @@ class GasCheck(CommonADModel): 气体检测记录 """ check_time = models.DateTimeField('检测时间') - check_place = models.CharField('检测部位') + check_place = models.CharField('检测部位', max_length=100) o2 = models.DecimalField(decimal_places=1, max_digits=3) co = models.PositiveSmallIntegerField() lel = models.DecimalField(decimal_places=1, max_digits=3) is_ok = models.BooleanField('是否正常', default=True) - checker = models.ForeignKey(User, verbose_name='检测人') - opl = models.ForeignKey(Opl, verbose_name='关联作业许可') + checker = models.ForeignKey(User, verbose_name='检测人', on_delete=models.CASCADE) + opl = models.ForeignKey(Opl, verbose_name='关联作业许可', on_delete=models.CASCADE) diff --git a/apps/opm/serializers.py b/apps/opm/serializers.py index ef56c486..37bb83db 100644 --- a/apps/opm/serializers.py +++ b/apps/opm/serializers.py @@ -10,7 +10,7 @@ from rest_framework.exceptions import ParseError class OplCateCreateUpdateSerializer(CustomModelSerializer): class Meta: model = OplCate - fields = ['code', 'name', 'template_export', 'workflow'] + exclude = EXCLUDE_FIELDS class OplCateSerializer(CustomModelSerializer): @@ -33,7 +33,7 @@ class OperationSerializer(CustomModelSerializer): class OplWorkerCreateSerializer(CustomModelSerializer): - certificates = serializers.PrimaryKeyRelatedField(label='证书ID', many=True) + certificates = serializers.PrimaryKeyRelatedField(label='证书ID', many=True, queryset=Certificate.objects.all()) class Meta: model = OplWorker @@ -56,7 +56,7 @@ class OplWorkerCreateSerializer(CustomModelSerializer): class OplWorkerUpdateSerializer(CustomModelSerializer): - certificates = serializers.PrimaryKeyRelatedField(label='证书ID', many=True) + certificates = serializers.PrimaryKeyRelatedField(label='证书ID', many=True, queryset=Certificate.objects.all()) class Meta: model = OplWorker diff --git a/apps/opm/urls.py b/apps/opm/urls.py new file mode 100644 index 00000000..1045e4b7 --- /dev/null +++ b/apps/opm/urls.py @@ -0,0 +1,16 @@ +from django.urls import path, include +from rest_framework.routers import DefaultRouter +from apps.opm.views import GasCheckViewSet, OperationViewSet, OplCateViewSet, OplViewSet, OplWorkerViewSet + +API_BASE_URL = 'api/opm/' +HTML_BASE_URL = 'opm/' + +router = DefaultRouter() +router.register('opl_cate', OplCateViewSet, basename='opl_cate') +router.register('operation', OperationViewSet, basename='operation') +router.register('opl', OplViewSet, basename='opl') +router.register('opl_worker', OplWorkerViewSet, basename='opl_worker') +router.register('gas_check', GasCheckViewSet, basename='gas_check') +urlpatterns = [ + path(API_BASE_URL, include(router.urls)), +] \ No newline at end of file diff --git a/apps/opm/views.py b/apps/opm/views.py index 507eda15..3b39e9b0 100644 --- a/apps/opm/views.py +++ b/apps/opm/views.py @@ -2,7 +2,6 @@ from django.shortcuts import render from rest_framework.response import Response from apps.opm.models import GasCheck, Operation, Opl, OplCate, OplWorker from apps.opm.serializers import GasCheckCreateUpdateSerializer, GasCheckSerializer, OperationCreateUpdateSerializer, OperationSerializer, OplCateCreateUpdateSerializer, OplCateSerializer, OplSerializer, OplWorkerCreateSerializer, OplWorkerUpdateSerializer -from apps.opm.services import create_opl_ticket from apps.utils.viewsets import CustomGenericViewSet, CustomModelViewSet from rest_framework.exceptions import ParseError from rest_framework.mixins import CreateModelMixin, ListModelMixin, DestroyModelMixin diff --git a/apps/system/views.py b/apps/system/views.py index 606028cd..5471b4eb 100755 --- a/apps/system/views.py +++ b/apps/system/views.py @@ -372,7 +372,7 @@ class UserPostViewSet(CreateModelMixin, DestroyModelMixin, ListModelMixin, Custo class UserViewSet(CustomModelViewSet): - queryset = User.objects.all() + queryset = User.objects.filter(type='employee') serializer_class = UserListSerializer create_serializer_class = UserCreateSerializer update_serializer_class = UserUpdateSerializer diff --git a/apps/wf/admin.py b/apps/wf/admin.py index 8c38f3f3..66997d16 100755 --- a/apps/wf/admin.py +++ b/apps/wf/admin.py @@ -1,3 +1,13 @@ from django.contrib import admin - +from apps.wf.models import State, Workflow # Register your models here. + + +@admin.register(Workflow) +class WorkflowAdmin(admin.ModelAdmin): + date_hierarchy = 'create_time' + + +@admin.register(State) +class StateAdmin(admin.ModelAdmin): + date_hierarchy = 'create_time' \ No newline at end of file diff --git a/server/settings.py b/server/settings.py index ae8228f7..a809d15f 100755 --- a/server/settings.py +++ b/server/settings.py @@ -59,7 +59,8 @@ INSTALLED_APPS = [ 'apps.hrm', 'apps.am', 'apps.vm', - 'apps.rpm' + 'apps.rpm', + 'apps.opm' ] MIDDLEWARE = [ diff --git a/server/urls.py b/server/urls.py index 7a8b07b7..33ca90c9 100755 --- a/server/urls.py +++ b/server/urls.py @@ -52,6 +52,7 @@ urlpatterns = [ path('', include('apps.am.urls')), path('', include('apps.ecm.urls')), path('', include('apps.rpm.urls')), + path('', include('apps.opm.urls')),