Ir al contenido principal
Todas las coleccionesRest API - Integraciones
Rest API : Integración con sistemas de facturación. Recuperar datos de tSpoonLab
Rest API : Integración con sistemas de facturación. Recuperar datos de tSpoonLab

Documento técnico donde se explica como integrar las compras y ventas de tSpoonLab con sistemas de facturación y contabilidad

Rafel Tugues avatar
Escrito por Rafel Tugues
Actualizado hace más de 2 meses

1. Recepción de pedidos, albaranes y/o validación de facturas de compra en tSpoonLab

tSpoonLab es un entorno perfecto para generar los pedidos desde cocina a nuestros proveedores. Existen varias posibilidades entre otras generarlos  en base a una planificación, en base a stock o mediante plantillas. En todos los casos se deja constancia en la aplicación de lo que vamos a pedir y se envía por Whatsapp, mail o teléfono al proveedor. 

La recepción de pedidos equivale a la entrada de los albaranes y no sólo tiene implicaciones de coste o control contable. Nos permite también anotar los puntos de control de recepción, los números de lote del pedido recibido, generar una entrada en el almacén y comprobar que la cantidad servida y los precios son similares a los solicitados.  Por tanto recomendamos realizar la recepción/entrada de albarán desde tSpoonLab.

Una vez recepcionados los pedidos estos pueden ser enviados a sistemas externos de gestión y en ellos poder validar las facturas con los albaranes y arrancar todos los procesos contables.

Desde la pantalla de proveedores de tSpoonLab también se puede realizar la validación de las facturas contra los albaranes recibidos. En ese proceso se crea una factura y se le asocian sus albaranes. A partir de aquí la factura, los impuestos y el pago deben ser gestionados por un sistema de facturación. 

Por tanto para las compras podemos enviar los albaranes o las facturas. Para no repetir los envios una vez procesados por el sistema externo se deben marcar en tSpoonLab como procesados para que no se envien de nuevo.

1.1. Rest API : Login

Para poder hacer llamadas a nuestas api's lo primero que ncesitamos es identificarnos mediante una llamada de login

Esa llamada nos retornara una token que después debemos asociar en cada llamada posterior. 

Este shell script muestra como authenticar-nos mediante curl

[email protected]
password=XXXXXXX

url=https://app.tspoonlab.com/recipes/api
authenticate='username='$username'&password='$password

echo -n 'rememberme:' > rememberme.txt
curl -v --data $authenticate $url/login >> rememberme.txt

En las llamadas posteriores debemos añadir a nuestros headers el token recibido de la llamada de login

curl -X PUT -v -H "$(cat rememberme.txt)"  $url/integration/llamada

1.2. Rest API : Seleccionar un centro de coste/restaurante

Las peticiones que se describen en los apartados siguientes hacen referencia a un centro de coste. Que en la mayoría de los casos se correspondería con un restaurante

Para recuperar la lista de centros de costes y sus identificadores consulta el documento

El identificador de cenetro de coste se corresponde al campo idOrderCenter de la classe UserOrderCenter

Una vez tenemos el identificador este deberá añadirse a los headers para que sea utilizado en llamadas posteriores

echo -n 'order:351583444167656299610202XXXXXXXXXXXX' >> rememberme.txt

Por tanto en nuestros request headers debemos especificar tanto el token devuelto por el login como el identificador del centro de coste

rememberme:aGVucnkudXBzYWxsLmRAZXXXXXXXXXXXXXXXXXX
order:351583444167656299610202XXXXXXXXXXXX

1.3. Rest API : Recuperación de pedidos de compras no marcados como procesados

Para recuperar los pedidos de compras no marcados como procesados debemos realizar esta llamada 

GET: https://app.tspoonlab.com/recipes/api/integration/purchases/orders/pending?startDate=YYYY-MM-DD&endDate=YYYY-MM-DD&includeInternal=true&idVendor=XXXXX

