diff --git a/ems-core/src/main/resources/rules/Integry.drl b/ems-core/src/main/resources/rules/Integry.drl index 56dab5c421..f340ca50d7 100644 --- a/ems-core/src/main/resources/rules/Integry.drl +++ b/ems-core/src/main/resources/rules/Integry.drl @@ -44,27 +44,27 @@ rule "completeDataEffettiva" no-loop when eval(completeRulesEnabled && customerDb == IntegryCustomerDB.Integry_Studioml) - $stbActivity : StbActivity(flagTipologia == "A" && parentActivityId != null && (operation == OperationType.INSERT || operation == OperationType.UPDATE || operation == OperationType.INSERT_OR_UPDATE)) + $stbActivity : StbActivity(flagTipologia == "A" && + effectiveTime != null && + parentActivityId != null && (operation == OperationType.INSERT || operation == OperationType.UPDATE || operation == OperationType.INSERT_OR_UPDATE)) then - String sql = - Query.format( - "SELECT CAST(IIF((stb_activity.effective_time IS NULL OR stb_activity.effective_time > %s), 1, 0) AS BIT) AS bool,\n" + - " stb_activity.effective_time\n" + - "FROM stb_activity\n" + - "WHERE stb_activity.activity_id = %s", - $stbActivity.getEffectiveTime(), $stbActivity.getParentActivityId() - ); - HashMap resultQuery = UtilityDB.executeSimpleQueryOnlyFirstRow(conn, sql); - boolean result = (boolean) resultQuery.get("bool"); - Date effectiveTime = (Date) resultQuery.get("effective_time"); List list = new ArrayList<>(); - - if (result) { - StbActivity parent = new StbActivity() - .setActivityId($stbActivity.getParentActivityId()) - .setEffectiveTime(effectiveTime); - parent.setOperation(OperationType.UPDATE); - list.add(parent); + if ($stbActivity.getParent() == null ) { + String sql = + Query.format( + "SELECT *\n" + + "FROM stb_activity\n" + + "WHERE stb_activity.activity_id = %s", + $stbActivity.getParentActivityId() + ); + list = UtilityDB.executeSimpleQueryDTO(conn, sql, StbActivity.class); + if (list != null && list.size() > 0 ) { + Date data = list.get(0).getEffectiveTime(); + if ( data == null || data.before($stbActivity.getEffectiveTime())){ + list.get(0).setEffectiveTime($stbActivity.getEffectiveTime()); + list.get(0).setOperation(OperationType.UPDATE); + } + } } modify ( $stbActivity ) { setStbActivity(list) } end @@ -73,37 +73,43 @@ rule "completeResultId" no-loop when eval(completeRulesEnabled && customerDb == IntegryCustomerDB.Integry_Studioml) - $stbActivity : StbActivity(flagTipologia == "A" && parentActivityId != null && (operation == OperationType.INSERT || operation == OperationType.UPDATE || operation == OperationType.INSERT_OR_UPDATE)) + $stbActivity : StbActivity(flagTipologia == "A" && parentActivityId != null && + activityResultId != null && + (operation == OperationType.INSERT || operation == OperationType.UPDATE || operation == OperationType.INSERT_OR_UPDATE)) then - String sql = - Query.format( - "WITH childActivityResult AS (SELECT *\n" + - " FROM stb_activity_result\n" + - " WHERE activity_result_id = %s)\n" + - "SELECT CAST(IIF(\n" + - " (stb_activity_result.flag_stato_attivita IS NULL OR\n" + - " stb_activity_result.flag_stato_attivita <> '4' OR\n" + - " stb_activity_result.flag_stato_attivita <> '3' OR\n" + - " stb_activity_result.flag_stato_attivita <> '1'),\n" + - " 1, 0) AS BIT) AS 'execute',\n" + - " IIF(childActivityResult.flag_stato_attivita <> 0, 'DA COMPLETARE', childActivityResult.activity_result_id) AS 'stato'\n" + - "FROM stb_activity\n" + - " CROSS APPLY childActivityResult\n" + - " LEFT OUTER JOIN stb_activity_result ON stb_activity_result.activity_result_id = stb_activity.activity_result_id\n" + - "WHERE stb_activity.activity_id = %s", - $stbActivity.getActivityResultId(), $stbActivity.getParentActivityId() - ); - HashMap resultQuery = UtilityDB.executeSimpleQueryOnlyFirstRow(conn, sql); - boolean execute = (boolean) resultQuery.get("execute"); - String stato = (String) resultQuery.get("stato"); - List list = new ArrayList<>(); - if (execute) { - StbActivity parent = new StbActivity() - .setActivityId($stbActivity.getParentActivityId()) - .setActivityResultId(stato); - parent.setOperation(OperationType.UPDATE); - list.add(parent); + List list = new ArrayList<>(); + if ($stbActivity.getParent() == null ) { + String sql = + Query.format( + "WITH childActivityResult AS (SELECT *\n" + + " FROM stb_activity_result\n" + + " WHERE activity_result_id = %s)\n" + + "SELECT CAST(IIF(\n" + + " (stb_activity_result.flag_stato_attivita IS NULL OR\n" + + " stb_activity_result.flag_stato_attivita <> '4' OR\n" + + " stb_activity_result.flag_stato_attivita <> '3' OR\n" + + " stb_activity_result.flag_stato_attivita <> '1'),\n" + + " 1, 0) AS BIT) AS 'execute',\n" + + " IIF(childActivityResult.flag_stato_attivita <> 0, 'DA COMPLETARE', childActivityResult.activity_result_id) AS 'stato'\n" + + "FROM stb_activity\n" + + " CROSS APPLY childActivityResult\n" + + " LEFT OUTER JOIN stb_activity_result ON stb_activity_result.activity_result_id = stb_activity.activity_result_id\n" + + "WHERE stb_activity.activity_id = %s", + $stbActivity.getActivityResultId(), $stbActivity.getParentActivityId() + ); + HashMap resultQuery = UtilityDB.executeSimpleQueryOnlyFirstRow(conn, sql); + boolean execute = (boolean) resultQuery.get("execute"); + String stato = (String) resultQuery.get("stato"); + + + if (execute) { + StbActivity parent = new StbActivity() + .setActivityId($stbActivity.getParentActivityId()) + .setActivityResultId(stato); + parent.setOperation(OperationType.UPDATE); + list.add(parent); + } } modify ( $stbActivity ) { setStbActivity(list) } end \ No newline at end of file