126 lines
5.2 KiB
Python
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('打包数量')
|
|
|
|
|
|
|
|
|