Tableau de bord Ones
Accès rapide aux modules de gestion — clique sur une entrée pour ouvrir l'écran correspondant. Les entrées marquées « Bientôt » sont en cours de développement.
Transitaires & dossiers
Le dossier ouvre le process : l'arrivage vit dedans. Toute moto d'un arrivage est rattachée à son dossier, et donc à son transitaire.
| Nom | Prénoms | Téléphone | N° CNIB | État | Dossiers | En cours | Solde dû | |
|---|---|---|---|---|---|---|---|---|
| {{ t.nom }} | {{ t.prenoms || '—' }} | {{ t.telephone || '—' }} | {{ t.cnib || '—' }} | {{ t.actif ? 'Actif' : 'Suspendu' }} | {{ t.nb_dossiers }} | {{ t.nb_dossiers_en_cours }} | {{ fmtMoney(t.solde_du) }} |
|
| Aucun transitaire enregistré. Commencez par « + Nouveau transitaire ». | ||||||||
| N° dossier | Transitaire | Ouvert le | Statut | N° BL | Arrivages | Motos | Montant estimé | Solde dû | |
|---|---|---|---|---|---|---|---|---|---|
| {{ d.numero_dossier || ('Dossier #' + d.id) }} | {{ d.transitaire_libelle || '— à affecter —' }} | {{ fmtDate(d.date_ouverture) }} | {{ d.statut }} | {{ d.num_bl || '—' }} | {{ d.nb_arrivages }} | {{ d.nb_motos }} | {{ fmtMoney(d.montant_estime) }} | {{ fmtMoney(d.solde_du) }} |
|
| Aucun dossier pour ce filtre. Ouvrez-en un avec « + Nouveau dossier ». | |||||||||
| Date | Type | Nature | Transitaire | Dossier | Montant | Motif |
|---|---|---|---|---|---|---|
| {{ fmtDate(t.date_op) }} | {{ sensTransaction(t) }} | {{ t.nature }} | {{ t.transitaire_libelle || '—' }} | {{ t.dossier_numero || ('Dossier #' + t.dossier_id) }} | {{ fmtMoney(t.montant) }} | {{ t.motif || '—' }} |
| Aucune transaction pour ce filtre. Saisissez-en une avec « + Nouvelle transaction ». | ||||||
Nouvel arrivage
Saisis le lot reçu — le total se calcule automatiquement, ligne par ligne.
| Date arrivage | N° BL | Fournisseur | Type | Pièce jointe | Motos | Revient | Vente | Marge |
|---|---|---|---|---|---|---|---|---|
| {{ fmtDate(a.date) }} | {{ a.num_bl || '—' }} | {{ a.fournisseur }} | {{ a.type_arrivage || '—' }} | 📎 {{ a.piece_jointe }} — | {{ a.total_motos ?? 0 }} | {{ fmtMoney(a.total_arr) }} | {{ fmtMoney(a.total_vente) }} | {{ fmtMoney(a.total_marge) }} |
|
API injoignable
Démarre le backend sur localhost:8001 pour charger les arrivages.
Aucun arrivage enregistré
Les lots validés apparaîtront ici.
|
||||||||
Parc des motos
Recherche instantanée par marque, modèle ou numéro de série.
| Série / Châssis | Marque | Modèle | Couleur | Arrivage | Date arrivage | Fournisseur | N° BL | Transitaire | Type | Lieu | Qté | RU | Prix achat | Prix vente | Marge | Montant $ | Taux | Total FCFA | Frais | Pièce jointe | Statut | Observation |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| {{ v.serie }} | {{ v.marque || '—' }} | {{ v.modele || v.cod_typ || '—' }} | {{ v.couleur || '—' }} | {{ v.numero_arr ?? '—' }} | {{ v.date_arr ? fmtDate(v.date_arr) : '—' }} | {{ v.code_fournisseur || '—' }} | {{ v.num_bl || '—' }} | {{ v.transitaire || '—' }}{{ v.dossier }} | {{ v.type_arrivage || '—' }} | {{ v.depot || '—' }} | {{ v.nb }} | {{ v.ru ? fmtMoney(v.ru) : '—' }} | {{ fmtMoney(v.prix_achat) }} | {{ fmtMoney(v.prix_vente) }} | {{ fmtMoney((v.prix_vente ?? 0) - (v.prix_achat ?? 0)) }} | {{ v.mt ? fmtMoney(v.mt) : '—' }} | {{ v.tx || '—' }} | {{ v.mt1 ? fmtMoney(v.mt1) : '—' }} | {{ v.frais ? fmtMoney(v.frais) : '—' }} | 📎 {{ v.piece_jointe }}— | SORTI EN STOCK | {{ v.observation || '—' }} |
|
API injoignable
Démarre le backend sur localhost:8001 pour charger le stock.
Aucun véhicule trouvé
Élargis ou vide les filtres pour voir le parc.
|
||||||||||||||||||||||
Vendre une moto
{{ voirAchat ? 'Le contrôle PMINI protège ta marge — aucun prix sous le seuil ne passe.' : 'Le contrôle PMINI — aucun prix sous le seuil ne passe.' }}
Vue d'ensemble
Indicateurs clés du parc : stock, sorties, valeur et tendances d'arrivages.
Utilisateurs & accès
Gère les comptes de l'équipe, les lieux de stockage et les fournisseurs — rôles, suspension et suppression. Réservé à l'administrateur.
| Nom | Rôle | Statut | Actions | |
|---|---|---|---|---|
| {{ u.email }} | {{ u.nom || '—' }} | {{ roleLabel(u.role) }} | ACTIF SUSPENDU |
|
|
Aucun utilisateur
Les comptes créés apparaîtront ici.
|
||||
| Type | Nom | Statut | Actions |
|---|---|---|---|
| {{ typeLieuLabel(l.type_lieu) }} | {{ l.nom }} | ACTIF SUSPENDU |
|
|
Aucun lieu
Les entrepôts et magasins créés apparaîtront ici.
|
|||
| Désignation | Contact | Type | Actions |
|---|---|---|---|
| {{ f.designation || '—' }} | {{ f.contact || '—' }} | {{ f.type_fournisseur || '—' }} |
|
|
Aucun fournisseur
Les fournisseurs créés apparaîtront ici.
|
|||
Suivi de chantier
L'avancement réel du chantier : chaque tâche livrée, sa durée estimée, sa durée réelle et l'écart au plan. Uniquement des tâches et des jours ouvrés — aucun montant.
{{ suiviErreur }}
| Tâche | Libellé | Estimé | Révisé | Réel | Écart | État | Déployé le | |
|---|---|---|---|---|---|---|---|---|
| {{ t.code || '—' }} |
{{ t.titre }}
Au-delà du plan annoncé
Estimation revue — {{ t.estime_revise_motif }}
|
{{ fmtJours(t.jours_estimes_initial) }} | {{ t.estime_revise_le ? fmtJours(t.jours_estimes) : '—' }} | {{ fmtJours(t.jours_reels) }} |
{{ t.jours_reels || t.couleur ? fmtEcartPct(t.ecart_pct) : '—' }}
{{ suiviCouleurLibelle(t.couleur) }}
|
{{ suiviStatutLibelle(t.statut) }} | {{ (t.deploye_le || '').slice(0, 10) || '—' }} |
|
Aucune tâche ne correspond aux filtres. Lot livré avant ce plan : aucune sous-tâche à suivre.
| Date | Objet | Type | Jours | Motif | Auteur | |
|---|---|---|---|---|---|---|
| {{ r.date_releve }} | {{ suiviTacheParId(r.tache_id) ? suiviLibelleTache(suiviTacheParId(r.tache_id).tache) : ('Tâche ' + r.tache_id) }} {{ r.libelle || 'Imprévu' }} | {{ r.type === 'imprevu' ? 'Imprévu' : 'Travail' }} | {{ fmtJours(r.jours) }} | {{ r.motif }} | {{ r.auteur || '—' }} | |
| Aucun relevé pour l'instant. | ||||||
Journal d'activité
Historique en lecture seule (append-only) : connexions, arrivages, ventes, imports et gestion des comptes.
| Quand | Qui | Action | Entité | Détails |
|---|---|---|---|---|
| {{ fmtDateTime(l.created_at) }} | {{ l.user_email || '—' }} | {{ actionLabel(l.action) }} | {{ l.entite || '—' }} #{{ l.entite_id }} | {{ fmtDetails(l.details) }} |
|
Aucune entrée de journal
Essaie d'élargir ou de réinitialiser les filtres.
|
||||