待排订单接口
This commit is contained in:
parent
36924b43ad
commit
ce48b8e97c
|
@ -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)
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
from django.contrib import admin
|
||||
|
||||
# Register your models here.
|
|
@ -0,0 +1,7 @@
|
|||
from django.apps import AppConfig
|
||||
|
||||
class SamConfig(AppConfig):
|
||||
name = 'apps.pm'
|
||||
verbose_name = '生产计划管理'
|
||||
|
||||
|
|
@ -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
|
||||
|
|
@ -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__'
|
|
@ -0,0 +1,3 @@
|
|||
from django.test import TestCase
|
||||
|
||||
# Create your tests here.
|
|
@ -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)),
|
||||
]
|
||||
|
|
@ -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
|
|
@ -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 = '订单信息'
|
||||
|
|
|
@ -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
|
||||
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)
|
Loading…
Reference in New Issue