Billy-commits
Threads by month
- ----- 2026 -----
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
August 2010
- 2 participants
- 18 discussions
r52 - in trunk: . billy-ui-zk/src/main/java/org/chorem/billy/ui billy-ui-zk/src/main/webapp
by bbrossaud@users.chorem.org 18 Aug '10
by bbrossaud@users.chorem.org 18 Aug '10
18 Aug '10
Author: bbrossaud
Date: 2010-08-18 17:18:43 +0200 (Wed, 18 Aug 2010)
New Revision: 52
Url: http://chorem.org/repositories/revision/billy/52
Log:
addition cash
Added:
trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CashController.java
trunk/billy-ui-zk/src/main/webapp/cashPage.zul
Modified:
trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/BillyController.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/InvoiceController.java
trunk/billy-ui-zk/src/main/webapp/billy.zul
trunk/pom.xml
Modified: 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 2010-08-16 10:15:57 UTC (rev 51)
+++ trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/BillyController.java 2010-08-18 15:18:43 UTC (rev 52)
@@ -22,4 +22,9 @@
include.setSrc(null);
include.setSrc("categoryPage.zul");
}
+
+ public void onClick$cash() {
+ include.setSrc(null);
+ include.setSrc("cashPage.zul");
+ }
}
Added: 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 (rev 0)
+++ trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CashController.java 2010-08-18 15:18:43 UTC (rev 52)
@@ -0,0 +1,242 @@
+package org.chorem.billy.ui;
+
+import java.text.DecimalFormat;
+import java.text.NumberFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Set;
+
+import org.chorem.data.bonzoms.Category;
+import org.chorem.data.bonzoms.Company;
+import org.chorem.data.bonzoms.Invoice;
+import org.chorem.data.bonzoms.SubCategory;
+import org.nuiton.wikitty.Criteria;
+import org.nuiton.wikitty.WikittyProxy;
+import org.nuiton.wikitty.WikittyUtil;
+import org.nuiton.wikitty.search.Element;
+import org.nuiton.wikitty.search.Search;
+import org.zkoss.zk.ui.Component;
+import org.zkoss.zk.ui.util.GenericForwardComposer;
+import org.zkoss.zul.Column;
+import org.zkoss.zul.Columns;
+import org.zkoss.zul.Datebox;
+import org.zkoss.zul.Grid;
+import org.zkoss.zul.Group;
+import org.zkoss.zul.Groupfoot;
+import org.zkoss.zul.Label;
+import org.zkoss.zul.Row;
+import org.zkoss.zul.Rows;
+
+public class CashController extends GenericForwardComposer {
+
+ protected WikittyProxy proxy = ChoremDataProxy.getInstance();
+ protected Date startDate = new Date();
+ protected Date endDate = new Date();
+
+ protected Grid cashGrid;
+
+ @Override
+ public void doAfterCompose(Component comp) throws Exception {
+ super.doAfterCompose(comp);
+ }
+
+ protected int getStartMonth(int currentYear, int startYear) {
+ int startMonth = 1;
+ if (startYear == currentYear) {
+ SimpleDateFormat sdf = new SimpleDateFormat("MM");
+ startMonth = Integer.valueOf(sdf.format(startDate));
+ }
+ return startMonth;
+ }
+
+ protected int getEndMonth(int currentYear, int endYear) {
+ int endMonth = 12;
+ if (endYear == currentYear) {
+ SimpleDateFormat sdf = new SimpleDateFormat("MM");
+ endMonth = Integer.valueOf(sdf.format(endDate));
+ }
+ return endMonth;
+ }
+
+ protected void createHeaders(int startYear, int currentYear, int endYear, Columns head) {
+ NumberFormat nf = new DecimalFormat("00");
+ int startMonth = getStartMonth(startYear, currentYear);
+ int endMonth = getEndMonth(currentYear, endYear);
+ while (startMonth <= endMonth) {
+ String label = nf.format(startMonth) + "/" + currentYear;
+ Column header = new Column(label);
+ head.appendChild(header);
+ ++startMonth;
+ }
+ }
+
+ protected void createHead() {
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy");
+ String start = sdf.format(startDate);
+ String end = sdf.format(endDate);
+ int startYear = Integer.valueOf(start);
+ int endYear = Integer.valueOf(end);
+ Columns head = new Columns();
+ cashGrid.appendChild(head);
+ Column header = new Column("Categories");
+ head.appendChild(header);
+ for (int currentYear = startYear; currentYear <= endYear; ++currentYear) {
+ createHeaders(startYear, currentYear, endYear, head);
+ }
+ }
+
+ protected Date getDate(int year, final int month) throws ParseException {
+ int m = month;
+ int y = year;
+ if (month > 12) {
+ m = 0;
+ ++y;
+ }
+ NumberFormat nf = new DecimalFormat("00");
+ String monthStr = nf.format(m);
+ SimpleDateFormat sdf = new SimpleDateFormat("MMyyy");
+ return sdf.parse(monthStr + y);
+ }
+
+ protected double createLabelPrice(Date start, Date end, String id, Label label) throws ParseException {
+ Double price = new Double(0);
+ String first = WikittyUtil.formatDate(start);
+ String last = WikittyUtil.formatDate(end);
+ Search search = Search.query().eq(Invoice.FQ_FIELD_INVOICE_SUBCATEGORY, id);
+ search = search.lt(Invoice.FQ_FIELD_INVOICE_PAYMENT, last).ge(Invoice.FQ_FIELD_INVOICE_PAYMENT, first);
+ Criteria criteria = search.criteria();
+ List<Invoice> invoices = proxy.findAllByCriteria(Invoice.class, criteria).getAll();
+ String toolTips = "";
+ for (Invoice invoice : invoices) {
+ Double ttc = invoice.getTTCPrice();
+ Company company = proxy.restore(Company.class, invoice.getCompany());
+ if (company != null) {
+ toolTips += company.getName();
+ }
+ toolTips += " " + invoice.getNumber() + " = " + invoice.getTTCPrice() + " | ";
+ if (ttc != null) {
+ price += ttc;
+ }
+ }
+ label.setTooltiptext(toolTips);
+ return price;
+ }
+
+ 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);
+ int startYear = Integer.valueOf(start);
+ int endYear = Integer.valueOf(end);
+
+ for (int currentYear = startYear; currentYear <= endYear; ++currentYear) {
+
+ int startMonth = getStartMonth(startYear, currentYear);
+ int endMonth = getEndMonth(currentYear, endYear);
+
+ for (int count = 0; startMonth <= endMonth; ++count) {
+ Label label = new Label();
+ Date first = getDate(currentYear, startMonth);
+ Date last = getDate(currentYear, startMonth + 1);
+ Double price = createLabelPrice(first, last, sub.getWikittyId(), label);
+ label.setValue(price.toString());
+ row.appendChild(label);
+ if (total.size() < (count + 1)) {
+ total.add(price);
+ } else {
+ Double tmp = total.get(count);
+ tmp += price;
+ total.set(count, tmp);
+ }
+ ++startMonth;
+ }
+ }
+ }
+
+ protected void createSubRows(List<String> ids, List<Double> total, Rows rows) throws ParseException {
+ List<SubCategory> subs = proxy.restore(SubCategory.class, ids);
+ subs = new ArrayList<SubCategory>(subs);
+ for (SubCategory sub : subs) {
+ Row row = new Row();
+ rows.appendChild(row);
+ Label label = new Label(sub.getName());
+ row.appendChild(label);
+ createLabels(row, sub, total);
+
+ }
+ }
+
+ protected void createRows() throws ParseException {
+ Criteria criteria = Search.query().eq(Element.ELT_EXTENSION, Category.EXT_CATEGORY).criteria();
+ criteria = criteria.addSortDescending(Category.FQ_FIELD_CATEGORY_ORDER);
+ List<Category> categories = proxy.findAllByCriteria(Category.class, criteria).getAll();
+ List<Double> total = new ArrayList<Double>();
+ Rows rows = new Rows();
+ cashGrid.appendChild(rows);
+ for (Category category : categories) {
+ Group group = new Group();
+ Label groupLabel = new Label(category.getName());
+ groupLabel.setStyle("font-weight: bold");
+ group.appendChild(groupLabel);
+ rows.appendChild(group);
+ Set<String> ids = category.getSubCategory();
+ if (ids != null) {
+ List<Double> prices = new ArrayList<Double>();
+ createSubRows(new ArrayList<String>(ids), prices, rows);
+ int count = 0;
+ for (Double price : prices) {
+ if (total.size() < (count + 1)) {
+ total.add(price);
+ } else {
+ Double tmp = total.get(count);
+ tmp += price;
+ total.set(count, tmp);
+ }
+ Label label = new Label(price.toString());
+ label.setStyle("font-weight: bold");
+ group.appendChild(label);
+ ++count;
+ }
+ }
+ }
+ createTotal(total, rows);
+ }
+
+ protected void createTotal(List<Double> totals, Rows rows) {
+ Groupfoot foot = new Groupfoot();
+ rows.appendChild(foot);
+ Label label = new Label("Total");
+ label.setStyle("font-weight: bold");
+ foot.appendChild(label);
+ for (Double total : totals) {
+ Label totalLabel = new Label(total.toString());
+ totalLabel.setStyle("font-weight: bold");
+ foot.appendChild(totalLabel);
+ }
+ }
+
+ protected void createGrid() throws ParseException {
+ createHead();
+ createRows();
+ }
+
+ /*
+ * Events
+ */
+ public void onClick$search() throws ParseException {
+ List<?> comps = cashGrid.getChildren();
+ if (comps != null && !comps.isEmpty()) {
+ comps.clear();
+ }
+ Datebox date = (Datebox) self.getFellow("startDatebox");
+ startDate = date.getValue();
+ date = (Datebox) self.getFellow("endDatebox");
+ endDate = date.getValue();
+ if (startDate != null && endDate != null) {
+ createGrid();
+ }
+ }
+}
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-16 10:15:57 UTC (rev 51)
+++ trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CategoryFormController.java 2010-08-18 15:18:43 UTC (rev 52)
@@ -181,9 +181,9 @@
SubCategory subCategory = (SubCategory) item.getValue();
if (subCategory != null) {
subCategoryModel.removeData(subCategory);
- String id = subCategory.getWikittyId();
- if (id != null && !id.isEmpty()) {
- removedSubCategories.add(id);
+ String version = subCategory.getWikittyVersion();
+ if (version != null && !version.equals("0.1")) {
+ removedSubCategories.add(subCategory.getWikittyId());
}
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-16 10:15:57 UTC (rev 51)
+++ trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/InvoiceController.java 2010-08-18 15:18:43 UTC (rev 52)
@@ -9,8 +9,8 @@
import org.chorem.billy.ui.ChoremDataProxy;
import org.chorem.data.bonzoms.Company;
import org.chorem.data.bonzoms.Invoice;
-import org.chorem.data.bonzoms.Category;
import org.chorem.data.bonzoms.Project;
+import org.chorem.data.bonzoms.SubCategory;
import org.nuiton.wikitty.Criteria;
import org.nuiton.wikitty.WikittyProxy;
import org.nuiton.wikitty.search.Element;
@@ -65,10 +65,9 @@
Listcell cell = new Listcell();
String id = invoice.getSubCategory();
if (id != null && !id.isEmpty()) {
- Criteria criteria = Search.query().contains(Category.FQ_FIELD_CATEGORY_SUBCATEGORY, id).criteria();
- Category category = proxy.findByCriteria(Category.class, criteria);
- if (category != null) {
- String name = category.getName();
+ SubCategory sub = proxy.restore(SubCategory.class, id);
+ if (sub != null) {
+ String name = sub.getName();
if (name == null) {
name = "";
}
Modified: trunk/billy-ui-zk/src/main/webapp/billy.zul
===================================================================
--- trunk/billy-ui-zk/src/main/webapp/billy.zul 2010-08-16 10:15:57 UTC (rev 51)
+++ trunk/billy-ui-zk/src/main/webapp/billy.zul 2010-08-18 15:18:43 UTC (rev 52)
@@ -9,6 +9,7 @@
<vbox>
<toolbarbutton id="invoices" label="Invoices" />
<toolbarbutton id="categories" label="Categories" />
+ <toolbarbutton id="cash" label="Cash" />
</vbox>
</groupbox>
<vbox id="content" >
Added: trunk/billy-ui-zk/src/main/webapp/cashPage.zul
===================================================================
--- trunk/billy-ui-zk/src/main/webapp/cashPage.zul (rev 0)
+++ trunk/billy-ui-zk/src/main/webapp/cashPage.zul 2010-08-18 15:18:43 UTC (rev 52)
@@ -0,0 +1,17 @@
+<?page id="Cash" title="Cash" 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="./cash"?>
+
+<window id="cash" apply="org.chorem.billy.ui.CashController">
+
+ <vbox>
+ <hbox>
+ Start : <datebox id="startDatebox" format="MM/yyyy"/> <space /> <space /> End : <datebox id="endDatebox" format="MM/yyyy" />
+ </hbox>
+ <button id="search" label="Search" />
+ </vbox>
+
+ <grid id="cashGrid">
+ </grid>
+
+</window>
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2010-08-16 10:15:57 UTC (rev 51)
+++ trunk/pom.xml 2010-08-18 15:18:43 UTC (rev 52)
@@ -229,7 +229,7 @@
<platform>chorem.org</platform>
<chorem-data.version>0.1-SNAPSHOT</chorem-data.version>
- <zk.version>5.0.2</zk.version>
+ <zk.version>5.0.3</zk.version>
<wikitty.version>2.1-SNAPSHOT</wikitty.version>
<!-- Nuiton librairies -->
1
0
r51 - in trunk/billy-ui-zk/src/main: java/org/chorem/billy/ui webapp
by bbrossaud@users.chorem.org 16 Aug '10
by bbrossaud@users.chorem.org 16 Aug '10
16 Aug '10
Author: bbrossaud
Date: 2010-08-16 12:15:57 +0200 (Mon, 16 Aug 2010)
New Revision: 51
Url: http://chorem.org/repositories/revision/billy/51
Log:
the invoice search is ready
Modified:
trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CategorySearchMacro.java
trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CompanySearchMacro.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/ProjectSearchMacro.java
trunk/billy-ui-zk/src/main/webapp/invoicePage.zul
Modified: trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CategorySearchMacro.java
===================================================================
--- trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CategorySearchMacro.java 2010-08-13 15:19:56 UTC (rev 50)
+++ trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CategorySearchMacro.java 2010-08-16 10:15:57 UTC (rev 51)
@@ -5,6 +5,7 @@
import java.util.Set;
import org.chorem.data.bonzoms.Category;
+import org.chorem.data.bonzoms.Invoice;
import org.chorem.data.bonzoms.SubCategory;
import org.nuiton.wikitty.Criteria;
import org.nuiton.wikitty.WikittyProxy;
@@ -161,4 +162,16 @@
}
};
}
+
+ public void getSearch(Search search) {
+ if (search == null) {
+ search = Search.query();
+ }
+ if (subCategories.size() > 0) {
+ Search searchSubCategories = search.and().or();
+ for (String id : subCategories) {
+ searchSubCategories = searchSubCategories.eq(Invoice.FQ_FIELD_INVOICE_SUBCATEGORY, id);
+ }
+ }
+ }
}
Modified: trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CompanySearchMacro.java
===================================================================
--- trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CompanySearchMacro.java 2010-08-13 15:19:56 UTC (rev 50)
+++ trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CompanySearchMacro.java 2010-08-16 10:15:57 UTC (rev 51)
@@ -4,6 +4,7 @@
import java.util.List;
import org.chorem.data.bonzoms.Company;
+import org.chorem.data.bonzoms.Invoice;
import org.nuiton.wikitty.Criteria;
import org.nuiton.wikitty.WikittyProxy;
import org.nuiton.wikitty.search.Element;
@@ -119,4 +120,16 @@
}
};
}
+
+ public void getSearch(Search search) {
+ if (search == null) {
+ search = Search.query();
+ }
+ if (companies.size() > 0) {
+ Search searchCompanies = search.and().or();
+ for (String id : companies) {
+ searchCompanies = searchCompanies.eq(Invoice.FQ_FIELD_INVOICE_COMPANY, id);
+ }
+ }
+ }
}
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-13 15:19:56 UTC (rev 50)
+++ trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/DateSearchMacro.java 2010-08-16 10:15:57 UTC (rev 51)
@@ -1,67 +1,139 @@
package org.chorem.billy.ui;
+import java.text.ParseException;
+import java.util.Date;
+
+import org.chorem.data.bonzoms.Invoice;
+import org.nuiton.wikitty.WikittyUtil;
+import org.nuiton.wikitty.search.Search;
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.Checkbox;
+import org.zkoss.zul.Datebox;
public class DateSearchMacro extends HtmlMacroComponent {
+ protected int isCheck = 0;
+
@Override
public void afterCompose() {
super.afterCompose();
+ initPostedCheck();
+ initExpectedCheck();
+ initPaymentCheck();
}
-// protected boolean checkPosted(Date start, Date end, Search search) throws ParseException {
-// Checkbox check = (Checkbox) getFellow("postedDate");
-// if (!check.isChecked()) {
-// return false;
-// }
-// if (start != null) {
-// String formatDate = WikittyUtil.formatDate(start);
-// search = search.ge(Invoice.FQ_FIELD_INVOICE_POSTED, formatDate);
-// }
-// if (end != null) {
-// String formatDate = WikittyUtil.formatDate(end);
-// search = search.le(Invoice.FQ_FIELD_INVOICE_POSTED, formatDate);
-// }
-// search = search.or();
-// return true;
-// }
-//
-// protected boolean expectedPosted(Date start, Date end, Search search, boolean bool) throws ParseException {
-// Checkbox check = (Checkbox) getFellow("expectedDate");
-// if (!check.isChecked()) {
-// return bool;
-// }
-// if (bool == false) {
-// search = search.or();
-// }
-// if (start != null) {
-// bool = true;
-// String formatDate = WikittyUtil.formatDate(start);
-// search = search.ge(Invoice.FQ_FIELD_INVOICE_POSTED, formatDate);
-// }
-// if (end != null) {
-// String formatDate = WikittyUtil.formatDate(end);
-// search = search.le(Invoice.FQ_FIELD_INVOICE_POSTED, formatDate);
-// }
-// return bool;
-// }
-//
-//
-// public Search getSearch(Search src) {
-// Search search = src;
-// if (search == null) {
-// search = Search.query();
-// }
-// Datebox startDate = (Datebox) getFellow("startDate");
-// Date start = startDate.getValue();
-//
-// Datebox endDate = (Datebox) getFellow("endDate");
-// Date end = endDate.getValue();
-//
-// boolean bool = checkPosted(start, end, search);
-// bool = checkExpected(start, end, search, bool);
-// checkPayment(start, end, search, bool);
-//
-// return search;
-// }
+ protected void initPostedCheck() {
+ Checkbox check = (Checkbox) getFellow("postedDate");
+ check.addEventListener(Events.ON_CHECK, new EventListener() {
+
+ @Override
+ public void onEvent(Event event) throws Exception {
+ Checkbox check = (Checkbox) event.getTarget();
+ if (check.isChecked()) {
+ ++isCheck;
+ } else {
+ --isCheck;
+ }
+ }
+ });
+ }
+
+ protected void initExpectedCheck() {
+ Checkbox check = (Checkbox) getFellow("expectedDate");
+ check.addEventListener(Events.ON_CHECK, new EventListener() {
+
+ @Override
+ public void onEvent(Event event) throws Exception {
+ Checkbox check = (Checkbox) event.getTarget();
+ if (check.isChecked()) {
+ ++isCheck;
+ } else {
+ --isCheck;
+ }
+ }
+ });
+ }
+
+ protected void initPaymentCheck() {
+ Checkbox check = (Checkbox) getFellow("paymentDate");
+ check.addEventListener(Events.ON_CHECK, new EventListener() {
+
+ @Override
+ public void onEvent(Event event) throws Exception {
+ Checkbox check = (Checkbox) event.getTarget();
+ if (check.isChecked()) {
+ ++isCheck;
+ } else {
+ --isCheck;
+ }
+ }
+ });
+ }
+
+ protected void checkPosted(Date start, Date end, Search search) throws ParseException {
+ Checkbox check = (Checkbox) getFellow("postedDate");
+ if (check.isChecked()) {
+ Search postedSearch = search.and();
+ if (start != null) {
+ String formatDate = WikittyUtil.formatDate(start);
+ postedSearch = postedSearch.ge(Invoice.FQ_FIELD_INVOICE_POSTED, formatDate);
+ }
+ if (end != null) {
+ String formatDate = WikittyUtil.formatDate(end);
+ postedSearch = postedSearch.le(Invoice.FQ_FIELD_INVOICE_POSTED, formatDate);
+ }
+ }
+ }
+
+ protected void checkExpected(Date start, Date end, Search search) throws ParseException {
+ Checkbox check = (Checkbox) getFellow("expectedDate");
+ if (check.isChecked()) {
+ Search expectedSearch = search.and();
+ if (start != null) {
+ String formatDate = WikittyUtil.formatDate(start);
+ expectedSearch = expectedSearch.ge(Invoice.FQ_FIELD_INVOICE_EXPECTED, formatDate);
+ }
+ if (end != null) {
+ String formatDate = WikittyUtil.formatDate(end);
+ expectedSearch = expectedSearch.le(Invoice.FQ_FIELD_INVOICE_EXPECTED, formatDate);
+ }
+ }
+ }
+
+ protected void checkPayment(Date start, Date end, Search search) throws ParseException {
+ Checkbox check = (Checkbox) getFellow("paymentDate");
+ if (check.isChecked()) {
+ Search paymentSearch = search.and();
+ if (start != null) {
+ String formatDate = WikittyUtil.formatDate(start);
+ paymentSearch = paymentSearch.ge(Invoice.FQ_FIELD_INVOICE_PAYMENT, formatDate);
+ }
+ if (end != null) {
+ String formatDate = WikittyUtil.formatDate(end);
+ paymentSearch = paymentSearch.le(Invoice.FQ_FIELD_INVOICE_PAYMENT, formatDate);
+ }
+ }
+ }
+
+ public void getSearch(Search search) throws ParseException {
+ if (search == null) {
+ search = Search.query();
+ }
+ if (isCheck > 0) {
+ Datebox startDate = (Datebox) getFellow("startDate");
+ Date start = startDate.getValue();
+
+ Datebox endDate = (Datebox) getFellow("endDate");
+ 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);
+ }
+ }
+ }
}
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-13 15:19:56 UTC (rev 50)
+++ trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/InvoiceController.java 2010-08-16 10:15:57 UTC (rev 51)
@@ -1,5 +1,6 @@
package org.chorem.billy.ui;
+import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
@@ -35,6 +36,11 @@
protected WikittyProxy proxy = ChoremDataProxy.getInstance();
protected InvoiceModel invoiceModel = new InvoiceModel(pageSize);
+ protected ProjectSearchMacro projectSearchMacro;
+ protected CompanySearchMacro companySearchMacro;
+ protected CategorySearchMacro categorySearchMacro;
+ protected DateSearchMacro dateSearchMacro;
+
protected Paging invoicePaging;
@Override
@@ -212,6 +218,18 @@
invoiceModel.setActivePage(activePage);
}
+ public void onClick$searchAll() throws ParseException {
+ Search search = Search.query();
+ search = search.eq(Element.ELT_EXTENSION, Invoice.EXT_INVOICE);
+ dateSearchMacro.getSearch(search);
+ projectSearchMacro.getSearch(search);
+ companySearchMacro.getSearch(search);
+ categorySearchMacro.getSearch(search);
+ Criteria criteria = search.criteria();
+ invoiceModel.setCriteria(criteria);
+ initPaging();
+ }
+
/*
* Getters
*/
Modified: trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/ProjectSearchMacro.java
===================================================================
--- trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/ProjectSearchMacro.java 2010-08-13 15:19:56 UTC (rev 50)
+++ trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/ProjectSearchMacro.java 2010-08-16 10:15:57 UTC (rev 51)
@@ -3,6 +3,7 @@
import java.util.ArrayList;
import java.util.List;
+import org.chorem.data.bonzoms.Invoice;
import org.chorem.data.bonzoms.Project;
import org.nuiton.wikitty.Criteria;
import org.nuiton.wikitty.WikittyProxy;
@@ -119,4 +120,16 @@
}
};
}
+
+ public void getSearch(Search search) {
+ if (search == null) {
+ search = Search.query();
+ }
+ if (projects.size() > 0) {
+ Search searchProjects = search.and().or();
+ for (String id : projects) {
+ searchProjects = searchProjects.eq(Invoice.FQ_FIELD_INVOICE_PROJECT, id);
+ }
+ }
+ }
}
Modified: trunk/billy-ui-zk/src/main/webapp/invoicePage.zul
===================================================================
--- trunk/billy-ui-zk/src/main/webapp/invoicePage.zul 2010-08-13 15:19:56 UTC (rev 50)
+++ trunk/billy-ui-zk/src/main/webapp/invoicePage.zul 2010-08-16 10:15:57 UTC (rev 51)
@@ -10,6 +10,7 @@
<categorySearchMacro id="categorySearchMacro" />
<companySearchMacro id="companySearchMacro" />
<projectSearchMacro id="projectSearchMacro" />
+ <button id="searchAll" label="Search" />
<separator />
</vbox>
Invoices: <toolbarbutton id="newInvoice" label="Add new invoice" />
1
0
r50 - in trunk: . billy-ui-zk billy-ui-zk/src/main/java/org/chorem/billy/ui
by bbrossaud@users.chorem.org 13 Aug '10
by bbrossaud@users.chorem.org 13 Aug '10
13 Aug '10
Author: bbrossaud
Date: 2010-08-13 17:19:56 +0200 (Fri, 13 Aug 2010)
New Revision: 50
Url: http://chorem.org/repositories/revision/billy/50
Log:
pagination works well
Modified:
trunk/billy-ui-zk/pom.xml
trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CategoryController.java
trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CompanyBandboxMacro.java
trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CompanyModel.java
trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/InvoiceController.java
trunk/pom.xml
Modified: trunk/billy-ui-zk/pom.xml
===================================================================
--- trunk/billy-ui-zk/pom.xml 2010-08-13 12:14:25 UTC (rev 49)
+++ trunk/billy-ui-zk/pom.xml 2010-08-13 15:19:56 UTC (rev 50)
@@ -74,6 +74,16 @@
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</dependency>
+
+ <dependency>
+ <groupId>org.nuiton</groupId>
+ <artifactId>nuiton-utils</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>commons-lang</groupId>
+ <artifactId>commons-lang</artifactId>
+ </dependency>
</dependencies>
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-13 12:14:25 UTC (rev 49)
+++ trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CategoryController.java 2010-08-13 15:19:56 UTC (rev 50)
@@ -13,6 +13,7 @@
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.event.ForwardEvent;
import org.zkoss.zk.ui.util.GenericForwardComposer;
import org.zkoss.zul.Listcell;
import org.zkoss.zul.Listitem;
@@ -104,8 +105,8 @@
createCategoryFormWindow(null);
}
- public void onPaging$categoryPaging(Event event) {
- PagingEvent pagingEvent = (PagingEvent) event;
+ public void onPaging$categoryPaging(ForwardEvent event) {
+ PagingEvent pagingEvent = (PagingEvent) event.getOrigin();
int activePage = pagingEvent.getActivePage();
categoryModel.setActivePage(activePage);
}
Modified: trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CompanyBandboxMacro.java
===================================================================
--- trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CompanyBandboxMacro.java 2010-08-13 12:14:25 UTC (rev 49)
+++ trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CompanyBandboxMacro.java 2010-08-13 15:19:56 UTC (rev 50)
@@ -19,7 +19,7 @@
public class CompanyBandboxMacro extends HtmlMacroComponent {
- private final int pageSize = 5;
+ protected final int pageSize = 5;
protected WikittyProxy proxy = ChoremDataProxy.getInstance();
protected CompanyModel companyModel = new CompanyModel(pageSize);
Modified: trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CompanyModel.java
===================================================================
--- trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CompanyModel.java 2010-08-13 12:14:25 UTC (rev 49)
+++ trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CompanyModel.java 2010-08-13 15:19:56 UTC (rev 50)
@@ -5,7 +5,6 @@
import org.chorem.billy.ui.ChoremDataProxy;
import org.chorem.data.bonzoms.Company;
-import org.chorem.data.bonzoms.Project;
import org.nuiton.wikitty.Criteria;
import org.nuiton.wikitty.PagedResult;
import org.nuiton.wikitty.WikittyProxy;
@@ -40,7 +39,7 @@
@Override
public int indexOf(Object obj) {
int index = -1;
- String id = ((Project) obj).getWikittyId();
+ String id = ((Company) obj).getWikittyId();
for (Company data : companies) {
String dataId = data.getWikittyId();
if (id.equals(dataId)) {
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-13 12:14:25 UTC (rev 49)
+++ trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/InvoiceController.java 2010-08-13 15:19:56 UTC (rev 50)
@@ -19,6 +19,7 @@
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.event.ForwardEvent;
import org.zkoss.zk.ui.util.GenericForwardComposer;
import org.zkoss.zul.Listcell;
import org.zkoss.zul.Listitem;
@@ -205,8 +206,8 @@
createInvoiceFormWindow(null);
}
- public void onPaging$invoicePaging(Event event) {
- PagingEvent pagingEvent = (PagingEvent) event;
+ public void onPaging$invoicePaging(ForwardEvent event) {
+ PagingEvent pagingEvent = (PagingEvent) event.getOrigin();
int activePage = pagingEvent.getActivePage();
invoiceModel.setActivePage(activePage);
}
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2010-08-13 12:14:25 UTC (rev 49)
+++ trunk/pom.xml 2010-08-13 15:19:56 UTC (rev 50)
@@ -102,6 +102,12 @@
<!-- dependencies for billy-zk -->
<dependency>
+ <groupId>org.nuiton</groupId>
+ <artifactId>nuiton-utils</artifactId>
+ <version>${nuiton-utils.version}</version>
+ </dependency>
+
+ <dependency>
<groupId>org.chorem.chorem-data</groupId>
<artifactId>data-bonzoms</artifactId>
<version>${chorem-data.version}</version>
@@ -229,12 +235,13 @@
<!-- Nuiton librairies -->
<topia.version>2.2.0</topia.version>
<generator.version>1.0.0</generator.version>
+ <nuiton-utils.version>1.3.2-SNAPSHOT</nuiton-utils.version>
<!-- ChoReg -->
<choreg.version>1.0.0-alpha-2-SNAPSHOT</choreg.version>
<!-- commons-lang for ToPIA -->
- <lang.version>2.4</lang.version>
+ <lang.version>2.5</lang.version>
<!-- Hibernate for ToPIA -->
<hibernate.version>3.3.1.GA</hibernate.version>
1
0
r49 - in trunk/billy-ui-zk/src/main: java/org/chorem/billy/ui webapp webapp/WEB-INF webapp/macros
by bbrossaud@users.chorem.org 13 Aug '10
by bbrossaud@users.chorem.org 13 Aug '10
13 Aug '10
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>
1
0
r48 - in trunk: . billy-ui-zk billy-ui-zk/src/main/java/org/chorem/billy/ui billy-ui-zk/src/main/webapp billy-ui-zk/src/main/webapp/WEB-INF billy-ui-zk/src/main/webapp/macros
by bbrossaud@users.chorem.org 12 Aug '10
by bbrossaud@users.chorem.org 12 Aug '10
12 Aug '10
Author: bbrossaud
Date: 2010-08-12 18:37:31 +0200 (Thu, 12 Aug 2010)
New Revision: 48
Url: http://chorem.org/repositories/revision/billy/48
Log:
all is well but can create the criteria
Added:
trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CategorySearchMacro.java
trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CompanySearchMacro.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/InvoiceModel.java
trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/ProjectSearchMacro.java
trunk/billy-ui-zk/src/main/webapp/macros/categorySearchMacro.zul
trunk/billy-ui-zk/src/main/webapp/macros/companySearchMacro.zul
trunk/billy-ui-zk/src/main/webapp/macros/dateSearchMacro.zul
trunk/billy-ui-zk/src/main/webapp/macros/projectSearchMacro.zul
Modified:
trunk/
trunk/billy-ui-zk/
trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CategoryBandboxMacro.java
trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CategoryModel.java
trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CompanyBandboxMacro.java
trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CompanyModel.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/InvoiceFormController.java
trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/ProjectBandboxMacro.java
trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/ProjectModel.java
trunk/billy-ui-zk/src/main/webapp/WEB-INF/lang-addon.xml
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/companyBandboxMacro.zul
trunk/billy-ui-zk/src/main/webapp/macros/projectBandboxMacro.zul
trunk/pom.xml
Property changes on: trunk
___________________________________________________________________
Modified: svn:ignore
- target
*.ipr
*.iws
*.iml
+ target
*.ipr
*.iws
*.iml
.project
.settings
Property changes on: trunk/billy-ui-zk
___________________________________________________________________
Added: svn:ignore
+ .classpath
.project
target
.settings
Modified: trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CategoryBandboxMacro.java
===================================================================
--- trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CategoryBandboxMacro.java 2010-08-11 15:58:53 UTC (rev 47)
+++ trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CategoryBandboxMacro.java 2010-08-12 16:37:31 UTC (rev 48)
@@ -29,7 +29,7 @@
public class CategoryBandboxMacro extends HtmlMacroComponent {
- private final int pageSize = 2;
+ protected final int pageSize = 2;
protected WikittyProxy proxy = ChoremDataProxy.getInstance();
protected CategoryModel categoryModel = new CategoryModel(pageSize);
@@ -119,12 +119,6 @@
item.setValue(data);
final SubCategory subCategory = (SubCategory) data;
final String name = subCategory.getName();
- String id = subCategory.getWikittyId();
- if (id != null && id.equals(subCategoryId)) {
- Bandbox categoryBandbox = (Bandbox) getFellow("categoryBandbox");
- categoryBandbox.setValue(name);
- categoryBandbox.close();
- }
Listcell cell = new Listcell(name);
item.appendChild(cell);
item.addEventListener(Events.ON_DOUBLE_CLICK, new EventListener() {
@@ -164,6 +158,17 @@
*/
public void setSubCategoryId(String id) {
subCategoryId = id;
+ if (id != null) {
+ SubCategory subCategory = proxy.restore(SubCategory.class, id);
+ if (subCategory != null) {
+ Bandbox categoryBandbox = (Bandbox) getFellow("categoryBandbox");
+ String name = subCategory.getName();
+ if (name != null) {
+ categoryBandbox.setValue(name);
+ categoryBandbox.close();
+ }
+ }
+ }
}
/*
Modified: trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CategoryModel.java
===================================================================
--- trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CategoryModel.java 2010-08-11 15:58:53 UTC (rev 47)
+++ trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CategoryModel.java 2010-08-12 16:37:31 UTC (rev 48)
@@ -26,8 +26,8 @@
@Override
public Object getElementAt(int index) {
- Category Category = categories.get(index);
- return Category;
+ Category category = categories.get(index);
+ return category;
}
@Override
@@ -37,7 +37,7 @@
@Override
public int indexOf(Object obj) {
- int index = 0;
+ int index = -1;
String id = ((Category) obj).getWikittyId();
for (Category data : categories) {
String dataId = data.getWikittyId();
@@ -76,8 +76,9 @@
}
public void reloadContent(int rowIndex) {
- Category Category = categories.get(rowIndex);
- Category = proxy.restore(Category.class, Category.getWikittyId());
+ Category category = categories.get(rowIndex);
+ category = proxy.restore(Category.class, category.getWikittyId());
+ categories.set(rowIndex, category);
fireEvent(ListDataEvent.CONTENTS_CHANGED, rowIndex, rowIndex);
}
@@ -102,8 +103,8 @@
int first = activePage * pageSize;
int end = first + (pageSize - 1);
Criteria criteria = this.criteria.setFirstIndex(first).setEndIndex(end);
- List<Category> Categorys = proxy.findAllByCriteria(Category.class, criteria).getAll();
- this.categories = new ArrayList<Category>(Categorys);
+ List<Category> categories = proxy.findAllByCriteria(Category.class, criteria).getAll();
+ this.categories = new ArrayList<Category>(categories);
}
fireEvent(ListDataEvent.CONTENTS_CHANGED, -1, -1);
}
Added: trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CategorySearchMacro.java
===================================================================
--- trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CategorySearchMacro.java (rev 0)
+++ trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CategorySearchMacro.java 2010-08-12 16:37:31 UTC (rev 48)
@@ -0,0 +1,164 @@
+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.SubCategory;
+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.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.Bandbox;
+import org.zkoss.zul.Checkbox;
+import org.zkoss.zul.Grid;
+import org.zkoss.zul.Listbox;
+import org.zkoss.zul.Listcell;
+import org.zkoss.zul.Listhead;
+import org.zkoss.zul.Listheader;
+import org.zkoss.zul.Listitem;
+import org.zkoss.zul.ListitemRenderer;
+import org.zkoss.zul.Paging;
+import org.zkoss.zul.Row;
+import org.zkoss.zul.RowRenderer;
+import org.zkoss.zul.event.PagingEvent;
+
+public class CategorySearchMacro extends HtmlMacroComponent {
+
+ protected final int pageSize = 2;
+
+ protected WikittyProxy proxy = ChoremDataProxy.getInstance();
+ protected CategoryModel categoryModel = new CategoryModel(pageSize);
+ protected List<String> subCategories = new ArrayList<String>();
+
+ @Override
+ public void afterCompose() {
+ super.afterCompose();
+ initPaging();
+ initBandbox();
+ initGrid();
+ }
+
+ protected void initPaging() {
+ Criteria criteria = Search.query().eq(Element.ELT_EXTENSION, Category.EXT_CATEGORY).criteria();
+ categoryModel.setCriteria(criteria);
+ int totalSize = categoryModel.getTotalSize();
+ Paging categoryPaging = (Paging) getFellow("categoryPaging");
+ categoryPaging.setTotalSize(totalSize);
+ categoryPaging.setPageSize(pageSize);
+ categoryPaging.addEventListener("onPaging", new EventListener() {
+
+ @Override
+ public void onEvent(Event event) throws Exception {
+ PagingEvent pagingEvent = (PagingEvent) event;
+ int activePage = pagingEvent.getActivePage();
+ categoryModel.setActivePage(activePage);
+ }
+ });
+ }
+
+ protected void initBandbox() {
+ final Bandbox categoryBandbox = (Bandbox) getFellow("categoryBandbox");
+ categoryBandbox.addEventListener(Events.ON_OK, new EventListener() {
+
+ @Override
+ public void onEvent(Event event) throws Exception {
+ String search = categoryBandbox.getValue();
+ Search query = Search.query().eq(Element.ELT_EXTENSION, Category.EXT_CATEGORY);
+ if (search != null && !search.isEmpty()) {
+ query = query.keyword(search);
+ }
+ Criteria criteria = query.criteria();
+ categoryModel.setCriteria(criteria);
+ int totalSize = categoryModel.getTotalSize();
+ Paging categoryPaging = (Paging) getFellow("categoryPaging");
+ categoryPaging.setTotalSize(totalSize);
+ categoryPaging.setActivePage(0);
+ categoryBandbox.open();
+ }
+ });
+ }
+
+ protected void initGrid() {
+ Grid categoryGrid = (Grid) getFellow("categoryGrid");
+ categoryGrid.setModel(categoryModel);
+ RowRenderer renderer = getCategoryRenderer();
+ categoryGrid.setRowRenderer(renderer);
+ }
+
+ /*
+ * Renderer
+ */
+ protected void setSubCategoryHeader(Listbox listbox, Category category) {
+ if (listbox != null) {
+ Listhead head = new Listhead();
+ listbox.appendChild(head);
+ String name = category.getName();
+ if (name == null) {
+ name = "";
+ }
+ Listheader header = new Listheader(name);
+ head.appendChild(header);
+ }
+ }
+
+ protected void createSubCategoryListbox(Listbox listbox, Set<String> subCategoryIds) {
+ if (subCategoryIds != null && !subCategoryIds.isEmpty()) {
+ List<SubCategory> subCategoriesList = proxy.restore(SubCategory.class, new ArrayList<String>(subCategoryIds));
+ SubCategoryModel subCategoryModel = new SubCategoryModel();
+ subCategoryModel.setSubCategories(subCategoriesList);
+ listbox.setModel(subCategoryModel);
+ listbox.setItemRenderer(new ListitemRenderer() {
+
+ @Override
+ public void render(Listitem item, Object data) throws Exception {
+ item.setValue(data);
+ final SubCategory subCategory = (SubCategory) data;
+ final String name = subCategory.getName();
+ final Checkbox checkbox = new Checkbox(name);
+ Listcell cell = new Listcell();
+ cell.appendChild(checkbox);
+ item.appendChild(cell);
+ checkbox.addEventListener(Events.ON_CHECK, new EventListener() {
+
+ @Override
+ public void onEvent(Event event) throws Exception {
+ String subCategoryId = subCategory.getWikittyId();
+ if (checkbox.isChecked()) {
+ if (!subCategories.contains(subCategoryId)) {
+ subCategories.add(subCategoryId);
+ }
+ } else {
+ if (subCategories.contains(subCategoryId)) {
+ subCategories.remove(subCategoryId);
+ }
+ }
+ }
+ });
+ }
+ });
+ }
+ }
+
+ public RowRenderer getCategoryRenderer() {
+ return new RowRenderer() {
+
+ @Override
+ public void render(Row row, Object data) throws Exception {
+ row.setValue(data);
+ final Category category = (Category) data;
+ Set<String> subCategoryIds = category.getSubCategory();
+ Listbox listbox = new Listbox();
+ setSubCategoryHeader(listbox, category);
+ createSubCategoryListbox(listbox, subCategoryIds);
+ row.appendChild(listbox);
+
+ }
+ };
+ }
+}
Modified: trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CompanyBandboxMacro.java
===================================================================
--- trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CompanyBandboxMacro.java 2010-08-11 15:58:53 UTC (rev 47)
+++ trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CompanyBandboxMacro.java 2010-08-12 16:37:31 UTC (rev 48)
@@ -91,13 +91,7 @@
public void render(Listitem item, Object data) throws Exception {
item.setValue(data);
final Company company = (Company) data;
- final Bandbox companyBandbox = (Bandbox) getFellow("companyBandbox");
- final String id = company.getWikittyId();
final String name = company.getName();
- if (companyId != null && companyId.equals(id)) {
- companyBandbox.setValue(name);
- companyBandbox.close();
- }
Listcell cell1 = new Listcell(name);
Listcell cell2 = new Listcell(company.getType());
item.appendChild(cell1);
@@ -106,7 +100,8 @@
@Override
public void onEvent(Event event) throws Exception {
- companyId = id;
+ companyId = company.getWikittyId();
+ Bandbox companyBandbox = (Bandbox) getFellow("companyBandbox");
companyBandbox.setValue(name);
companyBandbox.close();
}
@@ -120,6 +115,17 @@
*/
public void setCompanyId(String id) {
companyId = id;
+ if (id != null) {
+ Company company = proxy.restore(Company.class, id);
+ if (company != null) {
+ Bandbox companyBandbox = (Bandbox) getFellow("companyBandbox");
+ String name = company.getName();
+ if (name != null) {
+ companyBandbox.setValue(name);
+ companyBandbox.close();
+ }
+ }
+ }
}
/*
Modified: trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CompanyModel.java
===================================================================
--- trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CompanyModel.java 2010-08-11 15:58:53 UTC (rev 47)
+++ trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CompanyModel.java 2010-08-12 16:37:31 UTC (rev 48)
@@ -39,7 +39,7 @@
@Override
public int indexOf(Object obj) {
- int index = 0;
+ int index = -1;
String id = ((Project) obj).getWikittyId();
for (Company data : companies) {
String dataId = data.getWikittyId();
@@ -80,6 +80,7 @@
public void reloadContent(int rowIndex) {
Company company = companies.get(rowIndex);
company = proxy.restore(Company.class, company.getWikittyId());
+ companies.set(rowIndex, company);
fireEvent(ListDataEvent.CONTENTS_CHANGED, rowIndex, rowIndex);
}
Added: trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CompanySearchMacro.java
===================================================================
--- trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CompanySearchMacro.java (rev 0)
+++ trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CompanySearchMacro.java 2010-08-12 16:37:31 UTC (rev 48)
@@ -0,0 +1,122 @@
+package org.chorem.billy.ui;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.chorem.data.bonzoms.Company;
+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.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.Bandbox;
+import org.zkoss.zul.Checkbox;
+import org.zkoss.zul.Listbox;
+import org.zkoss.zul.Listcell;
+import org.zkoss.zul.Listitem;
+import org.zkoss.zul.ListitemRenderer;
+import org.zkoss.zul.Paging;
+import org.zkoss.zul.event.PagingEvent;
+
+public class CompanySearchMacro extends HtmlMacroComponent {
+
+ private final int pageSize = 5;
+
+ protected WikittyProxy proxy = ChoremDataProxy.getInstance();
+ protected CompanyModel companyModel = new CompanyModel(pageSize);
+ protected List<String> companies = new ArrayList<String>();
+
+ @Override
+ public void afterCompose() {
+ super.afterCompose();
+ initPaging();
+ initBandbox();
+ initListbox();
+ }
+
+ protected void initPaging() {
+ Criteria criteria = Search.query().eq(Element.ELT_EXTENSION, Company.EXT_COMPANY).criteria();
+ companyModel.setCriteria(criteria);
+
+ int totalSize = companyModel.getTotalSize();
+ Paging companyPaging = (Paging) getFellow("companyPaging");
+ companyPaging.setTotalSize(totalSize);
+ companyPaging.setPageSize(pageSize);
+ companyPaging.addEventListener("onPaging", new EventListener() {
+
+ @Override
+ public void onEvent(Event event) throws Exception {
+ PagingEvent pagingEvent = (PagingEvent) event;
+ int activePage = pagingEvent.getActivePage();
+ companyModel.setActivePage(activePage);
+ }
+ });
+ }
+
+ protected void initBandbox() {
+ final Bandbox companyBandbox = (Bandbox) getFellow("companyBandbox");
+ companyBandbox.addEventListener(Events.ON_OK, new EventListener() {
+
+ @Override
+ public void onEvent(Event event) throws Exception {
+ String search = companyBandbox.getValue();
+ Search query = Search.query().eq(Element.ELT_EXTENSION, Company.EXT_COMPANY);
+ if (search != null && !search.isEmpty()) {
+ query = query.keyword(search);
+ }
+ Criteria criteria = query.criteria();
+ companyModel.setCriteria(criteria);
+ int totalSize = companyModel.getTotalSize();
+ Paging companyPaging = (Paging) getFellow("projectPaging");
+ companyPaging.setTotalSize(totalSize);
+ companyPaging.setActivePage(0);
+ companyBandbox.open();
+ }
+ });
+ }
+
+ protected void initListbox() {
+ Listbox companyListbox = (Listbox) getFellow("companyListbox");
+ companyListbox.setModel(companyModel);
+ ListitemRenderer renderer = getCompanyRenderer();
+ companyListbox.setItemRenderer(renderer);
+ }
+
+ /*
+ * Renderer
+ */
+ public ListitemRenderer getCompanyRenderer() {
+ return new ListitemRenderer() {
+
+ @Override
+ public void render(Listitem item, Object data) throws Exception {
+ item.setValue(data);
+ final Company company = (Company) data;
+ final String name = company.getName();
+ final Checkbox checkbox = new Checkbox(name);
+ Listcell cell = new Listcell();
+ cell.appendChild(checkbox);
+ item.appendChild(cell);
+ checkbox.addEventListener(Events.ON_CHECK, new EventListener() {
+
+ @Override
+ public void onEvent(Event event) throws Exception {
+ String companyId = company.getWikittyId();
+ if (checkbox.isChecked()) {
+ if (!companies.contains(companyId)) {
+ companies.add(companyId);
+ }
+ } else {
+ if (companies.contains(companyId)) {
+ companies.remove(companyId);
+ }
+ }
+ }
+ });
+ }
+ };
+ }
+}
Added: 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 (rev 0)
+++ trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/DateSearchMacro.java 2010-08-12 16:37:31 UTC (rev 48)
@@ -0,0 +1,67 @@
+package org.chorem.billy.ui;
+
+import org.zkoss.zk.ui.HtmlMacroComponent;
+
+public class DateSearchMacro extends HtmlMacroComponent {
+
+ @Override
+ public void afterCompose() {
+ super.afterCompose();
+ }
+
+// protected boolean checkPosted(Date start, Date end, Search search) throws ParseException {
+// Checkbox check = (Checkbox) getFellow("postedDate");
+// if (!check.isChecked()) {
+// return false;
+// }
+// if (start != null) {
+// String formatDate = WikittyUtil.formatDate(start);
+// search = search.ge(Invoice.FQ_FIELD_INVOICE_POSTED, formatDate);
+// }
+// if (end != null) {
+// String formatDate = WikittyUtil.formatDate(end);
+// search = search.le(Invoice.FQ_FIELD_INVOICE_POSTED, formatDate);
+// }
+// search = search.or();
+// return true;
+// }
+//
+// protected boolean expectedPosted(Date start, Date end, Search search, boolean bool) throws ParseException {
+// Checkbox check = (Checkbox) getFellow("expectedDate");
+// if (!check.isChecked()) {
+// return bool;
+// }
+// if (bool == false) {
+// search = search.or();
+// }
+// if (start != null) {
+// bool = true;
+// String formatDate = WikittyUtil.formatDate(start);
+// search = search.ge(Invoice.FQ_FIELD_INVOICE_POSTED, formatDate);
+// }
+// if (end != null) {
+// String formatDate = WikittyUtil.formatDate(end);
+// search = search.le(Invoice.FQ_FIELD_INVOICE_POSTED, formatDate);
+// }
+// return bool;
+// }
+//
+//
+// public Search getSearch(Search src) {
+// Search search = src;
+// if (search == null) {
+// search = Search.query();
+// }
+// Datebox startDate = (Datebox) getFellow("startDate");
+// Date start = startDate.getValue();
+//
+// Datebox endDate = (Datebox) getFellow("endDate");
+// Date end = endDate.getValue();
+//
+// boolean bool = checkPosted(start, end, search);
+// bool = checkExpected(start, end, search, bool);
+// checkPayment(start, end, search, bool);
+//
+// return search;
+// }
+}
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-11 15:58:53 UTC (rev 47)
+++ trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/InvoiceController.java 2010-08-12 16:37:31 UTC (rev 48)
@@ -1,23 +1,220 @@
package org.chorem.billy.ui;
-import java.util.ArrayList;
-import java.util.List;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
import org.chorem.billy.ui.ChoremDataProxy;
+import org.chorem.data.bonzoms.Company;
+import org.chorem.data.bonzoms.Invoice;
+import org.chorem.data.bonzoms.Category;
import org.chorem.data.bonzoms.Project;
-import org.chorem.data.bonzoms.ProjectImpl;
+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 InvoiceController extends GenericForwardComposer{
+ protected final int pageSize = 20;
+
protected WikittyProxy proxy = ChoremDataProxy.getInstance();
+ protected InvoiceModel invoiceModel = new InvoiceModel(pageSize);
+ protected Paging invoicePaging;
+
+ @Override
+ public void doAfterCompose(Component comp) throws Exception {
+ super.doAfterCompose(comp);
+ initInvoiceModel();
+ initPaging();
+ }
+
+ protected void initInvoiceModel() {
+ Criteria criteria = Search.query().eq(Element.ELT_EXTENSION, Invoice.EXT_INVOICE).criteria();
+ invoiceModel.setCriteria(criteria);
+ }
+
+ protected void initPaging() {
+ invoicePaging.setPageSize(pageSize);
+ int totalSize = invoiceModel.getTotalSize();
+ invoicePaging.setTotalSize(totalSize);
+ }
+
+ protected Listcell getCategoryCell(Invoice invoice) {
+ Listcell cell = new Listcell();
+ String id = invoice.getSubCategory();
+ if (id != null && !id.isEmpty()) {
+ Criteria criteria = Search.query().contains(Category.FQ_FIELD_CATEGORY_SUBCATEGORY, id).criteria();
+ Category category = proxy.findByCriteria(Category.class, criteria);
+ if (category != null) {
+ String name = category.getName();
+ if (name == null) {
+ name = "";
+ }
+ cell.setLabel(name);
+ }
+ }
+ return cell;
+ }
+
+ protected Listcell getCompanyCell(Invoice invoice) {
+ Listcell cell = new Listcell();
+ String id = invoice.getCompany();
+ if (id != null && !id.isEmpty()) {
+ Company company = proxy.restore(Company.class, id);
+ if (company != null) {
+ String name = company.getName();
+ if (name == null) {
+ name = "";
+ }
+ cell.setLabel(name);
+ }
+ }
+ return cell;
+ }
+
+ protected Listcell getProjectCell(Invoice invoice) {
+ Listcell cell = new Listcell();
+ String id = invoice.getProject();
+ if (id != null && !id.isEmpty()) {
+ Project project = proxy.restore(Project.class, id);
+ if (project != null) {
+ String name = project.getName();
+ if (name == null) {
+ name = "";
+ }
+ cell.setLabel(name);
+ }
+ }
+ return cell;
+ }
+
+ protected Listcell getInvoiceNumberCell(Invoice invoice) {
+ Listcell cell = new Listcell();
+ String number = invoice.getNumber();
+ if (number == null) {
+ number = "";
+ }
+ cell.setLabel(number);
+ return cell;
+ }
+
+ protected Listcell getPriceCell(Double price) {
+ Listcell cell = new Listcell();
+ String str = "-";
+ if (price != null) {
+ str = String.valueOf(price);
+ }
+ cell.setLabel(str);
+ return cell;
+ }
+
+ protected Listcell getDateCell(Date date) {
+ Listcell cell = new Listcell();
+ String str = "-";
+ if (date != null) {
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
+ str = sdf.format(date);
+ }
+ cell.setLabel(str);
+ return cell;
+ }
+
+ protected void createInvoiceFormWindow(String id) {
+ Map<String, Object> map = new HashMap<String, Object>();
+ if (id != null) {
+ map.put("invoiceId", id);
+ }
+ Window win = (Window) Executions.createComponents("invoiceFormPage.zul", null, map);
+ win.addEventListener(InvoiceFormController.EVENT_ON_SAVE_INVOICE, new EventListener() {
+
+ @Override
+ public void onEvent(Event event) throws Exception {
+ String id = (String) event.getData();
+ Invoice invoice = proxy.restore(Invoice.class, id);
+ int rowIndex = invoiceModel.indexOf(invoice);
+ if (rowIndex != -1) {
+ invoiceModel.reloadContent(rowIndex);
+ } else {
+ invoiceModel.addData(invoice);
+ }
+ int totalSize = invoiceModel.getTotalSize();
+ invoicePaging.setTotalSize(totalSize);
+ }
+ });
+ }
+
/*
+ * Renderers
+ */
+ public ListitemRenderer getInvoiceRenderer() {
+ return new ListitemRenderer() {
+
+ @Override
+ public void render(Listitem item, Object data) throws Exception {
+ item.setValue(data);
+ final Invoice invoice = (Invoice) data;
+ Listcell cell1 = getCategoryCell(invoice);
+ item.appendChild(cell1);
+ Listcell cell2 = getCompanyCell(invoice);
+ item.appendChild(cell2);
+ Listcell cell3 = getProjectCell(invoice);
+ item.appendChild(cell3);
+ Listcell cell4 = getInvoiceNumberCell(invoice);
+ item.appendChild(cell4);
+ Listcell cell5 = getPriceCell(invoice.getHTPrice());
+ item.appendChild(cell5);
+ Listcell cell6 = getPriceCell(invoice.getTTCPrice());
+ item.appendChild(cell6);
+ Listcell cell7 = getDateCell(invoice.getPosted());
+ item.appendChild(cell7);
+ Listcell cell8 = getDateCell(invoice.getExpected());
+ item.appendChild(cell8);
+ Listcell cell9 = getDateCell(invoice.getPayment());
+ item.appendChild(cell9);
+ item.addEventListener(Events.ON_DOUBLE_CLICK, new EventListener() {
+
+ @Override
+ public void onEvent(Event event) throws Exception {
+ createInvoiceFormWindow(invoice.getWikittyId());
+ }
+ });
+ }
+ };
+ }
+
+
+ /*
* Events
*/
public void onClick$newInvoice() {
- Executions.createComponents("invoiceFormPage.zul", null, null);
+ createInvoiceFormWindow(null);
}
+
+ public void onPaging$invoicePaging(Event event) {
+ PagingEvent pagingEvent = (PagingEvent) event;
+ int activePage = pagingEvent.getActivePage();
+ invoiceModel.setActivePage(activePage);
+ }
+
+ /*
+ * Getters
+ */
+ public InvoiceModel getInvoiceModel() {
+ return invoiceModel;
+ }
}
Modified: trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/InvoiceFormController.java
===================================================================
--- trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/InvoiceFormController.java 2010-08-11 15:58:53 UTC (rev 47)
+++ trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/InvoiceFormController.java 2010-08-12 16:37:31 UTC (rev 48)
@@ -5,6 +5,7 @@
import org.nuiton.wikitty.WikittyProxy;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.Executions;
+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;
@@ -64,6 +65,21 @@
}
/*
+ * Events
+ */
+ public void onClick$saveInvoice() {
+ String subCategory = categoryMacro.getSubCategoryId();
+ invoice.setSubCategory(subCategory);
+ String project = projectMacro.getProjectId();
+ invoice.setProject(project);
+ String company = companyMacro.getCompanyId();
+ invoice.setCompany(company);
+ invoice = proxy.store(invoice);
+ Events.postEvent(EVENT_ON_SAVE_INVOICE, this.self, invoice.getWikittyId());
+ self.detach();
+ }
+
+ /*
* Getters
*/
public Invoice getInvoice() {
Added: trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/InvoiceModel.java
===================================================================
--- trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/InvoiceModel.java (rev 0)
+++ trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/InvoiceModel.java 2010-08-12 16:37:31 UTC (rev 48)
@@ -0,0 +1,116 @@
+package org.chorem.billy.ui;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.chorem.data.bonzoms.Invoice;
+import org.nuiton.wikitty.Criteria;
+import org.nuiton.wikitty.PagedResult;
+import org.nuiton.wikitty.WikittyProxy;
+import org.zkoss.zkplus.databind.BindingListModel;
+import org.zkoss.zul.AbstractListModel;
+import org.zkoss.zul.event.ListDataEvent;
+
+public class InvoiceModel extends AbstractListModel implements BindingListModel {
+
+ protected WikittyProxy proxy = ChoremDataProxy.getInstance();
+ protected Criteria criteria = null;
+ protected int activePage = 0;
+ protected int pageSize = 1;
+ protected List<Invoice> invoices = new ArrayList<Invoice>();
+
+ public InvoiceModel(int pageSize) {
+ this.pageSize = pageSize;
+ createList();
+ }
+
+ @Override
+ public Object getElementAt(int index) {
+ Invoice invoice = invoices.get(index);
+ return invoice;
+ }
+
+ @Override
+ public int getSize() {
+ return invoices.size();
+ }
+
+ @Override
+ public int indexOf(Object obj) {
+ int index = -1;
+ String id = ((Invoice) obj).getWikittyId();
+ for (Invoice data : invoices) {
+ String dataId = data.getWikittyId();
+ if (id.equals(dataId)) {
+ index = invoices.indexOf(data);
+ break;
+ }
+ }
+ return index;
+ }
+
+ public int getTotalSize() {
+ if (criteria == null) {
+ return 0;
+ }
+ Criteria criteria = this.criteria.setFirstIndex(0).setEndIndex(0);
+ PagedResult<Invoice> result = proxy.findAllByCriteria(Invoice.class, criteria);
+ return result.getNumFound();
+ }
+
+ public void addData(Invoice newData) {
+ int listSize = invoices.size();
+ if (listSize < (pageSize)) {
+ invoices.add(newData);
+ }
+ int size = getSize();
+ fireEvent(ListDataEvent.INTERVAL_ADDED, size - 1, size - 1);
+ }
+
+ public void removeData(Invoice data) {
+ int interval = invoices.indexOf(data);
+ if (interval != -1) {
+ invoices.remove(interval);
+ fireEvent(ListDataEvent.INTERVAL_REMOVED, interval, interval);
+ }
+ }
+
+ public void reloadContent(int rowIndex) {
+ Invoice invoice = invoices.get(rowIndex);
+ invoice = proxy.restore(Invoice.class, invoice.getWikittyId());
+ invoices.set(rowIndex, invoice);
+ fireEvent(ListDataEvent.CONTENTS_CHANGED, rowIndex, rowIndex);
+ }
+
+ public void reload() {
+ fireEvent(ListDataEvent.CONTENTS_CHANGED, -1, -1);
+ }
+
+ public Criteria getCriteria() {
+ return criteria;
+ }
+
+ public void setCriteria(Criteria criteria) {
+ if (criteria != null) {
+ this.criteria = criteria;
+ activePage = 0;
+ createList();
+ }
+ }
+
+ protected void createList() {
+ if (criteria != null) {
+ int first = activePage * pageSize;
+ int end = first + (pageSize - 1);
+ Criteria criteria = this.criteria.setFirstIndex(first).setEndIndex(end);
+ List<Invoice> invoices = proxy.findAllByCriteria(Invoice.class, criteria).getAll();
+ this.invoices = new ArrayList<Invoice>(invoices);
+ }
+ fireEvent(ListDataEvent.CONTENTS_CHANGED, -1, -1);
+ }
+
+ public void setActivePage(int activePage) {
+ this.activePage = activePage;
+ createList();
+ }
+}
Modified: trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/ProjectBandboxMacro.java
===================================================================
--- trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/ProjectBandboxMacro.java 2010-08-11 15:58:53 UTC (rev 47)
+++ trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/ProjectBandboxMacro.java 2010-08-12 16:37:31 UTC (rev 48)
@@ -90,21 +90,16 @@
@Override
public void render(Listitem item, Object data) throws Exception {
item.setValue(data);
- Project project = (Project) data;
- final Bandbox projectBandbox = (Bandbox) getFellow("projectBandbox");
- final String id = project.getWikittyId();
+ final Project project = (Project) data;
final String name = project.getName();
- if (projectId != null && projectId.equals(id)) {
- projectBandbox.setValue(name);
- projectBandbox.close();
- }
- Listcell cell = new Listcell(project.getName());
+ Listcell cell = new Listcell(name);
item.appendChild(cell);
item.addEventListener(Events.ON_DOUBLE_CLICK, new EventListener() {
@Override
public void onEvent(Event event) throws Exception {
- projectId = id;
+ projectId = project.getWikittyId();
+ Bandbox projectBandbox = (Bandbox) getFellow("projectBandbox");
projectBandbox.setValue(name);
projectBandbox.close();
}
@@ -118,6 +113,17 @@
*/
public void setProjectId(String id) {
projectId = id;
+ if (id != null) {
+ Project project = proxy.restore(Project.class, id);
+ if (project != null) {
+ Bandbox projectBandbox = (Bandbox) getFellow("projectBandbox");
+ String name = project.getName();
+ if (name != null) {
+ projectBandbox.setValue(name);
+ projectBandbox.close();
+ }
+ }
+ }
}
/*
Modified: trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/ProjectModel.java
===================================================================
--- trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/ProjectModel.java 2010-08-11 15:58:53 UTC (rev 47)
+++ trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/ProjectModel.java 2010-08-12 16:37:31 UTC (rev 48)
@@ -38,7 +38,7 @@
@Override
public int indexOf(Object obj) {
- int index = 0;
+ int index = -1;
String id = ((Project) obj).getWikittyId();
for (Project data : projects) {
String dataId = data.getWikittyId();
Added: trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/ProjectSearchMacro.java
===================================================================
--- trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/ProjectSearchMacro.java (rev 0)
+++ trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/ProjectSearchMacro.java 2010-08-12 16:37:31 UTC (rev 48)
@@ -0,0 +1,122 @@
+package org.chorem.billy.ui;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.chorem.data.bonzoms.Project;
+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.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.Bandbox;
+import org.zkoss.zul.Checkbox;
+import org.zkoss.zul.Listbox;
+import org.zkoss.zul.Listcell;
+import org.zkoss.zul.Listitem;
+import org.zkoss.zul.ListitemRenderer;
+import org.zkoss.zul.Paging;
+import org.zkoss.zul.event.PagingEvent;
+
+public class ProjectSearchMacro extends HtmlMacroComponent {
+
+ private final int pageSize = 5;
+
+ protected WikittyProxy proxy = ChoremDataProxy.getInstance();
+ protected ProjectModel projectModel = new ProjectModel(pageSize);
+ protected List<String> projects = new ArrayList<String>();
+
+ @Override
+ public void afterCompose() {
+ super.afterCompose();
+ initPaging();
+ initBandbox();
+ initListbox();
+ }
+
+ protected void initPaging() {
+ Criteria criteria = Search.query().eq(Element.ELT_EXTENSION, Project.EXT_PROJECT).criteria();
+ projectModel.setCriteria(criteria);
+
+ int totalSize = projectModel.getTotalSize();
+ Paging projectPaging = (Paging) getFellow("projectPaging");
+ projectPaging.setTotalSize(totalSize);
+ projectPaging.setPageSize(pageSize);
+ projectPaging.addEventListener("onPaging", new EventListener() {
+
+ @Override
+ public void onEvent(Event event) throws Exception {
+ PagingEvent pagingEvent = (PagingEvent) event;
+ int activePage = pagingEvent.getActivePage();
+ projectModel.setActivePage(activePage);
+ }
+ });
+ }
+
+ protected void initBandbox() {
+ final Bandbox projectBandbox = (Bandbox) getFellow("projectBandbox");
+ projectBandbox.addEventListener(Events.ON_OK, new EventListener() {
+
+ @Override
+ public void onEvent(Event event) throws Exception {
+ String search = projectBandbox.getValue();
+ Search query = Search.query().eq(Element.ELT_EXTENSION, Project.EXT_PROJECT);
+ if (search != null && !search.isEmpty()) {
+ query = query.keyword(search);
+ }
+ Criteria criteria = query.criteria();
+ projectModel.setCriteria(criteria);
+ int totalSize = projectModel.getTotalSize();
+ Paging projectPaging = (Paging) getFellow("projectPaging");
+ projectPaging.setTotalSize(totalSize);
+ projectPaging.setActivePage(0);
+ projectBandbox.open();
+ }
+ });
+ }
+
+ protected void initListbox() {
+ Listbox projectListbox = (Listbox) getFellow("projectListbox");
+ projectListbox.setModel(projectModel);
+ ListitemRenderer renderer = getProjectRenderer();
+ projectListbox.setItemRenderer(renderer);
+ }
+
+ /*
+ * Renderers
+ */
+ public ListitemRenderer getProjectRenderer() {
+ return new ListitemRenderer() {
+
+ @Override
+ public void render(Listitem item, Object data) throws Exception {
+ item.setValue(data);
+ final Project project = (Project) data;
+ final String name = project.getName();
+ final Checkbox checkbox = new Checkbox(name);
+ Listcell cell = new Listcell();
+ cell.appendChild(checkbox);
+ item.appendChild(cell);
+ checkbox.addEventListener(Events.ON_CHECK, new EventListener() {
+
+ @Override
+ public void onEvent(Event event) throws Exception {
+ String projectId = project.getWikittyId();
+ if (checkbox.isChecked()) {
+ if (!projects.contains(projectId)) {
+ projects.add(projectId);
+ }
+ } else {
+ if (projects.contains(projectId)) {
+ projects.remove(projectId);
+ }
+ }
+ }
+ });
+ }
+ };
+ }
+}
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-11 15:58:53 UTC (rev 47)
+++ trunk/billy-ui-zk/src/main/webapp/WEB-INF/lang-addon.xml 2010-08-12 16:37:31 UTC (rev 48)
@@ -25,5 +25,29 @@
<component-class>org.chorem.billy.ui.CompanyBandboxMacro</component-class>
<macro-uri>macros/companyBandboxMacro.zul</macro-uri>
</component>
+
+ <component>
+ <component-name>companySearchMacro</component-name>
+ <component-class>org.chorem.billy.ui.CompanySearchMacro</component-class>
+ <macro-uri>macros/companySearchMacro.zul</macro-uri>
+ </component>
+
+ <component>
+ <component-name>categorySearchMacro</component-name>
+ <component-class>org.chorem.billy.ui.CategorySearchMacro</component-class>
+ <macro-uri>macros/categorySearchMacro.zul</macro-uri>
+ </component>
+
+ <component>
+ <component-name>projectSearchMacro</component-name>
+ <component-class>org.chorem.billy.ui.ProjectSearchMacro</component-class>
+ <macro-uri>macros/projectSearchMacro.zul</macro-uri>
+ </component>
+
+ <component>
+ <component-name>dateSearchMacro</component-name>
+ <component-class>org.chorem.billy.ui.DateSearchMacro</component-class>
+ <macro-uri>macros/dateSearchMacro.zul</macro-uri>
+ </component>
</language-addon>
Modified: trunk/billy-ui-zk/src/main/webapp/invoiceFormPage.zul
===================================================================
--- trunk/billy-ui-zk/src/main/webapp/invoiceFormPage.zul 2010-08-11 15:58:53 UTC (rev 47)
+++ trunk/billy-ui-zk/src/main/webapp/invoiceFormPage.zul 2010-08-12 16:37:31 UTC (rev 48)
@@ -17,12 +17,12 @@
<label value="Posted date" />
<datebox format="yyyy/MM/dd" value="@{composer.invoice.posted, save-when='saveInvoice.onClick'}" />
+ <categoryMacro id="categoryMacro" />
+
+ <companyMacro id="companyMacro" />
+
<projectMacro id="projectMacro" />
- <companyMacro id="companyMacro" />
-
- <categoryMacro id="categoryMacro" />
-
</vbox>
<space />
Modified: trunk/billy-ui-zk/src/main/webapp/invoicePage.zul
===================================================================
--- trunk/billy-ui-zk/src/main/webapp/invoicePage.zul 2010-08-11 15:58:53 UTC (rev 47)
+++ trunk/billy-ui-zk/src/main/webapp/invoicePage.zul 2010-08-12 16:37:31 UTC (rev 48)
@@ -1,13 +1,35 @@
-<?page id="home" title="HOME" cacheable="false" language="xul/html" zscriptLanguage="Java"?>
+<?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="win"?>
+<?init class="org.zkoss.zkplus.databind.AnnotateDataBinderInit" root="invoice"?>
-<window id="win" title="Win" border="normal" apply="org.chorem.billy.ui.InvoiceController">
+<window id="invoice" title="Invoice" border="normal" apply="org.chorem.billy.ui.InvoiceController">
<vbox>
<toolbarbutton id="newInvoice" label="Add new invoice" />
</vbox>
<separator bar="true" />
+ <vbox>
+ <separator/>
+ <dateSearchMacro id="dateSearchMacro" />
+ <separator />
+ <categorySearchMacro id="categorySearchMacro" />
+ <companySearchMacro id="companySearchMacro" />
+ <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>
</window>
\ No newline at end of file
Added: trunk/billy-ui-zk/src/main/webapp/macros/categorySearchMacro.zul
===================================================================
--- trunk/billy-ui-zk/src/main/webapp/macros/categorySearchMacro.zul (rev 0)
+++ trunk/billy-ui-zk/src/main/webapp/macros/categorySearchMacro.zul 2010-08-12 16:37:31 UTC (rev 48)
@@ -0,0 +1,15 @@
+<?page title="new page title" contentType="text/html;charset=UTF-8"?>
+<zk>
+ <hbox>
+ Category:
+ <bandbox id="categoryBandbox" mold="rounded">
+ <bandpopup>
+ <vbox>
+ <grid id="categoryGrid" width="200px">
+ </grid>
+ <paging id="categoryPaging" width="200px"/>
+ </vbox>
+ </bandpopup>
+ </bandbox>
+ </hbox>
+</zk>
\ No newline at end of file
Modified: trunk/billy-ui-zk/src/main/webapp/macros/companyBandboxMacro.zul
===================================================================
--- trunk/billy-ui-zk/src/main/webapp/macros/companyBandboxMacro.zul 2010-08-11 15:58:53 UTC (rev 47)
+++ trunk/billy-ui-zk/src/main/webapp/macros/companyBandboxMacro.zul 2010-08-12 16:37:31 UTC (rev 48)
@@ -4,7 +4,7 @@
<bandbox id="companyBandbox" mold="rounded">
<bandpopup>
<vbox>
- <listbox id="companyListbox" width="200px" >
+ <listbox rows="5" id="companyListbox" width="200px" >
<listhead>
<listheader label="Name" />
<listheader label="Type" />
Added: trunk/billy-ui-zk/src/main/webapp/macros/companySearchMacro.zul
===================================================================
--- trunk/billy-ui-zk/src/main/webapp/macros/companySearchMacro.zul (rev 0)
+++ trunk/billy-ui-zk/src/main/webapp/macros/companySearchMacro.zul 2010-08-12 16:37:31 UTC (rev 48)
@@ -0,0 +1,19 @@
+<?page title="new page title" contentType="text/html;charset=UTF-8"?>
+<zk>
+ <hbox>
+ Company:
+ <bandbox id="companyBandbox" mold="rounded">
+ <bandpopup>
+ <vbox>
+ <listbox rows="5" id="companyListbox" width="200px" >
+ <listhead>
+ <listheader label="Name" />
+ <listheader label="Type" />
+ </listhead>
+ </listbox>
+ <paging id="companyPaging" width="200px"/>
+ </vbox>
+ </bandpopup>
+ </bandbox>
+ </hbox>
+</zk>
\ No newline at end of file
Added: trunk/billy-ui-zk/src/main/webapp/macros/dateSearchMacro.zul
===================================================================
--- trunk/billy-ui-zk/src/main/webapp/macros/dateSearchMacro.zul (rev 0)
+++ trunk/billy-ui-zk/src/main/webapp/macros/dateSearchMacro.zul 2010-08-12 16:37:31 UTC (rev 48)
@@ -0,0 +1,14 @@
+<?page title="new page title" contentType="text/html;charset=UTF-8"?>
+<zk>
+ <hbox>
+ Start date : <datebox id="startDate" />
+ End date : <datebox id="endDate" />
+ </hbox>
+ <separator />
+ <hbox>
+ Type:
+ <checkbox label="Posted date" id="postedDate" />
+ <checkbox label="Expected date" id="expectedDate" />
+ <checkbox label="Payment date" id="paymentDate" />
+ </hbox>
+</zk>
\ No newline at end of file
Modified: trunk/billy-ui-zk/src/main/webapp/macros/projectBandboxMacro.zul
===================================================================
--- trunk/billy-ui-zk/src/main/webapp/macros/projectBandboxMacro.zul 2010-08-11 15:58:53 UTC (rev 47)
+++ trunk/billy-ui-zk/src/main/webapp/macros/projectBandboxMacro.zul 2010-08-12 16:37:31 UTC (rev 48)
@@ -4,7 +4,7 @@
<bandbox id="projectBandbox" mold="rounded">
<bandpopup>
<vbox>
- <listbox id="projectListbox" width="200px">
+ <listbox rows="5" id="projectListbox" width="200px">
<listhead>
<listheader label="Name" />
</listhead>
Added: trunk/billy-ui-zk/src/main/webapp/macros/projectSearchMacro.zul
===================================================================
--- trunk/billy-ui-zk/src/main/webapp/macros/projectSearchMacro.zul (rev 0)
+++ trunk/billy-ui-zk/src/main/webapp/macros/projectSearchMacro.zul 2010-08-12 16:37:31 UTC (rev 48)
@@ -0,0 +1,18 @@
+<?page title="new page title" contentType="text/html;charset=UTF-8"?>
+<zk>
+ <hbox>
+ Project:
+ <bandbox id="projectBandbox" mold="rounded">
+ <bandpopup>
+ <vbox>
+ <listbox rows="5" id="projectListbox" width="200px">
+ <listhead>
+ <listheader label="Name" />
+ </listhead>
+ </listbox>
+ <paging id="projectPaging" width="200px"/>
+ </vbox>
+ </bandpopup>
+ </bandbox>
+ </hbox>
+</zk>
\ No newline at end of file
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2010-08-11 15:58:53 UTC (rev 47)
+++ trunk/pom.xml 2010-08-12 16:37:31 UTC (rev 48)
@@ -138,13 +138,6 @@
</dependency>
<dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>${junit.version}</version>
- <scope>test</scope>
- </dependency>
-
- <dependency>
<groupId>org.nuiton.wikitty</groupId>
<artifactId>wikitty-api</artifactId>
<version>${wikitty.version}</version>
@@ -231,7 +224,7 @@
<chorem-data.version>0.1-SNAPSHOT</chorem-data.version>
<zk.version>5.0.2</zk.version>
- <wikitty.version>2.0</wikitty.version>
+ <wikitty.version>2.1-SNAPSHOT</wikitty.version>
<!-- Nuiton librairies -->
<topia.version>2.2.0</topia.version>
1
0
r47 - in trunk/billy-ui-zk/src/main: java/org/chorem/billy/ui webapp webapp/WEB-INF webapp/macros
by bbrossaud@users.chorem.org 11 Aug '10
by bbrossaud@users.chorem.org 11 Aug '10
11 Aug '10
Author: bbrossaud
Date: 2010-08-11 17:58:53 +0200 (Wed, 11 Aug 2010)
New Revision: 47
Url: http://chorem.org/repositories/revision/billy/47
Log:
addition macro, use a better pagination, can select a subcategory
Added:
trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CategoryBandboxMacro.java
trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CategoryGroupModel.java
trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CategoryRenderer.java
trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CompanyBandboxMacro.java
trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/ProjectBandboxMacro.java
trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/ProjectFormController.java
trunk/billy-ui-zk/src/main/webapp/WEB-INF/lang-addon.xml
trunk/billy-ui-zk/src/main/webapp/macros/
trunk/billy-ui-zk/src/main/webapp/macros/categoryBandboxMacro.zul
trunk/billy-ui-zk/src/main/webapp/macros/companyBandboxMacro.zul
trunk/billy-ui-zk/src/main/webapp/macros/projectBandboxMacro.zul
Modified:
trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CategoryModel.java
trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CompanyModel.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/InvoiceFormController.java
trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/ProjectModel.java
trunk/billy-ui-zk/src/main/webapp/WEB-INF/zk.xml
trunk/billy-ui-zk/src/main/webapp/invoiceFormPage.zul
Added: trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CategoryBandboxMacro.java
===================================================================
--- trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CategoryBandboxMacro.java (rev 0)
+++ trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CategoryBandboxMacro.java 2010-08-11 15:58:53 UTC (rev 47)
@@ -0,0 +1,175 @@
+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.SubCategory;
+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.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.Bandbox;
+import org.zkoss.zul.Grid;
+import org.zkoss.zul.Listbox;
+import org.zkoss.zul.Listcell;
+import org.zkoss.zul.Listhead;
+import org.zkoss.zul.Listheader;
+import org.zkoss.zul.Listitem;
+import org.zkoss.zul.ListitemRenderer;
+import org.zkoss.zul.Paging;
+import org.zkoss.zul.Row;
+import org.zkoss.zul.RowRenderer;
+import org.zkoss.zul.event.PagingEvent;
+
+public class CategoryBandboxMacro extends HtmlMacroComponent {
+
+ private final int pageSize = 2;
+
+ protected WikittyProxy proxy = ChoremDataProxy.getInstance();
+ protected CategoryModel categoryModel = new CategoryModel(pageSize);
+ protected String subCategoryId = null;
+
+ @Override
+ public void afterCompose() {
+ super.afterCompose();
+ initPaging();
+ initBandbox();
+ initGrid();
+ }
+
+ protected void initPaging() {
+ Criteria criteria = Search.query().eq(Element.ELT_EXTENSION, Category.EXT_CATEGORY).criteria();
+ categoryModel.setCriteria(criteria);
+ int totalSize = categoryModel.getTotalSize();
+ Paging categoryPaging = (Paging) getFellow("categoryPaging");
+ categoryPaging.setTotalSize(totalSize);
+ categoryPaging.setPageSize(pageSize);
+ categoryPaging.addEventListener("onPaging", new EventListener() {
+
+ @Override
+ public void onEvent(Event event) throws Exception {
+ PagingEvent pagingEvent = (PagingEvent) event;
+ int activePage = pagingEvent.getActivePage();
+ categoryModel.setActivePage(activePage);
+ }
+ });
+ }
+
+ protected void initBandbox() {
+ final Bandbox categoryBandbox = (Bandbox) getFellow("categoryBandbox");
+ categoryBandbox.addEventListener(Events.ON_OK, new EventListener() {
+
+ @Override
+ public void onEvent(Event event) throws Exception {
+ String search = categoryBandbox.getValue();
+ Search query = Search.query().eq(Element.ELT_EXTENSION, Category.EXT_CATEGORY);
+ if (search != null && !search.isEmpty()) {
+ query = query.keyword(search);
+ }
+ Criteria criteria = query.criteria();
+ categoryModel.setCriteria(criteria);
+ int totalSize = categoryModel.getTotalSize();
+ Paging categoryPaging = (Paging) getFellow("categoryPaging");
+ categoryPaging.setTotalSize(totalSize);
+ categoryPaging.setActivePage(0);
+ categoryBandbox.open();
+ }
+ });
+ }
+
+ protected void initGrid() {
+ Grid categoryGrid = (Grid) getFellow("categoryGrid");
+ categoryGrid.setModel(categoryModel);
+ RowRenderer renderer = getCategoryRenderer();
+ categoryGrid.setRowRenderer(renderer);
+ }
+
+ /*
+ * Renderer
+ */
+ protected void setSubCategoryHeader(Listbox listbox, Category category) {
+ if (listbox != null) {
+ Listhead head = new Listhead();
+ listbox.appendChild(head);
+ String name = category.getName();
+ if (name == null) {
+ name = "";
+ }
+ Listheader header = new Listheader(name);
+ head.appendChild(header);
+ }
+ }
+
+ protected void createSubCategoryListbox(Listbox listbox, Set<String> subCategoryIds) {
+ if (subCategoryIds != null && !subCategoryIds.isEmpty()) {
+ List<SubCategory> subCategories = proxy.restore(SubCategory.class, new ArrayList<String>(subCategoryIds));
+ SubCategoryModel subCategoryModel = new SubCategoryModel();
+ subCategoryModel.setSubCategories(subCategories);
+ listbox.setModel(subCategoryModel);
+ listbox.setItemRenderer(new ListitemRenderer() {
+
+ @Override
+ public void render(Listitem item, Object data) throws Exception {
+ item.setValue(data);
+ final SubCategory subCategory = (SubCategory) data;
+ final String name = subCategory.getName();
+ String id = subCategory.getWikittyId();
+ if (id != null && id.equals(subCategoryId)) {
+ Bandbox categoryBandbox = (Bandbox) getFellow("categoryBandbox");
+ categoryBandbox.setValue(name);
+ categoryBandbox.close();
+ }
+ Listcell cell = new Listcell(name);
+ item.appendChild(cell);
+ item.addEventListener(Events.ON_DOUBLE_CLICK, new EventListener() {
+
+ @Override
+ public void onEvent(Event event) throws Exception {
+ Bandbox categoryBandbox = (Bandbox) getFellow("categoryBandbox");
+ subCategoryId = subCategory.getWikittyId();
+ categoryBandbox.setValue(name);
+ categoryBandbox.close();
+ }
+ });
+ }
+ });
+ }
+ }
+
+ public RowRenderer getCategoryRenderer() {
+ return new RowRenderer() {
+
+ @Override
+ public void render(Row row, Object data) throws Exception {
+ row.setValue(data);
+ final Category category = (Category) data;
+ Set<String> subCategoryIds = category.getSubCategory();
+ Listbox listbox = new Listbox();
+ setSubCategoryHeader(listbox, category);
+ createSubCategoryListbox(listbox, subCategoryIds);
+ row.appendChild(listbox);
+
+ }
+ };
+ }
+
+ /*
+ * Setters
+ */
+ public void setSubCategoryId(String id) {
+ subCategoryId = id;
+ }
+
+ /*
+ * Getters
+ */
+ public String getSubCategoryId() {
+ return subCategoryId;
+ }
+}
Added: trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CategoryGroupModel.java
===================================================================
--- trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CategoryGroupModel.java (rev 0)
+++ trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CategoryGroupModel.java 2010-08-11 15:58:53 UTC (rev 47)
@@ -0,0 +1,142 @@
+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.SubCategory;
+import org.nuiton.wikitty.Criteria;
+import org.nuiton.wikitty.PagedResult;
+import org.nuiton.wikitty.WikittyProxy;
+import org.nuiton.wikitty.search.Search;
+import org.zkoss.zul.AbstractGroupsModel;
+import org.zkoss.zul.event.GroupsDataEvent;
+
+public class CategoryGroupModel extends AbstractGroupsModel {
+
+ protected WikittyProxy proxy = ChoremDataProxy.getInstance();
+ protected Criteria criteria = null;
+ protected int itemsByPage = 1;
+ protected int currentPage = 0;
+ protected List<Category> categories = new ArrayList<Category>();
+ protected List<Boolean> closes = new ArrayList<Boolean>();
+
+ public CategoryGroupModel(int itemsByPage) {
+ this.itemsByPage = itemsByPage;
+ createList();
+ }
+
+ @Override
+ public Object getGroup(int groupIndex) {
+ pageChange(groupIndex);
+ int indexList = groupIndex % itemsByPage;
+ Category category = categories.get(indexList);
+ return category;
+ }
+
+ @Override
+ public int getGroupCount() {
+ if (criteria == null) {
+ return 0;
+ }
+ Criteria criteria = this.criteria.setFirstIndex(0).setEndIndex(0);
+ PagedResult<Category> result = proxy.findAllByCriteria(Category.class, criteria);
+ return result.getNumFound();
+ }
+
+ @Override
+ public Object getChild(int groupIndex, int index) {
+ pageChange(groupIndex);
+ int indexList = groupIndex % itemsByPage;
+ Category category = categories.get(indexList);
+ Set<String> ids = category.getSubCategory();
+ if (ids != null && ids.size() > 0) {
+ List<String> subCategories = new ArrayList<String>(ids);
+ String id = subCategories.get(0);
+ SubCategory subCategory = proxy.restore(SubCategory.class, id);
+ return subCategory;
+ }
+ return null;
+ }
+
+ @Override
+ public int getChildCount(int groupIndex) {
+ pageChange(groupIndex);
+ int indexList = groupIndex % itemsByPage;
+ Category category = categories.get(indexList);
+ Set<String> subCategories = category.getSubCategory();
+ if (subCategories == null || subCategories.isEmpty()) {
+ return 0;
+ }
+ int size = subCategories.size();
+ return size;
+ }
+
+ @Override
+ public Object getGroupfoot(int groupIndex) {
+ return null;
+ }
+
+ @Override
+ public boolean hasGroupfoot(int groupIndex) {
+ return false;
+ }
+
+ @Override
+ public boolean isClose(int groupIndex) {
+ int indexList = groupIndex % itemsByPage;
+ boolean bool = closes.get(indexList);
+ return bool;
+ }
+
+ @Override
+ public void setClose(int groupIndex, boolean close) {
+ int indexList = groupIndex % itemsByPage;
+ Boolean bool = closes.get(indexList);
+ bool = close;
+ }
+
+ public void pageChange(int index) {
+ int item = index;
+ int page = item / itemsByPage;
+ if (page != currentPage ) {
+ currentPage = page;
+ createList();
+ }
+ }
+
+ protected void createList() {
+ if (criteria != null) {
+ int first = currentPage * itemsByPage;
+ int end = first + (itemsByPage - 1);
+ Criteria criteria = this.criteria.setFirstIndex(first).setEndIndex(end);
+ List<Category> Categorys = proxy.findAllByCriteria(Category.class, criteria).getAll();
+ this.categories = new ArrayList<Category>(Categorys);
+ createOpenList();
+ }
+ }
+
+ protected void createOpenList() {
+ closes = new ArrayList<Boolean>();
+ if (categories != null) {
+ int size = categories.size();
+ for (int count = 0; count < size; ++count) {
+ Boolean bool = new Boolean(false);
+ closes.add(bool);
+ }
+ }
+ }
+
+ public void reload() {
+ createList();
+ fireEvent(GroupsDataEvent.CONTENTS_CHANGED, 0, -1, -1);
+ }
+
+ public void setCriteria(Criteria criteria) {
+ if (criteria != null) {
+ this.criteria = criteria;
+ reload();
+ }
+ }
+}
Modified: trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CategoryModel.java
===================================================================
--- trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CategoryModel.java 2010-08-11 14:49:43 UTC (rev 46)
+++ trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CategoryModel.java 2010-08-11 15:58:53 UTC (rev 47)
@@ -15,31 +15,24 @@
protected WikittyProxy proxy = ChoremDataProxy.getInstance();
protected Criteria criteria = null;
- protected int itemsByPage = 1;
- protected int currentPage = 0;
+ protected int pageSize = 1;
+ protected int activePage = 0;
protected List<Category> categories = new ArrayList<Category>();
- public CategoryModel(int itemsByPage) {
- this.itemsByPage = itemsByPage;
+ public CategoryModel(int pageSize) {
+ this.pageSize = pageSize;
createList();
}
@Override
public Object getElementAt(int index) {
- pageChange(index);
- int indexList = index % itemsByPage;
- Category Category = categories.get(indexList);
+ Category Category = categories.get(index);
return Category;
}
@Override
public int getSize() {
- if (criteria == null) {
- return 0;
- }
- Criteria criteria = this.criteria.setFirstIndex(0).setEndIndex(0);
- PagedResult<Category> result = proxy.findAllByCriteria(Category.class, criteria);
- return result.getNumFound();
+ return categories.size();
}
@Override
@@ -49,16 +42,25 @@
for (Category data : categories) {
String dataId = data.getWikittyId();
if (id.equals(dataId)) {
- index = categories.indexOf(data) + (itemsByPage * currentPage);
+ index = categories.indexOf(data);
break;
}
}
return index;
}
+ public int getTotalSize() {
+ if (criteria == null) {
+ return 0;
+ }
+ Criteria criteria = this.criteria.setFirstIndex(0).setEndIndex(0);
+ PagedResult<Category> result = proxy.findAllByCriteria(Category.class, criteria);
+ return result.getNumFound();
+ }
+
public void addData(Category newData) {
int listSize = categories.size();
- if (listSize < (itemsByPage)) {
+ if (listSize < (pageSize)) {
categories.add(newData);
}
int size = getSize();
@@ -69,20 +71,17 @@
int index = categories.indexOf(data);
if (index != -1) {
categories.remove(index);
- int interval = index + (itemsByPage * currentPage);
- fireEvent(ListDataEvent.INTERVAL_REMOVED, interval, interval);
+ fireEvent(ListDataEvent.INTERVAL_REMOVED, index, index);
}
}
public void reloadContent(int rowIndex) {
- int indexList = rowIndex % itemsByPage;
- Category Category = categories.get(indexList);
+ Category Category = categories.get(rowIndex);
Category = proxy.restore(Category.class, Category.getWikittyId());
fireEvent(ListDataEvent.CONTENTS_CHANGED, rowIndex, rowIndex);
}
public void reload() {
- createList();
fireEvent(ListDataEvent.CONTENTS_CHANGED, -1, -1);
}
@@ -93,26 +92,24 @@
public void setCriteria(Criteria criteria) {
if (criteria != null) {
this.criteria = criteria;
- reload();
- }
- }
-
- public void pageChange(int index) {
- int item = index;
- int page = item / itemsByPage;
- if (page != currentPage ) {
- currentPage = page;
+ activePage = 0;
createList();
}
}
protected void createList() {
if (criteria != null) {
- int first = currentPage * itemsByPage;
- int end = first + (itemsByPage - 1);
+ int first = activePage * pageSize;
+ int end = first + (pageSize - 1);
Criteria criteria = this.criteria.setFirstIndex(first).setEndIndex(end);
List<Category> Categorys = proxy.findAllByCriteria(Category.class, criteria).getAll();
this.categories = new ArrayList<Category>(Categorys);
}
+ fireEvent(ListDataEvent.CONTENTS_CHANGED, -1, -1);
}
+
+ public void setActivePage(int activePage) {
+ this.activePage = activePage;
+ createList();
+ }
}
\ No newline at end of file
Added: trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CategoryRenderer.java
===================================================================
--- trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CategoryRenderer.java (rev 0)
+++ trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CategoryRenderer.java 2010-08-11 15:58:53 UTC (rev 47)
@@ -0,0 +1,7 @@
+package org.chorem.billy.ui;
+
+import org.zkoss.zul.ListgroupRendererExt;
+import org.zkoss.zul.ListitemRenderer;
+
+public interface CategoryRenderer extends ListitemRenderer, ListgroupRendererExt {
+}
Added: trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CompanyBandboxMacro.java
===================================================================
--- trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CompanyBandboxMacro.java (rev 0)
+++ trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CompanyBandboxMacro.java 2010-08-11 15:58:53 UTC (rev 47)
@@ -0,0 +1,131 @@
+package org.chorem.billy.ui;
+
+import org.chorem.data.bonzoms.Company;
+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.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.Bandbox;
+import org.zkoss.zul.Listbox;
+import org.zkoss.zul.Listcell;
+import org.zkoss.zul.Listitem;
+import org.zkoss.zul.ListitemRenderer;
+import org.zkoss.zul.Paging;
+import org.zkoss.zul.event.PagingEvent;
+
+public class CompanyBandboxMacro extends HtmlMacroComponent {
+
+ private final int pageSize = 5;
+
+ protected WikittyProxy proxy = ChoremDataProxy.getInstance();
+ protected CompanyModel companyModel = new CompanyModel(pageSize);
+ protected String companyId = null;
+
+ @Override
+ public void afterCompose() {
+ super.afterCompose();
+ initPaging();
+ initBandbox();
+ initListbox();
+ }
+
+ protected void initPaging() {
+ Criteria criteria = Search.query().eq(Element.ELT_EXTENSION, Company.EXT_COMPANY).criteria();
+ companyModel.setCriteria(criteria);
+
+ int totalSize = companyModel.getTotalSize();
+ Paging companyPaging = (Paging) getFellow("companyPaging");
+ companyPaging.setTotalSize(totalSize);
+ companyPaging.setPageSize(pageSize);
+ companyPaging.addEventListener("onPaging", new EventListener() {
+
+ @Override
+ public void onEvent(Event event) throws Exception {
+ PagingEvent pagingEvent = (PagingEvent) event;
+ int activePage = pagingEvent.getActivePage();
+ companyModel.setActivePage(activePage);
+ }
+ });
+ }
+
+ protected void initBandbox() {
+ final Bandbox companyBandbox = (Bandbox) getFellow("companyBandbox");
+ companyBandbox.addEventListener(Events.ON_OK, new EventListener() {
+
+ @Override
+ public void onEvent(Event event) throws Exception {
+ String search = companyBandbox.getValue();
+ Search query = Search.query().eq(Element.ELT_EXTENSION, Company.EXT_COMPANY);
+ if (search != null && !search.isEmpty()) {
+ query = query.keyword(search);
+ }
+ Criteria criteria = query.criteria();
+ companyModel.setCriteria(criteria);
+ int totalSize = companyModel.getTotalSize();
+ Paging companyPaging = (Paging) getFellow("projectPaging");
+ companyPaging.setTotalSize(totalSize);
+ companyPaging.setActivePage(0);
+ companyBandbox.open();
+ }
+ });
+ }
+
+ protected void initListbox() {
+ Listbox companyListbox = (Listbox) getFellow("companyListbox");
+ companyListbox.setModel(companyModel);
+ ListitemRenderer renderer = getCompanyRenderer();
+ companyListbox.setItemRenderer(renderer);
+ }
+
+ /*
+ * Renderer
+ */
+ public ListitemRenderer getCompanyRenderer() {
+ return new ListitemRenderer() {
+
+ @Override
+ public void render(Listitem item, Object data) throws Exception {
+ item.setValue(data);
+ final Company company = (Company) data;
+ final Bandbox companyBandbox = (Bandbox) getFellow("companyBandbox");
+ final String id = company.getWikittyId();
+ final String name = company.getName();
+ if (companyId != null && companyId.equals(id)) {
+ companyBandbox.setValue(name);
+ companyBandbox.close();
+ }
+ Listcell cell1 = new Listcell(name);
+ Listcell cell2 = new Listcell(company.getType());
+ item.appendChild(cell1);
+ item.appendChild(cell2);
+ item.addEventListener(Events.ON_DOUBLE_CLICK, new EventListener() {
+
+ @Override
+ public void onEvent(Event event) throws Exception {
+ companyId = id;
+ companyBandbox.setValue(name);
+ companyBandbox.close();
+ }
+ });
+ }
+ };
+ }
+
+ /*
+ * Setters
+ */
+ public void setCompanyId(String id) {
+ companyId = id;
+ }
+
+ /*
+ * Getters
+ */
+ public String getCompanyId() {
+ return companyId;
+ }
+}
Modified: trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CompanyModel.java
===================================================================
--- trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CompanyModel.java 2010-08-11 14:49:43 UTC (rev 46)
+++ trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CompanyModel.java 2010-08-11 15:58:53 UTC (rev 47)
@@ -5,6 +5,7 @@
import org.chorem.billy.ui.ChoremDataProxy;
import org.chorem.data.bonzoms.Company;
+import org.chorem.data.bonzoms.Project;
import org.nuiton.wikitty.Criteria;
import org.nuiton.wikitty.PagedResult;
import org.nuiton.wikitty.WikittyProxy;
@@ -16,50 +17,52 @@
protected WikittyProxy proxy = ChoremDataProxy.getInstance();
protected Criteria criteria = null;
- protected int itemsByPage = 1;
- protected int currentPage = 0;
+ protected int activePage = 0;
+ protected int pageSize = 1;
protected List<Company> companies = new ArrayList<Company>();
- public CompanyModel(int itemsByPage) {
- this.itemsByPage = itemsByPage;
+ public CompanyModel(int pageSize) {
+ this.pageSize = pageSize;
createList();
}
@Override
public Object getElementAt(int index) {
- pageChange(index);
- int indexList = index % itemsByPage;
- Company Company = companies.get(indexList);
- return Company;
+ Company company = companies.get(index);
+ return company;
}
@Override
public int getSize() {
- if (criteria == null) {
- return 0;
- }
- Criteria criteria = this.criteria.setFirstIndex(0).setEndIndex(0);
- PagedResult<Company> result = proxy.findAllByCriteria(Company.class, criteria);
- return result.getNumFound();
+ return companies.size();
}
@Override
public int indexOf(Object obj) {
int index = 0;
- String id = ((Company) obj).getWikittyId();
+ String id = ((Project) obj).getWikittyId();
for (Company data : companies) {
String dataId = data.getWikittyId();
if (id.equals(dataId)) {
- index = companies.indexOf(data) + (itemsByPage * currentPage);
+ index = companies.indexOf(data);
break;
}
}
return index;
}
+ public int getTotalSize() {
+ if (criteria == null) {
+ return 0;
+ }
+ Criteria criteria = this.criteria.setFirstIndex(0).setEndIndex(0);
+ PagedResult<Company> result = proxy.findAllByCriteria(Company.class, criteria);
+ return result.getNumFound();
+ }
+
public void addData(Company newData) {
- int listSize = companies.size();
- if (listSize < (itemsByPage)) {
+ int listSize = companies.size();
+ if (listSize < (pageSize)) {
companies.add(newData);
}
int size = getSize();
@@ -67,23 +70,20 @@
}
public void removeData(Company data) {
- int index = companies.indexOf(data);
- if (index != -1) {
- companies.remove(index);
- int interval = index + (itemsByPage * currentPage);
+ int interval = companies.indexOf(data);
+ if (interval != -1) {
+ companies.remove(interval);
fireEvent(ListDataEvent.INTERVAL_REMOVED, interval, interval);
}
}
public void reloadContent(int rowIndex) {
- int indexList = rowIndex % itemsByPage;
- Company Company = companies.get(indexList);
- Company = proxy.restore(Company.class, Company.getWikittyId());
+ Company company = companies.get(rowIndex);
+ company = proxy.restore(Company.class, company.getWikittyId());
fireEvent(ListDataEvent.CONTENTS_CHANGED, rowIndex, rowIndex);
}
public void reload() {
- createList();
fireEvent(ListDataEvent.CONTENTS_CHANGED, -1, -1);
}
@@ -94,26 +94,24 @@
public void setCriteria(Criteria criteria) {
if (criteria != null) {
this.criteria = criteria;
- reload();
- }
- }
-
- public void pageChange(int index) {
- int item = index;
- int page = item / itemsByPage;
- if (page != currentPage ) {
- currentPage = page;
+ activePage = 0;
createList();
}
}
protected void createList() {
if (criteria != null) {
- int first = currentPage * itemsByPage;
- int end = first + (itemsByPage - 1);
+ int first = activePage * pageSize;
+ int end = first + (pageSize - 1);
Criteria criteria = this.criteria.setFirstIndex(first).setEndIndex(end);
- List<Company> Companies = proxy.findAllByCriteria(Company.class, criteria).getAll();
- this.companies = new ArrayList<Company>(Companies);
+ List<Company> companies = proxy.findAllByCriteria(Company.class, criteria).getAll();
+ this.companies = new ArrayList<Company>(companies);
}
+ fireEvent(ListDataEvent.CONTENTS_CHANGED, -1, -1);
}
+
+ public void setActivePage(int activePage) {
+ this.activePage = activePage;
+ createList();
+ }
}
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-11 14:49:43 UTC (rev 46)
+++ trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/InvoiceController.java 2010-08-11 15:58:53 UTC (rev 47)
@@ -1,8 +1,12 @@
package org.chorem.billy.ui;
+import java.util.ArrayList;
+import java.util.List;
+
import org.chorem.billy.ui.ChoremDataProxy;
+import org.chorem.data.bonzoms.Project;
+import org.chorem.data.bonzoms.ProjectImpl;
import org.nuiton.wikitty.WikittyProxy;
-import org.zkoss.zk.ui.Execution;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.util.GenericForwardComposer;
Modified: trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/InvoiceFormController.java
===================================================================
--- trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/InvoiceFormController.java 2010-08-11 14:49:43 UTC (rev 46)
+++ trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/InvoiceFormController.java 2010-08-11 15:58:53 UTC (rev 47)
@@ -1,37 +1,13 @@
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.Company;
import org.chorem.data.bonzoms.Invoice;
import org.chorem.data.bonzoms.InvoiceImpl;
-import org.chorem.data.bonzoms.Project;
-import org.chorem.data.bonzoms.SubCategory;
-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.zkplus.databind.AnnotateDataBinder;
import org.zkoss.zkplus.databind.DataBinder;
-import org.zkoss.zul.Bandbox;
-import org.zkoss.zul.Checkbox;
-import org.zkoss.zul.Listbox;
-import org.zkoss.zul.Listcell;
-import org.zkoss.zul.Listhead;
-import org.zkoss.zul.Listheader;
-import org.zkoss.zul.Listitem;
-import org.zkoss.zul.ListitemRenderer;
-import org.zkoss.zul.Row;
-import org.zkoss.zul.RowRenderer;
import org.zkoss.zul.Window;
public class InvoiceFormController extends GenericForwardComposer {
@@ -39,13 +15,11 @@
protected WikittyProxy proxy = ChoremDataProxy.getInstance();
protected Invoice invoice = new InvoiceImpl();
- protected CategoryModel categoryModel = new CategoryModel(2);
- protected CompanyModel companyModel = new CompanyModel(5);
- protected ProjectModel projectModel = new ProjectModel(5);
+ protected CategoryBandboxMacro categoryMacro;
+ protected ProjectBandboxMacro projectMacro;
+ protected CompanyBandboxMacro companyMacro;
- protected Bandbox categoryBandbox;
- protected Bandbox companyBandbox;
- protected Bandbox projectBandbox;
+ public static final String EVENT_ON_SAVE_INVOICE = "onSaveInvoice";
@Override
public void doAfterCompose(Component comp) throws Exception {
@@ -60,223 +34,39 @@
if (invoiceId != null) {
invoice = proxy.restore(Invoice.class, invoiceId);
}
- initCategoryBandbox();
- initCompanyBandbox();
- initProjectBandbox();
+ initCategoryMacro();
+ initCompanyMacro();
+ initProjectMacro();
DataBinder binder = new AnnotateDataBinder(comp);
binder.bindBean("composer", this);
binder.loadAll();
}
- protected void initCategoryBandbox() {
- onOK$categoryBandbox();
- categoryBandbox.close();
+ protected void initCategoryMacro() {
+ String id = invoice.getSubCategory();
+ if (id != null) {
+ categoryMacro.setSubCategoryId(id);
+ }
}
- protected void initCompanyBandbox() {
- onOK$companyBandbox();
- String companyId = invoice.getCompany();
- if (companyId != null && !companyId.isEmpty()) {
- Company company = proxy.restore(Company.class, companyId);
- companyBandbox.setValue(company.getName());
+ protected void initCompanyMacro() {
+ String id = invoice.getCompany();
+ if (id != null) {
+ companyMacro.setCompanyId(id);
}
- companyBandbox.close();
}
- protected void initProjectBandbox() {
- onOK$projectBandbox();
- String projectId = invoice.getProject();
- if (projectId != null && !projectId.isEmpty()) {
- Project project = proxy.restore(Project.class, projectId);
- projectBandbox.setValue(project.getName());
+ protected void initProjectMacro() {
+ String id = invoice.getProject();
+ if (id != null) {
+ projectMacro.setProjectId(id);
}
- projectBandbox.close();
}
-
- protected void setSubCategoryHeader(Listbox listbox, Category category) {
- if (listbox != null) {
- Listhead head = new Listhead();
- listbox.appendChild(head);
- String name = category.getName();
- if (name == null) {
- name = "";
- }
- Listheader header = new Listheader(name);
- head.appendChild(header);
- }
- }
/*
- * Renderers
- */
- public ListitemRenderer getCompanyRenderer() {
- return new ListitemRenderer() {
-
- @Override
- public void render(Listitem item, Object data) throws Exception {
- item.setValue(data);
- final Company company = (Company) data;
- Listcell name = new Listcell(company.getName());
- Listcell type = new Listcell(company.getType());
- item.appendChild(name);
- item.appendChild(type);
- item.addEventListener(Events.ON_DOUBLE_CLICK, new EventListener() {
-
- @Override
- public void onEvent(Event event) throws Exception {
- invoice.setCompany(company.getWikittyId());
- companyBandbox.setValue(company.getName());
- companyBandbox.close();
- }
- });
- }
- };
- }
-
- protected void createSubCategoryListbox(Listbox listbox, Set<String> subCategoryIds) {
- if (subCategoryIds != null && !subCategoryIds.isEmpty()) {
- List<SubCategory> subCategories = proxy.restore(SubCategory.class, new ArrayList<String>(subCategoryIds));
- SubCategoryModel subCategoryModel = new SubCategoryModel();
- subCategoryModel.setSubCategories(subCategories);
- listbox.setModel(subCategoryModel);
-
- listbox.setItemRenderer(new ListitemRenderer() {
-
- @Override
- public void render(Listitem item, Object data) throws Exception {
- item.setValue(data);
- final SubCategory subCategory = (SubCategory) data;
- Listcell cell = new Listcell();
- Checkbox checkbox = new Checkbox(subCategory.getName());
- Set<String> ids = invoice.getSubCategory();
- if (ids != null && ids.contains(subCategory.getWikittyId())) {
- checkbox.setChecked(true);
- }
- cell.appendChild(checkbox);
- item.appendChild(cell);
- checkbox.addEventListener(Events.ON_CHECK, new EventListener() {
-
- @Override
- public void onEvent(Event event) throws Exception {
- Checkbox checkbox = (Checkbox) event.getTarget();
- if (checkbox.isChecked()) {
- invoice.addSubCategory(subCategory.getWikittyId());
- } else {
- String id = subCategory.getWikittyId();
- Set<String> subCategories = invoice.getSubCategory();
- if (subCategories != null && subCategories.contains(id)) {
- invoice.removeSubCategory(id);
- }
- }
- }
- });
- }
- });
- }
- }
-
- public RowRenderer getCategoryRenderer() {
- return new RowRenderer() {
-
- @Override
- public void render(Row row, Object data) throws Exception {
- row.setValue(data);
- final Category category = (Category) data;
- Set<String> subCategoryIds = category.getSubCategory();
- Listbox listbox = new Listbox();
- setSubCategoryHeader(listbox, category);
- createSubCategoryListbox(listbox, subCategoryIds);
- row.appendChild(listbox);
-
- }
- };
- }
-
- public ListitemRenderer getProjectRenderer() {
- return new ListitemRenderer() {
-
- @Override
- public void render(Listitem item, Object data) throws Exception {
- item.setValue(data);
- final Project project = (Project) data;
- Listcell name = new Listcell(project.getName());
- item.appendChild(name);
- item.addEventListener(Events.ON_DOUBLE_CLICK, new EventListener() {
-
- @Override
- public void onEvent(Event event) throws Exception {
- invoice.setProject(project.getWikittyId());
- projectBandbox.setValue(project.getName());
- projectBandbox.close();
- }
- });
- }
- };
- }
-
- /*
- * Events
- */
- public void onOK$companyBandbox() {
- String search = companyBandbox.getValue();
- Search query = Search.query().eq(Element.ELT_EXTENSION, Company.EXT_COMPANY);
- if (search != null && !search.isEmpty()) {
- query = query.keyword(search);
- }
- Criteria criteria = query.criteria();
- companyModel.setCriteria(criteria);
- companyBandbox.open();
- }
-
- public void onOK$projectBandbox() {
- String search = projectBandbox.getValue();
- Search query = Search.query().eq(Element.ELT_EXTENSION, Project.EXT_PROJECT);
- if (search != null && !search.isEmpty()) {
- query = query.keyword(search);
- }
- Criteria criteria = query.criteria();
- projectModel.setCriteria(criteria);
- projectBandbox.open();
- }
-
- public void onOK$categoryBandbox() {
- String search = categoryBandbox.getValue();
- Search query = Search.query().eq(Element.ELT_EXTENSION, Category.EXT_CATEGORY);
- if (search != null && !search.isEmpty()) {
- query = query.keyword(search);
- }
- Criteria criteria = query.criteria();
- categoryModel.setCriteria(criteria);
- categoryBandbox.open();
- }
-
- public void onClick$newCategory() {
- Window win = (Window) Executions.createComponents("categoryFormPage.zul", null, null);
- win.addEventListener(CategoryFormController.EVENT_ON_SAVE_CATEGORY, new EventListener() {
-
- @Override
- public void onEvent(Event event) throws Exception {
- categoryModel.reload();
- }
- });
- }
-
- /*
* Getters
*/
public Invoice getInvoice() {
return invoice;
}
-
- public CategoryModel getCategoryModel() {
- return categoryModel;
- }
-
- public ProjectModel getProjectModel() {
- return projectModel;
- }
-
- public CompanyModel getCompanyModel() {
- return companyModel;
- }
}
\ No newline at end of file
Added: trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/ProjectBandboxMacro.java
===================================================================
--- trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/ProjectBandboxMacro.java (rev 0)
+++ trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/ProjectBandboxMacro.java 2010-08-11 15:58:53 UTC (rev 47)
@@ -0,0 +1,129 @@
+package org.chorem.billy.ui;
+
+import org.chorem.data.bonzoms.Project;
+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.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.Bandbox;
+import org.zkoss.zul.Listbox;
+import org.zkoss.zul.Listcell;
+import org.zkoss.zul.Listitem;
+import org.zkoss.zul.ListitemRenderer;
+import org.zkoss.zul.Paging;
+import org.zkoss.zul.event.PagingEvent;
+
+public class ProjectBandboxMacro extends HtmlMacroComponent {
+
+ private final int pageSize = 5;
+
+ protected WikittyProxy proxy = ChoremDataProxy.getInstance();
+ protected ProjectModel projectModel = new ProjectModel(pageSize);
+ protected String projectId = null;
+
+ @Override
+ public void afterCompose() {
+ super.afterCompose();
+ initPaging();
+ initBandbox();
+ initListbox();
+ }
+
+ protected void initPaging() {
+ Criteria criteria = Search.query().eq(Element.ELT_EXTENSION, Project.EXT_PROJECT).criteria();
+ projectModel.setCriteria(criteria);
+
+ int totalSize = projectModel.getTotalSize();
+ Paging projectPaging = (Paging) getFellow("projectPaging");
+ projectPaging.setTotalSize(totalSize);
+ projectPaging.setPageSize(pageSize);
+ projectPaging.addEventListener("onPaging", new EventListener() {
+
+ @Override
+ public void onEvent(Event event) throws Exception {
+ PagingEvent pagingEvent = (PagingEvent) event;
+ int activePage = pagingEvent.getActivePage();
+ projectModel.setActivePage(activePage);
+ }
+ });
+ }
+
+ protected void initBandbox() {
+ final Bandbox projectBandbox = (Bandbox) getFellow("projectBandbox");
+ projectBandbox.addEventListener(Events.ON_OK, new EventListener() {
+
+ @Override
+ public void onEvent(Event event) throws Exception {
+ String search = projectBandbox.getValue();
+ Search query = Search.query().eq(Element.ELT_EXTENSION, Project.EXT_PROJECT);
+ if (search != null && !search.isEmpty()) {
+ query = query.keyword(search);
+ }
+ Criteria criteria = query.criteria();
+ projectModel.setCriteria(criteria);
+ int totalSize = projectModel.getTotalSize();
+ Paging projectPaging = (Paging) getFellow("projectPaging");
+ projectPaging.setTotalSize(totalSize);
+ projectPaging.setActivePage(0);
+ projectBandbox.open();
+ }
+ });
+ }
+
+ protected void initListbox() {
+ Listbox projectListbox = (Listbox) getFellow("projectListbox");
+ projectListbox.setModel(projectModel);
+ ListitemRenderer renderer = getProjectRenderer();
+ projectListbox.setItemRenderer(renderer);
+ }
+
+ /*
+ * Renderers
+ */
+ public ListitemRenderer getProjectRenderer() {
+ return new ListitemRenderer() {
+
+ @Override
+ public void render(Listitem item, Object data) throws Exception {
+ item.setValue(data);
+ Project project = (Project) data;
+ final Bandbox projectBandbox = (Bandbox) getFellow("projectBandbox");
+ final String id = project.getWikittyId();
+ final String name = project.getName();
+ if (projectId != null && projectId.equals(id)) {
+ projectBandbox.setValue(name);
+ projectBandbox.close();
+ }
+ Listcell cell = new Listcell(project.getName());
+ item.appendChild(cell);
+ item.addEventListener(Events.ON_DOUBLE_CLICK, new EventListener() {
+
+ @Override
+ public void onEvent(Event event) throws Exception {
+ projectId = id;
+ projectBandbox.setValue(name);
+ projectBandbox.close();
+ }
+ });
+ }
+ };
+ }
+
+ /*
+ * Setters
+ */
+ public void setProjectId(String id) {
+ projectId = id;
+ }
+
+ /*
+ * Getters
+ */
+ public String getProjectId() {
+ return projectId;
+ }
+}
Added: trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/ProjectFormController.java
===================================================================
--- trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/ProjectFormController.java (rev 0)
+++ trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/ProjectFormController.java 2010-08-11 15:58:53 UTC (rev 47)
@@ -0,0 +1,40 @@
+package org.chorem.billy.ui;
+
+import org.chorem.data.bonzoms.Project;
+import org.chorem.data.bonzoms.ProjectImpl;
+import org.nuiton.wikitty.WikittyProxy;
+import org.zkoss.zk.ui.Component;
+import org.zkoss.zk.ui.Executions;
+import org.zkoss.zk.ui.util.GenericForwardComposer;
+import org.zkoss.zkplus.databind.AnnotateDataBinder;
+import org.zkoss.zkplus.databind.DataBinder;
+import org.zkoss.zul.Window;
+
+public class ProjectFormController extends GenericForwardComposer{
+
+ protected WikittyProxy proxy = ChoremDataProxy.getInstance();
+ protected Project project = new ProjectImpl();
+
+ public static final String EVENT_ON_SAVE_PROJECT = "onSaveProject";
+
+ @Override
+ public void doAfterCompose(Component comp) throws Exception {
+ super.doAfterCompose(comp);
+ Window win = (Window) self;
+ win.doModal();
+ win.setPosition("center");
+ String projectId = Executions.getCurrent().getParameter("projectId");
+ if (projectId == null) {
+ projectId = (String) arg.get("projectId");
+ }
+ if (projectId != null) {
+ project = proxy.restore(Project.class, projectId);
+ }
+// initCategoryBandbox();
+// initCompanyBandbox();
+// initProjectBandbox();
+ DataBinder binder = new AnnotateDataBinder(comp);
+ binder.bindBean("composer", this);
+ binder.loadAll();
+ }
+}
Modified: trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/ProjectModel.java
===================================================================
--- trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/ProjectModel.java 2010-08-11 14:49:43 UTC (rev 46)
+++ trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/ProjectModel.java 2010-08-11 15:58:53 UTC (rev 47)
@@ -16,31 +16,24 @@
protected WikittyProxy proxy = ChoremDataProxy.getInstance();
protected Criteria criteria = null;
- protected int itemsByPage = 1;
- protected int currentPage = 0;
+ protected int activePage = 0;
+ protected int pageSize = 1;
protected List<Project> projects = new ArrayList<Project>();
- public ProjectModel(int itemsByPage) {
- this.itemsByPage = itemsByPage;
+ public ProjectModel(int pageSize) {
+ this.pageSize = pageSize;
createList();
}
@Override
public Object getElementAt(int index) {
- pageChange(index);
- int indexList = index % itemsByPage;
- Project Project = projects.get(indexList);
+ Project Project = projects.get(index);
return Project;
}
@Override
public int getSize() {
- if (criteria == null) {
- return 0;
- }
- Criteria criteria = this.criteria.setFirstIndex(0).setEndIndex(0);
- PagedResult<Project> result = proxy.findAllByCriteria(Project.class, criteria);
- return result.getNumFound();
+ return projects.size();
}
@Override
@@ -50,16 +43,25 @@
for (Project data : projects) {
String dataId = data.getWikittyId();
if (id.equals(dataId)) {
- index = projects.indexOf(data) + (itemsByPage * currentPage);
+ index = projects.indexOf(data);
break;
}
}
return index;
}
+ public int getTotalSize() {
+ if (criteria == null) {
+ return 0;
+ }
+ Criteria criteria = this.criteria.setFirstIndex(0).setEndIndex(0);
+ PagedResult<Project> result = proxy.findAllByCriteria(Project.class, criteria);
+ return result.getNumFound();
+ }
+
public void addData(Project newData) {
int listSize = projects.size();
- if (listSize < (itemsByPage)) {
+ if (listSize < (pageSize)) {
projects.add(newData);
}
int size = getSize();
@@ -67,23 +69,20 @@
}
public void removeData(Project data) {
- int index = projects.indexOf(data);
- if (index != -1) {
- projects.remove(index);
- int interval = index + (itemsByPage * currentPage);
+ int interval = projects.indexOf(data);
+ if (interval != -1) {
+ projects.remove(interval);
fireEvent(ListDataEvent.INTERVAL_REMOVED, interval, interval);
}
}
public void reloadContent(int rowIndex) {
- int indexList = rowIndex % itemsByPage;
- Project Project = projects.get(indexList);
- Project = proxy.restore(Project.class, Project.getWikittyId());
+ Project project = projects.get(rowIndex);
+ project = proxy.restore(Project.class, project.getWikittyId());
fireEvent(ListDataEvent.CONTENTS_CHANGED, rowIndex, rowIndex);
}
public void reload() {
- createList();
fireEvent(ListDataEvent.CONTENTS_CHANGED, -1, -1);
}
@@ -94,26 +93,24 @@
public void setCriteria(Criteria criteria) {
if (criteria != null) {
this.criteria = criteria;
- reload();
- }
- }
-
- public void pageChange(int index) {
- int item = index;
- int page = item / itemsByPage;
- if (page != currentPage ) {
- currentPage = page;
+ activePage = 0;
createList();
}
}
protected void createList() {
if (criteria != null) {
- int first = currentPage * itemsByPage;
- int end = first + (itemsByPage - 1);
+ int first = activePage * pageSize;
+ int end = first + (pageSize - 1);
Criteria criteria = this.criteria.setFirstIndex(first).setEndIndex(end);
List<Project> projects = proxy.findAllByCriteria(Project.class, criteria).getAll();
this.projects = new ArrayList<Project>(projects);
}
+ fireEvent(ListDataEvent.CONTENTS_CHANGED, -1, -1);
}
+
+ public void setActivePage(int activePage) {
+ this.activePage = activePage;
+ createList();
+ }
}
Added: trunk/billy-ui-zk/src/main/webapp/WEB-INF/lang-addon.xml
===================================================================
--- trunk/billy-ui-zk/src/main/webapp/WEB-INF/lang-addon.xml (rev 0)
+++ trunk/billy-ui-zk/src/main/webapp/WEB-INF/lang-addon.xml 2010-08-11 15:58:53 UTC (rev 47)
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<language-addon>
+
+ <addon-name>My macros</addon-name>
+ <language-name>xul/html</language-name>
+
+ <!-- My first macro -->
+ <component>
+ <component-name>categoryMacro</component-name>
+ <component-class>org.chorem.billy.ui.CategoryBandboxMacro</component-class>
+ <macro-uri>macros/categoryBandboxMacro.zul</macro-uri>
+ </component>
+
+ <!-- My second macro -->
+ <component>
+ <component-name>projectMacro</component-name>
+ <component-class>org.chorem.billy.ui.ProjectBandboxMacro</component-class>
+ <macro-uri>macros/projectBandboxMacro.zul</macro-uri>
+ </component>
+
+ <!-- My third macro -->
+ <component>
+ <component-name>companyMacro</component-name>
+ <component-class>org.chorem.billy.ui.CompanyBandboxMacro</component-class>
+ <macro-uri>macros/companyBandboxMacro.zul</macro-uri>
+ </component>
+
+</language-addon>
Modified: trunk/billy-ui-zk/src/main/webapp/WEB-INF/zk.xml
===================================================================
--- trunk/billy-ui-zk/src/main/webapp/WEB-INF/zk.xml 2010-08-11 14:49:43 UTC (rev 46)
+++ trunk/billy-ui-zk/src/main/webapp/WEB-INF/zk.xml 2010-08-11 15:58:53 UTC (rev 47)
@@ -1,7 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- Created by ZK Studio
--->
<zk>
+ <language-config>
+ <addon-uri>/WEB-INF/lang-addon.xml</addon-uri>
+ </language-config>
</zk>
\ 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-11 14:49:43 UTC (rev 46)
+++ trunk/billy-ui-zk/src/main/webapp/invoiceFormPage.zul 2010-08-11 15:58:53 UTC (rev 47)
@@ -17,54 +17,11 @@
<label value="Posted date" />
<datebox format="yyyy/MM/dd" value="@{composer.invoice.posted, save-when='saveInvoice.onClick'}" />
- <hbox>
- <toolbarbutton id="editProject" label="Edit project" /> / <toolbarbutton id="newProject" label="New project" />
- </hbox>
-
- <bandbox id="projectBandbox" mold="rounded">
- <bandpopup>
- <vbox>
- <listbox autopaging="true" mold="paging" id="projectListbox" rows="5" width="200px" model="@{composer.projectModel}"
- itemRenderer="@{composer.projectRenderer}">
- <listhead>
- <listheader label="Name" />
- </listhead>
- </listbox>
- </vbox>
- </bandpopup>
- </bandbox>
+ <projectMacro id="projectMacro" />
- <hbox>
- <toolbarbutton id="editCompany" label="Edit company" /> / <toolbarbutton id="newCompany" label="New company" />
- </hbox>
-
- <bandbox id="companyBandbox" mold="rounded">
- <bandpopup>
- <vbox>
- <listbox autopaging="true" mold="paging" id="companyListbox" rows="5" width="200px" model="@{composer.companyModel}"
- itemRenderer="@{composer.companyRenderer}">
- <listhead>
- <listheader label="Name" />
- <listheader label="Type" />
- </listhead>
- </listbox>
- </vbox>
- </bandpopup>
- </bandbox>
+ <companyMacro id="companyMacro" />
- <hbox>
- <toolbarbutton id="editCategory" label="Edit category" /> / <toolbarbutton id="newCategory" label="New category" />
- </hbox>
-
- <bandbox id="categoryBandbox" mold="rounded">
- <bandpopup>
- <vbox>
- <grid mold="paging" id="categoryGrid" pageSize="2" width="200px" model="@{composer.categoryModel}"
- rowRenderer="@{composer.categoryRenderer}">
- </grid>
- </vbox>
- </bandpopup>
- </bandbox>
+ <categoryMacro id="categoryMacro" />
</vbox>
@@ -78,7 +35,7 @@
<label value="Invoice number" />
<textbox value="@{composer.invoice.number, save-when='saveInvoice.onClick'}" />
<label value="Description" />
- <textbox rows="8" value="@{composer.invoice.description, save-when='saveInvoice.onClick'}" />
+ <textbox rows="5" value="@{composer.invoice.description, save-when='saveInvoice.onClick'}" />
<separator />
</vbox>
</hbox>
Added: trunk/billy-ui-zk/src/main/webapp/macros/categoryBandboxMacro.zul
===================================================================
--- trunk/billy-ui-zk/src/main/webapp/macros/categoryBandboxMacro.zul (rev 0)
+++ trunk/billy-ui-zk/src/main/webapp/macros/categoryBandboxMacro.zul 2010-08-11 15:58:53 UTC (rev 47)
@@ -0,0 +1,13 @@
+<?page title="new page title" contentType="text/html;charset=UTF-8"?>
+<zk>
+ Sub category:
+ <bandbox id="categoryBandbox" mold="rounded">
+ <bandpopup>
+ <vbox>
+ <grid id="categoryGrid" width="200px">
+ </grid>
+ <paging id="categoryPaging" width="200px"/>
+ </vbox>
+ </bandpopup>
+ </bandbox>
+</zk>
\ No newline at end of file
Added: trunk/billy-ui-zk/src/main/webapp/macros/companyBandboxMacro.zul
===================================================================
--- trunk/billy-ui-zk/src/main/webapp/macros/companyBandboxMacro.zul (rev 0)
+++ trunk/billy-ui-zk/src/main/webapp/macros/companyBandboxMacro.zul 2010-08-11 15:58:53 UTC (rev 47)
@@ -0,0 +1,17 @@
+<?page title="new page title" contentType="text/html;charset=UTF-8"?>
+<zk>
+ Company:
+ <bandbox id="companyBandbox" mold="rounded">
+ <bandpopup>
+ <vbox>
+ <listbox id="companyListbox" width="200px" >
+ <listhead>
+ <listheader label="Name" />
+ <listheader label="Type" />
+ </listhead>
+ </listbox>
+ <paging id="companyPaging" width="200px"/>
+ </vbox>
+ </bandpopup>
+ </bandbox>
+</zk>
\ No newline at end of file
Added: trunk/billy-ui-zk/src/main/webapp/macros/projectBandboxMacro.zul
===================================================================
--- trunk/billy-ui-zk/src/main/webapp/macros/projectBandboxMacro.zul (rev 0)
+++ trunk/billy-ui-zk/src/main/webapp/macros/projectBandboxMacro.zul 2010-08-11 15:58:53 UTC (rev 47)
@@ -0,0 +1,16 @@
+<?page title="new page title" contentType="text/html;charset=UTF-8"?>
+<zk>
+ Project:
+ <bandbox id="projectBandbox" mold="rounded">
+ <bandpopup>
+ <vbox>
+ <listbox id="projectListbox" width="200px">
+ <listhead>
+ <listheader label="Name" />
+ </listhead>
+ </listbox>
+ <paging id="projectPaging" width="200px"/>
+ </vbox>
+ </bandpopup>
+ </bandbox>
+</zk>
\ No newline at end of file
1
0
Author: tchemit
Date: 2010-08-11 16:49:43 +0200 (Wed, 11 Aug 2010)
New Revision: 46
Url: http://chorem.org/repositories/revision/billy/46
Log:
Utilisation de mavenpom4redmine 2.2.3
Modified:
trunk/pom.xml
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2010-08-10 10:14:01 UTC (rev 45)
+++ trunk/pom.xml 2010-08-11 14:49:43 UTC (rev 46)
@@ -9,7 +9,7 @@
<parent>
<groupId>org.nuiton</groupId>
<artifactId>mavenpom4redmine</artifactId>
- <version>2.2.2.1</version>
+ <version>2.2.3</version>
</parent>
<groupId>org.chorem</groupId>
1
0
r45 - in trunk: . billy-ui-zk billy-ui-zk/src billy-ui-zk/src/main billy-ui-zk/src/main/java billy-ui-zk/src/main/java/org billy-ui-zk/src/main/java/org/chorem billy-ui-zk/src/main/java/org/chorem/billy billy-ui-zk/src/main/java/org/chorem/billy/ui billy-ui-zk/src/main/resources billy-ui-zk/src/main/webapp billy-ui-zk/src/main/webapp/WEB-INF
by bbrossaud@users.chorem.org 10 Aug '10
by bbrossaud@users.chorem.org 10 Aug '10
10 Aug '10
Author: bbrossaud
Date: 2010-08-10 12:14:01 +0200 (Tue, 10 Aug 2010)
New Revision: 45
Url: http://chorem.org/repositories/revision/billy/45
Log:
addition invoice form
Added:
trunk/billy-ui-zk/
trunk/billy-ui-zk/LICENSE.txt
trunk/billy-ui-zk/README.txt
trunk/billy-ui-zk/changelog.txt
trunk/billy-ui-zk/pom.xml
trunk/billy-ui-zk/src/
trunk/billy-ui-zk/src/main/
trunk/billy-ui-zk/src/main/java/
trunk/billy-ui-zk/src/main/java/org/
trunk/billy-ui-zk/src/main/java/org/chorem/
trunk/billy-ui-zk/src/main/java/org/chorem/billy/
trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/
trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CategoryFormController.java
trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CategoryModel.java
trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/ChoremDataConfig.java
trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/ChoremDataProxy.java
trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CompanyModel.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/InvoiceFormController.java
trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/ProjectModel.java
trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/SubCategoryModel.java
trunk/billy-ui-zk/src/main/resources/
trunk/billy-ui-zk/src/main/resources/billy.properties
trunk/billy-ui-zk/src/main/resources/log4j.properties
trunk/billy-ui-zk/src/main/resources/wikitty-jdbc-config.properties
trunk/billy-ui-zk/src/main/webapp/
trunk/billy-ui-zk/src/main/webapp/WEB-INF/
trunk/billy-ui-zk/src/main/webapp/WEB-INF/sun-web.xml
trunk/billy-ui-zk/src/main/webapp/WEB-INF/web.xml
trunk/billy-ui-zk/src/main/webapp/WEB-INF/zk.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
Modified:
trunk/pom.xml
Added: trunk/billy-ui-zk/pom.xml
===================================================================
--- trunk/billy-ui-zk/pom.xml (rev 0)
+++ trunk/billy-ui-zk/pom.xml 2010-08-10 10:14:01 UTC (rev 45)
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <!-- ************************************************************* -->
+ <!-- *** POM Relationships *************************************** -->
+ <!-- ************************************************************* -->
+
+ <parent>
+ <groupId>org.chorem</groupId>
+ <artifactId>billy</artifactId>
+ <version>1.0.0-alpha-1-SNAPSHOT</version>
+ </parent>
+
+ <groupId>org.chorem.billy</groupId>
+ <artifactId>billy-ui-zk</artifactId>
+
+
+ <dependencies>
+
+ <!--<dependency>
+ <groupId>org.chorem.choreg</groupId>
+ <artifactId>choreg</artifactId>
+ </dependency>-->
+
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>servlet-api</artifactId>
+ <scope>provided</scope>
+ </dependency>
+
+
+ <dependency>
+ <groupId>org.chorem.chorem-data</groupId>
+ <artifactId>data-bonzoms</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>jasperreports</groupId>
+ <artifactId>jasperreports</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.zkoss.zk</groupId>
+ <artifactId>zk</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.zkoss.zk</groupId>
+ <artifactId>zkplus</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.zkoss.zk</groupId>
+ <artifactId>zul</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.nuiton.wikitty</groupId>
+ <artifactId>wikitty-jdbc-impl</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.nuiton.wikitty</groupId>
+ <artifactId>wikitty-api</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>com.h2database</groupId>
+ <artifactId>h2</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-log4j12</artifactId>
+ </dependency>
+
+ </dependencies>
+
+ <!-- ************************************************************* -->
+ <!-- *** Project Information ************************************* -->
+ <!-- ************************************************************* -->
+
+ <name>Billy : billy-ui-zk</name>
+ <description>Interface Web ZK pour Billy</description>
+ <inceptionYear>2010</inceptionYear>
+
+ <!-- ************************************************************* -->
+ <!-- *** Build Settings ****************************************** -->
+ <!-- ************************************************************* -->
+
+ <packaging>war</packaging>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <configuration>
+ <source>1.6</source>
+ <target>1.6</target>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+ <properties>
+
+ </properties>
+</project>
+
+
+
Added: 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 (rev 0)
+++ trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CategoryFormController.java 2010-08-10 10:14:01 UTC (rev 45)
@@ -0,0 +1,203 @@
+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
+ public void doAfterCompose(Component comp) throws Exception {
+ super.doAfterCompose(comp);
+ Window win = (Window) self;
+ win.doModal();
+ win.setPosition("center");
+ String categoryId = Executions.getCurrent().getParameter("categoryId");
+ if (categoryId == null) {
+ categoryId = (String) arg.get("categoryId");
+ }
+ 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);
+ }
+ }
+ }
+
+ 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);
+ }
+ }
+ }
+
+ public void onClick$save() {
+ saveSubCategories();
+ proxy.store(category);
+ Events.postEvent(EVENT_ON_SAVE_CATEGORY, this.self, category.getWikittyId());
+ this.self.detach();
+ }
+
+ 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);
+ }
+ clearSubCategoryFields();
+ }
+ }
+ }
+
+ /*
+ * Getters
+ */
+ public SubCategoryModel getSubCategoryModel() {
+ return subCategoryModel;
+ }
+
+ public Category getCategory() {
+ return category;
+ }
+
+ public SubCategory getSelectedSubCategory() {
+ return selectedSubCategory;
+ }
+}
Added: trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CategoryModel.java
===================================================================
--- trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CategoryModel.java (rev 0)
+++ trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CategoryModel.java 2010-08-10 10:14:01 UTC (rev 45)
@@ -0,0 +1,118 @@
+package org.chorem.billy.ui;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.chorem.data.bonzoms.Category;
+import org.nuiton.wikitty.Criteria;
+import org.nuiton.wikitty.PagedResult;
+import org.nuiton.wikitty.WikittyProxy;
+import org.zkoss.zkplus.databind.BindingListModel;
+import org.zkoss.zul.AbstractListModel;
+import org.zkoss.zul.event.ListDataEvent;
+
+public class CategoryModel extends AbstractListModel implements BindingListModel {
+
+ protected WikittyProxy proxy = ChoremDataProxy.getInstance();
+ protected Criteria criteria = null;
+ protected int itemsByPage = 1;
+ protected int currentPage = 0;
+ protected List<Category> categories = new ArrayList<Category>();
+
+ public CategoryModel(int itemsByPage) {
+ this.itemsByPage = itemsByPage;
+ createList();
+ }
+
+ @Override
+ public Object getElementAt(int index) {
+ pageChange(index);
+ int indexList = index % itemsByPage;
+ Category Category = categories.get(indexList);
+ return Category;
+ }
+
+ @Override
+ public int getSize() {
+ if (criteria == null) {
+ return 0;
+ }
+ Criteria criteria = this.criteria.setFirstIndex(0).setEndIndex(0);
+ PagedResult<Category> result = proxy.findAllByCriteria(Category.class, criteria);
+ return result.getNumFound();
+ }
+
+ @Override
+ public int indexOf(Object obj) {
+ int index = 0;
+ String id = ((Category) obj).getWikittyId();
+ for (Category data : categories) {
+ String dataId = data.getWikittyId();
+ if (id.equals(dataId)) {
+ index = categories.indexOf(data) + (itemsByPage * currentPage);
+ break;
+ }
+ }
+ return index;
+ }
+
+ public void addData(Category newData) {
+ int listSize = categories.size();
+ if (listSize < (itemsByPage)) {
+ categories.add(newData);
+ }
+ int size = getSize();
+ fireEvent(ListDataEvent.INTERVAL_ADDED, size - 1, size - 1);
+ }
+
+ public void removeData(Category data) {
+ int index = categories.indexOf(data);
+ if (index != -1) {
+ categories.remove(index);
+ int interval = index + (itemsByPage * currentPage);
+ fireEvent(ListDataEvent.INTERVAL_REMOVED, interval, interval);
+ }
+ }
+
+ public void reloadContent(int rowIndex) {
+ int indexList = rowIndex % itemsByPage;
+ Category Category = categories.get(indexList);
+ Category = proxy.restore(Category.class, Category.getWikittyId());
+ fireEvent(ListDataEvent.CONTENTS_CHANGED, rowIndex, rowIndex);
+ }
+
+ public void reload() {
+ createList();
+ fireEvent(ListDataEvent.CONTENTS_CHANGED, -1, -1);
+ }
+
+ public Criteria getCriteria() {
+ return criteria;
+ }
+
+ public void setCriteria(Criteria criteria) {
+ if (criteria != null) {
+ this.criteria = criteria;
+ reload();
+ }
+ }
+
+ public void pageChange(int index) {
+ int item = index;
+ int page = item / itemsByPage;
+ if (page != currentPage ) {
+ currentPage = page;
+ createList();
+ }
+ }
+
+ protected void createList() {
+ if (criteria != null) {
+ int first = currentPage * itemsByPage;
+ int end = first + (itemsByPage - 1);
+ Criteria criteria = this.criteria.setFirstIndex(first).setEndIndex(end);
+ List<Category> Categorys = proxy.findAllByCriteria(Category.class, criteria).getAll();
+ this.categories = new ArrayList<Category>(Categorys);
+ }
+ }
+}
\ No newline at end of file
Added: trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/ChoremDataConfig.java
===================================================================
--- trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/ChoremDataConfig.java (rev 0)
+++ trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/ChoremDataConfig.java 2010-08-10 10:14:01 UTC (rev 45)
@@ -0,0 +1,129 @@
+/*
+ * #%L
+ * Bonzoms : bonzoms-zk
+ *
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2010 CodeLutin
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ * #L%
+ */
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package org.chorem.billy.ui;
+
+import static org.nuiton.i18n.I18n._;
+
+import java.io.File;
+import org.apache.commons.lang.UnhandledException;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.nuiton.util.ApplicationConfig;
+
+/**
+ *
+ * @author sherkhan
+ */
+public class ChoremDataConfig extends ApplicationConfig {
+
+ /** to use log facility, just put in your code: log.info(\"...\"); */
+ static private Log log = LogFactory.getLog(ChoremDataConfig.class);
+ /** Singleton instance. */
+ protected static ChoremDataConfig instance = null;
+
+ public ChoremDataConfig() {
+ super();
+
+ // set default option (included configuration file name : important)
+ for (Option o : Option.values()) {
+ if (o.defaultValue != null) {
+ setDefaultOption(o.key, o.defaultValue);
+ }
+ }
+ }
+
+ public static synchronized ChoremDataConfig getInstance() {
+ if (instance == null) {
+ try {
+ instance = new ChoremDataConfig();
+ instance.parse(new String[]{});
+ instance.setDataDirInSystemProps();
+ } catch (Exception e) {
+ throw new UnhandledException(e);
+ }
+ }
+ return instance;
+ }
+
+ /**
+ * Get version as string.
+ *
+ * @return version
+ */
+ public String getVersion() {
+ return getOption(Option.APPLICATION_VERSION.key);
+ }
+
+ public File getDataDirAsFile() {
+ File option = getOptionAsFile(Option.DATA_DIR.key);
+ return option;
+ }
+
+ /**
+ * Set {@code solr} and {@code jms} system configuration.
+ *
+ * This is the "only" way to configure embedded solr.
+ */
+ protected void setDataDirInSystemProps() {
+ String value = getOption(Option.DATA_DIR.key);
+ if (log.isInfoEnabled()) {
+ log.info("Setting system property " + Option.DATA_DIR.key + " : " + value);
+ }
+ System.setProperty(Option.DATA_DIR.key, value);
+ env.put(Option.DATA_DIR.key, value);
+ }
+
+ /**
+ * Vradi option definition.
+ */
+ public static enum Option {
+
+ CONFIG_FILE(CONFIG_FILE_NAME, _("billy.config.configFileName.description"),
+ "choremData.properties", String.class, false, false),
+ APPLICATION_VERSION("application.version", _("billy.config.application.version.description"),
+ null, String.class, true, true),
+ DATA_DIR("solr.data.dir", _("billy.config.data.dir.description"),
+ System.getProperty("user.home") + "/.chorem-data/solr", String.class, false, false);
+ public final String key;
+ public final String description;
+ public final String defaultValue;
+ public final Class<?> type;
+ public final boolean isTransient;
+ public final boolean isFinal;
+
+ private Option(String key, String description, String defaultValue,
+ Class<?> type, boolean isTransient, boolean isFinal) {
+ this.key = key;
+ this.description = description;
+ this.defaultValue = defaultValue;
+ this.type = type;
+ this.isFinal = isFinal;
+ this.isTransient = isTransient;
+ }
+ }
+}
Added: trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/ChoremDataProxy.java
===================================================================
--- trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/ChoremDataProxy.java (rev 0)
+++ trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/ChoremDataProxy.java 2010-08-10 10:14:01 UTC (rev 45)
@@ -0,0 +1,56 @@
+/*
+ * #%L
+ * Bonzoms : bonzoms-zk
+ *
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2010 CodeLutin
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ * #L%
+ */
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package org.chorem.billy.ui;
+
+import org.nuiton.wikitty.WikittyProxy;
+import org.nuiton.wikitty.WikittyService;
+import org.nuiton.wikitty.WikittyServiceCached;
+import org.nuiton.wikitty.jdbc.WikittyServiceJDBC;
+
+/**
+ *
+ * @author sherkhan
+ */
+public class ChoremDataProxy extends WikittyProxy {
+
+ static protected ChoremDataProxy instance;
+
+ synchronized static public ChoremDataProxy getInstance() {
+ if (instance == null) {
+ ChoremDataConfig config = ChoremDataConfig.getInstance();
+ instance = new ChoremDataProxy(config);
+ }
+ return instance;
+ }
+
+ protected ChoremDataProxy(ChoremDataConfig config) {
+ WikittyService ws = new WikittyServiceJDBC(config.getFlatOptions());
+ ws = new WikittyServiceCached(ws);
+ setWikittyService(ws);
+ }
+}
Added: trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CompanyModel.java
===================================================================
--- trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CompanyModel.java (rev 0)
+++ trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/CompanyModel.java 2010-08-10 10:14:01 UTC (rev 45)
@@ -0,0 +1,119 @@
+package org.chorem.billy.ui;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.chorem.billy.ui.ChoremDataProxy;
+import org.chorem.data.bonzoms.Company;
+import org.nuiton.wikitty.Criteria;
+import org.nuiton.wikitty.PagedResult;
+import org.nuiton.wikitty.WikittyProxy;
+import org.zkoss.zkplus.databind.BindingListModel;
+import org.zkoss.zul.AbstractListModel;
+import org.zkoss.zul.event.ListDataEvent;
+
+public class CompanyModel extends AbstractListModel implements BindingListModel {
+
+ protected WikittyProxy proxy = ChoremDataProxy.getInstance();
+ protected Criteria criteria = null;
+ protected int itemsByPage = 1;
+ protected int currentPage = 0;
+ protected List<Company> companies = new ArrayList<Company>();
+
+ public CompanyModel(int itemsByPage) {
+ this.itemsByPage = itemsByPage;
+ createList();
+ }
+
+ @Override
+ public Object getElementAt(int index) {
+ pageChange(index);
+ int indexList = index % itemsByPage;
+ Company Company = companies.get(indexList);
+ return Company;
+ }
+
+ @Override
+ public int getSize() {
+ if (criteria == null) {
+ return 0;
+ }
+ Criteria criteria = this.criteria.setFirstIndex(0).setEndIndex(0);
+ PagedResult<Company> result = proxy.findAllByCriteria(Company.class, criteria);
+ return result.getNumFound();
+ }
+
+ @Override
+ public int indexOf(Object obj) {
+ int index = 0;
+ String id = ((Company) obj).getWikittyId();
+ for (Company data : companies) {
+ String dataId = data.getWikittyId();
+ if (id.equals(dataId)) {
+ index = companies.indexOf(data) + (itemsByPage * currentPage);
+ break;
+ }
+ }
+ return index;
+ }
+
+ public void addData(Company newData) {
+ int listSize = companies.size();
+ if (listSize < (itemsByPage)) {
+ companies.add(newData);
+ }
+ int size = getSize();
+ fireEvent(ListDataEvent.INTERVAL_ADDED, size - 1, size - 1);
+ }
+
+ public void removeData(Company data) {
+ int index = companies.indexOf(data);
+ if (index != -1) {
+ companies.remove(index);
+ int interval = index + (itemsByPage * currentPage);
+ fireEvent(ListDataEvent.INTERVAL_REMOVED, interval, interval);
+ }
+ }
+
+ public void reloadContent(int rowIndex) {
+ int indexList = rowIndex % itemsByPage;
+ Company Company = companies.get(indexList);
+ Company = proxy.restore(Company.class, Company.getWikittyId());
+ fireEvent(ListDataEvent.CONTENTS_CHANGED, rowIndex, rowIndex);
+ }
+
+ public void reload() {
+ createList();
+ fireEvent(ListDataEvent.CONTENTS_CHANGED, -1, -1);
+ }
+
+ public Criteria getCriteria() {
+ return criteria;
+ }
+
+ public void setCriteria(Criteria criteria) {
+ if (criteria != null) {
+ this.criteria = criteria;
+ reload();
+ }
+ }
+
+ public void pageChange(int index) {
+ int item = index;
+ int page = item / itemsByPage;
+ if (page != currentPage ) {
+ currentPage = page;
+ createList();
+ }
+ }
+
+ protected void createList() {
+ if (criteria != null) {
+ int first = currentPage * itemsByPage;
+ int end = first + (itemsByPage - 1);
+ Criteria criteria = this.criteria.setFirstIndex(first).setEndIndex(end);
+ List<Company> Companies = proxy.findAllByCriteria(Company.class, criteria).getAll();
+ this.companies = new ArrayList<Company>(Companies);
+ }
+ }
+}
Added: 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 (rev 0)
+++ trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/InvoiceController.java 2010-08-10 10:14:01 UTC (rev 45)
@@ -0,0 +1,19 @@
+package org.chorem.billy.ui;
+
+import org.chorem.billy.ui.ChoremDataProxy;
+import org.nuiton.wikitty.WikittyProxy;
+import org.zkoss.zk.ui.Execution;
+import org.zkoss.zk.ui.Executions;
+import org.zkoss.zk.ui.util.GenericForwardComposer;
+
+public class InvoiceController extends GenericForwardComposer{
+
+ protected WikittyProxy proxy = ChoremDataProxy.getInstance();
+
+ /*
+ * Events
+ */
+ public void onClick$newInvoice() {
+ Executions.createComponents("invoiceFormPage.zul", null, null);
+ }
+}
Added: trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/InvoiceFormController.java
===================================================================
--- trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/InvoiceFormController.java (rev 0)
+++ trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/InvoiceFormController.java 2010-08-10 10:14:01 UTC (rev 45)
@@ -0,0 +1,282 @@
+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.Company;
+import org.chorem.data.bonzoms.Invoice;
+import org.chorem.data.bonzoms.InvoiceImpl;
+import org.chorem.data.bonzoms.Project;
+import org.chorem.data.bonzoms.SubCategory;
+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.zkplus.databind.AnnotateDataBinder;
+import org.zkoss.zkplus.databind.DataBinder;
+import org.zkoss.zul.Bandbox;
+import org.zkoss.zul.Checkbox;
+import org.zkoss.zul.Listbox;
+import org.zkoss.zul.Listcell;
+import org.zkoss.zul.Listhead;
+import org.zkoss.zul.Listheader;
+import org.zkoss.zul.Listitem;
+import org.zkoss.zul.ListitemRenderer;
+import org.zkoss.zul.Row;
+import org.zkoss.zul.RowRenderer;
+import org.zkoss.zul.Window;
+
+public class InvoiceFormController extends GenericForwardComposer {
+
+ protected WikittyProxy proxy = ChoremDataProxy.getInstance();
+ protected Invoice invoice = new InvoiceImpl();
+
+ protected CategoryModel categoryModel = new CategoryModel(2);
+ protected CompanyModel companyModel = new CompanyModel(5);
+ protected ProjectModel projectModel = new ProjectModel(5);
+
+ protected Bandbox categoryBandbox;
+ protected Bandbox companyBandbox;
+ protected Bandbox projectBandbox;
+
+ @Override
+ public void doAfterCompose(Component comp) throws Exception {
+ super.doAfterCompose(comp);
+ Window win = (Window) self;
+ win.doModal();
+ win.setPosition("center");
+ String invoiceId = Executions.getCurrent().getParameter("invoiceId");
+ if (invoiceId == null) {
+ invoiceId = (String) arg.get("invoiceId");
+ }
+ if (invoiceId != null) {
+ invoice = proxy.restore(Invoice.class, invoiceId);
+ }
+ initCategoryBandbox();
+ initCompanyBandbox();
+ initProjectBandbox();
+ DataBinder binder = new AnnotateDataBinder(comp);
+ binder.bindBean("composer", this);
+ binder.loadAll();
+ }
+
+ protected void initCategoryBandbox() {
+ onOK$categoryBandbox();
+ categoryBandbox.close();
+ }
+
+ protected void initCompanyBandbox() {
+ onOK$companyBandbox();
+ String companyId = invoice.getCompany();
+ if (companyId != null && !companyId.isEmpty()) {
+ Company company = proxy.restore(Company.class, companyId);
+ companyBandbox.setValue(company.getName());
+ }
+ companyBandbox.close();
+ }
+
+ protected void initProjectBandbox() {
+ onOK$projectBandbox();
+ String projectId = invoice.getProject();
+ if (projectId != null && !projectId.isEmpty()) {
+ Project project = proxy.restore(Project.class, projectId);
+ projectBandbox.setValue(project.getName());
+ }
+ projectBandbox.close();
+ }
+
+ protected void setSubCategoryHeader(Listbox listbox, Category category) {
+ if (listbox != null) {
+ Listhead head = new Listhead();
+ listbox.appendChild(head);
+ String name = category.getName();
+ if (name == null) {
+ name = "";
+ }
+ Listheader header = new Listheader(name);
+ head.appendChild(header);
+ }
+ }
+
+ /*
+ * Renderers
+ */
+ public ListitemRenderer getCompanyRenderer() {
+ return new ListitemRenderer() {
+
+ @Override
+ public void render(Listitem item, Object data) throws Exception {
+ item.setValue(data);
+ final Company company = (Company) data;
+ Listcell name = new Listcell(company.getName());
+ Listcell type = new Listcell(company.getType());
+ item.appendChild(name);
+ item.appendChild(type);
+ item.addEventListener(Events.ON_DOUBLE_CLICK, new EventListener() {
+
+ @Override
+ public void onEvent(Event event) throws Exception {
+ invoice.setCompany(company.getWikittyId());
+ companyBandbox.setValue(company.getName());
+ companyBandbox.close();
+ }
+ });
+ }
+ };
+ }
+
+ protected void createSubCategoryListbox(Listbox listbox, Set<String> subCategoryIds) {
+ if (subCategoryIds != null && !subCategoryIds.isEmpty()) {
+ List<SubCategory> subCategories = proxy.restore(SubCategory.class, new ArrayList<String>(subCategoryIds));
+ SubCategoryModel subCategoryModel = new SubCategoryModel();
+ subCategoryModel.setSubCategories(subCategories);
+ listbox.setModel(subCategoryModel);
+
+ listbox.setItemRenderer(new ListitemRenderer() {
+
+ @Override
+ public void render(Listitem item, Object data) throws Exception {
+ item.setValue(data);
+ final SubCategory subCategory = (SubCategory) data;
+ Listcell cell = new Listcell();
+ Checkbox checkbox = new Checkbox(subCategory.getName());
+ Set<String> ids = invoice.getSubCategory();
+ if (ids != null && ids.contains(subCategory.getWikittyId())) {
+ checkbox.setChecked(true);
+ }
+ cell.appendChild(checkbox);
+ item.appendChild(cell);
+ checkbox.addEventListener(Events.ON_CHECK, new EventListener() {
+
+ @Override
+ public void onEvent(Event event) throws Exception {
+ Checkbox checkbox = (Checkbox) event.getTarget();
+ if (checkbox.isChecked()) {
+ invoice.addSubCategory(subCategory.getWikittyId());
+ } else {
+ String id = subCategory.getWikittyId();
+ Set<String> subCategories = invoice.getSubCategory();
+ if (subCategories != null && subCategories.contains(id)) {
+ invoice.removeSubCategory(id);
+ }
+ }
+ }
+ });
+ }
+ });
+ }
+ }
+
+ public RowRenderer getCategoryRenderer() {
+ return new RowRenderer() {
+
+ @Override
+ public void render(Row row, Object data) throws Exception {
+ row.setValue(data);
+ final Category category = (Category) data;
+ Set<String> subCategoryIds = category.getSubCategory();
+ Listbox listbox = new Listbox();
+ setSubCategoryHeader(listbox, category);
+ createSubCategoryListbox(listbox, subCategoryIds);
+ row.appendChild(listbox);
+
+ }
+ };
+ }
+
+ public ListitemRenderer getProjectRenderer() {
+ return new ListitemRenderer() {
+
+ @Override
+ public void render(Listitem item, Object data) throws Exception {
+ item.setValue(data);
+ final Project project = (Project) data;
+ Listcell name = new Listcell(project.getName());
+ item.appendChild(name);
+ item.addEventListener(Events.ON_DOUBLE_CLICK, new EventListener() {
+
+ @Override
+ public void onEvent(Event event) throws Exception {
+ invoice.setProject(project.getWikittyId());
+ projectBandbox.setValue(project.getName());
+ projectBandbox.close();
+ }
+ });
+ }
+ };
+ }
+
+ /*
+ * Events
+ */
+ public void onOK$companyBandbox() {
+ String search = companyBandbox.getValue();
+ Search query = Search.query().eq(Element.ELT_EXTENSION, Company.EXT_COMPANY);
+ if (search != null && !search.isEmpty()) {
+ query = query.keyword(search);
+ }
+ Criteria criteria = query.criteria();
+ companyModel.setCriteria(criteria);
+ companyBandbox.open();
+ }
+
+ public void onOK$projectBandbox() {
+ String search = projectBandbox.getValue();
+ Search query = Search.query().eq(Element.ELT_EXTENSION, Project.EXT_PROJECT);
+ if (search != null && !search.isEmpty()) {
+ query = query.keyword(search);
+ }
+ Criteria criteria = query.criteria();
+ projectModel.setCriteria(criteria);
+ projectBandbox.open();
+ }
+
+ public void onOK$categoryBandbox() {
+ String search = categoryBandbox.getValue();
+ Search query = Search.query().eq(Element.ELT_EXTENSION, Category.EXT_CATEGORY);
+ if (search != null && !search.isEmpty()) {
+ query = query.keyword(search);
+ }
+ Criteria criteria = query.criteria();
+ categoryModel.setCriteria(criteria);
+ categoryBandbox.open();
+ }
+
+ public void onClick$newCategory() {
+ Window win = (Window) Executions.createComponents("categoryFormPage.zul", null, null);
+ win.addEventListener(CategoryFormController.EVENT_ON_SAVE_CATEGORY, new EventListener() {
+
+ @Override
+ public void onEvent(Event event) throws Exception {
+ categoryModel.reload();
+ }
+ });
+ }
+
+ /*
+ * Getters
+ */
+ public Invoice getInvoice() {
+ return invoice;
+ }
+
+ public CategoryModel getCategoryModel() {
+ return categoryModel;
+ }
+
+ public ProjectModel getProjectModel() {
+ return projectModel;
+ }
+
+ public CompanyModel getCompanyModel() {
+ return companyModel;
+ }
+}
\ No newline at end of file
Added: trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/ProjectModel.java
===================================================================
--- trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/ProjectModel.java (rev 0)
+++ trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/ProjectModel.java 2010-08-10 10:14:01 UTC (rev 45)
@@ -0,0 +1,119 @@
+package org.chorem.billy.ui;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.chorem.billy.ui.ChoremDataProxy;
+import org.chorem.data.bonzoms.Project;
+import org.nuiton.wikitty.Criteria;
+import org.nuiton.wikitty.PagedResult;
+import org.nuiton.wikitty.WikittyProxy;
+import org.zkoss.zkplus.databind.BindingListModel;
+import org.zkoss.zul.AbstractListModel;
+import org.zkoss.zul.event.ListDataEvent;
+
+public class ProjectModel extends AbstractListModel implements BindingListModel {
+
+ protected WikittyProxy proxy = ChoremDataProxy.getInstance();
+ protected Criteria criteria = null;
+ protected int itemsByPage = 1;
+ protected int currentPage = 0;
+ protected List<Project> projects = new ArrayList<Project>();
+
+ public ProjectModel(int itemsByPage) {
+ this.itemsByPage = itemsByPage;
+ createList();
+ }
+
+ @Override
+ public Object getElementAt(int index) {
+ pageChange(index);
+ int indexList = index % itemsByPage;
+ Project Project = projects.get(indexList);
+ return Project;
+ }
+
+ @Override
+ public int getSize() {
+ if (criteria == null) {
+ return 0;
+ }
+ Criteria criteria = this.criteria.setFirstIndex(0).setEndIndex(0);
+ PagedResult<Project> result = proxy.findAllByCriteria(Project.class, criteria);
+ return result.getNumFound();
+ }
+
+ @Override
+ public int indexOf(Object obj) {
+ int index = 0;
+ String id = ((Project) obj).getWikittyId();
+ for (Project data : projects) {
+ String dataId = data.getWikittyId();
+ if (id.equals(dataId)) {
+ index = projects.indexOf(data) + (itemsByPage * currentPage);
+ break;
+ }
+ }
+ return index;
+ }
+
+ public void addData(Project newData) {
+ int listSize = projects.size();
+ if (listSize < (itemsByPage)) {
+ projects.add(newData);
+ }
+ int size = getSize();
+ fireEvent(ListDataEvent.INTERVAL_ADDED, size - 1, size - 1);
+ }
+
+ public void removeData(Project data) {
+ int index = projects.indexOf(data);
+ if (index != -1) {
+ projects.remove(index);
+ int interval = index + (itemsByPage * currentPage);
+ fireEvent(ListDataEvent.INTERVAL_REMOVED, interval, interval);
+ }
+ }
+
+ public void reloadContent(int rowIndex) {
+ int indexList = rowIndex % itemsByPage;
+ Project Project = projects.get(indexList);
+ Project = proxy.restore(Project.class, Project.getWikittyId());
+ fireEvent(ListDataEvent.CONTENTS_CHANGED, rowIndex, rowIndex);
+ }
+
+ public void reload() {
+ createList();
+ fireEvent(ListDataEvent.CONTENTS_CHANGED, -1, -1);
+ }
+
+ public Criteria getCriteria() {
+ return criteria;
+ }
+
+ public void setCriteria(Criteria criteria) {
+ if (criteria != null) {
+ this.criteria = criteria;
+ reload();
+ }
+ }
+
+ public void pageChange(int index) {
+ int item = index;
+ int page = item / itemsByPage;
+ if (page != currentPage ) {
+ currentPage = page;
+ createList();
+ }
+ }
+
+ protected void createList() {
+ if (criteria != null) {
+ int first = currentPage * itemsByPage;
+ int end = first + (itemsByPage - 1);
+ Criteria criteria = this.criteria.setFirstIndex(first).setEndIndex(end);
+ List<Project> projects = proxy.findAllByCriteria(Project.class, criteria).getAll();
+ this.projects = new ArrayList<Project>(projects);
+ }
+ }
+}
Added: 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 (rev 0)
+++ trunk/billy-ui-zk/src/main/java/org/chorem/billy/ui/SubCategoryModel.java 2010-08-10 10:14:01 UTC (rev 45)
@@ -0,0 +1,57 @@
+package org.chorem.billy.ui;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.chorem.data.bonzoms.SubCategory;
+import org.zkoss.zkplus.databind.BindingListModel;
+import org.zkoss.zul.AbstractListModel;
+import org.zkoss.zul.event.ListDataEvent;
+
+public class SubCategoryModel extends AbstractListModel implements BindingListModel {
+
+ List<SubCategory> subCategories = new ArrayList<SubCategory>();
+
+ @Override
+ public Object getElementAt(int index) {
+ return subCategories.get(index);
+ }
+
+ @Override
+ public int getSize() {
+ return subCategories.size();
+ }
+
+ @Override
+ public int indexOf(Object obj) {
+ return subCategories.indexOf(obj);
+ }
+
+ public void setSubCategories(List<SubCategory> subCategories) {
+ this.subCategories = subCategories;
+ fireEvent(ListDataEvent.CONTENTS_CHANGED, -1, -1);
+ }
+
+ public void addData(SubCategory newData) {
+ subCategories.add(newData);
+ fireEvent(ListDataEvent.INTERVAL_ADDED, subCategories.size() - 1, subCategories.size() - 1);
+ }
+
+ public void removeData(SubCategory data) {
+ int interval = subCategories.indexOf(data);
+ subCategories.remove(data);
+ fireEvent(ListDataEvent.INTERVAL_REMOVED, interval, interval);
+ }
+
+ public void reloadContent(int rowIndex) {
+ fireEvent(ListDataEvent.CONTENTS_CHANGED, rowIndex, rowIndex);
+ }
+
+ public void reload() {
+ fireEvent(ListDataEvent.CONTENTS_CHANGED, -1, -1);
+ }
+
+ public List<SubCategory> getSubCategories() {
+ return subCategories;
+ }
+}
Added: trunk/billy-ui-zk/src/main/resources/billy.properties
===================================================================
--- trunk/billy-ui-zk/src/main/resources/billy.properties (rev 0)
+++ trunk/billy-ui-zk/src/main/resources/billy.properties 2010-08-10 10:14:01 UTC (rev 45)
@@ -0,0 +1 @@
+application.version=${project.version}
Added: trunk/billy-ui-zk/src/main/resources/log4j.properties
===================================================================
--- trunk/billy-ui-zk/src/main/resources/log4j.properties (rev 0)
+++ trunk/billy-ui-zk/src/main/resources/log4j.properties 2010-08-10 10:14:01 UTC (rev 45)
@@ -0,0 +1,2 @@
+# solr
+log4j.logger.org.apache.solr=WARN
\ No newline at end of file
Added: trunk/billy-ui-zk/src/main/resources/wikitty-jdbc-config.properties
===================================================================
--- trunk/billy-ui-zk/src/main/resources/wikitty-jdbc-config.properties (rev 0)
+++ trunk/billy-ui-zk/src/main/resources/wikitty-jdbc-config.properties 2010-08-10 10:14:01 UTC (rev 45)
@@ -0,0 +1,5 @@
+#Connection parameters
+jdbc.con.driver=org.h2.Driver
+jdbc.con.host=jdbc:h2:file:~/.chorem-data/localdb/localdb
+jdbc.con.userName=sa
+jdbc.con.password=
Added: trunk/billy-ui-zk/src/main/webapp/WEB-INF/sun-web.xml
===================================================================
--- trunk/billy-ui-zk/src/main/webapp/WEB-INF/sun-web.xml (rev 0)
+++ trunk/billy-ui-zk/src/main/webapp/WEB-INF/sun-web.xml 2010-08-10 10:14:01 UTC (rev 45)
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE sun-web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Application Server 9.0 Servlet 2.5//EN" "http://www.sun.com/software/appserver/dtds/sun-web-app_2_5-0.dtd">
+<sun-web-app error-url="">
+ <context-root>/bonzoms-ui-zk-2.0-SNAPSHOT</context-root>
+ <class-loader delegate="true"/>
+ <jsp-config>
+ <property name="keepgenerated" value="true">
+ <description>Keep a copy of the generated servlet class' java code.</description>
+ </property>
+ </jsp-config>
+</sun-web-app>
Added: trunk/billy-ui-zk/src/main/webapp/WEB-INF/web.xml
===================================================================
--- trunk/billy-ui-zk/src/main/webapp/WEB-INF/web.xml (rev 0)
+++ trunk/billy-ui-zk/src/main/webapp/WEB-INF/web.xml 2010-08-10 10:14:01 UTC (rev 45)
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
+ <display-name>MyApp</display-name>
+
+ <listener>
+ <description>Used to cleanup when a session is destroyed</description>
+ <display-name>ZK Session Cleaner</display-name>
+ <listener-class>org.zkoss.zk.ui.http.HttpSessionListener</listener-class>
+ </listener>
+
+ <servlet>
+ <description>The servlet loads the DSP pages.</description>
+ <servlet-name>dspLoader</servlet-name>
+ <servlet-class>org.zkoss.web.servlet.dsp.InterpreterServlet</servlet-class>
+ </servlet>
+
+ <servlet>
+ <description>ZK loader for ZUML pages</description>
+ <servlet-name>zkLoader</servlet-name>
+ <servlet-class>org.zkoss.zk.ui.http.DHtmlLayoutServlet</servlet-class>
+ <init-param>
+ <param-name>update-uri</param-name>
+ <param-value>/zkau</param-value>
+ </init-param>
+ <load-on-startup>1</load-on-startup>
+ </servlet>
+
+ <servlet>
+ <description>The asynchronous update engine for ZK</description>
+ <servlet-name>auEngine</servlet-name>
+ <servlet-class>org.zkoss.zk.au.http.DHtmlUpdateServlet</servlet-class>
+ </servlet>
+
+ <servlet-mapping>
+ <servlet-name>dspLoader</servlet-name>
+ <url-pattern>*.dsp</url-pattern>
+ </servlet-mapping>
+
+ <servlet-mapping>
+ <servlet-name>zkLoader</servlet-name>
+ <url-pattern>*.zul</url-pattern>
+ </servlet-mapping>
+
+ <servlet-mapping>
+ <servlet-name>zkLoader</servlet-name>
+ <url-pattern>*.zhtml</url-pattern>
+ </servlet-mapping>
+
+ <servlet-mapping>
+ <servlet-name>auEngine</servlet-name>
+ <url-pattern>/zkau/*</url-pattern>
+ </servlet-mapping>
+
+ <welcome-file-list>
+ <welcome-file>index.html</welcome-file>
+ <welcome-file>invoicePage.zul</welcome-file>
+ <welcome-file>index.htm</welcome-file>
+ <welcome-file>index.jsp</welcome-file>
+ <welcome-file>default.html</welcome-file>
+ <welcome-file>default.htm</welcome-file>
+ <welcome-file>default.jsp</welcome-file>
+ <welcome-file>index.zul</welcome-file>
+ </welcome-file-list>
+
+</web-app>
Added: trunk/billy-ui-zk/src/main/webapp/WEB-INF/zk.xml
===================================================================
--- trunk/billy-ui-zk/src/main/webapp/WEB-INF/zk.xml (rev 0)
+++ trunk/billy-ui-zk/src/main/webapp/WEB-INF/zk.xml 2010-08-10 10:14:01 UTC (rev 45)
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+ Created by ZK Studio
+-->
+<zk>
+</zk>
\ No newline at end of file
Added: trunk/billy-ui-zk/src/main/webapp/categoryFormPage.zul
===================================================================
--- trunk/billy-ui-zk/src/main/webapp/categoryFormPage.zul (rev 0)
+++ trunk/billy-ui-zk/src/main/webapp/categoryFormPage.zul 2010-08-10 10:14:01 UTC (rev 45)
@@ -0,0 +1,65 @@
+<?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">
+<caption label="Category" />
+
+ <vbox>
+ <hbox>
+
+ <groupbox>
+ <caption id="categoryCaption" label="@{composer.category.name}" />
+ <vbox>
+
+ <label value="Order"/>
+ <intbox id="categoryOrder" value="@{composer.category.order, save-when='save.onClick'}" />
+
+ <label value="Name"/>
+ <textbox id="categoryName" value="@{composer.category.name, save-when='save.onClick'}" />
+
+ <label value="Type" />
+ <textbox id="categoryType" value="@{composer.category.type, save-when='save.onClick'}" />
+
+ </vbox>
+ </groupbox>
+
+ </hbox>
+
+ <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>
+ </vbox>
+
+ <button id="save" label="Save and quit" />
+
+</window>
\ No newline at end of file
Added: trunk/billy-ui-zk/src/main/webapp/invoiceFormPage.zul
===================================================================
--- trunk/billy-ui-zk/src/main/webapp/invoiceFormPage.zul (rev 0)
+++ trunk/billy-ui-zk/src/main/webapp/invoiceFormPage.zul 2010-08-10 10:14:01 UTC (rev 45)
@@ -0,0 +1,87 @@
+<?page id="invoice" title="Invoice" 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.InvoiceFormController">
+ <caption label="Invoice" />
+ <separator />
+ <groupbox>
+ <caption label="@{composer.invoice.number}" />
+ <separator />
+ <hbox>
+
+ <vbox>
+ <label value="Payment date" />
+ <datebox format="yyyy/MM/dd" 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'}" />
+ <label value="Posted date" />
+ <datebox format="yyyy/MM/dd" value="@{composer.invoice.posted, save-when='saveInvoice.onClick'}" />
+
+ <hbox>
+ <toolbarbutton id="editProject" label="Edit project" /> / <toolbarbutton id="newProject" label="New project" />
+ </hbox>
+
+ <bandbox id="projectBandbox" mold="rounded">
+ <bandpopup>
+ <vbox>
+ <listbox autopaging="true" mold="paging" id="projectListbox" rows="5" width="200px" model="@{composer.projectModel}"
+ itemRenderer="@{composer.projectRenderer}">
+ <listhead>
+ <listheader label="Name" />
+ </listhead>
+ </listbox>
+ </vbox>
+ </bandpopup>
+ </bandbox>
+
+ <hbox>
+ <toolbarbutton id="editCompany" label="Edit company" /> / <toolbarbutton id="newCompany" label="New company" />
+ </hbox>
+
+ <bandbox id="companyBandbox" mold="rounded">
+ <bandpopup>
+ <vbox>
+ <listbox autopaging="true" mold="paging" id="companyListbox" rows="5" width="200px" model="@{composer.companyModel}"
+ itemRenderer="@{composer.companyRenderer}">
+ <listhead>
+ <listheader label="Name" />
+ <listheader label="Type" />
+ </listhead>
+ </listbox>
+ </vbox>
+ </bandpopup>
+ </bandbox>
+
+ <hbox>
+ <toolbarbutton id="editCategory" label="Edit category" /> / <toolbarbutton id="newCategory" label="New category" />
+ </hbox>
+
+ <bandbox id="categoryBandbox" mold="rounded">
+ <bandpopup>
+ <vbox>
+ <grid mold="paging" id="categoryGrid" pageSize="2" width="200px" model="@{composer.categoryModel}"
+ rowRenderer="@{composer.categoryRenderer}">
+ </grid>
+ </vbox>
+ </bandpopup>
+ </bandbox>
+
+ </vbox>
+
+ <space />
+
+ <vbox>
+ <label value="HT price" />
+ <doublebox value="@{composer.invoice.HTPrice, save-when='saveInvoice.onClick'}" />
+ <label value="TTC price" />
+ <doublebox value="@{composer.invoice.TTCPrice, save-when='saveInvoice.onClick'}" />
+ <label value="Invoice number" />
+ <textbox value="@{composer.invoice.number, save-when='saveInvoice.onClick'}" />
+ <label value="Description" />
+ <textbox rows="8" value="@{composer.invoice.description, save-when='saveInvoice.onClick'}" />
+ <separator />
+ </vbox>
+ </hbox>
+ </groupbox>
+ <button id="saveInvoice" label="Save"/>
+</window>
\ No newline at end of file
Added: trunk/billy-ui-zk/src/main/webapp/invoicePage.zul
===================================================================
--- trunk/billy-ui-zk/src/main/webapp/invoicePage.zul (rev 0)
+++ trunk/billy-ui-zk/src/main/webapp/invoicePage.zul 2010-08-10 10:14:01 UTC (rev 45)
@@ -0,0 +1,13 @@
+<?page id="home" title="HOME" 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="Win" border="normal" apply="org.chorem.billy.ui.InvoiceController">
+ <vbox>
+ <toolbarbutton id="newInvoice" label="Add new invoice" />
+ </vbox>
+ <separator bar="true" />
+ <vbox>
+
+ </vbox>
+</window>
\ No newline at end of file
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2010-07-01 13:16:38 UTC (rev 44)
+++ trunk/pom.xml 2010-08-10 10:14:01 UTC (rev 45)
@@ -17,8 +17,9 @@
<version>1.0.0-alpha-1-SNAPSHOT</version>
<modules>
- <module>billy-ui</module>
- <module>billy-business</module>
+ <!-- <module>billy-ui</module>
+ <module>billy-business</module> -->
+ <module>billy-ui-zk</module>
</modules>
<dependencyManagement>
@@ -98,6 +99,75 @@
<artifactId>javassist</artifactId>
<version>3.8.0.GA</version>
</dependency>
+
+ <!-- dependencies for billy-zk -->
+ <dependency>
+ <groupId>org.chorem.chorem-data</groupId>
+ <artifactId>data-bonzoms</artifactId>
+ <version>${chorem-data.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>jasperreports</groupId>
+ <artifactId>jasperreports</artifactId>
+ <version>3.5.3</version>
+ <exclusions>
+ <exclusion>
+ <groupId>commons-collections</groupId>
+ <artifactId>commons-collections</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+
+ <dependency>
+ <groupId>org.zkoss.zk</groupId>
+ <artifactId>zk</artifactId>
+ <version>${zk.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.zkoss.zk</groupId>
+ <artifactId>zkplus</artifactId>
+ <version>${zk.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.zkoss.zk</groupId>
+ <artifactId>zul</artifactId>
+ <version>${zk.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>${junit.version}</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.nuiton.wikitty</groupId>
+ <artifactId>wikitty-api</artifactId>
+ <version>${wikitty.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.nuiton.wikitty</groupId>
+ <artifactId>wikitty-jdbc-impl</artifactId>
+ <version>${wikitty.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>com.h2database</groupId>
+ <artifactId>h2</artifactId>
+ <version>1.2.134</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-log4j12</artifactId>
+ <version>1.5.11</version>
+ </dependency>
+
</dependencies>
</dependencyManagement>
@@ -131,6 +201,20 @@
<role>Développeur</role>
</roles>
</developer>
+
+ <developer>
+ <id>bbrossaud</id>
+ <name>Benoît Brossaud</name>
+ <email>bbrossaud(a)codelutin.com</email>
+ <organization>Code Lutin</organization>
+ <organizationUrl>http://www.codelutin.com/</organizationUrl>
+ <timezone>+1</timezone>
+ <roles>
+ <role>Analyste</role>
+ <role>Développeur</role>
+ </roles>
+ </developer>
+
</developers>
<!-- ************************************************************* -->
@@ -145,6 +229,10 @@
<projectId>billy</projectId>
<platform>chorem.org</platform>
+ <chorem-data.version>0.1-SNAPSHOT</chorem-data.version>
+ <zk.version>5.0.2</zk.version>
+ <wikitty.version>2.0</wikitty.version>
+
<!-- Nuiton librairies -->
<topia.version>2.2.0</topia.version>
<generator.version>1.0.0</generator.version>
1
0