public bool SignCoachIntegration(string coachId, PdfIntegrationCoach values) { var filePath = Path.Combine(_env.ContentRootPath, $"PDF/integration_coach_fillable.pdf"); var savePath = Path.Combine(_env.ContentRootPath, $"wwwroot/pdf/coachs/{coachId}.pdf"); //var filePath = "/PDF/integration_coach_fillable.pdf"; //var savePath = "/PDF/saved/toSave.pdf"; PdfDocument pdf = new PdfDocument(new PdfReader(filePath), new PdfWriter(savePath)); PdfAcroForm form = PdfAcroForm.GetAcroForm(pdf, false); PdfFont documentFont = PdfFontFactory.CreateFont(StandardFonts.HELVETICA); var fields = form.GetFormFields(); foreach (PdfFormField field in fields.Values) { field.SetFontSize(10); field.SetFont(documentFont); } fields["last_name"].SetValue(values.LastName); fields["first_name"].SetValue(values.FirstName); fields["birthdate"].SetValue(string.Format("{0:dd/MM/yyyy}", values.Birthdate)); fields["birthplace"].SetValue(values.BirthPlace); fields["email"].SetValue(values.Email); fields["phone"].SetValue(values.Phone); fields["linkedin"].SetValue(values.LinkedIn ?? ""); fields["discord"].SetValue(values.DiscordTag ?? ""); fields["situation"].SetValue(values.Situation); fields["address"].SetValue(values.Address); fields["postal_code"].SetValue(values.PostalCode.ToString()); fields["city"].SetValue(values.City); fields["keywords"].SetValue(values.Keywords ?? "Inconnue"); fields["experiences"].SetValue(values.Experience ?? "Inconnue"); fields["ideal_builder"].SetValue(values.IdealBuilder ?? "Inconnue"); fields["s_full_name"].SetValue($"{values.FirstName} {values.LastName}"); fields["s_birthdate"].SetValue(string.Format("{0:dd/MM/yyyy}", values.Birthdate)); fields["s_birthplace"].SetValue(values.BirthPlace); fields["s_address"].SetValue($"{values.Address}, {values.PostalCode} {values.City}"); fields["s_sign_place"].SetValue(values.City); fields["s_sign_date"].SetValue(string.Format("{0:dd/MM/yyyy}", DateTime.Now)); PdfAcroForm.GetAcroForm(pdf, false).FlattenFields(); pdf.Close(); return(true); }
// Signging the PDF for the integration public async Task <bool> SignFicheIntegrationAsync(string currentUserId, string coachId) { Coach coach = await GetCoachFromCoachId(coachId); if (coach == null || coach.UserId != currentUserId) { throw new UnauthorizedAccessException("You are not the user corresponding to the coach"); } User user = await(await _users.FindAsync(databaseUser => databaseUser.Id == coach.UserId )).FirstOrDefaultAsync(); if (user == null) { throw new Exception("The user doesn't exist..."); } PdfIntegrationCoach pdfIntegrationCoach = new PdfIntegrationCoach() { FirstName = user.FirstName, LastName = user.LastName, Birthdate = user.Birthdate, BirthPlace = user.BirthPlace, Email = user.Email, Phone = user.Phone, DiscordTag = user.DiscordTag, LinkedIn = user.LinkedIn, City = user.City, PostalCode = user.PostalCode, Address = user.Address, Situation = coach.Situation, Keywords = await _formsService.GetAnswerForQuestionAsync(currentUserId, "Quels sont les mots clés qui te définissent ?"), Experience = await _formsService.GetAnswerForQuestionAsync(currentUserId, "Quelles sont tes expériences professionnelles et personnelles ? "), IdealBuilder = await _formsService.GetAnswerForQuestionAsync(currentUserId, "Quel serait le Builder idéal pour toi ?"), Objectifs = await _formsService.GetAnswerForQuestionAsync(currentUserId, "Quels objectifs souhaites-tu que ton Builder atteignent au bout des 3 mois ?"), }; if (_pdfService.SignCoachIntegration(coachId, pdfIntegrationCoach)) { var update = Builders <Coach> .Update .Set(dbCoach => dbCoach.HasSignedFicheIntegration, true); var coachCard = _pdfService.GenerateCoachCard(coachId, new PdfCoachCard() { FirstName = user.FirstName, LastName = user.LastName, Birthdate = user.Birthdate, ValidityDate = coach.CandidatingDate.AddYears(1) }); var fileId = await _filesService.UploadFile($"coachcard_{coachId}", coachCard); update = update.Set(dbCoach => dbCoach.CoachCardId, fileId); await _coachs.UpdateOneAsync(databaseCoach => databaseCoach.Id == coachId, update ); await _notificationService.NotifySignedIntegrationPaperCoach(coachId, user.Email, user.FirstName); return(true); } return(false); }