Trabajar con descuentos y redondeo
Copiar enlace al artículo
Copiado

Básicos

A partir de la versión 6.0, trabajar con descuentos se estructura de manera diferente. El cambio clave es que el descuento en el pedido no se tiene en cuenta en el monto total del pedido, sino que se distribuye entre los productos y se tiene en cuenta en el monto de cada artículo individual del producto en el pedido. Al mismo tiempo, el descuento de pedido distribuido no afecta a los descuentos en productos, que se pueden especificar por separado como antes.

Demostremos con un ejemplo. Digamos que tienes el siguiente orden:

| Nombre | Precio | Descuento | Cantidad | Precio despues del descuento |
| | | | | |
| Pantalones cortos | 60 Euros | 5 Euros (por producto) | 2 | 110 Euros |
| | | | | |
| Sandalias | 30 Euros | 0 Euros (por producto) | 3 | 90 Euros |
| | |
| Precio Final | 200 Euros |

Dimos un descuento por el pedido de 10 Euros

En la version del sistema 5.0 y anterior este descuento se incluirá en el precio total del pedido:

| Nombre|  Precio | Descuento | Cantidad | Precio despues del descuento |
| | | | | |
| Pantalones cortos| 60 Euros | 5 Euros (por producto) | 2 | 110 Euros |
| | | | | |
| Sandalias | 30 Euros | 0 Euros (por producto) | 3 | 90 Euros |
| | |
| Descuento por pedido | 30 Euros |
| | |
| Precio Final| 170 Euros |

En la version 6.0 y superior el descuento del pedido se distribuirá entre las articulos y se tendrá en cuenta en su coste:

| Nombre| Precio| Descuento| Cantidad | Precio despues del descuento |
| | | | | |
| Pantalones cortos | 60 Euros | 5 Euros (por producto) | 2 | 98 Euros |
| | | 6 Euros (por pedido) | | |
| | | | | |
| Sandalias | 30 Euros | 0 Euros (por producto) | 3 | 72 Euros |
| | | 6 Euros (por pedido) | | |
| | |
| Precio Final | 170 Euros |

En este caso, el costo del pedido se calcula de la siguiente manera: `(60 – 5 – 6) x 2 + (30 – 6) x 3 = 170

API

API v4

En API v4 y versiones anteriores, los campos de descuento order[discount], order[discountPercent], order[items][][discount], order[items][][discountPercent] en el pedido permanecen sin cambios y están disponibles tanto para escritura como para lectura.

Utilizando el ejemplo de pedido anterior, al crear un pedido, los valores deben pasarse de la siguiente forma:

order = {
 // ...
 "discount": 10,
 "items": [
 {
 "offer": { "externalId": "1" },
 "initialPrice": 60,
 "discount": 5,
 "quantity": 2
 },
 {
 "offer": { "externalId": "2" },
 "initialPrice": 30,
 "quantity": 3
 }
 ],
 // ...
}

En los métodos API para recibir pedidos, la composición y los valores de los campos serán similares:

{
 // ...
 "discount": 10,
 "items": [
 {
 "offer": { "externalId": "1" },
 "initialPrice": 60,
 "discount": 5,
 "quantity": 2
 },
 {
 "offer": { "externalId": "2" },
 "initialPrice": 30,
 "quantity": 3
 }
 ],
 // ...
}

API v5

En los métodos para la creación y edición de fin de /api/v5/orders/create, /api/v5/orders/{externalId}/edit, /api/v5/orders/upload, puede transferir Orden de descuentos y productos en los campos order[discountManualAmount], order[discountManualAmount], order[discountManualAmount], [[TRANSLATE_PLACEHOLDER_381], /api/v5/orders/{externalId}/edit order[items][][discountManualPercent], mientras que los descuentos en pedidos se distribuirán entre los artículos.

Utilizando el ejemplo de pedido anterior, al crear un pedido, los valores deben pasarse de la siguiente forma:

order = {
 // ...
 "discountManualAmount": 10,
 "items": [
 {
 "offer": { "externalId": "1" },
 "initialPrice": 60
 "discountManualAmount": 5,
 "quantity": 2
 },
 {
 "offer": { "externalId": "2" },
 "initialPrice": 30,
 "quantity": 3
 }
 ],
 // ...
}

Los métodos para recibir pedidos /api/v5/orders, /api/v5/orders/{externalId} devuelven el descuento por pronto pago calculado total por artículo para cada artículo en el campo order[items][][discountTotal], que tiene en cuenta tanto los descuentos de artículos actuales como los descuentos de pedidos asignados entre articulos.

{
 // ...
 "items": [
 {
 "offer": { "externalId": "1" },
 "initialPrice": 60,
 "discountTotal": 11,
 "quantity": 2
 },
 {
 "offer": { "externalId": "2" },
 "initialPrice": 30,
 "discountTotal": 6,
 "quantity": 3
 }
 ],
 // ...
}

Casos extremos al distribuir descuentos de pedidos entre productos

En algunos casos, el sistema no puede distribuir el descuento del pedido entre artículos. Demostremos con un ejemplo.

Digamos que hay un pedido con la siguiente composición:

| Nombre | Precio | Descuento | Cantidad | Precio despues de descuento |
| | | | | |
| Pantalones cortos | 60 Euros | – | 3 | 180 Euros |
| | |
| Precio Final | 180 Euros |

Aplicamos un descuento por el pedido de 2 Euros. El sistema debe distribuir el descuento del pedido entre todas las unidades de productos, de las cuales hay 3 piezas en el pedido.

De forma predeterminada, cuando intenta especificar dicho descuento para un pedido, el sistema mostrará un mensaje de error. Lo que es importante, se generará un error tanto si realiza dicho pedido en el sistema como a través de la API, independientemente de la versión de la API '.

Si la configuración "Ajustar descuento del pedido" está habilitada en el sistema en la sección Configuración>Pedidos, el sistema ajustará el descuento del pedido al valor divisible más cercano (en este caso, cambiará el descuento del pedido de 2 euros a 1.99 euros).

Redondeo

En la versión 6.0, se ha agregado una función de redondeo, que se puede habilitar en la sección Configuración>Pedidos. El redondeo, si está habilitado, se aplica a los elementos del pedido. El precio que se descarta de la suma de los productos como resultado del redondeo se incorpora al descuento de los productos.

En la configuración también hay una opción para redondear el costo del producto teniendo en cuenta el valor del pedido, que se establece de forma predeterminada cuando el redondeo está implementado. Con esta opción, el precio de los productos se redondea de tal manera que el precio final del pedido sea lo más cercano posible al precio del pedido sin redondeo.

Gracias por tus comentarios.
¿Te resultó útil este artículo
No
  • Рекомендации не помогли
  • Нет ответа на мой вопрос
  • Текст трудно понять
  • Не нравится описанный функционал
Si
Artículo anterior
Trabajar con métodos de API de historial
Este artículo analiza los principios generales para trabajar con métodos de API de historial y proporciona descripciones de los campos que se pueden obtener como resultado.
Artículo siguiente
Interacción con la API bajo restricciones de alojamiento
Si su pagina web se ejecuta en un alojamiento que no cumple con los requisitos del cliente PHP para interactuar con la API, puede acceder a la API utilizando la función file_get_contents habitual. En el artículo presentamos ejemplos de su uso.