Debemos pasar los siguentes request params

  1. startDate (String). Fecha a partir de la cual se recuperarán los datos

  2. endDate (String). Fecha hasta la cual se recuperarán los datos.

  3. includeInternal (Boolean) Incluir también albaranes de proveedores marcados como internos. Opcional. Valor por defecto true

  4. idVendor (Id). Parametro opciónal donde se indica el identificador del proveedor. Nos recuperará solo los datos asociados al proveedor. Para obtener el id del Proveedor https://documents.tspoonlab.com/es/articles/5438603-rest-api-proveedores-y-compras

El formato de las fechas debe ser YYYY-MM-DD y es inclusivo en startDate y endDate. Es decir todos los datos con fecha igual a startDate o endDate son retornados.

Nos retornará un array de la classe PurchaseDelivery y un código 200. 

class PurchaseOrder {


String id; // Id del pedido
String numOrder; // Número de pedido
String idVendor; // Id del proveedor
String vendor; // Nombre del proveedor
String codeVendor; // Código del proveedor
String accountVendor; // Num cuenta contable del proveedor
String nif; // Nif del proveedor
Date date; // Fecha del peidod
String dateFormatted; // Fecha del pedido en YYYY/MM/DD
Date dateReception; // Fecha de recepción
String dateReceptionFormatted; // Fecha de recepción en YYYY/MM/DD
Double total; // Importe total
List<PurchaseOrderLine> listOrders; // Detalle de linias del pedido
}

Las líneas de detalle

public class PurchaseOrderLine {

String id; // Identificador de la linia de detalle
int position; // Posición dentro del albaran
String codeComponent; // Código del producto
String idComponent; // Identificador Ingrediente, matarial
String codeVendorComponent; // Código del producto para el proveedor
String component; // Descripción del ingrediente, material
String comment; // Comentario
// Valores en la unidad base del ingrediente
Double quantity; // Cantidad
String idUnit; // Identificador de la unidad
String unit; // Unidad
Double cost; // Coste unitario
// En caso de haber comprado con un formato
boolean hasFormat; // true si tiene información de formato
Double quantityFormat; // Cantidad del formato
String idUnitFormat; // Identificador de la unidad del format
String unitFormat; // Unidad del formato
Double costFormat; // Coste unitario del formato
Double iva; // Tipo de iva aplicado a la linia
String idCostType; // Identificador de la cuenta de análisis
String costType; // Descripcion de la cuenta de análisis
String codeCostType; // Código de la cuenta de análisis
String accountCostType; // Cuenta contable de la cuenta de análisis
String idBusinessLine; // Identificador de la linea de negocio
String businessLine; // Descripcion de la linea de negocio
String codeBusinessLine; // Código de la linea de negocio

List<LineType> listTypes; // Lista de tipos del componente.
}

Para cada tipo de las lista de tipos/familias

class LineType {


    String id; // Identificador del impuesto para la factura
    String descr; // Descripcion del tipo
}



Este seria un ejemplo de la llamada

[email protected]
password=XXXXXXXX

url=https://app.tspoonlab.com/recipes/api
authenticate='username='$username'&password='$password

echo -n 'rememberme:' > rememberme.txt

curl -v --data $authenticate $url/login >> rememberme.txt
curl -X GET -v -H "$(cat rememberme.txt)"  $url/integration/purchases/orders/pending | python -m json.tool

1.4. Rest API : Marcar pedidos de compras como procesados

Una vez hemos traspasado los albaranes de compras al sistema externo podemos marcarlas como procesados en tSpoonLab de forma que ya no se reenviaran otra vez en peticiones posteriores.

PUT:
https://app.tspoonlab.com/recipes/api/integration/purchases/orders/processed

La peticion retorna un código 200 en caso de que se haya ejecutado correctamente

En el request body debemos pasar un esta estrucura la lista identificadores de facturas que queremos marcar como contabilizadas

public class NewListIds {
    private List<String> listIds;
}

Aquí tenemos un ejemplo de llamada

username= [email protected]
password=XXXXXX

url=https://app.tspoonlab.com/recipes/api

authenticate='username='$username'&password='$password

echo -n 'rememberme:' > rememberme.txt

curl -v --data $authenticate $url/login >> rememberme.txt
curl -X PUT -d '{"listIds":["idFactura1", "idFactura2"]}' -H "$(cat rememberme.txt)"  -H 'Content-Type: application/json'   $url/integration/purchases/orders/processed
 

