This commit is contained in:
caoqianming 2025-09-11 15:53:36 +08:00
commit 9d692b4d5d
6 changed files with 143 additions and 73 deletions

View File

@ -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,
},
),
]

View File

@ -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):

View File

@ -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):

View File

@ -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()

View File

@ -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')

View File

@ -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):