feat: 生产管理

This commit is contained in:
Czw996 2022-04-08 22:01:22 +08:00
parent 7c5ad2f7b0
commit 0e55eec2e5
2 changed files with 90 additions and 17 deletions

View file

@ -5,32 +5,31 @@ class ProductionOrder(Model):
"""生产单据"""
number = CharField(max_length=32, verbose_name='编号')
is_related = BooleanField()
sales_order = ForeignKey()
warehouse = ForeignKey('data.Warehouse', on_delete=PROTECT, related_name='sales_orders', verbose_name='仓库')
goods = ForeignKey()
total_quantity = FloatField()
start_time = DateTimeField()
end_time = DateTimeField()
is_related = BooleanField(default=False, verbose_name='关联状态')
sales_order = ForeignKey('sales.SalesOrder', on_delete=PROTECT, null=True, related_name='production_orders', verbose_name='销售单')
goods = ForeignKey('goods.Goods', on_delete=PROTECT, related_name='production_orders', verbose_name='产品')
total_quantity = FloatField(verbose_name='生产总数')
remain_quantity = FloatField(verbose_name='剩余数量')
start_time = DateTimeField(null=True, verbose_name='开始时间')
end_time = DateTimeField(null=True, verbose_name='结束时间')
creator = ForeignKey('system.User', on_delete=PROTECT,
related_name='created_sales_orders', verbose_name='创建人')
related_name='created_production_orders', verbose_name='创建人')
create_time = DateTimeField(auto_now_add=True, verbose_name='创建时间')
team = ForeignKey('system.Team', on_delete=CASCADE, related_name='sales_orders')
team = ForeignKey('system.Team', on_delete=CASCADE, related_name='production_orders')
class ProductionRecord(Model):
"""生产记录"""
production_order = ForeignKey()
warehouse = ForeignKey('data.Warehouse', on_delete=PROTECT, related_name='sales_orders', verbose_name='仓库')
goods = ForeignKey()
production_quantity = FloatField()
production_order = ForeignKey('production.ProductionOrder', on_delete=CASCADE, related_name='production_records', verbose_name='生产单')
goods = ForeignKey('goods.Goods', on_delete=PROTECT, related_name='production_records', verbose_name='产品')
production_quantity = FloatField(verbose_name='生产数量')
creator = ForeignKey('system.User', on_delete=PROTECT,
related_name='created_sales_orders', verbose_name='创建人')
related_name='created_production_records', verbose_name='创建人')
create_time = DateTimeField(auto_now_add=True, verbose_name='创建时间')
team = ForeignKey('system.Team', on_delete=CASCADE, related_name='sales_orders')
team = ForeignKey('system.Team', on_delete=CASCADE, related_name='production_records')
__all__ = [
'ProductionPlan', 'ProductionRecord',
'ProductionOrder', 'ProductionRecord',
]

View file

@ -1,8 +1,82 @@
from extensions.common.base import *
from extensions.serializers import *
from extensions.exceptions import *
from apps.production.models import *
from apps.sales.models import *
from apps.goods.models import *
class ProductionOrderSerializer(BaseSerializer):
"""生产单据"""
goods_number = CharField(source='goods.number', read_only=True, label='产品编号')
goods_name = CharField(source='goods.name', read_only=True, label='产品名称')
creator_name = CharField(source='creator.name', read_only=True, label='创建人名称')
class Meta:
model = ProductionOrder
read_only_fields = ['id', 'remain_quantity', 'goods_number', 'goods_name', 'creator',
'creator_name', 'create_time']
fields = ['number', 'is_related', 'sales_order', 'goods', 'total_quantity',
'start_time', 'end_time', *read_only_fields]
def validate_number(self, value):
self.validate_unique({'number': value}, message=f'编号[{value}]已存在')
return value
def validate_sales_order(self, instance):
instance = self.validate_foreign_key(SalesOrder, instance, message='销售单不存在')
return instance
def validate_goods(self, instance):
instance = self.validate_foreign_key(Goods, instance, message='产品不存在')
return instance
def validate_total_quantity(self, value):
if value <= 0:
raise ValidationError('生产数量小于等于零')
return value
def validate(self, attrs):
if attrs['is_related'] and not attrs['sales_order']:
raise ValidationError('未关联销售单')
return super().validate(attrs)
def create(self, validated_data):
validated_data['remain_quantity'] = validated_data['total_quantity']
validated_data['creator'] = self.user
return super().create(validated_data)
class ProductionRecordSerializer(BaseSerializer):
"""生产记录"""
production_order_number = CharField(source='production_order.number', read_only=True, label='生产单号')
goods_number = CharField(source='goods.number', read_only=True, label='产品编号')
goods_name = CharField(source='goods.name', read_only=True, label='产品名称')
creator_name = CharField(source='creator.name', read_only=True, label='创建人名称')
class Meta:
model = ProductionRecord
read_only_fields = ['id', 'production_order_number', 'goods', 'goods_number', 'goods_name', 'creator',
'creator_name', 'create_time']
fields = ['production_order', 'production_quantity', *read_only_fields]
def validate_production_order(self, instance):
instance = self.validate_foreign_key(ProductionOrder, instance, message='生产单不存在')
return instance
def validate_production_quantity(self, value):
if value <= 0:
raise ValidationError('生产数量小于等于零')
return value
def create(self, validated_data):
validated_data['goods'] = validated_data['production_order'].goods
validated_data['creator'] = self.user
return super().create(validated_data)
__all__ = [
'ProductionOrderSerializer', 'ProductionRecordSerializer',
]