Bug fixes, settings UI extended
authorelgekko <vasary@elgekko.net>
Fri, 11 Aug 2023 06:33:11 +0000 (08:33 +0200)
committerelgekko <vasary@elgekko.net>
Fri, 11 Aug 2023 06:33:11 +0000 (08:33 +0200)
15 files changed:
.idea/misc.xml
.jpb/jpb-settings.xml [new file with mode: 0644]
TODO.txt
lis-db/migrations/README
lis-ui/pom.xml
lis-ui/src/main/java/hu/user/lis/ui/data/ProjectStatusDataModel.java
lis-ui/src/main/java/hu/user/lis/ui/data/ProjectsDataModel.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/view/IndexViewModel.java
lis-ui/src/main/java/hu/user/lis/ui/view/SettingsViewModel.java
lis-ui/src/main/resources/web/editor/associate-editor.zul
lis-ui/src/main/resources/web/editor/project-editor.zul
lis-ui/src/main/resources/web/index.zul
lis-ui/src/main/resources/web/settings.zul

index b0e4237d6930254bc6c68794451c023d25c7cb79..388f741cbfaa202887121e4c7319dc04a284f028 100644 (file)
@@ -1,4 +1,3 @@
-<?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
   <component name="ExternalStorageConfigurationManager" enabled="true" />
   <component name="MavenProjectsManager">
diff --git a/.jpb/jpb-settings.xml b/.jpb/jpb-settings.xml
new file mode 100644 (file)
index 0000000..26124d0
--- /dev/null
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="PersistenceUnitSettings">
+    <persistence-units>
+      <persistence-unit name="Default">
+        <packages>
+          <package value="hu.user.lis.app" />
+        </packages>
+        <entities>
+          <entity value="hu.user.lis.db.Partner" />
+          <entity value="hu.user.lis.db.Project" />
+          <entity value="hu.user.lis.db.Invoice" />
+          <entity value="hu.user.lis.db.Associate" />
+          <entity value="hu.user.lis.db.ProjectAssociate" />
+          <entity value="hu.user.lis.db.ServiceRecord" />
+          <entity value="hu.user.lis.db.ProjectStatus" />
+          <entity value="hu.user.lis.db.EDocument" />
+        </entities>
+      </persistence-unit>
+    </persistence-units>
+  </component>
+</project>
\ No newline at end of file
index 2f9642210661bbd73ae0bd2a3b31462fbdbbdc1e..fdc04c5bda6819be43d25216da520650194da4ad 100644 (file)
--- a/TODO.txt
+++ b/TODO.txt
 * auth/ldap ldap:fds.in.useribm.hu:389,ldaps:fds.useribm.hu:636
 
 *Lista rendezés a projek szerkesztőn belül
--Projekt résztvevő társítás nem eredményez projekt validálást, mentés gomb inaktív marad
--Projekt számla társítás vagy módosítás nem eredményez projekt validálást, mentés gomb inaktív marad
--Modositott treasury mentésre kerül a projekt mentés gomb aktív lesz, de ha mégseme gombot nyomok akkor is megőrződnek a változtatások
--Fájl feltöltes nem műkodik sehol
+*Projekt résztvevő társítás nem eredményez projekt validálást, mentés gomb inaktív marad
+*Projekt számla társítás vagy módosítás nem eredményez projekt validálást, mentés gomb inaktív marad
+*Modositott treasury mentésre kerül a projekt mentés gomb aktív lesz, de ha mégseme gombot nyomok akkor is megőrződnek a változtatások
+*Fájl feltöltes nem műkodik sehol
 
 
 
 autorizacio
-nav
+nav integracio
 szamla erkeztetes camunda: egy felasznalohoz jon be, projekthez lehessen csatolni, projektszanot ellenorizze
 
-
+- legyen felhasználó specifikus beállításokra lehetőség
+- Táblázatok: oszlopszélesség állítható és rendezhető legyen (minden oszlopra) mencse el a felhasználó preferenciához.
 - Számla kiegyenlítés
 - Autentikáció: AD és helyi
-- legyen felhasználó specifikus beállításokra lehetőség
-       - Táblázatok: oszlopszélesség állítható és rendezhető legyen (minden oszlopra) mencse el a felhasználó preferenciához.
 
 - droppable="head" draggable="head" https://zkfiddle.org/sample/4k499d/1-Reorder-Columns-in-Listbox#source-2
 - Minden kívülről leszipkázható adat jöjjön módosítható legyen REST API-n: szla kiegyenlítés, bejövő/kimenő számlák, munkalap
