Initial commit
This commit is contained in:
commit
8f112c1bb5
69 changed files with 2068 additions and 0 deletions
0
web/daily_menu/__init__.py
Normal file
0
web/daily_menu/__init__.py
Normal file
6
web/daily_menu/apps.py
Normal file
6
web/daily_menu/apps.py
Normal 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
10
web/daily_menu/forms.py
Normal 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
|
0
web/daily_menu/migrations/__init__.py
Normal file
0
web/daily_menu/migrations/__init__.py
Normal file
52
web/daily_menu/templates/daily_menu/show_menu.html
Normal file
52
web/daily_menu/templates/daily_menu/show_menu.html
Normal 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
3
web/daily_menu/tests.py
Normal file
|
@ -0,0 +1,3 @@
|
|||
from django.test import TestCase
|
||||
|
||||
# Create your tests here.
|
11
web/daily_menu/urls.py
Normal file
11
web/daily_menu/urls.py
Normal 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
15
web/daily_menu/utils.py
Normal 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
47
web/daily_menu/views.py
Normal 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)
|
Loading…
Add table
Add a link
Reference in a new issue