modifiche a servizio di task

This commit is contained in:
2025-02-11 12:36:37 +01:00
parent bcea23b867
commit 4361215ce1

View File

@@ -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 " ;
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 (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";
}
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<ActivityDTO> activityDTOS = UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), sql, ActivityDTO.class);
List<String> 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" +
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 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";
" 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<ActivityDTO.WorkedHours> activityResponseDtoWorkedHours = UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), sql, ActivityDTO.WorkedHours.class);