Author: bleny Date: 2014-04-10 17:57:31 +0200 (Thu, 10 Apr 2014) New Revision: 1878 Url: http://forge.codelutin.com/projects/wao/repository/revisions/1878 Log: refs #4490 allow admin to change information company before viewing boat details, some UI improvements Modified: trunk/wao-services/src/main/java/fr/ifremer/wao/services/AuthenticatedWaoUser.java trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/BoatDetails.java trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/ObsMerSamplingPlanService.java trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/BoatDetailsAction.java trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/BoatsAction.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/WEB-INF/content/obsmer/boats.jsp trunk/wao-web/src/main/webapp/enpoints-js.jsp trunk/wao-web/src/main/webapp/wao.css Modified: trunk/wao-services/src/main/java/fr/ifremer/wao/services/AuthenticatedWaoUser.java =================================================================== --- trunk/wao-services/src/main/java/fr/ifremer/wao/services/AuthenticatedWaoUser.java 2014-04-10 15:47:41 UTC (rev 1877) +++ trunk/wao-services/src/main/java/fr/ifremer/wao/services/AuthenticatedWaoUser.java 2014-04-10 15:57:31 UTC (rev 1878) @@ -209,6 +209,11 @@ return authorizedToViewBoatDetails; } + public boolean isAuthorizedToViewBoatDetailsForAllCompanies() { + boolean authorizedToViewBoatDetailsForAllCompanies = userProfile.isAdmin(); + return authorizedToViewBoatDetailsForAllCompanies; + } + public boolean isAuthorizedToViewBoatDetails(String companyId) { boolean authorizedToViewBoatDetails = userProfile.isAdmin() || userProfile.isCoordinatorOrObserver() && waoUser.getCompany().getTopiaId().equals(companyId); Modified: trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/BoatDetails.java =================================================================== --- trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/BoatDetails.java 2014-04-10 15:47:41 UTC (rev 1877) +++ trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/BoatDetails.java 2014-04-10 15:57:31 UTC (rev 1878) @@ -26,7 +26,6 @@ import fr.ifremer.wao.entity.ElligibleBoat; import fr.ifremer.wao.entity.ObsProgram; import fr.ifremer.wao.entity.SampleRow; -import org.apache.commons.lang3.BooleanUtils; import java.io.Serializable; import java.util.LinkedList; @@ -67,7 +66,7 @@ for (ElligibleBoat elligibleBoat : boatInfos.getBoat().getElligibleBoat()) { SampleRow sampleRow = elligibleBoat.getSampleRow(); if (sampleRow.getCompany().equals(boatInfos.getCompany()) && sampleRow.getObsProgram().equals(obsProgram)) { - if (elligibleBoat.isGlobalActive() || BooleanUtils.isNotFalse(elligibleBoat.getCompanyActive())) { + if (elligibleBoat.isBoatElligible()) { elligibleForSampleRows.add(sampleRow); } } Modified: trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/ObsMerSamplingPlanService.java =================================================================== --- trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/ObsMerSamplingPlanService.java 2014-04-10 15:47:41 UTC (rev 1877) +++ trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/ObsMerSamplingPlanService.java 2014-04-10 15:57:31 UTC (rev 1878) @@ -766,4 +766,22 @@ } } } + + public List<SampleRow> getUnfinishedSampleRows(AuthenticatedWaoUser authenticatedWaoUser, String companyId) { + + SampleRowsFilter sampleRowsFilter = newSampleRowsFilter(authenticatedWaoUser); + + sampleRowsFilter.setCompanyIds(ImmutableSet.of(companyId)); + + Date now = getNow(); + sampleRowsFilter.setPeriodFrom(now); + // sampleRowsFilter.setPeriodTo(DateUtils.addYears(now, 1)); + + sampleRowsFilter.setOrderByArguments(ImmutableSet.of(SampleRow.PROPERTY_CODE)); + + List<SampleRow> unfinishedSampleRows = getSamplingPlanRows(sampleRowsFilter); + + return unfinishedSampleRows; + + } } Modified: trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/BoatDetailsAction.java =================================================================== --- trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/BoatDetailsAction.java 2014-04-10 15:47:41 UTC (rev 1877) +++ trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/BoatDetailsAction.java 2014-04-10 15:57:31 UTC (rev 1878) @@ -28,6 +28,8 @@ import fr.ifremer.wao.services.service.ObsMerSamplingPlanService; import fr.ifremer.wao.web.WaoJspActionSupport; +import java.util.List; + public class BoatDetailsAction extends WaoJspActionSupport { private static final long serialVersionUID = 1L; @@ -44,6 +46,8 @@ protected SampleRow startBoatSelectionForSampleRow; + private List<SampleRow> sampleRowsToSetElligible; + public void setService(ObsMerBoatsService service) { this.service = service; } @@ -73,6 +77,8 @@ startBoatSelectionForSampleRow = obsMerSamplingPlanService.getSampleRow(startBoatSelectionForSampleRowId); } + sampleRowsToSetElligible = obsMerSamplingPlanService.getUnfinishedSampleRows(getAuthenticatedWaoUser(), companyId); + return SUCCESS; } @@ -84,4 +90,8 @@ public SampleRow getStartBoatSelectionForSampleRow() { return startBoatSelectionForSampleRow; } + + public List<SampleRow> getSampleRowsToSetElligible() { + return sampleRowsToSetElligible; + } } Modified: trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/BoatsAction.java =================================================================== --- trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/BoatsAction.java 2014-04-10 15:47:41 UTC (rev 1877) +++ trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/BoatsAction.java 2014-04-10 15:57:31 UTC (rev 1878) @@ -24,12 +24,14 @@ import com.opensymphony.xwork2.Preparable; import fr.ifremer.wao.BoatsFilter; import fr.ifremer.wao.entity.Boat; +import fr.ifremer.wao.entity.Company; import fr.ifremer.wao.entity.SampleRow; import fr.ifremer.wao.services.service.BoatsFilterValues; import fr.ifremer.wao.services.service.ObsMerBoatsList; import fr.ifremer.wao.services.service.ObsMerBoatsService; import fr.ifremer.wao.services.service.ObsMerSamplingPlanService; import fr.ifremer.wao.services.service.PaginationBean; +import fr.ifremer.wao.services.service.administration.CompaniesService; import fr.ifremer.wao.web.WaoJspActionSupport; import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; @@ -52,6 +54,8 @@ protected transient ObsMerBoatsService service; + protected transient CompaniesService companiesService; + protected transient ObsMerSamplingPlanService obsMerSamplingPlanService; /** @@ -111,6 +115,10 @@ this.obsMerSamplingPlanService = obsMerSamplingPlanService; } + public void setCompaniesService(CompaniesService companiesService) { + this.companiesService = companiesService; + } + @Override public void prepare() { @@ -146,4 +154,8 @@ return startBoatSelectionForSampleRow; } + public List<Company> getAllCompanies() { + return companiesService.getAllCompanies(); + } + } 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-10 15:47:41 UTC (rev 1877) +++ trunk/wao-web/src/main/resources/i18n/wao-web_en_GB.properties 2014-04-10 15:57:31 UTC (rev 1878) @@ -524,7 +524,7 @@ wao.ui.synthesis.observationHours.categoryName=Hours of the day wao.ui.synthesis.observationHours.description=Number of observations according to the time of the day (based on the observation begin date) wao.ui.synthesis.observationHours.title=Observation hours -wao.ui.tip.boatDetails.elligibleForSampleRowsEmpty=The boat is not associated to any sample row +wao.ui.tip.boatDetails.elligibleForSampleRowsEmpty=The boat is not associated to any sample row affected to the company wao.ui.tip.boatSelectionForSampleRowStarted=You are selecting a boat for sample row %s to create a contact. Sample row profession is %s. wao.ui.tip.contactAlreadyExists=You can't create a new contact since another already exists wao.ui.tip.inactiveBoat=You can't create a new contact with a inactive 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-10 15:47:41 UTC (rev 1877) +++ trunk/wao-web/src/main/resources/i18n/wao-web_fr_FR.properties 2014-04-10 15:57:31 UTC (rev 1878) @@ -524,7 +524,7 @@ wao.ui.synthesis.observationHours.categoryName=Heures de la journée wao.ui.synthesis.observationHours.description=Nombre d'observations effectuée selon l'heure d'arrivée wao.ui.synthesis.observationHours.title=Distribution des périodes d'observation -wao.ui.tip.boatDetails.elligibleForSampleRowsEmpty=Le navire n'est éligible pour aucune ligne du plan +wao.ui.tip.boatDetails.elligibleForSampleRowsEmpty=Le navire n'est éligible pour aucune des lignes du plan affectées à la société wao.ui.tip.boatSelectionForSampleRowStarted=Vous êtes en mode de sélection d'un navire pour la ligne %s afin de créer un contact. Le métier de la ligne est %s. wao.ui.tip.contactAlreadyExists=Il existe déjà un contact en cours pour ce navire wao.ui.tip.inactiveBoat=On ne peut pas créer un contact avec un navire inactif 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-10 15:47:41 UTC (rev 1877) +++ trunk/wao-web/src/main/webapp/WEB-INF/content/obsmer/boat-details.jsp 2014-04-10 15:57:31 UTC (rev 1878) @@ -203,9 +203,11 @@ </s:iterator> </ul> </s:else> - <div class="alert alert-info"> - <s:text name="wao.ui.tip.useBoatSelectionForSampleRow"/> - </div> + <s:if test="authenticatedWaoUser.authorizedToCreateContact"> + <div class="alert alert-info"> + <s:text name="wao.ui.tip.useBoatSelectionForSampleRow"/> + </div> + </s:if> </s:if> <s:else> <s:if test="boatDetails.newContactCreatable"> @@ -229,6 +231,10 @@ </div> </s:else> </s:else> + + <s:iterator value="sampleRowsToSetElligible"> + <s:property value="code"/> + </s:iterator> </s:if> <s:else> <div class="alert"> Modified: trunk/wao-web/src/main/webapp/WEB-INF/content/obsmer/boats.jsp =================================================================== --- trunk/wao-web/src/main/webapp/WEB-INF/content/obsmer/boats.jsp 2014-04-10 15:47:41 UTC (rev 1877) +++ trunk/wao-web/src/main/webapp/WEB-INF/content/obsmer/boats.jsp 2014-04-10 15:57:31 UTC (rev 1878) @@ -35,21 +35,40 @@ var boatsFilterController = new FilterController(WAO.OBSMER_BOATS_FILTER_VALUES_JSON_URL, $('#boats-filters-form')); boatsFilterController.init(); + $('#reset-filters').click(function () { + boatsFilterController.reset(); + }); + + var $boatDetails = $('#boat-details'); + var $companyId = $('#companyId'); + + var showBoatDetails = function (boatId) { + var companyId = $companyId.val(); + var successCallback = function (data) { + $boatDetails.html(data); + $('tr.boat-row').removeClass('highlight'); + $('tr[data-boat-id="' + boatId + '"]').addClass('highlight'); + $boatDetails.effect('highlight', 'slow'); + }; + var data = { + fragment: true, + boatId: boatId, + companyId: companyId + }; + WAO.get(WAO.OBSMER_BOAT_DETAILS_URL, data, successCallback); + } $('a.boat-details-action').click(function (e) { e.preventDefault(); - var url = $(this).prop('href'); - var successCallback = function (data) { - $('#boat-details').html(data); - $('tr.boat-row').removeClass('highlight'); - $('#').addClass('highlight'); + var boatId = $(this).parents('tr.boat-row').attr('data-boat-id'); + showBoatDetails(boatId); + }); + $companyId.change(function () { + var boatId = $('tr.boat-row.highlight').attr('data-boat-id'); + if (boatId) { + showBoatDetails(boatId); } - WAO.get(url, { fragment: true }, successCallback); }); - $('#reset-filters').click(function () { - boatsFilterController.reset(); - }); - }); </script> @@ -162,6 +181,20 @@ </s:text> </h2> + <s:if test="authenticatedWaoUser.authorizedToViewBoatDetailsForAllCompanies"> + <s:select id="companyId" + name="companyId" + label="Vous devez sélectionner la société pour laquelle vous souhaitez consulter les informations" + list="allCompanies" + listKey="%{topiaId}" + listValue="%{name}" + value="%{authenticatedWaoUser.waoUser.company.topiaId}" + cssClass="input-xxlarge" /> + </s:if> + <s:else> + <s:hidden id="companyId" name="companyId" value="%{authenticatedWaoUser.waoUser.company.topiaId}"/> + </s:else> + <table id="boats-list" class="table-condensed table-striped table-hover"> <thead> <tr> @@ -189,7 +222,7 @@ </thead> <tbody> <s:iterator value="boats" var="boat"> - <tr id="<s:property value="topiaId"/>" class="boat-row"> + <tr data-boat-id="<s:property value="topiaId"/>" class="boat-row"> <td> <s:if test="authenticatedWaoUser.authorizedToViewBoatDetails"> <s:url action="boat-details" id="boatDetailsUrl"> @@ -267,9 +300,12 @@ </div> <s:if test="authenticatedWaoUser.authorizedToViewBoatDetails"> - <div id="boat-details"> - <div class="alert alert-info"> - <s:text name="wao.ui.tip.youMustChooseBoat" /> + + <div> + <div id="boat-details"> + <div class="alert alert-info"> + <s:text name="wao.ui.tip.youMustChooseBoat" /> + </div> </div> </div> </s:if> Modified: trunk/wao-web/src/main/webapp/enpoints-js.jsp =================================================================== --- trunk/wao-web/src/main/webapp/enpoints-js.jsp 2014-04-10 15:47:41 UTC (rev 1877) +++ trunk/wao-web/src/main/webapp/enpoints-js.jsp 2014-04-10 15:57:31 UTC (rev 1878) @@ -26,11 +26,15 @@ $(document).ready(function () { + // json WAO.OBSMER_SAMPLE_ROWS_FILTER_VALUES_JSON_URL = '<s:url namespace="/obsmer" action="sample-rows-filter-values-json"/>'; 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"/>'; + // fragments + WAO.OBSMER_BOAT_DETAILS_URL = '<s:url namespace="/obsmer" action="boat-details"/>'; + }); Modified: trunk/wao-web/src/main/webapp/wao.css =================================================================== --- trunk/wao-web/src/main/webapp/wao.css 2014-04-10 15:47:41 UTC (rev 1877) +++ trunk/wao-web/src/main/webapp/wao.css 2014-04-10 15:57:31 UTC (rev 1878) @@ -41,7 +41,8 @@ * Des classes à usage transverse *****************************************************************************/ -.highlight { +.highlight, +.table-striped tbody>tr.highlight:nth-child(odd)>td, .table-striped tbody>tr.highlight:nth-child(odd)>th { background-color: #ffff99; } @@ -295,7 +296,17 @@ margin-left: 50px; } +#boats-filters-list-details-layout > div:nth-child(1) { + padding-top: 60px; +} + #boats-filters-list-details-layout > div:nth-child(3) { /*max-width: 35%;*/ flex: 1; } + +#boat-details .form-actions { + margin-top: 15px; + border: none; + background-color: inherit; +}