Openbravo Issue Tracking System - Modules
View Issue Details
0050567ModulesAdvanced Warehouse Operationspublic2022-10-18 11:352022-10-18 15:24
vmromanos 
vmromanos 
immediatecriticalalways
closedfixed 
5
 
 
2022-09-17
https://gitlab.com/openbravo/product/pmods/org.openbravo.warehouse.advancedwarehouseoperations/-/commit/a93c6528a0132864982fbfc7347556e80198fe0d#725d82d52cf130dd9ad73f6ac6f7d867e6f94dd6_77_77 [^]
Pre packaging ( pi )
0050567: Inventory Count stopped working when routing is automatic confirmation
A NullPointerException is thrown when confirming a shared inventory count and the routing is configured as automatic confirmation:

2022-10-17 18:12:28,813 [http-9] ERROR org.openbravo.warehouse.advancedwarehouseoperations.mobile.processors.InventoryCountConfirmProcessor - java.lang.NullPointerException
org.openbravo.base.exception.OBException: java.lang.NullPointerException
at org.openbravo.warehouse.advancedwarehouseoperations.utils.inventorycount.PhysicalInventoryProposalLinesCreator.createAndProcessPhysicalInventoryProposalByMergingUsersCountsAndGenerateTasks(PhysicalInventoryProposalLinesCreator.java:55) ~[classes/:?]
at org.openbravo.warehouse.advancedwarehouseoperations.utils.inventorycount.InventoryCount_EndCount.postConfirm(InventoryCount_EndCount.java:41) ~[classes/:?]
at org.openbravo.warehouse.advancedwarehouseoperations.utils.inventorycount.InventoryCountAction.confirm(InventoryCountAction.java:65) ~[classes/:?]
at org.openbravo.warehouse.advancedwarehouseoperations.utils.inventorycount.InventoryCountLifeCycleManager.executeInventoryCountActionHook(InventoryCountLifeCycleManager.java:91) ~[classes/:?]
at org.openbravo.warehouse.advancedwarehouseoperations.utils.inventorycount.InventoryCountLifeCycleManager.doAction(InventoryCountLifeCycleManager.java:64) ~[classes/:?]
at org.openbravo.warehouse.advancedwarehouseoperations.mobile.processors.InventoryCountConfirmProcessor.exec(InventoryCountConfirmProcessor.java:39) [classes/:?]
at org.openbravo.mobile.core.process.JSONProcessSimple.exec(JSONProcessSimple.java:47) [classes/:?]
at org.openbravo.mobile.core.process.SecuredJSONProcess.secureExec(SecuredJSONProcess.java:63) [classes/:?]
at org.openbravo.mobile.core.process.MobileServiceProcessor.execProcess(MobileServiceProcessor.java:121) [classes/:?]
at org.openbravo.mobile.core.process.MobileServiceProcessor.execServiceName(MobileServiceProcessor.java:96) [classes/:?]
at org.openbravo.mobile.core.process.MobileService.doGetOrPost(MobileService.java:194) [classes/:?]
at org.openbravo.mobile.core.process.MobileService.doPost(MobileService.java:73) [classes/:?]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:661) [tomcat8-servlet-api.jar:?]
at org.openbravo.base.HttpBaseServlet.serviceInitialized(HttpBaseServlet.java:200) [openbravo-core.jar:?]
at org.openbravo.base.secureApp.HttpSecureAppServlet.service(HttpSecureAppServlet.java:459) [classes/:?]
at org.openbravo.client.kernel.BaseKernelServlet.callServiceInSuper(BaseKernelServlet.java:89) [classes/:?]
at org.openbravo.mobile.core.process.WebServiceAuthenticatedServlet.service(WebServiceAuthenticatedServlet.java:67) [classes/:?]
at org.openbravo.mobile.core.process.MobileService.service(MobileService.java:132) [classes/:?]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:742) [tomcat8-servlet-api.jar:?]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) [tomcat8-catalina-8.5.39.jar:8.5.39]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat8-catalina-8.5.39.jar:8.5.39]
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) [tomcat8-websocket-8.5.39.jar:8.5.39]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat8-catalina-8.5.39.jar:8.5.39]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat8-catalina-8.5.39.jar:8.5.39]
at org.openbravo.utils.SessionExpirationFilter.doFilter(SessionExpirationFilter.java:66) [openbravo-core.jar:?]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat8-catalina-8.5.39.jar:8.5.39]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat8-catalina-8.5.39.jar:8.5.39]
at org.openbravo.utils.CharsetFilter.doFilter(CharsetFilter.java:38) [openbravo-core.jar:?]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat8-catalina-8.5.39.jar:8.5.39]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat8-catalina-8.5.39.jar:8.5.39]
at org.openbravo.client.kernel.KernelFilter$1.doAction(KernelFilter.java:65) [classes/:?]
at org.openbravo.dal.core.ThreadHandler.run(ThreadHandler.java:47) [classes/:?]
at org.openbravo.client.kernel.KernelFilter.doFilter(KernelFilter.java:74) [classes/:?]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat8-catalina-8.5.39.jar:8.5.39]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat8-catalina-8.5.39.jar:8.5.39]
at org.openbravo.dal.core.DalRequestFilter$1.doAction(DalRequestFilter.java:96) [classes/:?]
at org.openbravo.dal.core.ThreadHandler.run(ThreadHandler.java:47) [classes/:?]
at org.openbravo.dal.core.DalRequestFilter.doFilter(DalRequestFilter.java:118) [classes/:?]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat8-catalina-8.5.39.jar:8.5.39]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat8-catalina-8.5.39.jar:8.5.39]
at org.apache.logging.log4j.web.Log4jServletFilter.doFilter(Log4jServletFilter.java:71) [log4j-web-2.17.1.jar:2.17.1]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat8-catalina-8.5.39.jar:8.5.39]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat8-catalina-8.5.39.jar:8.5.39]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:200) [tomcat8-catalina-8.5.39.jar:8.5.39]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) [tomcat8-catalina-8.5.39.jar:8.5.39]
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:493) [tomcat8-catalina-8.5.39.jar:8.5.39]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137) [tomcat8-catalina-8.5.39.jar:8.5.39]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81) [tomcat8-catalina-8.5.39.jar:8.5.39]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) [tomcat8-catalina-8.5.39.jar:8.5.39]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) [tomcat8-catalina-8.5.39.jar:8.5.39]
at org.apache.coyote.ajp.AjpProcessor.service(AjpProcessor.java:476) [tomcat8-coyote-8.5.39.jar:8.5.39]
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) [tomcat8-coyote-8.5.39.jar:8.5.39]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:806) [tomcat8-coyote-8.5.39.jar:8.5.39]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1498) [tomcat8-coyote-8.5.39.jar:8.5.39]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat8-coyote-8.5.39.jar:8.5.39]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) [?:?]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) [?:?]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat8-util-8.5.39.jar:8.5.39]
at java.lang.Thread.run(Thread.java:829) [?:?]
Caused by: java.lang.NullPointerException
at org.openbravo.warehouse.advancedwarehouseoperations.centralbroker.InventoryCountGenerator.createPhysicalInventoryHeaderFromTask(InventoryCountGenerator.java:77) ~[classes/:?]
at org.openbravo.warehouse.advancedwarehouseoperations.centralbroker.InventoryCountGenerator.createPhysicalInventoryFromTask(InventoryCountGenerator.java:58) ~[classes/:?]
at org.openbravo.warehouse.advancedwarehouseoperations.centralbroker.InventoryCountGenerator.createTransactionDocHeader(InventoryCountGenerator.java:51) ~[classes/:?]
at org.openbravo.warehouse.advancedwarehouseoperations.centralbroker.InventoryCountGenerator.createTransactionDocHeader(InventoryCountGenerator.java:36) ~[classes/:?]
at org.openbravo.warehouse.advancedwarehouseoperations.centralbroker.TransactionDocGenerator.createAndSetTransactionDocHeader(TransactionDocGenerator.java:74) ~[classes/:?]
at org.openbravo.warehouse.advancedwarehouseoperations.centralbroker.IndividualTaskConfirmator.processIndividualTask(IndividualTaskConfirmator.java:40) ~[classes/:?]
at org.openbravo.warehouse.advancedwarehouseoperations.centralbroker.CentralBroker.processIndividualTask(CentralBroker.java:213) ~[classes/:?]
at org.openbravo.warehouse.advancedwarehouseoperations.task.AutoConfirmatorIndividualTask.autoConfirmNonBehaveAsGroupTaskBasedOnRoutingConfiguration(AutoConfirmatorIndividualTask.java:47) ~[classes/:?]
at org.openbravo.warehouse.advancedwarehouseoperations.task.AutoConfirmatorIndividualTask.run(AutoConfirmatorIndividualTask.java:33) ~[classes/:?]
at org.openbravo.warehouse.advancedwarehouseoperations.task.TasksGenerator.createTasksAndRunsPostCreateTaskHookForEachTask(TasksGenerator.java:108) ~[classes/:?]
at org.openbravo.warehouse.advancedwarehouseoperations.task.TasksGenerator.run(TasksGenerator.java:71) ~[classes/:?]
at org.openbravo.warehouse.advancedwarehouseoperations.centralbroker.InventoryTransactionTypeAlgorithm.executeAlgorithm(InventoryTransactionTypeAlgorithm.java:254) ~[classes/:?]
at org.openbravo.warehouse.advancedwarehouseoperations.centralbroker.BatchOfTasksGenerator.createBatchOfTasksUsingItt(BatchOfTasksGenerator.java:199) ~[classes/:?]
at org.openbravo.warehouse.advancedwarehouseoperations.centralbroker.BatchOfTasksGenerator.createBatchOfTasksIfIttAlgorithmInstanceFound(BatchOfTasksGenerator.java:151) ~[classes/:?]
at org.openbravo.warehouse.advancedwarehouseoperations.centralbroker.BatchOfTasksGenerator.run(BatchOfTasksGenerator.java:117) ~[classes/:?]
at org.openbravo.warehouse.advancedwarehouseoperations.centralbroker.CentralBroker.doTheStuff(CentralBroker.java:159) ~[classes/:?]
at org.openbravo.warehouse.advancedwarehouseoperations.centralbroker.CentralBroker.doTheStuff(CentralBroker.java:109) ~[classes/:?]
at org.openbravo.warehouse.advancedwarehouseoperations.utils.InventoryProposalUtils.completeInventoryProposalAndGenerateTasks(InventoryProposalUtils.java:205) ~[classes/:?]
at org.openbravo.warehouse.advancedwarehouseoperations.utils.inventorycount.PhysicalInventoryProposalLinesCreator.createAndProcessPhysicalInventoryProposalByMergingUsersCountsAndGenerateTasks(PhysicalInventoryProposalLinesCreator.java:52) ~[classes/:?]
... 58 more


