|
|
|
### iPhone: de iOS-look
De zwevende navigatiebalk met glaseffect. Op het beginscherm geïnstalleerd draait de app schermvullend onder de statusbalk.
| 3D Modellen | Kostprijs | Bestellingen | Filament |
|:---:|:---:|:---:|:---:|
|
|
|
|
|
### Android: de Android-look
De navigatiebalk over de volle breedte met een pil achter het actieve icoon.
| 3D Modellen | Kostprijs | Bestellingen | Filament |
|:---:|:---:|:---:|:---:|
|
|
|
|
|
### Instellingen en je eigen kleur
*Instellingen* is gegroepeerd in *Persoonlijk*, *Gegevens* en *Beheer*, elk onderdeel met een icoon (wat je ziet hangt af van je rol). Op een telefoon vormen de onderdelen een rij die je kunt vegen. Onder *Weergave* kies je de taal, licht of donker en je **accentkleur**: elf voorinstellingen, waaronder bordeaux en grafiet, of een kleur naar keuze. Het hele scherm kleurt mee, niet alleen de knoppen. Onder *Filamenten* klappen de blokken Spoolman en *Importeren en delen* in.
| Weergave: licht, met het standaardpaars | Weergave: donker, met teal |
|:---:|:---:|
|
|
|
| iPhone: instellingen | Android: instellingen |
|:---:|:---:|
|
|
|
### Filament: bibliotheek, import en nieuwe rollen
*Instellingen → Filamenten* bevat de filamentbibliotheek: voeg een filament toe, importeer een Bambu Lab-factuur, importeer of exporteer de bibliotheek als JSON, of synchroniseer haar met GitHub. Onder *Filament → Nieuwe rol* maak je een rol aan, met de hand, door de barcode te scannen of door een filament uit de bibliotheek te kiezen.
| Bibliotheek: import, export en synchronisatie | Nieuwe rol |
|:---:|:---:|
|
|
|
| iPhone: bibliotheek | iPhone: nieuwe rol | Android: bibliotheek | Android: nieuwe rol |
|:---:|:---:|:---:|:---:|
|
|
|
|
|
Onder *Instellingen → Weergave → Navigatiebalk* kies je iOS-achtig of Android-achtig, of laat je de instelling op *Automatisch*: de app herkent het toestel en kiest Android-achtig op Android en iOS-achtig op andere apparaten. Je keuze wordt bij je account bewaard en geldt op al je apparaten. Licht, donker en systeemthema en een eigen accentkleur zitten erbij.
De screenshots tonen demogegevens.
## Waarom 3D Print Pricing?
Wie 3D-prints verkoopt moet weten wat elke print kost: filament per gram, machinetijd, stroom, verpakking en een eerlijk deel van de aanschaf van de printer. Met een spreadsheet kom je een eind, tot de prijzen veranderen, de voorraad ongemerkt opraakt of een klant om een factuur vraagt. 3D Print Pricing houdt prijzen, voorraad en bestellingen bij elkaar op een plek die je zelf host, en werkt op je telefoon net zo goed als aan je bureau.
## Functies
- **Kostprijs in een paar seconden**: filament, onderdelen, accessoires (kabels, laders), printerafschrijving en energie tellen op tot een kostprijs, met optioneel een marge voor een adviesverkoopprijs. Elke regel wordt eerst op hele centen afgerond, zodat de regels op het scherm optellen tot het totaal.
- **Rechtstreeks uit de slicer**: koppel een `.3mf`- of `.stl`-bestand. Een gesliced 3MF (Bambu Studio / Orca) geeft de echte gram per filament en de printtijd, die automatisch in de berekening komen; een STL geeft een schatting van het gewicht.
- **Filamentbibliotheek**: leg de gegevens van de filamenten die je koopt vast (merk, type, kleur, filament-ID van de leverancier, gewicht, diameter, temperaturen, richtprijs), zodat een nieuwe rol zichzelf invult. Voeg een filament met de hand toe via *Filament toevoegen*, of vul de bibliotheek zonder te typen: **importeer** een Bambu Lab-factuur (PDF, inclusief barcodes), **importeer** een JSON-bestand, **voeg de rollen uit je filamentlijst toe** of **synchroniseer** de gedeelde bibliotheek met GitHub, en **draag bij** aan de centrale bibliotheek met een voorgevulde GitHub-issue. **Exporteer** de bibliotheek als JSON om haar te bewaren of naar een andere installatie te verplaatsen. JSON-import en synchroniseren voegen alleen toe en werken bij, verwijderen nooit, en vragen eerst een bevestiging met de aantallen; de bibliotheek bevat nooit twee keer hetzelfde filament en staat los van je voorraad.
- **Filamentvoorraad met barcodescanner**: je rollen met prijs, resterend gewicht, kleur en temperaturen, gegroepeerd per soort. **Maak een nieuwe rol aan** met de hand, door de barcode te scannen (een bekende rol vult zichzelf in), door een filament uit de bibliotheek te kiezen of, bij Bambu Lab, door soort en kleur uit de webshop te kiezen; een nieuwe rol kan zijn filament ook aan de bibliotheek toevoegen. Krijg een melding als een soort bijna op is en boek het verbruik van een berekening met één klik van de voorraad af.
- **Prijzen die blijven staan**: een opgeslagen berekening bewaart de prijzen van het moment van opslaan, dus een latere prijswijziging van een rol herschrijft je geschiedenis niet.
- **Zakelijk bruikbaar**: btw over de verkoopprijs, een marge en een afronding van de prijs per bestelling (op 5/10/50 cent, hele euro's of eindigend op ,95/,99, met je marge als minimum), en een knop om de kosten te blurren als een klant meekijkt.
- **Klanten, bestellingen en facturen**: klanten met klantnummer, bestellingen met meerdere prints, een status van *nieuw* tot *afgehandeld* en een factuur als PDF met je logo, een uniek factuurnummer en een SEPA-betaal-QR. Wil je je eigen briefpapier, dan kan dat als Word- of PDF-sjabloon.
- **Inloggen met passkeys**: geen wachtwoord dat kan lekken. Of een wachtwoord waar een passkey niet kan werken (een IP-adres in je eigen netwerk), optioneel met tweestapsverificatie, en herstelcodes voor noodgevallen.
- **Met meer dan één persoon**: een beheerder nodigt mensen uit met een link voor eenmalig gebruik en iedereen kiest zelf een passkey of wachtwoord, zodat niemand dat van een ander kent. Gewone gebruikers doen het dagelijkse werk; een beheerder beheert ook de gebruikers, de bedrijfsgegevens, back-ups en updates en kan een gewone gebruiker tot beheerder maken.
- **Een echte app op elk apparaat**: te installeren op het beginscherm van iPhone en Android en op de desktop, werkt met de camera en met meldingen, en spreekt Nederlands en Engels.
- **Jouw gegevens, jouw server**: back-up en herstel van alles vanuit de app, en je gegevens blijven op je eigen server. Onder *Instellingen → Systeem* zet je de app ook terug naar een nieuwe installatie: dat verwijdert alles in de database en de uploads (ook de passkeys), na een getypt woord en een verse bevestiging met passkey (of wachtwoord en code), en laat `.env`, de image en `DATA_PATH/backups` staan. Maak eerst een back-up als je het niet zeker weet.
De volledige beschrijving van elke functie staat in de [handleiding](docs/handleiding.md).
## Aan de slag
### Gebruikers
- 🌐 **Web:** open het adres van je eigen installatie. Passkeys vragen https en een domeinnaam.
- 📱 **iPhone / iPad:** zie [Installeren als app](#installeren-als-app).
- 🤖 **Android:** zie [Installeren als app](#installeren-als-app).
- 🐳 **Self-hosted:** zie [Installatie](#installatie-self-hosted).
### Installeren als app
- **Android (Chrome, Edge, Samsung Internet) en desktop:** open het https-adres en kies *Installeer de app* in de melding, of onder *Instellingen → Algemeen → App installeren*. Lang drukken op het icoon geeft snelkoppelingen (nieuwe berekening, filament).
- **iPhone / iPad:** open het https-adres in **Safari → Deel → Zet op beginscherm**. De app start dan schermvullend met een eigen icoon en opstartscherm, zonder pinch-zoom of zijwaarts vegen, als een native app.
### Installatie (self-hosted)
```bash
git clone https://github.com/Flux76HQ/3dprint_pricing.git
cd 3dprint_pricing
python scripts/init_env.py --port 6090 --domain print.voorbeeld.nl # maakt .env met verse geheimen
docker compose up -d
```
`init_env.py` is de makkelijkste weg; `.env.example` kopiëren naar `.env` en aanpassen werkt net zo goed. Een server heeft alleen `docker-compose.yml` en `.env` nodig: de image wordt van `ghcr.io/flux76hq/3dprint_pricing` gepulld. Zonder `--domain` blijven `RP_ID` en `RP_ORIGINS` leeg en volgt de app het adres waarop je hem opent (ook een IP-adres), genoeg om het uit te proberen.
Open daarna het adres en doorloop de onboarding:
1. Vul de **setupcode** en je naam in. De setupcode is de waarde achter `SETUP_CODE=` in het `.env`-bestand op je server (`init_env.py` toonde hem ook; `grep SETUP_CODE .env` toont hem opnieuw). Typ of plak hem in het veld *Setupcode* van het eerste scherm; je hebt hem alleen voor deze eerste keer nodig, daarna log je in met je passkey of wachtwoord. Het onboarding-scherm legt dit ook uit.
2. Kies hoe je inlogt: maak een **passkey** aan (vingerafdruk, gezicht of apparaatcode), of kies **een wachtwoord** (minstens 12 tekens). Werkt een passkey niet op het adres dat je gebruikt (een IP-adres, zonder https), dan zegt het scherm dat en staat het wachtwoord al open.
3. **Bewaar de 8 herstelcodes.** Ze worden één keer getoond en werken elk één keer.
Een wachtwoord werkt op elk adres, ook in je eigen netwerk. Zet voor passkeys, installeren, de camera en meldingen een reverse proxy met TLS voor de app en stel `RP_ID` en `RP_ORIGINS` in op dat domein: ze werken alleen via https (behalve op `localhost`).
### Installatie als Home Assistant-app
Voeg op Home Assistant OS of Supervised `https://github.com/Flux76HQ/3dprint_pricing` toe onder **Instellingen > Apps > App installeren > Repositories** en
installeer *3D Print Pricing*: de app bewaart zijn data (één SQLite-database en de uploads) in de map van de app, die Home Assistant meeneemt in zijn back-ups.
Passkeys vragen nog steeds een domein met https voor de poort van de app, dus vul daarvoor `rp_id` in op het tabblad Configuratie; met een wachtwoord werkt de app ook op `http://