v0.1.3
authorelgekko <vasary@elgekko.net>
Sat, 29 Jul 2023 21:24:52 +0000 (23:24 +0200)
committerelgekko <vasary@elgekko.net>
Sat, 29 Jul 2023 21:24:52 +0000 (23:24 +0200)
68 files changed:
KB.md
lis-app/pom.xml
lis-app/src/main/resources/application.yaml
lis-db/migrations/scripts/004_create_test_data.sql
lis-services/src/main/java/hu/user/lis/services/data/EntityDataService.java
lis-services/src/main/java/hu/user/lis/services/data/EntityDataServiceBase.java [new file with mode: 0644]
lis-ui/src/main/java/hu/user/lis/ui/Constants.java
lis-ui/src/main/java/hu/user/lis/ui/converter/AssociateToNameConverter.java
lis-ui/src/main/java/hu/user/lis/ui/converter/PartnerToNameConverter.java
lis-ui/src/main/java/hu/user/lis/ui/converter/ProjectToInfoConverter.java
lis-ui/src/main/java/hu/user/lis/ui/data/CachedDataModel.java
lis-ui/src/main/java/hu/user/lis/ui/data/CachedSpringDataModel.java
lis-ui/src/main/java/hu/user/lis/ui/data/ProjectStatusDataModel.java
lis-ui/src/main/java/hu/user/lis/ui/data/ServiceRecordsDataModel.java
lis-ui/src/main/java/hu/user/lis/ui/editor/AssociateEditorModel.java
lis-ui/src/main/java/hu/user/lis/ui/editor/InvoiceEditorModel.java
lis-ui/src/main/java/hu/user/lis/ui/editor/PartnerEditorModel.java
lis-ui/src/main/java/hu/user/lis/ui/editor/ProjectEditorModel.java
lis-ui/src/main/java/hu/user/lis/ui/editor/ServiceRecordEditorModel.java
lis-ui/src/main/java/hu/user/lis/ui/editor/TreasuryEditorModel.java
lis-ui/src/main/java/hu/user/lis/ui/editor/common/EditCompleted.java [moved from lis-ui/src/main/java/hu/user/lis/ui/editor/EditCompleted.java with 63% similarity]
lis-ui/src/main/java/hu/user/lis/ui/editor/common/Editors.java [moved from lis-ui/src/main/java/hu/user/lis/ui/editor/Editors.java with 64% similarity]
lis-ui/src/main/java/hu/user/lis/ui/editor/common/EntityEditorModel.java [moved from lis-ui/src/main/java/hu/user/lis/ui/editor/EntityEditorModel.java with 93% similarity]
lis-ui/src/main/java/hu/user/lis/ui/editor/selector/AssociateSelectorModel.java [new file with mode: 0644]
lis-ui/src/main/java/hu/user/lis/ui/editor/selector/EntitySelectorModel.java
lis-ui/src/main/java/hu/user/lis/ui/editor/selector/PartnerSelectorModel.java
lis-ui/src/main/java/hu/user/lis/ui/editor/selector/ProjectSelectorModel.java [new file with mode: 0644]
lis-ui/src/main/java/hu/user/lis/ui/editor/widget/EntitySelector.java
lis-ui/src/main/java/hu/user/lis/ui/event/EventBus.java
lis-ui/src/main/java/hu/user/lis/ui/view/AssociatesViewModel.java
lis-ui/src/main/java/hu/user/lis/ui/view/IndexViewModel.java
lis-ui/src/main/java/hu/user/lis/ui/view/PartnersViewModel.java
lis-ui/src/main/java/hu/user/lis/ui/view/ProjectsViewModel.java
lis-ui/src/main/java/hu/user/lis/ui/view/ServiceRecordsViewModel.java
lis-ui/src/main/java/hu/user/lis/ui/view/SettingsViewModel.java
lis-ui/src/main/java/hu/user/lis/ui/view/SuppliersViewModel.java [deleted file]
lis-ui/src/main/java/hu/user/lis/ui/view/common/AsyncBaseModel.java [moved from lis-ui/src/main/java/hu/user/lis/ui/view/AsyncBaseModel.java with 96% similarity]
lis-ui/src/main/java/hu/user/lis/ui/view/common/EntityViewModel.java [moved from lis-ui/src/main/java/hu/user/lis/ui/view/EntityViewModel.java with 81% similarity]
lis-ui/src/main/java/hu/user/lis/ui/view/common/FilterActiveViewModel.java [moved from lis-ui/src/main/java/hu/user/lis/ui/view/FilterActiveViewModel.java with 97% similarity]
lis-ui/src/main/java/hu/user/lis/ui/view/common/UITask.java [moved from lis-ui/src/main/java/hu/user/lis/ui/view/UITask.java with 57% similarity]
lis-ui/src/main/resources/web/associates.zul
lis-ui/src/main/resources/web/editor/associate-editor.zul [moved from lis-ui/src/main/resources/web/associate-editor.zul with 100% similarity]
lis-ui/src/main/resources/web/editor/incoming-invoice-editor.zul [moved from lis-ui/src/main/resources/web/incoming-invoice-editor.zul with 97% similarity]
lis-ui/src/main/resources/web/editor/outgoing-invoice-editor.zul [moved from lis-ui/src/main/resources/web/outgoing-invoice-editor.zul with 97% similarity]
lis-ui/src/main/resources/web/editor/partner-editor.zul [moved from lis-ui/src/main/resources/web/partner-editor.zul with 100% similarity]
lis-ui/src/main/resources/web/editor/project-editor.zul [new file with mode: 0644]
lis-ui/src/main/resources/web/editor/project/incoming-invoices.zul [new file with mode: 0644]
lis-ui/src/main/resources/web/editor/project/outgoing-invoices.zul [new file with mode: 0644]
lis-ui/src/main/resources/web/editor/project/project-associates.zul [new file with mode: 0644]
lis-ui/src/main/resources/web/editor/project/service-records.zul [new file with mode: 0644]
lis-ui/src/main/resources/web/editor/project/treasuries.zul [new file with mode: 0644]
lis-ui/src/main/resources/web/editor/service-record-editor.zul [moved from lis-ui/src/main/resources/web/service-record-editor.zul with 93% similarity]
lis-ui/src/main/resources/web/editor/treasury-editor.zul [moved from lis-ui/src/main/resources/web/treasury-editor.zul with 100% similarity]
lis-ui/src/main/resources/web/login.zul
lis-ui/src/main/resources/web/obsolate/associate-filter.zul [moved from lis-ui/src/main/resources/web/associate-filter.zul with 100% similarity]
lis-ui/src/main/resources/web/obsolate/associate-selector.zul [moved from lis-ui/src/main/resources/web/associate-selector.zul with 100% similarity]
lis-ui/src/main/resources/web/obsolate/partner-selector.zul [moved from lis-ui/src/main/resources/web/partner-selector.zul with 100% similarity]
lis-ui/src/main/resources/web/obsolate/project-filter.zul [moved from lis-ui/src/main/resources/web/project-filter.zul with 100% similarity]
lis-ui/src/main/resources/web/obsolate/project-selector.zul [moved from lis-ui/src/main/resources/web/project-selector.zul with 100% similarity]
lis-ui/src/main/resources/web/obsolate/project.zul [moved from lis-ui/src/main/resources/web/project.zul with 100% similarity]
lis-ui/src/main/resources/web/partners.zul
lis-ui/src/main/resources/web/project-editor.zul [deleted file]
lis-ui/src/main/resources/web/projects.zul
lis-ui/src/main/resources/web/service-records.zul
lis-ui/src/main/resources/web/settings.zul
lis-ui/src/main/resources/web/static/css/webclient.css
lis-ui/src/main/resources/web/suppliers.zul [deleted file]
lis-ui/src/main/resources/web/widget/entity-selector.zul [moved from lis-ui/src/main/resources/web/entity-selector.zul with 91% similarity]

diff --git a/KB.md b/KB.md
index 45f3d9bab89e9472f12b819e273d87f283aee085..2e92b528229651dcfbb0cdd0c7447029a5ef4147 100644 (file)
--- a/KB.md
+++ b/KB.md
@@ -89,4 +89,8 @@ https://regex101.com/r/ytlsy4/2
 közösségi adószám
 https://regex101.com/r/itexWd/1
 https://www.oreilly.com/library/view/regular-expressions-cookbook/9781449327453/ch04s21.html
-^(HU)?[0-9]{8}$
\ No newline at end of file
+^(HU)?[0-9]{8}$
+
+##### Col reorder
+
+https://stackoverflow.com/questions/14021298/zk-reordering-in-listbox/14021556#14021556
\ No newline at end of file
index 21101b8ce9d305d73448fccd3c44fde9084b3f59..665a7540cff5f015bb8eaee5eb5ff6fa649a7f69 100644 (file)
@@ -3,7 +3,7 @@
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
     <artifactId>lis-app</artifactId>
-    <version>0.1.2-SNAPSHOT</version>
+    <version>0.1.3-SNAPSHOT</version>
     <parent>
         <groupId>hu.user</groupId>
         <artifactId>lis</artifactId>
index 0607c5e2ea3374371966b3a0ae0a9be5ed6cbe23..b62aa04b0e917f61abe96ec58437a9ce437dc68c 100644 (file)
@@ -9,7 +9,7 @@ spring:
   jpa:
     hibernate:
       use-new-id-generator-mappings: false
-    show-sql: false
+    show-sql: true
     properties:
       hibernate:
         format_sql: true
index 2549b12cc899770bade7b231ab2f65181d7856d6..0da1d67e859202edb2f975e0e4e9a405910f0706 100644 (file)
@@ -21,7 +21,7 @@ VALUES
 INSERT INTO PROJECT
     (ID, PROJECT_STATUS_ID, NAME, HUMAN_ID, CONTACT_NAME, PARTNER_ID, ACTIVE)
 VALUES
-    (1, 1, 'Halászat', '2023-01', 'Kovács', 1, 1);
+    (1, 1, 'Halászat', '2023-0001', 'Kovács', 1, 1);
 
 
 -- //@UNDO
index 68636073a53076c10723da8abb6a6d5b780e9287..bd57725e441db6cf7b99ab9556154e653911c22f 100644 (file)
@@ -10,12 +10,11 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.io.Serializable;
-import java.lang.reflect.Field;
 import java.util.Objects;
 
 @Log4j2
 @Service
