Author: bleny Date: 2014-04-09 14:58:06 +0200 (Wed, 09 Apr 2014) New Revision: 1873 Url: http://forge.codelutin.com/projects/wao/repository/revisions/1873 Log: refs #4487 enable contact creation from sampling plan Added: trunk/wao-persistence/src/main/java/fr/ifremer/wao/entity/ElligibleBoatImpl.java trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/CancelBoatSelectionAction.java Modified: trunk/wao-persistence/src/main/java/fr/ifremer/wao/entity/ContactTopiaDao.java trunk/wao-persistence/src/main/java/fr/ifremer/wao/entity/SampleRowImpl.java trunk/wao-persistence/src/main/xmi/wao-model.zargo trunk/wao-web/src/main/java/fr/ifremer/wao/web/WaoActionSupport.java trunk/wao-web/src/main/java/fr/ifremer/wao/web/WaoSession.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/java/fr/ifremer/wao/web/action/obsmer/CreateContactAction.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/WEB-INF/content/obsmer/sampling-plan.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-04-09 10:25:28 UTC (rev 1872) +++ trunk/wao-persistence/src/main/java/fr/ifremer/wao/entity/ContactTopiaDao.java 2014-04-09 12:58:06 UTC (rev 1873) @@ -47,9 +47,9 @@ if (sort) { if (filter.isSortedByBoardingDate()) { - query.setOrderByArguments(Contact.PROPERTY_OBSERVATION_BEGIN_DATE); + query.setOrderByArguments(Contact.PROPERTY_OBSERVATION_BEGIN_DATE + " desc"); } else { - query.setOrderByArguments(Contact.PROPERTY_CREATION_DATE); + query.setOrderByArguments(Contact.PROPERTY_CREATION_DATE + " desc"); } } @@ -83,7 +83,7 @@ } else { pager.setSortColumn(Contact.PROPERTY_CREATION_DATE); } - pager.setSortAscendant(true); + pager.setSortAscendant(false); return pager; } Added: trunk/wao-persistence/src/main/java/fr/ifremer/wao/entity/ElligibleBoatImpl.java =================================================================== --- trunk/wao-persistence/src/main/java/fr/ifremer/wao/entity/ElligibleBoatImpl.java (rev 0) +++ trunk/wao-persistence/src/main/java/fr/ifremer/wao/entity/ElligibleBoatImpl.java 2014-04-09 12:58:06 UTC (rev 1873) @@ -0,0 +1,10 @@ +package fr.ifremer.wao.entity; + +public class ElligibleBoatImpl extends ElligibleBoatAbstract { + + @Override + public boolean isBoatElligible() { + boolean boatElligible = getCompanyActive() == null && isGlobalActive() || getCompanyActive(); + return boatElligible; + } +} Modified: trunk/wao-persistence/src/main/java/fr/ifremer/wao/entity/SampleRowImpl.java =================================================================== --- trunk/wao-persistence/src/main/java/fr/ifremer/wao/entity/SampleRowImpl.java 2014-04-09 10:25:28 UTC (rev 1872) +++ trunk/wao-persistence/src/main/java/fr/ifremer/wao/entity/SampleRowImpl.java 2014-04-09 12:58:06 UTC (rev 1873) @@ -30,8 +30,10 @@ import org.apache.commons.lang3.StringUtils; import java.util.ArrayList; +import java.util.Collection; import java.util.Date; import java.util.LinkedHashSet; +import java.util.LinkedList; import java.util.List; import java.util.Set; @@ -278,4 +280,15 @@ stringBuffer.append(")"); return stringBuffer.toString(); } + + @Override + public List<ElligibleBoat> getTrulyElligibleBoats() { + List<ElligibleBoat> trulyElligibleBoats = new LinkedList<ElligibleBoat>(); + for (ElligibleBoat elligibleBoat : getElligibleBoat()) { + if (elligibleBoat.isBoatElligible()) { + trulyElligibleBoats.add(elligibleBoat); + } + } + return trulyElligibleBoats; + } } Modified: trunk/wao-persistence/src/main/xmi/wao-model.zargo =================================================================== (Binary files differ) Modified: trunk/wao-web/src/main/java/fr/ifremer/wao/web/WaoActionSupport.java =================================================================== --- trunk/wao-web/src/main/java/fr/ifremer/wao/web/WaoActionSupport.java 2014-04-09 10:25:28 UTC (rev 1872) +++ trunk/wao-web/src/main/java/fr/ifremer/wao/web/WaoActionSupport.java 2014-04-09 12:58:06 UTC (rev 1873) @@ -44,4 +44,11 @@ this.session = session; } + public void set_(String _) { + // ignore jQuery timestamp + } + + public void setFragment(boolean fragment) { + // ignore fragment get parameter: it's managed by sitemesh decorators + } } Modified: trunk/wao-web/src/main/java/fr/ifremer/wao/web/WaoSession.java =================================================================== --- trunk/wao-web/src/main/java/fr/ifremer/wao/web/WaoSession.java 2014-04-09 10:25:28 UTC (rev 1872) +++ trunk/wao-web/src/main/java/fr/ifremer/wao/web/WaoSession.java 2014-04-09 12:58:06 UTC (rev 1873) @@ -43,6 +43,8 @@ protected String contactToHighlightId; + protected String startBoatSelectionForSampleRowId; + public Collection<String> getMessages() { if (messages == null) { messages = Lists.newLinkedList(); @@ -93,4 +95,12 @@ public String getContactToHighlightId() { return contactToHighlightId; } + + public void setStartBoatSelectionForSampleRowId(String startBoatSelectionForSampleRowId) { + this.startBoatSelectionForSampleRowId = startBoatSelectionForSampleRowId; + } + + public String getStartBoatSelectionForSampleRowId() { + return startBoatSelectionForSampleRowId; + } } 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-09 10:25:28 UTC (rev 1872) +++ trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/BoatDetailsAction.java 2014-04-09 12:58:06 UTC (rev 1873) @@ -22,8 +22,10 @@ */ import com.google.common.base.Preconditions; +import fr.ifremer.wao.entity.SampleRow; import fr.ifremer.wao.services.service.BoatDetails; import fr.ifremer.wao.services.service.ObsMerBoatsService; +import fr.ifremer.wao.services.service.ObsMerSamplingPlanService; import fr.ifremer.wao.web.WaoJspActionSupport; public class BoatDetailsAction extends WaoJspActionSupport { @@ -32,16 +34,24 @@ protected transient ObsMerBoatsService service; + protected transient ObsMerSamplingPlanService obsMerSamplingPlanService; + protected String companyId; protected String boatId; protected BoatDetails boatDetails; + protected SampleRow startBoatSelectionForSampleRow; + public void setService(ObsMerBoatsService service) { this.service = service; } + public void setObsMerSamplingPlanService(ObsMerSamplingPlanService obsMerSamplingPlanService) { + this.obsMerSamplingPlanService = obsMerSamplingPlanService; + } + public void setCompanyId(String companyId) { this.companyId = companyId; } @@ -57,6 +67,12 @@ boatDetails = service.getBoatDetails(getObsProgram(), boatId, companyId); + String startBoatSelectionForSampleRowId = session.getStartBoatSelectionForSampleRowId(); + + if (startBoatSelectionForSampleRowId != null) { + startBoatSelectionForSampleRow = obsMerSamplingPlanService.getSampleRow(startBoatSelectionForSampleRowId); + } + return SUCCESS; } @@ -65,4 +81,7 @@ return boatDetails; } + public SampleRow getStartBoatSelectionForSampleRow() { + return startBoatSelectionForSampleRow; + } } 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-09 10:25:28 UTC (rev 1872) +++ trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/BoatsAction.java 2014-04-09 12:58:06 UTC (rev 1873) @@ -24,11 +24,16 @@ import com.opensymphony.xwork2.Preparable; import fr.ifremer.wao.BoatsFilter; import fr.ifremer.wao.entity.Boat; +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.web.WaoJspActionSupport; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.nuiton.topia.persistence.pager.TopiaPagerBean; import java.util.List; @@ -43,8 +48,12 @@ private static final long serialVersionUID = 1L; + private static final Log log = LogFactory.getLog(BoatsAction.class); + protected transient ObsMerBoatsService service; + protected transient ObsMerSamplingPlanService obsMerSamplingPlanService; + /** * Input pager. */ @@ -60,6 +69,10 @@ */ protected ObsMerBoatsList boatList; + protected String startBoatSelectionForSampleRowId; + + protected SampleRow startBoatSelectionForSampleRow; + public void setService(ObsMerBoatsService service) { this.service = service; } @@ -90,10 +103,35 @@ return boatList.getPagination(); } + public void setStartBoatSelectionForSampleRowId(String startBoatSelectionForSampleRowId) { + this.startBoatSelectionForSampleRowId = startBoatSelectionForSampleRowId; + } + + public void setObsMerSamplingPlanService(ObsMerSamplingPlanService obsMerSamplingPlanService) { + this.obsMerSamplingPlanService = obsMerSamplingPlanService; + } + @Override public void prepare() { filter = service.newBoatsFilter(getAuthenticatedWaoUser()); + + if (StringUtils.isNotBlank(startBoatSelectionForSampleRowId)) { + + session.setStartBoatSelectionForSampleRowId(startBoatSelectionForSampleRowId); + + if (log.isInfoEnabled()) { + log.info("user " + getAuthenticatedWaoUser().getWaoUser() + " is starting to select a boat for sample row " + startBoatSelectionForSampleRow); + } + + } + + if (session.getStartBoatSelectionForSampleRowId() != null) { + + startBoatSelectionForSampleRow = obsMerSamplingPlanService.getSampleRow(session.getStartBoatSelectionForSampleRowId()); + + } + } @Override @@ -103,4 +141,9 @@ return SUCCESS; } + + public SampleRow getStartBoatSelectionForSampleRow() { + return startBoatSelectionForSampleRow; + } + } Added: trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/CancelBoatSelectionAction.java =================================================================== --- trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/CancelBoatSelectionAction.java (rev 0) +++ trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/CancelBoatSelectionAction.java 2014-04-09 12:58:06 UTC (rev 1873) @@ -0,0 +1,22 @@ +package fr.ifremer.wao.web.action.obsmer; + +import fr.ifremer.wao.web.WaoJspActionSupport; +import org.apache.struts2.convention.annotation.Result; +import org.apache.struts2.convention.annotation.Results; + + +@Results({ + @Result(name="success", type="redirectAction", params = { "actionName", "boats" }) +}) +public class CancelBoatSelectionAction extends WaoJspActionSupport { + + @Override + public String execute() { + + session.setStartBoatSelectionForSampleRowId(null); + + return SUCCESS; + + } + +} Modified: trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/CreateContactAction.java =================================================================== --- trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/CreateContactAction.java 2014-04-09 10:25:28 UTC (rev 1872) +++ trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/CreateContactAction.java 2014-04-09 12:58:06 UTC (rev 1873) @@ -34,6 +34,8 @@ Contact contact = service.createContact(getAuthenticatedWaoUser(), sampleRowId, boatId); + session.setStartBoatSelectionForSampleRowId(null); + session.setContactToHighlightId(contact.getTopiaId()); return SUCCESS; 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-09 10:25:28 UTC (rev 1872) +++ trunk/wao-web/src/main/resources/i18n/wao-web_en_GB.properties 2014-04-09 12:58:06 UTC (rev 1873) @@ -126,6 +126,7 @@ wao.ui.contacts.createFromBoat=Create a new contact for this boat and this sample row wao.ui.contacts.createFromBoat.fail=Contact creation failed wao.ui.contacts.createFromBoat.warn=Warning \:this sample-row is out of date, are your sure you want to create a new contact ? +wao.ui.contacts.createFromBoatAndSelectedSampleRow=Create a contact for this boat and sample row %s (%s) wao.ui.contacts.district=Boat District Code wao.ui.contacts.division=Fishing Zone Division wao.ui.contacts.immatriculation=Boat Immatriculation @@ -523,6 +524,12 @@ 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.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 +wao.ui.tip.useBoatSelectionForSampleRow=To create a contact for a sample-row for which the boat is not declared as eligible, you may create the contact from the sampling plan +wao.ui.tip.youMustChooseBoat=You must choose a boat in the list +wao.ui.tip.boatSelectionForSampleRowStarted=You are selecting a boat for sample row %s to create a contact. Sample row profession is %s. wao.ui.unavailableOperation=Unavailable operation wao.ui.unit.days=day(s) wao.ui.unit.observers=observer(s) 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-09 10:25:28 UTC (rev 1872) +++ trunk/wao-web/src/main/resources/i18n/wao-web_fr_FR.properties 2014-04-09 12:58:06 UTC (rev 1873) @@ -115,7 +115,7 @@ wao.ui.chart.numberObservations=Nb observations wao.ui.chart.numberOfBoatsWithBoardings=Nombre de navires avec x embarquements wao.ui.chooseUserProfile=Choisissez votre rôle -wao.ui.contact.creation=Création d'u contact +wao.ui.contact.creation=Création d'un contact wao.ui.contact.edition=Modification du contact wao.ui.contact.lastContact=Dernière observation concernant ce navire pour votre société (tous programmes confondus) wao.ui.contacts.FishingZone.facadeName=Façade @@ -126,6 +126,7 @@ wao.ui.contacts.createFromBoat=Créer un nouveau contact pour ce navire et cette ligne du plan wao.ui.contacts.createFromBoat.fail=Création d'un nouveau contact impossible wao.ui.contacts.createFromBoat.warn=Attention \: cette ligne du plan est arrivée à échéance, êtes-vous sûr de vouloir créer un nouveau contact ? +wao.ui.contacts.createFromBoatAndSelectedSampleRow=Créer un nouveau contact avec ce navire pour la ligne %s (%s) wao.ui.contacts.district=CQ wao.ui.contacts.division=Division wao.ui.contacts.immatriculation=N° @@ -523,6 +524,12 @@ 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.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 +wao.ui.tip.useBoatSelectionForSampleRow=Pour créer un contact avec ce navire et pour une autre ligne que celles retenues comme éligibles, vous devez vous rendre dans le plan, et pour la ligne en question, sélectionner « Créer un contact ». +wao.ui.tip.youMustChooseBoat=Vous devez sélectionner un navire dans la liste en cliquant sur son immatriculation pour afficher les détails ici. +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.unavailableOperation=Opération non-disponible wao.ui.unit.days=jour(s) wao.ui.unit.observers=observateur(s) 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-09 10:25:28 UTC (rev 1872) +++ trunk/wao-web/src/main/webapp/WEB-INF/content/obsmer/boat-details.jsp 2014-04-09 12:58:06 UTC (rev 1873) @@ -55,12 +55,83 @@ }); $('#unlock-boat-infos-form').click(function () { - $boatInfosForm.find('input[readOnly="true"], button').removeAttr('readOnly').removeAttr('disabled'); + $boatInfosForm.find('input[readonly], button').removeAttr('readonly').removeAttr('disabled'); $(this).attr('disabled', 'disabled'); }); }); </script> +<h3> + <s:text name="wao.ui.boats.interlocutor"/> +</h3> + +<s:form id="boat-infos-form" cssClass="form-horizontal"> + + <s:hidden name="boatId" value="%{boatDetails.boatInfos.boat.topiaId}" /> + <s:hidden name="companyId" value="%{boatDetails.boatInfos.company.topiaId}" /> + + <s:textfield name="boatInfos.contactFirstName" value="%{boatDetails.boatInfos.contactFirstName}" label="%{getText('wao.ui.field.BoatInfos.contactFirstName')}" readonly="true" /> + <s:textfield name="boatInfos.contactLastName" value="%{boatDetails.boatInfos.contactLastName}" label="%{getText('wao.ui.field.BoatInfos.contactLastName')}" readonly="true" /> + <s:textfield type="email" name="boatInfos.contactEmail" value="%{boatDetails.boatInfos.contactEmail}" label="%{getText('wao.ui.field.BoatInfos.contactEmail')}" readonly="true" /> + <s:textfield type="phone" name="boatInfos.contactPhoneNumber" value="%{boatDetails.boatInfos.contactPhoneNumber}" label="%{getText('wao.ui.field.BoatInfos.contactPhoneNumber')}" readonly="true" /> + <s:textfield type="number" name="boatInfos.dup" value="%{boatDetails.boatInfos.dup}" label="%{getText('wao.ui.field.BoatInfos.dup')}" readonly="true" /> + <s:textfield name="boatInfos.contactAddress1" value="%{boatDetails.boatInfos.contactAddress1}" label="%{getText('wao.ui.field.BoatInfos.contactAddress1')}" readonly="true" /> + <s:textfield name="boatInfos.contactAddress2" value="%{boatDetails.boatInfos.contactAddress2}" label="%{getText('wao.ui.field.BoatInfos.contactAddress2')}" readonly="true" /> + <s:textfield name="boatInfos.contactPostalCode" value="%{boatDetails.boatInfos.contactPostalCode}" label="%{getText('wao.ui.field.BoatInfos.contactPostalCode')}" readonly="true" /> + <s:textfield name="boatInfos.contactCity" value="%{boatDetails.boatInfos.contactCity}" label="%{getText('wao.ui.field.BoatInfos.contactCity')}" readonly="true" /> + <s:textfield name="boatInfos.comment" value="%{boatDetails.boatInfos.comment}" label="%{getText('wao.ui.field.BoatInfos.comment')}" readonly="true" /> + + <div class="form-actions"> + <button type="button" id="unlock-boat-infos-form" class="btn"> + <i class="icon-edit"></i> <s:text name="wao.ui.action.edit" /> + </button> + + <button type="button" id="save-boat-infos" class="btn" disabled="disabled"> + <i class="icon-hdd"></i> <s:text name="wao.ui.action.save" /> + </button> + </div> + +</s:form> + +<h3> + <s:text name="wao.ui.boats.info"/> +</h3> + +<table class="table"> + <tbody> + <tr> + <th> + <s:text name="wao.ui.field.Boat.shipOwner"/> + </th> + <td> + <s:property value="boatDetails.boatInfos.boat.shipOwner.firstName"/> + <s:property value="boatDetails.boatInfos.boat.shipOwner.lastName"/> + + <s:url action="boats" id="shipOwnerBoatsUrl"> + <s:param name="filter.shipOwnerIds" value="boatDetails.boatInfos.boat.shipOwner.topiaId"/> + </s:url> + <s:a href="%{shipOwnerBoatsUrl}"> + <s:text name="wao.ui.action.viewShipOwnerBoats"/> + </s:a> + </td> + </tr> + <tr> + <th> + <s:text name="wao.ui.field.Boat.boatGroup"/> + </th> + <td> + <s:if test="boatDetails.boatInfos.boat.boatGroup == null"> + <s:text name="wao.ui.misc.N/A"/> + </s:if> + <s:else> + <s:property value="boatDetails.boatInfos.boat.boatGroup.description"/> + </s:else> + </td> + </tr> + </tbody> +</table> + + <s:if test="boatDetails.mostRecentContact != null"> <h3> @@ -106,90 +177,61 @@ </s:if> <h3> - <s:text name="wao.ui.boats.interlocutor"/> + <s:text name="wao.ui.contact.creation"/> </h3> - -<s:form id="boat-infos-form" cssClass="form-horizontal"> - - <s:hidden name="boatId" value="%{boatDetails.boatInfos.boat.topiaId}" /> - <s:hidden name="companyId" value="%{boatDetails.boatInfos.company.topiaId}" /> - - <s:textfield name="boatInfos.contactFirstName" value="%{boatDetails.boatInfos.contactFirstName}" label="%{getText('wao.ui.field.BoatInfos.contactFirstName')}" readOnly="true" /> - <s:textfield name="boatInfos.contactLastName" value="%{boatDetails.boatInfos.contactLastName}" label="%{getText('wao.ui.field.BoatInfos.contactLastName')}" readOnly="true" /> - <s:textfield type="email" name="boatInfos.contactEmail" value="%{boatDetails.boatInfos.contactEmail}" label="%{getText('wao.ui.field.BoatInfos.contactEmail')}" readOnly="true" /> - <s:textfield type="phone" name="boatInfos.contactPhoneNumber" value="%{boatDetails.boatInfos.contactPhoneNumber}" label="%{getText('wao.ui.field.BoatInfos.contactPhoneNumber')}" readOnly="true" /> - <s:textfield type="number" name="boatInfos.dup" value="%{boatDetails.boatInfos.dup}" label="%{getText('wao.ui.field.BoatInfos.dup')}" readOnly="true" /> - <s:textfield name="boatInfos.contactAddress1" value="%{boatDetails.boatInfos.contactAddress1}" label="%{getText('wao.ui.field.BoatInfos.contactAddress1')}" readOnly="true" /> - <s:textfield name="boatInfos.contactAddress2" value="%{boatDetails.boatInfos.contactAddress2}" label="%{getText('wao.ui.field.BoatInfos.contactAddress2')}" readOnly="true" /> - <s:textfield name="boatInfos.contactPostalCode" value="%{boatDetails.boatInfos.contactPostalCode}" label="%{getText('wao.ui.field.BoatInfos.contactPostalCode')}" readOnly="true" /> - <s:textfield name="boatInfos.contactCity" value="%{boatDetails.boatInfos.contactCity}" label="%{getText('wao.ui.field.BoatInfos.contactCity')}" readOnly="true" /> - <s:textfield name="boatInfos.comment" value="%{boatDetails.boatInfos.comment}" label="%{getText('wao.ui.field.BoatInfos.comment')}" readOnly="true" /> - - <button type="button" id="unlock-boat-infos-form" class="btn"> - <i class="icon-edit"></i> <s:text name="wao.ui.action.edit" /> - </button> - - <button type="button" id="save-boat-infos" class="btn" disabled="disabled"> - <i class="icon-hdd"></i> <s:text name="wao.ui.action.save" /> - </button> - -</s:form> - - -<h3> - <s:text name="wao.ui.boats.associatedLine"/> -</h3> -<ul> - <s:iterator value="boatDetails.elligibleForSampleRows"> - <li> - <s:property value="code"/> +<s:if test="boatDetails.boatInfos.boat.active"> + <s:if test="startBoatSelectionForSampleRow == null"> + <s:if test="boatDetails.elligibleForSampleRows.empty"> + <s:text name="wao.ui.tip.boatDetails.elligibleForSampleRowsEmpty" /> + </s:if> + <s:else> + <s:text name="wao.ui.boats.associatedLine"/> + <ul> + <s:iterator value="boatDetails.elligibleForSampleRows"> + <li> + <s:property value="code"/> + <s:if test="boatDetails.newContactCreatable && authenticatedWaoUser.authorizedToCreateContact"> + <s:url action="create-contact" id="createContactUrl"> + <s:param name="boatId" value="boatDetails.boatInfos.boat.topiaId"/> + <s:param name="sampleRowId" value="topiaId"/> + </s:url> + <s:a href="%{createContactUrl}"> + <s:text name="wao.ui.contacts.createFromBoat"/> + </s:a> + </s:if> + </li> + </s:iterator> + </ul> + </s:else> + <div class="alert alert-info"> + <s:text name="wao.ui.tip.useBoatSelectionForSampleRow"/> + </div> + </s:if> + <s:else> + <s:if test="boatDetails.newContactCreatable"> <s:if test="boatDetails.newContactCreatable && authenticatedWaoUser.authorizedToCreateContact"> <s:url action="create-contact" id="createContactUrl"> <s:param name="boatId" value="boatDetails.boatInfos.boat.topiaId"/> - <s:param name="sampleRowId" value="topiaId"/> + <s:param name="sampleRowId" value="startBoatSelectionForSampleRow.topiaId"/> </s:url> - <s:a href="%{createContactUrl}"> - <s:text name="wao.ui.contacts.createFromBoat"/> + <s:a href="%{createContactUrl}" cssClass="btn btn-success"> + <i class="icon-plus"></i> + <s:text name="wao.ui.contacts.createFromBoatAndSelectedSampleRow"> + <s:param value="startBoatSelectionForSampleRow.code"/> + <s:param value="startBoatSelectionForSampleRow.professionDescription"/> + </s:text> </s:a> </s:if> - </li> - </s:iterator> -</ul> - -<h3> - <s:text name="wao.ui.boats.info"/> -</h3> - -<table class="table"> - <tbody> - <tr> - <th> - <s:text name="wao.ui.field.Boat.shipOwner"/> - </th> - <td> - <s:property value="boatDetails.boatInfos.boat.shipOwner.firstName"/> - <s:property value="boatDetails.boatInfos.boat.shipOwner.lastName"/> - - <s:url action="boats" id="shipOwnerBoatsUrl"> - <s:param name="filter.shipOwnerIds" value="boatDetails.boatInfos.boat.shipOwner.topiaId"/> - </s:url> - <s:a href="%{shipOwnerBoatsUrl}"> - <s:text name="wao.ui.action.viewShipOwnerBoats"/> - </s:a> - </td> - </tr> - <tr> - <th> - <s:text name="wao.ui.field.Boat.boatGroup"/> - </th> - <td> - <s:if test="boatDetails.boatInfos.boat.boatGroup == null"> - <s:text name="wao.ui.misc.N/A"/> - </s:if> - <s:else> - <s:property value="boatDetails.boatInfos.boat.boatGroup.description"/> - </s:else> - </td> - </tr> - </tbody> -</table> + </s:if> + <s:else> + <div class="alert"> + <s:text name="wao.ui.tip.contactAlreadyExists"/> + </div> + </s:else> + </s:else> +</s:if> +<s:else> + <div class="alert"> + <s:text name="wao.ui.tip.inactiveBoat"/> + </div> +</s:else> \ No newline at end of file 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-09 10:25:28 UTC (rev 1872) +++ trunk/wao-web/src/main/webapp/WEB-INF/content/obsmer/boats.jsp 2014-04-09 12:58:06 UTC (rev 1873) @@ -59,6 +59,19 @@ <content tag="mainClass">large</content> <content tag="boatsMenuItemClass">active</content> +<s:if test="startBoatSelectionForSampleRow != null"> + <div class="alert alert-info"> + <s:text name="wao.ui.tip.boatSelectionForSampleRowStarted"> + <s:param value="startBoatSelectionForSampleRow.code"/> + <s:param value="startBoatSelectionForSampleRow.professionDescription"/> + </s:text> + <s:url action="cancel-boat-selection" id="cancelBoatSelectionUrl"/> + <s:a href="%{cancelBoatSelectionUrl}" cssClass="btn btn-link"> + <s:text name="wao.ui.action.cancel"/> + </s:a> + </div> +</s:if> + <div id="boats-filters-list-details-layout"> <div> @@ -256,7 +269,7 @@ <s:if test="authenticatedWaoUser.authorizedToViewBoatDetails"> <div id="boat-details"> <div class="alert alert-info"> - Vous devez sélectionner un navire dans la liste en cliquant sur son immatriculation pour afficher les détails ici. + <s:text name="wao.ui.tip.youMustChooseBoat" /> </div> </div> </s:if> Modified: trunk/wao-web/src/main/webapp/WEB-INF/content/obsmer/sampling-plan.jsp =================================================================== --- trunk/wao-web/src/main/webapp/WEB-INF/content/obsmer/sampling-plan.jsp 2014-04-09 10:25:28 UTC (rev 1872) +++ trunk/wao-web/src/main/webapp/WEB-INF/content/obsmer/sampling-plan.jsp 2014-04-09 12:58:06 UTC (rev 1873) @@ -493,8 +493,8 @@ </li> <s:if test="authenticatedWaoUser.authorizedToCreateContact && newContactCreatable"> <li> - <s:url action="contacts" id="createAssociatedContactUrl"> - <s:param name="sampleRowIds" value="sampleRowId" /> + <s:url action="boats" id="createAssociatedContactUrl"> + <s:param name="startBoatSelectionForSampleRowId" value="sampleRowId" /> </s:url> <s:a href="%{createAssociatedContactUrl}"> <i class="icon-plus"></i> <s:text name="wao.ui.action.createAssociatedContact" />