Khalil Yahyaoui

SEG2505 · Université d'OttawaUniversity of Ottawa

Application de service PC sur demandeOn-Demand PC Service App

Une application Android pour gérer des commandes de PC sur mesure, réalisée en équipe de cinq comme projet final du cours SEG2505 (génie logiciel).

An Android app for managing custom PC build orders, built by a team of five as the final project for SEG2505 (Software Engineering).

Type · Projet de groupe universitaireAcademic group project PlateformePlatform · Android (Java) Backend · Firebase

Le problèmeThe problem

Les ateliers de réparation de PC gèrent leurs commandes entre plusieurs rôles sans système commun. L'inventaire se désynchronise, personne ne sait vraiment où en est une commande, et les passations entre employés se font à la main.

Notre réponse : une application par rôle, où chaque personne ne voit que les écrans dont elle a besoin. Les commandes passent par des états définis, et l'inventaire se met à jour en temps réel via Firestore.

PC repair shops handle orders across several staff roles without a shared system. Inventory drifts out of sync, nobody is sure what state an order is in, and handoffs between people happen by hand.

Our answer was a role-based app where each person only sees the screens they need. Orders move through defined states, and inventory updates in real time through Firestore.

RôlesRoles

AdministrateurAdministrator

Accès complet. Gère les utilisateurs, voit toutes les commandes et peut forcer l'état de n'importe laquelle.

Full access. Manages users, sees every order, can override any order state.

StoreKeeper

Responsable de l'inventaire. Approuve ou refuse les demandes de pièces et met à jour la disponibilité.

Owns the inventory. Approves or rejects part requests and updates availability.

Assembler

Prend en charge les montages, demande des pièces et fait avancer la commande.

Picks up build tasks, requests parts, and moves the build forward.

Requester

Passe des commandes de PC sur mesure et suit leur avancement.

Submits custom build orders and tracks their status.

ArchitectureHow it's built

Trois couches. Une activité par écran (LoginActivity, AdminDashboard, OrderActivity, InventoryActivity) ; une couche logique avec AuthManager, OrderController, InventoryManager et RoleRouter ; et en dessous, Firebase Auth avec deux collections Firestore (commandes et inventaire).

On a tout modélisé en UML avant de coder : un diagramme de classes (un User abstrait avec une sous-classe par rôle, plus Order, Component, Inventory), un diagramme de séquence du parcours complet d'une demande, un diagramme d'activité avec un couloir par rôle, et un diagramme d'états pour le cycle de vie d'une commande :

Three layers. Activities for each screen (LoginActivity, AdminDashboard, OrderActivity, InventoryActivity); a logic layer with AuthManager, OrderController, InventoryManager and RoleRouter; and Firebase Auth plus two Firestore collections (orders and inventory) underneath.

We designed it in UML before writing code: a class diagram (an abstract User with a subclass per role, plus Order, Component, Inventory), a sequence diagram of the full request flow, an activity diagram with one swim-lane per role, and a state diagram for the order lifecycle:

PENDING → APPROVED → IN_PROGRESS → ASSEMBLED → DELIVERED

Extraits de codeSome code

Après la connexion, chaque utilisateur est redirigé vers l'écran de son rôle :

After login, each user is sent to the screen for their role:

RoleRouter.java
public static void routeUser(Context ctx, String role) {
    Intent intent;
    switch (role) {
        case "ADMIN":       intent = new Intent(ctx, AdminActivity.class); break;
        case "STOREKEEPER": intent = new Intent(ctx, StoreKeeperActivity.class); break;
        case "ASSEMBLER":   intent = new Intent(ctx, AssemblerActivity.class); break;
        default:            intent = new Intent(ctx, RequesterActivity.class); break;
    }
    ctx.startActivity(intent);
}

Une nouvelle commande passe à l'état PENDING, et les storekeepers sont notifiés une fois l'écriture confirmée par Firestore :

Submitting an order sets it to PENDING and notifies the storekeepers once Firestore confirms the write:

OrderController.java
public void submitOrder(Order order, String requesterId) {
    order.setStatus(OrderStatus.PENDING);
    order.setRequesterId(requesterId);
    order.setTimestamp(System.currentTimeMillis());
    db.collection("orders")
        .add(order.toMap())
        .addOnSuccessListener(ref -> { order.setId(ref.getId()); notifyStoreKeepers(order); })
        .addOnFailureListener(e -> Log.e(TAG, "Order submit failed", e));
}

Les écrans d'inventaire écoutent Firestore directement : un changement sur un appareil apparaît tout de suite sur les autres.

Inventory screens listen to Firestore directly, so a change on one device shows up on the others right away:

InventoryManager.java
public void listenToInventory(InventoryCallback callback) {
    db.collection("inventory")
        .whereEqualTo("available", true)
        .addSnapshotListener((snapshots, error) -> {
            if (error != null || snapshots == null) return;
            List<Component> items = new ArrayList<>();
            for (QueryDocumentSnapshot doc : snapshots)
                items.add(doc.toObject(Component.class));
            callback.onInventoryUpdated(items);
        });
}

Captures d'écranScreenshots

Login screen
ConnexionLogin
Order dashboard
Tableau des commandesOrder dashboard
StoreKeeper inventory view
Inventaire (StoreKeeper)Inventory (StoreKeeper)
Assembler build queue
File de montage (Assembler)Build queue (Assembler)

RésultatOutcome

  • Application Android fonctionnelle sur un backend Firebase en production, testée avec les quatre rôles.
  • Documentation UML complète (quatre types de diagrammes), validée par le professeur.
  • Équipe de cinq coordonnée avec GitHub et des réunions hebdomadaires.
  • Working Android app on a live Firebase backend, tested with all four roles.
  • Full UML documentation (four diagram types), validated by the course instructor.
  • Five-person team coordinated through GitHub and weekly syncs.

Java · Android Studio · Firebase Auth · Firestore · UML (draw.io) · GitHub

← Retour aux projets← Back to all projects