Chorem-commits
Threads by month
- ----- 2026 -----
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
March 2015
- 1 participants
- 11 discussions
01/11: refs #882 : Initiate CRM using bootcards and angular. Working nice on easy stuff.
by chorem.org scm 19 Mar '15
by chorem.org scm 19 Mar '15
19 Mar '15
This is an automated email from the git hooks/post-receive script.
New commit to branch feature/882-angular in repository chorem.
See http://git.chorem.org/chorem.git
commit e0f1a75ecab7601c6e35b02d15d0424fc11b4974
Author: kootox <jean.couteau(a)gmail.com>
Date: Tue Mar 3 11:19:00 2015 +0100
refs #882 : Initiate CRM using bootcards and angular. Working nice on easy stuff.
---
.../webmotion/actions/crm/CompaniesAction.java | 38 ++++
.../chorem/webmotion/actions/crm/CompanyDTO.java | 45 +++++
.../actions/crm/ContactDetailsAction.java | 38 ++++
.../webmotion/actions/crm/ContactDetailsDTO.java | 54 ++++++
chorem-webmotion/src/main/resources/mapping | 4 +
.../main/webapp/WEB-INF/jsp/crm/angularTest.html | 192 +++++++++++++++++++++
chorem-webmotion/src/main/webapp/js/crm.js | 72 ++++++++
7 files changed, 443 insertions(+)
diff --git a/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/crm/CompaniesAction.java b/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/crm/CompaniesAction.java
new file mode 100644
index 0000000..3ff8f91
--- /dev/null
+++ b/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/crm/CompaniesAction.java
@@ -0,0 +1,38 @@
+package org.chorem.webmotion.actions.crm;
+
+import org.chorem.ChoremClient;
+import org.chorem.entities.Company;
+import org.debux.webmotion.server.WebMotionController;
+import org.debux.webmotion.server.render.Render;
+import org.nuiton.wikitty.query.WikittyQuery;
+import org.nuiton.wikitty.query.WikittyQueryMaker;
+import org.nuiton.wikitty.query.WikittyQueryResult;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Created by couteau on 02/03/15.
+ */
+public class CompaniesAction extends WebMotionController {
+
+ public Render listCompanies(ChoremClient client) {
+ //recuperation des contact details
+ WikittyQuery companiesQuery = new WikittyQueryMaker().and()
+ .exteq(Company.EXT_COMPANY)
+ .end().setLimit(WikittyQuery.MAX);
+
+ WikittyQueryResult<Company> companies =
+ client.findAllByQuery(Company.class,
+ companiesQuery);
+
+ List<CompanyDTO> companyDTOs = new ArrayList<>();
+
+ for (Company company:companies.getAll()){
+ companyDTOs.add(new CompanyDTO(company));
+ }
+
+ return renderJSON(companyDTOs);
+ }
+
+}
diff --git a/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/crm/CompanyDTO.java b/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/crm/CompanyDTO.java
new file mode 100644
index 0000000..7e57379
--- /dev/null
+++ b/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/crm/CompanyDTO.java
@@ -0,0 +1,45 @@
+package org.chorem.webmotion.actions.crm;
+
+import org.chorem.entities.Company;
+
+/**
+ * Created by couteau on 02/03/15.
+ */
+public class CompanyDTO {
+
+ protected String name;
+
+ protected String wikittyId;
+
+ protected String type;
+
+ public CompanyDTO (Company company) {
+ this.name = company.getName();
+ this.type = company.getType();
+ this.wikittyId = company.getWikittyId();
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getWikittyId() {
+ return wikittyId;
+ }
+
+ public void setWikittyId(String wikittyId) {
+ this.wikittyId = wikittyId;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+}
diff --git a/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/crm/ContactDetailsAction.java b/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/crm/ContactDetailsAction.java
new file mode 100644
index 0000000..ae52c43
--- /dev/null
+++ b/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/crm/ContactDetailsAction.java
@@ -0,0 +1,38 @@
+package org.chorem.webmotion.actions.crm;
+
+import org.chorem.ChoremClient;
+import org.chorem.entities.ContactDetails;
+import org.debux.webmotion.server.WebMotionController;
+import org.debux.webmotion.server.render.Render;
+import org.nuiton.wikitty.query.WikittyQuery;
+import org.nuiton.wikitty.query.WikittyQueryMaker;
+import org.nuiton.wikitty.query.WikittyQueryResult;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Created by couteau on 02/03/15.
+ */
+public class ContactDetailsAction extends WebMotionController {
+
+ public Render listContactDetails(ChoremClient client, String id) {
+ //recuperation des contact details
+ WikittyQuery contactDetailsQuery = new WikittyQueryMaker().and()
+ .exteq(ContactDetails.EXT_CONTACTDETAILS)
+ .eq(ContactDetails.FQ_FIELD_CONTACTDETAILS_TARGET, id)
+ .end().setLimit(WikittyQuery.MAX);
+
+ WikittyQueryResult<ContactDetails> contacts =
+ client.findAllByQuery(ContactDetails.class,
+ contactDetailsQuery);
+
+ List<ContactDetailsDTO> contactDTOs = new ArrayList<>();
+
+ for (ContactDetails contact:contacts.getAll()){
+ contactDTOs.add(new ContactDetailsDTO(contact));
+ }
+
+ return renderJSON(contactDTOs);
+ }
+}
diff --git a/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/crm/ContactDetailsDTO.java b/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/crm/ContactDetailsDTO.java
new file mode 100644
index 0000000..1ad09eb
--- /dev/null
+++ b/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/crm/ContactDetailsDTO.java
@@ -0,0 +1,54 @@
+package org.chorem.webmotion.actions.crm;
+
+import org.chorem.entities.ContactDetails;
+
+/**
+ * Created by couteau on 02/03/15.
+ */
+public class ContactDetailsDTO {
+ protected String name;
+ protected String type;
+ protected String value;
+ protected String target;
+ protected String wikittyId;
+
+ public ContactDetailsDTO(ContactDetails contact) {
+ this.name = contact.getName();
+ this.value = contact.getValue();
+ this.type = contact.getType();
+ this.target = contact.getTarget();
+ this.wikittyId = contact.getWikittyId();
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ public String getValue() {
+ return value;
+ }
+
+ public void setValue(String value) {
+ this.value = value;
+ }
+
+ public String getTarget() {
+ return target;
+ }
+
+ public void setTarget(String target) {
+ this.target = target;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+}
diff --git a/chorem-webmotion/src/main/resources/mapping b/chorem-webmotion/src/main/resources/mapping
index e1bf470..0fd0413 100644
--- a/chorem-webmotion/src/main/resources/mapping
+++ b/chorem-webmotion/src/main/resources/mapping
@@ -18,6 +18,7 @@ default.render=org.debux.webmotion.server.render.DefaultRender
* /hr/employeeEdit/json/* DecoratorFilter.decorate wmDecoratorNo=true
* /ascii/* DecoratorFilter.decorate wmDecoratorNo=true
* /rest/* DecoratorFilter.decorate wmDecoratorNo=true
+* /crm/* DecoratorFilter.decorate wmDecoratorNo=true
GET /* DecoratorFilter.decorate
* /* AuthenticationFilter.check
#####
@@ -93,6 +94,9 @@ GET /* DecoratorFilter.decorate
* /crm/account/{id} action:crm.AccountAction.view
* /crm/quotation/edit/{id} action:crm.QuotationAction.edit
* /crm/export action:crm.ExportAction.exportContactBase
+GET /crm/companies.html view:crm/angularTest.html
+GET /crm/companies action:crm.CompaniesAction.listCompanies
+GET /crm/companies/{id}/contactDetails action:crm.ContactDetailsAction.listContactDetails
GET /rest/project/projects?page={page}&count={count} action:project.ProjectsAction.findAllProjects page=1,count=10
GET /project/projects view:projects/projects.jsp
diff --git a/chorem-webmotion/src/main/webapp/WEB-INF/jsp/crm/angularTest.html b/chorem-webmotion/src/main/webapp/WEB-INF/jsp/crm/angularTest.html
new file mode 100644
index 0000000..5624d4a
--- /dev/null
+++ b/chorem-webmotion/src/main/webapp/WEB-INF/jsp/crm/angularTest.html
@@ -0,0 +1,192 @@
+<!DOCTYPE html>
+<html lang="en" ng-app="crmTest">
+
+<head>
+ <meta charset="utf-8">
+ <title>CRM Bootcards Angular test</title>
+ <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css">
+
+ <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script>
+ <script src="/chorem/js/crm.js"></script>
+ <link href="https://cdnjs.cloudflare.com/ajax/libs/bootcards/1.1.0/css/bootcards-deskto…" rel="stylesheet">
+ <link href="https://netdna.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css" rel="stylesheet" />
+ <script src="https://code.jquery.com/jquery-2.1.3.min.js"></script>
+</head>
+
+<body>
+
+<div class="container bootcards-container" id="main">
+ <div class="row">
+ <div class="col-sm-6 bootcards-list" id="list" ng-controller="CompanyListController">
+ <div class="panel panel-default">
+ <div class="panel-body">
+ <div class="search-form">
+ <div class="row">
+ <div class="col-xs-9">
+ <div class="form-group">
+ <input type="text" class="form-control" placeholder="Search Companies..."
+ ng-model="search" ng-change="updateList()">
+ <i class="fa fa-search"></i>
+ </div>
+ </div>
+ <div class="col-xs-3">
+ <a class="btn btn-primary btn-block" href="#">
+ <i class="fa fa-plus"></i>
+ <span>Add</span>
+ </a>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <div class="list-group">
+ <a class="list-group-item" href="#"
+ ng-repeat="company in filteredCompanies | orderBy:'name' "
+ ng-class="{'active':isCompanySelected(company)}"
+ ng-click="setCompanySelected(company)">
+ <i class="fa fa-3x fa-building-o pull-left"></i>
+ <h4 class="list-group-item-heading">{{company.name}}</h4>
+ <p class="list-group-item-text">{{company.type}} </p>
+ </a>
+
+ </div>
+
+ <div class="panel-footer">
+ <small class="pull-left"> </small>
+ </div>
+
+ </div>
+
+ </div>
+
+ <div class="col-sm-6 bootcards-cards" id="listDetails" ng-controller="CompanyDetailsController">
+ <!-- company info card -->
+ <div id="companyCard">
+
+ <div class="panel panel-default">
+ <div class="panel-heading clearfix">
+ <h3 class="panel-title pull-left">Détails de la société</h3>
+ <div class="btn-group pull-right visible-xs">
+ <a class="btn btn-primary" href="#"
+ data-toggle="modal"
+ data-target="#editModal">
+ <i class="fa fa-pencil"></i>
+ <span>Edit</span>
+ </a>
+ </div>
+ <a class="btn btn-primary pull-right hidden-xs" href="#"
+ data-toggle="modal"
+ data-target="#editModal">
+ <i class="fa fa-pencil"></i>
+ <span>Edit</span>
+ </a>
+ </div>
+ <div class="list-group">
+ <div class="list-group-item">
+ <i class="fa fa-2x fa-building-o pull-left"></i>
+ <label>Nom</label>
+ <h4 class="list-group-item-heading">{{company.name}}</h4>
+ </div>
+ <div class="list-group-item">
+ <label>Type</label>
+ <h4 class="list-group-item-heading">{{company.type}}</h4>
+ </div>
+ </div>
+ <div class="panel-footer">
+ <small class="pull-left"> </small>
+ </div>
+ </div>
+
+ </div>
+
+ <!-- contact details card -->
+ <div id="contactDetailsListCard">
+
+ <div class="panel panel-default">
+ <div class="panel-heading clearfix">
+ <h3 class="panel-title pull-left">Moyens de contact</h3>
+ <div class="btn-group pull-right visible-xs">
+ <a class="btn btn-primary" href="#"
+ data-toggle="modal"
+ data-target="#editModal">
+ <i class="fa fa-pencil"></i>
+ <span>Edit</span>
+ </a>
+ </div>
+ <a class="btn btn-primary pull-right hidden-xs" href="#"
+ data-toggle="modal"
+ data-target="#editModal">
+ <i class="fa fa-pencil"></i>
+ <span>Edit</span>
+ </a>
+ </div>
+ <div class="list-group">
+ <div class="list-group-item"
+ ng-repeat="contact in contactDetails">
+ <label>{{contact.type}} - {{contact.name}}</label>
+ <h4 class="list-group-item-heading">{{contact.value}}</h4>
+ </div>
+ </div>
+ <div class="panel-footer">
+ <small class="pull-left"> </small>
+ </div>
+ </div>
+ </div>
+
+ <!-- notes card -->
+ <div id="notesListCard">
+ <%@include file="cards/notesListCard.jsp" %>
+ </div>
+
+ <!--employees card -->
+ <%@include file="cards/employeesListCard.jsp" %>
+ </div>
+
+ </div>
+
+</div>
+
+<!-- Load the required JavaScript libraries -->
+
+<script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.1/js/bootstrap.min.js"></script>
+<script src="//cdnjs.cloudflare.com/ajax/libs/jqueryui/1.10.4/jquery-ui.min.js"></script>
+
+<!-- Bootcards JS file -->
+<script src="https://cdnjs.cloudflare.com/ajax/libs/bootcards/1.1.0/js/bootcards.js"></script>
+
+<!--modals-->
+<div class="modal fade" id="editModal" tabindex="-1" role="dialog" aria-labelledby="editModal" aria-hidden="true">
+ <div class="modal-dialog">
+ <div class="modal-content"></div>
+ </div>
+</div>
+
+<div class="modal fade" id="docsModal" tabindex="-1" role="dialog" aria-labelledby="docsModal" aria-hidden="true">
+ <div class="modal-dialog">
+ <div class="modal-content"></div>
+ </div>
+</div>
+
+<script type="text/javascript">
+ /*
+ * Initialize Bootcards.
+ *
+ * Parameters:
+ * - offCanvasBackdrop (boolean): show a backdrop when the offcanvas is shown
+ * - offCanvasHideOnMainClick (boolean): hide the offcanvas menu on clicking outside the off canvas
+ * - enableTabletPortraitMode (boolean): enable single pane mode for tablets in portraitmode
+ * - disableRubberBanding (boolean): disable the iOS rubber banding effect
+ * - disableBreakoutSelector (boolean) : for iOS apps that are added to the home screen:
+ jQuery selector to target links for which a fix should be added to not
+ allow those links to break out of fullscreen mode.
+ */
+
+ bootcards.init( {
+ offCanvasBackdrop : true,
+ offCanvasHideOnMainClick : true,
+ enableTabletPortraitMode : true,
+ disableRubberBanding : true
+ });
+ </script>
+
+</body>
diff --git a/chorem-webmotion/src/main/webapp/js/crm.js b/chorem-webmotion/src/main/webapp/js/crm.js
new file mode 100644
index 0000000..95cb0ae
--- /dev/null
+++ b/chorem-webmotion/src/main/webapp/js/crm.js
@@ -0,0 +1,72 @@
+var crmTest = angular.module('crmTest', []);
+
+crmTest.factory('sharedService', function($rootScope){
+ var sharedService = {};
+
+ sharedService.company = '';
+
+ sharedService.broadcastCompanySelected = function (company) {
+ this.company = company;
+ $rootScope.$broadcast('companySelected');
+ }
+
+ return sharedService;
+
+});
+
+crmTest.controller('CompanyListController', function ($scope, $http, sharedService) {
+
+ $http.get('companies').success(function(data){
+ $scope.companies = data;
+ $scope.companySelected=$scope.companies[0];
+ sharedService.broadcastCompanySelected($scope.companySelected);
+ $scope.updateList();
+ });
+
+ $scope.companies = '';
+
+ $scope.filteredCompanies = $scope.companies;
+
+ $scope.search="";
+
+ $scope.companySelected=$scope.companies[0];
+
+ $scope.setCompanySelected=function(selectedCompany){
+ $scope.companySelected = selectedCompany;
+ sharedService.broadcastCompanySelected(selectedCompany);
+ };
+
+ $scope.isCompanySelected=function(selectedCompany){
+ return selectedCompany===$scope.companySelected;
+ };
+
+ $scope.updateList=function(){
+ $scope.filteredCompanies=[];
+ for (var index in $scope.companies) {
+ var company = $scope.companies[index];
+ if (company.name.indexOf($scope.search)>-1){
+ $scope.filteredCompanies.push(company);
+ }
+ }
+ }
+
+});
+
+crmTest.controller('CompanyDetailsController', function ($scope, $http, sharedService){
+ $scope.company = '';
+
+ $scope.contactDetails = '';
+
+ $scope.$on('companySelected', function(){
+ $scope.company=sharedService.company;
+ $scope.updateContactDetails();
+ });
+
+ $scope.updateContactDetails=function(){
+ $http.get('companies/'+$scope.company.wikittyId+"/contactDetails").success(function(data){
+ $scope.contactDetails = data;
+ });
+
+ };
+
+});
\ No newline at end of file
--
To stop receiving notification emails like this one, please contact
chorem.org SCM administrator <admin+scm(a)chorem.org>.
1
0