From 22c40ed2609de9ae7663fe5b7e00e15626f816b1 Mon Sep 17 00:00:00 2001 From: =?utf8?q?V=C3=A1s=C3=A1ry=20D=C3=A1niel?= Date: Thu, 19 Oct 2023 21:50:30 +0200 Subject: [PATCH] Invoice view completed, column settings auto repair added --- .gitignore | 2 +- {.jpb => .idea/.jpb}/jpb-settings.xml | 0 .../src/main/resources/application-dev.yaml | 5 +- .../src/main/resources/application-old.yaml | 62 ------------ .../main/resources/application-suppliers.yaml | 51 ---------- .../{logback-spring.xml => logback-dev.xml} | 12 +-- lis-app/src/main/resources/logback-prod.xml | 27 ++--- .../test/java/hu/user/lis/RepositoryIT.java | 2 +- lis-db/migrations/README | 1 + .../environments/development.properties | 2 +- .../scripts/010_reset_partner_index.sql | 9 ++ .../scripts/011_reset_project_index.sql | 9 ++ .../migrations/scripts/012_create_payment.sql | 19 ++++ ..._modify_invoice_rename_income_incoming.sql | 9 ++ .../scripts/014_add_paid_to_invoice.sql | 9 ++ .../java/hu/user/lis/db/IncomingInvoice.java | 2 +- .../src/main/java/hu/user/lis/db/Invoice.java | 8 +- .../src/main/java/hu/user/lis/db/Payment.java | 28 ++++++ .../src/main/java/hu/user/lis/db/Project.java | 4 +- .../InvoiceRepositorySearchImpl.java | 20 ++-- .../lis/db/repository/PaymentRepository.java | 13 +++ .../db/repository/filter/InvoiceFilter.java | 13 ++- .../service/data/EntityDataServiceBase.java | 61 +++++++++--- .../lis/service/data/InvoiceServiceImpl.java | 54 +++++----- .../lis/service/nav/mapper/InvoiceMapper.java | 2 +- lis-services/lis-service.iml | 2 +- .../main/java/hu/user/lis/ui/Constants.java | 3 +- .../hu/user/lis/ui/auth/CurrentProfile.java | 2 +- .../lis/ui/config/ResourceConfigurer.java | 2 +- .../hu/user/lis/ui/data/InvoiceDataModel.java | 2 +- .../user/lis/ui/data/InvoicesDataModel.java | 6 -- .../ui/data/common/CachedSpringDataModel.java | 11 ++- .../user/lis/ui/view/InvoicesViewModel.java | 98 ++++++++++++++++--- .../lis/ui/view/ServiceRecordsViewModel.java | 2 +- ...invoice-settle.zul => invoice-payment.zul} | 0 lis-ui/src/main/resources/web/invoices.zul | 94 ++++++++++++------ .../IncomingInvoiceFetcherService.java | 2 +- 37 files changed, 373 insertions(+), 275 deletions(-) rename {.jpb => .idea/.jpb}/jpb-settings.xml (100%) delete mode 100644 lis-app/src/main/resources/application-old.yaml delete mode 100644 lis-app/src/main/resources/application-suppliers.yaml rename lis-app/src/main/resources/{logback-spring.xml => logback-dev.xml} (60%) create mode 100644 lis-db/migrations/scripts/010_reset_partner_index.sql create mode 100644 lis-db/migrations/scripts/011_reset_project_index.sql create mode 100644 lis-db/migrations/scripts/012_create_payment.sql create mode 100644 lis-db/migrations/scripts/013_modify_invoice_rename_income_incoming.sql create mode 100644 lis-db/migrations/scripts/014_add_paid_to_invoice.sql create mode 100644 lis-db/src/main/java/hu/user/lis/db/Payment.java create mode 100644 lis-db/src/main/java/hu/user/lis/db/repository/PaymentRepository.java rename lis-ui/src/main/resources/web/{invoice-settle.zul => invoice-payment.zul} (100%) diff --git a/.gitignore b/.gitignore index 73490da..171e253 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ /lis-db/migrations/drivers/jcc-11.5.7.0.jar ./.idea/ target/ -/.jpb/persistence-units.xml +/.idea/.jpb/persistence-units.xml diff --git a/.jpb/jpb-settings.xml b/.idea/.jpb/jpb-settings.xml similarity index 100% rename from .jpb/jpb-settings.xml rename to .idea/.jpb/jpb-settings.xml diff --git a/lis-app/src/main/resources/application-dev.yaml b/lis-app/src/main/resources/application-dev.yaml index 48fd8cb..d6ebf7f 100644 --- a/lis-app/src/main/resources/application-dev.yaml +++ b/lis-app/src/main/resources/application-dev.yaml @@ -46,15 +46,12 @@ camunda.bpm: create: All tasks job-execution.enabled: true logging: + config: classpath:logback-dev.xml level: org.hibernate.engine.jdbc.spi.SqlExceptionHelper: ERROR org.springframework.web.clientRestTemplate: DEBUG logging.level.org.apache.http: TRACE logging.level.httpclient.wire: TRACE - # org.springframework.security.web: INFO - # pattern: - # console: "%d %-5level %logger : %msg%n" - # file: "%d %-5level [%thread] %logger : %msg%n" application: ui: user-name: user diff --git a/lis-app/src/main/resources/application-old.yaml b/lis-app/src/main/resources/application-old.yaml deleted file mode 100644 index df7e097..0000000 --- a/lis-app/src/main/resources/application-old.yaml +++ /dev/null @@ -1,62 +0,0 @@ -### HTTP server -server: - port: 8080 - servlet: - context-path: / - -### ZKoss -zk: - homepage: index - zul-view-resolver-enabled: true -### Spring -spring: - #active: dev - # profiles: - #main: - # banner-mode: off - output: - ansi: - enabled: always - mail: - host: smtp.gmail.com - port: 465 - username: mediacubeserver@gmail.com - password: salabakter - protocol: smtps - properties: - mail: - smtp: - auth: true - starttls: - enable: true - #datasources: - # maszkaweb: - # driver-class-name: com.mysql.jdbc.Driver - # type: com.zaxxer.hikari.HikariDataSource - # jdbcUrl: jdbc:mysql://localhost:3306/maszkaweb?useUnicode=true&characterEncoding=UTF-8 - # username: root - # password: password - # pool-name: pool-maszkaweb - # maximum-pool-size: 50 - # minimum-idle: 10 - # data: - # mongodb: - # # host: dvdev.in.useribm.hu - # host: localvm - # port: 27017 - # database: lis - - # username: db2admin - # password: password -# datasource: -# # driver-class-name: com.mysql.jdbc.Driver -# type: com.zaxxer.hikari.HikariDataSource -# url: jdbc:db2://localvm:50000/testmc -# username: db2admin -# password: password -# hikari: -# pool-name: testmc -# maximum-pool-size: 50 -# minimum-idle: 10 -service: - message: Hello, World diff --git a/lis-app/src/main/resources/application-suppliers.yaml b/lis-app/src/main/resources/application-suppliers.yaml deleted file mode 100644 index aac23fd..0000000 --- a/lis-app/src/main/resources/application-suppliers.yaml +++ /dev/null @@ -1,51 +0,0 @@ -### HTTP server -server: - port: 8080 - servlet: - context-path: / - -### ZKoss -zk: - homepage: suppliers - zul-view-resolver-enabled: true -### Spring -spring: - main: - banner-mode: off - output: - ansi: - enabled: always - mail: - host: smtp.gmail.com - port: 465 - username: mediacubeserver@gmail.com - password: salabakter - protocol: smtps - properties: - mail: - smtp: - auth: true - starttls: - enable: true - #datasources: - # maszkaweb: - # driver-class-name: com.mysql.jdbc.Driver - # type: com.zaxxer.hikari.HikariDataSource - # jdbcUrl: jdbc:mysql://localhost:3306/maszkaweb?useUnicode=true&characterEncoding=UTF-8 - # username: root - # password: password - # pool-name: pool-maszkaweb - # maximum-pool-size: 50 - # minimum-idle: 10 - datasource: - # driver-class-name: com.mysql.jdbc.Driver - type: com.zaxxer.hikari.HikariDataSource - url: jdbc:db2://localvm:50000/testmc - username: db2admin - password: password - hikari: - pool-name: testmc - maximum-pool-size: 50 - minimum-idle: 10 -service: - message: Hello, World diff --git a/lis-app/src/main/resources/logback-spring.xml b/lis-app/src/main/resources/logback-dev.xml similarity index 60% rename from lis-app/src/main/resources/logback-spring.xml rename to lis-app/src/main/resources/logback-dev.xml index 01da73d..6cc83af 100644 --- a/lis-app/src/main/resources/logback-spring.xml +++ b/lis-app/src/main/resources/logback-dev.xml @@ -1,23 +1,13 @@ - - - - + %black(%d{ISO8601}) %highlight(%-5level) [%blue(%t)] %yellow(%C{1.}): %msg%n%throwable - - - - - - \ No newline at end of file diff --git a/lis-app/src/main/resources/logback-prod.xml b/lis-app/src/main/resources/logback-prod.xml index 3b3eb7d..cafae6f 100644 --- a/lis-app/src/main/resources/logback-prod.xml +++ b/lis-app/src/main/resources/logback-prod.xml @@ -1,10 +1,7 @@ - - - + %black(%d{ISO8601}) %highlight(%-5level) [%blue(%t)] %yellow(%C{1.}): %msg%n%throwable @@ -12,35 +9,25 @@ - + ${LOGS}/sly-crm-app-logger.log - + %d %p %C{1.} [%t] %m%n - - - - ${LOGS}/archived/sly-crm-app-%d{yyyy-MM-dd}.%i.log - - + + ${LOGS}/archived/sly-crm-app-%d{yyyy-MM-dd}.%i.log + 10MB - - + - - diff --git a/lis-app/src/test/java/hu/user/lis/RepositoryIT.java b/lis-app/src/test/java/hu/user/lis/RepositoryIT.java index e04f850..b00e823 100644 --- a/lis-app/src/test/java/hu/user/lis/RepositoryIT.java +++ b/lis-app/src/test/java/hu/user/lis/RepositoryIT.java @@ -86,7 +86,7 @@ public class RepositoryIT { project.setProjectStatus(null); IncomingInvoice invoice = IncomingInvoice.builder() - .income(true) + .incoming(true) .planned(true) .currency(Currency.HUF) .netAmount(1) diff --git a/lis-db/migrations/README b/lis-db/migrations/README index c145ce6..70fd38d 100644 --- a/lis-db/migrations/README +++ b/lis-db/migrations/README @@ -65,3 +65,4 @@ https://community.ibm.com/community/user/datamanagement/discussion/db2-docker-pe 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-db/migrations/environments/development.properties b/lis-db/migrations/environments/development.properties index 017b8c7..8ca0d80 100644 --- a/lis-db/migrations/environments/development.properties +++ b/lis-db/migrations/environments/development.properties @@ -4,7 +4,7 @@ time_zone=GMT+0:00 script_char_set=UTF-8 ## JDBC connection properties. driver=com.ibm.db2.jcc.DB2Driver -url=jdbc:db2://localhost:50000/slycrm +url=jdbc:db2://localhost:50000/lis username=db2admin password=password # diff --git a/lis-db/migrations/scripts/010_reset_partner_index.sql b/lis-db/migrations/scripts/010_reset_partner_index.sql new file mode 100644 index 0000000..99f2ed6 --- /dev/null +++ b/lis-db/migrations/scripts/010_reset_partner_index.sql @@ -0,0 +1,9 @@ +-- // reset partner index +-- Migration SQL that makes the change goes here. + +ALTER TABLE PARTNER ALTER COLUMN id RESTART WITH 4; + +-- //@UNDO +-- SQL to undo the change goes here. + + diff --git a/lis-db/migrations/scripts/011_reset_project_index.sql b/lis-db/migrations/scripts/011_reset_project_index.sql new file mode 100644 index 0000000..ff882d8 --- /dev/null +++ b/lis-db/migrations/scripts/011_reset_project_index.sql @@ -0,0 +1,9 @@ +-- // reset project index +-- Migration SQL that makes the change goes here. + +ALTER TABLE PROJECT ALTER COLUMN id RESTART WITH 2; + +-- //@UNDO +-- SQL to undo the change goes here. + + diff --git a/lis-db/migrations/scripts/012_create_payment.sql b/lis-db/migrations/scripts/012_create_payment.sql new file mode 100644 index 0000000..07994e1 --- /dev/null +++ b/lis-db/migrations/scripts/012_create_payment.sql @@ -0,0 +1,19 @@ +-- // create payment +-- Migration SQL that makes the change goes here. + +CREATE TABLE payment ( + id BIGINT NOT NULL GENERATED BY DEFAULT AS IDENTITY, + invoice_id BIGINT, + net_amount DOUBLE NOT NULL, + gross_amount DOUBLE NOT NULL, + vat_amount DOUBLE NOT NULL, + payment_date TIMESTAMP, + currency INTEGER, + CONSTRAINT pk_payment PRIMARY KEY (id) +); +ALTER TABLE payment ADD CONSTRAINT FK_PAYMENT_ON_INVOICE FOREIGN KEY (invoice_id) REFERENCES invoice (id); + +-- //@UNDO +-- SQL to undo the change goes here. + +DROP TABLE payment; diff --git a/lis-db/migrations/scripts/013_modify_invoice_rename_income_incoming.sql b/lis-db/migrations/scripts/013_modify_invoice_rename_income_incoming.sql new file mode 100644 index 0000000..40dc129 --- /dev/null +++ b/lis-db/migrations/scripts/013_modify_invoice_rename_income_incoming.sql @@ -0,0 +1,9 @@ +-- // modify invoice rename income incoming +-- Migration SQL that makes the change goes here. + +ALTER TABLE invoice RENAME COLUMN income TO incoming; + +-- //@UNDO +-- SQL to undo the change goes here. + +ALTER TABLE invoice RENAME COLUMN incoming TO income; diff --git a/lis-db/migrations/scripts/014_add_paid_to_invoice.sql b/lis-db/migrations/scripts/014_add_paid_to_invoice.sql new file mode 100644 index 0000000..8b961cb --- /dev/null +++ b/lis-db/migrations/scripts/014_add_paid_to_invoice.sql @@ -0,0 +1,9 @@ +-- // add paid to invoice +-- Migration SQL that makes the change goes here. + +ALTER TABLE invoice ADD COLUMN paid SMALLINT NOT NULL DEFAULT 0; + +-- //@UNDO +-- SQL to undo the change goes here. + +ALTER TABLE invoice DROP COLUMN paid; diff --git a/lis-db/src/main/java/hu/user/lis/db/IncomingInvoice.java b/lis-db/src/main/java/hu/user/lis/db/IncomingInvoice.java index eab1d7d..eb53cc1 100644 --- a/lis-db/src/main/java/hu/user/lis/db/IncomingInvoice.java +++ b/lis-db/src/main/java/hu/user/lis/db/IncomingInvoice.java @@ -10,6 +10,6 @@ import javax.persistence.Entity; @DiscriminatorValue("1") public class IncomingInvoice extends Invoice { public IncomingInvoice() { - income = true; + incoming = true; } } diff --git a/lis-db/src/main/java/hu/user/lis/db/Invoice.java b/lis-db/src/main/java/hu/user/lis/db/Invoice.java index abfaf46..ca94e7c 100644 --- a/lis-db/src/main/java/hu/user/lis/db/Invoice.java +++ b/lis-db/src/main/java/hu/user/lis/db/Invoice.java @@ -15,7 +15,7 @@ import java.util.Date; @Entity @SuperBuilder @NoArgsConstructor -@DiscriminatorColumn(name = "income", discriminatorType = DiscriminatorType.INTEGER) +@DiscriminatorColumn(name = "incoming", discriminatorType = DiscriminatorType.INTEGER) @Inheritance(strategy = InheritanceType.SINGLE_TABLE) public class Invoice implements Serializable { @Id @@ -23,8 +23,6 @@ public class Invoice implements Serializable { Long id; String humanId; String title; - @Column(nullable = false, insertable = false, updatable = false) - boolean income; Currency currency; double netAmount; double grossAmount; @@ -32,8 +30,12 @@ public class Invoice implements Serializable { Date completionDate; Date createDate; Date paymentDeadline; + @Column(nullable = false, insertable = false, updatable = false) + boolean incoming; + boolean paid; boolean planned; byte[] file; + @OneToOne @JoinColumn(name = "partner_id") @JsonIncludeProperties({"id"}) diff --git a/lis-db/src/main/java/hu/user/lis/db/Payment.java b/lis-db/src/main/java/hu/user/lis/db/Payment.java new file mode 100644 index 0000000..0937d61 --- /dev/null +++ b/lis-db/src/main/java/hu/user/lis/db/Payment.java @@ -0,0 +1,28 @@ +package hu.user.lis.db; + +import com.fasterxml.jackson.annotation.JsonIncludeProperties; +import lombok.*; + +import javax.persistence.*; +import java.io.Serializable; +import java.util.Date; + +@Getter +@Setter +@Entity +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class Payment implements Serializable { + @ManyToOne + @JoinColumn(name = "invoice_id") + @JsonIncludeProperties({"id"}) + Invoice invoice; + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + Long id; + double netAmount; + double grossAmount; + double vatAmount; + Date paymentDate; +} 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 e02ac34..bb2b0c2 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 @@ -32,14 +32,14 @@ public class Project implements Serializable { @OneToMany(targetEntity = IncomingInvoice.class, cascade = CascadeType.ALL, fetch = FetchType.EAGER) @JoinColumn(name = "project_id", referencedColumnName = "id") - @Where(clause = "income=1") + @Where(clause = "incoming=1") @Fetch(FetchMode.JOIN) @JsonIncludeProperties({"id"}) Set incomingInvoices; @OneToMany(targetEntity = OutgoingInvoice.class, cascade = CascadeType.ALL, fetch = FetchType.EAGER) @JoinColumn(name = "project_id", referencedColumnName = "id") - @Where(clause = "income=0") + @Where(clause = "incoming=0") @Fetch(FetchMode.JOIN) @JsonIncludeProperties({"id"}) Set outgoingInvoices; diff --git a/lis-db/src/main/java/hu/user/lis/db/repository/InvoiceRepositorySearchImpl.java b/lis-db/src/main/java/hu/user/lis/db/repository/InvoiceRepositorySearchImpl.java index d60affd..14ac83b 100644 --- a/lis-db/src/main/java/hu/user/lis/db/repository/InvoiceRepositorySearchImpl.java +++ b/lis-db/src/main/java/hu/user/lis/db/repository/InvoiceRepositorySearchImpl.java @@ -35,16 +35,24 @@ public class InvoiceRepositorySearchImpl implements InvoiceRepositorySearch { if (filter.isIncoming()) { predicates.add(cb.isTrue(root.get("incoming"))); + } else { + predicates.add(cb.isFalse(root.get("incoming"))); } - if (filter.isSettled()) { - //TODO add field - predicates.add(cb.isTrue(root.get("settled"))); + if (filter.isPaid()) { + predicates.add(cb.isTrue(root.get("paid"))); } - if (Objects.nonNull(filter.getPaymentDeadLineFrom()) || Objects.nonNull(filter.getPaymentDeadLineTo())) { - //TODO check - predicates.add(cb.between(root.get("deadline"), filter.getPaymentDeadLineFrom(), filter.getPaymentDeadLineTo())); + if (Objects.nonNull(filter.getPaymentDeadLineFrom())) { + if (Objects.nonNull(filter.getPaymentDeadLineTo())) { + predicates.add(cb.between(root.get("paymentDeadline"), filter.getPaymentDeadLineFrom(), filter.getPaymentDeadLineTo())); + } else { + predicates.add(cb.greaterThanOrEqualTo(root.get("paymentDeadline"), filter.getPaymentDeadLineFrom())); + } + } else { + if (Objects.nonNull(filter.getPaymentDeadLineTo())) { + predicates.add(cb.lessThanOrEqualTo(root.get("paymentDeadline"), filter.getPaymentDeadLineTo())); + } } return predicates.toArray(new Predicate[]{}); diff --git a/lis-db/src/main/java/hu/user/lis/db/repository/PaymentRepository.java b/lis-db/src/main/java/hu/user/lis/db/repository/PaymentRepository.java new file mode 100644 index 0000000..8860d62 --- /dev/null +++ b/lis-db/src/main/java/hu/user/lis/db/repository/PaymentRepository.java @@ -0,0 +1,13 @@ +package hu.user.lis.db.repository; + +import hu.user.lis.db.Invoice; +import hu.user.lis.db.Payment; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.List; + +public interface PaymentRepository extends JpaRepository { + + List findAllByInvoice(Invoice invoice); + +} diff --git a/lis-db/src/main/java/hu/user/lis/db/repository/filter/InvoiceFilter.java b/lis-db/src/main/java/hu/user/lis/db/repository/filter/InvoiceFilter.java index 5afef12..f4b1fbd 100644 --- a/lis-db/src/main/java/hu/user/lis/db/repository/filter/InvoiceFilter.java +++ b/lis-db/src/main/java/hu/user/lis/db/repository/filter/InvoiceFilter.java @@ -2,26 +2,25 @@ package hu.user.lis.db.repository.filter; import hu.user.lis.db.Partner; import hu.user.lis.db.Project; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; -import lombok.ToString; +import lombok.*; import java.util.Date; @Getter @Setter -@NoArgsConstructor +@Builder @ToString +@NoArgsConstructor +@AllArgsConstructor public class InvoiceFilter extends PageableFilter { private Partner partner; private Project project; - private boolean isIncoming; + private boolean incoming; - private boolean isSettled; + private boolean paid; private Date paymentDeadLineFrom; diff --git a/lis-service/src/main/java/hu/user/lis/service/data/EntityDataServiceBase.java b/lis-service/src/main/java/hu/user/lis/service/data/EntityDataServiceBase.java index 4e469fb..7081639 100644 --- a/lis-service/src/main/java/hu/user/lis/service/data/EntityDataServiceBase.java +++ b/lis-service/src/main/java/hu/user/lis/service/data/EntityDataServiceBase.java @@ -5,23 +5,56 @@ import org.springframework.stereotype.Service; import java.lang.reflect.Field; import java.util.Arrays; +import java.util.Optional; @Log4j2 @Service public class EntityDataServiceBase { + private Object getMemberEntity(Object parent, String property) throws IllegalAccessException, NoSuchFieldException { + Object result = parent; + if (property.contains(".")) { + String[] tokens = property.split("\\."); + for (int i = 0; i < tokens.length - 1; i++) { + String fieldName = tokens[i]; + Optional declaredField = Optional.of(result.getClass().getDeclaredField(fieldName)); + Field field = declaredField.get(); + field.setAccessible(true); + result = field.get(result); + } + } + return result; + } + + private String getPropertyName(String property) { + String result = property; + if (property.contains(".")) { + String[] tokens = property.split("\\."); + result = tokens[tokens.length - 1]; + } + return result; + } + + + private Field getField(Object entity, String property) throws NoSuchFieldException { + Field field; + boolean hasField = Arrays.stream(entity.getClass().getDeclaredFields()).anyMatch(f -> f.getName().equals(property)); + if (hasField) { + field = entity.getClass().getDeclaredField(property); + } else { + field = entity.getClass().getSuperclass().getDeclaredField(property); + } + return field; + } + public boolean setFieldValue(Object entity, String property, Object value) { boolean result = false; - Field field; try { - boolean hasField = Arrays.stream(entity.getClass().getDeclaredFields()).anyMatch(f -> f.getName().equals(property)); - if (hasField) { - field = entity.getClass().getDeclaredField(property); - } else { - field = entity.getClass().getSuperclass().getDeclaredField(property); - } + String memberPropertyName = getPropertyName(property); + Object memberEntity = getMemberEntity(entity, property); + Field field = getField(memberEntity, memberPropertyName); field.setAccessible(true); - field.set(entity, value); + field.set(memberEntity, value); result = true; } catch (Exception e) { log.error(e); @@ -31,16 +64,12 @@ public class EntityDataServiceBase { public Object getFieldValue(Object entity, String property) { Object result = null; - Field field; try { - boolean hasField = Arrays.stream(entity.getClass().getDeclaredFields()).anyMatch(f -> f.getName().equals(property)); - if (hasField) { - field = entity.getClass().getDeclaredField(property); - } else { - field = entity.getClass().getSuperclass().getDeclaredField(property); - } + String memberPropertyName = getPropertyName(property); + Object memberEntity = getMemberEntity(entity, property); + Field field = getField(memberEntity, memberPropertyName); field.setAccessible(true); - result = field.get(entity); + result = field.get(memberEntity); } catch (Exception e) { log.error(e); } diff --git a/lis-service/src/main/java/hu/user/lis/service/data/InvoiceServiceImpl.java b/lis-service/src/main/java/hu/user/lis/service/data/InvoiceServiceImpl.java index 37663fe..7333b77 100644 --- a/lis-service/src/main/java/hu/user/lis/service/data/InvoiceServiceImpl.java +++ b/lis-service/src/main/java/hu/user/lis/service/data/InvoiceServiceImpl.java @@ -52,7 +52,7 @@ public class InvoiceServiceImpl extends DataServiceImpl implements Invo this.incomingEntities = new ArrayList<>(); this.outgoingEntities = new ArrayList<>(); entities.forEach(e -> { - if (e.isIncome()) { + if (e.isIncoming()) { incomingEntities.add(e); } else { outgoingEntities.add(e); @@ -104,7 +104,7 @@ public class InvoiceServiceImpl extends DataServiceImpl implements Invo .netAmount(netAmount) .grossAmount(grossAmount) .vatAmount(vatAmount) - .income(income) + .incoming(income) .build(); result.add(entity); } @@ -138,7 +138,7 @@ public class InvoiceServiceImpl extends DataServiceImpl implements Invo .netAmount(netAmount) .grossAmount(grossAmount) .vatAmount(vatAmount) - .income(income) // bejovo szamla + .incoming(income) // bejovo szamla .build(); result.add(entity); @@ -163,7 +163,7 @@ public class InvoiceServiceImpl extends DataServiceImpl implements Invo .netAmount(netAmount) .grossAmount(grossAmount) .vatAmount(vatAmount) - .income(income) // bejovo szamla + .incoming(income) // bejovo szamla .build(); result.add(entity); @@ -188,7 +188,7 @@ public class InvoiceServiceImpl extends DataServiceImpl implements Invo .netAmount(netAmount) .grossAmount(grossAmount) .vatAmount(vatAmount) - .income(income) // bejovo szamla + .incoming(income) // bejovo szamla .build(); result.add(entity); @@ -213,7 +213,7 @@ public class InvoiceServiceImpl extends DataServiceImpl implements Invo .netAmount(netAmount) .grossAmount(grossAmount) .vatAmount(vatAmount) - .income(income) // bejovo szamla + .incoming(income) // bejovo szamla .build(); result.add(entity); @@ -238,7 +238,7 @@ public class InvoiceServiceImpl extends DataServiceImpl implements Invo .netAmount(netAmount) .grossAmount(grossAmount) .vatAmount(vatAmount) - .income(income) // bejovo szamla + .incoming(income) // bejovo szamla .build(); result.add(entity); @@ -263,7 +263,7 @@ public class InvoiceServiceImpl extends DataServiceImpl implements Invo .netAmount(netAmount) .grossAmount(grossAmount) .vatAmount(vatAmount) - .income(income) // bejovo szamla + .incoming(income) // bejovo szamla .build(); result.add(entity); @@ -288,7 +288,7 @@ public class InvoiceServiceImpl extends DataServiceImpl implements Invo .netAmount(netAmount) .grossAmount(grossAmount) .vatAmount(vatAmount) - .income(income) // bejovo szamla + .incoming(income) // bejovo szamla .build(); result.add(entity); @@ -313,7 +313,7 @@ public class InvoiceServiceImpl extends DataServiceImpl implements Invo .netAmount(netAmount) .grossAmount(grossAmount) .vatAmount(vatAmount) - .income(income) // bejovo szamla + .incoming(income) // bejovo szamla .build(); result.add(entity); @@ -338,7 +338,7 @@ public class InvoiceServiceImpl extends DataServiceImpl implements Invo .netAmount(netAmount) .grossAmount(grossAmount) .vatAmount(vatAmount) - .income(income) // bejovo szamla + .incoming(income) // bejovo szamla .build(); result.add(entity); @@ -363,7 +363,7 @@ public class InvoiceServiceImpl extends DataServiceImpl implements Invo .netAmount(netAmount) .grossAmount(grossAmount) .vatAmount(vatAmount) - .income(income) // bejovo szamla + .incoming(income) // bejovo szamla .build(); result.add(entity); @@ -388,7 +388,7 @@ public class InvoiceServiceImpl extends DataServiceImpl implements Invo .netAmount(netAmount) .grossAmount(grossAmount) .vatAmount(vatAmount) - .income(income) // bejovo szamla + .incoming(income) // bejovo szamla .build(); result.add(entity); @@ -413,7 +413,7 @@ public class InvoiceServiceImpl extends DataServiceImpl implements Invo .netAmount(netAmount) .grossAmount(grossAmount) .vatAmount(vatAmount) - .income(income) // bejovo szamla + .incoming(income) // bejovo szamla .build(); result.add(entity); @@ -438,7 +438,7 @@ public class InvoiceServiceImpl extends DataServiceImpl implements Invo .netAmount(netAmount) .grossAmount(grossAmount) .vatAmount(vatAmount) - .income(income) // bejovo szamla + .incoming(income) // bejovo szamla .build(); result.add(entity); @@ -463,7 +463,7 @@ public class InvoiceServiceImpl extends DataServiceImpl implements Invo .netAmount(netAmount) .grossAmount(grossAmount) .vatAmount(vatAmount) - .income(income) // bejovo szamla + .incoming(income) // bejovo szamla .build(); result.add(entity); @@ -488,7 +488,7 @@ public class InvoiceServiceImpl extends DataServiceImpl implements Invo .netAmount(netAmount) .grossAmount(grossAmount) .vatAmount(vatAmount) - .income(income) // bejovo szamla + .incoming(income) // bejovo szamla .build(); result.add(entity); @@ -513,7 +513,7 @@ public class InvoiceServiceImpl extends DataServiceImpl implements Invo .netAmount(netAmount) .grossAmount(grossAmount) .vatAmount(vatAmount) - .income(income) // bejovo szamla + .incoming(income) // bejovo szamla .build(); result.add(entity); @@ -538,7 +538,7 @@ public class InvoiceServiceImpl extends DataServiceImpl implements Invo .netAmount(netAmount) .grossAmount(grossAmount) .vatAmount(vatAmount) - .income(income) // bejovo szamla + .incoming(income) // bejovo szamla .build(); result.add(entity); @@ -563,7 +563,7 @@ public class InvoiceServiceImpl extends DataServiceImpl implements Invo .netAmount(netAmount) .grossAmount(grossAmount) .vatAmount(vatAmount) - .income(income) // bejovo szamla + .incoming(income) // bejovo szamla .build(); result.add(entity); @@ -589,7 +589,7 @@ public class InvoiceServiceImpl extends DataServiceImpl implements Invo .netAmount(netAmount) .grossAmount(grossAmount) .vatAmount(vatAmount) - .income(income) // kimeno szamla + .incoming(income) // kimeno szamla .build(); result.add(entity); @@ -614,7 +614,7 @@ public class InvoiceServiceImpl extends DataServiceImpl implements Invo .netAmount(netAmount) .grossAmount(grossAmount) .vatAmount(vatAmount) - .income(income) // kimeno szamla + .incoming(income) // kimeno szamla .build(); result.add(entity); @@ -640,7 +640,7 @@ public class InvoiceServiceImpl extends DataServiceImpl implements Invo .netAmount(netAmount) .grossAmount(grossAmount) .vatAmount(vatAmount) - .income(income) // kimeno szamla + .incoming(income) // kimeno szamla .build(); result.add(entity); @@ -665,7 +665,7 @@ public class InvoiceServiceImpl extends DataServiceImpl implements Invo .netAmount(netAmount) .grossAmount(grossAmount) .vatAmount(vatAmount) - .income(income) // kimeno szamla + .incoming(income) // kimeno szamla .build(); result.add(entity); @@ -691,7 +691,7 @@ public class InvoiceServiceImpl extends DataServiceImpl implements Invo .netAmount(netAmount) .grossAmount(grossAmount) .vatAmount(vatAmount) - .income(income) // kimeno szamla + .incoming(income) // kimeno szamla .build(); result.add(entity); @@ -716,7 +716,7 @@ public class InvoiceServiceImpl extends DataServiceImpl implements Invo .netAmount(netAmount) .grossAmount(grossAmount) .vatAmount(vatAmount) - .income(income) // kimeno szamla + .incoming(income) // kimeno szamla .build(); result.add(entity); @@ -741,7 +741,7 @@ public class InvoiceServiceImpl extends DataServiceImpl implements Invo .netAmount(netAmount) .grossAmount(grossAmount) .vatAmount(vatAmount) - .income(income) // kimeno szamla + .incoming(income) // kimeno szamla .build(); result.add(entity); } diff --git a/lis-service/src/main/java/hu/user/lis/service/nav/mapper/InvoiceMapper.java b/lis-service/src/main/java/hu/user/lis/service/nav/mapper/InvoiceMapper.java index b5bf929..949adbf 100644 --- a/lis-service/src/main/java/hu/user/lis/service/nav/mapper/InvoiceMapper.java +++ b/lis-service/src/main/java/hu/user/lis/service/nav/mapper/InvoiceMapper.java @@ -21,7 +21,7 @@ public interface InvoiceMapper { @Mapping(target = "netAmount", source = "invoiceMain.invoice.invoiceSummary.summaryNormal.invoiceNetAmount") @Mapping(target = "vatAmount", source = "invoiceMain.invoice.invoiceSummary.summaryNormal.invoiceVatAmount") @Mapping(target = "grossAmount", source = "invoiceMain.invoice.invoiceSummary.summaryGrossData.invoiceGrossAmount") - @Mapping(target = "income", constant = "true") + @Mapping(target = "incoming", constant = "true") @Mapping(target = "id", ignore = true) @Mapping(target = "title", ignore = true) @Mapping(target = "planned", ignore = true) diff --git a/lis-services/lis-service.iml b/lis-services/lis-service.iml index dd16b75..00b3a57 100644 --- a/lis-services/lis-service.iml +++ b/lis-services/lis-service.iml @@ -1,6 +1,6 @@ - \ 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 b8e7a0b..83b15cd 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 @@ -13,8 +13,7 @@ public class Constants { public static final String REFRESH_INVOICE_IMPORT_TASKS = "REFRESH_INVOICE_IMPORT_TASKS"; public static final String NAV_PARTNERS = "/partners"; public static final String NAV_INVOICES = "/invoices"; - - public static final String NAV_INVOICE_SETTLE = "/invoice-settle"; + public static final String NAV_INVOICE_PAYMENT = "/invoice-payment"; public static final String NAV_PROJECTS = "/projects"; public static final String NAV_PROJECT = "/project"; public static final String NAV_PROJECT_WILD_CARD = "/project/**"; diff --git a/lis-ui/src/main/java/hu/user/lis/ui/auth/CurrentProfile.java b/lis-ui/src/main/java/hu/user/lis/ui/auth/CurrentProfile.java index 8402070..f9ebf1b 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/auth/CurrentProfile.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/auth/CurrentProfile.java @@ -37,7 +37,7 @@ public class CurrentProfile { return settings.get(type); } - public void addSetting(Profile columnProfile) { + public void persistSetting(Profile columnProfile) { Profile existing = settings.get(columnProfile.getType()); if (Objects.nonNull(existing)) { columnProfile.setId(existing.getId()); 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 4e9a79b..cf7a390 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 @@ -25,7 +25,7 @@ public class ResourceConfigurer { Constants.NAV_IMPORT_INVOICES_ASSIGN, Constants.NAV_IMPORT_INVOICES_APPROVE, Constants.NAV_INVOICES, - Constants.NAV_INVOICE_SETTLE, + Constants.NAV_INVOICE_PAYMENT, Constants.NAV_SETTINGS, Constants.NAV_PROJECT_WILD_CARD }) diff --git a/lis-ui/src/main/java/hu/user/lis/ui/data/InvoiceDataModel.java b/lis-ui/src/main/java/hu/user/lis/ui/data/InvoiceDataModel.java index 21e580f..57641df 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/data/InvoiceDataModel.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/data/InvoiceDataModel.java @@ -35,7 +35,7 @@ public class InvoiceDataModel { public IncomingInvoice createNewIncomingInvoice() { IncomingInvoice result = IncomingInvoice.builder() - .income(true) + .incoming(true) .planned(true) .build(); return result; diff --git a/lis-ui/src/main/java/hu/user/lis/ui/data/InvoicesDataModel.java b/lis-ui/src/main/java/hu/user/lis/ui/data/InvoicesDataModel.java index aa7f712..3468cdf 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/data/InvoicesDataModel.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/data/InvoicesDataModel.java @@ -43,10 +43,4 @@ public class InvoicesDataModel extends CachedSpringDataModel { this.filter = filter; super.reset(); } - - public void listAll() { - log.info("List all invoices"); - this.filter = null; - super.reset(); - } } diff --git a/lis-ui/src/main/java/hu/user/lis/ui/data/common/CachedSpringDataModel.java b/lis-ui/src/main/java/hu/user/lis/ui/data/common/CachedSpringDataModel.java index 4ba8666..5d8ad8b 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/data/common/CachedSpringDataModel.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/data/common/CachedSpringDataModel.java @@ -35,11 +35,16 @@ public abstract class CachedSpringDataModel extends CachedDataModel { public void addColumns(Map columns) { Profile profile = currentProfile.getSetting(getClass().getSimpleName()); + columns.keySet().forEach(colName -> addColumn(colName, columns.get(colName))); if (Objects.isNull(profile)) { - columns.keySet().forEach(colName -> addColumn(colName, columns.get(colName))); saveProfileSetting(); } else { - columnSettings = entityDataService.fromJSON(profile.getSetting(), JSONObject.class); + JSONObject savedColumns = entityDataService.fromJSON(profile.getSetting(), JSONObject.class); + if (savedColumns.keySet().equals(columns.keySet())) { + columnSettings = savedColumns; + } else { + saveProfileSetting(); + } } } @@ -49,7 +54,7 @@ public abstract class CachedSpringDataModel extends CachedDataModel { .type(getClass().getSimpleName()) .setting(entityDataService.toJSON(columnSettings)) .build(); - currentProfile.addSetting(columnProfile); + currentProfile.persistSetting(columnProfile); } private void addColumn(String name, String direction) { diff --git a/lis-ui/src/main/java/hu/user/lis/ui/view/InvoicesViewModel.java b/lis-ui/src/main/java/hu/user/lis/ui/view/InvoicesViewModel.java index f9f529a..61e74d2 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/view/InvoicesViewModel.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/view/InvoicesViewModel.java @@ -2,52 +2,118 @@ package hu.user.lis.ui.view; 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 hu.user.lis.db.repository.filter.InvoiceFilter; import hu.user.lis.ui.Constants; import hu.user.lis.ui.data.InvoicesDataModel; import hu.user.lis.ui.data.common.CachedSpringDataModel; +import hu.user.lis.ui.editor.selector.EntitySelectorRouter; +import hu.user.lis.ui.event.EventBus; import hu.user.lis.ui.view.common.EntityViewModel; import lombok.Getter; import lombok.extern.log4j.Log4j2; -import org.zkoss.bind.annotation.Init; +import org.zkoss.bind.BindUtils; +import org.zkoss.bind.PropertyChangeEvent; +import org.zkoss.bind.annotation.*; +import org.zkoss.zk.ui.Component; +import org.zkoss.zk.ui.event.Event; +import org.zkoss.zk.ui.event.EventListener; import org.zkoss.zk.ui.select.annotation.WireVariable; +import java.util.Objects; + import static hu.user.lis.ui.data.common.CachedDataModel.ASCENDING; import static hu.user.lis.ui.data.common.CachedDataModel.NATURAL; @Log4j2 -public class InvoicesViewModel extends EntityViewModel { +public class InvoicesViewModel extends EntityViewModel implements EventListener { + @Getter + private final InvoiceFilter invoiceFilter = InvoiceFilter.builder().incoming(true).build(); + @Getter @WireVariable - InvoicesDataModel invoicesDataModel; + EntitySelectorRouter entitySelectorRouter; - @Override - protected CachedSpringDataModel getDataModel() { - return invoicesDataModel; - } + @WireVariable + private EventBus eventBus; - @Override - protected String getNavigation() { - return Constants.NAV_INVOICES; - } + // private boolean filterShowIncoming; +// private boolean filterShowOutgoing; + @Getter + @WireVariable + private InvoicesDataModel invoicesDataModel; @Init + @Override public void init() { super.init(); + eventBus.register(this); + eventBus.registerForBinding(this); + refresh(); addColumns(ImmutableMap.of( "partner.name", ASCENDING, "partner.vatNr", NATURAL, "project.name", NATURAL, - "dueDate", NATURAL, - "paymentDate", NATURAL, + "paymentDeadline", NATURAL, "grossAmount", NATURAL, "currency", NATURAL, - "income", NATURAL + "incoming", NATURAL )); } - protected void refresh() { + @Override + @AfterCompose + public void onAfterCompose(@ContextParam(ContextType.VIEW) Component view) { + entitySelectorRouter.configureSelector(Partner.class, this, "invoiceFilter.partner"); + entitySelectorRouter.configureSelector(Project.class, this, "invoiceFilter.project"); + } + + @Override + protected CachedSpringDataModel getDataModel() { + return invoicesDataModel; + } + + @Override + protected String getNavigation() { + return Constants.NAV_INVOICES; + } + + @Command + public void refresh() { invoicesDataModel.clearSelection(); - invoicesDataModel.listAll(); + invoicesDataModel.search(invoiceFilter); } + @Command + public void setIncoming(@BindingParam("incoming") boolean value) { + invoiceFilter.setIncoming(value); + BindUtils.postNotifyChange(null, null, invoiceFilter, "incoming"); + refresh(); + } + + @Command + public void search() { + refresh(); + } + + @Override + public void onEvent(Event evt) throws Exception { + if (evt instanceof PropertyChangeEvent) { + PropertyChangeEvent propertyEvent = (PropertyChangeEvent) evt; + if (Objects.nonNull(propertyEvent.getBase()) && propertyEvent.getBase().equals(this)) { + if ("invoiceFilter.project".equals(propertyEvent.getProperty()) || + "invoiceFilter.partner".equals(propertyEvent.getProperty())) { + refresh(); + } + } + + } + } + + @Destroy + public void onDestroy() { + log.info("Destroy {}", getClass().getSimpleName()); + eventBus.unregister(this); + } } 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 6b78af6..87db3db 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 @@ -33,7 +33,7 @@ import static hu.user.lis.ui.data.common.CachedDataModel.NATURAL; @Log4j2 @VariableResolver(DelegatingVariableResolver.class) -public class ServiceRecordsViewModel extends EntityViewModel implements EventListener { +public class ServiceRecordsViewModel extends EntityViewModel implements EventListener { @WireVariable @Getter ServiceRecordsDataModel serviceRecordsDataModel; diff --git a/lis-ui/src/main/resources/web/invoice-settle.zul b/lis-ui/src/main/resources/web/invoice-payment.zul similarity index 100% rename from lis-ui/src/main/resources/web/invoice-settle.zul rename to lis-ui/src/main/resources/web/invoice-payment.zul diff --git a/lis-ui/src/main/resources/web/invoices.zul b/lis-ui/src/main/resources/web/invoices.zul index 4589531..c5efc71 100644 --- a/lis-ui/src/main/resources/web/invoices.zul +++ b/lis-ui/src/main/resources/web/invoices.zul @@ -1,46 +1,84 @@ + - + - - - + + + + + + -
- + - - - - - + + + + + + + diff --git a/lis-workflow/src/main/java/hu/user/lis/workflow/invoice/service/IncomingInvoiceFetcherService.java b/lis-workflow/src/main/java/hu/user/lis/workflow/invoice/service/IncomingInvoiceFetcherService.java index 20aa9c4..d3587c0 100644 --- a/lis-workflow/src/main/java/hu/user/lis/workflow/invoice/service/IncomingInvoiceFetcherService.java +++ b/lis-workflow/src/main/java/hu/user/lis/workflow/invoice/service/IncomingInvoiceFetcherService.java @@ -76,7 +76,7 @@ public class IncomingInvoiceFetcherService { .netAmount(netAmount) .grossAmount(grossAmount) .vatAmount(vatAmount) - .income(true) + .incoming(true) .build(); } -- 2.54.0