App for managing customer incidents, company info, SLA, hardware (stock/inventory), etc. Main language is written in Dutch, but there's partial English support via babel. May or may not be up-to-date all the time. https://raiza.dev/
  • HTML 68.9%
  • Python 30.7%
  • JavaScript 0.2%
  • Dockerfile 0.1%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-09-19 12:37:48 +09:00
app Update: Docker files and support for Redis. 2026-09-19 12:37:48 +09:00
documentations Import project. 2026-08-30 15:56:06 +09:00
migrations Add: vault access logs, in compliance with NIS2/ISO27001. 2026-09-17 17:20:31 +09:00
tests Add: pytest. 2026-09-12 23:20:04 +09:00
.env.example Update: Docker files and support for Redis. 2026-09-19 12:37:48 +09:00
.gitignore Update: add uploads folder to .gitignore. 2026-09-09 22:23:58 +09:00
babel.cfg Import project. 2026-08-30 15:56:06 +09:00
docker-compose.yml Update: Docker files and support for Redis. 2026-09-19 12:37:48 +09:00
Dockerfile Update: Docker files and support for Redis. 2026-09-19 12:37:48 +09:00
LICENSE Initial commit 2026-08-30 08:44:10 +02:00
pytest.ini Add: pytest. 2026-09-12 23:20:04 +09:00
README.md Add: Dockerfile and docker-compose.yml 2026-09-14 20:33:59 +09:00
requirements.txt Update: Docker files and support for Redis. 2026-09-19 12:37:48 +09:00
run.py Update: run.py 2026-09-14 17:44:58 +09:00

📦 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 ./instance en eventuele SSL-certificaten in ./certs blijven 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)

  1. Wis de harde schijf van een uitfaserend apparaat met ShredOS.
  2. Sla de door ShredOS gegenereerde PDF-rapportage op.
  3. Ga in RaiManagement naar Voorraadbeheer (Hardware) > klik op Opties bij het betreffende item.
  4. Upload de PDF onder Documentatie met de titel "Wiscertificaat ShredOS".
  5. Het certificaat is nu juridisch geborgd en direct via de in-app viewer in te zien.

Etiket Afdrukken voor Hardware

  1. Zoek het item op in het hardware-overzicht of scan de bestaande code.
  2. Klik op Opties > Label afdrukken.
  3. Selecteer het etiketformaat van de aangesloten labelprinter (bijv. Niimbot B21 of Dymo 99012).
  4. Druk direct af via de browser.