category_type refactoring

This commit is contained in:
Mira Weller
2024-06-21 18:03:01 +02:00
parent 01b535a0af
commit d04b855cce
3 changed files with 18 additions and 19 deletions

View File

@@ -220,21 +220,31 @@ class ItemCategory(LoggedModel):
def __str__(self):
name = self.internal_name or self.name
if self.is_addon:
return _('{category} (Add-On products)').format(category=str(name))
if self.cross_selling_mode is not None:
return _('{category} ({category_type})').format(category=str(name), category_type=self.get_cross_selling_mode_display())
category_type = self.get_category_type_display()
if category_type:
return _('{category} ({category_type})').format(category=str(name), category_type=category_type)
return str(name)
def get_category_type_display(self):
if self.is_addon:
return _('Add-On products')
elif self.cross_selling_mode:
return self.get_cross_selling_mode_display()
else:
return None
@property
def category_type(self):
return 'addon' if self.is_addon else 'normal'
return 'addon' if self.is_addon else self.cross_selling_mode or 'normal'
@category_type.setter
def category_type(self, new_value):
if new_value == 'addon':
self.is_addon = True
self.cross_selling_mode = None
else:
self.is_addon = False
self.cross_selling_mode = None if new_value == 'normal' else new_value
def delete(self, *args, **kwargs):
super().delete(*args, **kwargs)

View File

@@ -106,7 +106,7 @@ class CategoryForm(I18nModelForm):
_('Combined category'), _('Products in this category are regular products displayed on the front page, '
'but are additionally shown in the cross-selling step, according to the configuration below.'))),),
))
self.fields['category_type'].initial = 'addon' if self.instance.is_addon else (self.instance.cross_selling_mode or 'normal')
self.fields['category_type'].initial = self.instance.category_type
self.fields['cross_selling_condition'].widget.attrs['data-display-dependency'] = '#id_category_type_2,#id_category_type_3'
self.fields['cross_selling_condition'].widget.attrs['data-disable-dependent'] = 'true'
@@ -131,14 +131,7 @@ class CategoryForm(I18nModelForm):
if d.get('category_type') == 'only' or d.get('category_type') == 'both':
if not d.get('cross_selling_condition'):
raise ValidationError({'cross_selling_condition': [_('This field is required')]})
self.instance.cross_selling_mode = d.get('category_type')
else:
self.instance.cross_selling_mode = None
if d.get('category_type') == 'only' or d.get('category_type') == 'both' or d.get('category_type') == 'normal':
self.instance.is_addon = False
elif d.get('category_type') == 'addon':
self.instance.is_addon = True
d['category_type'] = 'normal'
self.instance.category_type = d.get('category_type')
return d

View File

@@ -42,11 +42,7 @@
<strong><a href="{% url "control:event.items.categories.edit" organizer=request.event.organizer.slug event=request.event.slug category=c.id %}">{{ c.internal_name|default:c.name }}</a></strong>
</td>
<td>
{% if c.is_addon %}{% trans "Add-on product category" %}
{% elif c.cross_selling_mode is None %}{% trans "Normal category" %}
{% elif c.cross_selling_mode == 'both' %}{% trans "Combined category" %}
{% elif c.cross_selling_mode == 'only' %}{% trans "Cross-selling category" %}
{% endif %}
{{ c.get_category_type_display }}
</td>
<td class="text-right flip">
<button title="{% trans "Move up" %}" formaction="{% url "control:event.items.categories.up" organizer=request.event.organizer.slug event=request.event.slug category=c.id %}" class="btn btn-default btn-sm sortable-up"{% if forloop.counter0 == 0 and not page_obj.has_previous %} disabled{% endif %}><i class="fa fa-arrow-up"></i></button>