@@ -82,5 +81,27 @@ szamla erkeztetes camunda: egy felasznalohoz jon be, projekthez lehessen csatoln
 - Plugin: lehet egyedi testreszabási igény, de ennek valahogy el kell teljesen különülnie a "core" forráskódtól. Pl. javascript motort be lehetne építeni, a szkriptek pedig meghatározott pontokon lehetnének becsatolva a logikába. Számla részletezés volt a példa (10000EUR számla 3 részletben forintban, kérdés mennyi pl. az utsó számla összege); 10 custom mező, javascripttel futna a custom mezők módosítására.
 
 
+treasury hozzáadása után (project mentés előtt) legyen árrés kalkuláció
+
+XXX 20230817
+--hosszútávon: cégnév v adószám alapján adatok letöltése publikus cégadatbázisból
+--mindenhol lehessen törölni, legfejlebb a db szól
+--project ID - párhuzamos generálás kezelése
+--forintról visszaváltva pl. USD-re reset az áfá-n
+-számla dátumok egyenlőek is lehetnek, a fizetési határidő a legnagyobb (tisztázni pontosan)
+--munkalapnál csak az a projekt jelenjen meg amihez hozzá van rendelve, és a belépett felhasználó
+-a ráfordítás nem veszi figyelembe a munka ráfordítást
+-camunda beepitese: szamla erkeztetes, elszoszor szamlakep csatolas, majd approve
+
+-Schnellbach: NAV-tól letölteni a számlákat
+       számla iktatás funkció: lehúzzuk a nekünk kiállított számlát + pdf csatolás + kézzel projekthez (később találja ki, hogy automatikusan)
+               -queue: néhány kolléga éri
+               -jóváhagyás
+
+
+-zkoss riporting!!
+
+call árpi 14!
+
 
 
index 8dcc3a6f66a4bd87e4eaee04762672b807e8b5b2..154d66b6bfb67324f2db1c529e3ca40689c8acc4 100644 (file)
@@ -48,7 +48,7 @@ Enjoy.
 
 
 DOCKER
-docker run -itd --name lis --privileged=true -p 50000:50000 -e LICENSE=accept -e DB2INSTANCE=db2admin -e DB2INST1_PASSWORD=password -e DBNAME=lis -e PERSISTENT_HOME=true -v /Docker:/database ibmcom/db2
+docker run -itd --name lis --privileged=true -p 50000:50000 -e LICENSE=accept -e DB2INSTANCE=db2admin -e DB2INST1_PASSWORD=password -e DBNAME=lis -e PERSISTENT_HOME=false -v /Docker:/database ibmcom/db2
 docker logs -f lis
 docker exec -it lis bash
 docker stop lis
@@ -56,3 +56,8 @@ docker remove lis
 
 MIGRATE
 migrate new create profile --idpattern=000
+
+
+Move data
+----------
+https://community.ibm.com/community/user/datamanagement/discussion/db2-docker-persistent-volume
\ No newline at end of file
index 91ebb287a22efbfe16aa6338ec3b37579ba00dc5..eaa4fb0432f7c6d8ddd0eacff095ee5ffb08b6a1 100644 (file)
             <artifactId>silvertail</artifactId>
             <version>${zk.version}</version>
         </dependency>
