From 0bae0d4c53cde1faeb2aced05e206fd7365d62e1 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Mon, 14 Mar 2022 11:11:46 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=B6=E4=BB=96=E5=87=BA=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hb_server/apps/develop/tasks.py | 8 ++++---- hb_server/apps/inm/serializers.py | 30 ++++++++++++++++++++++++++++++ hb_server/apps/inm/services.py | 2 +- hb_server/apps/inm/views.py | 13 ++++++++++++- 4 files changed, 47 insertions(+), 6 deletions(-) diff --git a/hb_server/apps/develop/tasks.py b/hb_server/apps/develop/tasks.py index 398ad36..b9c1991 100644 --- a/hb_server/apps/develop/tasks.py +++ b/hb_server/apps/develop/tasks.py @@ -4,7 +4,7 @@ from rest_framework.response import Response from celery import shared_task import os import subprocess -from server.settings_pro import DATABASES, BACKUP_DATABASE_PATH +from server.settings_pro import DATABASES, BACKUP_PATH, SH_PATH @shared_task def backup_database(): @@ -17,14 +17,14 @@ def backup_database(): DATABASES['default']['USER'], DATABASES['default']['PASSWORD'], DATABASES['default']['NAME'], - BACKUP_DATABASE_PATH, + BACKUP_PATH + '/database', name) completed = subprocess.run(command, shell=True, capture_output=True, text=True) return completed @shared_task def reload_server(): - command = 'bash /home/lighthouse/hberp/hb_server/sh/git.sh' + command = 'bash {}/git.sh'.format(SH_PATH) completed = subprocess.run(command, shell=True, capture_output=True, text=True) return completed @@ -36,7 +36,7 @@ def reload_server_only(): @shared_task def backup_media(): - command = 'bash /home/lighthouse/hberp/hb_server/sh/backup_media.sh' + command = 'bash {}/backup_media.sh'.format(SH_PATH) completed = subprocess.run(command, shell=True, capture_output=True, text=True) return completed diff --git a/hb_server/apps/inm/serializers.py b/hb_server/apps/inm/serializers.py index 4c2374f..c336713 100644 --- a/hb_server/apps/inm/serializers.py +++ b/hb_server/apps/inm/serializers.py @@ -142,6 +142,36 @@ class MaterialBatchQuerySerializer(serializers.Serializer): warehouse = serializers.IntegerField(label="仓库ID", required=False) materials = serializers.ListField(child=serializers.IntegerField(label="物料ID"), required=False) +class FIFODetailOutOtherSerializer(serializers.Serializer): + material_batch = serializers.PrimaryKeyRelatedField(queryset=MaterialBatch.objects.all(), label="物料批次ID") + count = serializers.IntegerField(label="数量", min_value=0) + +class FIFOOutOtherSerializer(serializers.ModelSerializer): + """ + 其他出库序列化 + """ + details = FIFODetailOutOtherSerializer(many=True, required=False) + + class Meta: + model = FIFO + fields = ['details'] + + def create(self, validated_data): + details = validated_data.pop('details') + with transaction.atomic(): + validated_data['type'] = FIFO.FIFO_TYPE_OTHER_OUT + validated_data['number'] = 'CK' + ranstr(7) + obj = FIFO(**validated_data) + obj.save() + for i in details: + mb = i['material_batch'] + i['material'] = mb.material + i['batch'] = mb.batch + i['warehouse'] = mb.warehouse + i['fifo'] = obj + FIFOItem.objects.create(**i) + return obj + class FIFOInOtherSerializer(serializers.ModelSerializer): """ 其他入库序列化 diff --git a/hb_server/apps/inm/services.py b/hb_server/apps/inm/services.py index 49c7c58..159f148 100644 --- a/hb_server/apps/inm/services.py +++ b/hb_server/apps/inm/services.py @@ -59,7 +59,7 @@ class InmService: pu_order_item.delivered_count = delivered_count pu_order_item.save() - elif instance.type in [FIFO.FIFO_TYPE_DO_OUT, FIFO.FIFO_TYPE_SALE_OUT]: # 生产领料 销售出库 + elif instance.type in [FIFO.FIFO_TYPE_DO_OUT, FIFO.FIFO_TYPE_SALE_OUT, FIFO.FIFO_TYPE_OTHER_OUT]: # 生产领料 销售出库 # 更新相关表 for i in FIFOItem.objects.filter(fifo=instance): material = i.material diff --git a/hb_server/apps/inm/views.py b/hb_server/apps/inm/views.py index ce7a72d..fcc454f 100644 --- a/hb_server/apps/inm/views.py +++ b/hb_server/apps/inm/views.py @@ -6,7 +6,7 @@ from rest_framework.viewsets import GenericViewSet, ModelViewSet from apps.inm.filters import IProductFilterSet, MbFilterSet from apps.inm.models import FIFO, FIFOItem, IProduct, MaterialBatch, WareHouse, Inventory -from apps.inm.serializers import FIFOInOtherSerializer, FIFOItemCreateSerializer, FIFOItemSerializer, FIFOInPurSerializer, FIFOItemUpdateSerializer, FIFOListSerializer, IProductListSerializer, \ +from apps.inm.serializers import FIFOInOtherSerializer, FIFOItemCreateSerializer, FIFOItemSerializer, FIFOInPurSerializer, FIFOItemUpdateSerializer, FIFOListSerializer, FIFOOutOtherSerializer, IProductListSerializer, \ InmTestRecordCreateSerializer, MaterialBatchQuerySerializer, MaterialBatchSerializer, WareHouseSerializer, \ WareHouseCreateUpdateSerializer, InventorySerializer from apps.inm.services import InmService @@ -183,6 +183,17 @@ class FIFOViewSet(ListModelMixin, DestroyModelMixin, GenericViewSet): serializer.save(create_by=request.user) return Response() + @action(methods=['post'], detail=False, perms_map={'post': 'fifo_out_other'}, + serializer_class=FIFOOutOtherSerializer) + def out_other(self, request, pk=None): + """ + 其他出库 + """ + serializer = self.get_serializer(data=request.data) + serializer.is_valid(raise_exception=True) + serializer.save(create_by=request.user) + return Response() + @action(methods=['post'], detail=True, perms_map={'post': 'fifo_audit'}, serializer_class=serializers.Serializer) @transaction.atomic def audit(self, request, pk=None):