Author: fdesbois Date: 2010-07-09 11:20:47 +0000 (Fri, 09 Jul 2010) New Revision: 603 Log: - Evo #2362 : Filters for contacts comments - Evo #2361 : Add documentation Modified: trunk/changelog.txt trunk/src/site/rst/business-rules.rst trunk/src/site/rst/installation.rst trunk/src/site/rst/model.rst trunk/wao-business/src/main/filters/Wao.properties trunk/wao-business/src/main/java/fr/ifremer/wao/WaoQueryBuilder.java trunk/wao-business/src/main/java/fr/ifremer/wao/bean/ContactFilterImpl.java trunk/wao-business/src/main/xmi/wao.zargo trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Contacts.java trunk/wao-ui/src/main/resources/fr/ifremer/wao/ui/pages/Contacts.properties trunk/wao-ui/src/main/webapp/Contacts.tml Modified: trunk/changelog.txt =================================================================== --- trunk/changelog.txt 2010-07-09 10:00:24 UTC (rev 602) +++ trunk/changelog.txt 2010-07-09 11:20:47 UTC (rev 603) @@ -9,6 +9,7 @@ Evolutions ++++++++++ +- [fdesbois] Evo #2362 : Filtres sur commentaires contacts. - [fdesbois] Evo #2352 ; Cartographie des contacts. - [fdesbois] Evo #2361 : Mail automatique suite à un embarquement réalisé. Modified: trunk/src/site/rst/business-rules.rst =================================================================== --- trunk/src/site/rst/business-rules.rst 2010-07-09 10:00:24 UTC (rev 602) +++ trunk/src/site/rst/business-rules.rst 2010-07-09 11:20:47 UTC (rev 603) @@ -93,6 +93,7 @@ * possible uniquement si aucune validation n'a été faites * "Embarquement programmé" -> aucune contrainte * "Embarquement réalisé" -> les champs "date de début de la marée", "date de fin de la marée" et "nb observateurs" sont obligatoires + Envoie d'un email automatique à la demande de l'utilisateur (uniquement s'il n'a pas été déjà envoyé). * "Non abouti", "Refus", "Refus définitif" -> champs commentaire obligatoire, le changement d'état efface tous les autres champs - Contraintes sur les dates : Modified: trunk/src/site/rst/installation.rst =================================================================== --- trunk/src/site/rst/installation.rst 2010-07-09 10:00:24 UTC (rev 602) +++ trunk/src/site/rst/installation.rst 2010-07-09 11:20:47 UTC (rev 603) @@ -81,8 +81,12 @@ wao.server.path=localhost:8080/wao ## Version (not necessary to override it) - wao.version=1.1 + wao.version=${project.version} + ###### Since 1.5 + ## Email used when contact is set to BOARDING_DONE state + wao.contactDone.email=admin at wao.org + Par défaut la base de données utilise le SGBD H2 qui créera un fichier dans le dossier $HOME/.local/wao nommé **h2data.h2.db**. Il est possible d'utiliser une base de données postgresql en écrasant la configuration pour hibernate :: Modified: trunk/src/site/rst/model.rst =================================================================== --- trunk/src/site/rst/model.rst 2010-07-09 10:00:24 UTC (rev 602) +++ trunk/src/site/rst/model.rst 2010-07-09 11:20:47 UTC (rev 603) @@ -192,6 +192,7 @@ + tideNbDays : nombre de jours de marées effectuées + commentAdmin : commentaire en plus enregistré par un administrateur + commentCoordinator : commentaire en plus enregistré par un coordinateur + + emailSent : indique qu'un email a été envoyé lors du passage à l'état "Embarquement réalisé" + [lien] observer : observateur qui s'occupe du contact faisant parti de la société concerné par le métier (ligne du plan d'échantillonnage) + [lien] boat : navire concerné par le contact @@ -286,3 +287,8 @@ - [News] Création de la clé étrangère company (varchar) - [Contact] Création des champs commentAdmin et commentCoordinator (text) +Version 1.5 +~~~~~~~~~~~ + +- [Contact] Création champs emailSent (boolean) mis à TRUE si le contact possède + une date d'enregistrement des données (dataInputDate) et mis à FALSE sinon. Modified: trunk/wao-business/src/main/filters/Wao.properties =================================================================== --- trunk/wao-business/src/main/filters/Wao.properties 2010-07-09 10:00:24 UTC (rev 602) +++ trunk/wao-business/src/main/filters/Wao.properties 2010-07-09 11:20:47 UTC (rev 603) @@ -43,14 +43,17 @@ wao.email.host=smtp wao.email.port=25 wao.email.from=admin at wao.org -wao.contactDone.email=admin at wao.org ## Server path for link in mails (must be override) wao.server.path=localhost:8080/wao -## Server path for chart generation -chart.server.path= - ## Version (not necessary to override it) filters no working anymore wao.version=1.5 #wao.version=${project.version} + +###### Since 1.5 +## Email used when contact is set to BOARDING_DONE state +wao.contactDone.email=admin at wao.org + +## Server path for chart generation +chart.server.path= Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/WaoQueryBuilder.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/WaoQueryBuilder.java 2010-07-09 10:00:24 UTC (rev 602) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/WaoQueryBuilder.java 2010-07-09 11:20:47 UTC (rev 603) @@ -390,15 +390,18 @@ WaoUser observer = filter.getObserver(); Company company = filter.getCompany(); Date fromDate = filter.getFromDate(); - Boolean mammalsObservation = filter.getMammalsObservation(); - Boolean mammalsCapture = filter.getMammalsCapture(); - Boolean programAccepted = filter.getProgramAccepted(); - Boolean programRefused = filter.getProgramRefused(); - Boolean programUndefined = filter.getProgramUndefined(); - Boolean companyAccepted = filter.getCompanyAccepted(); - Boolean companyRefused = filter.getCompanyRefused(); - Boolean companyUndefined = filter.getCompanyUndefined(); + boolean mammalsObservation = filter.getMammalsObservation(); + boolean mammalsCapture = filter.getMammalsCapture(); + boolean programAccepted = filter.getProgramAccepted(); + boolean programRefused = filter.getProgramRefused(); + boolean programUndefined = filter.getProgramUndefined(); + boolean companyAccepted = filter.getCompanyAccepted(); + boolean companyRefused = filter.getCompanyRefused(); + boolean companyUndefined = filter.getCompanyUndefined(); ContactState contactState = filter.getState(); + boolean comment = filter.isComment(); + boolean commentAdmin = filter.isCommentAdmin(); + boolean commentCompany = filter.isCommentCompany(); // OBSERVER if (observer != null) { @@ -465,6 +468,19 @@ query.addEquals(contactProperty.state(), contactState.ordinal()); } + // COMMENTS + if (comment) { + addNotEmpty(contactProperty.comment()); + } + + if (commentAdmin) { + addNotEmpty(contactProperty.commentAdmin()); + } + + if (commentCompany) { + addNotEmpty(contactProperty.commentCoordinator()); + } + // FROM_DATE if (fromDate != null) { query.addWhere(contactProperty.topiaCreateDate(), TopiaQuery.Op.GE, fromDate); @@ -478,4 +494,9 @@ return query; } + + public TopiaQuery addNotEmpty(String property) { + return query.addNotNull(property). + addWhere(property, TopiaQuery.Op.NEQ, ""); + } } Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/bean/ContactFilterImpl.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/bean/ContactFilterImpl.java 2010-07-09 10:00:24 UTC (rev 602) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/bean/ContactFilterImpl.java 2010-07-09 11:20:47 UTC (rev 603) @@ -33,122 +33,23 @@ * @author fdesbois <fdesbois at codelutin.com> */ public class ContactFilterImpl extends ContactFilter { -// -// @Override -// public TopiaQuery prepareQueryForContact(TopiaQuery query) { -// -// String contactAlias = query.getMainAlias(); -// -// // OBSERVER -// if (getObserver() != null) { -// String observerProperty = -// TopiaQuery.getProperty(contactAlias, Contact.OBSERVER); -// query.add(observerProperty, getObserver()); -// } -// -// // Company filter is managed by SamplingFilter because the company is -// // linked with the sampleRow instead of contact user -// -// Date fromDate = getFromDate(); -// // Ano #2327 : Reset fromDate, don't manage it in prepareQueryForSampling -// this.fromDate = null; -// if (isSamplingFiltered() || getCompany() != null) { -// String sampleRowProperty = -// TopiaQuery.getProperty(contactAlias, Contact.SAMPLE_ROW); -// -// query = prepareQueryForSampling(query, sampleRowProperty); -// } -// -// String boatProperty = TopiaQuery.getProperty(contactAlias, Contact.BOAT); -// query = prepareQueryForBoat(query, boatProperty); -// -// // MAMMALS_OBSERVATION and MAMMALS_CAPTURE -// String mammalsObsProperty = -// TopiaQuery.getProperty(contactAlias, Contact.MAMMALS_OBSERVATION); -// String mammalsCaptProperty = -// TopiaQuery.getProperty(contactAlias, Contact.MAMMALS_CAPTURE); -// -// if (getMammalsObservation() && getMammalsCapture()) { -// query.add(mammalsObsProperty + " = :mammals OR " -// + mammalsCaptProperty + " = :mammals"). -// addParam("mammals", Boolean.TRUE); -// } else if (getMammalsObservation()) { -// query.add(mammalsObsProperty, Boolean.TRUE); -// } else if (getMammalsCapture()) { -// query.add(mammalsCaptProperty, Boolean.TRUE); -// } -// -// // VALIDATION_PROGRAM -// List<Object> programValidValues = new ArrayList<Object>(); -// if (getProgramAccepted()) { -// programValidValues.add(Boolean.TRUE); -// } -// if (getProgramRefused()) { -// programValidValues.add(Boolean.FALSE); -// } -// if (getProgramUndefined()) { -// programValidValues.add(null); -// } -// String programValidProperty = -// TopiaQuery.getProperty(contactAlias, Contact.VALIDATION_PROGRAM); -// query.add(programValidProperty, programValidValues.toArray()); -// -// // VALIDATION_COMPANY -// List<Object> companyValidValues = new ArrayList<Object>(); -// if (getCompanyAccepted()) { -// companyValidValues.add(Boolean.TRUE); -// } -// if (getCompanyRefused()) { -// companyValidValues.add(Boolean.FALSE); -// } -// if (getCompanyUndefined()) { -// companyValidValues.add(null); -// } -// String companyValidProperty = -// TopiaQuery.getProperty(contactAlias, Contact.VALIDATION_COMPANY); -// query.add(companyValidProperty, companyValidValues.toArray()); -// -// // STATE -// if (getState() != null) { -// String stateProperty = -// TopiaQuery.getProperty(contactAlias, Contact.STATE); -// query.add(stateProperty, getState().ordinal()); -// } -// -// // FROM_DATE -// if (fromDate != null) { -// String tideBeginDateProperty = -// TopiaQuery.getProperty(contactAlias, Contact.TIDE_BEGIN_DATE); -// String createDateProperty = -// TopiaQuery.getProperty(contactAlias, TopiaEntity.TOPIA_CREATE_DATE); -//// query.add("(" + tideBeginDateProperty + " IS NOT NULL AND " -//// + tideBeginDateProperty + " >= :fromDate)" + -//// " OR (" + tideBeginDateProperty + " IS NULL AND " -//// + createDateProperty + " >= :fromDate)"); -//// query.addParam("fromDate", getFromDate()); -// -// query.add(createDateProperty, TopiaQuery.Op.GE, fromDate); -// } -// -// // Reinitialize fromDate of the filter, don't know if it's really needed -// this.fromDate = fromDate; -// -// return query; -// } @Override public boolean isFiltered() { return isBoatFiltered() || isSamplingFiltered() || getObserver() != null || - getMammalsObservation() || - getMammalsCapture() || - getProgramAccepted() || - getProgramRefused() || - getProgramUndefined() || - getCompanyAccepted() || - getCompanyRefused() || - getCompanyUndefined() || - getState() != null; + isMammalsObservation() || + isMammalsCapture() || + isProgramAccepted() || + isProgramRefused() || + isProgramUndefined() || + isCompanyAccepted() || + isCompanyRefused() || + isCompanyUndefined() || + getState() != null || + isComment() || + isCommentAdmin() || + isCommentCompany(); } } Modified: trunk/wao-business/src/main/xmi/wao.zargo =================================================================== (Binary files differ) Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Contacts.java =================================================================== --- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Contacts.java 2010-07-09 10:00:24 UTC (rev 602) +++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Contacts.java 2010-07-09 11:20:47 UTC (rev 603) @@ -185,6 +185,10 @@ return true; } + public boolean canFilterExtraComments() { + return user.isAdmin() || user.isCoordinator(); + } + Object onActionFromShowFilters() { // Initialize filters initSelectFilters(true, true, true); Modified: trunk/wao-ui/src/main/resources/fr/ifremer/wao/ui/pages/Contacts.properties =================================================================== --- trunk/wao-ui/src/main/resources/fr/ifremer/wao/ui/pages/Contacts.properties 2010-07-09 10:00:24 UTC (rev 602) +++ trunk/wao-ui/src/main/resources/fr/ifremer/wao/ui/pages/Contacts.properties 2010-07-09 11:20:47 UTC (rev 603) @@ -47,7 +47,7 @@ boatDistrictCode-label: CQ mammals-label: Observations et captures accidentelles dataInputDate-label: Saisie des donn\u00e9es dans Allegro -comment-label: Com. +comment-label: Commentaire observateur program-label: Programme professionCode-label: Code m\u00e9tier professionLibelle-label: Libell\u00e9 m\u00e9tier @@ -56,8 +56,8 @@ fishingZoneSector-label: Zone fishingZoneDivision-label: Division validation-label: Validations -commentAdmin-label: Com. admin -commentCoordinator-label: Com. soci\u00e9t\u00e9 +commentAdmin-label: Commentaire programme +commentCoordinator-label: Commentaire soci\u00e9t\u00e9 # Form labels contactsForm-errors-banner: Le contact n'a pas \u00e9t\u00e9 sauvegard\u00e9 \u00e0 cause des erreurs suivantes : Modified: trunk/wao-ui/src/main/webapp/Contacts.tml =================================================================== --- trunk/wao-ui/src/main/webapp/Contacts.tml 2010-07-09 10:00:24 UTC (rev 602) +++ trunk/wao-ui/src/main/webapp/Contacts.tml 2010-07-09 11:20:47 UTC (rev 603) @@ -126,20 +126,29 @@ <t:label t:for="companyUndefined"> <img src="${asset:context:img/help-22px.png}" title="Non validé par la société" /> </t:label> - <!--<t:if t:test="user.admin">--> - <label>Validation programme: </label> - <input t:type="checkbox" t:id="programAccepted" value="contactFilter.programAccepted" /> - <t:label t:for="programAccepted"> - <img src="${asset:context:img/true-22px.png}" title="Accepté par le programme" /> - </t:label> - <input t:type="checkbox" t:id="programRefused" value="contactFilter.programRefused" /> - <t:label t:for="programRefused"> - <img src="${asset:context:img/false-22px.png}" title="Refusé par le programme" /> - </t:label> - <input t:type="checkbox" t:id="programUndefined" value="contactFilter.programUndefined" /> - <t:label t:for="programUndefined"> - <img src="${asset:context:img/help-22px.png}" title="Non validé par le programme" /> - </t:label> + <label>Validation programme: </label> + <input t:type="checkbox" t:id="programAccepted" value="contactFilter.programAccepted" /> + <t:label t:for="programAccepted"> + <img src="${asset:context:img/true-22px.png}" title="Accepté par le programme" /> + </t:label> + <input t:type="checkbox" t:id="programRefused" value="contactFilter.programRefused" /> + <t:label t:for="programRefused"> + <img src="${asset:context:img/false-22px.png}" title="Refusé par le programme" /> + </t:label> + <input t:type="checkbox" t:id="programUndefined" value="contactFilter.programUndefined" /> + <t:label t:for="programUndefined"> + <img src="${asset:context:img/help-22px.png}" title="Non validé par le programme" /> + </t:label> + <span>Commentaires: </span> + <input t:type="checkbox" t:id="commentFilter" value="contactFilter.comment" /> + <label for="commentFilter">observateur</label> + <t:if t:test="canFilterExtraComments()"> + + <input t:type="checkbox" t:id="commentCompany" value="contactFilter.commentCompany" /> + <label for="commentCompany">société</label> + <input t:type="checkbox" t:id="commentAdmin" value="contactFilter.commentAdmin" /> + <label for="commentAdmin">programme</label> + </t:if> <!--</t:if>--> </div> <div class="t-beaneditor-row aright">