Compare commits

..

No commits in common. "51fb42d597916c72301cac4f7dbe64ae37dc7422" and "b4cfdd693aa78b2f49845141a4d6db2d99b14d9b" have entirely different histories.

6 changed files with 73 additions and 143 deletions

View File

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

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 = models.JSONField('印章信息',default=list ,help_text='{"seal_name": "印章名称"}')
filename = models.TextField('文件名称') filename = models.TextField('文件名称')
file = models.TextField('文件内容') file = models.TextField('文件内容')
file_count = models.PositiveIntegerField('用印份数') file_count = models.PositiveIntegerField('用印份数')
@ -83,25 +83,26 @@ 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, null=True, blank=True) # number = models.CharField('档案编号', max_length=50)
counts = models.CharField('文件份数', max_length=10, null=True, blank=True) # files = models.CharField('文件份数', max_length=10)
location = models.CharField('存放位置', max_length=100, null=True, blank=True) # location = models.CharField('存放位置', max_length=100)
contacts = models.CharField('存档人电话', max_length=50, validators=[phone_validator], blank=True, null=True) # contacts = models.CharField('存档人电话', max_length=50)
reciver = models.CharField('接收人(综合办)', max_length=50, null=True, blank=True) # location = models.CharField('存档位置', max_length=100)
remark = models.TextField('备注', max_length=200, null=True, blank=True) # reciver = models.CharField('接收人(综合办)', max_length=50)
# remark = models.CharField('备注', max_length=100)
class BorrowRecord(CommonBDModel): # class BorrowRecord(CommonBDModel):
"""TN: 借阅、复印、查阅记录""" # """TN: 借阅、复印、查阅记录"""
borrow_file = models.ManyToManyField(FileRecord, related_name="borrow_records") # files = 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('借阅日期', null=True, blank=True) # borrow_date = models.DateField('借阅日期')
return_date = models.DateField('归还日期', null=True, blank=True) # return_date = models.DateField('归还日期')
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.JSONField('用途', default=list, help_text=['借阅', '复印', '查阅']) # remark = models.CharField('用途', max_length=100)
# class Publicity(CommonBDModel): # class Publicity(CommonBDModel):

View File

@ -1,6 +1,6 @@
from .models import (Mroom, MroomBooking, MroomSlot, LendingSeal, Vehicle, FileRecord, BorrowRecord ) from .models import (Mroom, MroomBooking, MroomSlot, LendingSeal, Vehicle)
# , Publicity, # , Publicity,
# Publicity, PatentInfo, PaperOfm, Platform, Project, PatentRecord, PaperRecord, ProjectApproval, ProjectInfo) # FileRecord, BorrowRecord, 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
@ -64,6 +64,20 @@ class MroomSlotSerializer(CustomModelSerializer):
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):
create_by_name = serializers.CharField(source='create_by.name', read_only=True) create_by_name = serializers.CharField(source='create_by.name', read_only=True)
belong_dept_name = serializers.CharField(source='belong_dept.name', read_only=True) belong_dept_name = serializers.CharField(source='belong_dept.name', read_only=True)
@ -82,24 +96,20 @@ class VehicleSerializer(CustomModelSerializer):
read_only_fields = EXCLUDE_FIELDS + ['actual_km'] read_only_fields = EXCLUDE_FIELDS + ['actual_km']
class FileRecordSerializer(CustomModelSerializer): # class FileRecordSerializer(CustomModelSerializer):
create_by_name = serializers.CharField(source='create_by.name', read_only=True) # class Meta:
belong_dept_name = serializers.CharField(source='belong_dept.name', read_only=True) # model = FileRecord
class Meta: # fields = '__all__'
model = FileRecord # read_only_fields = EXCLUDE_FIELDS
fields = '__all__'
read_only_fields = EXCLUDE_FIELDS
class BorrowRecordSerializer(CustomModelSerializer): # class BorrowRecordSerializer(CustomModelSerializer):
create_by_name = serializers.CharField(source='create_by.name', read_only=True) # files = serializers.PrimaryKeyRelatedField(queryset=FileRecord.objects.all(), many=True, write_only=True, label="借阅文件")
belong_dept_name = serializers.CharField(source='belong_dept.name', read_only=True) # file_detail = FileRecordSerializer(source='file', many=True, read_only=True, label="借阅文件详情")
files = serializers.PrimaryKeyRelatedField(queryset=FileRecord.objects.all(), many=True, write_only=True, label="借阅文件") # class Meta:
file_detail = FileRecordSerializer(source='borrow_file', many=True, read_only=True, label="借阅文件详情") # model = BorrowRecord
class Meta: # fields = '__all__'
model = BorrowRecord # read_only_fields = EXCLUDE_FIELDS
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, BorrowRecord from apps.ofm.models import LendingSeal, Vehicle
from rest_framework.exceptions import ParseError from rest_framework.exceptions import ParseError
@ -39,17 +39,3 @@ 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, FilerecordViewSet, FileborrowViewSet) from apps.ofm.views import (MroomViewSet, MroomBookingViewSet, MroomSlotViewSet,LendingSealViewSet, VehicleViewSet)
# SealModelViewSet, # , , FilerecordViewSet, SealModelViewSet,
# , PublicityViewSet, PatentInfoViewSet, PaperViewSet, PlatformViewSet, # FileborrowViewSet, 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, FileRecord, BorrowRecord from .models import Mroom, MroomBooking, MroomSlot, LendingSeal, Vehicle
# Seal # , FileRecord, Seal
# Publicity, PatentInfo, PaperOfm, Platform, Project, PatentRecord, PaperRecord, ProjectApproval, ProjectInfo) # BorrowRecord, Publicity, PatentInfo, PaperOfm, Platform, Project, PatentRecord, PaperRecord, ProjectApproval, ProjectInfo)
from .serializers import (MroomSerializer, MroomBookingSerializer, MroomSlotSerializer, LendingSealSerializer, VehicleSerializer, FileRecordSerializer, BorrowRecordSerializer) from .serializers import (MroomSerializer, MroomBookingSerializer, MroomSlotSerializer, LendingSealSerializer, VehicleSerializer)
# ,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 = [ "name", "number"] # filterset_fields = ["submit_user", "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 = ["borrow_file", "borrow_user"] # filterset_fields = ["files", "borrow_user"]
ordering = ["create_time"] # ordering = ["create_time"]
# class PublicityViewSet(CustomModelViewSet): # class PublicityViewSet(CustomModelViewSet):