114 lines
4.7 KiB
Python
114 lines
4.7 KiB
Python
from apps.cm.models import LableMat, LabelTemplate
|
|
from rest_framework.decorators import action
|
|
from apps.cm.serializers import TidSerializer, LabelMatSerializer, LabelTemplateSerializer
|
|
from apps.inm.models import MaterialBatch, MIOItem
|
|
from apps.wpm.models import WMaterial
|
|
from rest_framework.exceptions import ParseError, NotFound
|
|
from rest_framework.response import Response
|
|
from apps.utils.viewsets import CustomGenericViewSet, RetrieveModelMixin, CustomListModelMixin, CustomModelViewSet
|
|
from apps.cm.filters import LabelTemplateFilter
|
|
# Create your views here.
|
|
|
|
SPLIT_FIELD = "#"
|
|
|
|
class LableMatViewSet(CustomListModelMixin, RetrieveModelMixin, CustomGenericViewSet):
|
|
perms_map = {"post": "*", "get": "*"}
|
|
serializer_class = LabelMatSerializer
|
|
queryset = LableMat.objects.all()
|
|
select_related_fields = ["material", "material_origin", "supplier"]
|
|
|
|
def gen_commands(self, label_template, tdata):
|
|
if label_template == "default":
|
|
lt = LabelTemplate.objects.get(name="默认标签模板")
|
|
else:
|
|
lt = LabelTemplate.objects.get(id=label_template)
|
|
commands:list = lt.commands
|
|
try:
|
|
for item in commands:
|
|
item = item.format(**tdata)
|
|
except Exception as e:
|
|
raise ParseError(f"标签解析错误-{str(e)}")
|
|
return commands
|
|
|
|
|
|
@action(methods=["post"], detail=False, serializer_class=TidSerializer)
|
|
def get_from_mb(self, request, pk=None):
|
|
"""
|
|
从仓库明细获取物料标签
|
|
|
|
从仓库明细获取物料标签
|
|
"""
|
|
tid = request.data.get("tid")
|
|
label_template = request.data.get("label_template", None)
|
|
extra_data = request.data.get("extra_data", {})
|
|
try:
|
|
mb = MaterialBatch.objects.get(id=tid)
|
|
except MaterialBatch.DoesNotExist:
|
|
raise NotFound("仓库明细不存在")
|
|
obj, _ = LableMat.objects.get_or_create(state=mb.state, material=mb.material, batch=mb.batch, defect=mb.defect, defaults={"supplier": mb.supplier})
|
|
rdata = LabelMatSerializer(obj).data
|
|
rdata["code_label"] = f"mat{SPLIT_FIELD}{obj.id}"
|
|
if label_template:
|
|
tdata = {**rdata, **extra_data}
|
|
commands = self.gen_commands(label_template, tdata)
|
|
rdata["commands"] = commands
|
|
return Response(rdata)
|
|
|
|
@action(methods=["post"], detail=False, serializer_class=TidSerializer)
|
|
def get_from_wm(self, request, pk=None):
|
|
"""
|
|
从车间库存明细获取物料标签
|
|
|
|
从车间库存明细获取物料标签
|
|
"""
|
|
tid = request.data.get("tid")
|
|
label_template = request.data.get("label_template", None)
|
|
extra_data = request.data.get("extra_data", {})
|
|
try:
|
|
wm = WMaterial.objects.get(id=tid)
|
|
except WMaterial.DoesNotExist:
|
|
raise NotFound("车间库存不存在")
|
|
obj, _ = LableMat.objects.get_or_create(state=wm.state, material=wm.material, batch=wm.batch,
|
|
notok_sign=wm.notok_sign, defect=wm.defect,
|
|
material_origin=wm.material_origin)
|
|
rdata = LabelMatSerializer(obj).data
|
|
rdata["code_label"] = f"mat{SPLIT_FIELD}{obj.id}"
|
|
if label_template:
|
|
tdata = {**rdata, **extra_data}
|
|
commands = self.gen_commands(label_template, tdata)
|
|
rdata["commands"] = commands
|
|
return Response(rdata)
|
|
|
|
@action(methods=["post"], detail=False, serializer_class=TidSerializer)
|
|
def get_from_mioitem(self, request, pk=None):
|
|
"""
|
|
从出入库明细获取物料标签
|
|
|
|
从出入库明细获取物料标签
|
|
"""
|
|
tid = request.data.get("tid")
|
|
label_template = request.data.get("label_template", None)
|
|
extra_data = request.data.get("extra_data", {})
|
|
try:
|
|
mioitem: MIOItem = MIOItem.objects.get(id=tid)
|
|
except MIOItem.DoesNotExist:
|
|
raise NotFound("出入库明细不存在")
|
|
obj, _ = LableMat.objects.get_or_create(state=10, material=mioitem.material, batch=mioitem.batch, defaults={"supplier": mioitem.mio.supplier})
|
|
rdata = LabelMatSerializer(obj).data
|
|
rdata["code_label"] = f"mat{SPLIT_FIELD}{obj.id}"
|
|
if label_template:
|
|
tdata = {**rdata, **extra_data}
|
|
commands = self.gen_commands(label_template, tdata)
|
|
rdata["commands"] = commands
|
|
return Response(rdata)
|
|
|
|
|
|
class LabelTemplateViewSet(CustomModelViewSet):
|
|
"""
|
|
list: 标签模板
|
|
|
|
标签模板
|
|
"""
|
|
queryset = LabelTemplate.objects.all()
|
|
serializer_class = LabelTemplateSerializer
|
|
filterset_class = LabelTemplateFilter |