feat: ofm 车辆审批

This commit is contained in:
zty 2025-09-10 14:26:23 +08:00
parent 0183234497
commit ba8b258ee7
5 changed files with 55 additions and 74 deletions

View File

@ -58,39 +58,28 @@ class LendingSeal(CommonBDModel):
return_date = models.DateField('拟归还日期', blank=True, null=True) return_date = models.DateField('拟归还日期', blank=True, null=True)
actual_return_date = models.DateField('实际归还日期', blank=True, null=True) actual_return_date = models.DateField('实际归还日期', blank=True, null=True)
reason = models.CharField('借用理由', max_length=100, blank=True, null=True) reason = models.CharField('借用理由', max_length=100, blank=True, null=True)
# submit_user = models.ForeignKey(
# User, verbose_name='提交人', on_delete=models.CASCADE, null=True, blank=True, related_name='seal_submit_user')
ticket = models.ForeignKey('wf.ticket', verbose_name='关联工单', ticket = models.ForeignKey('wf.ticket', verbose_name='关联工单',
on_delete=models.SET_NULL, related_name='seal_ticket', null=True, blank=True, db_constraint=False) on_delete=models.SET_NULL, related_name='seal_ticket', null=True, blank=True, db_constraint=False)
note = models.TextField('备注', null=True, blank=True) note = models.TextField('备注', null=True, blank=True)
# class Vehicle(CommonADModel): class Vehicle(CommonADModel):
# """TN: 用车申请""" """TN: 用车申请"""
start_time = models.DateField('出车时间', blank=True, null=True)
# submit_user = models.ForeignKey( end_time = models.DateField('还车时间', blank=True, null=True)
# User, verbose_name='用车人', on_delete=models.CASCADE, null=True, blank=True, related_name='vehicle_submit_user') location = models.CharField('出发地点', null=True, blank=True, max_length=100)
# approval_user = models.ForeignKey( destination = models.CharField('到达地点', null=True, blank=True, max_length=100)
# User, verbose_name='审批人', on_delete=models.CASCADE, null=True, blank=True, related_name='vehicle_approval_user' start_km = models.PositiveIntegerField('出发公里数')
# ) end_km = models.PositiveIntegerField('归还公里数')
# start_time = models.DateTimeField('出车时间') actual_km = models.PositiveIntegerField('实际行驶公里数', editable=False)
# end_time = models.DateTimeField('还车时间') is_city = models.BooleanField('是否市内用车', default=True)
# location = models.CharField('出发地点', null=True, blank=True, max_length=100) reason = models.CharField('用车事由', max_length=100)
# destination = models.CharField('到达地点', null=True, blank=True, max_length=100) ticket = models.ForeignKey('wf.ticket', verbose_name='关联工单',
# start_km = models.PositiveIntegerField('出发公里数') on_delete=models.SET_NULL, related_name='vehicle_ticket', null=True, blank=True, db_constraint=False)
# end_km = models.PositiveIntegerField('归还公里数') def save(self, *args, **kwargs):
# actual_km = models.PositiveIntegerField('实际行驶公里数', editable=False) if self.end_km and self.start_km:
# is_city = models.BooleanField('是否市内用车', default=True) self.actual_km = self.end_km - self.start_km
# reason = models.CharField('用车事由', max_length=100) return super().save(*args, **kwargs)
# ticket = models.ForeignKey('wf.ticket', verbose_name='关联工单',
# on_delete=models.SET_NULL, related_name='vehicle_ticket', null=True, blank=True, db_constraint=False)
# state = models.PositiveIntegerField(
# '状态', choices=MTASK_STATES, default=MTASK_CREATED, help_text=str(MTASK_STATES))
# def save(self, *args, **kwargs):
# if self.end_km and self.start_km:
# self.actual_km = self.end_km - self.start_km
# return super().save(*args, **kwargs)
# class FileRecord(CommonBDModel): # class FileRecord(CommonBDModel):

View File

