fix: 修改 ofm - vehicle 中的出发里程
This commit is contained in:
parent
5711791a1f
commit
21424a61bd
|
|
@ -1,6 +1,6 @@
|
||||||
from apps.wf.mixins import TicketMixin
|
from apps.wf.mixins import TicketMixin
|
||||||
from apps.utils.viewsets import CustomModelViewSet
|
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 rest_framework.exceptions import ParseError
|
||||||
from apps.asm.serializers import AssetSerializer, AssetlogSerializer
|
from apps.asm.serializers import AssetSerializer, AssetlogSerializer
|
||||||
from apps.wf.models import Ticket
|
from apps.wf.models import Ticket
|
||||||
|
|
@ -18,10 +18,10 @@ class AssetAuditViewSet(TicketMixin, CustomModelViewSet):
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def add_asset(ticket:Ticket, transition, new_ticket_data: dict):
|
def add_asset(ticket:Ticket, transition, new_ticket_data: dict):
|
||||||
asset = Asset.objects.get(ticket=ticket)
|
asset = AssetAudit.objects.get(ticket=ticket)
|
||||||
if AssetLog.objects.filter(code=asset.code).exists():
|
if Asset.objects.filter(code=asset.code).exists():
|
||||||
raise ParseError('资产名称已存在')
|
raise ParseError('资产名称已存在')
|
||||||
AssetLog.objects.create(**new_ticket_data)
|
Asset.objects.create(**new_ticket_data)
|
||||||
|
|
||||||
|
|
||||||
class AssetViewSet(CustomModelViewSet):
|
class AssetViewSet(CustomModelViewSet):
|
||||||
|
|
|
||||||
|
|
@ -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='出发公里数'),
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
@ -52,14 +52,14 @@ class VehicleReg(CommonADModel):
|
||||||
name = models.CharField('车辆名称', max_length=50)
|
name = models.CharField('车辆名称', max_length=50)
|
||||||
brand = models.CharField('品牌', max_length=50, null=True, blank=True)
|
brand = models.CharField('品牌', max_length=50, null=True, blank=True)
|
||||||
plate = models.CharField('车牌号', max_length=50)
|
plate = models.CharField('车牌号', max_length=50)
|
||||||
km = models.PositiveIntegerField('行驶里程', null=True, blank=True)
|
km = models.PositiveIntegerField('行驶里程', default=0)
|
||||||
|
|
||||||
class VehicleUse(CommonBDModel):
|
class VehicleUse(CommonBDModel):
|
||||||
"""TN: 用车记录"""
|
"""TN: 用车记录"""
|
||||||
location = models.CharField('出发地点', null=True, blank=True, max_length=100)
|
location = models.CharField('出发地点', null=True, blank=True, max_length=100)
|
||||||
via = 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)
|
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)
|
end_km = models.PositiveIntegerField('归还公里数', null=True, blank=True)
|
||||||
actual_km = models.PositiveIntegerField('实际行驶公里数', editable=False)
|
actual_km = models.PositiveIntegerField('实际行驶公里数', editable=False)
|
||||||
is_city = models.BooleanField('是否市内用车', default=True)
|
is_city = models.BooleanField('是否市内用车', default=True)
|
||||||
|
|
@ -75,7 +75,7 @@ class VehicleUse(CommonBDModel):
|
||||||
if self.start_km <= self.end_km:
|
if self.start_km <= self.end_km:
|
||||||
self.actual_km = self.end_km - self.start_km
|
self.actual_km = self.end_km - self.start_km
|
||||||
else:
|
else:
|
||||||
raise ParseError('归还公里数不能小于出发公里数')
|
raise ParseError(f'归还公里数不能小于出发公里数, 出发公里数组为 {self.start_km} km')
|
||||||
else:
|
else:
|
||||||
self.actual_km = 0
|
self.actual_km = 0
|
||||||
return super().save(*args, **kwargs)
|
return super().save(*args, **kwargs)
|
||||||
|
|
|
||||||
|
|
@ -33,14 +33,17 @@ class MroomBookingSerializer(CustomModelSerializer):
|
||||||
mdate = validated_data.pop('mdate')
|
mdate = validated_data.pop('mdate')
|
||||||
booking = super().create(validated_data)
|
booking = super().create(validated_data)
|
||||||
MroomSlot.objects.filter(booking=booking).delete()
|
MroomSlot.objects.filter(booking=booking).delete()
|
||||||
for slot in slots:
|
if slots:
|
||||||
if slot < 0 or slot > 47:
|
for slot in slots:
|
||||||
raise ParseError("时段索引超出范围")
|
if slot < 0 or slot > 47:
|
||||||
ms_exists = MroomSlot.objects.filter(mroom=mroom, mdate=mdate, slot=slot, is_inuse=True).exists()
|
raise ParseError("时段索引超出范围")
|
||||||
if ms_exists:
|
ms_exists = MroomSlot.objects.filter(mroom=mroom, mdate=mdate, slot=slot, is_inuse=True).exists()
|
||||||
raise ParseError("时段已预订,请刷新重选")
|
if ms_exists:
|
||||||
MroomSlot.objects.create(booking=booking, slot=slot, mdate=mdate, mroom=mroom, is_inuse=True)
|
raise ParseError("时段已预订,请刷新重选")
|
||||||
return booking
|
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):
|
def update(self, instance, validated_data):
|
||||||
mroom = validated_data.pop('mroom')
|
mroom = validated_data.pop('mroom')
|
||||||
|
|
@ -48,15 +51,17 @@ class MroomBookingSerializer(CustomModelSerializer):
|
||||||
mdate = validated_data.pop('mdate')
|
mdate = validated_data.pop('mdate')
|
||||||
booking = super().update(instance, validated_data)
|
booking = super().update(instance, validated_data)
|
||||||
MroomSlot.objects.filter(booking=instance).delete()
|
MroomSlot.objects.filter(booking=instance).delete()
|
||||||
for slot in slots:
|
if slots:
|
||||||
if slot < 0 or slot > 47:
|
for slot in slots:
|
||||||
raise ParseError("时段索引超出范围")
|
if slot < 0 or slot > 47:
|
||||||
ms_exists = MroomSlot.objects.filter(mroom=mroom, mdate=mdate, slot=slot, is_inuse=True).exists()
|
raise ParseError("时段索引超出范围")
|
||||||
if ms_exists:
|
ms_exists = MroomSlot.objects.filter(mroom=mroom, mdate=mdate, slot=slot, is_inuse=True).exists()
|
||||||
raise ParseError("时段已预订,请刷新重选")
|
if ms_exists:
|
||||||
MroomSlot.objects.create(booking=booking, slot=slot, mdate=mdate, mroom=mroom, is_inuse=True)
|
raise ParseError("时段已预订,请刷新重选")
|
||||||
return booking
|
MroomSlot.objects.create(booking=booking, slot=slot, mdate=mdate, mroom=mroom, is_inuse=True)
|
||||||
|
return booking
|
||||||
|
else:
|
||||||
|
raise ParseError("请选择时段")
|
||||||
class MroomSlotSerializer(CustomModelSerializer):
|
class MroomSlotSerializer(CustomModelSerializer):
|
||||||
booking_title = serializers.CharField(source='booking.title', read_only=True)
|
booking_title = serializers.CharField(source='booking.title', read_only=True)
|
||||||
class Meta:
|
class Meta:
|
||||||
|
|
@ -88,16 +93,22 @@ class VehicleUseSerializer(CustomModelSerializer):
|
||||||
vehreg = validated_data.pop('vehreg')
|
vehreg = validated_data.pop('vehreg')
|
||||||
slots = validated_data.pop('slots')
|
slots = validated_data.pop('slots')
|
||||||
vdate = validated_data.pop('vdate')
|
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)
|
vehicle_use = super().create(validated_data)
|
||||||
VehicleSlot.objects.filter(vehicle_use=vehicle_use).delete()
|
VehicleSlot.objects.filter(vehicle_use=vehicle_use).delete()
|
||||||
for slot in slots:
|
if slots:
|
||||||
if slot < 0 or slot > 47:
|
for slot in slots:
|
||||||
raise ParseError("时段索引超出范围")
|
if slot < 0 or slot > 47:
|
||||||
ms_exists = VehicleSlot.objects.filter(vehreg=vehreg, vdate=vdate, slot=slot, is_inuse=True).exists()
|
raise ParseError("时段索引超出范围")
|
||||||
if ms_exists:
|
ms_exists = VehicleSlot.objects.filter(vehreg=vehreg, vdate=vdate, slot=slot, is_inuse=True).exists()
|
||||||
raise ParseError("时段已预订,请刷新重选")
|
if ms_exists:
|
||||||
VehicleSlot.objects.create(vehicle_use=vehicle_use, slot=slot, vdate=vdate, vehreg=vehreg, is_inuse=True)
|
raise ParseError("时段已预订,请刷新重选")
|
||||||
return vehicle_use
|
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):
|
def update(self, instance, validated_data):
|
||||||
vehreg = validated_data.pop('vehreg')
|
vehreg = validated_data.pop('vehreg')
|
||||||
|
|
@ -105,14 +116,17 @@ class VehicleUseSerializer(CustomModelSerializer):
|
||||||
vdate = validated_data.pop('vdate')
|
vdate = validated_data.pop('vdate')
|
||||||
vehicle_use = super().update(instance, validated_data)
|
vehicle_use = super().update(instance, validated_data)
|
||||||
VehicleSlot.objects.filter(vehicle_use=vehicle_use).delete()
|
VehicleSlot.objects.filter(vehicle_use=vehicle_use).delete()
|
||||||
for slot in slots:
|
if slots:
|
||||||
if slot < 0 or slot > 47:
|
for slot in slots:
|
||||||
raise ParseError("时段索引超出范围")
|
if slot < 0 or slot > 47:
|
||||||
ms_exists = VehicleSlot.objects.filter(vehreg=vehreg, vdate=vdate, slot=slot, is_inuse=True).exists()
|
raise ParseError("时段索引超出范围")
|
||||||
if ms_exists:
|
ms_exists = VehicleSlot.objects.filter(vehreg=vehreg, vdate=vdate, slot=slot, is_inuse=True).exists()
|
||||||
raise ParseError("时段已预订,请刷新重选")
|
if ms_exists:
|
||||||
VehicleSlot.objects.create(vehicle_use=vehicle_use, slot=slot, vdate=vdate, vehreg=vehreg, is_inuse=True)
|
raise ParseError("时段已预订,请刷新重选")
|
||||||
return vehicle_use
|
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):
|
class VehSlotSerializer(CustomModelSerializer):
|
||||||
|
|
|
||||||
|
|
@ -86,7 +86,7 @@ class PatentRecord(CommonADModel):
|
||||||
bonus_amount = models.DecimalField(max_digits=10,decimal_places=2, null=True,blank=True,verbose_name="奖金金额(元)")
|
bonus_amount = models.DecimalField(max_digits=10,decimal_places=2, null=True,blank=True,verbose_name="奖金金额(元)")
|
||||||
|
|
||||||
class PaperRecord(CommonADModel):
|
class PaperRecord(CommonADModel):
|
||||||
"""TN: 专利台账登记"""
|
"""TN: 论文台账登记"""
|
||||||
PAPER_TYPE_CHOICES = (
|
PAPER_TYPE_CHOICES = (
|
||||||
('research', '研究论文'),
|
('research', '研究论文'),
|
||||||
('overview', '综述'),
|
('overview', '综述'),
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue