72 lines
2.4 KiB
Python
72 lines
2.4 KiB
Python
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, AssetLogCreateSerializer
|
|
from apps.wf.models import Ticket
|
|
from apps.pum.models import Supplier
|
|
|
|
class AssetCateViewSet(CustomModelViewSet):
|
|
"""
|
|
list: 固定资产分类
|
|
|
|
固定资产分类
|
|
"""
|
|
queryset = AssetCate.objects.all()
|
|
serializer_class = AssetCateSerializer
|
|
search_fields = ['name', 'code']
|
|
|
|
|
|
class AssetViewSet(CustomModelViewSet):
|
|
"""
|
|
list: 固定资产台账
|
|
|
|
固定资产台账
|
|
"""
|
|
queryset = Asset.objects.all()
|
|
serializer_class = AssetSerializer
|
|
search_fields = ['name', 'card_number', 'specification']
|
|
filterset_fields = ['keep_dept', 'state']
|
|
|
|
|
|
class AssetLogViewSet(TicketMixin, CustomModelViewSet):
|
|
"""
|
|
list: 固定资产操作
|
|
|
|
固定资产操作
|
|
"""
|
|
queryset = AssetLog.objects.all()
|
|
serializer_class = AssetLogSerializer
|
|
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}
|
|
|
|
@staticmethod
|
|
def apply(ticket: Ticket, transition, new_ticket_data: dict):
|
|
assetlog:AssetLog = ticket.assetlog_ticket
|
|
items = assetlog.items
|
|
sr = AssetSerializer(data=items, many=True)
|
|
sr.is_valid(raise_exception=True)
|
|
sr.save(create_by=ticket.create_by)
|
|
|