Commit 7598c58f53b9142a2af7e32009b5d7887cc3e62d

Authored by Apichat.Tum
1 parent 77034810
Exists in master

add eventTypeID / UI Filter

app/controllers/home.controller.js
@@ -37,7 +37,7 @@ function ggToKendo(data) { @@ -37,7 +37,7 @@ function ggToKendo(data) {
37 for (var n = 0; n < data.items.length; n++) { 37 for (var n = 0; n < data.items.length; n++) {
38 dataToArr.push({ 38 dataToArr.push({
39 "TaskID": data.items[n].id, 39 "TaskID": data.items[n].id,
40 - "OwnerID": 2, 40 + "EventTypeID": checkObjEmpty(data.items[n].extendedProperties, 'private'),
41 "Title": data.items[n].summary, 41 "Title": data.items[n].summary,
42 "Description": data.items[n].description, 42 "Description": data.items[n].description,
43 "StartTimezone": "Asia/Bangkok", 43 "StartTimezone": "Asia/Bangkok",
@@ -125,14 +125,19 @@ function eventCreate(req, res) { @@ -125,14 +125,19 @@ function eventCreate(req, res) {
125 payload = payload.models[0] 125 payload = payload.models[0]
126 } 126 }
127 127
128 - let summary = payload.summary  
129 - let description = payload.description  
130 - let email = payload.email  
131 - let startDate = payload.startDate  
132 - let startTimezone = payload.startTimezone  
133 - let endDate = payload.endDate  
134 - let endTimezone = payload.endTimezone  
135 - let extendedProperties = payload.extendedProperties 128 + // let summary = payload.summary
  129 + // let description = payload.description
  130 + // let email = payload.email
  131 + // let startDate = payload.startDate
  132 + // let startTimezone = payload.startTimezone
  133 + // let endDate = payload.endDate
  134 + // let endTimezone = payload.endTimezone
  135 + // // let extendedProperties = payload.extendedProperties
  136 + // payload.extendedProperties = {
  137 + // "private": {
  138 + // "eventTypeID": payload.EventTypeID
  139 + // }
  140 + // }
136 141
137 lib.authorize((err, auth) => { 142 lib.authorize((err, auth) => {
138 let options = lib.eventBuilder(payload) 143 let options = lib.eventBuilder(payload)
@@ -225,6 +230,16 @@ function eventUpdate(req, res) { @@ -225,6 +230,16 @@ function eventUpdate(req, res) {
225 }) 230 })
226 } 231 }
227 232
  233 +function checkObjEmpty(obj, parm) {
  234 + if (obj) {
  235 + if (Object.getOwnPropertyNames(obj)) {
  236 + return obj[parm].eventTypeID
  237 + }
  238 + } else {
  239 + return
  240 + }
  241 +
  242 +}
228 243
229 module.exports.index = index 244 module.exports.index = index
230 module.exports.events = events 245 module.exports.events = events
app/lib/index.js
@@ -156,7 +156,8 @@ module.exports = { @@ -156,7 +156,8 @@ module.exports = {
156 calendar.events.update({ 156 calendar.events.update({
157 auth: options.auth, 157 auth: options.auth,
158 calendarId: CALENDAR_ID || 'primary', 158 calendarId: CALENDAR_ID || 'primary',
159 - eventId: options.eventId 159 + eventId: options.eventId,
  160 + resource: options
160 }, (err, response) => { 161 }, (err, response) => {
161 if (err) return callback(err); 162 if (err) return callback(err);
162 163
@@ -192,8 +193,12 @@ module.exports = { @@ -192,8 +193,12 @@ module.exports = {
192 ] 193 ]
193 } 194 }
194 } 195 }
195 - if (payload.extendedProperties) {  
196 - buildPayload.extendedProperties = payload.extendedProperties 196 + if (payload.EventTypeID) {
  197 + buildPayload.extendedProperties = {
  198 + "private": {
  199 + "eventTypeID": payload.EventTypeID
  200 + }
  201 + }
197 } 202 }
198 } catch (error) { 203 } catch (error) {
199 console.error(error.message) 204 console.error(error.message)
@@ -243,6 +248,13 @@ module.exports = { @@ -243,6 +248,13 @@ module.exports = {
243 ] 248 ]
244 } 249 }
245 } 250 }
  251 + if (payload.EventTypeID) {
  252 + buildPayload.extendedProperties = {
  253 + "private": {
  254 + "eventTypeID": payload.EventTypeID
  255 + }
  256 + }
  257 + }
246 if (payload.extendedProperties) { 258 if (payload.extendedProperties) {
247 buildPayload.extendedProperties = payload.extendedProperties 259 buildPayload.extendedProperties = payload.extendedProperties
248 } 260 }
app/routes/home.routes.js
@@ -3,7 +3,7 @@ var express = require(&#39;express&#39;) @@ -3,7 +3,7 @@ var express = require(&#39;express&#39;)
3 var router = express.Router() 3 var router = express.Router()
4 var home = require('../controllers/home.controller') 4 var home = require('../controllers/home.controller')
5 5
6 -router.get('/', home.index) 6 +router.get('/', home.home)
7 router.get('/home', home.home) 7 router.get('/home', home.home)
8 8
9 router.get('/events', home.events) 9 router.get('/events', home.events)
public/js/controllers/kendo.js
1 angular.module("KendoDemos", ["kendo.directives"]) 1 angular.module("KendoDemos", ["kendo.directives"])
2 .controller("MyCtrl", function ($scope, $http) { 2 .controller("MyCtrl", function ($scope, $http) {
  3 + $scope.monthPickerConfig = {
  4 + start: "year",
  5 + depth: "year",
  6 + format: "MMMM yyyy"
  7 + };
3 $scope.update = function () { 8 $scope.update = function () {
4 console.log("update") 9 console.log("update")
5 } 10 }
@@ -19,7 +24,7 @@ angular.module(&quot;KendoDemos&quot;, [&quot;kendo.directives&quot;]) @@ -19,7 +24,7 @@ angular.module(&quot;KendoDemos&quot;, [&quot;kendo.directives&quot;])
19 } 24 }
20 } else { 25 } else {
21 console.info(response) 26 console.info(response)
22 - schedulerStart() 27 + schedulerOptions2()
23 } 28 }
24 29
25 }, function errorCallback(response) { 30 }, function errorCallback(response) {
@@ -27,17 +32,39 @@ angular.module(&quot;KendoDemos&quot;, [&quot;kendo.directives&quot;]) @@ -27,17 +32,39 @@ angular.module(&quot;KendoDemos&quot;, [&quot;kendo.directives&quot;])
27 }); 32 });
28 } 33 }
29 getAuthURL() 34 getAuthURL()
  35 + $scope.filter = {}
  36 + $scope.data = {}
  37 + $scope.test = function () {
  38 + console.log($scope.operation)
  39 + }
30 40
31 function schedulerStart() { 41 function schedulerStart() {
32 $scope.schedulerOptions = { 42 $scope.schedulerOptions = {
33 date: new Date("2016/10/12"), 43 date: new Date("2016/10/12"),
34 - startTime: new Date("2016/10/12 07:00 AM"), 44 + startTime: new Date("2016/10/12 07:00"),
  45 + majorTimeHeaderTemplate: kendo.template("<strong>#=kendo.toString(date, 'HH:mm')#</strong><sup> เธ™.</sup>"),
  46 + minorTickCount: 1,
  47 + toolbar: ["pdf"],
  48 + messages: {
  49 + cancel: "Cancel",
  50 + save: "Save",
  51 + deleteWindowTitle: "Remove event",
  52 + pdf: "PDF Export",
  53 + editable: {
  54 + confirmation: "Are you sure you want to delete this event?"
  55 + },
  56 + editor: {
  57 + description: "Description"
  58 + }
  59 + },
35 height: 600, 60 height: 600,
36 views: [ 61 views: [
37 "day", 62 "day",
38 { type: "workWeek", selected: true }, 63 { type: "workWeek", selected: true },
39 "week", 64 "week",
40 "month", 65 "month",
  66 + "agenda",
  67 + "timeline"
41 ], 68 ],
42 timezone: "Asia/Bangkok", 69 timezone: "Asia/Bangkok",
43 dataSource: { 70 dataSource: {
@@ -83,32 +110,144 @@ angular.module(&quot;KendoDemos&quot;, [&quot;kendo.directives&quot;]) @@ -83,32 +110,144 @@ angular.module(&quot;KendoDemos&quot;, [&quot;kendo.directives&quot;])
83 recurrenceId: { from: "RecurrenceID" }, 110 recurrenceId: { from: "RecurrenceID" },
84 recurrenceRule: { from: "RecurrenceRule" }, 111 recurrenceRule: { from: "RecurrenceRule" },
85 recurrenceException: { from: "RecurrenceException" }, 112 recurrenceException: { from: "RecurrenceException" },
86 - ownerId: { from: "OwnerID", defaultValue: 1 }, 113 + eventTypeID: { from: "EventTypeID" },
87 isAllDay: { type: "boolean", from: "IsAllDay" } 114 isAllDay: { type: "boolean", from: "IsAllDay" }
88 } 115 }
89 } 116 }
90 }, 117 },
91 filter: { 118 filter: {
92 - logic: "or",  
93 - filters: [  
94 - { field: "ownerId", operator: "eq", value: 1 },  
95 - { field: "ownerId", operator: "eq", value: 2 }  
96 - ] 119 + field: "eventTypeID", operator: "eq", value: parseInt($scope.data.value)
97 } 120 }
98 }, 121 },
99 editable: true, 122 editable: true,
100 resources: [ 123 resources: [
101 { 124 {
102 - field: "ownerId",  
103 - title: "Owner", 125 + field: "eventTypeID",
  126 + title: "EventType",
104 dataSource: [ 127 dataSource: [
105 - { text: "Alex", value: 1, color: "#f8a398" },  
106 - { text: "Bob", value: 2, color: "#51a0ed" },  
107 - { text: "Charlie", value: 3, color: "#56ca85" } 128 + { text: "Type1", value: 1, color: "#f8a398" },
  129 + { text: "Type2", value: 2, color: "#51a0ed" },
  130 + { text: "Type3", value: 3, color: "#56ca85" }
108 ] 131 ]
109 } 132 }
110 ] 133 ]
111 }; 134 };
112 } 135 }
113 136
  137 +
  138 + function schedulerOptions2() {
  139 + $(function () {
  140 + $("#scheduler").kendoScheduler({
  141 + date: new Date("2016/10/12"),
  142 + startTime: new Date("2016/10/12 07:00"),
  143 + majorTimeHeaderTemplate: kendo.template("<strong>#=kendo.toString(date, 'HH:mm')#</strong><sup> เธ™.</sup>"),
  144 + minorTickCount: 1,
  145 + toolbar: ["pdf"],
  146 + messages: {
  147 + cancel: "Cancel",
  148 + save: "Save",
  149 + deleteWindowTitle: "Remove event",
  150 + pdf: "PDF Export",
  151 + editable: {
  152 + confirmation: "Are you sure you want to delete this event?"
  153 + },
  154 + editor: {
  155 + description: "Description"
  156 + }
  157 + },
  158 + height: 600,
  159 + views: [
  160 + "day",
  161 + { type: "workWeek", selected: true },
  162 + "week",
  163 + "month",
  164 + "agenda",
  165 + "timeline"
  166 + ],
  167 + timezone: "Asia/Bangkok",
  168 + dataSource: {
  169 + batch: true,
  170 + transport: {
  171 + read: {
  172 + url: "//localhost:3001/events",
  173 + dataType: "jsonp",
  174 + type: "GET"
  175 + },
  176 + update: {
  177 + url: "//localhost:3001/events",
  178 + dataType: "jsonp",
  179 + type: "PUT"
  180 + },
  181 + create: {
  182 + url: "//localhost:3001/events",
  183 + dataType: "jsonp",
  184 + type: "POST"
  185 + },
  186 + destroy: {
  187 + url: "//localhost:3001/events",
  188 + dataType: "jsonp",
  189 + type: "DELETE"
  190 + },
  191 + parameterMap: function (options, operation) {
  192 + if (operation !== "read" && options.models) {
  193 + return { models: kendo.stringify(options.models) };
  194 + }
  195 + }
  196 + },
  197 + schema: {
  198 + model: {
  199 + id: "taskId",
  200 + fields: {
  201 + taskId: { from: "TaskID" },
  202 + title: { from: "Title", defaultValue: "No title", validation: { required: true } },
  203 + start: { type: "datetime", from: "Start" },
  204 + end: { type: "datetime", from: "End" },
  205 + startTimezone: { from: "StartTimezone", defaultValue: "Asia/Bangkok" },
  206 + endTimezone: { from: "EndTimezone", defaultValue: "Asia/Bangkok" },
  207 + description: { from: "Description" },
  208 + recurrenceId: { from: "RecurrenceID" },
  209 + recurrenceRule: { from: "RecurrenceRule" },
  210 + recurrenceException: { from: "RecurrenceException" },
  211 + eventTypeID: { from: "EventTypeID" },
  212 + isAllDay: { type: "boolean", from: "IsAllDay" }
  213 + }
  214 + }
  215 + },
  216 + filter: {
  217 + logic: "or",
  218 + filters: [
  219 + { field: "eventTypeID", operator: "eq", value: 1 },
  220 + { field: "eventTypeID", operator: "eq", value: 2 }
  221 + ]
  222 + }
  223 + },
  224 + editable: true,
  225 + resources: [
  226 + {
  227 + field: "eventTypeID",
  228 + title: "EventType",
  229 + dataSource: [
  230 + { text: "Type1", value: 1, color: "#f8a398" },
  231 + { text: "Type2", value: 2, color: "#51a0ed" },
  232 + { text: "Type3", value: 3, color: "#56ca85" }
  233 + ]
  234 + }
  235 + ]
  236 + });
  237 +
  238 + $("#people :checkbox").change(function (e) {
  239 + var checked = $.map($("#people :checked"), function (checkbox) {
  240 + return parseInt($(checkbox).val());
  241 + });
  242 +
  243 + var scheduler = $("#scheduler").data("kendoScheduler");
  244 +
  245 + scheduler.dataSource.filter({
  246 + operator: function (task) {
  247 + return $.inArray(task.eventTypeID, checked) >= 0;
  248 + }
  249 + });
  250 + });
  251 + });
  252 + }
