# Modificar venta

Con esta función, es posible llevar a cabo la modificación de algunos de los parámetros de una venta así como sus productos asociados y sus fechas de entrega.

Hay que tener en cuenta que se podrán añadir nuevas líneas de producto y nuevas fechas de entrega para estas, siemrpe y cuando no se superen las unidades totales del producto a entregar. En cuyo caso, devolverá un error.

En la adición de nuevos productos, no se pueden añadir productos que ya forma parte de la venta, pues el hacer esta acción devolverá un error.

No obstante, es posible modificar los siguientes parámetros:
- Referencia del cliente en la venta.
- Precio del producto en una línea ya existente.
- Añadir o eliminar una línea existente.
- Añadir o eliminar fechas de entrega de una línea existente.
- Añadir nuevas fechas de entrega a una línea existente.

NOTA:
- Se recomienda obtener la venta antes de modificar.
- Se recomienda pasar el objeto principal con TODOS los ítems anidados para evitar perder datos (líneas y fechas de entrega anteriores y nuevas).
- Para eliminar uno de los objetos anidados bastará con que no aparezca en el objeto de la request. Este se creará de nuevo con los ítems que se hayan proporcionado.

IMPORTANTE
- Si el producto introducido es un artículo, se creará una estructura con el nombre PK-CODIGOVENTA-PRODUCTO-1.

### URL
`/CTNEAT/SALEORDER/UPDATE/{tkn}`

### Método HTTP
<span style="background-color: RGB(222,112,10); color: white; font-weight: bold; padding: 8px;">PUT</span>

### Parámetros de la solicitud
#### Parámetros de la venta
| Nombre del parámetro | Tipo de dato | Descripción del parámetro | Obligatorio | Posibles valores |
| -------------------- | ------------ | ------------------------ | ----------- | -----------       |
|   CODIGOVENTA        |  cadena      |    Código de la venta    |       Sí    | Cualquiera previamente generado en el sistema. Este campo no es posible modificarlo.      |
|   REFERENCIACLIENTE  |  cadena      |    Código de la venta para el cliente |       No      | Cualquiera |
|   LINEAS             |  Lista de objetos   |    Líneas asociadas a la venta |       No      | Cualquiera que tenga el formato de la tabla de parámetros de la línea de la venta |

#### Parámetros de la Línea de la venta
| Nombre del parámetro | Tipo de dato | Descripción del parámetro | Obligatorio | Posibles valores |
| -------------------- | ------------ | ------------------------ | ----------- | -----------       |
|   PRODUCTO           |  cadena      |    Código del producto asociado a la venta    |       Sí    | Cualquiera        |
| VERSIONPRODUCTO | cadena | Versión del producto | Sí | La versión correspondiente o v0 que es la que se añade por defecto en todos los productos del sistema |
|   UNIDADES           |  numérico    |    Unidades necesarias del producto  |    Sí       | Números positivos enteros  |
|   PRECIO             |  numérico    |   Precio de la línea     |     Sí    | Cualquiera que no sea negativo con formato 256.36 (9999999999.9999) |
|   FECHAS           |  Lista de objetos      |  Fechas de entrega asociadas a la venta |       No      | Cualquiera que cumpla los requisitos del objeto de la tabla de Parámetros de la fecha de entrega |

#### Parámetros de la fecha de entrega
| Nombre del parámetro | Tipo de dato | Descripción del parámetro | Obligatorio | Posibles valores |
| -------------------- | ------------ | ------------------------ | ----------- | -----------       |
|   FECHAENTREGA       |  cadena      |  Fecha de la fecha de entrega  |   Sí    | Ha de ser una string con el formato YYYYMMDDHHmmSS |
|   UNIDADES           |  numérico    |    Unidades de la fecha de entrega  |    Sí       | Números positivos enteros |
|   PRECIO             |  numérico    |   Precio de la fecha de entrega     |     Sí    | Cualquiera que no sea negativo con formato 256.36 (9999999999.9999) |

### Encabezados de la solicitud

| Nombre del encabezado | Descripción del encabezado | Obligatorio |
| --------------------- | -------------------------- | ----------- |
|     Content-Type      |  Tipo de contenido de la solicitud   |    Sí  |

### Cuerpo de la solicitud

Formato del cuerpo de la solicitud: application/json

Descripción del cuerpo de la solicitud:
```json
{
	"CODIGOVENTA": "NÚMERO VENTA",
	"REFERENCIACLIENTE": "CÓDIGO_CLIENTE",
	"LINEAS": [{
    	"PRODUCTO": "CÓDIGO PRODUCTO",
        "VERSIONPRODUCTO": "VERSIÓN DEL PRODUCTO",
		"UNIDADES": 1000,
		"PRECIO": 125.25, 
		"FECHAS": [
          {
        	"FECHAENTREGA": "YYYYMMDDHHmmSS",
          	"UNIDADES": 50,
            "PRECIO": 25.25, 
          },
          {
        	"FECHAENTREGA": "YYYYMMDDHHmmSS",
          	"UNIDADES": 40,
            "PRECIO": 100
          }
        ]	
    }]
}
```

### Parámetros de la respuesta

| Nombre del parámetro | Tipo de dato | Descripción del parámetro |Formato|
| -------------------- | ------------ | ------------------------ | ------------------------ |
|        ErrorContent              |      JSON        |       Json con la descripción del resultado de la operación                   | <span style="color:blue">[Formato ErrorContent](https://docs.ctneat.com/link/64#bkmrk-elementos-de-errorco)</span> |

### Códigos de estado de la respuesta
| Código de estado | Descripción del código de estado | Posibles razones |
| ---------------- | -------------------------------- | ---------------- |
|     200             |            OK                      |     La solicitud fue exitosa             |
|     400             |            Petición errónea        |     	Alguno de los parámetros pasados no es correcto   |
|     500             |            Error interno           |     	Error en el servidor             |
|     401             |            Unauthorized            |     	El usuario no está autenticado             |

###  Ejemplo de consulta
#### URL
`http://ctincoming/CTNEAT/SALEORDER/UPDATE/6A201F1F5147079FF9CA80DCDBB032AB386905091BC973B53F50E6493EC53868`

#### Objeto de entrada
```json
{
	"CODIGOVENTA": "V-0001",
	"REFERENCIACLIENTE": "SP-098-REF",
	"LINEAS": [{
		"PRODUCTO": "PROD_0001",
        "VERSIONPRODUCTO": "v1",
		"UNIDADES": 100,
		"PRECIO": 230.65, 
		"FECHAS": [
          {
        	"FECHAENTREGA": "20260120030325",
          	"UNIDADES": 50
          },
          {
        	"FECHAENTREGA": "20260120030325",
          	"UNIDADES": 50
          }
        ]	
	}]
}
```
### Ejemplo de respuesta
```json
{ "Success":true, "fault":{ "faultcode":"none", "faultstring":"Sale order has been modified", "detail":"Sale order: V-0001 successfully updated" } }
```