Project Initialisation - 1st step: Create Project Folders workflow
authormarcellszabo-spedinfo <marcell.szabo@gmail.com>
Mon, 4 Dec 2023 19:58:26 +0000 (20:58 +0100)
committermarcellszabo-spedinfo <marcell.szabo@gmail.com>
Mon, 4 Dec 2023 19:58:26 +0000 (20:58 +0100)
lis-app/src/test/java/hu/user/lis/workflow/PrepareProjectIT.java
lis-app/src/test/resources/application-test.yaml
lis-workflow/src/main/java/hu/user/lis/workflow/project/CreateProjectFolders.java
lis-workflow/src/main/java/hu/user/lis/workflow/project/SlyException.java [new file with mode: 0644]
lis-workflow/src/main/java/hu/user/lis/workflow/properties/WorkflowProperties.java

index fafcdd42d56fdca9e851e21441575e7d3f9520e9..4699ebcdcad51e3a863781488b31af530051c011 100644 (file)
@@ -16,6 +16,7 @@ import org.camunda.bpm.engine.RuntimeService;
 import org.camunda.bpm.engine.runtime.ProcessInstance;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.context.annotation.ComponentScan;
@@ -53,11 +54,31 @@ public class PrepareProjectIT extends BpmnTest {
                 .partner(partnerRepository.findAll().get(0))
                 .projectStatus(projectStatusRepository.findAll().get(0))
                 .name("Teszt projekt")
+                .humanId("2092-1123")
                 .active(true)
                 .build();
         try {
             projectRepository.saveAndFlush(project);
-//            log.info("Template source: {}", workflowProperties.getPrepareProject().getTemplateSourceFolder());
+            WorkflowProperties.PrepareProject pp = workflowProperties.getPrepareProject();
+            assertEquals(pp.getProposalPostfixDateFormat(),"yyyyMMdd");
+            assertEquals(pp.getValidityDateFormat(),"yyyy. MMMM dd.");
+            assertEquals(pp.getProjectNameSeparator()," - ");
+            assertEquals(pp.getAjanlatkeres(),"01_Ajánlatkérés");
+            assertEquals(pp.getBejovoAjanlatkeres(),"02_Bejövő ajánlatok");
+            assertEquals(pp.getKalkulacio(),"03_Kalkuláció");
+            assertEquals(pp.getKimenoAjanlatok(),"04_Kimenő ajánlatok");
+            assertEquals(pp.getMegrendeles(),"05_Megrendelés");
+            assertEquals(pp.getTeljesites(),"06_Teljesítés");
+            assertEquals(pp.getAjanlatNamePrefix(),"USER_Ajánlat_");
+            assertEquals(pp.getProposalNamePrefix(),"USER_Proposal_");
+            assertEquals(pp.getTigNamePrefix(),"USER_TIG_");
+            assertEquals(pp.getKalkulacioNamePrefix(),"USER_Kalkuláció_");
+            assertEquals(pp.getSmbMountPointForSalesDirector(),"/Users/marcellszabo/Downloads/SALES");
+            assertEquals(pp.getAjanlatTemplateDocx(),"/Users/marcellszabo/Downloads/SALES/SABLONOK/USER_Ajánlat_v1.docx");
+            assertEquals(pp.getProposalTemplateDocx(),"/Users/marcellszabo/Downloads/SALES/SABLONOK/USER_Proposal_v1.docx");
+            assertEquals(pp.getTigTemplateDocx(),"/Users/marcellszabo/Downloads/SALES/SABLONOK/TIG_Sablon_v1.docx");
+            assertEquals(pp.getCalculationXlsx(),"/Users/marcellszabo/Downloads/SALES/SABLONOK/USER_kalkuláció_v1.xlsx");
+            log.info("Postfixdate format: {}", workflowProperties.getPrepareProject().getProposalPostfixDateFormat());
             cancelRunningProcesses(PROCESSID);
             ImmutableMap<String, Object> params = ImmutableMap.of("projectId", project.getId());
             ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(PROCESSID, params);
index 358c957adbba4965728eaba1ad39a37d34016f32..4f6703ec1d9a9deae8a0557ecbd4bf1826754e63 100644 (file)
@@ -61,7 +61,25 @@ application:
       input-path: /temp/invoice-import
       project-id-pattern: \d{4}-\d{4}
     prepare-project:
-      template-source-folder: "valami"
+      proposal-postfix-date-format: "yyyyMMdd"
+      validity-date-format: "yyyy. MMMM dd."
+      project-name-separator: " - "
+      ajanlatkeres: "01_Ajánlatkérés"
+      bejovo-ajanlatkeres: "02_Bejövő ajánlatok"
+      kalkulacio: "03_Kalkuláció"
+      kimeno-ajanlatok: "04_Kimenő ajánlatok"
+      megrendeles: "05_Megrendelés"
+      teljesites: "06_Teljesítés"
+      ajanlat-name-prefix: "USER_Ajánlat_"
+      proposal-name-prefix: "USER_Proposal_"
+      tig-name-prefix: "USER_TIG_"
+      kalkulacio-name-prefix: "USER_Kalkuláció_"
+      smb-mount-point-for-sales-director: "/Users/marcellszabo/Downloads/SALES"
+      ajanlat-template-docx: "/Users/marcellszabo/Downloads/SALES/SABLONOK/USER_Ajánlat_v1.docx"
+      proposal-template-docx: "/Users/marcellszabo/Downloads/SALES/SABLONOK/USER_Proposal_v1.docx"
+      tig-template-docx: "/Users/marcellszabo/Downloads/SALES/SABLONOK/TIG_Sablon_v1.docx"
+      calculation-xlsx: "/Users/marcellszabo/Downloads/SALES/SABLONOK/USER_kalkuláció_v1.xlsx"
+
 service:
   nav:
     trust:
index 665ba2b89a474288ec2d769455020c5fd2c571bd..0659b1ba66578e42ab49d055090ead8fe8881204 100644 (file)
@@ -10,10 +10,13 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 import javax.persistence.EntityNotFoundException;
+import java.io.File;
 
 @Log4j2
 @Component
 public class CreateProjectFolders implements JavaDelegate {
+    private final static String fileSeparator = File.separator; // or FileSystems.getDefault().getSeparator(); File.separatorChar;
+
     @Autowired
     private ProjectRepository projectRepository;
 
@@ -25,6 +28,61 @@ public class CreateProjectFolders implements JavaDelegate {
         Long projectId = (Long) delegateExecution.getVariable("projectId");
         Project project = projectRepository.findById(projectId).orElseThrow(EntityNotFoundException::new);
         log.info("Executing on project ID {}", projectId);
+        log.info("Executing on project Name {}", project.getName());
+        createFolder(project.getPartner().getName(), project.getHumanId(), project.getName());
 //        delegateExecution.setVariableLocal("invoices", invoices);
+        
+    }
+
+    private void createFolder(String partnerShortName, String projectID, String projectName) throws SlyException {
+        WorkflowProperties.PrepareProject pp = workflowProperties.getPrepareProject();
+
+        log.info("Creating project folder for " + partnerShortName + ", and " + projectID + pp.getProjectNameSeparator()
+                + projectName + ". File system separator: " + fileSeparator);
+        if (partnerShortName == null || partnerShortName.isEmpty() || partnerShortName.trim().isEmpty()) {
+            log.error("Project folder creation failed, Partner Short Name is Null or Empty!");
+            throw new SlyException("Partner Short Name is Null or Empty!");
+        }
+
+        if (projectID == null || projectID.isEmpty() || projectID.trim().isEmpty()) {
+            log.error("Project folder creation failed, Project ID is Null or Empty!");
+            throw new SlyException("Project ID is Null or Empty!");
+        }
+
+        if (projectName == null || projectName.isEmpty() || projectName.trim().isEmpty()) {
+            log.error("Project folder creation failed, Project Name is Null or Empty!");
+            throw new SlyException("Project Name is Null or Empty!");
+        }
+
+        String path = pp.getSmbMountPointForSalesDirector() + fileSeparator + partnerShortName.trim() + fileSeparator
+                + projectID.trim() + pp.getProjectNameSeparator() + projectName.trim();
+        log.info("Project folder path: " + path + ".");
+        File baseDir = new File(path);
+        File ajanlatkeresDir = new File(path + fileSeparator + pp.getAjanlatkeres());
+        File bejovoDir = new File(path + fileSeparator + pp.getBejovoAjanlatkeres());
+        File kalkulacioDir = new File(path + fileSeparator + pp.getKalkulacio());
+        File kimenoDir = new File(path + fileSeparator + pp.getKimenoAjanlatok());
+        File megrendelesDir = new File(path + fileSeparator + pp.getMegrendeles());
+        File teljesitesDir = new File(path + fileSeparator + pp.getTeljesites());
+        if (baseDir.exists()) {
+            log.error("Project folder (" + path + ") already exists!");
+            throw new SlyException("Project folder (" + path + ") already exists!");
+        }
+
+        try {
+            baseDir.mkdirs();
+            ajanlatkeresDir.mkdirs();
+            bejovoDir.mkdirs();
+            kalkulacioDir.mkdirs();
+            kimenoDir.mkdirs();
+            megrendelesDir.mkdirs();
+            teljesitesDir.mkdirs();
+
+        } catch (Exception e) {
+            throw new SlyException(e.getMessage());
+        } finally {
+            log.info("Project folder has been created: " + path + ".");
+
+        }
     }
 }
diff --git a/lis-workflow/src/main/java/hu/user/lis/workflow/project/SlyException.java b/lis-workflow/src/main/java/hu/user/lis/workflow/project/SlyException.java
new file mode 100644 (file)
index 0000000..4b3c5bb
--- /dev/null
@@ -0,0 +1,15 @@
+package hu.user.lis.workflow.project;
+
+public class SlyException extends Exception {
+
+       private String exception;
+
+       public SlyException(String exception) {
+               this.exception = exception;
+       }
+
+       @Override
+       public String getMessage() {
+               return exception;
+       }
+}
index 05a46a489af102c355520b6075ecc803d52b91c1..c2754515a0fae0f69e08f7f3323c47864698b864 100644 (file)
@@ -26,7 +26,24 @@ public class WorkflowProperties {
     @Getter
     @Setter
     public static class PrepareProject {
-        private String templateSourceFolder;
+        private String proposalPostfixDateFormat;
+        private String validityDateFormat;
+        private String projectNameSeparator;
+        private String ajanlatkeres;
+        private String bejovoAjanlatkeres;
+        private String kalkulacio;
+        private String kimenoAjanlatok;
+        private String megrendeles;
+        private String teljesites;
+        private String ajanlatNamePrefix;
+        private String proposalNamePrefix;
+        private String tigNamePrefix;
+        private String kalkulacioNamePrefix;
+        private String smbMountPointForSalesDirector;
+        private String ajanlatTemplateDocx;
+        private String proposalTemplateDocx;
+        private String tigTemplateDocx;
+        private String calculationXlsx;
     }
 
 }