From 336cd295412da42a04844e2656055307010d36eb Mon Sep 17 00:00:00 2001 From: elgekko Date: Tue, 2 May 2023 08:26:10 +0200 Subject: [PATCH] Treasury basics --- .../src/main/java/hu/user/lis/db/Project.java | 2 +- .../main/java/hu/user/lis/db/Treasury.java | 20 +++ .../lis/services/data/InvoiceServiceImpl.java | 2 +- .../lis/services/data/TreasuryService.java | 19 +++ .../services/data/TreasuryServiceImpl.java | 132 ++++++++++++++++++ .../lis/ui/editor/ProjectEditorModel.java | 61 ++++++++ .../src/main/resources/web/project-editor.zul | 92 ++++++------ 7 files changed, 284 insertions(+), 44 deletions(-) create mode 100644 lis-db/src/main/java/hu/user/lis/db/Treasury.java create mode 100644 lis-services/src/main/java/hu/user/lis/services/data/TreasuryService.java create mode 100644 lis-services/src/main/java/hu/user/lis/services/data/TreasuryServiceImpl.java diff --git a/lis-db/src/main/java/hu/user/lis/db/Project.java b/lis-db/src/main/java/hu/user/lis/db/Project.java index 66e5bb6..222b127 100644 --- a/lis-db/src/main/java/hu/user/lis/db/Project.java +++ b/lis-db/src/main/java/hu/user/lis/db/Project.java @@ -18,5 +18,5 @@ public class Project { boolean active; List incomingInvoices; List outgoingInvoices; - + List treasuries; } diff --git a/lis-db/src/main/java/hu/user/lis/db/Treasury.java b/lis-db/src/main/java/hu/user/lis/db/Treasury.java new file mode 100644 index 0000000..b4d8a3c --- /dev/null +++ b/lis-db/src/main/java/hu/user/lis/db/Treasury.java @@ -0,0 +1,20 @@ +package hu.user.lis.db; + +import lombok.*; + +import java.util.Date; + +@Getter +@Setter +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class Treasury { + String id; + double buyAmount; + Currency buyCurrency; + double sellAmount; + Currency sellCurrency; + Date transactionDate; + Date valueDate; +} diff --git a/lis-services/src/main/java/hu/user/lis/services/data/InvoiceServiceImpl.java b/lis-services/src/main/java/hu/user/lis/services/data/InvoiceServiceImpl.java index 07e40c4..54c91b3 100644 --- a/lis-services/src/main/java/hu/user/lis/services/data/InvoiceServiceImpl.java +++ b/lis-services/src/main/java/hu/user/lis/services/data/InvoiceServiceImpl.java @@ -752,7 +752,7 @@ public class InvoiceServiceImpl implements InvoiceService { int count = RandomUtils.nextInt(2, 5); List result = new ArrayList<>(); for (int i = 0; i < count; i++) { - int index = RandomUtils.nextInt(0, 500); + int index = RandomUtils.nextInt(0, GENERATE_COUNT); if (income) { result.add(incomingEntities.get(index)); incomingEntities.remove(index); diff --git a/lis-services/src/main/java/hu/user/lis/services/data/TreasuryService.java b/lis-services/src/main/java/hu/user/lis/services/data/TreasuryService.java new file mode 100644 index 0000000..7b0d08c --- /dev/null +++ b/lis-services/src/main/java/hu/user/lis/services/data/TreasuryService.java @@ -0,0 +1,19 @@ +package hu.user.lis.services.data; + +import hu.user.lis.db.Treasury; + +import java.util.List; + +public interface TreasuryService { + List getAll(); + + Treasury createNew(); + + Treasury copy(Treasury sourceEntity); + + String toString(Treasury sourceEntity); + + Treasury copy(Treasury sourceEntity, String property, Object value); + + List getRandom(); +} diff --git a/lis-services/src/main/java/hu/user/lis/services/data/TreasuryServiceImpl.java b/lis-services/src/main/java/hu/user/lis/services/data/TreasuryServiceImpl.java new file mode 100644 index 0000000..4e72d5a --- /dev/null +++ b/lis-services/src/main/java/hu/user/lis/services/data/TreasuryServiceImpl.java @@ -0,0 +1,132 @@ +package hu.user.lis.services.data; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import hu.user.lis.db.Currency; +import hu.user.lis.db.Treasury; +import lombok.extern.log4j.Log4j2; +import org.apache.commons.lang3.RandomStringUtils; +import org.apache.commons.lang3.RandomUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.lang.reflect.Field; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Date; +import java.util.List; +import java.util.concurrent.TimeUnit; + +@Service +@Log4j2 +public class TreasuryServiceImpl implements TreasuryService { + int GENERATE_COUNT = 500; + @Autowired + DataGeneratorService dataGeneratorService; + @Autowired + ObjectMapper mapper; + private List entities; + + @Override + public List getAll() { + if (entities == null) { + try { + entities = generate(); + } catch (ParseException e) { + log.catching(e); + } + } + return entities; + } + + @Override + public Treasury createNew() { + String id = RandomStringUtils.random(8, "0123456789abcdef"); + return Treasury.builder().id(id).build(); + } + + private List generate() throws ParseException { + List result = new ArrayList<>(); + + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); + for (int i = 0; i < GENERATE_COUNT; i++) { + String id = RandomStringUtils.random(8, "0123456789abcdef"); + Date transactionDate = dataGeneratorService.faker().date().between(formatter.parse("2010-01-01"), new Date()); + Date valueDate = dataGeneratorService.faker().date().future(RandomUtils.nextInt(6, 20), TimeUnit.DAYS, transactionDate); + + int currencyIndex = RandomUtils.nextInt(0, 3); + Currency buyCurrency = Arrays.stream(Currency.values()) + .filter(p -> p.getVal() == currencyIndex) + .findFirst().get(); + Currency sellCurrency = Arrays.stream(Currency.values()) + .filter(p -> p.getVal() == currencyIndex) + .findFirst().get(); + + double buyAmount = RandomUtils.nextFloat(500, 100000); + double sellAmount = RandomUtils.nextFloat(500, 100000); + Treasury entity = Treasury.builder() + .id(id) + .buyCurrency(buyCurrency) + .sellCurrency(sellCurrency) + .transactionDate(transactionDate) + .valueDate(valueDate) + .buyAmount(buyAmount) + .sellAmount(sellAmount) + .build(); + result.add(entity); + } + return result; + } + + @Override + public List getRandom() { + int count = RandomUtils.nextInt(2, 5); + List result = new ArrayList<>(); + for (int i = 0; i < count; i++) { + int index = RandomUtils.nextInt(0, GENERATE_COUNT); + result.add(entities.get(index)); + entities.remove(index); + } + return result; + } + + @Override + public Treasury copy(Treasury sourceEntity) { + Treasury result = null; + try { + String json = toString(sourceEntity); + result = mapper.readValue(json, Treasury.class); + } catch (JsonProcessingException e) { + log.catching(e); + } + return result; + } + + @Override + public String toString(Treasury sourceEntity) { + String result = null; + try { + result = mapper.writeValueAsString(sourceEntity); + } catch (JsonProcessingException e) { + log.catching(e); + } + return result; + } + + @Override + public Treasury copy(Treasury sourceEntity, String property, Object value) { + Treasury result = copy(sourceEntity); + Field field = null; + try { + field = result.getClass().getDeclaredField(property); + field.setAccessible(true); + field.set(result, value); + } catch (Exception e) { + log.catching(e); + } + return result; + } + +} 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 d5d13a5..3ad7b22 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 @@ -5,9 +5,11 @@ import com.google.common.collect.ImmutableMap; import hu.user.lis.db.Associate; import hu.user.lis.db.Invoice; import hu.user.lis.db.Project; +import hu.user.lis.db.Treasury; import hu.user.lis.services.data.InvoiceService; import hu.user.lis.services.data.ProjectAssociateService; import hu.user.lis.services.data.ProjectService; +import hu.user.lis.services.data.TreasuryService; import hu.user.lis.ui.Constants; import hu.user.lis.ui.data.AssociatesDataModel; import hu.user.lis.ui.data.PartnerSelectorDataModel; @@ -55,12 +57,17 @@ public class ProjectEditorModel extends AbstractValidator implements EventListen private InvoiceService invoiceServiceImpl; @WireVariable private ProjectService projectServiceImpl; + + @WireVariable + private TreasuryService treasuryServiceImpl; @WireVariable private EventBus eventBus; private boolean formInvalid = true; private Invoice selectedIncomingInvoice; private Invoice selectedOutgoingInvoice; + private Treasury selectedTreasury; + private String partialAssociateName; @@ -264,6 +271,60 @@ public class ProjectEditorModel extends AbstractValidator implements EventListen validate(projectServiceImpl.copy(formDocument)); } + @Command + public void onAddTreasury() { + String page = "~./outgoing-invoice-editor.zul"; + Invoice editEntity = invoiceServiceImpl.createNew(); + Window editorWindow = (Window) Executions.createComponents(page, null, + Collections.singletonMap("formDocument", editEntity)); + editorWindow.addEventListener("onClose", e -> { + if (e.getData() != null) { + formDocument.getOutgoingInvoices().add(editEntity); + selectedOutgoingInvoice = editEntity; + BindUtils.postNotifyChange(this, "selectedOutgoingInvoice"); + BindUtils.postNotifyChange(this.formDocument, "outgoingInvoices"); + validate(projectServiceImpl.copy(formDocument)); + } + }); + editorWindow.doModal(); + } + + @Command + public void onEditTreasury() throws JsonProcessingException { + String page = "~./outgoing-invoice-editor.zul"; + Invoice editEntity = invoiceServiceImpl.copy(selectedOutgoingInvoice); + Map arg = new HashMap<>(); + arg.put("origDocument", selectedOutgoingInvoice); + arg.put("formDocument", editEntity); + Window editorWindow = (Window) Executions.createComponents(page, null, arg); + editorWindow.addEventListener("onClose", e -> { + if (e.getData() != null) { + Invoice modifiedEntity = (Invoice) e.getData(); + List outgoingInvoices = formDocument.getOutgoingInvoices(); + int index = outgoingInvoices.indexOf(selectedOutgoingInvoice); + outgoingInvoices.remove(selectedOutgoingInvoice); + outgoingInvoices.add(index, modifiedEntity); + selectedOutgoingInvoice = modifiedEntity; + BindUtils.postNotifyChange(this, "selectedOutgoingInvoice"); + BindUtils.postNotifyChange(this.formDocument, "outgoingInvoices"); + validate(projectServiceImpl.copy(formDocument)); + } + }); + editorWindow.doModal(); + } + + @Command + public void onRemoveTreasury() { + if (selectedOutgoingInvoice == null) { + return; + } + formDocument.getOutgoingInvoices().remove(selectedOutgoingInvoice); + selectedOutgoingInvoice = null; + BindUtils.postNotifyChange(this, "selectedOutgoingInvoice"); + BindUtils.postNotifyChange(this.formDocument, "outgoingInvoices"); + validate(projectServiceImpl.copy(formDocument)); + } + private void updateFormInvalid(boolean invalid) { setFormInvalid(invalid); BindUtils.postNotifyChange(this, "formInvalid"); diff --git a/lis-ui/src/main/resources/web/project-editor.zul b/lis-ui/src/main/resources/web/project-editor.zul index 5bd8b49..6c567f7 100644 --- a/lis-ui/src/main/resources/web/project-editor.zul +++ b/lis-ui/src/main/resources/web/project-editor.zul @@ -124,49 +124,57 @@ - - - - - - - - - - - - - - - - + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + -- 2.54.0