Initial commit

This commit is contained in:
Pedro Rey Anca 2024-12-02 18:19:54 +01:00
commit 8f112c1bb5
Signed by: peprolinbot
GPG key ID: 053EA6E00116533A
69 changed files with 2068 additions and 0 deletions

View file

6
web/daily_menu/apps.py Normal file
View file

@ -0,0 +1,6 @@
from django.apps import AppConfig
class DailyMenuConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'daily_menu'

10
web/daily_menu/forms.py Normal file
View file

@ -0,0 +1,10 @@
from django import forms
import datetime
class DateSelectionForm(forms.Form):
def get_current_date_formatted():
return datetime.date.today().strftime("%Y-%m-%d")
date = forms.DateField(required=True, label='Fecha', initial=datetime.date.today, widget=forms.DateInput(attrs={
'class': 'bg-white text-black', 'type': 'date', 'max': get_current_date_formatted})) # type=date for the bootstrap+system datepicker to appear

View file

View file

@ -0,0 +1,52 @@
{% extends 'main/base.html' %}
{% block content %}
<div class="container mt-5">
<h1 class="text-center mb-4">Menú del día 🗓️ {{ date|date:"d/m/Y" }}</h1>
<div class="row">
<div class="col-md-6 mb-4">
<h2>Primero</h2>
<ul class="list-group mb-4">
{% for course in first_courses %}
<li class="list-group-item">{{ course }}</li>
{% endfor %}
</ul>
<h2>Segundo</h2>
<ul class="list-group">
{% for course in second_courses %}
<li class="list-group-item">{{ course }}</li>
{% endfor %}
</ul>
</div>
<div class="col-md-6 mb-4">
<h2>Mensaje original</h2>
<div id="tgMsgDiv" class="border pt-3 px-3 pb-0" style="display: none;">
{{ tg_message|linebreaks }}
</div>
<button id="toggleTgMsgButton" class="btn btn-primary mt-2 mb-4">Mostrar mensaje</button>
<h2>API</h2>
<a href="{{ request.path|add:'/json' }}" target="_blank" class="btn btn-warning mt-2">Ver JSON</a>
</div>
</div>
</div>
<script>
$(document).ready(function () {
$('#toggleTgMsgButton').click(function () {
var textDiv = $('#tgMsgDiv');
textDiv.toggle();
if (textDiv.is(':visible')) {
$(this).text('Ocultar');
$(this).removeClass('btn-primary');
$(this).addClass('btn-danger');
} else {
$(this).text('Mostrar mensaje');
$(this).removeClass('btn-danger');
$(this).addClass('btn-primary');
}
});
});
</script>
{% endblock %}

3
web/daily_menu/tests.py Normal file
View file

@ -0,0 +1,3 @@
from django.test import TestCase
# Create your tests here.

11
web/daily_menu/urls.py Normal file
View file

@ -0,0 +1,11 @@
from django.urls import path
from . import views
app_name = "daily_menu"
urlpatterns = [
path("historic", views.select_menu_form, name="select_menu_form"),
path("<str:date>", views.show_menu, name="show_menu"),
path("<str:date>/json", views.get_menu_json, name="get_menu_json"),
]

15
web/daily_menu/utils.py Normal file
View file

@ -0,0 +1,15 @@
import json
from datetime import datetime
from django.conf import settings
def get_menu(date="today"):
if date == "today":
date = datetime.now()
else:
date = datetime.strptime(date, "%d-%m-%Y")
with open(settings.MENU_HISTORY_FILE_PATH, "r", encoding='utf-8') as f:
menus = json.load(f)
return date, menus[date.strftime("%d-%m-%Y")]

47
web/daily_menu/views.py Normal file
View file

@ -0,0 +1,47 @@
from django.shortcuts import render, redirect
from django.contrib import messages
from django.http import JsonResponse, Http404
from .utils import get_menu
from .forms import DateSelectionForm
def select_menu_form(request):
if request.method == 'POST':
form = DateSelectionForm(request.POST)
if form.is_valid():
return redirect('daily_menu:show_menu', form.cleaned_data['date'].strftime("%d-%m-%Y"))
else:
form = DateSelectionForm()
return render(request, 'main/show_form.html', {'form_header': 'Introduce una fecha para ver el menú', 'form': form})
def show_menu(request, date):
try:
date, menu = get_menu(date)
except KeyError:
if date == "today":
messages.error(
request, "El menú de hoy (aún) no está disponible")
else:
messages.error(
request, "No hay ningún menú ese día")
return redirect('daily_menu:select_menu_form')
courses = menu["courses"]
return render(request, 'daily_menu/show_menu.html', {'date': date,
'first_courses': courses[0],
'second_courses': courses[1],
'tg_message': menu["message"]})
def get_menu_json(request, date):
try:
date, menu = get_menu(date)
except KeyError:
return JsonResponse({"error": "There is no menu for that date"}, status=404)
return JsonResponse(menu)