diff --git a/taskapp/__init__.py b/taskapp/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/taskapp/admin.py b/taskapp/admin.py new file mode 100644 index 0000000..6dba17b --- /dev/null +++ b/taskapp/admin.py @@ -0,0 +1,4 @@ +from django.contrib import admin +import models + +admin.site.register(models.Task) diff --git a/taskapp/apps.py b/taskapp/apps.py new file mode 100644 index 0000000..205f692 --- /dev/null +++ b/taskapp/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class TicketsappConfig(AppConfig): + name = 'taskapp' diff --git a/taskapp/forms.py b/taskapp/forms.py new file mode 100644 index 0000000..7c86593 --- /dev/null +++ b/taskapp/forms.py @@ -0,0 +1,33 @@ +# -*- coding: utf-8 -*- +from datetime import datetime, timedelta +from django import forms +from models import TASK_PRIORITIES +from accounts_app.models import UserProfile +from devapp.models import Device + + +class TaskFrm(forms.Form): + descr = forms.CharField(max_length=128, required=True, widget=forms.TextInput(attrs={ + 'placeholder': u'Краткое описание', + 'class': "form-control", + 'id': "descr", + 'required':'' + })) + recipient = forms.ModelChoiceField( + queryset=UserProfile.objects.all(), + widget=forms.Select(attrs={'class': 'form-control', 'id': 'recipient', 'required':''}) + ) + device = forms.ModelChoiceField( + queryset=Device.objects.all(), + widget=forms.Select(attrs={'class': 'form-control', 'id': 'device', 'required':''}) + ) + priority = forms.ChoiceField( + choices=TASK_PRIORITIES, + widget=forms.Select(attrs={'class': 'form-control', 'id': 'priority'}), + required=False, + initial=TASK_PRIORITIES[2][0] + ) + out_date = forms.DateField( + widget=forms.DateInput(attrs={'class': 'form-control', 'id': 'out_date'}), + initial=datetime.now()+timedelta(days=7) + ) diff --git a/taskapp/migrations/__init__.py b/taskapp/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/taskapp/models.py b/taskapp/models.py new file mode 100644 index 0000000..7378e54 --- /dev/null +++ b/taskapp/models.py @@ -0,0 +1,41 @@ +# coding=utf-8 +from __future__ import unicode_literals + +from django.db import models +from djing import settings +from devapp.models import Device +from datetime import datetime, timedelta + + +TASK_PRIORITIES = ( + (b'A', u'Высший'), + (b'B', u'Выше среднего'), + (b'C', u'Средний'), + (b'D', u'Ниже среднего'), + (b'E', u'Низкий') +) + + +class Task(models.Model): + descr = models.CharField(max_length=128) + recipient = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='+') + author = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='+') + device = models.ForeignKey(Device, related_name='dev') + priority = models.CharField(max_length=1, choices=TASK_PRIORITIES, default=TASK_PRIORITIES[2][0]) + out_date = models.DateField(null=True, blank=True, default=datetime.now()+timedelta(days=7)) + time_of_create = models.DateTimeField(auto_now_add=True) + + def __unicode__(self): + return self.descr + + class Meta: + db_table = 'task' + + def save_form(self, frm_instance, auth_user): + cl = frm_instance.cleaned_data + self.descr = cl['descr'] + self.recipient = cl['recipient'] + self.author = auth_user + self.device = cl['device'] + self.priority = cl['priority'] + self.out_date = cl['out_date'] diff --git a/taskapp/tests.py b/taskapp/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/taskapp/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/taskapp/urls.py b/taskapp/urls.py new file mode 100644 index 0000000..9c56f12 --- /dev/null +++ b/taskapp/urls.py @@ -0,0 +1,9 @@ +from django.conf.urls import url +import views + +urlpatterns = [ + url(r'^$', views.home, name='task_home'), + url(r'^(?P\d+)/edit$', views.task_add_edit, name='task_edit'), + url(r'^(?P\d+)/delete$', views.task_delete, name='task_delete'), + url(r'^add$', views.task_add_edit, name='task_add') +] diff --git a/taskapp/views.py b/taskapp/views.py new file mode 100644 index 0000000..40cee33 --- /dev/null +++ b/taskapp/views.py @@ -0,0 +1,64 @@ +# coding=utf-8 +from django.contrib.auth.decorators import login_required +from django.shortcuts import render, redirect, get_object_or_404 +from models import Task +from mydefs import pag_mn#, order_helper +from forms import TaskFrm + + +@login_required +def home(request): + tasks = Task.objects.all() + + # filter + #dir, field = order_helper(request) + #if field: + # tasks = tasks.order_by(field) + + for ts in tasks: + print ts.priority, type(ts.priority) + + tasks = pag_mn(request, tasks) + + return render(request, 'taskapp/index.html', { + 'tasks': tasks + }) + + +@login_required +def task_delete(request, task_id): + get_object_or_404(Task, id=task_id).delete() + return redirect('task_home') + + +@login_required +def task_add_edit(request, task_id=0): + warntext = '' + if request.method == 'POST': + frm = TaskFrm(request.POST) + if frm.is_valid(): + tsk = Task() + tsk.save_form(frm, request.user) + tsk.save() + return redirect('task_home') + else: + warntext = u'Исправте ошибки' + + if task_id == 0: + task = Task() + frm = TaskFrm() + else: + task = get_object_or_404(Task, id=task_id) + frm = TaskFrm({ + 'descr': task.descr, + 'recipient': task.recipient.id, + 'device': task.device.id, + 'priority': task.priority, + 'out_date': task.out_date + }) + + return render(request, 'taskapp/add_edit_task.html', { + 'warntext': warntext, + 'form': frm, + 'task': task + }) diff --git a/templates/taskapp/add_edit_task.html b/templates/taskapp/add_edit_task.html new file mode 100644 index 0000000..350fa97 --- /dev/null +++ b/templates/taskapp/add_edit_task.html @@ -0,0 +1,74 @@ +{% extends request.is_ajax|yesno:'bajax.html,base.html' %} +{% block main %} + + + + +
+
+

