Author: bbrossaud Date: 2010-08-19 18:59:02 +0200 (Thu, 19 Aug 2010) New Revision: 53 Url: http://chorem.org/repositories/revision/billy/53 Log: addtion cash Added: trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/SubCategoryListboxMacro.java 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/CategoryController.java trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/DateSearchMacro.java trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/InvoiceController.java trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/SubCategoryModel.java trunk/billy-ui-zk/src/main/webapp/WEB-INF/lang-addon.xml trunk/billy-ui-zk/src/main/webapp/categoryPage.zul trunk/billy-ui-zk/src/main/webapp/invoiceFormPage.zul trunk/billy-ui-zk/src/main/webapp/invoicePage.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-18 15:18:43 UTC (rev 52) +++ trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CashController.java 2010-08-19 16:59:02 UTC (rev 53) @@ -9,6 +9,8 @@ import java.util.List; import java.util.Set; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.chorem.data.bonzoms.Category; import org.chorem.data.bonzoms.Company; import org.chorem.data.bonzoms.Invoice; @@ -32,22 +34,44 @@ public class CashController extends GenericForwardComposer { + private static final Log log = LogFactory.getLog(CashController.class); + protected WikittyProxy proxy = ChoremDataProxy.getInstance(); protected Date startDate = new Date(); protected Date endDate = new Date(); + protected SimpleDateFormat sdfMM = new SimpleDateFormat("MM"); + protected SimpleDateFormat sdfyyyy = new SimpleDateFormat("yyyy"); + protected SimpleDateFormat sdfMMyyyy = new SimpleDateFormat("MMyyy"); + protected Grid cashGrid; @Override public void doAfterCompose(Component comp) throws Exception { super.doAfterCompose(comp); + + initDates(); } + protected void initDates() { + Date date = new Date(); + String year = sdfyyyy.format(date); + try { + Date start = sdfMMyyyy.parse("01" + year); + Date end = sdfMMyyyy.parse("12" + year); + Datebox startDate = (Datebox) self.getFellow("startDatebox"); + startDate.setValue(start); + Datebox endDate = (Datebox) self.getFellow("endDatebox"); + endDate.setValue(end); + } catch (ParseException e) { + log.warn("Cannot init dates"); + } + } + protected int getStartMonth(int currentYear, int startYear) { int startMonth = 1; if (startYear == currentYear) { - SimpleDateFormat sdf = new SimpleDateFormat("MM"); - startMonth = Integer.valueOf(sdf.format(startDate)); + startMonth = Integer.valueOf(sdfMM.format(startDate)); } return startMonth; } @@ -55,8 +79,7 @@ protected int getEndMonth(int currentYear, int endYear) { int endMonth = 12; if (endYear == currentYear) { - SimpleDateFormat sdf = new SimpleDateFormat("MM"); - endMonth = Integer.valueOf(sdf.format(endDate)); + endMonth = Integer.valueOf(sdfMM.format(endDate)); } return endMonth; } @@ -74,9 +97,8 @@ } protected void createHead() { - SimpleDateFormat sdf = new SimpleDateFormat("yyyy"); - String start = sdf.format(startDate); - String end = sdf.format(endDate); + String start = sdfyyyy.format(startDate); + String end = sdfyyyy.format(endDate); int startYear = Integer.valueOf(start); int endYear = Integer.valueOf(end); Columns head = new Columns(); @@ -97,8 +119,7 @@ } NumberFormat nf = new DecimalFormat("00"); String monthStr = nf.format(m); - SimpleDateFormat sdf = new SimpleDateFormat("MMyyy"); - return sdf.parse(monthStr + y); + return sdfMMyyyy.parse(monthStr + y); } protected double createLabelPrice(Date start, Date end, String id, Label label) throws ParseException { @@ -126,9 +147,8 @@ } protected void createLabels(Row row, SubCategory sub, List<Double> total) throws ParseException { - SimpleDateFormat sdf = new SimpleDateFormat("yyyy"); - String start = sdf.format(startDate); - String end = sdf.format(endDate); + String start = sdfyyyy.format(startDate); + String end = sdfyyyy.format(endDate); int startYear = Integer.valueOf(start); int endYear = Integer.valueOf(end); Modified: 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 2010-08-18 15:18:43 UTC (rev 52) +++ trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CategoryController.java 2010-08-19 16:59:02 UTC (rev 53) @@ -30,6 +30,7 @@ protected CategoryModel categoryModel = new CategoryModel(pageSize); protected Paging categoryPaging; + protected SubCategoryListboxMacro subCategoryListboxMacro; @Override public void doAfterCompose(Component comp) throws Exception { @@ -87,6 +88,13 @@ item.appendChild(cell1); Listcell cell2 = new Listcell(category.getType()); item.appendChild(cell2); + item.addEventListener(Events.ON_CLICK, new EventListener() { + + @Override + public void onEvent(Event event) throws Exception { + subCategoryListboxMacro.setCategory(category); + } + }); item.addEventListener(Events.ON_DOUBLE_CLICK, new EventListener() { @Override Modified: trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/DateSearchMacro.java =================================================================== --- trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/DateSearchMacro.java 2010-08-18 15:18:43 UTC (rev 52) +++ trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/DateSearchMacro.java 2010-08-19 16:59:02 UTC (rev 53) @@ -1,8 +1,11 @@ package org.chorem.billy.ui; import java.text.ParseException; +import java.text.SimpleDateFormat; import java.util.Date; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.chorem.data.bonzoms.Invoice; import org.nuiton.wikitty.WikittyUtil; import org.nuiton.wikitty.search.Search; @@ -16,6 +19,7 @@ public class DateSearchMacro extends HtmlMacroComponent { protected int isCheck = 0; + private static final Log log = LogFactory.getLog(DateSearchMacro.class); @Override public void afterCompose() { @@ -23,6 +27,7 @@ initPostedCheck(); initExpectedCheck(); initPaymentCheck(); + initDates(); } protected void initPostedCheck() { @@ -73,6 +78,23 @@ }); } + protected void initDates() { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy"); + Date date = new Date(); + String year = sdf.format(date); + sdf.applyPattern("MMyyyy"); + try { + Date start = sdf.parse("01" + year); + Date end = sdf.parse("12" + year); + Datebox startDate = (Datebox) getFellow("startDate"); + startDate.setValue(start); + Datebox endDate = (Datebox) getFellow("endDate"); + endDate.setValue(end); + } catch (ParseException e) { + log.warn("Cannot init dates"); + } + } + protected void checkPosted(Date start, Date end, Search search) throws ParseException { Checkbox check = (Checkbox) getFellow("postedDate"); if (check.isChecked()) { @@ -118,7 +140,7 @@ } } - public void getSearch(Search search) throws ParseException { + public void getSearch(Search search) { if (search == null) { search = Search.query(); } @@ -130,9 +152,13 @@ Date end = endDate.getValue(); if (start != null || end != null) { Search searchDate = search.or(); - checkPosted(start, end, searchDate); - checkExpected(start, end, searchDate); - checkPayment(start, end, searchDate); + try { + checkPosted(start, end, searchDate); + checkExpected(start, end, searchDate); + checkPayment(start, end, searchDate); + } catch (ParseException e) { + log.warn("Cannot format date (WikittyUtil)"); + } } } } 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-18 15:18:43 UTC (rev 52) +++ trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/InvoiceController.java 2010-08-19 16:59:02 UTC (rev 53) @@ -4,6 +4,7 @@ import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; +import java.util.List; import java.util.Map; import org.chorem.billy.ui.ChoremDataProxy; @@ -22,6 +23,7 @@ import org.zkoss.zk.ui.event.Events; import org.zkoss.zk.ui.event.ForwardEvent; import org.zkoss.zk.ui.util.GenericForwardComposer; +import org.zkoss.zul.Label; import org.zkoss.zul.Listcell; import org.zkoss.zul.Listitem; import org.zkoss.zul.ListitemRenderer; @@ -43,6 +45,9 @@ protected Paging invoicePaging; + protected Label totalHTLabel; + protected Label totalTTCLabel; + @Override public void doAfterCompose(Component comp) throws Exception { super.doAfterCompose(comp); @@ -50,9 +55,29 @@ initPaging(); } + protected void initTotals(Criteria criteria) { + Double totalHT = new Double(0); + Double totalTTC = new Double(0); + boolean stop = false; + for (int index = 0; stop == false; index += 2000) { + Criteria newCriteria = criteria.setFirstIndex(index).setEndIndex(index + 2000); + List<Invoice> invoices = proxy.findAllByCriteria(Invoice.class, newCriteria).getAll(); + for (Invoice invoice : invoices) { + totalHT += invoice.getHTPrice(); + totalTTC += invoice.getTTCPrice(); + } + if (invoices.size() < 2000) { + stop = true; + } + } + totalHTLabel.setValue(totalHT.toString()); + totalTTCLabel.setValue(totalTTC.toString()); + } + protected void initInvoiceModel() { Criteria criteria = Search.query().eq(Element.ELT_EXTENSION, Invoice.EXT_INVOICE).criteria(); invoiceModel.setCriteria(criteria); + initTotals(criteria); } protected void initPaging() { @@ -226,6 +251,7 @@ categorySearchMacro.getSearch(search); Criteria criteria = search.criteria(); invoiceModel.setCriteria(criteria); + initTotals(criteria); initPaging(); } Added: 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 (rev 0) +++ trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/SubCategoryListboxMacro.java 2010-08-19 16:59:02 UTC (rev 53) @@ -0,0 +1,120 @@ +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.nuiton.wikitty.WikittyProxy; +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.Listbox; +import org.zkoss.zul.Listcell; +import org.zkoss.zul.Listitem; +import org.zkoss.zul.ListitemRenderer; + +public class SubCategoryListboxMacro extends HtmlMacroComponent { + + protected WikittyProxy proxy = ChoremDataProxy.getInstance(); + protected Category category = new CategoryImpl(); + protected SubCategoryModel subModel = new SubCategoryModel(); + + @Override + public void afterCompose() { + super.afterCompose(); +// 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 initListbox() { + initSubCategoryModel(); + Listbox listbox = (Listbox) getFellow("subCategoryListbox"); + listbox.setModel(subModel); + ListitemRenderer renderer = getSubCategoryRenderer(); + listbox.setItemRenderer(renderer); + Set<String> ids = category.getSubCategory(); + if (ids != null) { + List<SubCategory> subs = proxy.restore(SubCategory.class, new ArrayList<String>(ids)); + subModel.setSubCategories(subs); + } + } + + 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); + subModel.setSubCategories(subCategories); + } + } + } + + 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); +// } +// } +// }); + } + + + /* + * Renderers + */ + protected 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 { + createSubCategoryFormWindow(sub.getWikittyId()); + } + }); + } + }; + } + + public void setCategory(Category category) { + if (category != null) { + this.category = category; + initListbox(); + } + } +} Modified: trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/SubCategoryModel.java =================================================================== --- trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/SubCategoryModel.java 2010-08-18 15:18:43 UTC (rev 52) +++ trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/SubCategoryModel.java 2010-08-19 16:59:02 UTC (rev 53) @@ -3,6 +3,7 @@ import java.util.ArrayList; import java.util.List; +import org.chorem.data.bonzoms.Invoice; import org.chorem.data.bonzoms.SubCategory; import org.zkoss.zkplus.databind.BindingListModel; import org.zkoss.zul.AbstractListModel; @@ -24,7 +25,16 @@ @Override public int indexOf(Object obj) { - return subCategories.indexOf(obj); + int index = -1; + String id = ((SubCategory) obj).getWikittyId(); + for (SubCategory data : subCategories) { + String dataId = data.getWikittyId(); + if (id.equals(dataId)) { + index = subCategories.indexOf(data); + break; + } + } + return index; } public void setSubCategories(List<SubCategory> subCategories) { Modified: trunk/billy-ui-zk/src/main/webapp/WEB-INF/lang-addon.xml =================================================================== --- trunk/billy-ui-zk/src/main/webapp/WEB-INF/lang-addon.xml 2010-08-18 15:18:43 UTC (rev 52) +++ trunk/billy-ui-zk/src/main/webapp/WEB-INF/lang-addon.xml 2010-08-19 16:59:02 UTC (rev 53) @@ -49,5 +49,11 @@ <component-class>org.chorem.billy.ui.DateSearchMacro</component-class> <macro-uri>macros/dateSearchMacro.zul</macro-uri> </component> + + <component> + <component-name>subCategoryListboxMacro</component-name> + <component-class>org.chorem.billy.ui.SubCategoryListboxMacro</component-class> + <macro-uri>macros/subCategoryListboxMacro.zul</macro-uri> + </component> </language-addon> Modified: trunk/billy-ui-zk/src/main/webapp/categoryPage.zul =================================================================== --- trunk/billy-ui-zk/src/main/webapp/categoryPage.zul 2010-08-18 15:18:43 UTC (rev 52) +++ trunk/billy-ui-zk/src/main/webapp/categoryPage.zul 2010-08-19 16:59:02 UTC (rev 53) @@ -4,11 +4,20 @@ <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" /> + <hbox> + <vbox> + <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" /> + </vbox> + + <vbox> + <subCategoryListboxMacro id="subCategoryListboxMacro" /> + </vbox> + + </hbox> </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-18 15:18:43 UTC (rev 52) +++ trunk/billy-ui-zk/src/main/webapp/invoiceFormPage.zul 2010-08-19 16:59:02 UTC (rev 53) @@ -10,17 +10,18 @@ <hbox> <vbox> - <label value="Payment date" /> - <datebox format="dd/MM/yyyy" value="@{composer.invoice.payment, save-when='saveInvoice.onClick'}" /> - <label value="Expected date" /> - <datebox format="dd/MM/yyyy" value="@{composer.invoice.expected, save-when='saveInvoice.onClick'}" /> + <label value="Posted date" /> <datebox format="dd/MM/yyyy" value="@{composer.invoice.posted, save-when='saveInvoice.onClick'}" /> + <label value="Expected date" /> + <datebox format="dd/MM/yyyy" value="@{composer.invoice.expected, save-when='saveInvoice.onClick'}" /> + + <label value="Payment date" /> + <datebox format="dd/MM/yyyy" value="@{composer.invoice.payment, save-when='saveInvoice.onClick'}" /> + <categoryMacro id="categoryMacro" /> - <companyMacro id="companyMacro" /> - <projectMacro id="projectMacro" /> </vbox> Modified: trunk/billy-ui-zk/src/main/webapp/invoicePage.zul =================================================================== --- trunk/billy-ui-zk/src/main/webapp/invoicePage.zul 2010-08-18 15:18:43 UTC (rev 52) +++ trunk/billy-ui-zk/src/main/webapp/invoicePage.zul 2010-08-19 16:59:02 UTC (rev 53) @@ -3,16 +3,33 @@ <?init class="org.zkoss.zkplus.databind.AnnotateDataBinderInit" root="./invoice"?> <window id="invoice" apply="org.chorem.billy.ui.InvoiceController"> - <vbox> - <separator/> - <dateSearchMacro id="dateSearchMacro" /> - <separator /> - <categorySearchMacro id="categorySearchMacro" /> - <companySearchMacro id="companySearchMacro" /> - <projectSearchMacro id="projectSearchMacro" /> - <button id="searchAll" label="Search" /> - <separator /> - </vbox> + + <hbox> + <vbox> + <separator/> + <dateSearchMacro id="dateSearchMacro" /> + <separator /> + <categorySearchMacro id="categorySearchMacro" /> + <companySearchMacro id="companySearchMacro" /> + <projectSearchMacro id="projectSearchMacro" /> + <button id="searchAll" label="Search" /> + <separator /> + </vbox> + + <space bar="true" height="200px" spacing="50px"/> + + <vbox> + <separator /> + <hbox> + <label value="Total HT :" /> <label id="totalHTLabel"/> + </hbox> + <separator /> + <hbox> + <label value="Total TTC :" /> <label id="totalTTCLabel"/> + </hbox> + </vbox> + + </hbox> Invoices: <toolbarbutton id="newInvoice" label="Add new invoice" /> <listbox id="invoiceListbox" rows="20" model="@{invoice$composer.invoiceModel}" itemRenderer="@{invoice$composer.invoiceRenderer}"> <listhead> Added: trunk/billy-ui-zk/src/main/webapp/macros/subCategoryListboxMacro.zul =================================================================== --- trunk/billy-ui-zk/src/main/webapp/macros/subCategoryListboxMacro.zul (rev 0) +++ trunk/billy-ui-zk/src/main/webapp/macros/subCategoryListboxMacro.zul 2010-08-19 16:59:02 UTC (rev 53) @@ -0,0 +1,8 @@ +<?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> +</zk> \ No newline at end of file