Versión 1.1.0: exportar a Excel, valores por defecto de la cabecera y versión visible
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
699dd983d0
commit
b6e34276ce
35 files changed
+915
-50
No files matched your search
@@ -61,6 +61,13 @@ Pasos de la UI (decididos):
|
||||
`FolioNumber` de la Devolución: **si todavía no tiene folio no se llama a BES** y esa Devolución informa
|
||||
"todavía no tiene folio" (el addon usaba el `DocNum` como respaldo; se descartó porque podría traer el DTE
|
||||
de otro documento). Unir con `pdf-lib`; un fallo en una Devolución no impide las demás.
|
||||
- **Exportar a Excel** (solo en el navegador, sin pasar por la API): "Artículos validados" (Nueva) sale tal cual
|
||||
la tabla; "Líneas" (Detalle) sale con una fila por Hijo (`S`) que repite los datos de su Padre (`F`); un Padre
|
||||
sin Hijos sale solo. `core/excel.ts` arma el .xlsx a mano (ZIP sin compresión, sin dependencias).
|
||||
- **Valores por defecto de la cabecera** (Detalle, solo con la planificación abierta y el campo vacío): fecha,
|
||||
fecha de salida y de llegada = hoy; hora de salida = hora actual; tipo de despacho `1`; indicador de traslado
|
||||
`7` (Guía de devolución), estos dos solo si existen en el catálogo. Lo pone la web; se guardan con *Guardar
|
||||
cabecera* o al crear las Devoluciones. Lo ya guardado no se pisa.
|
||||
- Transporte en la Devolución (ORPD): `RutTransporte→U_BFE_RutTrasporte` (sic), `Patente→U_BFE_Patente`,
|
||||
`RutChofer→U_BFE_RutChofer`, `NombreChofer→U_BFE_NombreChofer`. **ORPD no tiene UDF para fechas
|
||||
ni hora de salida/llegada**: solo se guardan en `@LIB_ODEV`.
|
||||
@@ -69,7 +76,13 @@ Pasos de la UI (decididos):
|
||||
`HTTPS_KEY_PATH`+`HTTPS_CERT_PATH`) y redirección opcional de HTTP (`HTTP_REDIRECT_PORT`). El servicio
|
||||
lo administra **NSSM** (decisión del usuario; se evaluó WinSW y no se lo consideró lo bastante estable);
|
||||
nginx no es necesario. NSSM 2.24 estable puede no arrancar en Windows recientes: usar la 2.24-101. `npm run publicar` arma `release/devolucion-proveedores/` (API + web + solo dependencias de
|
||||
producción, ~55 MB). Guía completa: `deploy/windows/DEPLOY.md`.
|
||||
producción, ~55 MB, **sin enlaces simbólicos**: `@dp/shared` va como copia real, porque la API lo
|
||||
importa al ejecutarse y un enlace no sobrevive a copiar de Mac a Windows). Guía completa: `deploy/windows/DEPLOY.md`.
|
||||
- **Versión**: el número es el `version` del `package.json` raíz. **Cada release sube la versión** y el
|
||||
número lo decide el usuario (preguntarle antes): `npm run version:parche|menor|mayor` y luego
|
||||
`npm run publicar`, que deja `app/version.json` (número, fecha y commit). La API lo lee al arrancar
|
||||
(`src/version.ts`), lo informa en `/auth/info` y `/auth/me`, y la web lo muestra en el login y en la barra
|
||||
superior (en desarrollo dice "desarrollo").
|
||||
- **Logs**: la aplicación **no escribe logs a archivo**; usa el `Logger` de Nest por consola. En
|
||||
producción NSSM captura la salida y la rota a los 10 MB (no limita cuántos archivos conserva: hay que
|
||||
limpiar los viejos). Con `NO_COLOR=1` el log sale sin códigos de
|
||||
@@ -110,7 +123,7 @@ devolucion-proveedores-web/ npm workspaces
|
||||
│ ├── web-estatico.ts sirve el build de Angular, fallback a index.html, cabeceras de seguridad
|
||||
│ └── https.ts lectura del certificado y redirección HTTP → HTTPS
|
||||
├── scripts/publicar.mjs arma la carpeta de despliegue (release/, ignorada por git)
|
||||
├── deploy/windows/ NSSM: instalar/desinstalar-servicio.ps1, DEPLOY.md
|
||||
├── deploy/windows/ NSSM: instalar/desinstalar-servicio.ps1, DEPLOY.md (van al release)
|
||||
└── apps/web/ Angular 22 standalone, signals, zoneless, CSS (no SCSS)
|
||||
└── src/app/
|
||||
├── core/ auth.service, metadata.service, planificaciones.service,
|
||||
@@ -189,9 +202,17 @@ pierde al reiniciar la API** (hay que volver a iniciar sesión).
|
||||
`HTTPS_KEY_PATH`/`HTTPS_CERT_PATH`, `HTTP_REDIRECT_PORT` y `WEB_DIST_DIR` (opcional).
|
||||
4. Desarrollo, en dos terminales:
|
||||
```sh
|
||||
npm run dev:api # compila @dp/shared y levanta NestJS en :3000
|
||||
npm run dev:web # compila @dp/shared y levanta Angular en :4200 (proxy /api → :3000)
|
||||
npm run dev:api # compila @dp/shared y levanta NestJS en el PORT del .env (3015 en el servidor de pruebas)
|
||||
npm run dev:web # compila @dp/shared y levanta Angular en :4215 (proxy /api → :3015)
|
||||
```
|
||||
El puerto de `ng serve` está en `apps/web/angular.json` y el destino del proxy en
|
||||
`apps/web/src/proxy.conf.json`: si cambia `PORT`, hay que cambiar también el proxy. En el servidor
|
||||
Windows de pruebas el servicio instalado usa el **mismo 3015**: detener uno antes de arrancar el otro.
|
||||
En Windows, `nest start --watch` a veces no logra terminar el proceso anterior al recompilar y se cae:
|
||||
basta con volver a ejecutar `npm run dev:api`.
|
||||
`dev:web` usa `ng serve --poll 1500`: en el Windows Server de pruebas (Node 24) el vigilante nativo
|
||||
(`@parcel/watcher`) hace caer `ng serve` con `0xC0000005` justo después de "Watch mode enabled".
|
||||
Solo afecta al desarrollo; producción sirve la web compilada y no vigila archivos.
|
||||
5. Verificación:
|
||||
```sh
|
||||
npm test # shared + api + web
|
||||
@@ -213,7 +234,7 @@ Reglas:
|
||||
- Para ver la UI sin la extensión de Chrome se puede abrir Chrome sin cabeza con
|
||||
`--remote-debugging-port` y manejarlo por DevTools Protocol (`WebSocket` de Node 22).
|
||||
|
||||
## Estado al 2026-10-12
|
||||
## Estado al 2026-10-13
|
||||
|
||||
**Hecho y verificado contra el Service Layer real (SBOLibros, MSSQL):**
|
||||
- Login, Metadatos y **Reconstruir** (creación de tablas, campos y UDO desde cero).
|
||||
@@ -227,7 +248,8 @@ Reglas:
|
||||
paginado y filtrado** (total, saltos, estado/almacén/fechas) OK. **PDF** contra BES (certificación)
|
||||
con 4 Devoluciones reales: individuales y unificado (3 páginas) OK.
|
||||
- `apps/web`: login, guards, Metadatos y Planificaciones completas (listado con filtros y paginación,
|
||||
Nueva, Detalle con crear devoluciones, Rehacer FIFO, PDF y cerrar). 38 tests. Verificado en Chrome
|
||||
Nueva, Detalle con crear devoluciones, Rehacer FIFO, PDF, exportar a Excel y cerrar). 46 tests. El .xlsx se
|
||||
abrió en Excel 16 (servidor de pruebas) sin aviso de reparación. Verificado en Chrome
|
||||
real (sin cabeza): login, listado con filtros, selector de almacenes, validación de pegado y la
|
||||
descarga de PDF del Detalle.
|
||||
|
||||
@@ -240,6 +262,9 @@ Reglas:
|
||||
- `PATCH` de `LIB_DEV1Collection` actualiza las filas por `LineId` sin tocar las demás; **no se pueden
|
||||
quitar filas** de un UDO.
|
||||
- Los campos numéricos sin llenar del UDO vuelven como `0`: el mapeo los trata como `null`.
|
||||
- **Lo que se puede devolver de una Entrada es `PDN1.OpenInvQty`, no `OpenQty`**: `OpenQty` solo baja con
|
||||
las Devoluciones; `OpenInvQty` también descuenta lo facturado. Con `OpenQty` SAP rechaza la Devolución con
|
||||
`-10 Quantity cannot exceed the quantity in the base document` (visto en HANA, `SBOTSTLIBROS`).
|
||||
- `POST /LIB_ODEV(n)/Close` cierra el UDO. El UDO no se puede borrar (`CanDelete = tNO`).
|
||||
- Si no hay resultado, el Service Layer responde cuerpo vacío: por eso `/planificaciones/abierta`
|
||||
devuelve siempre un JSON (`{abierta: null}`).
|
||||
@@ -261,11 +286,17 @@ Reglas:
|
||||
- **PDF en la base de pruebas**: las Devoluciones de `SBOLibros` no tienen `FolioNum`, así que ahora su
|
||||
descarga informa el error de folio. El PDF contra BES se probó antes del cambio, usando el `DocNum`.
|
||||
Para repetirlo hace falta una Devolución con folio (la que emite el addon de facturación electrónica).
|
||||
- **Despliegue en Windows**: la carpeta publicada se probó en un Mac (API con HTTPS autofirmado, web
|
||||
servida por la API, rutas de Angular, 404, cabeceras, redirección 301, log sin colores). **No se ha
|
||||
ejecutado en Windows**: los `.ps1` solo pasaron la comprobación de sintaxis y la lista de comandos de
|
||||
NSSM que generan (`-SoloMostrar`); falta instalar el servicio de verdad. Las banderas de la cookie de sesión están comprobadas en un
|
||||
test e2e; solo falta verlo en un navegador real sobre HTTPS (iniciar sesión en el sitio desplegado).
|
||||
- **Despliegue en Windows**: el usuario instaló el servicio `DevolucionProveedores` (NSSM) en el servidor
|
||||
de pruebas, en `C:\tmp\devolucion-proveedores` (`PORT=3015`, `SBOTSTLIBROS`, HANA), con un release
|
||||
publicado desde el Mac. `npm run publicar` funciona también en Windows (2026-10-13). Falta verificar
|
||||
la cookie de sesión en un navegador real sobre HTTPS.
|
||||
- **`OpenInvQty`** (2026-10-13): la consulta `DP_EntradasAbiertas` v3 todavía no se ha ejecutado contra el
|
||||
Service Layer de HANA. Se prueba con *Rehacer FIFO* de la planificación 7 de `SBOTSTLIBROS`.
|
||||
- **Versión del release** (2026-10-15): release **1.1.0** generado en el servidor Windows de pruebas (Excel,
|
||||
valores por defecto de la cabecera, versión visible). Lleva "(sin git)": **git no está instalado en ese
|
||||
servidor**, aunque la carpeta es un repositorio con commits y remoto `origin`
|
||||
(`http://100.68.242.27:30000/george/devolucion_proveedores.git`). Los cambios del 2026-10-15 **no están en
|
||||
ningún commit**: hacerlo (y `push`) cuando haya git, antes de seguir trabajando desde el Mac.
|
||||
- **Estilos:** son CSS porque, en el Mac con macOS 12, el compilador nativo de Sass exige
|
||||
macOS 14 o superior. En Sequoia se puede volver a SCSS si se prefiere.
|
||||
|
||||
@@ -273,9 +304,10 @@ Reglas:
|
||||
|
||||
1. **Validar en HANA** (ver "Sin verificar"): `DB_TYPE=HANA`, Reconstruir, repetir la prueba de extremo a extremo.
|
||||
2. Probar los casos sin verificar (fallo parcial y reprocesar contra SAP).
|
||||
3. **Probar el despliegue en un servidor Windows** (de pruebas) siguiendo `deploy/windows/DEPLOY.md`. El
|
||||
botón de pegar desde el portapapeles solo funciona en `localhost` o HTTPS.
|
||||
4. Archivar `../SolucionLibros/` cuando HANA esté validado (ninguna carpeta está bajo `git`).
|
||||
3. **Actualizar el servicio de pruebas** con el release que trae `OpenInvQty` (DEPLOY.md, sección 11) y
|
||||
rehacer el FIFO de la planificación 7. El botón de pegar desde el portapapeles solo funciona en
|
||||
`localhost` o HTTPS.
|
||||
4. Archivar `../SolucionLibros/` cuando HANA esté validado (`../SolucionLibros/` no está bajo `git`).
|
||||
|
||||
## Preguntas abiertas para el usuario
|
||||
|
||||
|
||||
Reference in new issue
Block a user