From 4361215ce1eb0a585fe43f5fec96a126616e96f0 Mon Sep 17 00:00:00 2001 From: MinaR Date: Tue, 11 Feb 2025 12:36:37 +0100 Subject: [PATCH] modifiche a servizio di task --- .../ems/activity/service/ActivityService.java | 282 +++++++----------- 1 file changed, 111 insertions(+), 171 deletions(-) diff --git a/ems-engine/src/main/java/it/integry/ems/activity/service/ActivityService.java b/ems-engine/src/main/java/it/integry/ems/activity/service/ActivityService.java index 18256e709a..e1f6146241 100644 --- a/ems-engine/src/main/java/it/integry/ems/activity/service/ActivityService.java +++ b/ems-engine/src/main/java/it/integry/ems/activity/service/ActivityService.java @@ -852,72 +852,31 @@ public class ActivityService { isPersonaRif = UtilityHashMap.getValueIfExists(datiUtente, "isPersonaRif"); } - sql = "WITH escludi_commesse AS (SELECT value_string cod_jcom\n" + - " FROM dbo.parsestringintoarray((SELECT value\n" + + sql = "WITH escludi_commesse AS (SELECT value cod_jcom\n" + + " FROM string_split((SELECT value\n" + " FROM stb_gest_setup\n" + " WHERE gest_name = 'STB_ACTIVITY'\n" + " AND section = 'SETUP'\n" + - " AND key_section = 'ESCLUDI_COMMESSE'), '|') s),\n" + - " sottoattivita AS (SELECT stb_activity.parent_activity_id,\n" + - " MAX(CASE\n" + - " WHEN effective_date <= CAST(GETDATE() AS DATE) THEN effective_date\n" + - " ELSE NULL END) AS last_activity_date,\n" + - " MIN(CASE\n" + - " WHEN estimated_date >= CAST(GETDATE() AS DATE) THEN estimated_date\n" + - " ELSE NULL END) AS next_activity_date,\n" + - " MAX(CASE\n" + - " WHEN ((estimated_date BETWEEN dbo.f_getfirstdayofweek(GETDATE()) AND dbo.f_getlastdayofweek(GETDATE()) OR\n" + - " estimated_date IS NULL) and effective_date is null) \n" + - " THEN stb_activity.activity_description\n" + - " ELSE NULL END) AS activity_description,\n" + - " MAX(CASE\n" + - " WHEN IsNull(effective_date, estimated_date) BETWEEN dbo.f_getfirstdayofweek(GETDATE()) AND dbo.f_getlastdayofweek(GETDATE())\n" + - " THEN 1\n" + - " ELSE 0 END) AS planned_this_week,\n" + - " MAX(CASE\n" + - " WHEN IsNull(effective_date, estimated_date) between dbo.f_getfirstdayofweek(DateAdd(week, -1, GETDATE())) AND dbo.f_getLastDayOfWeek(DateAdd(week, -1, GETDATE())) THEN 1\n" + - " ELSE 0 END) AS planned_previous_week,\n" + - " MAX(CASE\n" + - " WHEN IsNull(effective_date, estimated_date) between dbo.f_getfirstdayofweek(DateAdd(week, 1, GETDATE())) AND dbo.f_getLastDayOfWeek(DateAdd(week, 1, GETDATE())) THEN 1\n" + - " ELSE 0 END) AS planned_next_week,\n" + - " MAX(CASE\n" + - " WHEN effective_date is not null AND effective_date BETWEEN dbo.f_getfirstdayofmonth(GETDATE()) AND EOMONTH(GETDATE())\n" + - " THEN 1\n" + - " ELSE 0 END) AS done_this_month,\n" + - " MAX(CASE\n" + - " WHEN effective_date is not null AND effective_date BETWEEN dbo.f_getfirstdayofmonth(DateAdd(MONTH, -1, GETDATE())) AND EOMONTH(DateAdd(MONTH, -1, GETDATE())) THEN 1\n" + - " ELSE 0 END) AS done_previous_month,\n" + - " MAX(CASE\n" + - " WHEN effective_date is not null AND DATEPART(QUARTER, effective_date) = DATEPART(QUARTER, GETDATE())\n" + - " THEN 1\n" + - " ELSE 0 END) AS done_this_quarter,\n" + - " MAX(CASE\n" + - " WHEN effective_date is not null AND DATEPART(QUARTER, effective_date) = Datepart(quarter, dateadd(month, -3, getdate())) THEN 1\n" + - " ELSE 0 END) AS done_previous_quarter,\n" + - " SUM(jtb_rlavr.ore) AS ore\n" + - " FROM stb_activity\n" + - " INNER JOIN stb_user ON stb_activity.user_name = stb_user.user_name\n" + - " LEFT OUTER JOIN jtb_rlavr ON stb_activity.activity_id = jtb_rlavr.activity_id\n" + - " WHERE stb_activity.flag_tipologia = 'A'\n" + - (isTable || daInstallare ? "" : " AND stb_activity.user_name = '" + username + "'") + - " GROUP BY stb_activity.parent_activity_id),\n" + - " processi AS (SELECT stb_activity.cod_jcom,\n" + + " AND key_section = 'ESCLUDI_COMMESSE'), '|') s)\n" + + " SELECT stb_activity.cod_jcom as 'Commessa',\n" + " stb_activity.user_name,\n" + - " stb_activity.activity_id,\n" + + " stb_activity.activity_id as 'Id_Attivita',\n" + " stb_activity.parent_activity_id,\n" + - " stb_activity.activity_description,\n" + - " stb_activity.estimated_time,\n" + - " stb_activity.estimated_endtime,\n" + - " stb_activity.effective_time,\n" + - " stb_activity.effective_endtime,\n" + + " stb_activity.activity_description as 'Descrizione',\n" + + " stb_activity.estimated_time as 'Data_Inizio_prev',\n" + + " stb_activity.estimated_endtime as 'data_fine_prev',\n" + + " stb_activity.effective_time as 'Data_Inizio_Effettiva',\n" + + " stb_activity.effective_endtime as 'Data_Fine_Effettiva',\n" + " stb_activity.flag_risolto,\n" + - " stb_activity.estimated_hours,\n" + - " stb_activity.activity_result_id AS 'esito',\n" + + " stb_activity.estimated_hours as 'Ore_Stimate',\n" + + " CAST(CASE WHEN stb_activity.effective_endtime IS NULL THEN 0 ELSE 1 END AS BIT) AS 'attivita_chiusa', \n" + + " stb_activity.activity_result_id AS 'Esito',\n" + " stb_activity.result_description AS 'descr_esito',\n" + " ISNULL(stb_activity.priorita, 0) AS 'priorita',\n" + " stb_activity.activity_type_id AS 'tipo_attivita',\n" + " IsNull(stb_activity.ora_ins_act, stb_activity.data_ins_act) AS 'data_inserimento',\n" + - " stb_activity.ora_mod_act AS 'ultima_modifica',\n" + + " stb_activity.ora_mod_act AS 'ultima_modifica'," + + " CAST(CASE WHEN estimated_enddate < CAST(GETDATE() AS DATE) THEN 1 ELSE 0 END AS BIT) AS scaduta,\n" + " stb_activity.persona_rif AS 'richiedente',\n" + " stb_activity.estimated_enddate,\n" + " stb_activity.cod_mart AS cod_mart,\n" + @@ -926,11 +885,11 @@ public class ActivityService { " ELSE ISNULL(mtb_aart.descr_cassa, mtb_aart.descrizione) END AS descr_prodotto,\n" + " stb_activity.user_creator,\n" + " stb_activity.note,\n" + - " stb_user.full_name,\n" + + " stb_user.full_name as 'Responsabile',\n" + " parent.responabile_progetto,\n" + " ISNULL(parent.project_description, '') AS 'project_description',\n" + " ISNULL(parent.activity_description, 'Altre Attività') AS 'parent_activity_description',\n" + - " creator.full_name AS 'user_creator_name',\n" + + " creator.full_name AS 'creata_da',\n" + " parent.activity_type_id AS 'parent_activity_type',\n" + " CASE\n" + " WHEN stb_activity_result.flag_stato_attivita IS NULL THEN 0 --backlog\n" + @@ -944,33 +903,17 @@ public class ActivityService { " CAST(ISNULL(integry_tag.is_bug, 0) AS BIT) AS is_bug,\n" + " integry_tag.tags,\n" + " DENSE_RANK() OVER (ORDER BY parent.project_description, parent.activity_description) AS 'id_processo',\n" + - " gtb_anag.rag_soc"; - + " gtb_anag.rag_soc,\n " + + " task.dapagare AS da_pagare,\n " + + " task.acanone AS a_canone\n "; if (daInstallare) { - sql += ", lastUpdt.data \n"; + sql += ", lastUpdt.data AS 'ultimo_aggiornamento'\n"; } else { - sql += ", null AS 'data' \n"; + sql += ", null AS 'ultimo_aggiornamento'\n"; } - sql += " FROM stb_activity\n" + - " INNER JOIN stb_user ON stb_activity.user_name = stb_user.user_name\n"; - - if (year == null && activityId == null) { - sql += " INNER JOIN (SELECT *\n" + - " FROM jtb_comt\n" + - " WHERE stato_commessa IN ('IN CORSO', 'POST VENDITA', 'TRATTATIVA')) jtb_comt\n" + - " ON stb_activity.cod_jcom = jtb_comt.cod_jcom\n"; - } else if (activityId == null) { - sql += " INNER JOIN (SELECT *\n" + - " FROM jtb_comt\n" + - " WHERE stato_commessa = 'CHIUSA'\n" + - " AND (YEAR(data_inizi_lav) = " + year + " OR YEAR(data_cons) = " + year + ")) jtb_comt\n" + - " ON stb_activity.cod_jcom = jtb_comt.cod_jcom\n"; - } else { - sql += " INNER JOIN jtb_comt ON stb_activity.cod_jcom = jtb_comt.cod_jcom\n"; - } - - sql += " INNER JOIN stb_user creator ON stb_activity.user_creator = creator.user_name\n" + + " INNER JOIN stb_user ON stb_activity.user_name = stb_user.user_name\n" + + " INNER JOIN stb_user creator ON stb_activity.user_creator = creator.user_name\n" + " LEFT OUTER JOIN pvw_clienti_prospect gtb_anag on stb_activity.cod_anag = gtb_anag.cod_ppro and stb_activity.tipo_anag = gtb_anag.tipologia\n" + " AND gtb_anag.flag_stato = 'A'\n" + " LEFT OUTER JOIN mtb_aart ON stb_activity.cod_mart = mtb_aart.cod_mart\n" + @@ -987,7 +930,10 @@ public class ActivityService { " ON stb_activity.parent_activity_id = parent.activity_id\n" + " LEFT OUTER JOIN stb_activity_result\n" + " ON stb_activity.activity_result_id = stb_activity_result.activity_result_id\n" + - " LEFT OUTER JOIN integry_tag ON stb_activity.activity_id = integry_tag.activity_id\n"; + " LEFT OUTER JOIN integry_tag ON stb_activity.activity_id = integry_tag.activity_id \n" + + " OUTER APPLY ( SELECT CAST(MAX(CASE WHEN task.cod_jfas <> 'C01' THEN 0 ELSE 1 END) AS BIT) AS daPagare,\n" + + " CAST(MAX(CASE WHEN task.cod_jfas = 'C01' THEN 0 ELSE 1 END) AS BIT) AS aCanone \n" + + " FROM stb_activity task WHERE stb_activity.activity_id = task.parent_activity_id) task "; if (daInstallare) { sql += " LEFT OUTER JOIN integry_last_upd_clie lastUpdt ON stb_activity.cod_anag = lastUpdt.cod_anag\n"; @@ -997,103 +943,47 @@ public class ActivityService { " AND NOT EXISTS(SELECT *\n" + " FROM escludi_commesse\n" + " WHERE stb_activity.cod_jcom = escludi_commesse.cod_jcom)\n" + - " AND stb_activity.activity_type_id IN (SELECT activity_type_id\n" + - " FROM srl_activity_type\n" + - " WHERE activity_type_id IN\n" + - " (SELECT srl_activity_type.activity_type_id\n" + - " FROM srl_activity_type,\n" + - " stb_activity_type\n" + - " WHERE srl_activity_type.flag_tipologia = 'P'\n" + - " AND srl_activity_type.activity_type_id_next =\n" + - " stb_activity_type.activity_type_id\n" + - " AND srl_activity_type.flag_tipologia_next =\n" + - " stb_activity_type.flag_tipologia\n" + - " AND stb_activity_type.flag_attiva = 'S'\n" + - " GROUP BY srl_activity_type.activity_type_id\n" + - " HAVING COUNT(DISTINCT flag_tipologia_next) = 1)\n"; - + " AND EXISTS (SELECT *\n" + + " FROM srl_activity_type inner join stb_activity_type a on srl_activity_type.activity_type_id_next = a.activity_type_id\n" + + " WHERE stb_activity.activity_type_id = srl_activity_type.activity_type_id\n" + + " and srl_activity_type.flag_tipologia = 'P' \n"; if (activityId == null) { - sql += " AND flag_tipologia_next = 'A'\n"; + sql += " and srl_activity_type.flag_tipologia_next = 'A' \n"; + } + sql += " and a.flag_attiva = 's'\n" + + " GROUP BY srl_activity_type.activity_type_id\n" + + " HAVING sum(IIF(flag_tipologia_next = 'A',0,1)) = 0 )\n " ; + + if (year == null && activityId == null) { + sql += " AND EXISTS (SELECT *\n" + + " FROM jtb_comt\n" + + " WHERE stato_commessa IN ('IN CORSO', 'POST VENDITA', 'TRATTATIVA')\n" + + " AND stb_activity.cod_jcom = jtb_comt.cod_jcom) \n"; + } else if (activityId == null) { + sql += " AND EXISTS (SELECT *\n" + + " FROM jtb_comt\n" + + " WHERE stato_commessa = 'CHIUSA'\n" + + " AND (YEAR(data_inizi_lav) = " + year + " OR YEAR(data_cons) = " + year + ")\n" + + " AND stb_activity.cod_jcom = jtb_comt.cod_jcom )\n"; } - sql += " ))\n" + - "\n" + - "SELECT processi.cod_jcom AS 'Commessa',\n" + - " processi.user_name,\n" + - " processi.full_name AS 'Responsabile',\n" + - " processi.cod_mart,\n" + - " processi.descr_prodotto,\n" + - " processi.project_description,\n" + - " processi.parent_activity_description,\n" + - " processi.parent_activity_type,\n" + - " processi.tipo_attivita,\n" + - " processi.data_inserimento,\n" + - " processi.ultima_modifica,\n" + - " processi.activity_id AS 'Id_Attivita',\n" + - " processi.activity_description AS 'Descrizione',\n" + - " processi.effective_time AS 'Data_Inizio_Effettiva',\n" + - " processi.effective_endtime AS 'Data_Fine_Effettiva',\n" + - " processi.estimated_hours 'Ore_Stimate',\n" + - " processi.esito AS 'Esito',\n" + - " processi.priorita,\n" + - " CAST(CASE WHEN processi.effective_endtime IS NULL THEN 0 ELSE 1 END AS BIT) AS 'attivita_chiusa',\n" + - " processi.estimated_time AS 'Data_Inizio_prev',\n" + - " processi.estimated_endtime AS 'data_fine_prev',\n" + - " processi.descr_esito,\n" + - " id_processo,\n" + - " processi.parent_activity_id,\n" + - " processi.richiedente,\n" + - " processi.responabile_progetto,\n" + - " CAST(ISNULL(sottoattivita.planned_previous_week, 0) AS BIT) AS planned_previous_week,\n" + - " CAST(ISNULL(sottoattivita.planned_next_week, 0) AS BIT) AS planned_next_week,\n" + - " CAST(ISNULL(sottoattivita.planned_this_week, 0) AS BIT) AS planned_this_week,\n" + - " CAST(ISNULL(sottoattivita.done_this_month, 0) AS BIT) AS done_this_month,\n" + - " CAST(ISNULL(sottoattivita.done_previous_month, 0) AS BIT) AS done_previous_month,\n" + - " CAST(ISNULL(sottoattivita.done_this_quarter, 0) AS BIT) AS done_this_quarter,\n" + - " CAST(ISNULL(sottoattivita.done_previous_quarter, 0) AS BIT) AS done_previous_quarter,\n" + - " stato_attivita,\n" + - " is_bug,\n" + - " tags,\n" + - " CAST(CASE WHEN estimated_enddate < CAST(GETDATE() AS DATE) THEN 1 ELSE 0 END AS BIT) AS scaduta,\n" + - " processi.user_creator,\n" + - " processi.user_creator_name AS 'creata_da',\n" + - " processi.note,\n" + - " sottoattivita.last_activity_date AS 'data_ult_attivita',\n" + - " ISNULL(sottoattivita.ore, 0) AS 'Ore_tot',\n" + - " sottoattivita.next_activity_date AS 'data_prossima_attivita',\n" + - " processi.rag_soc,\n" + - " processi.data AS 'ultimo_aggiornamento',\n" + - " processi.flag_risolto,\n" + - " CASE\n" + - " WHEN sottoattivita.activity_description <> processi.activity_description\n" + - " THEN sottoattivita.activity_description\n" + - " ELSE\n" + - " '' END AS 'descrizione_sottoattivita',\n" + - " task.daPagare as da_pagare,\n" + - " task.aCanone as a_canone " + - "FROM processi\n" + - " LEFT OUTER JOIN sottoattivita ON processi.activity_id = sottoattivita.parent_activity_id\n" + - " OUTER APPLY ( SELECT CAST(MAX(CASE WHEN task.cod_jfas <> 'C01' THEN 0 ELSE 1 END) AS BIT) AS daPagare,\n" + - " CAST(MAX(CASE WHEN task.cod_jfas = 'C01' THEN 0 ELSE 1 END) AS BIT) AS aCanone \n" + - " FROM stb_activity task WHERE processi.activity_id = task.parent_activity_id) task "; - if (!isTable) { - sql += " WHERE processi.effective_endtime IS NULL " + - " AND processi.tipo_attivita <> 'AGGIORNAMENTI SOFTWARE'"; + sql += " AND stb_activity.effective_endtime IS NULL " + + " AND stb_activity.activity_type_id <> 'AGGIORNAMENTI SOFTWARE'"; if (daInstallare) { - sql += " AND esito = 'DA INSTALLARE' AND cod_jcom not like 'INTEGRY%'"; + sql += " AND stb_activity.activity_result_id = 'DA INSTALLARE' AND cod_jcom not like 'INTEGRY%'"; } } else if (activityId != null) { - sql += " WHERE processi.activity_id = " + UtilityDB.valueToString(activityId); + sql += " AND stb_activity.activity_id = " + UtilityDB.valueToString(activityId); } else if (isCliente) { - sql += " WHERE esito NOT IN ('ANNULLATA', 'SOSPESA')"; + sql += " AND stb_activity.activity_result_id NOT IN ('ANNULLATA', 'SOSPESA')"; if (isPersonaRif) { String whereCondPersRif = Query.format(" AND EXISTS( SELECT *\n" + " from stb_user s inner join vtb_clie_pers_rif on s.e_mail = vtb_clie_pers_rif.e_mail\n" + - " where S.USER_NAME = %s and vtb_clie_pers_rif.persona_rif = processi.richiedente )", + " where S.USER_NAME = %s and vtb_clie_pers_rif.persona_rif = stb_activity.richiedente )", requestDataDTO.getUsername()); sql += whereCondPersRif; } @@ -1101,12 +991,62 @@ public class ActivityService { List activityDTOS = UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), sql, ActivityDTO.class); List elencoId = Stream.of(activityDTOS).map(ActivityDTO::getIdAttivita).toList(); - - sql = "select parent_activity_id, stb_activity.user_name, full_name, ISNULL(SUM(jtb_rlavr.ore), 0) as 'ore_fatte'\n" + - "FROM stb_activity \n" + - "INNER JOIN stb_user ON stb_activity.user_name = stb_user.user_name LEFT OUTER JOIN jtb_rlavr ON stb_activity.activity_id = jtb_rlavr.activity_id\n" + - "where stb_activity.parent_activity_id in (" + UtilityDB.listValueToString(elencoId) + ")\n" + - "group by parent_activity_id, stb_activity.user_name, full_name"; + sql = + "SELECT stb_activity.parent_activity_id,\n" + + " stb_activity.user_name,\n" + + " stb_user.full_name,\n" + + " MAX(CASE\n" + + " WHEN effective_date <= CAST(GETDATE() AS DATE) THEN effective_date\n" + + " ELSE NULL END) AS last_activity_date,\n" + + " MIN(CASE\n" + + " WHEN estimated_date >= CAST(GETDATE() AS DATE) THEN estimated_date\n" + + " ELSE NULL END) AS next_activity_date,\n" + + " MAX(CASE\n" + + " WHEN (\n" + + " (estimated_date BETWEEN dbo.f_getfirstdayofweek(GETDATE()) AND dbo.f_getlastdayofweek(GETDATE()) OR\n" + + " estimated_date IS NULL) AND effective_date IS NULL)\n" + + " THEN stb_activity.activity_description\n" + + " ELSE NULL END) AS activity_description,\n" + + " MAX(CASE\n" + + " WHEN ISNULL(effective_date, estimated_date) BETWEEN dbo.f_getfirstdayofweek(GETDATE()) AND dbo.f_getlastdayofweek(GETDATE())\n" + + " THEN 1\n" + + " ELSE 0 END) AS planned_this_week,\n" + + " MAX(CASE\n" + + " WHEN ISNULL(effective_date, estimated_date) BETWEEN dbo.f_getfirstdayofweek(DATEADD(WEEK, -1, GETDATE())) AND dbo.f_getlastdayofweek(DATEADD(WEEK, -1, GETDATE()))\n" + + " THEN 1\n" + + " ELSE 0 END) AS planned_previous_week,\n" + + " MAX(CASE\n" + + " WHEN ISNULL(effective_date, estimated_date) BETWEEN dbo.f_getfirstdayofweek(DATEADD(WEEK, 1, GETDATE())) AND dbo.f_getlastdayofweek(DATEADD(WEEK, 1, GETDATE()))\n" + + " THEN 1\n" + + " ELSE 0 END) AS planned_next_week,\n" + + " MAX(CASE\n" + + " WHEN effective_date IS NOT NULL AND\n" + + " effective_date BETWEEN dbo.f_getfirstdayofmonth(GETDATE()) AND EOMONTH(GETDATE())\n" + + " THEN 1\n" + + " ELSE 0 END) AS done_this_month,\n" + + " MAX(CASE\n" + + " WHEN effective_date IS NOT NULL AND\n" + + " effective_date BETWEEN dbo.f_getfirstdayofmonth(DATEADD(MONTH, -1, GETDATE())) AND EOMONTH(DATEADD(MONTH, -1, GETDATE()))\n" + + " THEN 1\n" + + " ELSE 0 END) AS done_previous_month,\n" + + " MAX(CASE\n" + + " WHEN effective_date IS NOT NULL AND\n" + + " DATEPART(QUARTER, effective_date) = DATEPART(QUARTER, GETDATE()) THEN 1\n" + + " ELSE 0 END) AS done_this_quarter,\n" + + " MAX(CASE\n" + + " WHEN effective_date IS NOT NULL AND DATEPART(QUARTER, effective_date) =\n" + + " DATEPART(QUARTER, DATEADD(MONTH, -3, GETDATE()))\n" + + " THEN 1\n" + + " ELSE 0 END) AS done_previous_quarter,\n" + + " SUM(jtb_rlavr.ore) AS ore\n" + + "FROM stb_activity\n" + + " INNER JOIN stb_user ON stb_activity.user_name = stb_user.user_name\n" + + " LEFT OUTER JOIN jtb_rlavr ON stb_activity.activity_id = jtb_rlavr.activity_id\n" + + "WHERE stb_activity.flag_tipologia = 'A'\n" + + " AND stb_activity.parent_activity_id IN (" + UtilityDB.listValueToString(elencoId) + ")\n" + + "GROUP BY stb_activity.parent_activity_id,\n" + + " stb_activity.user_name,\n" + + " stb_user.full_name"; List activityResponseDtoWorkedHours = UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), sql, ActivityDTO.WorkedHours.class);