1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
| private void BtnAnnuler_Click(object sender, EventArgs e) => _cancellationTokenSource?.Cancel();
private async void BtnImprimer_Click(object sender, EventArgs e)
{
try
{
_cancellationTokenSource = new CancellationTokenSource();
BtnImprimer.Enabled = false;
BtnAnnuler.Enabled = true;
int idEmploi = (int)DataEmploi.CurrentRow.Cells[0].Value;
var frmrap = await PrintReportAsync(idEmploi, _cancellationTokenSource.Token);
if (frmrap is null)
MessageBox.Show("Aucune donnée à imprimer.");
else
frmrap.ShowDialog();
}
catch (OperationCanceledException cancelled)
{
MessageBox.Show("Opération annulée");
}
catch (Exception ex)
{
MessageBox.Show($"Une erreur s'est produite : {ex.Message}\n{ex.StackTrace}");
}
finally
{
_cancellationTokenSource = null;
BtnImprimer.Enabled = true;
BtnAnnuler.Enabled = false;
}
}
private static async Task<RAP.FML_AFFICHER> PrintReportAsync(int idEmploi, CancellationToken cancellationToken)
{
db = new DbGestionEcoleContext();
var (emploi, details, entete) = await ExtractDetailsAsync(idEmploi, db, cancellationToken);
cancellationToken.ThrowIfCancellationRequested();
if (entete is null || details.Count ==0) return null;
RAP.FML_AFFICHER frmrap = new RAP.FML_AFFICHER();
var report = frmrap.RAPAfficher.LocalReport;
cancellationToken.ThrowIfCancellationRequested();
await LoadReportAsync(
report,
emploi, details, entete,
db, cancellationToken);
cancellationToken.ThrowIfCancellationRequested();
frmrap.RAPAfficher.RefreshReport();
return frmrap;
}
private static async Task<(EmploiDuTemps, List<Detail_EmploiDuTemps>, Entete)> ExtractDetailsAsync(
int idEmploi,
DbGestionEcoleContext db, CancellationToken cancellationToken)
{
var emploi = db.EmploiDuTemps.SingleAsync(s => s.ID_Emploi == idEmploi, cancellationToken);
cancellationToken.ThrowIfCancellationRequested();
var details = db.Detail_EmploiDuTemps.Where(s => s.ID_Emploi == idEmploi).ToListAsync(cancellationToken);
cancellationToken.ThrowIfCancellationRequested();
Entete entete = db.Entetes.SingleOrDefaultAsync(s => s.ID_AnneeScolaire == emploi.ID_AnneeScolaire, cancellationToken);
cancellationToken.ThrowIfCancellationRequested();
return (entete, emploi, details)
}
private static async Task LoadReportAsync(
Report report,
EmploiDuTemps emploi, List<Detail_EmploiDuTemps> listDetails, Entete entete,
DbGestionEcoleContext db, CancellationToken cancellationToken)
{
var classe = db.Classes.SingleAsync(s => s.ID_Classe == emploi.ID_Classe);
cancellationToken.ThrowIfCancellationRequested();
var annee = db.AnneeScolaires.SingleAsync(s => s.ID_AnneeScolaire == emploi.ID_AnneeScolaire);
cancellationToken.ThrowIfCancellationRequested();
report.ReportEmbeddedResource = "GESTION ECOLE/RAP/Rapport_EmploiDuTemps.rdlc";
report.DataSources.Add(new ReportDataSource("DataEmploiDuTemps", listdetail));
var parameters = CreateParameters(
classe.Classe1, annee.AnneeScolaire1,
entete.Republique entete.MinisterePrimaire, PR.LogoPays, PR.LogoEcole,
DateTime.Now.ToString()); //Date du système
report.SetParameters(parameters);
}
private static ReportParameter[] CreateParameters(
string classe, string anneeScolaire,
string enteteRepublique, string enteteMinisterePrimaire, object logoPays, object logoEcole,
string date)
{
ReportParameter classe = new ReportParameter("Classe", classe);
ReportParameter anneeScolaire = new ReportParameter("AnneeScolaire", anneeScolaire);
ReportParameter republique = new ReportParameter("Republique", enteteRepublique);
ReportParameter ministere = new ReportParameter("Ministere", enteteMinisterePrimaire);
string imagePays = Convert.ToBase64String(logoPays);
string imageEcole = Convert.ToBase64String(logoEcole);
ReportParameter PImage = new ReportParameter("ImagePays", imagePays);
ReportParameter EImage = new ReportParameter("ImageEcole", imageEcole);
ReportParameter date = new ReportParameter("Date", date);
return new ReportParameter[] { classe, anneeScolaire, republique, ministere, PImage, EImage, date };
} |
Partager