Author: bleny Date: 2014-06-10 14:11:12 +0200 (Tue, 10 Jun 2014) New Revision: 2013 Url: http://forge.codelutin.com/projects/wao/repository/revisions/2013 Log: fixes #5098 update icons in contact lists Modified: trunk/wao-persistence/src/main/java/fr/ifremer/wao/entity/ContactImpl.java trunk/wao-persistence/src/main/xmi/wao-model.zargo trunk/wao-services/src/main/java/fr/ifremer/wao/services/AuthenticatedWaoUser.java trunk/wao-services/src/main/resources/i18n/wao-services_en_GB.properties trunk/wao-services/src/main/resources/i18n/wao-services_fr_FR.properties trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/ContactsAction.java trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/ValidateContactJsonAction.java trunk/wao-web/src/main/webapp/WEB-INF/content/obsmer/contacts.jsp trunk/wao-web/src/main/webapp/wao.css Modified: trunk/wao-persistence/src/main/java/fr/ifremer/wao/entity/ContactImpl.java =================================================================== --- trunk/wao-persistence/src/main/java/fr/ifremer/wao/entity/ContactImpl.java 2014-06-06 13:09:47 UTC (rev 2012) +++ trunk/wao-persistence/src/main/java/fr/ifremer/wao/entity/ContactImpl.java 2014-06-10 12:11:12 UTC (rev 2013) @@ -24,6 +24,9 @@ package fr.ifremer.wao.entity; +import org.apache.commons.lang3.BooleanUtils; +import org.apache.commons.lang3.StringUtils; + import java.util.Date; import java.util.LinkedList; import java.util.List; @@ -178,4 +181,49 @@ } return allObservers; } + + @Override + public boolean isAcceptableByCompany() { + boolean requiredDataAreFilled; + if (getObsProgram() == ObsProgram.OBSMER) { + requiredDataAreFilled = getRestitution() != null; + } else { + requiredDataAreFilled = getDataInputDate() != null; + } + ContactState state = getContactState(); + boolean observationDone = + state.equals(ContactState.OBSERVATION_DONE) && + requiredDataAreFilled; + boolean acceptable = getValidationCompany() == null && + (state.isUnfinishedState() || observationDone); + return acceptable; + } + + @Override + public boolean isRefusableByCompany() { + return getValidationCompany() == null && StringUtils.isNotBlank(commentCoordinator); + } + + @Override + public boolean isUnacceptableByCompany() { + return getValidationCompany() != null && getValidationProgram() == null; + } + + @Override + public boolean isAcceptableByProgram() { + boolean acceptable = BooleanUtils.isTrue(getValidationCompany()) + && getValidationProgram() == null; + return acceptable; + } + + @Override + public boolean isRefusableByProgram() { + return BooleanUtils.isTrue(getValidationCompany()) && StringUtils.isNotBlank(commentAdmin); + } + + @Override + public boolean isUnacceptableByProgram() { + return getValidationProgram() != null; + } + } Modified: trunk/wao-persistence/src/main/xmi/wao-model.zargo =================================================================== (Binary files differ) 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-06-06 13:09:47 UTC (rev 2012) +++ trunk/wao-services/src/main/java/fr/ifremer/wao/services/AuthenticatedWaoUser.java 2014-06-10 12:11:12 UTC (rev 2013) @@ -24,7 +24,6 @@ import com.google.common.base.Preconditions; import fr.ifremer.wao.entity.Company; import fr.ifremer.wao.entity.Contact; -import fr.ifremer.wao.entity.ContactState; import fr.ifremer.wao.entity.News; import fr.ifremer.wao.entity.ObsProgram; import fr.ifremer.wao.entity.UserProfile; @@ -242,41 +241,18 @@ return noValidation && getCanWrite(); } - /** - * Display validation actions. Evo #2063 : only coordinator can validate - * for a company. - * - * @return true if the validation actions can be displayed - */ - public boolean isAuthorizedToValidateContacts() { - return (isAdmin() || isCoordinator()) && !isReadOnly(); + public boolean isAuthorizedToChangeValidationCompany() { + return userProfile.isCoordinator(); } - public boolean isAuthorizedToValidateContact(Contact contact) { - // Can't validate during edition of the contact row - switch (getUserRole()) { - case ADMIN: - return contact.getValidationProgram() == null && - BooleanUtils.isTrue(contact.getValidationCompany()); - // Evo #2063 : only coordinator can validate - case COORDINATOR: - boolean requiredDataAreFilled; - if (contact.getObsProgram() == ObsProgram.OBSMER) { - requiredDataAreFilled = contact.getRestitution() != null; - } else { - requiredDataAreFilled = contact.getDataInputDate() != null; - } - ContactState state = contact.getContactState(); - boolean observationDone = - state.equals(ContactState.OBSERVATION_DONE) && - requiredDataAreFilled; - return contact.getValidationCompany() == null && - (state.isUnfinishedState() || observationDone); - default: - return false; - } + public boolean isAuthorizedToChangeValidationProgram() { + return userProfile.isAdmin(); } + public boolean isAuthorizedToChangeContactValidation() { + return isAuthorizedToChangeValidationCompany() || isAuthorizedToChangeValidationProgram(); + } + public boolean isAuthorizedToUnvalidateContact(Contact contact) { switch (getUserRole()) { case ADMIN: Modified: trunk/wao-services/src/main/resources/i18n/wao-services_en_GB.properties =================================================================== --- trunk/wao-services/src/main/resources/i18n/wao-services_en_GB.properties 2014-06-06 13:09:47 UTC (rev 2012) +++ trunk/wao-services/src/main/resources/i18n/wao-services_en_GB.properties 2014-06-10 12:11:12 UTC (rev 2013) @@ -89,5 +89,6 @@ wao.synthesis.planned=Planned wao.ui.chart.numberBoats=Number of boats wao.ui.chart.numberOfBoatsWithBoardings=Number of boats with x boardings +wao.ui.samplingPlan.Actual= wao.validation.sampleRow.conflictOnObserver=Observer %s cannot be associated to the line %s because he has to observer, on the same day, for row %s wao.validation.sampleRow.observerNotInCompany=Observer %s doesn't work for company %s Modified: trunk/wao-services/src/main/resources/i18n/wao-services_fr_FR.properties =================================================================== --- trunk/wao-services/src/main/resources/i18n/wao-services_fr_FR.properties 2014-06-06 13:09:47 UTC (rev 2012) +++ trunk/wao-services/src/main/resources/i18n/wao-services_fr_FR.properties 2014-06-10 12:11:12 UTC (rev 2013) @@ -86,5 +86,6 @@ wao.synthesis.planned=Planifié wao.ui.chart.numberBoats=Nombre de navires wao.ui.chart.numberOfBoatsWithBoardings=Nombres de navires avec x embarquements +wao.ui.samplingPlan.Actual= wao.validation.sampleRow.conflictOnObserver=L'observateur %s ne peut être associé à la ligne %s car il doit observer, le même jour, pour la ligne %s wao.validation.sampleRow.observerNotInCompany=L'observateur %s ne fait pas parti de la société %s Modified: trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/ContactsAction.java =================================================================== --- trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/ContactsAction.java 2014-06-06 13:09:47 UTC (rev 2012) +++ trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/ContactsAction.java 2014-06-10 12:11:12 UTC (rev 2013) @@ -182,4 +182,40 @@ return dcf5CodesAndDescriptions; } + public boolean isAcceptable(Contact contact) { + boolean acceptable; + if (getAuthenticatedWaoUser().isAuthorizedToChangeValidationCompany()) { + acceptable = contact.isAcceptableByCompany(); + } else if (getAuthenticatedWaoUser().isAuthorizedToChangeValidationProgram()) { + acceptable = contact.isAcceptableByProgram(); + } else { + throw new IllegalStateException(); + } + return acceptable; + } + + public boolean isRefusable(Contact contact) { + boolean refuseable; + if (getAuthenticatedWaoUser().isAuthorizedToChangeValidationCompany()) { + refuseable = contact.isRefusableByCompany(); + } else if (getAuthenticatedWaoUser().isAuthorizedToChangeValidationProgram()) { + refuseable = contact.isRefusableByProgram(); + } else { + throw new IllegalStateException(); + } + return refuseable; + } + + public boolean isUnacceptable(Contact contact) { + boolean unacceptable; + if (getAuthenticatedWaoUser().isAuthorizedToChangeValidationCompany()) { + unacceptable = contact.isUnacceptableByCompany(); + } else if (getAuthenticatedWaoUser().isAuthorizedToChangeValidationProgram()) { + unacceptable = contact.isUnacceptableByProgram(); + } else { + throw new IllegalStateException(); + } + return unacceptable; + } + } \ No newline at end of file Modified: trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/ValidateContactJsonAction.java =================================================================== --- trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/ValidateContactJsonAction.java 2014-06-06 13:09:47 UTC (rev 2012) +++ trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/ValidateContactJsonAction.java 2014-06-10 12:11:12 UTC (rev 2013) @@ -25,6 +25,7 @@ import com.google.common.base.Preconditions; import com.opensymphony.xwork2.Preparable; import fr.ifremer.wao.WaoUtils; +import fr.ifremer.wao.entity.Contact; import fr.ifremer.wao.services.AuthenticatedWaoUser; import fr.ifremer.wao.services.service.ContactDataInputDateBeforeObservationEndDateException; import fr.ifremer.wao.services.service.ContactDataInputDateAfterTodayException; @@ -88,16 +89,6 @@ */ protected String errorMessage; - /** - * To update contact validation actions. - */ - protected boolean canValidateContact; - - /** - * To update contact validation actions. - */ - protected boolean canUnvalidateContact; - protected transient ObsMerContactsService service; protected UpdateContactCommand updateContactCommand; @@ -130,14 +121,6 @@ return errorMessage; } - public boolean isCanValidateContact() { - return canValidateContact; - } - - public boolean isCanUnvalidateContact() { - return canUnvalidateContact; - } - public boolean isSuccessful() { return errorMessage == null; } @@ -259,12 +242,53 @@ } else { successMessage = t("wao.ui.contacts.validation.to.reject.state.success"); } + } - canValidateContact = authenticatedWaoUser.isAuthorizedToValidateContact(updateContactCommand.getContact()); + return SUCCESS; + } - canUnvalidateContact = authenticatedWaoUser.isAuthorizedToUnvalidateContact(updateContactCommand.getContact()); + public boolean isAcceptable(Contact contact) { + boolean acceptable; + if (session.getAuthenticatedWaoUser().isAuthorizedToChangeValidationCompany()) { + acceptable = contact.isAcceptableByCompany(); + } else if (session.getAuthenticatedWaoUser().isAuthorizedToChangeValidationProgram()) { + acceptable = contact.isAcceptableByProgram(); + } else { + throw new IllegalStateException(); } + return acceptable; + } - return SUCCESS; + public boolean isRefusable(Contact contact) { + boolean refuseable; + if (session.getAuthenticatedWaoUser().isAuthorizedToChangeValidationCompany()) { + refuseable = contact.isRefusableByCompany(); + } else if (session.getAuthenticatedWaoUser().isAuthorizedToChangeValidationProgram()) { + refuseable = contact.isRefusableByProgram(); + } else { + throw new IllegalStateException(); + } + return refuseable; } + + public boolean isUnacceptable(Contact contact) { + boolean unacceptable; + if (session.getAuthenticatedWaoUser().isAuthorizedToChangeValidationCompany()) { + unacceptable = contact.isUnacceptableByCompany(); + } else if (session.getAuthenticatedWaoUser().isAuthorizedToChangeValidationProgram()) { + unacceptable = contact.isUnacceptableByProgram(); + } else { + throw new IllegalStateException(); + } + return unacceptable; + } + + public Boolean getValidationProgram() { + return updateContactCommand.getContact().getValidationProgram(); + } + + public Boolean getValidationCompany() { + return updateContactCommand.getContact().getValidationCompany(); + } + } Modified: trunk/wao-web/src/main/webapp/WEB-INF/content/obsmer/contacts.jsp =================================================================== --- trunk/wao-web/src/main/webapp/WEB-INF/content/obsmer/contacts.jsp 2014-06-06 13:09:47 UTC (rev 2012) +++ trunk/wao-web/src/main/webapp/WEB-INF/content/obsmer/contacts.jsp 2014-06-10 12:11:12 UTC (rev 2013) @@ -132,7 +132,18 @@ if (successful) { var success = data['successMessage']; WAO.notifications.success(success); - // TODO Update line and data actions + var $tr = $('#contacts-list').find('tr[data-contactId="' + data.contactId + '"]'); + $tr.removeClass('accepted-by-company refused-by-company accepted-by-program refused-by-program'); + if (data.validationCompany) { + $tr.addClass('accepted-by-company'); + } else if (data.validationCompany === false) { + $tr.addClass('refused-by-company'); + } + if (data.validationProgram) { + $tr.addClass('accepted-by-program'); + } else if (data.validationProgram === false) { + $tr.addClass('refused-by-program'); + } } else { var error = data['errorMessage']; WAO.notifications.error(error); @@ -320,7 +331,8 @@ <tbody> <s:iterator value="contacts" var="contact"> - <tr class="contact-row<s:if test="topiaId.equals(contactToHighlightId)"> highlight</s:if>"> + <s:set name="trCssClasses">contact-row<s:if test="topiaId.equals(contactToHighlightId)"> highlight</s:if><s:if test="validationCompany==null"></s:if><s:elseif test="validationCompany"> accepted-by-company</s:elseif><s:else> refused-by-company</s:else><s:if test="validationProgram==null"></s:if><s:elseif test="validationProgram"> accepted-by-program</s:elseif><s:else> refused-by-program</s:else></s:set> + <tr class="<s:property value="#trCssClasses"/>" data-contactId="<s:property value="topiaId"/>"> <td> <s:property value="creationDate"/> </td> @@ -458,39 +470,16 @@ </s:if> </td> <td> - <s:if test="validationCompany == null"> - <span class="fa-stack fa-lg" title="<s:text name="wao.ui.misc.notValidated"/>"> - <i class="fa fa-square-o fa-stack-2x" ></i> - </span> - </s:if> - <s:elseif test="validationCompany"> - <span class="fa-stack fa-lg" title="<s:text name="wao.ui.misc.validated"/>"> - <i class="fa fa-square-o fa-stack-2x" ></i> - <i class="fa fa-check fa-stack-1x" ></i> - </span> - </s:elseif> - <s:else> - <span class="fa-stack fa-lg" title="<s:text name="wao.ui.misc.refused"/>"> - <i class="fa fa-square-o fa-stack-2x" ></i> - <i class="fa fa-times fa-stack-1x" ></i> - </span> - </s:else> - <s:if test="validationProgram == null"> - <span class="fa-stack fa-lg" title="<s:text name="wao.ui.misc.notValidated"/>"> - <i class="fa fa-square-o fa-stack-2x" ></i> - </span> - </s:if> - <s:elseif test="validationProgram"> - <span class="fa-stack fa-lg" title="<s:text name="wao.ui.misc.validated"/>"> - <i class="fa fa-square-o fa-stack-2x" ></i> - <i class="fa fa-check fa-stack-1x" ></i> - </span> - </s:elseif> - <s:else><span class="fa-stack fa-lg" title="<s:text name="wao.ui.misc.refused"/>"> - <i class="fa fa-square-o fa-stack-2x" ></i> - <i class="fa fa-times fa-stack-1x" ></i> - </span> - </s:else> + <span class="fa-stack fa-lg" title="<s:text name="wao.ui.misc.validated"/>"> + <i class="fa fa-square-o fa-stack-2x"></i> + <i class="fa fa-check fa-stack-1x only-if-accepted-by-company"></i> + <i class="fa fa-times fa-stack-1x only-if-refused-by-company"></i> + </span> + <span class="fa-stack fa-lg" title="<s:text name="wao.ui.misc.validated"/>"> + <i class="fa fa-square-o fa-stack-2x"></i> + <i class="fa fa-check fa-stack-1x only-if-accepted-by-program"></i> + <i class="fa fa-times fa-stack-1x only-if-refused-by-program"></i> + </span> </td> <td class="actions"> <div class="dropdown"> @@ -516,37 +505,34 @@ </s:a> </li> </s:if> - <s:if test="authenticatedWaoUser.authorizedToValidateContacts"> - <s:if test="authenticatedWaoUser.isAuthorizedToValidateContact(#contact)"> - <li> - <s:url action="validate-contact-json" id="acceptContactUrl" escapeAmp="false"> - <s:param name="contactId" value="topiaId"/> - <s:param name="validationState">true</s:param> - </s:url> - <s:a cssClass="validation-action" href="%{acceptContactUrl}"> - <s:text name="wao.ui.action.acceptContact"/> - </s:a> - </li> - <li> - <s:url action="validate-contact-json" id="refuseContactUrl" escapeAmp="false"> - <s:param name="contactId" value="topiaId"/> - <s:param name="validationState">false</s:param> - </s:url> - <s:a cssClass="validation-action" href="%{refuseContactUrl}"> - <s:text name="wao.ui.action.refuseContact"/> - </s:a> - </li> - </s:if> - <s:if test="authenticatedWaoUser.isAuthorizedToUnvalidateContact(#contact)"> - <li> - <s:url action="validate-contact-json" id="unvalidateContactUrl"> - <s:param name="contactId" value="topiaId"/> - </s:url> - <s:a cssClass="validation-action" href="%{unvalidateContactUrl}"> - <s:text name="wao.ui.action.unvalidateContact"/> - </s:a> - </li> - </s:if> + <s:if test="authenticatedWaoUser.authorizedToChangeContactValidation"> + <li> + <s:url action="validate-contact-json" id="acceptContactUrl" escapeAmp="false"> + <s:param name="contactId" value="topiaId"/> + <s:param name="validationState">true</s:param> + </s:url> + <s:set name="disabled"><s:if test="%{ ! isAcceptable(#contact)}">disabled</s:if></s:set> + <s:a cssClass="validation-action" href="%{acceptContactUrl}"> + <s:text name="wao.ui.action.acceptContact"/> + </s:a> + </li> + <li> + <s:url action="validate-contact-json" id="refuseContactUrl" escapeAmp="false"> + <s:param name="contactId" value="topiaId"/> + <s:param name="validationState">false</s:param> + </s:url> + <s:a cssClass="validation-action" href="%{refuseContactUrl}"> + <s:text name="wao.ui.action.refuseContact"/> + </s:a> + </li> + <li> + <s:url action="validate-contact-json" id="unvalidateContactUrl"> + <s:param name="contactId" value="topiaId"/> + </s:url> + <s:a cssClass="validation-action" href="%{unvalidateContactUrl}"> + <s:text name="wao.ui.action.unvalidateContact"/> + </s:a> + </li> </s:if> </ul> </div> Modified: trunk/wao-web/src/main/webapp/wao.css =================================================================== --- trunk/wao-web/src/main/webapp/wao.css 2014-06-06 13:09:47 UTC (rev 2012) +++ trunk/wao-web/src/main/webapp/wao.css 2014-06-10 12:11:12 UTC (rev 2013) @@ -708,6 +708,24 @@ } /** + * Contacts + */ + +#contacts-list .only-if-refused-by-company, +#contacts-list .only-if-accepted-by-company, +#contacts-list .only-if-refused-by-program, +#contacts-list .only-if-accepted-by-program { + display: none; +} + +#contacts-list tr.accepted-by-company .only-if-accepted-by-company, +#contacts-list tr.refused-by-company .only-if-refused-by-company, +#contacts-list tr.accepted-by-program .only-if-accepted-by-program, +#contacts-list tr.refused-by-program .only-if-refused-by-program { + display: block; +} + +/** * Accueil */ main.home .news {