r300 - in trunk/chorem-webmotion/src/main: java/org/chorem/webmotion/actions/sales webapp/WEB-INF/jsp/salesReports
Author: jcouteau Date: 2013-01-22 11:47:20 +0100 (Tue, 22 Jan 2013) New Revision: 300 Url: http://chorem.org/projects/chorem/repository/revisions/300 Log: refs #862 : - Finish sales per project report (list all project with sales between two years with amount and number of quotations) Added: trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/sales/SalesData.java Modified: trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/sales/SalesPerProjectReportAction.java trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/salesReports/salesPerProjectReport.jsp Added: trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/sales/SalesData.java =================================================================== --- trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/sales/SalesData.java (rev 0) +++ trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/sales/SalesData.java 2013-01-22 10:47:20 UTC (rev 300) @@ -0,0 +1,38 @@ +package org.chorem.webmotion.actions.sales; + +/** + * @author jcouteau <couteau@codelutin.com> + */ +public class SalesData { + + protected Integer sales; + + protected Integer quotations; + + public Integer getSales() { + return sales; + } + + public void setSales(Integer sales) { + this.sales = sales; + } + + public Integer getQuotations() { + return quotations; + } + + public void setQuotations(Integer quotations) { + this.quotations = quotations; + } + + public Integer getMean() { + + Integer mean = 0; + + if (null != sales && null != quotations && quotations != 0) { + mean = sales/quotations; + } + + return mean; + } +} Modified: trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/sales/SalesPerProjectReportAction.java =================================================================== --- trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/sales/SalesPerProjectReportAction.java 2013-01-19 10:11:15 UTC (rev 299) +++ trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/sales/SalesPerProjectReportAction.java 2013-01-22 10:47:20 UTC (rev 300) @@ -37,25 +37,25 @@ to = String.valueOf(SalesReportHelper.getLastYear()); } - Map<String, Integer> salesPerProjectData = getSalesPerProjectData(from, to, client); + Map<Project, SalesData> salesData = getSalesPerProjectData(from, to, client); List<Integer> listAllYearsInChorem = SalesReportHelper.listAllYears(client); return renderView("salesReports/salesPerProjectReport.jsp", - "data", salesPerProjectData, + "data", salesData, "allYears", listAllYearsInChorem, "fromYear", from, "toYear", to); } - protected Map<String,Integer> getSalesPerProjectData(String firstYear, + protected Map<Project,SalesData> getSalesPerProjectData(String firstYear, String lastYear, WikittyClient client){ Date last = SalesReportHelper.getLastDayOfYear(Integer.valueOf(lastYear)); Date first = SalesReportHelper.getFirstDayOfYear(Integer.valueOf(firstYear)); - Map<String,Integer> salesData = new LinkedHashMap<String, Integer>(); + Map<Project,SalesData> salesData = new LinkedHashMap<Project, SalesData>(); //a query to get all the projects WikittyQuery projectsQuery = new WikittyQueryMaker().and() @@ -66,6 +66,8 @@ //a query per project :( for (Project project:projects){ + SalesData projectData = new SalesData(); + WikittyQuery projectQuery = new WikittyQueryMaker() .select("Quotation.amount", Aggregate.SUM).and() .eq(Quotation.FQ_FIELD_QUOTATION_PROJECT, project) @@ -74,10 +76,21 @@ Integer sales = client.findByQuery(Integer.class, projectQuery); + //TODO JC 2012-01-22 Find a way to replace two queries into one. + WikittyQuery quotationsQuery = new WikittyQueryMaker().and() + .eq(Quotation.FQ_FIELD_QUOTATION_PROJECT, project) + .bw(Accepted.FQ_FIELD_ACCEPTED_ACCEPTEDDATE, first, last) + .end(); + + List<Quotation> quotations = client.findAllByQuery(Quotation.class, + quotationsQuery).getAll(); + + //Rempli la map que si on a des valeurs if (null != sales && sales != 0) { - salesData.put( project.getName(), sales); + projectData.setSales(sales); + projectData.setQuotations(quotations.size()); + salesData.put(project, projectData); } - } return salesData; Modified: trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/salesReports/salesPerProjectReport.jsp =================================================================== --- trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/salesReports/salesPerProjectReport.jsp 2013-01-19 10:11:15 UTC (rev 299) +++ trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/salesReports/salesPerProjectReport.jsp 2013-01-22 10:47:20 UTC (rev 300) @@ -36,18 +36,20 @@ $(document).ready(function(){ var sales = [ <c:forEach var="entry" items="${data}" varStatus="counter"> - ['${entry.key}', ${entry.value}] + ['${entry.key.name}', ${entry.value.sales}] <c:if test="${!counter.last}">, </c:if> </c:forEach> ]; - var plot1 = $.jqplot ('sales', sales, { + var plot1 = $.jqplot ('sales', [sales], { title:'Ventes par projet', seriesDefaults:{ - renderer:$.jqplot.PieRenderer - }, - highlighter: { - show: true + renderer:$.jqplot.PieRenderer, + rendererOptions: { + showDataLabels: true, + dataLabels: 'value', + sliceMargin: 3 + } }, cursor: { show: false @@ -76,7 +78,29 @@ <div id="sales" style="height:200px;"></div> - </div> + + <table class="table table-striped table-bordered table-condensed"> + <thead> + <tr> + <th>Projet</th> + <th>Ventes</th> + <th>Devis</th> + <th>€/devis</th> + </tr> + </thead> + <tbody> + <c:forEach var="project" items="${data}"> + <tr> + <td>${project.key.name}</td> + <td>${project.value.sales}</td> + <td>${project.value.quotations}</td> + <td>${project.value.mean} €</td> + </tr> + </c:forEach> + </tbody> + </table> + + </div> </div> <div style="clear:both;"/> \ No newline at end of file
participants (1)
-
jcouteau@users.chorem.org