1.5. Rest API : Recuperación de albaranes de compras no marcados como procesados

Para recuperar los albaranes de compras no marcados como contabilizadosdebemos realizar esta llamada

GET: https://app.tspoonlab.com/recipes/api/integration/purchases/deliveries/pending?startDate=YYYY-MM-DD&endDate=YYYY-MM-DD&includeInternal=true&idVendor=XXXXX

Debemos pasar los siguentes request params

  1. startDate (String). Fecha a partir de la cual se recuperarán los datos

  2. endDate (String). Fecha hasta la cual se recuperarán los datos.

  3. includeInternal (Boolean) Incluir también albaranes de proveedores marcados como internos. Opcional. Valor por defecto true

  4. idVendor (Id). Parametro opciónal donde se indica el identificador del proveedor. Nos recuperará solo los datos asociados al proveedor. Para obtener el id del Proveedor https://documents.tspoonlab.com/es/articles/5438603-rest-api-proveedores-y-compras

El formato de las fechas debe ser YYYY-MM-DD y es inclusivo en startDate y endDate. Es decir todos los datos con fecha igual a startDate o endDate son retornados.

Nos retornará un array de la classe PurchaseDelivery y un código 200.

public class PurchaseDelivery  {


private String id; // Id del albarán
private String idVendor; // Id del proveedor
private String vendor; // Nombre del proveedor
private String codeVendor; // Código del proveedor
private String accountVendor; // Num cuenta contable del proveedor
private String nif; // Nif del proveedor
private String deliveryNum ; // Numero de albarán
private Date date; // Fecha del albarán en formato time_t
private String dateFormatted; // Fecha del albaran en formato YYYY/MM/DD
private Double base; // Importe base albarán
private Double taxes; // Importe impuestos
private Double total; // Importe total

private String idCostType; // Id de la cuenta de análisis
// (Si imputamos todo el albarán si no aparece puede
// ser que este imputado por línea de albarán)
private String costType; // Descripción de la cuenta de análisis
// (Si imputamos todo el albarán si no aparece puede
// ser que este imputado por línea de albarán)
private String codeCostType; // Código de la cuenta de análisis
// (Si imputamos todo el albarán si no aparece puede
// ser que este imputado por línea de albarán)
private String accountCostType; // Cuenta contable
// de la cuenta de analisis
// (Si imputamos todo el albarán si no aparece puede
// ser que este imputado por linia de albaran)

private List<DeliveryTax> listTaxes; // Detalle de los impuestos
private List<PurchaseDeliveryLine> listDeliveries;
// Detalle de líneas del albarán
}

public class DeliveryTax {


private String id; // Identificador del impuesto para el albarán
private short type; // Tipo de impuesto
// (0:IVA, 1:Transportes, 2:Descuentos, 3: Otros, -1: Descuento s/base)
private Double base; // Base puede ser nulo
// para Transportes, Descuentos y otros
private Double percent; // Tipo/Porcentaje puede ser nulo
// para Transportes, Descuentos y otros
private Double total; // Total impuesto o transporte
//o descuento o otros
}

Las líneas de detalle

public class PurchaseDeliveryLine {


private String id; // Identificador de la línea de detalle
private int position; // Posición dentro del albarán

private String idComponent; // Id producto
private String codeComponent; // Código del producto
private String component; // Nombre del producto
private String codeVendorComponent;
// Código del producto para el proveedor
private String comment; // Comentario
private boolean recibido; // Si se ha recibido o no





// Valores en la unidad base del ingrediente
private Double quantity; // Cantidad
private String idUnit; // Identificador de la unidad
private String unit; // Unidad
private Double cost; // Coste unitario

// En caso de haber comprado con un formato
private boolean hasFormat; // true si tiene información de formato private Double quantityFormat; // Cantidad del formato
private String idUnitFormat; // Identificador de la unidad del format
private String unitFormat; // Unidad del formato
private Double costFormat; // Coste unitario del formato

private Double iva; // Tipo de IVA aplicado a la línea
private String idCostType; // Identificador de la
// cuenta de análisis
private String costType; // Descripción de la
// cuenta de análisis
private String codeCostType; // Código de la
// cuenta de análisis
private String accountCostType; // Cuenta contable de la
// cuenta de análisis



private String idBusinessLine; // Identificador de la linea de negocio
private String businessLine; // Descripcion de la linea de negocio
private String codeBusinessLine; // Código de la linea de negocio

private List<LineType> listTypes; // Lista de tipos del componente.

}

