{% extends "base.html" %} {% block title %}Shopping List{% endblock %} {% block subheader %}
Shopping {% if total_count > 0 %} {{ checked_count }}/{{ total_count }} {% endif %}
{% if total_count > 0 %} {% endif %}
{% endblock %} {% block content %} {% set pct = ((checked_count / total_count * 100)|round(0)|int) if total_count > 0 else 0 %}
{{ pct }}%
Shopping
{{ total_count - checked_count }} item{{ 's' if (total_count - checked_count) != 1 else '' }} left
๐ŸŽ‰
All Done!

You've checked off everything. Nice shopping!

{% if grouped_items %}
{{ pct }}%
{{ checked_count }} of {{ total_count }} items

{% if pct == 0 %}Ready to shop!{% elif pct < 25 %}Just getting startedโ€ฆ{% elif pct < 50 %}Making progress!{% elif pct < 75 %}More than halfway there!{% elif pct < 100 %}Almost done!{% else %}All done! ๐ŸŽ‰{% endif %}

{% for dept in grouped_items.keys() %} {% endfor %}
{% for dept, items in grouped_items.items() %} {% set dept_checked = items|selectattr('checked')|list|length %} {% set dept_meals = items|map(attribute='meal_type')|select|unique|list %} {% set has_manual = items|selectattr('meal_type', 'none')|list|length > 0 or items|selectattr('meal_type', 'equalto', None)|list|length > 0 %}
{% for it in items %}
{% if '(hierarchy match)' in it.name %} {{ it.name.replace(' (hierarchy match)', '') }} ~ match {% else %} {{ it.name }} {% endif %}
{% endfor %}
{% endfor %}
{% else %}
๐Ÿ›’

Your list is empty

Search from hundreds of ingredients above, type a custom item, or generate a full list from your meal plan.

{% endif %}
{% endblock %}