# Añadir nueva venta

Con esta función, es posible llevar a cabo la creación de ventas así como sus productos asociados y sus fechas de entrega.

NOTA:
- Si el producto no existe en la base de datos se devolverá un error y toda la transacción será cancelada. Se recomienda antes usar el endpoint ITEM/READ para comprobar que el producto existe realmente.
- Las fechas han de estar en el formato especificado.
- La venta se puede crear con nombre de cliente o su identificador del sistema. Pero uno de los dos deberá ser añadido pese a que se indican como NO OBLIGATORIO.
- Se recomienda antes usar el endpoint CUSTOMER/READ para validar el nombre del cliente.

IMPORTANTE
- Si el producto introducido es un artículo, se creará una estructura con el nombre PK-CODIGOVENTA-PRODUCTO-1.

### URL
`/CTNEAT/SALEORDER/ADD/{tkn}`

### Método HTTP
<span style="background-color: RGB(22,216,80); color: white; font-weight: bold; padding: 8px;">POST</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        |
|   FECHACREACION      |  cadena      |    Fecha de la venta |    Sí    | Ha de ser una string con el formato YYYYMMDDHHmmSS |
|   REFERENCIACLIENTE  |  cadena      |    Código de la venta para el cliente |       No      | Cualquiera |
|   NOMBRECLIENTE      |  cadena      |   Nombre del cliente |       No      | Cualquiera que esté entre los que hay almacenados en el sistema |
|   IDCLIENTE      |  numérico   |   Identificador del cliente |       No      | Cualquiera que esté entre los que hay almacenados en el sistema |
|   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  que ya exista en la base de datos    |
|   UNIDADES           |  numérico    |    Unidades necesarias del producto  |    Sí       | Números positivos enteros |
|   VERSIONPRODUCTO    |  cadena      |    Versión del producto seleccionado   |       No      | Versión del producto que aparece en el sistema. Si no se informa el campo, se añadirá la versión por defecto (v0) |
|   PRECIO             |  numérico    |   Precio de la línea     |     Sí    | Cualquiera que no sea negativo con el siguiente 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 entrega correspondiente a la línea de la venta  |   Sí    | Ha de ser una string con el formato YYYYMMDDHHmmSS |
|   UNIDADES           |  numérico    |    Unidades de la entrega  |    Sí       | Números positivos enteros |
|   PRECIO           |  numérico    |    Precio de la entrega  |    Sí       | Valores numéricos positivos. |

### 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",
	"FECHACREACION": "YYYYMMDDHHmmSS",
	"REFERENCIACLIENTE": "CÓDIGO_CLIENTE",
	"NOMBRECLIENTE": "CLIENTE",
	"LINEAS": [{
		"PRODUCTO": "CÓDIGO PRODUCTO",
		"UNIDADES": 50,
		"VERSIONPRODUCTO": "VERSIÓN DEL PRODUCTO",
		"PRECIO": 125.25, 
		"FECHAS": [{
			"FECHAENTREGA": "YYYYMMDDHHmmSS",
			"UNIDADES": 50,
          	"PRECIO": 125.25
          }]	
    }]
}
```

### 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/ADD/6A201F1F5147079FF9CA80DCDBB032AB386905091BC973B53F50E6493EC53868`

#### Objeto de entrada
```json
{
	"CODIGOVENTA": "V-0001",
	"FECHACREACION": "20250410000000",
	"REFERENCIACLIENTE": "SP-098-REF",
	"NOMBRECLIENTE": "CLIENTE",
	"LINEAS": [{
		"PRODUCTO": "PROD_0001",
		"UNIDADES": 100,
		"VERSIONPRODUCTO": "v0",
		"PRECIO": 230.65, 
		"FECHAS": [{
			"FECHAENTREGA": "20250410000000",
			"UNIDADES": 50,
          	"PRECIO": 230.65
        }]	
    }]
}
```
### Ejemplo de respuesta
```json
{ "Success":true, "fault":{ "faultcode":"none", "faultstring":"Sale order has been added", "detail":"Sale order: V-0001 successfully added" } }
```