116 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			116 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			Python
		
	
	
	
| from apps.cm.models import LableMat, LabelTemplate
 | |
| from rest_framework.decorators import action
 | |
| from apps.cm.serializers import TidSerializer, LabelMatSerializer, LabelTemplateSerializer, Tid2Serializer
 | |
| 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"]
 | |
| 
 | |
|     @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)
 | |
|         label_template_name = request.data.get("label_template_name", 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 or label_template_name:
 | |
|             tdata = {**rdata, **extra_data}
 | |
|             commands = LabelTemplate.gen_commands(label_template, label_template_name, 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)
 | |
|         label_template_name = request.data.get("label_template_name", 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 or label_template_name:
 | |
|             tdata = {**rdata, **extra_data}
 | |
|             commands = LabelTemplate.gen_commands(label_template, label_template_name, 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)
 | |
|         label_template_name = request.data.get("label_template_name", 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 or label_template_name:
 | |
|             tdata = {**rdata, **extra_data}
 | |
|             commands = LabelTemplate.gen_commands(label_template, label_template_name, tdata)
 | |
|             rdata["commands"] = commands
 | |
|         return Response(rdata)
 | |
| 
 | |
| 
 | |
| class LabelTemplateViewSet(CustomModelViewSet):
 | |
|     """
 | |
|     list: 标签模板
 | |
| 
 | |
|     标签模板
 | |
|     """
 | |
|     queryset = LabelTemplate.objects.all()
 | |
|     serializer_class = LabelTemplateSerializer
 | |
|     filterset_class = LabelTemplateFilter
 | |
| 
 | |
|     @action(methods=["post"], detail=False, serializer_class=Tid2Serializer)
 | |
|     def commands(self, request, *args, **kwargs):
 | |
|         """
 | |
|         获取标签指令
 | |
| 
 | |
|         获取标签指令
 | |
|         """
 | |
|         label_template = request.data.get("label_template", None)
 | |
|         label_template_name = request.data.get("label_template_name", None)
 | |
|         data = request.data.get("data", {})
 | |
|         return Response({"commands": LabelTemplate.gen_commands(label_template, label_template_name, data)})
 | |
|          |