PageRenderTime 68ms CodeModel.GetById 37ms RepoModel.GetById 1ms app.codeStats 0ms

/public/JS/models.js

https://bitbucket.org/sampepose/the-cerberus-project
JavaScript | 230 lines | 219 code | 9 blank | 2 comment | 44 complexity | 6fbb319da6db5db81298eb4d4b10e9b4 MD5 | raw file
  1. var Task = Backbone.Model.extend({
  2. formatDate:function (model) {
  3. var due_dateToFormat = moment(model.get("due_date"));
  4. var due_dateFormatted;
  5. due_dateFormatted = due_dateToFormat.format("ddd, MMM D, YYYY, h:mm a");
  6. model.set({
  7. "pretty_due_date":due_dateFormatted
  8. });
  9. if (model.get("finished_date")) {
  10. var finished_dateToFormat = moment(model.get("finished_date"));
  11. var finished_dateFormatted;
  12. finished_dateFormatted = finished_dateToFormat.format("ddd, MMM D, YYYY, h:mm a");
  13. model.set({
  14. "pretty_finished_date":finished_dateFormatted
  15. });
  16. }
  17. var now = moment(Date());
  18. var timeUntil = due_dateToFormat.from(now);
  19. model.set({"timeUntil":timeUntil});
  20. },
  21. defaults:{
  22. task_id:"",
  23. summary:"",
  24. description:"",
  25. address:"",
  26. priority:"",
  27. due_date:"",
  28. finished_date:"",
  29. user_id:"",
  30. comments:"",
  31. prior_task:"",
  32. sort_order:"",
  33. my_order:"",
  34. workflow:""
  35. },
  36. idAttribute:"task_id",
  37. urlRoot:base_url + '/task'
  38. });
  39. var taskOrder = Backbone.Model.extend({
  40. defaults:{
  41. id:null,
  42. task_order:[]
  43. },
  44. idAttribute:"id"
  45. });
  46. var managerOrder = new taskOrder({id:1});
  47. var userOrder = new taskOrder({id:2});
  48. var User = Backbone.Model.extend({
  49. initialize:function () {
  50. this.formatDisplayName(this);
  51. this.id = this.attributes.user_id;
  52. if (!this.attributes.poly_path)
  53. return;
  54. //Need to format Object correctly for Google Polygon object
  55. var path = this.attributes.poly_path;
  56. var latlngarray = [];
  57. for (var i = 0; i < path.length; i++) {
  58. latlngarray.push(new google.maps.LatLng(path[i][0], path[i][1]));
  59. }
  60. var polygon = new google.maps.Polygon({ path:latlngarray, strokeColor:"red", strokeOpacity:0.8, strokeWeight:2, fillColor:"red", fillOpacity:0.35 });
  61. this.set("polygon", polygon);
  62. var name = this.attributes.pretty_display_name;
  63. google.maps.event.addListener(polygon, 'click', function () {
  64. if (!assignMapPage.creating)
  65. assignMapUserClick(name);
  66. });
  67. },
  68. formatDisplayName:function (model) {
  69. var old = model.get("display_name");
  70. var pretty_display_name = old.capitalize();
  71. model.set({"pretty_display_name":pretty_display_name});
  72. },
  73. defaults:{
  74. user_id:"",
  75. email:"",
  76. display_name:"",
  77. password:"",
  78. task_count:"",
  79. manage:"",
  80. logged_in:"",
  81. pretty_display_name:"",
  82. poly_path:""
  83. },
  84. idAttribute:"user_id",
  85. urlRoot:base_url + '/user'
  86. });
  87. var Attachment = Backbone.Model.extend({
  88. defaults:{
  89. task_id:"",
  90. user_id:"",
  91. file_name:"",
  92. size:"",
  93. upload_date:""
  94. },
  95. urlRoot:base_url + '/attachment'
  96. });
  97. var Coord = Backbone.Model.extend({
  98. defaults:{
  99. task_id:"",
  100. long:"",
  101. lat:""
  102. },
  103. idAttribute:"task_id",
  104. urlRoot:base_url + '/coord'
  105. });
  106. /*** Collections ***/
  107. var TaskCollection = Backbone.Collection.extend({
  108. model:Task,
  109. dragEnabled:false,
  110. reassignEnabled:false,
  111. forUserId:-1,
  112. dragging:-1,
  113. loadTasksForUser:function (id, opts) {
  114. opts = opts || {};
  115. this.url = base_url + '/user/' + id + '/task';
  116. this.fetch(opts);
  117. this.forUserId = id;
  118. },
  119. loadAllTasks:function (opts) {
  120. opts = opts || {};
  121. TaskColl.url = base_url + "/task";
  122. TaskColl.fetch(opts);
  123. this.forUserId = -1;
  124. },
  125. taskChanged:function (data) {
  126. if (this.forUserId == -1 || this.forUserId == data.task['user_id']) {
  127. if (TaskColl.get(data.id)) {
  128. var t = TaskColl.get(data.id);
  129. for (var k in data.task) {
  130. t.set(k, data.task[k]);
  131. }
  132. } else {
  133. var t = new Task(data.task);
  134. t.id = data.id;
  135. TaskColl.add(t);
  136. }
  137. } else {
  138. TaskColl.remove(data.id);
  139. }
  140. },
  141. sortTasks:function (sortedBy, openMode, reassignMode) {
  142. this.sortedBy = sortedBy;
  143. this.dragEnabled = false;
  144. this.reassignEnabled = reassignMode;
  145. if (sortedBy == "my_order") {
  146. userOrder.url = '/data/user/' + userId + '/user-order';
  147. userOrder.fetch({timeout:1000, async:false});
  148. this.comparator = function (Task) {
  149. for (var t = 0; t < userOrder.get('task_order').length; t++) {
  150. if (Task.get('task_id') == userOrder.get('task_order')[t]) {
  151. return t;
  152. }
  153. }
  154. };
  155. this.dragEnabled = openMode;
  156. } else if (sortedBy == "manager") {
  157. if (selectedUser)
  158. managerOrder.url = '/data/user/' + selectedUser.id + '/manager-order';
  159. else
  160. managerOrder.url = '/data/user/' + userId + '/manager-order';
  161. managerOrder.fetch({timeout:1000, async:false});
  162. this.comparator = function (Task) {
  163. for (var t = 0; t < managerOrder.get("task_order").length; t++) {
  164. if (Task.get('task_id') == managerOrder.get('task_order')[t]) {
  165. return t;
  166. }
  167. }
  168. };
  169. this.dragEnabled = manage ? openMode : false;
  170. } else if (sortedBy == "task_id") {
  171. this.comparator = function (Task) {
  172. return Task.get("task_id");
  173. };
  174. } else if (sortedBy == "priority") {
  175. this.comparator = function (Task) {
  176. return -Task.get("priority");
  177. };
  178. } else if (sortedBy == "due_date") {
  179. this.comparator = function (Task) {
  180. return Date.parse(Task.get("due_date"));
  181. };
  182. }
  183. if (this.comparator)
  184. this.sort();
  185. if (this.dragEnabled)
  186. delete this.comparator;
  187. },
  188. saveOrder:function () {
  189. var order = [];
  190. if (this.sortedBy == "my_order") {
  191. userOrder.attributes.task_order = [];
  192. for (var i = 0; i < FilteredTaskColl.length; i++) {
  193. userOrder.attributes.task_order.push(parseInt(FilteredTaskColl.at(i).id));
  194. }
  195. userOrder.url = '/data/user/' + userId + '/user-order';
  196. userOrder.save();
  197. } else if (this.sortedBy == "manager") {
  198. managerOrder.attributes.task_order = [];
  199. for (var i = 0; i < FilteredTaskColl.length; i++) {
  200. managerOrder.attributes.task_order.push(parseInt(FilteredTaskColl.at(i).id));
  201. }
  202. managerOrder.url = '/data/user/' + selectedUser.id + '/manager-order';
  203. managerOrder.save();
  204. }
  205. }
  206. });
  207. var UserCollection = Backbone.Collection.extend({
  208. model:User,
  209. url:base_url + "/user",
  210. comparator:function (User) {
  211. return (User.get('logged_in') ? "0" : "1") + User.get('display_name');
  212. }
  213. });
  214. var CoordCollection = Backbone.Collection.extend({
  215. model:Coord,
  216. url:base_url + "/coord"
  217. });
  218. var AttachmentCollection = Backbone.Collection.extend({
  219. model:Attachment,
  220. url:base_url + "/attachment"
  221. });