Author: tchemit Date: 2014-04-03 19:43:51 +0200 (Thu, 03 Apr 2014) New Revision: 1829 Url: http://forge.codelutin.com/projects/wao/repository/revisions/1829 Log: refs-40 #4487 Added: trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/DeleteContactAction.java trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/ExportContactsAction.java trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/ImportContactsAction.java trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/ValidateContact.java trunk/wao-web/src/main/webapp/WEB-INF/content/obsmer/import-contacts.jsp Modified: trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/ContactsFilterValues.java trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/ObsMerContactsService.java trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/ContactsAction.java trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/ImportSamplingPlanAction.java trunk/wao-web/src/main/resources/i18n/wao-web_en_GB.properties trunk/wao-web/src/main/resources/i18n/wao-web_fr_FR.properties trunk/wao-web/src/main/webapp/WEB-INF/content/obsmer/contacts.jsp Modified: trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/ContactsFilterValues.java =================================================================== --- trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/ContactsFilterValues.java 2014-04-03 17:42:26 UTC (rev 1828) +++ trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/ContactsFilterValues.java 2014-04-03 17:43:51 UTC (rev 1829) @@ -65,12 +65,9 @@ protected SortedSet<FilterOption> completeSamplings = new TreeSet<>(); public ContactsFilterValues(Locale locale) { - this(locale, new BoatsFilterValues(locale)); - } - - public ContactsFilterValues(Locale locale, BoatsFilterValues boatsFilterValues) { this.locale = locale; - this.boatsFilterValues = boatsFilterValues; + this.boatsFilterValues = new BoatsFilterValues(locale); + this.sampleRowsFilterValues = new SampleRowsFilterValues(locale); } public void addContact(Contact contact) { @@ -84,19 +81,29 @@ sampleRowsFilterValues.addSampleRow(sampleRow); ContactState contactState = contact.getContactState(); - contactStates.add(FilterOption.forEnum(contactState)); + if (contactState != null) { + contactStates.add(FilterOption.forEnum(locale, contactState)); + } DataReliability dataReliability = contact.getDataReliability(); - dataReliabilities.add(FilterOption.forEnum(dataReliability)); + if (dataReliability != null) { + dataReliabilities.add(FilterOption.forEnum(locale, dataReliability)); + } SamplingStrategy samplingStrategy = contact.getSamplingStrategy(); - actualSamplingStrategies.add(FilterOption.forEnum(samplingStrategy)); + if (samplingStrategy != null) { + actualSamplingStrategies.add(FilterOption.forEnum(locale, samplingStrategy)); + } ObservationType observationType = contact.getObservationType(); - observationTypes.add(FilterOption.forEnum(observationType)); + if (observationType != null) { + observationTypes.add(FilterOption.forEnum(locale, observationType)); + } ObservedDataControl observedDataControl = contact.getObservedDataControl(); - observedDataControls.add(FilterOption.forEnum(observedDataControl)); + if (observedDataControl != null) { + observedDataControls.add(FilterOption.forEnum(locale, observedDataControl)); + } List<WaoUser> allObservers = contact.getAllObservers(); if (CollectionUtils.isNotEmpty(allObservers)) { @@ -105,11 +112,15 @@ } } TerrestrialLocation terrestrialLocation = contact.getTerrestrialLocation(); - terrestrialLocations.add(FilterOption.forValueAndLabel(terrestrialLocation.getTopiaId(), terrestrialLocation.getDescription())); + if (terrestrialLocation != null) { + terrestrialLocations.add(FilterOption.forValueAndLabel(terrestrialLocation.getTopiaId(), terrestrialLocation.getDescription())); + } //FIXME ? ContactStateMotif contactStateMotif = contact.getContactStateMotif(); - contactStateMotives.add(FilterOption.forValueAndLabel(contactStateMotif.getTopiaId(), contactStateMotif.getCode())); + if (contactStateMotif != null) { + contactStateMotives.add(FilterOption.forValueAndLabel(contactStateMotif.getTopiaId(), contactStateMotif.getCode())); + } Boolean validationCompany = contact.getValidationCompany(); addValidationFilterOption(companyAcceptations, validationCompany); Modified: trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/ObsMerContactsService.java =================================================================== --- trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/ObsMerContactsService.java 2014-04-03 17:42:26 UTC (rev 1828) +++ trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/ObsMerContactsService.java 2014-04-03 17:43:51 UTC (rev 1829) @@ -1,16 +1,26 @@ package fr.ifremer.wao.services.service; +import com.google.common.base.Charsets; import com.google.common.collect.ImmutableSet; import fr.ifremer.wao.ContactsFilter; +import fr.ifremer.wao.WaoTechnicalException; import fr.ifremer.wao.entity.Contact; import fr.ifremer.wao.entity.ContactTopiaDao; import fr.ifremer.wao.services.AuthenticatedWaoUser; +import fr.ifremer.wao.services.service.csv.ContactImportExportModel; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.time.DateUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.nuiton.csv.Export; +import org.nuiton.csv.ExportModel; +import org.nuiton.csv.Import; +import org.nuiton.csv.ImportModel; +import org.nuiton.csv.ImportRuntimeException; import org.nuiton.topia.persistence.pager.TopiaPagerBean; +import java.io.InputStream; import java.util.Calendar; import java.util.Collection; import java.util.Date; @@ -50,12 +60,12 @@ PaginationBean paginationBean = new PaginationBean(pager, 10); - ContactsFilterValues boatsFilterValues = getContactsFilterValues(filter); + ContactsFilterValues filterValues = getContactsFilterValues(filter); ObsMerContactsList contactsList = new ObsMerContactsList(); contactsList.setContacts(contacts); contactsList.setPagination(paginationBean); - contactsList.setFilterValues(boatsFilterValues); + contactsList.setFilterValues(filterValues); return contactsList; } @@ -110,4 +120,80 @@ return newContactsFilter; } + + public InputStream exportContacts(ContactsFilter filter) { + ContactTopiaDao dao = getContactDao(); + + List<Contact> sampleRows = dao.findAll(filter); + + ExportModel<Contact> exportModel = + new ContactImportExportModel(filter.getSampleRowFilter().getObsProgram()); + + Export<Contact> export = Export.newExport(exportModel, sampleRows); + + try { + + String csvContent = export.toString(Charsets.UTF_8); + + InputStream csvInputStream = IOUtils.toInputStream(csvContent, Charsets.UTF_8); + + return csvInputStream; + + } catch (Exception e) { + throw new WaoTechnicalException(e); + } + } + + public void importContacts(AuthenticatedWaoUser authenticatedWaoUser, InputStream csv) throws ImportErrorException { + ImportModel<Contact> contactImportModel = newContactsImportModel(authenticatedWaoUser); + + Import<Contact> contactImport = Import.newImport(contactImportModel, csv); + + ContactTopiaDao dao = getContactDao(); + + try { + + for (Contact contact : contactImport) { + + //FIXME + dao.create(contact); + + } + + } catch (ImportRuntimeException e) { + throw new ImportErrorException(e); + } + + commit(); + } + + //FIXME + protected ImportModel<Contact> newContactsImportModel(AuthenticatedWaoUser authenticatedWaoUser) { + +// ObsProgram obsProgram = authenticatedWaoUser.getObsProgram(); +// +// CompanyTopiaDao companyDao = getCompanyDao(); +// List<Company> activeCompanies = companyDao.forActiveEquals(true).findAll(); +// +// TerrestrialLocationTopiaDao terrestrialLocationDao = getTerrestrialLocationDao(); +// List<TerrestrialLocation> terrestrialDistricts = +// terrestrialLocationDao.forLocationTypeEquals(LocationType.DISTRICT).findAll(); +// +// FishingZoneTopiaDao fishingZoneDao = getFishingZoneDao(); +// List<FishingZone> fishingZones = fishingZoneDao.findAll(); +// +// ReferentialService referentialService = getReferentialService(); + +// ImportModel<Contact> samplingPlanImportModel = +// new ContactImportExportModel(obsProgram, +// null, +// activeCompanies, +// fishingZones, +// terrestrialDistricts, +// referentialService); +// +// return samplingPlanImportModel; + return null; + + } } Modified: trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/ContactsAction.java =================================================================== --- trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/ContactsAction.java 2014-04-03 17:42:26 UTC (rev 1828) +++ trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/ContactsAction.java 2014-04-03 17:43:51 UTC (rev 1829) @@ -2,9 +2,9 @@ import com.opensymphony.xwork2.Preparable; import fr.ifremer.wao.ContactsFilter; -import fr.ifremer.wao.WaoUtils; import fr.ifremer.wao.entity.Boat; import fr.ifremer.wao.entity.Contact; +import fr.ifremer.wao.entity.ContactState; import fr.ifremer.wao.entity.FishingZone; import fr.ifremer.wao.entity.ObsProgram; import fr.ifremer.wao.entity.Profession; @@ -14,6 +14,7 @@ import fr.ifremer.wao.services.service.ObsMerContactsService; import fr.ifremer.wao.services.service.PaginationBean; import fr.ifremer.wao.web.WaoJspActionSupport; +import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.time.DateUtils; import org.nuiton.topia.persistence.pager.TopiaPagerBean; @@ -94,23 +95,8 @@ return SUCCESS; } - public String getPaginationUrl(String fullUrl) { - // remove pageIndex parameter - String paginationUrl = fullUrl.replaceAll("pager\\.pageIndex=([^&])+[&]", ""); - // clean & - paginationUrl = paginationUrl.replaceAll("&&", "&"); - // add [?|&]pageIndex= - if (!paginationUrl.contains("?")) { - paginationUrl += "?"; - } else if (!paginationUrl.endsWith("?")) { - paginationUrl += "&"; - } - paginationUrl += "pager\\.pageIndex="; - return paginationUrl; - } + protected Date now = new Date(); - private Date now; - public String getFilterPeriodFromPlaceholder() { String placeholder = formatMonth(DateUtils.addMonths(now, 1)); return placeholder; @@ -191,6 +177,79 @@ return result; } + /** + * Display validation actions. Evo #2063 : only coordinator can validate + * for a company. + * + * @return true if the validation actions can be displayed + */ + //TODO Move this in AuthenticatedWaoUser + public boolean hasValidationActions() { + return (getAuthenticatedWaoUser().isAdmin() || getAuthenticatedWaoUser().isCoordinator()) && + !getAuthenticatedWaoUser().isReadOnly(); + } + + public boolean canEditSampleRow(Contact contact) { + boolean canEdit = getAuthenticatedWaoUser().getCanWrite() && + + // user is admin and no validation program + (!getAuthenticatedWaoUser().isReadOnly() && getAuthenticatedWaoUser().isAdmin() && contact.getValidationProgram() == null + + || // or + // user is coordinator or observer + getAuthenticatedWaoUser().isCoordinatorOrObserver() && contact.getValidationCompany() == null); + return canEdit; + } + + //TODO Move this in AuthenticatedWaoUser + public boolean canDeleteSampleRow(Contact contact) { + + boolean noValidation = contact.getValidationProgram() == null + && contact.getValidationCompany() == null; + return noValidation && getAuthenticatedWaoUser().getCanWrite(); + } + + //TODO Move this in AuthenticatedWaoUser + public boolean canValidateContact(Contact contact) { + // Can't validate during edition of the contact row + switch (getAuthenticatedWaoUser().getUserRole()) { + case ADMIN: + return contact.getValidationProgram() == null && + BooleanUtils.isTrue(contact.getValidationCompany()); + // Evo #2063 : only coordinator can validate + case COORDINATOR: + boolean requiredDataAreFilled; + if (contact.getObsProgram() == ObsProgram.OBSMER) { + requiredDataAreFilled = contact.getRestitution() != null; + } else { + requiredDataAreFilled = contact.getDataInputDate() != null; + } + ContactState state = contact.getContactState(); + boolean observationDone = + state.equals(ContactState.OBSERVATION_DONE) && + requiredDataAreFilled; + return contact.getValidationCompany() == null && + (state.isUnfinishedState() || observationDone); + default: + return false; + } + } + + //TODO Move this in AuthenticatedWaoUser + public boolean canUnvalidateContact(Contact contact) { + switch (getAuthenticatedWaoUser().getUserRole()) { + case ADMIN: + return contact.getValidationProgram() != null; + // Evo #2063 : only coordinator can unvalidate + case COORDINATOR: + return contact.getValidationCompany() != null && + contact.getValidationProgram() == null; + default: + return false; + } + } + + //FIXME public String getTooltipText(String input) { if (input != null) { @@ -201,7 +260,7 @@ /** * Devrait résoudre un problème que pose le composant ck/tooltip. - * + * <p/> * Voir ANO#606 */ public static String escapeForToolTip(String str) { Added: trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/DeleteContactAction.java =================================================================== --- trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/DeleteContactAction.java (rev 0) +++ trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/DeleteContactAction.java 2014-04-03 17:43:51 UTC (rev 1829) @@ -0,0 +1,30 @@ +package fr.ifremer.wao.web.action.obsmer; + +import fr.ifremer.wao.services.service.ObsMerSamplingPlanService; +import fr.ifremer.wao.web.WaoJspActionSupport; + +/** + * Created on 4/3/14. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 4.0 + */ +public class DeleteContactAction extends WaoJspActionSupport { + + private static final long serialVersionUID = 1L; + + protected String contactId; + + protected transient ObsMerSamplingPlanService service; + + public void setService(ObsMerSamplingPlanService service) { + this.service = service; + } + + public void setContactId(String contactId) { + this.contactId = contactId; + } + + //TODO + +} Property changes on: trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/DeleteContactAction.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Added: trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/ExportContactsAction.java =================================================================== --- trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/ExportContactsAction.java (rev 0) +++ trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/ExportContactsAction.java 2014-04-03 17:43:51 UTC (rev 1829) @@ -0,0 +1,54 @@ +package fr.ifremer.wao.web.action.obsmer; + +import com.opensymphony.xwork2.Preparable; +import fr.ifremer.wao.ContactsFilter; +import fr.ifremer.wao.services.service.ObsMerContactsService; +import fr.ifremer.wao.web.action.AbstractDownloadCsvAction; + +import java.io.InputStream; +import java.util.Date; + +/** + * Created on 4/3/14. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 4.0 + */ +public class ExportContactsAction extends AbstractDownloadCsvAction implements Preparable { + + private static final long serialVersionUID = 1L; + + protected transient ObsMerContactsService service; + + protected ContactsFilter filter; + + public void setService(ObsMerContactsService service) { + this.service = service; + } + + public ContactsFilter getFilter() { + if (filter == null) { + prepare(); + } + return filter; + } + + @Override + public void prepare() { + + filter = service.newContactFilter(getAuthenticatedWaoUser()); + } + + @Override + public String getFileName() { + + return "contacts_" + getObsProgram().name() + "_" + dateFormat.format(new Date()) + ".csv"; + } + + @Override + public InputStream getInputStream() { + + return service.exportContacts(filter); + } + +} \ No newline at end of file Property changes on: trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/ExportContactsAction.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Added: trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/ImportContactsAction.java =================================================================== --- trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/ImportContactsAction.java (rev 0) +++ trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/ImportContactsAction.java 2014-04-03 17:43:51 UTC (rev 1829) @@ -0,0 +1,41 @@ +package fr.ifremer.wao.web.action.obsmer; + +import fr.ifremer.wao.services.service.ImportErrorException; +import fr.ifremer.wao.services.service.ObsMerContactsService; +import fr.ifremer.wao.web.action.AbstractImportCsvAction; +import org.apache.struts2.convention.annotation.Result; +import org.apache.struts2.convention.annotation.Results; + +import java.io.InputStream; + +/** + * Created on 4/3/14. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 4.0 + */ +@Results({ + @Result(name = "error", type = "redirectAction", params = {"actionName", "import-contacts!input"}), + @Result(name = "success", type = "redirectAction", params = {"actionName", "contacts"}) + }) +public class ImportContactsAction extends AbstractImportCsvAction { + + private static final long serialVersionUID = 1L; + + protected transient ObsMerContactsService contactsService; + + public void setService(ObsMerContactsService contactsService) { + this.contactsService = contactsService; + } + + @Override + protected void importCsv(InputStream csvInputStream) throws ImportErrorException { + contactsService.importContacts(getAuthenticatedWaoUser(), csvInputStream); + } + + @Override + protected String getSuccessMessage() { + return t("wao.ui.import.contacts.success"); + } + +} \ No newline at end of file Property changes on: trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/ImportContactsAction.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Modified: trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/ImportSamplingPlanAction.java =================================================================== --- trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/ImportSamplingPlanAction.java 2014-04-03 17:42:26 UTC (rev 1828) +++ trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/ImportSamplingPlanAction.java 2014-04-03 17:43:51 UTC (rev 1829) @@ -37,15 +37,15 @@ private static final long serialVersionUID = 1L; - protected transient ObsMerSamplingPlanService service; + protected transient ObsMerSamplingPlanService samplingPlanService; - public void setService(ObsMerSamplingPlanService service) { - this.service = service; + public void setService(ObsMerSamplingPlanService samplingPlanService) { + this.samplingPlanService = samplingPlanService; } @Override protected void importCsv(InputStream csvInputStream) throws ImportErrorException { - service.importSamplingPlan(getAuthenticatedWaoUser(), csvInputStream); + samplingPlanService.importSamplingPlan(getAuthenticatedWaoUser(), csvInputStream); } @Override Added: trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/ValidateContact.java =================================================================== --- trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/ValidateContact.java (rev 0) +++ trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/ValidateContact.java 2014-04-03 17:43:51 UTC (rev 1829) @@ -0,0 +1,33 @@ +package fr.ifremer.wao.web.action.obsmer; + +import fr.ifremer.wao.services.service.ObsMerSamplingPlanService; +import fr.ifremer.wao.web.WaoJspActionSupport; + +/** + * Created on 4/3/14. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 4.0 + */ +public class ValidateContact extends WaoJspActionSupport { + + private static final long serialVersionUID = 1L; + + protected String contactId; + + protected Boolean validationState; + + protected transient ObsMerSamplingPlanService service; + + public void setService(ObsMerSamplingPlanService service) { + this.service = service; + } + + public void setContactId(String contactId) { + this.contactId = contactId; + } + + public void setValidationState(Boolean validationState) { + this.validationState = validationState; + } +} Property changes on: trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/ValidateContact.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Modified: trunk/wao-web/src/main/resources/i18n/wao-web_en_GB.properties =================================================================== --- trunk/wao-web/src/main/resources/i18n/wao-web_en_GB.properties 2014-04-03 17:42:26 UTC (rev 1828) +++ trunk/wao-web/src/main/resources/i18n/wao-web_en_GB.properties 2014-04-03 17:43:51 UTC (rev 1829) @@ -115,6 +115,10 @@ wao.ui.contacts.createFromBoat.fail=Contact creation failed wao.ui.contacts.createFromBoat.warn=Warning \:this sample-row is out of date, are your sure you want to create a new contact ? wao.ui.contacts.title=%s contacts trouvés +wao.ui.contacts.division=Division +wao.ui.contacts.observations=Accidental catches and observations +wao.ui.contacts.observers=Observers +wao.ui.contacts.validation=Validation wao.ui.disclaimer=The website "SUIVI DU REALISE DU PLAN D'ECHANTILLONNAGE DES OBSERVATIONS A LA MER" is declared to the CNIL with the number \: 1414476 wao.ui.disclaimer.boats=Data your provide remains property of your company.Outside your company, only an administrator may access to your data for maintenance purpose. The administrator is someone from Ifremer. wao.ui.email=e-mail address @@ -149,6 +153,7 @@ wao.ui.field.Company.phoneNumber=Phone number wao.ui.field.Company.postalCode=Post code wao.ui.field.Contact.beginDate=Observation start +wao.ui.field.Contact.boat=Boat wao.ui.field.Contact.comment=Observer comment wao.ui.field.Contact.commentAdmin=Program comment wao.ui.field.Contact.commentCompany=Company Comment @@ -179,6 +184,7 @@ wao.ui.field.Contact.validationProgram=Program validation wao.ui.field.FishingZone.facadeName=Facade wao.ui.field.FishingZone.sectorName=Sector +wao.ui.field.Profression.libelle=Libellé métier wao.ui.field.SampleRow.appliedCoverageRate=Applied coverage rate wao.ui.field.SampleRow.averageTideTime=Average tide time wao.ui.field.SampleRow.boat=Boat @@ -315,6 +321,8 @@ wao.ui.import.boatGroupsLabel=of the boat groups wao.ui.import.boatsLabel=of boats wao.ui.import.contactStateMotivesLabel=of the contact state motives +wao.ui.import.contacts=Contacts import +wao.ui.import.contacts.success=Contacts import successful wao.ui.import.csvTypeRequired=You must provide a CSV-compatible file (detected format is %s) wao.ui.import.description=File %s %s \: wao.ui.import.disclaimer=You must upload CSV files using ";" as seperator and UTF-8 as character encoding Modified: trunk/wao-web/src/main/resources/i18n/wao-web_fr_FR.properties =================================================================== --- trunk/wao-web/src/main/resources/i18n/wao-web_fr_FR.properties 2014-04-03 17:42:26 UTC (rev 1828) +++ trunk/wao-web/src/main/resources/i18n/wao-web_fr_FR.properties 2014-04-03 17:43:51 UTC (rev 1829) @@ -32,7 +32,7 @@ wao.ui.action.createSampleRow=Ajouter une ligne au plan wao.ui.action.createWaoUser=Créer un utilisateur wao.ui.action.csvExport=Exporter au format CSV -wao.ui.action.csvImport=Import +wao.ui.action.csvImport=Importer wao.ui.action.delete=Supprimer wao.ui.action.deleteCompany=Supprimer la société wao.ui.action.deleteCompany.confirm=Êtes-vous sûr de vouloir supprimer la société ? @@ -114,6 +114,10 @@ wao.ui.contacts.createFromBoat=Créer un nouveau contact pour ce navire et cette ligne du plan wao.ui.contacts.createFromBoat.fail=Création d'un nouveau contact impossible wao.ui.contacts.createFromBoat.warn=Attention \: cette ligne du plan est arrivée à échéance, êtes-vous sûr de vouloir créer un nouveau contact ? +wao.ui.contacts.division=Division +wao.ui.contacts.observations=Observations et captures accidentelles +wao.ui.contacts.observers=Observateurs +wao.ui.contacts.validation=Validation wao.ui.contacts.title=%s contacts trouvés wao.ui.disclaimer=Le site de « SUIVI DU REALISE DU PLAN D'ECHANTILLONNAGE DES OBSERVATIONS A LA MER » a fait l'objet d'une déclaration à la CNIL sous le numéro suivant \: 1414476 wao.ui.disclaimer.boats=Les données saisies dans cette page sont la propriété exclusive de la société. En dehors de la société, seul l'administrateur peut les consulter pour des questions de maintenance sur le site. L'administrateur est une personne de l'Ifremer. @@ -149,6 +153,7 @@ wao.ui.field.Company.phoneNumber=N° de téléphone wao.ui.field.Company.postalCode=Code postal wao.ui.field.Contact.beginDate=Début d'observation +wao.ui.field.Contact.boat=Navire wao.ui.field.Contact.comment=Commentaire observateur wao.ui.field.Contact.commentAdmin=Commentaire programme wao.ui.field.Contact.commentCompany=Commentaire société @@ -179,6 +184,7 @@ wao.ui.field.Contact.validationProgram=Validation programme wao.ui.field.FishingZone.facadeName=Façade wao.ui.field.FishingZone.sectorName=Zone +wao.ui.field.Profression.libelle=Libellé métier wao.ui.field.SampleRow.appliedCoverageRate=Taux de couverture appliqué wao.ui.field.SampleRow.averageTideTime=Durée moyenne d'une marée wao.ui.field.SampleRow.boat=Navire @@ -315,6 +321,8 @@ wao.ui.import.boatGroupsLabel=des strates des navires wao.ui.import.boatsLabel=des navires wao.ui.import.contactStateMotivesLabel=des motifs de refus +wao.ui.import.contacts=Import des contacts +wao.ui.import.contacts.success=Import des contacts réalisé avec succès wao.ui.import.csvTypeRequired=Il faut fournir un fichier de type CSV (type détecté \: %s) wao.ui.import.description=Fichier %s %s \: wao.ui.import.disclaimer=Veuillez utiliser des fichiers CSV utilisant « ; » comme séparateur et UTF-8 comme encodage de caractères. Modified: trunk/wao-web/src/main/webapp/WEB-INF/content/obsmer/contacts.jsp =================================================================== --- trunk/wao-web/src/main/webapp/WEB-INF/content/obsmer/contacts.jsp 2014-04-03 17:42:26 UTC (rev 1828) +++ trunk/wao-web/src/main/webapp/WEB-INF/content/obsmer/contacts.jsp 2014-04-03 17:43:51 UTC (rev 1829) @@ -65,15 +65,15 @@ <fieldset> - <s:select name="filter.boatsFilter.boatIds" + <s:select name="filter.boatFilter.boatIds" label="%{getText('wao.ui.field.Boat.name')}" - list="filterValues.boats" + list="filterValues.boatNames" listKey="value" listValue="label" multiple="true" - dataBinding="boats"/> + dataBinding="boatNames"/> - <s:select name="filter.boatsFilter.registrationCode" + <s:select name="filter.boatFilter.registrationCode" label="%{getText('wao.ui.field.Boat.immatriculation')}" list="filterValues.boatRegistrationCodes" listKey="value" @@ -87,13 +87,13 @@ <s:if test="authenticatedWaoUser.authorizedToViewOtherCompanies"> - <s:select name="filter.companyIds" + <s:select name="filter.sampleRowFilter.companyIds" label="%{getText('wao.ui.entity.Company')}" - list="filterValues.companies" + list="filterValues.sampleRowsFilterValues.companies" listKey="value" listValue="label" multiple="true" - dataBinding="companies"/> + dataBinding="sampleRowsFilterValues.companies"/> </s:if> @@ -106,7 +106,7 @@ dataBinding="sampleRowsFilterValues.sampleRowCodes"/> <s:select name="filter.sampleRowFilter.programNames" - label="%{getText('wao.ui.field.SampleRow.code')}" + label="%{getText('wao.ui.field.SampleRow.programName')}" list="filterValues.sampleRowsFilterValues.programNames" listKey="value" listValue="label" @@ -117,30 +117,29 @@ <fieldset> - <s:select name="filter.boatFilter.fishingZoneFacadeNames" + <s:select name="filter.sampleRowFilter.fishingZoneFacadeNames" label="%{getText('wao.ui.field.FishingZone.facadeName')}" - list="filterValues.boatsFilterValues.fishingZoneFacadeNames" + list="filterValues.sampleRowsFilterValues.fishingZoneFacadeNames" listKey="value" listValue="label" multiple="true" - dataBinding="boatsFilterValues.fishingZoneFacadeNames"/> + dataBinding="sampleRowsFilterValues.fishingZoneFacadeNames"/> - <s:select name="filter.boatFilter.fishingZoneSectorNames" + <s:select name="filter.sampleRowFilter.fishingZoneSectorNames" label="%{getText('wao.ui.field.FishingZone.sectorName')}" - list="filterValues.boatsFilterValues.fishingZoneSectorNames" + list="filterValues.sampleRowsFilterValues.fishingZoneSectorNames" listKey="value" listValue="label" multiple="true" - dataBinding="boatsFilterValues.fishingZoneSectorNames"/> + dataBinding="sampleRowsFilterValues.fishingZoneSectorNames"/> - <%-- FIXME Is it boatFilter.districtIds ?--%> - <s:select name="filter.terrestrialLocationIds" + <s:select name="filter.boatFilter.districtIds" label="%{getText('wao.ui.field.Boat.district')}" - list="filterValues.terrestrialLocations" + list="filterValues.boatsFilterValues.districts" listKey="value" listValue="label" multiple="true" - dataBinding="terrestrialLocations"/> + dataBinding="boatsFilterValues.districts"/> </fieldset> @@ -238,14 +237,14 @@ <i class="icon-filter"></i> <s:text name="wao.ui.action.filter"/> </s:submit> - <s:submit action="import-contacts" type="button" cssClass="btn"> - <i class="icon-download"></i> <s:text name="wao.ui.action.csvImport"/> - </s:submit> - <s:submit action="export-contacts" type="button" cssClass="btn"> <i class="icon-download"></i> <s:text name="wao.ui.action.csvExport"/> </s:submit> + <s:submit action="import-contacts" type="button" cssClass="btn"> + <i class="icon-upload"></i> <s:text name="wao.ui.action.csvImport"/> + </s:submit> + </div> </s:form> @@ -261,7 +260,7 @@ <ul> <s:url var="fullUrl" includeParams="get"/> <s:set var="paginationUrl" value="%{getPaginationUrl(#fullUrl)}"/> - <s:if test="pagination.firstPageIndex > 2"> + <s:if test="pagination.firstPage > 2"> <li> <a href="${paginationUrl}1">1</a> </li> @@ -273,9 +272,9 @@ </li> </s:if> - <s:iterator var="currentPageIndex" begin="pagination.firstPage" end="pagination.lastPage"> - <li class="<s:if test="#currentPageIndex == pagination.currentPage">active</s:if>"> - <a href="${paginationUrl}${currentPageIndex}"> + <s:iterator var="currentPage" begin="pagination.firstPage" end="pagination.lastPage"> + <li class="<s:if test="#currentPage == pagination.currentPage">active</s:if>"> + <a href="${paginationUrl}${currentPage}"> <s:property/> </a> </li> @@ -301,93 +300,35 @@ <table id="contacts-list" class="large-table contacts-list"> <thead> <tr> - <th> - Création - </th> - <th> - Observateurs - </th> - <th> - Société - </th> - <th> - Ligne du plan - </th> - <th> - Programme - </th> - <th> - Code métier - </th> - <th> - Libellé métier - </th> - <th> - Espèces cibles - </th> - <th> - Façade - </th> - <th> - Zone - </th> - <th> - Division - </th> - <th> - Navire - </th> - <th> - N° - </th> - <th> - CQ - </th> - <th> - Etat - </th> - <th> - Motif de refus - </th> - <th> - Début de l'observation - </th> - <th> - Fin de l'observation - </th> - <th> - Nb obs. - </th> - <th> - Observations et captures accidentelles - </th> - <th> - Commentaire observateur - </th> - <th> - Saisie des données observées - </th> - <th> - Contrôle des données observées - </th> - <th> - Transmission de la restitution - </th> - <th> - Validation - </th> - <th> - Commentaire société - </th> - <th> - Commentaire programme - </th> - <th> - Qualité de la donnée - </th> - <th> - Actions - </th> + <th><s:text name="wao.ui.field.Contact.creationDate"/></th> + <th><s:text name="wao.ui.contacts.observers"/></th> + <th><s:text name="wao.ui.field.SampleRow.company"/></th> + <th><s:text name="wao.ui.field.Contact.sampleRow"/></th> + <th><s:text name="wao.ui.field.SampleRow.programName"/></th> + <th><s:text name="wao.ui.field.SampleRow.professionCode"/></th> + <th><s:text name="wao.ui.field.Profression.libelle"/></th> + <th><s:text name="wao.ui.field.SampleRow.species"/></th> + <th><s:text name="wao.ui.field.FishingZone.facadeName"/></th> + <th><s:text name="wao.ui.field.FishingZone.sectorName"/></th> + <th><s:text name="wao.ui.contacts.division"/></th> + <th><s:text name="wao.ui.field.Boat.name"/></th> + <th><s:text name="wao.ui.field.Boat.immatriculation"/></th> + <th><s:text name="wao.ui.field.Boat.district"/></th> + <th><s:text name="wao.ui.field.Contact.contactState"/></th> + <th><s:text name="wao.ui.field.Contact.contactStateMotif"/></th> + <th><s:text name="wao.ui.field.Contact.beginDate"/></th> + <th><s:text name="wao.ui.field.Contact.endDate"/></th> + <th><s:text name="wao.ui.field.Contact.nbObservants"/></th> + <th><s:text name="wao.ui.contacts.observations"/></th> + <th><s:text name="wao.ui.field.Contact.comment"/></th> + <th><s:text name="wao.ui.field.Contact.dataInputDate"/></th> + <th><s:text name="wao.ui.field.Contact.observedDataControl"/></th> + <th><s:text name="wao.ui.field.Contact.restitution"/></th> + <th><s:text name="wao.ui.contacts.validation"/></th> + <th><s:text name="wao.ui.field.Contact.commentCompany"/></th> + <th><s:text name="wao.ui.field.Contact.commentAdmin"/></th> + <th><s:text name="wao.ui.field.Contact.dataReliability"/></th> + <th><s:text name="wao.ui.actions"/></th> </tr> </thead> <tbody> @@ -403,11 +344,7 @@ </s:if> <s:else> <s:property value="mainObserver.fullName"/>... - ( - <s:text name="wao.ui.field.Contact.secondaryObservers"> - <s:param value="secondaryObservers"/> - </s:text> - ) + <%--TODO<s:text name="wao.ui.field.Contact.secondaryObservers"><s:param value="secondaryObservers"/></s:text>--%> </s:else> </td> @@ -416,9 +353,7 @@ </td> <td> <s:property value="sampleRow.code"/> - ( - <s:property value="%{getTooltipSampleRow(sampleRow)}"/> - ) + <%--TODO<s:property value="%{getTooltipSampleRow(sampleRow)}"/>--%> </td> <td> <s:property value="sampleRow.programName"/> @@ -442,7 +377,8 @@ <s:property value="%{getDivision(sampleRow)}"/> </td> <td> - <s:property value="boat.name"/> (<s:property value="%{getTooltipBoat(boat)}"/>) + <s:property value="boat.name"/> + <%--TODO <s:property value="%{getTooltipBoat(boat)}"/>--%> </td> <td> <s:property value="%{'' + boat.immatriculation}"/> @@ -453,11 +389,7 @@ <td> <s:if test="contactStateMotif != null"> <s:text name="%{contactState.i18nKey}"/> - ( - <s:text name="wao.ui.field.Contact.contactStateMotif"> - <s:param value="%{contactStateMotif.name}"/> - </s:text> - ) + <%--TODO <s:text name="wao.ui.field.Contact.contactStateMotif"><s:param value="%{contactStateMotif.name}"/></s:text>--%> </s:if> <s:else> <s:text name="%{contactState.i18nKey}"/> @@ -486,11 +418,7 @@ <s:if test="mammalsInfo"> <img src="<s:url value="fishing-net-22px.png"/>" alt="<s:text name="wao.ui.field.Contact.mammalsCapture"/>"/> - ( - <s:text name="wao.ui.field.Contact.mammalsInfo"> - <s:param value="%{getMammalsInfo(#contact)}"/> - </s:text> - ) + <%--TODO<s:text name="wao.ui.field.Contact.mammalsInfo"><s:param value="%{getMammalsInfo(#contact)}"/></s:text>--%> </s:if> <s:else> <img src="<s:url value="fishing-net-22px.png"/>" @@ -500,12 +428,8 @@ </td> <td> <s:if test="comment"> - <s:property value="%{getCommentDisplayText(comment)}" - ( - <s:text name="wao.ui.misc.comment"> - <s:param value="%{getTooltipText(comment)}"/> - </s:text> - ) + <s:property value="%{getCommentDisplayText(comment)}"/> + <%--TODO<s:text name="wao.ui.misc.comment"><s:param value="%{getTooltipText(comment)}"/></s:text>--%> </s:if> </td> <td> @@ -534,21 +458,13 @@ <td> <s:if test="commentCoordinator"> <s:property value="%{getCommentDisplayText(commentCoordinator)}"/> - ( - <s:text name="wao.ui.field.Contact.commentCoordinator"> - <s:param value="%{getTooltipText(commentCoordinator)}"/> - </s:text> - ) + <%--TODO<s:text name="wao.ui.field.Contact.commentCoordinator"><s:param value="%{getTooltipText(commentCoordinator)}"/></s:text>--%> </s:if> </td> <td> <s:if test="commentAdmin"> <s:property value="%{getCommentDisplayText(commentAdmin)}"/> - ( - <s:text name="wao.ui.field.Contact.commentAdmin"> - <s:param value="%{getTooltipText(commentAdmin)}"/> - </s:text> - ) + <%--TODO<s:text name="wao.ui.field.Contact.commentAdmin"><s:param value="%{getTooltipText(commentAdmin)}"/></s:text>--%> </s:if> </td> <td> @@ -558,8 +474,70 @@ </s:if> </s:if> </td> - <td> - Actions + <td class="actions"> + <div class="dropdown"> + <a class="btn dropdown-toggle" data-toggle="dropdown" href="#"> + <s:text name="wao.ui.actions" /> + <b class="caret"></b> + </a> + <ul class="dropdown-menu"> + <s:if test="canEditSampleRow(#contact)"> + <li> + <s:url action="edit-contact!input" id="editContactUrl"> + <s:param name="contactId" value="topiaId" /> + </s:url> + <s:a href="%{editContactUrl}"> + <i class="icon-edit"></i> <s:text name="wao.ui.action.edit" /> + </s:a> + </li> + </s:if> + <s:if test="canDeleteSampleRow(#contact)"> + <li> + <s:url action="delete-contact!input" id="deleteContactUrl"> + <s:param name="contactId" value="topiaId" /> + </s:url> + <s:a href="%{deleteContactUrl}"> + <i class="icon-delete"></i> <s:text name="wao.ui.action.delete" /> + </s:a> + </li> + </s:if> + <s:if test="hasValidationActions()"> + <s:if test="canValidateContact(contact)"> + <li> + <s:url action="validate-contact!input" id="acceptContactUrl"> + <s:param name="contactId" value="topiaId"/> + <s:param name="validateState" value="true"/> + </s:url> + <s:a href="%{acceptContactUrl}"> + <s:text name="wao.ui.action.acceptContact"/> + </s:a> + </li> + <li> + <s:url action="validate-contact!input" id="refuseContactUrl"> + <s:param name="contactId" value="topiaId"/> + <s:param name="validateState" value="false"/> + </s:url> + <s:a href="%{refuseContactUrl}"> + <s:text name="wao.ui.action.refuseContact"/> + </s:a> + </li> + </s:if> + <s:else> + <%--FIXME Display nothing?--%> + </s:else> + <s:if test="canUnvalidateContact(contact)"> + <li> + <s:url action="validate-contact!input" id="unvalidateContactUrl"> + <s:param name="contactId" value="topiaId" /> + </s:url> + <s:a href="%{unvalidateContactUrl}"> + <s:text name="wao.ui.action.unvalidateContact" /> + </s:a> + </li> + </s:if> + </s:if> + </ul> + </div> </td> </tr> </s:iterator> Added: trunk/wao-web/src/main/webapp/WEB-INF/content/obsmer/import-contacts.jsp =================================================================== --- trunk/wao-web/src/main/webapp/WEB-INF/content/obsmer/import-contacts.jsp (rev 0) +++ trunk/wao-web/src/main/webapp/WEB-INF/content/obsmer/import-contacts.jsp 2014-04-03 17:43:51 UTC (rev 1829) @@ -0,0 +1,32 @@ +<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@taglib uri="/struts-tags" prefix="s" %> + +<html> + +<head> + <title><s:text name="wao.ui.import.contacts" /></title> +</head> + +<h1><s:text name="wao.ui.import.contacts" /></h1> + +<div class="alert alert-info"> + <s:text name="wao.ui.import.disclaimer" /> +</div> + +<s:form action="import-contacts" method="POST" enctype="multipart/form-data"> + + <fieldset> + <legend> + <s:text name="wao.ui.import.contacts" /> + </legend> + + <s:file name="csvFile" /> + + <s:submit type="button"> + <i class="icon-upload"></i> <s:text name="wao.ui.action.csvImport"/> + </s:submit> + </fieldset> + +</s:form> + +</html> \ No newline at end of file Property changes on: trunk/wao-web/src/main/webapp/WEB-INF/content/obsmer/import-contacts.jsp ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native