primer commit
This commit is contained in:
1 parent
ab3c613165
commit
b2fb4e2d0a
18 files changed
+1291
-277
No files matched your search
@@ -39,14 +39,17 @@ Todas las respuestas de error siguen el mismo formato:
|
||||
|
||||
### `POST /api/Login`
|
||||
|
||||
Inicia sesión de empleado. Valida contra SAP EmployeesInfo usando el apellido como contraseña.
|
||||
Inicia sesión de empleado. Busca en SAP `EmployeesInfo` al empleado cuyo
|
||||
campo de usuario `U_WEB_USER` coincida con `Username`, y valida `Password`
|
||||
contra su campo `U_WEB_PASS`. También exige que el empleado esté activo
|
||||
(`Active == "tYES"`).
|
||||
|
||||
**Request body:**
|
||||
|
||||
```json
|
||||
{
|
||||
"Username": "123",
|
||||
"Password": "Garcia"
|
||||
"Username": "jgarcia",
|
||||
"Password": "********"
|
||||
}
|
||||
```
|
||||
|
||||
@@ -56,7 +59,8 @@ Inicia sesión de empleado. Valida contra SAP EmployeesInfo usando el apellido c
|
||||
{
|
||||
"message": "Login exitoso",
|
||||
"token": "aB3x...token_urlsafe_32_chars...",
|
||||
"username": "Juan"
|
||||
"username": "Juan",
|
||||
"company": "NOMBRE_COMPANYDB"
|
||||
}
|
||||
```
|
||||
|
||||
@@ -68,6 +72,10 @@ Inicia sesión de empleado. Valida contra SAP EmployeesInfo usando el apellido c
|
||||
}
|
||||
```
|
||||
|
||||
Otros posibles `detail` en 401: `"Usuario no registrado"` (no existe ningún
|
||||
empleado con ese `U_WEB_USER`) y `"Usuario inactivo"` (el empleado existe
|
||||
pero `Active != "tYES"`).
|
||||
|
||||
---
|
||||
|
||||
### `POST /api/Logout`
|
||||
@@ -364,6 +372,36 @@ Actualiza un pedido. Usa header `B1S-ReplaceCollectionsOnPatch: true`.
|
||||
|
||||
---
|
||||
|
||||
### Guías de Remisión de Venta (Delivery Notes)
|
||||
|
||||
#### `GET /api/DeliveryNotes`
|
||||
|
||||
Lista paginada de guías de remisión de venta. Mismos parámetros que Invoices/Orders.
|
||||
|
||||
#### `POST /api/DeliveryNotes`
|
||||
|
||||
Crea una guía de remisión de venta.
|
||||
|
||||
**Response 201:**
|
||||
|
||||
```json
|
||||
{
|
||||
"DocEntry": 3001
|
||||
}
|
||||
```
|
||||
|
||||
#### `GET /api/DeliveryNotes/{key}`
|
||||
|
||||
Obtiene una guía de remisión por `DocEntry`.
|
||||
|
||||
#### `PATCH /api/DeliveryNotes/{key}`
|
||||
|
||||
Actualiza una guía de remisión. Usa header `B1S-ReplaceCollectionsOnPatch: true`.
|
||||
|
||||
**Response 204:** Sin contenido.
|
||||
|
||||
---
|
||||
|
||||
## Compras
|
||||
|
||||
### Órdenes de Compra
|
||||
@@ -372,6 +410,18 @@ Actualiza un pedido. Usa header `B1S-ReplaceCollectionsOnPatch: true`.
|
||||
|
||||
Lista paginada. Mismos parámetros que Invoices/Orders.
|
||||
|
||||
#### `POST /api/PurchaseOrders`
|
||||
|
||||
Crea una orden de compra.
|
||||
|
||||
**Response 201:**
|
||||
|
||||
```json
|
||||
{
|
||||
"DocEntry": 4001
|
||||
}
|
||||
```
|
||||
|
||||
#### `GET /api/PurchaseOrders/{key}`
|
||||
|
||||
Obtiene una orden de compra por `DocEntry`.
|
||||
@@ -390,6 +440,18 @@ Actualiza una orden de compra. Usa header `B1S-ReplaceCollectionsOnPatch: true`.
|
||||
|
||||
Lista paginada. Mismos parámetros que Invoices/Orders.
|
||||
|
||||
#### `POST /api/PurchaseInvoices`
|
||||
|
||||
Crea una factura de compra.
|
||||
|
||||
**Response 201:**
|
||||
|
||||
```json
|
||||
{
|
||||
"DocEntry": 4501
|
||||
}
|
||||
```
|
||||
|
||||
#### `GET /api/PurchaseInvoices/{key}`
|
||||
|
||||
Obtiene una factura de compra por `DocEntry`.
|
||||
@@ -402,6 +464,36 @@ Actualiza una factura de compra. Usa header `B1S-ReplaceCollectionsOnPatch: true
|
||||
|
||||
---
|
||||
|
||||
### Guías de Recepción de Compra (Purchase Delivery Notes)
|
||||
|
||||
#### `GET /api/PurchaseDeliveryNotes`
|
||||
|
||||
Lista paginada. Mismos parámetros que Invoices/Orders.
|
||||
|
||||
#### `POST /api/PurchaseDeliveryNotes`
|
||||
|
||||
Crea una guía de recepción de compra.
|
||||
|
||||
**Response 201:**
|
||||
|
||||
```json
|
||||
{
|
||||
"DocEntry": 5001
|
||||
}
|
||||
```
|
||||
|
||||
#### `GET /api/PurchaseDeliveryNotes/{key}`
|
||||
|
||||
Obtiene una guía de recepción de compra por `DocEntry`.
|
||||
|
||||
#### `PATCH /api/PurchaseDeliveryNotes/{key}`
|
||||
|
||||
Actualiza una guía de recepción de compra. Usa header `B1S-ReplaceCollectionsOnPatch: true`.
|
||||
|
||||
**Response 204:** Sin contenido.
|
||||
|
||||
---
|
||||
|
||||
## Catálogos
|
||||
|
||||
### `GET /api/Currencies`
|
||||
@@ -465,6 +557,31 @@ Lista paginada de códigos de IVA. Acepta `skip`, `top`, `fields`, `filter`.
|
||||
|
||||
---
|
||||
|
||||
### `GET /api/FactoringIndicators`
|
||||
|
||||
Lista paginada de indicadores de factoring. Acepta `skip`, `top`, `fields`, `filter`.
|
||||
|
||||
---
|
||||
|
||||
### `GET /api/Sunat/BusinessPartners/DocumentType`
|
||||
|
||||
Lista los valores del campo de usuario `EXX_TIPODOCU` (tabla `OCRD`, tipo de
|
||||
documento SUNAT del socio de negocio), consultando `UserFieldsMD` en SAP.
|
||||
Endpoint fijo, sin parámetros de paginación.
|
||||
|
||||
**Response 200:**
|
||||
|
||||
```json
|
||||
{
|
||||
"value": [
|
||||
{ "FieldID": 1, "Description": "DNI" },
|
||||
{ "FieldID": 2, "Description": "RUC" }
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Lotes
|
||||
|
||||
### `GET /api/BatchNumberDetails`
|
||||
@@ -517,6 +634,93 @@ Retorna las rutas de menú permitidas para el empleado autenticado.
|
||||
|
||||
---
|
||||
|
||||
## Reportes (API Gateway — Crystal Reports)
|
||||
|
||||
Estos endpoints no van contra el Service Layer sino contra el **SAP API
|
||||
Gateway** (`core/api_gateway.py`), que expone los reportes Crystal Reports
|
||||
autorizados para la compañía.
|
||||
|
||||
### `GET /api/apigateway/reports`
|
||||
|
||||
Lista los reportes Crystal Reports autorizados para el usuario/compañía.
|
||||
|
||||
**Response 200:**
|
||||
|
||||
```json
|
||||
[
|
||||
{ "DocCode": "R001", "DocName": "Guía de Remisión" }
|
||||
]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### `GET /api/apigateway/reports/{docCode}/parameters`
|
||||
|
||||
Obtiene los parámetros de entrada que requiere un reporte puntual (por
|
||||
`DocCode`) antes de exportarlo.
|
||||
|
||||
---
|
||||
|
||||
### `POST /api/apigateway/reports/{docCode}/export`
|
||||
|
||||
Exporta el reporte a PDF. El body es la lista de parámetros que el reporte
|
||||
necesita (formato definido por el propio API Gateway / Crystal Reports).
|
||||
|
||||
**Request body:**
|
||||
|
||||
```json
|
||||
[
|
||||
{ "name": "DocEntry", "value": "1001" }
|
||||
]
|
||||
```
|
||||
|
||||
**Response 200:** `application/pdf` (streaming, `Content-Disposition: inline`).
|
||||
|
||||
---
|
||||
|
||||
## Reportes (Jinja/HTML → PDF)
|
||||
|
||||
Generados desde plantillas HTML propias (`templates/reports/`) renderizadas
|
||||
con Jinja2 y convertidas a PDF con WeasyPrint, a partir de datos consultados
|
||||
directamente en HANA (`core/hana.py`), sin pasar por el Service Layer.
|
||||
|
||||
### `POST /api/reports/stickers`
|
||||
|
||||
Genera el sticker de una guía de remisión de venta (`DeliveryNotes`) para
|
||||
imprimir etiquetas de despacho.
|
||||
|
||||
**Request body:**
|
||||
|
||||
```json
|
||||
{
|
||||
"doc_entry": 3001,
|
||||
"cantidad": 4,
|
||||
"formato": "pdf",
|
||||
"papel": "Carta"
|
||||
}
|
||||
```
|
||||
|
||||
| Campo | Tipo | Requerido | Descripción |
|
||||
|-------|------|-----------|-------------|
|
||||
| `doc_entry` | int | Sí | `DocEntry` de la guía de remisión en HANA |
|
||||
| `cantidad` | int | Sí | Cantidad de stickers a generar |
|
||||
| `formato` | `"pdf"` \| `"html"` | No (default `"pdf"`) | Formato de salida |
|
||||
| `papel` | `"A4"` \| `"Carta"` | No (default `"Carta"`) | Tamaño de papel del PDF |
|
||||
|
||||
**Response 200:** `application/pdf` o `text/html` según `formato`, streaming.
|
||||
|
||||
**Response 404:**
|
||||
|
||||
```json
|
||||
{
|
||||
"detail": "No se encontró el documento 3001"
|
||||
}
|
||||
```
|
||||
|
||||
**Response 500:** error al consultar HANA.
|
||||
|
||||
---
|
||||
|
||||
## Resumen de Códigos de Respuesta
|
||||
|
||||
| Método | Éxito | Cuerpo en éxito | Error SAP | Error de conexión |
|
||||
|
||||
Reference in new issue
Block a user