{% extends "base.html" %} {% load labels %} {% block title %}{{ page_title }}{% endblock %} {% block content %}

{{ page_title }}

{{ job.source }} · {{ job.get_status_display }} · coverage {{ job.coverage }}{% if uncovered %} ({% for r in uncovered %}{% if r.label_key %}{% label r.label_key plural=True case="lower" %}{% else %}{{ r.text|lower }}{% endif %} {{ r.item.coverage.coverage }}{% if not forloop.last %}, {% endif %}{% endfor %}){% endif %}

Job overview All CRM imports

Marketing consent after this import

{{ consequence.contacts_no_consent_for_marketing }} of {{ consequence.contacts }} imported {% label "parties.person" plural=True case="lower" %} will have no marketing consent in Fincas.

{{ consequence.text }}

By step

Counts only. Where coverage is not complete, every count is "at least". Undo runs newest step first: a step can be undone once nothing later points at it.

{% for r in rows %} {% endfor %}
Import counts per step
Step State Coverage Rows Created Linked Updated Unchanged Skipped (N/A) Need review Approved Failed Undo
{{ r.item.step }}. {% if r.label_key %}{% label r.label_key plural=True %}{% else %}{{ r.text }}{% endif %} {{ r.state_text }}{% if r.item.blocked_by %} (needs {{ r.item.blocked_by|join:", " }}){% endif %} {% if r.item.coverage.exact %}{{ r.item.coverage.coverage }}{% else %}{{ r.item.coverage.coverage }}{% if r.item.coverage.reasons %} {{ r.item.coverage.reasons|join:", " }}{% endif %}{% endif %} {% if not r.item.coverage.exact %}≥ {% endif %}{{ r.item.rows }} {{ r.item.applied.created }} {{ r.item.applied.linked }} {{ r.item.applied.updated }} {{ r.item.unchanged }} {{ r.skipped }} {{ r.item.need_review.total }} {{ r.item.approved_pending }} {{ r.failed_or_pending }} {% if r.item.undo.available %}Available{% elif r.item.undo.undo_first %}After {{ r.item.undo.undo_first|length }} later step{{ r.item.undo.undo_first|length|pluralize }}{% elif r.item.undo.applied_rows %}Not available{% else %}—{% endif %}
Total {% if not totals.exact %}≥ {% endif %}{{ totals.rows }} {{ totals.applied }} applied {{ totals.unchanged }} {{ totals.skipped }} {{ totals.need_review }} {{ totals.approved_pending }} {{ totals.failed }}

Reasons and flags

{% for r in rows %}{% if r.item.skipped or r.item.failed.by_code or r.item.flags or r.item.dependency_pending %}
{% if r.label_key %}{% label r.label_key plural=True %}{% else %}{{ r.text }}{% endif %}
{% if r.item.skipped %}
Skipped (N/A): {% for code, n in r.item.skipped.items %}{{ code }} {{ n }}{% if not forloop.last %}, {% endif %}{% endfor %}
{% endif %} {% if r.item.failed.by_code %}
Failed: {% for code, n in r.item.failed.by_code.items %}{{ code }} {{ n }}{% if not forloop.last %}, {% endif %}{% endfor %}
{% endif %} {% if r.item.dependency_pending %}
Waiting for a reviewed dependency: {{ r.item.dependency_pending }}
{% endif %} {% if r.item.flags %}
Flags: {% for code, n in r.item.flags.items %}{{ code }} {{ n }}{% if not forloop.last %}, {% endif %}{% endfor %}
{% endif %}
{% endif %}{% empty %}{% endfor %}

Rows that need a reviewer are decided on the review screens; failed rows are retried with manage.py crm_import retry --job {{ job.pk }}.

{% label "crm.engagement" plural=True %} from the source

{% endblock %}