1. Productos elaborados
Se consideran productos elaborados aquellos que realizamos nosotros en base a productos base que compramos
Tenemos dos tipos:
Inermedias/Recetas. Son elaboraciones que realizamos en nuestra cocina y después utilizaremos para nuestras elaboraciones finales.
Finales/Platos. Son aquellas elaboraciones que vendemos y servimos a nuestros clientes
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://www.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 : Listar todos los productos elaborados
Tenemos dos llamadas
GET:
https://www.tspoonlab.com/recipes/api/listRecipesPaged
o
https://www.tspoonlab.com/recipes/api/listDishesPaged
Podemos pasar los siguentes request params
start (int). Número de la primera fila a retornar. Es obligatorio
rows (int). Número de filas a retornar. Es obligatorio
filter (String). Cadena para filtrar los ingredientes. Es opcional
types (Array de String). Array con los ids de las familias que queremos filtrar. En caso de especificar més de una familia el producto deberá tener ambas familias. Es opcional
marked (Boolean). Retorna solo aquellos que estan marcados. Es opcional
hidden (Boolean). Retorna solo los ocultos. Es opcional
Retorna
retorna una List<EntityBaseImages>
EntityBaseImagess {
String id;
String descr;
String codi;
boolean hasData;
Short tag;
String tagComment;
String altDescr;
}
Donde:
id es el identificador del producto
descr es el nombre del producto
codi es el código del producto
hasData indica que dicha elaboración se esta utilizando en otra elaboracion (intermedia o final)
tag es nulo si el producto no tiene ninguna marca sino toma los siguientes valores. (Ok:1, MoreInfo: 2, Error:3)
tagComment es el comentario asociado a la marca
1.4. Rest API : Acceder a una elaboración intermedia
Para acceder a una elaboración intermedia
GET:
https://www.tspoonlab.com/recipes/api/recipe/{idRecipe}
Donde idRecipe es el identificador de la elaboración intermedia obtenido de la anterior llamada
Retorna
class ComponentCompond {
String id;
String descr;
String altDescr;
Double cost;
List<ComponentDetail> listComponentDetail;
List<ComponentService> listComponentService;
String process;
}
class ComponentService {
String id;
String idUnit;
Double quantity;
String unit;
}
class ComponentDetail {
String id;
String idComponent;
String codeComponent;
String descr;
String altDescr;
Double quantity;
Double quantityGross;
String unit;
String idUnit;
String use;
String comment;
Double cost;
int type;
}
Donde id y descr son el identificador y descripción de la elaboración. La elaboración puede tener una descripción alternativa que se representa en altDescr
cost es el coste de producir la cantidad expresada en listComponentService. En caso de que sea una lista de más de una entrada. El coste hara referencia a la primera entrada de la lista.
process es el proceso de elaboración donde cada paso se ha separado por un salto de linia ("\n")
listComponentService lista las cantidad asociada a cada plato. Puede haber más de una. En ese caso se interpreta que las cantidades del detalle me permiten producir cada una de las entradas de listComponentService por separado. Es decir, todas las entradas son equivalentes
listComponentDetail nos muestra todos los ingredientes necesarios para realizar la elaboración.
id es el identificador de ese detalle, idComponent el identificador del producto/elaboración utilizado. descr y altdescr hacen referencia a la descipción / descripción alternativa del producto/elaboración.
quantity representa la cantidad que utilizamos de ese componente. En caso de realizar algun proceso de corte o despiece quantityGross expresa la cantidad en bruto. quantityGross puede ser nulo. use expresa el nombre del corte/despiece que utlizacmos
comment es un comentario relativo al uso de dicho componente y cost es el coste de ese detalle. En caso de utilizar una cantidad bruta dicho coste es el coste bruto
idUnit y unit son los identificadores de la unidad utilizada en ese ingrediente. Dicha unidad puede no coincidir con la unidad del producto. En cuyo caso habria que analizar las equivalencias de unidades si fuera necesario
codeComponent es el código del ingrediente o receta que aparece en el detalle
type nos permite diferenciar si se trata de un ingrediente, un material, una receta o incluso otra elaboración final
Ingrediente(Producto): 0
Receta(Elaboración intermedia): 1
Material(Herramienta): 2
Dish(Elaboración final): 3
1.5. Rest API : Acceder a una elaboración final
Para acceder a una elaboración final
GET:
https://www.tspoonlab.com/recipes/api/dish/{idDish}
Donde idDish es el identificador de la elaboración final obtenido de la anterior llamada
Retorna un ComponentCompund igual que en el caso de las elaboraciones intermedias explicadas en el apartado anterior excepto que también incluye la lista de libros de finales que tiene asociada
private List<EntityBaseData> listRecipeCenters;
class EntityBaseData {
String id;
String idAux;
String descr;
}
Donde id es es el identificador de la relacion elaboración final - libro de finales
idAux es el identificador del libro de finales
descr es la descripción del libro de finales
1.6. Rest API : Estructura de datos para crear/borrar elaboraciones intermedias y finales
Esta es la estructura que utilizaremos para crear/borrar elaboraciones intermedias
public class NewComponentComplex {
String descr;
String altDescr;
List<NewComponentUnit> listComponentUnits;
Double minStock;
// Expresado en tanto por uno respecto a NewComponentUnit
Double maxStock;
// Expresado en tanto por uno respecto a NewComponentUnit
Double minProduction;
// Expresado en tanto por uno respecto a NewComponentUnit
Double multProduction;
// Expresado en tanto por uno respecto a NewComponentUnit
List<NewComponentType> listComponentTypes;
List<NewComponentStore> listStores;
String codi;
boolean includeInOrder; // Si por defecto se incluira en pedidos
boolean averageCost; // El precio se calcula como una media de las compras
boolean fixedCost;
boolean fromVendor;
String origen; // De donde viene esta receta
Double caducity; // Expersado en dias
String idPartida; // Identificador de la partida
Boolean inLabel; // Si se incluye en la etiqueta
Boolean inPlanning;
Short typeConservation;
Double storageTemperature;
Double storageTemperatureAux;
Short typeTemperature;
Double iva;
String barcode;
}
public class NewComponentUnit {
double quantity; // Cantidad de la receta
String idUnit; // Unidad de la receta
Integer position; // Posición. Puede haber mas de una y position indica el orden
}
public class NewComponentType {
String id; // Identificador del component type (familia)
}
public class NewComponentStore {
String id; // Identificador del almacen
}
Para typeConservation puede tomar estos valores
public static short TypeConservationNevera = 0;
public static short TypeConservationCongelador = 1;
public static short TypeConservationSeco = 2;
public static short TypeConservationCaliente = 3;
typeTemperature puede tomar estos valores
public static short TypeTemperatureEquals = 0;
public static short TypeTemperatureLessThan = 1;
public static short TypeTemperatureGreaterThan = 2;
public static short TypeTemperatureBetween = 3;
1.7. Rest API : Crear a una elaboración intermedia
Para crear una eleaboracion intermedia
POST:
https://www.tspoonlab.com/recipes/api/recipe
En el request body pasaremos NewComponentComplex
1.8. Rest API : Crear a una elaboración final
Para crear una eleaboracion final
POST:
https://www.tspoonlab.com/recipes/api/dish
En el request body pasaremos NewComponentComplex
Añadiendo esta nuevo campo
List<NewRecipeCenter> listRecipeCenters;
public class NewRecipeCenter {
String id;
String idRecipeCenter;
}
Donde id debe ser nulo
y idRecipeCenter es el identificador del libro de finales
1.9 Rest API : Borrar una elaboración intermedia
Para borrar una eleaboracion intermedia
DELETE:
https://www.tspoonlab.com/recipes/api/recipe/{idRecipe}
1.10 Rest API : Borrar una elaboración final
Para borrar una eleaboracion final
DELETE:
https://www.tspoonlab.com/recipes/api/dish/{idDish}
1.11 Rest API : Recuperar el detall de una elaboración
Para poder recuperar el detalle de una elaboración final o intermedia
GET:
https://www.tspoonlab.com/recipes/api/dish/{idDish}
https://www.tspoonlab.com/recipes/api/recipe/{idRecipe}
Retorna
public class ComponentDetail {
String id; // Identificador del detalle
String idComponent;
// Id del componente (producto, o elaboracion intermedia)
String descr; // Descripción del componente
String altDescr; // Descripción del nombre alternativo del componente
Double quantity; // Cantidad neta o cantidad
Double quantityGross; // Cantidad bruta
String idUnit; // Identificador de la undad
String unit; // Descripcion de la unidad
String idUse; // Identificador del corte o despiece
String use; // Descripción del corte o despiece
String comment; // Comentario
Double cost; // Coste
String codeComponent; // Codigo del producto
String date; // Fecha del último cambio del coste
List<ComponentAllergy> listAllergies;
}
public class ComponentAllergy extends EntityBaseDescr {
String id; // Id de componentAllergy
String descr; // Descripcion de la alergia
String idAllergy; // Id de la aleergia
String codi; // Codigo de la alergia
boolean calculated; // Si esta alergia viene calculada de los ingredientes que componen el idComponent
boolean traces; // Si es traza
1.12 Rest API : Modificar el detall de una elaboración
Para modificar el detalle de una elaboración intermedia o final
PUT:
https://www.tspoonlab.com/recipes/api/dish/{idDish}
https://www.tspoonlab.com/recipes/api/recipe/{idRecipe}
Donde pasamos
public class NewComponentDetailsWrapper {
List<NewComponentDetail> components;
}
public class NewComponentDetail {
private String id; // Nulo en caso de añadir
private String idComponent; // Identificador del componente
private String idUnit; // Identificador de la unidad
private String idUse; // Identificador de corte o despieze
private Double quantity; // Cantidad que se pone en la elaboración
private boolean qs; // Es cantidad suficiente. En este caso no se especifica ni idUnit ni idUse ni quantity
private String comment;
private int position;
}