Gestion d'emprunt de matériel — TFE

Synthèse du projet — application pour gérer les prêts, l'état matériel, les notifications et les sauvegardes

1. Contexte et objectif du projet

Résumé

L'école met à disposition du matériel (informatique et fournitures) empruntable par les élèves et enseignants. L'application vise à gérer les utilisateurs, suivre l'état du matériel (neuf / mauvais état), détecter les retards, générer des amendes et centraliser les informations dans une base de données sécurisée et sauvegardée régulièrement.

Objectifs détaillés

  • Faciliter la gestion des emprunts et des retours.
  • Réduire les pertes et retards.
  • Suivi précis de l'état et de l'utilisation du matériel.
  • Système de notifications automatiques (retards) et génération d'amendes.
  • Sauvegarde régulière et sécurisée des données (résilience).

2. Impératifs du projet

Le projet couvre les domaines demandés par le jury TFE.

DomaineLivrable / exigence
Systèmes d'exploitationScript de sauvegarde automatique (cron / service)
Structure matérielle & logicielleBase de données SQLite (intégrée à l'application Python)
Réseaux informatiquesServeur NAS pour centralisation et partage des sauvegardes
Informatique embarquéeInterface Python (application principale côté client / GUI ou CLI)

Fonctionnalités proposées

  • Gestion des utilisateurs (élèves, professeurs, admins).
  • Inventaire des matériels avec état, photos et historique.
  • Emprunt / retour avec date prévue et état au prêt / retour.
  • Notifications automatiques par e-mail (ou alertes internes) pour les retards.
  • Génération d'amendes en cas de non‑respect des délais.
  • Historique et rapports exportables (CSV / PDF).
  • Sauvegardes régulières vers le NAS et versioning des dumps SQLite.

Architecture technique (proposition)

Voici une architecture simple et robuste adaptée aux contraintes :

  1. Frontend / Interface : Application Python (Tkinter ou Flask + interface web légère) utilisée par les utilisateurs.
  2. Base de données : SQLite stockée sur une machine centrale ou sur le NAS (avec accès contrôlé).
  3. Partage & sauvegarde : Serveur NAS monté via SMB/NFS ; script de sauvegarde qui fait des dumps périodiques et copie vers NAS.
  4. Notifications : Service périodique (cron) qui vérifie les emprunts en retard et envoie des e-mails ou ajoute des pénalités.
  5. Sécurité : sauvegardes chiffrées, permissions d'accès restreintes, logs d'audit.

Exemple de schéma de base (simplifié)

-- tables principales (SQLite)
CREATE TABLE users (
  id INTEGER PRIMARY KEY,
  role TEXT NOT NULL, -- student, teacher, admin
  name TEXT NOT NULL,
  email TEXT UNIQUE
);

CREATE TABLE items (
  id INTEGER PRIMARY KEY,
  code TEXT UNIQUE,
  name TEXT,
  category TEXT,
  status TEXT, -- neuf, bon, mauvais
  notes TEXT
);

CREATE TABLE loans (
  id INTEGER PRIMARY KEY,
  user_id INTEGER,
  item_id INTEGER,
  date_out TEXT,
  date_due TEXT,
  date_returned TEXT,
  fine_amount REAL DEFAULT 0,
  FOREIGN KEY(user_id) REFERENCES users(id),
  FOREIGN KEY(item_id) REFERENCES items(id)
);
          
NB: adapter les types / contraintes selon les besoins et indexer les colonnes fréquemment interrogées.

Exemples de scripts & modules

1) Script de sauvegarde (bash)

#!/bin/bash
# dump sqlite et copie vers NAS
DB_PATH="/srv/app/data/database.db"
DUMP_DIR="/tmp/db_dumps"
NAS_DIR="/mnt/nas/backups/tfe_loans"

mkdir -p "$DUMP_DIR"
DUMP_FILE="$DUMP_DIR/db_$(date +%F_%H%M).sqlite"

sqlite3 "$DB_PATH" ".backup '$DUMP_FILE'"
# verification/rotation
rsync -av --delete "$DUMP_DIR/" "$NAS_DIR/"
# (optionnel) chiffrer le dump avec gpg
          

2) Vérification des retards (Python - cron job)

from datetime import date, datetime
import sqlite3

conn = sqlite3.connect('/srv/app/data/database.db')
cur = conn.cursor()
cur.execute("SELECT loans.id, users.email, items.name, loans.date_due FROM loans JOIN users ON loans.user_id=users.id JOIN items ON loans.item_id=items.id WHERE loans.date_returned IS NULL")
for loan in cur.fetchall():
    loan_id, email, item_name, date_due = loan
    due = datetime.fromisoformat(date_due).date()
    if due < date.today():
        # envoyer notification / calculer amende
        pass
          
Ces scripts sont des points de départ — je peux fournir des versions complètes prêtes à l'emploi.

Prochaines livraisons possibles

Je peux produire directement, sur demande :

Si vous le souhaitez, je peux générer un squelette d'application Python et le SQL de création des tables dans la prochaine étape.