114 }) 253 })
public/views/index.html
@@ -7,9 +7,9 @@ @@ -7,9 +7,9 @@
7 <link href="../assets/content/shared/styles/examples-offline.css" rel="stylesheet"> 7 <link href="../assets/content/shared/styles/examples-offline.css" rel="stylesheet">
8 <link href="../assets/styles/kendo.common.min.css" rel="stylesheet"> 8 <link href="../assets/styles/kendo.common.min.css" rel="stylesheet">
9 <link href="../assets/styles/kendo.rtl.min.css" rel="stylesheet"> 9 <link href="../assets/styles/kendo.rtl.min.css" rel="stylesheet">
10 - <link href="../assets/styles/kendo.bootstrap.min.css" rel="stylesheet"> 10 + <link href="../assets/styles/kendo.metro.min.css" rel="stylesheet">
11 <link href="../assets/styles/kendo.dataviz.min.css" rel="stylesheet"> 11 <link href="../assets/styles/kendo.dataviz.min.css" rel="stylesheet">
12 - <link href="../assets/styles/kendo.dataviz.flat.min.css" rel="stylesheet"> 12 + <link href="../assets/styles/kendo.dataviz.metro.min.css" rel="stylesheet">
13 <script src="../assets/js/jquery.min.js"></script> 13 <script src="../assets/js/jquery.min.js"></script>
14 <script src="../assets/js/angular.min.js"></script> 14 <script src="../assets/js/angular.min.js"></script>
15 <script src="../assets/js/jszip.min.js"></script> 15 <script src="../assets/js/jszip.min.js"></script>
@@ -29,10 +29,29 @@ @@ -29,10 +29,29 @@
29 29
30 <div id="example" ng-app="KendoDemos"> 30 <div id="example" ng-app="KendoDemos">
31 <div ng-controller="MyCtrl"> 31 <div ng-controller="MyCtrl">
  32 + <div id="team-schedule">
  33 + <div id="people">
  34 + <input checked type="checkbox" id="alex" value="1">
  35 + <input checked type="checkbox" id="bob" value="2">
  36 + <input type="checkbox" id="charlie" value="3">
  37 + </div>
  38 + </div>
  39 + <div id="scheduler"></div>
  40 +
  41 + <!--<select name="singleSelect" ng-model="data.value">
  42 + <option value="1">Option 1</option>
  43 + <option value="2">Option 2</option>
  44 + </select>
  45 + <button type="button" ng-click="test()">Test</button>
  46 + <br>
  47 + <pre>{{data.value}}</pre>
  48 + <pre>{{schedulerOptions.dataSource.filter}}</pre>
  49 + <br />
32 <div kendo-scheduler k-options="schedulerOptions"> 50 <div kendo-scheduler k-options="schedulerOptions">
33 <span k-event-template class="custom-event">{{dataItem.title}}</span> 51 <span k-event-template class="custom-event">{{dataItem.title}}</span>
34 <div k-all-day-event-template class="custom-all-day-event">{{dataItem.title}}</div> 52 <div k-all-day-event-template class="custom-all-day-event">{{dataItem.title}}</div>
35 - </div> 53 + </div>-->
  54 +
36 </div> 55 </div>
37 56
38 <style> 57 <style>