{% extends "alloc/base.html" %} {% load alloc_extras %} {% block title %}Allocation run{% endblock %} {% block content %}

Allocation run

{% include "alloc/_selector.html" %} {% if result %}

Cost flow

GL departments, production departments after service allocation ({{ method }}), activities, and where the cost lands. Red flows are unused capacity.

{% for l in flow.links %}{{ l.src }} to {{ l.dst }}: {{ l.value|money }}{% endfor %} {% for n in flow.nodes %}{{ n.label }}: {{ n.value|money }} {{ n.label }}{% endfor %}

Conservation checks

{% for c in result.checks %}{% endfor %}
{{ c.name }}{{ c.expected|money2 }}{{ c.actual|money2 }}{% if c.ok %}OK{% else %}FAIL{% endif %}

Service department allocation: method comparison

{% for m in comparison.methods %}{% endfor %} {% for r in comparison.rows %}{% for v in r.values %}{% endfor %}{% endfor %}
Production department{{ m|cut:"_"|capfirst }}
{{ r.dept }}{{ v|money }}
{% for m, e in comparison.errors.items %}

{{ m }}: {{ e }}

{% endfor %}

Reciprocal solves the simultaneous equations for services that serve each other; step-down allocates once in sequence; direct ignores service-to-service use.

Activity rates and capacity

{% for a in result.activities %}{% endfor %}
ActivityDepartmentMethodDriverCostVolumeRate / unitRate / minAllocatedUnused capacityUtilisation
{{ a.name }}{{ a.department }}{{ a.method|upper }}{{ a.driver }}{{ a.cost|money }}{{ a.volume|money }}{{ a.unit_rate|money2 }}{{ a.rate_per_minute|default_if_none:""|money2 }}{{ a.allocated|money }}{{ a.unused|money }}{% widthratio a.allocated a.cost 100 as u %}{{ u }}%
Total{{ t.activity_cost|money }}{{ t.allocated|money }}{{ t.unused|money }}
{% endif %} {% endblock %}