* Add basic files structure for spanish translation of the doc * Translate the video tutorial index page * Translate Before Start page * Translate What is an app page * Translate the Bench page * Translate Conslusion page of the tutorial * Translate to spanish Tutorial Index page * Translate to spanish Reports page * Translate to Spanish Roles Page * Translate to Spanish the Tutorial Model Page * Translate to Spanish the tutorial Single Doctypes page * Translate to Spanish the tutorial Doctype files structure page * Translate to Spanish the tutorial Start Bench page * Translate to Spanish the tutorial New App page * Translate to Spanish the tutorial Client Side Script page * Translate to Spanish the tutorial Users and records page * Translate to Spanish the tutorial Setting Up the site page * Translate to Spanish the tutorial Task Runner page * Translate to Spanish the tutorial Controllers Page * Translate to Spanish the tutorial Doctypes page * Translate to Spanish the tutorial Naming And Linking page * Translate to Spanish the tutorial Web Views page
2.7 KiB
Controladores (Controllers)
El siguiente paso va a ser agregar métodos y eventos a los modelos. En la aplicación, debemos asegurar que si una Library Transaction es creada, el Article que se solicita debe estar en disponibilidad y el miembro que lo solicita debe tener una membresía (membership) válida.
Para esto, podemos escribir una validación que se verifique justo en el momento que una Library Transaction es guardada. Para lograrlo, abre el archivo library_management/doctype/library_transaction/library_transaction.py.
Este archivo es el controlador para el objeto Library Transaction. En este archivo puedes escribir métodos para:
before_insertvalidate(Antes de insertar o actualizar)on_update(Despues de guardar)on_submit(Cuando el documento es presentado como sometido o presentado)on_cancelon_trash(antes de ser eliminado)
Puedes escribir métodos para estos eventos y estos van a ser llamados por el framework automóticamente cuando el documento pase por uno de esos estados.
Aquí les dejo el controlador completo:
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} no ha sido marcado como retornado desde {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(_("No puedes retornar un Article que no ha sido prestado."))
En este script:
- Obtenemos la última transacción antes de la fecha de la transacción actual usando la funcion
frappe.get_list - Si la última transacción es algo que no nos gusta, lanzamos una excepción usando
frappe.throw - Usamos el método
_("texto")para identificar las cadenas que pueden ser traducidas.
Verifica si sus validaciones funcionan creando nuevos registros.
Depurando
Para depurar, siempre mantener abierta su consola JS. Verifíca rastros de Javascript y del Servidor.
Siempre verifica su terminal para las excepciones. Cualquier 500 Internal Server Errors va a ser mostrado en la terminal en la que está corriendo el servidor.
{next}