[Suiviobsmer-commits] r432 - in trunk: . wao-business/src/main/java/fr/ifremer/wao/bean wao-business/src/main/java/fr/ifremer/wao/service 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/base wao-ui/src/main/java/fr/ifremer/wao/ui/pages wao-ui/src/main/resources/fr/ifremer/wao/ui/pages wao-ui/src/main/webapp wao-ui/src/main/webapp/css
Author: fdesbois Date: 2010-04-06 17:26:09 +0000 (Tue, 06 Apr 2010) New Revision: 432 Modified: trunk/changelog.txt trunk/wao-business/src/main/java/fr/ifremer/wao/bean/SamplingFilterImpl.java trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceReferentialImpl.java trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceSamplingImpl.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/ServiceSamplingImplTest.java trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/base/AbstractFilteredPage.java trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Boats.java trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Contacts.java trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/SamplingPlan.java trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Synthesis.java trunk/wao-ui/src/main/resources/fr/ifremer/wao/ui/pages/SamplingPlan.properties trunk/wao-ui/src/main/webapp/Contacts.tml trunk/wao-ui/src/main/webapp/SamplingPlan.tml trunk/wao-ui/src/main/webapp/css/common.css trunk/wao-ui/src/main/webapp/css/contacts.css trunk/wao-ui/src/main/webapp/css/sampling.css Log: Evo #2059 : Filters on SamplingPlan (remove old profession filter, add codeDCF5 filter instead) Modified: trunk/changelog.txt =================================================================== --- trunk/changelog.txt 2010-04-06 12:14:41 UTC (rev 431) +++ trunk/changelog.txt 2010-04-06 17:26:09 UTC (rev 432) @@ -9,6 +9,7 @@ Evolutions ++++++++++ +- [fdesbois] Evo #2059 : Filtres sur tableau plan échantillonnage - [fdesbois] Evo #2241 : Revoir chargement des observateurs lorsqu'un utilisateur (observateur/coordinateur) est connecté Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/bean/SamplingFilterImpl.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/bean/SamplingFilterImpl.java 2010-04-06 12:14:41 UTC (rev 431) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/bean/SamplingFilterImpl.java 2010-04-06 17:26:09 UTC (rev 432) @@ -23,6 +23,7 @@ import fr.ifremer.wao.WaoUtils; import fr.ifremer.wao.entity.FishingZone; +import fr.ifremer.wao.entity.Profession; import fr.ifremer.wao.entity.SampleRow; import java.util.Calendar; import java.util.GregorianCalendar; @@ -43,32 +44,86 @@ */ public class SamplingFilterImpl extends SamplingFilter { + /** + * Prepare the {@code query} for fishingZone filters. Need to know the + * FishingZone {@code main} alias for the query. + * + * @param query to prepare with fishingZone filters (facadeName, sectorName) + * @param main alias of the fishingZone in the query + * @return the query with elements added + * @since 1.1.2 + */ + protected TopiaQuery prepareQueryForFishingZone(TopiaQuery query, + String main) { + + if (StringUtils.isNotEmpty(getSectorName())) { + query.add(main + "." + FishingZone.SECTOR_NAME, getSectorName()); + } else if (StringUtils.isNotEmpty(getFacadeName())) { + query.add(main + "." + FishingZone.FACADE_NAME, getFacadeName()); + } + + return query; + } + + /** + * Prepare the {@code query} with sampleRow filters. Need the {@code main} + * alias to set SampleRow properties. + * + * @param query to prepare with sampleRow filters + * @param main alias for sampleRow entity in the query + * @return the query with filtered elements added + */ @Override public TopiaQuery prepareQueryForSampling(TopiaQuery query, String main) { + query = prepareQueryForSampling(query, main, null); + return query; + } - // SampleRow filter depends on SampleRow or sectorName or facadeName + /** + * Prepare the {@code query} with sampleRow filters. Need the {@code main} + * alias to set SampleRow properties. The zoneAlias can also be used if + * the query already have the fishingZone. + * + * @param query to prepare with sampleRow filters + * @param main alias for sampleRow entity in the query + * @param zoneAlias for fishingZone entity in the query (can be null) + * @return the query with filtered elements added + */ + @Override + public TopiaQuery prepareQueryForSampling(TopiaQuery query, String main, + String zoneAlias) { + + // SampleRow filter depends on SampleRow OR sectorName OR facadeName + // sectorName and facadeName are the two FishingZone filters known if (getSampleRow() != null) { query.add(main, getSampleRow()); - } else if (StringUtils.isNotEmpty(getSectorName())) { + // FishingZone filter (sectorName OR facadeName) + } else if (StringUtils.isNotEmpty(getSectorName()) || + StringUtils.isNotEmpty(getFacadeName())) { - TopiaQuery subquery = new TopiaQuery(SampleRow.class, "SR"). - addFrom(FishingZone.class, "F"); - - subquery.add("F." + FishingZone.SECTOR_NAME, getSectorName()). + // If zoneAlias is set, no need to create a subquery to link + // with fishingZone + if (zoneAlias != null) { + query = prepareQueryForFishingZone(query, zoneAlias); + } else { + // Otherwise, create a subquery to retrieve sampleRows + // corresponding to fishingZone filters + TopiaQuery subquery = new TopiaQuery(SampleRow.class, "SR"). + addFrom(FishingZone.class, "F"). add("F IN elements(SR." + SampleRow.FISHING_ZONE + ")"); - query.add(main + " IN (" + subquery.fullQuery() + ")").addParams(subquery.getParams()); - } else if (StringUtils.isNotEmpty(getFacadeName())) { - TopiaQuery subquery = new TopiaQuery(SampleRow.class, "SR"). - addFrom(FishingZone.class, "F"); - subquery.add("F." + FishingZone.FACADE_NAME, getFacadeName()).add("F IN elements(SR." + SampleRow.FISHING_ZONE + ")"); + subquery = prepareQueryForFishingZone(subquery, "F"); - query.add(main + " IN (" + subquery.fullQuery() + ")").addParams(subquery.getParams()); + query.add(main + " IN (" + subquery.fullQuery() + ")"). + addParams(subquery.getParams()); + } } - // Profession filter - if (getProfession() != null) { - query.add(main + "." + SampleRow.PROFESSION, getProfession()); + // CodeDCF5 filter + if (getCodeDCF5() != null) { + String pProfession = main + "." + SampleRow.PROFESSION + "." + + Profession.CODE_DCF5; + query.add(pProfession, getCodeDCF5()); } // Program filter @@ -92,7 +147,6 @@ if (getNbMonthFinishedFromToday() != null) { // Only rows which are not finished will be kept - // Date current = WaoContext.getCurrentDate(); Calendar calendar = new GregorianCalendar(); calendar.setTime(WaoUtils.getCurrentDate()); calendar.add(Calendar.MONTH, getNbMonthFinishedFromToday()); @@ -103,16 +157,28 @@ } @Override - public boolean isSamplingFiltered() { - // all field except fromDate - return getSampleRow() != null || StringUtils.isNotEmpty(getSectorName()) - || StringUtils.isNotEmpty(getFacadeName()) || - getPeriod() != null || getProfession() != null; + public boolean isSamplingFiltered() { + // all field except fromDate and nbMonthsFinishedFromToday + boolean result = getSampleRow() != null || + StringUtils.isNotEmpty(getSectorName()) || + StringUtils.isNotEmpty(getFacadeName()) || + StringUtils.isNotEmpty(getProgramName()) || + StringUtils.isNotEmpty(getCodeDCF5()) || + getPeriod() != null; + return result; } -// @Override -// public boolean isFiltered() { -// return super.isFiltered() || isSamplingFiltered(); -// } + @Override + public boolean isPeriodFilteredOnly() { + boolean periodNotNull = getPeriod() != null; + boolean othersNull = getSampleRow() == null && + StringUtils.isEmpty(getSectorName()) && + StringUtils.isEmpty(getFacadeName()) && + StringUtils.isEmpty(getProgramName()) && + StringUtils.isEmpty(getCodeDCF5()) && + getNbMonthFinishedFromToday() == null && + getFromDate() == null; + return periodNotNull && othersNull; + } } 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 2010-04-06 12:14:41 UTC (rev 431) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceReferentialImpl.java 2010-04-06 17:26:09 UTC (rev 432) @@ -41,6 +41,7 @@ import org.nuiton.topia.TopiaContext; import org.nuiton.topia.TopiaException; import org.nuiton.topia.framework.TopiaQuery; +import org.nuiton.topia.framework.TopiaQuery.Op; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -191,4 +192,17 @@ return result; } + @Override + protected List<String> executeGetCodesDCF5Contains(TopiaContext transaction, + String input) throws Exception { + + ProfessionDAO dao = WaoDAOHelper.getProfessionDAO(transaction); + TopiaQuery query = dao.createQuery().addDistinct(). + setSelect(Profession.CODE_DCF5). + add(Profession.CODE_DCF5, Op.LIKE, "%" + input + "%"). + addOrder(Profession.CODE_DCF5); + + return (List<String>)query.execute(); + } + } Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceSamplingImpl.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceSamplingImpl.java 2010-04-06 12:14:41 UTC (rev 431) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceSamplingImpl.java 2010-04-06 17:26:09 UTC (rev 432) @@ -290,39 +290,34 @@ @Override public FacadeRow executeGetSampleRowsOrderedByFishingZone( TopiaContext transaction, - PeriodDates period, Company company) - throws TopiaException, IllegalArgumentException { + SamplingFilter filter, Company company) + throws TopiaException { FacadeRow result = new FacadeRowImpl(); - if (period.getFromDate() == null || period.getThruDate() == null) { - throw new IllegalArgumentException("PeriodBegin date and/or " + - "PeriodEnd date can't be null !"); - } SampleRowDAO dao = WaoDAOHelper.getSampleRowDAO(transaction); TopiaQuery query = dao.createQuery("S").addDistinct(). - addFrom(FishingZone.class.getName() + " F"). - add("S IN elements(F." + FishingZone.SAMPLE_ROW + ")"); + addFrom(FishingZone.class, "Z"). + add("S IN elements(Z." + FishingZone.SAMPLE_ROW + ")"); + filter.prepareQueryForSampling(query, "S", "Z"); + if (company != null) { query.add("S." + SampleRow.COMPANY, company); } - // Prepare period dates - period.initDayOfMonthExtremities(); - query.add("S." + SampleRow.PERIOD_BEGIN, Op.LT, period.getThruDate()). - add("S." + SampleRow.PERIOD_END, Op.GT, period.getFromDate()); - // Order By facade, sector, districtCode, sampleRowCode - String zoneOrder = "F." + FishingZone.FACADE_NAME + " , F." + FishingZone.SECTOR_NAME + ", F." + FishingZone.DISTRICT_CODE; - query.addOrder(zoneOrder).addOrder("S." + SampleRow.CODE).addSelect(zoneOrder); - // Load data - //query.addLoad(SampleRow.PROFESSION, SampleRow.COMPANY); + String zoneOrder = "Z." + FishingZone.FACADE_NAME + " , " + + "Z." + FishingZone.SECTOR_NAME + ", " + + "Z." + FishingZone.DISTRICT_CODE; + query.addOrder(zoneOrder, "S." + SampleRow.CODE). + addSelect(zoneOrder); if (log.isDebugEnabled()) { log.debug("Query : " + query); } + // Load data query.addLoad(SampleRow.SAMPLE_MONTH); List<SampleRow> results = dao.findAllByQuery(query); 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 2010-04-06 12:14:41 UTC (rev 431) +++ trunk/wao-business/src/main/resources/i18n/wao-business-en_GB.properties 2010-04-06 17:26:09 UTC (rev 432) @@ -31,6 +31,7 @@ wao.error.serviceContact.saveContact= wao.error.serviceNews.getNews= wao.error.serviceNews.saveNews= +wao.error.serviceReferential.getCodesDCF5Contains= wao.error.serviceReferential.getFacades= wao.error.serviceReferential.getFishingZones= wao.error.serviceReferential.getProfessions= 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 2010-04-06 12:14:41 UTC (rev 431) +++ trunk/wao-business/src/main/resources/i18n/wao-business-fr_FR.properties 2010-04-06 17:26:09 UTC (rev 432) @@ -30,6 +30,7 @@ wao.error.serviceContact.saveContact=Impossible de sauvegarder le contact 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.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\u00EAche wao.error.serviceReferential.getProfessions=Impossible de charger la liste des m\u00E9tiers Modified: trunk/wao-business/src/main/xmi/wao.zargo =================================================================== (Binary files differ) Modified: trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceSamplingImplTest.java =================================================================== --- trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceSamplingImplTest.java 2010-04-06 12:14:41 UTC (rev 431) +++ trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceSamplingImplTest.java 2010-04-06 17:26:09 UTC (rev 432) @@ -254,9 +254,10 @@ // NO COMPANY (= null) Calendar begin = new GregorianCalendar(2000, 0, 1, 0, 0, 0); Calendar end = new GregorianCalendar(2020, 11, 31, 0, 0, 0); - PeriodDates period = new PeriodDates(begin, end); + SamplingFilter filter = new SamplingFilterImpl(); + filter.setPeriod(new PeriodDates(begin, end)); // RESULT : [2010_0002, 2010_0004, 2010_0001, 2010_0003] - FacadeRow facade = service.getSampleRowsOrderedByFishingZone(period, null); + FacadeRow facade = service.getSampleRowsOrderedByFishingZone(filter, null); List<SampleRow> rows = facade.getValues(); assertEquals(4, rows.size()); SampleRow resultRow0 = rows.get(0); @@ -284,9 +285,9 @@ // NO COMPANY (= null) begin = new GregorianCalendar(2009, 0, 1, 0, 0, 0); end = new GregorianCalendar(2020, 11, 31, 0, 0, 0); - period = new PeriodDates(begin, end); + filter.setPeriod(new PeriodDates(begin, end)); // RESULT : [2010_0002, 2010_0004, 2010_0001] - facade = service.getSampleRowsOrderedByFishingZone(period, null); + facade = service.getSampleRowsOrderedByFishingZone(filter, null); rows = facade.getValues(); assertEquals(3, rows.size()); resultRow0 = rows.get(0); Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/base/AbstractFilteredPage.java =================================================================== --- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/base/AbstractFilteredPage.java 2010-04-06 12:14:41 UTC (rev 431) +++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/base/AbstractFilteredPage.java 2010-04-06 17:26:09 UTC (rev 432) @@ -22,7 +22,7 @@ package fr.ifremer.wao.ui.base; import fr.ifremer.wao.WaoException; -import fr.ifremer.wao.bean.BoatFilter; +import fr.ifremer.wao.bean.SamplingFilter; import fr.ifremer.wao.entity.Company; import fr.ifremer.wao.entity.SampleRow; import fr.ifremer.wao.entity.WaoUser; @@ -317,7 +317,7 @@ return programSelectModel; } - protected abstract BoatFilter getFilter() throws WaoException; + protected abstract SamplingFilter getFilter() throws WaoException; /** * Used to show only active company and observers. Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Boats.java =================================================================== --- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Boats.java 2010-04-06 12:14:41 UTC (rev 431) +++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Boats.java 2010-04-06 17:26:09 UTC (rev 432) @@ -147,8 +147,8 @@ sampleRow = null; getSampleRow(); // Profession select reset - professionSelectModel = null; - getProfessionSelectModel(); +// professionSelectModel = null; +// getProfessionSelectModel(); // Manage sampleRow from context if (isSampleRowExists()) { @@ -387,14 +387,14 @@ return getSampleRow() != null; } - public GenericSelectModel<Profession> getProfessionSelectModel() throws WaoException { - if (professionSelectModel == null) { - List<Profession> professions = serviceReferential.getProfessions(); - professionSelectModel = new GenericSelectModel<Profession>(professions, Profession.class, - "code", "topiaId", propertyAccess); - } - return professionSelectModel; - } +// public GenericSelectModel<Profession> getProfessionSelectModel() throws WaoException { +// if (professionSelectModel == null) { +// List<Profession> professions = serviceReferential.getProfessions(); +// professionSelectModel = new GenericSelectModel<Profession>(professions, Profession.class, +// "code", "topiaId", propertyAccess); +// } +// return professionSelectModel; +// } public boolean isFiltersHidden() { return filtersHidden; @@ -437,14 +437,14 @@ log.debug("FILTER : facadeName=" + boatFilter.getFacadeName()); log.debug("FILTER : sectorName=" + boatFilter.getSectorName()); log.debug("FILTER : sampleRow=" + boatFilter.getSampleRow()); - log.debug("FILTER : profession=" + boatFilter.getProfession()); +// log.debug("FILTER : profession=" + boatFilter.getProfession()); log.debug("FILTER : boatName=" + boatFilter.getBoatName()); log.debug("FILTER : boatImmatriculation=" + boatFilter.getBoatImmatriculation()); log.debug("FILTER : boatDistrictCode=" + boatFilter.getBoatDistrictCode()); log.debug("FILTER : company=" + boatFilter.getCompany()); } - Profession profession = getProfessionSelectModel().findObject(professionId); - boatFilter.setProfession(profession); +// Profession profession = getProfessionSelectModel().findObject(professionId); +// boatFilter.setProfession(profession); } /** Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Contacts.java =================================================================== --- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Contacts.java 2010-04-06 12:14:41 UTC (rev 431) +++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Contacts.java 2010-04-06 17:26:09 UTC (rev 432) @@ -23,11 +23,11 @@ import fr.ifremer.wao.WaoBusinessException; import fr.ifremer.wao.WaoException; -import fr.ifremer.wao.bean.BoatFilter; import fr.ifremer.wao.bean.ContactFilter; import fr.ifremer.wao.bean.ContactFilterImpl; import fr.ifremer.wao.bean.ContactState; import fr.ifremer.wao.bean.ImportResults; +import fr.ifremer.wao.bean.SamplingFilter; import fr.ifremer.wao.bean.UserRole; import fr.ifremer.wao.entity.Boat; import fr.ifremer.wao.entity.Contact; @@ -126,7 +126,10 @@ if (log.isDebugEnabled()) { log.debug("RESET DATA"); } - initSelectFilters(true, true, false); + if (isFiltersVisible()) { + // Initialize filters + initSelectFilters(true, false, true); + } contacts = null; getContacts(); // } @@ -163,12 +166,14 @@ } public boolean isFiltersVisible() { - boolean companyFiltered = contactFilter.getCompany() != null && user.isAdmin(); - return (contactFilter.isFiltered() || companyFiltered) && StringUtils.isEmpty(contactFilter.getBoatName()); /*&& !getDefaultFromDate().equals(contactFilter.getFromDate());*/ + boolean companyFiltered = getContactFilter().getCompany() != null && + user.isAdmin(); + return (getContactFilter().isFiltered() || companyFiltered) && + StringUtils.isEmpty(getContactFilter().getBoatName()); } @Override - protected BoatFilter getFilter() throws WaoException { + protected SamplingFilter getFilter() throws WaoException { return getContactFilter(); } @@ -178,7 +183,8 @@ } Object onActionFromShowFilters() { - //contactFilter = null; + // Initialize filters + initSelectFilters(true, false, true); return filtersZone.getBody(); } Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/SamplingPlan.java =================================================================== --- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/SamplingPlan.java 2010-04-06 12:14:41 UTC (rev 431) +++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/SamplingPlan.java 2010-04-06 17:26:09 UTC (rev 432) @@ -24,15 +24,18 @@ import fr.ifremer.wao.WaoBusinessException; import fr.ifremer.wao.WaoException; -import fr.ifremer.wao.WaoException; import fr.ifremer.wao.bean.FacadeRow; import fr.ifremer.wao.bean.ImportResults; +import fr.ifremer.wao.bean.SamplingFilter; +import fr.ifremer.wao.bean.SamplingFilterImpl; import fr.ifremer.wao.entity.Company; import fr.ifremer.wao.entity.FishingZone; import fr.ifremer.wao.entity.SampleMonth; import fr.ifremer.wao.entity.SampleRow; import fr.ifremer.wao.entity.WaoUser; +import fr.ifremer.wao.service.ServiceReferential; import fr.ifremer.wao.service.ServiceSampling; +import fr.ifremer.wao.ui.base.AbstractFilteredPage; import fr.ifremer.wao.ui.base.WaoPage; import fr.ifremer.wao.ui.components.Layout; import fr.ifremer.wao.ui.data.ExportStreamResponse; @@ -50,6 +53,8 @@ import org.apache.tapestry5.annotations.Persist; import org.apache.tapestry5.annotations.Property; import org.apache.tapestry5.annotations.SessionState; +import org.apache.tapestry5.corelib.components.Form; +import org.apache.tapestry5.corelib.components.Zone; import org.apache.tapestry5.ioc.annotations.Inject; import org.apache.tapestry5.upload.services.UploadedFile; import org.nuiton.util.PeriodDates; @@ -67,7 +72,7 @@ * par : $Author$ */ @IncludeStylesheet("context:css/sampling.css") -public class SamplingPlan implements WaoPage { +public class SamplingPlan extends AbstractFilteredPage implements WaoPage { /** * No restriction to display this page. @@ -85,6 +90,9 @@ @Inject private ServiceSampling serviceSampling; + @Inject + private ServiceReferential serviceReferential; + @InjectComponent private Layout layout; @@ -96,18 +104,12 @@ * Page initialization */ void setupRender() { - periodBegin = getPeriod().getFromDate(); - periodEnd = getPeriod().getThruDate(); + if (isFiltersVisible()) { + // Initialize filters + initSelectFilters(true, false, true); + } } - /** - * Get current user from Layout component - * @return current user - */ -// public User getUser() { -// return layout.getCurrentUser(); -// } - /**************************** IMPORT (ADMIN) *******************************/ /** @@ -147,7 +149,8 @@ public InputStream getStream() throws IOException { InputStream result = null; try { - result = serviceSampling.exportSamplingPlanCsv(user, getPeriod()); + result = serviceSampling.exportSamplingPlanCsv( + user, getPeriod()); } catch (WaoException eee) { throw new IOException(eee); } @@ -156,31 +159,81 @@ }; } - /**************************** PERIOD SELECTION *****************************/ + /**************************** FILTERS *************************************/ @Persist - private PeriodDates period; + private SamplingFilter filter; - @Property - private Date periodBegin; + @InjectComponent + private Zone filtersZone; - @Property - private Date periodEnd; + @InjectComponent + private Form filtersForm; + private boolean reset; + +// @Property +// private Date periodBegin; +// +// @Property +// private Date periodEnd; + public PeriodDates getPeriod() { - if (period == null) { - period = PeriodDates.createMonthsPeriodFromToday(11); + return getFilter().getPeriod(); + } + + @Override + public SamplingFilter getFilter() throws WaoException { + if (filter == null) { + filter = new SamplingFilterImpl(); + // Initialize period + PeriodDates period = PeriodDates.createMonthsPeriodFromToday(11); + filter.setPeriod(period); } - return period; + return filter; } - void onSuccessFromPeriodForm() { - if (periodBegin != null && periodEnd != null) { - period.setFromDate(periodBegin); - period.setThruDate(periodEnd); + @Override + protected boolean isAvailableDataForFiltersOnly() { + return false; + } + + public boolean isFiltersVisible() { + boolean companyFiltered = getFilter().getCompany() != null + && user.isAdmin(); + return (!getFilter().isPeriodFilteredOnly() || companyFiltered); + } + + Object onActionFromShowFilters() { + // Initialize filters + initSelectFilters(true, false, true); + return filtersZone.getBody(); + } + + public String[] onProvideCompletionsFromCodeDCF5(String input) + throws WaoException { + List<String> results = serviceReferential.getCodesDCF5Contains(input); + return results.toArray(new String[0]); + } + + void onSelectedFromReset() { + reset = true; + } + + Object onSuccessFromFiltersForm() { + if (isEdited()) { + return filtersZone.getBody(); } + if (reset) { + // Don't reset period in filters + PeriodDates period = getFilter().getPeriod(); + filter = null; + getFilter().setPeriod(period); + } + return this; } + /**************************** MAIN TABLE ***********************************/ /** ------------------------- DATA -------------------------------------- **/ @@ -218,7 +271,9 @@ if (!user.isAdmin()) { company = user.getCompany(); } - FacadeRow facade = serviceSampling.getSampleRowsOrderedByFishingZone(getPeriod(), company); + FacadeRow facade = + serviceSampling.getSampleRowsOrderedByFishingZone( + getFilter(), company); data = facade.getValues(); } return data; @@ -326,6 +381,13 @@ @Property private int rowIndex; + public String getRowComment() { + String comment = row.getComment(); + // Problem whith " in chenilleKit ToolTip component + comment = comment.replace("\n", "<br />"); + return comment; + } + public int getNbColumnsForProfession() { // code, program.name, fishingZone.districts, profession.code, profession.libelle int fixed = 5; @@ -398,8 +460,8 @@ */ void onActionFromFilterPeriodDates(int rowIndex) throws WaoException { row = getData().get(rowIndex); - period.setFromDate(row.getPeriodBegin()); - period.setThruDate(row.getPeriodEnd()); + getPeriod().setFromDate(row.getPeriodBegin()); + getPeriod().setThruDate(row.getPeriodEnd()); } void onActionFromDeleteSampleRow(int rowIndex) throws WaoException { Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Synthesis.java =================================================================== --- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Synthesis.java 2010-04-06 12:14:41 UTC (rev 431) +++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Synthesis.java 2010-04-06 17:26:09 UTC (rev 432) @@ -24,10 +24,11 @@ import fr.ifremer.wao.WaoException; import fr.ifremer.wao.bean.BoardingResult; import fr.ifremer.wao.bean.BoatFilter; -import fr.ifremer.wao.bean.BoatFilterImpl; import fr.ifremer.wao.bean.ContactState; import fr.ifremer.wao.bean.ContactStateStatistics; import fr.ifremer.wao.bean.ContactAverageReactivity; +import fr.ifremer.wao.bean.SamplingFilter; +import fr.ifremer.wao.bean.SamplingFilterImpl; import fr.ifremer.wao.entity.Company; import fr.ifremer.wao.entity.WaoUser; import fr.ifremer.wao.service.ServiceSynthesis; @@ -155,7 +156,7 @@ /********************* DYNAMICAL GRAPH : DATASAMPLING *********************/ @Persist - private BoatFilter dataSamplingFilter; + private SamplingFilter dataSamplingFilter; @InjectComponent private Zone filtersZone; @@ -170,9 +171,9 @@ } @Override - public BoatFilter getFilter() throws WaoException { + public SamplingFilter getFilter() throws WaoException { if (dataSamplingFilter == null) { - dataSamplingFilter = new BoatFilterImpl(); + dataSamplingFilter = new SamplingFilterImpl(); if (!user.isAdmin()) { dataSamplingFilter.setCompany(user.getCompany()); } Modified: trunk/wao-ui/src/main/resources/fr/ifremer/wao/ui/pages/SamplingPlan.properties =================================================================== --- trunk/wao-ui/src/main/resources/fr/ifremer/wao/ui/pages/SamplingPlan.properties 2010-04-06 12:14:41 UTC (rev 431) +++ trunk/wao-ui/src/main/resources/fr/ifremer/wao/ui/pages/SamplingPlan.properties 2010-04-06 17:26:09 UTC (rev 432) @@ -1,3 +1,9 @@ samplingPlanCsvFile-label: Fichier CSV du plan d'\u00E9chantillonnage periodBegin-label: P\u00E9riode du -periodEnd-label: Jusqu'au \ No newline at end of file +periodEnd-label: Jusqu'au +company-label: Soci\u00E9t\u00E9 +programName-label: Programme +codeDCF5-label: M\u00E9tier code DCF5 +facadeName-label: Fa\u00E7ade +sectorName-label: Zone +sampleRow-label: Code ligne \ No newline at end of file Modified: trunk/wao-ui/src/main/webapp/Contacts.tml =================================================================== --- trunk/wao-ui/src/main/webapp/Contacts.tml 2010-04-06 12:14:41 UTC (rev 431) +++ trunk/wao-ui/src/main/webapp/Contacts.tml 2010-04-06 17:26:09 UTC (rev 432) @@ -11,11 +11,11 @@ <input t:type="submit" class="ico search-32px" t:id="execSearchBoat" value="Search" title="Rechercher les contacts liés à ce navire" /> </div> </form> - <a t:type="actionlink" t:id="showFilters" t:zone="so-contacts-filters"> + <a t:type="actionlink" t:id="showFilters" t:zone="so-contacts-filters" class="display-form"> recherche avancée </a> <t:if t:test="canImportExport()"> - <a t:type="actionlink" t:id="showImportExport" t:zone="so-contacts-importexport"> + <a t:type="actionlink" t:id="showImportExport" t:zone="so-contacts-importexport" class="display-form"> import/export </a> </t:if> Modified: trunk/wao-ui/src/main/webapp/SamplingPlan.tml =================================================================== --- trunk/wao-ui/src/main/webapp/SamplingPlan.tml 2010-04-06 12:14:41 UTC (rev 431) +++ trunk/wao-ui/src/main/webapp/SamplingPlan.tml 2010-04-06 17:26:09 UTC (rev 432) @@ -25,10 +25,55 @@ </a> </h1> <form t:type="form" t:id="periodForm" action="post"> - <t:label t:for="periodBegin" /> : <input t:type="datefield" class="width70" t:id="periodBegin" t:format="MM/yyyy" /> - <t:label t:for="periodEnd" /> : <input t:type="datefield" class="width70" t:id="periodEnd" t:format="MM/yyyy" /> - <input t:type="submit" class="ico search" value="Search" t:title="Affichage des lignes du plan couvertes par la période sélectionnée" /> + <div> + <t:label t:for="periodBegin" /> : + <input t:type="datefield" class="width70" t:id="periodBegin" t:value="period.fromDate" t:format="MM/yyyy" t:validate="required"/> + <t:label t:for="periodEnd" /> : + <input t:type="datefield" class="width70" t:id="periodEnd" t:value="period.thruDate" t:format="MM/yyyy" t:validate="required" /> + <input t:type="submit" class="ico search" value="Search" t:title="Affichage des lignes du plan couvertes par la période sélectionnée" /> + <a t:type="actionlink" t:id="showFilters" t:zone="so-sampling-filters" class="display-form">recherche avancée</a> + </div> </form> + <div t:type="zone" t:id="filtersZone" t:visible="prop:filtersVisible" id="so-sampling-filters"> + <fieldset> + <legend>Recherche avancée</legend> + <div class="so-filters-form"> + <form t:type="form" t:id="filtersForm" t:zone="so-sampling-filters" action="post"> + <t:errors /> + <div class="t-beaneditor"> + <div> + <t:if t:test="user.admin"> + <t:label t:for="company" />: + <input t:type="select" t:id="company" t:model="companySelectModel" value="companyId"/> + <input t:type="submit" class="ico22px refresh" t:id="refreshByCompany" value="Refresh" + title="Rafraîchir les filtres en fonction de la société sélectionnée"/> + </t:if> + <t:label t:for="programName" />: + <select t:type="select" t:id="programName" t:model="programSelectModel" t:value="filter.programName" /> + <t:label t:for="codeDCF5" />: + <input t:type="textfield" t:id="codeDCF5" value="filter.codeDCF5" t:mixins="Autocomplete"/> + </div> + <div> + <t:label t:for="facadeName" />: + <select t:type="select" t:id="facadeName" t:model="facadeSelectModel" t:value="filter.facadeName" /> + <input t:type="submit" class="ico22px refresh" t:id="refreshByFacade" value="Refresh" + title="Rafraîchir les zones et les métiers en fonction de la façade sélectionnée"/> + <t:label t:for="sectorName" />: + <select t:type="select" t:id="sectorName" t:model="sectorSelectModel" t:value="filter.sectorName" /> + <input t:type="submit" class="ico22px refresh" t:id="refreshBySector" value="Refresh" + title="Rafraîchir les métiers en fonction de la zone sélectionnée"/> + <t:label t:for="sampleRow" />: + <input t:type="select" t:id="sampleRow" t:model="sampleRowSelectModel" value="sampleRowId" /> + </div> + <div class="t-beaneditor-row aright"> + <input t:type="submit" class="ico search-32px" t:id="search" value="Search" title="Rechercher les lignes du plan correspondants aux filtres saisies" /> + <input t:type="submit" class="ico undo" t:id="reset" value="Reset" title="Remettre les filtres par défaut" /> + </div> + </div> + </form> + </div> + </fieldset> + </div> </div> <t:if t:test="canEditSampleRow()"> <div class="actions fright"> @@ -80,6 +125,9 @@ <td class="bright">Actions</td> </tr> </thead> + <tfoot> + <tr><td></td></tr> + </tfoot> <tbody> <t:loop source="data" value="row" index="rowIndex"> <t:if t:test="facadeChanged"> @@ -141,7 +189,7 @@ </td> </t:loop> <td class="width50 acenter bright"> - <span t:type="ck/Tooltip" title="Infos" t:value="Total sur la période du ${dateFormat.format(periodBegin)} au ${dateFormat.format(periodEnd)}" t:effect="appear"> + <span t:type="ck/Tooltip" title="Infos" t:value="Total sur la période du ${dateFormat.format(period.fromDate)} au ${dateFormat.format(period.thruDate)}" t:effect="appear"> ${totalTidesExpected} <em>(${totalTidesReal})</em><br /><strong>${totalPercentage}</strong> </span> </td> @@ -149,7 +197,7 @@ <td class="width60 acenter">${row.nbObservants}</td> <td class="width60 acenter bright"> <t:if t:test="row.comment"> - <span t:type="ck/Tooltip" title="Commentaire" t:value="prop:row.comment" t:effect="appear"> + <span t:type="ck/Tooltip" title="Commentaire" t:value="prop:rowComment" t:effect="appear"> <img src="${asset:context:}/img/comment-22px.png" alt="comment" /> </span> </t:if> Modified: trunk/wao-ui/src/main/webapp/css/common.css =================================================================== --- trunk/wao-ui/src/main/webapp/css/common.css 2010-04-06 12:14:41 UTC (rev 431) +++ trunk/wao-ui/src/main/webapp/css/common.css 2010-04-06 17:26:09 UTC (rev 432) @@ -196,6 +196,17 @@ background: url(../img/help-22px.png) no-repeat center center; } +a.display-form { + text-decoration: none; + color: #19a28d; + font-weight: bold; +} + +a.display-form:hover { + text-decoration: underline; + color: black; +} + /* Common for forms (userProfile and administration forms) */ fieldset.user-form { width: 50%; Modified: trunk/wao-ui/src/main/webapp/css/contacts.css =================================================================== --- trunk/wao-ui/src/main/webapp/css/contacts.css 2010-04-06 12:14:41 UTC (rev 431) +++ trunk/wao-ui/src/main/webapp/css/contacts.css 2010-04-06 17:26:09 UTC (rev 432) @@ -50,17 +50,6 @@ background-color: #19a28d; }*/ -div#so-contacts-search a { - text-decoration: none; - color: #19a28d; - font-weight: bold; -} - -div#so-contacts-search a:hover { - text-decoration: underline; - color: black; -} - div#so-contacts-filters { width: 100%; margin-bottom: 10px; Modified: trunk/wao-ui/src/main/webapp/css/sampling.css =================================================================== --- trunk/wao-ui/src/main/webapp/css/sampling.css 2010-04-06 12:14:41 UTC (rev 431) +++ trunk/wao-ui/src/main/webapp/css/sampling.css 2010-04-06 17:26:09 UTC (rev 432) @@ -29,6 +29,14 @@ width: 40%; } +div#so-sampling-filters div.t-beaneditor div { + margin-top: 5px; +} + +div#so-sampling-filters fieldset { + padding: 5px; +} + div#so-sampling div.actions { /* global actions */ padding: 10px; } @@ -101,7 +109,12 @@ text-decoration: underline; } +div#so-sampling tfoot { + height: 0; + border-bottom: 2px solid black; +} + /* Historic page */ div#so-sampling-historic { margin-top: 10px;
participants (1)
-
fdesbois@users.labs.libre-entreprise.org