Flask + SQLite, in de Van Emous-huisstijl (tokens uit het design system, GSAP-effecten volgens de motion-regels, uit bij prefers-reduced-motion). - Leads en contactpersonen: status, toewijzen, verwachte waarde, omzetten naar klant, tijdlijn, bestanden, taken/opvolging - Relaties (zoals accounts in EspoCRM): klantbundels (huishouden/familie) en partners met type (leverancier, aannemer, ...); leveranciers van producten worden automatisch partners - API voor formulieren (POST /api/leads) met dubbele-leaddetectie, bestanden en configurator-ontwerpen (house-design JSON) - Import van CSV/JSON (leads, relaties, producten) met kolomkoppeling; configurator-formaat - Producten met SKU als vaste sleutel, mutatiehistorie, POST /api/products, CSV-export; offerteregels houden hun eigen prijs - Offertes met btw per tarief en afdrukversie (PDF via de browser) - Inbox via IMAP/SMTP, gekoppeld aan contacten - Gebruikers (beheerder/medewerker) en klantportaal (offertes accepteren, bestanden, berichten) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
32 lines
1.3 KiB
HTML
32 lines
1.3 KiB
HTML
{% extends 'base.html' %}
|
|
{% block title %}Offertes{% endblock %}
|
|
{% block content %}
|
|
<div class="head">
|
|
<div><div class="kicker">Verkoop</div><h1>Offertes</h1></div>
|
|
<form method="post" action="{{ url_for('quote_new') }}" class="inline"><button class="btn">Nieuwe offerte</button></form>
|
|
</div>
|
|
<div class="filters">
|
|
<a href="{{ url_for('quotes') }}" class="{{ 'on' if not status }}">Alle</a>
|
|
{% for k, l in QUOTE_STATUSES %}<a href="{{ url_for('quotes', status=k) }}" class="{{ 'on' if status == k }}">{{ l }}</a>{% endfor %}
|
|
</div>
|
|
<div class="card">
|
|
{% if rows %}
|
|
<div class="table-wrap"><table>
|
|
<thead><tr><th>Nummer</th><th>Klant</th><th>Onderwerp</th><th>Datum</th><th>Status</th><th class="num">Totaal incl.</th></tr></thead>
|
|
<tbody>
|
|
{% for qt in rows %}
|
|
<tr class="link" onclick="location='{{ url_for('quote_edit', qid=qt.id) }}'">
|
|
<td><a href="{{ url_for('quote_edit', qid=qt.id) }}">{{ qt.number }}</a></td>
|
|
<td>{{ qt.contact_name or '—' }}</td>
|
|
<td>{{ qt.title }}</td>
|
|
<td>{{ qt.date|dt('%d-%m-%Y') }}</td>
|
|
<td><span class="chip {{ qt.status }}">{{ QSTATUS.get(qt.status, qt.status) }}</span></td>
|
|
<td class="num">{{ qt.total|euro }}</td>
|
|
</tr>
|
|
{% endfor %}
|
|
</tbody>
|
|
</table></div>
|
|
{% else %}<p class="empty">Nog geen offertes.</p>{% endif %}
|
|
</div>
|
|
{% endblock %}
|