ADempiere Business Suite ERP/CRM/MFG/SCM/POS done the Bazaar way in an open and unabated fashion. Focus is on the Community that includes Subject Matter Specialists, Implementors and End-Users.
Se desea implementar la funcionalidad para que al ingresar a ADempiere con una autenticación de terceros como gMail, Keycloak u otro se pueda cerrar la sesión de Open ID al cerrar la sesión de ADempiere.
Esto sería ideal para ambientes donde se use keycloak para iniciar sesión en ADempiere y no se quiera dejar abierta la sesión de keycloak al cerrar la sesión de ADempiere.
¿Qué se propone agregar?
Se propone agregar una columna llamada ECA02_RevokeToken en los niveles:
Usuario
Rol
Organización
La razón de esta columna es para determinar si al cerrar sesión de ADempiere se cerrará la de Open ID o no
Cuando se hace logout desde el ZK no se cierra correctamente la sesión de ADempiere, esto se puede notar si se busca la sesión anterior en la ventana de Auditoría de Sesión
Pasos para Reproducirlo
Haga login desde el ZK en ADempiere
Vaya a la ventana de sesión y busque la actual
Cierre sesión desde el botón "Log Out"
Haga login nuevamente y busque la sesión previa
Note que la sesión anterior no está marcada como procesada
Cuando se hace una devolución de cliente o proveedor desde una orden de ventas, no se mantienen los precios. Esto no es correcto puesto que las devoluciones siempre son valorizadas al precio del documento original.
Paso a Paso
Cree una Orden de Ventas con al menos un producto y complete
Cambie el precio del producto que se encuentra en la orden de ventas (desde la ventana de lista de precios)
Cuando se intenta instanciar la clase de importación de lista de materiales, da un error cargando las clases X y las I. El error es que no consigue la clase modelo para la tabla:
Cuando se carga el ADempiere con una referencia de imagen o logo de la empresa en la información de la compañía y, la misma no tiene binario o activo de la imagen genera un error del tipo NPE como se describe a continuación:
Cuando se ejecuta un reporte desde el progamador de procesos (Process Scheduler) no muestra correctamente el valor de los párámetros, en su lugar muestra el ID cuando se trata de una referencia a una tabla
Pasos para reproducir
Agregue un proceso tipo reporte al programador de procesos, en mi caso agregué el informe de reabastecimiento
Ejecute el Programador de Procesos
Vea cómo se muestra el parámetro
Screenshot or Gif
Comportamiento Esperado
Cuando el parámetro hace referencia a un tipo lookup debería mostrar el valor de visualización y no el ID tal como se muestra a continuación
Conteto Adicional
Esto sucede porque los procesos ejecutados en background no tienen el valor de visualización, por lo general sucede en los procesos que se ejecutan desde el manejador ProcessBuilder
Cuando se ingresa con organización * y se intenta reabastecer desde el visor Reabastecimiento de Almacén se genera un error con el almacén fuente.
Steps to reproduce
Ingrese a ADempiere con organización *
Vaya a Gestión de Materiales -> Reabastecimiento de Almacén
Liste los reabastecimientos por hacer
Seleccione en el parámetro de proceso Crear la opción Orden de Distribución
Seleccione en el parámetro de proceso Tipo de Documento un tipo de documento de orden de distribución
Procese
Note que existe un error
ReplenishReport.process: @M_Warehouse_ID@ @InTransit@ @FillMandatory@ [20]
UserError: @M_Warehouse_ID@ @InTransit@ @FillMandatory@
at org.compiere.process.ReplenishReport.createDO(ReplenishReport.java:660)
at org.compiere.process.ReplenishReport.doIt(ReplenishReport.java:116)
at org.compiere.process.SvrProcess.process(SvrProcess.java:176)
at org.compiere.process.SvrProcess.startProcess(SvrProcess.java:129)
at org.adempiere.util.ProcessUtil.startJavaProcess(ProcessUtil.java:171)
at org.adempiere.util.ProcessUtil.startJavaProcess(ProcessUtil.java:116)
at org.compiere.apps.ProcessCtl.startProcess(ProcessCtl.java:610)
at org.compiere.apps.ProcessCtl.run(ProcessCtl.java:360)
at org.eevolution.form.VBrowser.cmd_Process(VBrowser.java:552)
at org.eevolution.form.VBrowser.actionPerformed(VBrowser.java:764)
at java.desktop/javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1967)
at java.desktop/javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2308)
at java.desktop/javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:405)
at java.desktop/javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:262)
at java.desktop/javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:279)
at java.desktop/java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:297)
at java.desktop/java.awt.Component.processMouseEvent(Component.java:6635)
at java.desktop/javax.swing.JComponent.processMouseEvent(JComponent.java:3342)
at java.desktop/java.awt.Component.processEvent(Component.java:6400)
at java.desktop/java.awt.Container.processEvent(Container.java:2263)
at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:5011)
Comportamiento Esperado
Debe tomar el almacén fuente configurado en el reabastecimiento y sino entonces el configurado en el almacén que se encuentra en el reabastecimiento
Cuando un Smart Browser tiene una columna como C_Currency_ID_To (Que no termina en _ID) hace la comparación como si el campo en fuera String en lugar de numérico. Esto trae como consecuencia un error en la clausula WHERE del Smart Browser al ejecutar la consulta.
Actualmente ADempiere está en un punto donde cada proceso de negocio se encuentra en un paquete distinto, esto ha hecho que muchas funcionalidades por implementar se tengan que cambiar, una de ellas es el procesador de pagos. El mismo tiene variables que se encuentran declaradas como protegidas y no permiten el acceso desde un paquete diferente.
Cuando se intenta completar una recepción de materiales con un cargo asociado se genera un NPE
Pasos para Reproducir
Cree una orden de compra con una linea con referencia a un cargo
Vaya a la ventana "Recepción de Material" y cree una nueva recepción a partir de la orden de compras
Intente completar la recepción
Vea el error
===========> ModelValidationEngine.lambda$fireDocValidate$19: null [1852]
java.lang.NullPointerException
at org.compiere.asset.model.validator.FixedAsset.docValidate(FixedAsset.java:203)
at org.compiere.model.ModelValidationEngine.lambda$fireDocValidate$19(ModelValidationEngine.java:519)
at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:177)
at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1655)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:497)
at org.compiere.model.ModelValidationEngine.lambda$fireDocValidate$20(ModelValidationEngine.java:517)
at java.base/java.util.Optional.ifPresent(Optional.java:183)
at org.compiere.model.ModelValidationEngine.fireDocValidate(ModelValidationEngine.java:514)
at org.compiere.model.ModelValidationEngine.fireDocValidate(ModelValidationEngine.java:462)
at org.compiere.model.MInOut.completeIt(MInOut.java:1615)
at org.compiere.process.DocumentEngine.completeIt(DocumentEngine.java:558)
at org.compiere.process.DocumentEngine.prepareThenCompleteIt(DocumentEngine.java:343)
at org.compiere.process.DocumentEngine.processIt(DocumentEngine.java:317)
at org.compiere.process.DocumentEngine.processIt(DocumentEngine.java:288)
at org.compiere.model.MInOut.processIt(MInOut.java:1080)
at org.compiere.wf.MWFActivity.performWork(MWFActivity.java:861)
at org.compiere.wf.MWFActivity.run(MWFActivity.java:781)
at org.compiere.wf.MWFProcess.startNext(MWFProcess.java:341)
at org.compiere.wf.MWFProcess.checkActivities(MWFProcess.java:256)
at org.compiere.wf.MWFActivity.setWFState(MWFActivity.java:284)
at org.compiere.wf.MWFActivity.run(MWFActivity.java:784)
at org.compiere.wf.MWFProcess.startNext(MWFProcess.java:341)
at org.compiere.wf.MWFProcess.checkActivities(MWFProcess.java:256)
at org.compiere.wf.MWFActivity.setWFState(MWFActivity.java:284)
at org.compiere.wf.MWFActivity.run(MWFActivity.java:784)
at org.compiere.wf.MWFProcess.startWork(MWFProcess.java:471)
at org.compiere.wf.MWorkflow.start(MWorkflow.java:736)
at org.compiere.wf.MWorkflow.startWait(MWorkflow.java:798)
===========> ModelValidationEngine.lambda$fireDocValidate$19: null [1852]
java.lang.NullPointerException
at org.compiere.asset.model.validator.FixedAsset.docValidate(FixedAsset.java:203)
at org.compiere.model.ModelValidationEngine.lambda$fireDocValidate$19(ModelValidationEngine.java:519)
at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:177)
at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1655)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:497)
at org.compiere.model.ModelValidationEngine.lambda$fireDocValidate$20(ModelValidationEngine.java:517)
at java.base/java.util.Optional.ifPresent(Optional.java:183)
at org.compiere.model.ModelValidationEngine.fireDocValidate(ModelValidationEngine.java:514)
at org.compiere.model.ModelValidationEngine.fireDocValidate(ModelValidationEngine.java:462)
at org.compiere.model.MInOut.completeIt(MInOut.java:1615)
at org.compiere.process.DocumentEngine.completeIt(DocumentEngine.java:558)
at org.compiere.process.DocumentEngine.prepareThenCompleteIt(DocumentEngine.java:343)
at org.compiere.process.DocumentEngine.processIt(DocumentEngine.java:317)
at org.compiere.process.DocumentEngine.processIt(DocumentEngine.java:288)
at org.compiere.model.MInOut.processIt(MInOut.java:1080)
at org.compiere.wf.MWFActivity.performWork(MWFActivity.java:861)
at org.compiere.wf.MWFActivity.run(MWFActivity.java:781)
at org.compiere.wf.MWFProcess.startNext(MWFProcess.java:341)
at org.compiere.wf.MWFProcess.checkActivities(MWFProcess.java:256)
at org.compiere.wf.MWFActivity.setWFState(MWFActivity.java:284)
at org.compiere.wf.MWFActivity.run(MWFActivity.java:784)
at org.compiere.wf.MWFProcess.startNext(MWFProcess.java:341)
at org.compiere.wf.MWFProcess.checkActivities(MWFProcess.java:256)
at org.compiere.wf.MWFActivity.setWFState(MWFActivity.java:284)
at org.compiere.wf.MWFActivity.run(MWFActivity.java:784)
at org.compiere.wf.MWFProcess.startWork(MWFProcess.java:471)
at org.compiere.wf.MWorkflow.start(MWorkflow.java:736)
at org.compiere.wf.MWorkflow.startWait(MWorkflow.java:798)
-----------> MWFActivity.run: MWFNode[190-(DocComplete),Action=DocumentAction=CO] [1852]
org.adempiere.exceptions.AdempiereException: java.lang.NullPointerException
at org.compiere.model.ModelValidationEngine.lambda$fireDocValidate$19(ModelValidationEngine.java:533)
at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:177)
at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1655)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:497)
at org.compiere.model.ModelValidationEngine.lambda$fireDocValidate$20(ModelValidationEngine.java:517)
at java.base/java.util.Optional.ifPresent(Optional.java:183)
at org.compiere.model.ModelValidationEngine.fireDocValidate(ModelValidationEngine.java:514)
at org.compiere.model.ModelValidationEngine.fireDocValidate(ModelValidationEngine.java:462)
at org.compiere.model.MInOut.completeIt(MInOut.java:1615)
at org.compiere.process.DocumentEngine.completeIt(DocumentEngine.java:558)
at org.compiere.process.DocumentEngine.prepareThenCompleteIt(DocumentEngine.java:343)
at org.compiere.process.DocumentEngine.processIt(DocumentEngine.java:317)
at org.compiere.process.DocumentEngine.processIt(DocumentEngine.java:288)
at org.compiere.model.MInOut.processIt(MInOut.java:1080)
at org.compiere.wf.MWFActivity.performWork(MWFActivity.java:861)
at org.compiere.wf.MWFActivity.run(MWFActivity.java:781)
at org.compiere.wf.MWFProcess.startNext(MWFProcess.java:341)
at org.compiere.wf.MWFProcess.checkActivities(MWFProcess.java:256)
at org.compiere.wf.MWFActivity.setWFState(MWFActivity.java:284)
at org.compiere.wf.MWFActivity.run(MWFActivity.java:784)
at org.compiere.wf.MWFProcess.startNext(MWFProcess.java:341)
at org.compiere.wf.MWFProcess.checkActivities(MWFProcess.java:256)
at org.compiere.wf.MWFActivity.setWFState(MWFActivity.java:284)
at org.compiere.wf.MWFActivity.run(MWFActivity.java:784)
at org.compiere.wf.MWFProcess.startWork(MWFProcess.java:471)
at org.compiere.wf.MWorkflow.start(MWorkflow.java:736)
at org.compiere.wf.MWorkflow.startWait(MWorkflow.java:798)
-----------> MWFActivity.run: MWFNode[190-(DocComplete),Action=DocumentAction=CO] [1852]
org.adempiere.exceptions.AdempiereException: java.lang.NullPointerException
at org.compiere.model.ModelValidationEngine.lambda$fireDocValidate$19(ModelValidationEngine.java:533)
at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:177)
at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1655)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:497)
at org.compiere.model.ModelValidationEngine.lambda$fireDocValidate$20(ModelValidationEngine.java:517)
at java.base/java.util.Optional.ifPresent(Optional.java:183)
at org.compiere.model.ModelValidationEngine.fireDocValidate(ModelValidationEngine.java:514)
at org.compiere.model.ModelValidationEngine.fireDocValidate(ModelValidationEngine.java:462)
at org.compiere.model.MInOut.completeIt(MInOut.java:1615)
at org.compiere.process.DocumentEngine.completeIt(DocumentEngine.java:558)
at org.compiere.process.DocumentEngine.prepareThenCompleteIt(DocumentEngine.java:343)
at org.compiere.process.DocumentEngine.processIt(DocumentEngine.java:317)
at org.compiere.process.DocumentEngine.processIt(DocumentEngine.java:288)
at org.compiere.model.MInOut.processIt(MInOut.java:1080)
at org.compiere.wf.MWFActivity.performWork(MWFActivity.java:861)
at org.compiere.wf.MWFActivity.run(MWFActivity.java:781)
at org.compiere.wf.MWFProcess.startNext(MWFProcess.java:341)
at org.compiere.wf.MWFProcess.checkActivities(MWFProcess.java:256)
at org.compiere.wf.MWFActivity.setWFState(MWFActivity.java:284)
at org.compiere.wf.MWFActivity.run(MWFActivity.java:784)
at org.compiere.wf.MWFProcess.startNext(MWFProcess.java:341)
at org.compiere.wf.MWFProcess.checkActivities(MWFProcess.java:256)
at org.compiere.wf.MWFActivity.setWFState(MWFActivity.java:284)
at org.compiere.wf.MWFActivity.run(MWFActivity.java:784)
at org.compiere.wf.MWFProcess.startWork(MWFProcess.java:471)
at org.compiere.wf.MWorkflow.start(MWorkflow.java:736)
at org.compiere.wf.MWorkflow.startWait(MWorkflow.java:798)
Contexto adicional
Esto sucede cuando se tiene habilitado el validador de modelo org.compiere.asset.model.validator.FixedAsset
En el proceso de Setup Storage for Files System cuando se exportan los adjuntos no está tomando la transacción creada para cada adjunto, en su lugar toma la del proceso.
Se realiza una requisición de compras, y luego se crea la orden de compra desde el SB Generar orden de compra desde línea de la requisición, se selecciona el tipo de documento: Orden de Compra Nacional en la parte inferior, al crearse la orden se crea con el tipo de documento Orden de Compra Nacional, pero con el correlativo de OCI-XX, es decir, está tomando la secuencia del tipo de documento predeterminado.
Paso a Paso
Vaya al SB Generafr orden de compra desde línea de la requisición-Parámetros para la búsqueda:
Organización: Nombre de Organización
Fecha Requerida: 28/08/2023 hasta 28/08/2023
-Seleccionar la línea de la requisición RCN-7
-Información a llenar en la parte inferior:
-Tipo de Documento: Orden de Compra Nacional
-Seleccione el check de ok
Mire el error (Se genera la orden de compra con la secuencia de OCI)
Comportamiento Esperado
Que se genere la secuencia de la orden de compra según tenga configurado el documento que se selecciona en el SB.
Contexto Adicional
Esto sucede cuando se selecciona un tipo de documento en el Smart Browser, si no se selecciona funciona correctamente adempiere#4181
Cuando se usa el nuevo manejador de colas en ambientes multi-usuarios y de producción, se mezclan los datos de unos con otros, esto debido a que se definió una clase del tipo singleton
Steps to reproduce
Habilite el uso de colas para envío de correos
Con dos o más usuarios a la vez intente enviar varios correos
Se generan errores del tipo NPE por referencias cambiadas
No existe forma de generar un estado de cuentas por dimensiones contables en ADempiere, esto trae mucho problema si se desea aumarizar por columnas como Socio de Negocio, Producto u otra dimensión contable
Describe the solution you'd like
Un simple cambio en en el core para que permita cargar árboles en función de su dimensión contable.
Describe alternatives you've considered
Despúes se podrán agregar cambios al estado de cuentas para que lo haga de manera correcta
Additional context
Ésto sólo agrega la funcionalidad para cargar la consulta de árboles con una clausula where distinta.