100 lines
4.6 KiB
Python
100 lines
4.6 KiB
Python
from django.db import models
|
|
from apps.utils.models import CommonBModel, BaseModel, CommonBDModel
|
|
from apps.mtm.models import Material
|
|
|
|
|
|
# Create your models here.
|
|
class Supplier(CommonBModel):
|
|
"""
|
|
TN:供应商
|
|
"""
|
|
name = models.CharField('供应商名称', max_length=50)
|
|
number= models.CharField('供应商编号', max_length=20, null=True, blank=True)
|
|
contact = models.CharField('联系人', max_length=20, default='', blank=True)
|
|
contact_phone = models.CharField('联系电话', max_length=11, default='', blank=True)
|
|
address = models.CharField('地址', max_length=200, default='', blank=True)
|
|
can_outsource = models.BooleanField('是否可外协', default=False)
|
|
|
|
|
|
class PuPlan(CommonBModel):
|
|
"""
|
|
TN:采购计划
|
|
"""
|
|
PUPLAN_CREATE = 10
|
|
PUPLAN_SUBMITED = 20
|
|
PUPLAN_ORDERING = 30
|
|
PUPLAN_ORDERED = 40
|
|
PUPLAN_DONE = 50
|
|
PUPLAN_STATES = (
|
|
(PUPLAN_CREATE, '创建中'),
|
|
(PUPLAN_SUBMITED, '已提交'),
|
|
(PUPLAN_ORDERING, '下单中'),
|
|
(PUPLAN_ORDERED, '下单完成'),
|
|
(PUPLAN_DONE, '已完成'),
|
|
)
|
|
state = models.PositiveSmallIntegerField(
|
|
'状态', choices=PUPLAN_STATES, default=10, help_text=str(PUPLAN_STATES))
|
|
number = models.CharField('编号', max_length=20)
|
|
name = models.CharField('名称', max_length=50, null=True, blank=True)
|
|
submit_time = models.DateTimeField('提交时间', null=True, blank=True)
|
|
submit_user = models.ForeignKey(
|
|
'system.user', verbose_name='提交人', related_name='submit_user_puplan', on_delete=models.CASCADE, null=True, blank=True)
|
|
total_price = models.DecimalField('总价', max_digits=14, decimal_places=2, null=True, blank=True)
|
|
|
|
|
|
class PuOrder(CommonBModel):
|
|
"""
|
|
TN:采购订单
|
|
"""
|
|
PUORDER_CREATE = 10
|
|
PUORDER_SUBMITED = 20
|
|
PUORDER_SHIP = 30
|
|
PUORDER_DONE = 40
|
|
PUORDER_STATES = (
|
|
(PUORDER_CREATE, '创建中'),
|
|
(PUORDER_SUBMITED, '已提交'),
|
|
(PUORDER_SHIP, '到货中'),
|
|
(PUORDER_DONE, '已完成'),
|
|
)
|
|
state = models.PositiveSmallIntegerField(
|
|
'状态', choices=PUORDER_STATES, default=10, help_text=str(PUORDER_STATES))
|
|
number = models.CharField('订单编号', max_length=20, null=True, blank=True)
|
|
supplier = models.ForeignKey(
|
|
Supplier, verbose_name='供应商', on_delete=models.CASCADE)
|
|
delivery_date = models.DateField('截止到货日期', null=True, blank=True)
|
|
submit_time = models.DateTimeField('提交时间', null=True, blank=True)
|
|
submit_user = models.ForeignKey(
|
|
'system.user', verbose_name='提交人', related_name='submit_user_puorder', on_delete=models.CASCADE, null=True, blank=True)
|
|
materials = models.ManyToManyField(
|
|
Material, verbose_name='多个物料', blank=True, through='pum.puorderitem', related_name='pu_order_materials')
|
|
total_price = models.DecimalField('总价', max_digits=14, decimal_places=2, null=True, blank=True)
|
|
|
|
|
|
class PuOrderItem(BaseModel):
|
|
"""TN:物料信息表"""
|
|
material = models.ForeignKey(
|
|
Material, verbose_name='物料', on_delete=models.CASCADE, related_name='pu_orderitem_material')
|
|
count = models.PositiveIntegerField('所需数量', default=0)
|
|
delivered_count = models.PositiveIntegerField('已到货数量', default=0)
|
|
unit_price = models.DecimalField('单价', max_digits=14, decimal_places=2, null=True, blank=True)
|
|
total_price = models.DecimalField('总价', max_digits=14, decimal_places=2, null=True, blank=True)
|
|
pu_order = models.ForeignKey(PuOrder, verbose_name='关联采购订单',
|
|
on_delete=models.CASCADE, null=True, blank=True, related_name='item_puorder')
|
|
|
|
|
|
class PuPlanItem(CommonBDModel):
|
|
"""
|
|
TN:采购计划明细(因为各部门填写所以需要belong_dept字段)
|
|
"""
|
|
material = models.ForeignKey(
|
|
Material, verbose_name='所需物料', on_delete=models.CASCADE)
|
|
need_count = models.PositiveIntegerField('所属数量')
|
|
need_date = models.DateField('需求日期')
|
|
unit_price = models.DecimalField('单价', max_digits=14, decimal_places=2, null=True, blank=True)
|
|
total_price = models.DecimalField('总价', max_digits=14, decimal_places=2, null=True, blank=True)
|
|
note = models.TextField('备注', default='')
|
|
pu_plan = models.ForeignKey(PuPlan, verbose_name='采购计划', on_delete=models.CASCADE,
|
|
null=True, blank=True, related_name='item_puplan')
|
|
pu_order = models.ForeignKey(PuOrder, verbose_name='关联采购订单',
|
|
on_delete=models.SET_NULL, null=True, blank=True, related_name='puplan_item_puorder')
|