* add portugues opition on index * add portugues folder * translate app.md * translate before.md * translate title of app and before * translate bench.md * translate conclusion * translate new-app.md * translate setting-up-the-site.md * translate start.md * translate models.md * translate roles.md * translate doctypes.md * translate naming-and-liking.md * translate doctype-directory-structure.md * translate users-and-records.md * translate page form-client-scripting.md * translate page controllers.md * translate page reports.md * translate page web-views.md * translate page single-doctypes.md * translate page taks-runner.md * translate change cargo to role
2.6 KiB
Executable file
Controladores
O passo seguinte seria a adição de métodos e handlers de eventos para os modelos. No aplicativo, devemos assegurar que se uma Library Transaction é feita, o artigo em questão deve estar em estoque e o membro que irá emprestar o artigo deve ter um filiação válida.
Para isso, podemos escrever uma validação pouco antes do objeto de Library Transaction ser salvo. Para fazer isso, abra o template library_management/doctype/library_transaction/library_transaction.py.
Este arquivo é o controlador para o objeto Library Transaction. Nele você pode escrever métodos para:
before_insertvalidate(antes de inserir ou atualizar)on_update(depois de salvar)on_submit(quando o documento é submetido)on_cancelon_trash(antes que ele esteja prestes a ser excluido)
Você pode escrever métodos para esses eventos e eles serão chamados pelo framework quando o documento for salvo etc.
Aqui é o controlador acabado:
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"))
Nesse script:
- Pegamos a última transação antes da data da transação atual usando a função de consulta
frappe.get_list - Se a última transação for algo que não queremos, lançamos uma exceção usando
frappe.throw - Usamos o método
_("text")para identificar strings traduzíveis.
Verifique se suas validações funcionaram, criando de novos registros.
Debugging
Para Debugar, mantenha sempre o seu Console JS aberto. procurando por erros de servidor e JavaScript.
Além disso, verifique a sua janela do terminal para exceções. Quaisquer 500 Internal Server Errors será impresso em seu terminal, onde o servidor está rodando.
{next}