The regression was introduced by the Inventory Reason Project
Login into AWO-QA admin in backend

Go to Warehouse Definition, and select US West Coast.
In the Routing tab, search for "STGn-STGn/AC" (STGn to STGn (PIi) AutoConf), and change Confirmation to Automatic

Create a new Inventory Count:
  Org: US West Coast
  Warehouse: US West Coast
  Shared Count = Y

Press Assign button and select AWOQAAdmin, set Start Count Now = Y and press Done

Go to Users | Shared Counts tab
Create a new record for any product in Food001 bin, like for example Orange.
Set any quantity different from the book quantity, for example 100.

Press End Count. An exception is raised [java.lang.NullPointerException]
No tags attached.
caused by feature request 0050091 closed Triage Omni WMS Retail Modules Makes possible to add inventory reasons predefined by users in the Back office and use them in the front end 
Issue History
2022-10-18 11:35vmromanosNew Issue
2022-10-18 11:35vmromanosAssigned To => vmromanos
2022-10-18 11:35vmromanosRegression date => 2022-09-17
2022-10-18 11:35vmromanosRegression introduced by commit => https://gitlab.com/openbravo/product/pmods/org.openbravo.warehouse.advancedwarehouseoperations/-/commit/a93c6528a0132864982fbfc7347556e80198fe0d#725d82d52cf130dd9ad73f6ac6f7d867e6f94dd6_77_77 [^]
2022-10-18 11:35vmromanosRegression level => Pre packaging ( pi )
2022-10-18 11:36vmromanosRelationship addedcaused by 0050091
2022-10-18 11:45hgbotNote Added: 0142224
2022-10-18 11:57vmromanosNote Added: 0142225
2022-10-18 11:58vmromanosStatusnew => scheduled
2022-10-18 15:24hgbotResolutionopen => fixed
2022-10-18 15:24hgbotStatusscheduled => closed
2022-10-18 15:24hgbotNote Added: 0142233
2022-10-18 15:24hgbotNote Added: 0142234

