diff --git a/TasksManager/settings.py b/TasksManager/settings.py index 4b9f22a..b5a3a08 100644 --- a/TasksManager/settings.py +++ b/TasksManager/settings.py @@ -25,7 +25,7 @@ SECRET_KEY = '&!38pk#dv=r!_c(+b&oegc0m(ndzoue+ez*7kvjv2uubuqootp' # SECURITY WARNING: don't run with debug turned on in production! DEBUG = True -ALLOWED_HOSTS = [] +ALLOWED_HOSTS = ['192.168.31.198', '127.0.0.1'] # Application definition diff --git a/apps/tasks/admin.py b/apps/tasks/admin.py index dacac4b..606c109 100644 --- a/apps/tasks/admin.py +++ b/apps/tasks/admin.py @@ -45,24 +45,27 @@ class TaskAdmin(admin.ModelAdmin): autocomplete_fields = ('related_task',) search_fields = ('related_task',) +class TaskInline(admin.StackedInline): + model = models.Task class TodoAdmin(admin.ModelAdmin): def sub_executor(self, obj): return ', '.join([a.real_name for a in obj.sub_executor.all()]) - fieldsets = ( + fieldsets = [ (None, { - 'fields': ( + 'fields': [ 'todo_topic', 'todo_note', 'deadline', 'duty_group', 'main_executor', 'sub_executor', 'predict_work', 'evaluate_factor', - ) + ] }), ('完成情况', { - 'fields': ( - 'real_work', 'complete_note', 'quality_mark', 'maturity' - ) - }) - ) + 'fields': [ + 'real_work', 'complete_note', 'quality_mark', 'maturity', + ], 'classes': ['collapse'] + }), + ] + # inlines = [TaskInline] list_display = ( 'todo_topic', 'deadline', @@ -87,10 +90,13 @@ class TodoAdmin(admin.ModelAdmin): return obj.task_id def lined_task(self, obj): return obj.lined_task + def task_origin(self, obj): + return obj.task_origin task_id.admin_order_field = 'task__task_id' task_id.short_description = '任务编号' lined_task.admin_order_field = 'task__task_topic' lined_task.short_description = '任务名称' + task_origin.short_description = '任务来源' admin.site.register(models.Task, TaskAdmin) diff --git a/apps/tasks/migrations/0001_initial.py b/apps/tasks/migrations/0001_initial.py index 8733320..421d4f8 100644 --- a/apps/tasks/migrations/0001_initial.py +++ b/apps/tasks/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 3.1.5 on 2021-01-29 13:31 +# Generated by Django 3.1.5 on 2021-02-17 09:37 from django.db import migrations, models @@ -42,8 +42,8 @@ class Migration(migrations.Migration): ('deadline', models.DateField(verbose_name='完成时间')), ], options={ - 'verbose_name': '每月工作事项', - 'verbose_name_plural': '每月工作事项', + 'verbose_name': '工作包', + 'verbose_name_plural': '工作包', 'ordering': ['deadline'], }, ), diff --git a/apps/tasks/migrations/0002_auto_20210129_1331.py b/apps/tasks/migrations/0002_auto_20210217_0937.py similarity index 74% rename from apps/tasks/migrations/0002_auto_20210129_1331.py rename to apps/tasks/migrations/0002_auto_20210217_0937.py index 7799513..1971d3c 100644 --- a/apps/tasks/migrations/0002_auto_20210129_1331.py +++ b/apps/tasks/migrations/0002_auto_20210217_0937.py @@ -1,4 +1,4 @@ -# Generated by Django 3.1.5 on 2021-01-29 13:31 +# Generated by Django 3.1.5 on 2021-02-17 09:37 from django.conf import settings from django.db import migrations, models @@ -19,17 +19,17 @@ class Migration(migrations.Migration): migrations.AddField( model_name='todo', name='duty_group', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='users.mygroup', verbose_name='承办单位'), + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='users.department', verbose_name='承办单位'), ), migrations.AddField( model_name='todo', name='main_executor', - field=models.ManyToManyField(related_name='main_executor', to=settings.AUTH_USER_MODEL, verbose_name='承/督办人'), + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='main_executor', to=settings.AUTH_USER_MODEL, verbose_name='承/督办人'), ), migrations.AddField( model_name='todo', name='quality_mark', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='users.qualitymark', verbose_name='质量评价'), + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='users.qualitymark', verbose_name='质量评价'), ), migrations.AddField( model_name='todo', @@ -39,12 +39,12 @@ class Migration(migrations.Migration): migrations.AddField( model_name='task', name='department', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='users.department', verbose_name='所属单位'), + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='department', to='users.department', verbose_name='所属单位'), ), migrations.AddField( model_name='task', name='duty_group', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='users.mygroup', verbose_name='责任单位'), + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='duty_group', to='users.department', verbose_name='责任单位'), ), migrations.AddField( model_name='task', diff --git a/apps/tasks/migrations/0003_auto_20210129_1335.py b/apps/tasks/migrations/0003_auto_20210129_1335.py deleted file mode 100644 index 82b463d..0000000 --- a/apps/tasks/migrations/0003_auto_20210129_1335.py +++ /dev/null @@ -1,25 +0,0 @@ -# Generated by Django 3.1.5 on 2021-01-29 13:35 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('users', '0002_auto_20210129_1332'), - ('tasks', '0002_auto_20210129_1331'), - ] - - operations = [ - migrations.AlterField( - model_name='task', - name='department', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='department', to='users.department', verbose_name='所属单位'), - ), - migrations.AlterField( - model_name='task', - name='duty_group', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='duty_group', to='users.department', verbose_name='责任单位'), - ), - ] diff --git a/apps/tasks/migrations/0004_auto_20210129_1434.py b/apps/tasks/migrations/0004_auto_20210129_1434.py deleted file mode 100644 index 3ae437c..0000000 --- a/apps/tasks/migrations/0004_auto_20210129_1434.py +++ /dev/null @@ -1,20 +0,0 @@ -# Generated by Django 3.1.5 on 2021-01-29 14:34 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('users', '0004_auto_20210129_1434'), - ('tasks', '0003_auto_20210129_1335'), - ] - - operations = [ - migrations.AlterField( - model_name='todo', - name='duty_group', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='users.department', verbose_name='承办单位'), - ), - ] diff --git a/apps/tasks/migrations/0005_auto_20210130_2021.py b/apps/tasks/migrations/0005_auto_20210130_2021.py deleted file mode 100644 index 74e415a..0000000 --- a/apps/tasks/migrations/0005_auto_20210130_2021.py +++ /dev/null @@ -1,25 +0,0 @@ -# Generated by Django 3.1.5 on 2021-01-30 20:21 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('users', '0005_auto_20210130_2021'), - ('tasks', '0004_auto_20210129_1434'), - ] - - operations = [ - migrations.AlterField( - model_name='task', - name='department', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='department', to='users.department', verbose_name='所属单位'), - ), - migrations.AlterField( - model_name='task', - name='duty_group', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='duty_group', to='users.department', verbose_name='责任单位'), - ), - ] diff --git a/apps/tasks/migrations/0006_auto_20210201_1900.py b/apps/tasks/migrations/0006_auto_20210201_1900.py deleted file mode 100644 index 5508378..0000000 --- a/apps/tasks/migrations/0006_auto_20210201_1900.py +++ /dev/null @@ -1,25 +0,0 @@ -# Generated by Django 3.1.5 on 2021-02-01 19:00 - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('tasks', '0005_auto_20210130_2021'), - ] - - operations = [ - migrations.RemoveField( - model_name='todo', - name='main_executor', - ), - migrations.AddField( - model_name='todo', - name='main_executor', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='main_executor', to=settings.AUTH_USER_MODEL, verbose_name='承/督办人'), - ), - ] diff --git a/apps/tasks/migrations/0007_auto_20210201_1901.py b/apps/tasks/migrations/0007_auto_20210201_1901.py deleted file mode 100644 index a7767ce..0000000 --- a/apps/tasks/migrations/0007_auto_20210201_1901.py +++ /dev/null @@ -1,20 +0,0 @@ -# Generated by Django 3.1.5 on 2021-02-01 19:01 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('users', '0006_auto_20210201_1900'), - ('tasks', '0006_auto_20210201_1900'), - ] - - operations = [ - migrations.AlterField( - model_name='todo', - name='quality_mark', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='users.qualitymark', verbose_name='质量评价'), - ), - ] diff --git a/apps/tasks/migrations/0008_auto_20210201_2227.py b/apps/tasks/migrations/0008_auto_20210201_2227.py deleted file mode 100644 index f408569..0000000 --- a/apps/tasks/migrations/0008_auto_20210201_2227.py +++ /dev/null @@ -1,17 +0,0 @@ -# Generated by Django 3.1.5 on 2021-02-01 22:27 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('tasks', '0007_auto_20210201_1901'), - ] - - operations = [ - migrations.AlterModelOptions( - name='todo', - options={'ordering': ['deadline'], 'verbose_name': '工作包', 'verbose_name_plural': '工作包'}, - ), - ] diff --git a/apps/tasks/models.py b/apps/tasks/models.py index edcb1bc..d99ea49 100644 --- a/apps/tasks/models.py +++ b/apps/tasks/models.py @@ -14,7 +14,8 @@ class Todo(models.Model): ) # related_task = models.ManyToManyField(Task, verbose_name="关联的主任务") duty_group = models.ForeignKey('users.Department', on_delete=models.CASCADE, verbose_name='承办单位') - main_executor = models.ForeignKey(User, related_name='main_executor', on_delete=models.SET_NULL, verbose_name='承/督办人', null=True) + main_executor = models.ForeignKey(User, related_name='main_executor', on_delete=models.CASCADE, + verbose_name='承/督办人', blank=True, null=True) sub_executor = models.ManyToManyField(User, related_name='sub_executor', verbose_name='协办人', default='', blank=True) predict_work = models.DecimalField('预计工作量', max_digits=5, decimal_places=1) evaluate_factor = models.DecimalField('折算系数', max_digits=5, decimal_places=1) @@ -39,7 +40,8 @@ class Todo(models.Model): ) real_work = models.DecimalField('实际工作量', max_digits=5, decimal_places=1, blank=True, null=True) complete_note = models.TextField('完成情况说明', max_length=150, blank=True) - quality_mark = models.ForeignKey('users.QualityMark', on_delete=models.SET_NULL, blank=True, null=True, verbose_name='质量评价') + quality_mark = models.ForeignKey('users.QualityMark', on_delete=models.SET_NULL, blank=True, null=True, + verbose_name='质量评价') deadline = models.DateField(verbose_name='完成时间') def __str__(self): @@ -57,6 +59,7 @@ class Todo(models.Model): lined_task = Task.objects.filter(related_task=self) for task in lined_task: return task.task_topic + # TODO 不知道有没有不用for循环直接查的 @property @@ -69,6 +72,7 @@ class Todo(models.Model): tasks = Task.objects.filter(related_task=self) for task in tasks: return task.task_origin + def duty_department(self): tasks = Task.objects.filter(related_task=self) for task in tasks: @@ -79,9 +83,13 @@ class Todo(models.Model): return self.deadline @property - def get_tatal_num(self): + def get_total_num(self): return self.objects.all().count() + @property + def points(self): + return int(self.predict_work * self.evaluate_factor) + class Task(models.Model): task_topic = models.CharField( @@ -95,9 +103,11 @@ class Task(models.Model): ) task_origin = models.CharField(max_length=150, verbose_name='任务来源') task_property = models.ForeignKey('users.TaskProperty', on_delete=models.CASCADE, verbose_name='任务属性') - related_task = models.ManyToManyField(Todo, verbose_name='任务节点', blank=True) - department = models.ForeignKey('users.Department', related_name='department', on_delete=models.SET_NULL, blank=True, null=True, verbose_name='所属单位') - duty_group = models.ForeignKey('users.Department', related_name='duty_group', on_delete=models.SET_NULL, blank=True, null=True, verbose_name='责任单位') + related_task = models.ManyToManyField(Todo, verbose_name='工作包', blank=True) + department = models.ForeignKey('users.Department', related_name='department', on_delete=models.SET_NULL, blank=True, + null=True, verbose_name='所属单位') + duty_group = models.ForeignKey('users.Department', related_name='duty_group', on_delete=models.SET_NULL, blank=True, + null=True, verbose_name='责任单位') principal = models.ForeignKey(User, related_name='principal', verbose_name='负责人', on_delete=models.CASCADE) leader = models.ForeignKey(User, related_name='leader', verbose_name='主管领导', on_delete=models.CASCADE) aim_value = models.CharField(max_length=50, verbose_name='目标值') diff --git a/apps/tasks/templatetags/taskfilter.py b/apps/tasks/templatetags/taskfilter.py index 912a028..c005d05 100644 --- a/apps/tasks/templatetags/taskfilter.py +++ b/apps/tasks/templatetags/taskfilter.py @@ -13,16 +13,16 @@ def quarter_cate(value, quarter): quarter = int(quarter) if quarter == 1 and 1 <= month <= 3: - return value + return str(value) + ' ' elif quarter == 2 and 4 <= month <= 6: - return value + return str(value) + ' ' elif quarter == 3 and 7 <= month <= 9: - return value + return str(value) + ' ' elif quarter == 4 and 10 <= month <= 12: - return value + return str(value) + ' ' else: return '' diff --git a/apps/tasks/views.py b/apps/tasks/views.py index 04a6d56..aeb766d 100644 --- a/apps/tasks/views.py +++ b/apps/tasks/views.py @@ -8,13 +8,14 @@ from django.views import View # Create your views here. from apps.tasks.models import Todo, Task from apps.tasks.forms import TodoForm +from apps.users.models import User class IndexView(View): def get(self, request): - tasks = Task.objects.filter().order_by('task_id') - context = {'tasks': tasks} - return render(request, 'tasks/tasklist.html', context) + users = User.objects.all() + context = {'users': users} + return render(request, 'tasks/index.html', context) class TodoListView(View): diff --git a/apps/users/migrations/0001_initial.py b/apps/users/migrations/0001_initial.py index 5d83f5f..483a8e4 100644 --- a/apps/users/migrations/0001_initial.py +++ b/apps/users/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 3.1.5 on 2021-01-29 13:31 +# Generated by Django 3.1.5 on 2021-02-17 09:37 import django.contrib.auth.models import django.contrib.auth.validators @@ -24,14 +24,19 @@ class Migration(migrations.Migration): ], options={ 'verbose_name': '部门', + 'verbose_name_plural': '部门', }, ), migrations.CreateModel( name='MarkValue', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('mark_value', models.DecimalField(decimal_places=2, max_digits=3)), + ('mark_value', models.DecimalField(decimal_places=2, max_digits=3, verbose_name='评价等级考核系数')), ], + options={ + 'verbose_name': '评价等级考核系数', + 'verbose_name_plural': '评价等级考核系数', + }, ), migrations.CreateModel( name='MyGroup', @@ -52,6 +57,7 @@ class Migration(migrations.Migration): fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('task_property', models.CharField(max_length=50, verbose_name='任务属性')), + ('own_department', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='users.department', verbose_name='所属部门')), ], options={ 'verbose_name': '任务属性', @@ -62,9 +68,13 @@ class Migration(migrations.Migration): name='QualityMark', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('mark_name', models.CharField(max_length=10, verbose_name='评分')), + ('mark_name', models.CharField(max_length=10, verbose_name='评价等级定义')), ('mark_value', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='users.markvalue')), ], + options={ + 'verbose_name': '评价等级定义', + 'verbose_name_plural': '评价等级定义', + }, ), migrations.CreateModel( name='User', @@ -82,7 +92,7 @@ class Migration(migrations.Migration): ('date_joined', models.DateTimeField(default=django.utils.timezone.now, verbose_name='date joined')), ('real_name', models.CharField(max_length=150, verbose_name='姓名')), ('staff_id', models.CharField(max_length=150, verbose_name='工号')), - ('department', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='users.department')), + ('department', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='users.department')), ('groups', models.ManyToManyField(blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', related_query_name='user', to='auth.Group', verbose_name='groups')), ('user_permissions', models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user', to='auth.Permission', verbose_name='user permissions')), ], diff --git a/apps/users/migrations/0002_auto_20210129_1332.py b/apps/users/migrations/0002_auto_20210129_1332.py deleted file mode 100644 index 5fbcacc..0000000 --- a/apps/users/migrations/0002_auto_20210129_1332.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 3.1.5 on 2021-01-29 13:32 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('users', '0001_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='user', - name='department', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='users.department'), - ), - ] diff --git a/apps/users/migrations/0003_auto_20210129_1417.py b/apps/users/migrations/0003_auto_20210129_1417.py deleted file mode 100644 index 00585d6..0000000 --- a/apps/users/migrations/0003_auto_20210129_1417.py +++ /dev/null @@ -1,24 +0,0 @@ -# Generated by Django 3.1.5 on 2021-01-29 14:17 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('users', '0002_auto_20210129_1332'), - ] - - operations = [ - migrations.AlterModelOptions( - name='department', - options={'verbose_name': '部门', 'verbose_name_plural': '部门'}, - ), - migrations.AddField( - model_name='taskproperty', - name='own_department', - field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, to='users.department'), - preserve_default=False, - ), - ] diff --git a/apps/users/migrations/0004_auto_20210129_1434.py b/apps/users/migrations/0004_auto_20210129_1434.py deleted file mode 100644 index 8140315..0000000 --- a/apps/users/migrations/0004_auto_20210129_1434.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 3.1.5 on 2021-01-29 14:34 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('users', '0003_auto_20210129_1417'), - ] - - operations = [ - migrations.AlterField( - model_name='taskproperty', - name='own_department', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='users.department', verbose_name='所属部门'), - ), - ] diff --git a/apps/users/migrations/0005_auto_20210130_2021.py b/apps/users/migrations/0005_auto_20210130_2021.py deleted file mode 100644 index 13b27a7..0000000 --- a/apps/users/migrations/0005_auto_20210130_2021.py +++ /dev/null @@ -1,24 +0,0 @@ -# Generated by Django 3.1.5 on 2021-01-30 20:21 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('users', '0004_auto_20210129_1434'), - ] - - operations = [ - migrations.AlterField( - model_name='taskproperty', - name='own_department', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='users.department', verbose_name='所属部门'), - ), - migrations.AlterField( - model_name='user', - name='department', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='users.department'), - ), - ] diff --git a/apps/users/migrations/0006_auto_20210201_1900.py b/apps/users/migrations/0006_auto_20210201_1900.py deleted file mode 100644 index 58b87b1..0000000 --- a/apps/users/migrations/0006_auto_20210201_1900.py +++ /dev/null @@ -1,31 +0,0 @@ -# Generated by Django 3.1.5 on 2021-02-01 19:00 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('users', '0005_auto_20210130_2021'), - ] - - operations = [ - migrations.AlterModelOptions( - name='markvalue', - options={'verbose_name': '评分值', 'verbose_name_plural': '评分值'}, - ), - migrations.AlterModelOptions( - name='qualitymark', - options={'verbose_name': '评分名称', 'verbose_name_plural': '评分名称'}, - ), - migrations.AlterField( - model_name='markvalue', - name='mark_value', - field=models.DecimalField(decimal_places=2, max_digits=3, verbose_name='评分值'), - ), - migrations.AlterField( - model_name='qualitymark', - name='mark_name', - field=models.CharField(max_length=10, verbose_name='评分名称'), - ), - ] diff --git a/apps/users/migrations/0007_auto_20210201_2227.py b/apps/users/migrations/0007_auto_20210201_2227.py deleted file mode 100644 index 0ec94f4..0000000 --- a/apps/users/migrations/0007_auto_20210201_2227.py +++ /dev/null @@ -1,31 +0,0 @@ -# Generated by Django 3.1.5 on 2021-02-01 22:27 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('users', '0006_auto_20210201_1900'), - ] - - operations = [ - migrations.AlterModelOptions( - name='markvalue', - options={'verbose_name': '评价等级考核系数', 'verbose_name_plural': '评价等级考核系数'}, - ), - migrations.AlterModelOptions( - name='qualitymark', - options={'verbose_name': '评价等级定义', 'verbose_name_plural': '评价等级定义'}, - ), - migrations.AlterField( - model_name='markvalue', - name='mark_value', - field=models.DecimalField(decimal_places=2, max_digits=3, verbose_name='评价等级考核系数'), - ), - migrations.AlterField( - model_name='qualitymark', - name='mark_name', - field=models.CharField(max_length=10, verbose_name='评价等级定义'), - ), - ] diff --git a/apps/users/models.py b/apps/users/models.py index 6c7840f..f905bdb 100644 --- a/apps/users/models.py +++ b/apps/users/models.py @@ -3,6 +3,9 @@ from django.contrib.auth.models import AbstractUser, Group # Create your models here. +from django.db.models import Avg, Sum, F, Value + + class User(AbstractUser): real_name = models.CharField(max_length=150, verbose_name='姓名') staff_id = models.CharField(max_length=150, verbose_name='工号') @@ -15,6 +18,14 @@ class User(AbstractUser): def __str__(self): return self.real_name + @classmethod + def get_total_point(cls): + return cls.objects.aggregate(total=Sum(F('main_executor__predict_work') * F('main_executor__evaluate_factor') + F('sub_executor__predict_work') * F('sub_executor__evaluate_factor')))['total'] + + @classmethod + def get_predict_work_count(cls): + return cls.objects.aggregate(total_predict_work=Sum('main_executor__predict_work')) + class MyGroup(Group): class Meta: diff --git a/static/tasks/task.css b/static/tasks/task.css index 52ae3df..899b3e2 100644 --- a/static/tasks/task.css +++ b/static/tasks/task.css @@ -5,7 +5,7 @@ BORDER-TOP: 0px solid; /*width:100%;*/ overflow:hidden; - width:200px; + width:160px; font-size: 0.5rem; } diff --git a/templates/tasks/base.html b/templates/tasks/base.html index ec0171a..23e69ef 100644 --- a/templates/tasks/base.html +++ b/templates/tasks/base.html @@ -305,7 +305,7 @@ scratch. This page gets rid of all links and provides the needed markup only. CHRDI Task Manager ver 0.5 - beta - Made with ❤ by Raintony. + Made with ❤ by Raiot. @@ -319,5 +319,8 @@ scratch. This page gets rid of all links and provides the needed markup only. +{% block script %} + +{% endblock %} diff --git a/templates/tasks/index.html b/templates/tasks/index.html index 9dcf643..d11ab2d 100644 --- a/templates/tasks/index.html +++ b/templates/tasks/index.html @@ -1 +1,203 @@ {% extends 'tasks/base.html' %} +{% load static %} + +{% block main_content %} +
+ +
+
+
+
+

