Openbravo POS Reports and Charts Tutorial/fr
Contents |
Introduction
Ce guide se réfère à la version Openbravo POS 2.10 et ultérieures. Il a pour but de montrer aux développeurs de Openbravo POS comment créer et gérer des rapports et comment les ajouter au menu de Openbravo POS.
Dans Openbravo 2.10 une nouvelle structure a été introduite pour les rapports qui facilite la création et la modification des rapports. Avec cette nouvelle structure les développeurs de Openbravo POS auront la possibilité d'ajouter et de modifier facilement de nouveaux rapports et graphiques sans avoir à modifier le code source.
Les rapports sont maintenant définis par des fichiers textes que les développeurs peuvent éditer avec leur éditeur de texte préféré ou par l'intermédiaire d'une interface graphique. Pour installer de nouveaux rapports il suffit de copier les fichiers de définition du rapport dans le dossier reports et créer une option de menu pour le rapport. Tous les rapports et graphiques de Openbravo POS ont été porté vers la nouvelle structure et de nouveaux rapports ont été crée.
L'architecture des rapports dans Openbravo POS
Les fichiers de rapport sont stockés dans le sous-dossier reports du dossier d'installation de Openbravo POS. A l'intérieur de ce dossier, les rapports peuvent être organisé en packages qui n'est rien d'autre qu'une structure arborescente. Par exemple les rapports inclus dans la distribution de base de Openbravo POS sont dans le paquet com.openbravo.reports c'est à dire le sous-dossier com/openbravo/reports/.
La définition d'un rapport dans Openbravo POS se compose de trois fichiers ou plus: le fichier de configuration, le fichier rapport et le fichier de localisation.
- Le fichier de configuration est le plus important, ici vous définissez le titre, le code SQL pour obtenir les données du rapport, les paramètres, champs, quel est le fichier rapport et quel est le fichier de localisation.
- Openbravo POS utilise le moteur JasperReports pour exécuter les rapports et le fichier rapport est le fichier JasperReports. Vous pouvez éditer ce fichier avec votre éditeur de texte préféré ou autre outil graphique pour JasperReports comme iReport.
- Le fichier de localisation est utilisé pour définir les mots qui nécessitent une traduction.
Le fichier de définition
Le fichier de définition est un fichier avec l'extension .bs et est décrit par le language de script BeanShell. Ce langage est très similaire à java ou javascript et vous n'aurez pas besoin de compétences spéciales pour définir un nouveau rapport Openbravo POS.
Voici le fichier products.bs qui décrit le Products list report (rapport sur la liste des produits)
bean = new com.openbravo.pos.reports.PanelReportBean(); bean.setTitleKey("Menu.Products"); bean.setReport("/com/openbravo/reports/products"); bean.setResourceBundle("com/openbravo/reports/products_messages"); bean.setSentence( "SELECT PRODUCTS.ID, PRODUCTS.REFERENCE, PRODUCTS.CODE, PRODUCTS.NAME, " + "PRODUCTS.PRICEBUY, PRODUCTS.PRICESELL, " + "(PRODUCTS.PRICESELL * (1 + TAXES.RATE)) AS PRICESELLTAX, " + "TAXES.NAME AS TAXNAME, TAXES.RATE AS TAXRATE, PRODUCTS.CATEGORY, " + "CATEGORIES.NAME AS CATEGORYNAME " + "FROM PRODUCTS LEFT OUTER JOIN CATEGORIES ON PRODUCTS.CATEGORY = CATEGORIES.ID " + "LEFT OUTER JOIN TAXES ON PRODUCTS.TAX = TAXES.ID " + "WHERE ?(QBF_FILTER) " + "ORDER BY CATEGORIES.NAME, PRODUCTS.NAME"); bean.addParameter("PRODUCTS.NAME"); bean.addParameter("PRODUCTS.PRICEBUY"); bean.addParameter("PRODUCTS.PRICESELL"); bean.addParameter("PRODUCTS.CATEGORY"); bean.addParameter("PRODUCTS.CODE"); bean.addQBFFilter(new com.openbravo.pos.ticket.ProductFilter()); bean.addField("ID", com.openbravo.data.loader.Datas.STRING); bean.addField("REFERENCE", com.openbravo.data.loader.Datas.STRING); bean.addField("CODE", com.openbravo.data.loader.Datas.STRING); bean.addField("NAME", com.openbravo.data.loader.Datas.STRING); bean.addField("PRICEBUY", com.openbravo.data.loader.Datas.DOUBLE); bean.addField("PRICESELL", com.openbravo.data.loader.Datas.DOUBLE); bean.addField("PRICESELLTAX", com.openbravo.data.loader.Datas.DOUBLE); bean.addField("TAXNAME", com.openbravo.data.loader.Datas.STRING); bean.addField("TAXRATE", com.openbravo.data.loader.Datas.DOUBLE); bean.addField("CATEGORY", com.openbravo.data.loader.Datas.STRING); bean.addField("CATEGORYNAME", com.openbravo.data.loader.Datas.STRING);
Définition des objets bean du rapport
bean = new com.openbravo.pos.reports.PanelReportBean();
Cette ligne crée l'objet rapport. La variable nom doit être appelée bean parce que c'est ce nom qu'Openbravo POS utilisera comme définition du rapport, et l'objet crée est une instance de la classe com.openbravo.pos.reports.PanelReportBean c'est à dire la classe de base pour tous les rapports Openbravo POS. Vous n'avez pas besoin de modifier cette ligne dans les rapports que vous créez.
Propriétés du rapport
bean.setTitleKey("Menu.Products"); bean.setReport("/com/openbravo/reports/products"); bean.setResourceBundle("com/openbravo/reports/products_messages")
Ces lignes définissent le titre du rapport, le fichier JasperReports .jrxml et les propriétés du fichier de localisation. Pour définir le titre du rapport vous avez deux méthodes .setTitleKey() où le paramètre est une clé localisée dans les fichiers standard de localisation Openbravo POS et .setTitle() où le paramètre est juste le titre du rapport.
Le code
bean.setSentence( "SELECT PRODUCTS.ID, PRODUCTS.REFERENCE, PRODUCTS.CODE, PRODUCTS.NAME, " + "PRODUCTS.PRICEBUY, PRODUCTS.PRICESELL, " + "(PRODUCTS.PRICESELL * (1 + TAXES.RATE)) AS PRICESELLTAX, " + "TAXES.NAME AS TAXNAME, TAXES.RATE AS TAXRATE, PRODUCTS.CATEGORY, " + "CATEGORIES.NAME AS CATEGORYNAME " + "FROM PRODUCTS LEFT OUTER JOIN CATEGORIES ON PRODUCTS.CATEGORY = CATEGORIES.ID " + "LEFT OUTER JOIN TAXES ON PRODUCTS.TAX = TAXES.ID " + "WHERE ?(QBF_FILTER) " + "ORDER BY CATEGORIES.NAME, PRODUCTS.NAME");
Cette partie définie le code SQL utilisé par le rapport. Notez l'étiquette ?(QBF_FILTER) qui défini l'endroit où Openbravo POS incluras le filtre SQL généré avec les paramètres de déclaration du rapport.
Paramètres du rapport
bean.addParameter("PRODUCTS.NAME"); bean.addParameter("PRODUCTS.PRICEBUY"); bean.addParameter("PRODUCTS.PRICESELL"); bean.addParameter("PRODUCTS.CATEGORY"); bean.addParameter("PRODUCTS.CODE"); bean.addQBFFilter(new com.openbravo.pos.ticket.ProductFilter());
Ces lignes définissent les paramètres du rapport et la relation entre les champs SQL et l'interface présentée à l'utilisateur pour éditer les valeurs des paramètres.
Il y a plusieurs filtres QBF (Query by form) prédéfinis dans Openbravo POS et chaque filtre QBF requière un nombre fixe de paramètres. Vous pouvez combiner plus d'un filtre QBF. Vous devez seulement maintenir le même ordre dans les paramètres et dans les filtres. Voici un exemple de trois filtres QBF avec ses définitions de paramètres dans le bon ordre:
bean.addParameter("STOCKDIARY.DATENEW"); bean.addParameter("STOCKDIARY.DATENEW"); bean.addQBFFilter(new com.openbravo.pos.reports.JParamsDatesInterval()); bean.addParameter("LOCATIONS.ID"); bean.addQBFFilter(new com.openbravo.pos.reports.JParamsLocationWithFirst()); bean.addParameter("STOCKDIARY.REASON"); bean.addQBFFilter(new com.openbravo.pos.reports.JParamsReason());
- com.openbravo.pos.ticket.ProductFilter
Ce filtre est utilisé pour filtrer des produits et nécessite cinq paramètres de champs: le nom, le prix d'achat, le prix de vente, le code catégorie et le code barres du produit.
- com.openbravo.pos.reports.JParamsDatesInterval
Ce filtre est utilisé pour définir une période de dates, il nécessite deux champs date.
- com.openbravo.pos.reports.JParamsLocation, com.openbravo.pos.reports.JParamsLocationWithFirst
Ces filtres sont utilisés pour sélectionner l'emplacement de l'entrepôt. Le champ emplacement est nécessaire. La différence entre les deux filtres est que avec JParamsLocation il est obligatoire de sélectionner l'emplacement de l'entrepôt et avec JParamsLocationWithFirst ce n'est pas nécessaire.
- com.openbravo.pos.reports.JParamsReason
Ce filtre est utilisé pour sélectionner la raison d'un mouvement d'un entrepôt. Le champ raison est requis.
- com.openbravo.pos.reports.JParamsCustomer
Ce filtre est utilisé pour sélectionner un client. Les champs code client et nom client sont requis.
- com.openbravo.pos.reports.JParamsText
C'est un filtre générique pour un champ. Il supporte trois constructeurs: JParamsText(String lable) qui défini l'étiquette du titre et filtre tout champ de caractères. JParamsText(String label, Formats format) qui défini l'étiquette du titre et le format utilisé pour afficher la valeur. JParamsText(String label, Formats format, Datas data) qui défini l'étiquette du titre, le format utilisé pour afficher la valeur et le champ de type données.
Les Formats suivants sont disponibles:
Formats.INT Formats.DOUBLE Formats.CURRENCY Formats.PERCENT Formats.DATE Formats.TIME Formats.TIMESTAMP Formats.BOOLEAN Formats.STRING
et les données Datas
Datas.INT Datas.DOUBLE Datas.TIMESTAMP Datas.BOOLEAN Datas.STRING
Les champs du rapport
bean.addField("ID", com.openbravo.data.loader.Datas.STRING); bean.addField("REFERENCE", com.openbravo.data.loader.Datas.STRING); bean.addField("CODE", com.openbravo.data.loader.Datas.STRING); bean.addField("NAME", com.openbravo.data.loader.Datas.STRING); bean.addField("PRICEBUY", com.openbravo.data.loader.Datas.DOUBLE); bean.addField("PRICESELL", com.openbravo.data.loader.Datas.DOUBLE); bean.addField("PRICESELLTAX", com.openbravo.data.loader.Datas.DOUBLE); bean.addField("TAXNAME", com.openbravo.data.loader.Datas.STRING); bean.addField("TAXRATE", com.openbravo.data.loader.Datas.DOUBLE); bean.addField("CATEGORY", com.openbravo.data.loader.Datas.STRING); bean.addField("CATEGORYNAME", com.openbravo.data.loader.Datas.STRING);
Ces lignes définissent les noms de champs du rapport, et les types de champs du rapport. Ces champs doivent correspondre aux champs retournés par SQL.
Les données Datas suivantes sont disponibles:
Datas.INT Datas.DOUBLE Datas.TIMESTAMP Datas.BOOLEAN Datas.STRING Datas.BYTES Datas.IMAGE Datas.OBJECT Datas.SERIALIZABLE Datas.NULL
Le fichier rapport
Le fichier de rapport est un fichier avec l'extension .jrxml avec une syntaxe JasperReport. Vous pouvez créer et éditer les fichiers rapports avec votre éditeur de texte préféré mais il est plus facile d'utiliser un éditeur graphique tel que iReport.
Localisation
Les fichiers de localisation sont passés au moteur du rapport et peuvent être utilisé comme cela:
$R{label.title}
Formatage des valeurs
Vous pouvez formater les valeurs en utilisant la classe Format de Openbravo POS. Par exemple:
com.openbravo.format.Formats.CURRENCY.formatValue($F{PRICESELLTAXDIFF})
Images incluses
Vous pouvez accéder aux images incluses dans Openbravo POS en utilisant la classe ImageUtil. Par exemple:
com.openbravo.data.loader.ImageUtils.readImageFromResource("/com/openbravo/images/poweredby.png")
Accès aux valeurs des paramètres
Toutes les valeurs des paramètres sont passées au rapport dans le paramètre ARGS comme un objet array.
Création de code barres
Vous pouvez créer des images de barre codes en utilisant les méthodes suivantes.
Pour les codes EAN-13 :
com.openbravo.pos.util.BarcodeImage.getBarcodeEAN13($F{CODE})
Pour les Code 128 :
com.openbravo.pos.util.BarcodeImage.getBarcodeCODE128($F{CODE})
Le fichier de localisation
Le fichier de localisation est un fichier de propriétés et utilise la même syntaxe et structure que le reste des fichiers de localisation dans Openbravo POS. Ici vous trouverez un guide sur la Localisation de Openbravo POS