This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository chorem. See http://git.chorem.org/chorem.git commit 590802817b8546f0e8d353f1930d425633c933e9 Author: Jean Couteau <jean.couteau@gmail.com> Date: Sat Feb 6 15:53:09 2016 +0100 refs #1313 : Fix project billing report --- .../src/main/java/org/chorem/ChoremQueryMaker.java | 13 +++++++++ .../financial/ProjectBillingReportAction.java | 31 +++++++++++++++------- chorem-webmotion/src/main/resources/mapping | 2 +- .../jsp/financial/reports/projectBillingReport.jsp | 6 ++++- 4 files changed, 40 insertions(+), 12 deletions(-) diff --git a/chorem-entities/src/main/java/org/chorem/ChoremQueryMaker.java b/chorem-entities/src/main/java/org/chorem/ChoremQueryMaker.java index f8ab911..01eabbb 100644 --- a/chorem-entities/src/main/java/org/chorem/ChoremQueryMaker.java +++ b/chorem-entities/src/main/java/org/chorem/ChoremQueryMaker.java @@ -25,6 +25,7 @@ package org.chorem; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.chorem.entities.Employee; +import org.chorem.entities.Quotation; import org.nuiton.wikitty.query.WikittyQuery; import org.nuiton.wikitty.query.WikittyQueryMakerAbstract; @@ -82,6 +83,18 @@ public class ChoremQueryMaker extends WikittyQueryMakerAbstract<ChoremQueryMaker return this; } + /** + * Ajoute une contrainte qui filtre sur un projet ou une quotation qui pointe sur ce projet + * company + * + * @param projectId + * @return maker qui etait en argument + */ + public ChoremQueryMaker filterOnProjectOrQuotation(String projectId) { + this.or().ideq(projectId).eq(Quotation.FQ_FIELD_QUOTATION_PROJECT, projectId).close(); + return this; + } + // // Des methodes utilisables en function dans les select // diff --git a/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/financial/ProjectBillingReportAction.java b/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/financial/ProjectBillingReportAction.java index e75ce1e..1caedd1 100644 --- a/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/financial/ProjectBillingReportAction.java +++ b/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/financial/ProjectBillingReportAction.java @@ -22,15 +22,14 @@ package org.chorem.webmotion.actions.financial; */ import org.chorem.ChoremClient; -import org.chorem.entities.Accepted; +import org.chorem.ChoremQueryMaker; import org.chorem.entities.FinancialTransaction; -import org.chorem.entities.Quotation; +import org.chorem.entities.Project; import org.chorem.webmotion.actions.sales.SalesData; -import org.chorem.webmotion.actions.sales.SalesReportHelper; import org.debux.webmotion.server.WebMotionController; import org.debux.webmotion.server.render.Render; +import org.nuiton.wikitty.entities.Element; import org.nuiton.wikitty.query.WikittyQuery; -import org.nuiton.wikitty.query.WikittyQueryMaker; import java.util.Date; import java.util.LinkedHashMap; @@ -48,7 +47,7 @@ public class ProjectBillingReportAction extends WebMotionController { * @param client * @return */ - public Render billing(ChoremClient client, String project, String from, + public Render billing(ChoremClient client, String projectId, String from, String to) { if (null == from) { @@ -59,7 +58,7 @@ public class ProjectBillingReportAction extends WebMotionController { to = String.valueOf(BillingReportHelper.getLastYear()); } - Map<Integer, SalesData> salesData = new LinkedHashMap<Integer, SalesData>(); + Map<Integer, SalesData> salesData = new LinkedHashMap<>(); List<Integer> listAllYears = BillingReportHelper.listAllYears(from, to); @@ -67,26 +66,30 @@ public class ProjectBillingReportAction extends WebMotionController { double previousYearValue = 0; + Project project = client.restore(Project.class, projectId); + for (Integer year:listAllYears){ Date yearFirstDay = BillingReportHelper.getFirstDayOfYear(year); Date yearLastDay = BillingReportHelper.getLastDayOfYear(year); SalesData yearData = new SalesData(); - WikittyQuery projectQuery = new WikittyQueryMaker() + WikittyQuery projectQuery = new ChoremQueryMaker() .select().sum("FinancialTransaction.amount").where().and() - .eq(FinancialTransaction.FQ_FIELD_FINANCIALTRANSACTION_TARGET, project) .bw(FinancialTransaction.FQ_FIELD_FINANCIALTRANSACTION_EMITTEDDATE, yearFirstDay, yearLastDay) + .containsOne(FinancialTransaction.FQ_FIELD_FINANCIALTRANSACTION_TARGET) + .select(Element.ID).filterOnProjectOrQuotation(projectId) .end(); Double billing = client.findByQuery(Double.class, projectQuery); //TODO JC 2012-01-22 Find a way to replace two queries into one. - WikittyQuery quotationsQuery = new WikittyQueryMaker().and() - .eq(FinancialTransaction.FQ_FIELD_FINANCIALTRANSACTION_TARGET, project) + WikittyQuery quotationsQuery = new ChoremQueryMaker().and() .bw(FinancialTransaction.FQ_FIELD_FINANCIALTRANSACTION_EMITTEDDATE, yearFirstDay, yearLastDay) + .containsOne(FinancialTransaction.FQ_FIELD_FINANCIALTRANSACTION_TARGET) + .select(Element.ID).filterOnProjectOrQuotation(projectId) .end(); List<FinancialTransaction> quotations = client.findAllByQuery(FinancialTransaction.class, @@ -107,8 +110,16 @@ public class ProjectBillingReportAction extends WebMotionController { salesData.put(year, yearData); } + Double total = 0.0; + + for (Map.Entry<Integer, SalesData> entry : salesData.entrySet()) { + total += entry.getValue().getSales(); + } + return renderView("financial/reports/projectBillingReport.jsp", + "project", project.getName(), "data", salesData, + "total", total, "allYears", listAllYearsInChorem, "fromYear", from, "toYear", to); diff --git a/chorem-webmotion/src/main/resources/mapping b/chorem-webmotion/src/main/resources/mapping index e1bf470..6fb51f8 100644 --- a/chorem-webmotion/src/main/resources/mapping +++ b/chorem-webmotion/src/main/resources/mapping @@ -108,7 +108,7 @@ GET /financial/expenseAccounts/{expenseAccountId} action:financial.Expense PUT /financial/expenseAccounts/{expenseAccountId} action:financial.ExpenseAccountAction.saveExpenseAccount * /financial/report/billing action:financial.BillingReportAction.billing * /financial/report/billingPerProject action:financial.BillingPerProjectReportAction.billing -* /financial/report/billingPerProject/{project} action:financial.ProjectBillingReportAction.billing +* /financial/report/billingPerProject/{projectId} action:financial.ProjectBillingReportAction.billing * /financial/report/billingPerAccount action:financial.BillingPerAccountReportAction.billing * /financial/report/billingPerAccount/{account} action:financial.AccountBillingReportAction.billing * /billingMenu view:financial/reports/menu.jsp diff --git a/chorem-webmotion/src/main/webapp/WEB-INF/jsp/financial/reports/projectBillingReport.jsp b/chorem-webmotion/src/main/webapp/WEB-INF/jsp/financial/reports/projectBillingReport.jsp index 11f52a9..e5aed3b 100644 --- a/chorem-webmotion/src/main/webapp/WEB-INF/jsp/financial/reports/projectBillingReport.jsp +++ b/chorem-webmotion/src/main/webapp/WEB-INF/jsp/financial/reports/projectBillingReport.jsp @@ -70,7 +70,7 @@ }); </script> - <h2>Facturation par année</h2> + <h2>Facturation par année - ${project}</h2> <form action="sales" method="get"> <select name="from"> @@ -109,6 +109,10 @@ <td class="percent">${year.value.progression} %</td> </tr> </c:forEach> + <tr> + <td>Total</td> + <td>${total} €</td> + </tr> </tbody> </table> -- To stop receiving notification emails like this one, please contact chorem.org SCM administrator <admin+scm@chorem.org>.