def add_private_data(self, person): self.story.append(Spacer(0, 0.5 * cm)) self.story.append(Paragraph('DONNÉES PRIVÉES', style_bold)) self.story.append(Spacer(0, 0.2 * cm)) data = [ [self.formating('Nom : '), person.last_name or self.points], [self.formating('Prénom :'), person.first_name or self.points], [ self.formating('Date de naissance :'), django_format(person.birth_date, 'j F Y') if person.birth_date else self.points ], [self.formating('N° de téléphone :'), person.tel or self.points], [ self.formating('Adresse complète :'), person.street or self.points ], ['', person.pcode_city if person.pcode else self.points], ['', self.points], [ self.formating('Employeur :'), person.corporation.name if person.corporation else self.points ], [Spacer(0, 0.2 * cm)], ] t = Table(data, colWidths=[4 * cm, 12 * cm], hAlign=TA_LEFT) t.setStyle( TableStyle([ ('ALIGN', (1, 0), (-1, -1), 'LEFT'), ('BOX', (0, 0), (-1, -1), 0.25, colors.black), ])) self.story.append(t) self.story.append(Spacer(0, 0.5 * cm)) self.story.append(Paragraph('COORDONNÉES DE PAIEMENT', style_bold)) self.story.append(Spacer(0, 0.2 * cm)) data = [ [ self.formating('N° de ccp ou compte bancaire :'), person.ccp or self.points ], [ self.formating('Si banque, nom et adresse de celle-ci :'), person.bank or self.points ], [ self.formating('ainsi que N° IBAN :'), person.iban or self.points ], ] t = Table(data, colWidths=[4 * cm, 12 * cm], hAlign=TA_LEFT) t.setStyle( TableStyle([ ('ALIGN', (1, 0), (-1, -1), 'LEFT'), ('BOX', (0, 0), (-1, -1), 0.25, colors.black), ])) self.story.append(t) self.story.append(Spacer(0, 0.5 * cm))
def __init__(self, filename, return_date): super().__init__(filename) self.text = ( "Afin de mettre à jour nos bases de données, nous vous serions reconnaissant " "de contrôler les données ci-dessous qui vous concernent selon votre filière " "et de retourner le présent document corrigé et complété à votre maître de classe jusqu'au " "%s prochain.<br/><br/>" "Nous vous remercions de votre précieuse collaboration.<br/><br/>" "Le secrétariat") % django_format(return_date, 'l j F') self.underline = '__________________________________'
def __init__(self, filename, return_date): super().__init__(filename) self.text = ( "Afin de mettre à jour nos bases de données, nous vous serions reconnaissant " "de contrôler les données ci-dessous qui vous concernent selon votre filière " "et de retourner le présent document corrigé et complété à votre maître de classe jusqu'au " "%s prochain.<br/><br/>" "Nous vous remercions de votre précieuse collaboration.<br/><br/>" "Le secrétariat" ) % django_format(return_date, 'l j F') self.underline = '__________________________________'
def produce(self, activities): self.add_address(self.teacher) tot_hyperplanning = activities['tot_mandats'] + activities['tot_ens'] self.story.append(Paragraph(settings.CHARGE_SHEET_TITLE, style_bold)) self.story.append(HorLine(450)) self.story.append((Paragraph('Total HyperPlanning: {} pér.'.format(tot_hyperplanning), style_smallx))) data = [ ["Report de l'année précédente", '{0:3d} pér.'.format(self.teacher.previous_report)], ['Mandats', '{0:3d} pér.'.format(activities['tot_mandats'])], ] for act in activities['mandats']: data.append([' * {0} ({1} pér.)'.format(act.subject, act.period)]) data.extend([ ['Enseignement (coef.2)', '{0:3d} pér.'.format(activities['tot_ens'])], ['Formation continue et autres tâches', '{0:3d} pér.'.format(activities['tot_formation'])], ['Total des heures travaillées', '{0:3d} pér.'.format(activities['tot_trav']), '{0:4.1f} %'.format(activities['tot_trav'] / settings.GLOBAL_CHARGE_PERCENT)], ['Total des heures payées', '{0:3d} pér.'.format(activities['tot_paye']), '{0:4.1f} %'.format(activities['tot_paye'] / settings.GLOBAL_CHARGE_PERCENT)], ["Report à l'année prochaine", '{0:3d} pér.'.format(activities['report'])], ]) t = Table( data, colWidths=[12 * cm, 2 * cm, 2 * cm], hAlign=TA_CENTER, rowHeights=(0.6 * cm), spaceBefore=0.4 * cm, spaceAfter=1.5 * cm ) t.setStyle(TableStyle([ ('ALIGN', (1, 0), (-1, -1), 'RIGHT'), ('LINEABOVE', (0, -3), (-1, -1), 0.5, colors.black), ('FONT', (0, -2), (-1, -2), 'Helvetica-Bold'), ('FONTSIZE', (0, 0), (-1, -1), 8), ])) self.story.append(t) d = 'La Chaux-de-Fonds, le {0}'.format(django_format(date.today(), 'j F Y')) self.story.append(Paragraph(d, style_normal)) self.story.append(Spacer(0, 0.5 * cm)) self.story.append(Paragraph('la direction', style_normal)) if (activities['tot_paye'] == settings.GLOBAL_CHARGE_TOTAL and activities['tot_paye'] != activities['tot_trav']): self.story.append(Spacer(0, 1 * cm)) d = 'Je soussigné-e déclare accepter les conditions ci-dessus pour la régularisation de mon salaire.' self.story.append(Paragraph(d, style_normal)) self.story.append(Spacer(0, 1 * cm)) self.story.append(Paragraph('Lieu, date et signature: ' + self.points, style_normal)) self.story.append(PageBreak()) self.build(self.story)
def get_initial(self): initial = super().get_initial() to = [ self.student.email, self.student.expert.email, self.student.internal_expert.email ] src_email = 'email/student_convocation_EDE.txt' # Recipients with ladies first! recip_names = sorted([ self.student.civility_full_name, self.student.expert.civility_full_name, self.student.internal_expert.civility_full_name, ]) titles = [ self.student.civility, self.student.expert.civility, self.student.internal_expert.civility, ] mme_count = titles.count('Madame') # Civilities, with ladies first! if mme_count == 0: civilities = 'Messieurs' elif mme_count == 1: civilities = 'Madame, Messieurs' elif mme_count == 2: civilities = 'Mesdames, Monsieur' else: civilities = 'Mesdames' msg_context = { 'recipient1': recip_names[0], 'recipient2': recip_names[1], 'recipient3': recip_names[2], 'student': self.student, 'sender': self.request.user, 'global_civilities': civilities, 'date_examen': django_format(self.student.date_exam, 'l j F Y à H\hi'), 'salle': self.student.room, } initial.update({ 'cci': self.request.user.email, 'to': '; '.join(to), 'subject': "Convocation à la soutenance de travail de diplôme", 'message': loader.render_to_string(src_email, msg_context), 'sender': self.request.user.email, }) return initial
def add_private_data(self, person): self.story.append(Spacer(0, 0.5 * cm)) self.story.append(Paragraph('DONNÉES PRIVÉES', style_bold)) self.story.append(Spacer(0, 0.2 * cm)) data = [ [self.formating('Nom : '), person.last_name or self.points], [self.formating('Prénom :'), person.first_name or self.points], [ self.formating('Date de naissance :'), django_format(person.birth_date, 'j F Y') if person.birth_date else self.points ], [self.formating('N° de téléphone :'), person.tel or self.points], [self.formating('Adresse complète :'), person.street or self.points], ['', person.pcode_city if person.pcode else self.points], ['', self.points], [self.formating('Employeur :'), person.corporation.name if person.corporation else self.points], [Spacer(0, 0.2 * cm)], ] t = Table(data, colWidths=[4 * cm, 12 * cm], hAlign=TA_LEFT) t.setStyle(TableStyle([ ('ALIGN', (1, 0), (-1, -1), 'LEFT'), ('BOX', (0, 0), (-1, -1), 0.25, colors.black), ])) self.story.append(t) self.story.append(Spacer(0, 0.5 * cm)) self.story.append(Paragraph('COORDONNÉES DE PAIEMENT', style_bold)) self.story.append(Spacer(0, 0.2 * cm)) data = [ [self.formating('N° de ccp ou compte bancaire :'), person.ccp or self.points], [self.formating('Si banque, nom et adresse de celle-ci :'), person.bank or self.points], [self.formating('ainsi que N° IBAN :'), person.iban or self.points], ] t = Table(data, colWidths=[4 * cm, 12 * cm], hAlign=TA_LEFT) t.setStyle(TableStyle([ ('ALIGN', (1, 0), (-1, -1), 'LEFT'), ('BOX', (0, 0), (-1, -1), 0.25, colors.black), ])) self.story.append(t) self.story.append(Spacer(0, 0.5 * cm))
def produce(self, klass): data = [[ 'Rôle de classe : {0}'.format(klass.name), 'La Chaux-de-Fonds, le {0}'.format( django_format(date.today(), 'j F Y')) ]] t = Table(data, colWidths=[9 * cm, 9 * cm], rowHeights=(0.4 * cm), hAlign=TA_LEFT, spaceAfter=1 * cm) t.setStyle( TableStyle([ ('ALIGN', (0, 0), (0, 0), 'LEFT'), ('ALIGN', (1, 0), (1, 0), 'RIGHT'), ('VALIGN', (0, 0), (-1, -1), 'TOP'), ('FONTSIZE', (0, 0), (0, 0), 12), ('FONT', (0, 0), (0, 0), 'Helvetica-Bold'), ('FONTSIZE', (1, 0), (1, 0), 8), ('FONT', (1, 0), (1, 0), 'Helvetica'), ])) self.story.append(t) data = [] for index, student in enumerate(klass.student_set.all().filter( archived=False).order_by('last_name', 'first_name')): data.append([ '{0}.'.format(index + 1), '{0} {1}'.format(student.last_name, student.first_name), student.street, student.pcode_city, student.mobile ]) data.append( ['', ' Form./Employeur:', student.instructor or '']) data.append(['']) data.append(['']) t = Table(data[0:52], colWidths=[1 * cm, 5 * cm, 5 * cm, 5 * cm, 2 * cm], rowHeights=(0.4 * cm), hAlign=TA_LEFT) t.setStyle( TableStyle([ ('ALIGN', (0, 0), (0, -1), 'RIGHT'), ('ALIGN', (1, 0), (-1, -1), 'LEFT'), ('VALIGN', (0, 0), (-1, -1), 'TOP'), ('FONTSIZE', (0, 0), (-1, -1), 8), ])) self.story.append(t) if len(data) > 52: self.story.append(PageBreak()) self.story.append( Paragraph("Rôle de classe {0}".format(klass.name), style_bold_title)) self.story.append(Spacer(0, 2 * cm)) t = Table(data[52:], colWidths=[1 * cm, 5 * cm, 5 * cm, 5 * cm, 2 * cm], rowHeights=(0.4 * cm), hAlign=TA_LEFT) t.setStyle( TableStyle([ ('ALIGN', (0, 0), (0, -1), 'RIGHT'), ('ALIGN', (1, 0), (-1, -1), 'LEFT'), ('VALIGN', (0, 0), (-1, -1), 'TOP'), ('FONTSIZE', (0, 0), (-1, -1), 8), ])) self.story.append(t) self.build(self.story)
def produce(self): self.add_address(self.student.expert) ptext = """ <br/><br/><br/> La Chaux-de-Fonds, le {current_date}<br/> N/réf.:ASH/val<br/> <br/><br/><br/> <strong>Travail de diplôme</strong> <br/><br/><br/> {expert_civility},<br/><br/> Vous avez accepté de fonctionner comme expert{expert_accord} pour un travail de diplôme de l'un-e de nos étudiant-e-s. Nous vous remercions très chaleureusement de votre disponibilité.<br/><br/> En annexe, nous avons l'avantage de vous remettre le travail de {student_civility_full_name}, ainsi que la grille d'évaluation commune aux deux membres du jury.<br/><br/> La soutenance de ce travail de diplôme se déroulera le:<br/><br/> """ self.story.append( Paragraph( ptext.format( current_date=django_format(date.today(), 'j F Y'), expert_civility=self.student.expert.civility, expert_accord=self.student.expert.adjective_ending, student_civility_full_name=self.student.civility_full_name, ), style_normal)) ptext = "<br/>{0} à l'Ecole Santé-social Pierre-Coullery, salle {1}<br/><br/>" self.story.append( Paragraph( ptext.format( django_format(self.student.date_exam, 'l j F Y à H\hi'), self.student.room), style_bold_center)) ptext = """ <br/> L'autre membre du jury sera {internal_expert_civility} {internal_expert_full_name}, {internal_expert_role} dans notre école.<br/> <br/> Par ailleurs, nous nous permettons de vous faire parvenir en annexe le formulaire «Indemnisation d'experts aux examens» que vous voudrez bien compléter au niveau des «données privées / coordonnées de paiement» et nous retourner dans les meilleurs délais. <br/><br/> Restant à votre disposition pour tout complément d'information et en vous remerciant de l'attention que vous porterez à la présente, nous vous prions d'agréer, {expert_civility}, l'asurance de notre considération distinguée.<br/> <br/><br/><br/> La responsable de filière:<br/> <br/><br/> {resp_filiere} <br/><br/><br/> Annexes: ment. """ self.story.append( Paragraph( ptext.format( internal_expert_civility=self.student.internal_expert. civility, internal_expert_full_name=self.student.internal_expert. full_name, internal_expert_role=self.student.internal_expert.role, expert_civility=self.student.expert.civility, resp_filiere=settings.RESP_FILIERE_EDE, ), style_normal)) # ISO page self.story.append(NextPageTemplate('ISOPage')) self.story.append(PageBreak()) self.add_private_data(self.student.expert) self.story.append( Paragraph( "Mandat: Soutenance de {0} {1}, classe {2}".format( self.student.civility, self.student.full_name, self.student.klass), style_normal)) self.story.append( Paragraph( "Date de l'examen : {}".format( django_format(self.student.date_exam, 'l j F Y')), style_normal)) self.story.append(Spacer(0, 2 * cm)) self.add_accounting_stamp(self.EXPERT_MANDAT) self.build(self.story)
def produce(self, activities): self.add_address(self.teacher) tot_hyperplanning = activities['tot_mandats'] + activities['tot_ens'] self.story.append(Paragraph(settings.CHARGE_SHEET_TITLE, style_bold)) self.story.append(HorLine(450)) self.story.append((Paragraph( 'Total HyperPlanning: {} pér.'.format(tot_hyperplanning), style_smallx))) data = [ [ "Report de l'année précédente", '{0:3d} pér.'.format(self.teacher.previous_report) ], ['Mandats', '{0:3d} pér.'.format(activities['tot_mandats'])], ] for act in activities['mandats']: data.append( [' * {0} ({1} pér.)'.format(act.subject, act.period)]) data.extend([ [ 'Enseignement (coef.2)', '{0:3d} pér.'.format(activities['tot_ens']) ], [ 'Formation continue et autres tâches', '{0:3d} pér.'.format(activities['tot_formation']) ], [ 'Total des heures travaillées', '{0:3d} pér.'.format(activities['tot_trav']), '{0:4.1f} %'.format(activities['tot_trav'] / settings.GLOBAL_CHARGE_PERCENT) ], [ 'Total des heures payées', '{0:3d} pér.'.format(activities['tot_paye']), '{0:4.1f} %'.format(activities['tot_paye'] / settings.GLOBAL_CHARGE_PERCENT) ], [ "Report à l'année prochaine", '{0:3d} pér.'.format(activities['report']) ], ]) t = Table(data, colWidths=[12 * cm, 2 * cm, 2 * cm], hAlign=TA_CENTER, rowHeights=(0.6 * cm), spaceBefore=0.4 * cm, spaceAfter=1.5 * cm) t.setStyle( TableStyle([ ('ALIGN', (1, 0), (-1, -1), 'RIGHT'), ('LINEABOVE', (0, -3), (-1, -1), 0.5, colors.black), ('FONT', (0, -2), (-1, -2), 'Helvetica-Bold'), ('FONTSIZE', (0, 0), (-1, -1), 8), ])) self.story.append(t) d = 'La Chaux-de-Fonds, le {0}'.format( django_format(date.today(), 'j F Y')) self.story.append(Paragraph(d, style_normal)) self.story.append(Spacer(0, 0.5 * cm)) self.story.append(Paragraph('la direction', style_normal)) if (activities['tot_paye'] == settings.GLOBAL_CHARGE_TOTAL and activities['tot_paye'] != activities['tot_trav']): self.story.append(Spacer(0, 1 * cm)) d = 'Je soussigné-e déclare accepter les conditions ci-dessus pour la régularisation de mon salaire.' self.story.append(Paragraph(d, style_normal)) self.story.append(Spacer(0, 1 * cm)) self.story.append( Paragraph('Lieu, date et signature: ' + self.points, style_normal)) self.story.append(PageBreak()) self.build(self.story)
def date_formatted(self): return django_format(self.date, "l j F Y à H\hi")
def produce(self, candidate): # personal data options = dict(OPTION_CHOICES) diploma = dict(DIPLOMA_CHOICES) diploma_status = dict(DIPLOMA_STATUS_CHOICES) aes_accords = dict(AES_ACCORDS_CHOICES) residence_permits = dict(RESIDENCE_PERMITS_CHOICES) ts = TableStyle([ ('ALIGN', (0, 0), (-1, -1), 'LEFT'), ('FONT', (0, 0), (-1, -1), 'Helvetica'), ('FONTSIZE', (0, 0), (-1, -1), 8), ]) # Personal data self.story.append(Spacer(0, 2 * cm)) self.story.append(Paragraph("Données personnelles", style_bold)) data = [ ['Nom: ', candidate.last_name, 'Date de naissance:', django_format(candidate.birth_date, 'j F Y') if candidate.birth_date else '?'], ['Prénom:', candidate.first_name, 'Canton:', candidate.district], ['N° de tél.:', candidate.mobile, '',''], ] t = Table(data, colWidths=[4 * cm, 5 * cm, 4 * cm, 4 * cm], hAlign=TA_LEFT) t.setStyle(ts) self.story.append(t) # Inscription self.story.append(Paragraph("Option choisie", style_bold)) data = [ [candidate.get_section_display(), candidate.get_option_display()] ] t = Table(data, colWidths=[6 * cm, 11 * cm], hAlign=TA_LEFT) t.setStyle(ts) self.story.append(t) # Diploma self.story.append(Paragraph("Titres / diplôme / Attestations", style_bold)) detail = '({0})'.format(candidate.diploma_detail) if candidate.diploma_detail else '' data = [ ['{0} {1}'.format(candidate.get_diploma_display(), detail), 'statut: {0}'.format(candidate.get_diploma_status_display())] ] if candidate.diploma == 1: # CFC ASE data.append([ 'Evaluation du dernier stage ASE et/ou dernier rapport de formation', candidate.get_ok('work_certificate'), ]) elif candidate.diploma == 2: # CFC autre domaine data.append([ "Attestation de 800h. dans un seul lieu d'accueil de l'enfance", candidate.get_ok('certif_of_800_childhood') ]) data.append([ "Bilan de l'activité professionnelle", candidate.get_ok('work_certificate') ]) elif candidate.diploma == 3: # Matur, Ecole cult. générale data.extend([ ["Certif. de travail/stage de 800h. dans n'importe quel domaine", candidate.get_ok('certif_of_800_general')], ["Attestation de 800h. dans un seul lieu d'accueil de l'enfance", candidate.get_ok('certif_of_800_childhood')], ["Bilan de l'activité professionnelle", candidate.get_ok('work_certificate')], ]) elif candidate.diploma == 4: # Portfolio data.extend([ ["Certif. de travail/stage de 800h. dans n'importe quel domaine", candidate.get_ok('certif_of_800_general')], ["Attestation de 800h. dans un seul lieu d'accueil de l'enfance", candidate.get_ok('certif_of_800_childhood')], ["Bilan de l'activité professionnelle", candidate.get_ok('work_certificate')], ]) if candidate.option != 'PS': data.append(["Contrat de travail", candidate.get_ok('contract')]) data.append(["Promesse d'engagement", candidate.get_ok('promise')]) data.append(["Taux d'activité", candidate.activity_rate]) t = Table(data, colWidths=[13 * cm, 4 * cm], hAlign=TA_LEFT) t.setStyle(ts) self.story.append(t) # Other documents self.story.append(Paragraph("Autres documents", style_bold)) data = [] docs_required = [ 'registration_form', 'certificate_of_payement', 'police_record', 'cv', 'has_photo', 'reflexive_text', 'marks_certificate', 'handicap', ] for doc in docs_required: data.append([candidate._meta.get_field(doc).verbose_name, candidate.get_ok(doc)]) data.append(['Validation des accords AES', aes_accords[candidate.aes_accords]]) data.append(['Autorisation de séjour (pour les personnes étrangères)', residence_permits[candidate.residence_permits]]) t = Table(data, colWidths=[13 * cm, 4 * cm], hAlign=TA_LEFT) t.setStyle(ts) self.story.append(t) # Remarks self.story.append(Paragraph("Remarques", style_bold)) self.story.append(Paragraph(candidate.comment, style_normal)) self.build(self.story)
def produce(self, klass): data = [ ['Rôle de classe : {0}'.format(klass.name), 'La Chaux-de-Fonds, le {0}'.format(django_format(date.today(), 'j F Y')) ] ] t = Table( data, colWidths=[9 * cm, 9 * cm], rowHeights=(0.4 * cm), hAlign=TA_LEFT, spaceAfter=1 * cm ) t.setStyle(TableStyle( [ ('ALIGN', (0, 0), (0, 0), 'LEFT'), ('ALIGN', (1, 0), (1, 0), 'RIGHT'), ('VALIGN', (0, 0), (-1, -1), 'TOP'), ('FONTSIZE', (0, 0), (0, 0), 12), ('FONT', (0, 0), (0, 0), 'Helvetica-Bold'), ('FONTSIZE', (1, 0), (1, 0), 8), ('FONT', (1, 0), (1, 0), 'Helvetica'), ] )) self.story.append(t) data = [] for index, student in enumerate(klass.student_set.all().filter(archived=False).order_by('last_name', 'first_name')): data.append(['{0}.'.format(index + 1), '{0} {1}'.format(student.last_name, student.first_name), student.street, student.pcode_city, student.mobile]) data.append(['', ' Form./Employeur:', student.instructor or '']) data.append(['']) data.append(['']) t = Table( data[0:52], colWidths=[1 * cm, 5 * cm, 5 * cm, 5 * cm, 2 * cm], rowHeights=(0.4 * cm), hAlign=TA_LEFT ) t.setStyle(TableStyle( [ ('ALIGN', (0, 0), (0, -1), 'RIGHT'), ('ALIGN', (1, 0), (-1, -1), 'LEFT'), ('VALIGN', (0, 0), (-1, -1), 'TOP'), ('FONTSIZE', (0, 0), (-1, -1), 8), ] )) self.story.append(t) if len(data) > 52: self.story.append(PageBreak()) self.story.append(Paragraph("Rôle de classe {0}".format(klass.name), style_bold_title)) self.story.append(Spacer(0, 2 * cm)) t = Table( data[52:], colWidths=[1 * cm, 5 * cm, 5 * cm, 5 * cm, 2 * cm], rowHeights=(0.4 * cm), hAlign=TA_LEFT ) t.setStyle(TableStyle( [ ('ALIGN', (0, 0), (0, -1), 'RIGHT'), ('ALIGN', (1, 0), (-1, -1), 'LEFT'), ('VALIGN', (0, 0), (-1, -1), 'TOP'), ('FONTSIZE', (0, 0), (-1, -1), 8), ] )) self.story.append(t) self.build(self.story)
def produce(self): self.add_address(self.student.expert) ptext = """ <br/><br/><br/> La Chaux-de-Fonds, le {current_date}<br/> N/réf.:ASH/val<br/> <br/><br/><br/> <strong>Travail de diplôme</strong> <br/><br/><br/> {expert_civility},<br/><br/> Vous avez accepté de fonctionner comme expert{expert_accord} pour un travail de diplôme de l'un-e de nos étudiant-e-s. Nous vous remercions très chaleureusement de votre disponibilité.<br/><br/> En annexe, nous avons l'avantage de vous remettre le travail de {student_civility_full_name}, ainsi que la grille d'évaluation commune aux deux membres du jury.<br/><br/> La soutenance de ce travail de diplôme se déroulera le:<br/><br/> """ self.story.append(Paragraph(ptext.format( current_date=django_format(date.today(), 'j F Y'), expert_civility=self.student.expert.civility, expert_accord=self.student.expert.adjective_ending, student_civility_full_name=self.student.civility_full_name, ), style_normal)) ptext = "<br/>{0} à l'Ecole Santé-social Pierre-Coullery, salle {1}<br/><br/>" self.story.append(Paragraph(ptext.format( django_format(self.student.date_exam, 'l j F Y à H\hi'), self.student.room ), style_bold_center)) ptext = """ <br/> L'autre membre du jury sera {internal_expert_civility} {internal_expert_full_name}, {internal_expert_role} dans notre école.<br/> <br/> Par ailleurs, nous nous permettons de vous faire parvenir en annexe le formulaire «Indemnisation d'experts aux examens» que vous voudrez bien compléter au niveau des «données privées / coordonnées de paiement» et nous retourner dans les meilleurs délais. <br/><br/> Restant à votre disposition pour tout complément d'information et en vous remerciant de l'attention que vous porterez à la présente, nous vous prions d'agréer, {expert_civility}, l'asurance de notre considération distinguée.<br/> <br/><br/><br/> La responsable de filière:<br/> <br/><br/> {resp_filiere} <br/><br/><br/> Annexes: ment. """ self.story.append(Paragraph(ptext.format( internal_expert_civility=self.student.internal_expert.civility, internal_expert_full_name=self.student.internal_expert.full_name, internal_expert_role=self.student.internal_expert.role, expert_civility=self.student.expert.civility, resp_filiere=settings.RESP_FILIERE_EDE, ), style_normal)) # ISO page self.story.append(NextPageTemplate('ISOPage')) self.story.append(PageBreak()) self.add_private_data(self.student.expert) self.story.append(Paragraph( "Mandat: Soutenance de {0} {1}, classe {2}".format( self.student.civility, self.student.full_name, self.student.klass ), style_normal )) self.story.append(Paragraph( "Date de l'examen : {}".format(django_format(self.student.date_exam, 'l j F Y')), style_normal )) self.story.append(Spacer(0, 2 * cm)) self.add_accounting_stamp(self.EXPERT_MANDAT) self.build(self.story)