Skip to content
comptasso edited this page Sep 19, 2014 · 5 revisions

Avertissement

Cette archi n'est pas encore stabilisée. Elle est en cours d'évolution avec les besoins. Actuellement en cour de généralisation de la classe PdfDocument::TableLine.

Organisation globale

La production des pdf utilise Prawn. L'allure générale des documents est toujours la même avec

  • un pavé en haut à gauche avec le nom de l'organisme et l'exercice concerné par l'édition
  • un titre au milieu de la partie haute et un sous-titre
  • un pavé en haut à droite mentionnant le jour et l'heure de l'édition
  • une zone principale avec une table Des classes spécialisées sont dans le module PdfDocument (Lib/PdfDocument). Ces classes n'évoluent que très peu et ne servent que de support pour les editions Pdf. Voir plus loin cette hiérarchie.

Il y a deux types de classes identifiée par le suffixe Prawn, ou son absence (par exemple Totalized et TotalizedPrawn) : la première prépare tout ce qu'il faut pour que la deuxième puisse réellement remplir le fichier pdf.

Dans le folder app, on trouve un dossier Editions qui regroupent les classes servant à la production des pdf. Par exemple Editions::Balance qui hérite de PdfDocument::Totalized puisqu'on veut un tableau avec des sous totaux et des reports. Une classe Editions::BalancePrawn, qui hérite de PdfDocument::TotalizedPrawn réalise la production du fichier pdf.

La hiérarchie des classe PdfDocument

On démarre par Pdfdocument::Base qui est capable de produire un pdf à partir d'une collection et d'options. Voir la classe pour les options nécessaires et les méthodes. Base s'appuie alors sur BasePrawn pour remplir concrètement le pdf.

PdfDocument::Simple hérite de Base et utilise comme argument un exercice, une source et des options. Les options doivent comprendre la méthode qui, appliquée à la source permet d'obtenir la collection.

PdfDocument::Totalized hérite de Simple et rajoute la capacité d'avoir des totaux à chaque page ainsi que les sous-totaux. Totalized doit donc connaître dans ses options, les colonnes à totaliser. PdfDocument::Totalized passe alors la main à PdfDocument::TotalizedPrawn pour le remplissage du pdf.

PdfDocument::Default hérite de Totalized, et est une classe spécialisée pour des collections de ComptaLine (ce qui est l'essentiel d'un programme de compta d'où le nom de Default). Cette classe introduit une méthode (first_report_line) pour pouvoir introduire en tête de tableau une ligne de report. Utile pour l'édition d'un compte entre deux dates lorsqu'il y a des mouvements antérieurs.

La hiérarchie des classe PdfDocument::.....Prawn

BasePrawn est la classe de base et a une méthode principale fill_pdf, qui appelle les différentes méthodes protégées permettent de remplir le pdf (stamp, contenu qui lui même appelle entetes, draw_table_title et draw_table_lines, numerote).

SimplePrawn hérite de BasePrawn mais ne rajoute rien

TotalizedPrawn hérite de SimplePrawn et rajoute draw_report_lines et draw_total_lines

DefaultPrawn hérite de TotalizedPrawn sans rien rajouter.

Lorsque le besoin d'une édition plus affinée se fait sentir, on peut créer une classe héritée de ces 4 précédents dans Editions. C'est par exemple le cas pour PrawnBalance qui comprend des entêtes particulier des tables sur deux lignes et avec des cellules fusionnées.

Il y a également PrawnListing (vide actuellement, probablement à supprimer) et PrawnSheet pour l'édition d'un bilan et d'une liasse puisqu'on a besoin d'enchaîner plusieurs collections (par exemple actif et passif pour le bilan).

lib/pdf_document contient enfin trois PORO :

  • page et table, qui sont utilisées pour produire le document qui appelle les pages une à une, lesquelles appellent table. La table sait calculer ses sous-totaux, qui seront utilisés par page pour calculer les reports.
  • table_line qui représente une ligne d'une table. L'introduction de cette classe avait pour but d'intégrer des sous totaux dans les tables, les lignes doivent donc savoir si elles doivent être prises dans le total de la table ou non. Cela permet également d'introduire une option de style pour ces lignes.

A terme table_line devrait permettre de supprimer des classes spécialisées de Editions comme PdfGeneralLedgerPage qui avait précisément pour but de gérer ce sujet des sous totaux.