Para cada tipo de las lista de tipos/familias

public class LineType {


private String id; // Identificador del impuesto para la factura
private String descr; // Descripcion del tipo
}



Este seria un ejemplo de la llamada

[email protected]
password=XXXXXXXX

url=https://app.tspoonlab.com/recipes/api
authenticate='username='$username'&password='$password

echo -n 'rememberme:' > rememberme.txt

curl -v --data $authenticate $url/login >> rememberme.txt
curl -X GET -v -H "$(cat rememberme.txt)" $url/integration/purchases/deliveries/pending | python -m json.tool

Para recuperar todas las compras esten o no procesadas podemos hacer la siguiente llamada

GET: https://app.tspoonlab.com/recipes/api/integration/purchases/deliveries/all?startDate=YYYY-MM-DD&endDate=YYYY-MM-DD&includeInternal=true&idVendor=XXXX

1.6. Rest API : Marcar albaranes de compras como procesados

Una vez hemos traspasado los albaranes de compras al sistema externo podemos marcarlas como procesados en tSpoonLab de forma que ya no se reenviaran otra vez en peticiones posteriores.

PUT:
https://app.tspoonlab.com/recipes/api/integration/purchases/deliveries/processed

La peticion retorna un código 200 en caso de que se haya ejecutado correctamente

En el request body debemos pasar un esta estrucura la lista identificadores de facturas que queremos marcar como contabilizadas

public class NewListIds {
private List<String> listIds;
}

Aquí tenemos un ejemplo de llamada

username= [email protected]
password=XXXXXX

url=https://app.tspoonlab.com/recipes/api

authenticate='username='$username'&password='$password

echo -n 'rememberme:' > rememberme.txt

curl -v --data $authenticate $url/login >> rememberme.txt
curl -X PUT -d '{"listIds":["idFactura1", "idFactura2"]}' -H "$(cat rememberme.txt)" -H 'Content-Type: application/json' $url/integration/purchases/deliveries/processed

1.7. Rest API : Recuperación de facturas de compras no contabilizadas


Para recuperar las facturas de compras pendientes de contabilizar debemos realizar esta llamada 

GET: https://app.tspoonlab.com/recipes/api/integration/purchases/invoices/pending?startDate=YYYY-MM-DD&endDate=YYYY-MM-DD&includeInternal=true&onlyValidated=true&idVendor=XXXXX

Debemos pasar los siguentes request params

  1. startDate (String). Fecha a partir de la cual se recuperarán los datos

  2. endDate (String). Fecha hasta la cual se recuperarán los datos.

  3. includeInternal (Boolean) Incluir también facturas de proveedores marcados como internos. Opcional. Valor por defecto true

  4. onlyValidated (Boolean) Incluir solo las facturas de proveedores marcados como validados. Opcional. Valor por defecto false

  5. idVendor (Id). Parametro opciónal donde se indica el identificador del proveedor. Nos recuperará solo los datos asociados al proveedor. Para obtener el id del Proveedor https://documents.tspoonlab.com/es/articles/5438603-rest-api-proveedores-y-compras

El formato de las fechas debe ser YYYY-MM-DD y es inclusivo en startDate y endDate. Es decir todos los datos con fecha igual a startDate o endDate son retornados.

Nos retornará un array de la classe PurchaseInvoice y un código 200. 

public class PurchaseInvoice {

