Author: bleny Date: 2014-05-27 16:17:54 +0200 (Tue, 27 May 2014) New Revision: 1984 Url: http://forge.codelutin.com/projects/wao/repository/revisions/1984 Log: refs #4487 add compliance boarding Modified: trunk/wao-persistence/src/main/java/fr/ifremer/wao/entity/ContactTopiaDao.java trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/ObsMerSynthesis.java trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/SynthesisService.java trunk/wao-web/src/main/webapp/WEB-INF/content/obsmer/synthesis.jsp Modified: trunk/wao-persistence/src/main/java/fr/ifremer/wao/entity/ContactTopiaDao.java =================================================================== --- trunk/wao-persistence/src/main/java/fr/ifremer/wao/entity/ContactTopiaDao.java 2014-05-27 13:00:46 UTC (rev 1983) +++ trunk/wao-persistence/src/main/java/fr/ifremer/wao/entity/ContactTopiaDao.java 2014-05-27 14:17:54 UTC (rev 1984) @@ -318,4 +318,52 @@ return data; } + + protected Map<String, Long> countByCompany(HqlAndParametersBuilder<Contact> hqlAndParametersBuilder) { + + String hql = hqlAndParametersBuilder.getHql(); + + hql = "select c.sampleRow.company.name, count(c.topiaId) " + hql + " group by c.sampleRow.company.name order by c.sampleRow.company.name"; + + if (log.isDebugEnabled()) { + log.debug("query count by company" + hql); + } + + List<Object[]> findAll = findAll(hql, hqlAndParametersBuilder.getHqlParameters()); + + Map<String, Long> countByCompany = new LinkedHashMap<>(); + for (Object[] row : findAll) { + countByCompany.put((String) row[0], (long) row[1]); + } + + return countByCompany; + } + + public Map<String, Double> getComplianceBoardingIndicator(ContactsFilter filter) { + + HqlAndParametersBuilder<Contact> hqlAndParametersBuilder = toContactHqlAndParametersBuilder(filter); + + Map<String, Long> countContactsByCompany = countByCompany(hqlAndParametersBuilder); + + hqlAndParametersBuilder.addWhereClause("c." + Contact.PROPERTY_NB_OBSERVANTS + " >= c.sampleRow." + SampleRow.PROPERTY_NB_OBSERVANTS); + + Map<String, Long> countContactsWithComplianceByCompany = countByCompany(hqlAndParametersBuilder); + + Map<String, Double> complianceBoardingIndicator = new LinkedHashMap<>(); + for (Map.Entry<String, Long> entry : countContactsByCompany.entrySet()) { + + String companyName = entry.getKey(); + Long contactsCount = entry.getValue(); + + Long contactsWithComplianceCount = countContactsWithComplianceByCompany.get(companyName); + if (contactsWithComplianceCount == null) { + contactsWithComplianceCount = 0l; + } + + Double ratio = contactsWithComplianceCount.doubleValue() / contactsCount.doubleValue(); + complianceBoardingIndicator.put(companyName, ratio); + } + + return complianceBoardingIndicator; + } } Modified: trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/ObsMerSynthesis.java =================================================================== --- trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/ObsMerSynthesis.java 2014-05-27 13:00:46 UTC (rev 1983) +++ trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/ObsMerSynthesis.java 2014-05-27 14:17:54 UTC (rev 1984) @@ -3,6 +3,8 @@ import fr.ifremer.wao.entity.Boat; import fr.ifremer.wao.services.utils.BarChartData; +import java.util.Map; + public class ObsMerSynthesis { protected BarChartData expectedVsActualObservationsByMonthsBarChartData; @@ -19,6 +21,8 @@ protected int validBoardingsCount; + protected Map<String, Double> complianceBoardingIndicator; + public BarChartData getExpectedVsActualObservationsByMonthsBarChartData() { return expectedVsActualObservationsByMonthsBarChartData; } @@ -74,4 +78,12 @@ public void setValidBoardingsCount(int validBoardingsCount) { this.validBoardingsCount = validBoardingsCount; } + + public void setComplianceBoardingIndicator(Map<String, Double> complianceBoardingIndicator) { + this.complianceBoardingIndicator = complianceBoardingIndicator; + } + + public Map<String, Double> getComplianceBoardingIndicator() { + return complianceBoardingIndicator; + } } Modified: trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/SynthesisService.java =================================================================== --- trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/SynthesisService.java 2014-05-27 13:00:46 UTC (rev 1983) +++ trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/SynthesisService.java 2014-05-27 14:17:54 UTC (rev 1984) @@ -45,10 +45,22 @@ setBoardingBoatsData(obsMerSynthesis, filter); + setComplianceBoardingIndicator(obsMerSynthesis, filter); + return obsMerSynthesis; } + protected void setComplianceBoardingIndicator(ObsMerSynthesis obsMerSynthesis, ContactsFilter filter) { + + ContactTopiaDao dao = getContactDao(); + + Map<String, Double> complianceBoardingIndicator = dao.getComplianceBoardingIndicator(filter); + + obsMerSynthesis.setComplianceBoardingIndicator(complianceBoardingIndicator); + + } + /** * Un graphique avec, pour chaque mois, deux barres qui représentent l'effort demandé * vs l'effort réalisé. Modified: trunk/wao-web/src/main/webapp/WEB-INF/content/obsmer/synthesis.jsp =================================================================== --- trunk/wao-web/src/main/webapp/WEB-INF/content/obsmer/synthesis.jsp 2014-05-27 13:00:46 UTC (rev 1983) +++ trunk/wao-web/src/main/webapp/WEB-INF/content/obsmer/synthesis.jsp 2014-05-27 14:17:54 UTC (rev 1984) @@ -101,6 +101,34 @@ <s:text name="SynthesisId.IND_COMPLIANCE_BOARDING"/> </h2> + <table class="table"> + <thead> + <tr> + <th> + <s:text name="wao.ui.entity.Company"/> + </th> + <th> + <s:text name="wao.ui.synthesis.complianceBoarding.description"/> + </th> + </tr> + </thead> + <tbody> + <s:iterator value="synthesis.complianceBoardingIndicator"> + <tr> + <td> + <s:property value="key"/> + </td> + <td> + <s:property value="value * 100"/> % + </td> + </tr> + </s:iterator> + </tbody> + </table> + + <s:if test="authenticatedWaoUser.authorizedToViewOtherCompanies"> + </s:if> + </article> <article>