diff --git a/apps/asm/views.py b/apps/asm/views.py index 91a6ed7e..761b3fb9 100644 --- a/apps/asm/views.py +++ b/apps/asm/views.py @@ -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): diff --git a/apps/ofm/migrations/0004_auto_20251218_1636.py b/apps/ofm/migrations/0004_auto_20251218_1636.py new file mode 100644 index 00000000..11d37ed4 --- /dev/null +++ b/apps/ofm/migrations/0004_auto_20251218_1636.py @@ -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='出发公里数'), + ), + ] diff --git a/apps/ofm/models.py b/apps/ofm/models.py index 8494a103..b37005ac 100644 --- a/apps/ofm/models.py +++ b/apps/ofm/models.py @@ -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) diff --git a/apps/ofm/serializers.py b/apps/ofm/serializers.py index 5c17c662..57fd4b06 100644 --- a/apps/ofm/serializers.py +++ b/apps/ofm/serializers.py @@ -33,14 +33,17 @@ class MroomBookingSerializer(CustomModelSerializer): mdate = validated_data.pop('mdate') booking = super().create(validated_data) MroomSlot.objects.filter(booking=booking).delete() - for slot in slots: - if slot < 0 or slot > 47: - raise ParseError("时段索引超出范围") - ms_exists = MroomSlot.objects.filter(mroom=mroom, mdate=mdate, slot=slot, is_inuse=True).exists() - if ms_exists: - raise ParseError("时段已预订,请刷新重选") - MroomSlot.objects.create(booking=booking, slot=slot, mdate=mdate, mroom=mroom, is_inuse=True) - return booking + if slots: + for slot in slots: + if slot < 0 or slot > 47: + raise ParseError("时段索引超出范围") + ms_exists = MroomSlot.objects.filter(mroom=mroom, mdate=mdate, slot=slot, is_inuse=True).exists() + if ms_exists: + 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,15 +51,17 @@ class MroomBookingSerializer(CustomModelSerializer): mdate = validated_data.pop('mdate') booking = super().update(instance, validated_data) MroomSlot.objects.filter(booking=instance).delete() - for slot in slots: - if slot < 0 or slot > 47: - raise ParseError("时段索引超出范围") - ms_exists = MroomSlot.objects.filter(mroom=mroom, mdate=mdate, slot=slot, is_inuse=True).exists() - if ms_exists: - raise ParseError("时段已预订,请刷新重选") - MroomSlot.objects.create(booking=booking, slot=slot, mdate=mdate, mroom=mroom, is_inuse=True) - return booking - + if slots: + for slot in slots: + if slot < 0 or slot > 47: + raise ParseError("时段索引超出范围") + ms_exists = MroomSlot.objects.filter(mroom=mroom, mdate=mdate, slot=slot, is_inuse=True).exists() + if ms_exists: + 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,16 +93,22 @@ 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() - for slot in slots: - if slot < 0 or slot > 47: - raise ParseError("时段索引超出范围") - ms_exists = VehicleSlot.objects.filter(vehreg=vehreg, vdate=vdate, slot=slot, is_inuse=True).exists() - if ms_exists: - raise ParseError("时段已预订,请刷新重选") - VehicleSlot.objects.create(vehicle_use=vehicle_use, slot=slot, vdate=vdate, vehreg=vehreg, is_inuse=True) - return vehicle_use + if slots: + for slot in slots: + if slot < 0 or slot > 47: + raise ParseError("时段索引超出范围") + ms_exists = VehicleSlot.objects.filter(vehreg=vehreg, vdate=vdate, slot=slot, is_inuse=True).exists() + if ms_exists: + 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,14 +116,17 @@ class VehicleUseSerializer(CustomModelSerializer): vdate = validated_data.pop('vdate') vehicle_use = super().update(instance, validated_data) VehicleSlot.objects.filter(vehicle_use=vehicle_use).delete() - for slot in slots: - if slot < 0 or slot > 47: - raise ParseError("时段索引超出范围") - ms_exists = VehicleSlot.objects.filter(vehreg=vehreg, vdate=vdate, slot=slot, is_inuse=True).exists() - if ms_exists: - raise ParseError("时段已预订,请刷新重选") - VehicleSlot.objects.create(vehicle_use=vehicle_use, slot=slot, vdate=vdate, vehreg=vehreg, is_inuse=True) - return vehicle_use + if slots: + for slot in slots: + if slot < 0 or slot > 47: + raise ParseError("时段索引超出范围") + ms_exists = VehicleSlot.objects.filter(vehreg=vehreg, vdate=vdate, slot=slot, is_inuse=True).exists() + if ms_exists: + 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): diff --git a/apps/srm/models.py b/apps/srm/models.py index 7126e1b7..880bb6a2 100644 --- a/apps/srm/models.py +++ b/apps/srm/models.py @@ -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', '综述'),