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> |