{% extends 'bom/bom-base.html' %} {% block head-title %}{{ title }}{% endblock %} {% block content %}

arrow_back Changes

Change #{{ change.number }}: {{ change.title }} {% include 'bom/changes/change-status-chip.html' %} {% if is_stale %}Stale{% endif %}

{% if is_eco %}
This is an Engineering Change Order (ECO): it edits a revision that is Released or In Review. Applying it creates a new Draft revision of each part, which must then be released.
{% endif %} {% if is_stale %}
The parts this change touches were modified after it was staged, so it cannot be applied. Rebase it to re-check each item against the current data; items that no longer fit are rejected.
{% endif %}
Rationale

{{ change.rationale|default:"No rationale given."|linebreaksbr }}

Authored by {{ change.author.username }}{% if change.api_token %} through {% if change.agent_client %}{{ change.agent_client }} · {% endif %}token {{ change.api_token.name }}{% endif %}, {{ change.created_at|timesince }} ago. {% if change.resolved_by %}{{ change.get_status_display }} by {{ change.resolved_by.username }}.{% endif %} {% if change.protection_overridden_by %}Protection overridden by {{ change.protection_overridden_by.username }}.{% endif %}
{% include 'bom/changes/components/change-items.html' %}
{% if is_pending %}
Validation

{{ error_count }} error{{ error_count|pluralize }}, {{ warning_count }} warning{{ warning_count|pluralize }}

{% for problem in problems %}

Item {{ problem.item.position }}: {{ problem.message }}

{% endfor %}
{% endif %} {% if impact %}
Impact {% for assembly in impact.assemblies %}

{{ assembly.part_number }} rev {{ assembly.revision }} {{ assembly.configuration }} {% if assembly.needs_new_revision %}
Released: needs a new revision to use the change.{% endif %}
uses {{ assembly.uses }}

{% empty %}

No assemblies use the parts this change edits.

{% endfor %}
Cost per unit at {{ impact.cost.quantity }} {% for target in impact.cost.targets %}

{{ target.part_number }} rev {{ target.revision }}
{% if target.delta is not None %} {{ target.before|floatformat:4 }} → {{ target.after|floatformat:4 }} {{ impact.cost.currency }} ({% if target.delta > 0 %}+{% endif %}{{ target.delta|floatformat:4 }}) {% elif is_pending %} Not available: the cost could not be computed after the change. {% else %} Cost is only compared while the change is pending. {% endif %}

{% empty %}

The change does not edit an existing assembly.

{% endfor %} {% if impact.cost.delta is not None %}

Total {% if impact.cost.delta > 0 %}+{% endif %}{{ impact.cost.delta|floatformat:4 }} {{ impact.cost.currency }}

{% endif %}
{% endif %} {% if cascade_candidates or cascaded_revisions %}
Cascade {% if cascade_candidates %}

These Released assemblies still use a revision this change replaced.

{% csrf_token %} {% for candidate in cascade_candidates %}

{% endfor %}
{% endif %} {% for revision in cascaded_revisions %}

Created {{ revision.part.full_part_number }} rev {{ revision.revision }} Release

{% endfor %}
{% endif %}
Approval

{% if is_pending %}{{ approval.message }}{% else %}This change is {{ change.get_status_display|lower }}.{% endif %}

{% if is_pending %}
{% if can_submit %}
{% csrf_token %}
{% endif %} {% if can_apply %}
{% csrf_token %}
{% endif %} {% if can_apply_as_admin %}
{% csrf_token %}
{% endif %} {% if can_reject %}
{% csrf_token %}
{% endif %} {% if can_rebase %}
{% csrf_token %}
{% endif %} {% if is_author %}
{% csrf_token %}
{% endif %}
{% endif %} {% if change.status == 'applied' %}
{% for revision in created_revisions %} Release rev {{ revision.revision }} of {{ revision.part.full_part_number }} {% endfor %} {% if can_revert %}
{% csrf_token %}
{% endif %}
{% endif %}
{% endblock %}