mirror of
				https://gitlab.crans.org/bde/nk20
				synced 2025-10-31 15:50:03 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			122 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			122 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| # Copyright (C) 2018-2025 by BDE ENS Paris-Saclay
 | |
| # SPDX-License-Identifier: GPL-3.0-or-later
 | |
| 
 | |
| import django_tables2 as tables
 | |
| from django.utils.translation import gettext_lazy as _
 | |
| from note_kfet.middlewares import get_current_request
 | |
| from note.templatetags.pretty_money import pretty_money
 | |
| from permission.backends import PermissionBackend
 | |
| 
 | |
| from .models import Food, Dish, Order
 | |
| 
 | |
| 
 | |
| class FoodTable(tables.Table):
 | |
|     """
 | |
|     List all foods.
 | |
|     """
 | |
|     qr_code_numbers = tables.Column(empty_values=(), verbose_name=_("QR Codes"), orderable=False)
 | |
| 
 | |
|     date = tables.Column(empty_values=(), verbose_name=_("Arrival/creation date"), orderable=False)
 | |
| 
 | |
|     def render_date(self, record):
 | |
|         if record.__class__.__name__ == "BasicFood":
 | |
|             return record.arrival_date.strftime("%d/%m/%Y %H:%M")
 | |
|         elif record.__class__.__name__ == "TransformedFood":
 | |
|             return record.creation_date.strftime("%d/%m/%Y %H:%M")
 | |
|         else:
 | |
|             return "--"
 | |
| 
 | |
|     def render_qr_code_numbers(self, record):
 | |
|         return ", ".join(str(q.qr_code_number) for q in record.QR_code.all())
 | |
| 
 | |
|     class Meta:
 | |
|         model = Food
 | |
|         template_name = 'django_tables2/bootstrap4.html'
 | |
|         fields = ('name', 'owner', 'qr_code_numbers', 'allergens', 'date', 'expiry_date')
 | |
|         row_attrs = {
 | |
|             'class': 'table-row',
 | |
|             'data-href': lambda record: 'detail/' + str(record.pk),
 | |
|             'style': 'cursor:pointer',
 | |
|         }
 | |
| 
 | |
| 
 | |
| class DishTable(tables.Table):
 | |
|     """
 | |
|     List dishes
 | |
|     """
 | |
|     supplements = tables.Column(empty_values=(), verbose_name=_('Available supplements'), orderable=False)
 | |
| 
 | |
|     def render_supplements(self, record):
 | |
|         return ", ".join(str(q.food) for q in record.supplements.all())
 | |
| 
 | |
|     def render_price(self, value):
 | |
|         return pretty_money(value)
 | |
| 
 | |
|     class Meta:
 | |
|         model = Dish
 | |
|         template_name = 'django_tables2/bootstrap4.html'
 | |
|         fields = ('main', 'supplements', 'price', 'available')
 | |
|         row_attrs = {
 | |
|             'class': 'table-row',
 | |
|             'data-href': lambda record: str(record.pk),
 | |
|             'style': 'cursor:pointer',
 | |
|         }
 | |
| 
 | |
| 
 | |
| DELETE_TEMPLATE = """
 | |
| <button id="{{ record.pk }}"
 | |
|         class="btn btn-danger btn-sm"
 | |
|         onclick="delete_button(this.id, 'orders_table_{{ table.prefix }}')">
 | |
|     {{ delete_trans }}
 | |
| </button>
 | |
| """
 | |
| 
 | |
| 
 | |
| SERVE_TEMPLATE = """
 | |
| <button id="{{ record.pk }}"
 | |
|         class="btn btn-sm {% if record.served %}btn-secondary{% else %}btn-success{% endif %}"
 | |
|         onclick="serve_button(this.id, 'orders_table_{{ table.prefix }}', {{ record.served|yesno:'true,false' }})">
 | |
|     {% if record.served %}
 | |
|         {{ record.served_at|date:"d/m/Y H:i" }}
 | |
|     {% else %}""" + _('Serve') + """
 | |
|     {% endif %}
 | |
| </button>
 | |
| """
 | |
| 
 | |
| 
 | |
| class OrderTable(tables.Table):
 | |
|     """
 | |
|     Lis all orders.
 | |
|     """
 | |
|     delete = tables.TemplateColumn(
 | |
|         template_code=DELETE_TEMPLATE,
 | |
|         extra_context={"delete_trans": _('Delete')},
 | |
|         orderable=False,
 | |
|         attrs={'td': {'class': lambda record: 'col-sm-1' + (
 | |
|             ' d-none' if not PermissionBackend.check_perm(
 | |
|                 get_current_request(), "food.delete_order",
 | |
|                 record) else '')}}, verbose_name=_("Delete"), )
 | |
| 
 | |
|     serve = tables.TemplateColumn(
 | |
|         template_code=SERVE_TEMPLATE,
 | |
|         extra_context={"serve_trans": _('Serve')},
 | |
|         orderable=False,
 | |
|         attrs={'td': {'class': lambda record: 'col-sm-1' + (
 | |
|             ' d-none' if not PermissionBackend.check_perm(
 | |
|                 get_current_request(), "food.change_order_saved",
 | |
|                 record) else '')}}, verbose_name=_("Serve"), )
 | |
| 
 | |
|     request = tables.Column(
 | |
|         orderable=False
 | |
|     )
 | |
| 
 | |
|     class Meta:
 | |
|         model = Order
 | |
|         template_name = 'django_tables2/bootstrap4.html'
 | |
|         fields = ('ordered_at', 'user', 'dish', 'supplements', 'request', 'serve', 'delete')
 | |
|         order_by = ('ordered_at', )
 | |
|         row_attrs = {
 | |
|             'class': 'table-row',
 | |
|             'style': 'cursor:pointer',
 | |
|         }
 |