Skip to content

Tarea3448 - #1983

Open
abdedarghal111 wants to merge 2 commits into
NeoRazorX:masterfrom
abdedarghal111:tarea3448
Open

Tarea3448#1983
abdedarghal111 wants to merge 2 commits into
NeoRazorX:masterfrom
abdedarghal111:tarea3448

Conversation

@abdedarghal111

@abdedarghal111 abdedarghal111 commented Jun 10, 2026

Copy link
Copy Markdown
Contributor

Añadir selección de fecha al transformar documentos (albarán → factura)

¿Qué se ha implementado?

Cuando se cambia el estado de un documento (albarán, pedido, presupuesto) a uno que genera un nuevo documento (por ejemplo, facturar un albarán), ahora se muestra un modal previo donde el usuario puede elegir la fecha del nuevo documento antes de confirmar la transformación.

Anteriormente la transformación se ejecutaba directamente al pulsar el estado en el desplegable, usando siempre la fecha del día. Con este cambio, el usuario tiene control sobre la fecha del documento generado.


Cambios realizados

Core/Lib/AjaxForms/CommonSalesPurchases.php

  • Los estados del desplegable que tienen generadoc ya no ejecutan directamente la acción, sino que abren un modal.
  • Se añade el método modalNewDocDate() que genera el HTML del modal con un campo de fecha (por defecto la fecha actual) y los botones Cerrar / Aceptar.
  • Al aceptar, se añade la fecha como un input oculto al formulario y se llama a la función JS correspondiente (salesFormSave / purchasesFormSave) con el idestado correcto.

Core/Lib/AjaxForms/SalesController.php y PurchasesController.php

  • El método saveStatusAction() lee el parámetro new-doc-date tanto del POST directo como del JSON data del formulario.
  • Si se ha proporcionado fecha, se pasa a BusinessDocumentGenerator::setNewDocDate() antes de guardar el modelo, y se limpia en caso de error.

Core/Lib/BusinessDocumentGenerator.php

  • Se añade el método estático setNewDocDate() y la propiedad $newDocDate.
  • Al generar el nuevo documento, si hay fecha definida se asigna a $newDoc->fecha y se resetea para no afectar a generaciones posteriores.

Tests Ejecutados

Se añade el archivo Test/Core/Lib/BusinessDocumentGeneratorTest.php con cuatro tests unitarios:

  • testSetNewDocDateAppliedOnPurchaseApproval: crea un albarán de proveedor con una línea, establece una fecha personalizada mediante setNewDocDate(), lo transforma al estado que genera documento y verifica que el documento generado (factura de proveedor) tiene exactamente esa fecha.
  • testSetNewDocDateAppliedOnSalesApproval: mismo flujo para albaranes de cliente, comprobando que la fecha personalizada se aplica correctamente al documento de venta generado.
  • testNewDocDateResetAfterUse: verifica que la variable $newDocDate se resetea automáticamente tras la primera generación, de modo que una segunda transformación posterior (sin volver a llamar a setNewDocDate()) no hereda la fecha anterior.
  • testWithoutNewDocDateUsesTodayDate: comprueba que, cuando no se establece ninguna fecha personalizada, el documento generado toma la fecha del día como comportamiento por defecto.

¿Cómo has probado los cambios?

Toda modificación debe haber sido mínimamente probada. Marca o describe las pruebas que has realizado:

  • He revisado mi código antes de enviarlo.
  • He probado que funciona correctamente en mi PC.
  • He probado que funciona correctamente con una base de datos vacía.
  • He ejecutado los tests unitarios.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant