import os
from django.db import models
from Core.models import Department
from Core.utils import DynamicHashPath, transition
from Core.utils.fsm import TransitionMeta
from Distribution import (REVIEW_STATUS_CHOICES, REVIEW_STATUS_DEFAULT,
REVIEW_STATUS_PASS, REVIEW_STATUS_FAIL)
[文档]class Product(models.Model, metaclass=TransitionMeta):
"""
产品
用以表示一个产品的基本信息
"""
name = models.CharField(verbose_name='名称', max_length=50)
terminated = models.BooleanField(verbose_name='终止状态', default=False)
status = models.IntegerField(verbose_name='状态',
choices=REVIEW_STATUS_CHOICES,
default=REVIEW_STATUS_DEFAULT)
@transition(field='status',
source=(REVIEW_STATUS_DEFAULT, REVIEW_STATUS_FAIL),
target=REVIEW_STATUS_PASS, name='通过')
def review_pass(self, request):
"""
产品审核通过
"""
pass
@transition(field='status', source=REVIEW_STATUS_DEFAULT,
target=REVIEW_STATUS_FAIL, name='不通过')
def review_fail(self, request):
"""
产品审核不通过
"""
pass
@transition(field='terminated', source=False, target=True)
def terminate(self, request):
"""
产品终止
"""
pass
class Meta:
verbose_name = '产品'
verbose_name_plural = '产品'
def __str__(self):
return self.name
[文档]class BiddingDocument(models.Model, metaclass=TransitionMeta):
"""
产品招标文件
经销管理部门与生产科、工艺科、采购科之间交流的招标文件
"""
product = models.ForeignKey(Product, verbose_name='对应产品',
related_name='documents',
on_delete=models.CASCADE)
src = models.ForeignKey(Department, verbose_name='来源部门',
related_name='bidding_doc_src',
on_delete=models.CASCADE)
dst = models.ForeignKey(Department, verbose_name='接收部门',
related_name='bidding_doc_dst',
on_delete=models.CASCADE)
path = models.FileField(verbose_name='路径',
upload_to=DynamicHashPath('BiddingDocument'))
upload_dt = models.DateTimeField(verbose_name='上传时间',
auto_now_add=True)
status = models.IntegerField(verbose_name='状态',
choices=REVIEW_STATUS_CHOICES,
default=REVIEW_STATUS_DEFAULT)
@property
def path_name(self):
return os.path.basename(self.path.name)
@transition(field='status',
source=(REVIEW_STATUS_DEFAULT, REVIEW_STATUS_FAIL),
target=REVIEW_STATUS_PASS, name='通过')
def review_pass(self, request):
"""
招标文件审核通过
"""
pass
@transition(field='status', source=REVIEW_STATUS_DEFAULT,
target=REVIEW_STATUS_FAIL, name='不通过')
def review_fail(self, request):
"""
招标文件审核不通过
"""
pass
@transition(field='status', source=REVIEW_STATUS_FAIL,
target=REVIEW_STATUS_DEFAULT, name='未审核')
def review_reset(self, request):
"""
招标文件审核状态重置
"""
pass
class Meta:
verbose_name = '产品招标文件'
verbose_name_plural = '产品招标文件'
def __str__(self):
return self.path.name