basic meal plan working
This commit is contained in:
parent
7449380434
commit
afa69c647d
@ -15,9 +15,11 @@
|
|||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
<form>
|
<form action="{% url 'view_plan' %}" method="post">
|
||||||
|
{% csrf_token %}
|
||||||
<label>{% trans 'Week' %}
|
<label>{% trans 'Week' %}
|
||||||
<input id="id_week" class="form-control" type="week" onchange="document.forms[0].submit()">
|
<input name="week" id="id_week" class="form-control" type="week"
|
||||||
|
onchange="document.forms[0].submit()" value="{{ js_week }}">
|
||||||
</label>
|
</label>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
@ -27,50 +29,30 @@
|
|||||||
<div class="col-md-12 table-responsive">
|
<div class="col-md-12 table-responsive">
|
||||||
<table class="table table-bordered">
|
<table class="table table-bordered">
|
||||||
<tr style="text-align: center">
|
<tr style="text-align: center">
|
||||||
<th id="th_day_1">?</th>
|
{% for d in days %}
|
||||||
<th id="th_day_2">?</th>
|
<th>{{ d }}</th>
|
||||||
<th id="th_day_3">?</th>
|
{% endfor %}
|
||||||
<th id="th_day_4">?</th>
|
|
||||||
<th id="th_day_5">?</th>
|
|
||||||
<th id="th_day_6">?</th>
|
|
||||||
<th id="th_day_7">?</th>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td colspan="7" style="text-align: center"><h5>{% trans 'Breakfast' %}</h5></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td id="td_breakfast_1"></td>
|
|
||||||
<td id="td_breakfast_2"></td>
|
|
||||||
<td id="td_breakfast_3"></td>
|
|
||||||
<td id="td_breakfast_4"></td>
|
|
||||||
<td id="td_breakfast_5"></td>
|
|
||||||
<td id="td_breakfast_6"></td>
|
|
||||||
<td id="td_breakfast_7"></td>
|
|
||||||
</tr>
|
</tr>
|
||||||
|
{% for plan_key, plan_value in plan.items %}
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="7" style="text-align: center"><h5>{% trans 'Lunch' %}</h5></td>
|
<td colspan="7" style="text-align: center"><h5>{{ plan_value.type_name }}</h5></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
|
{% for day_key, days_value in plan_value.days.items %}
|
||||||
|
<td>
|
||||||
|
{% for mp in days_value %}
|
||||||
|
<a href="#" onclick="openRecipe({{ mp.recipe.id }})">{{ mp.recipe.name }}</a><br/>
|
||||||
|
{% endfor %}
|
||||||
|
</td>
|
||||||
|
{% endfor %}
|
||||||
</tr>
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
<tr>
|
|
||||||
<td colspan="7" style="text-align: center"><h5>{% trans 'Dinner' %}</h5></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
<td colspan="7" style="text-align: center"><h5>{% trans 'Other' %}</h5></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
|
|
||||||
</tr>
|
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
{% include 'include/recipe_open_modal.html' %}
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
@ -121,7 +121,7 @@ class MealPlanCreate(LoginRequiredMixin, CreateView):
|
|||||||
obj = form.save(commit=False)
|
obj = form.save(commit=False)
|
||||||
obj.user = self.request.user
|
obj.user = self.request.user
|
||||||
obj.save()
|
obj.save()
|
||||||
return HttpResponseRedirect(self.get_success_url())
|
return HttpResponseRedirect(reverse('view_plan'))
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
context = super(MealPlanCreate, self).get_context_data(**kwargs)
|
context = super(MealPlanCreate, self).get_context_data(**kwargs)
|
||||||
|
@ -1,3 +1,6 @@
|
|||||||
|
import copy
|
||||||
|
from datetime import datetime, timedelta
|
||||||
|
|
||||||
from django.contrib import messages
|
from django.contrib import messages
|
||||||
from django.contrib.auth.decorators import login_required
|
from django.contrib.auth.decorators import login_required
|
||||||
from django.shortcuts import render, get_object_or_404
|
from django.shortcuts import render, get_object_or_404
|
||||||
@ -69,7 +72,42 @@ def books(request):
|
|||||||
return render(request, 'books.html', {'book_list': book_list})
|
return render(request, 'books.html', {'book_list': book_list})
|
||||||
|
|
||||||
|
|
||||||
|
def get_start_end_from_week(p_year, p_week):
|
||||||
|
first_day_of_week = datetime.strptime(f'{p_year}-W{int(p_week) - 1}-1', "%Y-W%W-%w").date()
|
||||||
|
last_day_of_week = first_day_of_week + timedelta(days=6.9)
|
||||||
|
return first_day_of_week, last_day_of_week
|
||||||
|
|
||||||
|
|
||||||
|
def get_days_from_week(start, end):
|
||||||
|
delta = end - start
|
||||||
|
days = []
|
||||||
|
for i in range(delta.days + 1):
|
||||||
|
days.append(start + timedelta(days=i))
|
||||||
|
return days
|
||||||
|
|
||||||
|
|
||||||
@login_required()
|
@login_required()
|
||||||
def meal_plan(request):
|
def meal_plan(request):
|
||||||
form = MealPlanForm()
|
js_week = datetime.now().strftime("%Y-W%V")
|
||||||
return render(request, 'meal_plan.html', {'form': form})
|
if request.method == "POST":
|
||||||
|
js_week = request.POST['week']
|
||||||
|
|
||||||
|
year, week = js_week.split('-')
|
||||||
|
first_day, last_day = get_start_end_from_week(year, week.replace('W', ''))
|
||||||
|
|
||||||
|
days = get_days_from_week(first_day, last_day)
|
||||||
|
days_dict = {}
|
||||||
|
for d in days:
|
||||||
|
days_dict[d] = []
|
||||||
|
|
||||||
|
plan = {}
|
||||||
|
for t in MealPlan.MEAL_TYPES:
|
||||||
|
plan[t[0]] = {'type_name': t[1], 'days': copy.deepcopy(days_dict)}
|
||||||
|
|
||||||
|
for d in days:
|
||||||
|
plan_day = MealPlan.objects.filter(date=d).all()
|
||||||
|
for p in plan_day:
|
||||||
|
plan[p.meal]['days'][d].append(p)
|
||||||
|
|
||||||
|
print(plan)
|
||||||
|
return render(request, 'meal_plan.html', {'js_week': js_week, 'plan': plan, 'days': days})
|
||||||
|
Loading…
Reference in New Issue
Block a user