Files
crm/templates/auth.html
T
MachielandClaude Opus 5.5 bffa053c05 v0.0.1: eerste versie van de Van Emous CRM
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>
2026-10-14 21:56:55 +02:00

34 lines
1.8 KiB
HTML

{% extends 'base.html' %}
{% set titles = {'setup': 'Welkom', 'login': 'Inloggen', 'portal_login': 'Klantportaal', 'invite': 'Wachtwoord instellen'} %}
{% block title %}{{ titles[mode] }}{% endblock %}
{% block body %}
<div class="auth">
<img src="{{ url_for('static', filename='logo.svg') }}" alt="Van Emous">
{% with msgs = get_flashed_messages(with_categories=true) %}
{% for cat, m in msgs %}<div class="flash {{ cat }}">{{ m }}</div>{% endfor %}
{% endwith %}
<div class="card">
<form method="post">
<h1>{{ titles[mode] }}</h1>
{% if mode == 'setup' %}
<p class="muted">Maak het eerste beheerdersaccount aan.</p>
<label for="name">Naam</label><input id="name" name="name" required autofocus>
<label for="email" style="margin-top:1rem">E-mailadres</label><input id="email" type="email" name="email" required>
{% elif mode == 'invite' %}
<p class="muted">Welkom {{ c.name }}. Kies een wachtwoord voor het klantportaal. Daarna logt u in met {{ c.email }}.</p>
{% else %}
{% if mode == 'portal_login' %}<p class="muted">Bekijk uw offertes en deel bestanden met ons.</p>{% endif %}
<label for="email">E-mailadres</label><input id="email" type="email" name="email" required autofocus>
{% endif %}
<label for="pw" style="margin-top:1rem">Wachtwoord</label>
<input id="pw" type="password" name="password" {{ 'minlength=8' if mode in ('setup', 'invite') }} required>
{% if mode in ('setup', 'invite') %}
<label for="pw2" style="margin-top:1rem">Herhaal wachtwoord</label>
<input id="pw2" type="password" name="password2" minlength="8" required>
{% endif %}
<div class="actions"><button class="btn">{{ 'Inloggen' if mode in ('login', 'portal_login') else 'Opslaan en doorgaan' }}</button></div>
</form>
</div>
</div>
{% endblock %}