Commit 7598c58f53b9142a2af7e32009b5d7887cc3e62d
1 parent
77034810
Exists in
master
add eventTypeID / UI Filter
Showing
5 changed files
with
214 additions
and
29 deletions
Show diff stats
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('express') | @@ -3,7 +3,7 @@ var express = require('express') | ||
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("KendoDemos", ["kendo.directives"]) | @@ -19,7 +24,7 @@ angular.module("KendoDemos", ["kendo.directives"]) | ||
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("KendoDemos", ["kendo.directives"]) | @@ -27,17 +32,39 @@ angular.module("KendoDemos", ["kendo.directives"]) | ||
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("KendoDemos", ["kendo.directives"]) | @@ -83,32 +110,144 @@ angular.module("KendoDemos", ["kendo.directives"]) | ||
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> |