PRODX-39509 Implementing auto-triggering the analyzing of today's run

Added time enums for easy controlling of time duration in code
Added clock to the nav bar
Changed default created_after to more proper way of definition through the Django's timedelta,
 because standard datetime library can't pass it's value to the model

Change-Id: I8411853dfc3c420a96254a1091f093c24a4217ae
diff --git a/testrail_bot/control/views.py b/testrail_bot/control/views.py
index bff73e0..8d5f692 100644
--- a/testrail_bot/control/views.py
+++ b/testrail_bot/control/views.py
@@ -4,6 +4,7 @@
 from .celery_tasks import test_rail_api
 
 from django.shortcuts import render, redirect, HttpResponse
+from django_celery_beat.models import CrontabSchedule, PeriodicTasks
 
 from . import models
 from . import forms
@@ -240,3 +241,79 @@
          "report2": report.report2,
          "is_finished": report.report1.finished and report.report2.finished,
          "diff_table": diff_table})
+
+
+def schedulers(request):
+
+    return render(
+        request, "control/schedulers.html",
+        {"schedulers": models.CronPeriodicTask.objects.all()})
+
+
+def scheduler(request, pk=None):
+    if request.method == "POST":
+        return save_scheduler(request)
+
+    if pk:
+        task_pk = models.CronPeriodicTask.objects.get(pk=pk)
+        form = forms.PeriodicTaskForm(instance=task_pk)
+    else:
+        form = forms.PeriodicTaskForm()
+
+    return render(
+        request, "control/scheduler.html",
+        {
+            "form": form,
+            "pk": pk,
+            "TASK_CHOICES": models.TASK_CHOICES
+        }
+    )
+
+
+def save_scheduler(request, pk=None):
+    minute, hour, day_of_month, month_of_year, day_of_week = \
+        request.POST.get("cron", "* * * * *").split(" ")
+    if pk is None:
+        sch = CrontabSchedule.objects.create(
+            minute=minute,
+            hour=hour,
+            day_of_month=day_of_month,
+            month_of_year=month_of_year,
+            day_of_week=day_of_week
+        )
+        task = models.CronPeriodicTask.objects.create(
+            crontab=sch,
+            cron=request.POST.get("cron"),
+            name=request.POST.get("name"),
+            task="control.celery_tasks.tasks.check_today_testplan",
+            enabled=request.POST.get("enabled") == 'on',
+            # TODO(harhipova): uncomment when implemented tasks with arguments
+            # args=args,
+            # kwargs=kwargs,
+        )
+    else:
+        task = models.CronPeriodicTask.objects.get(pk=pk)
+    form = forms.PeriodicTaskForm(request.POST, instance=task)
+    CrontabSchedule.objects.filter(id=task.crontab.id).update(
+        minute=minute,
+        hour=hour,
+        day_of_month=day_of_month,
+        month_of_year=month_of_year,
+        day_of_week=day_of_week
+    )
+    form.save()
+    PeriodicTasks.update_changed()
+    return render(
+        request, "control/scheduler.html",
+        {
+            "form": form,
+            "pk": task.id,
+            "TASK_CHOICES": models.TASK_CHOICES
+        }
+    )
+
+
+def delete_scheduler(request, pk):
+    task = models.CronPeriodicTask.objects.get(pk=pk)
+    task.delete()
+    return redirect("schedulers")