r1897 - in trunk: wao-persistence/src/main/java/fr/ifremer/wao/entity wao-services/src/main/java/fr/ifremer/wao/services/service wao-web/src/main/java/fr/ifremer/wao/web/action/administration wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer wao-web/src/main/resources/fr/ifremer/wao wao-web/src/main/resources/fr/ifremer/wao/web wao-web/src/main/resources/fr/ifremer/wao/web/action wao-web/src/main/resources/fr/ifremer/wao/web/action/obsmer wao-web/src/main/resources/i18n wao-web/src/main/w
Author: bleny Date: 2014-04-18 11:46:34 +0200 (Fri, 18 Apr 2014) New Revision: 1897 Url: http://forge.codelutin.com/projects/wao/repository/revisions/1897 Log: refs #4490 add boat contacts counts Added: trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/BoatContactsCounts.java trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/GetBoatContactsCountJsonAction.java trunk/wao-web/src/main/resources/fr/ifremer/wao/web/ trunk/wao-web/src/main/resources/fr/ifremer/wao/web/action/ trunk/wao-web/src/main/resources/fr/ifremer/wao/web/action/obsmer/ trunk/wao-web/src/main/resources/fr/ifremer/wao/web/action/obsmer/GetBoatContactsCountJsonAction-conversion.properties Modified: trunk/wao-persistence/src/main/java/fr/ifremer/wao/entity/ContactTopiaDao.java trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/ObsMerBoatsService.java trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/administration/EditWaoUserAction.java trunk/wao-web/src/main/resources/i18n/wao-web_en_GB.properties trunk/wao-web/src/main/resources/i18n/wao-web_fr_FR.properties trunk/wao-web/src/main/webapp/WEB-INF/content/obsmer/boat-details.jsp trunk/wao-web/src/main/webapp/enpoints-js.jsp trunk/wao-web/src/main/webapp/wao.js 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-04-17 13:02:44 UTC (rev 1896) +++ trunk/wao-persistence/src/main/java/fr/ifremer/wao/entity/ContactTopiaDao.java 2014-04-18 09:46:34 UTC (rev 1897) @@ -68,6 +68,15 @@ return boats; } + public long count(ContactsFilter filter) { + + HqlAndParametersBuilder<Contact> query = toSampleRowHqlAndParametersBuilder(filter); + + long count = count("select count(topiaId) " + query.getHql(), query.getHqlParameters()); + + return count; + } + public TopiaPagerBean newPager(ContactsFilter filter, int pageSize, int pageIndex) { @@ -217,11 +226,4 @@ return query.findFirstOrNull(); } - public long countContacts(ObsProgram obsProgram, String boatId, String companyId) { - TopiaQueryBuilderAddCriteriaOrRunQueryStep<Contact> query = newQueryBuilder(); - query.addTopiaIdEquals(Contact.PROPERTY_BOAT, boatId); - query.addTopiaIdEquals(Contact.PROPERTY_SAMPLE_ROW + "." + SampleRow.PROPERTY_COMPANY, companyId); - query.addEquals(Contact.PROPERTY_SAMPLE_ROW + "." + SampleRow.PROPERTY_OBS_PROGRAM_ORDINAL, obsProgram.ordinal()); - return query.count(); - } } Added: trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/BoatContactsCounts.java =================================================================== --- trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/BoatContactsCounts.java (rev 0) +++ trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/BoatContactsCounts.java 2014-04-18 09:46:34 UTC (rev 1897) @@ -0,0 +1,21 @@ +package fr.ifremer.wao.services.service; + +public class BoatContactsCounts { + + protected long contactsCount; + + protected long contactsCompanyCount; + + public BoatContactsCounts(long contactsCount, long contactsCompanyCount) { + this.contactsCount = contactsCount; + this.contactsCompanyCount = contactsCompanyCount; + } + + public long getContactsCount() { + return contactsCount; + } + + public long getContactsCompanyCount() { + return contactsCompanyCount; + } +} Modified: trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/ObsMerBoatsService.java =================================================================== --- trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/ObsMerBoatsService.java 2014-04-17 13:02:44 UTC (rev 1896) +++ trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/ObsMerBoatsService.java 2014-04-18 09:46:34 UTC (rev 1897) @@ -23,7 +23,10 @@ import com.google.common.base.Charsets; import com.google.common.base.Optional; +import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableSet; import fr.ifremer.wao.BoatsFilter; +import fr.ifremer.wao.ContactsFilter; import fr.ifremer.wao.WaoTechnicalException; import fr.ifremer.wao.entity.Boat; import fr.ifremer.wao.entity.BoatInfos; @@ -32,6 +35,8 @@ import fr.ifremer.wao.entity.BoatTopiaDao; import fr.ifremer.wao.entity.Company; import fr.ifremer.wao.entity.Contact; +import fr.ifremer.wao.entity.ContactState; +import fr.ifremer.wao.entity.ContactTopiaDao; import fr.ifremer.wao.entity.ObsProgram; import fr.ifremer.wao.services.AuthenticatedWaoUser; import fr.ifremer.wao.services.service.csv.BoatImportExportModel; @@ -45,6 +50,7 @@ import java.io.InputStream; import java.util.Collection; +import java.util.Date; import java.util.HashSet; import java.util.List; @@ -167,7 +173,10 @@ Contact mostRecentContact = getContactDao().findMostRecentContactOrNull(obsProgram, boatId, companyId); - long contactsCount = getContactDao().countContacts(obsProgram, boatId, companyId); + ContactsFilter filter = new ContactsFilter(obsProgram); + filter.getBoatFilter().setBoatIds(ImmutableSet.of(boatId)); + filter.getSampleRowFilter().setCompanyIds(ImmutableSet.of(companyId)); + long contactsCount = getContactDao().count(filter); BoatDetails boatDetails = new BoatDetails(obsProgram, boatInfos, mostRecentContact, contactsCount); @@ -213,4 +222,26 @@ commit(); } + + public BoatContactsCounts getBoatContactsCounts(AuthenticatedWaoUser authenticatedWaoUser, String boatId, String companyId, Date since) { + + ContactsFilter filter = new ContactsFilter(authenticatedWaoUser.getObsProgram()); + + filter.setPeriodFrom(since); + filter.getBoatFilter().setBoatIds(ImmutableSet.of(boatId)); + filter.setContactStates(ImmutableSet.of(ContactState.OBSERVATION_DONE)); + filter.setFilterOnObservationBeginDate(true); + + ContactTopiaDao dao = getContactDao(); + long contactsCount = dao.count(filter); + + filter.getSampleRowFilter().setCompanyIds(ImmutableSet.of(companyId)); + long contactsCompanyCount = dao.count(filter); + + Preconditions.checkState(contactsCompanyCount <= contactsCount); + + return new BoatContactsCounts(contactsCount, contactsCompanyCount); + + } + } Modified: trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/administration/EditWaoUserAction.java =================================================================== --- trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/administration/EditWaoUserAction.java 2014-04-17 13:02:44 UTC (rev 1896) +++ trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/administration/EditWaoUserAction.java 2014-04-18 09:46:34 UTC (rev 1897) @@ -134,6 +134,7 @@ return updateWaoUserCommand; } + // FIXME brendan 17/04/14 création public ImmutableSet<UpdateWaoUserCommandPasswordStrategy> getUpdateWaoUserCommandPasswordStrategies() { return ImmutableSet.copyOf(UpdateWaoUserCommandPasswordStrategy.values()); } Added: trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/GetBoatContactsCountJsonAction.java =================================================================== --- trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/GetBoatContactsCountJsonAction.java (rev 0) +++ trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/GetBoatContactsCountJsonAction.java 2014-04-18 09:46:34 UTC (rev 1897) @@ -0,0 +1,50 @@ +package fr.ifremer.wao.web.action.obsmer; + +import fr.ifremer.wao.services.service.BoatContactsCounts; +import fr.ifremer.wao.services.service.ObsMerBoatsService; +import fr.ifremer.wao.web.WaoJsonActionSupport; + +import java.util.Date; + +public class GetBoatContactsCountJsonAction extends WaoJsonActionSupport { + + protected Date since; + + protected ObsMerBoatsService service; + + protected String boatId; + + protected String companyId; + + protected BoatContactsCounts boatContactsCounts; + + public void setSince(Date since) { + this.since = since; + } + + public void setService(ObsMerBoatsService service) { + this.service = service; + } + + public void setBoatId(String boatId) { + this.boatId = boatId; + } + + public void setCompanyId(String companyId) { + this.companyId = companyId; + } + + @Override + public String execute() { + + boatContactsCounts = service.getBoatContactsCounts(session.getAuthenticatedWaoUser(), boatId, companyId, since); + + return SUCCESS; + + } + + public BoatContactsCounts getBoatContactsCounts() { + return boatContactsCounts; + } + +} Added: trunk/wao-web/src/main/resources/fr/ifremer/wao/web/action/obsmer/GetBoatContactsCountJsonAction-conversion.properties =================================================================== --- trunk/wao-web/src/main/resources/fr/ifremer/wao/web/action/obsmer/GetBoatContactsCountJsonAction-conversion.properties (rev 0) +++ trunk/wao-web/src/main/resources/fr/ifremer/wao/web/action/obsmer/GetBoatContactsCountJsonAction-conversion.properties 2014-04-18 09:46:34 UTC (rev 1897) @@ -0,0 +1 @@ +since=fr.ifremer.wao.web.converter.DateConverter Modified: trunk/wao-web/src/main/resources/i18n/wao-web_en_GB.properties =================================================================== --- trunk/wao-web/src/main/resources/i18n/wao-web_en_GB.properties 2014-04-17 13:02:44 UTC (rev 1896) +++ trunk/wao-web/src/main/resources/i18n/wao-web_en_GB.properties 2014-04-18 09:46:34 UTC (rev 1897) @@ -91,6 +91,11 @@ wao.ui.action.viewShipOwnerBoats=View all boats for this shipowner wao.ui.action.zoomOnSampleRowPeriod=Use as filter dates the one of this sample row wao.ui.actions=Actions +wao.ui.boatDetails.boatContactsCounts.compute=Compute +wao.ui.boatDetails.boatContactsCounts.contactsCompanyCount=Observations done with the company +wao.ui.boatDetails.boatContactsCounts.contactsCount=Observations done (all companies) +wao.ui.boatDetails.boatContactsCounts.since=Since... +wao.ui.boatDetails.boatContactsCounts.title=Compute observations done wao.ui.boatList=List of %s boats wao.ui.boatinfo.title=Infos about %s wao.ui.boats.associatedLine=Sample row(s) associated with this boat Modified: trunk/wao-web/src/main/resources/i18n/wao-web_fr_FR.properties =================================================================== --- trunk/wao-web/src/main/resources/i18n/wao-web_fr_FR.properties 2014-04-17 13:02:44 UTC (rev 1896) +++ trunk/wao-web/src/main/resources/i18n/wao-web_fr_FR.properties 2014-04-18 09:46:34 UTC (rev 1897) @@ -91,6 +91,11 @@ wao.ui.action.viewShipOwnerBoats=Voir tous les navires de cet armateur wao.ui.action.zoomOnSampleRowPeriod=Changer les dates de la période par rapport à celles de la ligne wao.ui.actions=Actions +wao.ui.boatDetails.boatContactsCounts.compute=Calculer +wao.ui.boatDetails.boatContactsCounts.contactsCompanyCount=Nombre d'observations réalisées par la société +wao.ui.boatDetails.boatContactsCounts.contactsCount=Nombre d'observations réalisées (toutes sociétés) +wao.ui.boatDetails.boatContactsCounts.since=Depuis le... +wao.ui.boatDetails.boatContactsCounts.title=Calculer le nombre de sollicitations du navire wao.ui.boatList=Liste de %s navires wao.ui.boatinfo.title=Informations sur %s wao.ui.boats.associatedLine=Ligne(s) du plan associée(s) à ce navire Modified: trunk/wao-web/src/main/webapp/WEB-INF/content/obsmer/boat-details.jsp =================================================================== --- trunk/wao-web/src/main/webapp/WEB-INF/content/obsmer/boat-details.jsp 2014-04-17 13:02:44 UTC (rev 1896) +++ trunk/wao-web/src/main/webapp/WEB-INF/content/obsmer/boat-details.jsp 2014-04-18 09:46:34 UTC (rev 1897) @@ -33,21 +33,7 @@ $boatInfosForm = $('#boat-infos-form'); $('#save-boat-infos').click(function () { - var data = {}; - $boatInfosForm.find('input, textarea').each(function (index, input) { - var $input = $(input); - var parameterName = $input.prop('name'); - if (parameterName.indexOf('__') === 0) { - return; - } - var parameterValue; - if ($input.attr('type') === 'checkbox') { - parameterValue = $input.prop('checked'); - } else { - parameterValue = $input.prop('value'); - } - data[parameterName] = parameterValue; - }); + var data = WAO.toData($boatInfosForm); var successCallback = function () { WAO.notifications.success('<s:text name="wao.ui.form.BoatInfos.success"/>'); } @@ -58,6 +44,34 @@ $boatInfosForm.find('input[readonly], button, textarea').removeAttr('readonly').removeAttr('disabled'); $(this).attr('disabled', 'disabled'); }); + + $boatContactsCountForm = $('#boat-contacts-count-form'); + $boatContactsCountsTable = $('#boat-contacts-counts-table'); + $boatContactsCountsTable.hide(); + + var getBoatContactsCount = function () { + var data = WAO.toData($boatContactsCountForm); + var since = data.since; + var successCallback = function (data) { + var tr = '<tr>' + + ' <td>' + + since + + ' </td>' + + ' <td>' + + data.boatContactsCounts.contactsCompanyCount + + ' </td>' + + ' <td>' + + data.boatContactsCounts.contactsCount + + ' </td>' + + '</tr>'; + $boatContactsCountsTable.find('tbody').append(tr); + $boatContactsCountsTable.show(); + }; + WAO.get(WAO.OBSMER_GET_BOAT_CONTACTS_COUNT_JSON_URL, data, successCallback); + } + + $('#get-boat-contacts-count').click(getBoatContactsCount); + $boatContactsCountForm.enterKey(getBoatContactsCount); }); </script> @@ -141,9 +155,9 @@ <s:if test="boatDetails.contactsCount > 0"> - <h3> + <h4> <s:text name="wao.ui.contact.lastContact"/> - </h3> + </h4> <table class="table"> <tbody> @@ -184,6 +198,7 @@ <s:url action="contacts" id="viewAssociatedContactsForBoatUrl"> <s:param name="filter.boatFilter.registrationCode" value="boatDetails.boatInfos.boat.immatriculation"/> + <s:param name="filter.sampleRowFilter.companyIds" value="boatDetails.boatInfos.company.topiaId"/> <s:param name="filter.periodFrom"/> <s:param name="filter.periodTo"/> </s:url> @@ -261,3 +276,39 @@ <s:text name="wao.ui.tip.inactiveBoat"/> </div> </s:else> + +<h3> + <s:text name="wao.ui.boatDetails.boatContactsCounts.title"/> +</h3> + +<table id="boat-contacts-counts-table" class="table"> + <thead> + <tr> + <td> + <s:text name="wao.ui.boatDetails.boatContactsCounts.since"/> + </td> + <td> + <s:text name="wao.ui.boatDetails.boatContactsCounts.contactsCompanyCount"/> + </td> + <td> + <s:text name="wao.ui.boatDetails.boatContactsCounts.contactsCount"/> + </td> + </thead> + <tbody> + </tbody> +</table> + +<s:form id="boat-contacts-count-form"> + + <s:hidden name="boatId" value="%{boatDetails.boatInfos.boat.topiaId}" /> + <s:hidden name="companyId" value="%{boatDetails.boatInfos.company.topiaId}" /> + + <div class="input-append"> + <s:set name="sincePlaceholder" value="%{formatDate(new java.util.Date())}"/> + <input name="since" type="text" placeholder="<s:property value="%{#sincePlaceholder}"/>"/> + + <button type="button" id="get-boat-contacts-count" class="btn"> + <i class="icon-plus"></i> <s:text name="wao.ui.boatDetails.boatContactsCounts.compute" /> + </button> + </div> +</s:form> Modified: trunk/wao-web/src/main/webapp/enpoints-js.jsp =================================================================== --- trunk/wao-web/src/main/webapp/enpoints-js.jsp 2014-04-17 13:02:44 UTC (rev 1896) +++ trunk/wao-web/src/main/webapp/enpoints-js.jsp 2014-04-18 09:46:34 UTC (rev 1897) @@ -31,6 +31,7 @@ WAO.OBSMER_BOATS_FILTER_VALUES_JSON_URL = '<s:url namespace="/obsmer" action="boats-filter-values-json"/>'; WAO.OBSMER_CONTACTS_FILTER_VALUES_JSON_URL = '<s:url namespace="/obsmer" action="contacts-filter-values-json"/>'; WAO.OBSMER_UPDATE_BOAT_INFOS_JSON_URL = '<s:url namespace="/obsmer" action="update-boat-infos-json"/>'; + WAO.OBSMER_GET_BOAT_CONTACTS_COUNT_JSON_URL = '<s:url namespace="/obsmer" action="get-boat-contacts-count-json"/>'; // fragments WAO.OBSMER_BOAT_DETAILS_URL = '<s:url namespace="/obsmer" action="boat-details"/>'; Modified: trunk/wao-web/src/main/webapp/wao.js =================================================================== --- trunk/wao-web/src/main/webapp/wao.js 2014-04-17 13:02:44 UTC (rev 1896) +++ trunk/wao-web/src/main/webapp/wao.js 2014-04-18 09:46:34 UTC (rev 1897) @@ -19,6 +19,18 @@ * #L% */ +$.fn.enterKey = function (fnc) { + return this.each(function () { + $(this).keypress(function (e) { + var keycode = e.keyCode || e.which; + if (keycode === 13) { + e.preventDefault(); + fnc.call(this, arguments); + } + }) + }) +} + var FilterModel = function (filterValuesUrl) { var self = this; @@ -50,33 +62,7 @@ this.$inputs = $filtersForm.find('input'); this.getFilter = function () { - var filter = {}; - this.$selects.each(function (index, select) { - var $select = $(select); - var parameterName = $select.prop('name'); - if (parameterName.indexOf('__') === 0) { - return; - } - var parameterValues = []; - $select.find('option:selected').each(function (index, option) { - parameterValues.push($(option).prop('value')); - }); - filter[parameterName] = parameterValues; - }); - this.$inputs.each(function (index, input) { - var $input = $(input); - var parameterName = $input.prop('name'); - if (parameterName.indexOf('__') === 0) { - return; - } - var parameterValue; - if ($input.attr('type') === 'checkbox') { - parameterValue = $input.prop('checked'); - } else { - parameterValue = $input.prop('value'); - } - filter[parameterName] = parameterValue; - }); + var filter = WAO.toData(this.$filtersForm); return filter; }; @@ -236,7 +222,7 @@ return result; }; $.get(url, data, stopSpinningAfterCallingSuccessCallback); - } + }; this.post = function (url, data, successCallback) { this.startSpinner(); @@ -246,6 +232,37 @@ return result; }; $.post(url, data, stopSpinningAfterCallingSuccessCallback); + }; + + this.toData = function ($form) { + var data = {}; + $form.find('input, textarea').each(function (index, input) { + var $input = $(input); + var parameterName = $input.prop('name'); + if (parameterName.indexOf('__') === 0) { + return; + } + var parameterValue; + if ($input.attr('type') === 'checkbox') { + parameterValue = $input.prop('checked'); + } else { + parameterValue = $input.prop('value'); + } + data[parameterName] = parameterValue; + }); + $form.find('select').each(function (index, select) { + var $select = $(select); + var parameterName = $select.prop('name'); + if (parameterName.indexOf('__') === 0) { + return; + } + var parameterValues = []; + $select.find('option:selected').each(function (index, option) { + parameterValues.push($(option).prop('value')); + }); + data[parameterName] = parameterValues; + }); + return data; } };
participants (1)
-
bleny@users.forge.codelutin.com