From 925c35f329a31328571f31ff63cb201691aeab25 Mon Sep 17 00:00:00 2001 From: "Tibor Bossanyi (Freelancer)" Date: Thu, 9 Sep 2021 07:49:13 +0200 Subject: [PATCH] BO 1.25 App Texts --- .../aitrainer_backoffice/admin/__init__.py | 1 + .../aitrainer_backoffice/admin/app_text.py | 33 +++++++++++++++++++ .../aitrainer_backoffice/models/__init__.py | 3 +- .../aitrainer_backoffice/models/app_text.py | 32 ++++++++++++++++++ .../aitrainer_backoffice/settings/dev.py | 11 ++++--- .../aitrainer_backoffice/settings/prod.py | 10 +++--- aitrainer_backoffice/controlling/cron/cron.py | 13 +++++++- .../controlling/mautic/helper.py | 5 +++ requirements.txt | 2 +- 9 files changed, 97 insertions(+), 13 deletions(-) create mode 100644 aitrainer_backoffice/aitrainer_backoffice/admin/app_text.py create mode 100644 aitrainer_backoffice/aitrainer_backoffice/models/app_text.py diff --git a/aitrainer_backoffice/aitrainer_backoffice/admin/__init__.py b/aitrainer_backoffice/aitrainer_backoffice/admin/__init__.py index 0f0fa0f..0641e20 100644 --- a/aitrainer_backoffice/aitrainer_backoffice/admin/__init__.py +++ b/aitrainer_backoffice/aitrainer_backoffice/admin/__init__.py @@ -14,3 +14,4 @@ from .split_tests import SplitTestAdmin from .training_plan_day import TrainingPlanDayAdmin from .controlling import ControllingAdmin from .sport import SportAdmin +from .app_text import AppTextAdmin diff --git a/aitrainer_backoffice/aitrainer_backoffice/admin/app_text.py b/aitrainer_backoffice/aitrainer_backoffice/admin/app_text.py new file mode 100644 index 0000000..94f3502 --- /dev/null +++ b/aitrainer_backoffice/aitrainer_backoffice/admin/app_text.py @@ -0,0 +1,33 @@ +from django.contrib import admin +from django.utils.html import format_html +from django.utils.translation import ugettext_lazy as _ + +from ..models.app_text import AppText, AppTextTranslation + + +class TranslationAppTextInline(admin.TabularInline): + model = AppTextTranslation + fields = ('language_code', 'translation') + extra = 0 + + +class AppTextAdmin(admin.ModelAdmin): + list_display = ('text_key','checked') + fields = ('text_key','screenshot_url', 'checked') + readonly_fields = ("get_image_preview",) + + def get_image_preview(self, obj): + screenshot_url = '/media/' + str(obj.url) + if obj.pk: + return format_html(' ' \ + .format(url=screenshot_url)) + + get_image_preview.short_description = _("Image Preview") + + inlines = [ + TranslationAppTextInline, + ] + + +admin.site.register(AppText, AppTextAdmin) +admin.autodiscover() diff --git a/aitrainer_backoffice/aitrainer_backoffice/models/__init__.py b/aitrainer_backoffice/aitrainer_backoffice/models/__init__.py index a6a5d81..c07a2df 100644 --- a/aitrainer_backoffice/aitrainer_backoffice/models/__init__.py +++ b/aitrainer_backoffice/aitrainer_backoffice/models/__init__.py @@ -16,4 +16,5 @@ from .faq import Faq, FaqTranslation from .split_tests import SplitTests from .training_plan_day import TrainingPlanDay, TrainingPlanDayTranslation from .controlling import Controlling -from .sports import Sport, SportTranslation \ No newline at end of file +from .sports import Sport, SportTranslation +from .app_text import AppText, AppTextTranslation \ No newline at end of file diff --git a/aitrainer_backoffice/aitrainer_backoffice/models/app_text.py b/aitrainer_backoffice/aitrainer_backoffice/models/app_text.py new file mode 100644 index 0000000..6a249d9 --- /dev/null +++ b/aitrainer_backoffice/aitrainer_backoffice/models/app_text.py @@ -0,0 +1,32 @@ +from django.db import models +from django.utils.translation import ugettext_lazy as _ + +from .enums import LanguageTypes + + +class AppText(models.Model): + text_id = models.AutoField(primary_key=True) + text_key = models.CharField(max_length=255, help_text='Do not edit this! It is the key in the mobile app', + verbose_name=_("text_key")) + screenshot_url = models.ImageField(upload_to='images/', help_text='The menu image size is 1366x768', blank=True, ) + checked = models.BooleanField(blank=True) + + class Meta: + db_table = 'app_text' + verbose_name = _("App Text") + verbose_name_plural = _("App Texts") + + def __str__(self): + return self.text_key + + +class AppTextTranslation(models.Model): + translation_id = models.AutoField(primary_key=True) + text = models.ForeignKey(AppText, on_delete=models.CASCADE) + language_code = models.CharField(max_length=2, choices=LanguageTypes.choices, default=LanguageTypes.HU) + translation = models.CharField(max_length=255) + + class Meta: + db_table = 'app_text_translation' + verbose_name = _("Translation") + verbose_name_plural = _("Translations") diff --git a/aitrainer_backoffice/aitrainer_backoffice/settings/dev.py b/aitrainer_backoffice/aitrainer_backoffice/settings/dev.py index 2c69017..3c83027 100644 --- a/aitrainer_backoffice/aitrainer_backoffice/settings/dev.py +++ b/aitrainer_backoffice/aitrainer_backoffice/settings/dev.py @@ -12,7 +12,7 @@ https://docs.djangoproject.com/en/3.0/ref/settings/ import os -BACKOFFICE_VERSION = 1.23 +BACKOFFICE_VERSION = 1.25 # Build paths inside the project like this: os.path.join(BASE_DIR, ...) BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) @@ -49,7 +49,7 @@ INSTALLED_APPS = [ 'ckeditor_uploader', 'django_admin_json_editor', 'rangefilter', - 'django_crontab' + 'django_cron', ] MIDDLEWARE = [ @@ -172,6 +172,7 @@ LOGGING = { }, } -CRONJOBS = [ - ('4 */1 * * *', 'controlling.cron.sync_customers') -] +CRON_CLASSES = [ + 'aitrainer_backoffice.controlling.cron.sync_customers', + # ... +] \ No newline at end of file diff --git a/aitrainer_backoffice/aitrainer_backoffice/settings/prod.py b/aitrainer_backoffice/aitrainer_backoffice/settings/prod.py index aa024e3..0af0e4b 100644 --- a/aitrainer_backoffice/aitrainer_backoffice/settings/prod.py +++ b/aitrainer_backoffice/aitrainer_backoffice/settings/prod.py @@ -12,7 +12,7 @@ https://docs.djangoproject.com/en/3.0/ref/settings/ import os -BACKOFFICE_VERSION = 1.23 +BACKOFFICE_VERSION = 1.25 # Build paths inside the project like this: os.path.join(BASE_DIR, ...) BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) @@ -45,7 +45,7 @@ INSTALLED_APPS = [ 'ckeditor_uploader', 'django_admin_json_editor', 'rangefilter', - 'django_crontab' + 'django_cron', ] MIDDLEWARE = [ @@ -183,7 +183,7 @@ CACHES = { } } -CRONJOBS = [ - ('4 */1 * * *', 'aitrainer_backoffice.controlling.cron.sync_customers') +CRON_CLASSES = [ + 'aitrainer_backoffice.controlling.cron.sync_customers', + # ... ] - diff --git a/aitrainer_backoffice/controlling/cron/cron.py b/aitrainer_backoffice/controlling/cron/cron.py index b43f190..873353f 100644 --- a/aitrainer_backoffice/controlling/cron/cron.py +++ b/aitrainer_backoffice/controlling/cron/cron.py @@ -1,6 +1,17 @@ from ..mautic import MauticHelper +from django_cron import CronJobBase, Schedule + + +class MyCronJob(CronJobBase): + RUN_EVERY_MINS = 60 # every 2 hours + + schedule = Schedule(run_every_mins=RUN_EVERY_MINS) + code = 'aitrainer_backoffice.controlling.cron' # a unique code + + def do(self): + sync_customers() # do your thing here def sync_customers(): helper = MauticHelper() - helper.sync() \ No newline at end of file + helper.syncTrial() \ No newline at end of file diff --git a/aitrainer_backoffice/controlling/mautic/helper.py b/aitrainer_backoffice/controlling/mautic/helper.py index b0f1277..c89aae2 100644 --- a/aitrainer_backoffice/controlling/mautic/helper.py +++ b/aitrainer_backoffice/controlling/mautic/helper.py @@ -1,12 +1,17 @@ import requests import logging from django.db import connections +import datetime from ..models.customer import Customer class MauticHelper: + def syncTrial(self): + tenDays = datetime.datetime - datetime.timedelta(days=10) + qs = Customer.objects.raw( + 'SELECT * from customer WHERE trial_date < "' + tenDays + '" and trial_date is not null') def sync(self): logger = logging.getLogger(__name__) diff --git a/requirements.txt b/requirements.txt index 6ac81f0..a5aaf52 100644 --- a/requirements.txt +++ b/requirements.txt @@ -13,5 +13,5 @@ mysqlclient==2.0.1 requests==2.24.0 pillow==7.2.0 gunicorn==20.0.4 -django-crontab==0.7.1 +django-cron==0.5.1 django-admin-rangefilter==0.8.1 \ No newline at end of file