   private String id; // Id de la factura
   private String idVendor; // Id del proveedor
   private String vendor; // Nombre del proveedor
private String codeVendor; // Código del proveedor
private String accountVendor; // Num cuenta contable del proveedor
private String nif; // Nif del proveedor
   private String invoiceNum; // Núm de factura
private boolean paid; // Si ya está pagado
private boolean validated: // Si ya está validada
private String documentNum; // Num de documento
   private String comment; // Comentario factura
   private Date date; // Fecha factura
private Date dateAccounting; // Fecha contabilidad. Si nula utilizar date
private Date dateDue // Fecha vencimiento
private String codePaymentType; // Código de la forma de pago

private String idCostTypeVendor; // Identificador de la cuenta de
// análisis del proveedor
private String costTypeVendor; // Descripción de la cuenta de análisis
// del proveedor
private String codeCostTypeVendor; // Código de la cuenta de análisis
// del proveedor
private String accountCostTypeVendor; // Cuenta contable de la cuenta
// de análisis del proveedor
private String idDocument; // Id del documento asociado a la factura
private String extDocument; // Extensión del documento
// asociado a la factura
   private Double total; // Total factura
   private Double base; // Total base imponible
   private Double taxes; // Total impuestos
   private List<InvoiceTax> listTaxes; // Detalle de los impuestos
   private List<PurchaseDelivery> listDeliveries; // Detalle de albaranes
private List<CostTypeTax> listCostTypeTaxes; // Detalle de los
// impuestos por cuenta de analisis
}

public class InvoiceTax {

    private String id; // Identificador del impuesto para la factura
    private short type; // Tipo de impuesto  
            // (0:IVA, 1:Transportes, 2:Descuentos, 3: Otros, -1: Descuento s/base)
    private Double base; // Base puede ser nulo
            // para Transportes, Descuentos y otros
    private Double percent; // Tipo/Porcentaje  
            // puede ser nulo para Transportes, Descuentos y otros
    private Double total; // Total impuesto o transporte o descuento o otros
}

El Albarán esta representado por la clase PurchaseDelivery tal como se ha documentado con anterioridad.

Este seria un ejemplo de la llamada

[email protected]
password=XXXXXXXX

url=https://app.tspoonlab.com/recipes/api
authenticate='username='$username'&password='$password

echo -n 'rememberme:' > rememberme.txt

curl -v --data $authenticate $url/login >> rememberme.txt
curl -X GET -v -H "$(cat rememberme.txt)"  $url/integration/purchases/invoices/pending | python -m json.tool

Para recuperar todas las facturas esten o no contabilizadas podemos hacer la siguiente llamada

GET: https://app.tspoonlab.com/recipes/api/integration/purchases/invoices/all?startDate=YYYY-MM-DD&endDate=YYYY-MM-DD&includeInternal=true&onlyValidated=false&idVendor=XXXX

Para recuperar el documento asociado a la factura debemos realizar está llamada

https://app.tspoonlab.com/recipes/api/exportFileBoundFile/{idDocument}.{extDocument}?id={idDocument}&rememberme={rememberme}

listCostTypeTaxes retorna el detalle de impuestos por cuenta de análisis para la factura

class CostTypeTax  {

String id; // Identificador de la cuenta de análisis
String descr; // Descripción de la cuenta de análisis
List<OrderVendorVat> listTaxes;
}

class OrderVendorVat {
Double base; // base imponible
Double percent; // Porcentaje de IVA
Double total; // Importe del iva
}


1.8. Rest API : Marcar facturas de compras como contabilizadas

Una vez hemos traspasado las facturas de compras a la contabilidad podemos marcarlas como contabilizadas en tSpoonLab de forma que ya no se reenviaran otra vez en peticiones posteriores.

PUT:
https://app.tspoonlab.com/recipes/api/integration/purchases/invoices/accounted?lock=true

El parámetro lock indica si ademas de marcar la factura como contabilizada la bloqueamos

La peticion retorna un código 200 en caso de que se haya ejecutado correctamente

En el request body debemos pasar un esta estrucura la lista identificadores de facturas que queremos marcar como contabilizadas

public class NewListIds {
    private List<String> listIds;
}

Aquí tenemos un ejemplo de llamada

username= [email protected]
password=XXXXXX

url=https://app.tspoonlab.com/recipes/api

authenticate='username='$username'&password='$password

echo -n 'rememberme:' > rememberme.txt

curl -v --data $authenticate $url/login >> rememberme.txt
curl -X PUT -d '{"listIds":["idFactura1", "idFactura2"]}' -H "$(cat rememberme.txt)"  -H 'Content-Type: application/json'   $url/integration/purchases/invoices/accounted
 

