Merge pull request #495 from ae-utbm/eboutic-patch

Eboutic patch
This commit is contained in:
thomas girod 2022-11-16 20:57:32 +01:00 committed by GitHub
commit b92580943a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 106 additions and 81 deletions

View File

@ -184,9 +184,7 @@
</div> </div>
<a href="{{ url('forum:main') }}">{% trans %}Forum{% endtrans %}</a> <a href="{{ url('forum:main') }}">{% trans %}Forum{% endtrans %}</a>
<a href="{{ url('sas:main') }}">{% trans %}Gallery{% endtrans %}</a> <a href="{{ url('sas:main') }}">{% trans %}Gallery{% endtrans %}</a>
{% if request.user.is_authenticated %}
<a href="{{ url('eboutic:main') }}">{% trans %}Eboutic{% endtrans %}</a> <a href="{{ url('eboutic:main') }}">{% trans %}Eboutic{% endtrans %}</a>
{% endif %}
<div class="dropdown"> <div class="dropdown">
<button class="dropbtn">{% trans %}Services{% endtrans %} <button class="dropbtn">{% trans %}Services{% endtrans %}
<i class="fa fa-caret-down"></i> <i class="fa fa-caret-down"></i>

View File

@ -0,0 +1,18 @@
# Generated by Django 3.2.15 on 2022-11-16 18:35
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("counter", "0017_studentcard"),
]
operations = [
migrations.AddField(
model_name="producttype",
name="priority",
field=models.PositiveIntegerField(default=0),
),
]

View File

@ -133,8 +133,13 @@ class ProductType(models.Model):
comment = models.TextField(_("comment"), null=True, blank=True) comment = models.TextField(_("comment"), null=True, blank=True)
icon = models.ImageField(upload_to="products", null=True, blank=True) icon = models.ImageField(upload_to="products", null=True, blank=True)
# priority holds no real backend logic but helps to handle the order in which
# the items are to be shown to the user
priority = models.PositiveIntegerField(default=0)
class Meta: class Meta:
verbose_name = _("product type") verbose_name = _("product type")
ordering = ["-priority", "name"]
def is_owned_by(self, user): def is_owned_by(self, user):
""" """

View File

@ -954,7 +954,7 @@ class ProductTypeCreateView(CounterAdminTabsMixin, CounterAdminMixin, CreateView
""" """
model = ProductType model = ProductType
fields = ["name", "description", "comment", "icon"] fields = ["name", "description", "comment", "icon", "priority"]
template_name = "core/create.jinja" template_name = "core/create.jinja"
current_tab = "products" current_tab = "products"
@ -966,7 +966,7 @@ class ProductTypeEditView(CounterAdminTabsMixin, CounterAdminMixin, UpdateView):
model = ProductType model = ProductType
template_name = "core/edit.jinja" template_name = "core/edit.jinja"
fields = ["name", "description", "comment", "icon"] fields = ["name", "description", "comment", "icon", "priority"]
pk_url_kwarg = "type_id" pk_url_kwarg = "type_id"
current_tab = "products" current_tab = "products"

View File

@ -41,7 +41,9 @@ def get_eboutic_products(user: User) -> List[Product]:
.products.filter(product_type__isnull=False) .products.filter(product_type__isnull=False)
.filter(archived=False) .filter(archived=False)
.filter(limit_age__lte=user.age) .filter(limit_age__lte=user.age)
.annotate(priority=F("product_type__priority"))
.annotate(category=F("product_type__name")) .annotate(category=F("product_type__name"))
.annotate(category_comment=F("product_type__comment"))
) )
return [p for p in products if p.can_be_sold_to(user)] return [p for p in products if p.can_be_sold_to(user)]

View File

@ -88,15 +88,16 @@
</div> </div>
{% endif %} {% endif %}
{% for category, items in products|groupby('category') %} {% for priority_groups in products|groupby('priority')|reverse %}
{% for category, items in priority_groups.list|groupby('category') %}
{% if items|count > 0 %} {% if items|count > 0 %}
<section> <section>
{# I would have wholeheartedly directly used the header element instead {# I would have wholeheartedly directly used the header element instead
but it has already been made messy in core/style.scss #} but it has already been made messy in core/style.scss #}
<div class="category-header"> <div class="category-header">
<h3>{{ category }}</h3> <h3>{{ category }}</h3>
{% if category.comment %} {% if items[0].category_comment %}
<p>{{ category.comment }}</p> <p><i>{{ items[0].category_comment }}</i></p>
{% endif %} {% endif %}
</div> </div>
<div class="product-group"> <div class="product-group">
@ -116,6 +117,7 @@
</div> </div>
</section> </section>
{% endif %} {% endif %}
{% endfor %}
{% else %} {% else %}
<p>{% trans %}There are no items available for sale{% endtrans %}</p> <p>{% trans %}There are no items available for sale{% endtrans %}</p>
{% endfor %} {% endfor %}