Picking: Notificacion=cierre solo se exige con Proceso ULTIMA MILLA. Versión 2.1.2.0
DESPACHO y PICKING vuelven a generar nota de crédito sin depender de Notificacion. Documentada la regla Proceso + Notificacion. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
e31524ab6b
commit
e475b7f48c
4 files changed
+51
-21
No files matched your search
+34
-14
@@ -22,11 +22,27 @@ recorre esas mismas facturas con un `FOR` de su lado llamando otra vez al
|
||||
mismo endpoint pero en modo **cierre** (ahí sí se crean los documentos SAP),
|
||||
y al final cierra la hoja de ruta completa **una sola vez**.
|
||||
|
||||
## Regla Proceso + Notificacion (versión 2.1.2.0)
|
||||
|
||||
`Notificacion` **solo se valida cuando `Proceso = "ULTIMA MILLA"`**. En los
|
||||
demás procesos el campo se ignora.
|
||||
|
||||
| `Proceso` | `Notificacion` | Resultado |
|
||||
|---|---|---|
|
||||
| `ULTIMA MILLA` | `"cierre"` | Lógica completa: crea documentos en SAP (solicitud de devolución, estado 23). |
|
||||
| `ULTIMA MILLA` | ausente u otro valor | Solo actualiza estado en HANA; **no** crea nada en SAP. |
|
||||
| `DESPACHO` | cualquiera / ausente | Lógica completa siempre: NC y transferencias automáticas (estados 5 y 6). |
|
||||
| `PICKING` | cualquiera / ausente | Lógica completa siempre: NC y transferencias automáticas (estado 13). |
|
||||
|
||||
Historial: en 2.1.1.0 el filtro se aplicaba a todos los procesos, por lo que
|
||||
DESPACHO y PICKING no generaban la NC si no llegaba `"cierre"`. Corregido en
|
||||
2.1.2.0.
|
||||
|
||||
## Resumen del contrato
|
||||
|
||||
| Método | Ruta | Cambia hoy | Qué hace |
|
||||
|---|---|---|---|
|
||||
| `POST` | `/api/picking` | **Sí** — agrega campo `Notificacion` | `"cierre"` → lógica actual completa (crea documento SAP); cualquier otro valor/ausente → solo actualiza estado en HANA, nunca toca SAP. |
|
||||
| `POST` | `/api/picking` | **Sí** — agrega campo `Notificacion` | **Solo con `Proceso = "ULTIMA MILLA"`**: `"cierre"` → lógica completa (crea documento SAP); cualquier otro valor/ausente → solo actualiza estado en HANA, nunca toca SAP. Con `DESPACHO`, `PICKING` y demás procesos el campo se ignora y la lógica corre siempre (NC y transferencias). |
|
||||
| `POST` | `/api/picking/ruta` | No | Sin cambios — `CreateHojaRuta` ya existe y sigue igual. |
|
||||
| `POST` | `/api/picking/hojaruta/{docEntry}/cerrar` | **Nuevo** | Cierra el UDO `ARD_PHR` completo en SAP. Sin body. |
|
||||
|
||||
@@ -36,7 +52,7 @@ y al final cierra la hoja de ruta completa **una sola vez**.
|
||||
|
||||
**Archivo**: `Net.Business.Entities/WMS/Picking/BE_PickingRequest.cs` — agregar:
|
||||
```csharp
|
||||
public string Notificacion { get; set; } // "preliminar" | "cierre"; cualquier otro valor o ausente = "preliminar"
|
||||
public string Notificacion { get; set; } // solo se evalua con Proceso "ULTIMA MILLA": "cierre" | otro/ausente = preliminar
|
||||
```
|
||||
|
||||
**Archivo**: `Net.Business.DTO/WMS/Picking/Dto_PickingRequest.cs` — agregar la
|
||||
@@ -73,8 +89,10 @@ alcanza con un `if` adentro del mismo método).
|
||||
HelperProcesoPiciking.Set(entidad.Proceso, entidad.IdEstadoCubico, entidad.DocEntry, entidad.CodMotivo, Proceso.Code);
|
||||
// <-- linea 96 actual, sin tocar
|
||||
|
||||
// === NUEVO: notificacion preliminar (diurna) - nunca toca SAP
|
||||
if (!string.Equals(entidad.Notificacion, "cierre", StringComparison.OrdinalIgnoreCase))
|
||||
// === Solo ULTIMA MILLA: notificacion preliminar (diurna) - nunca toca SAP.
|
||||
// DESPACHO / PICKING no dependen de Notificacion.
|
||||
if (string.Equals(entidad.Proceso, "ULTIMA MILLA", StringComparison.OrdinalIgnoreCase)
|
||||
&& !string.Equals(entidad.Notificacion, "cierre", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
return resultadoTransaccion.GetInformacionResultado(entidad.DocEntry, entidad.NumOrden, "Estado actualizado correctamente", entidad);
|
||||
}
|
||||
@@ -85,8 +103,10 @@ if (!string.Equals(entidad.Notificacion, "cierre", StringComparison.OrdinalIgnor
|
||||
```
|
||||
|
||||
Es decir: **todo lo que hoy hace `Create()` (líneas 45-341 completas)** sigue
|
||||
siendo exactamente la lógica de `notificacion == "cierre"` — no se toca nada
|
||||
de ahí. Solo se agrega el `if` de corte después de la línea 96.
|
||||
siendo exactamente la lógica de cierre — no se toca nada de ahí. Solo se
|
||||
agrega el `if` de corte después de la línea 96, y **únicamente para
|
||||
`ULTIMA MILLA`**. Para `DESPACHO` y `PICKING` la NC se genera sin importar
|
||||
`Notificacion`.
|
||||
|
||||
> **Nota de contrato**: `detalle` ya es obligatorio hoy en este endpoint (la
|
||||
> validación de arriba lo necesita para desambiguar `Existe > 1`), así que no
|
||||
@@ -96,15 +116,15 @@ de ahí. Solo se agrega el `if` de corte después de la línea 96.
|
||||
|
||||
### Bodies de ejemplo
|
||||
|
||||
**Notificación preliminar** (reparto en curso — `Notificacion` ausente o
|
||||
distinto de `"cierre"`):
|
||||
**Notificación preliminar** (solo `ULTIMA MILLA`, reparto en curso —
|
||||
`Notificacion` ausente o distinto de `"cierre"`):
|
||||
```json
|
||||
{
|
||||
"numOrden": "OT-2026-001",
|
||||
"docEntry": 500,
|
||||
"proceso": "DESPACHO",
|
||||
"proceso": "ULTIMA MILLA",
|
||||
"codMotivo": "M01",
|
||||
"idEstadoCubico": 6,
|
||||
"idEstadoCubico": 23,
|
||||
"codigoAlmacen": "ALM01",
|
||||
"detalle": [
|
||||
{ "item": 0, "codigoArticulo": "ART-001", "cantidadPedida": 3, "estado": "C" }
|
||||
@@ -112,15 +132,15 @@ distinto de `"cierre"`):
|
||||
}
|
||||
```
|
||||
|
||||
**Cierre** (mismo shape, agrega `notificacion: "cierre"` — crea el documento
|
||||
SAP real, misma respuesta que hoy):
|
||||
**Cierre** (`ULTIMA MILLA`, mismo shape, agrega `notificacion: "cierre"` —
|
||||
crea el documento SAP real, misma respuesta que hoy):
|
||||
```json
|
||||
{
|
||||
"numOrden": "OT-2026-001",
|
||||
"docEntry": 500,
|
||||
"proceso": "DESPACHO",
|
||||
"proceso": "ULTIMA MILLA",
|
||||
"codMotivo": "M01",
|
||||
"idEstadoCubico": 6,
|
||||
"idEstadoCubico": 23,
|
||||
"codigoAlmacen": "ALM01",
|
||||
"notificacion": "cierre",
|
||||
"detalle": [
|
||||
|
||||
Reference in new issue
Block a user