[Suiviobsmer-commits] r1338 - in trunk: wao-business/src/main/java/fr/ifremer/wao wao-business/src/main/java/fr/ifremer/wao/entity wao-business/src/main/java/fr/ifremer/wao/io/csv2/models wao-business/src/main/java/fr/ifremer/wao/io/csv2/models/operations wao-business/src/main/java/fr/ifremer/wao/service wao-business/src/main/resources wao-business/src/main/resources/i18n wao-business/src/main/xmi wao-business/src/test/java/fr/ifremer/wao/service wao-ui/src/main/java/fr/ifremer/wao/ui/pages wao-ui/src/main/
Author: bleny Date: 2011-06-15 15:16:11 +0000 (Wed, 15 Jun 2011) New Revision: 1338 Log: add contact states motives in form/import, export/synthesis and cartography Added: trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/models/ContactStateMotivesImportModel.java trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/models/operations/ContactStateMotivesParserFormatter.java trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/models/operations/SampleRowParserFormatter.java trunk/wao-business/src/main/resources/motifs.csv Removed: trunk/wao-business/src/main/java/fr/ifremer/wao/service/EntitiesTranslator.java Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/PostgresMigrationCallback.java trunk/wao-business/src/main/java/fr/ifremer/wao/WaoMigrationCallBack.java trunk/wao-business/src/main/java/fr/ifremer/wao/entity/ContactStateMotifImpl.java trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/models/ContactImportExportModel.java trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceCartographyImpl.java trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceContactImpl.java trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceReferentialImpl.java trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceSynthesisImpl.java trunk/wao-business/src/main/resources/i18n/wao-business_en_GB.properties trunk/wao-business/src/main/resources/i18n/wao-business_fr_FR.properties trunk/wao-business/src/main/xmi/wao.zargo trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceReferentialTest.java trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Administration.java trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Cartography.java trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/ContactForm.java trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/KmlLoader.java trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/ContactModelFactory.java trunk/wao-ui/src/main/resources/fr/ifremer/wao/ui/pages/Contacts_fr.properties trunk/wao-ui/src/main/resources/i18n/wao-ui_en_GB.properties trunk/wao-ui/src/main/resources/i18n/wao-ui_fr_FR.properties trunk/wao-ui/src/main/webapp/Administration.tml trunk/wao-ui/src/main/webapp/Cartography.tml trunk/wao-ui/src/main/webapp/ContactForm.tml Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/PostgresMigrationCallback.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/PostgresMigrationCallback.java 2011-06-10 22:25:28 UTC (rev 1337) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/PostgresMigrationCallback.java 2011-06-15 15:16:11 UTC (rev 1338) @@ -943,7 +943,7 @@ } @Override - protected void addLocationTypeToAllTerrestrialLocations(List<String> queries) { + protected void addLocationTypeToAllTerrestrialLocations_3_0(List<String> queries) { // Before this version, district was found by having locationTypeOrdinal // null. Now that region are added, types are now explicit so we must // take that in consideration @@ -954,7 +954,7 @@ } @Override - protected void migrateTerrestrialDivisions(List<String> queries) { + protected void migrateTerrestrialDivisions_3_0(List<String> queries) { // add the new column queries.add("ALTER TABLE TerrestrialDivision" + " ADD regionIfremer CHARACTER VARYING(255);"); @@ -976,4 +976,16 @@ // drop old column queries.add("ALTER TABLE TerrestrialDivision DROP regionIfremerCode;"); } + + @Override + protected void dropTranslations_3_0(List<String> queries) { + queries.add("DROP TABLE Translation;"); + } + + @Override + protected void addContactStateMotives(List<String> queries) { + queries.add("ALTER TABLE ContactStateMotif ADD code CHARACTER VARYING(255);"); + queries.add("ALTER TABLE ContactStateMotif ADD name CHARACTER VARYING(1000);"); + queries.add("ALTER TABLE ContactStateMotif ADD color CHARACTER VARYING(20);"); + } } Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/WaoMigrationCallBack.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/WaoMigrationCallBack.java 2011-06-10 22:25:28 UTC (rev 1337) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/WaoMigrationCallBack.java 2011-06-15 15:16:11 UTC (rev 1338) @@ -155,10 +155,14 @@ protected abstract void addObsDebCodes_3_0(List<String> queries); - protected abstract void addLocationTypeToAllTerrestrialLocations(List<String> queries); + protected abstract void addLocationTypeToAllTerrestrialLocations_3_0(List<String> queries); - protected abstract void migrateTerrestrialDivisions(List<String> queries); + protected abstract void migrateTerrestrialDivisions_3_0(List<String> queries); + protected abstract void dropTranslations_3_0(List<String> queries); + + protected abstract void addContactStateMotives(List<String> queries); + protected static final Version[] VERSIONS = new Version[] { VersionUtil.valueOf("1.0"), VersionUtil.valueOf("1.1"), @@ -536,10 +540,14 @@ addFleetToBoats_3_0(queries); - addLocationTypeToAllTerrestrialLocations(queries); + addLocationTypeToAllTerrestrialLocations_3_0(queries); - migrateTerrestrialDivisions(queries); + migrateTerrestrialDivisions_3_0(queries); + dropTranslations_3_0(queries); + + addContactStateMotives(queries); + String[] strings = queries.toArray(new String[queries.size()]); executeSQL(tx, showSql, showProgression, strings); } Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/entity/ContactStateMotifImpl.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/entity/ContactStateMotifImpl.java 2011-06-10 22:25:28 UTC (rev 1337) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/entity/ContactStateMotifImpl.java 2011-06-15 15:16:11 UTC (rev 1338) @@ -23,17 +23,11 @@ */ package fr.ifremer.wao.entity; -import fr.ifremer.wao.WaoUtils; import fr.ifremer.wao.bean.ContactState; -import java.util.HashMap; -import java.util.Locale; -import java.util.Map; - public class ContactStateMotifImpl extends ContactStateMotifAbstract { - protected Map<Locale, String> translations; - + /** Do not use, needed by Hibernate */ public ContactStateMotifImpl() {} public ContactStateMotifImpl(ContactState contactState) { @@ -64,29 +58,9 @@ } @Override - public String getTranslation() { - return translations.get(WaoUtils.getCurrentLocale()); - } - - @Override - public void setTranslation(Locale locale, String value) { - if (translations == null) { - translations = new HashMap<Locale, String>(); - } - translations.put(locale, value); - } - - @Override public String toString() { - String toString = getTranslation(); - if (toString == null) { - toString = getTopiaId(); - } - return toString; + String name = getName(); + return name; } - @Override - public Map<Locale, String> getTranslations() { - return translations; - } -} //ContactStateMotifImpl +} Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/models/ContactImportExportModel.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/models/ContactImportExportModel.java 2011-06-10 22:25:28 UTC (rev 1337) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/models/ContactImportExportModel.java 2011-06-15 15:16:11 UTC (rev 1338) @@ -32,6 +32,7 @@ import fr.ifremer.wao.entity.Boat; import fr.ifremer.wao.entity.Contact; import fr.ifremer.wao.entity.ContactImpl; +import fr.ifremer.wao.entity.ContactStateMotif; import fr.ifremer.wao.entity.ObsDebCode; import fr.ifremer.wao.entity.SampleRow; import fr.ifremer.wao.entity.TerrestrialLocation; @@ -46,8 +47,10 @@ import fr.ifremer.wao.io.csv2.ValueGetterSetter; import fr.ifremer.wao.io.csv2.ValueParserFormatter; import fr.ifremer.wao.io.csv2.models.operations.BoatParserFormatter; +import fr.ifremer.wao.io.csv2.models.operations.ContactStateMotivesParserFormatter; import fr.ifremer.wao.io.csv2.models.operations.LocationTypeParserFormatter; import fr.ifremer.wao.io.csv2.models.operations.ObsDebCodeParserFormatter; +import fr.ifremer.wao.io.csv2.models.operations.SampleRowParserFormatter; import fr.ifremer.wao.io.csv2.models.operations.UserParserFormatter; import fr.ifremer.wao.io.csv2.models.operations.UsersParserFormatter; import org.apache.commons.lang.StringUtils; @@ -57,9 +60,11 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.jar.Attributes; public class ContactImportExportModel implements ImportModel<Contact>, ExportModel<Contact> { + /** will get terrestrial location depending on location code and pushed location type */ static class TerrestrialLocationParserFormatter implements ValueParserFormatter<TerrestrialLocation> { protected Map<LocationType, Map<String, TerrestrialLocation>> indexedLocations; @@ -118,33 +123,6 @@ } } - static class SampleRowParserFormatter implements ValueParserFormatter<SampleRow> { - - protected Map<String, SampleRow> indexedSampleRows; - - SampleRowParserFormatter(List<SampleRow> sampleRows) { - indexedSampleRows = WaoUtils.projectPropertyUnique(sampleRows, SampleRow.PROPERTY_CODE); - } - - @Override - public String format(SampleRow sampleRow) { - return sampleRow.getCode(); - } - - @Override - public SampleRow parse(String sampleRowCode) throws ParseException { - String trimmedCode = sampleRowCode.trim(); - if (StringUtils.isEmpty(trimmedCode)) { - throw new IllegalArgumentException(WaoUtils._("wao.import.contact.failure.sampleRowCodeMissing")); - } - SampleRow sampleRow = indexedSampleRows.get(sampleRowCode); - if (sampleRow == null) { - throw new IllegalArgumentException(WaoUtils._("wao.import.contact.failure.wrongSampleRowCode", sampleRowCode)); - } - return sampleRow; - } - } - protected ObsProgram obsProgram; protected List<WaoUser> waoUsers; @@ -157,6 +135,8 @@ protected List<ObsDebCode> obsDebCodes; + protected List<ContactStateMotif> motives; + /** for export */ public ContactImportExportModel(ObsProgram obsProgram) { this.obsProgram = obsProgram; @@ -166,13 +146,14 @@ public ContactImportExportModel(ObsProgram obsProgram, List<WaoUser> waoUsers, List<TerrestrialLocation> terrestrialLocations, List<SampleRow> sampleRows, List<Boat> boats, - List<ObsDebCode> obsDebCodes) { + List<ObsDebCode> obsDebCodes, List<ContactStateMotif> motives) { this.obsProgram = obsProgram; this.waoUsers = waoUsers; this.terrestrialLocations = terrestrialLocations; this.sampleRows = sampleRows; this.boats = boats; this.obsDebCodes = obsDebCodes; + this.motives = motives; } @Override @@ -224,6 +205,18 @@ new Common.ToStringParserFormatter<DataReliability>(DataReliability.values())); modelBuilder.newColumnForImportExport("CONTACT_OBSERVATION_MAMMIFERE", Contact.PROPERTY_MAMMALS_OBSERVATION, Common.BOOLEAN); modelBuilder.newColumnForImportExport("CONTACT_CAPTURE_ACCIDENTELLE", Contact.PROPERTY_MAMMALS_CAPTURE, Common.BOOLEAN); + modelBuilder.newColumnForImportExport("CONTACT_ETAT_MOTIF_CODE", Contact.PROPERTY_CONTACT_STATE_MOTIF, new ContactStateMotivesParserFormatter(motives)); + modelBuilder.newIgnoredColumn("CONTACT_ETAT_MOTIF_NOM"); + modelBuilder.newColumnForExport("CONTACT_ETAT_MOTIF_NOM", new ValueGetter<Contact, String>() { + @Override + public String get(Contact contact) throws Exception { + String name = ""; + if (contact.getContactStateMotif() != null) { + name = contact.getContactStateMotif().getName(); + } + return name; + } + }); } else { // FIXME 20110606 bleny contact.getTerrestrialLocation() may be null, export will fail Added: trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/models/ContactStateMotivesImportModel.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/models/ContactStateMotivesImportModel.java (rev 0) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/models/ContactStateMotivesImportModel.java 2011-06-15 15:16:11 UTC (rev 1338) @@ -0,0 +1,62 @@ +package fr.ifremer.wao.io.csv2.models; + +import fr.ifremer.wao.WaoUtils; +import fr.ifremer.wao.bean.ContactState; +import fr.ifremer.wao.entity.ContactStateMotif; +import fr.ifremer.wao.entity.ContactStateMotifImpl; +import fr.ifremer.wao.io.csv2.ImportModel; +import fr.ifremer.wao.io.csv2.ImportableColumn; +import fr.ifremer.wao.io.csv2.ModelBuilder; +import fr.ifremer.wao.io.csv2.ValueParser; + +import java.text.ParseException; +import java.util.Collection; +import java.util.List; + +public class ContactStateMotivesImportModel implements ImportModel<ContactStateMotif> { + + protected ModelBuilder<ContactStateMotif> modelBuilder; + + @Override + public char getSeparator() { + return ';'; + } + + @Override + public void pushCsvHeaderNames(List<String> headerNames) { + // nothing to do + } + + @Override + public ContactStateMotif newEmptyInstance() { + ContactStateMotif newContactStateMotif = + new ContactStateMotifImpl(ContactState.CONTACT_REFUSED); + return newContactStateMotif; + } + + protected void buildModel() { + modelBuilder = new ModelBuilder<ContactStateMotif>(); + modelBuilder.newMandatoryColumn( + "MOTIF_CODE", ContactStateMotif.PROPERTY_CODE); + modelBuilder.newMandatoryColumn( + "MOTIF_NOM", ContactStateMotif.PROPERTY_NAME); + modelBuilder.newMandatoryColumn( + "MOTIF_COULEUR", new ValueParser<String>() { + @Override + public String parse(String value) throws ParseException { + if (value.length() != 6) { + throw new IllegalArgumentException(WaoUtils._("wao.import.contact.failure.wrongColor", value)); + } + return value.trim(); + } + }, ContactStateMotif.PROPERTY_COLOR); + } + + @Override + public Collection<ImportableColumn> getColumnsForImport() { + if (modelBuilder == null) { + buildModel(); + } + return modelBuilder.getColumnsForImport(); + } +} Added: trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/models/operations/ContactStateMotivesParserFormatter.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/models/operations/ContactStateMotivesParserFormatter.java (rev 0) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/models/operations/ContactStateMotivesParserFormatter.java 2011-06-15 15:16:11 UTC (rev 1338) @@ -0,0 +1,47 @@ +package fr.ifremer.wao.io.csv2.models.operations; + +import fr.ifremer.wao.WaoUtils; +import fr.ifremer.wao.entity.ContactStateMotif; +import fr.ifremer.wao.io.csv2.ValueParserFormatter; +import org.apache.commons.lang.StringUtils; + +import java.text.ParseException; +import java.util.List; +import java.util.Map; + +public class ContactStateMotivesParserFormatter implements ValueParserFormatter<ContactStateMotif> { + + protected List<ContactStateMotif> motives; + + protected Map<String, ContactStateMotif> indexedMotives; + + public ContactStateMotivesParserFormatter(List<ContactStateMotif> motives) { + this.motives = motives; + } + + @Override + public String format(ContactStateMotif motif) { + String code = ""; + if (motif != null) { + code = motif.getCode(); + } + return code; + } + + @Override + public ContactStateMotif parse(String code) throws ParseException { + if (indexedMotives == null) { + indexedMotives = WaoUtils.projectPropertyUnique(motives, ContactStateMotif.PROPERTY_CODE); + } + ContactStateMotif contactStateMotif; + if (StringUtils.isBlank(code)) { + contactStateMotif = null; + } else { + contactStateMotif = indexedMotives.get(code.trim()); + if (contactStateMotif == null) { + throw new IllegalArgumentException(WaoUtils._("wao.import.contact.failure.wrongContactStateMotifCode", code)); + } + } + return contactStateMotif; + } +} Added: trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/models/operations/SampleRowParserFormatter.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/models/operations/SampleRowParserFormatter.java (rev 0) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/models/operations/SampleRowParserFormatter.java 2011-06-15 15:16:11 UTC (rev 1338) @@ -0,0 +1,37 @@ +package fr.ifremer.wao.io.csv2.models.operations; + +import fr.ifremer.wao.WaoUtils; +import fr.ifremer.wao.entity.SampleRow; +import fr.ifremer.wao.io.csv2.ValueParserFormatter; +import org.apache.commons.lang.StringUtils; + +import java.text.ParseException; +import java.util.List; +import java.util.Map; + +public class SampleRowParserFormatter implements ValueParserFormatter<SampleRow> { + + protected Map<String, SampleRow> indexedSampleRows; + + public SampleRowParserFormatter(List<SampleRow> sampleRows) { + indexedSampleRows = WaoUtils.projectPropertyUnique(sampleRows, SampleRow.PROPERTY_CODE); + } + + @Override + public String format(SampleRow sampleRow) { + return sampleRow.getCode(); + } + + @Override + public SampleRow parse(String sampleRowCode) throws ParseException { + String trimmedCode = sampleRowCode.trim(); + if (StringUtils.isEmpty(trimmedCode)) { + throw new IllegalArgumentException(WaoUtils._("wao.import.contact.failure.sampleRowCodeMissing")); + } + SampleRow sampleRow = indexedSampleRows.get(sampleRowCode); + if (sampleRow == null) { + throw new IllegalArgumentException(WaoUtils._("wao.import.contact.failure.wrongSampleRowCode", sampleRowCode)); + } + return sampleRow; + } +} Deleted: trunk/wao-business/src/main/java/fr/ifremer/wao/service/EntitiesTranslator.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/service/EntitiesTranslator.java 2011-06-10 22:25:28 UTC (rev 1337) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/service/EntitiesTranslator.java 2011-06-15 15:16:11 UTC (rev 1338) @@ -1,120 +0,0 @@ -/* - * #%L - * Wao :: Business - * - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2009 - 2011 Ifremer - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * #L% - */ -package fr.ifremer.wao.service; - -import fr.ifremer.wao.WaoDAOHelper; -import fr.ifremer.wao.entity.TranslatableEntity; -import fr.ifremer.wao.entity.Translation; -import fr.ifremer.wao.entity.TranslationDAO; -import org.apache.commons.lang.LocaleUtils; -import org.nuiton.topia.TopiaContext; -import org.nuiton.topia.TopiaException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.ArrayList; -import java.util.List; -import java.util.Locale; -import java.util.Map; - -/** - * Manage the translations of all entities. This class aim to be - * used by service that output some translatable entities and - * provides methods to fulfill an entity with its translations - * to make it ready to printed in a localized UI. - */ -public class EntitiesTranslator { - - private static final Logger log = - LoggerFactory.getLogger(EntitiesTranslator.class); - - protected TopiaContext transaction; - - public EntitiesTranslator(TopiaContext transaction) { - this.transaction = transaction; - } - - /** For a given list of entities, make all known translations available - * in the entity. - * - * This method will look in database to find all translations for a given - * entity and push them in the object. - */ - public <E extends TranslatableEntity> List<E> translateEntities(List<E> entities) throws TopiaException { - List<E> result = new ArrayList<E>(entities); - TranslationDAO translationDAO = WaoDAOHelper.getTranslationDAO(transaction); - for (TranslatableEntity entity : result) { - // find translations for this entity - List<Translation> translations = translationDAO.findAllById(entity.getTopiaId()); - for (Translation translation : translations) { - Locale locale = LocaleUtils.toLocale(translation.getLocale()); - entity.setTranslation(locale, translation.getText()); - } - } - return result; - } - - public void updateTranslations(List<? extends TranslatableEntity> entities) throws TopiaException { - - TranslationDAO translationDAO = WaoDAOHelper.getTranslationDAO(transaction); - - int translationAdded = 0; - int translationUpdated = 0; - - for (TranslatableEntity entity : entities) { - Map<Locale, String> translations = entity.getTranslations(); - String id = entity.getTopiaId(); - - for (Map.Entry<Locale, String> translation : translations.entrySet()) { - Locale locale = translation.getKey(); - String value = translation.getValue(); - - Translation translationEntity = translationDAO.findByProperties( - Translation.PROPERTY_ID, id, - Translation.PROPERTY_LOCALE, locale.toString()); - // create or update - if (translationEntity == null) { - translationDAO.create(Translation.PROPERTY_ID, id, - Translation.PROPERTY_LOCALE, locale.toString(), - Translation.PROPERTY_TEXT, value); - translationAdded += 1; - } else { - if (log.isDebugEnabled()) { - log.debug("will change translation from '" + translationEntity.getText() + - "' to '" + value + "'"); - } - translationEntity.setText(value); - translationDAO.update(translationEntity); - translationUpdated += 1; - } - } - } - - if (log.isDebugEnabled()) { - log.debug(translationAdded + " translation added, " + - translationUpdated + " translations updated"); - } - } - -} Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceCartographyImpl.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceCartographyImpl.java 2011-06-10 22:25:28 UTC (rev 1337) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceCartographyImpl.java 2011-06-15 15:16:11 UTC (rev 1338) @@ -291,8 +291,7 @@ BoatDistrictDAO dao = WaoDAOHelper.getBoatDistrictDAO(transaction); - Map<String, PieChartData> districts = null; // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - // serviceSynthesis.getContactMotifsPieChartDataByBoatDistrict(filter); + Map<String, PieChartData> districts = serviceSynthesis.getContactStateMotifsPieChartDataByBoatDistrict(filter); // Create new IconSizeHelper to calculate icon size and scale for pieCharts IconSizeHelper sizeHelper = new IconSizeHelper(districts.values()); @@ -311,6 +310,12 @@ BoatDistrict district = dao.findByTopiaId(districtId); + if (logger.isDebugEnabled()) { + logger.debug("district " + district.getCode() + + " coordinates are " + district.getLatitude() + + ", " + district.getLongitude()); + } + String title = "Répartition des motifs de refus pour le quartier " + district.getCode(); Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceContactImpl.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceContactImpl.java 2011-06-10 22:25:28 UTC (rev 1337) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceContactImpl.java 2011-06-15 15:16:11 UTC (rev 1338) @@ -54,6 +54,7 @@ import fr.ifremer.wao.entity.ContactDAO; import fr.ifremer.wao.entity.ContactImpl; import fr.ifremer.wao.entity.ContactStateMotif; +import fr.ifremer.wao.entity.ContactStateMotifDAO; import fr.ifremer.wao.entity.ElligibleBoat; import fr.ifremer.wao.entity.ElligibleBoatDAO; import fr.ifremer.wao.entity.FishingZone; @@ -163,14 +164,16 @@ sampleRow.sizeSampleMonth(); contact.getBoat().getName(); + if (contact.getObsProgram() == ObsProgram.OBSMER) { + contact.getContactStateMotif(); + } + if (contact.getObsProgram() == ObsProgram.OBSVENTE) { - // load sampleRow.getTerrestrialLocation(); contact.getTerrestrialLocation(); } if (contact.getObsProgram() == ObsProgram.OBSDEB) { - // load if (sampleRow.isPhoneCall()) { sampleRow.getTerrestrialLocation(); } else if (sampleRow.isFieldWorkObservation()) { @@ -219,24 +222,19 @@ Map<String, Contact> results = dao.findAllMappedByQuery(query); - List<ContactStateMotif> motives = new LinkedList<ContactStateMotif>(); - // force load for (Contact contact : results.values()) { contact.getMainObserver(); contact.sizeSecondaryObservers(); contact.getTerrestrialLocation(); - if (contact.getContactStateMotif() != null) { - motives.add(contact.getContactStateMotif()); + if (contact.getObsProgram() == ObsProgram.OBSMER) { + contact.getContactStateMotif(); } if (contact.getObsProgram() == ObsProgram.OBSDEB) { contact.getObsDebCode(); } } - EntitiesTranslator translator = new EntitiesTranslator(transaction); - translator.translateEntities(motives); - return results; } @@ -343,38 +341,50 @@ // Non abouti, Refus ou Refus Définitif if (success && contactState.isUnfinishedState()) { - Contact oldContact = null; - if (contact.getTopiaId() != null) { - oldContact = executeGetContact(transaction, contact.getTopiaId()); - } + boolean contactMustHaveAMotif = contact.getObsProgram() == ObsProgram.OBSMER + && (contactState == ContactState.CONTACT_REFUSED + || contactState == ContactState.CONTACT_DEFINITELY_REFUSED); + if (contactMustHaveAMotif) { - if (oldContact != null) { + if (contact.getContactStateMotif() == null) { + success = false; + message = WaoUtils._("wao.business.contact.validation.contactStateMotifMissing"); + } - String newComment = contact.getComment(); + } else { - boolean commentDefined = StringUtils.isNotEmpty(newComment); - boolean commentChanged = commentDefined && - !newComment.equals(oldContact.getComment()); + Contact oldContact = null; + if (contact.getTopiaId() != null) { + oldContact = executeGetContact(transaction, contact.getTopiaId()); + } - // Ano #2540 : NPE on oldState, extract boolean for - // previous unfinishedState case - boolean previousUnfinishedState = commentDefined && - oldContact.getContactState() != null && oldContact.getContactState().isUnfinishedState(); + if (oldContact != null) { - // Ano #2440 : no restriction if previous state is unfinished - if (previousUnfinishedState || commentChanged) { + String newComment = contact.getComment(); - // RAZ des champs - contact.setObservationBeginDate(null); - contact.setObservationEndDate(null); - contact.setNbObservants(0); - contact.setMammalsCapture(false); - contact.setMammalsObservation(false); - contact.setDataInputDate(null); + boolean commentDefined = StringUtils.isNotEmpty(newComment); + boolean commentChanged = commentDefined && + !newComment.equals(oldContact.getComment()); - } else { - success = false; - message = "Vous devez ajouter un commentaire pour l'état '" + contactState + "'"; + // Ano #2540 : NPE on oldState, extract boolean for + // previous unfinishedState case + boolean previousUnfinishedState = commentDefined && + oldContact.getContactState() != null && oldContact.getContactState().isUnfinishedState(); + + // Ano #2440 : no restriction if previous state is unfinished + if (previousUnfinishedState || commentChanged) { + + // RAZ des champs + contact.setObservationBeginDate(null); + contact.setObservationEndDate(null); + contact.setMammalsCapture(false); + contact.setMammalsObservation(false); + contact.setDataInputDate(null); + + } else { + success = false; + message = "Vous devez ajouter un commentaire pour l'état '" + contactState + "'"; + } } } // Embarquement Réalisé @@ -1068,6 +1078,8 @@ BoatDAO boatDAO = WaoDAOHelper.getBoatDAO(transaction); ObsDebCodeDAO obsDebCodeDAO = WaoDAOHelper.getObsDebCodeDAO(transaction); + ContactStateMotifDAO contactStateMotifDAO = + WaoDAOHelper.getContactStateMotifDAO(transaction); // prepare selection of sample-rows, those are restrained // by ObsProgram and by company @@ -1082,11 +1094,12 @@ List<TerrestrialLocation> terrestrialLocations = terrestrialLocationDAO.findAll(); List<ObsDebCode> obsDebCodes = obsDebCodeDAO.findAll(); + List<ContactStateMotif> motives = contactStateMotifDAO.findAll(); // model creation, and import starting ImportModel<Contact> contactImportModel = new ContactImportExportModel( user.getProfile().getObsProgram(), - waoUsers, terrestrialLocations, sampleRows, boats, obsDebCodes); + waoUsers, terrestrialLocations, sampleRows, boats, obsDebCodes, motives); Import<Contact> contactImport = new Import<Contact>(contactImportModel, input); Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceReferentialImpl.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceReferentialImpl.java 2011-06-10 22:25:28 UTC (rev 1337) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceReferentialImpl.java 2011-06-15 15:16:11 UTC (rev 1338) @@ -31,15 +31,11 @@ import fr.ifremer.wao.WaoException; import fr.ifremer.wao.WaoQueryBuilder; import fr.ifremer.wao.WaoQueryHelper; -import fr.ifremer.wao.WaoUtils; -import fr.ifremer.wao.bean.ContactFilter; import fr.ifremer.wao.bean.ContactState; import fr.ifremer.wao.bean.LocationType; -import fr.ifremer.wao.bean.ObservationType; import fr.ifremer.wao.bean.SamplingFilter; import fr.ifremer.wao.entity.ContactStateMotif; import fr.ifremer.wao.entity.ContactStateMotifDAO; -import fr.ifremer.wao.entity.ContactStateMotifImpl; import fr.ifremer.wao.entity.FishingGearDCF; import fr.ifremer.wao.entity.FishingGearDCFDAO; import fr.ifremer.wao.entity.FishingZone; @@ -63,6 +59,7 @@ import fr.ifremer.wao.io.csv.WaoCsvHeader.FISHING_ZONE; import fr.ifremer.wao.io.csv2.Import; import fr.ifremer.wao.io.csv2.ImportModel; +import fr.ifremer.wao.io.csv2.models.ContactStateMotivesImportModel; import fr.ifremer.wao.io.csv2.models.ObsDebCodesImportModel; import fr.ifremer.wao.io.csv2.models.TerrestrialDivisionImportModel; import fr.ifremer.wao.io.csv2.models.TerrestrialLocationImportModel; @@ -77,15 +74,12 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.xml.stream.Location; import java.io.IOException; import java.io.InputStream; import java.util.Arrays; import java.util.HashMap; import java.util.Iterator; -import java.util.LinkedList; import java.util.List; -import java.util.Locale; import java.util.Map; /** @@ -453,15 +447,13 @@ protected List<ContactStateMotif> executeGetAllContactStateMotifs(TopiaContext transaction, ContactState contactState) throws Exception { ContactStateMotifDAO contactStateMotifDAO = WaoDAOHelper.getContactStateMotifDAO(transaction); - List<ContactStateMotif> notTranslatedResult; + List<ContactStateMotif> result; if (contactState == null) { - notTranslatedResult = contactStateMotifDAO.findAll(); + result = contactStateMotifDAO.findAll(); } else { ContactState substituteState = ContactState.getSubstituteForMotif(contactState); - notTranslatedResult = contactStateMotifDAO.findAllByContactStateOrdinal(substituteState.ordinal()); + result = contactStateMotifDAO.findAllByContactStateOrdinal(substituteState.ordinal()); } - EntitiesTranslator translator = new EntitiesTranslator(transaction); - List<ContactStateMotif> result = translator.translateEntities(notTranslatedResult); if (log.isDebugEnabled()) { log.debug(result.size() + " motifs found for state " + contactState); @@ -471,67 +463,42 @@ } @Override - protected void executeUpdateAllContactStatesMotifs(TopiaContext transaction, List<ContactStateMotif> motifs) throws Exception { - ContactStateMotifDAO contactStateMotifDAO = WaoDAOHelper.getContactStateMotifDAO(transaction); - for (ContactStateMotif motif : motifs) { - if (motif.getTopiaId() == null) { - contactStateMotifDAO.create(motif); - } else { - contactStateMotifDAO.update(motif); + protected ImportResults executeImportContactStateMotives(TopiaContext transaction, InputStream input) throws Exception { + ImportResults result = new ImportResultsImpl(); + ImportModel<ContactStateMotif> model = new ContactStateMotivesImportModel(); + Import<ContactStateMotif> motivesImport = new Import<ContactStateMotif>(model, input); + + try { + Iterator<ContactStateMotif> it = motivesImport.startImport(); + ContactStateMotifDAO dao = WaoDAOHelper.getContactStateMotifDAO(transaction); + while (it.hasNext()) { + ContactStateMotif motif = it.next(); + ContactStateMotif existingMotif = dao.findByCode(motif.getCode()); + if (existingMotif == null) { + dao.create(motif); + result.incNbImportedNew(); + } else { + existingMotif.setName(motif.getName()); + existingMotif.setContactState(motif.getContactState()); + existingMotif.setColor(motif.getColor()); + dao.update(existingMotif); + } + result.incNbImported(); } + transaction.commitTransaction(); + } catch (Exception eee) { + transaction.rollbackTransaction(); + throw eee; + } finally { + motivesImport.stopImport(); } - EntitiesTranslator translator = new EntitiesTranslator(transaction); - translator.updateTranslations(motifs); - transaction.commitTransaction(); - } - /** - * @deprecated write a CSV file and use import - */ - @Deprecated - protected void executeImportInitialContactStateMotifs(TopiaContext transaction) throws Exception { - ContactStateMotifDAO contactStateMotifDAO = WaoDAOHelper.getContactStateMotifDAO(transaction); - long count = contactStateMotifDAO.count(); - if (count == 0) { - - List<ContactStateMotif> motifs = new LinkedList<ContactStateMotif>(); - - ContactStateMotif motif; - - // add Administratif, Rejet du programme, Blocage de la profession, autre - - motif = contactStateMotifDAO.create(new ContactStateMotifImpl(ContactState.CONTACT_REFUSED)); - motif.setTranslation(Locale.FRENCH, "Administratif"); - motif.setTranslation(Locale.ENGLISH, "Administrative"); - motifs.add(motif); - - motif = contactStateMotifDAO.create(new ContactStateMotifImpl(ContactState.CONTACT_REFUSED)); - motif.setTranslation(Locale.FRENCH, "Rejet du programme"); - motif.setTranslation(Locale.ENGLISH, "Program rejection"); - motifs.add(motif); - - motif = contactStateMotifDAO.create(new ContactStateMotifImpl(ContactState.CONTACT_REFUSED)); - motif.setTranslation(Locale.FRENCH, "Blocage de la profession"); - motif.setTranslation(Locale.ENGLISH, "Profession locking"); - motifs.add(motif); - - motif = contactStateMotifDAO.create(new ContactStateMotifImpl(ContactState.CONTACT_REFUSED)); - motif.setTranslation(Locale.FRENCH, "Autre"); - motif.setTranslation(Locale.ENGLISH, "Other"); - motifs.add(motif); - - EntitiesTranslator translator = new EntitiesTranslator(transaction); - translator.updateTranslations(motifs); - - count = contactStateMotifDAO.count(); - if (log.isDebugEnabled()) { - log.debug(count + " contact states motifs imported"); - } - } else { - if (log.isDebugEnabled()) { - log.debug("will not import contact states motifs"); - } + if (log.isInfoEnabled()) { + log.info(result.getNbRowsImported() + " contact state motifs imported (" + + result.getNbRowsImportedNew() + " new)"); } + + return result; } @Override @@ -747,6 +714,7 @@ TerrestrialLocationDAOImpl terrestrialLocationDAO = WaoDAOHelper.getTerrestrialLocationDAO(transaction); ObsDebCodeDAO obsDebCodeDAO = WaoDAOHelper.getObsDebCodeDAO(transaction); + ContactStateMotifDAO contactStateMotifDAO = WaoDAOHelper.getContactStateMotifDAO(transaction); // import terrestrial locations if base is empty boolean importTerrestrialLocations = @@ -778,6 +746,13 @@ } } - // executeImportInitialContactStateMotifs(transaction); + if (contactStateMotifDAO.count() == 0) { + try { + input = getClass().getResourceAsStream("/motifs.csv"); + executeImportContactStateMotives(transaction, input); + } finally { + IOUtils.closeQuietly(input); + } + } } } Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceSynthesisImpl.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceSynthesisImpl.java 2011-06-10 22:25:28 UTC (rev 1337) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceSynthesisImpl.java 2011-06-15 15:16:11 UTC (rev 1338) @@ -31,6 +31,7 @@ import fr.ifremer.wao.WaoQueryHelper; import fr.ifremer.wao.WaoQueryHelper.BoatDistrictProperty; import fr.ifremer.wao.WaoQueryHelper.ContactProperty; +import fr.ifremer.wao.WaoUtils; import fr.ifremer.wao.bean.BoardingResult; import fr.ifremer.wao.bean.BoardingResultImpl; import fr.ifremer.wao.bean.ContactAverageReactivity; @@ -57,6 +58,7 @@ import fr.ifremer.wao.entity.Contact; import fr.ifremer.wao.entity.ContactDAO; import fr.ifremer.wao.entity.ContactStateMotif; +import fr.ifremer.wao.entity.ContactStateMotifDAO; import fr.ifremer.wao.entity.Indicator; import fr.ifremer.wao.entity.IndicatorDAO; import fr.ifremer.wao.entity.IndicatorLevel; @@ -75,6 +77,7 @@ import org.nuiton.util.PeriodDates; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import sun.awt.image.ShortInterleavedRaster; import java.text.DateFormat; import java.text.SimpleDateFormat; @@ -1203,7 +1206,8 @@ (TopiaContext transaction, ContactFilter filter) throws TopiaException { - // TODO 2011-02-15 bleny this piece of code was just started, must be reviewed + ContactStateMotifDAO contactStateMotifDAO = WaoDAOHelper.getContactStateMotifDAO(transaction); + Map<String, ContactStateMotif> indexedMotives = WaoUtils.projectPropertyUnique(contactStateMotifDAO.findAll(), ContactStateMotif.PROPERTY_CODE); WaoQueryBuilder builder = context.newQueryBuilder(); @@ -1221,8 +1225,8 @@ addNullOr(contactProperty.validationProgram(), Op.NEQ, Boolean.FALSE). addNotNull(contactProperty.contactStateMotif()). // Set the results wanted : by boatDistrict, by State, get number of results - setSelect(boatDistrictProperty.topiaId(), contactProperty.contactStateMotif(), "COUNT(*)"). - addGroup(boatDistrictProperty.topiaId(), contactProperty.contactStateMotif()); + setSelect(boatDistrictProperty.topiaId(), contactProperty.contactStateMotifProperty().code(), "COUNT(*)"). + addGroup(boatDistrictProperty.topiaId(), contactProperty.contactStateMotifProperty().code()); List<Object[]> queryResults = transaction.findByQuery(query); @@ -1231,26 +1235,35 @@ for (Object[] row : queryResults) { String districtId = (String) row[0]; - ContactStateMotif motif = (ContactStateMotif) row[1]; + ContactStateMotif motif = indexedMotives.get(row[1]); long count = (Long)row[2]; PieChartData data = results.get(districtId); if (data == null) { data = new PieChartDataImpl(); -// for (ContactPieChartConstant constant : ContactPieChartConstant.values(obsProgram)) { -// PieChartSeries series = new PieChartSeriesImpl(); -// series.setLabel(constant.toString()); -// series.setColor(constant.getColor()); -// data.addSeries(series); -// } results.put(districtId, data); } + PieChartSeries series = new PieChartSeriesImpl(); + series.setLabel(motif.getName()); + series.setColor(motif.getColor()); + series.setValue(count); + data.addSeries(series); + data.setTotal(data.getTotal() + count); } - throw new UnsupportedOperationException("not yet implemented"); + if (log.isTraceEnabled()) { + StringBuilder stringBuilder = new StringBuilder(); + for (Map.Entry<String, PieChartData> stringPieChartDataEntry : results.entrySet()) { + stringBuilder.append(stringPieChartDataEntry.getKey()) + .append(" -> ") + .append(stringPieChartDataEntry.getValue().toString()) + .append("\n"); + } + log.trace(stringBuilder.toString()); + } - // return results; + return results; } @Override Modified: trunk/wao-business/src/main/resources/i18n/wao-business_en_GB.properties =================================================================== --- trunk/wao-business/src/main/resources/i18n/wao-business_en_GB.properties 2011-06-10 22:25:28 UTC (rev 1337) +++ trunk/wao-business/src/main/resources/i18n/wao-business_en_GB.properties 2011-06-15 15:16:11 UTC (rev 1338) @@ -129,6 +129,7 @@ fr.ifremer.wao.entity.TargetSpeciesDCF.SPF=Small pelagic wao.business.boat.validation.immatriculation.wrongFormat=The boat registry number must be composed of 6 digits wao.business.contact.validation.commentAdminNecessaryForDataReliability=You must precise in admin comment why data reliability is '%s' +wao.business.contact.validation.contactStateMotifMissing=You must precise a motif for the refusal wao.business.contact.validation.dataReliabilityMissingForValidation=You must provide data reliability before validating wao.business.entity.UserProfile.description=%s on %s%s wao.business.mammalsCapture.mail.message=Hello,\n\nAn observer of the ObsMer program provided to WAO the following information\:\n\nTide\: %s\nProfession\: %s\n\nAccidental capture\:\n%s\n\nBest regards,\n\nObsmer program\nhttp\://www.ifremer.fr/wao @@ -206,6 +207,7 @@ wao.error.serviceReferential.getSectors= wao.error.serviceReferential.getTerrestrialDistrict= wao.error.serviceReferential.importContactStateMotifs= +wao.error.serviceReferential.importContactStateMotives= wao.error.serviceReferential.importDCFcodes= wao.error.serviceReferential.importFishingZoneCsv= wao.error.serviceReferential.importInitialContactStateMotifs= @@ -280,6 +282,8 @@ wao.import.contact.failure.sampleRowCodeMissing=The code of the sample row line is missing wao.import.contact.failure.terrestrialLocationMissing=The code of the terrestrial location is missing wao.import.contact.failure.wrongBoat=There is no boat with plate number '%s' +wao.import.contact.failure.wrongColor=The color '%s' is not a valid color. It must be composed of 6 characters without the hash (#), see http://en.wikipedia.org/wiki/Web_colors +wao.import.contact.failure.wrongContactStateMotifCode=The code '%s' is not a valid code wao.import.contact.failure.wrongSampleRowCode=The is no sample row with code '%s' wao.import.contact.failure.wrongTerrestrialLocation=There is no location of type '%s' with code '%s' wao.import.failure.wrongLocationType='%s' is not a valid location type, allowed values are %s Modified: trunk/wao-business/src/main/resources/i18n/wao-business_fr_FR.properties =================================================================== --- trunk/wao-business/src/main/resources/i18n/wao-business_fr_FR.properties 2011-06-10 22:25:28 UTC (rev 1337) +++ trunk/wao-business/src/main/resources/i18n/wao-business_fr_FR.properties 2011-06-15 15:16:11 UTC (rev 1338) @@ -1,179 +1,180 @@ ContactPieChartConstant.OTHER=Autres -ContactPieChartConstant.REALIZED=Réalisés -ContactPieChartConstant.REFUSED=Refusés -ContactState.CONTACT_DEFINITELY_REFUSED=Refus définitif +ContactPieChartConstant.REALIZED=R\u00e9alis\u00e9s +ContactPieChartConstant.REFUSED=Refus\u00e9s +ContactState.CONTACT_DEFINITELY_REFUSED=Refus d\u00e9finitif ContactState.CONTACT_REFUSED=Refus ContactState.CONTACT_START=Contact pris -ContactState.OBSERVATION_CANCELLED=Annulée -ContactState.OBSERVATION_DONE=Observation réalisée -ContactState.OBSERVATION_EXPECTED=Observation programmée -ContactState.OBSERVATION_NOT_DONE=Non observé -DataReliability.CORRECTION_ASKED=Correction demandée +ContactState.OBSERVATION_CANCELLED=Annul\u00e9e +ContactState.OBSERVATION_DONE=Observation r\u00e9alis\u00e9e +ContactState.OBSERVATION_EXPECTED=Observation programm\u00e9e +ContactState.OBSERVATION_NOT_DONE=Non observ\u00e9 +DataReliability.CORRECTION_ASKED=Correction demand\u00e9e DataReliability.DOUBTFUL=Douteuse -DataReliability.NOT_PROVIDED=Non contrôlée +DataReliability.NOT_PROVIDED=Non contr\u00f4l\u00e9e DataReliability.NOT_RELIABLE=Non exploitable DataReliability.RELIABLE=Exploitable DataReliability.UNKNOWN=Inconnue -GlobalIndicatorValue.BAD=Pénalité de niveau 1 +GlobalIndicatorValue.BAD=P\u00e9nalit\u00e9 de niveau 1 GlobalIndicatorValue.GOOD=Bonus de niveau 1 GlobalIndicatorValue.NEUTRAL=Conforme au cahier des charges -GlobalIndicatorValue.VERY_BAD=Pénalité de niveau 2 +GlobalIndicatorValue.VERY_BAD=P\u00e9nalit\u00e9 de niveau 2 GlobalIndicatorValue.VERY_GOOD=Bonus de niveau 2 -LocationType.AUCTION=Criée +LocationType.AUCTION=Cri\u00e9e LocationType.DISTRICT=Quartier maritime LocationType.PORT=Port -LocationType.REGION=Région Ifremer +LocationType.REGION=R\u00e9gion Ifremer ObsProgram.OBSDEB=ObsDeb ObsProgram.OBSMER=ObsMer ObsProgram.OBSVENTE=ObsVente ObservationType.FIELD_WORK_OBSERVATION=Observation de terrain -ObservationType.FIELD_WORK_SURVEY=Enquête de terrain -ObservationType.PHONE_CALL=Enquête téléphonique -SamplingStrategy.SIMULTANEOUS_ALL_SPECIES=Simultané \: Toutes espèces commerciales -SamplingStrategy.SIMULTANEOUS_G1_G2_SPECIES=Simultané \: espèces G1+G2 -SamplingStrategy.SIMULTANEOUS_G1_SPECIES=Simultané \: espèces G1 -SamplingStrategy.SPECIFIC_STOCK=Stock spécifique -SynthesisId.DISTINCT_BOATS_COUNTS=Nombres de navires distincts observés -SynthesisId.GRAPH_BOARDING=Taux d'embarquement sur un même navire conforme aux exigences -SynthesisId.GRAPH_SAMPLING=Taux de réalisation du plan d'échantillonage -SynthesisId.IND_ALLEGRO_REACTIVITY=Délais de transmission des données -SynthesisId.IND_COMPLIANCE_BOARDING=Respect du nombre d'observateurs embarqués -SynthesisId.IND_CONTACT_STATE=États des contacts -SynthesisId.IND_DATA_RELIABILITY=Qualité de la donnée -SynthesisId.OBSERVATION_HOUR=Heures d'observation dans la journée +ObservationType.FIELD_WORK_SURVEY=Enqu\u00eate de terrain +ObservationType.PHONE_CALL=Enqu\u00eate t\u00e9l\u00e9phonique +SamplingStrategy.SIMULTANEOUS_ALL_SPECIES=Simultan\u00e9 \: Toutes esp\u00e8ces commerciales +SamplingStrategy.SIMULTANEOUS_G1_G2_SPECIES=Simultan\u00e9 \: esp\u00e8ces G1+G2 +SamplingStrategy.SIMULTANEOUS_G1_SPECIES=Simultan\u00e9 \: esp\u00e8ces G1 +SamplingStrategy.SPECIFIC_STOCK=Stock sp\u00e9cifique +SynthesisId.DISTINCT_BOATS_COUNTS=Nombres de navires distincts observ\u00e9s +SynthesisId.GRAPH_BOARDING=Taux d'embarquement sur un m\u00eame navire conforme aux exigences +SynthesisId.GRAPH_SAMPLING=Taux de r\u00e9alisation du plan d'\u00e9chantillonage +SynthesisId.IND_ALLEGRO_REACTIVITY=D\u00e9lais de transmission des donn\u00e9es +SynthesisId.IND_COMPLIANCE_BOARDING=Respect du nombre d'observateurs embarqu\u00e9s +SynthesisId.IND_CONTACT_STATE=\u00c9tats des contacts +SynthesisId.IND_DATA_RELIABILITY=Qualit\u00e9 de la donn\u00e9e +SynthesisId.OBSERVATION_HOUR=Heures d'observation dans la journ\u00e9e UserRole.ADMIN=Administrateur UserRole.COORDINATOR=Coordinateur -UserRole.GUEST=Invité +UserRole.GUEST=Invit\u00e9 UserRole.OBSERVER=Observateur UserRole.PROFESSIONAL=Professionnel csv.import.error.missingMandatoryHeaders=Les champs obligatoires %s sont manquants -csv.import.error.unableToParseValue=Erreur lors de l'interprétation de la valeur '%s' (colonne '%s', ligne %s) -csv.import.error.unableToReadField=Impossible de lire la colonne '%s' à la ligne %s +csv.import.error.unableToParseValue=Erreur lors de l'interpr\u00e9tation de la valeur '%s' (colonne '%s', ligne %s) +csv.import.error.unableToReadField=Impossible de lire la colonne '%s' \u00e0 la ligne %s csv.import.error.unableToReadLine=Impossible de lire la ligne %s -csv.import.error.unableToSetValue=Impossible d'enregistrer la valeur '%s' (entité '%s', ligne %s, column '%s') +csv.import.error.unableToSetValue=Impossible d'enregistrer la valeur '%s' (entit\u00e9 '%s', ligne %s, column '%s') csv.import.error.unrecognizedHeaders=Les champs %s ne sont pas reconnus. Les champs possibles sont %s. csv.import.logComment=Modification depuis import -fr.ifremer.wao.entity.FishingGearDCF.=Non spécifié -fr.ifremer.wao.entity.FishingGearDCF.DRB=Dragues remorquées par bateau -fr.ifremer.wao.entity.FishingGearDCF.DRH=Dragues à main -fr.ifremer.wao.entity.FishingGearDCF.FAR=Pièges aériens -fr.ifremer.wao.entity.FishingGearDCF.FCN=Éperviers -fr.ifremer.wao.entity.FishingGearDCF.FG=Autres engins retombants (non-spécifiés) -fr.ifremer.wao.entity.FishingGearDCF.FIX=Pièges (non-spécifiés) -fr.ifremer.wao.entity.FishingGearDCF.FPN=Filets-pièges fixes non couverts +fr.ifremer.wao.entity.FishingGearDCF.=Non sp\u00e9cifi\u00e9 +fr.ifremer.wao.entity.FishingGearDCF.DRB=Dragues remorqu\u00e9es par bateau +fr.ifremer.wao.entity.FishingGearDCF.DRH=Dragues \u00e0 main +fr.ifremer.wao.entity.FishingGearDCF.FAR=Pi\u00e8ges a\u00e9riens +fr.ifremer.wao.entity.FishingGearDCF.FCN=\u00c9perviers +fr.ifremer.wao.entity.FishingGearDCF.FG=Autres engins retombants (non-sp\u00e9cifi\u00e9s) +fr.ifremer.wao.entity.FishingGearDCF.FIX=Pi\u00e8ges (non-sp\u00e9cifi\u00e9s) +fr.ifremer.wao.entity.FishingGearDCF.FPN=Filets-pi\u00e8ges fixes non couverts fr.ifremer.wao.entity.FishingGearDCF.FPO=Nasses (casiers) -fr.ifremer.wao.entity.FishingGearDCF.FSN=Filets à l'étalage (diables) +fr.ifremer.wao.entity.FishingGearDCF.FSN=Filets \u00e0 l'\u00e9talage (diables) fr.ifremer.wao.entity.FishingGearDCF.FWR=Barrages, parcs, bordigues, etc. fr.ifremer.wao.entity.FishingGearDCF.FYK=Verveux -fr.ifremer.wao.entity.FishingGearDCF.GEN=Filets maillants et filets emmélants (non spécifiés) -fr.ifremer.wao.entity.FishingGearDCF.GES=Tamis à civelles -fr.ifremer.wao.entity.FishingGearDCF.GN=Filets maillants (non spécifiés) +fr.ifremer.wao.entity.FishingGearDCF.GEN=Filets maillants et filets emm\u00e9lants (non sp\u00e9cifi\u00e9s) +fr.ifremer.wao.entity.FishingGearDCF.GES=Tamis \u00e0 civelles +fr.ifremer.wao.entity.FishingGearDCF.GN=Filets maillants (non sp\u00e9cifi\u00e9s) fr.ifremer.wao.entity.FishingGearDCF.GNC=Filets maillants encerclants -fr.ifremer.wao.entity.FishingGearDCF.GND=Filets maillants dérivants (filets dérivants) +fr.ifremer.wao.entity.FishingGearDCF.GND=Filets maillants d\u00e9rivants (filets d\u00e9rivants) fr.ifremer.wao.entity.FishingGearDCF.GNF=Filets maillants fixes (sur perches) -fr.ifremer.wao.entity.FishingGearDCF.GNS=Filets maillants calés (ancrés) -fr.ifremer.wao.entity.FishingGearDCF.GT=Trémailleurs -fr.ifremer.wao.entity.FishingGearDCF.GTN=Trémails et filets maillants combinés -fr.ifremer.wao.entity.FishingGearDCF.GTR=Trémails +fr.ifremer.wao.entity.FishingGearDCF.GNS=Filets maillants cal\u00e9s (ancr\u00e9s) +fr.ifremer.wao.entity.FishingGearDCF.GT=Tr\u00e9mailleurs +fr.ifremer.wao.entity.FishingGearDCF.GTN=Tr\u00e9mails et filets maillants combin\u00e9s +fr.ifremer.wao.entity.FishingGearDCF.GTR=Tr\u00e9mails fr.ifremer.wao.entity.FishingGearDCF.HAR=Harpons -fr.ifremer.wao.entity.FishingGearDCF.HMD=Dragues mécanisées +fr.ifremer.wao.entity.FishingGearDCF.HMD=Dragues m\u00e9canis\u00e9es fr.ifremer.wao.entity.FishingGearDCF.HMP=Pompes -fr.ifremer.wao.entity.FishingGearDCF.HMX=Engins de récolte (non spécifiés) +fr.ifremer.wao.entity.FishingGearDCF.HMX=Engins de r\u00e9colte (non sp\u00e9cifi\u00e9s) fr.ifremer.wao.entity.FishingGearDCF.LA=Filets tournants sans coulisse (filet lamparo) -fr.ifremer.wao.entity.FishingGearDCF.LHM=Lignes à main et lignes avec cannes -fr.ifremer.wao.entity.FishingGearDCF.LHP=Lignes à main et lignes à cannes -fr.ifremer.wao.entity.FishingGearDCF.LL=Palangres (non spécifiées) -fr.ifremer.wao.entity.FishingGearDCF.LLD=Palangres dérivantes -fr.ifremer.wao.entity.FishingGearDCF.LLS=Palangres calées ou semi-flottantes -fr.ifremer.wao.entity.FishingGearDCF.LN=Filets soulevés (non spécifiés) -fr.ifremer.wao.entity.FishingGearDCF.LNB=Filets soulevés manœuvrées du bateau -fr.ifremer.wao.entity.FishingGearDCF.LNP=Filets soulevés portatifs -fr.ifremer.wao.entity.FishingGearDCF.LNS=Filets soulevés fixes manœuvrées du rivage -fr.ifremer.wao.entity.FishingGearDCF.LTL=lignes de traîne -fr.ifremer.wao.entity.FishingGearDCF.LX=Hameçons et lignes (non spécifiés) +fr.ifremer.wao.entity.FishingGearDCF.LHM=Lignes \u00e0 main et lignes avec cannes +fr.ifremer.wao.entity.FishingGearDCF.LHP=Lignes \u00e0 main et lignes \u00e0 cannes +fr.ifremer.wao.entity.FishingGearDCF.LL=Palangres (non sp\u00e9cifi\u00e9es) +fr.ifremer.wao.entity.FishingGearDCF.LLD=Palangres d\u00e9rivantes +fr.ifremer.wao.entity.FishingGearDCF.LLS=Palangres cal\u00e9es ou semi-flottantes +fr.ifremer.wao.entity.FishingGearDCF.LN=Filets soulev\u00e9s (non sp\u00e9cifi\u00e9s) +fr.ifremer.wao.entity.FishingGearDCF.LNB=Filets soulev\u00e9s man\u0153uvr\u00e9es du bateau +fr.ifremer.wao.entity.FishingGearDCF.LNP=Filets soulev\u00e9s portatifs +fr.ifremer.wao.entity.FishingGearDCF.LNS=Filets soulev\u00e9s fixes man\u0153uvr\u00e9es du rivage +fr.ifremer.wao.entity.FishingGearDCF.LTL=lignes de tra\u00eene +fr.ifremer.wao.entity.FishingGearDCF.LX=Hame\u00e7ons et lignes (non sp\u00e9cifi\u00e9s) fr.ifremer.wao.entity.FishingGearDCF.MIS=Divers -fr.ifremer.wao.entity.FishingGearDCF.NK=Engins inconnus ou non spécifiés -fr.ifremer.wao.entity.FishingGearDCF.OT=Chaluts à panneaux (non spécifié) -fr.ifremer.wao.entity.FishingGearDCF.OTB=Chalut de fond à panneaux -fr.ifremer.wao.entity.FishingGearDCF.OTM=Chaluts pélagiques à panneaux -fr.ifremer.wao.entity.FishingGearDCF.OTT=Chaluts jumeaux à panneaux +fr.ifremer.wao.entity.FishingGearDCF.NK=Engins inconnus ou non sp\u00e9cifi\u00e9s +fr.ifremer.wao.entity.FishingGearDCF.OT=Chaluts \u00e0 panneaux (non sp\u00e9cifi\u00e9) +fr.ifremer.wao.entity.FishingGearDCF.OTB=Chalut de fond \u00e0 panneaux +fr.ifremer.wao.entity.FishingGearDCF.OTM=Chaluts p\u00e9lagiques \u00e0 panneaux +fr.ifremer.wao.entity.FishingGearDCF.OTT=Chaluts jumeaux \u00e0 panneaux fr.ifremer.wao.entity.FishingGearDCF.PS=Filets tournants avec coulisse (sennes coulissantes) -fr.ifremer.wao.entity.FishingGearDCF.PS1=Filets tournants, sennes coulissantes manœuvrées par un bateau -fr.ifremer.wao.entity.FishingGearDCF.PS2=Filets tournants, sennes coulissantes manœuvrées par deux bateaux -fr.ifremer.wao.entity.FishingGearDCF.PT=Chalut-bœufs (non spécifié) -fr.ifremer.wao.entity.FishingGearDCF.PTB=Chalut-bœufs de fond -fr.ifremer.wao.entity.FishingGearDCF.PTM=Chalut-bœufs pélagiques -fr.ifremer.wao.entity.FishingGearDCF.RG=Engins de pêche révréative +fr.ifremer.wao.entity.FishingGearDCF.PS1=Filets tournants, sennes coulissantes man\u0153uvr\u00e9es par un bateau +fr.ifremer.wao.entity.FishingGearDCF.PS2=Filets tournants, sennes coulissantes man\u0153uvr\u00e9es par deux bateaux +fr.ifremer.wao.entity.FishingGearDCF.PT=Chalut-b\u0153ufs (non sp\u00e9cifi\u00e9) +fr.ifremer.wao.entity.FishingGearDCF.PTB=Chalut-b\u0153ufs de fond +fr.ifremer.wao.entity.FishingGearDCF.PTM=Chalut-b\u0153ufs p\u00e9lagiques +fr.ifremer.wao.entity.FishingGearDCF.RG=Engins de p\u00eache r\u00e9vr\u00e9ative fr.ifremer.wao.entity.FishingGearDCF.SB=Sennes de plages fr.ifremer.wao.entity.FishingGearDCF.SDN=Sennes danoises -fr.ifremer.wao.entity.FishingGearDCF.SPR=Sennes manœuvrées par deux bateaux -fr.ifremer.wao.entity.FishingGearDCF.SSC=Sennes écossaises -fr.ifremer.wao.entity.FishingGearDCF.SV=Sennes halées à bord -fr.ifremer.wao.entity.FishingGearDCF.SW=Sennes (non spécifiées) -fr.ifremer.wao.entity.FishingGearDCF.TB=Chalut de fond (non spécifié) -fr.ifremer.wao.entity.FishingGearDCF.TBB=Chaluts à perche -fr.ifremer.wao.entity.FishingGearDCF.TBN=Chalut à langoustines -fr.ifremer.wao.entity.FishingGearDCF.TBS=Chalut à crevettes -fr.ifremer.wao.entity.FishingGearDCF.TM=Chalut pélagique (non spécifié) -fr.ifremer.wao.entity.FishingGearDCF.TMS=Chalut à crevettes -fr.ifremer.wao.entity.FishingGearDCF.TX=Autre chalut (non spécifié) -fr.ifremer.wao.entity.TargetSpeciesDCF.=Non spécifié +fr.ifremer.wao.entity.FishingGearDCF.SPR=Sennes man\u0153uvr\u00e9es par deux bateaux +fr.ifremer.wao.entity.FishingGearDCF.SSC=Sennes \u00e9cossaises +fr.ifremer.wao.entity.FishingGearDCF.SV=Sennes hal\u00e9es \u00e0 bord +fr.ifremer.wao.entity.FishingGearDCF.SW=Sennes (non sp\u00e9cifi\u00e9es) +fr.ifremer.wao.entity.FishingGearDCF.TB=Chalut de fond (non sp\u00e9cifi\u00e9) +fr.ifremer.wao.entity.FishingGearDCF.TBB=Chaluts \u00e0 perche +fr.ifremer.wao.entity.FishingGearDCF.TBN=Chalut \u00e0 langoustines +fr.ifremer.wao.entity.FishingGearDCF.TBS=Chalut \u00e0 crevettes +fr.ifremer.wao.entity.FishingGearDCF.TM=Chalut p\u00e9lagique (non sp\u00e9cifi\u00e9) +fr.ifremer.wao.entity.FishingGearDCF.TMS=Chalut \u00e0 crevettes +fr.ifremer.wao.entity.FishingGearDCF.TX=Autre chalut (non sp\u00e9cifi\u00e9) +fr.ifremer.wao.entity.TargetSpeciesDCF.=Non sp\u00e9cifi\u00e9 fr.ifremer.wao.entity.TargetSpeciesDCF.ALG=Algues -fr.ifremer.wao.entity.TargetSpeciesDCF.CAT=Espèces catadromes -fr.ifremer.wao.entity.TargetSpeciesDCF.CRU=Crustacés +fr.ifremer.wao.entity.TargetSpeciesDCF.CAT=Esp\u00e8ces catadromes +fr.ifremer.wao.entity.TargetSpeciesDCF.CRU=Crustac\u00e9s fr.ifremer.wao.entity.TargetSpeciesDCF.CSJ=Coquilles Saint-Jacques -fr.ifremer.wao.entity.TargetSpeciesDCF.DEF=Espèces démersales -fr.ifremer.wao.entity.TargetSpeciesDCF.DWS=Espèces d'eaux profondes +fr.ifremer.wao.entity.TargetSpeciesDCF.DEF=Esp\u00e8ces d\u00e9mersales +fr.ifremer.wao.entity.TargetSpeciesDCF.DWS=Esp\u00e8ces d'eaux profondes fr.ifremer.wao.entity.TargetSpeciesDCF.FIN=Poisson plats -fr.ifremer.wao.entity.TargetSpeciesDCF.LPF=Grands pélagiques +fr.ifremer.wao.entity.TargetSpeciesDCF.LPF=Grands p\u00e9lagiques fr.ifremer.wao.entity.TargetSpeciesDCF.MOL=Mollusques -fr.ifremer.wao.entity.TargetSpeciesDCF.SPF=Petits pélagiques -wao.business.boat.validation.immatriculation.wrongFormat=L'immatriculation du navire doit être formée de 6 chiffres -wao.business.contact.validation.commentAdminNecessaryForDataReliability=Il faut préciser dans le commentaire administrateur pourquoi la donnée est '%s' -wao.business.contact.validation.dataReliabilityMissingForValidation=Il faut préciser la qualité de la donnée avant de valider +fr.ifremer.wao.entity.TargetSpeciesDCF.SPF=Petits p\u00e9lagiques +wao.business.boat.validation.immatriculation.wrongFormat=L'immatriculation du navire doit \u00eatre form\u00e9e de 6 chiffres +wao.business.contact.validation.commentAdminNecessaryForDataReliability=Il faut pr\u00e9ciser dans le commentaire administrateur pourquoi la donn\u00e9e est '%s' +wao.business.contact.validation.contactStateMotifMissing=Il faut pr\u00e9ciser un motif de refus +wao.business.contact.validation.dataReliabilityMissingForValidation=Il faut pr\u00e9ciser la qualit\u00e9 de la donn\u00e9e avant de valider wao.business.entity.UserProfile.description=%s sur %s%s -wao.business.mammalsCapture.mail.message=Bonjour,\n\nUn observateur du programme Obsmer a renseigné dans WAO l'information suivante \:\n\nMarée \: %s\nMétier \: %s\n\nCapture accidentelle \:\n%s\n\nCordialement,\n\nLe programme Obsmer\nhttp\://www.ifremer.fr/wao +wao.business.mammalsCapture.mail.message=Bonjour,\n\nUn observateur du programme Obsmer a renseign\u00e9 dans WAO l'information suivante \:\n\nMar\u00e9e \: %s\nM\u00e9tier \: %s\n\nCapture accidentelle \:\n%s\n\nCordialement,\n\nLe programme Obsmer\nhttp\://www.ifremer.fr/wao wao.business.mammalsCapture.mail.subject=Obsmer WAO\: Information sur capture accidentelle wao.business.other=Autre wao.business.readOnly=(lecture seule) -wao.error.boat.canCreateContact=Impossible de créer un nouveau contact pour la société %1$s et le navire %2$s (%3$d) -wao.error.boat.getNbBoarding=Impossible de récupérer le nombre d'embarquements réels depuis le %1$s -wao.error.boatInfos.getNbBoardingForCompany=Impossible de récupérer le nombre d'embarquements réels depuis le %1$s pour la société %2$s +wao.error.boat.canCreateContact=Impossible de cr\u00e9er un nouveau contact pour la soci\u00e9t\u00e9 %1$s et le navire %2$s (%3$d) +wao.error.boat.getNbBoarding=Impossible de r\u00e9cup\u00e9rer le nombre d'embarquements r\u00e9els depuis le %1$s +wao.error.boatInfos.getNbBoardingForCompany=Impossible de r\u00e9cup\u00e9rer le nombre d'embarquements r\u00e9els depuis le %1$s pour la soci\u00e9t\u00e9 %2$s wao.error.context.close=Une erreur est survenue pendant la fermeture du contexte principale de ToPIA wao.error.context.encodeString= -wao.error.context.getRootContext=Une erreur est survenue pour la récupération du contexte principale de ToPIA +wao.error.context.getRootContext=Une erreur est survenue pour la r\u00e9cup\u00e9ration du contexte principale de ToPIA wao.error.context.parse=Une erreur est survenue pendant le chargement de la configuration du fichier %1$s wao.error.context.rollback=Une erreur est survenue pendant l'annulation de la transaction courante -wao.error.context.start=Une erreur est survenue pendant le démarrage de l'application +wao.error.context.start=Une erreur est survenue pendant le d\u00e9marrage de l'application wao.error.context.stop=Une erreur est survenue pendant la fermeture de l'application -wao.error.sampleMonth.addRealTideTime=Impossible d'enregistrer le nombre de marées réels pour le mois de %1$s [ligne \: %2$s] -wao.error.sampleRow.saveSampleRowLog=Impossible d'enregistrer le commentaire écrit par %1$s -wao.error.serviceBoat.createUpdateCompanyBoatInfos=Impossible de créer ou modifier les informations liés au navire %1$d pour la société %2$s -wao.error.serviceBoat.exportBoatCsv=Impossible d'exporter les navires sélectionnés +wao.error.sampleMonth.addRealTideTime=Impossible d'enregistrer le nombre de mar\u00e9es r\u00e9els pour le mois de %1$s [ligne \: %2$s] +wao.error.sampleRow.saveSampleRowLog=Impossible d'enregistrer le commentaire \u00e9crit par %1$s +wao.error.serviceBoat.createUpdateCompanyBoatInfos=Impossible de cr\u00e9er ou modifier les informations li\u00e9s au navire %1$d pour la soci\u00e9t\u00e9 %2$s +wao.error.serviceBoat.exportBoatCsv=Impossible d'exporter les navires s\u00e9lectionn\u00e9s wao.error.serviceBoat.getActivityCalendarLogAccessFile= wao.error.serviceBoat.getActivityCalendarLogFile= wao.error.serviceBoat.getAllActiveBoats= wao.error.serviceBoat.getBoat=Impossible de charger le navire -wao.error.serviceBoat.getBoatNamesStartWith=Impossible de récupérer les navires avec un nom commencant par '%1$s' +wao.error.serviceBoat.getBoatNamesStartWith=Impossible de r\u00e9cup\u00e9rer les navires avec un nom commencant par '%1$s' wao.error.serviceBoat.getBoatsByFilter=Impossible de filtrer la liste des navires -wao.error.serviceBoat.getBoatsByImmatriculations=La chaîne d'immatriculations est incorrect \! Chaque immatriculation doit posséder 6 chiffres -wao.error.serviceBoat.getCompanyBoatInfos=Impossible de récupérer les informations du navire immatriculé %1$d pour la société %2$s -wao.error.serviceBoat.getLastActivityCalendar=Impossible de charger le dernier calendrier d'activité du navire %1$s (%2$d) +wao.error.serviceBoat.getBoatsByImmatriculations=La cha\u00eene d'immatriculations est incorrect \! Chaque immatriculation doit poss\u00e9der 6 chiffres +wao.error.serviceBoat.getCompanyBoatInfos=Impossible de r\u00e9cup\u00e9rer les informations du navire immatricul\u00e9 %1$d pour la soci\u00e9t\u00e9 %2$s +wao.error.serviceBoat.getLastActivityCalendar=Impossible de charger le dernier calendrier d'activit\u00e9 du navire %1$s (%2$d) wao.error.serviceBoat.getNbBoatsByFilter=Impossible de filtrer la liste des navires wao.error.serviceBoat.getPossibleValuesForFilter= wao.error.serviceBoat.getShipOwnerNamesContains= -wao.error.serviceBoat.importActivityCalendarCsv=Problème d'import du fichier CSV des calendriers d'activité -wao.error.serviceBoat.importBoatCsv=Problème d'import du fichier CSV. Vérifiez l'en-tête du fichier. +wao.error.serviceBoat.importActivityCalendarCsv=Probl\u00e8me d'import du fichier CSV des calendriers d'activit\u00e9 +wao.error.serviceBoat.importBoatCsv=Probl\u00e8me d'import du fichier CSV. V\u00e9rifiez l'en-t\u00eate du fichier. wao.error.serviceBoat.newBoatFilter= wao.error.serviceCartography.exportContactMotifsStatisticsKml= wao.error.serviceCartography.exportContactStatisticsKml= -wao.error.serviceCartography.importBoatDistrictKml=Impossible d'importer les coordonnées des quartiers des navires. Vérifiez la documentation pour le bon format du fichier Kml. +wao.error.serviceCartography.importBoatDistrictKml=Impossible d'importer les coordonn\u00e9es des quartiers des navires. V\u00e9rifiez la documentation pour le bon format du fichier Kml. wao.error.serviceChart.getContactPieChartData= wao.error.serviceChart.getContactPieChartUrl= wao.error.serviceContact.exportContactCsv=Impossible d'exporter les contacts wao.error.serviceContact.getContact=Impossible de trouver le contact wao.error.serviceContact.getContacts=Impossible de filtrer la liste des contacts -wao.error.serviceContact.getNbContacts=Impossible de compter le nombre de contacts filtrés +wao.error.serviceContact.getNbContacts=Impossible de compter le nombre de contacts filtr\u00e9s wao.error.serviceContact.getNewContact=Impossible d'instancier un nouveau contact wao.error.serviceContact.getPossibleObsDebCodes= wao.error.serviceContact.getPossibleTerrestrialLocations= @@ -189,7 +190,7 @@ wao.error.serviceContact.updateSampleMonthTidesValue= wao.error.serviceContact.validateContact= wao.error.serviceNews.getNewNews= -wao.error.serviceNews.getNews=Impossible de récupérer l'ensemble des news +wao.error.serviceNews.getNews=Impossible de r\u00e9cup\u00e9rer l'ensemble des news wao.error.serviceNews.saveNews=Impossible d'enregistrer la news ayant pour titre '%1$s' wao.error.serviceReferential.getAllContactStateMotifs= wao.error.serviceReferential.getAllObsDebCodes= @@ -201,13 +202,14 @@ wao.error.serviceReferential.getAllTerrestrialLocations= wao.error.serviceReferential.getCodesDCF5Contains= wao.error.serviceReferential.getFacades=Impossible de charger la liste des facades -wao.error.serviceReferential.getFishingZones=Impossible de charger la liste des secteurs de pêche -wao.error.serviceReferential.getProfessions=Impossible de charger la liste des métiers -wao.error.serviceReferential.getSectors=Impossible de charger la liste des zones de pêche +wao.error.serviceReferential.getFishingZones=Impossible de charger la liste des secteurs de p\u00eache +wao.error.serviceReferential.getProfessions=Impossible de charger la liste des m\u00e9tiers +wao.error.serviceReferential.getSectors=Impossible de charger la liste des zones de p\u00eache wao.error.serviceReferential.getTerrestrialDistrict= wao.error.serviceReferential.importContactStateMotifs= -wao.error.serviceReferential.importDCFcodes=Impossible de créer le référentiel des codes DCF -wao.error.serviceReferential.importFishingZoneCsv=Problème d'import du fichier CSV. Vérifiez l'en-tête du fichier \: [ PECHE_DIVISION,PECHE_ZONE,PECHE_FACADE ]. Voir documentation pour plus de détails. +wao.error.serviceReferential.importContactStateMotives= +wao.error.serviceReferential.importDCFcodes=Impossible de cr\u00e9er le r\u00e9f\u00e9rentiel des codes DCF +wao.error.serviceReferential.importFishingZoneCsv=Probl\u00e8me d'import du fichier CSV. V\u00e9rifiez l'en-t\u00eate du fichier \: [ PECHE_DIVISION,PECHE_ZONE,PECHE_FACADE ]. Voir documentation pour plus de d\u00e9tails. wao.error.serviceReferential.importInitialContactStateMotifs= wao.error.serviceReferential.importObsDebCodes= wao.error.serviceReferential.importTerrestrialDivisions= @@ -216,74 +218,76 @@ wao.error.serviceReferential.updateAllContactStatesMotifs= wao.error.serviceSampling.countSampleRows= wao.error.serviceSampling.createSampleRowLog= -wao.error.serviceSampling.createUpdateSampleRow=Impossible de sauvegarder la ligne d'échantillon -wao.error.serviceSampling.deleteSampleRow=Impossible de supprimer la ligne d'échantillon \: %1$s -wao.error.serviceSampling.exportSamplingPlanCsv=Impossible d'exporter le plan d'échantillonnage sur la période du %1$s au %2$s +wao.error.serviceSampling.createUpdateSampleRow=Impossible de sauvegarder la ligne d'\u00e9chantillon +wao.error.serviceSampling.deleteSampleRow=Impossible de supprimer la ligne d'\u00e9chantillon \: %1$s +wao.error.serviceSampling.exportSamplingPlanCsv=Impossible d'exporter le plan d'\u00e9chantillonnage sur la p\u00e9riode du %1$s au %2$s wao.error.serviceSampling.exportSamplingPlanICalendar= wao.error.serviceSampling.getDCFGears= wao.error.serviceSampling.getDCFSpecies= wao.error.serviceSampling.getNewProfession= wao.error.serviceSampling.getNewSampleMonth= wao.error.serviceSampling.getNewSampleRow= -wao.error.serviceSampling.getNewSampleRowCode=Impossible de récupérer un nouveau code pour une ligne d'échantillonnage +wao.error.serviceSampling.getNewSampleRowCode=Impossible de r\u00e9cup\u00e9rer un nouveau code pour une ligne d'\u00e9chantillonnage wao.error.serviceSampling.getNewSampleRowLog= wao.error.serviceSampling.getPossibleValuesForFilter= wao.error.serviceSampling.getPrograms=Impossible de charger la liste des programmes -wao.error.serviceSampling.getSampleRow=Impossible de charger la ligne d'échantillon ayant pour identifiant \: %1$s -wao.error.serviceSampling.getSampleRowByCode=Impossible de charger la ligne d'échantillon ayant pour code %1$s -wao.error.serviceSampling.getSampleRowsByFilter=Impossible de récupérer la liste des lignes du plan d'échantillonnage +wao.error.serviceSampling.getSampleRow=Impossible de charger la ligne d'\u00e9chantillon ayant pour identifiant \: %1$s +wao.error.serviceSampling.getSampleRowByCode=Impossible de charger la ligne d'\u00e9chantillon ayant pour code %1$s +wao.error.serviceSampling.getSampleRowsByFilter=Impossible de r\u00e9cup\u00e9rer la liste des lignes du plan d'\u00e9chantillonnage wao.error.serviceSampling.getSampleRowsForEligibility= -wao.error.serviceSampling.getSampleRowsOrderedByFishingZone=Impossible de récupérer la liste des lignes du plan d'échantillonnage +wao.error.serviceSampling.getSampleRowsOrderedByFishingZone=Impossible de r\u00e9cup\u00e9rer la liste des lignes du plan d'\u00e9chantillonnage wao.error.serviceSampling.importSamplingPlanCsv=Erreur lors de l'import du plan wao.error.serviceSampling.newOperation= wao.error.serviceSampling.newSampleRow= wao.error.serviceSampling.newSamplingFilter= wao.error.serviceSampling.validateSampleRow= wao.error.serviceSynthesis.getAllIndicatorLogs= -wao.error.serviceSynthesis.getBoardingBoats=Impossible de récupérer les données du graphique concernant les embarquements sur les navires +wao.error.serviceSynthesis.getBoardingBoats=Impossible de r\u00e9cup\u00e9rer les donn\u00e9es du graphique concernant les embarquements sur les navires wao.error.serviceSynthesis.getBoatsCount= wao.error.serviceSynthesis.getComplianceBoardingIndicator= -wao.error.serviceSynthesis.getContactDataInputDateReactivity=Impossible de récupérer l'indicateur de réactivité sur les dates de saisies dans Allegro +wao.error.serviceSynthesis.getContactDataInputDateReactivity=Impossible de r\u00e9cup\u00e9rer l'indicateur de r\u00e9activit\u00e9 sur les dates de saisies dans Allegro wao.error.serviceSynthesis.getContactPieChartData= wao.error.serviceSynthesis.getContactPieChartDataByBoatDistrict= wao.error.serviceSynthesis.getContactStateMotifsPieChartDataByBoatDistrict= -wao.error.serviceSynthesis.getContactStateStatistics=Impossible de récupérer les statistiques sur les états des contacts +wao.error.serviceSynthesis.getContactStateStatistics=Impossible de r\u00e9cup\u00e9rer les statistiques sur les \u00e9tats des contacts wao.error.serviceSynthesis.getDataReliability= -wao.error.serviceSynthesis.getDataSampling=Impossible de récupérer les données pour le graphique dynamique des efforts de marées +wao.error.serviceSynthesis.getDataSampling=Impossible de r\u00e9cup\u00e9rer les donn\u00e9es pour le graphique dynamique des efforts de mar\u00e9es wao.error.serviceSynthesis.getDistinctBoatsCounts= -wao.error.serviceSynthesis.getGlobalSynthesisParameters=Impossible de récupérer les données concernant les indicateurs pour la synthèse globale +wao.error.serviceSynthesis.getGlobalSynthesisParameters=Impossible de r\u00e9cup\u00e9rer les donn\u00e9es concernant les indicateurs pour la synth\u00e8se globale wao.error.serviceSynthesis.getGlobalSynthesisResult= -wao.error.serviceSynthesis.getNonComplianceBoardingIndicator=Impossible de récupérer l'indicateur de non respect du nombre d'observateurs embarqués +wao.error.serviceSynthesis.getNonComplianceBoardingIndicator=Impossible de r\u00e9cup\u00e9rer l'indicateur de non respect du nombre d'observateurs embarqu\u00e9s wao.error.serviceSynthesis.getObservationHours= -wao.error.serviceSynthesis.updateGlobalSynthesisParameters=Impossible de mettre à jour les paramètres de la synthèse globale +wao.error.serviceSynthesis.updateGlobalSynthesisParameters=Impossible de mettre \u00e0 jour les param\u00e8tres de la synth\u00e8se globale wao.error.serviceUser.addTokensToAllProfiles= wao.error.serviceUser.connect=Une erreur est survenue lors de la demande de connexion -wao.error.serviceUser.createDefaultAdmin=Impossible de créer l'administrateur par défaut -wao.error.serviceUser.createUpdateCompany=Impossible de créer ou de mettre à jour la société -wao.error.serviceUser.createUpdateUser=Impossible de créer ou de mettre à jour l'utilisateur -wao.error.serviceUser.deleteCompany=Impossible de supprimer la société ou de vérifier les contraintes de suppression +wao.error.serviceUser.createDefaultAdmin=Impossible de cr\u00e9er l'administrateur par d\u00e9faut +wao.error.serviceUser.createUpdateCompany=Impossible de cr\u00e9er ou de mettre \u00e0 jour la soci\u00e9t\u00e9 +wao.error.serviceUser.createUpdateUser=Impossible de cr\u00e9er ou de mettre \u00e0 jour l'utilisateur +wao.error.serviceUser.deleteCompany=Impossible de supprimer la soci\u00e9t\u00e9 ou de v\u00e9rifier les contraintes de suppression wao.error.serviceUser.deleteUser=Impossible de supprimer l'utilisateur wao.error.serviceUser.existLogin= wao.error.serviceUser.forgetPassword=Impossible d'envoyer le mail d'oubli de mot de passe -wao.error.serviceUser.getCompanies=Impossible de récupérer la liste des sociétés +wao.error.serviceUser.getCompanies=Impossible de r\u00e9cup\u00e9rer la liste des soci\u00e9t\u00e9s wao.error.serviceUser.getCompany= wao.error.serviceUser.getConnectedUserByToken= wao.error.serviceUser.getNewUser=Impossible d'instancier un nouvel utilisateur -wao.error.serviceUser.getObservers=Impossible de récupérer la liste des observateurs +wao.error.serviceUser.getObservers=Impossible de r\u00e9cup\u00e9rer la liste des observateurs wao.error.serviceUser.getUserByToken= wao.error.serviceUser.getUserRolesByLogin= -wao.error.serviceUser.getUsersByCompany=Impossible de récupérer la liste des utilisateurs de la société %1$s +wao.error.serviceUser.getUsersByCompany=Impossible de r\u00e9cup\u00e9rer la liste des utilisateurs de la soci\u00e9t\u00e9 %1$s wao.export.ical.desc=avec %s wao.export.ical.title=Observation ObsDeb -wao.import.contact.failure.boatMissing=Il faut préciser l'immatriculation du navire associé au contact -wao.import.contact.failure.locationTypeMissing=Le type du lieu doit être renseigné -wao.import.contact.failure.sampleRowCodeMissing=Il manque le code de la ligne de plan associée +wao.import.contact.failure.boatMissing=Il faut pr\u00e9ciser l'immatriculation du navire associ\u00e9 au contact +wao.import.contact.failure.locationTypeMissing=Le type du lieu doit \u00eatre renseign\u00e9 +wao.import.contact.failure.sampleRowCodeMissing=Il manque le code de la ligne de plan associ\u00e9e wao.import.contact.failure.terrestrialLocationMissing=Il manque le code du lieu wao.import.contact.failure.wrongBoat=Il n'y a pas de navire avec l'immatriculation '%s' +wao.import.contact.failure.wrongColor=Le code couleur '%s' n'est pas valide, il doit \u00eatre compos\u00e9 de six caract\u00e8res sans di\u00e8ze voir http://fr.wikipedia.org/wiki/Couleurs_du_Web +wao.import.contact.failure.wrongContactStateMotifCode=Le code '%s' n'est pas un code de motif de refus valide wao.import.contact.failure.wrongSampleRowCode=Il n'y a pas de ligne du plan avec le code '%s' wao.import.contact.failure.wrongTerrestrialLocation=Il n'y a pas de lieu de type '%s' ayant pour code '%s' wao.import.failure.wrongLocationType='%s' n'est pas un type de lieu valide, les valeurs admises sont %s -wao.import.failure.wrongObsDebCode=Il n'y a pas de code métier ayant pour code '%s' +wao.import.failure.wrongObsDebCode=Il n'y a pas de code m\u00e9tier ayant pour code '%s' wao.import.failure.wrongUser=Il n'y a pas d'utilisateur ayant pour identifiant '%s' -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 +wao.validation.sampleRow.conflictOnObserver=L'observateur %s ne peut \u00eatre associ\u00e9 \u00e0 la ligne %s car il doit observer, le m\u00eame jour, pour la ligne %s +wao.validation.sampleRow.observerNotInCompany=L'observateur %s ne fait pas parti de la soci\u00e9t\u00e9 %s Added: trunk/wao-business/src/main/resources/motifs.csv =================================================================== --- trunk/wao-business/src/main/resources/motifs.csv (rev 0) +++ trunk/wao-business/src/main/resources/motifs.csv 2011-06-15 15:16:11 UTC (rev 1338) @@ -0,0 +1,5 @@ +MOTIF_CODE;MOTIF_NOM;MOTIF_COULEUR +REFUS_ADMINISTRATIF;Administratif;00FFFF +REFUS_PROGRAMME;Rejet du programme;FF0000 +REFUS_PROFESSION;Blocage de la profession;0000FF +REFUS_AUTRE;Autre;DDDDDD Modified: trunk/wao-business/src/main/xmi/wao.zargo =================================================================== (Binary files differ) Modified: trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceReferentialTest.java =================================================================== --- trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceReferentialTest.java 2011-06-10 22:25:28 UTC (rev 1337) +++ trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceReferentialTest.java 2011-06-15 15:16:11 UTC (rev 1338) @@ -121,5 +121,4 @@ IOUtils.closeQuietly(input); } } - } Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Administration.java =================================================================== --- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Administration.java 2011-06-10 22:25:28 UTC (rev 1337) +++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Administration.java 2011-06-15 15:16:11 UTC (rev 1338) @@ -266,6 +266,16 @@ }; } + public ImportEngine getContactStateMotivesImportEngine() { + return new ImportEngine() { + @Override + public ImportResults execute(InputStream input) throws WaoException, WaoBusinessException { + ImportResults result = serviceReferential.importContactStateMotives(input); + return result; + } + }; + } + public ImportEngine getObsDebCodesImportEngine() { return new ImportEngine() { @Override Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Cartography.java =================================================================== --- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Cartography.java 2011-06-10 22:25:28 UTC (rev 1337) +++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Cartography.java 2011-06-15 15:16:11 UTC (rev 1338) @@ -76,7 +76,14 @@ private String url; + @Property + @Persist + private KmlLoader.StrategyValues mapType; + void setupRender() { + if (mapType == null) { + mapType = KmlLoader.StrategyValues.CONTACTS_STATES; + } } /**************************** FILTERS *************************************/ @@ -161,7 +168,7 @@ if (url == null) { Link link = pageRender.createPageRenderLinkWithContext( KmlLoader.class, - KmlLoader.StrategyValues.CONTACTS_STATES + mapType ); url = link.toURI(); } @@ -171,5 +178,6 @@ public String getTitle() { return "Contacts"; } + } Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/ContactForm.java =================================================================== --- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/ContactForm.java 2011-06-10 22:25:28 UTC (rev 1337) +++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/ContactForm.java 2011-06-15 15:16:11 UTC (rev 1338) @@ -281,6 +281,11 @@ allowedStates.toArray(new ContactState[allowedStates.size()])); } + public List<ContactStateMotif> getContactStateMotives() { + List<ContactStateMotif> motives = serviceReferential.getAllContactStateMotifs(null); + return motives; + } + /************************ ADMIN FIELDS ************************************/ Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/KmlLoader.java =================================================================== --- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/KmlLoader.java 2011-06-10 22:25:28 UTC (rev 1337) +++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/KmlLoader.java 2011-06-15 15:16:11 UTC (rev 1338) @@ -34,6 +34,8 @@ import java.io.IOException; +import static org.nuiton.i18n.I18n.n_; + /** * Page used directly as url for OpenLayers Kml reference. The activate method * will return the StreamResponse with Kml data depends on {@link StrategyValues} @@ -49,8 +51,14 @@ /** Strategy values for loading Kml */ public enum StrategyValues { - CONTACTS_STATES, - CONTACTS_STATES_MOTIFS; + CONTACTS_STATES(n_("StrategyValues.CONTACTS_STATES")), + CONTACTS_STATES_MOTIFS(n_("StrategyValues.CONTACTS_STATES_MOTIFS")); + + protected String i18nKey; + + StrategyValues(String i18nKey) { + this.i18nKey = i18nKey; + } } @SessionState(create = false) Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/ContactModelFactory.java =================================================================== --- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/ContactModelFactory.java 2011-06-10 22:25:28 UTC (rev 1337) +++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/ContactModelFactory.java 2011-06-15 15:16:11 UTC (rev 1338) @@ -95,6 +95,7 @@ addNonSortableProperty("boatDistrictCode", getBoatDistrictCodePropertyConduit()); addNonSortableProperty("observationType", getObservationTypePropertyConduit()); addNonSortableProperty(Contact.PROPERTY_STATE, null); + addNonSortableProperty(Contact.PROPERTY_CONTACT_STATE_MOTIF, getContactStateMotifPropertyConduit()); addNonSortableProperty(Contact.PROPERTY_LANDING_DATE, getLandingDatePropertyConduit()); addNonSortableProperty(Contact.PROPERTY_OBSERVATION_BEGIN_DATE, null); addNonSortableProperty(Contact.PROPERTY_OBSERVATION_END_DATE, null); @@ -118,6 +119,7 @@ if (obsProgram == ObsProgram.OBSMER) { model.exclude(Contact.PROPERTY_TERRESTRIAL_LOCATION); } else { + model.exclude(Contact.PROPERTY_CONTACT_STATE_MOTIF); model.exclude("mammals"); model.exclude("dataReliability"); } @@ -402,4 +404,17 @@ }; } + public PropertyConduit getContactStateMotifPropertyConduit() { + return new ContactReaderPropertyConduit() { + @Override + public String getValue(Contact contact) { + String value = ""; + if (contact.getContactStateMotif() != null) { + value = contact.getContactStateMotif().toString(); + } + return value; + } + }; + } + } Modified: trunk/wao-ui/src/main/resources/fr/ifremer/wao/ui/pages/Contacts_fr.properties =================================================================== --- trunk/wao-ui/src/main/resources/fr/ifremer/wao/ui/pages/Contacts_fr.properties 2011-06-10 22:25:28 UTC (rev 1337) +++ trunk/wao-ui/src/main/resources/fr/ifremer/wao/ui/pages/Contacts_fr.properties 2011-06-15 15:16:11 UTC (rev 1338) @@ -58,4 +58,5 @@ actualSamplingStrategy-label: Strat\u00e9gie d'\u00e9chantillonnage utilis\u00e9e completeSampling-label: \u00c9chantillonnage complet terrestrialLocation-label: Lieu -mainObserver-label: Observateurs \ No newline at end of file +mainObserver-label: Observateurs +contactStateMotif-label: Motif de refus \ No newline at end of file Modified: trunk/wao-ui/src/main/resources/i18n/wao-ui_en_GB.properties =================================================================== --- trunk/wao-ui/src/main/resources/i18n/wao-ui_en_GB.properties 2011-06-10 22:25:28 UTC (rev 1337) +++ trunk/wao-ui/src/main/resources/i18n/wao-ui_en_GB.properties 2011-06-15 15:16:11 UTC (rev 1338) @@ -1,3 +1,5 @@ +StrategyValues.CONTACTS_STATES=Contact states +StrategyValues.CONTACTS_STATES_MOTIFS=Refusal motives SynthesisId.DISTINCT_BOATS_COUNTS= SynthesisId.GRAPH_BOARDING= SynthesisId.GRAPH_SAMPLING= @@ -174,6 +176,7 @@ wao.ui.form.estimatedTides=View estimated effort wao.ui.form.estimatedTides.description=The estimated observation effort is the number of contact that are validated by the company or not. Contacts refused by program are ignored. wao.ui.form.generatePassword=Generate password +wao.ui.form.mapType=Map wao.ui.form.otherBoatInfos=Other boat infos wao.ui.form.period=Period wao.ui.form.period.from=from @@ -193,6 +196,7 @@ wao.ui.import.activityCalendarUserAccessesLabel=of user accesses to the activity calendars wao.ui.import.boatDistrictLabel=of the coordinates of boat districts wao.ui.import.boatsLabel=of boats +wao.ui.import.contactStateMotivesLabel=of the contact state motives wao.ui.import.description=File %s %s \: wao.ui.import.fishingZoneLabel=of fishing zones wao.ui.import.fullDescription=Import %s (%s format with UTF-8 characters set) Modified: trunk/wao-ui/src/main/resources/i18n/wao-ui_fr_FR.properties =================================================================== --- trunk/wao-ui/src/main/resources/i18n/wao-ui_fr_FR.properties 2011-06-10 22:25:28 UTC (rev 1337) +++ trunk/wao-ui/src/main/resources/i18n/wao-ui_fr_FR.properties 2011-06-15 15:16:11 UTC (rev 1338) @@ -1,3 +1,5 @@ +StrategyValues.CONTACTS_STATES=États des contacts +StrategyValues.CONTACTS_STATES_MOTIFS=Motifs de refus SynthesisId.DISTINCT_BOATS_COUNTS= SynthesisId.GRAPH_BOARDING= SynthesisId.GRAPH_SAMPLING= @@ -173,6 +175,7 @@ wao.ui.form.estimatedTides=Voir l'effort d'observations estimé wao.ui.form.estimatedTides.description=L'effort d'observations estimé équivaut au nombre de contacts validés ou non par la société. Les contacts refusés par le programme ne sont pas pris en compte. wao.ui.form.generatePassword=Générer le mot de passe +wao.ui.form.mapType=Carte wao.ui.form.otherBoatInfos=Autres informations sur le navire wao.ui.form.period=Période wao.ui.form.period.from=du @@ -192,6 +195,7 @@ wao.ui.import.activityCalendarUserAccessesLabel=des accès utilisateurs aux calendriers d'activité wao.ui.import.boatDistrictLabel=des coordonnées des quartiers des navires wao.ui.import.boatsLabel=des navires +wao.ui.import.contactStateMotivesLabel=des motifs de refus wao.ui.import.description=Fichier %s %s \: wao.ui.import.fishingZoneLabel=des zones de pêches wao.ui.import.fullDescription=Import %s (format %s avec encodage UTF-8) Modified: trunk/wao-ui/src/main/webapp/Administration.tml =================================================================== --- trunk/wao-ui/src/main/webapp/Administration.tml 2011-06-10 22:25:28 UTC (rev 1337) +++ trunk/wao-ui/src/main/webapp/Administration.tml 2011-06-15 15:16:11 UTC (rev 1338) @@ -180,6 +180,10 @@ <t:importFieldSet t:label="${message:wao.ui.import.terrestrialLocationsLabel}" t:engine="terrestrialLocationsImportEngine" /> <t:if test="currentUser.obsDeb"> + <t:importFieldSet t:label="${message:wao.ui.import.contactStateMotivesLabel}" t:engine="contactStateMotivesImportEngine" /> + </t:if> + + <t:if test="currentUser.obsDeb"> <t:importFieldSet t:label="${message:wao.ui.import.terrestrialDivisionsLabel}" t:engine="terrestrialDivisionsImportEngine" /> <t:importFieldSet t:label="${message:wao.ui.import.obsDebCodesLabel}" t:engine="obsDebCodesImportEngine" /> </t:if> Modified: trunk/wao-ui/src/main/webapp/Cartography.tml =================================================================== --- trunk/wao-ui/src/main/webapp/Cartography.tml 2011-06-10 22:25:28 UTC (rev 1337) +++ trunk/wao-ui/src/main/webapp/Cartography.tml 2011-06-15 15:16:11 UTC (rev 1338) @@ -69,6 +69,12 @@ <input t:type="datefield" class="width70" t:id="periodEnd" t:value="filter.period.thruDate" t:validate="required" /> </p> + <t:if t:test="user.obsMer"> + <p class="mtop5"><label for="mapType">${message:wao.ui.form.mapType}</label> : </p> + <p><input t:type="select" t:id="mapType" value="mapType" + t:zone="cartography-filters-sampling" t:validate="required" /></p> + </t:if> + <t:if t:test="user.admin"> <!-- COMPANY --> <p class="mtop5"><label for="company">${message:wao.ui.entity.Company}</label> : </p> Modified: trunk/wao-ui/src/main/webapp/ContactForm.tml =================================================================== --- trunk/wao-ui/src/main/webapp/ContactForm.tml 2011-06-10 22:25:28 UTC (rev 1337) +++ trunk/wao-ui/src/main/webapp/ContactForm.tml 2011-06-15 15:16:11 UTC (rev 1338) @@ -146,6 +146,14 @@ <label>${message:wao.ui.field.Contact.contactState}</label> ${getLabelForEnum(contact.contactState)} </div> + <t:if test="connectedUser.obsMer"> + <t:if test="contact.contactStateMotif"> + <div> + <label>${message:wao.ui.field.Contact.contactStateMotif}</label> + ${contact.contactStateMotif.name} + </div> + </t:if> + </t:if> <t:if test="connectedUser.obsDeb"> <div> <label>${message:wao.ui.field.Contact.landingDate}</label> @@ -261,6 +269,16 @@ t:validate="required" t:model="contactStateSelectModel" /> </div> + <t:if test="connectedUser.obsMer"> + <div> + <label for="contactStateMotif">${message:wao.ui.field.Contact.contactStateMotif}</label> + <t:topiaEntitySelector t:id="contactStateMotif" + t:clazzName="ContactStateMotif" + t:labelPropertyName="name" + t:values="contactStateMotives" + t:selectedValue="contact.contactStateMotif" /> + </div> + </t:if> <t:if test="connectedUser.obsDeb"> <div> <label for="landingDate">${message:wao.ui.field.Contact.landingDate}</label>
participants (1)
-
bleny@users.labs.libre-entreprise.org