Author: bbrossaud Date: 2010-08-23 16:59:35 +0200 (Mon, 23 Aug 2010) New Revision: 55 Url: http://chorem.org/repositories/revision/billy/55 Log: category and subcategory are in the same page Added: trunk/billy-ui-zk/src/main/webapp/subCategoryFormPage.zul Modified: trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CashController.java trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CategoryFormController.java trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/SubCategoryListboxMacro.java trunk/billy-ui-zk/src/main/webapp/categoryFormPage.zul trunk/billy-ui-zk/src/main/webapp/macros/subCategoryListboxMacro.zul Modified: trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CashController.java =================================================================== --- trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CashController.java 2010-08-23 10:30:25 UTC (rev 54) +++ trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CashController.java 2010-08-23 14:59:35 UTC (rev 55) @@ -240,7 +240,7 @@ protected void createGrid() throws ParseException { createHead(); - createRows(); + createRows(); } /* Modified: trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CategoryFormController.java =================================================================== --- trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CategoryFormController.java 2010-08-23 10:30:25 UTC (rev 54) +++ trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CategoryFormController.java 2010-08-23 14:59:35 UTC (rev 55) @@ -1,44 +1,21 @@ package org.chorem.billy.ui; -import java.util.ArrayList; -import java.util.List; -import java.util.Set; - import org.chorem.data.bonzoms.Category; import org.chorem.data.bonzoms.CategoryImpl; -import org.chorem.data.bonzoms.SubCategory; -import org.chorem.data.bonzoms.SubCategoryImpl; import org.nuiton.wikitty.WikittyProxy; import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.Executions; -import org.zkoss.zk.ui.event.Event; -import org.zkoss.zk.ui.event.EventListener; import org.zkoss.zk.ui.event.Events; import org.zkoss.zk.ui.util.GenericForwardComposer; import org.zkoss.zkplus.databind.AnnotateDataBinder; import org.zkoss.zkplus.databind.DataBinder; -import org.zkoss.zul.Bandbox; -import org.zkoss.zul.Caption; -import org.zkoss.zul.Intbox; -import org.zkoss.zul.Listbox; -import org.zkoss.zul.Listcell; -import org.zkoss.zul.Listitem; -import org.zkoss.zul.ListitemRenderer; -import org.zkoss.zul.Textbox; import org.zkoss.zul.Window; public class CategoryFormController extends GenericForwardComposer { protected WikittyProxy proxy = ChoremDataProxy.getInstance(); - protected Category category = new CategoryImpl(); - protected SubCategory selectedSubCategory = null; - protected SubCategoryModel subCategoryModel = new SubCategoryModel(); - protected List<String> removedSubCategories = new ArrayList<String>(); - protected Bandbox categoryBandbox; - protected Listbox subCategoryListbox; - public static final String EVENT_ON_SAVE_CATEGORY = "onSaveCategory"; @Override @@ -54,155 +31,24 @@ if (categoryId != null) { category = proxy.restore(Category.class, categoryId); } - initSubCategoryModel(); DataBinder binder = new AnnotateDataBinder(comp); binder.bindBean("composer", this); binder.loadAll(); } - protected void initSubCategoryModel() { - Set<String> ids = category.getSubCategory(); - if (ids != null && !ids.isEmpty()) { - List<SubCategory> subCategories = proxy.restore(SubCategory.class, new ArrayList<String>(ids)); - if (subCategories != null) { - subCategories = new ArrayList<SubCategory>(subCategories); - subCategoryModel.setSubCategories(subCategories); - selectedSubCategory = subCategories.get(0); - } - } - if (subCategoryModel.getSubCategories().size() == 0) { - onClick$addSubCategory(); - } - } - - protected void saveSubCategories() { - List<SubCategory> subcategories = proxy.store(subCategoryModel.getSubCategories()); - for (SubCategory subCategory : subcategories) { - category.addSubCategory(subCategory.getWikittyId()); - } - if (!removedSubCategories.isEmpty()) { - proxy.delete(removedSubCategories); - for (String id : removedSubCategories) { - category.removeSubCategory(id); - } - } - } - - protected void fillSubCategoryFields() { - if (selectedSubCategory != null) { - Caption caption = (Caption) self.getFellow("subCategoryCaption"); - caption.setLabel(selectedSubCategory.getName()); - - Intbox intbox = (Intbox) self.getFellow("subCategoryOrder"); - intbox.setValue(selectedSubCategory.getOrder()); - - Textbox textbox = (Textbox) self.getFellow("subCategoryName"); - textbox.setValue(selectedSubCategory.getName()); - - textbox = (Textbox) self.getFellow("subCategoryAccountNumber"); - textbox.setValue(selectedSubCategory.getAccountNumber()); - - textbox = (Textbox) self.getFellow("subCategoryTVA"); - textbox.setValue(selectedSubCategory.getTVA()); - } - } - - protected void clearSubCategoryFields() { - Caption caption = (Caption) self.getFellow("subCategoryCaption"); - caption.setLabel(""); - - Intbox intbox = (Intbox) self.getFellow("subCategoryOrder"); - intbox.setValue(-1); - - Textbox textbox = (Textbox) self.getFellow("subCategoryName"); - textbox.setValue(""); - - textbox = (Textbox) self.getFellow("subCategoryAccountNumber"); - textbox.setValue(""); - - textbox = (Textbox) self.getFellow("subCategoryTVA"); - textbox.setValue(""); - } - /* - * Renderers - */ - public ListitemRenderer getSubCategoryRenderer() { - return new ListitemRenderer() { - - @Override - public void render(Listitem item, Object data) throws Exception { - item.setValue(data); - final SubCategory sub = (SubCategory) data; - Listcell name = new Listcell(sub.getName()); - item.appendChild(name); - item.addEventListener(Events.ON_DOUBLE_CLICK, new EventListener() { - - @Override - public void onEvent(Event event) throws Exception { - selectedSubCategory = sub; - fillSubCategoryFields(); - } - }); - } - }; - } - - /* * Events */ - public void onClick$addSubCategory() { - selectedSubCategory = new SubCategoryImpl(); - selectedSubCategory.setName("New sub category"); - subCategoryModel.addData(selectedSubCategory); - fillSubCategoryFields(); - } - - public void onClick$saveSubCategory() { - if (selectedSubCategory != null) { - int rowIndex = subCategoryModel.indexOf(selectedSubCategory); - if (rowIndex != -1) { - subCategoryModel.reloadContent(rowIndex, selectedSubCategory); - } - } - } - public void onClick$save() { - saveSubCategories(); - proxy.store(category); + category = proxy.store(category); Events.postEvent(EVENT_ON_SAVE_CATEGORY, this.self, category.getWikittyId()); this.self.detach(); } - public void onClick$deleteSubCategory() { - if (subCategoryListbox.getItemCount() > 1) { - Listitem item = subCategoryListbox.getSelectedItem(); - if (item != null) { - SubCategory subCategory = (SubCategory) item.getValue(); - if (subCategory != null) { - subCategoryModel.removeData(subCategory); - String version = subCategory.getWikittyVersion(); - if (version != null && !version.equals("0.1")) { - removedSubCategories.add(subCategory.getWikittyId()); - } - clearSubCategoryFields(); - } - } - } - } - /* * Getters */ - public SubCategoryModel getSubCategoryModel() { - return subCategoryModel; - } - public Category getCategory() { return category; } - - public SubCategory getSelectedSubCategory() { - return selectedSubCategory; - } } Modified: trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/SubCategoryListboxMacro.java =================================================================== --- trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/SubCategoryListboxMacro.java 2010-08-23 10:30:25 UTC (rev 54) +++ trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/SubCategoryListboxMacro.java 2010-08-23 14:59:35 UTC (rev 55) @@ -1,21 +1,27 @@ package org.chorem.billy.ui; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Set; import org.chorem.data.bonzoms.Category; import org.chorem.data.bonzoms.CategoryImpl; +import org.chorem.data.bonzoms.ExpenseReportItem; import org.chorem.data.bonzoms.SubCategory; import org.nuiton.wikitty.WikittyProxy; +import org.zkoss.zk.ui.Executions; import org.zkoss.zk.ui.HtmlMacroComponent; import org.zkoss.zk.ui.event.Event; import org.zkoss.zk.ui.event.EventListener; import org.zkoss.zk.ui.event.Events; +import org.zkoss.zul.Button; import org.zkoss.zul.Listbox; import org.zkoss.zul.Listcell; import org.zkoss.zul.Listitem; import org.zkoss.zul.ListitemRenderer; +import org.zkoss.zul.Window; public class SubCategoryListboxMacro extends HtmlMacroComponent { @@ -26,20 +32,42 @@ @Override public void afterCompose() { super.afterCompose(); -// initButton(); + initButton(); initListbox(); } -// protected void initButton() { -// Toolbarbutton button = (Toolbarbutton) getFellow("newSubCategory"); -// button.addEventListener(Events.ON_CLICK, new EventListener() { -// -// @Override -// public void onEvent(Event event) throws Exception { -// createSubCategoryFormWindow(null); -// } -// }); -// } + protected void initButton() { + Button button = (Button) getFellow("deleteSubCategory"); + button.addEventListener(Events.ON_CLICK, new EventListener() { + + @Override + public void onEvent(Event event) throws Exception { + if (subModel.getSize() > 1) { + Listbox listbox = (Listbox) getFellow("subCategoryListbox"); + Listitem item = listbox.getSelectedItem(); + if (item != null) { + SubCategory sub = (SubCategory) item.getValue(); + if (sub != null) { + subModel.removeData(sub); + String id = sub.getWikittyId(); + proxy.delete(id); + category.removeSubCategory(id); + category = proxy.store(category); + listbox.setSelectedIndex(0); + } + } + } + } + }); + Button newItem = (Button) getFellow("newSubCategory"); + newItem.addEventListener(Events.ON_CLICK, new EventListener() { + + @Override + public void onEvent(Event event) throws Exception { + createSubCategoryFormWindow(null); + } + }); + } protected void initListbox() { initSubCategoryModel(); @@ -66,25 +94,27 @@ } protected void createSubCategoryFormWindow(String id) { -// Map<String, Object> map = new HashMap<String, Object>(); -// if (id != null) { -// map.put("subCategoryId", id); -// } -// Window win = (Window) Executions.createComponents("subCategoryFormPage.zul", null, map); -// win.addEventListener(SubCategoryFormController.EVENT_ON_SAVE_SUBCATEGORY, new EventListener() { -// -// @Override -// public void onEvent(Event event) throws Exception { -// String id = (String) event.getData(); -// SubCategory sub = proxy.restore(SubCategory.class, id); -// int rowIndex = subModel.indexOf(sub); -// if (rowIndex != -1) { -// subModel.reloadContent(rowIndex); -// } else { -// subModel.addData(sub); -// } -// } -// }); + Map<String, Object> map = new HashMap<String, Object>(); + if (id != null) { + map.put("subCategoryId", id); + } + Window win = (Window) Executions.createComponents("subCategoryFormPage.zul", null, map); + win.addEventListener(SubCategoryFormController.EVENT_ON_SAVE_SUBCATEGORY, new EventListener() { + + @Override + public void onEvent(Event event) throws Exception { + String id = (String) event.getData(); + category.addSubCategory(id); + SubCategory sub = proxy.restore(SubCategory.class, id); + int rowIndex = subModel.indexOf(sub); + if (rowIndex != -1) { + subModel.reloadContent(rowIndex, sub); + } else { + subModel.addData(sub); + category = proxy.store(category); + } + } + }); } Modified: trunk/billy-ui-zk/src/main/webapp/categoryFormPage.zul =================================================================== --- trunk/billy-ui-zk/src/main/webapp/categoryFormPage.zul 2010-08-23 10:30:25 UTC (rev 54) +++ trunk/billy-ui-zk/src/main/webapp/categoryFormPage.zul 2010-08-23 14:59:35 UTC (rev 55) @@ -1,66 +1,25 @@ <?page id="contract" title="Contract" cacheable="false" language="xul/html" zscriptLanguage="Java"?> <?meta content="text/html; charset=UTF-8" pageEncoding="UTF-8"?> -<window closable="true" maximizable="true" sizable="true" height="420px" width="460px" contentStyle="overflow:auto" apply="org.chorem.billy.ui.CategoryFormController"> -<caption label="Category" /> - <vbox> - <separator /> - <groupbox> - <caption id="categoryCaption" label="@{composer.category.name}" /> - <hbox> - <space /> - <vbox> - <label value="Name"/> - <textbox id="categoryName" value="@{composer.category.name, save-when='save.onClick'}" /> - </vbox> - <space /> - <vbox> - <label value="Type" /> - <textbox id="categoryType" value="@{composer.category.type, save-when='save.onClick'}" /> - </vbox> - </hbox> - </groupbox> - <separator /> - <groupbox> - <caption label="Sub categories" /> - <hbox> - <vbox> - <separator /> - <listbox id="subCategoryListbox" autopaging="true" mold="paging" rows="10" width="200px" model="@{composer.subCategoryModel}" - itemRenderer="@{composer.subCategoryRenderer}"> - <listhead> - <listheader label="Name" /> - </listhead> - </listbox> - <hbox> - <button id="addSubCategory" label="Add" /> - <button id="deleteSubCategory" label="Delete" /> - </hbox> - </vbox> +<window closable="true" maximizable="true" sizable="true" height="230px" width="200px" contentStyle="overflow:auto" apply="org.chorem.billy.ui.CategoryFormController"> + <caption label="Category" /> + <separator /> + <groupbox> + <caption id="categoryCaption" label="@{composer.category.name}" /> + <vbox> + <space /> + <vbox> + <label value="Name"/> + <textbox id="categoryName" value="@{composer.category.name, save-when='save.onClick'}" /> + </vbox> + <space /> + <vbox> + <label value="Type" /> + <textbox id="categoryType" value="@{composer.category.type, save-when='save.onClick'}" /> + </vbox> + </vbox> + </groupbox> - <space /> - - <groupbox> - <caption id="subCategoryCaption" label="@{composer.selectedSubCategory.name, save-when='saveSubCategory.onClick'}" /> - <vbox> - <label value="Order"/> - <intbox id="subCategoryOrder" value="@{composer.selectedSubCategory.order, save-when='saveSubCategory.onClick'}" /> - - <label value="Name"/> - <textbox id="subCategoryName" value="@{composer.selectedSubCategory.name, save-when='saveSubCategory.onClick'}" /> - - <label value="Account number" /> - <textbox id="subCategoryAccountNumber" value="@{composer.selectedSubCategory.accountNumber, save-when='saveSubCategory.onClick'}" /> - - <label value="TVA" /> - <textbox id="subCategoryTVA" value="@{composer.selectedSubCategory.TVA, save-when='saveSubCategory.onClick'}" /> - <toolbarbutton id="saveSubCategory" label="Save" /> - </vbox> - </groupbox> - </hbox> - </groupbox> - </vbox> - <button id="save" label="Save and quit" /> </window> \ No newline at end of file Modified: trunk/billy-ui-zk/src/main/webapp/macros/subCategoryListboxMacro.zul =================================================================== --- trunk/billy-ui-zk/src/main/webapp/macros/subCategoryListboxMacro.zul 2010-08-23 10:30:25 UTC (rev 54) +++ trunk/billy-ui-zk/src/main/webapp/macros/subCategoryListboxMacro.zul 2010-08-23 14:59:35 UTC (rev 55) @@ -1,8 +1,14 @@ <?page title="new page title" contentType="text/html;charset=UTF-8"?> <zk> - <listbox id="subCategoryListbox" autopaging="true" mold="paging" rows="20"> - <listhead> - <listheader label="Name" /> - </listhead> - </listbox> + <vbox> + <listbox id="subCategoryListbox" autopaging="true" mold="paging" rows="20"> + <listhead> + <listheader label="Name" /> + </listhead> + </listbox> + <hbox> + <button id="newSubCategory" label="Add new sub category" /> + <button id="deleteSubCategory" label="Delete sub category" /> + </hbox> + </vbox> </zk> \ No newline at end of file Added: trunk/billy-ui-zk/src/main/webapp/subCategoryFormPage.zul =================================================================== --- trunk/billy-ui-zk/src/main/webapp/subCategoryFormPage.zul (rev 0) +++ trunk/billy-ui-zk/src/main/webapp/subCategoryFormPage.zul 2010-08-23 14:59:35 UTC (rev 55) @@ -0,0 +1,19 @@ +<?page title="new page title" contentType="text/html;charset=UTF-8"?> + +<window closable="true" maximizable="true" sizable="true" height="200px" width="200px" contentStyle="overflow:auto" apply="org.chorem.billy.ui.SubCategoryFormController"> + <caption label="Sub category" /> + <groupbox> + <caption label="@{composer.subCategory.name, save-when='saveSubCategory.onClick'}" /> + <vbox> + <label value="Name"/> + <textbox id="subCategoryName" value="@{composer.subCategory.name, save-when='saveSubCategory.onClick'}" /> + + <label value="Account number" /> + <textbox id="subCategoryAccountNumber" value="@{composer.subCategory.accountNumber, save-when='saveSubCategory.onClick'}" /> + + <label value="TVA" /> + <textbox id="subCategoryTVA" value="@{composer.subCategory.TVA, save-when='saveSubCategory.onClick'}" /> + </vbox> + </groupbox> + <button id="saveSubCategory" label="Save" /> +</window>