1.9. Rest API : Marcar facturas de compras como no contabilizadas

Si queremos volver a marcar facturas en tspoonlab como no contabilizadas

PUT:
https://app.tspoonlab.com/recipes/api/integration/purchases/invoices/not/accounted

La peticion retorna un código 200 en caso de que se haya ejecutado correctamente

En el request body debemos pasar un esta estrucura la lista identificadores de facturas que queremos marcar como contabilizadas

public class NewListIds {
    private List<String> listIds;
}

Aquí tenemos un ejemplo de llamada

username= [email protected]
password=XXXXXX

url=https://app.tspoonlab.com/recipes/api

authenticate='username='$username'&password='$password

echo -n 'rememberme:' > rememberme.txt

curl -v --data $authenticate $url/login >> rememberme.txt
curl -X PUT -d '{"listIds":["idFactura1", "idFactura2"]}' -H "$(cat rememberme.txt)"  -H 'Content-Type: application/json'   $url/integration/purchases/invoices/not/accounted
 

1.10. Rest API : Marcar facturas de compras como bloqueadas

Si queremos marcar facturas en tspoonlab como bloqueadas

PUT:
https://app.tspoonlab.com/recipes/api/integration/purchases/invoices/lock

La peticion retorna un código 200 en caso de que se haya ejecutado correctamente

En el request body debemos pasar un esta estrucura la lista identificadores de facturas que queremos bloquear

public class NewListIds {
private List<String> listIds;
}

Aquí tenemos un ejemplo de llamada

username= [email protected]
password=XXXXXX

url=https://app.tspoonlab.com/recipes/api

authenticate='username='$username'&password='$password

echo -n 'rememberme:' > rememberme.txt

curl -v --data $authenticate $url/login >> rememberme.txt
curl -X PUT -d '{"listIds":["idFactura1", "idFactura2"]}' -H "$(cat rememberme.txt)" -H 'Content-Type: application/json' $url/integration/purchases/invoices/lock

2. Ventas en tSpoonLab

En los restaurantes  tSpoonLab puede integrarse con el sistema de TPV.  Podemos recuperar las ventas de la TPV y utilizarlas en tSpoonLab para la gestión de los almacenes  y el cálculo del foodcost teórico.  Esta situación no es el objecto de este artículo ya que lo que aquí se describe es enviar las ventas de tSpoonLab hacia un sistema externo. En el caso de las TPV's lo que se produce es lo contrario.

Si tenemos una tienda online con Shopify lo que haríamos sería recuperar las peticiones de ventas y gestionar las producciones desde tSpoonLab. Una vez realizamos el envío de la venta esta se considera realizada y ya se podría enviar de vuelta a Shopify o a un sistema de gestión. Por tanto en este caso ya tiene ciertas ventajas integrarse con el módulo de  ventas de tSpoonLab

Finalmente en caso de gestionar un centro de producción se generan peticiones y envío de productos. Desde los clientes (normalmente restaurantes del grupo) hacia el centro de producción y del centro de producción hacia los clientes. Aquí si que nos resultará especialmente útil integrarnos con el módulo de ventas.

2.1. Rest API : Login

Para poder hacer llamadas a nuestas api's lo primero que ncesitamos es identificarnos mediante una llamada de login

Esa llamada nos retornara una token que después debemos asociar en cada llamada posterior. 

Este shell script muestra como authenticar-nos mediante curl

[email protected]
password=XXXXXXX

url=https://app.tspoonlab.com/recipes/api
authenticate='username='$username'&password='$password

echo -n 'rememberme:' > rememberme.txt
curl -v --data $authenticate $url/login >> rememberme.txt

En las llamadas posteriores debemos añadir a nuestros headers el token recibido de la llamada de login

curl -X PUT -v -H "$(cat rememberme.txt)"  $url/integration/llamada

2.2. Rest API : Seleccionar un centro de coste/restaurante

Las peticiones que se describen en los apartados siguientes hacen referencia a un centro de coste. Que en la mayoría de los casos se correspondería con un restaurante

Para recuperar la lista de centros de costes y sus identificadores consulta el documento

El identificador de cenetro de coste se corresponde al campo idOrderCenter de la classe UserOrderCenter

