diff --git a/aitrainer_backoffice/aitrainer_backoffice/admin.py b/aitrainer_backoffice/aitrainer_backoffice/admin.py index 5b935d6..8e30445 100644 --- a/aitrainer_backoffice/aitrainer_backoffice/admin.py +++ b/aitrainer_backoffice/aitrainer_backoffice/admin.py @@ -12,6 +12,65 @@ from .models import ExercisePlanTranslation from .models import ExercisePlanDetail from .models import ExercisePlan +''' + ExerciseTree + ------------ +''' + + +class TranslationTreeInline(admin.TabularInline): + model = ExerciseTreeTranslation + fields = ('language_code', 'name',) + extra = 0 + + +class ExerciseTreeParentsInline(admin.TabularInline): + model = ExerciseTreeParents + fk_name = 'exercise_tree_child' + fields = ('exercise_tree_parent',) + extra = 0 + + +class ExerciseTreeAdmin(admin.ModelAdmin): + list_display = ('tree_id', 'name_colored', 'active') + search_fields = ['name'] + + fields = ["name", "image_url", "active", "get_image_preview"] + readonly_fields = ("get_image_preview",) + + def get_image_preview(self, obj): + image_url = '/media/' + str(obj.image_url) + if obj.pk: + return format_html(' ' + .format(url=image_url)) + + get_image_preview.short_description = _("Image Preview") + + def name_colored(self, obj): + if obj.active: + if obj.image_url != "": + color_code = '7bc863' + else: + color_code = 'f2cdb3' + else: + 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 = [ + TranslationTreeInline, + ExerciseTreeParentsInline + ] + + +''' + ExerciseTYPE + ------------ +''' + class ExerciseTypeDeviceInline(admin.StackedInline): model = ExerciseTypeDevice @@ -82,57 +141,15 @@ class ExerciseTypeAdmin(admin.ModelAdmin): exclude = ('exercise_tree',) -class TranslationTreeInline(admin.TabularInline): - model = ExerciseTreeTranslation - fields = ('language_code', 'name',) - extra = 0 - - -class ExerciseTreeParentsInline(admin.TabularInline): - model = ExerciseTreeParents - fk_name = 'exercise_tree_child' - fields = ('exercise_tree_parent',) - extra = 0 - - -class ExerciseTreeAdmin(admin.ModelAdmin): - list_display = ('tree_id', 'name_colored', 'active') - search_fields = ['name'] - - fields = ["name", "parent_id", "image_url", "active", "get_image_preview"] - readonly_fields = ("get_image_preview",) - - def get_image_preview(self, obj): - image_url = '/media/' + str(obj.image_url) - if obj.pk: - return format_html(' ' - .format(url=image_url)) - - get_image_preview.short_description = _("Image Preview") - - def name_colored(self, obj): - if obj.active: - if obj.image_url != "": - color_code = '7bc863' - else: - color_code = 'f2cdb3' - else: - 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 = [ - TranslationTreeInline, - ExerciseTreeParentsInline - ] +''' + ExercisePlan + ------------ +''' class TranslationPlanInline(admin.TabularInline): model = ExercisePlanTranslation - fields = ('language_code', 'name','description') + fields = ('language_code', 'name', 'description') extra = 0 @@ -154,9 +171,10 @@ class ExercisePlanAdmin(admin.ModelAdmin): class ExercisePlanDetailAdmin(admin.ModelAdmin): - list_display = ( 'get_plan', 'get_exercise_type', 'serie', 'repeats', 'weight_equation',) + list_display = ('get_plan', 'get_exercise_type', 'serie', 'repeats', 'weight_equation',) list_editable = ('serie', 'repeats', 'weight_equation',) - #list_editable_link('',) + + # list_editable_link('',) def get_plan(self, obj): return obj.exercise_plan.name @@ -167,7 +185,9 @@ class ExercisePlanDetailAdmin(admin.ModelAdmin): class ProductAdmin(admin.ModelAdmin): list_display = ('product_id', 'name', 'type') - # Product.objects.all().aggregate(Sum('price')) + + +# Product.objects.all().aggregate(Sum('price')) class PurchaseAdmin(admin.ModelAdmin): @@ -238,4 +258,3 @@ admin.site.register(Purchase, PurchaseAdmin) admin.site.register(Property, PropertyAdmin) admin.site.register(ExerciseDevice, ExerciseDeviceAdmin) admin.autodiscover() - diff --git a/aitrainer_backoffice/aitrainer_backoffice/models.py b/aitrainer_backoffice/aitrainer_backoffice/models.py index 4613488..4955d71 100644 --- a/aitrainer_backoffice/aitrainer_backoffice/models.py +++ b/aitrainer_backoffice/aitrainer_backoffice/models.py @@ -8,6 +8,12 @@ class LanguageTypes(models.TextChoices): HU = "hu" +''' + ExerciseDevice + ------------ +''' + + class ExerciseDevice(models.Model): exercise_device_id = models.AutoField(primary_key=True) name = models.CharField(max_length=100) @@ -30,9 +36,44 @@ class ExerciseDevice(models.Model): 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 ExerciseDeviceTranslation(models.Model): + translation_id = models.AutoField(primary_key=True) + exercise_device = models.ForeignKey(ExerciseDevice, on_delete=models.CASCADE) + name = models.CharField(max_length=100) + language_code = models.CharField(max_length=2, choices=LanguageTypes.choices, default=LanguageTypes.HU) + + class Meta: + db_table = 'exercise_device_translation' + verbose_name = _("Translation") + verbose_name_plural = _("Translations") + + def __str__(self): + return self.name + + +''' + ------------ + ExerciseTree + ------------ +''' + + class ExerciseTree(models.Model): tree_id = models.AutoField(primary_key=True) - parent_id = models.IntegerField(help_text='This is the parent menu ID. 0 if it is on the top of the tree') name = models.CharField(max_length=100, help_text='The name should be in English here') image_url = models.ImageField(upload_to='images/', help_text='The menu image size is 1366x768') active = models.BooleanField(default=0, blank=True, null=True) @@ -46,6 +87,41 @@ class ExerciseTree(models.Model): return self.name +class ExerciseTreeTranslation(models.Model): + translation_id = models.AutoField(primary_key=True) + tree = models.ForeignKey(ExerciseTree, on_delete=models.CASCADE) + language_code = models.CharField(max_length=2, choices=LanguageTypes.choices, default=LanguageTypes.HU) + name = models.CharField(max_length=100) + + class Meta: + db_table = 'exercise_tree_translation' + verbose_name = _("Translation") + verbose_name_plural = _("Translations") + + def __str__(self): + return self.name + + +class ExerciseTreeParents(models.Model): + exercise_tree_parents_id = models.AutoField(primary_key=True) + exercise_tree_parent = models.ForeignKey(ExerciseTree, on_delete=models.CASCADE, + related_name=_('exercise_tree_parent'), help_text=_('Parent menu'), blank=True) + exercise_tree_child = models.ForeignKey(ExerciseTree, on_delete=models.CASCADE, + related_name=_('exercise_tree_child'), help_text=_('Actual menu')) + + class Meta: + db_table = 'exercise_tree_parents' + verbose_name = _("Exercise Tree Parent") + verbose_name_plural = _("Exercise Tree Parents") + unique_together = [['exercise_tree_parent', 'exercise_tree_child']] + + +''' + ExerciseTYPE + ------------ +''' + + class ExerciseType(models.Model): class UnitTypes(models.TextChoices): REPEAT = 'repeat' @@ -58,7 +134,6 @@ class ExerciseType(models.Model): KG = 'kilogram' exercise_type_id = models.AutoField(primary_key=True) -# tree = models.ForeignKey(ExerciseTree, on_delete=models.CASCADE) 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') @@ -70,7 +145,6 @@ class ExerciseType(models.Model): base = models.BooleanField(default=0, blank=True, null=True) parents = models.ManyToManyField(ExerciseTree, through='ExerciseTypeParents', related_name='ExerciseTree') - class Meta: db_table = 'exercise_type' verbose_name = _("Exercise") @@ -117,19 +191,41 @@ class ExerciseTypeTranslation(models.Model): return self.name -class ExerciseTreeTranslation(models.Model): - translation_id = models.AutoField(primary_key=True) - tree = models.ForeignKey(ExerciseTree, on_delete=models.CASCADE) - language_code = models.CharField(max_length=2, choices=LanguageTypes.choices, default=LanguageTypes.HU) - name = models.CharField(max_length=100) +class ExerciseTypeDevice(models.Model): + exercise_type_device_id = models.AutoField(primary_key=True) + exercise_type = models.ForeignKey(ExerciseType, on_delete=models.CASCADE) + exercise_device = models.ForeignKey(ExerciseDevice, on_delete=models.CASCADE) class Meta: - db_table = 'exercise_tree_translation' - verbose_name = _("Translation") - verbose_name_plural = _("Translations") + db_table = 'exercise_type_device' + verbose_name = _("Exercise Device") + verbose_name_plural = _("Exercise Devices") - def __str__(self): - return self.name + +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']] class ExercisePlan(models.Model): @@ -240,81 +336,3 @@ class PropertyTranslation(models.Model): def __str__(self): return self.property_name - - -class ExerciseTypeDevice(models.Model): - exercise_type_device_id = models.AutoField(primary_key=True) - exercise_type = models.ForeignKey(ExerciseType, on_delete=models.CASCADE) - exercise_device = models.ForeignKey(ExerciseDevice, on_delete=models.CASCADE) - - class Meta: - db_table = 'exercise_type_device' - verbose_name = _("Exercise Device") - verbose_name_plural = _("Exercise Devices") - - -class ExerciseDeviceTranslation(models.Model): - translation_id = models.AutoField(primary_key=True) - exercise_device = models.ForeignKey(ExerciseDevice, on_delete=models.CASCADE) - name = models.CharField(max_length=100) - language_code = models.CharField(max_length=2, choices=LanguageTypes.choices, default=LanguageTypes.HU) - - class Meta: - db_table = 'exercise_device_translation' - verbose_name = _("Translation") - verbose_name_plural = _("Translations") - - 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']] - - -class ExerciseTreeParents(models.Model): - exercise_tree_parents_id = models.AutoField(primary_key=True) - exercise_tree_parent = models.ForeignKey(ExerciseTree, on_delete=models.CASCADE, related_name=_('exercise_tree_parent'), help_text=_('Parent menu')) - exercise_tree_child = models.ForeignKey(ExerciseTree, on_delete=models.CASCADE, related_name=_('exercise_tree_child'), help_text=_('Actual menu')) - - class Meta: - db_table = 'exercise_tree_parents' - verbose_name = _("Exercise Tree Parent") - verbose_name_plural = _("Exercise Tree Parents") - unique_together= [['exercise_tree_parent', 'exercise_tree_child']] \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index 7262caa..d60b218 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,4 @@ -django==3.1.4 +django==3.1.5 asgiref==3.2.10 certifi==2020.6.20 chardet==3.0.4