BranchGood


Representa a una Asociación de un Good con un Branch. Esto permite a un Branch poder listar sus propios productos. Cuando un Branch es asignado a un Good, todas las Properties asociadas son asignadas en cascada, tomando los valores por defecto definidos en la entidad GoodProperty. A diferencia del Good, un BranchGood posee datos de stock y precio de venta personalizado según el cliente que solicita la lista (véase BranchPriceList).

El min_price_e2 representa el precio del producto definido (en centavos) en la moneda local del comercio y no el precio mínimo (El nombre quedó así por retro-compatibilidad). Cuando un administrador modifica el precio de venta de un producto, está modificando este atributo.

El atributo de sólo lectura custom_data es un objeto que representa los distintos precios del producto en distintas condiciones, incluyendo el monto formateado en string:

  • display_price: Precio a mostrar en el producto (visual). Monto mínimo de venta.
  • list_price: Precio a mostrar original. Se debe mostrar tachado en caso que sea diferente a display_price. Suele representar un descuento.
  • price_e2: Precio efectivo para sumar en el carrito.
  • prefijo unit_: Representa el monto por unidad. En caso de productos por peso, por ejemplo, el precio por KG.
  • prefijo extras_: Representa el monto mínimo según los Extras obligatorios del producto.
  • currency: Moneda local del comercio (Aplicado a los distintos precios).
  • conversion: Representa un objeto con los montos convertidos a la moneda elegida. Se puede elegir la moneda especificando el Header HTTP: X-Currency: EUR, por ejemplo (con el ISO de la moneda deseada). La moneda debe ser soportada por la Company. Si no se especifica, el Sistema automáticamente elige la moneda local del Company.
  • real_prices: Define los precios reales según la moneda local del Branch para uso del Administrador.

El atributo quantity_real representa el inventario (stock) del producto disponible, o null para ilimitado. Si el stock no es suficiente para la venta, el atributo has_stock_for_selling será false. Además, el atributo available_for_selling indica si el producto está disponible para la venta, y será false ya sea porque no tiene suficiente stock, o porque ha sido deshabilitado por un administrador. Para mostrar un producto agotado, se puede evaluar el atributo available_for_selling == false

El atributo notes_enabled indica si se deben solicitar instrucciones especiales (opcionales) al momento de ordenar el producto.

Si el atributo weight_per_unit no es null, indica el precio aproximado por unidad. Por ejemplo, si el producto es una Manzana, el weight_per_unit=138 indica que cada manzana pesa aproximadamente 138 Gr (en caso que unit_config tenga unit_name="Gr").

Los tags poseen las etiquetas agregadas al producto (para mejorar búsquedas y otras cosas). Si el producto trae un tag llamado $Hot, se trata de un tag gestionado por el sistema, y representa a los productos más vendidos 🔥.

