- HTML 68.9%
- Python 30.7%
- JavaScript 0.2%
- Dockerfile 0.1%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| app | ||
| documentations | ||
| migrations | ||
| tests | ||
| .env.example | ||
| .gitignore | ||
| babel.cfg | ||
| docker-compose.yml | ||
| Dockerfile | ||
| LICENSE | ||
| pytest.ini | ||
| README.md | ||
| requirements.txt | ||
| run.py | ||
📦 RaiManagement
RaiManagement is een alles-in-één IT-beheersysteem gebouwd met Python (Flask). Het platform biedt een complete oplossing voor inventarisatie, hardwarebeheer, documentborging, facturatie, licentiebeheer, RMA-trajecten en klantbeheer.
🚀 Kernfunctionaliteiten & Modules
💻 1. Hardware & Inventarisbeheer (app/routes/hardware.py)
- Hiërarchische Categorieën: Onbeperkte sublagen met automatische berekening van voorraad, items in gebruik, defecten en totalen.
- Financiële Afschrijving: Restwaardeberekening en afschrijvingstermijn op basis van aanschafprijs, aanschafdatum en BTW-tarieven (0%, 9%, 21%).
- Status tracking: Beheer items per status (Op voorraad, In gebruik, Defect, Verkocht).
- Klanttoewijzing: Wijs hardware direct toe aan geregistreerde klanten.
📄 2. Hardware Documentatie & Wiscertificaten (app/routes/hardware.py)
- 1-op-Veel Koppeling: Upload onbeperkt handleidingen, facturen of ShredOS / WEEE-wiscertificaten per hardware-item.
- In-App Viewer: Bekijk geüploade PDF- en kantoordocumenten direct via een pop-up viewer met behoud van de schermstatus (modal state persistence).
- Ondersteunde Formaten: PDF, DOCX, DOC, TXT, PNG, JPG.
🏷️ 3. Etiketten & QR-Scanning (app/routes/hardware.py)
- Dynamische QR-Codes: Automatische QR-codegeneratie gekoppeld aan het unieke HW-nummer.
- Webcam Scanner: Ingebouwde camera-scanner in de browser voor directe zoekacties op de werkvloer.
- Labelprinter Presets: Kant-en-klare print-layouts voor:
- Niimbot: B21, B21S, Mini (D11/D110), Standaard, Kabel, Rond.
- Dymo LabelWriter: Standaard (99012), Klein Adres, Badge, Diskette, Verzend, Ordner.
- Brother QL: DK-11201, DK-11209, DK-11204, DK-11208, DK-11202.
- Zebra, Phomemo, Brady & Seiko.
👥 4. Klantenbeheer & Klantenportaal (app/routes/customers.py & app/routes/portal.py)
- Beheer klantgegevens, waaronder klantnummers, bedrijfsnamen, contactpersonen, adressen en postcodes.
- Self-Service Portaal: Klanten kunnen via een eigen inlogomgeving (
/portal) of Magic Links hun incidenten volgen, nieuwe storingen melden per hardware-item en hun beveiliging instellen.
🧾 5. Facturatie & Billing (app/routes/billing.py)
- Factuurgeneratie: Maak facturen aan gekoppeld aan klanten en hardware-items.
- Automatische BTW-berekening: Inclusief ondersteuning voor verlegde of wisselende BTW-tarieven.
- Export & Afdruk: Exporteer facturen naar PDF (
invoice_pdf.html) of gebruik het afdruktemplate (invoice_print.html).
🔑 6. Licentiebeheer (app/routes/licenses.py)
- Registratie van softwarelicenties, licentiesleutels, aantal beschikbare/gebruikte seats en verloopdatums.
- Koppeling tussen licenties en toegewezen gebruikers of apparatuur.
🎟️ 7. Support Tickets (app/routes/tickets.py)
- Ingebouwd incidenten- en helpdesksysteem voor het melden en opvolgen van IT-storingen en verzoeken.
- Interactieve Thread: Directe communicatie en berichtuitwisseling tussen klanten, technici en beheerders.
🛠️ 8. RMA & Reparaties (app/routes/rma.py)
- Registreer retourzendingen en reparatietrajecten bij leveranciers/reparateurs.
- Houd verwachte retourdatums en gedetailleerde probleemomschrijvingen bij.
📜 9. Audit Logging & Mutatiehistorie (app/routes/audit.py)
- Systeembrede audit-logs die elke wijziging (aanmaken, bewerken, verwijderen, statuswijzigingen) vastleggen.
- Tijdlijn-pop-up per hardware-item met vermelding van datum, gebruiker en specifieke mutaties.
👥 10. Admin & RBAC Rollenbeheer (app/routes/admin.py)
- Role-Based Access Control (RBAC): Beheer rollen en permissies via
app/utils/rbac_seed.py. - Gebruikers- en Instellingenbeheer: Beheer gebruikersaccounts, globale categorieën, SMTP-mailers en systeeminstellingen.
📚 11. Kennisbank & Documentatie (app/routes/documentation.py)
- Centrale opslag voor algemene IT-handleidingen, documenten en interne procedures.
📊 12. Rapportages & Integraties (app/routes/reports.py & app/utils/discord.py)
- Rapportage: Genereer overzichten van voorraadstatistieken en inventariswaarden.
- Discord Webhooks: Automatische meldingen naar Discord-kanalen bij belangrijke gebeurtenissen of voorraadalerts.
🛠️ Tech Stack
- Backend: Python 3.13+, Flask, Gevent, Socket.IO, Flask-SQLAlchemy, Flask-Login, Flask-Migrate (Alembic), Flask-Babel.
- Frontend: HTML5, Tailwind CSS, JavaScript (ES6+), Html5Qrcode, Chart.js.
- Media & QR: Pillow (PIL), Python-qrcode.
- Database: SQLite (Default / Dev) / MySQL / PostgreSQL (Production).
- Containerisatie: Docker, Docker Compose.
📁 Projectstructuur
RaiManagement/
├── app/
│ ├── models/ # SQLAlchemy Databasemodellen (Hardware, Customer, Invoice, Ticket, RMA, etc.)
│ ├── routes/ # Flask Blueprints / Controller logica per module
│ ├── services/ # Achtergronddiensten (E-mail, Backup, Magic Link, etc.)
│ ├── static/ # CSS, JS bibliotheken, afbeeldingen en uploadmappen
│ ├── templates/ # Jinja2 HTML Templates (inclusief /portal en /components)
│ ├── translations/ # Meertaligheid (Flask-Babel i18n)
│ └── utils/ # RBAC seeds, Discord webhooks en decorators
├── certs/ # SSL certificaten (cert.pem / key.pem)
├── instance/ # Persistentie voor SQLite database & uploads
├── migrations/ # Alembic database migraties
├── Dockerfile # Docker container definition
├── docker-compose.yml # Docker Compose configuratie
├── run.py # Applicatie startpunt
└── requirements.txt # Python afhankelijkheden
⚙️ Installatie & Deployment
Kies hieronder de installatiemethode die past bij jouw omgeving: via Docker Compose (aanbevolen) of een Lokale Python-omgeving.
🐳 Optie A: Deployment met Docker Compose (Aanbevolen)
Met Docker Compose draai je RaiManagement direct in een container zonder afhankelijkheden lokaal te installeren.
1. Repository klonen & Omgevingsvariabelen instellen
git clone [https://github.com/jouw-organisatie/RaiManagement.git](https://github.com/jouw-organisatie/RaiManagement.git)
cd RaiManagement
# Maak een .env bestand aan op basis van je wensen
cp .env.example .env
2. Container bouwen & opstarten
docker compose up -d --build
De applicatie draait nu in de achtergrond op de poort ingesteld in .env (standaard http://localhost:5000).
3. Database migraties & RBAC Rollen initialiseren
Voer de migraties en eerste seed uit in de draaiende container:
# Database tabellen bijwerken naar nieuwste versie
docker compose exec app flask db upgrade
# Beheerdersrollen en standaard permissies aanmaken
docker compose exec app python -m app.utils.rbac_seed
Veelgebruikte Docker Commando's:
- Logs inzien:
docker compose logs -f - Status bekijken:
docker compose ps - Applicatie herstarten:
docker compose restart - Containers stoppen:
docker compose down
💾 Data Persistentie: De SQLite-database in
./instanceen eventuele SSL-certificaten in./certsblijven behouden op de host, ook wanneer containers opnieuw worden gebouwd.
💻 Optie B: Lokale Virtuele Omgeving (Handmatig)
1. Virtuele Omgeving aanmaken & Activeren
python -m venv .venv
# Activeren op Windows:
.venv\Scripts\activate
# Activeren op Linux/macOS:
source .venv/bin/activate
2. Afhankelijkheden installeren
pip install -r requirements.txt
3. Omgevingsvariabelen & Database instellen
cp .env.example .env
# Migraties uitvoeren
flask db upgrade
# Rollen en permissies laden
python -m app.utils.rbac_seed
4. Applicatie Starten
python run.py
De applicatie is nu bereikbaar via http://127.0.0.1:5000.
🔄 Veelgebruikte Workflows
Wiscertificaat Borging (ShredOS / WEEE)
- Wis de harde schijf van een uitfaserend apparaat met ShredOS.
- Sla de door ShredOS gegenereerde PDF-rapportage op.
- Ga in RaiManagement naar Voorraadbeheer (Hardware) > klik op Opties bij het betreffende item.
- Upload de PDF onder Documentatie met de titel "Wiscertificaat ShredOS".
- Het certificaat is nu juridisch geborgd en direct via de in-app viewer in te zien.
Etiket Afdrukken voor Hardware
- Zoek het item op in het hardware-overzicht of scan de bestaande code.
- Klik op Opties > Label afdrukken.
- Selecteer het etiketformaat van de aangesloten labelprinter (bijv. Niimbot B21 of Dymo 99012).
- Druk direct af via de browser.