r391 - in trunk: . chorem-webmotion chorem-webmotion/src/main/java/org/chorem/webmotion/actions/crm chorem-webmotion/src/main/resources chorem-webmotion/src/main/webapp/WEB-INF/jsp
Author: jcouteau Date: 2013-09-13 17:41:44 +0200 (Fri, 13 Sep 2013) New Revision: 391 Url: http://chorem.org/projects/chorem/repository/revisions/391 Log: Fixes #836 : Export contact base as csv. It exports all employees, with email adress mobile phone and fix phone, coming from person/company/employee, each one overriding previous info if any (by importance order in fact). Added: trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/crm/ContactRowForExport.java trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/crm/ContactRowForExportModel.java trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/crm/ExportAction.java Removed: trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/crm/Company.java trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/crm/Project.java Modified: trunk/chorem-webmotion/pom.xml trunk/chorem-webmotion/src/main/resources/mapping trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/decorator.jsp trunk/pom.xml Modified: trunk/chorem-webmotion/pom.xml =================================================================== --- trunk/chorem-webmotion/pom.xml 2013-09-13 12:31:00 UTC (rev 390) +++ trunk/chorem-webmotion/pom.xml 2013-09-13 15:41:44 UTC (rev 391) @@ -171,6 +171,11 @@ </dependency> <dependency> + <groupId>org.nuiton</groupId> + <artifactId>nuiton-csv</artifactId> + </dependency> + + <dependency> <groupId>org.debux.webmotion</groupId> <artifactId>webmotion</artifactId> </dependency> Deleted: trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/crm/Company.java =================================================================== --- trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/crm/Company.java 2013-09-13 12:31:00 UTC (rev 390) +++ trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/crm/Company.java 2013-09-13 15:41:44 UTC (rev 391) @@ -1,7 +0,0 @@ -package org.chorem.webmotion.actions.crm; - -/** - * @author jcouteau <couteau@codelutin.com> - */ -public class Company { -} Added: trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/crm/ContactRowForExport.java =================================================================== --- trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/crm/ContactRowForExport.java (rev 0) +++ trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/crm/ContactRowForExport.java 2013-09-13 15:41:44 UTC (rev 391) @@ -0,0 +1,77 @@ +package org.chorem.webmotion.actions.crm; + +/** + * + * @author couteau + * @version $Revision$ + * + * Last update: $Date$ + * by : $Author$ + */ +public class ContactRowForExport { + + String firstName; + String lastName; + String company; + String address; + String mobilePhone; + String fixPhone; + String email; + + + public String getFirstName() { + return firstName; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + public String getLastName() { + return lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } + + public String getCompany() { + return company; + } + + public void setCompany(String company) { + this.company = company; + } + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } + + public String getMobilePhone() { + return mobilePhone; + } + + public void setMobilePhone(String mobilePhone) { + this.mobilePhone = mobilePhone; + } + + public String getFixPhone() { + return fixPhone; + } + + public void setFixPhone(String fixPhone) { + this.fixPhone = fixPhone; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } +} Added: trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/crm/ContactRowForExportModel.java =================================================================== --- trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/crm/ContactRowForExportModel.java (rev 0) +++ trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/crm/ContactRowForExportModel.java 2013-09-13 15:41:44 UTC (rev 391) @@ -0,0 +1,47 @@ +package org.chorem.webmotion.actions.crm; + +import org.nuiton.csv.ExportModel; +import org.nuiton.csv.ExportableColumn; +import org.nuiton.csv.ModelBuilder; + +/** + * + * @author couteau + * @version $Revision$ + * + * Last update: $Date$ + * by : $Author$ + */ +public class ContactRowForExportModel implements ExportModel<ContactRowForExport> { + + @Override + + public char getSeparator() { + return ';'; + } + + @Override + + public Iterable<ExportableColumn<ContactRowForExport, Object>> getColumnsForExport() { + + ModelBuilder<ContactRowForExport> modelBuilder = new ModelBuilder<ContactRowForExport>(); + + modelBuilder.newColumnForExport("FIRSTNAME", "firstName"); + + modelBuilder.newColumnForExport("LASTNAME", "lastName"); + + modelBuilder.newColumnForExport("COMPANY", "company"); + + modelBuilder.newColumnForExport("ADDRESS", "address"); + + modelBuilder.newColumnForExport("MOBILE", "mobilePhone"); + + modelBuilder.newColumnForExport("FIX", "fixPhone"); + + modelBuilder.newColumnForExport("EMAIL", "email"); + + return (Iterable) modelBuilder.getColumnsForExport(); + + } + +} Added: trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/crm/ExportAction.java =================================================================== --- trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/crm/ExportAction.java (rev 0) +++ trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/crm/ExportAction.java 2013-09-13 15:41:44 UTC (rev 391) @@ -0,0 +1,125 @@ +package org.chorem.webmotion.actions.crm; + +import org.apache.commons.io.IOUtils; +import org.chorem.ChoremClient; +import org.chorem.entities.ContactDetails; +import org.chorem.entities.Employee; +import org.chorem.entities.Company; +import org.chorem.entities.Person; +import org.debux.webmotion.server.WebMotionController; +import org.debux.webmotion.server.render.Render; +import org.nuiton.csv.Export; +import org.nuiton.csv.ExportModel; +import org.nuiton.wikitty.query.WikittyQuery; +import org.nuiton.wikitty.query.WikittyQueryMaker; +import org.nuiton.wikitty.query.WikittyQueryResult; + +import java.io.*; +import java.util.ArrayList; +import java.util.List; + +/** + * + * @author couteau + * @version $Revision$ + * + * Last update: $Date$ + * by : $Author$ + */ +public class ExportAction extends WebMotionController { + + public Render exportContactBase(ChoremClient client) throws Exception { + + // création du modèle d'export csv + ExportModel<ContactRowForExport> csvModel = new ContactRowForExportModel(); + + // les données à exporter + List<ContactRowForExport> datas = new ArrayList<ContactRowForExport>(); + + // recuperation des quotations en statut lead + WikittyQuery contactsQuery = new WikittyQueryMaker().and() + .exteq(Employee.EXT_EMPLOYEE) + .end().setLimit(WikittyQuery.MAX); + + WikittyQueryResult<Employee> contacts = + client.findAllByQuery(Employee.class, contactsQuery); + + for(Employee contact:contacts){ + ContactRowForExport contactRow = new ContactRowForExport(); + //Contact company + Company company = client.restore(Company.class, contact.getCompany(), ""); + contactRow.setCompany(company.getName()); + + //contact names + Person person = client.restore(Person.class, contact.getPerson()); + contactRow.setFirstName(person.getFirstName()); + contactRow.setLastName(person.getLastName()); + + //start with person info + WikittyQuery personContactDetailsQuery = new WikittyQueryMaker().and() + .exteq(ContactDetails.EXT_CONTACTDETAILS) + .eq(ContactDetails.ELEMENT_FIELD_CONTACTDETAILS_TARGET, person.getWikittyId()) + .end().setLimit(WikittyQuery.MAX); + WikittyQueryResult<ContactDetails> personContactDetails = + client.findAllByQuery(ContactDetails.class, personContactDetailsQuery); + for (ContactDetails detail:personContactDetails) { + addContactDetail(contactRow, detail); + } + + //then company info (override person info if duplicate) + WikittyQuery companyContactDetailsQuery = new WikittyQueryMaker().and() + .exteq(ContactDetails.EXT_CONTACTDETAILS) + .eq(ContactDetails.ELEMENT_FIELD_CONTACTDETAILS_TARGET, company.getWikittyId()) + .end().setLimit(WikittyQuery.MAX); + WikittyQueryResult<ContactDetails> companyContactDetails = + client.findAllByQuery(ContactDetails.class, companyContactDetailsQuery); + for (ContactDetails detail:companyContactDetails) { + addContactDetail(contactRow, detail); + } + + //end with employee info (override previous info if duplicate) + WikittyQuery employeeContactDetailsQuery = new WikittyQueryMaker().and() + .exteq(ContactDetails.EXT_CONTACTDETAILS) + .eq(ContactDetails.ELEMENT_FIELD_CONTACTDETAILS_TARGET, contact.getWikittyId()) + .end().setLimit(WikittyQuery.MAX); + WikittyQueryResult<ContactDetails> employeeContactDetails = + client.findAllByQuery(ContactDetails.class, employeeContactDetailsQuery); + for (ContactDetails detail:companyContactDetails) { + addContactDetail(contactRow, detail); + } + + datas.add(contactRow); + } + + + + // création d'un exporter + Export<ContactRowForExport> exporter = Export.newExport(csvModel, datas); + + // lancement de l'export + OutputStream stream = new ByteArrayOutputStream(); + exporter.write(stream); + + return renderDownload(IOUtils.toInputStream(stream.toString()), "contacts.csv", "text/csv"); + } + + protected void addContactDetail(ContactRowForExport contact,ContactDetails detail) { + if ("email".equalsIgnoreCase(detail.getType()) + || "mail".equalsIgnoreCase(detail.getType())){ + contact.setEmail(detail.getValue()); + } + if ("adresse".equalsIgnoreCase(detail.getType())){ + contact.setAddress(detail.getValue()); + } + if ("téléphone".equalsIgnoreCase(detail.getType()) + || "telephone".equalsIgnoreCase(detail.getType()) + || "phone".equalsIgnoreCase(detail.getType())){ + if ("mobile".equalsIgnoreCase(detail.getName())){ + contact.setMobilePhone(detail.getValue()); + } else { + contact.setFixPhone(detail.getValue()); + } + } + + } +} Deleted: trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/crm/Project.java =================================================================== --- trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/crm/Project.java 2013-09-13 12:31:00 UTC (rev 390) +++ trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/crm/Project.java 2013-09-13 15:41:44 UTC (rev 391) @@ -1,7 +0,0 @@ -package org.chorem.webmotion.actions.crm; - -/** - * @author jcouteau <couteau@codelutin.com> - */ -public class Project { -} Modified: trunk/chorem-webmotion/src/main/resources/mapping =================================================================== --- trunk/chorem-webmotion/src/main/resources/mapping 2013-09-13 12:31:00 UTC (rev 390) +++ trunk/chorem-webmotion/src/main/resources/mapping 2013-09-13 15:41:44 UTC (rev 391) @@ -11,8 +11,9 @@ * /fragment/* DecoratorFilter.decorate wmDecoratorNo=true * /sales/funnel/json/* DecoratorFilter.decorate wmDecoratorNo=true * /sales/funnel/partial/* DecoratorFilter.decorate wmDecoratorNo=true +* /crm/export DecoratorFilter.decorate wmDecoratorNo=true * /project/json/* DecoratorFilter.decorate wmDecoratorNo=true -* /hr/employeeEdit/json/* DecoratorFilter.decorate wmDecoratorNo=true +* /hr/employeeEdit/json/* DecoratorFilter.decorate wmDecoratorNo=true * /ascii/* DecoratorFilter.decorate wmDecoratorNo=true * /rest/* DecoratorFilter.decorate wmDecoratorNo=true GET /* DecoratorFilter.decorate @@ -89,6 +90,8 @@ * /project/employee action:project.DashboardProjectAction.requestEmployee * /crm/account/{id} action:crm.AccountAction.view * /crm/quotation/edit/{id} action:crm.QuotationAction.edit +* /crm/export action:crm.ExportAction.exportContactBase + # # Wikitty Rest API # Modified: trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/decorator.jsp =================================================================== --- trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/decorator.jsp 2013-09-13 12:31:00 UTC (rev 390) +++ trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/decorator.jsp 2013-09-13 15:41:44 UTC (rev 391) @@ -97,6 +97,8 @@ <li class="divider"></li> <li><a href="<c:url value="/wikitty/Touch/search"/>"><i class="icon-th-list icon-black"></i> All touch</a></li> <li><a href="<c:url value="/wikitty/Touch/edit/new"/>"><i class="icon-plus icon-black"></i> Add touch</a></li> + <li class="divider"></li> + <li><a href="<c:url value="/crm/export"/>"> Export</li> </ul> </li> <li class="dropdown nav-group"> Modified: trunk/pom.xml =================================================================== --- trunk/pom.xml 2013-09-13 12:31:00 UTC (rev 390) +++ trunk/pom.xml 2013-09-13 15:41:44 UTC (rev 391) @@ -90,6 +90,7 @@ <nuitonUtilsVersion>2.6.9</nuitonUtilsVersion> <nuitonWebVersion>1.7</nuitonWebVersion> <nuitonI18nVersion>2.3.1</nuitonI18nVersion> + <nuitonCsvVersion>3.0-alpha-1</nuitonCsvVersion> <wikittyVersion>3.10-SNAPSHOT</wikittyVersion> <slf4jVersion>1.6.1</slf4jVersion> <javaxMailVersion>1.4.3</javaxMailVersion> @@ -142,6 +143,14 @@ <version>${nuitonUtilsVersion}</version> </dependency> + + + <dependency> + <groupId>org.nuiton</groupId> + <artifactId>nuiton-csv</artifactId> + <version>${nuitonCsvVersion}</version> + </dependency> + <dependency> <groupId>org.nuiton.web</groupId> <artifactId>nuiton-struts2</artifactId>
participants (1)
-
jcouteau@users.chorem.org