187 lines
4.3 KiB
TypeScript
187 lines
4.3 KiB
TypeScript
import {
|
|
ActiviteResponsable,
|
|
EmpruntResponsable,
|
|
MaterielResponsable,
|
|
StatutCount,
|
|
} from '../repositories/responsable.repository';
|
|
import { DashboardResponsableData } from '../services/responsable.service';
|
|
|
|
export interface RepartitionStatutResponse {
|
|
total: number;
|
|
parStatut: Record<string, number>;
|
|
}
|
|
|
|
export interface ActiviteResponsableResponse {
|
|
id: number;
|
|
action: string;
|
|
description: string;
|
|
dateAction: Date;
|
|
utilisateur: {
|
|
id: number;
|
|
nom: string;
|
|
prenom: string;
|
|
};
|
|
materiel: {
|
|
id: number;
|
|
nom: string;
|
|
reference: string;
|
|
} | null;
|
|
empruntId: number | null;
|
|
}
|
|
|
|
export interface DashboardResponsableResponse {
|
|
kpis: {
|
|
materiels: RepartitionStatutResponse;
|
|
emprunts: RepartitionStatutResponse;
|
|
anomalies: RepartitionStatutResponse;
|
|
notificationsNonLues: number;
|
|
};
|
|
activiteRecente: ActiviteResponsableResponse[];
|
|
}
|
|
|
|
export interface EmpruntResponsableResponse {
|
|
id: number;
|
|
statut: string;
|
|
dateEmprunt: Date;
|
|
dateRetourPrevue: Date;
|
|
dateRetourReelle: Date | null;
|
|
etudiant: {
|
|
id: number;
|
|
nom: string;
|
|
prenom: string;
|
|
email: string;
|
|
classe: string | null;
|
|
};
|
|
materiel: {
|
|
id: number;
|
|
nom: string;
|
|
reference: string;
|
|
statut: string;
|
|
categorie: {
|
|
id: number;
|
|
nom: string;
|
|
};
|
|
};
|
|
}
|
|
|
|
export interface MaterielResponsableResponse {
|
|
id: number;
|
|
nom: string;
|
|
marque: string;
|
|
modele: string;
|
|
reference: string;
|
|
statut: string;
|
|
etatGeneral: string;
|
|
categorie: {
|
|
id: number;
|
|
nom: string;
|
|
};
|
|
accessoires: Array<{
|
|
id: number;
|
|
nom: string;
|
|
quantiteAttendue: number;
|
|
obligatoire: boolean;
|
|
}>;
|
|
}
|
|
|
|
function toRepartition(rows: StatutCount[]): RepartitionStatutResponse {
|
|
const parStatut: Record<string, number> = {};
|
|
let total = 0;
|
|
|
|
for (const row of rows) {
|
|
parStatut[row.statut] = row.count;
|
|
total += row.count;
|
|
}
|
|
|
|
return { total, parStatut };
|
|
}
|
|
|
|
function toActiviteResponse(activite: ActiviteResponsable): ActiviteResponsableResponse {
|
|
return {
|
|
id: activite.id,
|
|
action: activite.action,
|
|
description: activite.description,
|
|
dateAction: activite.dateAction,
|
|
utilisateur: {
|
|
id: activite.utilisateur.id,
|
|
nom: activite.utilisateur.nom,
|
|
prenom: activite.utilisateur.prenom,
|
|
},
|
|
materiel: activite.materiel
|
|
? {
|
|
id: activite.materiel.id,
|
|
nom: activite.materiel.nom,
|
|
reference: activite.materiel.reference,
|
|
}
|
|
: null,
|
|
empruntId: activite.empruntId,
|
|
};
|
|
}
|
|
|
|
export function toDashboardResponsableResponse(
|
|
data: DashboardResponsableData,
|
|
): DashboardResponsableResponse {
|
|
return {
|
|
kpis: {
|
|
materiels: toRepartition(data.materiels),
|
|
emprunts: toRepartition(data.emprunts),
|
|
anomalies: toRepartition(data.anomalies),
|
|
notificationsNonLues: data.notificationsNonLues,
|
|
},
|
|
activiteRecente: data.activiteRecente.map(toActiviteResponse),
|
|
};
|
|
}
|
|
|
|
export function toEmpruntResponsableResponse(
|
|
emprunt: EmpruntResponsable,
|
|
): EmpruntResponsableResponse {
|
|
return {
|
|
id: emprunt.id,
|
|
statut: emprunt.statut,
|
|
dateEmprunt: emprunt.dateEmprunt,
|
|
dateRetourPrevue: emprunt.dateRetourPrevue,
|
|
dateRetourReelle: emprunt.dateRetourReelle,
|
|
etudiant: {
|
|
id: emprunt.utilisateur.id,
|
|
nom: emprunt.utilisateur.nom,
|
|
prenom: emprunt.utilisateur.prenom,
|
|
email: emprunt.utilisateur.email,
|
|
classe: emprunt.utilisateur.classe,
|
|
},
|
|
materiel: {
|
|
id: emprunt.materiel.id,
|
|
nom: emprunt.materiel.nom,
|
|
reference: emprunt.materiel.reference,
|
|
statut: emprunt.materiel.statut,
|
|
categorie: {
|
|
id: emprunt.materiel.categorie.id,
|
|
nom: emprunt.materiel.categorie.nom,
|
|
},
|
|
},
|
|
};
|
|
}
|
|
|
|
export function toMaterielResponsableResponse(
|
|
materiel: MaterielResponsable,
|
|
): MaterielResponsableResponse {
|
|
return {
|
|
id: materiel.id,
|
|
nom: materiel.nom,
|
|
marque: materiel.marque,
|
|
modele: materiel.modele,
|
|
reference: materiel.reference,
|
|
statut: materiel.statut,
|
|
etatGeneral: materiel.etatGeneral,
|
|
categorie: {
|
|
id: materiel.categorie.id,
|
|
nom: materiel.categorie.nom,
|
|
},
|
|
accessoires: materiel.accessoires.map((liaison) => ({
|
|
id: liaison.accessoire.id,
|
|
nom: liaison.accessoire.nom,
|
|
quantiteAttendue: liaison.quantiteAttendue,
|
|
obligatoire: liaison.obligatoire,
|
|
})),
|
|
};
|
|
}
|