diff --git a/.idea/fileTemplates/Entity.java b/.idea/fileTemplates/Entity.java index 98f6fad541..aa59c2f1fe 100644 --- a/.idea/fileTemplates/Entity.java +++ b/.idea/fileTemplates/Entity.java @@ -15,7 +15,7 @@ import org.kie.api.definition.type.PropertyReactive; public class ${NAME} extends EntityBase { public static final String ENTITY = "${TABLE}"; - private final static Logger logger = LogManager.getLogger(); + private static final Logger logger = LogManager.getLogger(); private static final long serialVersionUID = 1L; diff --git a/.idea/fileTemplates/EntityChild.java b/.idea/fileTemplates/EntityChild.java index 8f7bd84e8a..82137cfc84 100644 --- a/.idea/fileTemplates/EntityChild.java +++ b/.idea/fileTemplates/EntityChild.java @@ -14,7 +14,7 @@ import org.kie.api.definition.type.PropertyReactive; public class ${NAME} extends EntityBase { public static final String ENTITY = "${TABLE}"; - private final static Logger logger = LogManager.getLogger(); + private static final Logger logger = LogManager.getLogger(); public ${NAME}() { super(logger); diff --git a/ems-core/src/main/java/it/integry/ems/controller/EmsController.java b/ems-core/src/main/java/it/integry/ems/controller/EmsController.java index e7e6193d9b..13bcdd87c5 100644 --- a/ems-core/src/main/java/it/integry/ems/controller/EmsController.java +++ b/ems-core/src/main/java/it/integry/ems/controller/EmsController.java @@ -48,6 +48,8 @@ import org.quartz.*; import org.quartz.impl.matchers.GroupMatcher; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Scope; +import org.springframework.http.ContentDisposition; +import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.mail.javamail.ConfigurableMimeFileTypeMap; @@ -746,11 +748,11 @@ public class EmsController { @RequestMapping(value = EmsRestConstants.PATH_DOWNLOAD_STB_FILE_ATTACHMENT + "/{idAttach}/{filename}", method = RequestMethod.GET) - @ResponseBody public ResponseEntity downloadStbFileAttachment( @RequestParam(CommonConstants.PROFILE_DB) String config, @PathVariable String idAttach, @PathVariable String filename, + @RequestParam(name = "contentDisposition", defaultValue = "attachment") String contentDispositionType, @RequestParam(defaultValue = "false") boolean requestThumbnail) throws Exception { AttachmentDTO attachmentDTO = emsServices.downloadStbFileAttachment(idAttach, requestThumbnail); @@ -758,7 +760,11 @@ public class EmsController { return ResponseEntity.ok() .contentType(MediaType.parseMediaType(attachmentDTO.getMimeType())) .contentLength(attachmentDTO.getFileSize()) - .header("Content-Disposition", "attachment; filename=\"" + attachmentDTO.getFileName() + "\"") + .header(HttpHeaders.CONTENT_DISPOSITION, ContentDisposition + .builder(contentDispositionType) + .filename(attachmentDTO.getFileName()) + .build() + .toString()) .body(attachmentDTO.getFileContent()); } @@ -777,7 +783,11 @@ public class EmsController { return ResponseEntity.ok() .contentType(MediaType.parseMediaType(attachmentDTO.getMimeType())) .contentLength(attachmentDTO.getFileSize()) - .header("Content-Disposition", "attachment; filename=\"" + attachmentDTO.getFileName() + "\"") + .header(HttpHeaders.CONTENT_DISPOSITION, ContentDisposition + .attachment() + .filename(attachmentDTO.getFileName()) + .build() + .toString()) .body(attachmentDTO.getFileContent()); } @@ -798,7 +808,7 @@ public class EmsController { if (stbEmailContent != null) { response.setContentType("application/octet-stream"); response.setStatus(HttpServletResponse.SC_OK); - response.addHeader("Content-Disposition", "attachment; filename=\"email.eml\""); + response.addHeader(HttpHeaders.CONTENT_DISPOSITION, ContentDisposition.attachment().filename("email.eml").build().toString()); byte[] byteArr = null; @@ -845,7 +855,7 @@ public class EmsController { if (dtbDocPdf != null) { response.setContentType("application/octet-stream"); response.setStatus(HttpServletResponse.SC_OK); - response.addHeader("Content-Disposition", "attachment; filename=\"" + dtbDocPdf.getFilename() + "\""); + response.addHeader(HttpHeaders.CONTENT_DISPOSITION, ContentDisposition.attachment().filename(dtbDocPdf.getFilename()).build().toString()); byte[] byteArr = null; @@ -890,7 +900,7 @@ public class EmsController { if (dtbOrdPdf != null) { response.setContentType("application/octet-stream"); response.setStatus(HttpServletResponse.SC_OK); - response.addHeader("Content-Disposition", "attachment; filename=\"" + dtbOrdPdf.getFilename() + "\""); + response.addHeader(HttpHeaders.CONTENT_DISPOSITION, ContentDisposition.attachment().filename(dtbOrdPdf.getFilename()).build().toString()); byte[] byteArr = dtbOrdPdf.getFilecontentByteArr(true); response.setContentLength(byteArr != null ? byteArr.length : 0); @@ -902,11 +912,10 @@ public class EmsController { } @RequestMapping(value = EmsRestConstants.PATH_UPLOAD_STB_FILE_ATTACHMENT, method = RequestMethod.POST) - public ServiceRestResponse uploadStbFileAttachment(HttpServletRequest request, HttpServletResponse response, - @RequestParam(CommonConstants.PROFILE_DB) String config, + public ServiceRestResponse uploadStbFileAttachment(@RequestParam(CommonConstants.PROFILE_DB) String config, @RequestParam(required = false) String idAttach, @RequestParam(required = false) String descrizione, - @RequestParam(required = false) String typeAttach, + @RequestParam(required = false) StbFilesAttached.TypeAttach typeAttach, @RequestPart() MultipartFile[] files ) { try { @@ -926,11 +935,7 @@ public class EmsController { stbFilesAttached.setOnlyPkMaster(false); - ServiceRestResponse serviceRestResponse = ServiceRestResponse.createPositiveResponse(); - serviceRestResponse.setEntity(stbFilesAttached); - - return serviceRestResponse; - + return ServiceRestResponse.createEntityPositiveResponse(stbFilesAttached); } catch (Exception e) { logger.error(e.getMessage(), e); return new ServiceRestResponse(EsitoType.KO, config, e); diff --git a/ems-core/src/main/java/it/integry/ems/migration/_base/BaseMigration.java b/ems-core/src/main/java/it/integry/ems/migration/_base/BaseMigration.java index f175d352f3..3accadd395 100644 --- a/ems-core/src/main/java/it/integry/ems/migration/_base/BaseMigration.java +++ b/ems-core/src/main/java/it/integry/ems/migration/_base/BaseMigration.java @@ -81,8 +81,10 @@ public abstract class BaseMigration implements MigrationModelInterface { protected void executeStatement(Connection connection, String... sqls) throws SQLException { try (Statement statement = connection.createStatement()) { for (String sql : sqls) { - statement.execute(sql); + statement.addBatch(sql); } + + statement.executeBatch(); } } diff --git a/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20250211104843.java b/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20250211104843.java new file mode 100644 index 0000000000..641471d6e4 --- /dev/null +++ b/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20250211104843.java @@ -0,0 +1,22 @@ +package it.integry.ems.migration.model; + +import it.integry.ems.migration._base.BaseMigration; +import it.integry.ems.migration._base.MigrationModelInterface; + +public class Migration_20250211104843 extends BaseMigration implements MigrationModelInterface { + + @Override + public void up() throws Exception { + if (isHistoryDB()) + return; + + executeStatement( + "ALTER TABLE stb_files_attached\n" + + " ALTER COLUMN type_attach VARCHAR(2) NULL" + ); + } + + @Override + public void down() throws Exception { + } +} \ No newline at end of file diff --git a/ems-core/src/main/java/it/integry/ems/service/EmsServices.java b/ems-core/src/main/java/it/integry/ems/service/EmsServices.java index 74140718d8..3251071f68 100644 --- a/ems-core/src/main/java/it/integry/ems/service/EmsServices.java +++ b/ems-core/src/main/java/it/integry/ems/service/EmsServices.java @@ -510,7 +510,7 @@ public class EmsServices { @Nonnull byte[] fileContent, @Nullable String descrizione, @Nullable String mimeType, - @Nullable String typeAttach, + @Nullable StbFilesAttached.TypeAttach typeAttach, @Nullable MrlPartitaMagAttached mrlPartitaMagAttached, @Nullable Date datetimeAttach) throws Exception { diff --git a/ems-core/src/main/java/it/integry/ems/user/controller/UserController.java b/ems-core/src/main/java/it/integry/ems/user/controller/UserController.java index c172a13807..9e7753586e 100644 --- a/ems-core/src/main/java/it/integry/ems/user/controller/UserController.java +++ b/ems-core/src/main/java/it/integry/ems/user/controller/UserController.java @@ -62,4 +62,11 @@ public class UserController { return ServiceRestResponse.createPositiveResponse(userService.retrieveAvailableProfiles(username, password)); } + + @GetMapping(value = "{username}/getSignatureIdAttach") + public ServiceRestResponse getSignatureIdAttach(@PathVariable String username) throws Exception { + String idAttach = userService.getSignatureIdAttach(username); + + return ServiceRestResponse.createPositiveResponse(idAttach); + } } diff --git a/ems-core/src/main/java/it/integry/ems/user/service/UserService.java b/ems-core/src/main/java/it/integry/ems/user/service/UserService.java index e7c615c6ab..3d340a842a 100644 --- a/ems-core/src/main/java/it/integry/ems/user/service/UserService.java +++ b/ems-core/src/main/java/it/integry/ems/user/service/UserService.java @@ -2,7 +2,9 @@ package it.integry.ems.user.service; import it.integry.ems.exception.PrimaryDatabaseNotPresentException; import it.integry.ems.javabeans.RequestDataDTO; +import it.integry.ems.service.EmsServices; import it.integry.ems.service.EntityProcessor; +import it.integry.ems.service.dto.AttachmentDTO; import it.integry.ems.settings.Model.SettingsModel; import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager; import it.integry.ems.user.UtilityUser; @@ -10,6 +12,7 @@ import it.integry.ems.user.dto.ChangePasswordDTO; import it.integry.ems.utility.UtilityDebug; import it.integry.ems.utility.UtilityEntity; import it.integry.ems_model.config.EmsRestConstants; +import it.integry.ems_model.entity.StbFilesAttached; import it.integry.ems_model.entity.StbUser; import it.integry.ems_model.types.OperationType; import it.integry.ems_model.utility.Query; @@ -18,6 +21,10 @@ import it.integry.ems_model.utility.UtilityDate; import it.integry.ems_model.utility.UtilityString; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Scope; +import org.springframework.http.ContentDisposition; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; import java.io.IOException; @@ -41,7 +48,7 @@ public class UserService { private UserCacheService userCacheService; @Autowired - private SettingsModel settingsModel; + private EmsServices emsServices; public StbUser save(StbUser stbUser) throws Exception { String sql = @@ -118,4 +125,22 @@ public class UserService { return profiles; } + + public String getSignatureIdAttach(String username) throws Exception { + if (UtilityString.isNullOrEmpty(username)) { + throw new IllegalArgumentException("Username cannot be null or empty"); + } + + String sql = Query.format( + "SELECT sfa.id_attach\n" + + "FROM srl_user_attached sua\n" + + " INNER JOIN dbo.stb_files_attached sfa ON sua.id_attach = sfa.id_attach\n" + + " AND sfa.type_attach = %s\n" + + "WHERE sua.user_name = %s", + StbFilesAttached.TypeAttach.FIRMA.getValue(), + username + ); + + return UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql); + } } diff --git a/ems-core/src/main/java/it/integry/ems_model/entity/SrlUserAttached.java b/ems-core/src/main/java/it/integry/ems_model/entity/SrlUserAttached.java index b64f8629c7..d323d01dc2 100644 --- a/ems-core/src/main/java/it/integry/ems_model/entity/SrlUserAttached.java +++ b/ems-core/src/main/java/it/integry/ems_model/entity/SrlUserAttached.java @@ -7,30 +7,26 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.kie.api.definition.type.PropertyReactive; -@Master() -@PropertyReactive() +@PropertyReactive @Table(value = SrlUserAttached.ENTITY) @JsonTypeName(value = SrlUserAttached.ENTITY) public class SrlUserAttached extends EntityBase { + public static final String ENTITY = "srl_user_attached"; - public final static String ENTITY = "srl_user_attached"; + private static final Logger logger = LogManager.getLogger(); - private final static Long serialVersionUID = 1L; - - private final static Logger logger = LogManager.getLogger(); + private static final long serialVersionUID = 1L; public SrlUserAttached() { super(logger); } - @PK() + @PK @SqlField(value = "user_name", maxLength = 40, nullable = false) - @FK(tableName = StbUser.ENTITY, columnName = "user_name") private String userName; - @PK() + @PK @SqlField(value = "id_attach", maxLength = 40, nullable = false) - @FK(tableName = StbFilesAttached.ENTITY, columnName = "id_attach") private String idAttach; public String getUserName() { diff --git a/ems-core/src/main/java/it/integry/ems_model/entity/StbFilesAttached.java b/ems-core/src/main/java/it/integry/ems_model/entity/StbFilesAttached.java index 164c801afe..37092af895 100644 --- a/ems-core/src/main/java/it/integry/ems_model/entity/StbFilesAttached.java +++ b/ems-core/src/main/java/it/integry/ems_model/entity/StbFilesAttached.java @@ -1,10 +1,13 @@ package it.integry.ems_model.entity; import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonValue; import it.integry.ems_model.annotation.*; import it.integry.ems_model.base.EntityBase; +import it.integry.ems_model.entity._enum.IBaseEnum; import it.integry.ems_model.utility.UtilityDB; import org.kie.api.definition.type.PropertyReactive; + import java.math.BigDecimal; import java.util.Date; @@ -48,8 +51,8 @@ public class StbFilesAttached extends EntityBase { @SqlField(value = "file_size") private BigDecimal fileSize; - @SqlField(value = "type_attach", maxLength = 40) - private String typeAttach; + @SqlField(value = "type_attach", maxLength = 2) + private TypeAttach typeAttach; @SqlField(value = "parent_id_attach", maxLength = 40) private String parentIdAttach; @@ -105,6 +108,9 @@ public class StbFilesAttached extends EntityBase { @EntityChild(copyPk = false) private CtbAmacHistory ctbAmacHistory; + @EntityChild + private SrlUserAttached srlUserAttached; + public StbFilesAttached() { super(logger); } @@ -181,11 +187,11 @@ public class StbFilesAttached extends EntityBase { return this; } - public String getTypeAttach() { + public TypeAttach getTypeAttach() { return typeAttach; } - public StbFilesAttached setTypeAttach(String typeAttach) { + public StbFilesAttached setTypeAttach(TypeAttach typeAttach) { this.typeAttach = typeAttach; return this; } @@ -343,6 +349,15 @@ public class StbFilesAttached extends EntityBase { return this; } + public SrlUserAttached getSrlUserAttached() { + return srlUserAttached; + } + + public StbFilesAttached setSrlUserAttached(SrlUserAttached srlUserAttached) { + this.srlUserAttached = srlUserAttached; + return this; + } + public String getRefUuid() { return refUuid; } @@ -373,5 +388,51 @@ public class StbFilesAttached extends EntityBase { WtbNotificationImage wtbNotificationImage = new WtbNotificationImage(); String whereCond = "attach_id = " + UtilityDB.valueToString(idAttach); wtbNotificationImage.deleteAllEntities(connection, whereCond); + SrlUserAttached srlUserAttached = new SrlUserAttached(); + srlUserAttached.deleteAllEntities(connection, this); + } + + public enum TypeAttach implements IBaseEnum { + NESSUNO(null), + FATTURA_PASSIVA("FP"), + SCHEDA_TECNICA("ST"), + FIRMA("FI"); + + private final String value; + + TypeAttach(final String value) { + this.value = value; + } + + public static TypeAttach from(Object value) { + String castValue = (String) value; + + for (TypeAttach b : TypeAttach.values()) { + if (b.value != null && b.value.equalsIgnoreCase(castValue)) + return b; + } + + return null; + } + + @JsonValue + public String getValue() { + return this.value; + } + + @Override + public Object get() { + return this.value; + } + + @Override + public TypeAttach fromInternal(Object val) { + return from(val); + } + + @Override + public String toString() { + return value; + } } } diff --git a/ems-engine/src/main/java/it/integry/ems/document/fatture/services/PassiveInvoiceService.java b/ems-engine/src/main/java/it/integry/ems/document/fatture/services/PassiveInvoiceService.java index 9f0b1f847f..647ac14309 100644 --- a/ems-engine/src/main/java/it/integry/ems/document/fatture/services/PassiveInvoiceService.java +++ b/ems-engine/src/main/java/it/integry/ems/document/fatture/services/PassiveInvoiceService.java @@ -409,7 +409,7 @@ public class PassiveInvoiceService { .setUserName(requestDataDTO.getUsername()) .setFileSize(new BigDecimal(fileContent.length)) .setFlagLock("S") - .setTypeAttach("FP") + .setTypeAttach(StbFilesAttached.TypeAttach.FATTURA_PASSIVA) .setParentIdAttach(parentActivityId) .setContent(fileContent);