diff --git a/aitrainer_backoffice/aitrainer_backoffice/admin.py b/aitrainer_backoffice/aitrainer_backoffice/admin.py index 3e5c69d..63a55a0 100644 --- a/aitrainer_backoffice/aitrainer_backoffice/admin.py +++ b/aitrainer_backoffice/aitrainer_backoffice/admin.py @@ -1,8 +1,9 @@ from django.contrib import admin from django.utils.html import format_html from django.utils.translation import ugettext_lazy as _ -from .models import ExerciseType, Product, Purchase, Property, PropertyTranslation -from .models import ExerciseDevice, ExerciseDeviceTranslation, ExerciseTypeDevice +from .models import ExerciseType, ExerciseTypeAlternative, ExerciseTypeParents +from .models import Product, Purchase, Property, PropertyTranslation +from .models import ExerciseDevice, ExerciseDeviceTranslation, ExerciseTypeDevice, ExerciseDeviceAlternative from .models import ExerciseTypeImage from .models import ExerciseTypeTranslation from .models import ExerciseTreeTranslation @@ -60,8 +61,9 @@ class ExerciseTypeAdmin(admin.ModelAdmin): inlines = [ ImageInline, TranslationInline, - ExerciseTypeDeviceInline + ExerciseTypeDeviceInline, ] + exclude = ('exercise_tree',) class TranslationTreeInline(admin.TabularInline): @@ -128,8 +130,8 @@ class ExercisePlanAdmin(admin.ModelAdmin): class ExercisePlanDetailAdmin(admin.ModelAdmin): - list_display = ( 'get_plan', 'get_exercise_type', 'serie', 'repeat', 'weight_equation',) - list_editable = ('serie', 'repeat', 'weight_equation',) + list_display = ( 'get_plan', 'get_exercise_type', 'serie', 'repeats', 'weight_equation',) + list_editable = ('serie', 'repeats', 'weight_equation',) #list_editable_link('',) def get_plan(self, obj): @@ -176,6 +178,10 @@ class TranslationExerciseDeviceInline(admin.TabularInline): fields = ('language_code', 'name') extra = 0 + def __init__(self, parent_model, admin_site): + super().__init__(parent_model, admin_site) + self.short_description = _("Nyelvi kód") + class ExerciseDeviceAdmin(admin.ModelAdmin): list_display = ('exercise_device_id', 'name') @@ -191,10 +197,22 @@ class ExerciseDeviceAdmin(admin.ModelAdmin): get_image_preview.short_description = _("Image Preview") inlines = [ - TranslationExerciseDeviceInline + TranslationExerciseDeviceInline, ] +class ExerciseDeviceAlternativeAdmin(admin.ModelAdmin): + list_display = ('exercise_device_alternative_id', 'exercise_device_parent') + + +class ExerciseTypeAlternativeAdmin(admin.ModelAdmin): + list_display = ('exercise_type_alternative_id',) + + +class ExerciseTypeParentsAdmin(admin.ModelAdmin): + list_display = ('exercise_type_parents_id', 'exercise_type') + + admin.site.register(ExerciseType, ExerciseTypeAdmin) admin.site.register(ExerciseTree, ExerciseTreeAdmin) admin.site.register(ExercisePlan, ExercisePlanAdmin) @@ -203,5 +221,8 @@ admin.site.register(Product, ProductAdmin) admin.site.register(Purchase, PurchaseAdmin) admin.site.register(Property, PropertyAdmin) admin.site.register(ExerciseDevice, ExerciseDeviceAdmin) +admin.site.register(ExerciseDeviceAlternative, ExerciseDeviceAlternativeAdmin) +admin.site.register(ExerciseTypeAlternative, ExerciseTypeAlternativeAdmin) +admin.site.register(ExerciseTypeParents, ExerciseTypeParentsAdmin) admin.autodiscover() diff --git a/aitrainer_backoffice/aitrainer_backoffice/locale/hu/LC_MESSAGES/django.mo b/aitrainer_backoffice/aitrainer_backoffice/locale/hu/LC_MESSAGES/django.mo new file mode 100644 index 0000000..565a78e Binary files /dev/null and b/aitrainer_backoffice/aitrainer_backoffice/locale/hu/LC_MESSAGES/django.mo differ diff --git a/aitrainer_backoffice/aitrainer_backoffice/locale/hu/LC_MESSAGES/django.po b/aitrainer_backoffice/aitrainer_backoffice/locale/hu/LC_MESSAGES/django.po new file mode 100644 index 0000000..8942dd4 --- /dev/null +++ b/aitrainer_backoffice/aitrainer_backoffice/locale/hu/LC_MESSAGES/django.po @@ -0,0 +1,132 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-12-03 14:42+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: .\aitrainer_backoffice\admin.py:34 .\aitrainer_backoffice\admin.py:88 +#: .\aitrainer_backoffice\admin.py:194 +msgid "Image Preview" +msgstr "Kép előnézet" + +#: .\aitrainer_backoffice\models.py:21 .\aitrainer_backoffice\models.py:252 +msgid "Exercise Device" +msgstr "Edzés eszköz" + +#: .\aitrainer_backoffice\models.py:22 .\aitrainer_backoffice\models.py:253 +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ü elem" + +#: .\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:280 +msgid "Device Alternative" +msgstr "Eszköz alternatíva" + +#: .\aitrainer_backoffice\models.py:281 +msgid "Device Alternatives" +msgstr "Eszköz alternatívák" + +#: .\aitrainer_backoffice\models.py:292 +msgid "Exercise Alternative" +msgstr "Gyakorlat alternatíva" + +#: .\aitrainer_backoffice\models.py:293 +msgid "Exercise Alternatives" +msgstr "Gyakorlat alternatívák" + +#: .\aitrainer_backoffice\models.py:304 +msgid "Exercise Parent" +msgstr "Gyakorlat szülő menüpont" + +#: .\aitrainer_backoffice\models.py:305 +msgid "Exercise Parents" +msgstr "Gyakorlat szülő menüpontok" diff --git a/aitrainer_backoffice/aitrainer_backoffice/models.py b/aitrainer_backoffice/aitrainer_backoffice/models.py index 5fde858..8aa1b54 100644 --- a/aitrainer_backoffice/aitrainer_backoffice/models.py +++ b/aitrainer_backoffice/aitrainer_backoffice/models.py @@ -68,6 +68,8 @@ class ExerciseType(models.Model): null=True) active = models.BooleanField(default=0, blank=True, null=True) base = models.BooleanField(default=0, blank=True, null=True) + parents = models.ManyToManyField(ExerciseTree, through='ExerciseTypeParents', related_name='ExerciseTree') + class Meta: db_table = 'exercise_type' @@ -166,7 +168,7 @@ class ExercisePlanDetail(models.Model): exercise_plan = models.ForeignKey(ExercisePlan, on_delete=models.CASCADE) exercise_type = models.ForeignKey(ExerciseType, on_delete=models.CASCADE) serie = models.IntegerField() - repeat = models.IntegerField() + repeats = models.IntegerField() weight_equation = models.CharField(max_length=100) class Meta: @@ -264,3 +266,41 @@ class ExerciseDeviceTranslation(models.Model): def __str__(self): return self.name + + +class ExerciseDeviceAlternative(models.Model): + exercise_device_alternative_id = models.AutoField(primary_key=True) + exercise_device_parent = models.ForeignKey(ExerciseDevice, on_delete=models.CASCADE, + related_name='exercise_device_parent') + exercise_device_child = models.ForeignKey(ExerciseDevice, on_delete=models.CASCADE, + related_name='exercise_device_child') + + class Meta: + db_table = 'exercise_device_alternative' + verbose_name = _("Device Alternative") + verbose_name_plural = _("Device Alternatives") + unique_together = ['exercise_device_parent', 'exercise_device_child'] + + +class ExerciseTypeAlternative(models.Model): + exercise_type_alternative_id = models.AutoField(primary_key=True) + exercise_type_parent = models.ForeignKey(ExerciseType, on_delete=models.CASCADE, related_name='exercise_type_parent') + exercise_type_child = models.ForeignKey(ExerciseType, on_delete=models.CASCADE, related_name='exercise_type_child') + + class Meta: + db_table = 'exercise_type_alternative' + verbose_name = _("Exercise Alternative") + verbose_name_plural = _("Exercise Alternatives") + #unique_together = [['exercise_type_parent', 'exercise_type_child']] + + +class ExerciseTypeParents(models.Model): + exercise_type_parents_id = models.AutoField(primary_key=True) + exercise_type = models.ForeignKey(ExerciseType, on_delete=models.CASCADE) + exercise_tree = models.ForeignKey(ExerciseTree, on_delete=models.CASCADE) + + class Meta: + db_table = 'exercise_type_parents' + verbose_name = _("Exercise Parent") + verbose_name_plural = _("Exercise Parents") + unique_together= [['exercise_type', 'exercise_tree']] \ No newline at end of file diff --git a/aitrainer_backoffice/aitrainer_backoffice/settings/dev.py b/aitrainer_backoffice/aitrainer_backoffice/settings/dev.py index 924cb62..3c587b5 100644 --- a/aitrainer_backoffice/aitrainer_backoffice/settings/dev.py +++ b/aitrainer_backoffice/aitrainer_backoffice/settings/dev.py @@ -14,9 +14,11 @@ import os # Build paths inside the project like this: os.path.join(BASE_DIR, ...) BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +#BASE_DIR = Path(__file__).resolve().parent.parent.parent LOCALE_PATHS = [ - 'D:\\projects\\aitrainer\\src\\aitrainer_backoffice\\aitrainer_backoffice\\locale' + 'D:\\projects\\aitrainer\\src\\aitrainer_backoffice\\aitrainer_backoffice\\locale', + os.path.join(BASE_DIR, 'locale') ] # Quick-start development settings - unsuitable for production @@ -107,7 +109,7 @@ AUTH_PASSWORD_VALIDATORS = [ # Internationalization # https://docs.djangoproject.com/en/3.0/topics/i18n/ -LANGUAGE_CODE = 'hu-HU' +LANGUAGE_CODE = 'hu' TIME_ZONE = 'Europe/Budapest' diff --git a/aitrainer_backoffice/aitrainer_backoffice/settings/prod.py b/aitrainer_backoffice/aitrainer_backoffice/settings/prod.py index 9afa692..7044e6a 100644 --- a/aitrainer_backoffice/aitrainer_backoffice/settings/prod.py +++ b/aitrainer_backoffice/aitrainer_backoffice/settings/prod.py @@ -15,6 +15,8 @@ import os # Build paths inside the project like this: os.path.join(BASE_DIR, ...) BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +LOCALE_PATHS = [os.path.join(BASE_DIR, 'locale')] + # Quick-start development settings - unsuitable for production # See https://docs.djangoproject.com/en/3.0/howto/deployment/checklist/ diff --git a/aitrainer_backoffice/shell.bat b/aitrainer_backoffice/shell.bat new file mode 100644 index 0000000..7cc5c69 --- /dev/null +++ b/aitrainer_backoffice/shell.bat @@ -0,0 +1 @@ +python manage.py shell --settings aitrainer_backoffice.settings.dev \ No newline at end of file diff --git a/aitrainer_backoffice/translate.bat b/aitrainer_backoffice/translate.bat new file mode 100644 index 0000000..e20c367 --- /dev/null +++ b/aitrainer_backoffice/translate.bat @@ -0,0 +1 @@ +django-admin makemessages -l hu --ignore venv --pythonpath "D:\projects\aitrainer\src\aitrainer_backoffice" --settings aitrainer_backoffice.aitrainer_backoffice.settings.dev \ No newline at end of file