@ -1,5 +1,5 @@
from .models import (Mroom, MroomBooking, MroomSlot, LendingSeal) from .models import (Mroom, MroomBooking, MroomSlot, LendingSeal, Vehicle)
# Vehicle, Publicity, # , Publicity,
# FileRecord, BorrowRecord, 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
@ -80,17 +80,18 @@ class MroomSlotSerializer(CustomModelSerializer):
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)
class Meta: class Meta:
model = LendingSeal model = LendingSeal
fields = '__all__' fields = '__all__'
read_only_fields = EXCLUDE_FIELDS read_only_fields = EXCLUDE_FIELDS
# class VehicleSerializer(CustomModelSerializer): class VehicleSerializer(CustomModelSerializer):
# class Meta: class Meta:
# model = Vehicle model = Vehicle
# fields = '__all__' fields = '__all__'
# read_only_fields = EXCLUDE_FIELDS + ['actual_km'] read_only_fields = EXCLUDE_FIELDS + ['actual_km']
# class FileRecordSerializer(CustomModelSerializer): # class FileRecordSerializer(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 from apps.ofm.models import LendingSeal, Vehicle
from rest_framework.exceptions import ParseError from rest_framework.exceptions import ParseError
@ -13,9 +13,6 @@ def seal_submit_validate(ins: LendingSeal):
def bind_lendingseal(ticket: Ticket, transition, new_ticket_data: dict): def bind_lendingseal(ticket: Ticket, transition, new_ticket_data: dict):
ins = LendingSeal.objects.get(id=new_ticket_data['t_id']) ins = LendingSeal.objects.get(id=new_ticket_data['t_id'])
# if ins.submit_time is not None:
# raise ParseError('该印章申请不可提交审批')
# seal_submit_validate(ins)
ticket_data = ticket.ticket_data ticket_data = ticket.ticket_data
ticket_data.update({ ticket_data.update({
't_model': 'LendingSeal', 't_model': 'LendingSeal',
@ -28,3 +25,17 @@ def bind_lendingseal(ticket: Ticket, transition, new_ticket_data: dict):
ins.ticket = ticket ins.ticket = ticket
ins.save() ins.save()
def bind_vehicle(ticket: Ticket, transition, new_ticket_data: dict):
ins = Vehicle.objects.get(id=new_ticket_data['t_id'])
ticket_data = ticket.ticket_data
ticket_data.update({
't_model': 'Vehicle',
'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,7 +1,7 @@
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) from apps.ofm.views import (MroomViewSet, MroomBookingViewSet, MroomSlotViewSet,LendingSealViewSet, VehicleViewSet)
# , VehicleViewSet, FilerecordViewSet, SealModelViewSet, # , , FilerecordViewSet, SealModelViewSet,
# FileborrowViewSet, PublicityViewSet, PatentInfoViewSet, PaperViewSet, PlatformViewSet, # FileborrowViewSet, PublicityViewSet, PatentInfoViewSet, PaperViewSet, PlatformViewSet,
# ProjectViewSet, PatentRecordViewSet, PaperRecordViewSet, ProjectApprovalViewSet, ProjectInfoViewSet) # ProjectViewSet, PatentRecordViewSet, PaperRecordViewSet, ProjectApprovalViewSet, ProjectInfoViewSet)
@ -14,7 +14,7 @@ router.register('mroombooking', MroomBookingViewSet, basename='mroombooking')
router.register('mroomslot', MroomSlotViewSet, basename='mroomslot') 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')

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 from .models import Mroom, MroomBooking, MroomSlot, LendingSeal, Vehicle
# Vehicle, FileRecord, Seal # , FileRecord, Seal
# BorrowRecord, 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) 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)
@ -102,27 +102,6 @@ class MroomSlotViewSet(CustomListModelMixin, CustomGenericViewSet):
filterset_fields = ["mroom", "mdate", "booking"] filterset_fields = ["mroom", "mdate", "booking"]
# class SealModelViewSet(CustomModelViewSet):
# """list: 印章列表
# 印章列表
# """
# queryset = Seal.objects.all()
# serializer_class = SealSerializer
# filterset_fields = ["name"]
# ordering = ["name"]
# class SealManageViewSet(CustomModelViewSet):
# """list: 印章管理
# 印章管理
# """
# queryset = SealManage.objects.all()
# serializer_class = SealManageSerializer
# filterset_fields = ["seal"]
class LendingSealViewSet(CustomModelViewSet): class LendingSealViewSet(CustomModelViewSet):
"""list: 印章外出 """list: 印章外出
@ -134,17 +113,18 @@ class LendingSealViewSet(CustomModelViewSet):
serializer_class = LendingSealSerializer serializer_class = LendingSealSerializer
filterset_class = SealFilter filterset_class = SealFilter
ordering = ["create_time"] ordering = ["create_time"]
data_filter = True
# class VehicleViewSet(CustomModelViewSet): class VehicleViewSet(CustomModelViewSet):
# """list: 车辆 """list: 车辆
# 车辆 车辆
# """ """
# queryset = Vehicle.objects.all() queryset = Vehicle.objects.all()
# serializer_class = VehicleSerializer serializer_class = VehicleSerializer
# filterset_fields = ["submit_user"] filterset_fields = ["submit_user"]
# ordering = ["create_time"] ordering = ["create_time"]
# class FilerecordViewSet(CustomModelViewSet): # class FilerecordViewSet(CustomModelViewSet):