public void GeneratePDF(string path, string lotsNames, FactureContent factureContent) { string date = factureContent.Date.ToString("dd/MM/yyyy", System.Globalization.CultureInfo.InvariantCulture); PdfWriter writer = new PdfWriter(path); PdfDocument pdf = new PdfDocument(writer); Document document = new Document(pdf); Paragraph title = new Paragraph("Facture N° : " + factureContent.FacNum).SetTextAlignment(TextAlignment.CENTER).SetBold().SetFontSize(20); Paragraph dateLabel = new Paragraph("Date : ").SetBold().SetTextAlignment(TextAlignment.LEFT).SetFontSize(15); Paragraph dateValue = new Paragraph(date).SetTextAlignment(TextAlignment.LEFT).SetFontSize(15); Paragraph beneficiereLabel = new Paragraph("Bénéficiaire : ").SetBold().SetTextAlignment(TextAlignment.LEFT).SetFontSize(15); Paragraph beneficiereValue = new Paragraph(factureContent.Beneficiere).SetTextAlignment(TextAlignment.LEFT).SetFontSize(15); Paragraph signature = new Paragraph("Signature").SetFontSize(18).SetTextAlignment(TextAlignment.RIGHT).SetPaddingRight(25); Table table = new Table(UnitValue.CreatePercentArray(6)).UseAllAvailableWidth(); Cell cell11 = new Cell(1, 3) .SetBold() .SetTextAlignment(TextAlignment.LEFT) .Add(new Paragraph("Designation")); Cell cell12 = new Cell(1, 1) .SetBold() .SetTextAlignment(TextAlignment.LEFT) .Add(new Paragraph("PRIX (HT)")); Cell cell13 = new Cell(1, 1) .SetBold() .SetTextAlignment(TextAlignment.LEFT) .Add(new Paragraph("TVA (19%)")); Cell cell14 = new Cell(1, 1) .SetBold() .SetTextAlignment(TextAlignment.LEFT) .Add(new Paragraph("PRIX (TTC)")); table.AddCell(cell11); table.AddCell(cell12); table.AddCell(cell13); table.AddCell(cell14); Cell cell21 = new Cell(2, 3) .SetBold() .SetTextAlignment(TextAlignment.LEFT) .Add(new Paragraph("Assistance pour recouvrement des comptes débiteurs: Lot " + lotsNames)); Cell cell22 = new Cell(2, 1) .SetTextAlignment(TextAlignment.LEFT) .Add(new Paragraph(String.Format("{0:0.000}", factureContent.PrixHT))); Cell cell23 = new Cell(2, 1) .SetTextAlignment(TextAlignment.LEFT) .Add(new Paragraph(String.Format("{0:0.000}", factureContent.PrixTVA))); Cell cell24 = new Cell(2, 1) .SetTextAlignment(TextAlignment.LEFT) .Add(new Paragraph(String.Format("{0:0.000}", factureContent.PrixTTC))); table.AddCell(cell21); table.AddCell(cell22); table.AddCell(cell23); table.AddCell(cell24); Table table2 = new Table(UnitValue.CreatePercentArray(6)).UseAllAvailableWidth(); Cell cell_2_11 = new Cell(1, 3) .SetBold() .SetTextAlignment(TextAlignment.LEFT) .Add(new Paragraph("PRIX TOTAL (HT)")); Cell cell_2_12 = new Cell(1, 3) .SetTextAlignment(TextAlignment.RIGHT) .Add(new Paragraph(String.Format("{0:0.000}", factureContent.PrixHT))); Cell cell_2_21 = new Cell(2, 3) .SetBold() .SetTextAlignment(TextAlignment.LEFT) .Add(new Paragraph("MONTANT TVA")); Cell cell_2_22 = new Cell(2, 3) .SetTextAlignment(TextAlignment.RIGHT) .Add(new Paragraph(String.Format("{0:0.000}", factureContent.PrixTVA))); Cell cell_2_31 = new Cell(3, 3) .SetBold() .SetTextAlignment(TextAlignment.LEFT) .Add(new Paragraph("TIMBRE FISCAL")); Cell cell_2_32 = new Cell(3, 3) .SetTextAlignment(TextAlignment.RIGHT) .Add(new Paragraph(String.Format("{0:0.000}", factureContent.TimbreFiscal))); Cell cell_2_41 = new Cell(4, 3) .SetBold() .SetBackgroundColor(ColorConstants.GRAY) .SetTextAlignment(TextAlignment.LEFT) .Add(new Paragraph("MONTANT A PAYER EN DT")); Cell cell_2_42 = new Cell(4, 3) .SetTextAlignment(TextAlignment.CENTER) .SetBackgroundColor(ColorConstants.GRAY) .Add(new Paragraph(String.Format("{0:0.000}", factureContent.PrixTTC + factureContent.TimbreFiscal))); table2.AddCell(cell_2_11); table2.AddCell(cell_2_12); table2.AddCell(cell_2_21); table2.AddCell(cell_2_22); table2.AddCell(cell_2_31); table2.AddCell(cell_2_32); table2.AddCell(cell_2_41); table2.AddCell(cell_2_42); document.Add(new Paragraph()); document.Add(new Paragraph()); document.Add(new Paragraph()); document.Add(new Paragraph()); document.Add(new Paragraph()); document.Add(new Paragraph()); document.Add(new Paragraph()); document.Add(new Paragraph()); document.Add(new Paragraph()); document.Add(new Paragraph()); document.Add(new Paragraph()); document.Add(new Paragraph()); document.Add(new Paragraph()); document.Add(new Paragraph()); document.Add(title); document.Add(new Paragraph()); document.Add(new Paragraph()); document.Add(new Paragraph()); document.Add(new Paragraph()); document.Add(new Paragraph()); document.Add(new Paragraph()); document.Add(dateLabel.Add(dateValue)); document.Add(beneficiereLabel.Add(beneficiereValue)); document.Add(new Paragraph()); document.Add(new Paragraph()); document.Add(new Paragraph()); document.Add(new Paragraph()); document.Add(table); document.Add(new Paragraph()); document.Add(new Paragraph()); document.Add(new Paragraph()); document.Add(new Paragraph()); document.Add(table2); document.Add(new Paragraph()); document.Add(new Paragraph()); document.Add(new Paragraph()); document.Add(new Paragraph()); document.Add(new Paragraph()); document.Add(new Paragraph()); document.Add(signature); document.Close(); }
public ActionResult extraireFacture(string numLot, string factureNum, string pourcentage, string debutDate, string finDate) { using (WakilRecouvContext WakilContext = new WakilRecouvContext()) { using (UnitOfWork UOW = new UnitOfWork(WakilContext)) { FormulaireService FormulaireService = new FormulaireService(UOW); LotService LotService = new LotService(UOW); AffectationService AffectationService = new AffectationService(UOW); FactureService factureService = new FactureService(UOW); ViewData["list"] = new SelectList(NumLotListForDropDown(LotService), "Value", "Text"); DateTime startDate = DateTime.Parse(debutDate); DateTime endDate = DateTime.Parse(finDate); double trancheTot = 0; double soldeTot = 0; double tot = 0; float revenuParOp = float.Parse(pourcentage.Replace(".", ",")); List <ClientAffecteViewModel> JoinedList = new List <ClientAffecteViewModel>(); List <ClientAffecteViewModel> TempJoinedList = new List <ClientAffecteViewModel>(); List <ClientAffecteViewModel> AnnexeJoinedList = new List <ClientAffecteViewModel>(); if (numLot == "0") { JoinedList = (from f in FormulaireService.GetAll() join a in AffectationService.GetAll() on f.AffectationId equals a.AffectationId join l in LotService.GetAll() on a.LotId equals l.LotId where f.Status == Domain.Entities.Status.VERIFIE select new ClientAffecteViewModel { Formulaire = f, Affectation = a, Lot = l, }).Where(j => j.Formulaire.TraiteLe.Date >= startDate.Date && j.Formulaire.TraiteLe.Date <= endDate.Date).ToList(); } else { JoinedList = (from f in FormulaireService.GetAll() join a in AffectationService.GetAll() on f.AffectationId equals a.AffectationId join l in LotService.GetAll() on a.LotId equals l.LotId where f.Status == Domain.Entities.Status.VERIFIE && l.NumLot.Equals(numLot) select new ClientAffecteViewModel { Formulaire = f, Affectation = a, Lot = l, }).Where(j => j.Formulaire.TraiteLe.Date >= startDate.Date && j.Formulaire.TraiteLe.Date <= endDate.Date).ToList(); } foreach (ClientAffecteViewModel cvm in JoinedList) { if (cvm.Formulaire.EtatClient == Domain.Entities.Note.SOLDE_TRANCHE) { trancheTot += (cvm.Formulaire.MontantVerseDeclare * revenuParOp) / 100; cvm.vers = cvm.Formulaire.MontantVerseDeclare; cvm.recouvre = cvm.Formulaire.MontantVerseDeclare; AnnexeJoinedList.Add(cvm); } if (cvm.Formulaire.EtatClient == Domain.Entities.Note.SOLDE) { TempJoinedList = getTraitHist(cvm.Affectation.AffectationId, FormulaireService, AffectationService, LotService); if (TempJoinedList.Count() == 0) { soldeTot += (cvm.Formulaire.MontantDebInitial * revenuParOp) / 100; cvm.recouvre = cvm.Formulaire.MontantDebInitial; cvm.vers = cvm.Formulaire.MontantVerseDeclare; AnnexeJoinedList.Add(cvm); } else { soldeTot += (TempJoinedList.FirstOrDefault().Formulaire.MontantDebMAJ *revenuParOp) / 100; cvm.vers = cvm.Formulaire.MontantVerseDeclare; cvm.recouvre = TempJoinedList.FirstOrDefault().Formulaire.MontantDebMAJ; AnnexeJoinedList.Add(cvm); } } } string lotsNames = ""; List <string> listNameLot = JoinedList.DistinctBy(j => j.Lot.NumLot).Select(l => l.Lot.NumLot).ToList(); if (listNameLot.Count() == 1) { lotsNames = listNameLot.FirstOrDefault(); } else if (listNameLot.Count() > 1) { string lastlots = JoinedList.DistinctBy(j => j.Lot.NumLot).Select(l => l.Lot.NumLot).LastOrDefault(); listNameLot.RemoveAt(listNameLot.Count - 1); string lots = String.Join(", ", listNameLot); lotsNames = lots + " et " + lastlots; } tot = soldeTot + trancheTot; FactureContent factureContent = new FactureContent(); factureContent.FacNum = factureNum; factureContent.Date = DateTime.Today; factureContent.Beneficiere = "Zitouna Bank"; factureContent.PrixHT = tot; factureContent.PrixTVA = (tot * 19) / 100; factureContent.TimbreFiscal = 0.600; factureContent.PrixTTC = tot + factureContent.PrixTVA; string annexeFileName = "Annexe_" + DateTime.Now.ToString("dd.MM.yyyy") + "_" + ((DateTimeOffset)DateTime.UtcNow).ToUnixTimeSeconds() + ".xlsx"; string factureFileName = "Facture_" + DateTime.Now.ToString("dd.MM.yyyy") + "_" + ((DateTimeOffset)DateTime.UtcNow).ToUnixTimeSeconds() + ".pdf"; string pathAnnexe = GetFolderName() + "/" + annexeFileName; string pathFacture = GetFolderName() + "/" + factureFileName; Facture facture = new Facture() { AnnexePathName = annexeFileName, FacturePathName = factureFileName, DateDeb = startDate, DateFin = endDate, DateExtrait = DateTime.Now }; factureService.Add(facture); factureService.Commit(); GenerateExcel(GenerateDatatableFromJoinedList(AnnexeJoinedList), pathAnnexe, String.Format("{0:0.000}", AnnexeJoinedList.Sum(j => j.recouvre))); GeneratePDF(pathFacture, lotsNames, factureContent); return(RedirectToAction("genererFacture", new { page = 1 })); } } }