diff --git a/hb_server/apps/inm/models.py b/hb_server/apps/inm/models.py index 20decf8..8c8c1ec 100644 --- a/hb_server/apps/inm/models.py +++ b/hb_server/apps/inm/models.py @@ -47,6 +47,8 @@ class MaterialBatch(BaseModel): verbose_name = '库存表' verbose_name_plural = verbose_name + + class FIFO(CommonAModel): """ 出入库记录 @@ -66,4 +68,14 @@ class FIFO(CommonAModel): # 领料详细记录 # """ +class Product(CommonAModel): + """ + 具体产品 + """ + number = models.CharField('物品编号', primary_key=True, null=True, blank=True, max_length=50) + material = models.ForeignKey(Material, verbose_name='物料类型', on_delete=models.CASCADE) + warehouse = models.ForeignKey(WareHouse, on_delete=models.CASCADE, verbose_name='所在仓库') + batch = models.CharField('所属批次号', max_length=100, null=True, blank=True) + fifos = models.JSONField('关联出入库记录', default=list, blank=True) + diff --git a/hb_server/apps/pm/models.py b/hb_server/apps/pm/models.py index 8e9299d..cdfb9bc 100644 --- a/hb_server/apps/pm/models.py +++ b/hb_server/apps/pm/models.py @@ -46,6 +46,8 @@ class SubProductionPlan(CommonAModel): process = models.ForeignKey(Process, verbose_name='关联大工序', on_delete=models.CASCADE) steps = models.JSONField('工艺步骤', default=list) state = models.IntegerField('状态', default=0) + start_date_real = models.DateField('实际开工日期', null=True, blank=True) + end_date_real = models.DateField('实际完工日期', null=True, blank=True) class Meta: verbose_name = '子生产计划' verbose_name_plural = verbose_name diff --git a/hb_server/apps/pm/views.py b/hb_server/apps/pm/views.py index 62c2473..a7a21f0 100644 --- a/hb_server/apps/pm/views.py +++ b/hb_server/apps/pm/views.py @@ -1,3 +1,4 @@ +from datetime import timezone from rest_framework import serializers from rest_framework.views import APIView from apps.em.models import Equipment @@ -122,6 +123,19 @@ class SubProductionPlanViewSet(CreateUpdateModelAMixin, ListModelMixin, UpdateMo obj.save() return Response() raise APIException('计划状态有误') + + @action(methods=['post'], detail=True, perms_map={'post':'*'}, serializer_class=serializers.Serializer) + def start(self, request, pk=None): + """ + 开始生产 + """ + obj = self.get_object() + if obj.state in [1,2]: + obj.state = 3 + obj.start_date_real = timezone.now() + obj.save() + return Response() + raise APIException('计划状态有误') class ResourceViewSet(GenericViewSet): diff --git a/hb_server/apps/wf/services.py b/hb_server/apps/wf/services.py index f45c1b5..bc39a3e 100644 --- a/hb_server/apps/wf/services.py +++ b/hb_server/apps/wf/services.py @@ -159,13 +159,13 @@ class WfService(object): elif destination_participant_type == State.PARTICIPANT_TYPE_ROLE:#角色 user_queryset = User.objects.filter(roles__in=destination_participant) # 如果选择了角色, 需要走过滤策略 - if ticket.filter_policy == 1: + if state.filter_policy == 1: depts = get_parent_queryset(ticket.belong_dept) user_queryset = user_queryset.filter(dept__in=depts) - elif ticket.filter_policy == 2: + elif state.filter_policy == 2: depts = get_parent_queryset(ticket.create_by.dept) user_queryset = user_queryset.filter(dept__in=depts) - elif ticket.filter_policy == 3: + elif state.filter_policy == 3: depts = get_parent_queryset(request.user.dept) user_queryset = user_queryset.filter(dept__in=depts) destination_participant = list(user_queryset.values_list('id', flat=True)) diff --git a/hb_server/apps/wpm/models.py b/hb_server/apps/wpm/models.py index 50be3f7..e53745e 100644 --- a/hb_server/apps/wpm/models.py +++ b/hb_server/apps/wpm/models.py @@ -20,6 +20,7 @@ class Product(CommonAModel): m_state = models.ForeignKey(Material, verbose_name='所属物料状态', on_delete=models.CASCADE) p_state = models.ForeignKey(Step, verbose_name='所在步骤', on_delete=models.CASCADE, null=True, blank=True) act_state = models.IntegerField('进行状态', default=0) + parent = models.ForeignKey('self', verbose_name='上一级', on_delete=models.CASCADE, db_constraint=False) remark = models.CharField('备注', max_length=200, null=True, blank=True) class ProductForm(CommonAModel): diff --git a/hb_server/apps/wpm/serializers.py b/hb_server/apps/wpm/serializers.py index 037f7ef..697569a 100644 --- a/hb_server/apps/wpm/serializers.py +++ b/hb_server/apps/wpm/serializers.py @@ -1,9 +1,2 @@ from rest_framework.serializers import ModelSerializer -from .models import Vendor - - -class VendorSerializer(ModelSerializer): - class Meta: - model = Vendor - fields = '__all__' diff --git a/hb_server/apps/wpm/urls.py b/hb_server/apps/wpm/urls.py index a81ad24..a0e8919 100644 --- a/hb_server/apps/wpm/urls.py +++ b/hb_server/apps/wpm/urls.py @@ -1,11 +1,10 @@ from django.db.models import base from rest_framework import urlpatterns -from apps.pum.views import VendorViewSet from django.urls import path, include from rest_framework.routers import DefaultRouter router = DefaultRouter() -router.register('vendor', VendorViewSet, basename='vendor') + urlpatterns = [ path('', include(router.urls)), ] diff --git a/hb_server/apps/wpm/views.py b/hb_server/apps/wpm/views.py index ad479b5..bb114b1 100644 --- a/hb_server/apps/wpm/views.py +++ b/hb_server/apps/wpm/views.py @@ -1,20 +1,6 @@ from django.shortcuts import render from rest_framework.viewsets import ModelViewSet -from apps.pum.models import Vendor -from apps.pum.serializers import VendorSerializer from apps.system.mixins import CreateUpdateModelAMixin, OptimizationMixin -# Create your views here. -class VendorViewSet(CreateUpdateModelAMixin, ModelViewSet): - """ - 供应商-增删改查 - """ - perms_map = {'get': '*', 'post': 'vendor_create', - 'put': 'vendor_update', 'delete': 'vendor_delete'} - queryset = Vendor.objects.all() - serializer_class = VendorSerializer - search_fields = ['name', 'contact'] - filterset_fields = [] - ordering_fields = ['create_time'] - ordering = ['-create_time'] +# Create your views here. \ No newline at end of file