feat: asm assetlogcreate
This commit is contained in:
parent
00f2918d17
commit
79e957bd83
|
|
@ -0,0 +1,21 @@
|
|||
# Generated by Django 3.2.12 on 2025-12-24 06:53
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
('asm', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='assetlog',
|
||||
name='keeper',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='保管人'),
|
||||
),
|
||||
]
|
||||
|
|
@ -32,6 +32,7 @@ class AssetLog(CommonADModel):
|
|||
"""
|
||||
type = models.CharField("流水类型", max_length=50, help_text="入库/出库")
|
||||
keep_dept = models.ForeignKey('system.dept', verbose_name='保管部门', on_delete=models.SET_NULL, null=True, blank=True)
|
||||
keeper = models.ForeignKey('system.user', verbose_name='保管人', on_delete=models.SET_NULL, null=True, blank=True)
|
||||
start_date = models.DateField("启用日期", null=True, blank=True)
|
||||
items = models.JSONField(verbose_name='资产明细', default=list, null=True, blank=True)
|
||||
ticket = models.OneToOneField('wf.ticket', verbose_name='关联工单',
|
||||
|
|
|
|||
|
|
@ -1,7 +1,9 @@
|
|||
from apps.asm.models import Asset, AssetLog, AssetCate
|
||||
from apps.utils.serializers import CustomModelSerializer
|
||||
from apps.utils.constants import EXCLUDE_FIELDS_DEPT, EXCLUDE_FIELDS
|
||||
|
||||
from rest_framework import serializers
|
||||
from apps.system.models import User
|
||||
from apps.wf.serializers import TicketSimpleSerializer
|
||||
|
||||
class AssetCateSerializer(CustomModelSerializer):
|
||||
class Meta:
|
||||
|
|
@ -15,9 +17,39 @@ class AssetSerializer(CustomModelSerializer):
|
|||
fields = '__all__'
|
||||
read_only_fields = EXCLUDE_FIELDS
|
||||
|
||||
class AssetCreateSerializer(CustomModelSerializer):
|
||||
class Meta:
|
||||
model = Asset
|
||||
fields = '__all__'
|
||||
read_only_fields = EXCLUDE_FIELDS
|
||||
|
||||
|
||||
class AssetLogSerializer(CustomModelSerializer):
|
||||
keeper_name = serializers.CharField(source="keeper.name", read_only=True)
|
||||
keep_dept_name = serializers.CharField(source="keep_dept.name", read_only=True)
|
||||
ticket_ = TicketSimpleSerializer(source="ticket", read_only=True)
|
||||
class Meta:
|
||||
model = AssetLog
|
||||
fields = '__all__'
|
||||
read_only_fields = EXCLUDE_FIELDS_DEPT
|
||||
read_only_fields = EXCLUDE_FIELDS_DEPT
|
||||
|
||||
class AssetLogCreateSerializer(CustomModelSerializer):
|
||||
class Meta:
|
||||
model = AssetLog
|
||||
fields = ["keep_dept", "start_date", "items", "keeper", "type"]
|
||||
extra_kwargs = {"start_date": {"required": True}, "keep_dept": {"required": True}}
|
||||
|
||||
def to_internal_value(self, data):
|
||||
for item in data.get("items", []):
|
||||
if item.get("keeper", None) is None:
|
||||
item["keeper"] = data.get("keeper", None)
|
||||
if item.get("keep_dept", None) is None:
|
||||
item["keep_dept"] = data["keep_dept"]
|
||||
if item.get("start_date", None) is None:
|
||||
item["start_date"] = data["start_date"]
|
||||
item["state"] = "在用"
|
||||
return super().to_internal_value(data)
|
||||
|
||||
def validate_items(self, value):
|
||||
AssetCreateSerializer(data=value, many=True).is_valid(raise_exception=True)
|
||||
return value
|
||||
|
|
@ -2,9 +2,9 @@ from apps.wf.mixins import TicketMixin
|
|||
from apps.utils.viewsets import CustomModelViewSet
|
||||
from apps.asm.models import Asset, AssetLog, AssetCate
|
||||
from rest_framework.exceptions import ParseError
|
||||
from apps.asm.serializers import AssetSerializer, AssetLogSerializer, AssetCateSerializer
|
||||
from apps.asm.serializers import AssetSerializer, AssetLogSerializer, AssetCateSerializer, AssetLogCreateSerializer
|
||||
from apps.wf.models import Ticket
|
||||
|
||||
from apps.pum.models import Supplier
|
||||
|
||||
class AssetCateViewSet(CustomModelViewSet):
|
||||
"""
|
||||
|
|
@ -37,7 +37,28 @@ class AssetLogViewSet(TicketMixin, CustomModelViewSet):
|
|||
"""
|
||||
queryset = AssetLog.objects.all()
|
||||
serializer_class = AssetLogSerializer
|
||||
search_fields = ['assetlog']
|
||||
workflow_key = 'wf_assetlog'
|
||||
create_serializer_class = AssetLogCreateSerializer
|
||||
|
||||
def add_info_for_list(self, data):
|
||||
supplierIds = []
|
||||
cateIds = []
|
||||
for dataitem in data:
|
||||
supplierIds.extend([item["supplier"] for item in dataitem["items"]])
|
||||
cateIds.extend([item["cate"] for item in dataitem["items"]])
|
||||
supplier_dict = dict(Supplier.objects.filter(id__in=supplierIds).values_list("id", "name"))
|
||||
assetcate_dict = dict(AssetCate.objects.filter(id__in=cateIds).values_list("id", "name"))
|
||||
for dataitem in data:
|
||||
for item in dataitem["items"]:
|
||||
item["supplier_name"] = supplier_dict.get(item["supplier"], None)
|
||||
item["cate_name"] = assetcate_dict.get(item["cate"], None)
|
||||
return data
|
||||
|
||||
def get_workflow_key(self, instance:AssetLog):
|
||||
if instance.type == "入库":
|
||||
return "wf_assetlogin"
|
||||
raise ParseError("不支持的流程类型")
|
||||
|
||||
def gen_other_ticket_data(self, instance:AssetLog):
|
||||
return {"keep_dept_name": instance.keep_dept.name}
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue