{% extends "kitchen/base.html" %} {% block title %}{{ plan.name }}{% endblock %} {% block content %}

{{ plan.name }}

Week of {{ plan.start|date:"D j M Y" }} · {{ plan.people }} {{ plan.people|pluralize:"person,people" }} · ingredients used cost about {{ currency }}{{ plan.result.cost|floatformat:2 }} (the shopping total is higher because it buys whole packs)

Shopping list ({{ shopping.to_buy }} items, {{ currency }}{{ shopping.total|floatformat:2 }})
{% if plan.result.violations %}
{{ plan.result.violations|length }} constraint{{ plan.result.violations|length|pluralize }} not met with the available recipes:
{% else %}
All daily targets, budget, repeat and cook-time limits are satisfied.
{% endif %}
{% csrf_token %}
{% include "kitchen/_grid.html" with readonly=False %}

Tick lock on meals to keep, adjust targets below, then regenerate. Leftover lunches reuse the previous evening's dinner (cooked double).

Targets & constraints {% include "kitchen/_settings_fields.html" %}

Optimiser

Objective {{ plan.result.objective }} (initial greedy plan {{ plan.result.greedy_objective }}; lower is better). Breakdown: {% for k, v in plan.result.breakdown.items %}{{ k }} {{ v }}{% if not forloop.last %} · {% endif %}{% endfor %}

Share read-only: {% url 'shared_plan' plan.share_token %}

{% csrf_token %}

New plan

{% csrf_token %} {% include "kitchen/_settings_fields.html" %}
{% endblock %}