From ce48b8e97ccdb3f9ac551c0c04b3313cb3baf208 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Fri, 8 Oct 2021 15:32:06 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BE=85=E6=8E=92=E8=AE=A2=E5=8D=95=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hb_server/apps/mtm/models.py | 2 +- hb_server/apps/pm/__init__.py | 0 hb_server/apps/pm/admin.py | 3 ++ hb_server/apps/pm/apps.py | 7 ++++ hb_server/apps/pm/models.py | 30 +++++++++++++++++ hb_server/apps/pm/serializers.py | 50 +++++++++++++++++++++++++++ hb_server/apps/pm/tests.py | 3 ++ hb_server/apps/pm/urls.py | 15 +++++++++ hb_server/apps/pm/views.py | 58 ++++++++++++++++++++++++++++++++ hb_server/apps/sam/models.py | 1 + hb_server/apps/sam/views.py | 16 +++++++-- 11 files changed, 182 insertions(+), 3 deletions(-) create mode 100644 hb_server/apps/pm/__init__.py create mode 100644 hb_server/apps/pm/admin.py create mode 100644 hb_server/apps/pm/apps.py create mode 100644 hb_server/apps/pm/models.py create mode 100644 hb_server/apps/pm/serializers.py create mode 100644 hb_server/apps/pm/tests.py create mode 100644 hb_server/apps/pm/urls.py create mode 100644 hb_server/apps/pm/views.py diff --git a/hb_server/apps/mtm/models.py b/hb_server/apps/mtm/models.py index 6fca06f..36f2c04 100644 --- a/hb_server/apps/mtm/models.py +++ b/hb_server/apps/mtm/models.py @@ -129,7 +129,7 @@ class RecordFormField(CommonAModel): class ProductProcess(CommonAModel): """ - 产品生产工艺 + 产品生产工艺集 """ product = models.ForeignKey(Material, verbose_name='产品', on_delete=models.CASCADE) process = models.ForeignKey(Process, verbose_name='工序', on_delete=models.CASCADE) diff --git a/hb_server/apps/pm/__init__.py b/hb_server/apps/pm/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/hb_server/apps/pm/admin.py b/hb_server/apps/pm/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/hb_server/apps/pm/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/hb_server/apps/pm/apps.py b/hb_server/apps/pm/apps.py new file mode 100644 index 0000000..c0c4b31 --- /dev/null +++ b/hb_server/apps/pm/apps.py @@ -0,0 +1,7 @@ +from django.apps import AppConfig + +class SamConfig(AppConfig): + name = 'apps.pm' + verbose_name = '生产计划管理' + + diff --git a/hb_server/apps/pm/models.py b/hb_server/apps/pm/models.py new file mode 100644 index 0000000..ec6c77f --- /dev/null +++ b/hb_server/apps/pm/models.py @@ -0,0 +1,30 @@ +from apps.system.models import CommonAModel +from django.db import models +from django.contrib.auth.models import AbstractUser +from django.db.models.base import Model +import django.utils.timezone as timezone +from django.db.models.query import QuerySet + +from utils.model import SoftModel, BaseModel +from apps.mtm.models import Material +from apps.sam.models import Order + + +class ProductionPlan(CommonAModel): + """ + 生产计划 + """ + number = models.CharField('编号', max_length=50, unique=True) + order = models.ForeignKey(Order, verbose_name='关联订单', null=True, blank=True, on_delete=models.SET_NULL) + product = models.ForeignKey(Material, verbose_name='生产产品', on_delete=models.CASCADE) + count = models.IntegerField('生产数量', default=0) + start_date = models.DateField('计划开工日期') + end_date = models.DateField('计划完工日期') + + class Meta: + verbose_name = '生产计划' + verbose_name_plural = verbose_name + + def __str__(self): + return self.number + diff --git a/hb_server/apps/pm/serializers.py b/hb_server/apps/pm/serializers.py new file mode 100644 index 0000000..00efa54 --- /dev/null +++ b/hb_server/apps/pm/serializers.py @@ -0,0 +1,50 @@ +from rest_framework import serializers + +from .models import Contract, Customer, Order + +from apps.mtm.serializers import MaterialSimpleSerializer + +class CustomerSerializer(serializers.ModelSerializer): + class Meta: + model = Customer + fields = '__all__' + +class CustomerCreateUpdateSerializer(serializers.ModelSerializer): + class Meta: + model = Customer + fields = ['name', 'address', 'contact', 'contact_phone', 'description'] + +class CustomerSimpleSerializer(serializers.ModelSerializer): + class Meta: + model = Customer + fields = ['id', 'name'] + +class ContractSerializer(serializers.ModelSerializer): + customer_ = CustomerSimpleSerializer(source='customer', read_only=True) + class Meta: + model = Contract + fields = '__all__' + +class ContractSimpleSerializer(serializers.ModelSerializer): + class Meta: + model = Contract + fields = ['id', 'name', 'number'] + +class ContractCreateUpdateSerializer(serializers.ModelSerializer): + class Meta: + model = Contract + fields = ['name', 'number', 'amount', 'customer', 'sign_date', 'description'] + + +class OrderCreateUpdateSerializer(serializers.ModelSerializer): + class Meta: + model = Order + fields = ['number', 'customer', 'contract', 'product', 'count', 'delivery_date'] + +class OrderSerializer(serializers.ModelSerializer): + contract_ = ContractSimpleSerializer(source='contract', read_only=True) + customer_ = CustomerSimpleSerializer(source='customer', read_only=True) + product_ = MaterialSimpleSerializer(source='product', read_only=True) + class Meta: + model = Order + fields = '__all__' diff --git a/hb_server/apps/pm/tests.py b/hb_server/apps/pm/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/hb_server/apps/pm/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/hb_server/apps/pm/urls.py b/hb_server/apps/pm/urls.py new file mode 100644 index 0000000..4aa607f --- /dev/null +++ b/hb_server/apps/pm/urls.py @@ -0,0 +1,15 @@ +from django.db.models import base +from rest_framework import urlpatterns +from apps.sam.views import CustomerViewSet,ContractViewSet,OrderViewSet +from django.urls import path, include +from rest_framework.routers import DefaultRouter + +router = DefaultRouter() +router.register('customer', CustomerViewSet, basename='customer') +router.register('contract', ContractViewSet, basename='contract') +router.register('order', OrderViewSet, basename='order') + +urlpatterns = [ + path('', include(router.urls)), +] + diff --git a/hb_server/apps/pm/views.py b/hb_server/apps/pm/views.py new file mode 100644 index 0000000..8f66873 --- /dev/null +++ b/hb_server/apps/pm/views.py @@ -0,0 +1,58 @@ +from apps.sam.serializers import ContractCreateUpdateSerializer, ContractSerializer, CustomerCreateUpdateSerializer, CustomerSerializer, OrderCreateUpdateSerializer, OrderSerializer +from apps.sam.models import Contract, Customer, Order +from rest_framework.viewsets import ModelViewSet +from apps.system.mixins import CreateUpdateCustomMixin +from django.shortcuts import render + +# Create your views here. +class CustomerViewSet(CreateUpdateCustomMixin, ModelViewSet): + """ + 客户-增删改查 + """ + perms_map = {'*': '*'} + queryset = Customer.objects.all() + serializer_class = CustomerSerializer + search_fields = ['name', 'contact'] + filterset_fields = [] + ordering_fields = ['create_time'] + ordering = ['-create_time'] + + def get_serializer_class(self): + if self.action in ['create', 'update']: + return CustomerCreateUpdateSerializer + return CustomerSerializer + + +class ContractViewSet(CreateUpdateCustomMixin, ModelViewSet): + """ + 合同-增删改查 + """ + perms_map = {'*': '*'} + queryset = Contract.objects.select_related('customer').all() + serializer_class = ContractSerializer + search_fields = ['name'] + filterset_fields = [] + ordering_fields = ['create_time'] + ordering = ['-create_time'] + + def get_serializer_class(self): + if self.action in ['create', 'update']: + return ContractCreateUpdateSerializer + return ContractSerializer + +class OrderViewSet(CreateUpdateCustomMixin, ModelViewSet): + """ + 订单-增删改查 + """ + perms_map = {'*': '*'} + queryset = Order.objects.select_related('contract', 'customer').all() + serializer_class = OrderSerializer + search_fields = ['number', 'product'] + filterset_fields = [] + ordering_fields = ['create_time'] + ordering = ['-create_time'] + + def get_serializer_class(self): + if self.action in ['create', 'update']: + return OrderCreateUpdateSerializer + return OrderSerializer \ No newline at end of file diff --git a/hb_server/apps/sam/models.py b/hb_server/apps/sam/models.py index 4683844..1f47f5e 100644 --- a/hb_server/apps/sam/models.py +++ b/hb_server/apps/sam/models.py @@ -62,6 +62,7 @@ class Order(CommonAModel): contract = models.ForeignKey(Contract, verbose_name='所属合同', null=True, blank=True, on_delete=models.SET_NULL) product = models.ForeignKey(Material, verbose_name='所需产品', on_delete=models.CASCADE) count = models.IntegerField('所需数量', default=0) + planed_count = models.IntegerField('已排数量', default=0) delivery_date = models.DateField('交货日期') class Meta: verbose_name = '订单信息' diff --git a/hb_server/apps/sam/views.py b/hb_server/apps/sam/views.py index 8f66873..d337b06 100644 --- a/hb_server/apps/sam/views.py +++ b/hb_server/apps/sam/views.py @@ -3,7 +3,9 @@ from apps.sam.models import Contract, Customer, Order from rest_framework.viewsets import ModelViewSet from apps.system.mixins import CreateUpdateCustomMixin from django.shortcuts import render - +from rest_framework.decorators import action +from django.db.models import F +from rest_framework.response import Response # Create your views here. class CustomerViewSet(CreateUpdateCustomMixin, ModelViewSet): """ @@ -55,4 +57,14 @@ class OrderViewSet(CreateUpdateCustomMixin, ModelViewSet): def get_serializer_class(self): if self.action in ['create', 'update']: return OrderCreateUpdateSerializer - return OrderSerializer \ No newline at end of file + return OrderSerializer + + @action(methods=['get'], detail=True, perms_map={'get':'*'}) + def toplan(self, request, pk=None): + queryset = Order.objects.filter(count__gt=F('planed_count')) + page = self.paginate_queryset(queryset) + if page is not None: + serializer = self.get_serializer(page, many=True) + return self.get_paginated_response(serializer.data) + serializer = self.get_serializer(queryset, many=True) + return Response(serializer.data) \ No newline at end of file