You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

242 lines
7.1 KiB

4 years ago
# -*- coding: utf-8 -*-
from django.db import models
from django.contrib.auth.models import User, Group
from todo.senddata import SendTodoData
from decimal import Decimal
import datetime
# 父级分类
class ParentType(models.Model):
name = models.CharField(u'名称', max_length=100)
def __unicode__(self):
return '%s' % self.name
class Meta:
verbose_name = u'父级分类'
verbose_name_plural = verbose_name
# 二级分类
class Type(models.Model):
TYPE_CHOICES = (
('time', u'计时'),
('count', u'计次'),
)
name = models.CharField(u'名称', max_length=40)
base = models.DecimalField(u'KPI基本分',
max_digits=5,
decimal_places=2,
default=1.00,
blank=True,
null=True)
value = models.DecimalField(u'难度系数',
max_digits=5,
decimal_places=3,
default=1.00,
blank=True,
null=True)
type = models.CharField(u'类型', max_length=5, choices=TYPE_CHOICES, default='count')
parent = models.ForeignKey(ParentType, verbose_name=u'父级', default=1,on_delete=models.CASCADE)
def getvalue(self):
return self.base * self.value
def __unicode__(self):
return '%s' % self.name
class Meta:
verbose_name = u'绩效分类'
verbose_name_plural = verbose_name
# 项目任务
class ProjectList(models.Model):
STATUS_CHOICES = (
(1, u'进行中'),
(2, u'已完成'),
(3, u'已关闭'),
)
name = models.CharField(u'事项名', max_length=60)
created_date = models.DateField(u'创建日期', auto_now=True)
created_by = models.ForeignKey(User, related_name='list_created_by', verbose_name=u'创建者',on_delete=models.CASCADE)
assigned_to = models.ManyToManyField(User, related_name='list_assigned_to', verbose_name=u'分配给')
stat = models.IntegerField(
(u'状态'),
choices=STATUS_CHOICES,
default=1,
)
def getsubnum(self):
try:
return self.item_set.filter(is_delete=False).count()
except:
return 0
def __unicode__(self):
return self.name
class Meta:
ordering = ["name"]
verbose_name = u'项目列表'
verbose_name_plural = verbose_name
# 任务
class Item(models.Model):
STATUS_CHOICES = (
(1, u'未开始'),
(2, u'进行中'),
(3, u'已完成'),
(4, u'已关闭'),
)
PRIORITY_CHOICES = (
(1, u'紧急'),
(2, u'重要'),
(3, u''),
(4, u'正常'),
(5, u''),
)
TASK_TYPE = (
(1, u'计次任务'),
(2, u'计时任务'),
(3, u'项目任务'),
)
title = models.CharField(u'任务名', max_length=140)
project = models.ForeignKey(ProjectList, verbose_name=u'项目名称', blank=True, null=True)
type = models.ForeignKey(Type, verbose_name=u'任务类型', blank=True, null=True)
tasktype = models.IntegerField(
(u'任务类型'),
choices=TASK_TYPE,
default=1,
)
created_date = models.DateTimeField(u'创建时间', blank=True, null=True, auto_now_add=True)
updte_time = models.DateTimeField(u'更新时间', auto_now=True)
due_date = models.DateField(u'截止日期', blank=True, null=True)
progress = models.CharField(u'进度', blank=True, max_length=3, default='0', help_text=u'输入100内数值')
length = models.DecimalField(u'持续时间',
max_digits=5,
decimal_places=3,
default=1,
blank=True,
null=True,
help_text=u'小时 此为默认值,非说明不要修改')
count = models.IntegerField(u'次数', blank=True, null=True, default=1)
status = models.IntegerField(
(u'任务状态'),
choices=STATUS_CHOICES,
default=1,
)
#is_delete 0正常 1垃圾箱
is_delete = models.BooleanField(default=False)
completed_date = models.DateTimeField(u'完成日期', blank=True, null=True)
created_by = models.ForeignKey(User, related_name='item_created_by', verbose_name=u'创建人')
assigned_to = models.ForeignKey(User, related_name='item_assigned_to',
verbose_name=u'分配给', blank=True, null=True)
note = models.TextField(u'备注', blank=True)
priority = models.IntegerField(
(u'权重'),
choices=PRIORITY_CHOICES,
default=4,
blank=3,
help_text=(u'1 = 最高权重, 5 = 最低权重'),
)
#锁定后无法修改截至日期,无法删除
lock = models.BooleanField(default=False) #False 正常 True 锁定
def _get_status(self):
return u'%s' % (self.get_status_display())
get_status = property(_get_status)
def _get_priority(self):
return u'%s' % (self.get_priority_display())
get_priority = property(_get_priority)
def overdue_status(self):
"""
是否逾期
"""
if self.due_date and self.status in [1,2] and datetime.date.today() > self.due_date:
return True
def com_due_status(self):
if self.due_date and self.completed_date > self.due_date:
return True
def per_value(self):
try:
if self.tasktype == 3:
perfvalue = self.length
else:
perfvalue = Decimal(str(self.type.base)) * Decimal(str(self.type.value)) * \
Decimal(str(self.length)) * Decimal(str(self.count))
return perfvalue
except:
return 0
def __unicode__(self):
return '%s' % self.title
# Auto-set the item creation / completed date
def save(self):
"""
如果状态为3完成且未锁定 修改为锁定
"""
if self.created_by and not self.assigned_to:
self.assigned_to = self.created_by
if self.status == 3 and not self.lock:
self.completed_date = datetime.datetime.now()
self.lock = True
self.progress = '100'
super(Item, self).save()
class Meta:
ordering = ["priority"]
verbose_name = u'任务'
verbose_name_plural = verbose_name
# 任务评论
class ItemComment(models.Model):
author = models.ForeignKey(User)
task = models.ForeignKey(Item)
date = models.DateTimeField(default=datetime.datetime.now)
body = models.TextField(blank=True)
reply = models.ForeignKey('self', verbose_name=u'上级评论', blank=True, null=True, related_name='parent_comment')
def __unicode__(self):
return '%s - %s' % (
self.author,
self.date,
)
class Meta:
verbose_name = u'评论'
verbose_name_plural = verbose_name
def save(self):
super(ItemComment, self).save()