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 reference es 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_number que otro producto que ya esté en el mismo, se incrementará de forma automática la cantidad, el valor quantity.

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 de quantity.

  • total_items, el número total de productos diferentes que están en los carritos, equivalente al sumatorio de items_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 verified directamente o pending.

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, M para meses, D para días y H para horas.

  • aggregate – valor que se va a agregar, carts (por defecto si se omite) para agregar el número de carritos, e items para 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"}
]