From 6c61a9cd91159acbdb30cd17ccfed22392ec4488 Mon Sep 17 00:00:00 2001 From: =?utf8?q?V=C3=A1s=C3=A1ry=20D=C3=A1niel?= Date: Tue, 24 Oct 2023 16:31:37 +0200 Subject: [PATCH] Reset DB table identities, add invoice payment, add project id regexp --- .idea/misc.xml | 2 +- lis-db/migrations/README | 6 +- .../scripts/010_reset_partner_index.sql | 2 +- .../scripts/011_reset_project_index.sql | 2 +- .../015_reset_project_status_index.sql | 9 ++ .../lis/db/repository/InvoiceRepository.java | 8 ++ .../lis/db/repository/PaymentRepository.java | 3 +- .../main/java/hu/user/lis/ui/Constants.java | 6 +- .../lis/ui/converter/PartnerConverter.java | 36 ++++++ .../ui/converter/ProjectStatusConverter.java | 10 +- .../user/lis/ui/data/InvoicesDataModel.java | 2 +- .../user/lis/ui/data/PaymentsDataModel.java | 52 ++++++++ .../lis/ui/view/InvoicePaymentViewModel.java | 121 ++++++++++++++++++ .../user/lis/ui/view/InvoicesViewModel.java | 11 +- lis-ui/src/main/resources/web/index.zul | 2 +- .../main/resources/web/invoice-payment.zul | 56 ++++---- runConfigurations/server-dev.run.xml | 2 +- 17 files changed, 275 insertions(+), 55 deletions(-) create mode 100644 lis-db/migrations/scripts/015_reset_project_status_index.sql create mode 100644 lis-ui/src/main/java/hu/user/lis/ui/converter/PartnerConverter.java create mode 100644 lis-ui/src/main/java/hu/user/lis/ui/data/PaymentsDataModel.java create mode 100644 lis-ui/src/main/java/hu/user/lis/ui/view/InvoicePaymentViewModel.java diff --git a/.idea/misc.xml b/.idea/misc.xml index 509fbe3..88fda26 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -17,7 +17,7 @@ - + diff --git a/lis-db/migrations/README b/lis-db/migrations/README index 70fd38d..2851db1 100644 --- a/lis-db/migrations/README +++ b/lis-db/migrations/README @@ -48,8 +48,10 @@ Enjoy. DOCKER -docker pull ibmcom/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 /docker/ibmdb2:/database ibmcom/db2 +# 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 diff --git a/lis-db/migrations/scripts/010_reset_partner_index.sql b/lis-db/migrations/scripts/010_reset_partner_index.sql index 99f2ed6..16fbb70 100644 --- a/lis-db/migrations/scripts/010_reset_partner_index.sql +++ b/lis-db/migrations/scripts/010_reset_partner_index.sql @@ -1,7 +1,7 @@ -- // reset partner index -- Migration SQL that makes the change goes here. -ALTER TABLE PARTNER ALTER COLUMN id RESTART WITH 4; +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 index ff882d8..9349902 100644 --- a/lis-db/migrations/scripts/011_reset_project_index.sql +++ b/lis-db/migrations/scripts/011_reset_project_index.sql @@ -1,7 +1,7 @@ -- // reset project index -- Migration SQL that makes the change goes here. -ALTER TABLE PROJECT ALTER COLUMN id RESTART WITH 2; +ALTER TABLE project ALTER COLUMN id RESTART WITH 2; -- //@UNDO -- SQL to undo the change goes here. diff --git a/lis-db/migrations/scripts/015_reset_project_status_index.sql b/lis-db/migrations/scripts/015_reset_project_status_index.sql new file mode 100644 index 0000000..fad2834 --- /dev/null +++ b/lis-db/migrations/scripts/015_reset_project_status_index.sql @@ -0,0 +1,9 @@ +-- // reset project index +-- Migration SQL that makes the change goes here. + +ALTER TABLE project_status ALTER COLUMN id RESTART WITH 2; + +-- //@UNDO +-- SQL to undo the change goes here. + + diff --git a/lis-db/src/main/java/hu/user/lis/db/repository/InvoiceRepository.java b/lis-db/src/main/java/hu/user/lis/db/repository/InvoiceRepository.java index da74be7..0c6ef8b 100644 --- a/lis-db/src/main/java/hu/user/lis/db/repository/InvoiceRepository.java +++ b/lis-db/src/main/java/hu/user/lis/db/repository/InvoiceRepository.java @@ -1,8 +1,16 @@ package hu.user.lis.db.repository; import hu.user.lis.db.Invoice; +import hu.user.lis.db.Partner; import org.springframework.data.jpa.repository.JpaRepository; +import java.util.List; +import java.util.Optional; + public interface InvoiceRepository extends JpaRepository, InvoiceRepositorySearch { + List findByHumanId(String humanId); + + Optional findByHumanIdAndPartner(String humanId, Partner partner); + } 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 index 8860d62..0dd136e 100644 --- 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 @@ -8,6 +8,7 @@ import java.util.List; public interface PaymentRepository extends JpaRepository { - List findAllByInvoice(Invoice invoice); + List findAllByInvoiceOrderByPaymentDateDesc(Invoice invoice); + long countByInvoice(Invoice invoice); } 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 83b15cd..cbf9e29 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 @@ -1,5 +1,9 @@ package hu.user.lis.ui; +import lombok.AccessLevel; +import lombok.NoArgsConstructor; + +@NoArgsConstructor(access = AccessLevel.PRIVATE) public class Constants { public static final String BINDING_QUEUE = "$ZKBIND_DEFQUE$"; public static final String PROJECT_EDITOR_QUEUE = "PROJECT_EDITOR_QUEUE"; @@ -26,8 +30,6 @@ public class Constants { public static final String NAV_LOGIN = "/login"; public static final String NAV_LOGOUT = "/logout"; public static final String NAV_ROOT = "/"; - 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/converter/PartnerConverter.java b/lis-ui/src/main/java/hu/user/lis/ui/converter/PartnerConverter.java new file mode 100644 index 0000000..95c1725 --- /dev/null +++ b/lis-ui/src/main/java/hu/user/lis/ui/converter/PartnerConverter.java @@ -0,0 +1,36 @@ +package hu.user.lis.ui.converter; + +import hu.user.lis.db.Partner; +import org.springframework.stereotype.Component; +import org.zkoss.bind.BindContext; +import org.zkoss.bind.Converter; +import org.zkoss.zul.ListModel; +import org.zkoss.zul.Selectbox; +import org.zkoss.zul.ext.Selectable; + +import java.util.Objects; + +@Component +public class PartnerConverter implements Converter { + @Override + public Object coerceToUi(Partner entity, Selectbox bandbox, BindContext bindContext) { + if (Objects.isNull(entity)) { + return IGNORED_VALUE; + } + ListModel model = bandbox.getModel(); + ((Selectable) model).clearSelection(); + for (int i = 0; i < model.getSize(); i++) { + Partner status = (Partner) model.getElementAt(i); + if (status.getId().equals(entity.getId())) { + return i; + } + } + return IGNORED_VALUE; + } + + @Override + public Partner coerceToBean(Object order, Selectbox bandbox, BindContext bindContext) { + ListModel model = bandbox.getModel(); + return model.getElementAt((int) order); + } +} \ No newline at end of file diff --git a/lis-ui/src/main/java/hu/user/lis/ui/converter/ProjectStatusConverter.java b/lis-ui/src/main/java/hu/user/lis/ui/converter/ProjectStatusConverter.java index 75b10f8..05d1bfa 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/converter/ProjectStatusConverter.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/converter/ProjectStatusConverter.java @@ -1,8 +1,6 @@ package hu.user.lis.ui.converter; import hu.user.lis.db.ProjectStatus; -import hu.user.lis.db.repository.ProjectStatusRepository; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.zkoss.bind.BindContext; import org.zkoss.bind.Converter; @@ -14,8 +12,8 @@ import java.util.Objects; @Component public class ProjectStatusConverter implements Converter { - @Autowired - ProjectStatusRepository projectStatusRepository; +// @Autowired +// ProjectStatusRepository projectStatusRepository; @Override public Object coerceToUi(ProjectStatus projectStatus, Selectbox box, BindContext bindContext) { @@ -35,6 +33,8 @@ public class ProjectStatusConverter implements Converter model = bandbox.getModel(); + return model.getElementAt((int) order); +// return projectStatusRepository.findByOrder((Integer) order + 1); } } \ No newline at end of file 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 3468cdf..4c1a9e0 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 @@ -16,8 +16,8 @@ import java.util.List; import java.util.Objects; import java.util.Optional; -@Component @Log4j2 +@Component @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) public class InvoicesDataModel extends CachedSpringDataModel { @Autowired 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 new file mode 100644 index 0000000..9f2bb28 --- /dev/null +++ b/lis-ui/src/main/java/hu/user/lis/ui/data/PaymentsDataModel.java @@ -0,0 +1,52 @@ +package hu.user.lis.ui.data; + +import hu.user.lis.db.Invoice; +import hu.user.lis.db.Payment; +import hu.user.lis.db.repository.PaymentRepository; +import hu.user.lis.service.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; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; +import org.zkoss.zul.FieldComparator; + +import java.util.List; + +@Log4j2 +@Component +@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) +public class PaymentsDataModel extends CachedSpringDataModel { + + @Autowired + private PaymentRepository paymentRepository; + + @Autowired + private EntityDataService paymenssDataService; + + private Invoice invoice; + + public void save(Payment modifiedEntity) { + paymentRepository.save(modifiedEntity); + } + + public void delete(Payment selectedPayment) { + paymentRepository.delete(selectedPayment); + } + + @Override + public List getResultSet(int page, int pageSize, FieldComparator sortComparator) { + return paymentRepository.findAllByInvoiceOrderByPaymentDateDesc(invoice); + } + + @Override + public int getResultSetCount() { + return (int) paymentRepository.countByInvoice(invoice); + } + + public void search(Invoice invoice) { + this.invoice = invoice; + super.reset(); + } +} 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 new file mode 100644 index 0000000..001fe74 --- /dev/null +++ b/lis-ui/src/main/java/hu/user/lis/ui/view/InvoicePaymentViewModel.java @@ -0,0 +1,121 @@ +package hu.user.lis.ui.view; + +import hu.user.lis.db.Invoice; +import hu.user.lis.db.Partner; +import hu.user.lis.db.Payment; +import hu.user.lis.db.repository.InvoiceRepository; +import hu.user.lis.ui.Constants; +import hu.user.lis.ui.converter.PartnerConverter; +import hu.user.lis.ui.data.PaymentsDataModel; +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.Setter; +import lombok.extern.log4j.Log4j2; +import org.zkoss.bind.annotation.Command; +import org.zkoss.bind.annotation.Init; +import org.zkoss.bind.annotation.NotifyChange; +import org.zkoss.zk.ui.select.annotation.WireVariable; +import org.zkoss.zul.ListModelList; + +import java.util.List; +import java.util.Objects; +import java.util.Optional; + +@Log4j2 +public class InvoicePaymentViewModel extends EntityViewModel { + + @Getter + private final ListModelList partners = new ListModelList<>(); + + @Getter + @WireVariable + EntitySelectorRouter entitySelectorRouter; + + @WireVariable + private EventBus eventBus; + + @Getter + @Setter + private Partner filterPartner; + + @Getter + @Setter + private Invoice selectedInvoice; + + @Getter + @Setter + private String invoiceNumber; + + @WireVariable + private InvoiceRepository invoiceRepository; + + @Getter + @WireVariable + private PaymentsDataModel paymentsDataModel; + + @Getter + @WireVariable + private PartnerConverter partnerConverter; + + @Getter + @Setter + private boolean partnerRequired; + + @Init + @Override + public void init() { + super.init(); +// addColumns(ImmutableMap.of( +// "partner.name", ASCENDING, +// "partner.vatNr", NATURAL, +// "project.name", NATURAL, +// "paymentDeadline", NATURAL, +// "grossAmount", NATURAL, +// "currency", NATURAL, +// "incoming", NATURAL +// )); + } + + @Override + protected CachedSpringDataModel getDataModel() { + return paymentsDataModel; + } + + @Override + protected String getNavigation() { + return Constants.NAV_INVOICE_PAYMENT; + } + + @Command + @NotifyChange("partnerRequired") + public void search() { + paymentsDataModel.clearSelection(); + paymentsDataModel.clear(); + if (Objects.isNull(filterPartner)) { + List invoices = invoiceRepository.findByHumanId(invoiceNumber); + if (invoices.isEmpty()) { + setPartnerRequired(false); + //show message + } else { + if (invoices.size() == 1) { + setPartnerRequired(false); + showEditor(invoices.get(0)); + } else { + setPartnerRequired(true); + partners.clear(); + invoices.forEach(invoice -> partners.add(invoice.getPartner())); + } + } + } else { + Optional opInvoice = invoiceRepository.findByHumanIdAndPartner(invoiceNumber, filterPartner); + opInvoice.ifPresent(this::showEditor); + } + } + + private void showEditor(Invoice invoice) { + paymentsDataModel.search(invoice); + } +} 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 61e74d2..a3da68a 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 @@ -30,16 +30,11 @@ import static hu.user.lis.ui.data.common.CachedDataModel.NATURAL; public class InvoicesViewModel extends EntityViewModel implements EventListener { @Getter private final InvoiceFilter invoiceFilter = InvoiceFilter.builder().incoming(true).build(); - - @Getter - @WireVariable - EntitySelectorRouter entitySelectorRouter; - @WireVariable private EventBus eventBus; - - // private boolean filterShowIncoming; -// private boolean filterShowOutgoing; + @Getter + @WireVariable + private EntitySelectorRouter entitySelectorRouter; @Getter @WireVariable private InvoicesDataModel invoicesDataModel; diff --git a/lis-ui/src/main/resources/web/index.zul b/lis-ui/src/main/resources/web/index.zul index 97d900c..4138e6d 100644 --- a/lis-ui/src/main/resources/web/index.zul +++ b/lis-ui/src/main/resources/web/index.zul @@ -88,7 +88,7 @@ + onClick="@command(vm.selectPage('~./invoice-payment.zul'))"/> diff --git a/lis-ui/src/main/resources/web/invoice-payment.zul b/lis-ui/src/main/resources/web/invoice-payment.zul index 36e170c..df60d22 100644 --- a/lis-ui/src/main/resources/web/invoice-payment.zul +++ b/lis-ui/src/main/resources/web/invoice-payment.zul @@ -1,47 +1,41 @@ - + - - - +
- + - - - - - + + + + diff --git a/runConfigurations/server-dev.run.xml b/runConfigurations/server-dev.run.xml index 86bdc22..8b4535f 100644 --- a/runConfigurations/server-dev.run.xml +++ b/runConfigurations/server-dev.run.xml @@ -1,6 +1,6 @@ -