From: elgekko Date: Mon, 14 Aug 2023 20:37:49 +0000 (+0200) Subject: Prepare implementations for 0.1.4 X-Git-Url: http://git.useribm.hu/?a=commitdiff_plain;h=68455948082b1c8633da1c9f9358df83de750971;p=sly-crm.git Prepare implementations for 0.1.4 --- diff --git a/TODO.txt b/TODO.txt index fdc04c5..42894b3 100644 --- a/TODO.txt +++ b/TODO.txt @@ -85,11 +85,12 @@ treasury hozzáadása után (project mentés előtt) legyen árrés kalkuláció XXX 20230817 --hosszútávon: cégnév v adószám alapján adatok letöltése publikus cégadatbázisból ---mindenhol lehessen törölni, legfejlebb a db szól ---project ID - párhuzamos generálás kezelése ---forintról visszaváltva pl. USD-re reset az áfá-n --számla dátumok egyenlőek is lehetnek, a fizetési határidő a legnagyobb (tisztázni pontosan) + +ld. associates --mindenhol lehessen törölni, legfejlebb a db szól ++--project ID - párhuzamos generálás kezelése ++--forintról visszaváltva pl. USD-re reset az áfá-n --munkalapnál csak az a projekt jelenjen meg amihez hozzá van rendelve, és a belépett felhasználó +-számla dátumok egyenlőek is lehetnek, a fizetési határidő a legnagyobb (tisztázni pontosan) -a ráfordítás nem veszi figyelembe a munka ráfordítást -camunda beepitese: szamla erkeztetes, elszoszor szamlakep csatolas, majd approve diff --git a/lis-db/src/main/java/hu/user/lis/db/repository/ProjectAssociateRepository.java b/lis-db/src/main/java/hu/user/lis/db/repository/ProjectAssociateRepository.java index 2a99015..f6788ab 100644 --- a/lis-db/src/main/java/hu/user/lis/db/repository/ProjectAssociateRepository.java +++ b/lis-db/src/main/java/hu/user/lis/db/repository/ProjectAssociateRepository.java @@ -4,10 +4,15 @@ import hu.user.lis.db.ProjectAssociate; import org.springframework.data.jpa.repository.JpaRepository; import java.util.List; +import java.util.Optional; public interface ProjectAssociateRepository extends JpaRepository { List findAllByProjectId(Long projectId); + List findAllByAssociateId(Long associateId); + + Optional findByAssociateIdAndProjectId(Long associateId, Long projectId); + Long countByProjectId(Long projectId); void deleteByProjectId(Long projectId); diff --git a/lis-db/src/main/java/hu/user/lis/db/repository/ProjectRepositorySearch.java b/lis-db/src/main/java/hu/user/lis/db/repository/ProjectRepositorySearch.java index b39dfe2..fc93c46 100644 --- a/lis-db/src/main/java/hu/user/lis/db/repository/ProjectRepositorySearch.java +++ b/lis-db/src/main/java/hu/user/lis/db/repository/ProjectRepositorySearch.java @@ -6,8 +6,8 @@ import org.springframework.data.domain.Pageable; import java.util.List; public interface ProjectRepositorySearch { - List search(String partialSearch, boolean filterShowActive, boolean filterShowInActive, Pageable pageable); + List search(String partialSearch, List projectIds, boolean filterShowActive, boolean filterShowInActive, Pageable pageable); - long count(String partialSearch, boolean filterShowActive, boolean filterShowInActive); + long count(String partialSearch, List projectIds, boolean filterShowActive, boolean filterShowInActive); } diff --git a/lis-db/src/main/java/hu/user/lis/db/repository/ProjectRepositorySearchImpl.java b/lis-db/src/main/java/hu/user/lis/db/repository/ProjectRepositorySearchImpl.java index 9c252ee..0c79056 100644 --- a/lis-db/src/main/java/hu/user/lis/db/repository/ProjectRepositorySearchImpl.java +++ b/lis-db/src/main/java/hu/user/lis/db/repository/ProjectRepositorySearchImpl.java @@ -1,6 +1,7 @@ package hu.user.lis.db.repository; import hu.user.lis.db.Project; +import org.apache.commons.collections4.ListUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.query.QueryUtils; @@ -21,7 +22,7 @@ public class ProjectRepositorySearchImpl implements ProjectRepositorySearch { @PersistenceContext EntityManager entityManager; - Predicate[] getPredicates(CriteriaBuilder cb, Root root, String partialSearch, boolean filterShowActive, boolean filterShowInActive) { + Predicate[] getPredicates(CriteriaBuilder cb, Root root, String partialSearch, List projectIds, boolean filterShowActive, boolean filterShowInActive) { List predicates = new ArrayList<>(); if (StringUtils.isNotBlank(partialSearch)) { List orPredicates = new ArrayList<>(); @@ -30,7 +31,9 @@ public class ProjectRepositorySearchImpl implements ProjectRepositorySearch { orPredicates.add(cb.like(cb.lower(root.join("partner").get("name")), "%" + partialSearch.toLowerCase() + "%")); predicates.add(cb.or(orPredicates.toArray(new Predicate[]{}))); } - + if (!ListUtils.emptyIfNull(projectIds).isEmpty()) { + predicates.add(root.get("id").in(projectIds)); + } if (filterShowActive && !filterShowInActive) { predicates.add(cb.isTrue(root.get("active"))); } @@ -41,12 +44,12 @@ public class ProjectRepositorySearchImpl implements ProjectRepositorySearch { } @Override - public List search(String partialSearch, boolean filterShowActive, boolean filterShowInActive, Pageable pageable) { + public List search(String partialSearch, List projectIds, boolean filterShowActive, boolean filterShowInActive, Pageable pageable) { CriteriaBuilder cb = entityManager.getCriteriaBuilder(); CriteriaQuery cq = cb.createQuery(Project.class); Root root = cq.from(Project.class); - cq.where(getPredicates(cb, root, partialSearch, filterShowActive, filterShowInActive)); + cq.where(getPredicates(cb, root, partialSearch, projectIds, filterShowActive, filterShowInActive)); cq.orderBy(QueryUtils.toOrders(pageable.getSort(), root, cb)); TypedQuery query = entityManager.createQuery(cq); query.setMaxResults(pageable.getPageSize()); @@ -55,13 +58,13 @@ public class ProjectRepositorySearchImpl implements ProjectRepositorySearch { } @Override - public long count(String partialSearch, boolean filterShowActive, boolean filterShowInActive) { + public long count(String partialSearch, List projectIds, boolean filterShowActive, boolean filterShowInActive) { CriteriaBuilder cb = entityManager.getCriteriaBuilder(); CriteriaQuery cq = cb.createQuery(Long.class); Root root = cq.from(Project.class); cq.select(cb.count(root)); - cq.where(getPredicates(cb, root, partialSearch, filterShowActive, filterShowInActive)); + cq.where(getPredicates(cb, root, partialSearch, projectIds, filterShowActive, filterShowInActive)); return entityManager.createQuery(cq).getSingleResult(); } } diff --git a/lis-ui/src/main/java/hu/user/lis/ui/data/AssociatesDataModel.java b/lis-ui/src/main/java/hu/user/lis/ui/data/AssociatesDataModel.java index 26da552..2f2da1c 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/data/AssociatesDataModel.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/data/AssociatesDataModel.java @@ -93,4 +93,8 @@ public class AssociatesDataModel extends CachedSpringDataModel { public Associate save(Associate entity) { return associateRepository.save(entity); } + + public void delete(Associate selectedEntity) { + associateRepository.delete(selectedEntity); + } } diff --git a/lis-ui/src/main/java/hu/user/lis/ui/data/CachedDataModel.java b/lis-ui/src/main/java/hu/user/lis/ui/data/CachedDataModel.java index 52c8186..1610b48 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/data/CachedDataModel.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/data/CachedDataModel.java @@ -75,7 +75,7 @@ public abstract class CachedDataModel extends ListModelList { } // ListModelList method felulirva - // after 1. search ++++++++++ + // after 1. searchByProject ++++++++++ @Override public int getSize() { if (this.resultSetSize < 0) { diff --git a/lis-ui/src/main/java/hu/user/lis/ui/data/ProjectAssociatesDataModel.java b/lis-ui/src/main/java/hu/user/lis/ui/data/ProjectAssociatesDataModel.java index 17fbf0e..dd7fab7 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/data/ProjectAssociatesDataModel.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/data/ProjectAssociatesDataModel.java @@ -9,10 +9,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Objects; +import java.util.*; @Component @Log4j2 @@ -21,15 +18,28 @@ public class ProjectAssociatesDataModel { @Autowired ProjectAssociateRepository projectAssociateRepository; - public List search(Long projectId) { + public List searchByProject(Long projectId) { List result = null; if (Objects.nonNull(projectId)) { - log.info("Searching project associate using filter: projectId LIKE {}", projectId); + log.info("Searching project associate using filter: projectId = {}", projectId); result = projectAssociateRepository.findAllByProjectId(projectId); } return result; } + public List searchByAssociate(Long associateId) { + List result = null; + if (Objects.nonNull(associateId)) { + log.info("Searching project associate using filter: associateId = {}", associateId); + result = projectAssociateRepository.findAllByAssociateId(associateId); + } + return result; + } + + public Optional searchByAssociateAndProject(Long associateId, Long projectId) { + log.info("Searching project associate using filter: associateId = {}, projectId = {} ", associateId, projectId); + return projectAssociateRepository.findByAssociateIdAndProjectId(associateId, projectId); + } @Transactional public void updateAssociates(Project project, Map formAssociates) { diff --git a/lis-ui/src/main/java/hu/user/lis/ui/data/ProjectSelectorDataModel.java b/lis-ui/src/main/java/hu/user/lis/ui/data/ProjectSelectorDataModel.java index f674fe1..de01efa 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/data/ProjectSelectorDataModel.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/data/ProjectSelectorDataModel.java @@ -3,7 +3,6 @@ package hu.user.lis.ui.data; import hu.user.lis.db.Project; import hu.user.lis.db.repository.ProjectRepository; 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; @@ -11,7 +10,9 @@ import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Component; import org.zkoss.zul.FieldComparator; +import javax.annotation.Nullable; import java.util.List; +import java.util.Objects; @Component @Log4j2 @@ -21,25 +22,27 @@ public class ProjectSelectorDataModel extends CachedSpringDataModel { @Autowired ProjectRepository projectRepository; private String partialSearch; + private List projectIds; @Override public List getResultSet(int page, int pageSize, FieldComparator sortComparator) { Pageable pageable = createPageable(0, SEARCH_LIMIT, null); - List result = StringUtils.isBlank(partialSearch) ? projectRepository.findAll(pageable).toList() : - projectRepository.search(partialSearch, true, false, pageable); - return result; + return projectRepository.search(partialSearch, projectIds, true, false, pageable); } @Override public int getResultSetCount() { - int result = StringUtils.isBlank(partialSearch) ? - (int) projectRepository.count() : - (int) projectRepository.count(partialSearch, true, false); - return result > SEARCH_LIMIT ? SEARCH_LIMIT : result; + int result = (int) projectRepository.count(partialSearch, projectIds, true, false); + return Math.min(result, SEARCH_LIMIT); } - public void search(String partialSearch) { - log.info("Searching projects using filter {}", partialSearch); + public void search(String partialSearch, @Nullable List projectIds) { + if (Objects.isNull(projectIds)) { + log.info("Searching projects using filter {}", partialSearch); + } else { + log.info("Searching projects using filter {} in associated {} project", partialSearch, projectIds.size()); + } + this.projectIds = projectIds; this.partialSearch = partialSearch; super.reset(); } diff --git a/lis-ui/src/main/java/hu/user/lis/ui/data/ProjectsDataModel.java b/lis-ui/src/main/java/hu/user/lis/ui/data/ProjectsDataModel.java index 2a881a7..a7329c8 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/data/ProjectsDataModel.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/data/ProjectsDataModel.java @@ -44,19 +44,19 @@ public class ProjectsDataModel extends CachedSpringDataModel { public List getResultSet(int page, int pageSize, FieldComparator sortComparator) { Pageable pageable = createPageable(page, pageSize, sortComparator); List result = listAll ? projectRepository.findAll() : - projectRepository.search(partialName, filterShowActive, filterShowInActive, pageable); + projectRepository.search(partialName, null, filterShowActive, filterShowInActive, pageable); return result; } @Override public int getResultSetCount() { long result = listAll ? projectRepository.count() : - projectRepository.count(partialName, filterShowActive, filterShowInActive); + projectRepository.count(partialName, null, filterShowActive, filterShowInActive); return (int) result; } public void search(String partialName) { - log.info("Searching partner using filters: name LIKE {}"); + log.info("Searching partner using filters: name LIKE {}", partialName); listAll = false; this.partialName = partialName; super.reset(); diff --git a/lis-ui/src/main/java/hu/user/lis/ui/data/SuppliersDataModel.java b/lis-ui/src/main/java/hu/user/lis/ui/data/SuppliersDataModel.java index 79c7672..f7e5235 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/data/SuppliersDataModel.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/data/SuppliersDataModel.java @@ -27,7 +27,7 @@ public class SuppliersDataModel extends CachedDataModel { private boolean canExecuteSearch() { boolean result = StringUtils.isNotBlank(partialName) || StringUtils.isNotBlank(partialZipCode) || listAll; - log.info("Can execute search: {}", result); + log.info("Can execute searchByProject: {}", result); return result; } diff --git a/lis-ui/src/main/java/hu/user/lis/ui/editor/InvoiceEditorModel.java b/lis-ui/src/main/java/hu/user/lis/ui/editor/InvoiceEditorModel.java index c867904..a80cd06 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/editor/InvoiceEditorModel.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/editor/InvoiceEditorModel.java @@ -22,6 +22,8 @@ import java.util.Objects; @Setter public class InvoiceEditorModel extends EntityEditorModel { + private boolean vatCalculated; + @Init public void init() { super.init(); @@ -29,17 +31,24 @@ public class InvoiceEditorModel extends EntityEditorModel { @AfterCompose public void onAfterCompose(@ContextParam(ContextType.VIEW) Component view) { - getEntitySelectorRouter().setFormDocument(Partner.class, getFormDocument(), "partner"); + getEntitySelectorRouter().configureSelector(Partner.class, getFormDocument(), "partner"); } @Command public void onNetAmountChange() { if (Currency.HUF.equals(getFormDocument().getCurrency())) { + vatCalculated = true; getFormDocument().setGrossAmount(getFormDocument().getNetAmount() * 1.27); getFormDocument().setVatAmount(getFormDocument().getGrossAmount() - getFormDocument().getNetAmount()); - BindUtils.postNotifyChange(getFormDocument(), "grossAmount", "vatAmount"); - validate(); + } else { + if (vatCalculated) { + getFormDocument().setGrossAmount(0); + getFormDocument().setVatAmount(0); + vatCalculated = false; + } } + BindUtils.postNotifyChange(getFormDocument(), "grossAmount", "vatAmount"); + validate(); } @Override 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 ad38e54..4382cef 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 @@ -109,7 +109,7 @@ public class ProjectEditorModel extends EntityEditorModel { private void initDetails() { initAssociates(); serviceRecordsDataModel.search(getFormDocument(), true); - getEntitySelectorRouter().setFormDocument(Partner.class, getFormDocument(), "partner"); + getEntitySelectorRouter().configureSelector(Partner.class, getFormDocument(), "partner"); incomeMarginsDataModel.recalculate(getFormDocument()); } @@ -318,7 +318,7 @@ public class ProjectEditorModel extends EntityEditorModel { if (Objects.isNull(getFormDocument().getId())) { return; } - List projectAssociates = projectAssociatesDataModel.search(getFormDocument().getId()); + List projectAssociates = projectAssociatesDataModel.searchByProject(getFormDocument().getId()); for (int i = 0; i < associatesDataModel.getSize(); i++) { Associate associate = associatesDataModel.getElementAt(i); boolean exists = projectAssociates.stream() diff --git a/lis-ui/src/main/java/hu/user/lis/ui/editor/ServiceRecordEditorModel.java b/lis-ui/src/main/java/hu/user/lis/ui/editor/ServiceRecordEditorModel.java index 6f657c0..c8d58ad 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/editor/ServiceRecordEditorModel.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/editor/ServiceRecordEditorModel.java @@ -2,9 +2,12 @@ package hu.user.lis.ui.editor; import hu.user.lis.db.Associate; import hu.user.lis.db.Project; +import hu.user.lis.db.ProjectAssociate; import hu.user.lis.db.ServiceRecord; import hu.user.lis.ui.auth.CurrentProfile; +import hu.user.lis.ui.data.ProjectAssociatesDataModel; import hu.user.lis.ui.editor.common.EntityEditorModel; +import hu.user.lis.ui.editor.selector.EntitySelectorModel; import lombok.Getter; import lombok.Setter; import lombok.extern.log4j.Log4j2; @@ -19,8 +22,8 @@ import org.zkoss.zul.Messagebox; import java.time.LocalDate; import java.time.ZoneId; -import java.util.Date; -import java.util.Objects; +import java.util.*; +import java.util.stream.Collectors; @Log4j2 @Getter @@ -29,6 +32,9 @@ public class ServiceRecordEditorModel extends EntityEditorModel { @WireVariable CurrentProfile currentProfile; + @WireVariable + ProjectAssociatesDataModel projectAssociatesDataModel; + @Init public void init() { super.init(); @@ -37,13 +43,49 @@ public class ServiceRecordEditorModel extends EntityEditorModel { @AfterCompose public void onAfterCompose(@ContextParam(ContextType.VIEW) Component view) { if (Objects.isNull(getFormDocument().getId())) { - getFormDocument().setAssociate(currentProfile.getAssociate()); - getFormDocument().setWorkDay(Date.from(LocalDate.now().atStartOfDay(ZoneId.systemDefault()).toInstant())); + setDefaults(); } - getEntitySelectorRouter().setFormDocument(Associate.class, getFormDocument(), "associate"); - getEntitySelectorRouter().setFormDocument(Project.class, getFormDocument(), "project"); + initEntitySelectors(); + } + + private void initEntitySelectors() { + getEntitySelectorRouter().configureSelector(Associate.class, getFormDocument(), "associate"); + EntitySelectorModel projectEntitySelectorModel = getEntitySelectorRouter().configureSelector(Project.class, getFormDocument(), "project"); + List projectAssociates = projectAssociatesDataModel.searchByAssociate(currentProfile.getAssociate().getId()); + projectEntitySelectorModel.addStaticFilter("projects", getProjectIds(projectAssociates)); } + private void setDefaults() { + getFormDocument().setAssociate(currentProfile.getAssociate()); + getFormDocument().setWorkDay(Date.from(LocalDate.now().atStartOfDay(ZoneId.systemDefault()).toInstant())); + } + + @Override + protected boolean executePreSaveTask() { + boolean[] result = {true}; + Optional opProjectAssociate = projectAssociatesDataModel.searchByAssociateAndProject(getFormDocument().getAssociate().getId(), + getFormDocument().getProject().getId()); + if (!opProjectAssociate.isPresent()) { + Messagebox.show("A munkatárs a kiválasztott projekt résztvevője lesz.", "Megerősítés", + Messagebox.OK | Messagebox.CANCEL, Messagebox.QUESTION, e -> { + if (e.getName().equals("onCancel")) { + result[0] = false; + } else { + + } + }); + } + return result[0]; + } + + private List getProjectIds(List projectAssociates) { + if (Objects.nonNull(projectAssociates)) { + return projectAssociates.stream().map(ProjectAssociate::getProjectId).collect(Collectors.toList()); + } + return Collections.emptyList(); + } + + @Override protected boolean canSave(ServiceRecord entity) { return Objects.nonNull(entity.getProject()) && 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 7118e85..62f055e 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 @@ -55,7 +55,7 @@ public abstract class EntityEditorModel extends Abstract @Command public void onCloseWindow(@BindingParam("target") Window target, @BindingParam("save") boolean save) { if (save) { - if (saveEnabled) { + if (saveEnabled && executePreSaveTask()) { Events.postEvent(new Event("onClose", target, formDocument)); } } else { @@ -63,6 +63,10 @@ public abstract class EntityEditorModel extends Abstract } } + protected boolean executePreSaveTask() { + return true; + } + private void setSaveEnabled(boolean saveEnabled) { this.saveEnabled = saveEnabled; log.info("Document save enabled {}", saveEnabled); diff --git a/lis-ui/src/main/java/hu/user/lis/ui/editor/selector/EntitySelectorModel.java b/lis-ui/src/main/java/hu/user/lis/ui/editor/selector/EntitySelectorModel.java index f9b32ac..34014f4 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/editor/selector/EntitySelectorModel.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/editor/selector/EntitySelectorModel.java @@ -2,6 +2,7 @@ package hu.user.lis.ui.editor.selector; import hu.user.lis.services.data.EntityDataServiceBase; import hu.user.lis.ui.data.CachedSpringDataModel; +import lombok.Getter; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; import org.zkoss.bind.BindContext; @@ -14,13 +15,22 @@ import org.zkoss.zk.ui.event.InputEvent; import org.zkoss.zk.ui.event.OpenEvent; import org.zkoss.zul.impl.XulElement; +import java.util.HashMap; +import java.util.Map; + @Log4j2 public abstract class EntitySelectorModel { + private final Map staticFilters = new HashMap<>(); + @Autowired EntityDataServiceBase entityDataServiceBase; + + @Getter private T selectedEntity; + private Object formDocument; + private String member; public abstract String selectorIdentifier(); @@ -47,20 +57,24 @@ public abstract class EntitySelectorModel { protected abstract void reset(); - public T getSelectedEntity() { - return selectedEntity; - } - public void setSelectedEntity(T selectedEntity) { this.selectedEntity = selectedEntity; entityDataServiceBase.setFieldValue(formDocument, member, selectedEntity); BindUtils.postNotifyChange(formDocument, member); } - public void setFormDocument(Object formDocument, String member) { + public void configureSelector(Object formDocument, String member) { this.formDocument = formDocument; this.member = member; selectedEntity = (T) entityDataServiceBase.getFieldValue(formDocument, member); BindUtils.postNotifyChange(this, "selectedEntity"); } + + public void addStaticFilter(String kind, Object filter) { + staticFilters.put(kind, filter); + } + + public Object getFilter(String kind) { + return staticFilters.get(kind); + } } diff --git a/lis-ui/src/main/java/hu/user/lis/ui/editor/selector/EntitySelectorRouter.java b/lis-ui/src/main/java/hu/user/lis/ui/editor/selector/EntitySelectorRouter.java index a45643e..b8eff2d 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/editor/selector/EntitySelectorRouter.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/editor/selector/EntitySelectorRouter.java @@ -37,10 +37,19 @@ public class EntitySelectorRouter { return result; } - public void setFormDocument(Class entityClass, Object formDocument, String member) { - usedModels.stream() - .filter(m -> m.selectorIdentifier().equals(entityClass.getSimpleName())) - .forEach(m -> m.setFormDocument(formDocument, member)); + public EntitySelectorModel configureSelector(Class entityClass, Object formDocument, String member) { + EntitySelectorModel result = null; + for (EntitySelectorModel model : usedModels) { + if (model.selectorIdentifier().equals(entityClass.getSimpleName())) { + model.configureSelector(formDocument, member); + result = model; + break; + } + } +// usedModels.stream() +// .filter(m -> m.selectorIdentifier().equals(entityClass.getSimpleName())) +// .forEach(m -> m.configureSelector(formDocument, member)); + return result; } } diff --git a/lis-ui/src/main/java/hu/user/lis/ui/editor/selector/ProjectSelectorModel.java b/lis-ui/src/main/java/hu/user/lis/ui/editor/selector/ProjectSelectorModel.java index 080a709..d503837 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/editor/selector/ProjectSelectorModel.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/editor/selector/ProjectSelectorModel.java @@ -14,6 +14,8 @@ import org.springframework.stereotype.Component; import org.zkoss.bind.Converter; import org.zkoss.zul.impl.XulElement; +import java.util.List; + @Log4j2 @Getter @Setter @@ -42,11 +44,11 @@ public class ProjectSelectorModel extends EntitySelectorModel { @Override protected void search(String filter) { - projectSelectorDataModel.search(filter); + projectSelectorDataModel.search(filter, (List) getFilter("projects")); } @Override protected void reset() { - projectSelectorDataModel.search(null); + projectSelectorDataModel.search(null, (List) getFilter("projects")); } } diff --git a/lis-ui/src/main/java/hu/user/lis/ui/view/AssociatesViewModel.java b/lis-ui/src/main/java/hu/user/lis/ui/view/AssociatesViewModel.java index 2070dfd..1666fc8 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/view/AssociatesViewModel.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/view/AssociatesViewModel.java @@ -12,6 +12,7 @@ import lombok.extern.log4j.Log4j2; import org.zkoss.bind.annotation.Command; import org.zkoss.bind.annotation.Init; import org.zkoss.zk.ui.select.annotation.WireVariable; +import org.zkoss.zul.Messagebox; import static hu.user.lis.ui.data.CachedDataModel.ASCENDING; import static hu.user.lis.ui.data.CachedDataModel.NATURAL; @@ -72,4 +73,15 @@ public class AssociatesViewModel extends FilterActiveViewModel { }); } + @Command + public void onDelete() { + Messagebox.show("Biztosan törli a kijelölt elemet?", "Megerősítés", + Messagebox.OK | Messagebox.CANCEL, Messagebox.QUESTION, e -> { + if (!e.getName().equals("onCancel")) { + associatesDataModel.delete(getSelectedEntity()); + refresh(); + } + }); + } + } 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 ca91a4f..3fc73f3 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 @@ -79,8 +79,8 @@ public class ServiceRecordsViewModel extends EntityViewModel impl @AfterCompose public void onAfterCompose(@ContextParam(ContextType.VIEW) Component view) { - entitySelectorRouter.setFormDocument(Associate.class, this, "filterAssociate"); - entitySelectorRouter.setFormDocument(Project.class, this, "filterProject"); + entitySelectorRouter.configureSelector(Associate.class, this, "filterAssociate"); + entitySelectorRouter.configureSelector(Project.class, this, "filterProject"); } private void refresh() { @@ -117,8 +117,8 @@ public class ServiceRecordsViewModel extends EntityViewModel impl public void onClearFilters() { filterAssociate = null; filterProject = null; - entitySelectorRouter.setFormDocument(Associate.class, this, "filterAssociate"); - entitySelectorRouter.setFormDocument(Project.class, this, "filterProject"); + entitySelectorRouter.configureSelector(Associate.class, this, "filterAssociate"); + entitySelectorRouter.configureSelector(Project.class, this, "filterProject"); serviceRecordsDataModel.listAll(); } @@ -134,8 +134,8 @@ public class ServiceRecordsViewModel extends EntityViewModel impl Map data = (Map) evt.getData(); filterAssociate = (Associate) data.get("filterAssociate"); filterProject = (Project) data.get("filterProject"); - entitySelectorRouter.setFormDocument(Associate.class, this, "filterAssociate"); - entitySelectorRouter.setFormDocument(Project.class, this, "filterProject"); + entitySelectorRouter.configureSelector(Associate.class, this, "filterAssociate"); + entitySelectorRouter.configureSelector(Project.class, this, "filterProject"); serviceRecordsDataModel.search(filterProject, filterAssociate); } diff --git a/lis-ui/src/main/resources/web/associates.zul b/lis-ui/src/main/resources/web/associates.zul index 04d0743..9f1207e 100644 --- a/lis-ui/src/main/resources/web/associates.zul +++ b/lis-ui/src/main/resources/web/associates.zul @@ -14,6 +14,8 @@ + diff --git a/lis-ui/src/main/resources/web/editor/associate-editor.zul b/lis-ui/src/main/resources/web/editor/associate-editor.zul index 76112ad..9880950 100644 --- a/lis-ui/src/main/resources/web/editor/associate-editor.zul +++ b/lis-ui/src/main/resources/web/editor/associate-editor.zul @@ -1,7 +1,7 @@ - diff --git a/lis-ui/src/main/resources/web/obsolate/partner-selector.zul b/lis-ui/src/main/resources/web/obsolate/partner-selector.zul index ead141a..56e7506 100644 --- a/lis-ui/src/main/resources/web/obsolate/partner-selector.zul +++ b/lis-ui/src/main/resources/web/obsolate/partner-selector.zul @@ -49,6 +49,6 @@ - + \ No newline at end of file diff --git a/lis-ui/src/main/resources/web/partners.zul b/lis-ui/src/main/resources/web/partners.zul index 9f099fb..755c8ba 100644 --- a/lis-ui/src/main/resources/web/partners.zul +++ b/lis-ui/src/main/resources/web/partners.zul @@ -8,6 +8,8 @@ + diff --git a/lis-ui/src/main/resources/web/projects.zul b/lis-ui/src/main/resources/web/projects.zul index 24e08e4..7a4e145 100644 --- a/lis-ui/src/main/resources/web/projects.zul +++ b/lis-ui/src/main/resources/web/projects.zul @@ -7,6 +7,8 @@ + diff --git a/lis-ui/src/main/resources/web/service-records.zul b/lis-ui/src/main/resources/web/service-records.zul index 821ffb6..096d031 100644 --- a/lis-ui/src/main/resources/web/service-records.zul +++ b/lis-ui/src/main/resources/web/service-records.zul @@ -8,6 +8,8 @@ +