diff --git a/apps/wpm/migrations/0128_add_is_manual_to_wmaterial.py b/apps/wpm/migrations/0128_add_is_manual_to_wmaterial.py new file mode 100644 index 00000000..c2838810 --- /dev/null +++ b/apps/wpm/migrations/0128_add_is_manual_to_wmaterial.py @@ -0,0 +1,18 @@ +# Generated by Django 4.2.27 on 2026-03-26 08:56 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('wpm', '0127_handoverb_oinfo_json_alter_attlog_create_by_and_more'), + ] + + operations = [ + migrations.AddField( + model_name='wmaterial', + name='is_manual', + field=models.BooleanField(default=False, verbose_name='手动创建'), + ), + ] diff --git a/apps/wpm/models.py b/apps/wpm/models.py index 48977fde..ad38dbed 100644 --- a/apps/wpm/models.py +++ b/apps/wpm/models.py @@ -126,6 +126,7 @@ class WMaterial(CommonBDModel): batch_ofrom = models.TextField('原料批次号', null=True, blank=True) material_ofrom = models.ForeignKey(Material, verbose_name='原料物料', on_delete=models.SET_NULL, null=True, blank=True, related_name='wm_mofrom') number_from = models.TextField("来源于个号", null=True, blank=True) + is_manual = models.BooleanField('手动创建', default=False) @property def belong_dept_or_mgroup_id(self): diff --git a/apps/wpm/views.py b/apps/wpm/views.py index 4e19926d..19c3b24b 100644 --- a/apps/wpm/views.py +++ b/apps/wpm/views.py @@ -11,7 +11,8 @@ from apps.system.models import User from apps.mtm.models import Material, Process, Route, Mgroup, RoutePack, RouteMat from apps.utils.viewsets import CustomGenericViewSet, CustomModelViewSet -from apps.utils.mixins import CustomListModelMixin, BulkCreateModelMixin, ComplexQueryMixin, BulkDestroyModelMixin, BulkUpdateModelMixin +from rest_framework.mixins import DestroyModelMixin +from apps.utils.mixins import CustomListModelMixin, CustomCreateModelMixin, BulkCreateModelMixin, ComplexQueryMixin, BulkDestroyModelMixin, BulkUpdateModelMixin from .filters import StLogFilter, SfLogFilter, WMaterialFilter, MlogFilter, HandoverFilter, MlogbFilter, BatchStFilter, MlogbwFilter from .models import SfLog, SfLogExp, StLog, WMaterial, Mlog, Handover, Mlogb, Mlogbw, AttLog, OtherLog, Fmlog, BatchSt, MlogbDefect, MlogUser, BatchLog, Handoverb @@ -160,14 +161,16 @@ class SfLogExpViewSet(CustomListModelMixin, BulkUpdateModelMixin, CustomGenericV filterset_fields = ["sflog", "stlog"] -class WMaterialViewSet(CustomListModelMixin, CustomGenericViewSet): +class WMaterialViewSet(CustomCreateModelMixin, DestroyModelMixin, CustomListModelMixin, CustomGenericViewSet): """ list: 车间库存 + create: 手动创建车间库存 + destroy: 删除手动创建的车间库存 车间库存 """ - perms_map = {"get": "*"} + perms_map = {"get": "*", "post": "wmaterial.create", "delete": "wmaterial.delete"} queryset = WMaterial.objects.filter(count__gt=0) serializer_class = WMaterialSerializer select_related_fields = ["material", "belong_dept", "material__process", "supplier"] @@ -186,6 +189,14 @@ class WMaterialViewSet(CustomListModelMixin, CustomGenericViewSet): return queryset return queryset.exclude(state=WMaterial.WM_SCRAP) + def perform_create(self, serializer): + serializer.save(create_by=self.request.user, belong_dept=self.request.user.dept, is_manual=True) + + def perform_destroy(self, instance): + if not instance.is_manual: + raise ParseError('只能删除手动创建的车间库存') + instance.delete() + @action(methods=["post"], detail=False, perms_map={"post": "*"}, serializer_class=DeptBatchSerializer) def batchs(self, request): """获取车间的批次号(废弃)