Author: bbrossaud Date: 2010-08-13 14:14:25 +0200 (Fri, 13 Aug 2010) New Revision: 49 Url: http://chorem.org/repositories/revision/billy/49 Log: addition creation/edition category Added: trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/BillyController.java trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CategoryController.java trunk/billy-ui-zk/src/main/webapp/billy.zul trunk/billy-ui-zk/src/main/webapp/categoryPage.zul 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/InvoiceController.java trunk/billy-ui-zk/src/main/webapp/WEB-INF/web.xml trunk/billy-ui-zk/src/main/webapp/categoryFormPage.zul trunk/billy-ui-zk/src/main/webapp/invoiceFormPage.zul trunk/billy-ui-zk/src/main/webapp/invoicePage.zul trunk/billy-ui-zk/src/main/webapp/macros/dateSearchMacro.zul Added: trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/BillyController.java =================================================================== --- trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/BillyController.java (rev 0) +++ trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/BillyController.java 2010-08-13 12:14:25 UTC (rev 49) @@ -0,0 +1,25 @@ +package org.chorem.billy.ui; + +import org.zkoss.zk.ui.util.GenericForwardComposer; +import org.zkoss.zul.Include; + +/** + * + * @author bbrossaud + */ +public class BillyController extends GenericForwardComposer { + + protected Include include; + /* + * Events + */ + public void onClick$invoices() { + include.setSrc(null); + include.setSrc("invoicePage.zul"); + } + + public void onClick$categories() { + include.setSrc(null); + include.setSrc("categoryPage.zul"); + } +} Added: trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CategoryController.java =================================================================== --- trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CategoryController.java (rev 0) +++ trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CategoryController.java 2010-08-13 12:14:25 UTC (rev 49) @@ -0,0 +1,120 @@ +package org.chorem.billy.ui; + +import java.util.HashMap; +import java.util.Map; + +import org.chorem.data.bonzoms.Category; +import org.nuiton.wikitty.Criteria; +import org.nuiton.wikitty.WikittyProxy; +import org.nuiton.wikitty.search.Element; +import org.nuiton.wikitty.search.Search; +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.zul.Listcell; +import org.zkoss.zul.Listitem; +import org.zkoss.zul.ListitemRenderer; +import org.zkoss.zul.Paging; +import org.zkoss.zul.Window; +import org.zkoss.zul.event.PagingEvent; + +public class CategoryController extends GenericForwardComposer { + + protected final int pageSize = 20; + + protected WikittyProxy proxy = ChoremDataProxy.getInstance(); + protected CategoryModel categoryModel = new CategoryModel(pageSize); + + protected Paging categoryPaging; + + @Override + public void doAfterCompose(Component comp) throws Exception { + super.doAfterCompose(comp); + initCategoryModel(); + initPaging(); + } + + protected void initCategoryModel() { + Criteria criteria = Search.query().eq(Element.ELT_EXTENSION, Category.EXT_CATEGORY).criteria(); + categoryModel.setCriteria(criteria); + } + + protected void initPaging() { + categoryPaging.setPageSize(pageSize); + int totalSize = categoryModel.getTotalSize(); + categoryPaging.setTotalSize(totalSize); + } + + protected void createCategoryFormWindow(String id) { + Map<String, Object> map = new HashMap<String, Object>(); + if (id != null) { + map.put("categoryId", id); + } + Window win = (Window) Executions.createComponents("categoryFormPage.zul", null, map); + win.addEventListener(CategoryFormController.EVENT_ON_SAVE_CATEGORY, new EventListener() { + + @Override + public void onEvent(Event event) throws Exception { + String id = (String) event.getData(); + Category category = proxy.restore(Category.class, id); + int rowIndex = categoryModel.indexOf(category); + if (rowIndex != -1) { + categoryModel.reloadContent(rowIndex); + } else { + categoryModel.addData(category); + } + int totalSize = categoryModel.getTotalSize(); + categoryPaging.setTotalSize(totalSize); + } + }); + } + + /* + * Renderers + */ + public ListitemRenderer getCategoryRenderer() { + return new ListitemRenderer() { + + @Override + public void render(Listitem item, Object data) throws Exception { + item.setValue(data); + final Category category = (Category) data; + Listcell cell1 = new Listcell(category.getName()); + item.appendChild(cell1); + Listcell cell2 = new Listcell(category.getType()); + item.appendChild(cell2); + item.addEventListener(Events.ON_DOUBLE_CLICK, new EventListener() { + + @Override + public void onEvent(Event event) throws Exception { + createCategoryFormWindow(category.getWikittyId()); + } + }); + } + }; + } + + /* + * Events + */ + public void onClick$newCategory() { + createCategoryFormWindow(null); + } + + public void onPaging$categoryPaging(Event event) { + PagingEvent pagingEvent = (PagingEvent) event; + int activePage = pagingEvent.getActivePage(); + categoryModel.setActivePage(activePage); + } + + /* + * Getters + */ + public CategoryModel getCategoryModel() { + return categoryModel; + } + +} 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-12 16:37:31 UTC (rev 48) +++ trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CategoryFormController.java 2010-08-13 12:14:25 UTC (rev 49) @@ -70,6 +70,9 @@ selectedSubCategory = subCategories.get(0); } } + if (subCategoryModel.getSubCategories().size() == 0) { + onClick$addSubCategory(); + } } protected void saveSubCategories() { @@ -172,16 +175,18 @@ } public void onClick$deleteSubCategory() { - Listitem item = subCategoryListbox.getSelectedItem(); - if (item != null) { - SubCategory subCategory = (SubCategory) item.getValue(); - if (subCategory != null) { - subCategoryModel.removeData(subCategory); - String id = subCategory.getWikittyId(); - if (id != null && !id.isEmpty()) { - removedSubCategories.add(id); + if (subCategoryListbox.getItemCount() > 1) { + Listitem item = subCategoryListbox.getSelectedItem(); + if (item != null) { + SubCategory subCategory = (SubCategory) item.getValue(); + if (subCategory != null) { + subCategoryModel.removeData(subCategory); + String id = subCategory.getWikittyId(); + if (id != null && !id.isEmpty()) { + removedSubCategories.add(id); + } + clearSubCategoryFields(); } - clearSubCategoryFields(); } } } Modified: trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/InvoiceController.java =================================================================== --- trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/InvoiceController.java 2010-08-12 16:37:31 UTC (rev 48) +++ trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/InvoiceController.java 2010-08-13 12:14:25 UTC (rev 49) @@ -27,7 +27,7 @@ import org.zkoss.zul.Window; import org.zkoss.zul.event.PagingEvent; -public class InvoiceController extends GenericForwardComposer{ +public class InvoiceController extends GenericForwardComposer { protected final int pageSize = 20; @@ -127,7 +127,7 @@ Listcell cell = new Listcell(); String str = "-"; if (date != null) { - SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd"); + SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); str = sdf.format(date); } cell.setLabel(str); Modified: trunk/billy-ui-zk/src/main/webapp/WEB-INF/web.xml =================================================================== --- trunk/billy-ui-zk/src/main/webapp/WEB-INF/web.xml 2010-08-12 16:37:31 UTC (rev 48) +++ trunk/billy-ui-zk/src/main/webapp/WEB-INF/web.xml 2010-08-13 12:14:25 UTC (rev 49) @@ -53,7 +53,7 @@ <welcome-file-list> <welcome-file>index.html</welcome-file> - <welcome-file>invoicePage.zul</welcome-file> + <welcome-file>billy.zul</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> Added: trunk/billy-ui-zk/src/main/webapp/billy.zul =================================================================== --- trunk/billy-ui-zk/src/main/webapp/billy.zul (rev 0) +++ trunk/billy-ui-zk/src/main/webapp/billy.zul 2010-08-13 12:14:25 UTC (rev 49) @@ -0,0 +1,19 @@ +<?page id="billy" title="Billy" cacheable="false" language="xul/html" zscriptLanguage="Java"?> +<?meta content="text/html; charset=UTF-8" pageEncoding="UTF-8"?> +<?init class="org.zkoss.zkplus.databind.AnnotateDataBinderInit" root="win"?> + +<window id="win" title="Billy" border="normal" apply="org.chorem.billy.ui.BillyController"> + <hbox> + <groupbox height="800px" > + <caption label="Menu" /> + <vbox> + <toolbarbutton id="invoices" label="Invoices" /> + <toolbarbutton id="categories" label="Categories" /> + </vbox> + </groupbox> + <vbox id="content" > + <separator bar="true" /> + <include id="include" src="invoicePage.zul" /> + </vbox> + </hbox> +</window> \ No newline at end of file Modified: trunk/billy-ui-zk/src/main/webapp/categoryFormPage.zul =================================================================== --- trunk/billy-ui-zk/src/main/webapp/categoryFormPage.zul 2010-08-12 16:37:31 UTC (rev 48) +++ trunk/billy-ui-zk/src/main/webapp/categoryFormPage.zul 2010-08-13 12:14:25 UTC (rev 49) @@ -1,63 +1,68 @@ <?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="390px" width="400px" contentStyle="overflow:auto" apply="org.chorem.billy.ui.CategoryFormController"> +<window closable="true" maximizable="true" sizable="true" height="420px" width="460px" contentStyle="overflow:auto" apply="org.chorem.billy.ui.CategoryFormController"> <caption label="Category" /> - <vbox> - <hbox> - - <groupbox> - <caption id="categoryCaption" label="@{composer.category.name}" /> + <separator /> + <groupbox> + <caption id="categoryCaption" label="@{composer.category.name}" /> + <hbox> <vbox> - <label value="Order"/> <intbox id="categoryOrder" value="@{composer.category.order, save-when='save.onClick'}" /> - + </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> - </groupbox> + </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> - </hbox> + <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'}" /> - <hbox> - - <vbox> - <listbox autopaging="true" mold="paging" rows="10" width="200px" model="@{composer.subCategoryModel}" - itemRenderer="@{composer.subCategoryRenderer}"> - <listhead> - <listheader label="Name" /> - </listhead> - </listbox> - <button id="addSubCategory" label="Add sub category" /> - </vbox> - - <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'}" /> - - </vbox> - </groupbox> - <button id="saveSubCategory" label="Save" /> - - </hbox> + <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" /> Added: trunk/billy-ui-zk/src/main/webapp/categoryPage.zul =================================================================== --- trunk/billy-ui-zk/src/main/webapp/categoryPage.zul (rev 0) +++ trunk/billy-ui-zk/src/main/webapp/categoryPage.zul 2010-08-13 12:14:25 UTC (rev 49) @@ -0,0 +1,14 @@ +<?page id="Category" title="Category" cacheable="false" language="xul/html" zscriptLanguage="Java"?> +<?meta content="text/html; charset=UTF-8" pageEncoding="UTF-8"?> +<?init class="org.zkoss.zkplus.databind.AnnotateDataBinderInit" root="./category"?> + +<window id="category" apply="org.chorem.billy.ui.CategoryController"> + Categories: <toolbarbutton id="newCategory" label="Add new category" /> + <listbox id="categoryListbox" rows="20" model="@{category$composer.categoryModel}" itemRenderer="@{category$composer.categoryRenderer}"> + <listhead> + <listheader label="Name" /> + <listheader label="Type" /> + </listhead> + </listbox> + <paging id="categoryPaging" /> +</window> \ No newline at end of file Modified: trunk/billy-ui-zk/src/main/webapp/invoiceFormPage.zul =================================================================== --- trunk/billy-ui-zk/src/main/webapp/invoiceFormPage.zul 2010-08-12 16:37:31 UTC (rev 48) +++ trunk/billy-ui-zk/src/main/webapp/invoiceFormPage.zul 2010-08-13 12:14:25 UTC (rev 49) @@ -11,11 +11,11 @@ <vbox> <label value="Payment date" /> - <datebox format="yyyy/MM/dd" value="@{composer.invoice.payment, save-when='saveInvoice.onClick'}" /> + <datebox format="dd/MM/yyyy" value="@{composer.invoice.payment, save-when='saveInvoice.onClick'}" /> <label value="Expected date" /> - <datebox format="yyyy/MM/dd" value="@{composer.invoice.expected, save-when='saveInvoice.onClick'}" /> + <datebox format="dd/MM/yyyy" value="@{composer.invoice.expected, save-when='saveInvoice.onClick'}" /> <label value="Posted date" /> - <datebox format="yyyy/MM/dd" value="@{composer.invoice.posted, save-when='saveInvoice.onClick'}" /> + <datebox format="dd/MM/yyyy" value="@{composer.invoice.posted, save-when='saveInvoice.onClick'}" /> <categoryMacro id="categoryMacro" /> Modified: trunk/billy-ui-zk/src/main/webapp/invoicePage.zul =================================================================== --- trunk/billy-ui-zk/src/main/webapp/invoicePage.zul 2010-08-12 16:37:31 UTC (rev 48) +++ trunk/billy-ui-zk/src/main/webapp/invoicePage.zul 2010-08-13 12:14:25 UTC (rev 49) @@ -1,13 +1,9 @@ <?page id="Invoice" title="Invoice" cacheable="false" language="xul/html" zscriptLanguage="Java"?> <?meta content="text/html; charset=UTF-8" pageEncoding="UTF-8"?> -<?init class="org.zkoss.zkplus.databind.AnnotateDataBinderInit" root="invoice"?> +<?init class="org.zkoss.zkplus.databind.AnnotateDataBinderInit" root="./invoice"?> -<window id="invoice" title="Invoice" border="normal" apply="org.chorem.billy.ui.InvoiceController"> +<window id="invoice" apply="org.chorem.billy.ui.InvoiceController"> <vbox> - <toolbarbutton id="newInvoice" label="Add new invoice" /> - </vbox> - <separator bar="true" /> - <vbox> <separator/> <dateSearchMacro id="dateSearchMacro" /> <separator /> @@ -16,20 +12,19 @@ <projectSearchMacro id="projectSearchMacro" /> <separator /> </vbox> - <vbox> - <listbox id="invoiceListbox" rows="20" model="@{invoice$composer.invoiceModel}" itemRenderer="@{invoice$composer.invoiceRenderer}"> - <listhead> - <listheader label="Category"/> - <listheader label="Client"/> - <listheader label="Project"/> - <listheader label="Invoice number"/> - <listheader label="HT price"/> - <listheader label="TTC price"/> - <listheader label="Posted date"/> - <listheader label="Expected date"/> - <listheader label="Payment date"/> - </listhead> - </listbox> - <paging id="invoicePaging"/> - </vbox> + Invoices: <toolbarbutton id="newInvoice" label="Add new invoice" /> + <listbox id="invoiceListbox" rows="20" model="@{invoice$composer.invoiceModel}" itemRenderer="@{invoice$composer.invoiceRenderer}"> + <listhead> + <listheader label="Category"/> + <listheader label="Client"/> + <listheader label="Project"/> + <listheader label="Invoice number"/> + <listheader label="HT price"/> + <listheader label="TTC price"/> + <listheader label="Posted date"/> + <listheader label="Expected date"/> + <listheader label="Payment date"/> + </listhead> + </listbox> + <paging id="invoicePaging"/> </window> \ No newline at end of file Modified: trunk/billy-ui-zk/src/main/webapp/macros/dateSearchMacro.zul =================================================================== --- trunk/billy-ui-zk/src/main/webapp/macros/dateSearchMacro.zul 2010-08-12 16:37:31 UTC (rev 48) +++ trunk/billy-ui-zk/src/main/webapp/macros/dateSearchMacro.zul 2010-08-13 12:14:25 UTC (rev 49) @@ -1,8 +1,8 @@ <?page title="new page title" contentType="text/html;charset=UTF-8"?> <zk> <hbox> - Start date : <datebox id="startDate" /> - End date : <datebox id="endDate" /> + Start date : <datebox format="dd/MM/yyyy" id="startDate" /> + End date : <datebox format="dd/MM/yyyy" id="endDate" /> </hbox> <separator /> <hbox>