hberp/hb_server/apps/sam/models.py

126 lines
5.2 KiB
Python

from apps.system.models import CommonADModel, 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, PackItem
class Customer(CommonAModel):
"""
客户信息
"""
name = models.CharField('客户名称', max_length=50, unique=True)
address = models.CharField('详细地址', max_length=20, blank=True, null=True)
contact = models.CharField('联系人', max_length=20)
contact_phone = models.CharField('联系电话', max_length=11, unique=True,null=True)
description = models.CharField('描述', max_length=200, blank=True, null=True)
class Meta:
verbose_name = '客户信息'
verbose_name_plural = verbose_name
def __str__(self):
return self.name
class Contract(CommonAModel):
"""
合同信息
"""
name = models.CharField('合同名称', max_length=100)
number = models.CharField('合同编号', max_length=100, unique=True)
amount = models.IntegerField('合同金额', default=0)
invoice = models.IntegerField('开票金额', default=0)
customer = models.ForeignKey(Customer, verbose_name='关联客户', on_delete=models.CASCADE, related_name='contact_customer')
sign_date = models.DateField('签订日期')
description = models.CharField('描述', max_length=200, blank=True, null=True)
watch_num = models.CharField('监管协议号', max_length=100, null=True, blank=True)
class Meta:
verbose_name = '合同信息'
verbose_name_plural = verbose_name
def __str__(self):
return self.name
class Order(CommonAModel):
"""
订单信息
"""
number = models.CharField('订单编号', max_length=100, unique=True)
customer = models.ForeignKey(Customer, verbose_name='客户', on_delete=models.CASCADE)
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.PositiveIntegerField('所需数量', default=0)
planed_count = models.PositiveIntegerField('已排数量', default=0)
delivered_count = models.PositiveIntegerField('已交货数量', default=0)
delivery_date = models.DateField('截止交货日期')
need_mtest = models.BooleanField('是否需要军检', default=False)
class Meta:
verbose_name = '订单信息'
verbose_name_plural = verbose_name
class Sale(CommonADModel):
"""
销售记录
"""
TRANS_RAIL_FAST = 10
TRANS_RAIL_SLOW = 20
TRANS_RAIL_WHOLE = 30
TRANS_LORRY = 40
TRANS_AIR = 50
trans_choices=(
(TRANS_RAIL_FAST, '铁路快运'),
(TRANS_RAIL_SLOW, '铁路慢件'),
(TRANS_RAIL_WHOLE, '铁路整车'),
(TRANS_LORRY, '汽车运输'),
(TRANS_AIR, '空运'),
)
customer = models.ForeignKey(Customer, verbose_name='客户', on_delete=models.CASCADE)
order = models.ForeignKey(Order, verbose_name='关联订单', on_delete=models.CASCADE, null=True, blank=True)
product = models.ForeignKey(Material, verbose_name='所需产品', on_delete=models.CASCADE)
count = models.PositiveIntegerField('预计发货数量', default=0)
count_real = models.PositiveIntegerField('实际发货数量', null=True, blank=True)
is_audited = models.BooleanField('是否审核', default=False)
edelivery_date = models.DateField('预计发货日期', null=True, blank=True)
trans_mode = models.IntegerField('运输方式', null=True, blank=True, choices=trans_choices)
receiver = models.CharField('收货人', null=True, blank=True, max_length=200)
receiver_phone = models.CharField('收货人联系电话', null=True, blank=True, max_length=20)
receiver_address = models.CharField('收获地址', null=True, blank=True, max_length=200)
remark = models.CharField('备注', null=True, blank=True, max_length=200)
ship_pic = models.CharField('物流图片', max_length=200, null=True, blank=True)
iproducts = models.ManyToManyField('inm.iproduct', through='sam.saleproduct')
class SaleProduct(BaseModel):
"""
具体产品
"""
sale = models.ForeignKey(Sale, verbose_name='关联销售记录', on_delete=models.CASCADE)
number = models.CharField('物品编号', max_length=50)
iproduct = models.ForeignKey('inm.iproduct', verbose_name='关联库存产品', on_delete=models.CASCADE, related_name='sale_iproduct')
remark = models.TextField('备注', null=True, blank=True)
packnum = models.CharField('装箱单号', max_length=100, null=True, blank=True)
class Meta:
unique_together = (
('sale','iproduct'), # 联合唯一
)
class SalePack(BaseModel):
"""
销售打包
"""
sale_product = models.ForeignKey(SaleProduct, verbose_name='关联销售产品',
on_delete=models.CASCADE)
packitem = models.ForeignKey(PackItem, verbose_name='打包项目',
on_delete=models.CASCADE)
count = models.PositiveSmallIntegerField('打包数量')