Manuales de desarrollo de YeboYebo
Vamos a crear un fichero en el que declararemos las llamadas o requests que utilizaremos posteriormente.
NOTA: Este fichero debe crearse en la carpeta build dentro del módulo de nuestra extensión. Posteriormente generaremos los ficheros/parches para que se apliquen los cambios.
Para el ejemplo crearemos el fichero tpv_viajesmultitransstock_api.py dentro de la extension codebase/extensiones_2.5.0/fun_elganso_ctr/build/src/facturacion/tpv/restapi/tpv_viajesmultitransstock_api.py
Para que todo nos funcione correctamente, debemos declarar una accion al final del fichero xml del módulo. En nuestro caso en: codebase/extensiones_2.5.0/fun_elganso_ctr/build/src/facturacion/tpv/flfact_tpv.xml
<action>
<name>tpv_viajesmultitransstock_api</name>
<scriptform>tpv_viajesmultitransstock_api</scriptform>
</action>
Primero crearemos una clase de tipo Schema donde declararemos los campos que devolveran nuestras llamadas.
class viajesSchema(Schema):
idviajemultitrans = fields.String(allow_none=True)
enviocompletado = fields.Boolean(allow_none=True)
fecha = fields.Date(allow_none=True)
cantidad = fields.Float(allow_none=True)
@post_load
def make_viaje(self, data, **kwargs):
Viajes = qsa.orm.tpv_viajesmultitransstock
if "idviajemultitrans" in data:
viaje = Viajes.get(data["idviajemultitrans"])
for field in data:
setattr(viaje, field, data[field])
else:
viaje = None
return viaje
Debemos declarar cada campo junto a su tipo. Además, podemos añadir (allow_none=True) para aceptar campos nulos.
Esta clase contendra la declaración de las llamadas o request. Podremos hacer cuatro tipos de llamadas o requests:
Tambien en esta tenemos la función get_mapa donde deberemos realizarmeos la consulta que nos traera los datos de la bbdd. Los campos que tiene son los siguientes:
Para modificar el where de la consulta se enviara un objeto filter dentro del parametro params.
def get_mapa(self, username):
return {
'join': 'tpv_viajesmultitransstock',
'order': 'fecha',
'map': {
'idviajemultitrans': {'field': 'tpv_viajesmultitransstock.idviajemultitrans', 'type': 'string'},
'enviocompletado': {'field': 'tpv_viajesmultitransstock.enviocompletado', 'type': 'boolean'},
'fecha': {'field': 'tpv_viajesmultitransstock.fecha', 'type': 'date'},
'cantidad': {'field': 'tpv_viajesmultitransstock.cantidad', 'type': 'float'}
}
}
Para que todos estos cambios se apliquen debemos compilar con el siguiente comando:
eneboo-assembler save fun_elganso_ctr
NOTA: Después de bajarnos los cambios de Git, tenemos que ejcutar el siguiente comando para poder visualizar los ficheros nuevos:
eneboo-assembler dbupdate
Podemos comprobar que las llamadas que hemos creado funcionen correctamente ejecutandolas desde Postman.
En la cabecera de la llamada debemos pasarle el Authorization Token del usuario de Eneboo que estamos utilizando.
Ejemplo de llamada GET:
http://127.0.0.1:8005/api/tpv_viajesmultitransstock/**
Si queremos llamar a un metodo en concreto podemos utilizar el parametro -static- y llamar a la funcion que queremos
http://127.0.0.1:8005/api/articulos/-static-/getProductsPda
El fichero nos debe de quedar así:
# -*- coding: utf-8 -*-
# Translated with pineboolib v0.45.3
from typing import TYPE_CHECKING, Any
from pineboolib.qsa import qsa
import json
import datetime
import time
import hashlib
from marshmallow import Schema, fields, pprint, post_load, ValidationError, validate
orm = qsa.orm
class viajesSchema(Schema):
idviajemultitrans = fields.String(allow_none=True)
enviocompletado = fields.Boolean(allow_none=True)
fecha = fields.Date(allow_none=True)
cantidad = fields.Float(allow_none=True)
@post_load
def make_viaje(self, data, **kwargs):
Viajes = qsa.orm.tpv_viajesmultitransstock
if "idviajemultitrans" in data:
viaje = Viajes.get(data["idviajemultitrans"])
for field in data:
setattr(viaje, field, data[field])
else:
viaje = None
return viaje
# @class_declaration Base */
class Base(qsa.FormDBWidget):
pass
# @class_declaration Oficial */
class Oficial(Base):
def get(self, pk=None, params={}, username=None):
print(params)
mapa = self.get_mapa(username)
obj = None
if pk != None:
params["filter"] = json.dumps(["idviajemultitrans", "eq", str(pk)])
obj = qsa.from_project("formAPI").get_resources('tpv_viajesmultitransstock', params, mapa, username)
params["filter"] = "[]" # Limpio filtros anteriores
return obj
def patch(self, pk, params={}, username=None):
schema = viajesSchema()
viaje = schema.load(params, partial=True)
viaje.save()
return True
def delete(self, pk, username=None):
viaje = viaje.get(pk, username)
viaje.delete()
return True
def deleteEvent(self, params, username=None):
if 'idviajemultitrans' in params:
Viaje = qsa.orm.tpv_viajesmultitransstock
viaje = Viaje.get(params['idviajemultitrans'], username)
viaje.delete()
return True
return False
def post(self, params, username=None):
schema = viajesSchema()
viaje = schema.load(params)
viaje.save()
return {"pk": viaje.idviajemultitrans}
def get_mapa(self, username):
return {
'join': 'tpv_viajesmultitransstock',
'order': 'fecha',
'map': {
'idviajemultitrans': {'field': 'tpv_viajesmultitransstock.idviajemultitrans', 'type': 'string'},
'enviocompletado': {'field': 'tpv_viajesmultitransstock.enviocompletado', 'type': 'boolean'},
'fecha': {'field': 'tpv_viajesmultitransstock.fecha', 'type': 'date'},
'cantidad': {'field': 'tpv_viajesmultitransstock.cantidad', 'type': 'float'}
}
}
# @class_declaration FormInternalObj */
class FormInternalObj(Oficial):
pass
if TYPE_CHECKING:
form: FormInternalObj = FormInternalObj()
iface = form.iface
else:
form = None