-public class EntityDataService<T extends Serializable> {
+public class EntityDataService<T extends Serializable> extends EntityDataServiceBase {
     @Autowired
     ObjectMapper objectMapper;
 
@@ -23,29 +22,12 @@ public class EntityDataService<T extends Serializable> {
         return SerializationUtils.clone(sourceEntity);
     }
 
-
-    private boolean setFieldValue(T entity, Class clazz, String property, Object value) {
-        boolean result = false;
-        try {
-            Field field = clazz.getDeclaredField(property);
-            field.setAccessible(true);
-            field.set(entity, value);
-            result = true;
-        } catch (Exception e) {
-            log.error(e);
-        }
-        return result;
-    }
-
     public T clone(T sourceEntity, String property, Object value) {
         T result = clone(sourceEntity);
-        if (setFieldValue(result, result.getClass(), property, value)) {
-            return result;
+        if (!setFieldValue(result, property, value)) {
+            result = null;
         }
-        if (setFieldValue(result, result.getClass().getSuperclass(), property, value)) {
-            return result;
-        }
-        return null;
+        return result;
     }
 
 
diff --git a/lis-services/src/main/java/hu/user/lis/services/data/EntityDataServiceBase.java b/lis-services/src/main/java/hu/user/lis/services/data/EntityDataServiceBase.java
new file mode 100644 (file)
index 0000000..4794792
--- /dev/null
@@ -0,0 +1,49 @@
+package hu.user.lis.services.data;
+
+import lombok.extern.log4j.Log4j2;
+import org.springframework.stereotype.Service;
+
+import java.lang.reflect.Field;
+import java.util.Arrays;
+
+@Log4j2
+@Service
+public class EntityDataServiceBase {
+
+    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);
+            }
+            field.setAccessible(true);
+            field.set(entity, value);
+            result = true;
+        } catch (Exception e) {
+            log.error(e);
+        }
+        return result;
+    }
+
+    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);
+            }
+            field.setAccessible(true);
+            result = field.get(entity);
+        } catch (Exception e) {
+            log.error(e);
+        }
+        return result;
+    }
+}
index 04ef7d41d54cb20d25bea0fc157bacc2ce883e48..764deb28dd3817c6c8ae8fb40ff6bcd2be6100d5 100644 (file)
@@ -2,14 +2,13 @@ package hu.user.lis.ui;
 
 public class Constants {
     public static final String BINDING_QUEUE = "$ZKBIND_DEFQUE$";
+    public static final String PROJECT_EDITOR_QUEUE = "PROJECT_EDITOR_QUEUE";
     public static final String SHOW_PROJECT_EDITOR = "SHOW_PROJECT_EDITOR";
     public static final String SHOW_PROJECTS_LIST = "SHOW_PROJECTS_LIST";
-
     public static final String SHOW_SERVICE_RECORDS_LIST = "SHOW_SERVICE_RECORDS_LIST";
     public static final String SET_SERVICE_RECORDS_LIST_DATA = "SET_SERVICE_RECORDS_LIST_DATA";
     public static final String SET_PROJECT_EDITOR_DATA = "SET_PROJECT_EDITOR_DATA";
     public static final String SET_PROJECTS_LIST_DATA = "SET_PROJECTS_LIST_DATA";
-    public static final String PROJECT_EDITOR_QUEUE = "PROJECT_EDITOR_QUEUE";
 
     public static final String NAV_PARTNERS = "/partners";
     public static final String NAV_PROJECTS = "/projects";
@@ -19,4 +18,7 @@ public class Constants {
     public static final String NAV_SERVICE_RECORDS = "/service-records";
     public static final String NAV_SETTINGS = "/settings";
 
+    public static final String WIDGET_ENTITY_SELECTOR = "~./widget/entity-selector.zul";
+
+
 }
index 86a66b46dd87f0f621f3df8cf78643f979bc58df..e20e3470dd1a0891da0fe1ae688153b5c335ab24 100644 (file)
@@ -1,19 +1,24 @@
 package hu.user.lis.ui.converter;
 
 import hu.user.lis.db.Associate;
+import org.springframework.beans.factory.config.ConfigurableBeanFactory;
+import org.springframework.context.annotation.Scope;
+import org.springframework.stereotype.Component;
 import org.zkoss.bind.BindContext;
 import org.zkoss.bind.Converter;
-import org.zkoss.zul.Bandbox;
+import org.zkoss.zul.impl.XulElement;
 
-public class AssociateToNameConverter implements Converter<String, Associate, Bandbox> {
+@Component
+@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
+public class AssociateToNameConverter implements Converter<String, Associate, XulElement> {
 
     @Override
-    public String coerceToUi(Associate Associate, Bandbox bandbox, BindContext bindContext) {
+    public String coerceToUi(Associate Associate, XulElement bandbox, BindContext bindContext) {
         return Associate == null ? null : Associate.getName();
     }
 
     @Override
-    public Associate coerceToBean(String s, Bandbox bandbox, BindContext bindContext) {
+    public Associate coerceToBean(String s, XulElement bandbox, BindContext bindContext) {
         return null;
     }
 }
\ No newline at end of file
index c152fff357307fec354b4a0a388c1e4f89d12adb..d9115c2dc40802bcb23014b1c0831e19f17ff370 100644 (file)
@@ -6,19 +6,19 @@ import org.springframework.context.annotation.Scope;
 import org.springframework.stereotype.Component;
 import org.zkoss.bind.BindContext;
 import org.zkoss.bind.Converter;
-import org.zkoss.zul.Bandbox;
+import org.zkoss.zul.impl.XulElement;
 
 @Component
 @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
-public class PartnerToNameConverter implements Converter<String, Partner, Bandbox> {
+public class PartnerToNameConverter implements Converter<String, Partner, XulElement> {
 
     @Override
-    public String coerceToUi(Partner partner, Bandbox bandbox, BindContext bindContext) {
+    public String coerceToUi(Partner partner, XulElement bandbox, BindContext bindContext) {
         return partner == null ? null : partner.getName();
     }
 
     @Override
-    public Partner coerceToBean(String s, Bandbox bandbox, BindContext bindContext) {
+    public Partner coerceToBean(String s, XulElement bandbox, BindContext bindContext) {
         return null;
     }
 }
\ No newline at end of file
index 51cf2c94c68f35d51359c5057973ebb45ae4ad3f..868bdd8bc311be1f3b0a8f517e685a77b802464b 100644 (file)
@@ -1,19 +1,24 @@
 package hu.user.lis.ui.converter;
 
 import hu.user.lis.db.Project;
+import org.springframework.beans.factory.config.ConfigurableBeanFactory;
+import org.springframework.context.annotation.Scope;
+import org.springframework.stereotype.Component;
 import org.zkoss.bind.BindContext;
 import org.zkoss.bind.Converter;
-import org.zkoss.zul.Bandbox;
+import org.zkoss.zul.impl.XulElement;
 
-public class ProjectToInfoConverter implements Converter<String, Project, Bandbox> {
+@Component
+@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
+public class ProjectToInfoConverter implements Converter<String, Project, XulElement> {
 
     @Override
-    public String coerceToUi(Project project, Bandbox bandbox, BindContext bindContext) {
-        return project == null ? null : String.format("%s | %s | %s", project.getHumanId(), project.getName(), project.getPartner().getName());
+    public String coerceToUi(Project project, XulElement bandbox, BindContext bindContext) {
+        return project == null ? null : String.format("%s - %s - %s", project.getHumanId(), project.getName(), project.getPartner().getName());
     }
 
     @Override
-    public Project coerceToBean(String s, Bandbox bandbox, BindContext bindContext) {
+    public Project coerceToBean(String s, XulElement bandbox, BindContext bindContext) {
         return null;
     }
 }
\ No newline at end of file
index 09cc5afa371a2b3e97cd017f0cfc83e1bd31437e..52c8186008db411f3bae8f26710bdf5a8a267062 100644 (file)
@@ -1,5 +1,6 @@
 package hu.user.lis.ui.data;
 
+import lombok.Setter;
 import lombok.extern.log4j.Log4j2;
 import org.springframework.stereotype.Component;
 import org.zkoss.bind.BindUtils;
@@ -22,10 +23,13 @@ public abstract class CachedDataModel<T> extends ListModelList<T> {
     private int cacheEnd;
     private int resultSetSize = -1;
     private HashMap<Integer, T> cache = new HashMap<>();
+    @Setter
     private FieldComparator sortComparator;
 
     public CachedDataModel() {
+
         setMultiple(false);
+
     }
 
     public void reset() {
index 0fc115371226055f61e1e6cbef1576b8fac16f0b..3c491d7725eb84eaf2ca93e978cccedb72be3a51 100644 (file)
@@ -1,10 +1,13 @@
 package hu.user.lis.ui.data;
 
+import lombok.Getter;
+import lombok.Setter;
 import lombok.extern.log4j.Log4j2;
 import org.springframework.data.domain.PageRequest;
 import org.springframework.data.domain.Pageable;
 import org.springframework.data.domain.Sort;
 import org.springframework.stereotype.Component;
+import org.zkoss.json.JSONObject;
 import org.zkoss.zul.FieldComparator;
 
 import java.util.Objects;
@@ -12,6 +15,21 @@ import java.util.Objects;
 @Component
 @Log4j2
 public abstract class CachedSpringDataModel<T> extends CachedDataModel<T> {
+
+    @Getter
+    @Setter
+    JSONObject cols = new JSONObject();
+
+    public void addColumn(String name, String direction) {
+        JSONObject sort = new JSONObject();
+        sort.put("sortDirection", direction);
+        cols.put(name, sort);
+
+        if (!direction.equals(NATURAL)) {
+            setSortComparator(new FieldComparator(name, direction.equals(ASCENDING)));
+        }
+    }
+
     protected Pageable createPageable(int page, int pageSize, FieldComparator sortComparator) {
         Pageable pageable;
         if (Objects.isNull(sortComparator)) {
@@ -24,6 +42,5 @@ public abstract class CachedSpringDataModel<T> extends CachedDataModel<T> {
         log.info("{} {}", getClass().getSimpleName(), pageable);
         return pageable;
     }
-
 }
 
index abf2ce680e4fdc2378990055f7f51f02498230e7..0430ad979f5fd9f8b6e50626f8568fdecf405761 100644 (file)
@@ -23,6 +23,10 @@ public class ProjectStatusDataModel extends CachedSpringDataModel<ProjectStatus>
     ProjectStatusRepository projectStatusRepository;
     private boolean activeOnly;
 
+    public ProjectStatusDataModel() {
+        listAll();
+    }
+
     @Override
     public List<ProjectStatus> getResultSet(int page, int pageSize, FieldComparator sortComparator) {
         List<ProjectStatus> result;
@@ -76,7 +80,7 @@ public class ProjectStatusDataModel extends CachedSpringDataModel<ProjectStatus>
         });
     }
 
-    public void append() {
+    public void create() {
         ProjectStatus entity = projectStatusService.createNew();
         long currentCount = projectStatusRepository.count();
         entity.setOrder((int) currentCount + 1);
@@ -87,6 +91,15 @@ public class ProjectStatusDataModel extends CachedSpringDataModel<ProjectStatus>
         projectStatusRepository.save(entity);
     }
 
+    public void delete(ProjectStatus entity) {
+        projectStatusRepository.delete(entity);
+        List<ProjectStatus> projectStatuses = projectStatusRepository.findAll(Sort.by(Sort.Direction.ASC, "order"));
+        for (int i = 0; i < projectStatuses.size(); i++) {
+            projectStatuses.get(i).setOrder(i + 1);
+        }
+        projectStatusRepository.saveAll(projectStatuses);
+    }
+
     public ProjectStatus getDefault() {
         return projectStatusRepository.findByOrder(1);
     }
index 9476356f0a464ea08e6967b0d12b8f92852c3808..d03345668dd491713ed09b00fb8aacab702dd9f3 100644 (file)
@@ -4,6 +4,7 @@ import hu.user.lis.db.Associate;
 import hu.user.lis.db.Project;
 import hu.user.lis.db.ServiceRecord;
 import hu.user.lis.db.repository.ServiceRecordRepository;
+import hu.user.lis.services.data.EntityDataService;
 import hu.user.lis.services.data.ServiceRecordService;
 import lombok.extern.log4j.Log4j2;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -15,7 +16,6 @@ import org.zkoss.bind.annotation.Init;
 import org.zkoss.zk.ui.util.Clients;
 import org.zkoss.zul.FieldComparator;
 
-import javax.persistence.EntityNotFoundException;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -29,9 +29,16 @@ public class ServiceRecordsDataModel extends CachedSpringDataModel<ServiceRecord
     ServiceRecordService serviceRecordService;
     @Autowired
     ServiceRecordRepository serviceRecordRepository;
+
+    @Autowired
+    EntityDataService<ServiceRecord> serviceRecordDataService;
+
     private boolean listAll;
+
     private Long filterProjectId;
+
     private Long filterAssociateId;
+
     private boolean groupByAssociate;
 
     @Init
@@ -55,13 +62,16 @@ public class ServiceRecordsDataModel extends CachedSpringDataModel<ServiceRecord
         Map<Long, ServiceRecord> grouped = new HashMap<>();
         List<ServiceRecord> allEntities = serviceRecordRepository.findByProjectId(filterProjectId);
         allEntities.stream().forEach(s -> {
+            double cost = s.getWorkHours() * s.getAssociate().getMonthlyCost() / 160;
             if (grouped.containsKey(s.getAssociate().getId())) {
                 ServiceRecord serviceRecord = grouped.get(s.getAssociate().getId());
-                serviceRecord.setCost(serviceRecord.getCost() + s.getCost());
+                serviceRecord.setCost(serviceRecord.getCost() + cost);
                 serviceRecord.setWorkHours(serviceRecord.getWorkHours() + s.getWorkHours());
             } else {
-                ServiceRecord serviceRecord = serviceRecordRepository.findById(s.getId()).orElseThrow(EntityNotFoundException::new);
+                ServiceRecord serviceRecord = serviceRecordDataService.clone(s);
                 serviceRecord.setWorkDay(null);
+                serviceRecord.setId(0L);
+                serviceRecord.setCost(cost);
                 grouped.put(serviceRecord.getAssociate().getId(), serviceRecord);
             }
         });
@@ -104,29 +114,15 @@ public class ServiceRecordsDataModel extends CachedSpringDataModel<ServiceRecord
         return serviceRecordService.createNew();
     }
 
-    public void addNew(ServiceRecord entity) {
-        serviceRecordRepository.save(entity);
-    }
-
-    public ServiceRecord copy(ServiceRecord entity) {
-        return serviceRecordRepository.findById(entity.getId()).orElseThrow(EntityNotFoundException::new);
+    public ServiceRecord clone(ServiceRecord entity) {
+        return serviceRecordDataService.clone(entity);
     }
-//
-//    public ServiceRecord copy(ServiceRecord entity, String property, Object value) {
-//        ServiceRecord result = copy(entity);
-//        try {
-//            Field field = result.getClass().getDeclaredField(property);
-//            field.setAccessible(true);
-//            field.set(result, value);
-//        } catch (Exception e) {
-//            log.catching(e);
-//        }
-//        return result;
-//    }
 
     public ServiceRecord save(ServiceRecord selectedEntity) {
         return serviceRecordRepository.save(selectedEntity);
     }
 
-
+    public void delete(ServiceRecord entity) {
+        serviceRecordRepository.delete(entity);
+    }
 }
index 1eec92a1f83fa8f1a3938c48ddfda6edcccd55e4..66c82184c4e24d8ef3ac0cdab22f8b39ee0c8078 100644 (file)
@@ -1,6 +1,7 @@
 package hu.user.lis.ui.editor;
 
 import hu.user.lis.db.Associate;
+import hu.user.lis.ui.editor.common.EntityEditorModel;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.extern.log4j.Log4j2;
index 9dfa198f1947cc8fe2ed6867c582ebbee6b05fd8..c86790461fab1731091143a9de4bcf0ac33f291b 100644 (file)
@@ -2,21 +2,17 @@ package hu.user.lis.ui.editor;
 
 import hu.user.lis.db.Currency;
 import hu.user.lis.db.Invoice;
-import hu.user.lis.ui.data.PartnerSelectorDataModel;
+import hu.user.lis.db.Partner;
+import hu.user.lis.ui.editor.common.EntityEditorModel;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.extern.log4j.Log4j2;
 import org.apache.commons.lang3.StringUtils;
 import org.zkoss.bind.BindContext;
 import org.zkoss.bind.BindUtils;
-import org.zkoss.bind.annotation.Command;
-import org.zkoss.bind.annotation.ContextParam;
-import org.zkoss.bind.annotation.ContextType;
-import org.zkoss.bind.annotation.Init;
-import org.zkoss.zk.ui.event.InputEvent;
-import org.zkoss.zk.ui.event.OpenEvent;
+import org.zkoss.bind.annotation.*;
+import org.zkoss.zk.ui.Component;
 import org.zkoss.zk.ui.event.UploadEvent;
-import org.zkoss.zk.ui.select.annotation.WireVariable;
 import org.zkoss.zul.Messagebox;
 
 import java.util.Objects;
@@ -26,39 +22,26 @@ import java.util.Objects;
 @Setter
 public class InvoiceEditorModel extends EntityEditorModel<Invoice> {
 
-    @WireVariable
-    private PartnerSelectorDataModel partnerSelectorDataModel;
-
     @Init
     public void init() {
         super.init();
-        //partnerSelectorDataModel.clearSelection();
+    }
+
+    @AfterCompose
+    public void onAfterCompose(@ContextParam(ContextType.VIEW) Component view) {
+        getEntitySelectorRouter().setFormDocument(Partner.class, getFormDocument(), "partner");
     }
 
     @Command
     public void onNetAmountChange() {
-        if (Currency.HUF.equals(formDocument.getCurrency())) {
-            formDocument.setGrossAmount(formDocument.getNetAmount() * 1.27);
-            formDocument.setVatAmount(formDocument.getGrossAmount() - formDocument.getNetAmount());
-            BindUtils.postNotifyChange(this.formDocument, "grossAmount", "vatAmount");
+        if (Currency.HUF.equals(getFormDocument().getCurrency())) {
+            getFormDocument().setGrossAmount(getFormDocument().getNetAmount() * 1.27);
+            getFormDocument().setVatAmount(getFormDocument().getGrossAmount() - getFormDocument().getNetAmount());
+            BindUtils.postNotifyChange(getFormDocument(), "grossAmount", "vatAmount");
             validate();
         }
     }
 
-    @Command
-    public void onPartnerBandChanging(@ContextParam(ContextType.BIND_CONTEXT) BindContext ctx) {
-        InputEvent event = (InputEvent) ctx.getTriggerEvent();
-        log.info("onPartnerBandChanging: {}", event.getValue());
-        partnerSelectorDataModel.search(event.getValue());
-    }
-
-    @Command
-    public void onPartnerBandOpen(@ContextParam(ContextType.BIND_CONTEXT) BindContext ctx) {
-        OpenEvent event = (OpenEvent) ctx.getTriggerEvent();
-        log.info("onPartnerBandOpen: {}", event.isOpen());
-        partnerSelectorDataModel.search(null);
-    }
-
     @Override
     protected boolean canSave(Invoice entity) {
         return entity.getNetAmount() > 0 &&
@@ -80,15 +63,15 @@ public class InvoiceEditorModel extends EntityEditorModel<Invoice> {
             Messagebox.show("Csak PDF állomány feltöltése támogatott.", "Error", Messagebox.OK, Messagebox.ERROR);
             return;
         }
-        formDocument.setFile(evt.getMedia().getByteData());
-        BindUtils.postNotifyChange(this.formDocument, "file");
+        getFormDocument().setFile(evt.getMedia().getByteData());
+        BindUtils.postNotifyChange(getFormDocument(), "file");
         validate();
     }
 
     @Command
     public void onRemoveFile() {
-        formDocument.setFile(null);
-        BindUtils.postNotifyChange(this.formDocument, "file");
+        getFormDocument().setFile(null);
+        BindUtils.postNotifyChange(getFormDocument(), "file");
         validate();
     }
 }
index 959344419c5fddec94879d3d54e567fc9a2b9be1..6c6e1f92c4828aa19768de6f40021b4b15e02f9a 100644 (file)
@@ -1,6 +1,7 @@
 package hu.user.lis.ui.editor;
 
 import hu.user.lis.db.Partner;
+import hu.user.lis.ui.editor.common.EntityEditorModel;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.extern.log4j.Log4j2;
index 519cc5873d27a5e163208351ff628e02af7cf7f8..9896ecbe175dec8893e24f87abca27cedabbebc3 100644 (file)
@@ -6,16 +6,16 @@ import hu.user.lis.db.*;
 import hu.user.lis.ui.Constants;
 import hu.user.lis.ui.converter.ProjectStatusConverter;
 import hu.user.lis.ui.data.*;
+import hu.user.lis.ui.editor.common.Editors;
+import hu.user.lis.ui.editor.common.EntityEditorModel;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.extern.log4j.Log4j2;
 import org.apache.commons.lang3.StringUtils;
-import org.zkoss.bind.BindContext;
 import org.zkoss.bind.BindUtils;
 import org.zkoss.bind.annotation.*;
+import org.zkoss.zk.ui.Component;
 import org.zkoss.zk.ui.event.Event;
-import org.zkoss.zk.ui.event.InputEvent;
-import org.zkoss.zk.ui.event.OpenEvent;
 import org.zkoss.zk.ui.select.annotation.WireVariable;
 import org.zkoss.zk.ui.util.Clients;
 import org.zkoss.zul.Center;
@@ -30,45 +30,57 @@ public class ProjectEditorModel extends EntityEditorModel<Project> {
     @Setter
     @WireVariable
     AssociatesDataModel associatesDataModel;
+
     @WireVariable
     ProjectsDataModel projectsDataModel;
-    @WireVariable
-    private PartnerSelectorDataModel partnerSelectorDataModel;
+
     @WireVariable
     private InvoiceDataModel invoiceDataModel;
+
     @WireVariable
     private TreasuryDataModel treasuryDataModel;
+
     @Getter
     @Setter
     @WireVariable
     private ServiceRecordsDataModel serviceRecordsDataModel;
+
     @Getter
     @Setter
     @WireVariable
     private ProjectStatusDataModel projectStatusDataModel;
+
     @Getter
     @Setter
     @WireVariable
     private IncomeMarginsDataModel incomeMarginsDataModel;
+
     @WireVariable
     private ProjectAssociatesDataModel projectAssociatesDataModel;
+
     @Getter
     @Setter
     @WireVariable
     private ProjectStatusConverter projectStatusConverter;
+
     private Map<Long, Boolean> origAssociates;
+
     @Getter
     @Setter
     private Map<Long, Boolean> formAssociates;
+
     @Getter
     @Setter
     private IncomingInvoice selectedIncomingInvoice;
+
     @Getter
     @Setter
     private OutgoingInvoice selectedOutgoingInvoice;
+
     @Getter
     @Setter
     private Treasury selectedTreasury;
+
     @Getter
     @Setter
     private String partialAssociateName;
@@ -76,13 +88,10 @@ public class ProjectEditorModel extends EntityEditorModel<Project> {
     @Init
     public void init() {
         super.init();
-        projectStatusDataModel.listAll();
     }
 
-    @Command
-    public void onSelectedEntityChanged(@ContextParam(ContextType.BIND_CONTEXT) BindContext ctx) {
-        Event event = (Event) ctx.getTriggerEvent();
-        log.info("{}", event);
+    @AfterCompose
+    public void onAfterCompose(@ContextParam(ContextType.VIEW) Component view) {
     }
 
     @Override
@@ -97,21 +106,22 @@ public class ProjectEditorModel extends EntityEditorModel<Project> {
 
     private void initDetails() {
         initAssociates();
-        serviceRecordsDataModel.search(formDocument, true);
-        incomeMarginsDataModel.recalculate(formDocument);
-        entitySelectorRouter.setFormDocument(Partner.class, formDocument, "partner");
+        serviceRecordsDataModel.search(getFormDocument(), true);
+        getEntitySelectorRouter().setFormDocument(Partner.class, getFormDocument(), "partner");
+        incomeMarginsDataModel.recalculate(getFormDocument());
     }
 
+
     private void initDocuments(Object data) {
         if (Objects.isNull(data)) {
-            formDocument = projectsDataModel.createNew();
-            log.info("Loading new entity {} to editor", formDocument.getId());
+            setFormDocument(projectsDataModel.createNew());
+            log.info("Loading new entity {} to editor", getFormDocument().getId());
         } else {
             Long id = (Long) data;
             Clients.evalJavaScript(String.format("pushNav('/project/%d')", id));
             log.info("Loading entity {} to editor", id);
-            formDocument = projectsDataModel.getById(id);
-            origDocument = projectsDataModel.clone(formDocument);
+            setFormDocument(projectsDataModel.getById(id));
+            setOrigDocument(projectsDataModel.clone(getFormDocument()));
         }
         BindUtils.postNotifyChange(this, "formDocument");
     }
@@ -132,45 +142,15 @@ public class ProjectEditorModel extends EntityEditorModel<Project> {
 
     @Command
     public void onEndEdit(@BindingParam("target") Window target, @BindingParam("save") boolean save) {
-        if (save && saveEnabled) {
-            projectsDataModel.save(formDocument);
+        if (save && isSaveEnabled()) {
+            projectsDataModel.save(getFormDocument());
             if (isAssociatesChanged()) {
-                projectAssociatesDataModel.updateAssociates(formDocument, formAssociates);
+                projectAssociatesDataModel.updateAssociates(getFormDocument(), formAssociates);
             }
         }
-        eventBus.showProjectsList(ImmutableMap.of("formDocument", formDocument));
-    }
-
-    @Command
-    public void onPartnerBandChanging(@ContextParam(ContextType.BIND_CONTEXT) BindContext ctx) {
-        InputEvent event = (InputEvent) ctx.getTriggerEvent();
-        log.info("onPartnerBandChanging: {}", event.getValue());
-        partnerSelectorDataModel.search(event.getValue());
-    }
-
-    @Command
-    public void onPartnerBandOpen(@ContextParam(ContextType.BIND_CONTEXT) BindContext ctx) {
-        OpenEvent event = (OpenEvent) ctx.getTriggerEvent();
-        log.info("onPartnerBandOpen: {}", event.isOpen());
-        partnerSelectorDataModel.search(null);
+        eventBus.showProjectsList(ImmutableMap.of("formDocument", getFormDocument()));
     }
 
-//    @Command
-//    public void onPopupPartners() {
-//        String page = "~./suppliers.zul";
-//        Window editorWindow = (Window) Executions.createComponents(page, null, null);
-//        editorWindow.addEventListener("onClose", e -> {
-//            log.info("Suppliers popup result {}", e.getData());
-//            if (e.getData() != null) {
-//                partnerSelectorDataModel.clearSelection();
-//                //setSelectedSupplierId(((Supplier) e.getData()).getId());
-//                BindUtils.postNotifyChange(this, "selectedSupplierId");
-//            }
-//        });
-//        editorWindow.doModal();
-//        editorWindow.setFocus(true);
-//    }
-
     @Override
     protected boolean canSave(Project entity) {
         return (StringUtils.isNotBlank(entity.getName()) &&
@@ -182,11 +162,11 @@ public class ProjectEditorModel extends EntityEditorModel<Project> {
     public void onAddIncoming() {
         IncomingInvoice entity = invoiceDataModel.createNewIncomingInvoice();
         Editors.doEdit(Editors.INCOMING_INVOICE, entity, modifiedEntity -> {
-            formDocument.getIncomingInvoices().add(modifiedEntity);
+            getFormDocument().getIncomingInvoices().add(modifiedEntity);
             selectedIncomingInvoice = modifiedEntity;
             validate();
             BindUtils.postNotifyChange(this, "selectedIncomingInvoice");
-            BindUtils.postNotifyChange(this.formDocument, "incomingInvoices");
+            BindUtils.postNotifyChange(getFormDocument(), "incomingInvoices");
         });
     }
 
@@ -194,24 +174,24 @@ public class ProjectEditorModel extends EntityEditorModel<Project> {
     public void onEditIncoming() throws JsonProcessingException {
         IncomingInvoice entity = invoiceDataModel.clone(selectedIncomingInvoice);
         Editors.doEdit(Editors.INCOMING_INVOICE, entity, selectedIncomingInvoice, modifiedEntity -> {
-            Set<IncomingInvoice> incomingInvoices = formDocument.getIncomingInvoices();
+            Set<IncomingInvoice> incomingInvoices = getFormDocument().getIncomingInvoices();
             incomingInvoices.remove(selectedIncomingInvoice);
             incomingInvoices.add(modifiedEntity);
             selectedIncomingInvoice = modifiedEntity;
             validate();
             BindUtils.postNotifyChange(this, "selectedIncomingInvoice");
-            BindUtils.postNotifyChange(this.formDocument, "incomingInvoices");
+            BindUtils.postNotifyChange(getFormDocument(), "incomingInvoices");
         });
     }
 
     @Command
     public void onRemoveIncoming() {
         if (Objects.nonNull(selectedIncomingInvoice)) {
-            formDocument.getIncomingInvoices().remove(selectedIncomingInvoice);
+            getFormDocument().getIncomingInvoices().remove(selectedIncomingInvoice);
             selectedIncomingInvoice = null;
             validate();
             BindUtils.postNotifyChange(this, "selectedIncomingInvoice");
-            BindUtils.postNotifyChange(this.formDocument, "incomingInvoices");
+            BindUtils.postNotifyChange(getFormDocument(), "incomingInvoices");
         }
     }
 
@@ -219,11 +199,11 @@ public class ProjectEditorModel extends EntityEditorModel<Project> {
     public void onAddOutgoing() {
         OutgoingInvoice entity = invoiceDataModel.createNewOutgoingInvoice();
         Editors.doEdit(Editors.OUTGOING_INVOICE, entity, modifiedEntity -> {
-            formDocument.getOutgoingInvoices().add(modifiedEntity);
+            getFormDocument().getOutgoingInvoices().add(modifiedEntity);
             selectedOutgoingInvoice = modifiedEntity;
             validate();
             BindUtils.postNotifyChange(this, "selectedOutgoingInvoice");
-            BindUtils.postNotifyChange(this.formDocument, "outgoingInvoices");
+            BindUtils.postNotifyChange(getFormDocument(), "outgoingInvoices");
         });
     }
 
@@ -231,24 +211,24 @@ public class ProjectEditorModel extends EntityEditorModel<Project> {
     public void onEditOutgoing() throws JsonProcessingException {
         OutgoingInvoice entity = invoiceDataModel.clone(selectedOutgoingInvoice);
         Editors.doEdit(Editors.OUTGOING_INVOICE, entity, selectedOutgoingInvoice, modifiedEntity -> {
-            Set<OutgoingInvoice> outgoingInvoices = formDocument.getOutgoingInvoices();
+            Set<OutgoingInvoice> outgoingInvoices = getFormDocument().getOutgoingInvoices();
             outgoingInvoices.remove(selectedOutgoingInvoice);
             outgoingInvoices.add(modifiedEntity);
             selectedOutgoingInvoice = modifiedEntity;
             validate();
             BindUtils.postNotifyChange(this, "selectedOutgoingInvoice");
-            BindUtils.postNotifyChange(this.formDocument, "outgoingInvoices");
+            BindUtils.postNotifyChange(getFormDocument(), "outgoingInvoices");
         });
     }
 
     @Command
     public void onRemoveOutgoing() {
         if (Objects.nonNull(selectedOutgoingInvoice)) {
-            formDocument.getOutgoingInvoices().remove(selectedOutgoingInvoice);
+            getFormDocument().getOutgoingInvoices().remove(selectedOutgoingInvoice);
             selectedOutgoingInvoice = null;
             validate();
             BindUtils.postNotifyChange(this, "selectedOutgoingInvoice");
-            BindUtils.postNotifyChange(this.formDocument, "outgoingInvoice");
+            BindUtils.postNotifyChange(getFormDocument(), "outgoingInvoice");
         }
     }
 
@@ -256,11 +236,11 @@ public class ProjectEditorModel extends EntityEditorModel<Project> {
     public void onAddTreasury() {
         Treasury entity = treasuryDataModel.createNew();
         Editors.doEdit(Editors.TREASURY, entity, modifiedEntity -> {
-            formDocument.getTreasuries().add(modifiedEntity);
+            getFormDocument().getTreasuries().add(modifiedEntity);
             selectedTreasury = modifiedEntity;
             validate();
             BindUtils.postNotifyChange(this, "selectedTreasury");
-            BindUtils.postNotifyChange(this.formDocument, "treasuries");
+            BindUtils.postNotifyChange(getFormDocument(), "treasuries");
         });
     }
 
@@ -268,24 +248,24 @@ public class ProjectEditorModel extends EntityEditorModel<Project> {
     public void onEditTreasury() {
         Treasury entity = treasuryDataModel.clone(selectedTreasury);
         Editors.doEdit(Editors.TREASURY, entity, selectedTreasury, modifiedEntity -> {
-            Set<Treasury> treasuries = formDocument.getTreasuries();
+            Set<Treasury> treasuries = getFormDocument().getTreasuries();
             treasuries.remove(selectedTreasury);
             treasuries.add(modifiedEntity);
             selectedTreasury = modifiedEntity;
             validate();
             BindUtils.postNotifyChange(this, "selectedTreasury");
-            BindUtils.postNotifyChange(this.formDocument, "treasuries");
+            BindUtils.postNotifyChange(getFormDocument(), "treasuries");
         });
     }
 
     @Command
     public void onRemoveTreasury() {
         if (Objects.nonNull(selectedTreasury)) {
-            formDocument.getTreasuries().remove(selectedTreasury);
+            getFormDocument().getTreasuries().remove(selectedTreasury);
             selectedTreasury = null;
             validate();
             BindUtils.postNotifyChange(this, "selectedTreasury");
-            BindUtils.postNotifyChange(this.formDocument, "treasuries");
+            BindUtils.postNotifyChange(getFormDocument(), "treasuries");
         }
     }
 
@@ -312,7 +292,7 @@ public class ProjectEditorModel extends EntityEditorModel<Project> {
     @Command
     public void showServiceRecords(@BindingParam("associate") Associate associate) {
         log.info("showServiceRecords");
-        eventBus.showServiceRecordsList(ImmutableMap.of("filterAssociate", associate, "filterProject", formDocument));
+        eventBus.showServiceRecordsList(ImmutableMap.of("filterAssociate", associate, "filterProject", getFormDocument()));
     }
 
     @NotifyChange("formAssociates")
@@ -320,19 +300,19 @@ public class ProjectEditorModel extends EntityEditorModel<Project> {
         associatesDataModel.listAll();
         formAssociates = new HashMap<>();
         origAssociates = new HashMap<>();
-        if (Objects.isNull(formDocument.getId())) {
+        if (Objects.isNull(getFormDocument().getId())) {
             return;
         }
-        List<ProjectAssociate> projectAssociates = projectAssociatesDataModel.search(formDocument.getId());
+        List<ProjectAssociate> projectAssociates = projectAssociatesDataModel.search(getFormDocument().getId());
         for (int i = 0; i < associatesDataModel.getSize(); i++) {
             Associate associate = associatesDataModel.getElementAt(i);
             boolean exists = projectAssociates.stream()
                     .anyMatch(
-                            pa -> pa.getProjectId().equals(formDocument.getId()) &&
+                            pa -> pa.getProjectId().equals(getFormDocument().getId()) &&
                                     pa.getAssociateId().equals(associate.getId())
                     );
             if (exists) {
-                log.info("{} is on project {}", associate.getName(), formDocument.getName());
+                log.info("{} is on project {}", associate.getName(), getFormDocument().getName());
             }
             formAssociates.put(associate.getId(), exists);
             origAssociates.put(associate.getId(), exists);
index 3a266f5013bdd84b3139e02c7fae244eb235b202..c80c77c6a60a09ce80b8f2e26534a6fd17845a7d 100644 (file)
@@ -1,23 +1,18 @@
 package hu.user.lis.ui.editor;
 
+import hu.user.lis.db.Associate;
+import hu.user.lis.db.Project;
 import hu.user.lis.db.ServiceRecord;
-import hu.user.lis.ui.data.AssociateSelectorDataModel;
-import hu.user.lis.ui.data.ProjectSelectorDataModel;
+import hu.user.lis.ui.editor.common.EntityEditorModel;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.extern.log4j.Log4j2;
 import org.apache.commons.lang3.StringUtils;
 import org.zkoss.bind.BindContext;
 import org.zkoss.bind.BindUtils;
-import org.zkoss.bind.annotation.Command;
-import org.zkoss.bind.annotation.ContextParam;
-import org.zkoss.bind.annotation.ContextType;
-import org.zkoss.bind.annotation.Init;
-import org.zkoss.zk.ui.Executions;
-import org.zkoss.zk.ui.event.InputEvent;
-import org.zkoss.zk.ui.event.OpenEvent;
+import org.zkoss.bind.annotation.*;
+import org.zkoss.zk.ui.Component;
 import org.zkoss.zk.ui.event.UploadEvent;
-import org.zkoss.zk.ui.select.annotation.WireVariable;
 import org.zkoss.zul.Messagebox;
 
 import java.util.Objects;
@@ -27,45 +22,15 @@ import java.util.Objects;
 @Setter
 public class ServiceRecordEditorModel extends EntityEditorModel<ServiceRecord> {
 
-    @WireVariable
-    private AssociateSelectorDataModel associateSelectorDataModel;
-
-    @WireVariable
-    private ProjectSelectorDataModel projectSelectorDataModel;
-
     @Init
     public void init() {
-        log.info("Initialized");
-        origDocument = (ServiceRecord) Executions.getCurrent().getArg().get("origDocument");
-        formDocument = (ServiceRecord) Executions.getCurrent().getArg().get("formDocument");
-    }
-
-    @Command
-    public void onProjectBandChanging(@ContextParam(ContextType.BIND_CONTEXT) BindContext ctx) {
-        InputEvent event = (InputEvent) ctx.getTriggerEvent();
-        log.info("onProjectBandChanging: {}", event.getValue());
-        projectSelectorDataModel.search(event.getValue());
-    }
-
-    @Command
-    public void onProjectBandOpen(@ContextParam(ContextType.BIND_CONTEXT) BindContext ctx) {
-        OpenEvent event = (OpenEvent) ctx.getTriggerEvent();
-        log.info("onProjectBandOpen: {}", event.isOpen());
-        projectSelectorDataModel.search(null);
-    }
-
-    @Command
-    public void onAssociateBandChanging(@ContextParam(ContextType.BIND_CONTEXT) BindContext ctx) {
-        InputEvent event = (InputEvent) ctx.getTriggerEvent();
-        log.info("onAssociateBandChanging: {}", event.getValue());
-        associateSelectorDataModel.search(event.getValue());
+        super.init();
     }
 
-    @Command
-    public void onAssociateBandOpen(@ContextParam(ContextType.BIND_CONTEXT) BindContext ctx) {
-        OpenEvent event = (OpenEvent) ctx.getTriggerEvent();
-        log.info("onAssociateBandOpen: {}", event.isOpen());
-        associateSelectorDataModel.search(null);
+    @AfterCompose
+    public void onAfterCompose(@ContextParam(ContextType.VIEW) Component view) {
+        getEntitySelectorRouter().setFormDocument(Associate.class, getFormDocument(), "associate");
+        getEntitySelectorRouter().setFormDocument(Project.class, getFormDocument(), "project");
     }
 
     @Override
@@ -85,15 +50,15 @@ public class ServiceRecordEditorModel extends EntityEditorModel<ServiceRecord> {
             Messagebox.show("Csak PDF állomány feltöltése támogatott.", "Error", Messagebox.OK, Messagebox.ERROR);
             return;
         }
-        formDocument.setFile(evt.getMedia().getByteData());
-        BindUtils.postNotifyChange(this.formDocument, "file");
-        validate(formDocument);
+        getFormDocument().setFile(evt.getMedia().getByteData());
+        BindUtils.postNotifyChange(getFormDocument(), "file");
+        validate();
     }
 
     @Command
     public void onRemoveFile() {
-        formDocument.setFile(null);
-        BindUtils.postNotifyChange(this.formDocument, "file");
-        validate(formDocument);
+        getFormDocument().setFile(null);
+        BindUtils.postNotifyChange(getFormDocument(), "file");
+        validate();
     }
 }
index 456aa033ee573774aa13b9ebc9c61b60c360e7e1..3cc56672eb7a7e265ce8e5aa1083f83ae2ed608b 100644 (file)
@@ -1,6 +1,7 @@
 package hu.user.lis.ui.editor;
 
 import hu.user.lis.db.Treasury;
+import hu.user.lis.ui.editor.common.EntityEditorModel;
 import lombok.extern.log4j.Log4j2;
 import org.zkoss.bind.BindContext;
 import org.zkoss.bind.BindUtils;
@@ -36,15 +37,15 @@ public class TreasuryEditorModel extends EntityEditorModel<Treasury> {
             Messagebox.show("Csak PDF állomány feltöltése támogatott.", "Error", Messagebox.OK, Messagebox.ERROR);
             return;
         }
-        formDocument.setFile(evt.getMedia().getByteData());
-        BindUtils.postNotifyChange(this.formDocument, "file");
-        validate(formDocument);
+        getFormDocument().setFile(evt.getMedia().getByteData());
+        BindUtils.postNotifyChange(getFormDocument(), "file");
+        validate();
     }
 
     @Command
     public void onRemoveFile() {
-        formDocument.setFile(null);
-        BindUtils.postNotifyChange(this.formDocument, "file");
-        validate(formDocument);
+        getFormDocument().setFile(null);
+        BindUtils.postNotifyChange(getFormDocument(), "file");
+        validate();
     }
 }
similarity index 63%
rename from lis-ui/src/main/java/hu/user/lis/ui/editor/EditCompleted.java
rename to lis-ui/src/main/java/hu/user/lis/ui/editor/common/EditCompleted.java
index 2f4cd3509098a6fce0275d7218eb4a928c9260ae..dff2d70cc8a8292de9891a5fe4d7fca91d386812 100644 (file)
@@ -1,4 +1,4 @@
-package hu.user.lis.ui.editor;
+package hu.user.lis.ui.editor.common;
 
 public interface EditCompleted<E> {
 
similarity index 64%
rename from lis-ui/src/main/java/hu/user/lis/ui/editor/Editors.java
rename to lis-ui/src/main/java/hu/user/lis/ui/editor/common/Editors.java
index 87a28a901b167da9afe46eb450ea8cc5c38dd030..d849a7ed715320b5439c04c9e7ad3a616941e712 100644 (file)
@@ -1,4 +1,4 @@
-package hu.user.lis.ui.editor;
+package hu.user.lis.ui.editor.common;
 
 import com.google.common.collect.ImmutableMap;
 import org.zkoss.zk.ui.Executions;
@@ -8,12 +8,14 @@ import java.util.Map;
 import java.util.Objects;
 
 public class Editors {
-    public static String INCOMING_INVOICE = "~./incoming-invoice-editor.zul";
-    public static String OUTGOING_INVOICE = "~./outgoing-invoice-editor.zul";
+    public static final String SERVICE_RECORD = "~./editor/service-record-editor.zul";
+    public static final String INCOMING_INVOICE = "~./editor/incoming-invoice-editor.zul";
+    public static final String OUTGOING_INVOICE = "~./editor/outgoing-invoice-editor.zul";
+    public static final String TREASURY = "~./editor/treasury-editor.zul";
+    public static final String ASSOCIATE = "~./editor/associate-editor.zul";
+    public static final String PARTNER = "~./editor/partner-editor.zul";
 
-    public static String TREASURY = "~./treasury-editor.zul";
-    public static String ASSOCIATE = "~./associate-editor.zul";
-    public static String PARTNER = "~./partner-editor.zul";
+    public static final String PROJECT = "~./editor/project-editor.zul";
 
     public static <E> void doEdit(String page, E entity, EditCompleted<E> editCompleted) {
         doEdit(page, entity, null, editCompleted);
similarity index 93%
rename from lis-ui/src/main/java/hu/user/lis/ui/editor/EntityEditorModel.java
rename to lis-ui/src/main/java/hu/user/lis/ui/editor/common/EntityEditorModel.java
index ce7ed176e3aef6a76fe9c6b221fbcc2985e19708..7118e85789dde15c64c4023e15dae004cd591df3 100644 (file)
@@ -1,15 +1,17 @@
-package hu.user.lis.ui.editor;
+package hu.user.lis.ui.editor.common;
 
 import hu.user.lis.services.data.EntityDataService;
 import hu.user.lis.ui.editor.selector.EntitySelectorRouter;
 import hu.user.lis.ui.event.EventBus;
 import lombok.Getter;
+import lombok.Setter;
 import lombok.extern.log4j.Log4j2;
 import org.zkoss.bind.BindUtils;
 import org.zkoss.bind.PropertyChangeEvent;
 import org.zkoss.bind.ValidationContext;
 import org.zkoss.bind.annotation.BindingParam;
 import org.zkoss.bind.annotation.Command;
+import org.zkoss.bind.annotation.Destroy;
 import org.zkoss.bind.validator.AbstractValidator;
 import org.zkoss.zk.ui.Component;
 import org.zkoss.zk.ui.Executions;
@@ -31,13 +33,21 @@ public abstract class EntityEditorModel<T extends Serializable> extends Abstract
 
     @WireVariable
     protected EventBus eventBus;
+
     @Getter
+    @Setter
     T formDocument;
+
+    @Getter
+    @Setter
     T origDocument;
+
     @Getter
     boolean saveEnabled;
+
     @WireVariable
     EntityDataService<T> entityDataService;
+
     @Getter
     @WireVariable
     EntitySelectorRouter entitySelectorRouter;
@@ -106,4 +116,8 @@ public abstract class EntityEditorModel<T extends Serializable> extends Abstract
         }
     }
 
+    @Destroy
+    public void onDestroy() {
+        eventBus.unregister(this);
+    }
 }
diff --git a/lis-ui/src/main/java/hu/user/lis/ui/editor/selector/AssociateSelectorModel.java b/lis-ui/src/main/java/hu/user/lis/ui/editor/selector/AssociateSelectorModel.java
new file mode 100644 (file)
index 0000000..9e7c809
--- /dev/null
@@ -0,0 +1,52 @@
+package hu.user.lis.ui.editor.selector;
+
+import hu.user.lis.db.Associate;
+import hu.user.lis.ui.converter.AssociateToNameConverter;
+import hu.user.lis.ui.data.AssociateSelectorDataModel;
+import hu.user.lis.ui.data.CachedSpringDataModel;
+import lombok.Getter;
+import lombok.Setter;
+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.bind.Converter;
+import org.zkoss.zul.impl.XulElement;
+
+@Log4j2
+@Getter
+@Setter
+@Component
+@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
+public class AssociateSelectorModel extends EntitySelectorModel<Associate> {
+    @Autowired
+    AssociateToNameConverter associateToNameConverter;
+    @Autowired
+    AssociateSelectorDataModel associateSelectorDataModel;
+
+    @Override
+    public String selectorIdentifier() {
+        return Associate.class.getSimpleName();
+    }
+
+    @Override
+    public Converter<String, Associate, XulElement> getDisplayConverter() {
+        return associateToNameConverter;
+    }
+
+    @Override
+    public CachedSpringDataModel<Associate> getDataModel() {
+        return associateSelectorDataModel;
+    }
+
+    @Override
+    protected void search(String filter) {
+        associateSelectorDataModel.search(filter);
+    }
+
+    @Override
+    protected void reset() {
+        associateSelectorDataModel.search(null);
+    }
+}
index cfba1edd429686695b1607026e26c6d15d83d56f..f9b32acc02d08d7e13ba402381643740fee12a1b 100644 (file)
@@ -1,7 +1,9 @@
 package hu.user.lis.ui.editor.selector;
 
+import hu.user.lis.services.data.EntityDataServiceBase;
 import hu.user.lis.ui.data.CachedSpringDataModel;
 import lombok.extern.log4j.Log4j2;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.zkoss.bind.BindContext;
 import org.zkoss.bind.BindUtils;
 import org.zkoss.bind.Converter;
@@ -10,20 +12,20 @@ import org.zkoss.bind.annotation.ContextParam;
 import org.zkoss.bind.annotation.ContextType;
 import org.zkoss.zk.ui.event.InputEvent;
 import org.zkoss.zk.ui.event.OpenEvent;
-import org.zkoss.zul.Bandbox;
-
-import java.lang.reflect.Field;
+import org.zkoss.zul.impl.XulElement;
 
 @Log4j2
 public abstract class EntitySelectorModel<T> {
 
+    @Autowired
+    EntityDataServiceBase entityDataServiceBase;
     private T selectedEntity;
     private Object formDocument;
     private String member;
 
     public abstract String selectorIdentifier();
 
-    public abstract Converter<String, T, Bandbox> getDisplayConverter();
+    public abstract Converter<String, T, XulElement> getDisplayConverter();
 
     public abstract CachedSpringDataModel<T> getDataModel();
 
@@ -51,26 +53,14 @@ public abstract class EntitySelectorModel<T> {
 
     public void setSelectedEntity(T selectedEntity) {
         this.selectedEntity = selectedEntity;
-        try {
-            Field field = formDocument.getClass().getDeclaredField(member);
-            field.setAccessible(true);
-            field.set(formDocument, selectedEntity);
-            BindUtils.postNotifyChange(formDocument, member);
-        } catch (Exception e) {
-            log.error(e);
-        }
+        entityDataServiceBase.setFieldValue(formDocument, member, selectedEntity);
+        BindUtils.postNotifyChange(formDocument, member);
     }
 
     public void setFormDocument(Object formDocument, String member) {
         this.formDocument = formDocument;
         this.member = member;
-        try {
-            Field field = formDocument.getClass().getDeclaredField(member);
-            field.setAccessible(true);
-            selectedEntity = (T) field.get(formDocument);
-            BindUtils.postNotifyChange(this, "selectedEntity");
-        } catch (Exception e) {
-            log.error(e);
-        }
+        selectedEntity = (T) entityDataServiceBase.getFieldValue(formDocument, member);
+        BindUtils.postNotifyChange(this, "selectedEntity");
     }
 }
index c07efbfd141a2ffb272e0fb433806dcf49fc6800..474072064ae699b51cfd6bbf2ea28de28b106da9 100644 (file)
@@ -12,7 +12,7 @@ import org.springframework.beans.factory.config.ConfigurableBeanFactory;
 import org.springframework.context.annotation.Scope;
 import org.springframework.stereotype.Component;
 import org.zkoss.bind.Converter;
-import org.zkoss.zul.Bandbox;
+import org.zkoss.zul.impl.XulElement;
 
 @Log4j2
 @Getter
@@ -31,7 +31,7 @@ public class PartnerSelectorModel extends EntitySelectorModel<Partner> {
     }
 
     @Override
-    public Converter<String, Partner, Bandbox> getDisplayConverter() {
+    public Converter<String, Partner, XulElement> getDisplayConverter() {
         return partnerToNameConverter;
     }
 
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
new file mode 100644 (file)
index 0000000..080a709
--- /dev/null
@@ -0,0 +1,52 @@
+package hu.user.lis.ui.editor.selector;
+
+import hu.user.lis.db.Project;
+import hu.user.lis.ui.converter.ProjectToInfoConverter;
+import hu.user.lis.ui.data.CachedSpringDataModel;
+import hu.user.lis.ui.data.ProjectSelectorDataModel;
+import lombok.Getter;
+import lombok.Setter;
+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.bind.Converter;
+import org.zkoss.zul.impl.XulElement;
+
+@Log4j2
+@Getter
+@Setter
+@Component
+@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
+public class ProjectSelectorModel extends EntitySelectorModel<Project> {
+    @Autowired
+    ProjectToInfoConverter projectToInfoConverter;
+    @Autowired
+    ProjectSelectorDataModel projectSelectorDataModel;
+
+    @Override
+    public String selectorIdentifier() {
+        return Project.class.getSimpleName();
+    }
+
+    @Override
+    public Converter<String, Project, XulElement> getDisplayConverter() {
+        return projectToInfoConverter;
+    }
+
+    @Override
+    public CachedSpringDataModel<Project> getDataModel() {
+        return projectSelectorDataModel;
+    }
+
+    @Override
+    protected void search(String filter) {
+        projectSelectorDataModel.search(filter);
+    }
+
+    @Override
+    protected void reset() {
+        projectSelectorDataModel.search(null);
+    }
+}
index 44c91a8780c894282f57dcbc189d8faf41768c8f..1a89bd78e5c9029af00e92b680fd11a1eb2dae45 100644 (file)
@@ -1,14 +1,16 @@
 package hu.user.lis.ui.editor.widget;
 
+import hu.user.lis.ui.Constants;
 import lombok.extern.log4j.Log4j2;
 import org.zkoss.zk.ui.Component;
+import org.zkoss.zk.ui.IdSpace;
 import org.zkoss.zul.Include;
 
 @Log4j2
-public class EntitySelector extends Include {
+public class EntitySelector extends Include implements IdSpace {
 
     public EntitySelector() {
-        setSrc("~./entity-selector.zul");
+        setSrc(Constants.WIDGET_ENTITY_SELECTOR);
     }
 
     @Override
@@ -16,7 +18,6 @@ public class EntitySelector extends Include {
         super.setDynamicProperty(name, value);
         setAttribute(name, value, Component.SPACE_SCOPE);
         log.info("Setting {} = {}", name, value);
-
     }
 
 }
index 92542ade7febc018fcea52d4a1bb06a8db4ebfcf..740bc245c368d262721340791b211754406c7cb9 100644 (file)
@@ -12,15 +12,6 @@ import org.zkoss.zk.ui.event.EventQueues;
 @Log4j2
 public class EventBus {
 
-    public EventBus() {
-//        EventQueue<Event> queue = EventQueues.lookup("$ZKBIND_DEFQUE$", EventQueues.SESSION, true);
-//        queue.subscribe(event -> {
-//            log.info("EVT: {}", event.getName());
-//        });
-
-
-    }
-
     private EventQueue<Event> getQueue() {
         return EventQueues.lookup(Constants.PROJECT_EDITOR_QUEUE, EventQueues.SESSION, true);
     }
@@ -40,8 +31,9 @@ public class EventBus {
     public void unregister(EventListener listener) {
         try {
             getQueue().unsubscribe(listener);
+            getBindingQueue().unsubscribe(listener);
         } catch (Exception e) {
-            log.warn("Not necessary to unregister");
+//            log.warn("Not necessary to unregister");
         }
     }
 
index 21f6ba088d1bcab10af26680624a7ff03bdfbd1e..834be1bb71fc3a1643476cbfc198df321100f6df 100644 (file)
@@ -4,13 +4,16 @@ import hu.user.lis.db.Associate;
 import hu.user.lis.ui.Constants;
 import hu.user.lis.ui.data.AssociatesDataModel;
 import hu.user.lis.ui.data.CachedSpringDataModel;
-import hu.user.lis.ui.editor.Editors;
+import hu.user.lis.ui.editor.common.Editors;
+import hu.user.lis.ui.view.common.FilterActiveViewModel;
 import lombok.Getter;
 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.zk.ui.util.Clients;
+
+import static hu.user.lis.ui.data.CachedDataModel.ASCENDING;
+import static hu.user.lis.ui.data.CachedDataModel.NATURAL;
 
 @Log4j2
 public class AssociatesViewModel extends FilterActiveViewModel<Associate> {
@@ -19,7 +22,7 @@ public class AssociatesViewModel extends FilterActiveViewModel<Associate> {
     AssociatesDataModel associatesDataModel;
 
     @Override
-    CachedSpringDataModel<Associate> getDataModel() {
+    protected CachedSpringDataModel<Associate> getDataModel() {
         return associatesDataModel;
     }
 
@@ -31,16 +34,19 @@ public class AssociatesViewModel extends FilterActiveViewModel<Associate> {
     @Init
     public void init() {
         super.init();
-        Clients.evalJavaScript("pushNav('/associates')");
+        addColumn("name", ASCENDING);
+        addColumn("login", NATURAL);
+        addColumn("active", NATURAL);
     }
 
+
     protected void refresh() {
         associatesDataModel.clearSelection();
-        selectedEntity = null;
-        if (filterShowBoth) {
+        setSelectedEntity(null);
+        if (isFilterShowBoth()) {
             associatesDataModel.search(true, true);
         } else {
-            associatesDataModel.search(filterShowActive, filterShowInActive);
+            associatesDataModel.search(isFilterShowActive(), isFilterShowInActive());
         }
     }
 
@@ -56,8 +62,8 @@ public class AssociatesViewModel extends FilterActiveViewModel<Associate> {
 
     @Command
     public void onEdit() {
-        Associate entity = associatesDataModel.clone(selectedEntity);
-        Editors.doEdit(Editors.ASSOCIATE, entity, selectedEntity, modifiedEntity -> {
+        Associate entity = associatesDataModel.clone(getSelectedEntity());
+        Editors.doEdit(Editors.ASSOCIATE, entity, getSelectedEntity(), modifiedEntity -> {
             associatesDataModel.save(modifiedEntity);
             refresh();
         });
index 75b4daeb9fb341fba4d30cf352576433f56b4cca..6309f80f14b0e0eb24cfbed8c69e3f6d3fa94f61 100644 (file)
@@ -3,6 +3,7 @@ package hu.user.lis.ui.view;
 import com.google.common.collect.ImmutableMap;
 import hu.user.lis.ui.Constants;
 import hu.user.lis.ui.auth.CurrentProfile;
+import hu.user.lis.ui.editor.common.Editors;
 import hu.user.lis.ui.event.EventBus;
 import hu.user.lis.ui.session.SessionSettings;
 import lombok.Getter;
@@ -29,7 +30,6 @@ import java.util.Map;
 public class IndexViewModel implements EventListener {
     private static final String PARTNERS_LIST = "~./partners.zul";
     private static final String PROJECTS_LIST = "~./projects.zul";
-    private static final String PROJECT_EDITOR = "~./project-editor.zul";
     private static final String ASSOCIATES_LIST = "~./associates.zul";
     private static final String PROJECT_ASSOCIATES_LIST = "~./project-associates.zul";
     private static final String SERVICE_RECORDS_LIST = "~./service-records.zul";
@@ -37,7 +37,7 @@ public class IndexViewModel implements EventListener {
     public static Map<String, String> NAVIGATION = ImmutableMap.of(
             Constants.NAV_PARTNERS, PARTNERS_LIST,
             Constants.NAV_PROJECTS, PROJECTS_LIST,
-            Constants.NAV_PROJECT, PROJECT_EDITOR,
+            Constants.NAV_PROJECT, Editors.PROJECT,
             Constants.NAV_ASSOCIATES, ASSOCIATES_LIST,
             Constants.NAV_PROJECT_ASSOCIATES, PROJECT_ASSOCIATES_LIST,
             Constants.NAV_SERVICE_RECORDS, SERVICE_RECORDS_LIST,
@@ -62,21 +62,14 @@ public class IndexViewModel implements EventListener {
         eventBus.register(this);
         log.info("Current session is {}", sessionSettings.getSessionId());
         String path = sessionSettings.getCurrentPath();
-
-        //project editor
         route(path);
-
-//        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
-//        if (authentication != null && !(authentication instanceof AnonymousAuthenticationToken)) {
-//        }
         log.info("Init {}", path);
     }
 
     private void route(String path) {
         if (path.startsWith("/project/") && path.split("/").length > 2) {
             String id = path.split("/")[2];
-            selectPage(PROJECT_EDITOR);
-//            eventBus.setProjectEditorData(Collections.singletonMap("id", id));
+            selectPage(Editors.PROJECT);
             eventBus.setProjectEditorData(Long.parseLong(id));
         } else {
             if (NAVIGATION.containsKey(path)) {
@@ -101,7 +94,7 @@ public class IndexViewModel implements EventListener {
             eventBus.setServiceRecordsListData(event.getData());
         }
         if (Constants.SHOW_PROJECT_EDITOR.equals(event.getName())) {
-            selectPage(PROJECT_EDITOR);
+            selectPage(Editors.PROJECT);
             eventBus.setProjectEditorData((Long) event.getData());
         }
         if (Constants.SHOW_PROJECTS_LIST.equals(event.getName())) {
index eaf1ee342582d8f0e761d7b956977b03c67161de..a7030bc43d9f38321265395d182434bed0e17cb1 100644 (file)
@@ -4,14 +4,17 @@ import hu.user.lis.db.Partner;
 import hu.user.lis.ui.Constants;
 import hu.user.lis.ui.data.CachedSpringDataModel;
 import hu.user.lis.ui.data.PartnersDataModel;
-import hu.user.lis.ui.editor.Editors;
+import hu.user.lis.ui.editor.common.Editors;
+import hu.user.lis.ui.view.common.FilterActiveViewModel;
 import lombok.Getter;
 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 static hu.user.lis.ui.data.CachedDataModel.ASCENDING;
+import static hu.user.lis.ui.data.CachedDataModel.NATURAL;
+
 @Log4j2
 public class PartnersViewModel extends FilterActiveViewModel<Partner> {
     @WireVariable
@@ -19,7 +22,7 @@ public class PartnersViewModel extends FilterActiveViewModel<Partner> {
     PartnersDataModel partnersDataModel;
 
     @Override
-    CachedSpringDataModel<Partner> getDataModel() {
+    protected CachedSpringDataModel<Partner> getDataModel() {
         return partnersDataModel;
     }
 
@@ -31,22 +34,21 @@ public class PartnersViewModel extends FilterActiveViewModel<Partner> {
     @Init
     public void init() {
         super.init();
+        addColumn("name", ASCENDING);
+        addColumn("vatNr", NATURAL);
+        addColumn("address", NATURAL);
+        addColumn("active", NATURAL);
     }
 
     protected void refresh() {
         partnersDataModel.clearSelection();
-        if (filterShowBoth) {
+        if (isFilterShowBoth()) {
             partnersDataModel.search(true, true);
         } else {
-            partnersDataModel.search(filterShowActive, filterShowInActive);
+            partnersDataModel.search(isFilterShowActive(), isFilterShowInActive());
         }
     }
 
-    @Command
-    @NotifyChange("selectedPartner")
-    public void search() {
-    }
-
     @Command
     public void onAdd() {
         Partner entity = partnersDataModel.createNew();
@@ -59,8 +61,8 @@ public class PartnersViewModel extends FilterActiveViewModel<Partner> {
 
     @Command
     public void onEdit() {
-        Partner entity = partnersDataModel.clone(selectedEntity);
-        Editors.doEdit(Editors.PARTNER, entity, selectedEntity, modifiedEntity -> {
+        Partner entity = partnersDataModel.clone(getSelectedEntity());
+        Editors.doEdit(Editors.PARTNER, entity, getSelectedEntity(), modifiedEntity -> {
             partnersDataModel.save(modifiedEntity);
             refresh();
         });
index 10ec1ea43b9cde1d8b55275419cc79410f0bfd12..e5ea839d13fdde6e38561c3e2d02282c45c7a2d7 100644 (file)
@@ -5,12 +5,12 @@ import hu.user.lis.ui.Constants;
 import hu.user.lis.ui.data.CachedSpringDataModel;
 import hu.user.lis.ui.data.ProjectsDataModel;
 import hu.user.lis.ui.event.EventBus;
+import hu.user.lis.ui.view.common.FilterActiveViewModel;
 import lombok.Getter;
 import lombok.extern.log4j.Log4j2;
 import org.zkoss.bind.annotation.Command;
 import org.zkoss.bind.annotation.Destroy;
 import org.zkoss.bind.annotation.Init;
-import org.zkoss.bind.annotation.NotifyChange;
 import org.zkoss.zk.ui.event.Event;
 import org.zkoss.zk.ui.event.EventListener;
 import org.zkoss.zk.ui.select.annotation.WireVariable;
@@ -18,6 +18,9 @@ import org.zkoss.zk.ui.select.annotation.WireVariable;
 import java.util.Map;
 import java.util.Objects;
 
+import static hu.user.lis.ui.data.CachedDataModel.ASCENDING;
+import static hu.user.lis.ui.data.CachedDataModel.NATURAL;
+
 
 @Log4j2
 public class ProjectsViewModel extends FilterActiveViewModel<Project> implements EventListener {
@@ -28,7 +31,7 @@ public class ProjectsViewModel extends FilterActiveViewModel<Project> implements
     EventBus eventBus;
 
     @Override
-    CachedSpringDataModel<Project> getDataModel() {
+    protected CachedSpringDataModel<Project> getDataModel() {
         return projectsDataModel;
     }
 
@@ -41,23 +44,24 @@ public class ProjectsViewModel extends FilterActiveViewModel<Project> implements
     public void init() {
         super.init();
         eventBus.register(this);
+        addColumn("humanId", ASCENDING);
+        addColumn("partner.name", NATURAL);
+        addColumn("projectStatus.name", NATURAL);
+        addColumn("name", NATURAL);
+        addColumn("contactName", NATURAL);
+        addColumn("active", NATURAL);
     }
 
     protected void refresh() {
         projectsDataModel.clearSelection();
-        selectedEntity = null;
-        if (filterShowBoth) {
+        setSelectedEntity(null);
+        if (isFilterShowBoth()) {
             projectsDataModel.search(true, true);
         } else {
-            projectsDataModel.search(filterShowActive, filterShowInActive);
+            projectsDataModel.search(isFilterShowActive(), isFilterShowInActive());
         }
     }
 
-    @Command
-    @NotifyChange("selectedProject")
-    public void search() {
-    }
-
     @Command
     public void onAdd() {
         eventBus.showProjectEditor(null);
@@ -65,29 +69,25 @@ public class ProjectsViewModel extends FilterActiveViewModel<Project> implements
 
     @Command
     public void onEdit() {
-        if (Objects.nonNull(selectedEntity)) {
-            Project editEntity = entityDataService.clone(selectedEntity);
+        if (Objects.nonNull(getSelectedEntity())) {
+            Project editEntity = getEntityDataService().clone(getSelectedEntity());
             eventBus.showProjectEditor(editEntity.getId());
         }
     }
 
-
     @Override
     public void onEvent(Event event) {
         if (Constants.SET_PROJECTS_LIST_DATA.equals(event.getName())) {
-            log.info("Apply Project edit result");
-            projectsDataModel.clearSelection();
             Map<String, Project> args = (Map<String, Project>) event.getData();
             Project formDocument = args.get("formDocument");
+            projectsDataModel.clearSelection();
             refresh();
             projectsDataModel.addToSelection(formDocument);
-            selectedEntity = formDocument;
         }
     }
 
     @Destroy
     public void onDestroy() {
-        log.info("Destroy {}");
         eventBus.unregister(this);
     }
 
index 4c1a0d4c89f5f8c0a8d4d86dcace589c0869659f..03b69b6e80d4458a480745460a86a4a3fe1434eb 100644 (file)
@@ -1,31 +1,34 @@
 package hu.user.lis.ui.view;
 
-import com.google.common.collect.ImmutableMap;
 import hu.user.lis.db.Associate;
 import hu.user.lis.db.Project;
 import hu.user.lis.db.ServiceRecord;
 import hu.user.lis.ui.Constants;
-import hu.user.lis.ui.data.AssociateSelectorDataModel;
 import hu.user.lis.ui.data.CachedSpringDataModel;
-import hu.user.lis.ui.data.ProjectSelectorDataModel;
 import hu.user.lis.ui.data.ServiceRecordsDataModel;
+import hu.user.lis.ui.editor.common.Editors;
+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.BindContext;
-import org.zkoss.bind.BindUtils;
+import org.zkoss.bind.PropertyChangeEvent;
 import org.zkoss.bind.annotation.*;
-import org.zkoss.zk.ui.Executions;
-import org.zkoss.zk.ui.event.*;
+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.event.SortEvent;
 import org.zkoss.zk.ui.select.annotation.VariableResolver;
 import org.zkoss.zk.ui.select.annotation.WireVariable;
 import org.zkoss.zkplus.spring.DelegatingVariableResolver;
-import org.zkoss.zul.Window;
 
-import java.util.Collections;
 import java.util.Map;
 import java.util.Objects;
 
+import static hu.user.lis.ui.data.CachedDataModel.ASCENDING;
+import static hu.user.lis.ui.data.CachedDataModel.NATURAL;
+
 
 @Log4j2
 @VariableResolver(DelegatingVariableResolver.class)
@@ -34,13 +37,9 @@ public class ServiceRecordsViewModel extends EntityViewModel<ServiceRecord> impl
     @Getter
     ServiceRecordsDataModel serviceRecordsDataModel;
 
-    @WireVariable
     @Getter
-    private AssociateSelectorDataModel associateSelectorDataModel;
-
     @WireVariable
-    @Getter
-    private ProjectSelectorDataModel projectSelectorDataModel;
+    EntitySelectorRouter entitySelectorRouter;
 
     @Getter
     private Project filterProject;
@@ -52,7 +51,7 @@ public class ServiceRecordsViewModel extends EntityViewModel<ServiceRecord> impl
     private EventBus eventBus;
 
     @Override
-    CachedSpringDataModel<ServiceRecord> getDataModel() {
+    protected CachedSpringDataModel<ServiceRecord> getDataModel() {
         return serviceRecordsDataModel;
     }
 
@@ -65,99 +64,49 @@ public class ServiceRecordsViewModel extends EntityViewModel<ServiceRecord> impl
     public void init() {
         super.init();
         eventBus.register(this);
+        eventBus.registerForBinding(this);
+        addColumn("project.humanId", ASCENDING);
+        addColumn("project.name", NATURAL);
+        addColumn("project.partner.name", NATURAL);
+        addColumn("associate.name", NATURAL);
+        addColumn("workDay", NATURAL);
+        addColumn("description", NATURAL);
+        addColumn("workHours", NATURAL);
     }
 
-    @Command
-    public void onProjectFilterBandChanging(@ContextParam(ContextType.BIND_CONTEXT) BindContext ctx) {
-        InputEvent event = (InputEvent) ctx.getTriggerEvent();
-        log.info("onProjectFilterBandChanging: {}", event.getValue());
-        projectSelectorDataModel.search(event.getValue());
-    }
-
-    @Command
-    public void onProjectFilterBandOpen(@ContextParam(ContextType.BIND_CONTEXT) BindContext ctx) {
-        OpenEvent event = (OpenEvent) ctx.getTriggerEvent();
-        log.info("onProjectFilterBandOpen: {}", event.isOpen());
-        projectSelectorDataModel.search(null);
-    }
-
-    @Command
-    public void onAssociateFilterBandChanging(@ContextParam(ContextType.BIND_CONTEXT) BindContext ctx) {
-        InputEvent event = (InputEvent) ctx.getTriggerEvent();
-        log.info("onAssociateFilterBandChanging: {}", event.getValue());
-        associateSelectorDataModel.search(event.getValue());
-    }
-
-    @Command
-    public void onAssociateFilterBandOpen(@ContextParam(ContextType.BIND_CONTEXT) BindContext ctx) {
-        OpenEvent event = (OpenEvent) ctx.getTriggerEvent();
-        log.info("onAssociateFilterBandOpen: {}", event.isOpen());
-        associateSelectorDataModel.search(null);
+    @AfterCompose
+    public void onAfterCompose(@ContextParam(ContextType.VIEW) Component view) {
+        entitySelectorRouter.setFormDocument(Associate.class, this, "filterAssociate");
+        entitySelectorRouter.setFormDocument(Project.class, this, "filterProject");
     }
 
     private void refresh() {
         serviceRecordsDataModel.clearSelection();
-        selectedEntity = null;
-        serviceRecordsDataModel.listAll();
-    }
-
-    @Command
-    @NotifyChange("selectedProject")
-    public void search() {
+        setSelectedEntity(null);
+        if (Objects.nonNull(filterProject) || Objects.nonNull(filterAssociate)) {
+            serviceRecordsDataModel.search(filterProject, filterAssociate);
+        } else {
+            serviceRecordsDataModel.listAll();
+        }
     }
 
     @Command
     public void onAdd() {
-        String page = "~./service-record-editor.zul";
-        ServiceRecord newEntity = serviceRecordsDataModel.createNew();
-        Window editorWindow = (Window) Executions.createComponents(page, null,
-                Collections.singletonMap("formDocument", newEntity));
-        editorWindow.addEventListener("onClose", e -> {
-            if (e.getData() != null) {
-                log.info("Partner popup result {}", e.getData());
-                serviceRecordsDataModel.addNew(newEntity);
-                serviceRecordsDataModel.clearSelection();
-                refresh();
-                serviceRecordsDataModel.addToSelection(newEntity);
-                selectedEntity = newEntity;
-            }
+        ServiceRecord entity = serviceRecordsDataModel.createNew();
+        Editors.doEdit(Editors.SERVICE_RECORD, entity, modifiedEntity -> {
+            serviceRecordsDataModel.save(modifiedEntity);
+            refresh();
+            serviceRecordsDataModel.addToSelection(modifiedEntity);
         });
-        editorWindow.doModal();
-        editorWindow.setFocus(true);
     }
 
     @Command
     public void onEdit() {
-        if (Objects.isNull(selectedEntity)) {
-            return;
-        }
-        String page = "~./service-record-editor.zul";
-        ServiceRecord editEntity = serviceRecordsDataModel.copy(selectedEntity);
-        Map<String, Object> arg = ImmutableMap.of("origDocument", selectedEntity, "formDocument", editEntity);
-        Window editorWindow = (Window) Executions.createComponents(page, null, arg);
-        editorWindow.addEventListener("onClose", e -> {
-            if (e.getData() != null) {
-                log.info("Partner popup result {}", e.getData());
-                ServiceRecord modifiedEntity = (ServiceRecord) e.getData();
-                serviceRecordsDataModel.clearSelection();
-                serviceRecordsDataModel.save(modifiedEntity);
-                refresh();
-                serviceRecordsDataModel.addToSelection(modifiedEntity);
-                selectedEntity = modifiedEntity;
-            }
+        ServiceRecord entity = serviceRecordsDataModel.clone(getSelectedEntity());
+        Editors.doEdit(Editors.SERVICE_RECORD, entity, getSelectedEntity(), modifiedEntity -> {
+            serviceRecordsDataModel.save(modifiedEntity);
+            refresh();
         });
-        editorWindow.doModal();
-        editorWindow.setFocus(true);
-    }
-
-    public void setFilterProject(Project filterProject) {
-        this.filterProject = filterProject;
-        serviceRecordsDataModel.search(filterProject, filterAssociate);
-    }
-
-    public void setFilterAssociate(Associate filterAssociate) {
-        this.filterAssociate = filterAssociate;
-        serviceRecordsDataModel.search(filterProject, filterAssociate);
     }
 
     @Command
@@ -165,6 +114,8 @@ public class ServiceRecordsViewModel extends EntityViewModel<ServiceRecord> impl
     public void onClearFilters() {
         filterAssociate = null;
         filterProject = null;
+        entitySelectorRouter.setFormDocument(Associate.class, this, "filterAssociate");
+        entitySelectorRouter.setFormDocument(Project.class, this, "filterProject");
         serviceRecordsDataModel.listAll();
     }
 
@@ -180,8 +131,18 @@ public class ServiceRecordsViewModel extends EntityViewModel<ServiceRecord> impl
             Map<String, Object> data = (Map<String, Object>) evt.getData();
             filterAssociate = (Associate) data.get("filterAssociate");
             filterProject = (Project) data.get("filterProject");
+            entitySelectorRouter.setFormDocument(Associate.class, this, "filterAssociate");
+            entitySelectorRouter.setFormDocument(Project.class, this, "filterProject");
             serviceRecordsDataModel.search(filterProject, filterAssociate);
-            BindUtils.postNotifyChange(this, "filterProject", "filterAssociate");
+        }
+
+        if (evt instanceof PropertyChangeEvent) {
+            PropertyChangeEvent propertyEvent = (PropertyChangeEvent) evt;
+            if (Objects.nonNull(propertyEvent.getBase()) && propertyEvent.getBase().equals(this)) {
+                if ("filterProject".equals(propertyEvent.getProperty()) || "filterAssociate".equals(propertyEvent.getProperty())) {
+                    serviceRecordsDataModel.search(filterProject, filterAssociate);
+                }
+            }
         }
     }
 
@@ -190,4 +151,10 @@ public class ServiceRecordsViewModel extends EntityViewModel<ServiceRecord> impl
         log.info("Destroy {}", getClass().getSimpleName());
         eventBus.unregister(this);
     }
+
+    @Command
+    public void onDelete() {
+        serviceRecordsDataModel.delete(getSelectedEntity());
+        refresh();
+    }
 }
index b7e57e7d115bea9e7dbf015b052de45875064fd5..0f84d9346b357549290af7f67f568eb867b0c066 100644 (file)
@@ -2,6 +2,7 @@ package hu.user.lis.ui.view;
 
 import hu.user.lis.db.ProjectStatus;
 import hu.user.lis.ui.data.ProjectStatusDataModel;
+import hu.user.lis.ui.view.common.AsyncBaseModel;
 import lombok.Getter;
 import lombok.extern.log4j.Log4j2;
 import org.zkoss.bind.annotation.BindingParam;
@@ -18,6 +19,7 @@ public class SettingsViewModel extends AsyncBaseModel {
     @WireVariable
     @Getter
     ProjectStatusDataModel projectStatusDataModel;
+    
     @Getter
     private ProjectStatus selectedProjectStatus;
 
@@ -28,17 +30,6 @@ public class SettingsViewModel extends AsyncBaseModel {
         log.info("Initialized");
     }
 
-//    @Command
-//    @NotifyChange("selectedProjectStatus")
-//    public void onListSelection() {
-//        selectedProjectStatus = null;
-//        Set<ProjectStatus> selections = projectStatusDataModel.getSelection();
-//        if (selections.size() == 1) {
-//            selectedProjectStatus = selections.iterator().next();
-//            log.info("Selected {}", selectedProjectStatus);
-//        }
-//    }
-
     @Command
     public void onMoveUp() {
         projectStatusDataModel.moveUp(selectedProjectStatus);
@@ -52,8 +43,14 @@ public class SettingsViewModel extends AsyncBaseModel {
     }
 
     @Command
-    public void onAppend() {
-        projectStatusDataModel.append();
+    public void onCreate() {
+        projectStatusDataModel.create();
+        projectStatusDataModel.listAll();
+    }
+
+    @Command
+    public void onDelete() {
+        projectStatusDataModel.delete(selectedProjectStatus);
         projectStatusDataModel.listAll();
     }
 
diff --git a/lis-ui/src/main/java/hu/user/lis/ui/view/SuppliersViewModel.java b/lis-ui/src/main/java/hu/user/lis/ui/view/SuppliersViewModel.java
deleted file mode 100644 (file)
index bfed189..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-package hu.user.lis.ui.view;
-
-import hu.user.lis.db.Supplier;
-import hu.user.lis.ui.data.FormDocument;
-import hu.user.lis.ui.data.SuppliersDataModel;
-import lombok.Getter;
-import lombok.Setter;
-import lombok.extern.log4j.Log4j2;
-import org.zkoss.bind.annotation.BindingParam;
-import org.zkoss.bind.annotation.Command;
-import org.zkoss.bind.annotation.Init;
-import org.zkoss.bind.annotation.NotifyChange;
-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.zk.ui.select.annotation.WireVariable;
-import org.zkoss.zkplus.spring.DelegatingVariableResolver;
-import org.zkoss.zul.Window;
-
-import java.util.Set;
-
-@Log4j2
-@Getter
-@Setter
-@VariableResolver(DelegatingVariableResolver.class)
-public class SuppliersViewModel {
-    private FormDocument formDocument;
-    private boolean canEdit;
-    private String partialName;
-    private String partialZipCode;
-
-    private Supplier selectedSupplier;
-    @WireVariable
-    SuppliersDataModel suppliersDataModel;
-
-    @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
-    @NotifyChange("formDocument")
-    public void search() {
-        suppliersDataModel.clearSelection();
-        formDocument = null;
-        suppliersDataModel.search(partialName, partialZipCode);
-    }
-
-    @Command
-    @NotifyChange({"formDocument", "partialName", "partialZipCode"})
-    public void listAll() {
-        suppliersDataModel.clearSelection();
-        formDocument = null;
-        partialName = null;
-        partialZipCode = null;
-        suppliersDataModel.listAll();
-    }
-
-    @Command
-    @NotifyChange("formDocument")
-    public void onListSelection() {
-        formDocument = null;
-        selectedSupplier = null;
-        Set<Supplier> selections = suppliersDataModel.getSelection();
-        if (selections.iterator().hasNext()) {
-            selectedSupplier = selections.iterator().next();
-            formDocument = FormDocument.builder().build()
-                    .setData(selectedSupplier);
-            log.info("Selected {}", formDocument);
-        }
-    }
-
-    @Command
-    public void onCloseWindow(@BindingParam("target") Window target, @BindingParam("select") boolean select) {
-        Event closeEvent = new Event("onClose", target, select ? selectedSupplier : null);
-        Events.postEvent(closeEvent);
-    }
-}
similarity index 96%
rename from lis-ui/src/main/java/hu/user/lis/ui/view/AsyncBaseModel.java
rename to lis-ui/src/main/java/hu/user/lis/ui/view/common/AsyncBaseModel.java
index 5dd56961906b8e323c796c790dabb8b56fd7b5ec..ef4976d3b68985148818cb1e5999186002e994fa 100644 (file)
@@ -1,4 +1,4 @@
-package hu.user.lis.ui.view;
+package hu.user.lis.ui.view.common;
 
 import org.zkoss.bind.BindUtils;
 import org.zkoss.bind.annotation.Command;
similarity index 81%
rename from lis-ui/src/main/java/hu/user/lis/ui/view/EntityViewModel.java
rename to lis-ui/src/main/java/hu/user/lis/ui/view/common/EntityViewModel.java
index dff27a704b10c30911dd6ee70f5cd96db5704915..97b261b136a4f3e7b471199cea4d8f0084f8c155 100644 (file)
@@ -1,11 +1,13 @@
-package hu.user.lis.ui.view;
+package hu.user.lis.ui.view.common;
 
 import hu.user.lis.services.data.EntityDataService;
 import hu.user.lis.ui.data.CachedSpringDataModel;
 import lombok.Getter;
+import lombok.Setter;
 import lombok.extern.log4j.Log4j2;
 import org.apache.commons.lang3.StringUtils;
 import org.zkoss.bind.annotation.*;
+import org.zkoss.json.JSONObject;
 import org.zkoss.zk.ui.Component;
 import org.zkoss.zk.ui.select.Selectors;
 import org.zkoss.zk.ui.select.annotation.VariableResolver;
@@ -22,11 +24,22 @@ import java.util.Set;
 public abstract class EntityViewModel<T extends Serializable> {
 
     @Getter
+    @Setter
     T selectedEntity;
+
+    @Getter
     @WireVariable
     EntityDataService<T> entityDataService;
 
-    abstract CachedSpringDataModel<T> getDataModel();
+    protected void addColumn(String name, String direction) {
+        getDataModel().addColumn(name, direction);
+    }
+
+    public JSONObject getCols() {
+        return getDataModel().getCols();
+    }
+    
+    abstract protected CachedSpringDataModel<T> getDataModel();
 
     @AfterCompose
     public void onAfterCompose(@ContextParam(ContextType.VIEW) Component view) {
similarity index 97%
rename from lis-ui/src/main/java/hu/user/lis/ui/view/FilterActiveViewModel.java
rename to lis-ui/src/main/java/hu/user/lis/ui/view/common/FilterActiveViewModel.java
index aaf959f052b7bd90dc7e02e2cfed9845126ad2f8..54127105e7ed01ad80d1f2d80c476f3acbd95576 100644 (file)
@@ -1,4 +1,4 @@
-package hu.user.lis.ui.view;
+package hu.user.lis.ui.view.common;
 
 import lombok.extern.log4j.Log4j2;
 import org.zkoss.bind.annotation.Init;
similarity index 57%
rename from lis-ui/src/main/java/hu/user/lis/ui/view/UITask.java
rename to lis-ui/src/main/java/hu/user/lis/ui/view/common/UITask.java
index 6f2f784565712fdb44c65d95e2f4a017e98c5052..f30c8d2fb1e579432e47ab0028178d9a5b1b228e 100644 (file)
@@ -1,4 +1,4 @@
-package hu.user.lis.ui.view;
+package hu.user.lis.ui.view.common;
 
 public interface UITask {
     void execute();
index fde58d3a2171bec56a62b72a458a9f59bf6626bd..04d0743e2b12d9caa40399f2ed620e0345f973c3 100644 (file)
@@ -1,11 +1,11 @@
 <?link rel="stylesheet" type="text/css" href="~./static/css/skeleton.css" ?>
 <?link rel="stylesheet" type="text/css" href="~./static/css/webclient.css" ?>
 <zk>
-    <style>
-        .z-listitem-selected>.z-listcell>.z-listcell-content {
-        font-weight: bold;
-        }
-    </style>
+    <!--    <style>-->
+    <!--        .z-listitem-selected>.z-listcell>.z-listcell-content {-->
+    <!--        font-weight: bold;-->
+    <!--        }-->
+    <!--    </style>-->
     <window vflex="true" viewModel="@id('vm') @init('hu.user.lis.ui.view.AssociatesViewModel')">
         <caption label="Munkatársak"/>
         <borderlayout>
                          autopaging="true" mold="paging" pagingPosition="top" multiple="false"
                          onSelect="@command('onListSelection')" onDoubleClick="@command('onEdit')">
                     <listhead sizable="true">
-                        <listheader label="Név" sort="auto(name)" align="left"/>
-                        <listheader label="Login" sort="auto(login)" align="left"/>
-                        <listheader label="Aktív" sort="auto(active)" align="left"/>
+                        <listheader label="Név" sort="auto(name)" align="left"
+                                    sortDirection="@load(vm.cols['name'].sortDirection)"/>
+                        <listheader label="Login" sort="auto(login)" align="left"
+                                    sortDirection="@load(vm.cols['login'].sortDirection)"/>
+                        <listheader label="Aktív" sort="auto(active)" align="left"
+                                    sortDirection="@load(vm.cols['active'].sortDirection)"/>
+
                     </listhead>
                     <template name="model">
                         <listitem>
similarity index 97%
rename from lis-ui/src/main/resources/web/incoming-invoice-editor.zul
rename to lis-ui/src/main/resources/web/editor/incoming-invoice-editor.zul
index e825016275e9dc9b32316082d4d8fde955f71b2d..0efede23bd97a1f283834f722d8f509e2649fb0c 100644 (file)
@@ -1,6 +1,6 @@
 <?link rel="stylesheet" type="text/css" href="~./static/css/skeleton.css" ?>
 <?link rel="stylesheet" type="text/css" href="~./static/css/webclient.css" ?>
-<?component name="partner-selector" inline="true" macroURI="~./partner-selector.zul"?>
+<?component name="entity-selector" inline="true" class="hu.user.lis.ui.editor.widget.EntitySelector"?>
 <zk>
     <zscript>
         import hu.user.lis.db.Currency;
@@ -24,7 +24,7 @@
                                          value="@bind(vm.formDocument.title) @validator(vm)"
                                          forward="onOK=submit.onClick, onCancel=cancel.onClick"/>
                                 <label value="Partner"/>
-                                <partner-selector/>
+                                <entity-selector entity="Partner"/>
                                 <hlayout>
                                     <vlayout>
                                         <label value="Sorszám"/>
similarity index 97%
rename from lis-ui/src/main/resources/web/outgoing-invoice-editor.zul
rename to lis-ui/src/main/resources/web/editor/outgoing-invoice-editor.zul
index e2ead4919eda6f5b28de5819fc602705319577f5..f4317e75a663df832da429f42cefb9aaa30afb37 100644 (file)
@@ -1,6 +1,6 @@
 <?link rel="stylesheet" type="text/css" href="~./static/css/skeleton.css" ?>
 <?link rel="stylesheet" type="text/css" href="~./static/css/webclient.css" ?>
-<?component name="partner-selector" inline="true" macroURI="~./partner-selector.zul"?>
+<?component name="entity-selector" inline="true" class="hu.user.lis.ui.editor.widget.EntitySelector"?>
 <zk>
     <zscript>
         import hu.user.lis.db.Currency;
@@ -24,7 +24,7 @@
                                          value="@bind(vm.formDocument.title) @validator(vm)"
                                          forward="onOK=submit.onClick, onCancel=cancel.onClick"/>
                                 <label value="Partner"/>
-                                <partner-selector/>
+                                <entity-selector entity="Partner"/>
                                 <hlayout>
                                     <vlayout>
                                         <label value="Sorszám"/>
diff --git a/lis-ui/src/main/resources/web/editor/project-editor.zul b/lis-ui/src/main/resources/web/editor/project-editor.zul
new file mode 100644 (file)
index 0000000..ab4deae
--- /dev/null
@@ -0,0 +1,130 @@
+<?component name="entity-selector" inline="true" class="hu.user.lis.ui.editor.widget.EntitySelector"?>
+<zk>
+    <window id="projectEditor" hflex="true" vflex="true"
+            viewModel="@id('vm') @init('hu.user.lis.ui.editor.ProjectEditorModel')"
+            validationMessages="@id('vmsgs')">
+        <caption label="Projekt szerkesztés"/>
+        <borderlayout>
+            <center id="centerPanel" border="none" vflex="true" hflex="true" autoscroll="true">
+                <vlayout hflex="true" vflex="min">
+                    <hbox spacing="0" width="100%">
+                        <window border="none" hflex="true" vflex="true">
+                            <tabbox height="250px">
+                                <tabs>
+                                    <tab label="Adatok" selected="true"/>
+                                </tabs>
+                                <tabpanels>
+                                    <tabpanel>
+                                        <grid sclass="no-hover-grid" oddRowSclass="none"
+                                              forward="onOK=submit.onClick, onCancel=cancel.onClick">
+                                            <columns visible="false">
+                                                <column width="40%"/>
+                                                <column width="60%"/>
+                                            </columns>
+                                            <rows>
+                                                <row>
+                                                    <vlayout>
+                                                        <label value="Azonosító"/>
+                                                        <textbox instant="true" width="100%"
+                                                                 value="@bind(vm.formDocument.humanId) @validator(vm)"
+                                                                 readonly="true"
+                                                                 forward="onOK=submit.onClick, onCancel=cancel.onClick"/>
+                                                    </vlayout>
+                                                    <vlayout>
+                                                        <label value="Megnevezés"/>
+                                                        <textbox instant="true" width="100%"
+                                                                 value="@bind(vm.formDocument.name) @validator(vm)"
+                                                                 forward="onOK=submit.onClick, onCancel=cancel.onClick"/>
+                                                    </vlayout>
+                                                </row>
+                                                <row>
+                                                    <vlayout>
+                                                        <label value="Ügyfél"/>
+                                                        <entity-selector entity="Partner"/>
+                                                    </vlayout>
+                                                    <vlayout>
+                                                        <label value="Kapcsolattartó"/>
+                                                        <textbox instant="true" width="100%"
+                                                                 value="@bind(vm.formDocument.contactName) @validator(vm)"
+                                                                 forward="onOK=submit.onClick, onCancel=cancel.onClick"/>
+                                                        <label value="@bind(vmsgs[self.previousSibling])"/>
+                                                    </vlayout>
+                                                </row>
+                                                <row>
+                                                    <vlayout>
+                                                        <label value="Státusz"/>
+                                                        <selectbox model="@load(vm.projectStatusDataModel)"
+                                                                   width="100%"
+                                                                   selectedIndex="@bind(vm.formDocument.projectStatus) @converter(vm.projectStatusConverter) @validator(vm)"
+                                                                   forward="onOK=submit.onClick, onCancel=cancel.onClick">
+                                                            <template name="model">
+                                                                ${each.name}
+                                                            </template>
+                                                        </selectbox>
+                                                    </vlayout>
+                                                    <vlayout>
+                                                        <label value="Aktív"/>
+                                                        <checkbox mold="switch"
+                                                                  checked="@bind(vm.formDocument.active) @validator(vm)"/>
+                                                    </vlayout>
+                                                </row>
+                                            </rows>
+                                        </grid>
+                                    </tabpanel>
+                                </tabpanels>
+                            </tabbox>
+                        </window>
+
+                        <window border="none" hflex="true" vflex="true">
+                            <tabbox height="250px">
+                                <tabs>
+                                    <tab label="Árrés" selected="true"/>
+                                </tabs>
+                                <tabpanels>
+                                    <tabpanel>
+                                        <vlayout vflex="true">
+                                            <grid sclass="no-hover-grid" oddRowSclass="none"
+                                                  model="@load(vm.incomeMarginsDataModel)"
+                                                  forward="onOK=submit.onClick, onCancel=cancel.onClick"
+                                                  emptyMessage="Nem kalkulálható!">
+                                                <columns visible="false">
+                                                    <column width="50px" label="Pénznem"/>
+                                                    <column width="100%" label="Összeg"/>
+                                                </columns>
+                                                <rows>
+                                                    <template name="model">
+                                                        <row>
+                                                            <label value="@load(each.currency)"/>
+                                                            <label value="@load(each.amount) @converter('hu.user.lis.ui.converter.DoubleToStringConverter')"/>
+                                                        </row>
+                                                    </template>
+                                                </rows>
+                                            </grid>
+
+                                        </vlayout>
+                                    </tabpanel>
+                                </tabpanels>
+                            </tabbox>
+                        </window>
+                    </hbox>
+
+                    <include src="~./editor/project/outgoing-invoices.zul"/>
+                    <include src="~./editor/project/incoming-invoices.zul"/>
+                    <include src="~./editor/project/treasuries.zul"/>
+                    <include src="~./editor/project/service-records.zul"/>
+                    <include src="~./editor/project/project-associates.zul"/>
+
+                </vlayout>
+            </center>
+            <south border="none" flex="true" style="text-align: right; padding: 10px;">
+                <hlayout>
+                    <button id="cancel" label="Mégsem"
+                            onClick="@command('onEndEdit', target=projectEditor, save=false)"/>
+                    <button id="submit" label="Mentés"
+                            onClick="@command('onEndEdit', target=projectEditor, save=true)"
+                            disabled="@bind(not vm.saveEnabled)"/>
+                </hlayout>
+            </south>
+        </borderlayout>
+    </window>
+</zk>
\ No newline at end of file
diff --git a/lis-ui/src/main/resources/web/editor/project/incoming-invoices.zul b/lis-ui/src/main/resources/web/editor/project/incoming-invoices.zul
new file mode 100644 (file)
index 0000000..10c6209
--- /dev/null
@@ -0,0 +1,51 @@
+<zk>
+    <panel collapsible="true" open="false" border="rounded"
+           onOpen="@command('onOpenFormPanel', parentPanel=centerPanel)">
+        <caption label="Bejövő számlák" style="cursor: pointer"
+                 onClick="@command('onClickFormPanel', parentPanel=centerPanel, panel=self.parent)"/>
+        <panelchildren>
+            <vlayout>
+                <toolbar>
+                    <toolbarbutton label="Hozzáadás" iconSclass="z-icon-plus"
+                                   onClick="@command('onAddIncoming')"/>
+                    <toolbarbutton label="Szerkesztés" iconSclass="z-icon-edit"
+                                   onClick="@command('onEditIncoming')"
+                                   disabled="@load(empty vm.selectedIncomingInvoice)"/>
+                    <toolbarbutton label="Törlés" iconSclass="z-icon-remove"
+                                   onClick="@command('onRemoveIncoming')"
+                                   disabled="@load(empty vm.selectedIncomingInvoice)"/>
+                </toolbar>
+                <listbox model="@load(vm.formDocument.incomingInvoices)"
+                         selectedItem="@bind(vm.selectedIncomingInvoice)"
+                         onDoubleClick="@command('onEditIncoming')"
+                         forward="onOK=submit.onClick, onCancel=cancel.onClick">
+                    <listhead sizable="true">
+                        <listheader label="Szállító" sort="auto(partner.name)" align="left"/>
+                        <listheader label="Sorszám" sort="auto(humanId)" align="left"/>
+                        <listheader label="Megnevezés" sort="auto(title)" align="left"/>
+                        <listheader label="Nettó összeg" sort="auto(netAmount)" align="right"
+                                    style="text-align: center"/>
+                        <listheader label="Pénznem" sort="auto(currency)" align="left"/>
+                        <listheader label="Teljesítés" sort="auto(completionDate)" align="left"/>
+                        <listheader label="Fizetési határidő" sort="auto(paymentDeadline)"
+                                    align="left"/>
+                    </listhead>
+                    <template name="model">
+                        <listitem>
+                            <listcell label="@load(each.partner.name)"/>
+                            <listcell label="@load(each.humanId)"/>
+                            <listcell label="@load(each.title)"/>
+                            <listcell
+                                    label="@load(each.netAmount) @converter('hu.user.lis.ui.converter.DoubleToStringConverter')"/>
+                            <listcell label="@load(each.currency)"/>
+                            <listcell
+                                    label="@load(each.completionDate) @converter('hu.user.lis.ui.converter.DateToStringConverter')"/>
+                            <listcell
+                                    label="@load(each.paymentDeadline) @converter('hu.user.lis.ui.converter.DateToStringConverter')"/>
+                        </listitem>
+                    </template>
+                </listbox>
+            </vlayout>
+        </panelchildren>
+    </panel>
+</zk>
\ No newline at end of file
diff --git a/lis-ui/src/main/resources/web/editor/project/outgoing-invoices.zul b/lis-ui/src/main/resources/web/editor/project/outgoing-invoices.zul
new file mode 100644 (file)
index 0000000..91ddd68
--- /dev/null
@@ -0,0 +1,51 @@
+<zk>
+    <panel collapsible="true" open="false" border="rounded"
+           onOpen="@command('onOpenFormPanel', parentPanel=centerPanel)">
+        <caption label="Kimenő számlák" style="cursor: pointer"
+                 onClick="@command('onClickFormPanel', parentPanel=centerPanel, panel=self.parent)"/>
+        <panelchildren>
+            <vlayout>
+                <toolbar>
+                    <toolbarbutton label="Hozzáadás" iconSclass="z-icon-plus"
+                                   onClick="@command('onAddOutgoing')"/>
+                    <toolbarbutton label="Szerkesztés" iconSclass="z-icon-edit"
+                                   onClick="@command('onEditOutgoing')"
+                                   disabled="@load(empty vm.selectedOutgoingInvoice)"/>
+                    <toolbarbutton label="Törlés" iconSclass="z-icon-remove"
+                                   onClick="@command('onRemoveOutgoing')"
+                                   disabled="@load(empty vm.selectedOutgoingInvoice)"/>
+                </toolbar>
+                <listbox model="@load(vm.formDocument.outgoingInvoices)"
+                         selectedItem="@bind(vm.selectedOutgoingInvoice)"
+                         onDoubleClick="@command('onEditOutgoing')"
+                         forward="onOK=submit.onClick, onCancel=cancel.onClick">
+                    <listhead sizable="true">
+                        <listheader label="Vevő" sort="auto(partner.name)" align="left"/>
+                        <listheader label="Sorszám" sort="auto(humanId)" align="left"/>
+                        <listheader label="Megnevezés" sort="auto(title)" align="left"/>
+                        <listheader label="Nettó összeg" sort="auto(netAmount)" align="right"
+                                    style="text-align: center"/>
+                        <listheader label="Pénznem" sort="auto(currency)" align="left"/>
+                        <listheader label="Teljesítés" sort="auto(completionDate)" align="left"/>
+                        <listheader label="Fizetési határidő" sort="auto(paymentDeadline)"
+                                    align="left"/>
+                    </listhead>
+                    <template name="model">
+                        <listitem>
+                            <listcell label="@load(each.partner.name)"/>
+                            <listcell label="@load(each.humanId)"/>
+                            <listcell label="@load(each.title)"/>
+                            <listcell
+                                    label="@load(each.netAmount) @converter('hu.user.lis.ui.converter.DoubleToStringConverter')"/>
+                            <listcell label="@load(each.currency)"/>
+                            <listcell
+                                    label="@load(each.completionDate) @converter('hu.user.lis.ui.converter.DateToStringConverter')"/>
+                            <listcell
+                                    label="@load(each.paymentDeadline) @converter('hu.user.lis.ui.converter.DateToStringConverter')"/>
+                        </listitem>
+                    </template>
+                </listbox>
+            </vlayout>
+        </panelchildren>
+    </panel>
+</zk>
\ No newline at end of file
diff --git a/lis-ui/src/main/resources/web/editor/project/project-associates.zul b/lis-ui/src/main/resources/web/editor/project/project-associates.zul
new file mode 100644 (file)
index 0000000..89ff7fb
--- /dev/null
@@ -0,0 +1,34 @@
+<zk>
+    <panel collapsible="true" open="false" border="rounded"
+           onOpen="@command('onOpenFormPanel', parentPanel=centerPanel)">
+        <caption label="Résztvevők" style="cursor: pointer"
+                 onClick="@command('onClickFormPanel', parentPanel=centerPanel, panel=self.parent)"/>
+        <!--                                    <north flex="true">-->
+        <!--                                        <toolbar>-->
+        <!--                                            <textbox instant="true" value="@bind(vm.partialAssociateName)"/>-->
+        <!--                                            <toolbarbutton iconSclass="z-icon-remove"-->
+        <!--                                                           onClick="@command('onResetAssociateFilter')"/>-->
+        <!--                                        </toolbar>-->
+        <!--                                    </north>-->
+        <panelchildren>
+            <listbox model="@load(vm.associatesDataModel)"
+                     multiple="false">
+                <listhead sizable="true">
+                    <listheader hflex="min" label="Tag" align="left"/>
+                    <listheader label="Név" sort="auto(name)" align="left"/>
+                    <listheader label="Login" sort="auto(login)" align="left"/>
+                </listhead>
+                <template name="model">
+                    <listitem>
+                        <listcell>
+                            <checkbox checked="@bind(vm.formAssociates[each.id])"
+                                      onCheck="@command('onAssociateChecked')"/>
+                        </listcell>
+                        <listcell label="@load(each.name)"/>
+                        <listcell label="@load(each.login)"/>
+                    </listitem>
+                </template>
+            </listbox>
+        </panelchildren>
+    </panel>
+</zk>
\ No newline at end of file
diff --git a/lis-ui/src/main/resources/web/editor/project/service-records.zul b/lis-ui/src/main/resources/web/editor/project/service-records.zul
new file mode 100644 (file)
index 0000000..000f834
--- /dev/null
@@ -0,0 +1,30 @@
+<zk>
+    <panel collapsible="true" open="false" border="rounded"
+           onOpen="@command('onOpenFormPanel', parentPanel=centerPanel)">
+        <caption label="Munkalap összesítő" style="cursor: pointer"
+                 onClick="@command('onClickFormPanel', parentPanel=centerPanel, panel=self.parent)"/>
+        <panelchildren>
+            <listbox model="@load(vm.serviceRecordsDataModel)"
+                     forward="onOK=submit.onClick, onCancel=cancel.onClick">
+                <listhead sizable="true">
+                    <listheader label="Munkatárs" sort="auto(associate.name)" align="left"/>
+                    <listheader label="Óraszám" sort="auto(workHours)" align="right"
+                                style="text-align: center"/>
+                    <listheader label="Ráfordítás" sort="auto(cost)" align="right"
+                                style="text-align: center"/>
+                </listhead>
+                <template name="model">
+                    <listitem>
+                        <listcell>
+                            <a onClick="@command('showServiceRecords', associate=each.associate)"
+                               label="@load(each.associate.name)"/>
+                        </listcell>
+                        <listcell label="@load(each.workHours)"/>
+                        <listcell
+                                label="@load(each.cost) @converter('hu.user.lis.ui.converter.DoubleToStringConverter')"/>
+                    </listitem>
+                </template>
+            </listbox>
+        </panelchildren>
+    </panel>
+</zk>
\ No newline at end of file
diff --git a/lis-ui/src/main/resources/web/editor/project/treasuries.zul b/lis-ui/src/main/resources/web/editor/project/treasuries.zul
new file mode 100644 (file)
index 0000000..15907f8
--- /dev/null
@@ -0,0 +1,58 @@
+<zk>
+    <panel collapsible="true" open="false" border="rounded"
+           onOpen="@command('onOpenFormPanel', parentPanel=centerPanel)">
+        <caption label="Treasury műveletek" style="cursor: pointer"
+                 onClick="@command('onClickFormPanel', parentPanel=centerPanel, panel=self.parent)"/>
+        <panelchildren>
+            <vlayout>
+                <toolbar>
+                    <toolbarbutton label="Hozzáadás" iconSclass="z-icon-plus"
+                                   onClick="@command('onAddTreasury')"/>
+                    <toolbarbutton label="Szerkesztés" iconSclass="z-icon-edit"
+                                   onClick="@command('onEditTreasury')"
+                                   disabled="@load(empty vm.selectedTreasury)"/>
+                    <toolbarbutton label="Törlés" iconSclass="z-icon-remove"
+                                   onClick="@command('onRemoveTreasury')"
+                                   disabled="@load(empty vm.selectedTreasury)"/>
+                </toolbar>
+
+                <listbox model="@load(vm.formDocument.treasuries)"
+                         selectedItem="@bind(vm.selectedTreasury)"
+                         onDoubleClick="@command('onEditTreasury')"
+                         forward="onOK=submit.onClick, onCancel=cancel.onClick">
+                    <auxhead>
+                        <auxheader label="Eladás" colspan="2"/>
+                        <auxheader label="Vétel" colspan="2"/>
+                        <auxheader colspan="2"/>
+                    </auxhead>
+
+                    <listhead sizable="true">
+                        <listheader label="Összeg" sort="auto(sellAmount)" align="right"
+                                    style="text-align: center"/>
+                        <listheader label="Pénznem" sort="auto(sellCurrency)" align="left"/>
+                        <listheader label="Összeg" sort="auto(buyAmount)" align="right"
+                                    style="text-align: center"/>
+                        <listheader label="Pénznem" sort="auto(buyCurrency)" align="left"/>
+                        <listheader label="Üzletkötés dátuma" sort="auto(transactionDate)"
+                                    align="left"/>
+                        <listheader label="Értéknap" sort="auto(valueDate)" align="left"/>
+                    </listhead>
+                    <template name="model">
+                        <listitem>
+                            <listcell
+                                    label="@load(each.sellAmount) @converter('hu.user.lis.ui.converter.DoubleToStringConverter')"/>
+                            <listcell label="@load(each.sellCurrency)"/>
+                            <listcell
+                                    label="@load(each.buyAmount) @converter('hu.user.lis.ui.converter.DoubleToStringConverter')"/>
+                            <listcell label="@load(each.buyCurrency)"/>
+                            <listcell
+                                    label="@load(each.transactionDate) @converter('hu.user.lis.ui.converter.DateToStringConverter')"/>
+                            <listcell
+                                    label="@load(each.valueDate) @converter('hu.user.lis.ui.converter.DateToStringConverter')"/>
+                        </listitem>
+                    </template>
+                </listbox>
+            </vlayout>
+        </panelchildren>
+    </panel>
+</zk>
\ No newline at end of file
similarity index 93%
rename from lis-ui/src/main/resources/web/service-record-editor.zul
rename to lis-ui/src/main/resources/web/editor/service-record-editor.zul
index 20f41bebc962b0bc68eb22119fddad81516da986..a512ad0850188a5051c4a0017cf643d1beb6ec70 100644 (file)
@@ -1,7 +1,6 @@
-<?component name="associate-selector" inline="true" macroURI="~./associate-selector.zul"?>
-<?component name="project-selector" inline="true" macroURI="~./project-selector.zul"?>
+<?component name="entity-selector" inline="true" class="hu.user.lis.ui.editor.widget.EntitySelector"?>
 <zk>
-    <window id="serviceRecordPopup" width="50%" height="450px" closable="true"
+    <window id="serviceRecordPopup" width="50%" height="450px" closable="true" sizable="true" maximizable="true"
             viewModel="@id('vm') @init('hu.user.lis.ui.editor.ServiceRecordEditorModel')">
         <caption label="Munkalap szerkesztés"/>
         <borderlayout>
                             <vlayout hflex="true">
                                 <vlayout hflex="true">
                                     <label value="Projekt"/>
-                                    <project-selector hflex="true"/>
+                                    <entity-selector entity="Project" hflex="true"/>
                                 </vlayout>
                                 <hlayout>
                                     <vlayout>
                                         <label value="Munkatárs"/>
-                                        <associate-selector/>
+                                        <entity-selector entity="Associate"/>
                                     </vlayout>
                                     <vlayout>
                                         <label value="Munkanap"/>
index 158c21d800a418167a3b58046f5f1df93b57ced8..eb0f59f7db75faec9529658c7709488e1b496c14 100644 (file)
                 <rows>
                     <row>
                         <label value="User"/>
-                        <textbox name="username" hflex="true" value="user"/>
+                        <textbox name="username" hflex="true"/>
                     </row>
                     <row>
                         <label value="Password"/>
-                        <textbox type="password" name="password" hflex="true" value="password"/>
+                        <textbox type="password" name="password" hflex="true"/>
                     </row>
                     <row spans="2" align="right">
                         <hlayout>
index b8030eddb4980e3e98f8e0679417f0ebe5943ae3..9f099fb21c40e2e155f7d31b59c7aa19bf58eb5d 100644 (file)
                          autopaging="true" mold="paging" pagingPosition="top" multiple="false"
                          onSelect="@command('onListSelection')" onDoubleClick="@command('onEdit')">
                     <listhead sizable="true">
-                        <listheader label="Név" sort="auto(name)" align="left"/>
-                        <listheader label="Adószám" sort="auto(vatNr)" align="left"/>
-                        <listheader label="Cím" sort="auto(address)" align="left"/>
-                        <listheader label="Aktív" sort="auto(active)" align="left"/>
+                        <listheader label="Név" sort="auto(name)" align="left"
+                                    sortDirection="@load(vm.cols['name'].sortDirection)"/>
+                        <listheader label="Adószám" sort="auto(vatNr)" align="left"
+                                    sortDirection="@load(vm.cols['vatNr'].sortDirection)"/>
+                        <listheader label="Cím" sort="auto(address)" align="left"
+                                    sortDirection="@load(vm.cols['address'].sortDirection)"/>
+                        <listheader label="Aktív" sort="auto(active)" align="left"
+                                    sortDirection="@load(vm.cols['active'].sortDirection)"/>
+
                     </listhead>
                     <template name="model">
                         <listitem>
diff --git a/lis-ui/src/main/resources/web/project-editor.zul b/lis-ui/src/main/resources/web/project-editor.zul
deleted file mode 100644 (file)
index 92c1d1a..0000000
+++ /dev/null
@@ -1,344 +0,0 @@
-<!--<?component name="partner-selector" inline="true" macroURI="~./partner-selector.zul"?>-->
-<?component name="entity-selector" inline="true" class="hu.user.lis.ui.editor.widget.EntitySelector"?>
-<zk>
-    <window id="projectEditor" hflex="true" vflex="true"
-            viewModel="@id('vm') @init('hu.user.lis.ui.editor.ProjectEditorModel')">
-        <caption label="Projekt szerkesztés"/>
-        <borderlayout>
-            <center id="centerPanel" border="none" vflex="true" hflex="true" autoscroll="true">
-                <vlayout hflex="true" vflex="min">
-                    <hbox spacing="0" width="100%">
-                        <window border="none" hflex="true" vflex="true">
-                            <tabbox height="250px">
-                                <tabs>
-                                    <tab label="Adatok" selected="true"/>
-                                </tabs>
-                                <tabpanels>
-                                    <tabpanel>
-                                        <grid sclass="no-hover-grid" oddRowSclass="none"
-                                              forward="onOK=submit.onClick, onCancel=cancel.onClick">
-                                            <columns visible="false">
-                                                <column width="40%"/>
-                                                <column width="60%"/>
-                                            </columns>
-                                            <rows>
-                                                <row>
-                                                    <vlayout>
-                                                        <label value="Azonosító"/>
-                                                        <textbox instant="true" width="100%"
-                                                                 value="@bind(vm.formDocument.humanId) @validator(vm)"
-                                                                 readonly="true"
-                                                                 forward="onOK=submit.onClick, onCancel=cancel.onClick"/>
-                                                    </vlayout>
-                                                    <vlayout>
-                                                        <label value="Megnevezés"/>
-                                                        <textbox instant="true" width="100%"
-                                                                 value="@bind(vm.formDocument.name) @validator(vm)"
-                                                                 forward="onOK=submit.onClick, onCancel=cancel.onClick"/>
-                                                    </vlayout>
-                                                </row>
-                                                <row>
-                                                    <vlayout>
-                                                        <label id="label1" value="Ügyfél"/>
-                                                        <entity-selector entity="Partner"
-                                                                         property="formDocument.partner"/>
-                                                    </vlayout>
-                                                    <vlayout>
-                                                        <label value="Kapcsolattartó"/>
-                                                        <textbox instant="true" width="100%"
-                                                                 value="@bind(vm.formDocument.contactName) @validator(vm)"
-                                                                 forward="onOK=submit.onClick, onCancel=cancel.onClick"/>
-                                                    </vlayout>
-                                                </row>
-                                                <row>
-                                                    <vlayout>
-                                                        <label value="Státusz"/>
-                                                        <selectbox model="@load(vm.projectStatusDataModel)"
-                                                                   width="100%"
-                                                                   selectedIndex="@bind(vm.formDocument.projectStatus) @converter(vm.projectStatusConverter) @validator(vm)"
-                                                                   forward="onOK=submit.onClick, onCancel=cancel.onClick">
-                                                            <template name="model">
-                                                                ${each.name}
-                                                            </template>
-                                                        </selectbox>
-                                                    </vlayout>
-                                                    <vlayout>
-                                                        <label value="Aktív"/>
-                                                        <checkbox mold="switch"
-                                                                  checked="@bind(vm.formDocument.active) @validator(vm)"/>
-                                                    </vlayout>
-                                                </row>
-                                            </rows>
-                                        </grid>
-                                    </tabpanel>
-                                </tabpanels>
-                            </tabbox>
-                        </window>
-
-                        <window border="none" hflex="true" vflex="true">
-                            <tabbox height="250px">
-                                <tabs>
-                                    <tab label="Árrés" selected="true"/>
-                                </tabs>
-                                <tabpanels>
-                                    <tabpanel>
-                                        <vlayout vflex="true">
-                                            <grid sclass="no-hover-grid" oddRowSclass="none"
-                                                  model="@load(vm.incomeMarginsDataModel)"
-                                                  forward="onOK=submit.onClick, onCancel=cancel.onClick">
-                                                <columns visible="false">
-                                                    <column width="50px" label="Pénznem"/>
-                                                    <column width="100%" label="Összeg"/>
-                                                </columns>
-                                                <rows>
-                                                    <template name="model">
-                                                        <row>
-                                                            <label value="@load(each.currency)"/>
-                                                            <label value="@load(each.amount) @converter('hu.user.lis.ui.converter.DoubleToStringConverter')"/>
-                                                        </row>
-                                                    </template>
-                                                </rows>
-                                            </grid>
-
-                                        </vlayout>
-                                    </tabpanel>
-                                </tabpanels>
-                            </tabbox>
-                        </window>
-                    </hbox>
-
-
-                    <panel collapsible="true" open="false" border="rounded"
-                           onOpen="@command('onOpenFormPanel', parentPanel=centerPanel)">
-                        <caption label="Kimenő számlák"
-                                 onClick="@command('onClickFormPanel', parentPanel=centerPanel, panel=self.parent)"/>
-                        <panelchildren>
-                            <vlayout>
-                                <toolbar>
-                                    <toolbarbutton label="Hozzáadás" iconSclass="z-icon-plus"
-                                                   onClick="@command('onAddOutgoing')"/>
-                                    <toolbarbutton label="Szerkesztés" iconSclass="z-icon-edit"
-                                                   onClick="@command('onEditOutgoing')"
-                                                   disabled="@load(empty vm.selectedOutgoingInvoice)"/>
-                                    <toolbarbutton label="Törlés" iconSclass="z-icon-remove"
-                                                   onClick="@command('onRemoveOutgoing')"
-                                                   disabled="@load(empty vm.selectedOutgoingInvoice)"/>
-                                </toolbar>
-                                <listbox model="@load(vm.formDocument.outgoingInvoices)"
-                                         selectedItem="@bind(vm.selectedOutgoingInvoice)"
-                                         onDoubleClick="@command('onEditOutgoing')"
-                                         forward="onOK=submit.onClick, onCancel=cancel.onClick">
-                                    <listhead sizable="true">
-                                        <listheader label="Vevő" sort="auto(partner.name)" align="left"/>
-                                        <listheader label="Sorszám" sort="auto(humanId)" align="left"/>
-                                        <listheader label="Megnevezés" sort="auto(title)" align="left"/>
-                                        <listheader label="Nettó összeg" sort="auto(netAmount)" align="right"
-                                                    style="text-align: center"/>
-                                        <listheader label="Pénznem" sort="auto(currency)" align="left"/>
-                                        <listheader label="Teljesítés" sort="auto(completionDate)" align="left"/>
-                                        <listheader label="Fizetési határidő" sort="auto(paymentDeadline)"
-                                                    align="left"/>
-                                    </listhead>
-                                    <template name="model">
-                                        <listitem>
-                                            <listcell label="@load(each.partner.name)"/>
-                                            <listcell label="@load(each.humanId)"/>
-                                            <listcell label="@load(each.title)"/>
-                                            <listcell
-                                                    label="@load(each.netAmount) @converter('hu.user.lis.ui.converter.DoubleToStringConverter')"/>
-                                            <listcell label="@load(each.currency)"/>
-                                            <listcell
-                                                    label="@load(each.completionDate) @converter('hu.user.lis.ui.converter.DateToStringConverter')"/>
-                                            <listcell
-                                                    label="@load(each.paymentDeadline) @converter('hu.user.lis.ui.converter.DateToStringConverter')"/>
-                                        </listitem>
-                                    </template>
-                                </listbox>
-                            </vlayout>
-                        </panelchildren>
-                    </panel>
-
-                    <panel collapsible="true" open="false" border="rounded"
-                           onOpen="@command('onOpenFormPanel', parentPanel=centerPanel)">
-                        <caption label="Bejövő számlák"
-                                 onClick="@command('onClickFormPanel', parentPanel=centerPanel, panel=self.parent)"/>
-                        <panelchildren>
-                            <vlayout>
-                                <toolbar>
-                                    <toolbarbutton label="Hozzáadás" iconSclass="z-icon-plus"
-                                                   onClick="@command('onAddIncoming')"/>
-                                    <toolbarbutton label="Szerkesztés" iconSclass="z-icon-edit"
-                                                   onClick="@command('onEditIncoming')"
-                                                   disabled="@load(empty vm.selectedIncomingInvoice)"/>
-                                    <toolbarbutton label="Törlés" iconSclass="z-icon-remove"
-                                                   onClick="@command('onRemoveIncoming')"
-                                                   disabled="@load(empty vm.selectedIncomingInvoice)"/>
-                                </toolbar>
-                                <listbox model="@load(vm.formDocument.incomingInvoices)"
-                                         selectedItem="@bind(vm.selectedIncomingInvoice)"
-                                         onDoubleClick="@command('onEditIncoming')"
-                                         forward="onOK=submit.onClick, onCancel=cancel.onClick">
-                                    <listhead sizable="true">
-                                        <listheader label="Szállító" sort="auto(partner.name)" align="left"/>
-                                        <listheader label="Sorszám" sort="auto(humanId)" align="left"/>
-                                        <listheader label="Megnevezés" sort="auto(title)" align="left"/>
-                                        <listheader label="Nettó összeg" sort="auto(netAmount)" align="right"
-                                                    style="text-align: center"/>
-                                        <listheader label="Pénznem" sort="auto(currency)" align="left"/>
-                                        <listheader label="Teljesítés" sort="auto(completionDate)" align="left"/>
-                                        <listheader label="Fizetési határidő" sort="auto(paymentDeadline)"
-                                                    align="left"/>
-                                    </listhead>
-                                    <template name="model">
-                                        <listitem>
-                                            <listcell label="@load(each.partner.name)"/>
-                                            <listcell label="@load(each.humanId)"/>
-                                            <listcell label="@load(each.title)"/>
-                                            <listcell
-                                                    label="@load(each.netAmount) @converter('hu.user.lis.ui.converter.DoubleToStringConverter')"/>
-                                            <listcell label="@load(each.currency)"/>
-                                            <listcell
-                                                    label="@load(each.completionDate) @converter('hu.user.lis.ui.converter.DateToStringConverter')"/>
-                                            <listcell
-                                                    label="@load(each.paymentDeadline) @converter('hu.user.lis.ui.converter.DateToStringConverter')"/>
-                                        </listitem>
-                                    </template>
-                                </listbox>
-                            </vlayout>
-                        </panelchildren>
-                    </panel>
-
-                    <panel collapsible="true" open="false" border="rounded"
-                           onOpen="@command('onOpenFormPanel', parentPanel=centerPanel)">
-                        <caption label="Treasury műveletek"
-                                 onClick="@command('onClickFormPanel', parentPanel=centerPanel, panel=self.parent)"/>
-                        <panelchildren>
-                            <vlayout>
-                                <toolbar>
-                                    <toolbarbutton label="Hozzáadás" iconSclass="z-icon-plus"
-                                                   onClick="@command('onAddTreasury')"/>
-                                    <toolbarbutton label="Szerkesztés" iconSclass="z-icon-edit"
-                                                   onClick="@command('onEditTreasury')"
-                                                   disabled="@load(empty vm.selectedTreasury)"/>
-                                    <toolbarbutton label="Törlés" iconSclass="z-icon-remove"
-                                                   onClick="@command('onRemoveTreasury')"
-                                                   disabled="@load(empty vm.selectedTreasury)"/>
-                                </toolbar>
-
-                                <listbox model="@load(vm.formDocument.treasuries)"
-                                         selectedItem="@bind(vm.selectedTreasury)"
-                                         onDoubleClick="@command('onEditTreasury')"
-                                         forward="onOK=submit.onClick, onCancel=cancel.onClick">
-                                    <auxhead>
-                                        <auxheader label="Eladás" colspan="2"/>
-                                        <auxheader label="Vétel" colspan="2"/>
-                                        <auxheader colspan="2"/>
-                                    </auxhead>
-
-                                    <listhead sizable="true">
-                                        <listheader label="Összeg" sort="auto(sellAmount)" align="right"
-                                                    style="text-align: center"/>
-                                        <listheader label="Pénznem" sort="auto(sellCurrency)" align="left"/>
-                                        <listheader label="Összeg" sort="auto(buyAmount)" align="right"
-                                                    style="text-align: center"/>
-                                        <listheader label="Pénznem" sort="auto(buyCurrency)" align="left"/>
-                                        <listheader label="Üzletkötés dátuma" sort="auto(transactionDate)"
-                                                    align="left"/>
-                                        <listheader label="Értéknap" sort="auto(valueDate)" align="left"/>
-                                    </listhead>
-                                    <template name="model">
-                                        <listitem>
-                                            <listcell
-                                                    label="@load(each.sellAmount) @converter('hu.user.lis.ui.converter.DoubleToStringConverter')"/>
-                                            <listcell label="@load(each.sellCurrency)"/>
-                                            <listcell
-                                                    label="@load(each.buyAmount) @converter('hu.user.lis.ui.converter.DoubleToStringConverter')"/>
-                                            <listcell label="@load(each.buyCurrency)"/>
-                                            <listcell
-                                                    label="@load(each.transactionDate) @converter('hu.user.lis.ui.converter.DateToStringConverter')"/>
-                                            <listcell
-                                                    label="@load(each.valueDate) @converter('hu.user.lis.ui.converter.DateToStringConverter')"/>
-                                        </listitem>
-                                    </template>
-                                </listbox>
-                            </vlayout>
-                        </panelchildren>
-                    </panel>
-
-                    <panel collapsible="true" open="false" border="rounded"
-                           onOpen="@command('onOpenFormPanel', parentPanel=centerPanel)">
-                        <caption label="Munkalap összesítő"
-                                 onClick="@command('onClickFormPanel', parentPanel=centerPanel, panel=self.parent)"/>
-                        <panelchildren>
-                            <listbox model="@load(vm.serviceRecordsDataModel)"
-                                     forward="onOK=submit.onClick, onCancel=cancel.onClick">
-                                <listhead sizable="true">
-                                    <listheader label="Munkatárs" sort="auto(associate.name)" align="left"/>
-                                    <listheader label="Óraszám" sort="auto(workHours)" align="right"
-                                                style="text-align: center"/>
-                                    <listheader label="Ráfordítás" sort="auto(cost)" align="right"
-                                                style="text-align: center"/>
-                                </listhead>
-                                <template name="model">
-                                    <listitem>
-                                        <listcell>
-                                            <a onClick="@command('showServiceRecords', associate=each.associate)"
-                                               label="@load(each.associate.name)"/>
-                                        </listcell>
-                                        <listcell label="@load(each.workHours)"/>
-                                        <listcell
-                                                label="@load(each.cost) @converter('hu.user.lis.ui.converter.DoubleToStringConverter')"/>
-                                    </listitem>
-                                </template>
-                            </listbox>
-                        </panelchildren>
-                    </panel>
-
-
-                    <panel collapsible="true" open="false" border="rounded"
-                           onOpen="@command('onOpenFormPanel', parentPanel=centerPanel)">
-                        <caption label="Résztvevők"
-                                 onClick="@command('onClickFormPanel', parentPanel=centerPanel, panel=self.parent)"/>
-                        <!--                                    <north flex="true">-->
-                        <!--                                        <toolbar>-->
-                        <!--                                            <textbox instant="true" value="@bind(vm.partialAssociateName)"/>-->
-                        <!--                                            <toolbarbutton iconSclass="z-icon-remove"-->
-                        <!--                                                           onClick="@command('onResetAssociateFilter')"/>-->
-                        <!--                                        </toolbar>-->
-                        <!--                                    </north>-->
-                        <panelchildren>
-                            <listbox model="@load(vm.associatesDataModel)"
-                                     multiple="false">
-                                <listhead sizable="true">
-                                    <listheader hflex="min" label="Tag" align="left"/>
-                                    <listheader label="Név" sort="auto(name)" align="left"/>
-                                    <listheader label="Login" sort="auto(login)" align="left"/>
-                                </listhead>
-                                <template name="model">
-                                    <listitem>
-                                        <listcell>
-                                            <checkbox checked="@bind(vm.formAssociates[each.id])"
-                                                      onCheck="@command('onAssociateChecked')"/>
-                                        </listcell>
-                                        <listcell label="@load(each.name)"/>
-                                        <listcell label="@load(each.login)"/>
-                                    </listitem>
-                                </template>
-                            </listbox>
-                        </panelchildren>
-                    </panel>
-
-                </vlayout>
-            </center>
-            <south border="none" flex="true" style="text-align: right; padding: 10px;">
-                <hlayout>
-                    <button id="cancel" label="Mégsem"
-                            onClick="@command('onEndEdit', target=projectEditor, save=false)"/>
-                    <button id="submit" label="Mentés"
-                            onClick="@command('onEndEdit', target=projectEditor, save=true)"
-                            disabled="@bind(not vm.saveEnabled)"/>
-                </hlayout>
-            </south>
-        </borderlayout>
-    </window>
-</zk>
\ No newline at end of file
index c13ed10dee7255f7a3297aa5436bd93e12436036..24e08e4effb8e91b2a39978c9bd4e22f1e053f10 100644 (file)
                          autopaging="true" pagingPosition="top" multiple="false"
                          onSelect="@command('onListSelection')" onDoubleClick="@command('onEdit')">
                     <listhead sizable="true">
-                        <listheader label="Azonosító" sort="auto(humanId)" align="left"/>
-                        <listheader label="Ügyfél" sort="auto(partner.name)" align="left"/>
-                        <listheader label="Státusz" sort="auto(projectStatus.name)" align="left"/>
-                        <listheader label="Megnevezés" sort="auto(name)" align="left"/>
-                        <listheader label="Kapcsolattartó" sort="auto(contactName)" align="left"/>
-                        <listheader label="Aktív" sort="auto(active)" align="left"/>
+                        <listheader label="Azonosító" sort="auto(humanId)" align="left"
+                                    sortDirection="@load(vm.cols['humanId'].sortDirection)"/>
+                        <listheader label="Ügyfél" sort="auto(partner.name)" align="left"
+                                    sortDirection="@load(vm.cols['partner.name'].sortDirection)"/>
+                        <listheader label="Státusz" sort="auto(projectStatus.name)" align="left"
+                                    sortDirection="@load(vm.cols['projectStatus.name'].sortDirection)"/>
+                        <listheader label="Megnevezés" sort="auto(name)" align="left"
+                                    sortDirection="@load(vm.cols['name'].sortDirection)"/>
+                        <listheader label="Kapcsolattartó" sort="auto(contactName)" align="left"
+                                    sortDirection="@load(vm.cols['contactName'].sortDirection)"/>
+                        <listheader label="Aktív" sort="auto(active)" align="left"
+                                    sortDirection="@load(vm.cols['active'].sortDirection)"/>
                     </listhead>
                     <template name="model">
                         <listitem>
index 35c8c1ee8ac0e742b0c2b94d5ea84cbb6a778d19..821ffb6f4aae4f7ecfc9234618d09d2127846aa4 100644 (file)
@@ -1,5 +1,4 @@
-<?component name="associate-filter" inline="true" macroURI="~./associate-filter.zul"?>
-<?component name="project-filter" inline="true" macroURI="~./project-filter.zul"?>
+<?component name="entity-selector" inline="true" class="hu.user.lis.ui.editor.widget.EntitySelector"?>
 <zk>
     <window vflex="true" viewModel="@id('vm') @init('hu.user.lis.ui.view.ServiceRecordsViewModel')">
         <caption label="Munkalapok"/>
                     <toolbarbutton label="Szerkesztés" iconSclass="z-icon-edit" onClick="@command('onEdit')"
                                    disabled="@load(empty vm.selectedEntity)"/>
                     <separator orient="vertical"/>
+                    <toolbarbutton label="Törlés" iconSclass="z-icon-minus" onClick="@command('onDelete')"
+                                   disabled="@load(empty vm.selectedEntity)"/>
+                    <separator orient="vertical"/>
                     <label value="Projekt"/>
                     <separator orient="vertical"/>
-                    <project-filter/>
+                    <entity-selector entity="Project" style="display: inline-block;" width="300px"/>
                     <separator orient="vertical"/>
                     <label value="Munkatárs"/>
                     <separator orient="vertical"/>
-                    <associate-filter/>
+                    <entity-selector entity="Associate" style="display: inline-block;"/>
                     <toolbarbutton label="Nincs szűrés" iconSclass="z-icon-ban" onClick="@command('onClearFilters')"/>
                 </toolbar>
             </north>
                          autopaging="true" mold="paging" pagingPosition="top" onSelect="@command('onListSelection')"
                          onDoubleClick="@command('onEdit')">
                     <listhead sizable="true">
-                        <!--
-                        https://www.zkoss.org/wiki/ZK_Component_Reference/Data/Listbox
-                        -->
                         <listheader label="Projekt azonosító" sort="auto(project.humanId)" align="left"
-                                    sortDirection="ascending"/>
-                        <listheader label="Projekt név" sort="auto(project.name)" align="left"/>
-                        <listheader label="Partner név" sort="auto(project.partner.name)" align="left"/>
-                        <listheader label="Munkatárs" sort="auto(associate.name)" align="left"/>
-                        <listheader label="Munkanap" sort="auto(workDay)" align="left"/>
-                        <listheader label="Leírás" sort="auto(description)" align="left"/>
-                        <listheader label="Óraszám" sort="auto(workHours)" align="right" style="text-align: center"/>
+                                    sortDirection="@load(vm.cols['project.humanId'].sortDirection)"/>
+                        <listheader label="Projekt név" sort="auto(project.name)" align="left"
+                                    sortDirection="@load(vm.cols['project.name'].sortDirection)"/>
+                        <listheader label="Partner név" sort="auto(project.partner.name)" align="left"
+                                    sortDirection="@load(vm.cols['project.partner.name'].sortDirection)"/>
+                        <listheader label="Munkatárs" sort="auto(associate.name)" align="left"
+                                    sortDirection="@load(vm.cols['associate.name'].sortDirection)"/>
+                        <listheader label="Munkanap" sort="auto(workDay)" align="left"
+                                    sortDirection="@load(vm.cols['workDay'].sortDirection)"/>
+                        <listheader label="Leírás" sort="auto(description)" align="left"
+                                    sortDirection="@load(vm.cols['description'].sortDirection)"/>
+                        <listheader label="Óraszám" sort="auto(workHours)" align="right" style="text-align: center"
+                                    sortDirection="@load(vm.cols['workHours'].sortDirection)"/>
                         <listheader label="Aláírt" align="left"/>
                     </listhead>
                     <template name="model">
index 2563234abe6bdd6af0e873e098b66b8c28115d71..86ed2724b779ef6649d7b508c83531a4b4db505b 100644 (file)
@@ -10,7 +10,9 @@
                     <toolbarbutton label="Le mozgat" iconSclass="z-icon-arrow-down" onClick="@command('onMoveUp')"
                                    disabled="@load(empty vm.selectedProjectStatus)"/>
                     <separator orient="vertical"/>
-                    <toolbarbutton label="Hozzáadás" iconSclass="z-icon-plus" onClick="@command('onAppend')"/>
+                    <toolbarbutton label="Hozzáadás" iconSclass="z-icon-plus" onClick="@command('onCreate')"/>
+                    <toolbarbutton label="Törlés" iconSclass="z-icon-minus" onClick="@command('onDelete')"
+                                   disabled="@load(empty vm.selectedProjectStatus)"/>
                 </toolbar>
             </north>
             <center border="none" flex="true">
index f3e78a8cd89ecfacaaf6ceb53db282593c543f40..20863c78e213070f980b2f28d592b4b56a2c87b2 100644 (file)
@@ -1,3 +1,8 @@
+.z-grid-emptybody td {
+/*    font-size: 2em;*/
+    font-style: normal;
+}
+
 .z-loading { left: 45% !important;
 /*
        top: 50% !important; 
diff --git a/lis-ui/src/main/resources/web/suppliers.zul b/lis-ui/src/main/resources/web/suppliers.zul
deleted file mode 100644 (file)
index cb43c3f..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-<?link rel="stylesheet" type="text/css" href="~./static/css/skeleton.css" ?>
-<?link rel="stylesheet" type="text/css" href="~./static/css/webclient.css" ?>
-<?component name="text" class="hu.user.lis.ui.editor.Field$Text" ?>
-<zk xmlns:c="client">
-    <window id="supplierPopup" title="Szállítók" width="80%" height="60%" closable="true"
-            viewModel="@id('vm') @init('hu.user.lis.ui.view.SuppliersViewModel')">
-        <style>
-            .z-listitem-selected>.z-listcell>.z-listcell-content {
-            font-weight: bold,;
-            }
-        </style>
-
-        <borderlayout>
-            <north flex="true">
-                <toolbar>
-                    <label value="Név"/>
-                    <textbox id="partialName" value="@bind(vm.partialName)" onOK="@command('search')">
-                        <attribute c:name="_doKeyDown">
-                            <![CDATA[
-                                    function (evt) {
-                                        var keyCode = evt.keyCode;
-                                        console.log(keyCode);
-                                        Clients.log(keyCode);
-                                        if (keyCode == 13){
-                                            zk.$("$supplierSearchResult").focus();
-                                            zk.$("$partialName").fireEvent('onSearch', {}, {toServer: true});
-                                            return;
-                                        }
-                                    }
-                                ]]>
-                        </attribute>
-                    </textbox>
-                    <label value="Irányítószám"/>
-                    <textbox instant="true" value="@bind(vm.partialZipCode)" onOK="@command('search')"/>
-                    <toolbarbutton label="Keresés" iconSclass="z-icon-search" onClick="@command('search')"/>
-                    <toolbarbutton label="Mind" iconSclass="z-icon-search-plus" onClick="@command('listAll')"/>
-                </toolbar>
-            </north>
-            <center border="none" flex="true">
-                <listbox id="suppliersSearchResult" vflex="true" model="@load(vm.suppliersDataModel)"
-                         onSelect="@command('onListSelection')"
-                         onDoubleClick="@command('onCloseWindow', target=supplierPopup, select=true)">
-                    <listhead>
-                        <listheader label="Név" align="left"/>
-                    </listhead>
-                    <listfoot>
-                        <listfooter>
-                            <hlayout>
-                                <label value="Találatok: "/>
-                                <label value="@load(vm.suppliersDataModel.resultSetCount)"/>
-                            </hlayout>
-                        </listfooter>
-                    </listfoot>
-                    <template name="model">
-                        <listitem>
-                            <listcell label="@load(each.name)"/>
-                        </listitem>
-                    </template>
-                </listbox>
-            </center>
-            <east title="Adatlap" size="60%" flex="true" splittable="true" collapsible="true">
-                <div class="container u-form-width u-max-form-width">
-                    <div class="row">
-                        <text class="twelve columns" label="ID" field="id"/>
-                    </div>
-                    <div class="row">
-                        <text class="twelve columns" label="Név" field="name"/>
-                    </div>
-                    <div class="row">
-                        <text class="twelve columns" label="Irányítószám" field="zipCode"/>
-                    </div>
-                </div>
-            </east>
-            <south flex="true" style="text-align: right; padding: 10px">
-                <hlayout>
-                    <button label="Bezár" onClick="@command('onCloseWindow', target=supplierPopup, select=false)"
-                    />
-                    <button label="Kiválaszt" onClick="@command('onCloseWindow', target=supplierPopup, select=true)"
-                            disabled="@load(vm.selectedSupplier)"/>
-                </hlayout>
-            </south>
-        </borderlayout>
-    </window>
-</zk>
\ No newline at end of file
similarity index 91%
rename from lis-ui/src/main/resources/web/entity-selector.zul
rename to lis-ui/src/main/resources/web/widget/entity-selector.zul
index 1f712411b0a5958125d596198e7b14b01c017de2..ee5aaf75a1e44fa1c69387cbe1be690dd324cdcb 100644 (file)
@@ -1,6 +1,6 @@
 <zk xmlns:c="client">
     <hlayout viewModel="@id('vmEntity') @init(vm.getEntitySelectorRouter().getEntitySelectorModel(entity))">
-        <bandbox id="entityBandBox" autodrop="true" iconSclass="z-icon-sort-down" hflex="true" mold="rounded"
+        <bandbox id="entityBandBox" autodrop="true" hflex="true" mold="rounded"
                  value="@load(vmEntity.selectedEntity) @converter(vmEntity.displayConverter)"
                  onChanging="@command('onEntityBandChanging')" onOpen="@command('onEntityBandOpen')"
                  forward="onOK=submit.onClick, onCancel=cancel.onClick">
@@ -32,7 +32,7 @@
                             }
                         ]]>
             </attribute>
-            <bandpopup style="background: red" width="400px">
+            <bandpopup width="400px">
                 <listbox id="entityList" height="250px"
                          model="@bind(vmEntity.dataModel)"
                          selectedItem="@bind(vmEntity.selectedEntity)"
@@ -43,7 +43,7 @@
                     </listhead>
                     <template name="model">
                         <listitem>
-                            <listcell label="@load(each.name)"/>
+                            <listcell label="@load(each) @converter(vmEntity.displayConverter)"/>
                         </listitem>
                     </template>
                 </listbox>