Author: bpoussin Date: 2012-08-03 15:56:02 +0200 (Fri, 03 Aug 2012) New Revision: 224 Url: http://chorem.org/repositories/revision/chorem/224 Log: Evolution #734: Be able to add comment on objects Suppression de l'ancienne facon de faire pour les Attachments et les ContactDetails (qui n'etait pas la bonne) Utilisation de la nouvelle facon pour les Notes Devrait etre facilement reutilisable pour precharge d'autre type d'objet: exemple, un addEmployee a partir d'une societe; un addQuotation sur un Project, ... suppression de la company/view.jsp qui ne servait qu'a ordonner les champs (mauvaise facon de faire)[A Removed: trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/company/ Modified: trunk/chorem-entities/src/main/java/org/chorem/ChoremClient.java trunk/chorem-entities/src/main/java/org/chorem/entities/QuotationStatus.java trunk/chorem-entities/src/main/xmi/chorem-model.properties trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/DashboardAction.java trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/GenericAction.java trunk/chorem-webmotion/src/main/resources/mapping trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/employee/view.jsp trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/person/view.jsp trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/view.jsp Modified: trunk/chorem-entities/src/main/java/org/chorem/ChoremClient.java =================================================================== --- trunk/chorem-entities/src/main/java/org/chorem/ChoremClient.java 2012-08-03 13:49:37 UTC (rev 223) +++ trunk/chorem-entities/src/main/java/org/chorem/ChoremClient.java 2012-08-03 13:56:02 UTC (rev 224) @@ -118,6 +118,7 @@ exts.addAll(org.chorem.entities.ConfigurationAbstract.extensions); exts.addAll(org.chorem.entities.CategoryAbstract.extensions); exts.addAll(org.chorem.entities.AttachmentAbstract.extensions); + exts.addAll(org.chorem.entities.NoteAbstract.extensions); exts.addAll(org.chorem.entities.CompanyAbstract.extensions); exts.addAll(org.chorem.entities.ContactDetailsAbstract.extensions); exts.addAll(org.chorem.entities.EmployeeAbstract.extensions); Modified: trunk/chorem-entities/src/main/java/org/chorem/entities/QuotationStatus.java =================================================================== --- trunk/chorem-entities/src/main/java/org/chorem/entities/QuotationStatus.java 2012-08-03 13:49:37 UTC (rev 223) +++ trunk/chorem-entities/src/main/java/org/chorem/entities/QuotationStatus.java 2012-08-03 13:56:02 UTC (rev 224) @@ -32,13 +32,14 @@ */ public enum QuotationStatus { + LEAD, // piste possible DRAFT, // en cours de redaction - SEND, // envoye + SENT, // envoye REJECTED, // refuse par le client ACCEPTED, // accepte par le client (on peut envoyer la facture de debut) STARTED, // developpement commence - DELIVERED, // developpement fini et livre (on peut envoyer la facture de fin) - VRS, // l'application est en verification en service regulier chez le client (~1 mois) + DELIVERED, // developpement fini et livre (on peut envoyer la facture de fin) + RSV, // l'application est en verification en service regulier chez le client (~1 mois) WARRANTY, // fin de la vsr, on passe en garantie et on peut facture le reste (s'il reste encore des choses) CLOSED // tout est fini et clos, plus rien a faire Modified: trunk/chorem-entities/src/main/xmi/chorem-model.properties =================================================================== --- trunk/chorem-entities/src/main/xmi/chorem-model.properties 2012-08-03 13:49:37 UTC (rev 223) +++ trunk/chorem-entities/src/main/xmi/chorem-model.properties 2012-08-03 13:56:02 UTC (rev 224) @@ -95,6 +95,10 @@ org.chorem.entities.Attachment.class.tagvalue.version=7.0 org.chorem.entities.Attachment.class.tagvalue.toString=%Attachment.name|noname$s (%Attachment.mimetype|notype$s) %Attachment.date$tF org.chorem.entities.Attachment.class.tagvalue.sortOrder=Attachment.name,Attachment.mimetype,Attachment.date +org.chorem.entities.Note.class.tagvalue.version=2.0 +org.chorem.entities.Note.class.tagvalue.toString=(%Note.date$tF) %Note.title|noname$s +org.chorem.entities.Note.class.tagvalue.sortOrder=Note.date +org.chorem.entities.Note.Attachment.content.tagvalue.subtype=text/rst org.chorem.entities.Quotation.class.tagvalue.version=12.0 org.chorem.entities.Quotation.class.tagvalue.preload=Quotation.project;Quotation.customer;Quotation.supplier;Quotation.category org.chorem.entities.Quotation.class.tagvalue.toString=%Interval.beginDate$tF-%Interval.endDate$tF %Quotation.reference|noref$s(%Quotation.category|noCategory$s) %Quotation.description|nodescription$s Modified: trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/DashboardAction.java =================================================================== --- trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/DashboardAction.java 2012-08-03 13:49:37 UTC (rev 223) +++ trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/DashboardAction.java 2012-08-03 13:56:02 UTC (rev 224) @@ -395,14 +395,14 @@ } public Render quotation(ChoremClient client, String query) { - EnumSet<QuotationStatus> status = EnumSet.range(QuotationStatus.DRAFT, QuotationStatus.SEND); + EnumSet<QuotationStatus> status = EnumSet.range(QuotationStatus.LEAD, QuotationStatus.SENT); String jsp = "dashboardQuotation.jsp"; String title = "Les propositions en attente de réponse"; return quotationFilter(client, query, status, jsp, title, false); } public Render projectOpen(ChoremClient client, String query) { - EnumSet<QuotationStatus> status = EnumSet.range(QuotationStatus.ACCEPTED, QuotationStatus.VRS); + EnumSet<QuotationStatus> status = EnumSet.range(QuotationStatus.ACCEPTED, QuotationStatus.RSV); String jsp = "dashboardProject.jsp"; String title = "Les projets en cours"; return quotationFilter(client, query, status, jsp, title, true); Modified: trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/GenericAction.java =================================================================== --- trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/GenericAction.java 2012-08-03 13:49:37 UTC (rev 223) +++ trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/GenericAction.java 2012-08-03 13:56:02 UTC (rev 224) @@ -55,6 +55,7 @@ import java.util.List; import java.util.Map; import java.util.Set; +import org.debux.webmotion.server.mapping.Config; /** * @@ -374,7 +375,7 @@ return map; } - public Render view(ChoremClient client, String id, String[] extension) { + public Render view(ChoremClient client, String id, String[] extension, Config config) { log.debug("view: " + id); Wikitty w = client.restore(id, ".*"); @@ -389,7 +390,13 @@ exts.addAll(wikittyExtensions); } } + + // recherche de footer specifique aux extensions + String pathView = config.getPackageViews(); + for (WikittyExtension e : exts) { + } + return renderView("view.jsp", "wikitty", w, "extensions", exts); } @@ -408,18 +415,22 @@ return renderView(StringUtils.lowerCase(extension) +"/view.jsp", "wikitty", w, "extensions", exts); } - public Render edit(ChoremClient client, String id, String[] extension) { + public Render edit(ChoremClient client, String id, String[] extension, Call call) { log.debug("edit: " + id); - Wikitty w = client.restore(id, ".*"); + // on preload rien, le preload sera fait a la fin + Wikitty w = client.restore(id, ""); + // si on ne retrouve pas l'objet demande, on en edit un nouveau if (w == null) { w = new WikittyImpl(); } LinkedHashSet<WikittyExtension> exts = new LinkedHashSet<WikittyExtension>(); - // If extension is not null, load all required extensions too - if (extension != null) { + if (extension == null) { + // Show all wikitty if no extension were mentioned + exts.addAll(w.getExtensions()); + } else { // Be sure that the wikitty has good extension if wanted and their requirements List<String> extensionNames = Arrays.asList(extension); List<WikittyExtension> newExts = @@ -431,37 +442,59 @@ exts.addAll(newExts); } - if (extension == null) { - // Show all wikitty if no extension were mentioned - exts.addAll(w.getExtensions()); - } + // si des nouvelles valeurs sont en parametre, on change les valeurs + // actuel du wikitty + Map<String, Object> params = call.getExtractParameters(); + String error = setWikittyField(w, params); + // on recharge des entites qui ont pu apparaitre, pour pouvoir les afficher comme il faut + client.preload(Collections.singleton(w), ".*"); + getContext().addInfoMessage("message", "Warning: Can't put some value in object" + error); + return renderView("edit.jsp", "wikitty", w, "extensions", exts); } - public Render extensionEdit(ChoremClient client, String id, String extension) { - log.debug("edit: " + id); - Wikitty w = client.restore(id, ".*"); - if (w == null) { - w = new WikittyImpl(); - } + // A SUPPRIMER, ne sert a rien, pas la bonne methode (pour reordonner les champs) +// /** +// * Edit une extension et les extensions requisent de l'objet +// * +// * @param client +// * @param id +// * @param extension +// * @param call +// * @return +// */ +// public Render extensionEdit(ChoremClient client, String id, String extension, Call call) { +// log.debug("edit: " + id); +// Wikitty w = client.restore(id, ".*"); +// +// if (w == null) { +// w = new WikittyImpl(); +// } +// +// LinkedHashSet<WikittyExtension> exts = new LinkedHashSet<WikittyExtension>(); +// +// // If extension is not null, load all required extensions too +// List<String> extensionNames = Arrays.asList(extension); +// List<WikittyExtension> newExts = +// client.restoreExtensionAndDependenciesLastVesion(extensionNames); +// w.addExtension(newExts); +// +// // As we want to edit a wikitty by its extensions, we should edit the required extensions too +// // Add the extension and required ones in the list of extensions to display +// exts.addAll(newExts); +// +// // si des nouvelles valeurs sont en parametre, on change les valeurs +// // actuel du wikitty +// Map<String, Object> params = call.getExtractParameters(); +// String error = setWikittyField(w, params); +// +// getContext().addInfoMessage("message", "Warning: Can't put some value in object" + error); +// +// return renderView(StringUtils.lowerCase(extension) + "/edit.jsp", "wikitty", w); +// } - LinkedHashSet<WikittyExtension> exts = new LinkedHashSet<WikittyExtension>(); - - // If extension is not null, load all required extensions too - List<String> extensionNames = Arrays.asList(extension); - List<WikittyExtension> newExts = - client.restoreExtensionAndDependenciesLastVesion(extensionNames); - w.addExtension(newExts); - - // As we want to edit a wikitty by its extensions, we should edit the required extensions too - // Add the extension and required ones in the list of extensions to display - exts.addAll(newExts); - - return renderView(StringUtils.lowerCase(extension) + "/edit.jsp", "wikitty", w); - } - public Render save(ChoremClient client, String id, String[] extension, Call call) { log.debug("save: " + id); Wikitty w = client.restore(id); @@ -472,6 +505,23 @@ client.restoreExtensionAndDependenciesLastVesion(Arrays.asList(extension)); w.addExtension(exts); Map<String, Object> params = call.getExtractParameters(); + String error = setWikittyField(w, params); + client.store(w); + + getContext().addInfoMessage("message", "Object saved" + error); + + return renderURL("/wikitty/view/"+w.getId()); + } + + /** + * Modifie les valeurs de l'objet passe en parametre avec les valeurs de + * champs que l'on arrive a retrouver dans le params. + * + * @param w Le wikitty a mettre a jour + * @param params les parametres dans lequel on peut trouver des valeurs + * @return une chaine representant toutes les erreurs rencontrees + */ + protected String setWikittyField(Wikitty w, Map<String, Object> params) { String error = ""; for (String fqfield : params.keySet()) { if (w.hasField(fqfield)) { @@ -482,13 +532,17 @@ v = file.getFile(); } else { String[] values = (String[]) params.get(fqfield); - System.out.println("ZZZZ fqfield:"+fqfield+" values: " + Arrays.toString(values) + " size:" + values.length); + if (log.isDebugEnabled()) { + log.debug("ZZZZ fqfield:"+fqfield+" values: " + Arrays.toString(values) + " size:" + values.length); + } if (w.getFieldType(fqfield).isCollection()) { if (values.length == 1 && w.getFieldType(fqfield).getType() == WikittyTypes.WIKITTY) { // petit hack si l'editeur utilise n'est pas un select, // mais un input (et donc des valeurs separees par des ',' values = StringUtils.split(values[0], ","); - System.out.println("YYYY " + Arrays.toString(values) + " size: " + values.length); + if (log.isDebugEnabled()) { + log.debug("YYYY " + Arrays.toString(values) + " size: " + values.length); + } } v = values; } else { @@ -497,7 +551,10 @@ } try { w.setFqField(fqfield, v); - System.out.println("XXX after field: " + w.getFqField(fqfield) + "(" + ClassUtils.getSimpleName(w.getFqField(fqfield), "NULLclasse!!!") + ")"); + if (log.isDebugEnabled()) { + log.debug("XXX after field: " + w.getFqField(fqfield) + + "(" + ClassUtils.getSimpleName(w.getFqField(fqfield), "NULLclasse!!!") + ")"); + } } catch (Exception eee) { String msg = String.format("Can't put value '%s' in field '%s'", v, fqfield); error += "\n<li>" + msg + "</li>"; @@ -505,11 +562,7 @@ } } } - client.store(w); - - getContext().addInfoMessage("message", "Object saved" + error); - - return renderURL("/wikitty/view/"+w.getId()); + return error; } public Render delete(ChoremClient client, String id, String[] extension) { Modified: trunk/chorem-webmotion/src/main/resources/mapping =================================================================== --- trunk/chorem-webmotion/src/main/resources/mapping 2012-08-03 13:49:37 UTC (rev 223) +++ trunk/chorem-webmotion/src/main/resources/mapping 2012-08-03 13:56:02 UTC (rev 224) @@ -15,12 +15,9 @@ * / view:index.jsp * /wikitty/{extension}/search action:GenericAction.search * /wikitty/Employee/view/{id} action:GenericAction.extensionView extension=Employee -* /wikitty/Person/view/{id} action:GenericAction.extensionView extension=Person +* /wikitty/Person/view/{id} action:GenericAction.extensionView extension=Person * /wikitty/{extension}/view/{id} action:GenericAction.view -* /wikitty/Company/edit/{id} action:GenericAction.extensionEdit extension=Company * /wikitty/{extension}/edit/{id} action:GenericAction.edit -* /wikitty/{wikittyId}/Attachment/edit/new action:LinkAction.addAttachment -* /wikitty/{wikittyId}/ContactDetails/edit/new action:LinkAction.addContactDetails * /wikitty/{extension}/delete/{id} action:GenericAction.delete * /wikitty/search action:GenericAction.search * /wikitty/searchRelated?id={query} action:GenericAction.search Modified: trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/employee/view.jsp =================================================================== --- trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/employee/view.jsp 2012-08-03 13:49:37 UTC (rev 223) +++ trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/employee/view.jsp 2012-08-03 13:56:02 UTC (rev 224) @@ -51,10 +51,10 @@ </dl> <p> - <a class="btn btn-success" href="<c:url value="/wikitty/${wikitty.id}/Attachment/edit/new"/>"><i class="icon-plus icon-white"></i> Add Attachment</a> + <a class="btn btn-success" href="<c:url value="/wikitty/Attachment/edit/new?Attachment.target=${wikitty.id}"/>"><i class="icon-plus icon-white"></i> Add Attachment</a> </p> <p> - <a class="btn btn-success" href="<c:url value="/wikitty/${wikitty.id}/ContactDetails/edit/new"/>"><i class="icon-plus icon-white"></i> Add Contact Details</a> + <a class="btn btn-success" href="<c:url value="/wikitty/ContactDetails/edit/new?ContactDetails.target=${wikitty.id}"/>"><i class="icon-plus icon-white"></i> Add Contact Details</a> </p> <div class="container"> Modified: trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/person/view.jsp =================================================================== --- trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/person/view.jsp 2012-08-03 13:49:37 UTC (rev 223) +++ trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/person/view.jsp 2012-08-03 13:56:02 UTC (rev 224) @@ -42,10 +42,10 @@ </dl> <p> - <a class="btn btn-success" href="<c:url value="/wikitty/${wikitty.id}/Attachment/edit/new"/>"><i class="icon-plus icon-white"></i> Add Attachment</a> + <a class="btn btn-success" href="<c:url value="/wikitty/Attachment/edit/new?Attachment.target=${wikitty.id}"/>"><i class="icon-plus icon-white"></i> Add Attachment</a> </p> <p> - <a class="btn btn-success" href="<c:url value="/wikitty/${wikitty.id}/ContactDetails/edit/new"/>"><i class="icon-plus icon-white"></i> Add Contact Details</a> + <a class="btn btn-success" href="<c:url value="/wikitty/ContactDetails/edit/new?ContactDetails.target=${wikitty.id}"/>"><i class="icon-plus icon-white"></i> Add Contact Details</a> </p> <div class="container"> Modified: trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/view.jsp =================================================================== --- trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/view.jsp 2012-08-03 13:49:37 UTC (rev 223) +++ trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/view.jsp 2012-08-03 13:56:02 UTC (rev 224) @@ -45,8 +45,11 @@ <p> <c:if test="${not empty wikitty}"> <p> - <a class="btn btn-success" href="<c:url value="/wikitty/${wikitty.id}/Attachment/edit/new"/>"><i class="icon-plus icon-white"></i> Add Attachment</a> + <a class="btn btn-success" href="<c:url value="/wikitty/Attachment/edit/new?Attachment.target=${wikitty.id}"/>"><i class="icon-plus icon-white"></i> Add Attachment</a> </p> + <p> + <a class="btn btn-success" href="<c:url value="/wikitty/Note/edit/new?Note.target=${wikitty.id}"/>"><i class="icon-plus icon-white"></i> Add Note</a> + </p> </c:if> </p>