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.
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é.
Accueil > Lieu > Evénement > + Ajouter Événement
Remplissez les champs suivant :


Une fois sur la page de création du rapport
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)
Comment récupérer les donnnées du document ?

En dessous, vous pouvez voir tous les noms de champs sur l'événement.

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 :

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 :
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().
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


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’.

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

Pour connecter les données de Réserver un article
Il faut réserver un article pour notre événement.



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.
forPour 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])})
frappe.get_all(). Fonction pour lire les champs ('name','subject','starts_on','ends_on','description') à l’origine du type de document ‘Event’.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"] = ""
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.
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.
Pour event["status"], c’est le même principe.
Voici les résultats :


En PDF

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


Il suffit d'utiliser et de combiner habilement différentes fonctions en Python.