feat: 标签物料根据模板打印功能
This commit is contained in:
parent
a4ba33550e
commit
c05432ce56
|
@ -0,0 +1,10 @@
|
|||
from django_filters import rest_framework as filters
|
||||
from django.utils import timezone
|
||||
from .models import LabelTemplate
|
||||
from apps.utils.filters import MyJsonListFilter
|
||||
|
||||
class LabelTemplateFilter(filters.FilterSet):
|
||||
process_json__contains = MyJsonListFilter(field_name='按工序查询')
|
||||
|
||||
class Meta:
|
||||
model = LabelTemplate
|
|
@ -0,0 +1,18 @@
|
|||
# Generated by Django 3.2.12 on 2025-05-06 02:25
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('cm', '0004_labeltemplate'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='labeltemplate',
|
||||
name='process_json',
|
||||
field=models.JSONField(blank=True, default=list, verbose_name='工序'),
|
||||
),
|
||||
]
|
|
@ -17,5 +17,7 @@ class LableMat(BaseModel):
|
|||
|
||||
|
||||
class LabelTemplate(BaseModel):
|
||||
"""TN: 标签模板"""
|
||||
name = models.TextField("名称")
|
||||
commands = models.JSONField("指令模板", default=list, blank=True)
|
||||
commands = models.JSONField("指令模板", default=list, blank=True)
|
||||
process_json = models.JSONField("工序", default=list, blank=True)
|
|
@ -7,6 +7,8 @@ from apps.utils.serializers import CustomModelSerializer
|
|||
|
||||
class TidSerializer(serializers.Serializer):
|
||||
tid = serializers.CharField(label='表ID')
|
||||
label_template = serializers.CharField(label='标签模板ID(可传default)', allow_null=True, required=False)
|
||||
extra_data = serializers.JSONField(label='额外数据', allow_null=True, required=False)
|
||||
|
||||
|
||||
class LabelMatSerializer(serializers.ModelSerializer):
|
||||
|
|
|
@ -6,6 +6,7 @@ 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 = "#"
|
||||
|
@ -16,6 +17,20 @@ class LableMatViewSet(CustomListModelMixin, RetrieveModelMixin, CustomGenericVie
|
|||
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):
|
||||
"""
|
||||
|
@ -24,6 +39,8 @@ class LableMatViewSet(CustomListModelMixin, RetrieveModelMixin, CustomGenericVie
|
|||
从仓库明细获取物料标签
|
||||
"""
|
||||
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:
|
||||
|
@ -31,6 +48,10 @@ class LableMatViewSet(CustomListModelMixin, RetrieveModelMixin, CustomGenericVie
|
|||
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)
|
||||
|
@ -41,6 +62,8 @@ class LableMatViewSet(CustomListModelMixin, RetrieveModelMixin, CustomGenericVie
|
|||
从车间库存明细获取物料标签
|
||||
"""
|
||||
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:
|
||||
|
@ -50,6 +73,10 @@ class LableMatViewSet(CustomListModelMixin, RetrieveModelMixin, CustomGenericVie
|
|||
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)
|
||||
|
@ -60,6 +87,8 @@ class LableMatViewSet(CustomListModelMixin, RetrieveModelMixin, CustomGenericVie
|
|||
从出入库明细获取物料标签
|
||||
"""
|
||||
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:
|
||||
|
@ -67,6 +96,10 @@ class LableMatViewSet(CustomListModelMixin, RetrieveModelMixin, CustomGenericVie
|
|||
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)
|
||||
|
||||
|
||||
|
@ -77,4 +110,5 @@ class LabelTemplateViewSet(CustomModelViewSet):
|
|||
标签模板
|
||||
"""
|
||||
queryset = LabelTemplate.objects.all()
|
||||
serializer_class = LabelTemplateSerializer
|
||||
serializer_class = LabelTemplateSerializer
|
||||
filterset_class = LabelTemplateFilter
|
Loading…
Reference in New Issue