From: elgekko Date: Tue, 4 Apr 2023 21:05:35 +0000 (+0200) Subject: Main page, partner list, partner editor X-Git-Url: http://git.useribm.hu/?a=commitdiff_plain;h=31590d66a9beeea547d3c6d752d0ba03a72b9c2c;p=sly-crm.git Main page, partner list, partner editor --- diff --git a/lis-db/src/main/java/hu/user/lis/db/Partner.java b/lis-db/src/main/java/hu/user/lis/db/Partner.java new file mode 100644 index 0000000..6031731 --- /dev/null +++ b/lis-db/src/main/java/hu/user/lis/db/Partner.java @@ -0,0 +1,22 @@ +package hu.user.lis.db; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@Builder +@AllArgsConstructor +public class Partner { + String id; + String name; + String vatNr; + String address; + boolean active; + + public static class PartnerBuilder { + private boolean active = true; + } +} diff --git a/lis-services/pom.xml b/lis-services/pom.xml index 25fa445..24159d9 100644 --- a/lis-services/pom.xml +++ b/lis-services/pom.xml @@ -28,7 +28,6 @@ hu.user lis-db 0.0.1-SNAPSHOT - compile org.springframework diff --git a/lis-services/src/main/java/hu/user/lis/services/data/PartnerService.java b/lis-services/src/main/java/hu/user/lis/services/data/PartnerService.java new file mode 100644 index 0000000..5363fa3 --- /dev/null +++ b/lis-services/src/main/java/hu/user/lis/services/data/PartnerService.java @@ -0,0 +1,9 @@ +package hu.user.lis.services.data; + +import hu.user.lis.db.Partner; + +import java.util.List; + +public interface PartnerService { + List getAll(); +} diff --git a/lis-services/src/main/java/hu/user/lis/services/data/PartnerServiceImpl.java b/lis-services/src/main/java/hu/user/lis/services/data/PartnerServiceImpl.java new file mode 100644 index 0000000..60ddcf3 --- /dev/null +++ b/lis-services/src/main/java/hu/user/lis/services/data/PartnerServiceImpl.java @@ -0,0 +1,37 @@ +package hu.user.lis.services.data; + +import com.github.javafaker.Faker; +import hu.user.lis.db.Partner; +import org.apache.commons.lang3.RandomStringUtils; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service +public class PartnerServiceImpl implements PartnerService { + private List partners; + + @Override + public List getAll() { + if (partners == null) { + partners = generate(); + } + return partners; + } + + private List generate() { + List result = new ArrayList<>(); + Faker faker = new Faker(); + for (int i = 0; i < 100; i++) { + String id = RandomStringUtils.random(8, "0123456789abcdef"); + String name = faker.name().fullName(); + String vatNr = RandomStringUtils.random(12, "0123456789"); + String address = String.format("%s %s, %s street %s", faker.address().zipCode(), faker.address().city(), + faker.address().streetName(), faker.address().buildingNumber()); + Partner partner = Partner.builder().id(id).name(name).vatNr(vatNr).address(address).build(); + result.add(partner); + } + return result; + } +} diff --git a/lis-ui/pom.xml b/lis-ui/pom.xml index fc8a751..b461fcb 100644 --- a/lis-ui/pom.xml +++ b/lis-ui/pom.xml @@ -50,7 +50,6 @@ spring-beans 5.2.0.RELEASE - org.zkoss.zkspringboot zkspringboot-starter @@ -106,12 +105,6 @@ lis-services 0.0.1-SNAPSHOT - - hu.user - lis-services - 0.0.1-SNAPSHOT - compile - org.springframework.boot spring-boot-devtools diff --git a/lis-ui/src/main/java/hu/user/lis/ui/data/PartnersDataModel.java b/lis-ui/src/main/java/hu/user/lis/ui/data/PartnersDataModel.java new file mode 100644 index 0000000..6de36e1 --- /dev/null +++ b/lis-ui/src/main/java/hu/user/lis/ui/data/PartnersDataModel.java @@ -0,0 +1,103 @@ +package hu.user.lis.ui.data; + +import hu.user.lis.db.Partner; +import hu.user.lis.services.data.PartnerService; +import lombok.extern.log4j.Log4j2; +import org.apache.commons.lang3.StringUtils; +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.bind.BindUtils; +import org.zkoss.zul.FieldComparator; + +import java.util.Comparator; +import java.util.List; +import java.util.stream.Collectors; + +@Component +@Log4j2 +@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) +public class PartnersDataModel extends CachedDataModel { + private String partialName; + private String partialAddress; + private String partialVatNr; + private boolean listAll; + @Autowired + PartnerService partnerService; + + + private boolean canExecuteSearch() { + boolean result = listAll || + StringUtils.isNotBlank(partialName) || + StringUtils.isNotBlank(partialVatNr) || + StringUtils.isNotBlank(partialAddress); + log.info("Can execute search: {}", result); + return result; + } + + private boolean filter(Partner partner) { + if (listAll) { + return true; + } + + boolean result = true; + if (StringUtils.isNotBlank(partialName)) { + if (!partner.getName().toLowerCase().startsWith(partialName.toLowerCase())) { + result = false; + } + } + if (StringUtils.isNotBlank(partialVatNr)) { + if (!partner.getVatNr().toLowerCase().startsWith(partialVatNr.toLowerCase())) { + result = false; + } + } + if (StringUtils.isNotBlank(partialAddress)) { + if (!partner.getAddress().toLowerCase().startsWith(partialAddress.toLowerCase())) { + result = false; + } + } + return result; + } + + @Override + protected List getResultSet(long offset, int limit, FieldComparator sortComparator) { + List result = null; + if (canExecuteSearch()) { + result = partnerService.getAll().stream() + .sorted(Comparator.comparing(Partner::getName)) + .filter(s -> filter(s)) + .collect(Collectors.toList()); + } + return result; + } + + @Override + public int getResultSetCount() { + int result = 0; + if (canExecuteSearch()) { + result = (int) partnerService.getAll().stream() + .filter(s -> filter(s)) + .count(); + } + return result; + } + + public void search(String partialName, String partialVatNr, String partialAddress) { + log.info("Searching partner using filters: name LIKE {}, VAT number LIKE {}, Address LIKE {}", + partialName, partialVatNr, partialAddress); + listAll = false; + this.partialName = partialName; + this.partialVatNr = partialVatNr; + this.partialAddress = partialAddress; + super.reset(); + BindUtils.postNotifyChange(null, null, this, "*"); + } + + public void listAll() { + log.info("List all partners"); + listAll = true; + super.reset(); + BindUtils.postNotifyChange(null, null, this, "*"); + } +} 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 new file mode 100644 index 0000000..e252c7d --- /dev/null +++ b/lis-ui/src/main/java/hu/user/lis/ui/view/IndexViewModel.java @@ -0,0 +1,32 @@ +package hu.user.lis.ui.view; + +import lombok.Getter; +import lombok.Setter; +import lombok.extern.log4j.Log4j2; +import org.springframework.boot.info.BuildProperties; +import org.zkoss.bind.annotation.Command; +import org.zkoss.bind.annotation.Init; +import org.zkoss.zk.ui.select.annotation.VariableResolver; +import org.zkoss.zk.ui.select.annotation.WireVariable; + +@Log4j2 +@VariableResolver(org.zkoss.zkplus.spring.DelegatingVariableResolver.class) +public class IndexViewModel { + @Getter + @WireVariable + BuildProperties buildProperties; + + @Getter + @Setter + String searchPhrase; + + @Init + public void init() { + log.info("Init"); + } + + @Command + public void search() { + + } +} diff --git a/lis-ui/src/main/java/hu/user/lis/ui/view/PartnerEditorModel.java b/lis-ui/src/main/java/hu/user/lis/ui/view/PartnerEditorModel.java new file mode 100644 index 0000000..20cb7db --- /dev/null +++ b/lis-ui/src/main/java/hu/user/lis/ui/view/PartnerEditorModel.java @@ -0,0 +1,51 @@ +package hu.user.lis.ui.view; + +import hu.user.lis.db.Partner; +import hu.user.lis.ui.data.FormDocument; +import hu.user.lis.ui.form.FormValidator; +import lombok.Getter; +import lombok.Setter; +import lombok.extern.log4j.Log4j2; +import org.springframework.beans.factory.annotation.Autowired; +import org.zkoss.bind.annotation.BindingParam; +import org.zkoss.bind.annotation.Command; +import org.zkoss.bind.annotation.Init; +import org.zkoss.zk.ui.event.Event; +import org.zkoss.zk.ui.event.Events; +import org.zkoss.zk.ui.select.annotation.VariableResolver; +import org.zkoss.zkplus.spring.DelegatingVariableResolver; +import org.zkoss.zul.Window; + +@Log4j2 +@Getter +@Setter +@VariableResolver(DelegatingVariableResolver.class) +public class PartnerEditorModel { + private FormDocument formDocument; + private boolean canEdit; + private Partner selectedPartner; + @Autowired + FormValidator formValidator; + + @Init + public void init() { + log.info("Initialized"); + //TODO atnevezni, mert forditva mukodik + setCanEdit(true); + } + + public String getFieldStyle(String field, String baseStyle) { +// Object error = getFormDocument().get(field + FIELD_POSTFIX_ERROR); +// if (error != null && (boolean) error) +// return baseStyle + " " + ERROR; +// else +// return baseStyle; + return baseStyle; + } + + @Command + public void onCloseWindow(@BindingParam("target") Window target, @BindingParam("select") boolean select) { + Event closeEvent = new Event("onClose", target, select ? selectedPartner : null); + Events.postEvent(closeEvent); + } +} diff --git a/lis-ui/src/main/java/hu/user/lis/ui/view/PartnersViewModel.java b/lis-ui/src/main/java/hu/user/lis/ui/view/PartnersViewModel.java new file mode 100644 index 0000000..a88aad7 --- /dev/null +++ b/lis-ui/src/main/java/hu/user/lis/ui/view/PartnersViewModel.java @@ -0,0 +1,82 @@ +package hu.user.lis.ui.view; + +import hu.user.lis.db.Partner; +import hu.user.lis.ui.data.FormDocument; +import hu.user.lis.ui.data.PartnersDataModel; +import hu.user.lis.ui.form.FormValidator; +import lombok.Getter; +import lombok.Setter; +import lombok.extern.log4j.Log4j2; +import org.springframework.beans.factory.annotation.Autowired; +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.VariableResolver; +import org.zkoss.zk.ui.select.annotation.WireVariable; +import org.zkoss.zkplus.spring.DelegatingVariableResolver; + +import java.util.Set; + +@Log4j2 +@Getter +@Setter +@VariableResolver(DelegatingVariableResolver.class) +public class PartnersViewModel { + private FormDocument formDocument; + private boolean canEdit; + private String partialName; + private String partialVatNr; + private String partialAddress; + private Partner selectedPartner; + @WireVariable + PartnersDataModel partnersDataModel; + @Autowired + FormValidator formValidator; + + @Init + public void init() { + log.info("Initialized"); + //TODO atnevezni, mert forditva mukodik + setCanEdit(true); + partnersDataModel.listAll(); + } + + public String getFieldStyle(String field, String baseStyle) { +// Object error = getFormDocument().get(field + FIELD_POSTFIX_ERROR); +// if (error != null && (boolean) error) +// return baseStyle + " " + ERROR; +// else +// return baseStyle; + return baseStyle; + } + + @Command + @NotifyChange("formDocument") + public void search() { + partnersDataModel.clearSelection(); + formDocument = null; + partnersDataModel.search(partialName, partialVatNr, partialAddress); + } + + @Command + @NotifyChange("formDocument") + public void onListSelection() { + formDocument = null; + selectedPartner = null; + Set selections = partnersDataModel.getSelection(); + if (selections.iterator().hasNext()) { + selectedPartner = selections.iterator().next(); + formDocument = FormDocument.builder().build() + .setData(selectedPartner); + log.info("Selected {}", formDocument); + } + } + + @Command + public void onAddNew() { + } + + @Command + public void onEdit() { + } +} diff --git a/lis-ui/src/main/java/hu/user/lis/ui/view/Index.java b/lis-ui/src/main/java/hu/user/lis/ui/view/SupplierViewModel.java similarity index 94% rename from lis-ui/src/main/java/hu/user/lis/ui/view/Index.java rename to lis-ui/src/main/java/hu/user/lis/ui/view/SupplierViewModel.java index 2f9e99f..beeb2ea 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/view/Index.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/view/SupplierViewModel.java @@ -5,7 +5,6 @@ import hu.user.lis.ui.data.SuppliersSimpleDataModel; import lombok.Getter; import lombok.Setter; import lombok.extern.log4j.Log4j2; -import org.springframework.boot.info.BuildProperties; import org.zkoss.bind.BindContext; import org.zkoss.bind.BindUtils; import org.zkoss.bind.annotation.Command; @@ -23,7 +22,7 @@ import java.util.Objects; @Log4j2 @VariableResolver(org.zkoss.zkplus.spring.DelegatingVariableResolver.class) -public class Index { +public class SupplierViewModel { @Getter @Setter @WireVariable @@ -33,9 +32,6 @@ public class Index { @Getter @Setter private String selectedSupplierId; - @Getter - @WireVariable - BuildProperties buildProperties; @Command public void onBandChanging(@ContextParam(ContextType.BIND_CONTEXT) BindContext ctx) { diff --git a/lis-ui/src/main/resources/web/fields/radiogroup.zul b/lis-ui/src/main/resources/web/fields/radiogroup.zul index c69a743..d145f8b 100644 --- a/lis-ui/src/main/resources/web/fields/radiogroup.zul +++ b/lis-ui/src/main/resources/web/fields/radiogroup.zul @@ -1,13 +1,14 @@
-
- -
-
- - -
+
+ +
+
+ + +
diff --git a/lis-ui/src/main/resources/web/index.zul b/lis-ui/src/main/resources/web/index.zul index d0a273f..ec483d2 100644 --- a/lis-ui/src/main/resources/web/index.zul +++ b/lis-ui/src/main/resources/web/index.zul @@ -1,73 +1,45 @@ - - -
- - - - - - - - - - - - - - - - - - -
-
\ No newline at end of file + +
+ + + + + + + + + + + + + + +
+ + + diff --git a/lis-ui/src/main/resources/web/partner.zul b/lis-ui/src/main/resources/web/partner.zul new file mode 100644 index 0000000..1bb9693 --- /dev/null +++ b/lis-ui/src/main/resources/web/partner.zul @@ -0,0 +1,35 @@ + + + + + + +
+
+
+ +
+
+ +
+
+ +
+
+ + + + +
+
+
+ + +