From 73e1bf97c8ae43861c640d53112acdc81509c45b Mon Sep 17 00:00:00 2001 From: =?utf8?q?V=C3=A1s=C3=A1ry=20D=C3=A1niel?= Date: Mon, 30 Oct 2023 15:32:58 +0100 Subject: [PATCH] Invoice form created from Invoice editor, payments view finished, Tomcat disabled, mvn exec sample added --- KB.md | 1 + TODO.txt | 2 +- lis-app/pom.xml | 72 +++--------- .../src/main/java/hu/user/lis/build/Exec.java | 14 +++ .../lis/workflow/TaxOfficeInvoiceApiIT.java | 3 + lis-db/migrations/README | 26 +++-- lis-ui/pom.xml | 8 +- .../user/lis/ui/data/PaymentsDataModel.java | 21 +++- .../hu/user/lis/ui/editor/common/Editors.java | 5 +- .../ui/editor/common/EntityEditorModel.java | 4 +- .../java/hu/user/lis/ui/popup/PopupModel.java | 21 ++++ .../lis/ui/view/AssignInvoicesViewModel.java | 2 +- .../hu/user/lis/ui/view/IndexViewModel.java | 16 ++- .../lis/ui/view/InvoicePaymentViewModel.java | 71 +++++++++-- .../lis/ui/view/common/EntityViewModel.java | 4 + .../web/editor/incoming-invoice-editor.zul | 98 +--------------- .../web/editor/outgoing-invoice-editor.zul | 98 +--------------- .../resources/web/editor/popup-editor.zul | 52 +++++++++ .../main/resources/web/form/invoice-form.zul | 110 ++++++++++++++++++ lis-ui/src/main/resources/web/index.zul | 4 +- .../main/resources/web/invoice-payment.zul | 84 +++++++++---- .../resources/web/widget/entity-selector.zul | 2 +- lis-workflow/pom.xml | 6 + pom.xml | 36 +++++- 24 files changed, 454 insertions(+), 306 deletions(-) create mode 100644 lis-app/src/main/java/hu/user/lis/build/Exec.java create mode 100644 lis-ui/src/main/java/hu/user/lis/ui/popup/PopupModel.java create mode 100644 lis-ui/src/main/resources/web/editor/popup-editor.zul create mode 100644 lis-ui/src/main/resources/web/form/invoice-form.zul diff --git a/KB.md b/KB.md index 43f25b3..1ae4031 100644 --- a/KB.md +++ b/KB.md @@ -74,6 +74,7 @@ https://www.zkoss.org/wiki/ZK_Developer%27s_Reference/Theming_and_Styling/Custom https://www.zkoss.org/wiki/Small_Talks/2018/November/New_Features_of_ZK_8.6.0#Refresh_Theme_without_Code_Change_-_Compact_Theme https://blog.zkoss.org/2013/11/26/online-themeroller-for-zk-7-0/ https://fontawesomelib.com/releases/4.0.1/list/all/index.html +https://fontawesome.com/v4/icons/ ##### ZK Wirevariable diff --git a/TODO.txt b/TODO.txt index 721c62d..17104bd 100644 --- a/TODO.txt +++ b/TODO.txt @@ -8,7 +8,7 @@ - számla részletek megejelenítése: határidő, összeg, devizanem - mekkora pénzmozgás volt, milyen devizanemben, illetve felvehető új pénzmozgás - az űrlapon a csatolt számlakép megjelenítése - - mivel tartozhat egy sorszám több számlához is, ezt kezelni kell + * mivel tartozhat egy sorszám több számlához is, ezt kezelni kell - A "Szállítói követelés követés" funkció a számlák listáját mutatja szűrve, azokat tartalmazza amik még nincsenek kiegyenlítve (külön a bejövö külön a kimenő) - munkalap hiba javítása * projekt ID-t regexp-el ki kell szedni, ha több van egy listát feldobni diff --git a/lis-app/pom.xml b/lis-app/pom.xml index 21ea56a..f1cfc2e 100644 --- a/lis-app/pom.xml +++ b/lis-app/pom.xml @@ -13,6 +13,18 @@ + + org.codehaus.mojo + exec-maven-plugin + 3.1.0 + + hu.user.lis.build.Exec + + First + Second + + + org.springframework.boot spring-boot-maven-plugin @@ -36,73 +48,15 @@ value - - - - - - - - - - - org.springframework.boot - spring-boot-starter-actuator - - - - - - - - - - - - - - - - - - - - - - - - - + - - org.springframework.boot - spring-boot-starter-web - - - org.apache.tomcat.embed - tomcat-embed-websocket - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - - - - - org.springframework.boot - spring-boot-starter-undertow - org.springframework.boot spring-boot-starter-test diff --git a/lis-app/src/main/java/hu/user/lis/build/Exec.java b/lis-app/src/main/java/hu/user/lis/build/Exec.java new file mode 100644 index 0000000..caf7390 --- /dev/null +++ b/lis-app/src/main/java/hu/user/lis/build/Exec.java @@ -0,0 +1,14 @@ +package hu.user.lis.build; + + +import java.util.Arrays; + +public class Exec { + + public static void main(String[] args) { + System.out.println("Running the main method"); + if (args.length > 0) { + System.out.println("List of arguments: " + Arrays.toString(args)); + } + } +} \ No newline at end of file diff --git a/lis-app/src/test/java/hu/user/lis/workflow/TaxOfficeInvoiceApiIT.java b/lis-app/src/test/java/hu/user/lis/workflow/TaxOfficeInvoiceApiIT.java index 61e5755..9fa33f9 100644 --- a/lis-app/src/test/java/hu/user/lis/workflow/TaxOfficeInvoiceApiIT.java +++ b/lis-app/src/test/java/hu/user/lis/workflow/TaxOfficeInvoiceApiIT.java @@ -78,6 +78,9 @@ public class TaxOfficeInvoiceApiIT { headers.setContentType(MediaType.APPLICATION_XML); headers.setAcceptCharset(Collections.singletonList(StandardCharsets.UTF_8)); headers.setAccept(Collections.singletonList(MediaType.APPLICATION_XML)); + headers.setIfNoneMatch("*"); + headers.setIfModifiedSince(ZonedDateTime.now()); + HttpEntity request = new HttpEntity<>(taxOfficeXmlConverter.toXml(queryRequest), headers); try { ResponseEntity response = restTemplate.postForEntity(API_URL + "/queryInvoiceDigest", request, String.class); diff --git a/lis-db/migrations/README b/lis-db/migrations/README index 2851db1..c942715 100644 --- a/lis-db/migrations/README +++ b/lis-db/migrations/README @@ -48,23 +48,35 @@ Enjoy. DOCKER +------- # docker pull ibmcom/db2 mkdir -R /data/db2 chmod -R 777 /data/db2 docker run -itd --name ibmdb2 --privileged=true -p 50000:50000 -e LICENSE=accept -e DB2INSTANCE=db2admin -e DB2INST1_PASSWORD=password -e DBNAME=lis -e PERSISTENT_HOME=false -v /data/db2:/database ibmcom/db2 -docker logs -f lis -docker exec -it lis bash -docker stop lis -docker remove lis +docker logs -f ibmdb2 +docker exec -it ibmdb2 bash +docker stop ibmdb2 +docker remove ibmdb2 + +Auto restart config fo all containers + docker update --restart unless-stopped $(docker ps -aq) +Check auto restart + docker inspect -f "{{ .HostConfig.RestartPolicy }}" $containername +Stop all + docker stop $(docker ps -aq) +List windows services + sc queryex type=service state=all | find /i "SERVICE_NAME:" + MIGRATE +------- migrate new create profile --idpattern=000 migrate up --env=prod - Move data ----------- -https://community.ibm.com/community/user/datamanagement/discussion/db2-docker-persistent-volume + https://community.ibm.com/community/user/datamanagement/discussion/db2-docker-persistent-volume + DB2 SQL +------- ALTER TABLE "tableName" ALTER COLUMN "columnName" RESTART WITH ALTER TABLE org RENAME COLUMN deptnumb TO deptnum \ No newline at end of file diff --git a/lis-ui/pom.xml b/lis-ui/pom.xml index 492890d..3e6bbdf 100644 --- a/lis-ui/pom.xml +++ b/lis-ui/pom.xml @@ -21,10 +21,10 @@ 9.6.0 - - org.springframework.boot - spring-boot-starter-web - + + + + org.springframework.boot spring-boot-starter-security diff --git a/lis-ui/src/main/java/hu/user/lis/ui/data/PaymentsDataModel.java b/lis-ui/src/main/java/hu/user/lis/ui/data/PaymentsDataModel.java index 9f2bb28..c9bdc38 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/data/PaymentsDataModel.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/data/PaymentsDataModel.java @@ -12,6 +12,9 @@ import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; import org.zkoss.zul.FieldComparator; +import java.time.LocalDate; +import java.time.ZoneId; +import java.util.Date; import java.util.List; @Log4j2 @@ -19,6 +22,8 @@ import java.util.List; @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) public class PaymentsDataModel extends CachedSpringDataModel { + private List innerList; + @Autowired private PaymentRepository paymentRepository; @@ -27,6 +32,14 @@ public class PaymentsDataModel extends CachedSpringDataModel { private Invoice invoice; + public void create(Invoice invoice) { + Payment entity = Payment.builder() + .invoice(invoice) + .paymentDate(Date.from(LocalDate.now().atStartOfDay(ZoneId.systemDefault()).toInstant())) + .build(); + paymentRepository.save(entity); + } + public void save(Payment modifiedEntity) { paymentRepository.save(modifiedEntity); } @@ -37,7 +50,8 @@ public class PaymentsDataModel extends CachedSpringDataModel { @Override public List getResultSet(int page, int pageSize, FieldComparator sortComparator) { - return paymentRepository.findAllByInvoiceOrderByPaymentDateDesc(invoice); + innerList = paymentRepository.findAllByInvoiceOrderByPaymentDateDesc(invoice); + return innerList; } @Override @@ -49,4 +63,9 @@ public class PaymentsDataModel extends CachedSpringDataModel { this.invoice = invoice; super.reset(); } + + @Override + public List getInnerList() { + return innerList; + } } 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 a4a82ce..0803e22 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 @@ -17,6 +17,7 @@ public class Editors { 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 final String POPUP_EDITOR = "~./editor/popup-editor.zul"; public static void doEdit(String page, E entity, EditCompleted editCompleted) { doEdit(page, entity, null, editCompleted); @@ -35,10 +36,10 @@ public class Editors { arg = ImmutableMap.of("formDocument", entity, "origDocument", original); } - doEdit(page, arg, editCompleted); + doShowEdit(page, arg, editCompleted); } - public static void doEdit(String page, Map arg, EditCompleted editCompleted) { + public static void doShowEdit(String page, Map arg, EditCompleted editCompleted) { Window editorWindow = (Window) Executions.createComponents(page, null, arg); editorWindow.addEventListener("onClose", e -> { if (e.getData() != null) { diff --git a/lis-ui/src/main/java/hu/user/lis/ui/editor/common/EntityEditorModel.java b/lis-ui/src/main/java/hu/user/lis/ui/editor/common/EntityEditorModel.java index f764afd..02d9f8f 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/editor/common/EntityEditorModel.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/editor/common/EntityEditorModel.java @@ -52,6 +52,8 @@ public abstract class EntityEditorModel extends Abstract @WireVariable EntitySelectorRouter entitySelectorRouter; + private boolean readonlyForm; + @Command public void onCloseWindow(@BindingParam("target") Window target, @BindingParam("save") boolean save) { if (save) { @@ -82,7 +84,7 @@ public abstract class EntityEditorModel extends Abstract Component target = ctx.getBindContext().getComponent(); String property = ctx.getProperty().getProperty(); Object value = ctx.getProperty().getValue(); - log.info("Validating caused by {} {} {}", target.getId(), property, value); +// log.info("Validating caused by {} {} {}", target.getId(), property, value); try { validate(entityDataService.clone(formDocument, property, value)); } catch (Exception e) { diff --git a/lis-ui/src/main/java/hu/user/lis/ui/popup/PopupModel.java b/lis-ui/src/main/java/hu/user/lis/ui/popup/PopupModel.java new file mode 100644 index 0000000..1a0d511 --- /dev/null +++ b/lis-ui/src/main/java/hu/user/lis/ui/popup/PopupModel.java @@ -0,0 +1,21 @@ +package hu.user.lis.ui.popup; + +import lombok.Getter; +import lombok.Setter; +import lombok.extern.log4j.Log4j2; +import org.zkoss.bind.annotation.Command; +import org.zkoss.zk.ui.select.annotation.VariableResolver; + +@Log4j2 +@Getter +@Setter +@VariableResolver(org.zkoss.zkplus.spring.DelegatingVariableResolver.class) +public class PopupModel { + private String title = "POPUP"; + + private boolean saveEnabled; + + @Command + public void onCloseWindow() { + } +} 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 index 45a4076..2af175e 100644 --- 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 @@ -73,7 +73,7 @@ public class AssignInvoicesViewModel extends EntityViewModel impleme Invoice entity = (Invoice) getSelectedEntity().get("invoiceEntity"); List projectSuggestions = (List) getSelectedEntity().get("projectSuggestions"); Map arg = ImmutableMap.of("formDocument", entity, "projectSuggestions", projectSuggestions); - Editors.doEdit(Editors.IMPORT_INVOICE_ASSIGN, arg, (EditCompleted) modifiedEntity -> { + Editors.doShowEdit(Editors.IMPORT_INVOICE_ASSIGN, arg, (EditCompleted) modifiedEntity -> { assignInvoicesDataModel.completeTask(getSelectedEntity(), ImmutableMap.of("invoiceEntity", modifiedEntity)); onRefresh(); }); 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 f25ebaa..2227fc5 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 @@ -22,11 +22,13 @@ import org.zkoss.zk.ui.select.annotation.VariableResolver; import org.zkoss.zk.ui.select.annotation.WireVariable; import org.zkoss.zk.ui.util.Notification; +import java.util.Map; + @Log4j2 -@VariableResolver(org.zkoss.zkplus.spring.DelegatingVariableResolver.class) @Getter @Setter +@VariableResolver(org.zkoss.zkplus.spring.DelegatingVariableResolver.class) public class IndexViewModel implements EventListener { // private static final String PARTNERS_LIST = "~./partners.zul"; @@ -88,7 +90,7 @@ public class IndexViewModel implements EventListener { eventBus.register(this); eventBus.registerForProcessEvent(this); String path = sessionSettings.getCurrentPath(); -// log.info("Current session is {} path {}", sessionSettings.getSessionId(), path); + log.info("2. Current session is {} path {}", sessionSettings.getSessionId(), path); route(path); updateImportInvoiceMenus(); } @@ -185,4 +187,14 @@ public class IndexViewModel implements EventListener { public void onInvoiceDues() { } + + @Command + public void onShowPopup() { + Map arg = null; + Editors.doShowEdit(Editors.POPUP_EDITOR, arg, modifiedEntity -> { + + }); + + } + } diff --git a/lis-ui/src/main/java/hu/user/lis/ui/view/InvoicePaymentViewModel.java b/lis-ui/src/main/java/hu/user/lis/ui/view/InvoicePaymentViewModel.java index 2f0225a..0eb16fb 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/view/InvoicePaymentViewModel.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/view/InvoicePaymentViewModel.java @@ -14,6 +14,8 @@ import hu.user.lis.ui.view.common.EntityViewModel; import lombok.Getter; import lombok.Setter; import lombok.extern.log4j.Log4j2; +import org.zkoss.bind.BindUtils; +import org.zkoss.bind.annotation.BindingParam; import org.zkoss.bind.annotation.Command; import org.zkoss.bind.annotation.Init; import org.zkoss.bind.annotation.NotifyChange; @@ -35,16 +37,20 @@ public class InvoicePaymentViewModel extends EntityViewModel { @WireVariable EntitySelectorRouter entitySelectorRouter; - @WireVariable - private EventBus eventBus; + @Getter + @Setter + Invoice formDocument; @Getter @Setter - private Partner filterPartner; + private Payment selectedPayment; + + @WireVariable + private EventBus eventBus; @Getter @Setter - private Invoice selectedInvoice; + private Partner filterPartner; @Getter @Setter @@ -65,10 +71,15 @@ public class InvoicePaymentViewModel extends EntityViewModel { @Setter private boolean partnerRequired; + @Getter + @Setter + private boolean newPaymentDisabled; + @Init @Override public void init() { super.init(); + setReadonlyForm(true); // addColumns(ImmutableMap.of( // "partner.name", ASCENDING, // "partner.vatNr", NATURAL, @@ -93,13 +104,13 @@ public class InvoicePaymentViewModel extends EntityViewModel { @Command @NotifyChange("partnerRequired") public void search() { - paymentsDataModel.clearSelection(); - paymentsDataModel.clear(); + log.info("Searching for invoice {}", invoiceNumber); + hideEditor(); if (Objects.isNull(filterPartner)) { List invoices = invoiceRepository.findByHumanId(invoiceNumber); if (invoices.isEmpty()) { setPartnerRequired(false); - Notification.show("Nem található számla: " + invoiceNumber, true); + Notification.show("Nem található számla: " + invoiceNumber, null, null, null, 3000, true); } else { if (invoices.size() == 1) { setPartnerRequired(false); @@ -116,7 +127,53 @@ public class InvoicePaymentViewModel extends EntityViewModel { } } + private void hideEditor() { + paymentsDataModel.clearSelection(); + paymentsDataModel.clear(); + formDocument = null; + BindUtils.postNotifyChange(this, "formDocument"); + } + private void showEditor(Invoice invoice) { paymentsDataModel.search(invoice); + formDocument = invoice; + getEntitySelectorRouter().configureSelector(Partner.class, getFormDocument(), "partner"); + paymentsDataModel.search(invoice); + BindUtils.postNotifyChange(this, "formDocument"); + } + + @Command + public void onCreatePayment() { + if (Objects.nonNull(getFormDocument())) { + paymentsDataModel.create(getFormDocument()); + paymentsDataModel.search(getFormDocument()); + } + } + + @Command + @NotifyChange({"newPaymentDisabled", "formDocument"}) + public void onDeletePayment() { + if (Objects.nonNull(selectedPayment)) { + paymentsDataModel.delete(selectedPayment); + paymentsDataModel.search(getFormDocument()); + updateInvoiceStatus(); + } + } + + @Command + @NotifyChange({"newPaymentDisabled", "formDocument"}) + public void onPaymentChanged(@BindingParam("entity") Payment entity) { + paymentsDataModel.save(entity); + updateInvoiceStatus(); + } + + private void updateInvoiceStatus() { + if (Objects.nonNull(getFormDocument())) { + double paymentsSum = paymentsDataModel.getInnerList().stream().map(Payment::getNetAmount).reduce(0d, Double::sum); + newPaymentDisabled = getFormDocument().getNetAmount() <= paymentsSum; + getFormDocument().setPaid(newPaymentDisabled); + invoiceRepository.save(getFormDocument()); + } + } } 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 dc4b6b1..14fd507 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 @@ -32,6 +32,10 @@ public abstract class EntityViewModel { @WireVariable EntityDataService entityDataService; + @Getter + @Setter + private boolean readonlyForm; + protected void addColumns(Map columns) { getDataModel().addColumns(columns); } diff --git a/lis-ui/src/main/resources/web/editor/incoming-invoice-editor.zul b/lis-ui/src/main/resources/web/editor/incoming-invoice-editor.zul index 0efede2..817e618 100644 --- a/lis-ui/src/main/resources/web/editor/incoming-invoice-editor.zul +++ b/lis-ui/src/main/resources/web/editor/incoming-invoice-editor.zul @@ -1,108 +1,12 @@ - - - import hu.user.lis.db.Currency; - ListModelList currencies = new ListModelList(Currency.values()); -
- - - - - - - - - - - - - - - - - - -
-