Files
WYGIWYH/app/templates/bank_sync/fragments/accounts.html
T
Herculino Trotta 620e7df015 feat(bank-sync): sync bank transactions from external providers
Provider registry modeled after automatic exchange rates: each provider
declares its own settings fields, rendered dynamically in the service form.
Lunch Flow is the first provider.

- Map provider accounts to WYGIWYH accounts with a start date and an
  optional currency filter
- Hourly task syncs due services; manual sync from the list
- Deduplicates through Transaction.internal_id, optionally matching
  transactions already entered by hand
- Per account errors and provider reported connection problems

Refs #498
2026-11-08 12:39:16 -03:00

38 lines
1.5 KiB
HTML

{% extends 'extends/offcanvas.html' %}
{% load i18n %}
{% load crispy_forms_tags %}
{% block title %}{% translate 'Accounts' %} - {{ service.name }}{% endblock %}
{% block body %}
{% if error %}
<div role="alert" class="alert alert-error mb-3">{{ error }}</div>
{% endif %}
<form hx-post="{% url 'bank_sync_accounts' pk=service.id %}" hx-target="#generic-offcanvas" novalidate>
{% csrf_token %}
{{ formset.management_form }}
{% for form in formset %}
<fieldset class="fieldset border border-base-300 rounded-box p-3 mb-3">
<legend class="fieldset-legend">
{{ form.instance.external_name|default:form.instance.external_id }}
<span class="text-base-content/60 font-mono text-xs">#{{ form.instance.external_id }}</span>
</legend>
{% if form.instance.remote_error %}
<div role="alert" class="alert alert-warning alert-soft mb-2">{{ form.instance.remote_error }}</div>
{% elif form.instance.last_error %}
<div role="alert" class="alert alert-error alert-soft mb-2">{{ form.instance.last_error }}</div>
{% endif %}
{{ form.id }}
{{ form.account|as_crispy_field }}
{{ form.start_date|as_crispy_field }}
{% if form.currencies.field.choices %}{{ form.currencies|as_crispy_field }}{% endif %}
</fieldset>
{% empty %}
<c-msg.empty title="{% translate 'No accounts found on this service' %}" remove-padding></c-msg.empty>
{% endfor %}
{% if formset.forms %}
<button type="submit" class="btn btn-primary">{% translate 'Save' %}</button>
{% endif %}
</form>
{% endblock %}