feat(sales): implementar pantalla Blazor de emisión de Delivery Note #37

Closed
opened 2026-03-24 14:39:58 +00:00 by leandro · 0 comments
Owner

Objetivo

Implementar en Blazor la pantalla de emisión de Delivery Note, permitiendo cargar cabecera e ítems manualmente y enviar el modelo al endpoint POST /api/DeliveryNote/issue, respetando el patrón visual y programático ya utilizado en Quotes y Expeditions.


Contexto funcional

El módulo Sales → Delivery Note ya tiene resuelto el backend de emisión:

✔ Backend existente

  • DTOs de creación (DeliveryNoteCreateRequest, Items, Response)
  • Lógica en Core (CreateAndIssueDeliveryNoteAsync)
  • Entidades EDeliveryNote y EDeliveryNoteDetail
  • Persistencia mediante EntityMapper
  • Endpoint API: POST /api/DeliveryNote/issue

Actualmente no existe la pantalla de emisión en Blazor.

En PhronCare, los documentos principales siguen un patrón estándar:

  • pantalla principal de consulta con filtros y paginación
  • pantalla de alta/emisión con formulario en cards
  • grilla de detalle en memoria
  • guardado final vía servicio UI → API

Para Delivery Note se definió:

  • NO se construye automáticamente desde Quote
  • la UI envía el modelo completo
  • la numeración es manual y obligatoria
  • se debe mantener consistencia con Quotes y Expeditions
  • evitar sobreingeniería (MVP funcional)

Alcance

  • Crear pantalla DeliveryNoteCreate.razor
  • Definir modelo de estado UI propio (no usar entidad ni DTO directamente)
  • Implementar formulario de cabecera:
    • DeliveryNoteNumber (manual)
    • IssueDate
    • Customer (lookup)
    • Quote (opcional)
    • Observations
  • Implementar grilla editable de ítems en memoria
  • Permitir:
    • agregar ítems manualmente
    • eliminar ítems
  • Integrar lookups existentes:
    • cliente
    • presupuesto (opcional)
  • Implementar validaciones:
    • DataAnnotations para campos básicos
    • validaciones manuales antes de guardar
  • Mapear estado UI → DeliveryNoteCreateRequest
  • Consumir endpoint POST /api/DeliveryNote/issue
  • Extender IDeliveryNoteService y DeliveryNoteService
  • Navegar desde DeliveryNotes.razor (botón Nuevo)
  • Mantener diseño visual alineado con QuoteCreate.razor

Fuera de alcance

  • Importación automática de ítems desde Quote
  • Autocompletado avanzado desde presupuesto
  • Edición de Delivery Note
  • Reimpresión / PDF
  • Validación anticipada de unicidad en UI
  • Cambios en backend (Core / Domain / Repository)
  • Modificación de modelos EF generados
  • Nuevos componentes genéricos reutilizables

Criterios de aceptación

  • ✔ Existe ruta /deliverynotes/create
  • ✔ Se puede ingresar:
    • número de remito
    • fecha
    • cliente
    • observaciones
    • presupuesto opcional
  • ✔ Se pueden agregar y eliminar ítems manualmente
  • ✔ No se permite guardar sin cliente
  • ✔ No se permite guardar sin al menos un ítem válido
  • ✔ Cada ítem requiere:
    • descripción
    • cantidad > 0
  • ✔ Se construye correctamente DeliveryNoteCreateRequest
  • ✔ Se consume correctamente POST /api/DeliveryNote/issue
  • ✔ Se muestra mensaje de éxito al guardar
  • ✔ Se navega a /deliverynotes luego del guardado
  • ✔ Se muestran errores del backend en español
  • ✔ El botón Nuevo navega correctamente a la pantalla create
  • ✔ La UI es consistente con Quotes y Expeditions
  • ✔ No se rompen contratos existentes

Decisiones de diseño

  • Se utiliza un ViewModel de UI propio para desacoplar la pantalla del contrato API
  • El mapping a DeliveryNoteCreateRequest se realiza únicamente al guardar
  • Los ítems se gestionan en memoria (lista en UI)
  • OriginType se inicializa como Manual
  • QuoteId es opcional y solo aporta contexto en esta versión
  • Validaciones de negocio se realizan en método ValidateBeforeSave()
  • La unicidad del número queda validada en backend
  • Se reutiliza el patrón de:
    • QuoteCreate (estructura visual)
    • ExpeditionCreate (flujo de guardado)

Entregable esperado

Pantalla funcional de emisión de Delivery Note en Blazor, integrada con backend existente y accesible desde la consulta principal del módulo.

Archivos esperados:

  • Pages/Sales/DeliveryNotes/DeliveryNoteCreate.razor
  • Pages/Sales/DeliveryNotes/DeliveryNoteCreate.razor.css (opcional)
  • Services/Sales/DeliveryNotes/IDeliveryNoteService.cs
  • Services/Sales/DeliveryNotes/DeliveryNoteService.cs
  • Modificación en:
    • DeliveryNotes.razor (navegación a create)

Próxima Story sugerida

feat(sales): permitir importar ítems desde Quote en Delivery Note