Una vez tenemos el identificador este deberá añadirse a los headers para que sea utilizado en llamadas posteriores

echo -n 'order:351583444167656299610202XXXXXXXXXXXX' >> rememberme.txt

Por tanto en nuestros request headers debemos especificar tanto el token devuelto por el login como el identificador del centro de coste

rememberme:aGVucnkudXBzYWxsLmRAZXXXXXXXXXXXXXXXXXX
order:351583444167656299610202XXXXXXXXXXXX

2.3 Rest API : Recuperación de albaranes de venta no contabilizadas

Para recuperar los albaranes de ventas pendientes de contabilizar debemos realizar esta llamada 

GET: https://app.tspoonlab.com/recipes/api/integration/sales/deliveries/pending?startDate=YYYY-MM-DD&endDate=YYYY-MM-DD&includeInternal=true

Debemos pasar los siguentes request params

  1. startDate (String). Fecha a partir de la cual se recuperarán los datos

  2. endDate (String). Fecha hasta la cual se recuperarán los datos.

  3. includeInternal (Boolean) Incluir también facturas de proveedores marcados como internos. Opcional. Valor por defecto true

El formato de las fechas debe ser YYYY-MM-DD y es inclusivo en startDate y endDate. Es decir todos los datos con fecha igual a startDate o endDate son retornados.

Nos retornará un array de la classe SalesDelivery y un código 200. 

public class SalesDelivery {

   private String id; // Id de la factura
   private String idCustomer; // Id del client
   private String customer; // Nombre del cliente
   private String customerCode; // codigo cliente
   private String address; // direccion
   private String cp; // código postal
   private String city; // ciudad
   private String nif; // Nif del proveedor
   private String contact; // nombre contacto
   private String phone; // telf
   private String contactAux; // otro nombre contacto
   private String phoneAux; // otro telf
   private String mail; // mail
   private String mailAux; // otro mail
   private String mailCC; // mail copia
   private String web; // url del cliente
   private String customerType; // tipo de cliente
   private String customerTypeCode; // Código del tipo de cliente
   private String invoiceNum; // Num de factura
   private Date date; // Fecha factura
   private Double base; // Total base imponible
   private List<SalesDeliveryLine> listLines;
private List<SalesDeliveryLine> listLinesPending;

}

Las líneas de detalle aparecen en listLines y listLinesPending. En listLines tenemos todas las enviadas y en listLinesPending las pendientes de enviar

public class SalesDeliveryLine {


    private String id; // Identificador de la linia de detalle
    private int position; // Posición dentro del albaran

    // Tendran valor si enviamos un producto. en caso contrario nulo
    private String idComponent; // Identificador del producto
    private String component; // Descripción del producto
private String codeComponent; // Código del product

    // Tendran valor si enviamos un menu. en caso contrario nulo
    private String idMenu; // Identificador del menu
    private String menu; // Descripción del menu
private String codeMenu; // Código del menu

private String codeCustomerProduct;
// Código de venta del componente/menu

    private String comment; // Comentario
    private boolean sent; // Si se ha recibido o no
    private Double quantity; // Cantidad
    private String idUnit; // Identificador de la unidad
    private String unit; // Unidad
    private Double cost; // Coste unitario
    private Double iva; // Tipo de IVA aplicado a la línea
    private List<LineType> listTypes; // Lista de tipos del componente.

private String idCustomerGroup; // Grupo de productos del producto
private String customerGroup; // Nombre del grupo de producto

}

Este seria un ejemplo de la llamada

[email protected]
password=XXXXXXXX

url=https://app.tspoonlab.com/recipes/api
authenticate='username='$username'&password='$password

echo -n 'rememberme:' > rememberme.txt

curl -v --data $authenticate $url/login >> rememberme.txt
curl -X GET -v -H "$(cat rememberme.txt)"  $url/integration/sales/invoices/pending | python -m json.tool

2.4. Rest API : Marcar albaranes de venta como contabilizadas

Una vez hemos traspasado los albaranes de venta a la contabilidad podemos marcarlas como contabilizadas en tSpoonLab de forma que ya no se reenviaran otra vez en peticiones posteriores.

