From bb253d60fc70905d9d83779c36f720421cef20e0 Mon Sep 17 00:00:00 2001
From: OndraRehounek <ondra.rehounek@seznam.cz>
Date: Fri, 15 Apr 2022 13:25:54 +0200
Subject: [PATCH] district & region: WIP redmine

---
 district/blocks.py                            |  3 +-
 majak/settings/base.py                        |  1 +
 redmine_utils/__init__.py                     |  0
 redmine_utils/apps.py                         |  5 ++++
 redmine_utils/management/__init__.py          |  0
 redmine_utils/management/commands/__init__.py |  0
 .../commands/update_redmine_issues.py         | 30 +++++++++++++++++++
 redmine_utils/migrations/__init__.py          |  0
 redmine_utils/models.py                       |  5 ++++
 redmine_utils/utils.py                        | 24 +++++++++++++++
 region/blocks.py                              |  2 --
 11 files changed, 66 insertions(+), 4 deletions(-)
 create mode 100644 redmine_utils/__init__.py
 create mode 100644 redmine_utils/apps.py
 create mode 100644 redmine_utils/management/__init__.py
 create mode 100644 redmine_utils/management/commands/__init__.py
 create mode 100644 redmine_utils/management/commands/update_redmine_issues.py
 create mode 100644 redmine_utils/migrations/__init__.py
 create mode 100644 redmine_utils/models.py
 create mode 100644 redmine_utils/utils.py

diff --git a/district/blocks.py b/district/blocks.py
index b885a0a3..f4849df7 100644
--- a/district/blocks.py
+++ b/district/blocks.py
@@ -224,8 +224,6 @@ class StaticProgramBlock(StructBlock):
     person = PageChooserBlock(label="Garant", page_type=["district.DistrictPersonPage"])
     completion_percentage = IntegerBlock(label="Procento dokončení", required=True)
     program_items = ListBlock(ProgramItemBlock())
-    # program_items = TableBlock(label="Tabulka plnění programu", required=True)
-    person = PageChooserBlock(label="Garant", page_type=["district.DistrictPersonPage"])
 
     class Meta:
         template = "district/blocks/static_program_block.html"
@@ -238,6 +236,7 @@ class RedmineProgramBlock(StructBlock):
     perex = TextBlock(label="Krátký text pod nadpisem", required=True)
     person = PageChooserBlock(label="Garant", page_type=["district.DistrictPersonPage"])
     redmine_issue = IntegerBlock(label="Číslo Redmine issue", required=True)
+    completion_percentage = IntegerBlock(label="Procento dokončení", required=False)
 
     class Meta:
         template = "district/blocks/redmine_program_block.html"
diff --git a/majak/settings/base.py b/majak/settings/base.py
index 963e6153..4f0b1440 100644
--- a/majak/settings/base.py
+++ b/majak/settings/base.py
@@ -44,6 +44,7 @@ INSTALLED_APPS = [
     "czech_inspirational",
     "shared",
     "calendar_utils",
+    "redmine_utils",
     "users",
     "pirates",
     "tuning",
diff --git a/redmine_utils/__init__.py b/redmine_utils/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/redmine_utils/apps.py b/redmine_utils/apps.py
new file mode 100644
index 00000000..bdd5f893
--- /dev/null
+++ b/redmine_utils/apps.py
@@ -0,0 +1,5 @@
+from django.apps import AppConfig
+
+
+class RedmineUtilsConfig(AppConfig):
+    name = "redmine_utils"
diff --git a/redmine_utils/management/__init__.py b/redmine_utils/management/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/redmine_utils/management/commands/__init__.py b/redmine_utils/management/commands/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/redmine_utils/management/commands/update_redmine_issues.py b/redmine_utils/management/commands/update_redmine_issues.py
new file mode 100644
index 00000000..b42ddb11
--- /dev/null
+++ b/redmine_utils/management/commands/update_redmine_issues.py
@@ -0,0 +1,30 @@
+from django.core.management.base import BaseCommand
+
+from district.models import DistrictProgramPage
+from region.models import RegionProgramPage
+
+from ...utils import get_issue_list, get_issue_overall
+
+
+class Command(BaseCommand):
+    def handle(self, *args, **options):
+        """
+        Pro updated_models (DistrictProgramPage, RegionProgramPage) projedu obsah,
+        zda má v sobě `redmine_program_block` - ten má IntegerBlock `redmine_issue`.
+        Podle něj pak stahujeme data z Redmine.
+        """
+        updated_models = DistrictProgramPage, RegionProgramPage
+        self.stdout.write("Updating Redmine issues...")
+
+        for model in updated_models:
+            program_pages = model.objects.all()
+            for page_content in model.objects.all().values_list("content", flat=True):
+                for program_block in page_content:
+                    if program_block.block_type == "redmine_program_block":
+                        # block_content_dict = program_block.value
+                        redmine_issue = program_block.value["redmine_issue"]
+                        program_block.value["headline"] = "test"
+                        get_issue_overall(redmine_issue)
+                        get_issue_list(redmine_issue)
+
+        self.stdout.write("\nUpdating Redmine issues finished")
diff --git a/redmine_utils/migrations/__init__.py b/redmine_utils/migrations/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/redmine_utils/models.py b/redmine_utils/models.py
new file mode 100644
index 00000000..d07ff1c1
--- /dev/null
+++ b/redmine_utils/models.py
@@ -0,0 +1,5 @@
+from django.db import models
+
+
+class RedmineIssue(models.Model):
+    pass
diff --git a/redmine_utils/utils.py b/redmine_utils/utils.py
new file mode 100644
index 00000000..e06990d3
--- /dev/null
+++ b/redmine_utils/utils.py
@@ -0,0 +1,24 @@
+import json
+
+import requests
+
+
+def get_issue_overall(issue_id):
+    response = requests.get("https://redmine.pirati.cz/issues/{}.json".format(issue_id))
+    print(response.text)
+
+
+def get_issue_list(issue_id):
+    response = requests.get(
+        "https://redmine.pirati.cz/issues.json?parent_id={}&sort=id:as".format(issue_id)
+    )
+
+    if response.status_code != 200 or not response.text:
+        # TODO log
+        return
+
+    data = json.loads(response.text)
+
+    print(response)
+
+    return data["issues"]
diff --git a/region/blocks.py b/region/blocks.py
index a70005f8..d54020cb 100644
--- a/region/blocks.py
+++ b/region/blocks.py
@@ -224,8 +224,6 @@ class StaticProgramBlock(StructBlock):
     person = PageChooserBlock(label="Garant", page_type=["region.RegionPersonPage"])
     completion_percentage = IntegerBlock(label="Procento dokončení", required=True)
     program_items = ListBlock(ProgramItemBlock())
-    # program_items = TableBlock(label="Tabulka plnění programu", required=True)
-    person = PageChooserBlock(label="Garant", page_type=["region.RegionPersonPage"])
 
     class Meta:
         template = "region/blocks/static_program_block.html"
-- 
GitLab