From d10544386a559080bd9577c5c7cda1b1ded2ce9e Mon Sep 17 00:00:00 2001
From: jetxarri <javier.echarri@openbravo.com>
Date: Wed, 2 Jun 2021 10:59:47 +0200
Subject: [PATCH] Fixes issue NOE-3670: Analysis of sessions not closed The
 problem was that cashup data was reaching the back without cashupcode
 property. The code was creating a new session when the first step should be
 to find an existing session becuase a cashup can not happen without a session

---
 .../openbravo/retail/sessions/SessionModel.java   | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/src/org/openbravo/retail/sessions/SessionModel.java b/src/org/openbravo/retail/sessions/SessionModel.java
index 585a331..3c8d1bf 100644
--- a/src/org/openbravo/retail/sessions/SessionModel.java
+++ b/src/org/openbravo/retail/sessions/SessionModel.java
@@ -34,6 +34,21 @@ public class SessionModel {
     TerminalSessions session;
     if (cashupCode == null) {
       session = null;
+
+      // Can not exists a cashup without a previous session so let's try to find instead of creating
+      // directly
+      OBCriteria<TerminalSessions> criteria = OBDal.getInstance()
+          .createCriteria(TerminalSessions.class);
+      // sometimes the user's org has changed, don't filter on it, the terminal
+      // join below already takes care of this.
+      criteria.setFilterOnReadableOrganization(false);
+      criteria.add(Restrictions.eq(TerminalSessions.PROPERTY_POSTERMINAL, terminal));
+      criteria.add(Restrictions.or(Restrictions.isNull(TerminalSessions.PROPERTY_CLOSED),
+          Restrictions.eq(TerminalSessions.PROPERTY_CLOSEDWHERE, "B")));
+      criteria.add(Restrictions.le(TerminalSessions.PROPERTY_OPENED, cashup.getCashUpDate()));
+      List<TerminalSessions> sessionsList = criteria.list();
+      session = sessionsList.size() > 0 ? sessionsList.get(0) : null;
+
     } else {
       OBCriteria<TerminalSessions> criteria = OBDal.getInstance()
           .createCriteria(TerminalSessions.class);
-- 
2.27.0

