439 lines
10 KiB
Dart
439 lines
10 KiB
Dart
import 'package:equatable/equatable.dart';
|
|
import '../../../domain/entities/evaluation_aide.dart';
|
|
|
|
/// Événements pour la gestion des évaluations d'aide
|
|
///
|
|
/// Ces événements représentent toutes les actions possibles
|
|
/// que l'utilisateur peut effectuer sur les évaluations d'aide.
|
|
abstract class EvaluationsEvent extends Equatable {
|
|
const EvaluationsEvent();
|
|
|
|
@override
|
|
List<Object?> get props => [];
|
|
}
|
|
|
|
/// Événement pour charger les évaluations
|
|
class ChargerEvaluationsEvent extends EvaluationsEvent {
|
|
final String? demandeId;
|
|
final String? evaluateurId;
|
|
final TypeEvaluateur? typeEvaluateur;
|
|
final StatutAide? decision;
|
|
final bool forceRefresh;
|
|
|
|
const ChargerEvaluationsEvent({
|
|
this.demandeId,
|
|
this.evaluateurId,
|
|
this.typeEvaluateur,
|
|
this.decision,
|
|
this.forceRefresh = false,
|
|
});
|
|
|
|
@override
|
|
List<Object?> get props => [
|
|
demandeId,
|
|
evaluateurId,
|
|
typeEvaluateur,
|
|
decision,
|
|
forceRefresh,
|
|
];
|
|
}
|
|
|
|
/// Événement pour charger plus d'évaluations (pagination)
|
|
class ChargerPlusEvaluationsEvent extends EvaluationsEvent {
|
|
const ChargerPlusEvaluationsEvent();
|
|
}
|
|
|
|
/// Événement pour créer une nouvelle évaluation
|
|
class CreerEvaluationEvent extends EvaluationsEvent {
|
|
final EvaluationAide evaluation;
|
|
|
|
const CreerEvaluationEvent({required this.evaluation});
|
|
|
|
@override
|
|
List<Object> get props => [evaluation];
|
|
}
|
|
|
|
/// Événement pour mettre à jour une évaluation
|
|
class MettreAJourEvaluationEvent extends EvaluationsEvent {
|
|
final EvaluationAide evaluation;
|
|
|
|
const MettreAJourEvaluationEvent({required this.evaluation});
|
|
|
|
@override
|
|
List<Object> get props => [evaluation];
|
|
}
|
|
|
|
/// Événement pour obtenir une évaluation spécifique
|
|
class ObtenirEvaluationEvent extends EvaluationsEvent {
|
|
final String evaluationId;
|
|
|
|
const ObtenirEvaluationEvent({required this.evaluationId});
|
|
|
|
@override
|
|
List<Object> get props => [evaluationId];
|
|
}
|
|
|
|
/// Événement pour soumettre une évaluation
|
|
class SoumettreEvaluationEvent extends EvaluationsEvent {
|
|
final String evaluationId;
|
|
|
|
const SoumettreEvaluationEvent({required this.evaluationId});
|
|
|
|
@override
|
|
List<Object> get props => [evaluationId];
|
|
}
|
|
|
|
/// Événement pour approuver une évaluation
|
|
class ApprouverEvaluationEvent extends EvaluationsEvent {
|
|
final String evaluationId;
|
|
final String? commentaire;
|
|
|
|
const ApprouverEvaluationEvent({
|
|
required this.evaluationId,
|
|
this.commentaire,
|
|
});
|
|
|
|
@override
|
|
List<Object?> get props => [evaluationId, commentaire];
|
|
}
|
|
|
|
/// Événement pour rejeter une évaluation
|
|
class RejeterEvaluationEvent extends EvaluationsEvent {
|
|
final String evaluationId;
|
|
final String motifRejet;
|
|
|
|
const RejeterEvaluationEvent({
|
|
required this.evaluationId,
|
|
required this.motifRejet,
|
|
});
|
|
|
|
@override
|
|
List<Object> get props => [evaluationId, motifRejet];
|
|
}
|
|
|
|
/// Événement pour rechercher des évaluations
|
|
class RechercherEvaluationsEvent extends EvaluationsEvent {
|
|
final String? demandeId;
|
|
final String? evaluateurId;
|
|
final TypeEvaluateur? typeEvaluateur;
|
|
final StatutAide? decision;
|
|
final DateTime? dateDebut;
|
|
final DateTime? dateFin;
|
|
final double? noteMin;
|
|
final double? noteMax;
|
|
final String? motCle;
|
|
final int page;
|
|
final int taille;
|
|
|
|
const RechercherEvaluationsEvent({
|
|
this.demandeId,
|
|
this.evaluateurId,
|
|
this.typeEvaluateur,
|
|
this.decision,
|
|
this.dateDebut,
|
|
this.dateFin,
|
|
this.noteMin,
|
|
this.noteMax,
|
|
this.motCle,
|
|
this.page = 0,
|
|
this.taille = 20,
|
|
});
|
|
|
|
@override
|
|
List<Object?> get props => [
|
|
demandeId,
|
|
evaluateurId,
|
|
typeEvaluateur,
|
|
decision,
|
|
dateDebut,
|
|
dateFin,
|
|
noteMin,
|
|
noteMax,
|
|
motCle,
|
|
page,
|
|
taille,
|
|
];
|
|
}
|
|
|
|
/// Événement pour charger mes évaluations
|
|
class ChargerMesEvaluationsEvent extends EvaluationsEvent {
|
|
final String evaluateurId;
|
|
|
|
const ChargerMesEvaluationsEvent({required this.evaluateurId});
|
|
|
|
@override
|
|
List<Object> get props => [evaluateurId];
|
|
}
|
|
|
|
/// Événement pour charger les évaluations en attente
|
|
class ChargerEvaluationsEnAttenteEvent extends EvaluationsEvent {
|
|
final String? evaluateurId;
|
|
final TypeEvaluateur? typeEvaluateur;
|
|
|
|
const ChargerEvaluationsEnAttenteEvent({
|
|
this.evaluateurId,
|
|
this.typeEvaluateur,
|
|
});
|
|
|
|
@override
|
|
List<Object?> get props => [evaluateurId, typeEvaluateur];
|
|
}
|
|
|
|
/// Événement pour valider une évaluation
|
|
class ValiderEvaluationEvent extends EvaluationsEvent {
|
|
final EvaluationAide evaluation;
|
|
|
|
const ValiderEvaluationEvent({required this.evaluation});
|
|
|
|
@override
|
|
List<Object> get props => [evaluation];
|
|
}
|
|
|
|
/// Événement pour calculer la note globale
|
|
class CalculerNoteGlobaleEvent extends EvaluationsEvent {
|
|
final Map<String, double> criteres;
|
|
|
|
const CalculerNoteGlobaleEvent({required this.criteres});
|
|
|
|
@override
|
|
List<Object> get props => [criteres];
|
|
}
|
|
|
|
/// Événement pour filtrer les évaluations localement
|
|
class FiltrerEvaluationsEvent extends EvaluationsEvent {
|
|
final TypeEvaluateur? typeEvaluateur;
|
|
final StatutAide? decision;
|
|
final double? noteMin;
|
|
final double? noteMax;
|
|
final String? motCle;
|
|
final DateTime? dateDebut;
|
|
final DateTime? dateFin;
|
|
|
|
const FiltrerEvaluationsEvent({
|
|
this.typeEvaluateur,
|
|
this.decision,
|
|
this.noteMin,
|
|
this.noteMax,
|
|
this.motCle,
|
|
this.dateDebut,
|
|
this.dateFin,
|
|
});
|
|
|
|
@override
|
|
List<Object?> get props => [
|
|
typeEvaluateur,
|
|
decision,
|
|
noteMin,
|
|
noteMax,
|
|
motCle,
|
|
dateDebut,
|
|
dateFin,
|
|
];
|
|
}
|
|
|
|
/// Événement pour trier les évaluations
|
|
class TrierEvaluationsEvent extends EvaluationsEvent {
|
|
final TriEvaluations critere;
|
|
final bool croissant;
|
|
|
|
const TrierEvaluationsEvent({
|
|
required this.critere,
|
|
this.croissant = true,
|
|
});
|
|
|
|
@override
|
|
List<Object> get props => [critere, croissant];
|
|
}
|
|
|
|
/// Événement pour rafraîchir les évaluations
|
|
class RafraichirEvaluationsEvent extends EvaluationsEvent {
|
|
const RafraichirEvaluationsEvent();
|
|
}
|
|
|
|
/// Événement pour réinitialiser l'état
|
|
class ReinitialiserEvaluationsEvent extends EvaluationsEvent {
|
|
const ReinitialiserEvaluationsEvent();
|
|
}
|
|
|
|
/// Événement pour sélectionner/désélectionner une évaluation
|
|
class SelectionnerEvaluationEvent extends EvaluationsEvent {
|
|
final String evaluationId;
|
|
final bool selectionne;
|
|
|
|
const SelectionnerEvaluationEvent({
|
|
required this.evaluationId,
|
|
required this.selectionne,
|
|
});
|
|
|
|
@override
|
|
List<Object> get props => [evaluationId, selectionne];
|
|
}
|
|
|
|
/// Événement pour sélectionner/désélectionner toutes les évaluations
|
|
class SelectionnerToutesEvaluationsEvent extends EvaluationsEvent {
|
|
final bool selectionne;
|
|
|
|
const SelectionnerToutesEvaluationsEvent({required this.selectionne});
|
|
|
|
@override
|
|
List<Object> get props => [selectionne];
|
|
}
|
|
|
|
/// Événement pour supprimer des évaluations sélectionnées
|
|
class SupprimerEvaluationsSelectionnees extends EvaluationsEvent {
|
|
final List<String> evaluationIds;
|
|
|
|
const SupprimerEvaluationsSelectionnees({required this.evaluationIds});
|
|
|
|
@override
|
|
List<Object> get props => [evaluationIds];
|
|
}
|
|
|
|
/// Événement pour exporter des évaluations
|
|
class ExporterEvaluationsEvent extends EvaluationsEvent {
|
|
final List<String> evaluationIds;
|
|
final FormatExport format;
|
|
|
|
const ExporterEvaluationsEvent({
|
|
required this.evaluationIds,
|
|
required this.format,
|
|
});
|
|
|
|
@override
|
|
List<Object> get props => [evaluationIds, format];
|
|
}
|
|
|
|
/// Événement pour obtenir les statistiques d'évaluation
|
|
class ObtenirStatistiquesEvaluationEvent extends EvaluationsEvent {
|
|
final String? evaluateurId;
|
|
final DateTime? dateDebut;
|
|
final DateTime? dateFin;
|
|
|
|
const ObtenirStatistiquesEvaluationEvent({
|
|
this.evaluateurId,
|
|
this.dateDebut,
|
|
this.dateFin,
|
|
});
|
|
|
|
@override
|
|
List<Object?> get props => [evaluateurId, dateDebut, dateFin];
|
|
}
|
|
|
|
/// Événement pour signaler une évaluation
|
|
class SignalerEvaluationEvent extends EvaluationsEvent {
|
|
final String evaluationId;
|
|
final String motifSignalement;
|
|
final String? description;
|
|
|
|
const SignalerEvaluationEvent({
|
|
required this.evaluationId,
|
|
required this.motifSignalement,
|
|
this.description,
|
|
});
|
|
|
|
@override
|
|
List<Object?> get props => [evaluationId, motifSignalement, description];
|
|
}
|
|
|
|
/// Énumération pour les critères de tri
|
|
enum TriEvaluations {
|
|
dateEvaluation,
|
|
dateCreation,
|
|
noteGlobale,
|
|
decision,
|
|
evaluateur,
|
|
typeEvaluateur,
|
|
demandeId,
|
|
}
|
|
|
|
/// Énumération pour les formats d'export
|
|
enum FormatExport {
|
|
pdf,
|
|
excel,
|
|
csv,
|
|
json,
|
|
}
|
|
|
|
/// Extension pour obtenir le libellé des critères de tri
|
|
extension TriEvaluationsExtension on TriEvaluations {
|
|
String get libelle {
|
|
switch (this) {
|
|
case TriEvaluations.dateEvaluation:
|
|
return 'Date d\'évaluation';
|
|
case TriEvaluations.dateCreation:
|
|
return 'Date de création';
|
|
case TriEvaluations.noteGlobale:
|
|
return 'Note globale';
|
|
case TriEvaluations.decision:
|
|
return 'Décision';
|
|
case TriEvaluations.evaluateur:
|
|
return 'Évaluateur';
|
|
case TriEvaluations.typeEvaluateur:
|
|
return 'Type d\'évaluateur';
|
|
case TriEvaluations.demandeId:
|
|
return 'Demande';
|
|
}
|
|
}
|
|
|
|
String get icone {
|
|
switch (this) {
|
|
case TriEvaluations.dateEvaluation:
|
|
return 'calendar_today';
|
|
case TriEvaluations.dateCreation:
|
|
return 'schedule';
|
|
case TriEvaluations.noteGlobale:
|
|
return 'star';
|
|
case TriEvaluations.decision:
|
|
return 'gavel';
|
|
case TriEvaluations.evaluateur:
|
|
return 'person';
|
|
case TriEvaluations.typeEvaluateur:
|
|
return 'badge';
|
|
case TriEvaluations.demandeId:
|
|
return 'description';
|
|
}
|
|
}
|
|
}
|
|
|
|
/// Extension pour obtenir le libellé des formats d'export
|
|
extension FormatExportExtension on FormatExport {
|
|
String get libelle {
|
|
switch (this) {
|
|
case FormatExport.pdf:
|
|
return 'PDF';
|
|
case FormatExport.excel:
|
|
return 'Excel';
|
|
case FormatExport.csv:
|
|
return 'CSV';
|
|
case FormatExport.json:
|
|
return 'JSON';
|
|
}
|
|
}
|
|
|
|
String get extension {
|
|
switch (this) {
|
|
case FormatExport.pdf:
|
|
return '.pdf';
|
|
case FormatExport.excel:
|
|
return '.xlsx';
|
|
case FormatExport.csv:
|
|
return '.csv';
|
|
case FormatExport.json:
|
|
return '.json';
|
|
}
|
|
}
|
|
|
|
String get mimeType {
|
|
switch (this) {
|
|
case FormatExport.pdf:
|
|
return 'application/pdf';
|
|
case FormatExport.excel:
|
|
return 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
|
|
case FormatExport.csv:
|
|
return 'text/csv';
|
|
case FormatExport.json:
|
|
return 'application/json';
|
|
}
|
|
}
|
|
}
|