Merge remote-tracking branch 'origin/develop' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good

This commit is contained in:
2025-01-07 15:55:23 +01:00
3 changed files with 207 additions and 96 deletions

View File

@@ -0,0 +1,153 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20250107154747 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
createOrUpdateView("gvw_situaz_ordini", "CREATE VIEW [dbo].[gvw_situaz_ordini] AS SELECT\n" +
" '1' AS sezione,\n" +
" dtb_ordt.gestione,\n" +
" dtb_ordt.data_ord,\n" +
" dtb_ordt.num_ord,\n" +
" dtb_ordt.rif_ord,\n" +
" dtb_ordt.persona_rif,\n" +
" dtb_ordr.riga_ord,\n" +
" 'ORDINE' AS cod_dtip,\n" +
" dtb_ordt.data_ord AS data_doc,\n" +
" CONVERT(varchar(1), NULL) AS ser_doc,\n" +
" dtb_ordt.num_ord AS num_doc,\n" +
" dtb_ordr.partita_mag,\n" +
" dtb_ordt.cod_anag,\n" +
" dtb_ordr.cod_mart,\n" +
" dtb_ordr.cod_mart AS cod_mart_ord,\n" +
" dtb_ordr.descrizione,\n" +
" dtb_ordr.data_cons,\n" +
" dtb_ordr.unt_ord,\n" +
" dtb_ordr.cod_col,\n" +
" dtb_ordr.cod_tagl,\n" +
" dtb_ordr.qta_ord,\n" +
" dtb_ordr.qta_evasa,\n" +
" dtb_ordr.flag_evaso,\n" +
" dtb_ordr.val_unt * (1 - sconto1 / 100) * (1 - sconto2 / 100) * (1 - sconto3 / 100) * (1 - sconto4 / 100) * (1 - sconto5 / 100) * (1 - sconto6 / 100) * (1 - sconto7 / 100) * (1 - sconto8 / 100) AS val_unt,\n" +
" CAST(CASE\n" +
" WHEN dtb_ordt.listino IS NOT NULL THEN\n" +
" dbo.f_calcprznettoacq(\n" +
" dtb_ordt.listino\n" +
" , dbo.getGestSetup('ATB_LIST','SETUP','FORMULA_PREZZO_NETTO')\n" +
" , dtb_ordr.sconto5\n" +
" , dtb_ordr.sconto6\n" +
" , dtb_ordr.sconto7\n" +
" , dtb_ordr.sconto8\n" +
" , 0\n" +
" , 0\n" +
" , 0\n" +
" , 0\n" +
" , dtb_ordr.perc_promo\n" +
" , dtb_ordr.val_promo\n" +
" , dtb_ordr.perc_oneri\n" +
" , dtb_ordr.val_oneri\n" +
" , dtb_ordr.val_unt)\n" +
" ELSE 0 END AS NUMERIC(20, 5)) AS prezzo_netto_premi,\n" +
" dtb_ordt.cod_divi,\n" +
" gtb_divi.formato,\n" +
" mtb_aart.peso_kg,\n" +
" CONVERT(DATETIME, NULL) AS data_reg,\n" +
" CONVERT(varchar(40), NULL) AS desc_col,\n" +
" dtb_ordt.compilato_da,\n" +
" dtb_ordt.controllato_da,\n" +
" dtb_ordt.cod_jfas,\n" +
" dtb_ordt.flag_evaso_prod,\n" +
" dtb_ordt.qta_prod,\n" +
" dtb_ordt.cod_mdep,\n" +
" dtb_ordt.gestione_rif,\n" +
" dtb_ordt.cod_vdes\n" +
"FROM\n" +
" dtb_ordr\n" +
" INNER JOIN dtb_ordt ON (dtb_ordt.gestione = dtb_ordr.gestione)\n" +
" AND (dtb_ordt.data_ord = dtb_ordr.data_ord)\n" +
" AND (dtb_ordt.num_ord = dtb_ordr.num_ord)\n" +
" LEFT OUTER JOIN mtb_aart ON dtb_ordr.cod_mart = mtb_aart.cod_mart,\n" +
" gtb_divi\n" +
"WHERE\n" +
" (dtb_ordt.cod_divi = gtb_divi.cod_divi)\n" +
" AND (dtb_ordt.flag_annulla = 'N')\n" +
" AND (dtb_ordr.flag_evaso <> 'A')\n" +
"UNION ALL\n" +
"SELECT\n" +
" '2',\n" +
" dtb_doct.gestione,\n" +
" dtb_docr.data_ord,\n" +
" dtb_docr.num_ord,\n" +
" CONVERT(varchar(40), NULL),\n" +
" CONVERT(varchar(40), NULL),\n" +
" dtb_docr.riga_ord,\n" +
" dtb_docr.cod_dtip,\n" +
" dtb_docr.data_doc,\n" +
" dtb_docr.ser_doc,\n" +
" dtb_docr.num_doc,\n" +
" dtb_docr.partita_mag,\n" +
" dtb_doct.cod_anag,\n" +
" dtb_docr.cod_mart,\n" +
" dtb_ordr.cod_mart AS cod_mart_ord,\n" +
" dtb_docr.descrizione,\n" +
" dtb_ordr.data_cons,\n" +
" dtb_docr.unt_doc,\n" +
" dtb_docr.cod_col,\n" +
" dtb_docr.cod_tagl,\n" +
" 0 AS qta_ord,\n" +
" dtb_docr.qta_doc,\n" +
" CONVERT(varchar(1), NULL),\n" +
" dtb_docr.val_unt * (1 - dtb_doct.sconto1 / 100) * (1 - dtb_doct.sconto2 / 100) * (1 - dtb_doct.sconto3 / 100) * (1 - dtb_doct.sconto4 / 100) * (1 - dtb_docr.sconto5 / 100) * (1 - dtb_docr.sconto6 / 100) * (1 - dtb_docr.sconto7 / 100) * (1 - dtb_docr.sconto8 / 100),\n" +
" 0,\n" +
" dtb_doct.cod_divi,\n" +
" gtb_divi.formato,\n" +
" mtb_aart.peso_kg,\n" +
" dtb_doct.data_reg,\n" +
" CONVERT(varchar(40), NULL) AS desc_col,\n" +
" dtb_ordt.compilato_da,\n" +
" dtb_ordt.controllato_da,\n" +
" dtb_ordt.cod_jfas,\n" +
" dtb_ordt.flag_evaso_prod,\n" +
" dtb_ordt.qta_prod,\n" +
" dtb_ordt.cod_mdep,\n" +
" dtb_ordt.gestione_rif,\n" +
" dtb_ordt.cod_vdes\n" +
"FROM\n" +
" dtb_docr\n" +
" INNER JOIN dtb_doct ON (dtb_doct.cod_anag = dtb_docr.cod_anag)\n" +
" AND (dtb_doct.cod_dtip = dtb_docr.cod_dtip)\n" +
" AND (dtb_doct.data_doc = dtb_docr.data_doc)\n" +
" AND (dtb_doct.ser_doc = dtb_docr.ser_doc)\n" +
" AND (dtb_doct.num_doc = dtb_docr.num_doc)\n" +
" LEFT OUTER JOIN dtb_ordr ON dtb_ordr.data_ord = dtb_docr.data_ord\n" +
" AND dtb_ordr.num_ord = dtb_docr.num_ord\n" +
" AND dtb_ordr.riga_ord = dtb_docr.riga_ord\n" +
" LEFT OUTER JOIN mtb_aart ON dtb_docr.cod_mart = mtb_aart.cod_mart\n" +
" LEFT OUTER JOIN dtb_ordt ON dtb_ordr.gestione = dtb_ordt.gestione\n" +
" AND dtb_ordr.data_ord = dtb_ordt.data_ord\n" +
" AND dtb_ordr.num_ord = dtb_ordt.num_ord,\n" +
" gtb_divi,\n" +
" dtb_tipi\n" +
"WHERE\n" +
" (dtb_doct.cod_divi = gtb_divi.cod_divi)\n" +
" AND (dtb_doct.cod_dtip = dtb_tipi.cod_dtip)\n" +
" AND (\n" +
" dtb_tipi.segno_qta_car <> 0\n" +
" OR dtb_tipi.segno_qta_scar <> 0\n" +
" )\n" +
" AND (dtb_tipi.tipo_emissione = 'DIRETTA')");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -24,91 +24,7 @@ public class LocalFolderDirectoryWatcher extends DirectoryWatcher {
private FileAlterationObserver observer;
private FileAlterationMonitor monitor;
private FileAlterationListener listener;
public LocalFolderDirectoryWatcher(ImportDirectoryOperationDTO operationDTO) {
super(operationDTO);
}
public void setDirectoryWatcherEvents(final IDirectoryWatcherEvents directoryWatcherEvents) {
this.directoryWatcherEvents = directoryWatcherEvents;
listener = new FileAlterationListener() {
@Override
public void onStart(FileAlterationObserver observer) {
}
@Override
public void onDirectoryCreate(File directory) {
}
@Override
public void onDirectoryChange(File directory) {
}
@Override
public void onDirectoryDelete(File directory) {
}
@Override
public void onFileCreate(File file) {
if (!isASubDirectory(file)) {
if (getMatcher(fileFilter, file.getName()).matches()) {
executor.execute(() -> {
try {
directoryWatcherEvents.onFileCreate(file);
} catch (Exception ex) {
logger.error(ex);
}
});
}
}
}
@Override
public void onFileChange(File file) {
if (!isASubDirectory(file)) {
if (getMatcher(fileFilter, file.getName()).matches()) {
executor.execute(() -> {
directoryWatcherEvents.onFileChange(file);
});
}
}
}
@Override
public void onFileDelete(File file) {
if (!isASubDirectory(file)) {
if (getMatcher(fileFilter, file.getName()).matches()) {
executor.execute(() -> {
directoryWatcherEvents.onFileDelete(file);
});
}
}
}
@Override
public void onStop(FileAlterationObserver observer) {
}
};
observer.addListener(listener);
monitor.addObserver(observer);
}
protected void start() throws Exception {
observer = new FileAlterationObserver(path);
monitor = new FileAlterationMonitor(10000);
listener = new FileAlterationListener() {
private FileAlterationListener listener = new FileAlterationListener() {
@Override
public void onStart(FileAlterationObserver observer) {
@@ -179,6 +95,24 @@ public class LocalFolderDirectoryWatcher extends DirectoryWatcher {
}
};
public LocalFolderDirectoryWatcher(ImportDirectoryOperationDTO operationDTO) {
super(operationDTO);
}
public void setDirectoryWatcherEvents(final IDirectoryWatcherEvents directoryWatcherEvents) {
this.directoryWatcherEvents = directoryWatcherEvents;
// observer = new FileAlterationObserver(path);
// monitor = new FileAlterationMonitor(10000);
//
// observer.addListener(listener);
// monitor.addObserver(observer);
}
protected void start() throws Exception {
observer = new FileAlterationObserver(path);
monitor = new FileAlterationMonitor(10000);
observer.addListener(listener);
monitor.addObserver(observer);

View File

@@ -78,6 +78,7 @@ import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.stream.Collectors;
@RestController
@Scope("request")
@@ -200,7 +201,8 @@ public class SystemController {
Date dataFine = UtilityDate.RecognizeDate(dataFineString);
String query =
"SELECT log.activity_id "
"SELECT log.activity_id, " +
"' - ' + log.attivita + '( https://task.studioml.it/ViewTicket/' + log.activity_id + ' )'as activity_description "
+ " FROM dbo.integry_changeLog( " + UtilityDB.valueToString(partIva) + ", " +
UtilityDB.valueDateToString(dataInizio, CommonConstants.DATE_FORMAT_YMD) + ", " +
UtilityDB.valueDateToString(dataFine, CommonConstants.DATE_FORMAT_YMD) + ") log "
@@ -208,23 +210,19 @@ public class SystemController {
+ " WHERE log.activity_id is not null"
+ " AND activity_result_id = 'DA INSTALLARE'";
List<String> activityIdsToClose = UtilityDB.executeSimpleQueryOnlyFirstColumn(multiDBTransactionManager.getPrimaryConnection(), query);
List<StbActivity> stbActivitiesToUpdate = UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), query, StbActivity.class);
List<StbActivity> stbActivitiesToUpdate = Stream.of(activityIdsToClose)
.map(x -> {
stbActivitiesToUpdate.stream().forEach
(x -> {
StbActivity stbActivity = new StbActivity()
.setActivityId(x)
.setActivityResultId(activityResultId);
stbActivity
.setOperation(OperationType.UPDATE);
return stbActivity;
})
.toList();
});
String activityTypeId = "AGGIORNAMENTI SOFTWARE";
String sql = "SELECT TOP 1 gtb_anag.cod_anag, jc.cod_jcom " +
String sql = "SELECT TOP 1 gtb_anag.cod_anag, jc.cod_jcom, jc.cod_jflav_tec " +
"FROM wtb_clie " +
" INNER JOIN gtb_anag ON wtb_clie.cod_anag = gtb_anag.cod_anag " +
" INNER JOIN wtb_clie wc on wtb_clie.user_name = wc.user_name " +
@@ -237,6 +235,7 @@ public class SystemController {
String codAnag = UtilityHashMap.getValueIfExists(result, "cod_anag");
String codJcom = UtilityHashMap.getValueIfExists(result, "cod_jcom");
String respComm = UtilityHashMap.getValueIfExists(result, "cod_jflav_tec");
if (codJcom == null) {
throw new Exception("Codice commessa non trovata per il cliente " + partIva);
@@ -294,7 +293,32 @@ public class SystemController {
entityProcessor.processEntityList(stbActivitiesToUpdate, false);
return ServiceRestResponse.createPositiveResponse(activityIdsToClose);
if (!UtilityString.isNullOrEmpty(respComm) && !stbActivitiesToUpdate.isEmpty()) {
sql =
Query.format(
"SELECT stb_user.e_mail\n" +
" FROM stb_user inner join jrl_flav_users on stb_user.user_name = jrl_flav_users.user_name\n" +
" WHERE jrl_flav_users.cod_jflav = %s AND " +
"jrl_flav_users.flag_jflav_default = 'S'", respComm);
String emailTo = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql);
List<String> elencoAttivita =
stbActivitiesToUpdate.stream()
.map(x->x.getActivityDescription()).collect(Collectors.toList());
String emailMessage =
String.format("Sono stati installati i seguenti aggiornamenti sull'azienda %s: <br>%s. <br>Verificare le attività con il cliente.",
codJcom,
StringUtils.join(elencoAttivita,"<br>"));
mailService.sendMailPrimary(multiDBTransactionManager, "noreply@integry.it", "Integry Ticketing", emailTo, null, null,
String.format("Installazione aggiornamenti %s", codJcom),
emailMessage, true, false, null, null,
null, false, null);
}
return ServiceRestResponse.createPositiveResponse(stbActivitiesToUpdate);
}