待排订单接口

This commit is contained in:
caoqianming 2021-10-08 15:32:06 +08:00
parent 36924b43ad
commit ce48b8e97c
11 changed files with 182 additions and 3 deletions

View File

@ -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)

View File

View File

@ -0,0 +1,3 @@
from django.contrib import admin
# Register your models here.

View File

@ -0,0 +1,7 @@
from django.apps import AppConfig
class SamConfig(AppConfig):
name = 'apps.pm'
verbose_name = '生产计划管理'

View File

@ -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

View File

@ -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__'

View File

@ -0,0 +1,3 @@
from django.test import TestCase
# Create your tests here.

15
hb_server/apps/pm/urls.py Normal file
View File

@ -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)),
]

View File

@ -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

View File

@ -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 = '订单信息'

View File

@ -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)