El objeto unit_config representa una configuración de unidad para vender el producto, por ejemplo, por peso:

  • enabled: Indica si la configuración de unidad está habilitada.
  • display_mode: Indica cómo mostrar la configuración en pantalla.
  • fraction: Unidades de división para cada unidad de stock (quantity). Por ejemplo, para representar 1 unidad como 1000Gr, se utiliza fraction=1000. Entonces cada venta de 1000 reduce el stock en 1.
  • min_quantity: Cantidad mínima a vender, en fraction. Ejemplo 500 para 500Gr.
  • max_quantity: Cantidad máxima a vender, en fraction. Ejemplo 2000 para 2Kg.
  • step_quantity: Incremento (pasos) para incrementar el valor según fraction. Ej 100 para incrementar 100Gr.
  • unit_name: La unidad representada por el fraction, en nuestro ejemplo sería Gr para gramos. NOTA: La unidad KG se coloca en el producto, en el atributo unit, entonces quedaría Good.unit = 'Kg' yunit_name = 'Gr'con fraction = 1000`
  • weight_per_unit: Peso estimado por unidad. Por ejemplo, un Pollo se podría vender entero y se coloca un peso aproximado en 3000 Gr, o frutas como Manzana se le puede colocar 205 Gr, por ejemplo. Se puede utilizar para hacer interfaces que manejen ventas por unidad en un producto por peso. Como este valor tiene como único propósito dar información adicional a la interfaz, se puede utlizar incluso si enabled = false

Modelo BranchGood

{
    "id": 92,
    "min_price_e2": 1200,
    "rating_e2": 0,
    "rating_sum": 0,
    "rating_count": 0,
    "available": false,
    "provider_fee_e2": 0,
    "provider_fee_prc": 0,
    "created_at": "2020-04-20 20:37:52",
    "updated_at": "2024-10-27 10:11:47",
    "branch_id": 22,
    "good_id": 105,
    "branch_group_id": 42,
    "eta": null,
    "promo_id": null,
    "promo_info": null,
    "last_sync_id": 639,
    "quantity_real": 0,
    "extras_price_e2": 0,
    "list_order": 65535,
    "featured_in_order": null,
    "good_type_id": null,
    "sku": null,
    "type": 0,
    "name": "Prueba2",
    "unit": "und",
    "max_quantity": null,
    "limit_type": null,
    "details": "Aaaa",
    "short_details": "n/a",
    "picture_urls": [
        "http://127.0.0.1:8000/storage/static/default/product_category_logo.png"
    ],
    "vertical_picture_urls": [
        "http://127.0.0.1:8000/storage/static/default/product_category_logo_portrait.jpg"
    ],
    "notes_enabled": true,
    "custom_data": {
        "list_price_e2": 1200,
        "display_price_e2": 1200,
        "price_e2": 1200,
        "extras_list_price_e2": 0,
        "extras_display_price_e2": 0,
        "extras_price_e2": 0,
        "client_id": null,
        "branch_price_list_id": 426,
        "currency": {
            "id": 476,
            "enabled": true,
            "iso": "USD",
            "symbol": "$",
            "conversion_factor": 1,
            "related_iso": "USD",
            "decimals_count": 2,
            "format": "0.00$",
            "decimal_point": ".",
            "use_thousands_separator": true,
            "thousands_separator": ",",
            "is_local": true,
            "is_international": true,
            "created_at": "2021-07-15 19:22:15",
            "updated_at": "2021-09-24 12:56:35",
            "company_id": 116,
            "is_custom": false,
            "branch_id": 22,
            "auto_sync": false,
            "auto_sync_provider": "legacy",
            "use_conversion": false,
            "available": true,
            "related_iso_expected": "USD",
            "related_iso_error": false
        },
        "conversion": {
            "list_price_e2": 1200,
            "display_price_e2": 1200,
            "price_e2": 1200,
            "extras_list_price_e2": 0,
            "extras_display_price_e2": 0,
            "extras_price_e2": 0,
            "currency": {
                "id": 476,
                "enabled": true,
                "iso": "USD",
                "symbol": "$",
                "conversion_factor": 1,
                "related_iso": "USD",
                "decimals_count": 2,
                "format": "0.00$",
                "decimal_point": ".",
                "use_thousands_separator": true,
                "thousands_separator": ",",
                "is_local": true,
                "is_international": true,
                "created_at": "2021-07-15 19:22:15",
                "updated_at": "2021-09-24 12:56:35",
                "company_id": 116,
                "is_custom": false,
                "branch_id": 22,
                "auto_sync": false,
                "auto_sync_provider": "legacy",
                "use_conversion": false,
                "available": true,
                "related_iso_expected": "USD",
                "related_iso_error": false
            },
            "list_price": "12.00$",
            "display_price": "12.00$"
        },
        "real_prices": {
            "list_price_e2": 1200,
            "display_price_e2": 1200,
            "price_e2": 1200,
            "extras_list_price_e2": 0,
            "extras_display_price_e2": 0,
            "extras_price_e2": 0
        },
        "list_price": "12.00$",
        "display_price": "12.00$",
        "unit_list_price": "12.00$",
        "unit_display_price": "12.00$"
    },
    "quantity_real_available": 0,
    "quantity": 0,
    "unit_config": null,
    "weight_per_unit": null,
    "has_stock_for_selling": false,
    "available_for_selling": false,
    "calculated_eta": null,
    "eta_config": null,
    "tags": [],
    "is_service": false,
    "is_combo": false,
    "barcodes": [],
    "label": null,
    "discount_info": null
}
Atributo Tipo Descripción
id int -
min_price_e2 int -
rating_e2 int -
rating_sum int -
rating_count int -
available bool -
provider_fee_e2 int -
provider_fee_prc float -
created_at datetime\|null -
updated_at datetime\|null -
branch_id int -
good_id int -
branch_group_id int\|null -
last_sync_id int\|null -
quantity_real float\|null -
extras_price_e2 int\|null -
list_order int -
available_for_selling bool -
barcodes array\|null -
custom_data array -
details mixed -
name mixed -
notes_enabled mixed -
picture_urls mixed -
short_details mixed -
tags array\|null -
type mixed -
unit mixed -
vertical_picture_urls mixed -
has_stock_for_selling bool -
is_combo bool\|null -
is_service bool -
quantity int\|null -
quantity_real_available float\|null -

Insertar BranchGood

Insertar BranchGood

Asocia un Good con un Branch. Cuando un BranchGood es insertado, el API automáticamente asocia las GoodProperties del producto asociado y crea los registros de BranchProperty para manejar el stock y precios.

{info} Si no se especifica algún atributo, se usa el valor del Good. En caso de min_price_e2 se utiliza el atributo price_e2 del Good.

Método URI Cabeceras
PUT /companies/{companyId}/branches/{branchId}/goods/{goodId} Authorization
{
    "eta": "string|max:32",
    "min_price_e2": "integer|min:0",
    "provider_fee_e2": "integer",
    "provider_fee_prc": "numeric|between:0.0000,1.0000",
    "quantity": "integer",
    "quantity_real": "numeric",
    "list_order": "integer",
    "featured_in_order": "nullable|integer"
}

Listar BranchGood

Listar BranchGood de Branch

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

Método URI Cabeceras
GET /companies/{companyId}/branches/{branchId}/branch-goods N/A

Muestra las categorías que están siendo usadas por los BranchGoods. Si alguna Category no tiene Goods asociados

a la Branch actual, esa Category no se mostrará.

{info} Soporta: Paginación Filters

Método URI Cabeceras
GET /companies/{companyId}/branches/{branchId}/branch-goods/categories N/A

Listar BranchGood de Category

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

Método URI Cabeceras
GET /companies/{companyId}/branches/{branchId}/categories/{categoryId}/branch-goods N/A

Mostrar BranchGood

{info} Soporta: Carga dinámica

Método URI Cabeceras
GET /companies/{companyId}/branch-goods/{branchGoodId} N/A

Mostrar Branch Good

{info} Soporta: Carga dinámica

Método URI Cabeceras
GET /companies/{companyId}/branches/{branchId}/goods/{goodId} N/A

Actualizar BranchGood

Método URI Cabeceras
PATCH /companies/{companyId}/branch-goods/{branchGoodId} Authorization
{
    "eta": "string|max:32",
    "min_price_e2": "integer|min:0",
    "provider_fee_e2": "integer",
    "provider_fee_prc": "numeric|between:0.0000,1.0000",
    "quantity": "integer",
    "quantity_real": "numeric",
    "list_order": "integer",
    "featured_in_order": "nullable|integer"
}

Actualizar Branch Good

Método URI Cabeceras
PATCH /companies/{companyId}/branches/{branchId}/goods/{goodId} Authorization
{
    "eta": "string|max:32",
    "min_price_e2": "integer|min:0",
    "provider_fee_e2": "integer",
    "provider_fee_prc": "numeric|between:0.0000,1.0000",
    "quantity": "integer",
    "quantity_real": "numeric",
    "list_order": "integer",
    "featured_in_order": "nullable|integer"
}

Eliminar BranchGood

Eliminar BranchGood

Desvincula un Good de un Branch. Cuando un BranchGood es eliminado, el API automáticamente elimina los GoodProperties del producto desvinculado y elimina los registros huérfanos de BranchProperty.

Método URI Cabeceras
DELETE /companies/{companyId}/branches/{branchId}/goods/{goodId} Authorization

Acciones de BranchGood

Batch

Método URI Cabeceras
POST /companies/{companyId}/branch-goods/batch-action/{action} Authorization
{
    "ids": [
        "integer|min:1"
    ],
    "payload": ""
}

Search

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

Método URI Cabeceras
GET /companies/{companyId}/branch-goods/search N/A
{
    "q": "required|string",
    "paginate": "nullable|boolean",
    "results_mode": "string|in:goods,branch",
    "limit": "nullable|integer",
    "latitude_e6": "nullable|integer|between:-90000000,90000000",
    "longitude_e6": "nullable|integer|between:-180000000,180000000",
    "client_id": "nullable|integer",
    "category_id": "nullable|integer"
}

Set Available

Método URI Cabeceras
POST /companies/{companyId}/branch-goods/{branchGoodId}/set-available Authorization

Set Not Available

Método URI Cabeceras
POST /companies/{companyId}/branch-goods/{branchGoodId}/set-unavailable Authorization

Destroy By Id

Método URI Cabeceras
DELETE /companies/{companyId}/branch-goods/{branchGoodId} Authorization

Index Featured

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

Método URI Cabeceras
GET /companies/{companyId}/branches/{branchId}/branch-goods/featured N/A

Search

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

Método URI Cabeceras
GET /companies/{companyId}/branches/{branchId}/branch-goods/search N/A
{
    "q": "required|string",
    "paginate": "nullable|boolean",
    "results_mode": "string|in:goods,branch",
    "limit": "nullable|integer",
    "latitude_e6": "nullable|integer|between:-90000000,90000000",
    "longitude_e6": "nullable|integer|between:-180000000,180000000",
    "client_id": "nullable|integer",
    "category_id": "nullable|integer"
}

Enlaces de BranchGood