## Objetivo Implementar en Blazor la pantalla de emisión de Delivery Note, permitiendo cargar cabecera e ítems manualmente y enviar el modelo al endpoint `POST /api/DeliveryNote/issue`, respetando el patrón visual y programático ya utilizado en Quotes y Expeditions. --- ## Contexto funcional El módulo **Sales → Delivery Note** ya tiene resuelto el backend de emisión: ### ✔ Backend existente - DTOs de creación (`DeliveryNoteCreateRequest`, Items, Response) - Lógica en Core (`CreateAndIssueDeliveryNoteAsync`) - Entidades `EDeliveryNote` y `EDeliveryNoteDetail` - Persistencia mediante `EntityMapper` - Endpoint API: `POST /api/DeliveryNote/issue` Actualmente no existe la pantalla de emisión en Blazor. En PhronCare, los documentos principales siguen un patrón estándar: - pantalla principal de consulta con filtros y paginación - pantalla de alta/emisión con formulario en cards - grilla de detalle en memoria - guardado final vía servicio UI → API Para Delivery Note se definió: - NO se construye automáticamente desde Quote - la UI envía el modelo completo - la numeración es manual y obligatoria - se debe mantener consistencia con Quotes y Expeditions - evitar sobreingeniería (MVP funcional) --- ## Alcance - Crear pantalla `DeliveryNoteCreate.razor` - Definir modelo de estado UI propio (no usar entidad ni DTO directamente) - Implementar formulario de cabecera: - DeliveryNoteNumber (manual) - IssueDate - Customer (lookup) - Quote (opcional) - Observations - Implementar grilla editable de ítems en memoria - Permitir: - agregar ítems manualmente - eliminar ítems - Integrar lookups existentes: - cliente - presupuesto (opcional) - Implementar validaciones: - DataAnnotations para campos básicos - validaciones manuales antes de guardar - Mapear estado UI → `DeliveryNoteCreateRequest` - Consumir endpoint `POST /api/DeliveryNote/issue` - Extender `IDeliveryNoteService` y `DeliveryNoteService` - Navegar desde `DeliveryNotes.razor` (botón Nuevo) - Mantener diseño visual alineado con `QuoteCreate.razor` --- ## Fuera de alcance - Importación automática de ítems desde Quote - Autocompletado avanzado desde presupuesto - Edición de Delivery Note - Reimpresión / PDF - Validación anticipada de unicidad en UI - Cambios en backend (Core / Domain / Repository) - Modificación de modelos EF generados - Nuevos componentes genéricos reutilizables --- ## Criterios de aceptación - ✔ Existe ruta `/deliverynotes/create` - ✔ Se puede ingresar: - número de remito - fecha - cliente - observaciones - presupuesto opcional - ✔ Se pueden agregar y eliminar ítems manualmente - ✔ No se permite guardar sin cliente - ✔ No se permite guardar sin al menos un ítem válido - ✔ Cada ítem requiere: - descripción - cantidad > 0 - ✔ Se construye correctamente `DeliveryNoteCreateRequest` - ✔ Se consume correctamente `POST /api/DeliveryNote/issue` - ✔ Se muestra mensaje de éxito al guardar - ✔ Se navega a `/deliverynotes` luego del guardado - ✔ Se muestran errores del backend en español - ✔ El botón **Nuevo** navega correctamente a la pantalla create - ✔ La UI es consistente con Quotes y Expeditions - ✔ No se rompen contratos existentes --- ## Decisiones de diseño - Se utiliza un **ViewModel de UI propio** para desacoplar la pantalla del contrato API - El mapping a `DeliveryNoteCreateRequest` se realiza únicamente al guardar - Los ítems se gestionan en memoria (lista en UI) - `OriginType` se inicializa como `Manual` - `QuoteId` es opcional y solo aporta contexto en esta versión - Validaciones de negocio se realizan en método `ValidateBeforeSave()` - La unicidad del número queda validada en backend - Se reutiliza el patrón de: - `QuoteCreate` (estructura visual) - `ExpeditionCreate` (flujo de guardado) --- ## Entregable esperado Pantalla funcional de emisión de Delivery Note en Blazor, integrada con backend existente y accesible desde la consulta principal del módulo. Archivos esperados: - `Pages/Sales/DeliveryNotes/DeliveryNoteCreate.razor` - `Pages/Sales/DeliveryNotes/DeliveryNoteCreate.razor.css` (opcional) - `Services/Sales/DeliveryNotes/IDeliveryNoteService.cs` - `Services/Sales/DeliveryNotes/DeliveryNoteService.cs` - Modificación en: - `DeliveryNotes.razor` (navegación a create) --- ## Próxima Story sugerida feat(sales): permitir importar ítems desde Quote en Delivery Note
leandro added the
STORY
label 2026-03-24 14:40:21 +00:00
leandro added this to the Sales (Ventas, Facturación y Remitos) milestone 2026-03-24 14:40:24 +00:00
leandro added this to the phronCare: Tablero DEV project 2026-03-24 14:40:27 +00:00
leandro self-assigned this 2026-03-24 14:40:33 +00:00
leandro moved this to Done in phronCare: Tablero DEV on 2026-03-24 20:24:07 +00:00
leandro moved this to Done in phronCare: Tablero DEV on 2026-03-25 13:27:46 +00:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: leandro/phronCare#37
No description provided.