Carts¶
Los carritos de la compra se almacenan en el sistema, guardando una referencia explícita a cada uno de los productos que se añaden al mismo. Sólo cuando se realiza un checkout se envía al servidor de Dahl correspondiente.
Create new cart¶
- POST /api/v1/carts/¶
Antes de agregar productos en un carrito, hay que crearlo.
Ejemplo de petición
POST /api/v1/carts/ HTTP/1.1 Content-Type: application/json { "store": "7332508110107", "organization": "7000000000000010199", "customer_order_number": "1", "order_mark": "1", "reference": "1" }
El campo de
referencees opcional, si no se indica, se usará el asociado al perfil del usuario.Ejemplo de respuesta
HTTP/1.1 201 Created Content-Type: application/json { "created": "2020-03-16T12:59:40.943282Z", "customer_order_number": "1", "id": 1, "order_mark": "1", "organization": "7000000000000010199", "reference": "1", "store": "7332508110107" }
Note
El campo store es opcional, si no se indica, se asaume que se trata de un
carrito que está en el almacen del cliente, por lo que la operación del
checkout se realizará de forma diferente.
Add products to a cart¶
- POST /api/v1/items/¶
Una vez creado el carrito se pueden agregar productos a él.
Ejemplo de petición
POST /api/v1/items/ HTTP/1.1 Content-Type: application/json { "cart": 1, "part_number": "9157300", "quantity": 1 }
Ejemplo de respuesta
HTTP/1.1 201 Created Content-Type: application/json { "id": 1, "cart": 1, "part_number": "9157300", "quantity": 1, "created": "2020-03-16T12:59:40.943282Z" }
Si se intenta agregar un producto a un carrito con el mismo
part_numberque otro producto que ya esté en el mismo, se incrementará de forma automática la cantidad, el valorquantity.
List carts¶
El listado de carritos siempre mostrará los carritos disponibles para el usuario que esté autenticado en la petición.
- GET /api/v1/carts/¶
Antes de agregar productos en un carrito, hay que crearlo.
- Query Parameters
active – Filtra los carritos según el estado activo (
True) o inactivo (False).created_after – Filtra los carritos con fecha de creación posterior a la indicada.
created_before – Filtra los carritos con fecha de creación anterior a la indicada.
checkout – Filtra los carritos que estén en la tienda (
False) o que no estén en la tienda, y que por tanto hayan hecho un checkout (True).gln – Filtra los carritos que pertenezcan a una tienda con un GLN concreto.
exclude_warehouse – Excluye (
True) de la respuesta los carritos que no tienen una tienda asociada.ordering – Ordena los resultados del listado por los siguientes posibles cliterios:
created,customer_order_number,items_count,total_quantity.checkout_availability_error – Filtra los carritos (
True) que han dado un error de disponibilidad al hacer el checkout, o los que no han dado error (False).each_user – Filtra los carritos por el carrito más reciente de cada usuario y que el estado sea activo (
True).user – Filtra por ID del usuario indicado.
Ejemplo de petición
GET /api/v1/carts/ HTTP/1.1 Content-Type: application/json
Ejemplo de respuesta
HTTP/1.1 200 OK Content-Type: application/json { "count": 1, "next": null, "previous": null, "results": [ { "checkout": null, "controls": [], "created": "2020-03-16T13:10:33.159020Z", "last_activity": "2020-03-16T13:30:33.159020Z", "customer_order_number": "aesOQCYAlyWd", "id": 1, "items": [ { "id": 1, "cart": 1, "part_number": "9157300", "quantity": 2, "created": "2020-03-16T12:59:40.943282Z" } ], "items_count": 1, "order_mark": "", "organization": { "code": "EZVlrwMlfwUB", "created": "2020-03-16T13:10:33.155209Z", "id": 1, "name": "SqACjOuCwfnc", "organization_id": "szbtFLrZpooe", "parent_code": "" }, "reference": null, "store": { "created": "2020-03-16T13:10:33.148104Z", "gln": "cVAARBfoMcNM", "id": 1 }, "total_quantity": 2, "user": { "email": "", "first_name": "Teresa", "id": 2, "last_name": "Mccarty", "username": "jessica19" }, "checkout_availability_error": false, "checkout_availability_error_at": null, "has_unlimited_credit": false, } ] }
Extra Statistics¶
Existen una serie de dato que no puede ser obtenidos directamente con el listado de
carritos. Para estos datos, se añade el sub-recurso de stats.
- GET /api/v1/carts/stats/¶
Ejemplo de petición
GET /api/v1/carts/stats/ Content-Type: application/json
Ejemplo de respuesta
HTTP/1.1 200 OK Content-Type: application/json { "total_quantity": 3, "total_items": 2 }
Este recurso usa los mismos filtros que están disponibles en el listado de carritos. Los datos que devuelve son:
total_quantity, el número total de productos que están en los carritos, equivalente al sumatorio dequantity.total_items, el número total de productos diferentes que están en los carritos, equivalente al sumatorio deitems_count.
Checkout¶
El proceso de checkout se realiza automáticamente usando los credenciales del usuaio que está autenticado en la llamada. En caso de que no se adjunten las cookies necesarias para autenticar en el backend de Dahl, la petición será procesada de manera automática usando el usuario de adminitración.
- PATCH /api/v1/carts/{id}/checkout/¶
Ejemplo de petición
PATCH /api/v1/carts/1/checkout/ Content-Type: application/json
Ejemplo de respuesta
HTTP/1.1 200 OK Content-Type: application/json { "cart": 1, "created": "2020-03-16T13:17:29.171826Z", "id": 1, "order_id": "0001", "order_number": "0001", "timed_out": false }
Note
Si el chechout devuelve un códido de estado 503, con una respuesta en JSON bien
formada, esto significa que el ERP de Dahl no está disponible en estos momentos,
y el carrito será marcado como que ha dado un error de disponibilidad.
Note
El campo timed_out indica que el el API de Dahl ha indicado que está saturado,
pero que la orden de checkout ha llegado y será procesada eventualmente.
Controls¶
- POST /api/v1/controls/¶
Un usuario adminitrador puede crear un control manual en cualquier momento asociado a un usuario. Lo puede crear con estado
verifieddirectamente opending.Se ha de indicar explicitamente la tienda sobre la que se hace el control, ya que, aunque es un caso poco probable, el sistema soporta que un usuario tenga activos carritos en diferentes tiendas.
Internamente, la plataforma seleccionara todos los carritos activos de ese usuario en la tienda indicada y los agregará al control.
Ejemplo de petición
POST /api/v1/controls/ HTTP/1.1 Content-Type: application/json { "user": 2, "store": 1, "status": "verified" }
Ejemplo de respuesta
HTTP/1.1 201 Created Content-Type: application/json { "carts": [1], "created": "2020-03-30T07:48:19.907262Z", "verified_at": "2020-03-30T07:48:19.907262Z", "id": 1, "is_random": false, "status": "verified", "store": 1, "user": 2, "controller": 1 }
- PATCH /api/v1/controls/{id}/¶
Un usuario admionitrador puede actualizar un control para verificarlo.
Ejemplo de petición
PATCH /api/v1/controls/1/ HTTP/1.1 Content-Type: application/json { "status": "verified" }
Ejemplo de respuesta
HTTP/1.1 200 OK Content-Type: application/json { "cart": 1, "created": "2020-03-30T07:48:19.907262Z", "verified_at": "2020-03-30T07:48:19.907262Z", "id": 1, "is_random": false, "status": "verified", "user": 1 }
Temporal Series¶
Se puede obtener una serie temporal de datos agrupados a partir de un listado cualquiera de carritos.
- GET /api/v1/carts/time-series/¶
Esta llamada es compatible con todos los filtrados disponibles para los carritos, y además soporta agregaciones por diferentes valores temporales.
- Query Parameters
interval – valor de temporal de agregación,
Mpara meses,Dpara días yHpara horas.aggregate – valor que se va a agregar,
carts(por defecto si se omite) para agregar el número de carritos, eitemspara agregar el número de elementos en los carritos.
Ejemplo de petición
GET /api/v1/carts/time-series/ HTTP/1.1 Content-Type: application/json
Ejemplo de respuesta
HTTP/1.1 200 OK Content-Type: application/json [ {"total": 6, "interval": "2019-03-01T00:00:00Z"}, {"total": 6, "interval": "2019-04-01T00:00:00Z"}, {"total": 1, "interval": "2019-05-01T00:00:00Z"}, {"total": 9, "interval": "2019-06-01T00:00:00Z"}, {"total": 2, "interval": "2019-07-01T00:00:00Z"}, {"total": 8, "interval": "2019-08-01T00:00:00Z"}, {"total": 1, "interval": "2019-09-01T00:00:00Z"}, {"total": 4, "interval": "2019-10-01T00:00:00Z"}, {"total": 2, "interval": "2019-11-01T00:00:00Z"}, {"total": 5, "interval": "2019-12-01T00:00:00Z"}, {"total": 9, "interval": "2020-01-01T00:00:00Z"}, {"total": 9, "interval": "2020-02-01T00:00:00Z"}, {"total": 9, "interval": "2020-03-01T00:00:00Z"} ]