PUT:
https://app.tspoonlab.com/recipes/api/integration/sales/deliveries/accounted

La petición retorna un código 200 en caso de que se haya ejecutado correctamente

En el request body debemos pasar un esta estrucura la lista identificadores de facturas que queremos marcar como contabilizadas

public class NewListIds {
    private List<String> listIds;
}

Aquí tenemos un ejemplo de llamada

username= [email protected]
password=XXXXXX

url=https://app.tspoonlab.com/recipes/api

authenticate='username='$username'&password='$password

echo -n 'rememberme:' > rememberme.txt

curl -v --data $authenticate $url/login >> rememberme.txt
curl -X PUT -d '{"listIds":["idFactura1", "idFactura2"]}' -H "$(cat rememberme.txt)"  -H 'Content-Type: application/json'   $url/integration/sales/invoices/accounted
 

2.5. Rest API : Marcar albaranes de venta como no contabilizadas

Si queremos volver a marcar como no contabilizadas albaranes de venta en tspoonlab 

PUT:
https://app.tspoonlab.com/recipes/api/integration/sales/deliveries/not/accounted

La petición retorna un código 200 en caso de que se haya ejecutado correctamente

En el request body debemos pasar un esta estrucura la lista identificadores de facturas que queremos marcar como contabilizadas

public class NewListIds {
    private List<String> listIds;
}

Aquí tenemos un ejemplo de llamada

username= [email protected]
password=XXXXXX

url=https://app.tspoonlab.com/recipes/api

authenticate='username='$username'&password='$password

echo -n 'rememberme:' > rememberme.txt

curl -v --data $authenticate $url/login >> rememberme.txt
curl -X PUT -d '{"listIds":["idFactura1", "idFactura2"]}' -H "$(cat rememberme.txt)" -H 'Content-Type: application/json' $url/integration/sales/invoices/not/accounted

3. Creación de pedidos en tspoonlab

Para crear pedidos en tspoonlab lo primero que debemos hacer es obtener un id de proveedor.

3.1 Identificar el proveedor

Debemos llamar a la función

GET: 
https://app.tspoonlab.com/recipes/api/listVendorsPaged

Si estamos en un entorno con un centro de producción donde nuestro proveedor está vinculado a un cliente del centro de producción el campo orderCenter tendrà el valor del centro de coste donde vayamos a pedir

De la respuesta seleccionaremos el id del proveedor al que vamos a realizar el pedido

3.2 Crear pedido

Para crear un pedido debemos llamar a

POST: 
https://app.tspoonlab.com/recipes/api/integration/purchases/orders

En el body vamos a especificar toda la información relativa al pedido que queremos crear

NewPurchaseOrder {

String idVendor; // Id del proveedor
Date dateSend; // Fecha de envio
Date dateReception; // Fecha de recepción
List<NewPurchaseOrderLine> listLines; // Detalle de linias del pedido
}

NewPurchaseOrderLine {

String idComponent; // Identificador Ingrediente, matarial
Double quantity; // Cantidad. No puede ser nula
}

Donde idVendor es el identificador del proveedor conseguido del apartado anterior

dateSend y dateReception son las fechas de envio del pedido y fecha prevista de recepción del mismo

listLines es la lista de items que queremos comprar con el idComponent y la cantidad (quantity)

Para obtener el idComponent podemos consultar los productos a la venta del proveedor. Este campo aparece en la clase VendorComponent. Tal como se explica en el apartado 1.8 del documento https://documents.tspoonlab.com/es/articles/5438603-rest-api-proveedores-y-compras

La respuesta de esta llamada es una estructura con el id del pedido

IdWrapper {
String id; // Identificador del pedido
}

3.3 Marcar el pedido como enviado

Una vez creado el pedido debemos enviarlo al proveedor (No se explica en esta documentación) y posteriormente marcarlo como que ya lo hemos enviado

PUT: 
https://app.tspoonlab.com/recipes/api/vendorOrder/{idProvCom}/sent

Donde idProvCom es el identificador del pedido obtenido en el apartado anterior

No devuelve datos. Solo código 200 si se ha enviado correctamente

¿Ha quedado contestada tu pregunta?