From 5711f958c3bf4ba51532d60a876b1be74ae472c0 Mon Sep 17 00:00:00 2001 From: elgekko Date: Mon, 22 May 2023 22:28:28 +0200 Subject: [PATCH] IncomeMargins added --- .../hu/user/lis/ui/data/IncomeMargin.java | 14 ++++ .../lis/ui/data/IncomeMarginsDataModel.java | 66 +++++++++++++++++++ .../lis/ui/editor/ProjectEditorModel.java | 33 +++++----- .../java/hu/user/lis/ui/event/EventBus.java | 28 ++++---- .../hu/user/lis/ui/view/IndexViewModel.java | 4 ++ lis-ui/src/main/resources/metainfo/zk/zk.xml | 12 ++-- .../src/main/resources/web/project-editor.zul | 16 ++++- .../main/resources/web/service-records.zul | 2 +- 8 files changed, 141 insertions(+), 34 deletions(-) create mode 100644 lis-ui/src/main/java/hu/user/lis/ui/data/IncomeMargin.java create mode 100644 lis-ui/src/main/java/hu/user/lis/ui/data/IncomeMarginsDataModel.java diff --git a/lis-ui/src/main/java/hu/user/lis/ui/data/IncomeMargin.java b/lis-ui/src/main/java/hu/user/lis/ui/data/IncomeMargin.java new file mode 100644 index 0000000..934772e --- /dev/null +++ b/lis-ui/src/main/java/hu/user/lis/ui/data/IncomeMargin.java @@ -0,0 +1,14 @@ +package hu.user.lis.ui.data; + +import hu.user.lis.db.Currency; +import lombok.Builder; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@Builder +public class IncomeMargin { + Currency currency; + Double amount; +} diff --git a/lis-ui/src/main/java/hu/user/lis/ui/data/IncomeMarginsDataModel.java b/lis-ui/src/main/java/hu/user/lis/ui/data/IncomeMarginsDataModel.java new file mode 100644 index 0000000..a4bddaa --- /dev/null +++ b/lis-ui/src/main/java/hu/user/lis/ui/data/IncomeMarginsDataModel.java @@ -0,0 +1,66 @@ +package hu.user.lis.ui.data; + +import hu.user.lis.db.Currency; +import hu.user.lis.db.Invoice; +import hu.user.lis.db.Project; +import hu.user.lis.db.Treasury; +import lombok.extern.log4j.Log4j2; +import org.springframework.beans.factory.config.ConfigurableBeanFactory; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; +import org.zkoss.bind.BindUtils; + +import java.util.*; +import java.util.stream.Collectors; + +@Component +@Log4j2 +@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) +public class IncomeMarginsDataModel extends ArrayList { + + public void recalculate(Project project) { + clear(); + Map balances = new HashMap<>(); + List outgoingInvoices = project.getOutgoingInvoices(); + if (Objects.nonNull(outgoingInvoices)) { + for (Invoice invoice : outgoingInvoices) { + addBalance(balances, invoice.getCurrency(), invoice.getNetAmount()); + } + } + + List incomingInvoices = project.getIncomingInvoices(); + if (Objects.nonNull(incomingInvoices)) { + for (Invoice invoice : incomingInvoices) { + substractBalance(balances, invoice.getCurrency(), invoice.getNetAmount()); + } + } + + List treasuries = project.getTreasuries(); + if (Objects.nonNull(treasuries)) { + for (Treasury treasury : treasuries) { + substractBalance(balances, treasury.getSellCurrency(), treasury.getSellAmount()); + addBalance(balances, treasury.getBuyCurrency(), treasury.getBuyAmount()); + } + } + + balances.entrySet().stream() + .map(s -> IncomeMargin.builder().currency(s.getKey()).amount(s.getValue()).build()) + .sorted(Comparator.comparing(IncomeMargin::getCurrency)) + .collect(Collectors.toCollection(() -> this)); + + BindUtils.postNotifyChange(null, null, this, "*"); + } + + + private void addBalance(Map balances, Currency currency, double amount) { + double currentBalance = balances.containsKey(currency) ? balances.get(currency) : 0; + currentBalance += amount; + balances.put(currency, currentBalance); + } + + private void substractBalance(Map balances, Currency currency, double amount) { + double currentBalance = balances.containsKey(currency) ? balances.get(currency) : 0; + currentBalance -= amount; + balances.put(currency, currentBalance); + } +} diff --git a/lis-ui/src/main/java/hu/user/lis/ui/editor/ProjectEditorModel.java b/lis-ui/src/main/java/hu/user/lis/ui/editor/ProjectEditorModel.java index e89a529..2b871a9 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/editor/ProjectEditorModel.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/editor/ProjectEditorModel.java @@ -9,10 +9,7 @@ import hu.user.lis.db.Treasury; import hu.user.lis.services.data.*; import hu.user.lis.ui.Constants; import hu.user.lis.ui.converter.ProjectStatusConverter; -import hu.user.lis.ui.data.AssociatesDataModel; -import hu.user.lis.ui.data.PartnerSelectorDataModel; -import hu.user.lis.ui.data.ProjectStatusDataModel; -import hu.user.lis.ui.data.ServiceRecordsDataModel; +import hu.user.lis.ui.data.*; import hu.user.lis.ui.event.EventBus; import lombok.Getter; import lombok.Setter; @@ -68,6 +65,8 @@ public class ProjectEditorModel extends AbstractValidator implements EventListen @WireVariable private ProjectStatusConverter projectStatusConverter; @WireVariable + private IncomeMarginsDataModel incomeMarginsDataModel; + @WireVariable private EventBus eventBus; private boolean formInvalid = true; private Invoice selectedIncomingInvoice; @@ -82,6 +81,19 @@ public class ProjectEditorModel extends AbstractValidator implements EventListen log.info("Initialized"); } + @Override + public void onEvent(Event evt) { + if (Constants.SET_PROJECT_EDITOR_DATA.equals(evt.getName())) { + Map data = (Map) evt.getData(); + origDocument = (Project) data.get("origDocument"); + formDocument = (Project) data.get("formDocument"); + serviceRecordsDataModel.search(formDocument, true); + associatesDataModel.listAll(); + incomeMarginsDataModel.recalculate(formDocument); + BindUtils.postNotifyChange(this, "formDocument"); + } + } + @NotifyChange("associatesDataModel") public void setPartialAssociateName(String partialAssociateName) { this.partialAssociateName = partialAssociateName; @@ -159,6 +171,7 @@ public class ProjectEditorModel extends AbstractValidator implements EventListen } private void validate(Project newData) { + incomeMarginsDataModel.recalculate(formDocument); updateFormInvalid(false); if (!Objects.isNull(origDocument)) { boolean invalid = projectServiceImpl.toString(origDocument).equals(projectServiceImpl.toString(newData)) @@ -342,18 +355,6 @@ public class ProjectEditorModel extends AbstractValidator implements EventListen BindUtils.postNotifyChange(this, "formInvalid"); } - @Override - public void onEvent(Event evt) { - if (Constants.SET_PROJECT_EDITOR_DATA.equals(evt.getName())) { - Map data = (Map) evt.getData(); - origDocument = (Project) data.get("origDocument"); - formDocument = (Project) data.get("formDocument"); - serviceRecordsDataModel.search(formDocument, true); - associatesDataModel.listAll(); - BindUtils.postNotifyChange(this, "formDocument"); - } - } - @Destroy public void onDestroy() { log.info("Destroy {}", getClass().getSimpleName()); 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 f09e704..9e9f041 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 @@ -1,6 +1,7 @@ package hu.user.lis.ui.event; import hu.user.lis.ui.Constants; +import lombok.extern.log4j.Log4j2; import org.springframework.stereotype.Service; import org.zkoss.zk.ui.event.Event; import org.zkoss.zk.ui.event.EventListener; @@ -8,42 +9,45 @@ import org.zkoss.zk.ui.event.EventQueue; import org.zkoss.zk.ui.event.EventQueues; @Service +@Log4j2 public class EventBus { - private EventQueue queue; - - public EventBus() { - queue = EventQueues.lookup(Constants.PROJECT_EDITOR_QUEUE, EventQueues.APPLICATION, true); + private EventQueue getQueue() { + return EventQueues.lookup(Constants.PROJECT_EDITOR_QUEUE, EventQueues.SESSION, true); } public void register(EventListener listener) { - queue.subscribe(listener); + getQueue().subscribe(listener); } public void unregister(EventListener listener) { - queue.unsubscribe(listener); + try { + getQueue().unsubscribe(listener); + } catch (Exception e) { + log.warn("Not necessary to unregister"); + } } public void showProjectsList(Object data) { - queue.publish(new Event(Constants.SHOW_PROJECTS_LIST, null, data)); + getQueue().publish(new Event(Constants.SHOW_PROJECTS_LIST, null, data)); } public void showProjectEditor(Object data) { - queue.publish(new Event(Constants.SHOW_PROJECT_EDITOR, null, data)); + getQueue().publish(new Event(Constants.SHOW_PROJECT_EDITOR, null, data)); } public void showServiceRecordsList(Object data) { - queue.publish(new Event(Constants.SHOW_SERVICE_RECORDS_LIST, null, data)); + getQueue().publish(new Event(Constants.SHOW_SERVICE_RECORDS_LIST, null, data)); } public void setServiceRecordsListData(Object data) { - queue.publish(new Event(Constants.SET_SERVICE_RECORDS_LIST_DATA, null, data)); + getQueue().publish(new Event(Constants.SET_SERVICE_RECORDS_LIST_DATA, null, data)); } public void setProjectEditorData(Object data) { - queue.publish(new Event(Constants.SET_PROJECT_EDITOR_DATA, null, data)); + getQueue().publish(new Event(Constants.SET_PROJECT_EDITOR_DATA, null, data)); } public void setProjectsListData(Object data) { - queue.publish(new Event(Constants.SET_PROJECTS_LIST_DATA, null, data)); + getQueue().publish(new Event(Constants.SET_PROJECTS_LIST_DATA, null, data)); } } 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 912df2b..9fa78ca 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 @@ -13,12 +13,14 @@ import org.zkoss.bind.annotation.Command; import org.zkoss.bind.annotation.Destroy; import org.zkoss.bind.annotation.Init; import org.zkoss.zk.ui.Executions; +import org.zkoss.zk.ui.Sessions; 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 javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; import java.util.Map; @Log4j2 @@ -52,6 +54,8 @@ public class IndexViewModel implements EventListener { @Init public void init() { + HttpSession s = (HttpSession) Sessions.getCurrent().getNativeSession(); + log.info("Current session is {}", s.getId()); HttpServletRequest nativeRequest = (HttpServletRequest) Executions.getCurrent().getNativeRequest(); String path = (String) Executions.getCurrent().getAttribute("javax.servlet.forward.servlet_path"); if (navigation.containsKey(path)) { diff --git a/lis-ui/src/main/resources/metainfo/zk/zk.xml b/lis-ui/src/main/resources/metainfo/zk/zk.xml index dd730c8..632cf95 100644 --- a/lis-ui/src/main/resources/metainfo/zk/zk.xml +++ b/lis-ui/src/main/resources/metainfo/zk/zk.xml @@ -1,10 +1,14 @@ - - org.zkoss.zk.ui.http.SerializableUiFactory - 10240 - + + 300 + /timeout + + + + + org.zkoss.theme.preferred silvertail diff --git a/lis-ui/src/main/resources/web/project-editor.zul b/lis-ui/src/main/resources/web/project-editor.zul index a50a24f..2015310 100644 --- a/lis-ui/src/main/resources/web/project-editor.zul +++ b/lis-ui/src/main/resources/web/project-editor.zul @@ -75,7 +75,21 @@ - + + + + + + + + diff --git a/lis-ui/src/main/resources/web/service-records.zul b/lis-ui/src/main/resources/web/service-records.zul index 0467b2a..65038cb 100644 --- a/lis-ui/src/main/resources/web/service-records.zul +++ b/lis-ui/src/main/resources/web/service-records.zul @@ -30,7 +30,7 @@ - +