+        <dependency>
+            <groupId>org.zkoss.theme</groupId>
+            <artifactId>breeze</artifactId>
+            <version>${zk.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.zkoss.theme</groupId>
+            <artifactId>iceblue_c</artifactId>
+            <version>${zk.version}</version>
+        </dependency>
         <dependency>
             <groupId>org.zkoss.theme</groupId>
             <artifactId>sapphire</artifactId>
index 0430ad979f5fd9f8b6e50626f8568fdecf405761..cd38b81ec8bf0951d3e0e9cd5b03d7cb772f2285 100644 (file)
@@ -23,10 +23,6 @@ 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;
index 3bc9694d98addd83fd7febbd4d87e906367f38f5..2a881a7b7b14a0831042709bd38857f9549cfedd 100644 (file)
@@ -79,11 +79,9 @@ public class ProjectsDataModel extends CachedSpringDataModel<Project> {
     }
 
     public Project createNew() {
-        String humanId = generateHumanId();
         ProjectStatus projectStatus = projectStatusDataModel.getDefault();
         return Project.builder()
                 .projectStatus(projectStatus)
-                .humanId(humanId)
                 .incomingInvoices(new HashSet<>())
                 .outgoingInvoices(new HashSet<>())
                 .treasuries(new HashSet<>())
@@ -91,7 +89,7 @@ public class ProjectsDataModel extends CachedSpringDataModel<Project> {
                 .build();
     }
 
-    private String generateHumanId() {
+    public String generateHumanId() {
         String yearSearch = String.format("%s-%%", Year.now().getValue());
         Project lastInYear = projectRepository.findFirstByHumanIdLikeOrderByHumanIdDesc(yearSearch);
         int sortOrder = 0;
index 9896ecbe175dec8893e24f87abca27cedabbebc3..ad38e54cec6203c136c4ffaa901394f87c8c226c 100644 (file)
@@ -12,13 +12,14 @@ import lombok.Getter;
 import lombok.Setter;
 import lombok.extern.log4j.Log4j2;
 import org.apache.commons.lang3.StringUtils;
+import org.springframework.transaction.annotation.Transactional;
 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.select.annotation.WireVariable;
 import org.zkoss.zk.ui.util.Clients;
-import org.zkoss.zul.Center;
+import org.zkoss.zk.ui.util.Notification;
 import org.zkoss.zul.Panel;
 import org.zkoss.zul.Window;
 
@@ -88,6 +89,7 @@ public class ProjectEditorModel extends EntityEditorModel<Project> {
     @Init
     public void init() {
         super.init();
+        projectStatusDataModel.listActive();
     }
 
     @AfterCompose
@@ -140,10 +142,25 @@ public class ProjectEditorModel extends EntityEditorModel<Project> {
         associatesDataModel.listAll();
     }
 
+    @Transactional
+    private void saveProject(Component notif) {
+        boolean notify = false;
+        if (Objects.isNull(getFormDocument().getId())) {
+            getFormDocument().setHumanId(projectsDataModel.generateHumanId());
+            notify = true;
+        }
+        projectsDataModel.save(getFormDocument());
+
+        if (notify) {
+            String msg = String.format("Sikeres projekt létrehozás %s azonosítóval.", getFormDocument().getHumanId());
+            Notification.show(msg, "info", notif, "after_start", 3000, true);
+        }
+    }
+
     @Command
-    public void onEndEdit(@BindingParam("target") Window target, @BindingParam("save") boolean save) {
+    public void onEndEdit(@BindingParam("target") Window target, @BindingParam("save") boolean save, @BindingParam("notif") Component notif) {
         if (save && isSaveEnabled()) {
-            projectsDataModel.save(getFormDocument());
+            saveProject(notif);
             if (isAssociatesChanged()) {
                 projectAssociatesDataModel.updateAssociates(getFormDocument(), formAssociates);
             }
@@ -277,14 +294,12 @@ public class ProjectEditorModel extends EntityEditorModel<Project> {
     }
 
     @Command
-    public void onOpenFormPanel(@BindingParam("parentPanel") Center parentPanel) {
-        log.info("Panel open/close");
+    public void onOpenFormPanel(@BindingParam("parentPanel") Component parentPanel) {
         parentPanel.invalidate();
     }
 
     @Command
-    public void onClickFormPanel(@BindingParam("parentPanel") Center parentPanel, @BindingParam("panel") Panel panel) {
-        log.info("Panel click");
+    public void onClickFormPanel(@BindingParam("parentPanel") Component parentPanel, @BindingParam("panel") Panel panel) {
         panel.setOpen(!panel.isOpen());
         parentPanel.invalidate();
     }
index c80c77c6a60a09ce80b8f2e26534a6fd17845a7d..6f657c0a4fc2d505df6abb6ec42820fb3d8982a8 100644 (file)
@@ -3,6 +3,7 @@ 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.auth.CurrentProfile;
 import hu.user.lis.ui.editor.common.EntityEditorModel;
 import lombok.Getter;
 import lombok.Setter;
@@ -13,14 +14,20 @@ import org.zkoss.bind.BindUtils;
 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.time.LocalDate;
+import java.time.ZoneId;
+import java.util.Date;
 import java.util.Objects;
 
 @Log4j2
 @Getter
 @Setter
 public class ServiceRecordEditorModel extends EntityEditorModel<ServiceRecord> {
+    @WireVariable
+    CurrentProfile currentProfile;
 
     @Init
     public void init() {
@@ -29,6 +36,10 @@ public class ServiceRecordEditorModel extends EntityEditorModel<ServiceRecord> {
 
     @AfterCompose
     public void onAfterCompose(@ContextParam(ContextType.VIEW) Component view) {
+        if (Objects.isNull(getFormDocument().getId())) {
+            getFormDocument().setAssociate(currentProfile.getAssociate());
+            getFormDocument().setWorkDay(Date.from(LocalDate.now().atStartOfDay(ZoneId.systemDefault()).toInstant()));
+        }
         getEntitySelectorRouter().setFormDocument(Associate.class, getFormDocument(), "associate");
         getEntitySelectorRouter().setFormDocument(Project.class, getFormDocument(), "project");
     }
index 6309f80f14b0e0eb24cfbed8c69e3f6d3fa94f61..e3a35fe5cd64a2a3c92ea18e4d9ae4c240e14f64 100644 (file)
@@ -43,10 +43,13 @@ public class IndexViewModel implements EventListener {
             Constants.NAV_SERVICE_RECORDS, SERVICE_RECORDS_LIST,
             Constants.NAV_SETTINGS, SETTINGS_LIST
     );
+
     @WireVariable
     BuildProperties buildProperties;
+
     @WireVariable
     SessionSettings sessionSettings;
+
     @WireVariable
     EventBus eventBus;
 
index 0f84d9346b357549290af7f67f568eb867b0c066..17bd88b1b55111ffaa7685a7ce4b1c456007665a 100644 (file)
@@ -8,10 +8,12 @@ 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.zk.ui.Component;
 import org.zkoss.zk.ui.select.annotation.VariableResolver;
 import org.zkoss.zk.ui.select.annotation.WireVariable;
 import org.zkoss.zk.ui.util.Clients;
 import org.zkoss.zkplus.spring.DelegatingVariableResolver;
+import org.zkoss.zul.Panel;
 
 @Log4j2
 @VariableResolver(DelegatingVariableResolver.class)
@@ -19,7 +21,7 @@ public class SettingsViewModel extends AsyncBaseModel {
     @WireVariable
     @Getter
     ProjectStatusDataModel projectStatusDataModel;
-    
+
     @Getter
     private ProjectStatus selectedProjectStatus;
 
@@ -30,6 +32,17 @@ public class SettingsViewModel extends AsyncBaseModel {
         log.info("Initialized");
     }
 
+    @Command
+    public void onOpenFormPanel(@BindingParam("parentPanel") Component parentPanel) {
+        parentPanel.invalidate();
+    }
+
+    @Command
+    public void onClickFormPanel(@BindingParam("parentPanel") Component parentPanel, @BindingParam("panel") Panel panel) {
+        panel.setOpen(!panel.isOpen());
+        parentPanel.invalidate();
+    }
+
     @Command
     public void onMoveUp() {
         projectStatusDataModel.moveUp(selectedProjectStatus);
index 49bbae4fb675c35be8d0c8c41bdc018c15bba183..76112ad28917326b4cd2458ea97241e6348f5a99 100644 (file)
@@ -1,7 +1,7 @@
 <?link rel="stylesheet" type="text/css" href="~./static/css/skeleton.css" ?>
 <?link rel="stylesheet" type="text/css" href="~./static/css/webclient.css" ?>
 <zk>
-    <window id="associatePopup" width="60%" height="400px" closable="true"
+    <window id="associatePopup" width="60%" height="700px" closable="true"
             viewModel="@id('vm') @init('hu.user.lis.ui.editor.AssociateEditorModel')">
         <caption label="Munkatárs szerkesztés"/>
         <borderlayout>
@@ -17,7 +17,7 @@
                                 <label value="Név"/>
                                 <textbox hflex="true" instant="true" value="@bind(vm.formDocument.name) @validator(vm)"
                                          forward="onOK=submit.onClick, onCancel=cancel.onClick"/>
-                                <label value="@load(self.previousSibling)"/>
+                                <!--                                <label value="@load(self.previousSibling)"/>-->
                                 <!--                                <label value="@bind(vmsgs[self.previousSibling])"/>-->
 
                                 <label value="Login"/>
                                            forward="onOK=submit.onClick, onCancel=cancel.onClick"/>
                                 <label value="Aktív"/>
                                 <checkbox mold="switch" checked="@bind(vm.formDocument.active) @validator(vm)"/>
+                                <label value="Jogok"/>
+                                <grid sclass="no-hover-grid" oddRowSclass="none"
+                                      forward="onOK=submit.onClick, onCancel=cancel.onClick">
+                                    <rows>
+                                        <row>
+                                            <checkbox label="Felhasználó adminisztráció" mold="switch" checked="true"/>
+                                            <checkbox label="Számla érkeztetés" mold="switch" checked="true"/>
+                                            <checkbox label="Számla jóváhagyás" mold="switch" checked="true"/>
+                                        </row>
+                                    </rows>
+                                </grid>
+
                             </vlayout>
                         </tabpanel>
                     </tabpanels>
index 79b99600868eff99d7bfcb6c8ddbb1f4f032e443..a54cc74ead31addf493ebc611dc6fc678d16cd3c 100644 (file)
             <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)"/>
+                            onClick="@command('onEndEdit', target=projectEditor, save=false, notif=appHeader)"/>
                     <button id="submit" label="Mentés"
-                            onClick="@command('onEndEdit', target=projectEditor, save=true)"
+                            onClick="@command('onEndEdit', target=projectEditor, save=true, notif=appHeader)"
                             disabled="@bind(not vm.saveEnabled)"/>
                 </hlayout>
             </south>
index 560d21597c10fabcb200de565fc63aeff7123879..a7bbdd8528852ec819180d65cc6d10c8f3660ab7 100644 (file)
@@ -25,7 +25,7 @@
         }
     </script>
     <window vflex="true" viewModel="@id('vm') @init('hu.user.lis.ui.view.IndexViewModel')">
-        <caption sclass="header">
+        <caption sclass="header" id="appHeader">
             <div style="display: block">
                 <div style="display: inline; float: left">
                     <hlayout valign="middle">
index 86ed2724b779ef6649d7b508c83531a4b4db505b..9c298a3b72dd24202848e72ac011075704db976f 100644 (file)
@@ -1,48 +1,57 @@
 <zk>
-    <window vflex="true" viewModel="@id('vm') @init('hu.user.lis.ui.view.SettingsViewModel')">
+    <window id="centerPanel" vflex="true" viewModel="@id('vm') @init('hu.user.lis.ui.view.SettingsViewModel')">
         <caption label="Beállítások"/>
-        <borderlayout>
-            <north flex="true">
-                <toolbar>
 
-                    <toolbarbutton label="Fel mozgat" iconSclass="z-icon-arrow-up" onClick="@command('onMoveDown')"
-                                   disabled="@load(empty vm.selectedProjectStatus)"/>
-                    <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('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">
-                <listbox vflex="true" model="@load(vm.projectStatusDataModel)"
-                         autopaging="true" pagingPosition="top" multiple="false"
-                         selectedItem="@bind(vm.selectedProjectStatus)">
-                    <listhead sizable="true">
-                        <listheader label="Sorrend" align="left"/>
-                        <listheader label="Név" align="left"/>
-                        <listheader label="Aktív" align="left"/>
-                    </listhead>
-                    <template name="model">
-                        <listitem>
-                            <listcell>
-                                <label value="@load(each.order)"/>
-                            </listcell>
-                            <listcell>
-                                <textbox inplace="true" width="100%" value="@bind(each.name)"
-                                         onChange="@command('onProjectStatusChanged', entity=each)"/>
-                            </listcell>
-                            <listcell>
-                                <checkbox checked="@bind(each.active)"
-                                          onCheck="@command('onProjectStatusChanged', entity=each)"/>
-                            </listcell>
-                        </listitem>
-                    </template>
-                </listbox>
+        <panel collapsible="true" open="false" border="rounded"
+               onOpen="@command('onOpenFormPanel', parentPanel=centerPanel)">
+            <caption label="Projekt státusz" style="cursor: pointer"
+                     onClick="@command('onClickFormPanel', parentPanel=centerPanel, panel=self.parent)"/>
+            <panelchildren>
+                <borderlayout height="200px">
+                    <north flex="true">
+                        <toolbar>
+                            <toolbarbutton label="Fel mozgat" iconSclass="z-icon-arrow-up"
+                                           onClick="@command('onMoveDown')"
+                                           disabled="@load(empty vm.selectedProjectStatus)"/>
+                            <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('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">
+                        <listbox vflex="true" model="@load(vm.projectStatusDataModel)"
+                                 autopaging="true" pagingPosition="top" multiple="false"
+                                 selectedItem="@bind(vm.selectedProjectStatus)">
+                            <listhead sizable="true">
+                                <listheader label="Sorrend" align="left"/>
+                                <listheader label="Név" align="left"/>
+                                <listheader label="Aktív" align="left"/>
+                            </listhead>
+                            <template name="model">
+                                <listitem>
+                                    <listcell>
+                                        <label value="@load(each.order)"/>
+                                    </listcell>
+                                    <listcell>
+                                        <textbox inplace="true" width="100%" value="@bind(each.name)"
+                                                 onChange="@command('onProjectStatusChanged', entity=each)"/>
+                                    </listcell>
+                                    <listcell>
+                                        <checkbox checked="@bind(each.active)"
+                                                  onCheck="@command('onProjectStatusChanged', entity=each)"/>
+                                    </listcell>
+                                </listitem>
+                            </template>
+                        </listbox>
 
-            </center>
-        </borderlayout>
+                    </center>
+                </borderlayout>
+            </panelchildren>
+        </panel>
 
     </window>
 </zk>
\ No newline at end of file