Merge branch 'master' of http://gitea.xxhhcty.xyz:8080/zcdsj/factory
This commit is contained in:
commit
27416dfeaa
|
@ -0,0 +1,42 @@
|
|||
# Generated by Django 3.2.12 on 2025-09-10 06:26
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
import django.utils.timezone
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
('wf', '0002_alter_state_filter_dept'),
|
||||
('ofm', '0003_remove_lendingseal_submit_user'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='Vehicle',
|
||||
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='删除标记')),
|
||||
('start_time', models.DateField(blank=True, null=True, verbose_name='出车时间')),
|
||||
('end_time', models.DateField(blank=True, null=True, verbose_name='还车时间')),
|
||||
('location', models.CharField(blank=True, max_length=100, null=True, verbose_name='出发地点')),
|
||||
('destination', models.CharField(blank=True, max_length=100, null=True, verbose_name='到达地点')),
|
||||
('start_km', models.PositiveIntegerField(verbose_name='出发公里数')),
|
||||
('end_km', models.PositiveIntegerField(verbose_name='归还公里数')),
|
||||
('actual_km', models.PositiveIntegerField(editable=False, verbose_name='实际行驶公里数')),
|
||||
('is_city', models.BooleanField(default=True, verbose_name='是否市内用车')),
|
||||
('reason', models.CharField(max_length=100, verbose_name='用车事由')),
|
||||
('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='vehicle_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')),
|
||||
('ticket', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='vehicle_ticket', to='wf.ticket', verbose_name='关联工单')),
|
||||
('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='vehicle_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
},
|
||||
),
|
||||
]
|
|
@ -0,0 +1,18 @@
|
|||
# Generated by Django 3.2.12 on 2025-09-10 06:35
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('ofm', '0004_vehicle'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='vehicle',
|
||||
name='via',
|
||||
field=models.CharField(blank=True, max_length=100, null=True, verbose_name='途经地点'),
|
||||
),
|
||||
]
|
|
@ -58,39 +58,29 @@ class LendingSeal(CommonBDModel):
|
|||
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)
|
||||
# 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='关联工单',
|
||||
on_delete=models.SET_NULL, related_name='seal_ticket', null=True, blank=True, db_constraint=False)
|
||||
note = models.TextField('备注', null=True, blank=True)
|
||||
|
||||
|
||||
# class Vehicle(CommonADModel):
|
||||
# """TN: 用车申请"""
|
||||
|
||||
# submit_user = models.ForeignKey(
|
||||
# User, verbose_name='用车人', on_delete=models.CASCADE, null=True, blank=True, related_name='vehicle_submit_user')
|
||||
# approval_user = models.ForeignKey(
|
||||
# User, verbose_name='审批人', on_delete=models.CASCADE, null=True, blank=True, related_name='vehicle_approval_user'
|
||||
# )
|
||||
# start_time = models.DateTimeField('出车时间')
|
||||
# end_time = models.DateTimeField('还车时间')
|
||||
# location = models.CharField('出发地点', null=True, blank=True, max_length=100)
|
||||
# destination = models.CharField('到达地点', null=True, blank=True, max_length=100)
|
||||
# start_km = models.PositiveIntegerField('出发公里数')
|
||||
# end_km = models.PositiveIntegerField('归还公里数')
|
||||
# actual_km = models.PositiveIntegerField('实际行驶公里数', editable=False)
|
||||
# is_city = models.BooleanField('是否市内用车', default=True)
|
||||
# reason = models.CharField('用车事由', max_length=100)
|
||||
# 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 Vehicle(CommonADModel):
|
||||
"""TN: 用车申请"""
|
||||
start_time = models.DateField('出车时间', blank=True, null=True)
|
||||
end_time = models.DateField('还车时间', blank=True, null=True)
|
||||
location = models.CharField('出发地点', null=True, blank=True, max_length=100)
|
||||
via = models.CharField('途经地点', null=True, blank=True, max_length=100)
|
||||
destination = models.CharField('到达地点', null=True, blank=True, max_length=100)
|
||||
start_km = models.PositiveIntegerField('出发公里数')
|
||||
end_km = models.PositiveIntegerField('归还公里数')
|
||||
actual_km = models.PositiveIntegerField('实际行驶公里数', editable=False)
|
||||
is_city = models.BooleanField('是否市内用车', default=True)
|
||||
reason = models.CharField('用车事由', max_length=100)
|
||||
ticket = models.ForeignKey('wf.ticket', verbose_name='关联工单',
|
||||
on_delete=models.SET_NULL, related_name='vehicle_ticket', null=True, blank=True, db_constraint=False)
|
||||
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):
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
from .models import (Mroom, MroomBooking, MroomSlot, LendingSeal)
|
||||
# Vehicle, Publicity,
|
||||
from .models import (Mroom, MroomBooking, MroomSlot, LendingSeal, Vehicle)
|
||||
# , Publicity,
|
||||
# FileRecord, BorrowRecord, Publicity, PatentInfo, PaperOfm, Platform, Project, PatentRecord, PaperRecord, ProjectApproval, ProjectInfo)
|
||||
from apps.utils.serializers import CustomModelSerializer
|
||||
from rest_framework import serializers
|
||||
|
@ -80,17 +80,18 @@ class MroomSlotSerializer(CustomModelSerializer):
|
|||
|
||||
class LendingSealSerializer(CustomModelSerializer):
|
||||
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:
|
||||
model = LendingSeal
|
||||
fields = '__all__'
|
||||
read_only_fields = EXCLUDE_FIELDS
|
||||
|
||||
|
||||
# class VehicleSerializer(CustomModelSerializer):
|
||||
# class Meta:
|
||||
# model = Vehicle
|
||||
# fields = '__all__'
|
||||
# read_only_fields = EXCLUDE_FIELDS + ['actual_km']
|
||||
class VehicleSerializer(CustomModelSerializer):
|
||||
class Meta:
|
||||
model = Vehicle
|
||||
fields = '__all__'
|
||||
read_only_fields = EXCLUDE_FIELDS + ['actual_km']
|
||||
|
||||
|
||||
# class FileRecordSerializer(CustomModelSerializer):
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
|
||||
from apps.wf.models import Ticket
|
||||
# TicketFlow, Transition, Workflow, CustomField, State,
|
||||
from apps.ofm.models import LendingSeal
|
||||
from apps.ofm.models import LendingSeal, Vehicle
|
||||
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):
|
||||
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.update({
|
||||
't_model': 'LendingSeal',
|
||||
|
@ -28,3 +25,17 @@ def bind_lendingseal(ticket: Ticket, transition, new_ticket_data: dict):
|
|||
ins.ticket = ticket
|
||||
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()
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
from django.urls import path, include
|
||||
from rest_framework.routers import DefaultRouter
|
||||
from apps.ofm.views import (MroomViewSet, MroomBookingViewSet, MroomSlotViewSet,LendingSealViewSet)
|
||||
# , VehicleViewSet, FilerecordViewSet, SealModelViewSet,
|
||||
from apps.ofm.views import (MroomViewSet, MroomBookingViewSet, MroomSlotViewSet,LendingSealViewSet, VehicleViewSet)
|
||||
# , , FilerecordViewSet, SealModelViewSet,
|
||||
# FileborrowViewSet, PublicityViewSet, PatentInfoViewSet, PaperViewSet, PlatformViewSet,
|
||||
# ProjectViewSet, PatentRecordViewSet, PaperRecordViewSet, ProjectApprovalViewSet, ProjectInfoViewSet)
|
||||
|
||||
|
@ -14,7 +14,7 @@ router.register('mroombooking', MroomBookingViewSet, basename='mroombooking')
|
|||
router.register('mroomslot', MroomSlotViewSet, basename='mroomslot')
|
||||
# router.register('sealmanage', SealManageViewSet, basename='sealmanage')
|
||||
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('fileborrow', FileborrowViewSet, basename='fileborrow')
|
||||
# router.register('publicity', PublicityViewSet, basename='publicity')
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
from django.shortcuts import render
|
||||
from apps.utils.viewsets import CustomModelViewSet, CustomGenericViewSet
|
||||
from .models import Mroom, MroomBooking, MroomSlot, LendingSeal
|
||||
# Vehicle, FileRecord, Seal
|
||||
from .models import Mroom, MroomBooking, MroomSlot, LendingSeal, Vehicle
|
||||
# , FileRecord, Seal
|
||||
# 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,
|
||||
# LendingSealSerializer, FileRecordSerializer, BorrowRecordSerializer, PublicitySerializer,
|
||||
# PatentInfoSerializer, PaperSerializer, PlatformSerializer, ProjectSerializer, ProjectMemberSerializer, PaperRecordSerializer, ProjectApprovalSerializer, ProjectInfoSerializer)
|
||||
|
@ -102,27 +102,6 @@ class MroomSlotViewSet(CustomListModelMixin, CustomGenericViewSet):
|
|||
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):
|
||||
"""list: 印章外出
|
||||
|
||||
|
@ -134,17 +113,17 @@ class LendingSealViewSet(CustomModelViewSet):
|
|||
serializer_class = LendingSealSerializer
|
||||
filterset_class = SealFilter
|
||||
ordering = ["create_time"]
|
||||
data_filter = True
|
||||
|
||||
|
||||
# class VehicleViewSet(CustomModelViewSet):
|
||||
# """list: 车辆
|
||||
class VehicleViewSet(CustomModelViewSet):
|
||||
"""list: 车辆
|
||||
|
||||
# 车辆
|
||||
# """
|
||||
# queryset = Vehicle.objects.all()
|
||||
# serializer_class = VehicleSerializer
|
||||
# filterset_fields = ["submit_user"]
|
||||
# ordering = ["create_time"]
|
||||
车辆
|
||||
"""
|
||||
queryset = Vehicle.objects.all()
|
||||
serializer_class = VehicleSerializer
|
||||
ordering = ["create_time"]
|
||||
|
||||
|
||||
# class FilerecordViewSet(CustomModelViewSet):
|
||||
|
|
Loading…
Reference in New Issue