总览

+
+
+ +
+
+
+
+ + +
+
+
+
+
+ + +
+ CPU Traffic + + 10 + % + +
+ +
+ +
+ +
+
+ + +
+ Likes + 41,410 +
+ +
+ +
+ + + +
+ +
+
+ + +
+ Sales + 760 +
+ +
+ +
+ +
+
+ + +
+ New Members + 2,000 +
+ +
+ +
+ +
+
+
+ +
+
+

Bar Chart

+ +
+ + +
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+ +
+ +
+ +
+ +
+
+ +
+
+ {% for user in users %} + {{ user }} + {{ user.get_predict_work_count.total_predict_work }} + {{ user.get_total_point }} + {{ user.main_executor.count }} + {% for todo in user.main_executor.all %} + {{ todo }} + {{ todo.points }} + {% endfor %} +
+ {% endfor %} +
+{% endblock %} + +{% block script %} + + + +{% endblock %} \ No newline at end of file diff --git a/templates/tasks/tasklist.html b/templates/tasks/tasklist.html index 72ba89f..93992ca 100644 --- a/templates/tasks/tasklist.html +++ b/templates/tasks/tasklist.html @@ -80,16 +80,16 @@ {{ task.aim_value }} {% load taskfilter %} - + - + - + - + {{ task.deadline | date:"Y年m月" }} {{ task.duty_group }} @@ -111,4 +111,14 @@ + {% endblock %} \ No newline at end of file