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 +