feat: ofm 增加档案台账
This commit is contained in:
parent
a0c3443d9e
commit
19c7e7aad1
|
@ -0,0 +1,67 @@
|
||||||
|
# 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,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
]
|
|
@ -48,7 +48,7 @@ class MroomSlot(BaseModel):
|
||||||
class LendingSeal(CommonBDModel):
|
class LendingSeal(CommonBDModel):
|
||||||
"""TN: 印章外出用印信息"""
|
"""TN: 印章外出用印信息"""
|
||||||
|
|
||||||
seal = models.JSONField('印章信息',default=list ,help_text='{"seal_name": "印章名称"}')
|
seal = models.JSONField('印章信息',default=list ,help_text='[公章,法人章,财务章,合同章,业务章,其他章]')
|
||||||
filename = models.TextField('文件名称')
|
filename = models.TextField('文件名称')
|
||||||
file = models.TextField('文件内容')
|
file = models.TextField('文件内容')
|
||||||
file_count = models.PositiveIntegerField('用印份数')
|
file_count = models.PositiveIntegerField('用印份数')
|
||||||
|
@ -83,26 +83,25 @@ class Vehicle(CommonBDModel):
|
||||||
return super().save(*args, **kwargs)
|
return super().save(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
# class FileRecord(CommonBDModel):
|
class FileRecord(CommonBDModel):
|
||||||
# """TN: 档案台账"""
|
"""TN: 档案台账"""
|
||||||
# name = models.CharField('资料名称', max_length=100)
|
name = models.CharField('资料名称', max_length=100)
|
||||||
# number = models.CharField('档案编号', max_length=50)
|
number = models.CharField('档案编号', max_length=50, null=True, blank=True)
|
||||||
# files = models.CharField('文件份数', max_length=10)
|
counts = models.CharField('文件份数', max_length=10, null=True, blank=True)
|
||||||
# location = models.CharField('存放位置', max_length=100)
|
location = models.CharField('存放位置', max_length=100, null=True, blank=True)
|
||||||
# contacts = models.CharField('存档人电话', max_length=50)
|
contacts = models.CharField('存档人电话', max_length=50, validators=[phone_validator], blank=True, null=True)
|
||||||
# location = models.CharField('存档位置', max_length=100)
|
reciver = models.CharField('接收人(综合办)', max_length=50, null=True, blank=True)
|
||||||
# reciver = models.CharField('接收人(综合办)', max_length=50)
|
remark = models.TextField('备注', max_length=200, null=True, blank=True)
|
||||||
# remark = models.CharField('备注', max_length=100)
|
|
||||||
|
|
||||||
|
|
||||||
# class BorrowRecord(CommonBDModel):
|
class BorrowRecord(CommonBDModel):
|
||||||
# """TN: 借阅、复印、查阅记录"""
|
"""TN: 借阅、复印、查阅记录"""
|
||||||
# files = models.ManyToManyField(FileRecord, related_name="borrow_records")
|
borrow_file = models.ManyToManyField(FileRecord, related_name="borrow_records")
|
||||||
# borrow_user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="borrow_user")
|
borrow_user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="borrow_user")
|
||||||
# borrow_date = models.DateField('借阅日期')
|
borrow_date = models.DateField('借阅日期', null=True, blank=True)
|
||||||
# return_date = models.DateField('归还日期')
|
return_date = models.DateField('归还日期', null=True, blank=True)
|
||||||
# contacts = models.CharField('借阅人电话', max_length=50, validators=[phone_validator], null=True, blank=True)
|
contacts = models.CharField('借阅人电话', max_length=50, validators=[phone_validator], null=True, blank=True)
|
||||||
# remark = models.CharField('用途', max_length=100)
|
remark = models.JSONField('用途', default=list, help_text=['借阅', '复印', '查阅'])
|
||||||
|
|
||||||
|
|
||||||
# class Publicity(CommonBDModel):
|
# class Publicity(CommonBDModel):
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
from .models import (Mroom, MroomBooking, MroomSlot, LendingSeal, Vehicle)
|
from .models import (Mroom, MroomBooking, MroomSlot, LendingSeal, Vehicle, FileRecord, BorrowRecord )
|
||||||
# , Publicity,
|
# , Publicity,
|
||||||
# FileRecord, BorrowRecord, Publicity, PatentInfo, PaperOfm, Platform, Project, PatentRecord, PaperRecord, ProjectApproval, ProjectInfo)
|
# Publicity, PatentInfo, PaperOfm, Platform, Project, PatentRecord, PaperRecord, ProjectApproval, ProjectInfo)
|
||||||
from apps.utils.serializers import CustomModelSerializer
|
from apps.utils.serializers import CustomModelSerializer
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
from django.db import transaction
|
from django.db import transaction
|
||||||
|
@ -62,20 +62,6 @@ class MroomSlotSerializer(CustomModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = MroomSlot
|
model = MroomSlot
|
||||||
fields = '__all__'
|
fields = '__all__'
|
||||||
|
|
||||||
|
|
||||||
# class SealSerializer(CustomModelSerializer):
|
|
||||||
# class Meta:
|
|
||||||
# model = Seal
|
|
||||||
# fields = '__all__'
|
|
||||||
|
|
||||||
|
|
||||||
# class SealManageSerializer(CustomModelSerializer):
|
|
||||||
# seal_name = serializers.CharField(source='seal.name', read_only=True)
|
|
||||||
# class Meta:
|
|
||||||
# model = SealManage
|
|
||||||
# fields = '__all__'
|
|
||||||
# read_only_fields = EXCLUDE_FIELDS
|
|
||||||
|
|
||||||
|
|
||||||
class LendingSealSerializer(CustomModelSerializer):
|
class LendingSealSerializer(CustomModelSerializer):
|
||||||
|
@ -96,20 +82,24 @@ class VehicleSerializer(CustomModelSerializer):
|
||||||
read_only_fields = EXCLUDE_FIELDS + ['actual_km']
|
read_only_fields = EXCLUDE_FIELDS + ['actual_km']
|
||||||
|
|
||||||
|
|
||||||
# class FileRecordSerializer(CustomModelSerializer):
|
class FileRecordSerializer(CustomModelSerializer):
|
||||||
# class Meta:
|
create_by_name = serializers.CharField(source='create_by.name', read_only=True)
|
||||||
# model = FileRecord
|
belong_dept_name = serializers.CharField(source='belong_dept.name', read_only=True)
|
||||||
# fields = '__all__'
|
class Meta:
|
||||||
# read_only_fields = EXCLUDE_FIELDS
|
model = FileRecord
|
||||||
|
fields = '__all__'
|
||||||
|
read_only_fields = EXCLUDE_FIELDS
|
||||||
|
|
||||||
|
|
||||||
# class BorrowRecordSerializer(CustomModelSerializer):
|
class BorrowRecordSerializer(CustomModelSerializer):
|
||||||
# files = serializers.PrimaryKeyRelatedField(queryset=FileRecord.objects.all(), many=True, write_only=True, label="借阅文件")
|
create_by_name = serializers.CharField(source='create_by.name', read_only=True)
|
||||||
# file_detail = FileRecordSerializer(source='file', many=True, read_only=True, label="借阅文件详情")
|
belong_dept_name = serializers.CharField(source='belong_dept.name', read_only=True)
|
||||||
# class Meta:
|
files = serializers.PrimaryKeyRelatedField(queryset=FileRecord.objects.all(), many=True, write_only=True, label="借阅文件")
|
||||||
# model = BorrowRecord
|
file_detail = FileRecordSerializer(source='borrow_file', many=True, read_only=True, label="借阅文件详情")
|
||||||
# fields = '__all__'
|
class Meta:
|
||||||
# read_only_fields = EXCLUDE_FIELDS
|
model = BorrowRecord
|
||||||
|
fields = '__all__'
|
||||||
|
read_only_fields = EXCLUDE_FIELDS
|
||||||
|
|
||||||
|
|
||||||
# class PublicitySerializer(CustomModelSerializer):
|
# class PublicitySerializer(CustomModelSerializer):
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
|
|
||||||
from apps.wf.models import Ticket
|
from apps.wf.models import Ticket
|
||||||
# TicketFlow, Transition, Workflow, CustomField, State,
|
# TicketFlow, Transition, Workflow, CustomField, State,
|
||||||
from apps.ofm.models import LendingSeal, Vehicle
|
from apps.ofm.models import LendingSeal, Vehicle, BorrowRecord
|
||||||
from rest_framework.exceptions import ParseError
|
from rest_framework.exceptions import ParseError
|
||||||
|
|
||||||
|
|
||||||
|
@ -39,3 +39,17 @@ def bind_vehicle(ticket: Ticket, transition, new_ticket_data: dict):
|
||||||
ins.ticket = ticket
|
ins.ticket = ticket
|
||||||
ins.save()
|
ins.save()
|
||||||
|
|
||||||
|
|
||||||
|
def bind_file(ticket: Ticket, transition, new_ticket_data: dict):
|
||||||
|
ins = BorrowRecord.objects.get(id=new_ticket_data['t_id'])
|
||||||
|
ticket_data = ticket.ticket_data
|
||||||
|
ticket_data.update({
|
||||||
|
't_model': 'BorrowRecord',
|
||||||
|
't_id': ins.id,
|
||||||
|
})
|
||||||
|
ticket.ticket_data = ticket_data
|
||||||
|
ticket.create_by = ins.create_by
|
||||||
|
ticket.save()
|
||||||
|
if ins.ticket is None:
|
||||||
|
ins.ticket = ticket
|
||||||
|
ins.save()
|
|
@ -1,8 +1,8 @@
|
||||||
from django.urls import path, include
|
from django.urls import path, include
|
||||||
from rest_framework.routers import DefaultRouter
|
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, VehicleViewSet, FilerecordViewSet, FileborrowViewSet)
|
||||||
# , , FilerecordViewSet, SealModelViewSet,
|
# SealModelViewSet,
|
||||||
# FileborrowViewSet, PublicityViewSet, PatentInfoViewSet, PaperViewSet, PlatformViewSet,
|
# , PublicityViewSet, PatentInfoViewSet, PaperViewSet, PlatformViewSet,
|
||||||
# ProjectViewSet, PatentRecordViewSet, PaperRecordViewSet, ProjectApprovalViewSet, ProjectInfoViewSet)
|
# ProjectViewSet, PatentRecordViewSet, PaperRecordViewSet, ProjectApprovalViewSet, ProjectInfoViewSet)
|
||||||
|
|
||||||
API_BASE_URL = 'api/ofm/'
|
API_BASE_URL = 'api/ofm/'
|
||||||
|
@ -15,8 +15,8 @@ router.register('mroomslot', MroomSlotViewSet, basename='mroomslot')
|
||||||
# router.register('sealmanage', SealManageViewSet, basename='sealmanage')
|
# router.register('sealmanage', SealManageViewSet, basename='sealmanage')
|
||||||
router.register('lendingseal', LendingSealViewSet, basename='lendingseal')
|
router.register('lendingseal', LendingSealViewSet, basename='lendingseal')
|
||||||
router.register('vehicle', VehicleViewSet, basename='vehicle')
|
router.register('vehicle', VehicleViewSet, basename='vehicle')
|
||||||
# router.register('filerecord', FilerecordViewSet, basename='filerecord')
|
router.register('filerecord', FilerecordViewSet, basename='filerecord')
|
||||||
# router.register('fileborrow', FileborrowViewSet, basename='fileborrow')
|
router.register('fileborrow', FileborrowViewSet, basename='fileborrow')
|
||||||
# router.register('publicity', PublicityViewSet, basename='publicity')
|
# router.register('publicity', PublicityViewSet, basename='publicity')
|
||||||
# router.register('patentinfo', PatentInfoViewSet, basename='patentinfo')
|
# router.register('patentinfo', PatentInfoViewSet, basename='patentinfo')
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
from django.shortcuts import render
|
from django.shortcuts import render
|
||||||
from apps.utils.viewsets import CustomModelViewSet, CustomGenericViewSet
|
from apps.utils.viewsets import CustomModelViewSet, CustomGenericViewSet
|
||||||
from .models import Mroom, MroomBooking, MroomSlot, LendingSeal, Vehicle
|
from .models import Mroom, MroomBooking, MroomSlot, LendingSeal, Vehicle, FileRecord, BorrowRecord
|
||||||
# , FileRecord, Seal
|
# Seal
|
||||||
# BorrowRecord, Publicity, PatentInfo, PaperOfm, Platform, Project, PatentRecord, PaperRecord, ProjectApproval, ProjectInfo)
|
# Publicity, PatentInfo, PaperOfm, Platform, Project, PatentRecord, PaperRecord, ProjectApproval, ProjectInfo)
|
||||||
from .serializers import (MroomSerializer, MroomBookingSerializer, MroomSlotSerializer, LendingSealSerializer, VehicleSerializer)
|
from .serializers import (MroomSerializer, MroomBookingSerializer, MroomSlotSerializer, LendingSealSerializer, VehicleSerializer, FileRecordSerializer, BorrowRecordSerializer)
|
||||||
# ,SealSerializer,
|
# ,SealSerializer,
|
||||||
# LendingSealSerializer, FileRecordSerializer, BorrowRecordSerializer, PublicitySerializer,
|
# LendingSealSerializer, FileRecordSerializer, BorrowRecordSerializer, PublicitySerializer,
|
||||||
# PatentInfoSerializer, PaperSerializer, PlatformSerializer, ProjectSerializer, ProjectMemberSerializer, PaperRecordSerializer, ProjectApprovalSerializer, ProjectInfoSerializer)
|
# PatentInfoSerializer, PaperSerializer, PlatformSerializer, ProjectSerializer, ProjectMemberSerializer, PaperRecordSerializer, ProjectApprovalSerializer, ProjectInfoSerializer)
|
||||||
|
@ -126,26 +126,26 @@ class VehicleViewSet(CustomModelViewSet):
|
||||||
ordering = ["create_time"]
|
ordering = ["create_time"]
|
||||||
|
|
||||||
|
|
||||||
# class FilerecordViewSet(CustomModelViewSet):
|
class FilerecordViewSet(CustomModelViewSet):
|
||||||
# """list: 文件
|
"""list: 文件
|
||||||
|
|
||||||
# 文件
|
文件
|
||||||
# """
|
"""
|
||||||
# queryset = FileRecord.objects.all()
|
queryset = FileRecord.objects.all()
|
||||||
# serializer_class = FileRecordSerializer
|
serializer_class = FileRecordSerializer
|
||||||
# filterset_fields = ["submit_user", "name", "number"]
|
filterset_fields = [ "name", "number"]
|
||||||
# ordering = ["create_time", "number", "name"]
|
ordering = ["create_time", "number", "name"]
|
||||||
|
|
||||||
|
|
||||||
# class FileborrowViewSet(CustomModelViewSet):
|
class FileborrowViewSet(CustomModelViewSet):
|
||||||
# """list: 文件借阅
|
"""list: 文件借阅
|
||||||
|
|
||||||
# 文件借阅
|
文件借阅
|
||||||
# """
|
"""
|
||||||
# queryset = BorrowRecord.objects.all()
|
queryset = BorrowRecord.objects.all()
|
||||||
# serializer_class = BorrowRecordSerializer
|
serializer_class = BorrowRecordSerializer
|
||||||
# filterset_fields = ["files", "borrow_user"]
|
filterset_fields = ["borrow_file", "borrow_user"]
|
||||||
# ordering = ["create_time"]
|
ordering = ["create_time"]
|
||||||
|
|
||||||
|
|
||||||
# class PublicityViewSet(CustomModelViewSet):
|
# class PublicityViewSet(CustomModelViewSet):
|
||||||
|
|
Loading…
Reference in New Issue