Rapport de type Script
Tout ce qui ne peut pas être réalisé à l'aide de Report Builder ou de Query Report peut être réalisé à l'aide de Script Reports. Comme son nom l'indique, ces rapports sont créés à l'aide de scripts Python. Étant donné que ces rapports vous donnent un accès illimité via des scripts Python, ils ne peuvent pas être créés par les administrateurs. Ces rapports sont destinés à être rédigés pendant le développement et à faire partie de votre application.
Le Rapport de Script
Tout ce qui ne peut pas être réalisé à l'aide de Report Builder ou de Query Report peut être réalisé à l'aide de Script Reports. Comme son nom l'indique, ces rapports sont créés à l'aide de scripts Python. Étant donné que ces rapports vous donnent un accès illimité via des scripts Python, ils ne peuvent pas être créés par les administrateurs. Ces rapports sont destinés à être rédigés pendant le développement et à faire partie de votre application.
Cas d'usage <MappeMonde>
MappeMonde (Tiers Lieu) avait besoin d'une liste claire et formelle qui contiendra toutes les informations relatives à l'événement, y compris le nom de la réunion, le thème, l'horaire, les participants, et le contenu impliqué.
Solution pour la création du rapport
1.1 Créer événement
Accueil > Lieu > Evénement > + Ajouter Événement
Remplissez les champs suivant :
- Le sujet
- Commence le
- Termine le
- Les participants
- les personnes assignées
- La description
2.1 Comment créer un rapport de script ?
- Saisir Rapport dans la barre de recherche.
- Cliquez sur Nouveau.elle Rapport
Une fois sur la page de création du rapport
- Saisissez un Nom
- Sélectionnez le DocType que vous voulez rattaché au rapport Pour ce cas, choisissez EVENT (Événement).
- Dans Type de Rapport, mettez Rapport de script
- Enregistrez
Le rapport est maintenant créé.
L'avantage de l'utilisation de ce langage est que les utilisateurs peuvent définir beaucoup de variables.
(Si vous voulez en connaître plus sur le langage Python, cliquez ici)
2.2 Requête Script
2.2.1 Présentation des données des documents sur DOKOS
Comment récupérer les donnnées du document ?
- Première façon
- Cliquez sur les trois points en haut à droite.
- Faites Personnaliser pour aller sur la page du formulaire.
- Dans type de formulaire : Mettez Event (Événement)
En dessous, vous pouvez voir tous les noms de champs sur l'événement.
- Deuxième façon
Allez dans Type de document, vous trouverez toutes les données de chaque document.
Pour accéder à la liste Type de document, allez sur :
Accueil > Développement > Modèles > Type de document
Pour aller sur le formulaire Événement :
- Tapez Event dans la barre de filtre > Nom.
2.2.2 Les codes script et ajout des colonnes
Retournez sur le rapport de l'événement que vous venez de créer en allant sur :
Accueil > Développement > Vues > Rapport
Sur la liste des rapports, retrouvez le rapport que vous avez créé.
A propos de l'usage de ce libraire, allez sur le lien suivant pour ens avoir plus ici.
Le format de notre requête script est :
result = [résultat]
ou avec l'ancien style
data = [colonnes], [résultat]
result
: cela indique les résultats affichés.
Application dans notre cas :
- Utilisez la fonction
frappe.db.get_all()
pour lire les données dans notre doctype.
Son format est :
frappe.db.get_all(doctype, filters, or_filters, fields, order_by, group_by, start, page_length)
Attention ici, si vous n’avez pas besoin de filtrer, par order_by, par group_by, start, par page_length.
Vous pouvez vous passer de ces éléments, il ne reste que la ligne de code : frappe.db.get_all(doctype, fields)
.
Pour frappe.db.get_all()
vous pouvez également utiliser l'alias frappe.get_all()
.
Comment ajouter une colonnne ?
- Faites Ajouter une ligne
- Indiquez le Nom du champ, le libellé
- Indiquez Type de champ
Si vous choisissez le type de champ : Lien. Vous pouvez indiquer le chemin du Lien dans Modifier la ligne > Option
Dans le résultat affiché et sur le PDF, vous pouvez cliquer sur le lien pour accéder à la page de ‘le type de formulaire’.
Pour lire les données de l'événement, selon frappe.db.getall()
, il faut écrire :
result = frappe.get_all('Event', fields = ['name','subject','starts_on','ends_on','description'])
Ou il faut utiliser la deuxième façon pour afficher le résultat:
columns = [
{
"fieldname": "name",
"fieldtype": "Data",
"label": "Event"
},
{
"fieldname": "subject",
"fieldtype": "Data",
"label": "Subject"
},
{
"fieldname": "starts_on",
"fieldtype": "Date",
"label": "Starts On"
},
{
"fieldname": "ends_on",
"fieldtype": "Date",
"label": "Ends On"
},
{
"fieldname": "description",
"fieldtype": "Data",
"label": "Description"
}
]
fields = ["name","subject","starts_on","ends_on","description"]
data = columns, frappe.get_all("Event",fields = fields)
Cliquez sur le bouton blanc Afficher le rapport en haut à droite.
Dokos vous permet de l’imprimer ou l'afficher en PDF: Cliquez sur les trois points en haut à droite et PDF pour générer un PDF à imprimer
2.3 Comment ajoutez des filtres ?
Tous les événements sont affichés dans le résultat.
Dans ce cas, vous avez besoin d’ajouter des filtres dans le champ 'filtre' pour filtrer selon vos besoins.
Vous pouvez par exemple ajouter une ligne, ‘le nom du champ' est 'starts_on', le libellé est ‘Starts On’, ‘le type de champ’ est ‘date’.
Et une ligne ‘le nom du champ' est 'ends_on', le libellé est Ends On’, ‘le type de champ’ est ‘date’.
Les filtres que vous ajoutez peuvent être utilisés dans les codes suivants comme : -filters.starts_on -filters.ends_on
Le code est donc le suivant :
result = frappe.get_all('Event', fields = ['name','subject','starts_on','ends_on','description'], filters = {"starts_on": ("between", [filters.starts_on,filters.ends_on])})
Dans le code ici, 'starts_on' c’est l'élément que nous voulons comparer avec les dates. On choisira ('filters.starts_on' et 'filters.ends_on')
'Between' signifie 'starts_on' est entre 'filters.starts_on' et 'filters.ends_on'. Normalement, ici on pourrait utiliser les symboles pour comparer comme “>” ou “<” ou “=”...
Le logiciel nous permet d'ajouter divers filtres comme celui des dates mais d'autres sont également possibles.
Voici le résultat après l'ajout des filtres.
Les événements entre 30/06/2021 et 03/07/2021
Les événements entre 30/06/2021 et 31/07/2021
2.4 Comment connecter plus de Doctype ?
2.4.1 Réservation d’article
Pour connecter les données de Réserver un article
Il faut réserver un article pour notre événement.
- Cliquez sur le bouton 'Réserver un article' dans «Evénement» 2. Selectionnez les articles que vous voulez.
- Après la soumission, il faut retourner sur la page d'évenement.
- Cliquez sur l'article dans les Documents liés
- Sélectionnez Commence le, Termine le et le statuts
- Faites Enregistrer
2.4.2 Requête pour importer les données de Réservation d’article dans le résultat affiché.
Les différentes étapes en utilisant le langage Python :
Dans tableau qui comporte les colonnes ‘name’,’subject’, ‘starts_on’, ‘ends_on’ et ‘description’.
Vous pouvez importer les autres données dans ce tableau.
- Créez les nouvelles colonnes vides qui permettent que les nouvelles données puissent le remplir.
- Utilisez
for
Pour en savoir plus, cliquez sur ici.
Application du code :
events = frappe.get_all('Event', fields = ['name','subject','starts_on','ends_on','description'], filters = {"starts_on": ("between", [filters.starts_on,filters.ends_on])})
for event in events:
event["item"] = ""
event["status"] = ""
for booking in frappe.get_all('Item Booking', fields = ['item','status'], filters = {'event': event.name}):
event["item"] = event["item"] + booking.item + "<br>"
event["status"] = event["status"] + booking.status + "<br>"
result = events
La premiere ligne :
events = frappe.get_all('Event', fields = ['name','subject','starts_on','ends_on','description'], filters = {"starts_on": ("between", [filters.starts_on,filters.ends_on])})
- Utilisez
frappe.get_all()
. Fonction pour lire les champs ('name','subject','starts_on','ends_on','description') à l’origine du type de document ‘Event’. - Mettre le filtre pour lire les données quand le champ ‘starts_on’ d'événement qui est entre le 'starts_on' et 'ends_on' dans le champs de filtre.
Pour la première ligne de ce code :
for event in events:
Nous utilisons une boucle for pour lire séparément chaque événement dans 'Events', et nous nommons chaque événement.
event["item"] = ""
event["status"] = ""
- Créez deux colonne ‘item’ et ‘status’ dans chaque ‘event’ que l’on a lu en for boucle. Mais le contenu de ces colonnes est vide car ils sont égal à "".
- Mettez les données suivantes :
for booking in frappe.get_all('Item Booking', fields = ['item','status'], filters = {'event': event.name}):
Il faut retirer les données dont on a besoin.
- Utilisez
frappe.get_all
(). fonction pour lire les données de ‘item’ et 'status' dans le type de document ‘Item Booking’. Quand la colonne ‘event’ de ‘Item Booking’ est égale à event.name.
La boucle for
nous aide à lire chaque ‘item’ et chaque ‘status’ dans le ‘booking’
Enfin, on doit mettre ces données que l’on a retirées dans la colonne ‘item’ et ‘status’ de ‘event’.
event["item"] = event["item"] + booking.item + "<br>"
event["status"] = event["status"] + booking.status + "<br>"
Vous pouvez utiliser ‘=’ pour définir une variable à nouveau.
- Définissez le nouveau event["item"] égal à event["item"] précédent(vide) + item à l’origine de booking + “<br>” (le symbole pour sauter la ligne).
- Utilisez <br> pour séparer ces certains )
Pour event["status"], c’est le même principe.
Voici les résultats :
En PDF
2.5 L'amélioration de format
Deux nouvelles colonnes viennent d'être ajoutées qui sont "Item" et "Statuts"
Vous pouvez connecter ces deux colonnes.
events = frappe.get_all('Event', fields = ['name','subject','starts_on','ends_on','description'], filters = {"starts_on": ("between", [filters.starts_on,filters.ends_on])})
for event in events:
event["item"] = ""
for booking in frappe.get_all('Item Booking', fields = ['item', 'status'], filters = {
'event': event.name
}):
event["item"] = event["item"] + booking.item + ": " + booking.status + "<br>"
result = events
- Définir le contenu de event["item"].
- Mettre les données booking.item et booking.status dans ces deux colonnes et les séparons par deux points.
Il suffit d'utiliser et de combiner habilement différentes fonctions en Python.