{% extends "fitcheck/base.html" %} {% load i18n %} {% load fitcheck_extras %} {% block fitcheck_css %} {% endblock %} {% block fitcheck_content %} {% if assignment %}
{% blocktranslate with doctrine=assignment.doctrine.name %} Editing the per-doctrine policy snapshot for {{ doctrine }}. Changes here stay local to this combination - the fit's source defaults and other doctrine assignments are untouched. {% endblocktranslate %} {% if assignment.fit.doctrines.count > 1 %} {% translate "Edit the source defaults instead" %} {% endif %}
{% endif %}
{{ fit.name }} · {{ fit.ship_type.name }} {% if assignment %} {{ assignment.doctrine.name }} {% endif %}
v{{ fit.version }} · {% if fit.compliance_policy %} {% blocktranslate with name=fit.compliance_policy.name %}Last applied policy: {{ name }}{% endblocktranslate %} · {% endif %} {% translate "Module policies, exceptions and quantity leeway. Saving bumps the version; pending submissions become stale until you manually re-check them." %}
{% if stale_pending_count %}
{% csrf_token %}
{% endif %} {% if has_policies %}
{% csrf_token %} {{ apply_policy_form.policy }}
{% endif %} {% translate "Back to fitting" %}
{% csrf_token %} {{ formset.management_form }}
{% regroup rows by item.section as section_groups %} {% for group in section_groups %}
{% include "fitcheck/partials/section_icon.html" with code=group.grouper %} {{ group.list.0.item.get_section_display }}
{% for row in group.list %} {% endfor %}
{% translate "Module" %} {% translate "Policy" %} {% translate "Allowed Meta Groups (Checked = Allowed)" %} {% translate "Qty % Pass" %} {% translate "Exceptions" %}
{{ row.form.id }} {{ row.item.module_type.name }} ×{{ row.item.quantity }} {% if row.form.errors %}
{{ row.form.errors }}
{% endif %}
{{ row.form.policy }}
{{ row.form.allowed_meta_groups }}
{{ row.form.allow_mutated }}
{% if row.is_quantity_section %}
{{ row.form.min_quantity_pct }} %
{% translate "Minimum" %} {{ row.item.required_quantity }}
{% else %} {% translate "exact qty" %} {% endif %}
{% for ov in row.overrides %} {{ ov.obj.alt_type.name }} {% endfor %}
{% translate "Add Exceptions" %}
{% comment %} Buttons submit the external form #ov-bulk- (declared after #items-form closes) via the HTML5 form= attribute - a nested here would be illegal inside #items-form and break it. {% endcomment %}
{% if row.has_rollable %} {% if row.selected_attrs %}
{% for a in row.selected_attrs %} {% if a.icon %}{% endif %} {% if a.bound %}{{ a.bound.min|sig3 }}–{{ a.bound.max|sig3 }}{% else %}{{ a.baseline|sig3 }}+{% endif %} {% endfor %}
{% endif %} {% endif %}
{% endfor %}
{% for row in rows %}
{% csrf_token %}
{% csrf_token %}
{% for ov in row.overrides %}
{% csrf_token %}
{% endfor %} {% endfor %} {# Shared abyssal-attribute modal, populated per-item via JS. #} {% endblock %} {% block extra_javascript %} {% endblock %}