From fa6cd89fe265afc4df8fe897ac8da074b2973df7 Mon Sep 17 00:00:00 2001 From: Bossanyi Tibor Date: Sat, 3 Apr 2021 14:36:31 +0200 Subject: [PATCH] BO 1.8 Evaluation --- .../aitrainer_backoffice/admin.py | 47 +++-- .../locale/hu/LC_MESSAGES/django.mo | Bin 2022 -> 3147 bytes .../locale/hu/LC_MESSAGES/django.po | 184 ++++++++++-------- .../aitrainer_backoffice/models.py | 73 ++++++- 4 files changed, 205 insertions(+), 99 deletions(-) diff --git a/aitrainer_backoffice/aitrainer_backoffice/admin.py b/aitrainer_backoffice/aitrainer_backoffice/admin.py index e6a4b34..52ad1d3 100644 --- a/aitrainer_backoffice/aitrainer_backoffice/admin.py +++ b/aitrainer_backoffice/aitrainer_backoffice/admin.py @@ -1,13 +1,12 @@ -from abc import ABC - -from django.contrib import admin +from django.contrib import admin, messages from django.utils.html import format_html -from django.utils.translation import ugettext_lazy as _ -#from treenode.admin import TreeNodeModelAdmin -#from treenode.forms import TreeNodeForm +from django.utils.translation import ugettext_lazy as _, ngettext +# from treenode.admin import TreeNodeModelAdmin +# from treenode.forms import TreeNodeForm from .models import ExerciseType, ExerciseTypeAlternative, ExerciseTypeParents from .models import Product +from .models import Evaluation, EvaluationAttribute from .models import ExerciseDevice, ExerciseDeviceTranslation, ExerciseTypeDevice, ExerciseDeviceAlternative from .models import ExerciseTypeImage from .models import ExerciseTypeTranslation @@ -15,7 +14,6 @@ from .models import ExerciseTreeTranslation from .models import ExerciseTree from .models import ExerciseTreeParents from .models import ExercisePlanTranslation -from .models import ExercisePlan from .models import ExercisePlanTemplate, ExercisePlanTemplateTranslation, ExercisePlanTemplateDetail ''' @@ -53,7 +51,7 @@ class ExerciseTreeAdmin(admin.ModelAdmin): list_display = ('tree_id', 'name_colored', 'active') search_fields = ['name'] - fields = ["name", 'description', "image_url", "active", "get_image_preview"] + fields = ["name", 'description', "image_url", "active", "get_image_preview"] readonly_fields = ("get_image_preview",) def get_image_preview(self, obj): @@ -198,9 +196,8 @@ class ExercisePlanTemplateAdmin(admin.ModelAdmin): 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') - + 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 @@ -231,6 +228,7 @@ class ExercisePlanAdmin(admin.ModelAdmin): TranslationPlanInline ] + ''' class ExercisePlanDetailAdmin(admin.ModelAdmin): list_display = ('get_plan', 'get_exercise_type', 'serie', 'repeats', 'weight_equation',) @@ -282,10 +280,35 @@ class ExerciseDeviceAdmin(admin.ModelAdmin): ] +class EvaluationAdmin(admin.ModelAdmin): + list_display = ('evaluation_id', 'name', 'get_exercise_type') + + def get_exercise_type(self, obj): + return obj.exercise_type.name + + +class EvaluationAttributeAdmin(admin.ModelAdmin): + list_display = ( + 'evaluation_attr_id', 'name', 'sex', 'age_min', 'age_max', 'value_min', 'value_max', 'evaluation_text') + list_editable = ('name', 'sex', 'age_min', 'age_max', 'value_min', 'value_max', 'evaluation_text') + list_filter = ('evaluation',) + + def copy_attributes(self, request, queryset): + for objectAttr in queryset: + objectAttr.pk = None + objectAttr.name = objectAttr.name + "_copy" + objectAttr.save() + + copy_attributes.short_description = "Clone the selected attribute" + + actions = [copy_attributes] + + admin.site.register(ExerciseType, ExerciseTypeAdmin) admin.site.register(ExerciseTree, ExerciseTreeAdmin) admin.site.register(ExercisePlanTemplate, ExercisePlanTemplateAdmin) -#admin.site.register(ExercisePlan, ExercisePlanAdmin) admin.site.register(Product, ProductAdmin) admin.site.register(ExerciseDevice, ExerciseDeviceAdmin) +admin.site.register(Evaluation, EvaluationAdmin) +admin.site.register(EvaluationAttribute, EvaluationAttributeAdmin) 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 index 6cc18ccf40cfdc0978016c355a2355627cec8b3d..cfc8bc84abbbeda72ba690a84b2a8ef93367dccd 100644 GIT binary patch literal 3147 zcmZ{kTZkJ~7{^bwT8+2ftkzpkt(Ugz^j<7!SDWt6ZsR7Ku$vYX%Q8*QPN$j7ggIy8 zCL-d4qJl`VMFcG@A`+yCh{cCW!LcAd_~1hYLB$teiYVf%m;X1H&1@16`Q~@dH{W;8 zcR87#)~-CqF!n?4gM77uu}RRr9uJIHS2DH^d<|R!z6Y)aKaTZZf*Gu@f~&z_K(hN2 zyail&17kOVtHJf)M(|E>2Y3fK4w7FbUW<6`gSSEd3P^ruLGtT@8^Fup{oqyb0q`&I zE^ytAjNJ~7faISADgLA2&ET^jOxb+=-Ujhw9Xu%Bm%vrv8z9AfF6McV{67TA?i27< z@C%Uazlr%BNcH&vr2KvZDek{PihCW5DWB~i#rGsg@fBme0itxQ1yT#12dTa<#`@Pm zisQ|g?|?_pv-d&D|5pS}=luiHIqP9e=WYY3E{8#SUjoTq#P44K@ndJ>^?C4atUm+E z?^}@i`eV%BLCSLlf}{A><3ZQ@`2eBTDCejkBUr_Vw1`x>PB z{tQwbuEp>F08zs5CGEQkMo5`$1Q80`43ggn9#q%ILAWp-q;tw3_5B1$epPTISO>}e zWsvrLE7pGiQhhFi6z}&juYqLuFG%sN!RFMb4Itf@dqB!(3kVaoH|CQd+Qha&LVJ+v zdmV)GBHKL>s?}!5qmX3KzBKkjwudvE15*4uAruGolm^w9#={Wm57mIigOG>98UA}9 zV`IKlZbNvy?72h)OcOW!OGmyH0A# zE5=D%3@Fmpm@f#gYDt*IlVxWOQ}%p#6kX3XTBi)kh9?}=GlqRXoFyNRoP+noEWg<{HLAM9X1f=?=`zyPmMj zWhx~W6ccfw=W5}#nya3&?Am~~88vOmSRuo?0cE=>dY%fa{@p@d?B*B^!K7GV(l<>Z z!(@ENQjB7b(uikB1XVdLs!Ge(wBy2)NIc8Sxv{C-q|T4)Gqd^9bY@00T~BF6X<9Yy zh;K@*;%0fKT+(Kc8u@7BxENXfw4R&MiY0A4$B&k>#r()KrD;7=Fr?CwYPw#QPaG>0 z_;jwQ^Fw+umoFU7jgQahv$IdY)G>Y3TB``7k>!Ql^yD#$nQvQv~JIg$^;i$#xP~DSZ7mK(DhW%tqVKo%DyF6!Qx5V7^)p~=3~;OF0#qC zQFlGu@!o8CEK3GyHEpQZI*5XcD1p9ZaIv1+P8XNG z?fzRZapg=kZg@#{;B2?u4sFrvZqmn|Cb^n}-HXyr^trn7v7;qZ6(6SS?VNZ{2i+E% g77g~4(K6^m%ZkYjH`_AknyhFn@L0u)ma{bf4{Z)n$p8QV delta 833 zcmYk)KS-NF7{~EbW7MP?6RYuG^|fp2Bt@5kY3WqKB1NczAo7Z$Mu~4wr-(z^bh_6r!=)*D`LKQliH*3r^9VM7Y zJ-CDqa1Ecc8}CsQpOQU}*Qf$RWLF^$*5OlBo*sYPkM)eFPz!m7+PR$XXN)nw`A#Q< zzflSQq7wc`6;eXk+QMqobq7^QCu)LTRN-Stt;Rz=zksALtEh?Bk)QdTNSC5EA$DpO6>?oq7cauFEc#pOu4CyT?zEsXz7ma3O;Fb z-lSdEc|DwVQ=WM_@1{q_XWjc3?Lctm>!-38MK#F@FSGw)a(q@<_J7Pwr#yRJK4>>8 T_Uv}3!ybeq_GdV5PeO~gY4}&H 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 87acbdf..cf1c008 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: 2021-02-23 14:53+0100\n" +"POT-Creation-Date: 2021-04-03 14:27+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,191 +18,219 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: .\aitrainer_backoffice\admin.py:48 .\aitrainer_backoffice\admin.py:94 -#: .\aitrainer_backoffice\admin.py:258 +#: .\aitrainer_backoffice\admin.py:63 .\aitrainer_backoffice\admin.py:109 +#: .\aitrainer_backoffice\admin.py:275 msgid "Image Preview" msgstr "Kép előnézet" -#: .\aitrainer_backoffice\models.py:27 .\aitrainer_backoffice\models.py:201 +#: .\aitrainer_backoffice\models.py:30 .\aitrainer_backoffice\models.py:211 msgid "Exercise Device" msgstr "Edzés eszköz" -#: .\aitrainer_backoffice\models.py:28 .\aitrainer_backoffice\models.py:202 +#: .\aitrainer_backoffice\models.py:31 .\aitrainer_backoffice\models.py:212 msgid "Exercise Devices" msgstr "Edzés eszközök" -#: .\aitrainer_backoffice\models.py:42 -#, fuzzy -#| msgid "Exercise Tree Parent" +#: .\aitrainer_backoffice\models.py:46 msgid "exercise_device_parent" msgstr "Gyakorlat Eszköz szülő" -#: .\aitrainer_backoffice\models.py:44 -#, fuzzy -#| msgid "Exercise Tree" +#: .\aitrainer_backoffice\models.py:48 msgid "exercise_device_child" msgstr "Gyakorlat eszköz" -#: .\aitrainer_backoffice\models.py:48 +#: .\aitrainer_backoffice\models.py:52 msgid "Device Alternative" msgstr "Eszköz alternatíva" -#: .\aitrainer_backoffice\models.py:49 +#: .\aitrainer_backoffice\models.py:53 msgid "Device Alternatives" msgstr "Eszköz alternatívák" -#: .\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 +#: .\aitrainer_backoffice\models.py:65 .\aitrainer_backoffice\models.py:106 +#: .\aitrainer_backoffice\models.py:197 .\aitrainer_backoffice\models.py:271 +#: .\aitrainer_backoffice\models.py:317 .\aitrainer_backoffice\models.py:400 msgid "Translation" msgstr "Fordítás" -#: .\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 +#: .\aitrainer_backoffice\models.py:66 .\aitrainer_backoffice\models.py:107 +#: .\aitrainer_backoffice\models.py:198 .\aitrainer_backoffice\models.py:272 +#: .\aitrainer_backoffice\models.py:318 .\aitrainer_backoffice\models.py:401 msgid "Translations" msgstr "Fordítások" -#: .\aitrainer_backoffice\models.py:83 +#: .\aitrainer_backoffice\models.py:89 msgid "Exercise Tree" msgstr "Gyakorlat Menü" -#: .\aitrainer_backoffice\models.py:84 +#: .\aitrainer_backoffice\models.py:90 msgid "Exercise Tree Items" msgstr "Gyakorlat Menü elemek" -#: .\aitrainer_backoffice\models.py:108 -#, fuzzy -#| msgid "Exercise Tree Parent" +#: .\aitrainer_backoffice\models.py:117 msgid "exercise_tree_parent" msgstr "Gyakorlat Menü szülő" -#: .\aitrainer_backoffice\models.py:108 +#: .\aitrainer_backoffice\models.py:118 msgid "Parent menu" msgstr "Szülő menüpont" -#: .\aitrainer_backoffice\models.py:110 -#, fuzzy -#| msgid "Exercise Tree" -msgid "exercise_tree_child" -msgstr "Aktuális Gyakorlat Menü" +#: .\aitrainer_backoffice\models.py:123 .\aitrainer_backoffice\models.py:124 +msgid "Menu Tree Representation" +msgstr "" -#: .\aitrainer_backoffice\models.py:110 -msgid "Actual menu" -msgstr "Aktuális menüpont" - -#: .\aitrainer_backoffice\models.py:114 -msgid "Exercise Tree Parent" -msgstr "Gyakorlat Menü szülő" - -#: .\aitrainer_backoffice\models.py:115 -msgid "Exercise Tree Parents" -msgstr "Gyakorlat Menü szülők" - -#: .\aitrainer_backoffice\models.py:150 +#: .\aitrainer_backoffice\models.py:159 msgid "Exercise" msgstr "Gyakorlat" -#: .\aitrainer_backoffice\models.py:151 +#: .\aitrainer_backoffice\models.py:160 msgid "Exercises" msgstr "Gyakorlatok" -#: .\aitrainer_backoffice\models.py:171 +#: .\aitrainer_backoffice\models.py:181 msgid "Image" msgstr "Kép" -#: .\aitrainer_backoffice\models.py:172 +#: .\aitrainer_backoffice\models.py:182 msgid "Images" msgstr "Képek" -#: .\aitrainer_backoffice\models.py:208 -#, fuzzy -#| msgid "Exercise Tree Parent" +#: .\aitrainer_backoffice\models.py:218 msgid "exercise_type_parent" msgstr "Gyakorlat szülő" -#: .\aitrainer_backoffice\models.py:210 -#, fuzzy -#| msgid "Exercise Tree" +#: .\aitrainer_backoffice\models.py:220 msgid "exercise_type_child" msgstr "Aktuális gyakorlat" -#: .\aitrainer_backoffice\models.py:214 +#: .\aitrainer_backoffice\models.py:224 msgid "Exercise Alternative" msgstr "Gyakorlat alternatíva" -#: .\aitrainer_backoffice\models.py:215 +#: .\aitrainer_backoffice\models.py:225 msgid "Exercise Alternatives" msgstr "Gyakorlat alternatívák" -#: .\aitrainer_backoffice\models.py:226 +#: .\aitrainer_backoffice\models.py:236 msgid "Exercise Parent" msgstr "Gyakorlat szülő" -#: .\aitrainer_backoffice\models.py:227 +#: .\aitrainer_backoffice\models.py:237 msgid "Exercise Parents" msgstr "Gyakorlat szülők" -#: .\aitrainer_backoffice\models.py:245 -#, fuzzy -#| msgid "Exercise Plan Detail" +#: .\aitrainer_backoffice\models.py:255 msgid "Exercise Plan Template" msgstr "Edzésterv sablon" -#: .\aitrainer_backoffice\models.py:246 -#, fuzzy -#| msgid "Exercise Plan Details" +#: .\aitrainer_backoffice\models.py:256 msgid "Exercise Plan Templates" msgstr "Edzésterv sablonok" -#: .\aitrainer_backoffice\models.py:279 -#, fuzzy -#| msgid "Exercise Plan Detail" +#: .\aitrainer_backoffice\models.py:289 msgid "Exercise Plan Template Detail" msgstr "Edzésterv sablon gyakorlat" -#: .\aitrainer_backoffice\models.py:280 -#, fuzzy -#| msgid "Exercise Plan Details" +#: .\aitrainer_backoffice\models.py:290 msgid "Exercise Plan Template Details" msgstr "Edzésterv sablon gyakorlatok" -#: .\aitrainer_backoffice\models.py:291 +#: .\aitrainer_backoffice\models.py:301 msgid "Exercise Plan" msgstr "Edzésterv" -#: .\aitrainer_backoffice\models.py:292 +#: .\aitrainer_backoffice\models.py:302 msgid "Exercise Plans" msgstr "Edzéstervek" -#: .\aitrainer_backoffice\models.py:324 +#: .\aitrainer_backoffice\models.py:334 msgid "Exercise Plan Detail" msgstr "Edzésterv gyakorlat" -#: .\aitrainer_backoffice\models.py:325 +#: .\aitrainer_backoffice\models.py:335 msgid "Exercise Plan Details" msgstr "Edzésterv gyakorlatok" -#: .\aitrainer_backoffice\models.py:347 +#: .\aitrainer_backoffice\models.py:357 msgid "Product" msgstr "Termék" -#: .\aitrainer_backoffice\models.py:348 +#: .\aitrainer_backoffice\models.py:358 msgid "Products" msgstr "Termékek" -#: .\aitrainer_backoffice\models.py:364 +#: .\aitrainer_backoffice\models.py:374 msgid "Purchase" msgstr "Vásárlás" -#: .\aitrainer_backoffice\models.py:365 +#: .\aitrainer_backoffice\models.py:375 msgid "Purchases" msgstr "Vásárlások" -#: .\aitrainer_backoffice\models.py:375 +#: .\aitrainer_backoffice\models.py:385 msgid "Customer Property" msgstr "Ügyfél tulajdonság" -#: .\aitrainer_backoffice\models.py:376 +#: .\aitrainer_backoffice\models.py:386 msgid "Customer Properties" msgstr "Ügyfél tulajdonságok" + +#: .\aitrainer_backoffice\models.py:410 +msgid "exercise_type" +msgstr "Aktuális gyakorlat" + +#: .\aitrainer_backoffice\models.py:411 +msgid "unit" +msgstr "Mértékegység" + +#: .\aitrainer_backoffice\models.py:415 +msgid "Evaluation" +msgstr "Kiértékelés" + +#: .\aitrainer_backoffice\models.py:416 +msgid "Evaluations" +msgstr "Kiértékelés Csoport" + +#: .\aitrainer_backoffice\models.py:439 +msgid "evaluation_foreign" +msgstr "Kiértékelés Főcsoport" + +#: .\aitrainer_backoffice\models.py:440 +msgid "name" +msgstr "Név" + +#: .\aitrainer_backoffice\models.py:441 +msgid "sex" +msgstr "Nem" + +#: .\aitrainer_backoffice\models.py:442 +msgid "age_min" +msgstr "Kortól" + +#: .\aitrainer_backoffice\models.py:443 +msgid "age_max" +msgstr "Korig" + +#: .\aitrainer_backoffice\models.py:444 +msgid "value_min" +msgstr "Min érték" + +#: .\aitrainer_backoffice\models.py:445 +msgid "value_max" +msgstr "Max érték" + +#: .\aitrainer_backoffice\models.py:447 +msgid "evaluation_text" +msgstr "Osztályozás" + +#: .\aitrainer_backoffice\models.py:449 +msgid "suggestion" +msgstr "Javaslat" + +#: .\aitrainer_backoffice\models.py:453 +msgid "Evaluation Table" +msgstr "Kiértékelés tábla" + +#: .\aitrainer_backoffice\models.py:454 +msgid "Evaluation Tables" +msgstr "Kiértékelés táblák" diff --git a/aitrainer_backoffice/aitrainer_backoffice/models.py b/aitrainer_backoffice/aitrainer_backoffice/models.py index 3eb36af..0dab21f 100644 --- a/aitrainer_backoffice/aitrainer_backoffice/models.py +++ b/aitrainer_backoffice/aitrainer_backoffice/models.py @@ -1,7 +1,9 @@ from django.db import models from django.utils.safestring import mark_safe from django.utils.translation import ugettext_lazy as _ -#from treenode.models import TreeNodeModel + + +# from treenode.models import TreeNodeModel class LanguageTypes(models.TextChoices): @@ -41,9 +43,9 @@ class ExerciseDevice(models.Model): 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')) + related_name='exercise_device_parent') exercise_device_child = models.ForeignKey(ExerciseDevice, on_delete=models.CASCADE, - related_name=_('exercise_device_child')) + related_name='exercise_device_child') class Meta: db_table = 'exercise_device_alternative' @@ -109,10 +111,10 @@ class ExerciseTreeTranslation(models.Model): class ExerciseTreeParents(models.Model): - #treenode_display_field = 'name' + # treenode_display_field = 'name' exercise_tree_parents_id = models.AutoField(primary_key=True) exercise_tree_parent = models.ForeignKey(ExerciseTree, on_delete=models.CASCADE, - related_name=_('exercise_tree_parent'), + related_name='exercise_tree_parent', help_text=_('Parent menu'), blank=True) exercise_tree_child = models.ForeignKey(ExerciseTree, on_delete=models.CASCADE) @@ -213,9 +215,9 @@ class ExerciseTypeDevice(models.Model): 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')) + related_name='exercise_type_parent') exercise_type_child = models.ForeignKey(ExerciseType, on_delete=models.CASCADE, - related_name=_('exercise_type_child')) + related_name='exercise_type_child') class Meta: db_table = 'exercise_type_alternative' @@ -345,8 +347,8 @@ class Product(models.Model): type = models.CharField(max_length=15, choices=ProductTypes.choices, default=ProductTypes.SUBS) valid_from = models.DateField(blank=True, null=True) valid_to = models.DateField(blank=True, null=True) - product_id_ios = models.CharField(max_length=50,blank=True, null=True) - product_id_android = models.CharField(max_length=50,blank=True, null=True) + product_id_ios = models.CharField(max_length=50, blank=True, null=True) + product_id_android = models.CharField(max_length=50, blank=True, null=True) price_ios = models.DecimalField(max_length=12, decimal_places=2, max_digits=12, blank=True) price_android = models.DecimalField(max_length=12, decimal_places=2, max_digits=12, blank=True) @@ -400,3 +402,56 @@ class PropertyTranslation(models.Model): def __str__(self): return self.property_name + + +class Evaluation(models.Model): + evaluation_id = models.AutoField(primary_key=True) + name = models.CharField(max_length=100, help_text='The name should be in English here') + exercise_type = models.ForeignKey(ExerciseType, on_delete=models.CASCADE, verbose_name=_("exercise_type")) + unit = models.CharField(max_length=50, verbose_name=_("unit")) + + class Meta: + db_table = 'evaluation' + verbose_name = _("Evaluation") + verbose_name_plural = _("Evaluations") + + def __str__(self): + return self.name + + +class EvaluationAttribute(models.Model): + class SexTypes(models.TextChoices): + MAN = 'm' + WOMAN = 'w' + + class EvaluationTypes(models.TextChoices): + ELITE = "elite" + EXCELLENT = "excellent" + GOOD = "good" + ABOVE_AVERAGE = "above_average" + AVERAGE = "average" + BELOW_AVERAGE = "below_average" + FAIR = "fair" + POOR = "poor" + VERY_POOR = "very_poor" + + evaluation_attr_id = models.AutoField(primary_key=True) + evaluation = models.ForeignKey(Evaluation, on_delete=models.CASCADE, verbose_name=_("evaluation_foreign")) + name = models.CharField(max_length=100, help_text='The name should be in English here', verbose_name=_("name")) + sex = models.CharField(max_length=1, choices=SexTypes.choices, default=SexTypes.MAN, verbose_name=_("sex")) + age_min = models.IntegerField(verbose_name=_("age_min")) + age_max = models.IntegerField(verbose_name=_("age_max")) + value_min = models.FloatField(verbose_name=_("value_min")) + value_max = models.FloatField(verbose_name=_("value_max")) + evaluation_text = models.CharField(max_length=50, choices=EvaluationTypes.choices, default=EvaluationTypes.AVERAGE, + verbose_name=_("evaluation_text")) + suggestion = models.TextField(max_length=1000, blank=True, null=True, help_text="English suggestion here", + verbose_name=_("suggestion")) + + class Meta: + db_table = 'evaluation_attribute' + verbose_name = _("Evaluation Table") + verbose_name_plural = _("Evaluation Tables") + + def __str__(self): + return self.name