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 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(&#39;express&#39;)
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(&quot;KendoDemos&quot;, [&quot;kendo.directives&quot;])
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(&quot;KendoDemos&quot;, [&quot;kendo.directives&quot;])
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(&quot;KendoDemos&quot;, [&quot;kendo.directives&quot;])
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>
... ...