workouttest_backoffice/aitrainer_backoffice/aitrainer_backoffice/admin.py
2020-11-06 07:42:30 +01:00

153 lines
4.5 KiB
Python

from django.contrib import admin
from django.db.models import Sum
from django.utils.html import format_html
from django.utils.translation import ugettext_lazy as _
from .models import ExerciseType, Product, Purchase
from .models import ExerciseTypeImage
from .models import ExerciseTypeTranslation
from .models import ExerciseTreeTranslation
from .models import ExerciseTree
from .models import ExercisePlanTranslation
from .models import ExercisePlanDetail
from .models import ExercisePlan
class ImageInline(admin.StackedInline):
model = ExerciseTypeImage
extra = 0
fields = ["name", "url", "type", "get_image_preview"]
readonly_fields = ("get_image_preview",)
def get_image_preview(self, obj):
image_url = '/media/' + str(obj.url)
if obj.pk:
return format_html('<img src="{url}" title="{url}" width="30%" height="30%"/> ' \
.format(url=image_url))
get_image_preview.short_description = _("Image Preview")
class TranslationInline(admin.TabularInline):
model = ExerciseTypeTranslation
fields = ('language_code', 'name', 'description')
extra = 0
class ExerciseTypeAdmin(admin.ModelAdmin):
list_display = ('exercise_type_id', 'tree', 'name_colored', 'active', 'base')
search_fields = ['name']
def name_colored(self, obj):
if obj.active:
if obj.base:
color_code = '7bc863'
else:
color_code = '4178bc'
else:
color_code = 'C20000'
html = '<span style="color: #{};">{}</span>˓→'.format(color_code, obj.name)
return format_html(html)
name_colored.admin_order_field = 'name'
name_colored.short_description = 'name'
inlines = [
ImageInline,
TranslationInline
]
class TranslationTreeInline(admin.TabularInline):
model = ExerciseTreeTranslation
fields = ('language_code', 'name',)
extra = 0
class ExerciseTreeAdmin(admin.ModelAdmin):
list_display = ('tree_id', 'name_colored', 'parent_id', '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('<img src="{url}" title="{url}" width="30%" height="30%"/> ' \
.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 = '<span style="color: #{};">{}</span>˓→'.format(color_code, obj.name)
return format_html(html)
name_colored.admin_order_field = 'name'
name_colored.short_description = 'name'
inlines = [
TranslationTreeInline
]
class TranslationPlanInline(admin.TabularInline):
model = ExercisePlanTranslation
fields = ('language_code', 'name','description')
extra = 0
class ExercisePlanAdmin(admin.ModelAdmin):
list_display = ('name_colored',)
search_fields = ['name']
def name_colored(self, obj):
color_code = 'C20000'
html = '<span style="color: #{};">{}</span>˓→'.format(color_code, obj.name)
return format_html(html)
name_colored.admin_order_field = 'name'
name_colored.short_description = 'name'
inlines = [
TranslationPlanInline
]
class ExercisePlanDetailAdmin(admin.ModelAdmin):
list_display = ( 'get_plan', 'get_exercise_type', 'serie', 'repeat', 'weight_equation',)
list_editable = ('serie', 'repeat', 'weight_equation',)
#list_editable_link('',)
def get_plan(self, obj):
return obj.exercise_plan.name
def get_exercise_type(self, obj):
return obj.exercise_type.name
class ProductAdmin(admin.ModelAdmin):
list_display = ('product_id', 'name', 'type')
# Product.objects.all().aggregate(Sum('price'))
class PurchaseAdmin(admin.ModelAdmin):
list_display = ('purchase_id', 'product', 'customer_id', 'purchase_sum', 'currency', 'date_add')
list_filter = ['product']
admin.site.register(ExerciseType, ExerciseTypeAdmin)
admin.site.register(ExerciseTree, ExerciseTreeAdmin)
admin.site.register(ExercisePlan, ExercisePlanAdmin)
admin.site.register(ExercisePlanDetail, ExercisePlanDetailAdmin)
admin.site.register(Product, ProductAdmin)
admin.site.register(Purchase, PurchaseAdmin)
admin.autodiscover()