Добавьте новую задачу

+
+
+ {% if warntext %} +
{{ warntext }}
+ {% endif %} + + {% if task.id %} +
+ {% else %} + + {% endif %} + {% csrf_token %} + +
+ +
+ + {{ form.descr }}{{ form.descr.errors }} +
+
+
+ +
+ + {{ form.recipient }}{{ form.recipient.errors }} +
+
+
+ +
+ + {{ form.device }}{{ form.device.errors }} +
+
+
+ +
+ + {{ form.priority }}{{ form.priority.errors }} +
+
+
+ +
+ + {{ form.out_date }}{{ form.out_date.errors }} +
+
+
+ + +
+
+
+
+ +{% endblock %} diff --git a/templates/taskapp/index.html b/templates/taskapp/index.html new file mode 100644 index 0000000..74ce9a7 --- /dev/null +++ b/templates/taskapp/index.html @@ -0,0 +1,71 @@ +{% extends 'base.html' %} +{% block main %} + + + + + +

Задачи, которые необходимо выполнить

+
+ + + + + + + + + + + + + + + {% for task in tasks %} + + {% if task.priority == 'E' %} + {% elif task.priority == 'D' %} + {% elif task.priority == 'C' %} + {% elif task.priority == 'B' %} + {% elif task.priority == 'A' %} + {% else %}{% endif %} + + + + + + + + + + {% empty %} + + + + {% endfor %} + + + + + + +
Пару слов..Кому назначенаКто назначилПриоритетИстечение срокаДата созданияРед.Уд.
{{ task.descr }}{{ task.recipient.username }}{{ task.author.username }}{{ task.get_priority_display }}{{ task.out_date }}{{ task.time_of_create }} + + + + + + +
Нет ни одного задания на этот момент. Создать задачу
+ + + +
+
+ + {% include 'toolbar_page.html' with pag=tasks %} + +{% endblock %}