From: elgekko Date: Wed, 13 Sep 2023 20:44:49 +0000 (+0200) Subject: Import invoices X-Git-Url: http://git.useribm.hu/?a=commitdiff_plain;h=9ea725c7d6d97917d937c9a94c48fcff0d58b7f9;p=sly-crm.git Import invoices --- diff --git a/lis-app/pom.xml b/lis-app/pom.xml index 815ef70..5558872 100644 --- a/lis-app/pom.xml +++ b/lis-app/pom.xml @@ -3,7 +3,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 lis-app - 0.1.4-SNAPSHOT + 0.1.5-SNAPSHOT hu.user lis diff --git a/lis-app/src/main/java/hu/user/lis/LoggerConfiguration.java b/lis-app/src/main/java/hu/user/lis/LoggerConfiguration.java deleted file mode 100644 index 17f3fd6..0000000 --- a/lis-app/src/main/java/hu/user/lis/LoggerConfiguration.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright (c) $today.year-$today.month-24. - * By elGekko - */ - -package hu.user.lis; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.InjectionPoint; -import org.springframework.beans.factory.config.ConfigurableBeanFactory; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Scope; - -@Configuration -public class LoggerConfiguration { - - @Bean - @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) - public Logger logger(InjectionPoint ip) { - final Class lClass; - if (ip.getMethodParameter() == null) - lClass = ip.getField().getDeclaringClass(); - else - lClass = ip.getMethodParameter().getContainingClass(); - return LoggerFactory.getLogger(lClass); - } - -} \ No newline at end of file diff --git a/lis-app/src/main/java/hu/user/lis/WebAppConfigurer.java b/lis-app/src/main/java/hu/user/lis/WebAppConfigurer.java index 0378be2..2527828 100644 --- a/lis-app/src/main/java/hu/user/lis/WebAppConfigurer.java +++ b/lis-app/src/main/java/hu/user/lis/WebAppConfigurer.java @@ -5,27 +5,24 @@ package hu.user.lis; -import org.slf4j.Logger; -import org.springframework.beans.factory.annotation.Autowired; +import lombok.extern.log4j.Log4j2; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.EnableWebMvc; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; +@Log4j2 @Configuration @EnableWebMvc public class WebAppConfigurer implements WebMvcConfigurer { - @Autowired - private Logger logger; - //Fajlok kiszolgalasa kulso mappabol es a war-bol @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry .addResourceHandler("/files/**") .addResourceLocations("file:/opt/"); - logger.info("Resource handlers added"); + log.info("Resource handlers added"); // registry // .addResourceHandler("/resources/**") // .addResourceLocations("/resources/"); diff --git a/lis-app/src/main/resources/application-dev.yaml b/lis-app/src/main/resources/application-dev.yaml index dc31738..adea4f1 100644 --- a/lis-app/src/main/resources/application-dev.yaml +++ b/lis-app/src/main/resources/application-dev.yaml @@ -9,7 +9,7 @@ spring: jpa: # hibernate: # use-new-id-generator-mappings: false - show-sql: true + show-sql: false properties: hibernate: format_sql: true diff --git a/lis-app/src/test/java/hu/user/lis/workflow/ImportIncomingInvoicesIT.java b/lis-app/src/test/java/hu/user/lis/workflow/ImportIncomingInvoicesIT.java index dc440d5..c365f1e 100644 --- a/lis-app/src/test/java/hu/user/lis/workflow/ImportIncomingInvoicesIT.java +++ b/lis-app/src/test/java/hu/user/lis/workflow/ImportIncomingInvoicesIT.java @@ -7,7 +7,9 @@ package hu.user.lis.workflow; import lombok.extern.log4j.Log4j2; import org.camunda.bpm.engine.RuntimeService; +import org.camunda.bpm.engine.TaskService; import org.camunda.bpm.engine.runtime.ProcessInstance; +import org.camunda.bpm.engine.task.Task; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; @@ -17,6 +19,8 @@ import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.TestPropertySource; import org.springframework.test.context.junit4.SpringRunner; +import java.util.List; + @Log4j2 @SpringBootTest @@ -25,15 +29,60 @@ import org.springframework.test.context.junit4.SpringRunner; @ComponentScan("hu.user.lis") @TestPropertySource("classpath:application-dev.yaml") public class ImportIncomingInvoicesIT { + // @Rule +// public ProcessEngineRule processEngineRule = new ProcessEngineRule(); @Autowired private RuntimeService runtimeService; + @Autowired + private TaskService taskService; + +// @Test +// @Deployment(resources = {"import-incoming-invoices.bpmn"}) +// public void testImportIncomingInvoiceAspect() throws InterruptedException { +// RuntimeService runtimeService = processEngineRule.getRuntimeService(); +// runtimeService.startProcessInstanceByKey("importIncomingInvoices"); +// +// TaskService taskService = processEngineRule.getTaskService(); +// List taskList = taskService.createTaskQuery().list(); +// taskList.forEach(t -> { +// assertThat(t.getTaskDefinitionKey()).isEqualTo("assignProjectAndAttachFile"); +// taskService.complete(t.getId()); +// }); +// } + @Test public void testImportIncomingInvoice() throws InterruptedException { + List processInstances = runtimeService.createProcessInstanceQuery().list(); + processInstances.forEach(p -> { + //log.info("{} {}", p.getProcessInstanceId(), p.getProcessDefinitionId()); + try { + runtimeService.deleteProcessInstance(p.getProcessInstanceId(), "Canceled"); + } catch (Exception e) { + } + //taskService.complete(t.getId()); + }); + + processInstances = runtimeService.createProcessInstanceQuery().list(); + processInstances.forEach(p -> { + log.info("{} {}", p.getProcessInstanceId(), p.getProcessDefinitionId()); + //taskService.complete(t.getId()); + }); ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("importIncomingInvoices"); + processInstances = runtimeService.createProcessInstanceQuery().list(); + processInstances.forEach(p -> { + log.info("{} {}", p.getProcessInstanceId(), p.getProcessDefinitionId()); + //taskService.complete(t.getId()); + }); + + + List taskList = taskService.createTaskQuery().processInstanceId(processInstance.getId()).list(); + taskList.forEach(t -> { + log.info(t.getTaskDefinitionKey()); + //taskService.complete(t.getId()); + }); - //verify(processInstance).hasFinished("WorkFinished"); while (true) { ProcessInstance active = runtimeService.createProcessInstanceQuery().processInstanceId(processInstance.getProcessInstanceId()).active().singleResult(); if (active == null) { diff --git a/lis-ui/pom.xml b/lis-ui/pom.xml index eaa4fb0..fec1ded 100644 --- a/lis-ui/pom.xml +++ b/lis-ui/pom.xml @@ -117,5 +117,10 @@ lis-services 0.0.1-SNAPSHOT + + hu.user + lis-workflow + 0.0.1-SNAPSHOT + \ No newline at end of file diff --git a/lis-ui/src/main/java/hu/user/lis/ui/Constants.java b/lis-ui/src/main/java/hu/user/lis/ui/Constants.java index 764deb2..336eaa0 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/Constants.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/Constants.java @@ -3,22 +3,29 @@ package hu.user.lis.ui; public class Constants { public static final String BINDING_QUEUE = "$ZKBIND_DEFQUE$"; public static final String PROJECT_EDITOR_QUEUE = "PROJECT_EDITOR_QUEUE"; + public static final String PROCESS_EVENT_QUEUE = "PROJECT_EDITOR_QUEUE"; public static final String SHOW_PROJECT_EDITOR = "SHOW_PROJECT_EDITOR"; public static final String SHOW_PROJECTS_LIST = "SHOW_PROJECTS_LIST"; public static final String SHOW_SERVICE_RECORDS_LIST = "SHOW_SERVICE_RECORDS_LIST"; public static final String SET_SERVICE_RECORDS_LIST_DATA = "SET_SERVICE_RECORDS_LIST_DATA"; public static final String SET_PROJECT_EDITOR_DATA = "SET_PROJECT_EDITOR_DATA"; public static final String SET_PROJECTS_LIST_DATA = "SET_PROJECTS_LIST_DATA"; - + public static final String REFRESH_INVOICE_IMPORT_TASKS = "REFRESH_INVOICE_IMPORT_TASKS"; public static final String NAV_PARTNERS = "/partners"; public static final String NAV_PROJECTS = "/projects"; public static final String NAV_PROJECT = "/project"; + public static final String NAV_PROJECT_WILD_CARD = "/project/**"; public static final String NAV_ASSOCIATES = "/associates"; public static final String NAV_PROJECT_ASSOCIATES = "/project-associates"; public static final String NAV_SERVICE_RECORDS = "/service-records"; public static final String NAV_SETTINGS = "/settings"; + public static final String NAV_IMPORT_INVOICES_ASSIGN = "/import-invoices-assign"; + public static final String NAV_IMPORT_INVOICES_APPROVE = "/import-invoices-approve"; + public static final String NAV_LOGIN = "/login"; + public static final String NAV_LOGOUT = "/logout"; + public static final String NAV_ROOT = "/"; - public static final String WIDGET_ENTITY_SELECTOR = "~./widget/entity-selector.zul"; - + public static final String NAV_API = "/api"; + public static final String WIDGET_ENTITY_SELECTOR = "~./widget/entity-selector.zul"; } diff --git a/lis-ui/src/main/java/hu/user/lis/ui/auth/Guard.java b/lis-ui/src/main/java/hu/user/lis/ui/auth/Guard.java index 4dbac67..9927115 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/auth/Guard.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/auth/Guard.java @@ -1,5 +1,6 @@ package hu.user.lis.ui.auth; +import hu.user.lis.ui.Constants; import lombok.extern.log4j.Log4j2; import org.springframework.security.authentication.AnonymousAuthenticationToken; import org.springframework.security.core.Authentication; @@ -18,7 +19,7 @@ public class Guard implements Initiator { Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); if (authentication == null || authentication instanceof AnonymousAuthenticationToken) { - Executions.sendRedirect("/login"); + Executions.sendRedirect(Constants.NAV_LOGIN); } } diff --git a/lis-ui/src/main/java/hu/user/lis/ui/config/ResourceConfigurer.java b/lis-ui/src/main/java/hu/user/lis/ui/config/ResourceConfigurer.java index 51e39fe..3cca4dd 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/config/ResourceConfigurer.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/config/ResourceConfigurer.java @@ -1,5 +1,6 @@ package hu.user.lis.ui.config; +import hu.user.lis.ui.Constants; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; @@ -15,7 +16,17 @@ public class ResourceConfigurer { return "login"; } - @GetMapping({"/partners", "/projects", "/associates", "/project-associates", "/service-records", "/settings", "/project/**"}) + @GetMapping({ + Constants.NAV_PARTNERS, + Constants.NAV_PROJECTS, + Constants.NAV_ASSOCIATES, + Constants.NAV_PROJECT_ASSOCIATES, + Constants.NAV_SERVICE_RECORDS, + Constants.NAV_IMPORT_INVOICES_ASSIGN, + Constants.NAV_IMPORT_INVOICES_APPROVE, + Constants.NAV_SETTINGS, + Constants.NAV_PROJECT_WILD_CARD + }) public String index() { return "index"; } diff --git a/lis-ui/src/main/java/hu/user/lis/ui/config/WebSecurityConfig.java b/lis-ui/src/main/java/hu/user/lis/ui/config/WebSecurityConfig.java index ac9de86..27916b9 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/config/WebSecurityConfig.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/config/WebSecurityConfig.java @@ -1,5 +1,6 @@ package hu.user.lis.ui.config; +import hu.user.lis.ui.Constants; import hu.user.lis.ui.auth.LdapUserDetailsContextMapper; import hu.user.lis.ui.auth.LocalAuthProvider; import org.springframework.beans.factory.annotation.Autowired; @@ -12,8 +13,6 @@ import org.springframework.security.config.annotation.web.configuration.WebSecur import org.springframework.security.web.authentication.Http403ForbiddenEntryPoint; import org.springframework.security.web.util.matcher.AntPathRequestMatcher; -import static hu.user.lis.ui.view.IndexViewModel.NAVIGATION; - @Configuration @EnableWebSecurity public class WebSecurityConfig extends WebSecurityConfigurerAdapter { @@ -33,7 +32,7 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.csrf().disable(); - String[] navigation = NAVIGATION.keySet().toArray(new String[]{}); + //String[] navigation = NAVIGATION.keySet().toArray(new String[]{}); http.headers().frameOptions().sameOrigin(); http.authorizeRequests() .antMatchers(ZUL_FILES).denyAll() // block direct access to zul files @@ -41,14 +40,14 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter { .antMatchers(HttpMethod.POST, "/zkau/upload/**").permitAll() // allow zk resources .regexMatchers(HttpMethod.GET, REMOVE_DESKTOP_REGEX).permitAll() // allow desktop cleanup .requestMatchers(req -> "rmDesktop".equals(req.getParameter("cmd_0"))).permitAll() // allow desktop cleanup from ZATS - .mvcMatchers("/", "/login", "/logout", "/api/**").permitAll() + .mvcMatchers(Constants.NAV_ROOT, Constants.NAV_LOGIN, Constants.NAV_LOGOUT, Constants.NAV_API + "/**").permitAll() //mvcMatchers(navigation).hasRole("USER") .anyRequest().authenticated() .and() .formLogin() - .loginPage("/login").defaultSuccessUrl("/partners") + .loginPage(Constants.NAV_LOGIN).defaultSuccessUrl(Constants.NAV_PARTNERS) .and() - .logout().logoutUrl("/logout").logoutSuccessUrl("/") + .logout().logoutUrl(Constants.NAV_LOGOUT).logoutSuccessUrl(Constants.NAV_LOGIN) .and() .exceptionHandling() .defaultAuthenticationEntryPointFor( diff --git a/lis-ui/src/main/java/hu/user/lis/ui/data/ApproveInvoicesDataModel.java b/lis-ui/src/main/java/hu/user/lis/ui/data/ApproveInvoicesDataModel.java new file mode 100644 index 0000000..8176a60 --- /dev/null +++ b/lis-ui/src/main/java/hu/user/lis/ui/data/ApproveInvoicesDataModel.java @@ -0,0 +1,58 @@ +package hu.user.lis.ui.data; + +import hu.user.lis.ui.data.common.CachedSpringDataModel; +import hu.user.lis.workflow.event.ImportInvoicesEvent; +import hu.user.lis.workflow.invoice.service.WorkflowManagerService; +import lombok.extern.log4j.Log4j2; +import org.camunda.bpm.engine.task.Task; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.config.ConfigurableBeanFactory; +import org.springframework.context.ApplicationListener; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; +import org.zkoss.json.JSONObject; +import org.zkoss.zul.FieldComparator; +import org.zkoss.zul.event.ListDataEvent; + +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Component +@Log4j2 +@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) +public class ApproveInvoicesDataModel extends CachedSpringDataModel implements ApplicationListener { + @Autowired + WorkflowManagerService workflowManagerService; + + public void refresh() { + super.reset(); + } + + @Override + public void onApplicationEvent(ImportInvoicesEvent event) { + fireEvent(ListDataEvent.STRUCTURE_CHANGED, -1, -1); + } + + public void completeTask(JSONObject selectedEntity, Map vars) { + String taskId = (String) selectedEntity.get("taskId"); + workflowManagerService.completeTask(taskId, vars); + } + + @Override + public List getResultSet(int page, int pageSize, FieldComparator sortComparator) { + List tasks = workflowManagerService.listApproveInvoiceTasks(); + return tasks.stream().map(t -> { + JSONObject o = new JSONObject(); + o.put("taskId", t.getId()); + o.putAll(workflowManagerService.getVariables(t.getId())); + log.info("Task {}", o); + return o; + }).collect(Collectors.toList()); + } + + @Override + public int getResultSetCount() { + return workflowManagerService.listApproveInvoiceTasks().size(); + } +} diff --git a/lis-ui/src/main/java/hu/user/lis/ui/data/AssociateSelectorDataModel.java b/lis-ui/src/main/java/hu/user/lis/ui/data/AssociateSelectorDataModel.java index 608c434..1c07404 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/data/AssociateSelectorDataModel.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/data/AssociateSelectorDataModel.java @@ -2,6 +2,7 @@ package hu.user.lis.ui.data; import hu.user.lis.db.Associate; import hu.user.lis.db.repository.AssociateRepository; +import hu.user.lis.ui.data.common.CachedSpringDataModel; import lombok.extern.log4j.Log4j2; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; diff --git a/lis-ui/src/main/java/hu/user/lis/ui/data/AssociatesDataModel.java b/lis-ui/src/main/java/hu/user/lis/ui/data/AssociatesDataModel.java index 2f2da1c..2064cf8 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/data/AssociatesDataModel.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/data/AssociatesDataModel.java @@ -4,6 +4,7 @@ import hu.user.lis.db.Associate; import hu.user.lis.db.repository.AssociateRepository; import hu.user.lis.services.data.AssociateService; import hu.user.lis.services.data.EntityDataService; +import hu.user.lis.ui.data.common.CachedSpringDataModel; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.ConfigurableBeanFactory; diff --git a/lis-ui/src/main/java/hu/user/lis/ui/data/ImportInvoicesDataModel.java b/lis-ui/src/main/java/hu/user/lis/ui/data/ImportInvoicesDataModel.java new file mode 100644 index 0000000..6ad8f8e --- /dev/null +++ b/lis-ui/src/main/java/hu/user/lis/ui/data/ImportInvoicesDataModel.java @@ -0,0 +1,50 @@ +package hu.user.lis.ui.data; + +import hu.user.lis.ui.data.common.CachedSpringDataModel; +import hu.user.lis.workflow.invoice.service.WorkflowManagerService; +import lombok.extern.log4j.Log4j2; +import org.camunda.bpm.engine.task.Task; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.config.ConfigurableBeanFactory; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; +import org.zkoss.json.JSONObject; +import org.zkoss.zul.FieldComparator; + +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Component +@Log4j2 +@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) +public class ImportInvoicesDataModel extends CachedSpringDataModel { + @Autowired + WorkflowManagerService workflowManagerService; + + public void refresh() { + super.reset(); + } + + public void completeTask(JSONObject selectedEntity, Map vars) { + String taskId = (String) selectedEntity.get("taskId"); + workflowManagerService.completeTask(taskId, vars); + } + + @Override + public List getResultSet(int page, int pageSize, FieldComparator sortComparator) { + List tasks = workflowManagerService.listAssignInvoiceTasks(); + return tasks.stream().map(t -> { + JSONObject o = new JSONObject(); + o.put("taskId", t.getId()); + o.putAll(workflowManagerService.getVariables(t.getId())); + log.info("Task {}", o); + return o; + }).collect(Collectors.toList()); + } + + @Override + public int getResultSetCount() { + return workflowManagerService.listAssignInvoiceTasks().size(); + } +} diff --git a/lis-ui/src/main/java/hu/user/lis/ui/data/PartnerSelectorDataModel.java b/lis-ui/src/main/java/hu/user/lis/ui/data/PartnerSelectorDataModel.java index 8149566..766f7dc 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/data/PartnerSelectorDataModel.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/data/PartnerSelectorDataModel.java @@ -2,6 +2,7 @@ package hu.user.lis.ui.data; import hu.user.lis.db.Partner; import hu.user.lis.db.repository.PartnerRepository; +import hu.user.lis.ui.data.common.CachedSpringDataModel; import lombok.extern.log4j.Log4j2; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; diff --git a/lis-ui/src/main/java/hu/user/lis/ui/data/PartnersDataModel.java b/lis-ui/src/main/java/hu/user/lis/ui/data/PartnersDataModel.java index 155d20b..2d3f704 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/data/PartnersDataModel.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/data/PartnersDataModel.java @@ -4,6 +4,7 @@ import hu.user.lis.db.Partner; import hu.user.lis.db.repository.PartnerRepository; import hu.user.lis.services.data.EntityDataService; import hu.user.lis.services.data.PartnerService; +import hu.user.lis.ui.data.common.CachedSpringDataModel; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.ConfigurableBeanFactory; diff --git a/lis-ui/src/main/java/hu/user/lis/ui/data/ProjectSelectorDataModel.java b/lis-ui/src/main/java/hu/user/lis/ui/data/ProjectSelectorDataModel.java index de01efa..a969e1c 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/data/ProjectSelectorDataModel.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/data/ProjectSelectorDataModel.java @@ -2,6 +2,7 @@ package hu.user.lis.ui.data; import hu.user.lis.db.Project; import hu.user.lis.db.repository.ProjectRepository; +import hu.user.lis.ui.data.common.CachedSpringDataModel; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.ConfigurableBeanFactory; diff --git a/lis-ui/src/main/java/hu/user/lis/ui/data/ProjectStatusDataModel.java b/lis-ui/src/main/java/hu/user/lis/ui/data/ProjectStatusDataModel.java index cd38b81..5297d02 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/data/ProjectStatusDataModel.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/data/ProjectStatusDataModel.java @@ -3,6 +3,7 @@ package hu.user.lis.ui.data; import hu.user.lis.db.ProjectStatus; import hu.user.lis.db.repository.ProjectStatusRepository; import hu.user.lis.services.data.ProjectStatusService; +import hu.user.lis.ui.data.common.CachedSpringDataModel; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.ConfigurableBeanFactory; diff --git a/lis-ui/src/main/java/hu/user/lis/ui/data/ProjectsDataModel.java b/lis-ui/src/main/java/hu/user/lis/ui/data/ProjectsDataModel.java index c3b050b..f9972ff 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/data/ProjectsDataModel.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/data/ProjectsDataModel.java @@ -4,6 +4,7 @@ import hu.user.lis.db.Project; import hu.user.lis.db.ProjectStatus; import hu.user.lis.db.repository.ProjectRepository; import hu.user.lis.services.data.EntityDataService; +import hu.user.lis.ui.data.common.CachedSpringDataModel; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.ConfigurableBeanFactory; diff --git a/lis-ui/src/main/java/hu/user/lis/ui/data/ServiceRecordsDataModel.java b/lis-ui/src/main/java/hu/user/lis/ui/data/ServiceRecordsDataModel.java index d033456..4ad6914 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/data/ServiceRecordsDataModel.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/data/ServiceRecordsDataModel.java @@ -6,6 +6,7 @@ import hu.user.lis.db.ServiceRecord; import hu.user.lis.db.repository.ServiceRecordRepository; import hu.user.lis.services.data.EntityDataService; import hu.user.lis.services.data.ServiceRecordService; +import hu.user.lis.ui.data.common.CachedSpringDataModel; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.ConfigurableBeanFactory; diff --git a/lis-ui/src/main/java/hu/user/lis/ui/data/SuppliersDataModel.java b/lis-ui/src/main/java/hu/user/lis/ui/data/SuppliersDataModel.java index f7e5235..43ab7a6 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/data/SuppliersDataModel.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/data/SuppliersDataModel.java @@ -2,6 +2,7 @@ package hu.user.lis.ui.data; import hu.user.lis.db.Supplier; import hu.user.lis.services.data.SupplierService; +import hu.user.lis.ui.data.common.CachedDataModel; import lombok.extern.log4j.Log4j2; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; diff --git a/lis-ui/src/main/java/hu/user/lis/ui/data/SuppliersSimpleDataModel.java b/lis-ui/src/main/java/hu/user/lis/ui/data/SuppliersSimpleDataModel.java index 5e6d6b9..ef855fb 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/data/SuppliersSimpleDataModel.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/data/SuppliersSimpleDataModel.java @@ -2,6 +2,7 @@ package hu.user.lis.ui.data; import hu.user.lis.db.Supplier; import hu.user.lis.services.data.SupplierService; +import hu.user.lis.ui.data.common.CachedDataModel; import lombok.extern.log4j.Log4j2; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; diff --git a/lis-ui/src/main/java/hu/user/lis/ui/data/CachedDataModel.java b/lis-ui/src/main/java/hu/user/lis/ui/data/common/CachedDataModel.java similarity index 99% rename from lis-ui/src/main/java/hu/user/lis/ui/data/CachedDataModel.java rename to lis-ui/src/main/java/hu/user/lis/ui/data/common/CachedDataModel.java index 1610b48..8d07b12 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/data/CachedDataModel.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/data/common/CachedDataModel.java @@ -1,4 +1,4 @@ -package hu.user.lis.ui.data; +package hu.user.lis.ui.data.common; import lombok.Setter; import lombok.extern.log4j.Log4j2; diff --git a/lis-ui/src/main/java/hu/user/lis/ui/data/CachedSpringDataModel.java b/lis-ui/src/main/java/hu/user/lis/ui/data/common/CachedSpringDataModel.java similarity index 98% rename from lis-ui/src/main/java/hu/user/lis/ui/data/CachedSpringDataModel.java rename to lis-ui/src/main/java/hu/user/lis/ui/data/common/CachedSpringDataModel.java index 8e000b9..ea47302 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/data/CachedSpringDataModel.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/data/common/CachedSpringDataModel.java @@ -1,4 +1,4 @@ -package hu.user.lis.ui.data; +package hu.user.lis.ui.data.common; import hu.user.lis.db.Profile; import hu.user.lis.services.data.EntityDataService; diff --git a/lis-ui/src/main/java/hu/user/lis/ui/data/FormDocument.java b/lis-ui/src/main/java/hu/user/lis/ui/data/common/FormDocument.java similarity index 95% rename from lis-ui/src/main/java/hu/user/lis/ui/data/FormDocument.java rename to lis-ui/src/main/java/hu/user/lis/ui/data/common/FormDocument.java index 8a7351a..ae2db8f 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/data/FormDocument.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/data/common/FormDocument.java @@ -1,4 +1,4 @@ -package hu.user.lis.ui.data; +package hu.user.lis.ui.data.common; import com.fasterxml.jackson.databind.ObjectMapper; import lombok.Builder; @@ -10,7 +10,7 @@ import org.zkoss.lang.Strings; @Builder @Log4j2 public class FormDocument extends JSONObject { - + private Object data; public FormDocument setData(Object data) { diff --git a/lis-ui/src/main/java/hu/user/lis/ui/editor/ImportInvoiceApproveEditorModel.java b/lis-ui/src/main/java/hu/user/lis/ui/editor/ImportInvoiceApproveEditorModel.java new file mode 100644 index 0000000..561ec5e --- /dev/null +++ b/lis-ui/src/main/java/hu/user/lis/ui/editor/ImportInvoiceApproveEditorModel.java @@ -0,0 +1,59 @@ +package hu.user.lis.ui.editor; + +import com.google.common.collect.ImmutableMap; +import hu.user.lis.db.Invoice; +import hu.user.lis.db.Partner; +import hu.user.lis.db.Project; +import lombok.Getter; +import lombok.Setter; +import lombok.extern.log4j.Log4j2; +import org.zkoss.bind.annotation.*; +import org.zkoss.zk.ui.Component; +import org.zkoss.zk.ui.event.Event; +import org.zkoss.zk.ui.event.Events; +import org.zkoss.zul.Window; + +import java.util.Objects; + +@Log4j2 +@Getter +@Setter +public class ImportInvoiceApproveEditorModel extends InvoiceEditorModel { + @Init + public void init() { + super.init(); + } + + @Override + protected boolean canSave(Invoice entity) { + return super.canSave(entity) + && Objects.nonNull(entity.getProject()) + && Objects.nonNull(entity.getFile()); + } + + @AfterCompose + public void onAfterCompose(@ContextParam(ContextType.VIEW) Component view) { + getEntitySelectorRouter().configureSelector(Project.class, getFormDocument(), "project"); + getEntitySelectorRouter().configureSelector(Partner.class, getFormDocument(), "partner"); + validate(); + } + + @Command + public void onCloseApproveWindow(@BindingParam("target") Window target, @BindingParam("save") int save) { + if (save == 0) { + Events.postEvent(new Event("onClose", target, null)); + return; + } + ImmutableMap args = ImmutableMap.of("approved", save == 2, "modifiedEntity", getFormDocument()); + if (save == 1) { + Events.postEvent(new Event("onClose", target, + ImmutableMap.of("approved", false))); + return; + } + + if (isSaveEnabled()) { + Events.postEvent(new Event("onClose", target, + ImmutableMap.of("approved", true, "modifiedEntity", getFormDocument()))); + } + } +} diff --git a/lis-ui/src/main/java/hu/user/lis/ui/editor/ImportInvoiceAssignEditorModel.java b/lis-ui/src/main/java/hu/user/lis/ui/editor/ImportInvoiceAssignEditorModel.java new file mode 100644 index 0000000..5864d73 --- /dev/null +++ b/lis-ui/src/main/java/hu/user/lis/ui/editor/ImportInvoiceAssignEditorModel.java @@ -0,0 +1,39 @@ +package hu.user.lis.ui.editor; + +import hu.user.lis.db.Invoice; +import hu.user.lis.db.Partner; +import hu.user.lis.db.Project; +import lombok.Getter; +import lombok.Setter; +import lombok.extern.log4j.Log4j2; +import org.zkoss.bind.annotation.AfterCompose; +import org.zkoss.bind.annotation.ContextParam; +import org.zkoss.bind.annotation.ContextType; +import org.zkoss.bind.annotation.Init; +import org.zkoss.zk.ui.Component; + +import java.util.Objects; + +@Log4j2 +@Getter +@Setter +public class ImportInvoiceAssignEditorModel extends InvoiceEditorModel { + @Init + public void init() { + super.init(); + } + + @Override + protected boolean canSave(Invoice entity) { + return super.canSave(entity) + && Objects.nonNull(entity.getProject()) + && Objects.nonNull(entity.getFile()); + } + + @AfterCompose + public void onAfterCompose(@ContextParam(ContextType.VIEW) Component view) { + getEntitySelectorRouter().configureSelector(Project.class, getFormDocument(), "project"); + getEntitySelectorRouter().configureSelector(Partner.class, getFormDocument(), "partner"); + validate(); + } +} diff --git a/lis-ui/src/main/java/hu/user/lis/ui/editor/InvoiceEditorModel.java b/lis-ui/src/main/java/hu/user/lis/ui/editor/InvoiceEditorModel.java index 8bad8a1..098cf35 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/editor/InvoiceEditorModel.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/editor/InvoiceEditorModel.java @@ -29,6 +29,7 @@ public class InvoiceEditorModel extends EntityEditorModel { @Init public void init() { + super.init(); } diff --git a/lis-ui/src/main/java/hu/user/lis/ui/editor/common/Editors.java b/lis-ui/src/main/java/hu/user/lis/ui/editor/common/Editors.java index d849a7e..6336065 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/editor/common/Editors.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/editor/common/Editors.java @@ -14,7 +14,8 @@ public class Editors { public static final String TREASURY = "~./editor/treasury-editor.zul"; public static final String ASSOCIATE = "~./editor/associate-editor.zul"; public static final String PARTNER = "~./editor/partner-editor.zul"; - + public static final String IMPORT_INVOICE_ASSIGN = "~./editor/import-invoice-assign-editor.zul"; + public static final String IMPORT_INVOICE_APPROVE = "~./editor/import-invoice-approve-editor.zul"; public static final String PROJECT = "~./editor/project-editor.zul"; public static void doEdit(String page, E entity, EditCompleted editCompleted) { diff --git a/lis-ui/src/main/java/hu/user/lis/ui/editor/selector/AssociateSelectorModel.java b/lis-ui/src/main/java/hu/user/lis/ui/editor/selector/AssociateSelectorModel.java index 9e7c809..a1ffc4d 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/editor/selector/AssociateSelectorModel.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/editor/selector/AssociateSelectorModel.java @@ -3,7 +3,7 @@ package hu.user.lis.ui.editor.selector; import hu.user.lis.db.Associate; import hu.user.lis.ui.converter.AssociateToNameConverter; import hu.user.lis.ui.data.AssociateSelectorDataModel; -import hu.user.lis.ui.data.CachedSpringDataModel; +import hu.user.lis.ui.data.common.CachedSpringDataModel; import lombok.Getter; import lombok.Setter; import lombok.extern.log4j.Log4j2; diff --git a/lis-ui/src/main/java/hu/user/lis/ui/editor/selector/EntitySelectorModel.java b/lis-ui/src/main/java/hu/user/lis/ui/editor/selector/EntitySelectorModel.java index 34014f4..21c8453 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/editor/selector/EntitySelectorModel.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/editor/selector/EntitySelectorModel.java @@ -1,7 +1,7 @@ package hu.user.lis.ui.editor.selector; import hu.user.lis.services.data.EntityDataServiceBase; -import hu.user.lis.ui.data.CachedSpringDataModel; +import hu.user.lis.ui.data.common.CachedSpringDataModel; import lombok.Getter; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; diff --git a/lis-ui/src/main/java/hu/user/lis/ui/editor/selector/PartnerSelectorModel.java b/lis-ui/src/main/java/hu/user/lis/ui/editor/selector/PartnerSelectorModel.java index 4740720..d1bd41f 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/editor/selector/PartnerSelectorModel.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/editor/selector/PartnerSelectorModel.java @@ -2,8 +2,8 @@ package hu.user.lis.ui.editor.selector; import hu.user.lis.db.Partner; import hu.user.lis.ui.converter.PartnerToNameConverter; -import hu.user.lis.ui.data.CachedSpringDataModel; import hu.user.lis.ui.data.PartnerSelectorDataModel; +import hu.user.lis.ui.data.common.CachedSpringDataModel; import lombok.Getter; import lombok.Setter; import lombok.extern.log4j.Log4j2; diff --git a/lis-ui/src/main/java/hu/user/lis/ui/editor/selector/ProjectSelectorModel.java b/lis-ui/src/main/java/hu/user/lis/ui/editor/selector/ProjectSelectorModel.java index d503837..abdd007 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/editor/selector/ProjectSelectorModel.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/editor/selector/ProjectSelectorModel.java @@ -2,8 +2,8 @@ package hu.user.lis.ui.editor.selector; import hu.user.lis.db.Project; import hu.user.lis.ui.converter.ProjectToInfoConverter; -import hu.user.lis.ui.data.CachedSpringDataModel; import hu.user.lis.ui.data.ProjectSelectorDataModel; +import hu.user.lis.ui.data.common.CachedSpringDataModel; import lombok.Getter; import lombok.Setter; import lombok.extern.log4j.Log4j2; diff --git a/lis-ui/src/main/java/hu/user/lis/ui/event/EventBus.java b/lis-ui/src/main/java/hu/user/lis/ui/event/EventBus.java index 740bc24..431c476 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/event/EventBus.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/event/EventBus.java @@ -11,6 +11,9 @@ import org.zkoss.zk.ui.event.EventQueues; @Service @Log4j2 public class EventBus { + private EventQueue getProcessEventQueue() { + return EventQueues.lookup(Constants.PROCESS_EVENT_QUEUE, EventQueues.APPLICATION, true); + } private EventQueue getQueue() { return EventQueues.lookup(Constants.PROJECT_EDITOR_QUEUE, EventQueues.SESSION, true); @@ -28,10 +31,15 @@ public class EventBus { getBindingQueue().subscribe(listener); } + public void registerForProcessEvent(EventListener listener) { + getProcessEventQueue().subscribe(listener); + } + public void unregister(EventListener listener) { try { getQueue().unsubscribe(listener); getBindingQueue().unsubscribe(listener); + getProcessEventQueue().unsubscribe(listener); } catch (Exception e) { // log.warn("Not necessary to unregister"); } @@ -60,4 +68,8 @@ public class EventBus { public void setProjectsListData(Object data) { getQueue().publish(new Event(Constants.SET_PROJECTS_LIST_DATA, null, data)); } + + public void refreshImportInvoiceTasks(String eventType) { + getProcessEventQueue().publish(new Event(Constants.REFRESH_INVOICE_IMPORT_TASKS, null, eventType)); + } } diff --git a/lis-ui/src/main/java/hu/user/lis/ui/event/ProcessEventRouter.java b/lis-ui/src/main/java/hu/user/lis/ui/event/ProcessEventRouter.java new file mode 100644 index 0000000..dc43e3b --- /dev/null +++ b/lis-ui/src/main/java/hu/user/lis/ui/event/ProcessEventRouter.java @@ -0,0 +1,17 @@ +package hu.user.lis.ui.event; + +import hu.user.lis.workflow.event.ImportInvoicesEvent; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationListener; +import org.springframework.stereotype.Component; + +@Component +public class ProcessEventRouter implements ApplicationListener { + @Autowired + EventBus eventBus; + + @Override + public void onApplicationEvent(ImportInvoicesEvent event) { + eventBus.refreshImportInvoiceTasks(event.getEventType()); + } +} diff --git a/lis-ui/src/main/java/hu/user/lis/ui/view/ApproveInvoicesViewModel.java b/lis-ui/src/main/java/hu/user/lis/ui/view/ApproveInvoicesViewModel.java new file mode 100644 index 0000000..e51af8f --- /dev/null +++ b/lis-ui/src/main/java/hu/user/lis/ui/view/ApproveInvoicesViewModel.java @@ -0,0 +1,100 @@ +package hu.user.lis.ui.view; + +import com.google.common.collect.ImmutableMap; +import hu.user.lis.db.Invoice; +import hu.user.lis.db.repository.InvoiceRepository; +import hu.user.lis.ui.Constants; +import hu.user.lis.ui.data.ApproveInvoicesDataModel; +import hu.user.lis.ui.data.common.CachedSpringDataModel; +import hu.user.lis.ui.editor.common.Editors; +import hu.user.lis.ui.event.EventBus; +import hu.user.lis.ui.event.ProcessEventRouter; +import hu.user.lis.ui.view.common.EntityViewModel; +import lombok.Getter; +import lombok.extern.log4j.Log4j2; +import org.zkoss.bind.BindUtils; +import org.zkoss.bind.annotation.Command; +import org.zkoss.bind.annotation.Init; +import org.zkoss.bind.annotation.NotifyChange; +import org.zkoss.json.JSONObject; +import org.zkoss.zk.ui.Executions; +import org.zkoss.zk.ui.event.Event; +import org.zkoss.zk.ui.event.EventListener; +import org.zkoss.zk.ui.select.annotation.VariableResolver; +import org.zkoss.zk.ui.select.annotation.WireVariable; +import org.zkoss.zkplus.spring.DelegatingVariableResolver; +import org.zkoss.zul.Window; + +import java.util.Map; +import java.util.Objects; + +@Getter +@Log4j2 +@VariableResolver(DelegatingVariableResolver.class) +public class ApproveInvoicesViewModel extends EntityViewModel implements EventListener { + @WireVariable + ApproveInvoicesDataModel approveInvoicesDataModel; + + @WireVariable + ProcessEventRouter processEventRouter; + + @WireVariable + InvoiceRepository invoiceRepository; + + @WireVariable + EventBus eventBus; + + @Override + protected CachedSpringDataModel getDataModel() { + return approveInvoicesDataModel; + } + + @Override + protected String getNavigation() { + return Constants.NAV_IMPORT_INVOICES_APPROVE; + } + + @Init + public void init() { + super.init(); + } + + @Command + @NotifyChange("approveInvoicesDataModel") + public void onRefresh() { + setSelectedEntity(null); + approveInvoicesDataModel.refresh(); + BindUtils.postNotifyChange(this, "selectedEntity"); + BindUtils.postNotifyChange(this, "approveInvoicesDataModel"); + } + + @Command + public void onHandleTask() { + Invoice entity = (Invoice) getSelectedEntity().get("invoiceEntity"); + ImmutableMap args = ImmutableMap.of("formDocument", entity); + Window editorWindow = (Window) Executions.createComponents(Editors.IMPORT_INVOICE_APPROVE, null, args); + editorWindow.addEventListener("onClose", e -> { + if (Objects.nonNull(e.getData())) { + Map results = (Map) e.getData(); + boolean approved = (boolean) results.get("approved"); + Invoice modifiedEntity = (Invoice) results.get("modifiedEntity"); + //TODO move entity persistance to BPMN + if (approved) { + invoiceRepository.save(modifiedEntity); + } + approveInvoicesDataModel.completeTask(getSelectedEntity(), results); + onRefresh(); + } + }); + editorWindow.doModal(); + editorWindow.setFocus(true); + } + + @Override + public void onEvent(Event event) throws Exception { + if (Constants.REFRESH_INVOICE_IMPORT_TASKS.equals(event.getName())) { + onRefresh(); + log.info("Refreshed by {}", event.getData()); + } + } +} diff --git a/lis-ui/src/main/java/hu/user/lis/ui/view/AssignInvoicesViewModel.java b/lis-ui/src/main/java/hu/user/lis/ui/view/AssignInvoicesViewModel.java new file mode 100644 index 0000000..ae2186e --- /dev/null +++ b/lis-ui/src/main/java/hu/user/lis/ui/view/AssignInvoicesViewModel.java @@ -0,0 +1,87 @@ +package hu.user.lis.ui.view; + +import com.google.common.collect.ImmutableMap; +import hu.user.lis.db.Invoice; +import hu.user.lis.ui.Constants; +import hu.user.lis.ui.data.ImportInvoicesDataModel; +import hu.user.lis.ui.data.common.CachedSpringDataModel; +import hu.user.lis.ui.editor.common.Editors; +import hu.user.lis.ui.event.EventBus; +import hu.user.lis.ui.event.ProcessEventRouter; +import hu.user.lis.ui.view.common.EntityViewModel; +import hu.user.lis.workflow.invoice.service.WorkflowManagerService; +import lombok.Getter; +import lombok.extern.log4j.Log4j2; +import org.zkoss.bind.BindUtils; +import org.zkoss.bind.annotation.Command; +import org.zkoss.bind.annotation.Destroy; +import org.zkoss.bind.annotation.Init; +import org.zkoss.json.JSONObject; +import org.zkoss.zk.ui.event.Event; +import org.zkoss.zk.ui.event.EventListener; +import org.zkoss.zk.ui.select.annotation.VariableResolver; +import org.zkoss.zk.ui.select.annotation.WireVariable; +import org.zkoss.zkplus.spring.DelegatingVariableResolver; + +@Getter +@Log4j2 +@VariableResolver(DelegatingVariableResolver.class) +public class AssignInvoicesViewModel extends EntityViewModel implements EventListener { + @WireVariable + ImportInvoicesDataModel importInvoicesDataModel; + + @WireVariable + ProcessEventRouter processEventRouter; + + @WireVariable + EventBus eventBus; + + @WireVariable + WorkflowManagerService workflowManagerService; + + @Override + protected CachedSpringDataModel getDataModel() { + return importInvoicesDataModel; + } + + @Override + protected String getNavigation() { + return Constants.NAV_IMPORT_INVOICES_ASSIGN; + } + + @Init + public void init() { + super.init(); + eventBus.registerForProcessEvent(this); + } + + @Command + public void onRefresh() { + setSelectedEntity(null); + importInvoicesDataModel.refresh(); + BindUtils.postNotifyChange(this, "selectedEntity"); + BindUtils.postNotifyChange(this, "importInvoicesDataModel"); + } + + @Command + public void onHandleTask() { + Invoice entity = (Invoice) getSelectedEntity().get("invoiceEntity"); + Editors.doEdit(Editors.IMPORT_INVOICE_ASSIGN, entity, modifiedEntity -> { + importInvoicesDataModel.completeTask(getSelectedEntity(), ImmutableMap.of("invoiceEntity", modifiedEntity)); + onRefresh(); + }); + } + + @Override + public void onEvent(Event event) throws Exception { + if (Constants.REFRESH_INVOICE_IMPORT_TASKS.equals(event.getName())) { + onRefresh(); + log.info("Refreshed by {}", event.getData()); + } + } + + @Destroy + public void onDestroy() { + eventBus.unregister(this); + } +} diff --git a/lis-ui/src/main/java/hu/user/lis/ui/view/AssociatesViewModel.java b/lis-ui/src/main/java/hu/user/lis/ui/view/AssociatesViewModel.java index 1666fc8..b7c86eb 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/view/AssociatesViewModel.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/view/AssociatesViewModel.java @@ -4,7 +4,7 @@ import com.google.common.collect.ImmutableMap; import hu.user.lis.db.Associate; import hu.user.lis.ui.Constants; import hu.user.lis.ui.data.AssociatesDataModel; -import hu.user.lis.ui.data.CachedSpringDataModel; +import hu.user.lis.ui.data.common.CachedSpringDataModel; import hu.user.lis.ui.editor.common.Editors; import hu.user.lis.ui.view.common.FilterActiveViewModel; import lombok.Getter; @@ -14,8 +14,8 @@ import org.zkoss.bind.annotation.Init; import org.zkoss.zk.ui.select.annotation.WireVariable; import org.zkoss.zul.Messagebox; -import static hu.user.lis.ui.data.CachedDataModel.ASCENDING; -import static hu.user.lis.ui.data.CachedDataModel.NATURAL; +import static hu.user.lis.ui.data.common.CachedDataModel.ASCENDING; +import static hu.user.lis.ui.data.common.CachedDataModel.NATURAL; @Log4j2 public class AssociatesViewModel extends FilterActiveViewModel { diff --git a/lis-ui/src/main/java/hu/user/lis/ui/view/IndexViewModel.java b/lis-ui/src/main/java/hu/user/lis/ui/view/IndexViewModel.java index e3a35fe..d87f5bb 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/view/IndexViewModel.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/view/IndexViewModel.java @@ -1,11 +1,11 @@ package hu.user.lis.ui.view; -import com.google.common.collect.ImmutableMap; import hu.user.lis.ui.Constants; import hu.user.lis.ui.auth.CurrentProfile; import hu.user.lis.ui.editor.common.Editors; import hu.user.lis.ui.event.EventBus; import hu.user.lis.ui.session.SessionSettings; +import hu.user.lis.workflow.invoice.service.WorkflowManagerService; import lombok.Getter; import lombok.Setter; import lombok.extern.log4j.Log4j2; @@ -19,30 +19,37 @@ import org.zkoss.zk.ui.event.Event; import org.zkoss.zk.ui.event.EventListener; import org.zkoss.zk.ui.select.annotation.VariableResolver; import org.zkoss.zk.ui.select.annotation.WireVariable; - -import java.util.Map; +import org.zkoss.zk.ui.util.Notification; @Log4j2 @VariableResolver(org.zkoss.zkplus.spring.DelegatingVariableResolver.class) @Getter @Setter -public class IndexViewModel implements EventListener { - private static final String PARTNERS_LIST = "~./partners.zul"; +public class IndexViewModel implements EventListener { + // private static final String PARTNERS_LIST = "~./partners.zul"; private static final String PROJECTS_LIST = "~./projects.zul"; - private static final String ASSOCIATES_LIST = "~./associates.zul"; - private static final String PROJECT_ASSOCIATES_LIST = "~./project-associates.zul"; + // private static final String ASSOCIATES_LIST = "~./associates.zul"; +// private static final String PROJECT_ASSOCIATES_LIST = "~./project-associates.zul"; private static final String SERVICE_RECORDS_LIST = "~./service-records.zul"; - private static final String SETTINGS_LIST = "~./settings.zul"; - public static Map NAVIGATION = ImmutableMap.of( - Constants.NAV_PARTNERS, PARTNERS_LIST, - Constants.NAV_PROJECTS, PROJECTS_LIST, - Constants.NAV_PROJECT, Editors.PROJECT, - Constants.NAV_ASSOCIATES, ASSOCIATES_LIST, - Constants.NAV_PROJECT_ASSOCIATES, PROJECT_ASSOCIATES_LIST, - Constants.NAV_SERVICE_RECORDS, SERVICE_RECORDS_LIST, - Constants.NAV_SETTINGS, SETTINGS_LIST - ); +// private static final String SETTINGS_LIST = "~./settings.zul"; +// private static final String IMPORT_INVOICES_LIST = "~./import-invoices-assign.zul"; +// private static final String APPROVE_INVOICES_LIST = "~./import-invoices-approve.zul"; +// +// public static Map NAVIGATION = ImmutableMap.of( +// Constants.NAV_PARTNERS, PARTNERS_LIST, +// Constants.NAV_PROJECTS, PROJECTS_LIST, +// Constants.NAV_PROJECT, Editors.PROJECT, +// Constants.NAV_ASSOCIATES, ASSOCIATES_LIST, +// Constants.NAV_PROJECT_ASSOCIATES, PROJECT_ASSOCIATES_LIST, +// Constants.NAV_SERVICE_RECORDS, SERVICE_RECORDS_LIST, +// Constants.NAV_SETTINGS, SETTINGS_LIST, +// Constants.NAV_IMPORT_INVOICES, IMPORT_INVOICES_LIST, +// Constants.NAV_APPROVE_INVOICES, IMPORT_INVOICES_LIST +// ); + + @WireVariable + EventBus eventBus; @WireVariable BuildProperties buildProperties; @@ -51,10 +58,10 @@ public class IndexViewModel implements EventListener { SessionSettings sessionSettings; @WireVariable - EventBus eventBus; + CurrentProfile currentProfile; @WireVariable - CurrentProfile currentProfile; + WorkflowManagerService workflowManagerService; String searchPhrase; @@ -70,16 +77,14 @@ public class IndexViewModel implements EventListener { } private void route(String path) { - if (path.startsWith("/project/") && path.split("/").length > 2) { + if (path.startsWith(Constants.NAV_PROJECTS + "/") && path.split("/").length > 2) { String id = path.split("/")[2]; selectPage(Editors.PROJECT); eventBus.setProjectEditorData(Long.parseLong(id)); } else { - if (NAVIGATION.containsKey(path)) { - setPage(NAVIGATION.get(path)); - } else { - setPage(PARTNERS_LIST); - } + if (Constants.NAV_ROOT.equals(path)) + path = Constants.NAV_PARTNERS; + setPage("~." + path + ".zul"); } } @@ -110,7 +115,20 @@ public class IndexViewModel implements EventListener { @Destroy public void onDestroy() { - log.info("Destroy {}"); eventBus.unregister(this); } + + @Command + public void onStartImportInvoiceProcess() { + try { + workflowManagerService.startImportIncomingInvoicesProcess(); + } catch (Exception e) { + Notification.show(e.getMessage(), true); + } + } + + @Command + public void onCancelImportInvoiceProcess() { + workflowManagerService.cancelInvoiceImportProcess(); + } } diff --git a/lis-ui/src/main/java/hu/user/lis/ui/view/PartnersViewModel.java b/lis-ui/src/main/java/hu/user/lis/ui/view/PartnersViewModel.java index 5f84d12..a6a5208 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/view/PartnersViewModel.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/view/PartnersViewModel.java @@ -3,8 +3,8 @@ package hu.user.lis.ui.view; import com.google.common.collect.ImmutableMap; import hu.user.lis.db.Partner; import hu.user.lis.ui.Constants; -import hu.user.lis.ui.data.CachedSpringDataModel; import hu.user.lis.ui.data.PartnersDataModel; +import hu.user.lis.ui.data.common.CachedSpringDataModel; import hu.user.lis.ui.editor.common.Editors; import hu.user.lis.ui.view.common.FilterActiveViewModel; import lombok.Getter; @@ -14,8 +14,8 @@ import org.zkoss.bind.annotation.Init; import org.zkoss.zk.ui.select.annotation.WireVariable; import org.zkoss.zul.Messagebox; -import static hu.user.lis.ui.data.CachedDataModel.ASCENDING; -import static hu.user.lis.ui.data.CachedDataModel.NATURAL; +import static hu.user.lis.ui.data.common.CachedDataModel.ASCENDING; +import static hu.user.lis.ui.data.common.CachedDataModel.NATURAL; @Log4j2 public class PartnersViewModel extends FilterActiveViewModel { diff --git a/lis-ui/src/main/java/hu/user/lis/ui/view/ProjectsViewModel.java b/lis-ui/src/main/java/hu/user/lis/ui/view/ProjectsViewModel.java index 125b900..0703ce0 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/view/ProjectsViewModel.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/view/ProjectsViewModel.java @@ -3,8 +3,8 @@ package hu.user.lis.ui.view; import com.google.common.collect.ImmutableMap; import hu.user.lis.db.Project; import hu.user.lis.ui.Constants; -import hu.user.lis.ui.data.CachedSpringDataModel; import hu.user.lis.ui.data.ProjectsDataModel; +import hu.user.lis.ui.data.common.CachedSpringDataModel; import hu.user.lis.ui.event.EventBus; import hu.user.lis.ui.view.common.FilterActiveViewModel; import lombok.Getter; @@ -20,8 +20,8 @@ import org.zkoss.zul.Messagebox; import java.util.Map; import java.util.Objects; -import static hu.user.lis.ui.data.CachedDataModel.ASCENDING; -import static hu.user.lis.ui.data.CachedDataModel.NATURAL; +import static hu.user.lis.ui.data.common.CachedDataModel.ASCENDING; +import static hu.user.lis.ui.data.common.CachedDataModel.NATURAL; @Log4j2 diff --git a/lis-ui/src/main/java/hu/user/lis/ui/view/ServiceRecordsViewModel.java b/lis-ui/src/main/java/hu/user/lis/ui/view/ServiceRecordsViewModel.java index 3fc73f3..6b78af6 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/view/ServiceRecordsViewModel.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/view/ServiceRecordsViewModel.java @@ -5,8 +5,8 @@ import hu.user.lis.db.Associate; import hu.user.lis.db.Project; import hu.user.lis.db.ServiceRecord; import hu.user.lis.ui.Constants; -import hu.user.lis.ui.data.CachedSpringDataModel; import hu.user.lis.ui.data.ServiceRecordsDataModel; +import hu.user.lis.ui.data.common.CachedSpringDataModel; import hu.user.lis.ui.editor.common.Editors; import hu.user.lis.ui.editor.selector.EntitySelectorRouter; import hu.user.lis.ui.event.EventBus; @@ -27,8 +27,8 @@ import org.zkoss.zkplus.spring.DelegatingVariableResolver; import java.util.Map; import java.util.Objects; -import static hu.user.lis.ui.data.CachedDataModel.ASCENDING; -import static hu.user.lis.ui.data.CachedDataModel.NATURAL; +import static hu.user.lis.ui.data.common.CachedDataModel.ASCENDING; +import static hu.user.lis.ui.data.common.CachedDataModel.NATURAL; @Log4j2 diff --git a/lis-ui/src/main/java/hu/user/lis/ui/view/common/EntityViewModel.java b/lis-ui/src/main/java/hu/user/lis/ui/view/common/EntityViewModel.java index 578cad2..21d319a 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/view/common/EntityViewModel.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/view/common/EntityViewModel.java @@ -1,7 +1,7 @@ package hu.user.lis.ui.view.common; import hu.user.lis.services.data.EntityDataService; -import hu.user.lis.ui.data.CachedSpringDataModel; +import hu.user.lis.ui.data.common.CachedSpringDataModel; import lombok.Getter; import lombok.Setter; import lombok.extern.log4j.Log4j2; diff --git a/lis-ui/src/main/resources/web/editor/import-invoice-approve-editor.zul b/lis-ui/src/main/resources/web/editor/import-invoice-approve-editor.zul new file mode 100644 index 0000000..ee110e0 --- /dev/null +++ b/lis-ui/src/main/resources/web/editor/import-invoice-approve-editor.zul @@ -0,0 +1,122 @@ + + + + + + import hu.user.lis.db.Currency; + ListModelList currencies = new ListModelList(Currency.values()); + + + + +
+ + + + + + + + + + + + + + + + + + +
+