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 | 37 | for (var n = 0; n < data.items.length; n++) { |
38 | 38 | dataToArr.push({ |
39 | 39 | "TaskID": data.items[n].id, |
40 | - "OwnerID": 2, | |
40 | + "EventTypeID": checkObjEmpty(data.items[n].extendedProperties, 'private'), | |
41 | 41 | "Title": data.items[n].summary, |
42 | 42 | "Description": data.items[n].description, |
43 | 43 | "StartTimezone": "Asia/Bangkok", |
... | ... | @@ -125,14 +125,19 @@ function eventCreate(req, res) { |
125 | 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 | 142 | lib.authorize((err, auth) => { |
138 | 143 | let options = lib.eventBuilder(payload) |
... | ... | @@ -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 | 244 | module.exports.index = index |
230 | 245 | module.exports.events = events | ... | ... |
app/lib/index.js
... | ... | @@ -156,7 +156,8 @@ module.exports = { |
156 | 156 | calendar.events.update({ |
157 | 157 | auth: options.auth, |
158 | 158 | calendarId: CALENDAR_ID || 'primary', |
159 | - eventId: options.eventId | |
159 | + eventId: options.eventId, | |
160 | + resource: options | |
160 | 161 | }, (err, response) => { |
161 | 162 | if (err) return callback(err); |
162 | 163 | |
... | ... | @@ -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 | 203 | } catch (error) { |
199 | 204 | console.error(error.message) |
... | ... | @@ -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 | 258 | if (payload.extendedProperties) { |
247 | 259 | buildPayload.extendedProperties = payload.extendedProperties |
248 | 260 | } | ... | ... |
app/routes/home.routes.js
... | ... | @@ -3,7 +3,7 @@ var express = require('express') |
3 | 3 | var router = express.Router() |
4 | 4 | var home = require('../controllers/home.controller') |
5 | 5 | |
6 | -router.get('/', home.index) | |
6 | +router.get('/', home.home) | |
7 | 7 | router.get('/home', home.home) |
8 | 8 | |
9 | 9 | router.get('/events', home.events) | ... | ... |
public/js/controllers/kendo.js
1 | 1 | angular.module("KendoDemos", ["kendo.directives"]) |
2 | 2 | .controller("MyCtrl", function ($scope, $http) { |
3 | + $scope.monthPickerConfig = { | |
4 | + start: "year", | |
5 | + depth: "year", | |
6 | + format: "MMMM yyyy" | |
7 | + }; | |
3 | 8 | $scope.update = function () { |
4 | 9 | console.log("update") |
5 | 10 | } |
... | ... | @@ -19,7 +24,7 @@ angular.module("KendoDemos", ["kendo.directives"]) |
19 | 24 | } |
20 | 25 | } else { |
21 | 26 | console.info(response) |
22 | - schedulerStart() | |
27 | + schedulerOptions2() | |
23 | 28 | } |
24 | 29 | |
25 | 30 | }, function errorCallback(response) { |
... | ... | @@ -27,17 +32,39 @@ angular.module("KendoDemos", ["kendo.directives"]) |
27 | 32 | }); |
28 | 33 | } |
29 | 34 | getAuthURL() |
35 | + $scope.filter = {} | |
36 | + $scope.data = {} | |
37 | + $scope.test = function () { | |
38 | + console.log($scope.operation) | |
39 | + } | |
30 | 40 | |
31 | 41 | function schedulerStart() { |
32 | 42 | $scope.schedulerOptions = { |
33 | 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 | 60 | height: 600, |
36 | 61 | views: [ |
37 | 62 | "day", |
38 | 63 | { type: "workWeek", selected: true }, |
39 | 64 | "week", |
40 | 65 | "month", |
66 | + "agenda", | |
67 | + "timeline" | |
41 | 68 | ], |
42 | 69 | timezone: "Asia/Bangkok", |
43 | 70 | dataSource: { |
... | ... | @@ -83,32 +110,144 @@ angular.module("KendoDemos", ["kendo.directives"]) |
83 | 110 | recurrenceId: { from: "RecurrenceID" }, |
84 | 111 | recurrenceRule: { from: "RecurrenceRule" }, |
85 | 112 | recurrenceException: { from: "RecurrenceException" }, |
86 | - ownerId: { from: "OwnerID", defaultValue: 1 }, | |
113 | + eventTypeID: { from: "EventTypeID" }, | |
87 | 114 | isAllDay: { type: "boolean", from: "IsAllDay" } |
88 | 115 | } |
89 | 116 | } |
90 | 117 | }, |
91 | 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 | 122 | editable: true, |
100 | 123 | resources: [ |
101 | 124 | { |
102 | - field: "ownerId", | |
103 | - title: "Owner", | |
125 | + field: "eventTypeID", | |
126 | + title: "EventType", | |
104 | 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 | 7 | <link href="../assets/content/shared/styles/examples-offline.css" rel="stylesheet"> |
8 | 8 | <link href="../assets/styles/kendo.common.min.css" rel="stylesheet"> |
9 | 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 | 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 | 13 | <script src="../assets/js/jquery.min.js"></script> |
14 | 14 | <script src="../assets/js/angular.min.js"></script> |
15 | 15 | <script src="../assets/js/jszip.min.js"></script> |
... | ... | @@ -29,10 +29,29 @@ |
29 | 29 | |
30 | 30 | <div id="example" ng-app="KendoDemos"> |
31 | 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 | 50 | <div kendo-scheduler k-options="schedulerOptions"> |
33 | 51 | <span k-event-template class="custom-event">{{dataItem.title}}</span> |
34 | 52 | <div k-all-day-event-template class="custom-all-day-event">{{dataItem.title}}</div> |
35 | - </div> | |
53 | + </div>--> | |
54 | + | |
36 | 55 | </div> |
37 | 56 | |
38 | 57 | <style> | ... | ... |