public void generateSlipePay(Paie p) { #region headerPDF int PDF_WIDTH = 250; int PDF_MARGIN_LEFT=20; int NEXT_MARGIN_TOP = 60; PdfDocument pdf = new PdfDocument(); pdf.Info.Title = p.Nom + "_Paie"; PdfPage page; page = pdf.AddPage(); page.Orientation = PageOrientation.Portrait; page.Size = PageSize.A4; XGraphics graph = XGraphics.FromPdfPage(page); List<LiaisonProjetEmploye> Liaison = new List<LiaisonProjetEmploye>(); MySqlEmployeService _ServiceMysql = new MySqlEmployeService(); XFont font = new XFont("Consolas", 10.0); //new XFont("Verdana", 20, XFontStyle.Bold); var formatter = new XTextFormatter(graph); XPen penn = new XPen(XColors.Black, 1); penn.DashStyle = XDashStyle.Dash; graph.DrawLine(penn, 0, 3, page.Height, 3); graph.DrawRectangle(new XSolidBrush(XColor.FromArgb(95,95,95)), new XRect(0, 3, page.Height, 30)); var layoutRectangle = new XRect(5, 12.5, page.Width, page.Height); formatter.DrawString("GEM-C Rapport de paie de : " + (p.Nom), font, XBrushes.White, layoutRectangle); layoutRectangle = new XRect(300, 12.5, page.Width, page.Height); formatter.DrawString(("Talon pour la période du : " + p.Periode), font, XBrushes.White, layoutRectangle); graph.DrawLine(penn, 0, 33, 800, 33); graph.DrawRectangle(new XSolidBrush(XColor.FromArgb(255, 243, 229)), new XRect(0, 34, page.Height, 255)); layoutRectangle = new XRect(PDF_MARGIN_LEFT, 40, page.Width, page.Height); formatter.DrawString("Calcul du salaire :", font, XBrushes.Black, layoutRectangle); graph.DrawLine(penn, PDF_MARGIN_LEFT, 55, 150, 55); #endregion if(p.MontantCommission != 0) { drawPDF(PDF_WIDTH, NEXT_MARGIN_TOP, PDF_MARGIN_LEFT, page, font,layoutRectangle, formatter,"Montant commission : ", Math.Round(p.MontantCommission,2).ToString()); NEXT_MARGIN_TOP+=10; } if (p.MontantIndemnite != 0) { drawPDF(PDF_WIDTH, NEXT_MARGIN_TOP, PDF_MARGIN_LEFT, page, font, layoutRectangle, formatter, "Montant indemnite : ", Math.Round(p.MontantIndemnite,2).ToString()); NEXT_MARGIN_TOP += 10; } if (p.MontantPourboire != 0) { drawPDF(PDF_WIDTH, NEXT_MARGIN_TOP, PDF_MARGIN_LEFT, page, font, layoutRectangle, formatter, "Montant pourboire : ", Math.Round(p.MontantPourboire,2).ToString()); NEXT_MARGIN_TOP += 10; } if (p.MontantPrime != 0) { drawPDF(PDF_WIDTH, NEXT_MARGIN_TOP, PDF_MARGIN_LEFT, page, font, layoutRectangle, formatter, "Montant prime : ", Math.Round(p.MontantPrime,2).ToString()); NEXT_MARGIN_TOP += 10; } if (p.MontantAllocations != 0) { drawPDF(PDF_WIDTH, NEXT_MARGIN_TOP, PDF_MARGIN_LEFT, page, font, layoutRectangle, formatter, "Montant allocations : ", Math.Round(p.MontantAllocations, 2).ToString()); NEXT_MARGIN_TOP += 10; } double lesmontants = Math.Round((p.MontantAllocations + p.MontantCommission + p.MontantIndemnite + p.MontantPourboire + p.MontantPrime), 2); if (lesmontants != 0) { drawPDF(PDF_WIDTH, NEXT_MARGIN_TOP, PDF_MARGIN_LEFT, page, font, layoutRectangle, formatter, "", "--------------", ""); NEXT_MARGIN_TOP += 10; drawPDF(PDF_WIDTH, NEXT_MARGIN_TOP, PDF_MARGIN_LEFT, page, font, layoutRectangle, formatter, "Total des montants : ", lesmontants.ToString()); NEXT_MARGIN_TOP += 30; } // ce qui nou intéresse commence drawPDF(PDF_WIDTH, NEXT_MARGIN_TOP, PDF_MARGIN_LEFT, page, font, layoutRectangle, formatter, "Heure regulier : ", Math.Round(p.NombreHeure, 2).ToString(), " hr(s)"); NEXT_MARGIN_TOP += 10; drawPDF(PDF_WIDTH, NEXT_MARGIN_TOP, PDF_MARGIN_LEFT, page, font, layoutRectangle, formatter, "Heure suplémentaire : ", Math.Round(p.NombreHeureSupp, 2).ToString(), " hr(s)"); NEXT_MARGIN_TOP += 10; drawPDF(PDF_WIDTH, NEXT_MARGIN_TOP, PDF_MARGIN_LEFT, page, font, layoutRectangle, formatter, ("Taux rég : " + p.salaire.ToString() + "$ "), Math.Round((p.NombreHeureSupp*(Convert.ToDouble(p.salaire))),2).ToString()); NEXT_MARGIN_TOP+=10; supp : drawPDF(PDF_WIDTH, NEXT_MARGIN_TOP, PDF_MARGIN_LEFT, page, font, layoutRectangle, formatter, "Taux supp : " + Math.Round((Convert.ToDouble(p.salaire) * 1.5), 4).ToString() + " $", Math.Round((p.MontantBrute - lesmontants) - (p.NombreHeure * Convert.ToDouble(p.salaire)), 2).ToString()); NEXT_MARGIN_TOP += 10; drawPDF(PDF_WIDTH, NEXT_MARGIN_TOP, PDF_MARGIN_LEFT, page, font, layoutRectangle, formatter, "", "--------------", ""); NEXT_MARGIN_TOP += 10; drawPDF(PDF_WIDTH, NEXT_MARGIN_TOP, PDF_MARGIN_LEFT, page, font, layoutRectangle, formatter, "Montant brute total : ", Math.Round((p.MontantBrute), 2).ToString()); NEXT_MARGIN_TOP += 10; drawPDF(PDF_WIDTH, NEXT_MARGIN_TOP, PDF_MARGIN_LEFT, page, font, layoutRectangle, formatter, "", "--------------", ""); NEXT_MARGIN_TOP += 10; drawPDF(PDF_WIDTH, NEXT_MARGIN_TOP, PDF_MARGIN_LEFT, page, font, layoutRectangle, formatter, "Montant impôt combiné (Féd. et prov.): ", "-" + (Math.Round(p.MontantBrute, 2) - Math.Round(p.MontantNet, 2)).ToString()); NEXT_MARGIN_TOP += 20; graph.DrawRectangle(XPens.Black, XBrushes.LightSeaGreen, 5, NEXT_MARGIN_TOP-2.5, page.Width-10, page.Height-825); drawPDF(PDF_WIDTH, NEXT_MARGIN_TOP, PDF_MARGIN_LEFT, page, font, layoutRectangle, formatter, "Montant Net du : ", Math.Round(p.MontantNet, 2).ToString()); graph.DrawLine(XPens.Black, 0, 280, 800, 280); #region outputPDF StringBuilder b = new StringBuilder(); b.Append("talon_"); b.Append(p.Nom.ToString()); b.Append("_"); b.Append(String.Format("{0:M/d/yyyy}", Convert.ToDateTime(p.DateGenerationRapport))); b.Append(".pdf"); string pdfFilename = b.ToString().Replace(" ", "_"); pdf.Save(pdfFilename); Process.Start(pdfFilename); #endregion }
// Fin de la classe de test. public void GenererPaies() { MySqlPaieService _service = new MySqlPaieService(); DataTable Periode; float temps; try { // Aller chercher tous les employés MySqlEmployeService _emService = new MySqlEmployeService(); IList<Employe> emp = _emService.RetrieveAll(); Periode = _service.PeriodeTemps(); if (Periode.Rows.Count == 0) { throw new Exception("Toutes les périodes de paies ont déjà été générer. Allez en rentré de nouvelle pour la nouvelle année."); } else { DateTime start = (DateTime)Periode.Rows[0][0], end = (DateTime)Periode.Rows[0][1]; DateTime date = DateTime.Now; PeriodePaie tmpTime = new PeriodePaie(date, date); if(tmpTime.Fin < end) { throw new Exception("La période que vous essayez de générer est en cours."); } float HeureSupp = 0; int compteurTemps = 0; int totalEmp = emp.Count; // Pour chaque employé aller chercher leur temps. foreach (Employe em in emp) { { temps = _service.RetrieveCompteurs(em.ID, start, end); // Vérification dans le cas ou personne n'aurais travailler dans cette période. if(temps == 0) { compteurTemps++; if(compteurTemps == totalEmp) { StringBuilder mess = new StringBuilder(); mess.Append("Aucune employé à travail durant la période. Cette période à été noté comme généré: "); mess.Append(start.ToString()); mess.Append(end.ToString()); if (!(_service.periodeGenere(start, end))) { throw new Exception("Problème avec l'état des périodes de paie, vérifier que votre période courrante est cohérente."); } throw new Exception(mess.ToString()); } } else { if (temps > supp) { HeureSupp = temps - supp; temps = temps - supp; } float Brute = ((float)em.Salaire * temps) + ((float)em.SalaireOver * HeureSupp); TimeSpan t = end - start; Double days = t.TotalDays; days = 365/(days+1); double EstimatedAnnualSalary = days * Brute; float Net = 0; Net = Brute * (1 - tauxCombineQC_CA((double)(days * Brute))); Paie tmpPaie = new Paie() { MontantBrute = Brute, MontantNet = Net, NombreHeure = temps, NombreHeureSupp = HeureSupp }; if (!(_service.periodeGenere(start, end))) { throw new Exception("Problème avec l'état des périodes de paie, vérifier que votre période courrante est cohérente."); } // Appel de la fonction de génération de paie. if (!(_service.insertPaie(tmpPaie, start, end, em.ID))) { throw new Exception("Impossible de générer la paie de " + em.Prenom + " , " + em.Nom + " correctements vérifier les dates de vos périodes de paies."); } } } } // change la période paye à terminé. throw new Exception("Réussite de la génération des paies pour la période de :" + (start.Date).ToString("d") + " au " + (end.Date).ToString("d")); } } catch (Exception e) { throw e; } }
private void GenererRapportEmploye(object sender, RoutedEventArgs e) { List<Employe> lstEmp = new List<Employe>(); //Tri nom employé foreach (Employe emp in lstRapportEmploye.SelectedItems) lstEmp.Add(emp); //Tri nom employé if((bool)rbtTriNomAZ.IsChecked) lstEmp = lstEmp.OrderBy(lst => lst.Nom).ToList(); else if ((bool)rbtTriNomZA.IsChecked) lstEmp = lstEmp.OrderByDescending(lst => lst.Nom).ToList(); //Tri salaire else if ((bool)rbtTriSalaireASC.IsChecked)// ASC lstEmp = lstEmp.OrderBy(lst => lst.Salaire).ToList(); else if ((bool)rbtTriSalaireDESC.IsChecked)// DESC lstEmp = lstEmp.OrderByDescending(lst => lst.Salaire).ToList(); try { if (Convert.ToSingle(lstEmp.Count.ToString()) > 0) { if (chxProjetEmploye.IsChecked.Value || chxInfoGenerale.IsChecked.Value) { PdfDocument pdf = new PdfDocument(); pdf.Info.Title = "Rapport Employe"; PdfPage page; page = pdf.AddPage(); page.Orientation = PageOrientation.Landscape; page.Size = PageSize.A4; XGraphics graph = XGraphics.FromPdfPage(page); List<LiaisonProjetEmploye> Liaison = new List<LiaisonProjetEmploye>(); MySqlEmployeService _ServiceMysql = new MySqlEmployeService(); XFont font = new XFont("Consolas", 20.0); var formatter = new XTextFormatter(graph); int height = 70; XPen penn = new XPen(XColors.Black, 1); penn.DashStyle = XDashStyle.Dash; string date = DateTime.Now.ToString("dd/MM/yyyy"); //Entête graph.DrawLine(penn, 3, 3, 850, 3); graph.DrawRectangle(new XSolidBrush(XColor.FromArgb(95, 95, 95)), new XRect(0, 5, 850, 60)); var layoutRectangle = new XRect(5, 25, page.Width, page.Height); formatter.DrawString("GEM-C Rapport des employés", font, XBrushes.Black, layoutRectangle); layoutRectangle = new XRect(600, 25, page.Width, page.Height); formatter.DrawString(("Date : " + date), font, XBrushes.Black, layoutRectangle); graph.DrawLine(penn, 3, 67, 850, 67); graph.DrawRectangle(new XSolidBrush(XColor.FromArgb(255, 243, 229)), new XRect(0, 70, 850, 600)); //Table font = new XFont("Consolas", 10.0); graph.DrawRectangle(XPens.Black, new XRect(5, height + 5, 20, 60)); layoutRectangle = new XRect(7, height + 5, page.Width, page.Height); formatter.DrawString("ID", font, XBrushes.Black, layoutRectangle); graph.DrawRectangle(XPens.Black, new XRect(25, height + 5, 150, 60)); layoutRectangle = new XRect(27, height + 5, page.Width, page.Height); formatter.DrawString("Nom", font, XBrushes.Black, layoutRectangle); layoutRectangle = new XRect(27, height + 20, page.Width, page.Height); formatter.DrawString("Prénom", font, XBrushes.Black, layoutRectangle); if (chxInfoGenerale.IsChecked.Value) { graph.DrawRectangle(XPens.Black, new XRect(175, height + 5, 120, 60)); layoutRectangle = new XRect(178, height + 5, page.Width, page.Height); formatter.DrawString("Informations générales", font, XBrushes.Black, layoutRectangle); layoutRectangle = new XRect(178, height + 20, page.Width, page.Height); formatter.DrawString("-Titre emploi", font, XBrushes.Black, layoutRectangle); layoutRectangle = new XRect(178, height + 30, page.Width, page.Height); formatter.DrawString("-'Date embauche'", font, XBrushes.Black, layoutRectangle); layoutRectangle = new XRect(178, height + 40, page.Width, page.Height); formatter.DrawString("-(Statut)", font, XBrushes.Black, layoutRectangle); graph.DrawRectangle(XPens.Black, new XRect(295, height + 5, 130, 60)); layoutRectangle = new XRect(298, height + 5, page.Width, page.Height); formatter.DrawString("Détails financiés", font, XBrushes.Black, layoutRectangle); layoutRectangle = new XRect(298, height + 20, page.Width, page.Height); formatter.DrawString("-Salaire" , font, XBrushes.Black, layoutRectangle); layoutRectangle = new XRect(298, height + 30, page.Width, page.Height); formatter.DrawString("-(Salaire avec les ", font, XBrushes.Black, layoutRectangle); layoutRectangle = new XRect(298, height + 40, page.Width, page.Height); formatter.DrawString("heures supplémentaires)", font, XBrushes.Black, layoutRectangle); } if (chxProjetEmploye.IsChecked.Value) { graph.DrawRectangle(XPens.Black, new XRect(175, height + 5, 250, 60)); graph.DrawRectangle(XPens.Black, new XRect(425, height + 5, 170, 60)); layoutRectangle = new XRect(430, height + 5, page.Width, page.Height); formatter.DrawString("Projet(s) occupé(s)", font, XBrushes.Black, layoutRectangle); graph.DrawRectangle(XPens.Black, new XRect(595, height + 5, 150, 60)); layoutRectangle = new XRect(605, height + 5, page.Width, page.Height); formatter.DrawString("Temps travaillé", font, XBrushes.Black, layoutRectangle); } height = 130; foreach (Employe emp in lstEmp) { if (chxProjetEmploye.IsChecked.Value) { Liaison = new List<LiaisonProjetEmploye>(_ServiceMysql.GetLiaison(emp.ID)); if (15 * Liaison.Count + height > 530) { page = pdf.AddPage(); page.Orientation = PageOrientation.Landscape; graph = XGraphics.FromPdfPage(page); formatter = new XTextFormatter(graph); height = 0; graph.DrawRectangle(new XSolidBrush(XColor.FromArgb(255, 243, 229)), new XRect(0, 0, 850, 600)); } } else if (!chxProjetEmploye.IsChecked.Value && height > 550) { page = pdf.AddPage(); page.Orientation = PageOrientation.Landscape; graph = XGraphics.FromPdfPage(page); formatter = new XTextFormatter(graph); height = 0; graph.DrawRectangle(new XSolidBrush(XColor.FromArgb(255, 243, 229)), new XRect(0, 0, 850, 600)); } int y = height; layoutRectangle = new XRect(7, height += 15 , page.Width, page.Height); formatter.DrawString( emp.ID.ToString(), font, XBrushes.Black, layoutRectangle); layoutRectangle = new XRect(27, height , page.Width, page.Height); formatter.DrawString(emp.Nom.ToString(), font, XBrushes.Black, layoutRectangle); layoutRectangle = new XRect(27 , height + 15 , page.Width, page.Height); formatter.DrawString(emp.Prenom.ToString(), font, XBrushes.Black, layoutRectangle); //Section info employé if (chxInfoGenerale.IsChecked.Value) { layoutRectangle = new XRect(178, height , page.Width, page.Height); formatter.DrawString(emp.Poste.ToString(), font, XBrushes.Black, layoutRectangle); layoutRectangle = new XRect(178 , height + 15, page.Width, page.Height); formatter.DrawString(("'" + _ServiceMysql.getDateEmbauche(emp.ID) + "'"), font, XBrushes.Black, layoutRectangle); if (!emp.HorsFonction) { layoutRectangle = new XRect(178 , height + 30, page.Width, page.Height); formatter.DrawString("(En service)", font, XBrushes.Black, layoutRectangle); } else { layoutRectangle = new XRect(178 , height + 30, page.Width, page.Height); formatter.DrawString("(Hors service)", font, XBrushes.Black, layoutRectangle); } layoutRectangle = new XRect(298, height , page.Width, page.Height); formatter.DrawString((Math.Round(Convert.ToSingle(emp.Salaire), 2) + " $"), font, XBrushes.Black, layoutRectangle); layoutRectangle = new XRect(298, height + 15, page.Width, page.Height); formatter.DrawString(("(" + Math.Round( Convert.ToSingle(emp.SalaireOver), 2) + " $)"), font, XBrushes.Black, layoutRectangle); } //Section projets des employés if (chxProjetEmploye.IsChecked.Value) { Liaison = new List<LiaisonProjetEmploye>(_ServiceMysql.GetLiaison(emp.ID)); Dictionary<string, float> lstProjHeure = new Dictionary<string, float>(); foreach (LiaisonProjetEmploye liaison in Liaison) lstProjHeure.Add(liaison.ProjNom, Convert.ToInt32(_ServiceMysql.CompteursProjets(emp.ID, liaison.ProjNom))); int count = 0; if (Liaison.Count > 0) { //Tri nom projet if ((bool)rbtTriProjetAZ.IsChecked) lstProjHeure = (Dictionary<string, float>)lstProjHeure.OrderBy(x => x.Key).ToDictionary(x => x.Key, x => x.Value); else if ((bool)rbtTriProjetZA.IsChecked) lstProjHeure = (Dictionary<string, float>)lstProjHeure.OrderByDescending(x => x.Key).ToDictionary(x => x.Key, x => x.Value); //Tri nb heure if ((bool)rbtTriNBheureASC.IsChecked)//ASC lstProjHeure = (Dictionary<string, float>)lstProjHeure.OrderBy(x => x.Value).ToDictionary(x => x.Key, x => x.Value); else if ((bool)rbtTriNBheureDESC.IsChecked)//DESC lstProjHeure = (Dictionary<string, float>)lstProjHeure.OrderByDescending(x => x.Value).ToDictionary(x => x.Key, x => x.Value); foreach (KeyValuePair<string, float> dict in lstProjHeure) { count++; layoutRectangle = new XRect(425, y += 15, page.Width, page.Height); formatter.DrawString(count + " - " + dict.Key.ToString(), font, XBrushes.Black, layoutRectangle); layoutRectangle = new XRect(605 , y, page.Width, page.Height); formatter.DrawString(dict.Value + " heures", font, XBrushes.Black, layoutRectangle); } if (y > height) height = y; } } height += 30; graph.DrawLine(XPens.Black, 10, height+=20 , 800, height); } StringBuilder fileName = new StringBuilder(); fileName.Append("Rapport_Emp_"); fileName.Append(DateTime.Now.ToString()); fileName.Append(".pdf"); fileName.Replace(":", ""); fileName.Replace(" ", "_"); pdf.Save(fileName.ToString()); Process.Start(fileName.ToString()); } else MessageBox.Show("Aucune information choisie"); } else MessageBox.Show("Ancun employé sélectionné"); } catch (Exception E) { MessageBox.Show("Le fichier est déjà utilisé, veuillez le fermer pour le regénérer"); } }