Author: echatellier Date: 2013-02-11 11:24:20 +0100 (Mon, 11 Feb 2013) New Revision: 90 Url: http://forge.codelutin.com/projects/cantharella/repository/revisions/90 Log: Affichage de message de produit non visibles seulement dans les cas concern?\195?\169s Modified: trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/MoleculeService.java trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/ProduitService.java trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/impl/MoleculeServiceImpl.java trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/impl/ProduitServiceImpl.java trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/molecule/ListMoleculesPage.java trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/molecule/ManageMoleculePage.java trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/molecule/ReadMoleculePage.java Modified: trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/MoleculeService.java =================================================================== --- trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/MoleculeService.java 2013-02-11 09:03:43 UTC (rev 89) +++ trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/MoleculeService.java 2013-02-11 10:24:20 UTC (rev 90) @@ -27,6 +27,8 @@ import nc.ird.cantharella.data.exceptions.DataConstraintException; import nc.ird.cantharella.data.exceptions.DataNotFoundException; import nc.ird.cantharella.data.model.Molecule; +import nc.ird.cantharella.data.model.MoleculeProvenance; +import nc.ird.cantharella.data.model.ResultatTestBio; import nc.ird.cantharella.data.model.Utilisateur; import nc.ird.cantharella.service.utils.normalizers.MoleculeNormalizer; import nc.ird.cantharella.service.utils.normalizers.utils.Normalize; @@ -95,5 +97,15 @@ * Liste les programmes des organismes déjà saisis * @return Organisme des molécules */ + @Transactional(readOnly = true) List<String> listMoleculeOrganisme(); + + /** + * Détermine si un utilisateur peut accéder à une provenance de molecule. + * @param moleculeProvenance provenance + * @param utilisateur L'utilisateur + * @return TRUE s'il a le droit + */ + @Transactional(readOnly = true) + boolean isMoleculeProvenanceAccessibleByUser(MoleculeProvenance moleculeProvenance, Utilisateur utilisateur); } Modified: trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/ProduitService.java =================================================================== --- trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/ProduitService.java 2013-02-11 09:03:43 UTC (rev 89) +++ trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/ProduitService.java 2013-02-11 10:24:20 UTC (rev 90) @@ -38,6 +38,13 @@ public interface ProduitService { /** + * Get total produit count in database. + * @return total produit count + */ + @Transactional(readOnly = true) + long countProduits(); + + /** * Liste les produits disponibles selon les droits d'un utilisateur (trié par réf) * @param utilisateur L'utilisateur * @return la liste des produits Modified: trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/impl/MoleculeServiceImpl.java =================================================================== --- trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/impl/MoleculeServiceImpl.java 2013-02-11 09:03:43 UTC (rev 89) +++ trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/impl/MoleculeServiceImpl.java 2013-02-11 10:24:20 UTC (rev 90) @@ -29,9 +29,15 @@ import nc.ird.cantharella.data.exceptions.DataConstraintException; import nc.ird.cantharella.data.exceptions.DataNotFoundException; import nc.ird.cantharella.data.exceptions.UnexpectedException; +import nc.ird.cantharella.data.model.Extrait; +import nc.ird.cantharella.data.model.Fraction; +import nc.ird.cantharella.data.model.Lot; import nc.ird.cantharella.data.model.Molecule; +import nc.ird.cantharella.data.model.MoleculeProvenance; +import nc.ird.cantharella.data.model.Produit; import nc.ird.cantharella.data.model.Utilisateur; import nc.ird.cantharella.data.model.Utilisateur.TypeDroit; +import nc.ird.cantharella.service.services.LotService; import nc.ird.cantharella.service.services.MoleculeService; import nc.ird.module.utils.AssertTools; @@ -55,6 +61,10 @@ @Autowired private GenericDao dao; + /** Lot service. */ + @Autowired + private LotService lotService; + /** {@inheritDoc} */ @Override public long countMolecules() { @@ -114,11 +124,24 @@ return utilisateur.getTypeDroit() == TypeDroit.ADMINISTRATEUR || utilisateur.getIdPersonne() == molecule.getCreateur().getIdPersonne(); } - + /** {@inheritDoc} */ @SuppressWarnings("unchecked") @Override public List<String> listMoleculeOrganisme() { return (List<String>) dao.list(MoleculeDao.CRITERIA_DISTINCT_MOLECULE_ORGANISMES); } + + /** {@inheritDoc} */ + @Override + public boolean isMoleculeProvenanceAccessibleByUser(MoleculeProvenance moleculeProvenance, Utilisateur utilisateur) { + Lot lot; + Produit produit = moleculeProvenance.getProduit(); + if (produit instanceof Extrait) { + lot = ((Extrait)produit).getExtraction().getLot(); + } else { + lot = ((Fraction)produit).getPurification().getLotSource(); + } + return lotService.isLotAccessibleByUser(lot, utilisateur); + } } Modified: trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/impl/ProduitServiceImpl.java =================================================================== --- trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/impl/ProduitServiceImpl.java 2013-02-11 09:03:43 UTC (rev 89) +++ trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/impl/ProduitServiceImpl.java 2013-02-11 10:24:20 UTC (rev 90) @@ -66,6 +66,13 @@ /** {@inheritDoc} */ @Override + public long countProduits() { + long result = dao.count(Extrait.class) + dao.count(Fraction.class); + return result; + } + + /** {@inheritDoc} */ + @Override public List<Produit> listProduits(Utilisateur utilisateur) { AssertTools.assertNotNull(utilisateur); Modified: trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/molecule/ListMoleculesPage.java =================================================================== --- trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/molecule/ListMoleculesPage.java 2013-02-11 09:03:43 UTC (rev 89) +++ trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/molecule/ListMoleculesPage.java 2013-02-11 10:24:20 UTC (rev 90) @@ -29,7 +29,6 @@ import nc.ird.cantharella.service.services.MoleculeService; import nc.ird.cantharella.web.config.WebContext; import nc.ird.cantharella.web.pages.TemplatePage; -import nc.ird.cantharella.web.pages.domain.campagne.ReadCampagnePage; import nc.ird.cantharella.web.utils.CallerPage; import nc.ird.cantharella.web.utils.behaviors.MoleculeViewBehavior; import nc.ird.cantharella.web.utils.columns.BooleanPropertyColumn; @@ -74,22 +73,22 @@ */ public ListMoleculesPage() { super(ListMoleculesPage.class); - + final CallerPage currentPage = new CallerPage(ListMoleculesPage.class); - + add(new Link<Void>(getResource() + ".NewMolecule") { @Override public void onClick() { setResponsePage(new ManageMoleculePage(currentPage)); } }); - + // On englobe le "DataView" dans un composant neutre que l'on pourra // rafraichir quand la liste évoluera final MarkupContainer moleculesRefresh = new WebMarkupContainer(getResource() + ".Molecules.Refresh"); moleculesRefresh.setOutputMarkupId(true); add(moleculesRefresh); - + // Liste des molecules final List<Molecule> molecules = moleculeService.listMolecules(); @@ -128,16 +127,7 @@ "masseMolaire", DecimalDisplFormat.SMALL, getLocale())); columns.add(new BooleanPropertyColumn<Molecule>(new Model<String>(getString("Molecule.nouvMolecul")), "nouvMolecul", "nouvMolecul", this)); - columns.add(new LinkPropertyColumn<Molecule>(new Model<String>(getString("Molecule.campagne")), "campagne", - "campagne", getString("Read")) { - @Override - public void onClick(Item<ICellPopulator<Molecule>> item, String componentId, IModel<Molecule> model) { - setResponsePage(new ReadCampagnePage(model.getObject().getCampagne().getIdCampagne(), currentPage)); - } - }); - columns.add(new PropertyColumn<Molecule>(new Model<String>(getString("Molecule.identifieePar")), "identifieePar", - "identifieePar")); - + columns.add(new LinkableImagePropertyColumn<Molecule>("images/edit.png", getString("Update"), getString("Update")) { // pas de lien d'édition si l'utilisateur n'a pas les droits @Override @@ -150,7 +140,7 @@ setResponsePage(new ManageMoleculePage(model.getObject().getIdMolecule(), currentPage)); } }); - + final DataTable<Molecule> moleculesDataTable = new AjaxFallbackDefaultDataTable<Molecule>("ListMoleculesPage.Molecules", columns, moleculesDataProvider, WebContext.ROWS_PER_PAGE); moleculesRefresh.add(moleculesDataTable); Modified: trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/molecule/ManageMoleculePage.java =================================================================== --- trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/molecule/ManageMoleculePage.java 2013-02-11 09:03:43 UTC (rev 89) +++ trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/molecule/ManageMoleculePage.java 2013-02-11 10:24:20 UTC (rev 90) @@ -435,8 +435,14 @@ }; produitChoice.setNullValid(false); provenanceTable.add(produitChoice); - //FIXME echatellier enable or disable resultNotAccessibleCont if product are not listed + // si le compte des produit actuel est égal au total en base + // c'est que l'utilisateur a les droits sur tous les produits + long produitCount = produitService.countProduits(); + if (produitCount == utilisateurProduits.size()) { + resultNotAccessibleCont.setVisibilityAllowed(false); + } + final TextField<BigDecimal> presenceInput = new TextField<BigDecimal>("Molecule.provenance.presence", new PropertyModel<BigDecimal>(newProvenanceModel, "pourcentage")) { Modified: trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/molecule/ReadMoleculePage.java =================================================================== --- trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/molecule/ReadMoleculePage.java 2013-02-11 09:03:43 UTC (rev 89) +++ trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/molecule/ReadMoleculePage.java 2013-02-11 10:24:20 UTC (rev 90) @@ -22,6 +22,7 @@ */ package nc.ird.cantharella.web.pages.domain.molecule; +import java.util.ArrayList; import java.util.List; import nc.ird.cantharella.data.exceptions.DataConstraintException; @@ -32,6 +33,8 @@ import nc.ird.cantharella.data.model.MoleculeProvenance; import nc.ird.cantharella.data.model.Personne; import nc.ird.cantharella.data.model.Produit; +import nc.ird.cantharella.data.model.ResultatTestBio; +import nc.ird.cantharella.data.model.ResultatTestBio.TypeResultat; import nc.ird.cantharella.service.services.MoleculeService; import nc.ird.cantharella.web.pages.TemplatePage; import nc.ird.cantharella.web.pages.domain.extraction.ReadExtractionPage; @@ -52,6 +55,7 @@ import nc.ird.cantharella.web.utils.panels.PropertyLabelLinkProduitPanel; import nc.ird.cantharella.web.utils.security.AuthRole; import nc.ird.cantharella.web.utils.security.AuthRoles; +import nc.ird.cantharella.web.utils.security.AuthSession; import org.apache.wicket.AttributeModifier; import org.apache.wicket.MarkupContainer; @@ -63,6 +67,7 @@ import org.apache.wicket.markup.html.list.ListItem; import org.apache.wicket.markup.html.list.ListView; import org.apache.wicket.model.IModel; +import org.apache.wicket.model.LoadableDetachableModel; import org.apache.wicket.model.Model; import org.apache.wicket.model.PropertyModel; import org.apache.wicket.spring.injection.annot.SpringBean; @@ -195,9 +200,32 @@ resultNotAccessibleCont.setOutputMarkupPlaceholderTag(true); provenanceTable.add(resultNotAccessibleCont); + // Model de liste des provenances + final LoadableDetachableModel<List<MoleculeProvenance>> listProvenanceModel = new LoadableDetachableModel<List<MoleculeProvenance>>() { + @Override + protected List<MoleculeProvenance> load() { + boolean isOneResultNotAccessible = false; + + List<MoleculeProvenance> listResults = new ArrayList<MoleculeProvenance>(); + + for (MoleculeProvenance res : moleculeModel.getObject().getProvenances()) { + // les résultats de type blanc ou témoin sont tjr accessibles + if (moleculeService.isMoleculeProvenanceAccessibleByUser(res, + ((AuthSession) getPage().getSession()).getUtilisateur())) { + listResults.add(res); + } else { + isOneResultNotAccessible = true; + } + } + // si une des provenances est non accessible, on rend visible le message d'avertissement + resultNotAccessibleCont.setVisibilityAllowed(isOneResultNotAccessible); + return listResults; + } + }; + // Contenu tableaux provenance - ListView<MoleculeProvenance> provenanceListView = new ListView<MoleculeProvenance>("Molecule.provenance.List", - new PropertyModel<List<MoleculeProvenance>>(moleculeModel, "provenances")) { + ListView<MoleculeProvenance> provenanceListView = new ListView<MoleculeProvenance>( + "Molecule.provenance.List", listProvenanceModel) { @Override protected void populateItem(ListItem<MoleculeProvenance> item) { if (item.getIndex() % 2 == 1) {