diff --git a/aitrainer_backoffice/aitrainer_backoffice/admin.py b/aitrainer_backoffice/aitrainer_backoffice/admin.py
index 9bb9105..f594bd6 100644
--- a/aitrainer_backoffice/aitrainer_backoffice/admin.py
+++ b/aitrainer_backoffice/aitrainer_backoffice/admin.py
@@ -1,3 +1,5 @@
+from abc import ABC
+
from django.contrib import admin
from django.utils.html import format_html
from django.utils.translation import ugettext_lazy as _
@@ -11,6 +13,7 @@ from .models import ExerciseTree, ExerciseTreeParents
from .models import ExercisePlanTranslation
from .models import ExercisePlanDetail
from .models import ExercisePlan
+from .models import ExercisePlanTemplate, ExercisePlanTemplateTranslation, ExercisePlanTemplateDetail
'''
ExerciseTree
@@ -114,7 +117,7 @@ class ExerciseTypeParentsInline(admin.TabularInline):
class ExerciseTypeAdmin(admin.ModelAdmin):
list_display = ('exercise_type_id', 'name_colored', 'active', 'base')
- search_fields = ['name']
+ search_fields = ['name', 'exercisetypetranslation__name']
fields = ('name', 'description', 'unit', 'unit_quantity', 'unit_quantity_unit', 'active', 'base')
def name_colored(self, obj):
@@ -142,11 +145,53 @@ class ExerciseTypeAdmin(admin.ModelAdmin):
'''
- ExercisePlan
+ ExercisePlan + Template
------------
'''
+class TranslationPlanTemplateInline(admin.TabularInline):
+ model = ExercisePlanTemplateTranslation
+ fields = ('language_code', 'name', 'description')
+ extra = 0
+
+
+class TranslationPlanTemplateDetailInline(admin.TabularInline):
+ model = ExercisePlanTemplateDetail
+ fields = ('exercise_type',)
+ extra = 0
+
+
+class ExercisePlanTemplateAdmin(admin.ModelAdmin):
+ list_display = ('name_colored', 'template_type')
+ search_fields = ['name']
+
+ def name_colored(self, obj):
+ color_code = 'C20000'
+ html = '{}˓→'.format(color_code, obj.name)
+ return format_html(html)
+
+ name_colored.admin_order_field = 'name'
+ name_colored.short_description = 'name'
+
+ inlines = [
+ TranslationPlanTemplateInline,
+ TranslationPlanTemplateDetailInline
+ ]
+
+
+class ExercisePlanTemplateDetailAdmin(admin.ModelAdmin):
+ list_display = ('get_plan', 'get_exercise_type', 'quantity', 'quantity_unit_quantity','rest_time',)
+ list_editable = ('serie', 'quantity', 'quantity_unit_quantity','rest_time')
+
+
+ def get_plan(self, obj):
+ return obj.exercise_plan_template.name
+
+ def get_exercise_type(self, obj):
+ return obj.exercise_type.name
+
+
class TranslationPlanInline(admin.TabularInline):
model = ExercisePlanTranslation
fields = ('language_code', 'name', 'description')
@@ -169,7 +214,7 @@ class ExercisePlanAdmin(admin.ModelAdmin):
TranslationPlanInline
]
-
+'''
class ExercisePlanDetailAdmin(admin.ModelAdmin):
list_display = ('get_plan', 'get_exercise_type', 'serie', 'repeats', 'weight_equation',)
list_editable = ('serie', 'repeats', 'weight_equation',)
@@ -181,6 +226,7 @@ class ExercisePlanDetailAdmin(admin.ModelAdmin):
def get_exercise_type(self, obj):
return obj.exercise_type.name
+'''
class ProductAdmin(admin.ModelAdmin):
@@ -221,8 +267,8 @@ class ExerciseDeviceAdmin(admin.ModelAdmin):
admin.site.register(ExerciseType, ExerciseTypeAdmin)
admin.site.register(ExerciseTree, ExerciseTreeAdmin)
+admin.site.register(ExercisePlanTemplate, ExercisePlanTemplateAdmin)
admin.site.register(ExercisePlan, ExercisePlanAdmin)
-admin.site.register(ExercisePlanDetail, ExercisePlanDetailAdmin)
admin.site.register(Product, ProductAdmin)
admin.site.register(ExerciseDevice, ExerciseDeviceAdmin)
admin.autodiscover()
diff --git a/aitrainer_backoffice/aitrainer_backoffice/locale/hu/LC_MESSAGES/django.po b/aitrainer_backoffice/aitrainer_backoffice/locale/hu/LC_MESSAGES/django.po
index 426177c..87acbdf 100644
--- a/aitrainer_backoffice/aitrainer_backoffice/locale/hu/LC_MESSAGES/django.po
+++ b/aitrainer_backoffice/aitrainer_backoffice/locale/hu/LC_MESSAGES/django.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-12-03 18:29+0100\n"
+"POT-Creation-Date: 2021-02-23 14:53+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME \n"
"Language-Team: LANGUAGE \n"
@@ -18,167 +18,191 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: .\aitrainer_backoffice\admin.py:34 .\aitrainer_backoffice\admin.py:114
-#: .\aitrainer_backoffice\admin.py:227
+#: .\aitrainer_backoffice\admin.py:48 .\aitrainer_backoffice\admin.py:94
+#: .\aitrainer_backoffice\admin.py:258
msgid "Image Preview"
msgstr "Kép előnézet"
-#: .\aitrainer_backoffice\models.py:21 .\aitrainer_backoffice\models.py:252
+#: .\aitrainer_backoffice\models.py:27 .\aitrainer_backoffice\models.py:201
msgid "Exercise Device"
msgstr "Edzés eszköz"
-#: .\aitrainer_backoffice\models.py:22 .\aitrainer_backoffice\models.py:253
+#: .\aitrainer_backoffice\models.py:28 .\aitrainer_backoffice\models.py:202
msgid "Exercise Devices"
msgstr "Edzés eszközök"
#: .\aitrainer_backoffice\models.py:42
-msgid "Exercise Tree"
-msgstr "Gyakorlat Menü"
-
-#: .\aitrainer_backoffice\models.py:43
-msgid "Exercise Tree Items"
-msgstr "Gyakorlat Menü elemek"
-
-#: .\aitrainer_backoffice\models.py:76
-msgid "Exercise"
-msgstr "Gyakorlat"
-
-#: .\aitrainer_backoffice\models.py:77
-msgid "Exercises"
-msgstr "Gyakorlatok"
-
-#: .\aitrainer_backoffice\models.py:97
-msgid "Image"
-msgstr "Kép"
-
-#: .\aitrainer_backoffice\models.py:98
-msgid "Images"
-msgstr "Képek"
-
-#: .\aitrainer_backoffice\models.py:113 .\aitrainer_backoffice\models.py:128
-#: .\aitrainer_backoffice\models.py:159 .\aitrainer_backoffice\models.py:238
-#: .\aitrainer_backoffice\models.py:264
-msgid "Translation"
-msgstr "Fordítás"
-
-#: .\aitrainer_backoffice\models.py:114 .\aitrainer_backoffice\models.py:129
-#: .\aitrainer_backoffice\models.py:160 .\aitrainer_backoffice\models.py:239
-#: .\aitrainer_backoffice\models.py:265
-msgid "Translations"
-msgstr "Fordítások"
-
-#: .\aitrainer_backoffice\models.py:143
-msgid "Exercise Plan"
-msgstr "Edzésterv"
-
-#: .\aitrainer_backoffice\models.py:144
-msgid "Exercise Plans"
-msgstr "Edzéstervek"
-
-#: .\aitrainer_backoffice\models.py:176
-msgid "Exercise Plan Detail"
-msgstr "Edzésterv gyakorlat"
-
-#: .\aitrainer_backoffice\models.py:177
-msgid "Exercise Plan Details"
-msgstr "Edzésterv gyakorlatok"
-
-#: .\aitrainer_backoffice\models.py:195
-msgid "Product"
-msgstr "Termék"
-
-#: .\aitrainer_backoffice\models.py:196
-msgid "Products"
-msgstr "Termékek"
-
-#: .\aitrainer_backoffice\models.py:212
-msgid "Purchase"
-msgstr "Vásárlás"
-
-#: .\aitrainer_backoffice\models.py:213
-msgid "Purchases"
-msgstr "Vásárlások"
-
-#: .\aitrainer_backoffice\models.py:223
-msgid "Customer Property"
-msgstr "Ügyfél tulajdonság"
-
-#: .\aitrainer_backoffice\models.py:224
-msgid "Customer Properties"
-msgstr "Ügyfél tulajdonságok"
-
-#: .\aitrainer_backoffice\models.py:274
#, fuzzy
#| msgid "Exercise Tree Parent"
msgid "exercise_device_parent"
msgstr "Gyakorlat Eszköz szülő"
-#: .\aitrainer_backoffice\models.py:276
+#: .\aitrainer_backoffice\models.py:44
#, fuzzy
#| msgid "Exercise Tree"
msgid "exercise_device_child"
msgstr "Gyakorlat eszköz"
-#: .\aitrainer_backoffice\models.py:280
+#: .\aitrainer_backoffice\models.py:48
msgid "Device Alternative"
msgstr "Eszköz alternatíva"
-#: .\aitrainer_backoffice\models.py:281
+#: .\aitrainer_backoffice\models.py:49
msgid "Device Alternatives"
msgstr "Eszköz alternatívák"
-#: .\aitrainer_backoffice\models.py:288
-#, fuzzy
-#| msgid "Exercise Tree Parent"
-msgid "exercise_type_parent"
-msgstr "Gyakorlat szülő"
+#: .\aitrainer_backoffice\models.py:61 .\aitrainer_backoffice\models.py:98
+#: .\aitrainer_backoffice\models.py:187 .\aitrainer_backoffice\models.py:261
+#: .\aitrainer_backoffice\models.py:307 .\aitrainer_backoffice\models.py:390
+msgid "Translation"
+msgstr "Fordítás"
-#: .\aitrainer_backoffice\models.py:290
-#, fuzzy
-#| msgid "Exercise Tree"
-msgid "exercise_type_child"
-msgstr "Aktuális gyakorlat"
+#: .\aitrainer_backoffice\models.py:62 .\aitrainer_backoffice\models.py:99
+#: .\aitrainer_backoffice\models.py:188 .\aitrainer_backoffice\models.py:262
+#: .\aitrainer_backoffice\models.py:308 .\aitrainer_backoffice\models.py:391
+msgid "Translations"
+msgstr "Fordítások"
-#: .\aitrainer_backoffice\models.py:294
-msgid "Exercise Alternative"
-msgstr "Gyakorlat alternatíva"
+#: .\aitrainer_backoffice\models.py:83
+msgid "Exercise Tree"
+msgstr "Gyakorlat Menü"
-#: .\aitrainer_backoffice\models.py:295
-msgid "Exercise Alternatives"
-msgstr "Gyakorlat alternatívák"
+#: .\aitrainer_backoffice\models.py:84
+msgid "Exercise Tree Items"
+msgstr "Gyakorlat Menü elemek"
-#: .\aitrainer_backoffice\models.py:306
-msgid "Exercise Parent"
-msgstr "Gyakorlat szülő"
-
-#: .\aitrainer_backoffice\models.py:307
-msgid "Exercise Parents"
-msgstr "Gyakorlat szülők"
-
-#: .\aitrainer_backoffice\models.py:313
+#: .\aitrainer_backoffice\models.py:108
#, fuzzy
#| msgid "Exercise Tree Parent"
msgid "exercise_tree_parent"
msgstr "Gyakorlat Menü szülő"
-#: .\aitrainer_backoffice\models.py:313
+#: .\aitrainer_backoffice\models.py:108
msgid "Parent menu"
msgstr "Szülő menüpont"
-#: .\aitrainer_backoffice\models.py:314
+#: .\aitrainer_backoffice\models.py:110
#, fuzzy
#| msgid "Exercise Tree"
msgid "exercise_tree_child"
msgstr "Aktuális Gyakorlat Menü"
-#: .\aitrainer_backoffice\models.py:314
+#: .\aitrainer_backoffice\models.py:110
msgid "Actual menu"
msgstr "Aktuális menüpont"
-#: .\aitrainer_backoffice\models.py:318
+#: .\aitrainer_backoffice\models.py:114
msgid "Exercise Tree Parent"
msgstr "Gyakorlat Menü szülő"
-#: .\aitrainer_backoffice\models.py:319
+#: .\aitrainer_backoffice\models.py:115
msgid "Exercise Tree Parents"
msgstr "Gyakorlat Menü szülők"
+
+#: .\aitrainer_backoffice\models.py:150
+msgid "Exercise"
+msgstr "Gyakorlat"
+
+#: .\aitrainer_backoffice\models.py:151
+msgid "Exercises"
+msgstr "Gyakorlatok"
+
+#: .\aitrainer_backoffice\models.py:171
+msgid "Image"
+msgstr "Kép"
+
+#: .\aitrainer_backoffice\models.py:172
+msgid "Images"
+msgstr "Képek"
+
+#: .\aitrainer_backoffice\models.py:208
+#, fuzzy
+#| msgid "Exercise Tree Parent"
+msgid "exercise_type_parent"
+msgstr "Gyakorlat szülő"
+
+#: .\aitrainer_backoffice\models.py:210
+#, fuzzy
+#| msgid "Exercise Tree"
+msgid "exercise_type_child"
+msgstr "Aktuális gyakorlat"
+
+#: .\aitrainer_backoffice\models.py:214
+msgid "Exercise Alternative"
+msgstr "Gyakorlat alternatíva"
+
+#: .\aitrainer_backoffice\models.py:215
+msgid "Exercise Alternatives"
+msgstr "Gyakorlat alternatívák"
+
+#: .\aitrainer_backoffice\models.py:226
+msgid "Exercise Parent"
+msgstr "Gyakorlat szülő"
+
+#: .\aitrainer_backoffice\models.py:227
+msgid "Exercise Parents"
+msgstr "Gyakorlat szülők"
+
+#: .\aitrainer_backoffice\models.py:245
+#, fuzzy
+#| msgid "Exercise Plan Detail"
+msgid "Exercise Plan Template"
+msgstr "Edzésterv sablon"
+
+#: .\aitrainer_backoffice\models.py:246
+#, fuzzy
+#| msgid "Exercise Plan Details"
+msgid "Exercise Plan Templates"
+msgstr "Edzésterv sablonok"
+
+#: .\aitrainer_backoffice\models.py:279
+#, fuzzy
+#| msgid "Exercise Plan Detail"
+msgid "Exercise Plan Template Detail"
+msgstr "Edzésterv sablon gyakorlat"
+
+#: .\aitrainer_backoffice\models.py:280
+#, fuzzy
+#| msgid "Exercise Plan Details"
+msgid "Exercise Plan Template Details"
+msgstr "Edzésterv sablon gyakorlatok"
+
+#: .\aitrainer_backoffice\models.py:291
+msgid "Exercise Plan"
+msgstr "Edzésterv"
+
+#: .\aitrainer_backoffice\models.py:292
+msgid "Exercise Plans"
+msgstr "Edzéstervek"
+
+#: .\aitrainer_backoffice\models.py:324
+msgid "Exercise Plan Detail"
+msgstr "Edzésterv gyakorlat"
+
+#: .\aitrainer_backoffice\models.py:325
+msgid "Exercise Plan Details"
+msgstr "Edzésterv gyakorlatok"
+
+#: .\aitrainer_backoffice\models.py:347
+msgid "Product"
+msgstr "Termék"
+
+#: .\aitrainer_backoffice\models.py:348
+msgid "Products"
+msgstr "Termékek"
+
+#: .\aitrainer_backoffice\models.py:364
+msgid "Purchase"
+msgstr "Vásárlás"
+
+#: .\aitrainer_backoffice\models.py:365
+msgid "Purchases"
+msgstr "Vásárlások"
+
+#: .\aitrainer_backoffice\models.py:375
+msgid "Customer Property"
+msgstr "Ügyfél tulajdonság"
+
+#: .\aitrainer_backoffice\models.py:376
+msgid "Customer Properties"
+msgstr "Ügyfél tulajdonságok"
diff --git a/aitrainer_backoffice/aitrainer_backoffice/models.py b/aitrainer_backoffice/aitrainer_backoffice/models.py
index 012e6e3..0e3c657 100644
--- a/aitrainer_backoffice/aitrainer_backoffice/models.py
+++ b/aitrainer_backoffice/aitrainer_backoffice/models.py
@@ -228,6 +228,58 @@ class ExerciseTypeParents(models.Model):
unique_together = [['exercise_type', 'exercise_tree']]
+class TemplateTypes(models.TextChoices):
+ MINI_SET = "mini_test_set"
+ SPECIAL = "special"
+
+
+class ExercisePlanTemplate(models.Model):
+ exercise_plan_template_id = models.AutoField(primary_key=True)
+ name = models.CharField(max_length=100, help_text='The name should be in English here')
+ description = models.TextField(max_length=1000, blank=True, null=True, help_text='The description should be in '
+ 'English here')
+ template_type = models.CharField(max_length=20, choices=TemplateTypes.choices, default=TemplateTypes.SPECIAL)
+
+ class Meta:
+ db_table = 'exercise_plan_template'
+ verbose_name = _("Exercise Plan Template")
+ verbose_name_plural = _("Exercise Plan Templates")
+
+ def __str__(self):
+ return self.name
+
+
+class ExercisePlanTemplateTranslation(models.Model):
+ translation_id = models.AutoField(primary_key=True)
+ exercise_plan_template = models.ForeignKey(ExercisePlanTemplate, on_delete=models.CASCADE)
+ language_code = models.CharField(max_length=2, choices=LanguageTypes.choices, default=LanguageTypes.HU)
+ name = models.CharField(max_length=100)
+ description = models.TextField(max_length=1000, blank=True, null=True)
+
+ class Meta:
+ db_table = 'exercise_plan_template_translation'
+ verbose_name = _("Translation")
+ verbose_name_plural = _("Translations")
+
+ def __str__(self):
+ return self.name
+
+
+class ExercisePlanTemplateDetail(models.Model):
+ exercise_plan_template_detail_id = models.AutoField(primary_key=True)
+ exercise_plan_template = models.ForeignKey(ExercisePlanTemplate, on_delete=models.CASCADE)
+ exercise_type = models.ForeignKey(ExerciseType, on_delete=models.CASCADE)
+ serie = models.IntegerField()
+ quantity = models.FloatField()
+ quantity_unit_quantity = models.FloatField()
+ resting_time = models.TimeField()
+
+ class Meta:
+ db_table = 'exercise_plan_template_detail'
+ verbose_name = _("Exercise Plan Template Detail")
+ verbose_name_plural = _("Exercise Plan Template Details")
+
+
class ExercisePlan(models.Model):
exercise_plan_id = models.AutoField(primary_key=True)
name = models.CharField(max_length=100, help_text='The name should be in English here')
diff --git a/aitrainer_backoffice/aitrainer_backoffice/urls.py b/aitrainer_backoffice/aitrainer_backoffice/urls.py
index 9f8cbd1..e5f0a3c 100644
--- a/aitrainer_backoffice/aitrainer_backoffice/urls.py
+++ b/aitrainer_backoffice/aitrainer_backoffice/urls.py
@@ -27,3 +27,4 @@ urlpatterns = [
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
+admin.site.site_header = 'WorkoutTest Admin'
\ No newline at end of file
diff --git a/aitrainer_backoffice/translate.bat b/aitrainer_backoffice/translate.bat
index c018a6f..3814d47 100644
--- a/aitrainer_backoffice/translate.bat
+++ b/aitrainer_backoffice/translate.bat
@@ -1,3 +1,2 @@
django-admin makemessages -l hu --ignore venv --pythonpath "D:\projects\aitrainer\src\aitrainer_backoffice" --settings aitrainer_backoffice.aitrainer_backoffice.settings.dev
-## compilemessages
\ No newline at end of file
diff --git a/aitrainer_backoffice/translate_compile.bat b/aitrainer_backoffice/translate_compile.bat
new file mode 100644
index 0000000..26a7027
--- /dev/null
+++ b/aitrainer_backoffice/translate_compile.bat
@@ -0,0 +1,2 @@
+django-admin compilemessages -l hu --pythonpath "D:\projects\aitrainer\src\aitrainer_backoffice" --settings aitrainer_backoffice.aitrainer_backoffice.settings.dev
+