61 lines
2.7 KiB
Markdown
61 lines
2.7 KiB
Markdown
# Les controleurs
|
|
|
|
La prochaine étape est d'ajouter quelques méthodes et évéements à nos modèles. Dans l'application, nous devons nous
|
|
assurer que si une opération est faite, l'article concerné doit être disponible en stock et que le membre qui souhaite
|
|
faire le prêt à un abonnement valide.
|
|
|
|
Pour cela, nous pouvons écrire une règle de validation au moment de la sauvegarde du prêt. Ouvrez le template `library_management/doctype/library_transaction/library_transaction.py`.
|
|
|
|
Ce fichier est le controleur qui gère les opérations de la librairie, vous pouvez y écrire des méthodes pour:
|
|
|
|
1. `before_insert`
|
|
1. `validate` (avant l'insertion ou la mise à jour)
|
|
1. `on_update` (après la sauvegarde)
|
|
1. `on_submit` (quand le document est soumis)
|
|
1. `on_cancel`
|
|
1. `on_trash` (avant qu'il ne soit sur le point d'être supprimé)
|
|
|
|
Vous pouvez écrire des méthodes pour ces événement et elles seront appelées par le framework au bon moment.
|
|
|
|
Voici pour finir le controleur:
|
|
|
|
from __future__ import unicode_literals
|
|
import frappe
|
|
from frappe import _
|
|
from frappe.model.document import Document
|
|
|
|
class LibraryTransaction(Document):
|
|
def validate(self):
|
|
last_transaction = frappe.get_list("Library Transaction",
|
|
fields=["transaction_type", "transaction_date"],
|
|
filters = {
|
|
"article": self.article,
|
|
"transaction_date": ("<=", self.transaction_date),
|
|
"name": ("!=", self.name)
|
|
})
|
|
if self.transaction_type=="Issue":
|
|
msg = _("Article {0} {1} has not been recorded as returned since {2}")
|
|
if last_transaction and last_transaction[0].transaction_type=="Issue":
|
|
frappe.throw(msg.format(self.article, self.article_name,
|
|
last_transaction[0].transaction_date))
|
|
else:
|
|
if not last_transaction or last_transaction[0].transaction_type!="Issue":
|
|
frappe.throw(_("Cannot return article not issued"))
|
|
|
|
Dans ce scrit:
|
|
|
|
1. Nous récuperons la dernière opération, avant la date de l'opération en cours en utilisant la méthode `frappe.get_list`
|
|
1. Si la dernière opération est quelque chose qui n'est pas attendu, alors nous levons une exception en utilisant `frappe.throw`
|
|
1. Nous utilisons la méthode `_("text")` pour identifier une chaine traduisible.
|
|
|
|
Verifiez vos validations en créant de nouveux enregistrements.
|
|
|
|
<img class="screenshot" alt="Transaction" src="{{docs_base_url}}/assets/img/lib_trans.png">
|
|
|
|
#### Debogage
|
|
|
|
Pour debugger, gardez toujours votre console JS ouverte, vérifier les erreurs à la fois de Javascript mais aussi du serveur.
|
|
|
|
Regardez aussi votre fenêtre de terminal pour les esceptions. Chaque **erreur 500 pour des problèmes internes** seront affichées dans le terminal du serveur en cours d'utilisation.
|
|
|
|
{suite}
|