GoodProperty


Asociación de un Good con una Property. Fija cómo se presenta esa variante en el producto (nombre, tipo, orden, estado y las reglas de selección de options) y sirve como valor por defecto: cuando el producto se pone a la venta en una sucursal se copia en un BranchGoodProperty, que es el que se puede ajustar por sucursal.

options (bitmask)

El ide-helper expone cada campo de options como propiedad (prop_type, los is_*, min_count, max_count, stack_count). No se editan por separado: se recalculan al guardar options. Significado de cada grupo:

  • prop_type / is_type_options / is_type_range / is_type_text: tipo de la variante, heredado de la Property (lista de opciones, rango numérico o texto libre).
  • min_count / max_count: cuántos valores debe elegir el comprador. min_count = 0 → variante opcional; 1 → obligatoria (al menos uno); 2 → obliga a elegir dos ("Elige 2 sabores"). max_count es siempre >= min_count; p. ej. extras de una pizza con min_count = 0 y max_count = 10.
  • is_multi_selection: permite elegir varias opciones de la lista (va de la mano con max_count > 1).
  • stack_count: cuántas veces se puede repetir la misma opción. 0 → todas distintas; 1 → se puede repetir una opción una vez más (elegir el mismo sabor dos veces).
  • is_dynamic: la variante se muestra repetida en la interfaz ("Bebida 1", "Bebida 2") en lugar de un único selector; con min_count < max_count primero se pide la cantidad y luego se muestran esos campos (poco habitual).
  • is_consumable: la variante tiene stock propio (BranchProperty); si es false se ignora ese stock y la variante no limita el stock del producto.
  • is_admin_customizable: el administrador puede fijar libremente el valor en variantes de rango (saltándose el step) o de texto (saltándose el regex).
  • is_free: sin implementar.

Estructura de Datos

Atributo Tipo Descripción
id int
display_name string Nombre de la variante tal como se muestra en este producto.
options int Bitmask con el tipo y las reglas de selección de la variante (ver arriba).
disabled bool true si la variante está desactivada para este producto.
in_order int Posición de la variante dentro del producto.
created_at datetime\|null Fecha de creación.
updated_at datetime\|null Fecha de última modificación.
good_id int Producto al que pertenece la asociación.
property_id int Variante asociada.
prop_type int BitMask ({@link self::options} & 0xfff)
is_type_options bool BitMask (({@link self::options} & 0x100) !== 0)
is_type_range bool BitMask (({@link self::options} & 0x200) !== 0)
is_type_text bool BitMask (({@link self::options} & 0x400) !== 0)
is_dynamic bool BitMask (({@link self::options} & 0x1000) !== 0)
is_free bool BitMask (({@link self::options} & 0x2000) !== 0)
is_consumable bool BitMask (({@link self::options} & 0x4000) !== 0)
is_multi_selection bool BitMask (({@link self::options} & 0x80) !== 0)
min_count int BitMask (({@link self::options} & 0xf00000) >> 20)
max_count int BitMask (({@link self::options} & 0xf0000) >> 16)
stack_count int BitMask (({@link self::options} & 0xf000000) >> 24)
is_admin_customizable bool BitMask (({@link self::options} & 0x10000000) !== 0)
allLogs ApiLog> Registros de auditoría de la API, incluidos los internos.
good Good Producto al que pertenece la asociación.
logs ApiLog> Registros de auditoría de la API visibles.
options_data array Representación legible de options (tipo y reglas de selección).
property Property Variante asociada.
propertyOptions PropertyOption> Opciones elegibles de la variante (si es de tipo options).
propertyRange PropertyRange\|null Definición del rango (si la variante es de tipo range).
propertyText PropertyText\|null Definición del texto (si la variante es de tipo text).
{
    "id": 59,
    "display_name": "Blablabla",
    "options": 258,
    "disabled": false,
    "in_order": 0,
    "created_at": "2020-04-27 15:21:01",
    "updated_at": "2020-05-04 16:20:34",
    "good_id": 106,
    "property_id": 46,
    "prop_type": 258,
    "is_type_options": true,
    "is_type_range": false,
    "is_type_text": false,
    "is_dynamic": false,
    "is_free": false,
    "is_consumable": false,
    "is_multi_selection": false,
    "min_count": 0,
    "max_count": 0,
    "stack_count": 0,
    "is_admin_customizable": false,
    "options_data": {
        "use_value": 256,
        "use_name": "options",
        "type_value": 258,
        "type_name": "radio",
        "is_multi_options": false,
        "min_count": 0,
        "max_count": 1,
        "stack_count": 0,
        "is_dynamic": false,
        "is_free": false,
        "is_consumable": false,
        "is_admin_customizable": false
    },
    "property": {
        "id": 46,
        "name": "Blablabla",
        "type": 256,
        "disabled": false,
        "created_at": "2020-04-22 19:43:34",
        "updated_at": "2020-04-22 19:43:34",
        "property_group_id": null,
        "branch_group_id": 42,
        "is_type_options": true,
        "is_type_range": false,
        "is_type_text": false,
        "property_options": [
            {
                "id": 580,
                "name": "Aaaa",
                "price_e2": 223234500,
                "in_order": 65535,
                "created_at": "2020-04-22 19:43:34",
                "updated_at": "2020-04-22 19:43:34",
                "property_id": 46,
                "is_default": false
            }
        ],
        "property_range": null,
        "property_text": null
    }
}

Endpoints

Listar GoodProperty

{info} Soporta: Paginación Filters Carga dinámica

Listar asociaciones producto-variante

Devuelve las GoodProperty de la compañía, paginadas.

Método URI Cabeceras
GET /companies/{companyId}/good-properties N/A

Listar asociaciones producto-variante (formato antiguo)

Igual que el listado de GoodProperty pero con el formato de respuesta previo.

Método URI Cabeceras
GET /companies/{companyId}/good-properties/legacy N/A

Actualizar GoodProperty

Actualizar una asociación producto-variante

{info} Soporta: Paginación Filters Carga dinámica

Modifica el display_name, el in_order, el estado o las reglas de options de la GoodProperty del producto indicado (valor por defecto para las sucursales).

Método URI Cabeceras
PATCH /companies/{companyId}/goods/{goodId}/properties/{propertyId} Authorization
{
    "display_name": "string|max:64",
    "disabled": "boolean",
    "options": "numeric",
    "in_order": "integer|min:1",
    "prop_type": "nullable|integer|min:0|max:4095",
    "is_type_options": "nullable|boolean",
    "is_type_range": "nullable|boolean",
    "is_type_text": "nullable|boolean",
    "is_dynamic": "nullable|boolean",
    "is_free": "nullable|boolean",
    "is_consumable": "nullable|boolean",
    "is_multi_selection": "nullable|boolean",
    "min_count": "nullable|integer|min:0|max:15",
    "max_count": "nullable|integer|min:0|max:15",
    "stack_count": "nullable|integer|min:0|max:15",
    "is_admin_customizable": "nullable|boolean"
}

Relaciones