Implement an analizing for a whole test plan

test_run field can accept an ID for test plan.
Code will detect automatically which Id was entered: TestRun's or TestPlan's

The list of analized test will be stored in the TestRun model
and will not be proceeded in the case of reruning TestRun

PRODX-35956

Change-Id: I91b59a6a6abc932e2026b05428d408a5dec31134
diff --git a/testrail_bot/control/models.py b/testrail_bot/control/models.py
index e7bea45..f0e014f 100644
--- a/testrail_bot/control/models.py
+++ b/testrail_bot/control/models.py
@@ -2,15 +2,42 @@
 
 from django.core.files.storage import FileSystemStorage
 from django.db import models
-from django import forms
+
+
+class IntegerListField(models.Field):
+    def __init__(self, *args, **kwargs):
+        kwargs['editable'] = False
+        super(IntegerListField, self).__init__(*args, **kwargs)
+
+    def db_type(self, connection):
+        return 'text'
+
+    def from_db_value(self, value, expression, connection):
+        if not value:
+            return []
+        return [int(x) for x in value.split(',')]
+
+    def to_python(self, value):
+        if isinstance(value, list):
+            return value
+        if not value:
+            return []
+        return [int(x) for x in value.split(',')]
+
+    def get_prep_value(self, value):
+        if not value:
+            return ''
+        return ','.join(str(int(x)) for x in value)
 
 
 class TestRailTestRun(models.Model):
-    project_name = models.CharField(max_length=300, default="Mirantis Cloud Platform")
+    project_name = models.CharField(max_length=300,
+                                    default="Mirantis Cloud Platform")
     plan_name = models.CharField(max_length=300, default="[MCP2.0]OSCORE")
     run_name = models.CharField(max_length=300, blank=True)
     test_pattern = models.CharField(max_length=300, blank=True)
     run_id = models.CharField(max_length=300)
+    checked_tests = IntegerListField(default=list())
     created_by_id = models.IntegerField(default='109')
     filter_func = models.TextField(null=True, blank=True)
     ip_filter = models.BooleanField(default=True)
@@ -18,6 +45,25 @@
     filter_last_traceback = models.BooleanField(default=False)
     timestamp = models.DateField(default=datetime.date.today())
 
+    @property
+    def text_filters(self):
+        return {
+            "filter_last_traceback": self.filter_last_traceback,
+            "uuid_filter": self.uuid_filter,
+            "ip_filter": self.ip_filter,
+            "filter_func": self.filter_func,
+        }
+
+    @property
+    def testrail_filters(self):
+        return {
+            "created_by_id": self.created_by_id,
+            "created_before": self.timestamp,
+            "run_name": self.run_name,
+            "plan_name": self.plan_name,
+            "test_pattern": self.test_pattern,
+        }
+
 
 fs = FileSystemStorage()