예제 #1
0
        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();
        }
예제 #2
0
        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 }));
                }
            }
        }