Notes
(0142224)
hgbot   
2022-10-18 11:45   
Merge Request created: https://gitlab.com/openbravo/product/pmods/org.openbravo.warehouse.advancedwarehouseoperations/-/merge_requests/71 [^]
(0142225)
vmromanos   
2022-10-18 11:57   
Test plan:

Login into AWO-QA admin in backend

Go to Warehouse Definition, and select US West Coast.
In the Routing tab, search for "STGn-STGn/AC" (STGn to STGn (PIi) AutoConf), and change Confirmation to Automatic

Create a new Inventory Count:
  Org: US West Coast
  Warehouse: US West Coast
  Shared Count = Y

Press Assign button and select AWOQAAdmin, set Start Count Now = Y and press Done

Go to Users | Shared Counts tab
Create a new record for any product in Food001 bin, like for example Orange.
Set any quantity different from the book quantity, for example 100.

Press End Count. The process is completed successfully.
(0142233)
hgbot   
2022-10-18 15:24   
Directly closing issue as related merge request is already approved.

Repository: https://gitlab.com/openbravo/product/pmods/org.openbravo.warehouse.advancedwarehouseoperations [^]
Changeset: c168208a58dfceec1d3a2a4a58c01e408a47083f
Author: Víctor Martínez Romanos <victor.martinez@openbravo.com>
Date: 18-10-2022 11:38:43
URL: https://gitlab.com/openbravo/product/pmods/org.openbravo.warehouse.advancedwarehouseoperations/-/commit/c168208a58dfceec1d3a2a4a58c01e408a47083f [^]

Fixed ISSUE-50567: Fixed NPE when autoconfirming Inventory Count Task

In Count_ITT.createInventoryList() the inventory list is created and associated
to the task using an HQL update, which works fine.

However, when autoconfirming the task, the task object in DAL memory doesn't have
associated yet the inventory list, therefore throwing the NPE.

We could refresh the task from the database to get that information,
however it is faster to take this information from the Inventory Proposal,
which is previously associated to the task (and loaded in memory).

---
M src/org/openbravo/warehouse/advancedwarehouseoperations/centralbroker/InventoryCountGenerator.java
---
(0142234)
hgbot   
2022-10-18 15:24   
Merge request merged: https://gitlab.com/openbravo/product/pmods/org.openbravo.warehouse.advancedwarehouseoperations/-/merge_requests/71 [^]