fix: 修改 ofm - vehicle 中的出发里程

This commit is contained in:
TianyangZhang 2025-12-19 13:30:53 +08:00
parent 5711791a1f
commit 21424a61bd
5 changed files with 78 additions and 41 deletions

View File

@ -1,6 +1,6 @@
from apps.wf.mixins import TicketMixin
from apps.utils.viewsets import CustomModelViewSet
from apps.asm.models import Asset
from apps.asm.models import Asset, AssetAudit
from rest_framework.exceptions import ParseError
from apps.asm.serializers import AssetSerializer, AssetlogSerializer
from apps.wf.models import Ticket
@ -18,10 +18,10 @@ class AssetAuditViewSet(TicketMixin, CustomModelViewSet):
@staticmethod
def add_asset(ticket:Ticket, transition, new_ticket_data: dict):
asset = Asset.objects.get(ticket=ticket)
if AssetLog.objects.filter(code=asset.code).exists():
asset = AssetAudit.objects.get(ticket=ticket)
if Asset.objects.filter(code=asset.code).exists():
raise ParseError('资产名称已存在')
AssetLog.objects.create(**new_ticket_data)
Asset.objects.create(**new_ticket_data)
class AssetViewSet(CustomModelViewSet):

View File

@ -0,0 +1,23 @@
# Generated by Django 3.2.12 on 2025-12-18 08:36
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('ofm', '0003_borrowrecord_count'),
]
operations = [
migrations.AlterField(
model_name='vehiclereg',
name='km',
field=models.PositiveIntegerField(default=0, verbose_name='行驶里程'),
),
migrations.AlterField(
model_name='vehicleuse',
name='start_km',
field=models.PositiveIntegerField(blank=True, null=True, verbose_name='出发公里数'),
),
]

View File

@ -52,14 +52,14 @@ class VehicleReg(CommonADModel):
name = models.CharField('车辆名称', max_length=50)
brand = models.CharField('品牌', max_length=50, null=True, blank=True)
plate = models.CharField('车牌号', max_length=50)
km = models.PositiveIntegerField('行驶里程', null=True, blank=True)
km = models.PositiveIntegerField('行驶里程', default=0)
class VehicleUse(CommonBDModel):
"""TN: 用车记录"""
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('出发公里数')
start_km = models.PositiveIntegerField('出发公里数', null=True, blank=True)
end_km = models.PositiveIntegerField('归还公里数', null=True, blank=True)
actual_km = models.PositiveIntegerField('实际行驶公里数', editable=False)
is_city = models.BooleanField('是否市内用车', default=True)
@ -75,7 +75,7 @@ class VehicleUse(CommonBDModel):
if self.start_km <= self.end_km:
self.actual_km = self.end_km - self.start_km
else:
raise ParseError('归还公里数不能小于出发公里数')
raise ParseError(f'归还公里数不能小于出发公里数, 出发公里数组为 {self.start_km} km')
else:
self.actual_km = 0
return super().save(*args, **kwargs)

View File

@ -33,6 +33,7 @@ class MroomBookingSerializer(CustomModelSerializer):
mdate = validated_data.pop('mdate')
booking = super().create(validated_data)
MroomSlot.objects.filter(booking=booking).delete()
if slots:
for slot in slots:
if slot < 0 or slot > 47:
raise ParseError("时段索引超出范围")
@ -41,6 +42,8 @@ class MroomBookingSerializer(CustomModelSerializer):
raise ParseError("时段已预订,请刷新重选")
MroomSlot.objects.create(booking=booking, slot=slot, mdate=mdate, mroom=mroom, is_inuse=True)
return booking
else:
raise ParseError("请选择时段")
def update(self, instance, validated_data):
mroom = validated_data.pop('mroom')
@ -48,6 +51,7 @@ class MroomBookingSerializer(CustomModelSerializer):
mdate = validated_data.pop('mdate')
booking = super().update(instance, validated_data)
MroomSlot.objects.filter(booking=instance).delete()
if slots:
for slot in slots:
if slot < 0 or slot > 47:
raise ParseError("时段索引超出范围")
@ -56,7 +60,8 @@ class MroomBookingSerializer(CustomModelSerializer):
raise ParseError("时段已预订,请刷新重选")
MroomSlot.objects.create(booking=booking, slot=slot, mdate=mdate, mroom=mroom, is_inuse=True)
return booking
else:
raise ParseError("请选择时段")
class MroomSlotSerializer(CustomModelSerializer):
booking_title = serializers.CharField(source='booking.title', read_only=True)
class Meta:
@ -88,8 +93,12 @@ class VehicleUseSerializer(CustomModelSerializer):
vehreg = validated_data.pop('vehreg')
slots = validated_data.pop('slots')
vdate = validated_data.pop('vdate')
validated_data['start_km'] = vehreg.km
if validated_data.get('end_km', None):
vehreg.km= validated_data['end_km']
vehicle_use = super().create(validated_data)
VehicleSlot.objects.filter(vehicle_use=vehicle_use).delete()
if slots:
for slot in slots:
if slot < 0 or slot > 47:
raise ParseError("时段索引超出范围")
@ -98,6 +107,8 @@ class VehicleUseSerializer(CustomModelSerializer):
raise ParseError("时段已预订,请刷新重选")
VehicleSlot.objects.create(vehicle_use=vehicle_use, slot=slot, vdate=vdate, vehreg=vehreg, is_inuse=True)
return vehicle_use
else:
raise ParseError("请选择时段")
def update(self, instance, validated_data):
vehreg = validated_data.pop('vehreg')
@ -105,6 +116,7 @@ class VehicleUseSerializer(CustomModelSerializer):
vdate = validated_data.pop('vdate')
vehicle_use = super().update(instance, validated_data)
VehicleSlot.objects.filter(vehicle_use=vehicle_use).delete()
if slots:
for slot in slots:
if slot < 0 or slot > 47:
raise ParseError("时段索引超出范围")
@ -113,6 +125,8 @@ class VehicleUseSerializer(CustomModelSerializer):
raise ParseError("时段已预订,请刷新重选")
VehicleSlot.objects.create(vehicle_use=vehicle_use, slot=slot, vdate=vdate, vehreg=vehreg, is_inuse=True)
return vehicle_use
else:
raise ParseError("请选择时段")
class VehSlotSerializer(CustomModelSerializer):

View File

@ -86,7 +86,7 @@ class PatentRecord(CommonADModel):
bonus_amount = models.DecimalField(max_digits=10,decimal_places=2, null=True,blank=True,verbose_name="奖金金额(元)")
class PaperRecord(CommonADModel):
"""TN: 专利台账登记"""
"""TN: 论文台账登记"""
PAPER_TYPE_CHOICES = (
('research', '研究论文'),
('overview', '综述'),