def Modifier(self, event): if UTILS_Utilisateurs.VerificationDroitsUtilisateurActuel( "parametrage_modeles_docs", "modifier") == False: return if len(self.Selection()) == 0: dlg = wx.MessageDialog( self, _(u"Vous n'avez sélectionné aucun modèle à modifier dans la liste !" ), _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION) dlg.ShowModal() dlg.Destroy() return track = self.Selection()[0] IDmodele = track.IDmodele from Dlg import DLG_Noedoc dlg = DLG_Noedoc.Dialog( self, IDmodele=IDmodele, nom=track.nom, observations=track.observations, IDfond=track.IDfond, categorie=self.categorie, taille_page=track.taille, ) if dlg.ShowModal() == wx.ID_OK: self.MAJ(IDmodele) dlg.Destroy()
def __init__(self, dictValeurs={}, dictOptions={}, IDmodele=None, ouverture=True, nomFichier=None): """ Impression """ global DICT_VALEURS, DICT_OPTIONS DICT_VALEURS = dictValeurs DICT_OPTIONS = dictOptions # Initialisation du document if nomFichier == None: nomDoc = FonctionsPerso.GenerationNomDoc("LOCATIONS", "pdf") else: nomDoc = nomFichier doc = BaseDocTemplate(nomDoc, pagesize=TAILLE_PAGE, showBoundary=False) # Mémorise le ID du modèle modeleDoc = DLG_Noedoc.ModeleDoc(IDmodele=IDmodele) doc.modeleDoc = modeleDoc # Importe le template de la première page doc.addPageTemplates(MyPageTemplate(pageSize=TAILLE_PAGE, doc=doc)) story = [] styleSheet = getSampleStyleSheet() h3 = styleSheet['Heading3'] styleTexte = styleSheet['BodyText'] styleTexte.fontName = "Helvetica" styleTexte.fontSize = 9 styleTexte.borderPadding = 9 styleTexte.leading = 12 # ----------- Insertion du contenu des frames -------------- listeLabels = [] for IDlocation, dictValeur in dictValeurs.iteritems(): listeLabels.append((dictValeur["{FAMILLE_NOM}"], IDlocation)) listeLabels.sort() for labelDoc, IDlocation in listeLabels: dictValeur = dictValeurs[IDlocation] if dictValeur["select"] == True: story.append(DocAssign("IDlocation", IDlocation)) nomSansCivilite = dictValeur["{FAMILLE_NOM}"] story.append(Bookmark(nomSansCivilite, str(IDlocation))) # Saut de page story.append(PageBreak()) # Finalisation du PDF doc.build(story) # Ouverture du PDF if ouverture == True: FonctionsPerso.LanceFichierExterne(nomDoc)
def SetModele(self, IDmodele=None): # Initialisation du modèle de document if IDmodele == None : self.largeurEtiquette = 0 self.hauteurEtiquette = 0 return modeleDoc = DLG_Noedoc.ModeleDoc(IDmodele=IDmodele) self.largeurEtiquette = modeleDoc.dictInfosModele["largeur"] self.hauteurEtiquette = modeleDoc.dictInfosModele["hauteur"]
def Ajouter(self, event): if UTILS_Utilisateurs.VerificationDroitsUtilisateurActuel("parametrage_modeles_docs", "creer") == False : return from Dlg import DLG_Noedoc dlg = DLG_Noedoc.Dialog(self, IDmodele=None, nom=u"", observations=u"", IDfond=None, categorie=self.categorie, taille_page=(210, 297), ) if dlg.ShowModal() == wx.ID_OK: IDmodele = dlg.GetIDmodele() self.MAJ(IDmodele) dlg.Destroy()
def __init__(self, dictValeurs={}, dictOptions={}, IDmodele=None, ouverture=True, nomFichier=None): """ Impression """ global DICT_VALEURS, DICT_OPTIONS DICT_VALEURS = dictValeurs DICT_OPTIONS = dictOptions # Initialisation du document if nomFichier == None: nomDoc = FonctionsPerso.GenerationNomDoc("INSCRIPTIONS", "pdf") else: nomDoc = nomFichier doc = BaseDocTemplate(nomDoc, pagesize=TAILLE_PAGE, showBoundary=False) # Mémorise le ID du modèle modeleDoc = DLG_Noedoc.ModeleDoc(IDmodele=IDmodele) doc.modeleDoc = modeleDoc # Importe le template de la première page doc.addPageTemplates(MyPageTemplate(pageSize=TAILLE_PAGE, doc=doc)) story = [] styleSheet = getSampleStyleSheet() h3 = styleSheet['Heading3'] styleTexte = styleSheet['BodyText'] styleTexte.fontName = "Helvetica" styleTexte.fontSize = 9 styleTexte.borderPadding = 9 styleTexte.leading = 12 # ----------- Insertion du contenu des frames -------------- listeLabels = [] for IDinscription, dictValeur in dictValeurs.items(): listeLabels.append((dictValeur["{FAMILLE_NOM}"], IDinscription)) listeLabels.sort() for labelDoc, IDinscription in listeLabels: dictValeur = dictValeurs[IDinscription] if dictValeur["select"] == True: story.append(DocAssign("IDinscription", IDinscription)) nomSansCivilite = dictValeur["{FAMILLE_NOM}"] story.append(Bookmark(nomSansCivilite, str(IDinscription))) # ----------- Insertion du cadre principal -------------- cadre_principal = doc.modeleDoc.FindObjet("cadre_principal") if cadre_principal != None: if "intro" in DICT_OPTIONS and DICT_OPTIONS[ "intro"] != None or "tableau" in DICT_OPTIONS and DICT_VALEURS[ "tableau"] == True: # ------------------- TITRE ----------------- dataTableau = [] largeursColonnes = [ TAILLE_CADRE_CONTENU[2], ] dataTableau.append( (_(u"Confirmation d'inscription"), )) dataTableau.append((u"", )) style = TableStyle([ ('VALIGN', (0, 0), (-1, -1), 'MIDDLE'), ('FONT', (0, 0), (0, 0), "Helvetica-Bold", 19), ('FONT', (0, 1), (0, 1), "Helvetica", 8), ('LINEBELOW', (0, 0), (0, 0), 0.25, colors.black), ('ALIGN', (0, 0), (-1, -1), 'LEFT'), ]) tableau = Table(dataTableau, largeursColonnes) tableau.setStyle(style) story.append(tableau) story.append(Spacer(0, 10)) # TEXTE D'INTRODUCTION paraStyleIntro = ParagraphStyle( name="intro", fontName="Helvetica", fontSize=11, leading=14, spaceBefore=0, spaceafter=0, leftIndent=0, rightIndent=0, alignment=0, ) if "intro" in DICT_OPTIONS and DICT_OPTIONS[ "intro"] != None: texteIntro = DICT_VALEURS["intro"] story.append( Paragraph(u"<i>%s</i>" % texteIntro, paraStyleIntro)) story.append(Spacer(0, 20)) if "tableau" in DICT_OPTIONS and DICT_OPTIONS[ "tableau"] == True: # ------------------- TABLEAU CONTENU ----------------- dataTableau = [] largeursColonnes = [80, 280] paraStyle = ParagraphStyle( name="detail", fontName="Helvetica-Bold", fontSize=9, ) dataTableau.append( (_(u"Nom"), Paragraph(DICT_VALEURS["{INDIVIDU_NOM}"], paraStyle))) dataTableau.append( (_(u"Prénom"), Paragraph(DICT_VALEURS["{INDIVIDU_PRENOM}"], paraStyle))) dataTableau.append( (_(u"Activité"), Paragraph(DICT_VALEURS["{ACTIVITE_NOM_LONG}"], paraStyle))) dataTableau.append( (_(u"Groupe"), Paragraph(DICT_VALEURS["{GROUPE_NOM_LONG}"], paraStyle))) dataTableau.append( (_(u"Catégorie"), Paragraph(DICT_VALEURS["{NOM_CATEGORIE_TARIF}"], paraStyle))) style = TableStyle([ ('VALIGN', (0, 0), (-1, -1), 'MIDDLE'), ('FONT', (0, 0), (0, -1), "Helvetica", 9), ('GRID', (0, 0), (-1, -1), 0.25, colors.black), ('ALIGN', (0, 0), (0, -1), 'RIGHT'), ]) tableau = Table(dataTableau, largeursColonnes) tableau.setStyle(style) story.append(tableau) # Saut de page story.append(PageBreak()) # Finalisation du PDF doc.build(story) # Ouverture du PDF if ouverture == True: FonctionsPerso.LanceFichierExterne(nomDoc)
def __init__(self, dictValeurs={}, IDmodele=None, nomDoc=FonctionsPerso.GenerationNomDoc( "RECU_REGLEMENT", "pdf"), afficherDoc=True): """ Impression """ global DICT_VALEURS DICT_VALEURS = dictValeurs # Initialisation du document doc = BaseDocTemplate(nomDoc, pagesize=TAILLE_PAGE, showBoundary=False) # Mémorise le ID du modèle modeleDoc = DLG_Noedoc.ModeleDoc(IDmodele=IDmodele) doc.modeleDoc = modeleDoc # Vérifie qu'un cadre principal existe bien dans le document if doc.modeleDoc.FindObjet("cadre_principal") == None: raise Exception( "Votre modele de document doit obligatoirement comporter un cadre principal. Retournez dans l'editeur de document et utilisez pour votre modele la commande 'Inserer un objet special > Inserer le cadre principal'." ) # Mémorise le ID du modèle modeleDoc = DLG_Noedoc.ModeleDoc(IDmodele=IDmodele) doc.modeleDoc = modeleDoc doc.addPageTemplates(MyPageTemplate(pageSize=TAILLE_PAGE, doc=doc)) story = [] styleSheet = getSampleStyleSheet() h3 = styleSheet['Heading3'] styleTexte = styleSheet['BodyText'] styleTexte.fontName = "Helvetica" styleTexte.fontSize = 9 styleTexte.borderPadding = 9 styleTexte.leading = 12 ## # Définit le template des pages suivantes ## story.append(NextPageTemplate("suivante")) # ----------- Insertion du contenu des frames -------------- # ------------------- TITRE ----------------- dataTableau = [] largeursColonnes = [ TAILLE_CADRE_CONTENU[2], ] dataTableau.append((_(u"Reçu de règlement"), )) dataTableau.append((u"", )) style = TableStyle([ ('VALIGN', (0, 0), (-1, -1), 'MIDDLE'), ('FONT', (0, 0), (0, 0), "Helvetica-Bold", 19), ('FONT', (0, 1), (0, 1), "Helvetica", 8), ('LINEBELOW', (0, 0), (0, 0), 0.25, colors.black), ('ALIGN', (0, 0), (-1, -1), 'LEFT'), ]) tableau = Table(dataTableau, largeursColonnes) tableau.setStyle(style) story.append(tableau) story.append(Spacer(0, 10)) # TEXTE D'INTRODUCTION paraStyleIntro = ParagraphStyle( name="intro", fontName="Helvetica", fontSize=11, leading=14, spaceBefore=0, spaceafter=0, leftIndent=0, rightIndent=0, alignment=0, ) if DICT_VALEURS["intro"] != None: texteIntro = DICT_VALEURS["intro"] story.append(Paragraph(u"<i>%s</i>" % texteIntro, paraStyleIntro)) story.append(Spacer(0, 20)) couleurFond = (0.8, 0.8, 1) # ------------------- TABLEAU CONTENU ----------------- dataTableau = [] largeursColonnes = [120, 280] paraStyle = ParagraphStyle( name="detail", fontName="Helvetica-Bold", fontSize=9, ) dataTableau.append((_(u"Caractéristiques du règlement"), "")) montantEnLettres = UTILS_Conversion.trad(DICT_VALEURS["montant"], MONNAIE_SINGULIER, MONNAIE_DIVISION).strip() dataTableau.append((_(u"Montant du règlement :"), Paragraph(montantEnLettres.capitalize(), paraStyle))) dataTableau.append((_(u"Mode de règlement :"), Paragraph(DICT_VALEURS["nomMode"], paraStyle))) dataTableau.append((_(u"Nom du payeur :"), Paragraph(DICT_VALEURS["nomPayeur"], paraStyle))) if DICT_VALEURS["nomEmetteur"] != None: dataTableau.append((_(u"Nom de l'émetteur :"), Paragraph(DICT_VALEURS["nomEmetteur"], paraStyle))) if DICT_VALEURS["numPiece"] not in ("", None): dataTableau.append((_(u"Numéro de pièce :"), Paragraph(DICT_VALEURS["numPiece"], paraStyle))) style = TableStyle([ ('VALIGN', (0, 0), (-1, -1), 'MIDDLE'), ('FONT', (0, 0), (0, -1), "Helvetica", 9), ('FONT', (1, 0), (1, -1), "Helvetica-Bold", 9), ('GRID', (0, 0), (-1, -1), 0.25, colors.black), ('ALIGN', (0, 1), (0, -1), 'RIGHT'), ('ALIGN', (1, 1), (1, -1), 'LEFT'), ('FONT', (0, 0), (0, 0), "Helvetica", 7), ('SPAN', (0, 0), (-1, 0)), ('BACKGROUND', (0, 0), (-1, 0), couleurFond), ]) tableau = Table(dataTableau, largeursColonnes) tableau.setStyle(style) story.append(tableau) # --------------------- LISTE DES PRESTATIONS ---------------- listePrestations = dictValeurs["prestations"] if len(listePrestations) > 0: story.append(Spacer(0, 20)) textePrestations = _(u"En paiement des prestations suivantes :") story.append( Paragraph(u"<i>%s</i>" % textePrestations, paraStyleIntro)) story.append(Spacer(0, 20)) dataTableau = [ (_(u"Date"), _(u"Activité"), _(u"Individu"), _(u"Intitulé"), _(u"Part utilisée")), ] largeursColonnes = [50, 95, 70, 135, 50] paraStyle = ParagraphStyle( name="detail", fontName="Helvetica", fontSize=7, leading=7, spaceBefore=0, spaceAfter=0, ) for dictPrestation in listePrestations: date = UTILS_Dates.DateDDEnFr(dictPrestation["date"]) activite = dictPrestation["nomActivite"] individu = dictPrestation["prenomIndividu"] label = dictPrestation["label"] montant = dictPrestation["montant"] ventilation = dictPrestation["ventilation"] dataTableau.append(( Paragraph(u"<para align='center'>%s</para>" % date, paraStyle), Paragraph(activite, paraStyle), Paragraph(individu, paraStyle), Paragraph(label, paraStyle), Paragraph( u"<para align='right'>%.2f %s</para>" % (ventilation, SYMBOLE), paraStyle), )) style = TableStyle([ ('VALIGN', (0, 0), (-1, -1), 'MIDDLE'), ('GRID', (0, 0), (-1, -1), 0.25, colors.black), ('FONT', (0, 0), (-1, -1), "Helvetica", 7), ('TOPPADDING', (0, 1), (-1, -1), 1), ('BOTTOMPADDING', (0, 1), (-1, -1), 3), # Ligne Entetes ('FONT', (0, 0), (-1, 0), "Helvetica", 7), ('BACKGROUND', (0, 0), (-1, 0), couleurFond), ('ALIGN', (0, 0), (-1, 0), 'CENTER'), ]) tableau = Table(dataTableau, largeursColonnes) tableau.setStyle(style) story.append(tableau) # Enregistrement et ouverture du PDF try: doc.build(story) except Exception, err: print "Erreur dans ouverture PDF :", err if "Permission denied" in err: dlg = wx.MessageDialog( None, _(u"Noethys ne peut pas créer le PDF.\n\nVeuillez vérifier qu'un autre PDF n'est pas déjà ouvert en arrière-plan..." ), _(u"Erreur d'édition"), wx.OK | wx.ICON_ERROR) dlg.ShowModal() dlg.Destroy() return
def __init__(self, dictComptes={}, dictOptions={}, IDmodele=None, ouverture=True, nomFichier=None): """ Impression """ global DICT_COMPTES, DICT_OPTIONS DICT_COMPTES = dictComptes DICT_OPTIONS = dictOptions # Initialisation du document if nomFichier == None: nomDoc = FonctionsPerso.GenerationNomDoc("RAPPELS", "pdf") else: nomDoc = nomFichier doc = BaseDocTemplate(nomDoc, pagesize=TAILLE_PAGE, showBoundary=False) # Mémorise le ID du modèle modeleDoc = DLG_Noedoc.ModeleDoc(IDmodele=IDmodele) doc.modeleDoc = modeleDoc # Vérifie qu'un cadre principal existe bien dans le document if doc.modeleDoc.FindObjet("cadre_principal") == None: raise Exception( "Votre modele de document doit obligatoirement comporter un cadre principal. Retournez dans l'editeur de document et utilisez pour votre modele la commande 'Inserer un objet special > Inserer le cadre principal'." ) # Importe le template de la première page doc.addPageTemplates(MyPageTemplate(pageSize=TAILLE_PAGE, doc=doc)) story = [] styleSheet = getSampleStyleSheet() h3 = styleSheet['Heading3'] styleTexte = styleSheet['BodyText'] styleTexte.fontName = "Helvetica" styleTexte.fontSize = 9 styleTexte.borderPadding = 9 styleTexte.leading = 12 ## # Définit le template des pages suivantes ## story.append(NextPageTemplate("suivante")) # ----------- Insertion du contenu des frames -------------- listeNomsSansCivilite = [] for IDcompte_payeur, dictCompte in dictComptes.items(): listeNomsSansCivilite.append( (dictCompte["nomSansCivilite"], IDcompte_payeur)) listeNomsSansCivilite.sort() for nomSansCivilite, IDcompte_payeur in listeNomsSansCivilite: dictCompte = dictComptes[IDcompte_payeur] if dictCompte["select"] == True: story.append(DocAssign("IDcompte_payeur", IDcompte_payeur)) nomSansCivilite = dictCompte["nomSansCivilite"] story.append(Bookmark(nomSansCivilite, str(IDcompte_payeur))) # ------------------- TITRE ----------------- dataTableau = [] largeursColonnes = [ TAILLE_CADRE_CONTENU[2], ] dataTableau.append((dictCompte["titre"], )) texteDateReference = DateEngFr(str(datetime.date.today())) dataTableau.append( (_(u"Situation au %s") % texteDateReference, )) style = TableStyle([ ('VALIGN', (0, 0), (-1, -1), 'MIDDLE'), ('FONT', (0, 0), (0, 0), "Helvetica-Bold", 19), ('FONT', (0, 1), (0, 1), "Helvetica", 8), ('LINEBELOW', (0, 0), (0, 0), 0.25, colors.black), ('ALIGN', (0, 0), (-1, -1), 'LEFT'), ]) tableau = Table(dataTableau, largeursColonnes) tableau.setStyle(style) story.append(tableau) story.append(Spacer(0, 30)) couleurFond = (0.8, 0.8, 1) couleurFondActivite = (0.92, 0.92, 1) # TEXTE CONTENU paraStyle = ParagraphStyle( name="contenu", fontName="Helvetica", fontSize=11, #leading=7, spaceBefore=0, spaceafter=0, leftIndent=6, rightIndent=6, ) texte = dictCompte["texte"] listeParagraphes = texte.split("</para>") for paragraphe in listeParagraphes: if "<para" in paragraphe: paragraphe = u"%s</para>" % paragraphe textePara = Paragraph(paragraphe, paraStyle) story.append(textePara) if "> </para" in paragraphe: story.append(Spacer(0, 13)) # Saut de page story.append(PageBreak()) # Finalisation du PDF doc.build(story) # Ouverture du PDF if ouverture == True: FonctionsPerso.LanceFichierExterne(nomDoc)
def __init__(self, dictValeurs={}, IDmodele=None, nomDoc=FonctionsPerso.GenerationNomDoc("INSCRIPTION", "pdf"), afficherDoc=True): """ Impression """ global DICT_VALEURS DICT_VALEURS = dictValeurs # Initialisation du document doc = BaseDocTemplate(nomDoc, pagesize=TAILLE_PAGE, showBoundary=False) # Mémorise le ID du modèle modeleDoc = DLG_Noedoc.ModeleDoc(IDmodele=IDmodele) doc.modeleDoc = modeleDoc doc.addPageTemplates(MyPageTemplate(pageSize=TAILLE_PAGE, doc=doc)) story = [] styleSheet = getSampleStyleSheet() h3 = styleSheet['Heading3'] styleTexte = styleSheet['BodyText'] styleTexte.fontName = "Helvetica" styleTexte.fontSize = 9 styleTexte.borderPadding = 9 styleTexte.leading = 12 couleurFond = (0.8, 0.8, 1) # ----------- Insertion du contenu des frames -------------- cadre_principal = doc.modeleDoc.FindObjet("cadre_principal") if cadre_principal != None: if DICT_VALEURS["intro"] != None or DICT_VALEURS["tableau"] == True: # ------------------- TITRE ----------------- dataTableau = [] largeursColonnes = [ TAILLE_CADRE_CONTENU[2], ] dataTableau.append((_(u"Confirmation d'inscription"), )) dataTableau.append((u"", )) style = TableStyle([ ('VALIGN', (0, 0), (-1, -1), 'MIDDLE'), ('FONT', (0, 0), (0, 0), "Helvetica-Bold", 19), ('FONT', (0, 1), (0, 1), "Helvetica", 8), ('LINEBELOW', (0, 0), (0, 0), 0.25, colors.black), ('ALIGN', (0, 0), (-1, -1), 'LEFT'), ]) tableau = Table(dataTableau, largeursColonnes) tableau.setStyle(style) story.append(tableau) story.append(Spacer(0, 10)) # TEXTE D'INTRODUCTION paraStyleIntro = ParagraphStyle( name="intro", fontName="Helvetica", fontSize=11, leading=14, spaceBefore=0, spaceafter=0, leftIndent=0, rightIndent=0, alignment=0, ) if DICT_VALEURS["intro"] != None: texteIntro = DICT_VALEURS["intro"] story.append( Paragraph(u"<i>%s</i>" % texteIntro, paraStyleIntro)) story.append(Spacer(0, 20)) if DICT_VALEURS["tableau"] == True: # ------------------- TABLEAU CONTENU ----------------- dataTableau = [] largeursColonnes = [80, 280] paraStyle = ParagraphStyle( name="detail", fontName="Helvetica-Bold", fontSize=9, ) dataTableau.append((_(u"Nom"), Paragraph(DICT_VALEURS["{INDIVIDU_NOM}"], paraStyle))) dataTableau.append( (_(u"Prénom"), Paragraph(DICT_VALEURS["{INDIVIDU_PRENOM}"], paraStyle))) dataTableau.append( (_(u"Activité"), Paragraph(DICT_VALEURS["{ACTIVITE_NOM_LONG}"], paraStyle))) dataTableau.append( (_(u"Groupe"), Paragraph(DICT_VALEURS["{GROUPE_NOM_LONG}"], paraStyle))) dataTableau.append( (_(u"Catégorie"), Paragraph(DICT_VALEURS["{NOM_CATEGORIE_TARIF}"], paraStyle))) style = TableStyle([ ('VALIGN', (0, 0), (-1, -1), 'MIDDLE'), ('FONT', (0, 0), (0, -1), "Helvetica", 9), ('GRID', (0, 0), (-1, -1), 0.25, colors.black), ('ALIGN', (0, 0), (0, -1), 'RIGHT'), ]) tableau = Table(dataTableau, largeursColonnes) tableau.setStyle(style) story.append(tableau) # Si aucune frame principale if len(story) == 0: story.append(Spacer(0, 20)) # Enregistrement et ouverture du PDF try: doc.build(story) except Exception, err: print "Erreur dans ouverture PDF :", err if "Permission denied" in err: dlg = wx.MessageDialog( None, _(u"Noethys ne peut pas créer le PDF.\n\nVeuillez vérifier qu'un autre PDF n'est pas déjà ouvert en arrière-plan..." ), _(u"Erreur d'édition"), wx.OK | wx.ICON_ERROR) dlg.ShowModal() dlg.Destroy() return
def __init__(self, dictValeurs={}, dictOptions={}, IDmodele=None, ouverture=True, nomFichier=None): """ Impression """ global DICT_VALEURS, DICT_OPTIONS DICT_VALEURS = dictValeurs DICT_OPTIONS = dictOptions # Initialisation du document if nomFichier == None: nomDoc = FonctionsPerso.GenerationNomDoc("COTISATIONS", "pdf") else: nomDoc = nomFichier doc = BaseDocTemplate(nomDoc, pagesize=TAILLE_PAGE, showBoundary=False) # Mémorise le ID du modèle modeleDoc = DLG_Noedoc.ModeleDoc(IDmodele=IDmodele) doc.modeleDoc = modeleDoc # Importe le template de la première page doc.addPageTemplates(MyPageTemplate(pageSize=TAILLE_PAGE, doc=doc)) story = [] styleSheet = getSampleStyleSheet() h3 = styleSheet['Heading3'] styleTexte = styleSheet['BodyText'] styleTexte.fontName = "Helvetica" styleTexte.fontSize = 9 styleTexte.borderPadding = 9 styleTexte.leading = 12 # ----------- Insertion du contenu des frames -------------- listeLabels = [] for IDcotisation, dictValeur in dictValeurs.iteritems(): listeLabels.append((dictValeur["{FAMILLE_NOM}"], IDcotisation)) listeLabels.sort() for labelDoc, IDcotisation in listeLabels: dictValeur = dictValeurs[IDcotisation] if dictValeur["select"] == True: story.append(DocAssign("IDcotisation", IDcotisation)) nomSansCivilite = dictValeur["{FAMILLE_NOM}"] story.append(Bookmark(nomSansCivilite, str(IDcotisation))) ## # ------------------- TITRE ----------------- ## dataTableau = [] ## largeursColonnes = [ TAILLE_CADRE_CONTENU[2], ] ## dataTableau.append((dictCompte["titre"],)) ## texteDateReference = UTILS_Dates.DateEngFr(str(datetime.date.today())) ## dataTableau.append((_(u"Situation au %s") % texteDateReference,)) ## style = TableStyle([ ## ('VALIGN', (0,0), (-1,-1), 'MIDDLE'), ## ('FONT',(0,0),(0,0), "Helvetica-Bold", 19), ## ('FONT',(0,1),(0,1), "Helvetica", 8), ## ('LINEBELOW', (0,0), (0,0), 0.25, colors.black), ## ('ALIGN', (0,0), (-1,-1), 'LEFT'), ## ]) ## tableau = Table(dataTableau, largeursColonnes) ## tableau.setStyle(style) ## story.append(tableau) ## story.append(Spacer(0,30)) ## ## ## couleurFond = (0.8, 0.8, 1) ## couleurFondActivite = (0.92, 0.92, 1) ## ## # TEXTE CONTENU ## paraStyle = ParagraphStyle(name="contenu", ## fontName="Helvetica", ## fontSize=11, ## #leading=7, ## spaceBefore=0, ## spaceafter=0, ## leftIndent=6, ## rightIndent=6, ## ) ## ## texte = dictCompte["texte"] ## listeParagraphes = texte.split("</para>") ## for paragraphe in listeParagraphes : ## textePara = Paragraph(u"%s</para>" % paragraphe, paraStyle) ## story.append(textePara) # Saut de page story.append(PageBreak()) # Finalisation du PDF doc.build(story) # Ouverture du PDF if ouverture == True: FonctionsPerso.LanceFichierExterne(nomDoc)
def __init__( self, IDmodele=None, taillePage=(210, 297), listeValeurs=[], margeHaut=10, margeGauche=10, margeBas=10, margeDroite=10, espaceVertical=5, espaceHorizontal=5, nbre_copies=1, AfficherContourEtiquette=True, AfficherReperesDecoupe=True, ): # ---------------------------------------------------------------------------------------------------------------------------------------- def AfficheReperesDecoupe(): if AfficherReperesDecoupe == True: canvas.setStrokeColor((0.9, 0.9, 0.9)) canvas.setLineWidth(0.25) # Repères de colonnes for y1, y2 in [(hauteurPage * mm - 4 * mm, hauteurPage * mm - margeHaut * mm + 2 * mm), (4 * mm, margeBas - 2 * mm)]: x = margeGauche * mm for numColonne in range(0, nbreColonnes): canvas.line(x, y1, x, y2) x += largeurEtiquette * mm canvas.line(x, y1, x, y2) x += espaceHorizontal * mm # Repères de lignes for x1, x2 in [(4 * mm, margeGauche * mm - 2 * mm), (largeurPage * mm - 4 * mm, largeurPage * mm - margeDroite * mm + 2 * mm)]: y = hauteurPage * mm - margeHaut * mm for numLigne in range(0, nbreLignes): canvas.line(x1, y, x2, y) y -= hauteurEtiquette * mm canvas.line(x1, y, x2, y) y -= espaceVertical * mm # ----------------------------------------------------------------------------------------------------------------------------------------- largeurPage = taillePage[0] hauteurPage = taillePage[1] # Initialisation du modèle de document modeleDoc = DLG_Noedoc.ModeleDoc(IDmodele=IDmodele) largeurEtiquette = modeleDoc.dictInfosModele["largeur"] hauteurEtiquette = modeleDoc.dictInfosModele["hauteur"] # Calcul du nbre de colonnes et de lignes nbreColonnes = (largeurPage - margeGauche - margeDroite + espaceHorizontal) / (largeurEtiquette + espaceHorizontal) nbreLignes = (hauteurPage - margeHaut - margeBas + espaceVertical) / (hauteurEtiquette + espaceVertical) # Initialisation du PDF nomDoc = FonctionsPerso.GenerationNomDoc("ETIQUETTES", "pdf") canvas = Canvas(nomDoc, pagesize=(largeurPage * mm, hauteurPage * mm)) # Création des étiquettes numColonne = 0 numLigne = 0 for dictValeurs in listeValeurs: for num_copie in range(0, nbre_copies): x = margeGauche + ( (largeurEtiquette + espaceHorizontal) * numColonne) y = hauteurPage - margeHaut - hauteurEtiquette - ( (hauteurEtiquette + espaceVertical) * numLigne) # Positionnement sur la feuille canvas.saveState() canvas.translate(x * mm, y * mm) # Création du clipping p = canvas.beginPath() canvas.setStrokeColor((1, 1, 1)) canvas.setLineWidth(0.25) p.rect(0, 0, largeurEtiquette * mm, hauteurEtiquette * mm) canvas.clipPath(p) # Dessin de l'étiquette modeleDoc.DessineFond(canvas, dictChamps=dictValeurs) etat = modeleDoc.DessineTousObjets(canvas, dictChamps=dictValeurs) if etat == False: return # Dessin du contour de l'étiquette if AfficherContourEtiquette == True: canvas.setStrokeColor((0, 0, 0)) canvas.setLineWidth(0.25) canvas.rect(0, 0, largeurEtiquette * mm, hauteurEtiquette * mm) canvas.restoreState() # Saut de colonne numColonne += 1 # Saut de ligne if numColonne > nbreColonnes - 1: numLigne += 1 numColonne = 0 # Saut de page if numLigne > nbreLignes - 1: AfficheReperesDecoupe() canvas.showPage() numLigne = 0 # Affichage des repères de découpe AfficheReperesDecoupe() # Finalisation du PDF canvas.save() try: FonctionsPerso.LanceFichierExterne(nomDoc) except: print "Probleme dans l'edition des etiquettes"
def __init__(self, dictComptes={}, dictOptions={}, IDmodele=None, ouverture=True, nomFichier=None): """ Impression """ global DICT_COMPTES, DICT_OPTIONS DICT_COMPTES = dictComptes DICT_OPTIONS = dictOptions # Initialisation du document if nomFichier == None: nomDoc = FonctionsPerso.GenerationNomDoc("ATTESTATIONS_FISCALES", "pdf") else: nomDoc = nomFichier doc = BaseDocTemplate(nomDoc, pagesize=TAILLE_PAGE, showBoundary=False) # Mémorise le ID du modèle modeleDoc = DLG_Noedoc.ModeleDoc(IDmodele=IDmodele) doc.modeleDoc = modeleDoc # Vérifie qu'un cadre principal existe bien dans le document if doc.modeleDoc.FindObjet("cadre_principal") == None: raise Exception( "Votre modele de document doit obligatoirement comporter un cadre principal. Retournez dans l'editeur de document et utilisez pour votre modele la commande 'Inserer un objet special > Inserer le cadre principal'." ) # Mémorise le ID du modèle modeleDoc = DLG_Noedoc.ModeleDoc(IDmodele=IDmodele) doc.modeleDoc = modeleDoc # Importe le template de la première page doc.addPageTemplates(MyPageTemplate(pageSize=TAILLE_PAGE, doc=doc)) story = [] styleSheet = getSampleStyleSheet() h3 = styleSheet['Heading3'] styleTexte = styleSheet['BodyText'] styleTexte.fontName = "Helvetica" styleTexte.fontSize = 9 styleTexte.borderPadding = 9 styleTexte.leading = 12 ## # Définit le template des pages suivantes ## story.append(NextPageTemplate("suivante")) # ----------- Insertion du contenu des frames -------------- listeNomsSansCivilite = [] for IDcompte_payeur, dictCompte in dictComptes.items(): listeNomsSansCivilite.append( (dictCompte["{FAMILLE_NOM}"], IDcompte_payeur)) listeNomsSansCivilite.sort() for nomSansCivilite, IDcompte_payeur in listeNomsSansCivilite: dictCompte = dictComptes[IDcompte_payeur] story.append(DocAssign("IDcompte_payeur", IDcompte_payeur)) nomSansCivilite = dictCompte["{FAMILLE_NOM}"] story.append(Bookmark(nomSansCivilite, str(IDcompte_payeur))) # ------------------- TITRE ----------------- dataTableau = [] largeursColonnes = [ TAILLE_CADRE_CONTENU[2], ] dataTableau.append((dictOptions["titre"], )) texteDateReference = UTILS_Dates.DateEngFr( str(datetime.date.today())) dataTableau.append( (_(u"Période du %s au %s") % (UTILS_Dates.DateDDEnFr(dictOptions["date_debut"]), UTILS_Dates.DateDDEnFr(dictOptions["date_fin"])), )) style = TableStyle([ ('VALIGN', (0, 0), (-1, -1), 'MIDDLE'), ('FONT', (0, 0), (0, 0), "Helvetica-Bold", 19), ('FONT', (0, 1), (0, 1), "Helvetica", 8), ('LINEBELOW', (0, 0), (0, 0), 0.25, colors.black), ('ALIGN', (0, 0), (-1, -1), 'LEFT'), ]) tableau = Table(dataTableau, largeursColonnes) tableau.setStyle(style) story.append(tableau) story.append(Spacer(0, 30)) couleurFond = (0.8, 0.8, 1) couleurFondActivite = (0.92, 0.92, 1) # TEXTE CONTENU paraStyle = ParagraphStyle( name="contenu", fontName="Helvetica", fontSize=11, leading=16, spaceBefore=0, spaceafter=0, leftIndent=6, rightIndent=6, ) # INTRO texte = dictCompte["{INTRO}"] if texte != "": listeParagraphes = texte.split("</para>") for paragraphe in listeParagraphes: textePara = Paragraph(u"%s" % paragraphe, paraStyle) story.append(textePara) story.append(Spacer(0, 25)) # DETAIL par enfant dataTableau = [ (_(u"Nom et prénom"), _(u"Date de naissance"), _(u"Montant")), ] largeursColonnes = [220, 80, 80] paraStyle = ParagraphStyle( name="detail", fontName="Helvetica-Bold", fontSize=9, ) for nomCompletIndividu, dictIndividu in dictCompte["individus"]: dataTableau.append( (nomCompletIndividu, dictIndividu["date_naiss"], u"%.2f %s" % (dictIndividu["regle"], SYMBOLE))) dataTableau.append(("", "Total :", dictCompte["{MONTANT_REGLE}"])) style = TableStyle([ ('VALIGN', (0, 0), (-1, -1), 'MIDDLE'), ('ALIGN', (0, 0), (-1, -1), 'CENTER'), ('GRID', (0, 0), (-1, -2), 0.25, colors.black), ('FONT', (0, 0), (-1, 0), "Helvetica", 6), ('FONT', (0, 1), (-1, -1), "Helvetica", 10), ('TOPPADDING', (0, 1), (-1, -2), 10), ('BOTTOMPADDING', (0, 1), (-1, -2), 10), ('GRID', (-1, -1), (-1, -1), 0.25, colors.black), ('FONT', (-1, -1), (-1, -1), "Helvetica-Bold", 10), ('ALIGN', (-2, -1), (-2, -1), 'RIGHT'), ('FONT', (-2, -1), (-2, -1), "Helvetica", 6), ]) tableau = Table(dataTableau, largeursColonnes) tableau.setStyle(style) story.append(tableau) # Saut de page story.append(PageBreak()) # Finalisation du PDF doc.build(story) # Ouverture du PDF if ouverture == True: FonctionsPerso.LanceFichierExterne(nomDoc)