Carts ===== Una de las principales funciones de la plataforma de **Control Tower** es la de gestionar y almacenar los **carritos** de la compra que realizan los usuarios en las tiendas de Dahl. De esta forma son accesibles desde las aplicaciones móviles además de desde el panel de control web. En general, un **carrito** representa un carro de la compra al que un usuario va agregando productos que va a comprar, y tiene las siguientes características: * Un carrito se **crea** cuando *entra en la tienda*. * Un carrito está en la tienda mientra **no** se haya hecho un *checkout*. * Los carritos que están *en la tienda* pueden estar **activos** (por defecto) o **inactivos**. * Un carrito pasa a **inactivo** cuando el tiempo que ha estado sin realizar ningún cambio **supera un límite** definido por la propia tienda. * Sobre un carrito que esté en la tienda, independientemente del estado (activo o inactivo) se puede realizar **control**. Un **carrito** se representa en JSON de la siguiente forma: .. code-block:: json { "checkout": { "id": 1, "cart": 1, "order_number": "", "order_id": "", "created": "2020-03-16T15:10:33.159020Z" }, "controls": [ { "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 } ], "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 } * Si el campo ``checkout`` no es ``null``, indicaría que el carrito sigue en la tienda. * El campo ``last_activity`` indica la fecha en la que el carrito ha realizado la última actualización. * El campo ``active`` indica si el carrito se considera activo o no según el criterio de la tienda. * El campo ``created`` indica cuando se ha creado el carro, es decir, cuando ha entrado a la tienda. * El campo ``checkout_availability_error`` indica si al hacer checkoout de este carrito ha dado un error de dinsponibilidad el ERP de Dahl. * El campo ``checkout_availability_error_at`` indica si es ``true`` el valor de ``checkout_availability_error`` cuando se ha producido el error de disponibilidad. .. note:: Ver :ref:`referencia API de carritos `. Controles --------- Cuando se crea un control en la plataforma, este se crea a partir **un usuario y una tienda** y se realiza sobre **todos los carritos activos** que tenga en ese momento para la tienda indicada, pudiendo realizar tantos controles sobre un usuario como se requiera. Existen dos posibles tipos de controles: * **Manuales**, aquellos que el usuario administrador decide hacer de forma explícita sobre un usuario. * **Aleatorios**, aquel control que la plataforma crea de forma aelatoria sobre un usuario. Los controles se *crean* en la plataforma, y cuando se obtiene el detalle de un carrito, los controles que tiene asociados están en el campo ``controls``. .. code-block:: 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", "user": 2, "controller": 1, "store": 1 } Los controles tienen un campo ``status`` que indica el estado en el que se encuentran: * ``pending``, indicando que el control ha sido creado (manual o automáticamente) pero aún no se ha hecho una revisión. * ``verified``, indicando que el control ha sido verificado por un usuario administrador. Además, cada control tiene un campo ``is_random`` que indica si ha sido un control generado de forma aleatoria o no. El campo ``verified_at`` del control indica cuando se ha verificado, y el campo ``controller`` indica el usuario administrador que ha verificado el control.