PageRenderTime 46ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 0ms

/src/main/webapp/js/app/models.js

https://bitbucket.org/jtorelli/intersource-ticketing-system-demo
JavaScript | 225 lines | 174 code | 47 blank | 4 comment | 22 complexity | 3ff30fc9ac4f32619ce3707e174fe281 MD5 | raw file
Possible License(s): GPL-2.0, MIT
  1. // models
  2. App.Models.CompletedDashboardData = Backbone.Model.extend({
  3. urlRoot: 'api/dashboard/completed'
  4. });
  5. App.Models.InProgressDashboardData = Backbone.Model.extend({
  6. urlRoot: 'api/dashboard/inprogress'
  7. });
  8. App.Models.EngineeringDashboardData = Backbone.Model.extend({
  9. urlRoot: 'api/dashboard/eng'
  10. });
  11. App.Models.UserMarketData = Backbone.Model.extend({
  12. urlRoot: 'api/user/allmarkets'
  13. });
  14. App.Models.UserMarketDataSet = Backbone.Collection.extend({
  15. url: 'api/user/allmarkets',
  16. model: App.Models.UserMarketData
  17. });
  18. App.Models.Workflow = Backbone.Model.extend({
  19. urlRoot: 'api/workflow'
  20. // TODO: return groups
  21. // TODO: return field models
  22. });
  23. App.Models.WorkflowTemplate = Backbone.Model.extend({
  24. });
  25. App.Models.Ticket = Backbone.Model.extend({
  26. urlRoot: 'api/ticket',
  27. idAttribute: 'ticketId',
  28. daysSinceStepStart: function(offset) {
  29. var startDate = moment(this.get("stepStart"));
  30. if (startDate == null) return 0;
  31. startDate.seconds(0);
  32. startDate.minutes(0);
  33. startDate.hours(0);
  34. var now = moment();
  35. now.seconds(0);
  36. now.minutes(0);
  37. now.hours(0);
  38. return now.diff(startDate, 'days') + offset;
  39. },
  40. daysTicketOverdue: function() {
  41. var endDate = moment(this.get("plannedEnd"));
  42. if (endDate == null) return 0;
  43. endDate.seconds(0);
  44. endDate.minutes(0);
  45. endDate.hours(0);
  46. var now = moment();
  47. now.seconds(0);
  48. now.minutes(0);
  49. now.hours(0);
  50. return now.diff(endDate, 'days');
  51. },
  52. daysSinceSubmission: function() {
  53. var modifiedDate = moment(this.get("modified"));
  54. return new moment().diff(modifiedDate, 'days');
  55. }
  56. });
  57. App.Models.Field = Backbone.Model.extend({
  58. });
  59. App.Models.Chart = Backbone.Model.extend({
  60. });
  61. // collections
  62. App.Collections.CompletedDashboardDataSet = Backbone.Collection.extend({
  63. model: App.Models.CompletedDashboardData,
  64. url: 'api/dashboard/completed'
  65. });
  66. App.Collections.InProgressDashboardDataSet = Backbone.Collection.extend({
  67. model: App.Models.InProgressDashboardData,
  68. url: 'api/dashboard/inprogress'
  69. });
  70. App.Collections.TicketSet = Backbone.Collection.extend({
  71. model: App.Models.Ticket,
  72. url: 'api/ticket',
  73. search : function(statusArray){
  74. if(statusArray == null) return this;
  75. return _(this.filter(function(data) {
  76. for(var i=0; i<statusArray.length; i++) {
  77. if (statusArray[i] == data.get('status')) return true;
  78. }
  79. }));
  80. },
  81. searchWithMethod: function(f) {
  82. return _(this.filter(function(data) {
  83. return f(data);
  84. }));
  85. }
  86. });
  87. App.Collections.TicketSet.Aggregate = {};
  88. App.Collections.TicketSet.Aggregate.ageOfOldest = function(collection) {
  89. var oldestAgeDays = 0;
  90. collection.each(function(ticket) {
  91. var createdDate = moment(ticket.get("createDate"));
  92. var ageDays = moment().diff(createdDate, 'days');
  93. if (ageDays > oldestAgeDays) {
  94. oldestAgeDays = ageDays;
  95. }
  96. });
  97. return oldestAgeDays;
  98. };
  99. App.Collections.TicketSet.Aggregate.averageAge = function(collection) {
  100. if ((collection.size && collection.size() == 0) ||
  101. (collection.length && collection.length == 0)) return 0;
  102. var countAgeDays = 0;
  103. var collectionSize = collection.size?collection.size():collection.length;
  104. collection.each(function(ticket) {
  105. var createdDate = moment(ticket.get("createDate"));
  106. var ageDays = moment().diff(createdDate, 'days');
  107. countAgeDays += ageDays;
  108. });
  109. return Math.round(countAgeDays / collectionSize);
  110. };
  111. App.Collections.TicketSet.Aggregate.countIncomplete = function(collection) {
  112. var countIncomplete = 0;
  113. collection.each(function(ticket) {
  114. if (
  115. !ticket.get('title') ||
  116. !ticket.get('fieldData').plannedStart ||
  117. !ticket.get('fieldData').remoteDevice ||
  118. !ticket.get('fieldData').remotePortAssignment ||
  119. !ticket.get('fieldData').routerPortAssignment ||
  120. !ticket.get('fieldData').ipAddress ||
  121. !ticket.get('fieldData').routerConfigs
  122. ){
  123. countIncomplete++;
  124. }
  125. });
  126. return countIncomplete;
  127. };
  128. App.Collections.TicketSet.Aggregate.moreThanAWeekOld = function(collection) {
  129. var countOverAWeekOld = 0;
  130. collection.each(function(ticket) {
  131. var createdDate = new moment(ticket.get("created"));
  132. var diffDays = new moment().diff(createdDate, 'days');
  133. if (diffDays >= 7) {
  134. countOverAWeekOld++;
  135. }
  136. });
  137. return countOverAWeekOld;
  138. };
  139. App.Collections.TicketSet.Aggregate.createdInDateRange = function(daysStart, daysEnd) {
  140. return function(collection) {
  141. var countUnderNDaysOld = 0;
  142. collection.each(function(ticket) {
  143. var createdDate = new moment(ticket.get("created"));
  144. var diffDays = new moment().diff(createdDate, 'days');
  145. if (diffDays >= daysStart && (daysEnd == -1 || diffDays <= daysEnd)) {
  146. countUnderNDaysOld++;
  147. }
  148. });
  149. return countUnderNDaysOld;
  150. };
  151. }
  152. App.Collections.TicketSet.Aggregate.getOldestAge = function(collection, period) {
  153. var oldestAge = 1;
  154. collection.each(function(ticket) {
  155. var createdDate = new moment(ticket.get("created"));
  156. var diff = new moment().diff(createdDate, period);
  157. if (diff > oldestAge) {
  158. oldestAge = diff;
  159. }
  160. });
  161. return oldestAge;
  162. };
  163. App.Collections.FieldSet = Backbone.Collection.extend({
  164. model: App.Models.Field
  165. });
  166. App.Collections.ChartSet = Backbone.Collection.extend({
  167. model: App.Models.Chart,
  168. url: 'api/chart'
  169. });
  170. App.Collections.SearchResultSet = Backbone.Collection.extend({
  171. model: App.Models.Ticket,
  172. url: 'api/search',
  173. search : function(f){
  174. return _(this.filter(function(data) {
  175. return f(data);
  176. }));
  177. }
  178. });