Author: fdesbois Date: 2010-01-17 13:26:09 +0000 (Sun, 17 Jan 2010) New Revision: 208 Modified: trunk/pom.xml trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/ServiceSynthesisImpl.java trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/ServiceUserImpl.java trunk/suiviobsmer-business/src/main/xmi/suiviobsmer.zargo trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/base/AbstractFilteredPage.java trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/Contacts.java trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/Synthesis.java trunk/suiviobsmer-ui/src/main/resources/fr/ifremer/suiviobsmer/ui/pages/Contacts.properties trunk/suiviobsmer-ui/src/main/webapp/Contacts.tml trunk/suiviobsmer-ui/src/main/webapp/Synthesis.tml trunk/suiviobsmer-ui/src/main/webapp/css/synthesis.css Log: - Simplify Synthesis for DataSampling (maybe only usage of SamplingFilter needed) - Use form.submit js for onChange on some select (facade, company) - Add observer in AbstractFilteredPage - Use last mavenpom and nuiton-utils release version Modified: trunk/pom.xml =================================================================== --- trunk/pom.xml 2010-01-15 15:14:48 UTC (rev 207) +++ trunk/pom.xml 2010-01-17 13:26:09 UTC (rev 208) @@ -10,7 +10,7 @@ <parent> <groupId>org.nuiton</groupId> <artifactId>mavenpom4labs</artifactId> - <version>2.0-SNAPSHOT</version> + <version>2.0</version> </parent> <groupId>fr.ifremer</groupId> @@ -213,7 +213,7 @@ <labs.id>154</labs.id> <!-- libraries version --> - <nuitonutils.version>1.1.3-SNAPSHOT</nuitonutils.version> + <nuitonutils.version>1.1.3</nuitonutils.version> <topia.version>2.3.0-beta-4-SNAPSHOT</topia.version> <eugene.version>2.0.0-beta-3-SNAPSHOT</eugene.version> <tapestry.version>5.1.0.5</tapestry.version> Modified: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/ServiceSynthesisImpl.java =================================================================== --- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/ServiceSynthesisImpl.java 2010-01-15 15:14:48 UTC (rev 207) +++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/ServiceSynthesisImpl.java 2010-01-17 13:26:09 UTC (rev 208) @@ -78,25 +78,21 @@ query = filter.prepareQueryForSampling(query, "M"); - // FIXME company from sampleRow and not from contact, but user from contact - // Refactor MODEL : suppress link between user and contact + add field observer in contact - // In filter : sampleRow.company filtered and contact.observer +// if (filter.isBoatFiltered() || filter.getObserver() != null) { +// // Check boat on finished contact (validate + Boarding_Done) and same month/year as SampleMonth +// query.addFrom(Contact.class.getName() + " C").add("C IN elements(M.sampleRow.contact)"). +// add("C.state", ContactState.BOARDING_DONE.toString()). +// add("C.validationCompany", Boolean.TRUE). +// add("C.validationProgram IS NULL OR C.validationProgram = :booleanTrue"). +// addParam("booleanTrue", Boolean.TRUE). +// add("month(C.tideBeginDate) = month(M.periodDate)"). +// add("year(C.tideBeginDate) = year(M.periodDate)"); +// query = filter.prepareQueryForBoat(query, "C"); +// if (filter.getObserver() != null) { +// query.add("C." + Contact.USER, filter.getObserver()); +// } +// } - if (filter.isBoatFiltered() || filter.getObserver() != null) { - // Check boat on finished contact (validate + Boarding_Done) and same month/year as SampleMonth - query.addFrom(Contact.class.getName() + " C").add("C IN elements(M.sampleRow.contact)"). - add("C.state", ContactState.BOARDING_DONE.toString()). - add("C.validationCompany", Boolean.TRUE). - add("C.validationProgram IS NULL OR C.validationProgram = :booleanTrue"). - addParam("booleanTrue", Boolean.TRUE). - add("month(C.tideBeginDate) = month(M.periodDate)"). - add("year(C.tideBeginDate) = year(M.periodDate)"); - query = filter.prepareQueryForBoat(query, "C"); - if (filter.getObserver() != null) { - query.add("C." + Contact.USER, filter.getObserver()); - } - } - if (filter.getCompany() != null) { query.add("M." + SampleMonth.SAMPLE_ROW + "." + SampleRow.COMPANY, filter.getCompany()); } Modified: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/ServiceUserImpl.java =================================================================== --- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/ServiceUserImpl.java 2010-01-15 15:14:48 UTC (rev 207) +++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/ServiceUserImpl.java 2010-01-17 13:26:09 UTC (rev 208) @@ -34,6 +34,7 @@ import java.util.ArrayList; import java.util.List; import org.nuiton.topia.TopiaContext; +import org.nuiton.topia.framework.TopiaQuery; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -230,11 +231,34 @@ transaction.closeContext(); } catch (Exception eee) { - SuiviObsmerContext.serviceException(transaction, "Impossible de créer ou de mettre à jour l'utilisateur", eee); + SuiviObsmerContext.serviceException(transaction, "Impossible de récupérer la liste des sociétés", eee); } return results; } + @Override + public List<User> getObservers(boolean activeOnly) throws SuiviObsmerException { + TopiaContext transaction = null; + List<User> results = new ArrayList<User>(); + try { + transaction = rootContext.beginTransaction(); + UserDAO dao = SuiviObsmerModelDAOHelper.getUserDAO(transaction); + TopiaQuery<User> query = dao.createQuery().add(User.ADMIN, Boolean.FALSE); + if (activeOnly) { + query.add(User.ACTIVE, Boolean.TRUE); + } + + results = query.executeToEntityList(); + + transaction.closeContext(); + } catch (Exception eee) { + SuiviObsmerContext.serviceException(transaction, "Impossible de récupérer la liste des observateurs", eee); + } + return results; + } + + + } Modified: trunk/suiviobsmer-business/src/main/xmi/suiviobsmer.zargo =================================================================== (Binary files differ) Modified: trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/base/AbstractFilteredPage.java =================================================================== --- trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/base/AbstractFilteredPage.java 2010-01-15 15:14:48 UTC (rev 207) +++ trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/base/AbstractFilteredPage.java 2010-01-17 13:26:09 UTC (rev 208) @@ -3,11 +3,13 @@ import fr.ifremer.suiviobsmer.SuiviObsmerException; import fr.ifremer.suiviobsmer.bean.BoatFilter; +import fr.ifremer.suiviobsmer.entity.Company; import fr.ifremer.suiviobsmer.entity.SampleRow; import fr.ifremer.suiviobsmer.entity.User; import fr.ifremer.suiviobsmer.services.ServiceBoat; import fr.ifremer.suiviobsmer.services.ServiceReferential; import fr.ifremer.suiviobsmer.services.ServiceSampling; +import fr.ifremer.suiviobsmer.services.ServiceUser; import java.util.ArrayList; import java.util.List; import org.apache.commons.lang.StringUtils; @@ -42,6 +44,10 @@ * The zone_id is the one of the zone returned by {@link #getFilterZone() } * - SampleRow select value is sampleRowId : * <input t:type="select" t:id="sampleRow" t:model="sampleRowSelectModel" value="sampleRowId" /> + * - Company select value is companyId : + * <input t:type="select" t:id="company" t:model="companySelectModel" value="companyId" /> + * - Observer select value is observerId and have a zoneUpdater mixins : + * <input t:type="select" t:id="observer" t:model="observerSelectModel" value="observerId" t:mixins="zoneUpdater" t:event="change" t:zone="..." .../> * </pre> * * @author fdesbois @@ -70,6 +76,9 @@ @Inject private ServiceBoat serviceBoat; + @Inject + private ServiceUser serviceUser; + @Persist private GenericSelectModel<SampleRow> sampleRowSelectModel; @@ -82,11 +91,18 @@ @Persist private SelectModel sectorSelectModel; -// public enum FIELD { -// FACADE, SECTOR, SAMPLE_ROW, PROGRAM; -// } + private GenericSelectModel<Company> companySelectModel; + @Property + private String companyId; + + private GenericSelectModel<User> observerSelectModel; + + @Property + private String observerId; + protected void initFilter() throws SuiviObsmerException { + facadeSelectModel = null; getFacadeSelectModel(); sectorSelectModel = null; @@ -97,6 +113,23 @@ if (getFilter().getSampleRow() != null) { sampleRowId = getFilter().getSampleRow().getTopiaId(); } + + if (user.getAdmin()) { + companySelectModel = null; + getCompanySelectModel(); + if (getFilter().getCompany() != null) { + companyId = getFilter().getCompany().getTopiaId(); + } + } else { + if (log.isDebugEnabled()) { + log.debug("Company filtered : " + user.getCompany()); + } + getFilter().setCompany(user.getCompany()); + } + + if (getFilter().getObserver() != null) { + observerId = getFilter().getObserver().getTopiaId(); + } } public SelectModel getFacadeSelectModel() throws SuiviObsmerException { @@ -132,47 +165,102 @@ if (log.isInfoEnabled()) { log.info("BUSINESS REQUEST [getSampleRowsForUser]"); } - List<SampleRow> sampleRows = serviceSampling.getSampleRowsForUser(user, getFinishedSampleRowsOnly()); + List<SampleRow> sampleRows = serviceSampling.getSampleRowsForUser(user, getAvailableDataForFiltersOnly()); sampleRowSelectModel = new GenericSelectModel<SampleRow>(sampleRows, SampleRow.class, "code", "topiaId", propertyAccess); } return sampleRowSelectModel; } - public String[] onProvideCompletionsFromBoatName(String input) throws SuiviObsmerException { - if (log.isInfoEnabled()) { - log.info("BUSINESS REQUEST [getBoatNamesStartWith]"); + public GenericSelectModel<Company> getCompanySelectModel() throws SuiviObsmerException { + if (companySelectModel == null) { + if (log.isDebugEnabled()) { + log.debug("BUSINESS REQUEST [getCompanies]"); + } + List<Company> companies = serviceUser.getCompanies(getAvailableDataForFiltersOnly()); + companySelectModel = new GenericSelectModel<Company>(companies,Company.class, + "name","topiaId",propertyAccess); } - List<String> results = serviceBoat.getBoatNamesStartWith(input); - return results.toArray(new String[0]); + return companySelectModel; } + public GenericSelectModel<User> getObserverSelectModel() throws SuiviObsmerException { + if (observerSelectModel == null) { + List<User> observers = new ArrayList<User>(); + if (getFilter().getCompany() != null) { + if (log.isDebugEnabled()) { + log.debug("Company filter users : " + getFilter().getCompany()); + } + observers = getFilter().getCompany().getUser(); + } else if (user.getAdmin()) { + if (log.isDebugEnabled()) { + log.debug("BUSINESS REQUEST [getObservers]"); + } + observers = serviceUser.getObservers(getAvailableDataForFiltersOnly()); + } + observerSelectModel = new GenericSelectModel<User>(observers,User.class, + "fullName","topiaId",propertyAccess); + } + return observerSelectModel; + } + protected abstract BoatFilter getFilter() throws SuiviObsmerException; protected abstract void resetFilter(); - protected abstract Zone getFilterZone(); + protected abstract Zone getSampleRowFilterZone(); - protected abstract boolean getFinishedSampleRowsOnly(); + protected abstract Zone getObserverFilterZone(); - @Log - public Object onChangeFromFacadeName(String value) throws SuiviObsmerException { - if (!StringUtils.isEmpty(value.trim())) { - // Reset filter to avoid strange behavior (cause of no form submit) - resetFilter();// = null; - // set facadeName selected in filter - getFilter().setFacadeName(value); - // Reset sectors to use facadeName selected - sectorSelectModel = null; - return getFilterZone().getBody(); + protected abstract boolean getAvailableDataForFiltersOnly(); + + public String[] onProvideCompletionsFromBoatName(String input) throws SuiviObsmerException { + if (log.isInfoEnabled()) { + log.info("BUSINESS REQUEST [getBoatNamesStartWith]"); } - return null; + List<String> results = serviceBoat.getBoatNamesStartWith(input); + return results.toArray(new String[0]); } +// @Log +// public Object onChangeFromFacadeName(String value) throws SuiviObsmerException { +// if (!StringUtils.isEmpty(value.trim())) { +// // Reset filter to avoid strange behavior (cause of no form submit) +// resetFilter();// = null; +// // set facadeName selected in filter +// getFilter().setFacadeName(value); +// // Reset sectors to use facadeName selected +// sectorSelectModel = null; +// return getSampleRowFilterZone().getBody(); +// } +// return null; +// } +// +// @Log +// public Object onChangeFromCompany(String value) throws SuiviObsmerException { +// if (!StringUtils.isEmpty(value.trim())) { +// // Reset filter to avoid strange behavior (cause of no form submit) +// resetFilter(); +// // set company selected in filter +// getFilter().setCompany(getCompanySelectModel().findObject(companyId)); +// // Reset observers to use company selected +// observerSelectModel = null; +// return getObserverFilterZone().getBody(); +// } +// return null; +// } + @Log public void onSuccess() throws SuiviObsmerException { SampleRow row = getSampleRowSelectModel().findObject(sampleRowId); getFilter().setSampleRow(row); + if (user.getAdmin()) { + Company company = getCompanySelectModel().findObject(companyId); + getFilter().setCompany(company); + } + + User observer = getObserverSelectModel().findObject(observerId); + getFilter().setObserver(observer); } } Modified: trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/Contacts.java =================================================================== --- trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/Contacts.java 2010-01-15 15:14:48 UTC (rev 207) +++ trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/Contacts.java 2010-01-17 13:26:09 UTC (rev 208) @@ -144,9 +144,9 @@ public ContactFilter getContactFilter() throws SuiviObsmerException { if (contactFilter == null) { contactFilter = new ContactFilterImpl(); - if (!user.getAdmin()) { - contactFilter.setCompany(user.getCompany()); - } +// if (!user.getAdmin()) { +// contactFilter.setCompany(user.getCompany()); +// } } return contactFilter; } @@ -162,12 +162,17 @@ } @Override - protected Zone getFilterZone() { + protected Zone getSampleRowFilterZone() { return filtersZone; } @Override - protected boolean getFinishedSampleRowsOnly() { + protected Zone getObserverFilterZone() { + return filtersZone; + } + + @Override + protected boolean getAvailableDataForFiltersOnly() { return true; } Modified: trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/Synthesis.java =================================================================== --- trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/Synthesis.java 2010-01-15 15:14:48 UTC (rev 207) +++ trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/Synthesis.java 2010-01-17 13:26:09 UTC (rev 208) @@ -85,8 +85,11 @@ private BoatFilter dataSamplingFilter; @InjectComponent - private Zone dataSamplingFiltersZone; + private Zone sampleRowZone; + @InjectComponent + private Zone observerZone; + @Persist private ChartType dataSamplingChartType; @@ -114,12 +117,17 @@ } @Override - protected Zone getFilterZone() { - return dataSamplingFiltersZone; + protected Zone getSampleRowFilterZone() { + return sampleRowZone; } @Override - protected boolean getFinishedSampleRowsOnly() { + protected Zone getObserverFilterZone() { + return observerZone; + } + + @Override + protected boolean getAvailableDataForFiltersOnly() { return false; } Modified: trunk/suiviobsmer-ui/src/main/resources/fr/ifremer/suiviobsmer/ui/pages/Contacts.properties =================================================================== --- trunk/suiviobsmer-ui/src/main/resources/fr/ifremer/suiviobsmer/ui/pages/Contacts.properties 2010-01-15 15:14:48 UTC (rev 207) +++ trunk/suiviobsmer-ui/src/main/resources/fr/ifremer/suiviobsmer/ui/pages/Contacts.properties 2010-01-17 13:26:09 UTC (rev 208) @@ -1,6 +1,7 @@ # ContactForm labels facadeName-label: Facade sectorName-label: Secteur +observer-label: Observateur contactsCsvFile-label: Fichier des contacts # Grid labels Modified: trunk/suiviobsmer-ui/src/main/webapp/Contacts.tml =================================================================== --- trunk/suiviobsmer-ui/src/main/webapp/Contacts.tml 2010-01-15 15:14:48 UTC (rev 207) +++ trunk/suiviobsmer-ui/src/main/webapp/Contacts.tml 2010-01-17 13:26:09 UTC (rev 208) @@ -33,8 +33,7 @@ <t:label t:for="boatDistrictCode" />: <input t:type="textfield" t:id="boatDistrictCode" class="width50" t:value="contactFilter.boatDistrictCode" /> <t:label t:for="facadeName" />: - <select t:type="select" t:id="facadeName" t:model="facadeSelectModel" value="contactFilter.facadeName" - t:mixins="zoneUpdater" t:event="change" t:zone="so-contacts-filters"/> + <select t:type="select" t:id="facadeName" t:model="facadeSelectModel" value="contactFilter.facadeName" /> <t:label t:for="sectorName" />: <select t:type="select" t:id="sectorName" t:model="sectorSelectModel" value="contactFilter.sectorName" /> <t:label t:for="sampleRow" />: @@ -50,6 +49,12 @@ </t:label> </div><p> </p> <div> + <t:if t:test="user.admin"> + <t:label t:for="company" />: + <input t:type="select" t:id="company" t:model="companySelectModel" value="companyId"/> + </t:if> + <t:label t:for="observer" />: + <input t:type="select" t:id="observer" t:model="observerSelectModel" value="observerId" /> <label>Validation société: </label> <input t:type="checkbox" t:id="companyAccepted" value="contactFilter.companyAccepted" /> <t:label t:for="companyAccepted"> @@ -242,5 +247,9 @@ </div> </form> </t:zone> +<script type="text/javascript"> + Event.observe('facadeName', 'change', function() { $('filtersForm').submit(); } ); + Event.observe('company', 'change', function() { $('filtersForm').submit(); } ); +</script><!--Event.observe('company', 'change', function() { $('filtersForm').submit(); } );--> </t:layout> Modified: trunk/suiviobsmer-ui/src/main/webapp/Synthesis.tml =================================================================== --- trunk/suiviobsmer-ui/src/main/webapp/Synthesis.tml 2010-01-15 15:14:48 UTC (rev 207) +++ trunk/suiviobsmer-ui/src/main/webapp/Synthesis.tml 2010-01-17 13:26:09 UTC (rev 208) @@ -47,7 +47,7 @@ <fieldset> <legend>Filtres</legend> <div class="so-filters-form"> - <div t:type="zone" t:id="dataSamplingFiltersZone" t:update="show" id="so-datasampling-filters"> + <!--<div t:type="zone" t:id="dataSamplingFiltersZone" t:update="show" id="so-datasampling-filters">--> <form t:type="form" t:id="filtersForm"> <t:errors /> <div class="t-beaneditor"> @@ -58,10 +58,10 @@ <t:label t:for="periodEnd" />: <input t:type="datefield" class="width70" t:id="periodEnd" t:value="filter.period.thruDate" /> </div> - <div class="filterRow"> + <div class="filterRow" t:type="zone" t:id="sampleRowZone" t:update="show"> <t:label t:for="facadeName" />: <select t:type="select" t:id="facadeName" t:model="facadeSelectModel" value="filter.facadeName" - t:mixins="zoneUpdater" t:event="change" t:zone="so-datasampling-filters"/> + /> <t:label t:for="sectorName" />: <select t:type="select" t:id="sectorName" t:model="sectorSelectModel" value="filter.sectorName" /> <t:label t:for="sampleRow" />: @@ -69,7 +69,7 @@ <!--<t:label t:for="program" />: <input t:type="select" t:id="program" t:model="programSelectModel" value="programId" />--> </div> - <div class="filterRow"> +<!-- <div class="filterRow"> <label>Navire: </label> <t:label t:for="boatName" />: <input t:type="textfield" t:id="boatName" t:value="filter.boatName" t:mixins="Autocomplete" /> @@ -77,24 +77,23 @@ <input t:type="textfield" t:id="boatImmatriculation" class="width50" t:value="filter.boatImmatriculation" /> <t:label t:for="boatDistrictCode" />: <input t:type="textfield" t:id="boatDistrictCode" class="width50" t:value="filter.boatDistrictCode" /> - </div> -<!-- <t:if t:test="user.admin"> - <t:label t:for="program" />: - <input t:type="select" t:id="program" t:model="programSelectModel" value="dataSamplingFilter.programName" /> - </t:if> - <t:label t:for="observer" />: - <input t:type="select" t:id="observer" t:model="observerSelectModel" value="observerId" /> - <t:if t:test="user.admin"> + </div>--> + <t:if t:test="user.admin"> + <div t:type="zone" t:id="observerZone" t:update="show"> + <!--<t:label t:for="observer" />: + <input t:type="select" t:id="observer" t:model="observerSelectModel" value="observerId" />--> + <t:label t:for="company" />: - <input t:type="select" t:id="company" t:model="companySelectModel" value="companyId" /> - </t:if>--> + <input t:type="select" t:id="company" t:model="companySelectModel" value="companyId"/> + </div> + </t:if> <div class="t-beaneditor-row aright"> <input t:type="submit" class="ico search-32px" t:id="search" value="Search" /> <input t:type="submit" class="ico undo" t:id="reset" value="Reset" /> </div> </div> </form> - </div> + <!--</div>--> </div> </fieldset> <p class="so-chart-types"> @@ -110,4 +109,7 @@ </p> <t:chart t:width="550" t:height="350" t:chart="dataSamplingChart" /> </div> +<script type="text/javascript"> + Event.observe('facadeName', 'change', function() { $('filtersForm').submit(); } ); +</script> </t:layout> Modified: trunk/suiviobsmer-ui/src/main/webapp/css/synthesis.css =================================================================== --- trunk/suiviobsmer-ui/src/main/webapp/css/synthesis.css 2010-01-15 15:14:48 UTC (rev 207) +++ trunk/suiviobsmer-ui/src/main/webapp/css/synthesis.css 2010-01-17 13:26:09 UTC (rev 208) @@ -68,7 +68,7 @@ padding-left: 20px; } -div#so-datasampling-filters div.filterRow { +div#so-datasampling div.so-filters-form div.filterRow { margin-bottom: 5px; margin-top: 5px; }