APIs

Show:
  1. /**
  2. A public terminal for checking queue status
  3. @class FQRemoteStatus
  4. @constructor
  5. @return {Object} instantiated FQRemoteStatus
  6. **/
  7. define(['jquery', 'backbone', 'bootbox', 'QueueModel', 'simplestorage', 'moment'], function ($, Backbone, Bootbox, QueueModel, simplestorage, moment) {
  8.  
  9. var FQRemoteStatus = Backbone.View.extend({
  10.  
  11. /**
  12. Constructor
  13. @method initialize
  14. **/
  15. initialize: function () {
  16. var self = this;
  17. self.m_base_url = BB.CONSTS.BASE_URL + '?mode=remoteStatus&param=';
  18. self.m_queueModel = new QueueModel();
  19. self.m_lineModel = BB.comBroker.getService(BB.SERVICES.FQ_LINE_MODEL);
  20. self._getServerDateTime(self._initServices);
  21. self._listenForgetSpot();
  22. self._listenGetNewNumber();
  23. },
  24.  
  25. /**
  26. Check if service id exists in local storage, if not get one from server
  27. @method _initServices
  28. **/
  29. _initServices: function (i_dateTime) {
  30. var self = this;
  31.  
  32. // STORAGE FIRST
  33. var storage = simplestorage.get('data');
  34. if (!_.isUndefined(storage)) {
  35. var storedDate = storage.date;
  36. if (storedDate != i_dateTime.date) {
  37. simplestorage.deleteKey('data');
  38.  
  39. } else {
  40. self.m_queueModel.set('service_id', storage.service_id);
  41. self.m_queueModel.set('verification', storage.verification);
  42. self._populateCustomerInfo();
  43. self._pollNowServicing();
  44. return;
  45. }
  46. }
  47.  
  48. // EMAIL OR SMS
  49. var call_type = self.m_lineModel.get('call_type');
  50.  
  51. if (call_type == 'SMS' || call_type == 'EMAIL') {
  52. // xxx if (i_dateTime != self.m_lineModel.get('date')) {
  53. if (i_dateTime.date != self.m_lineModel.get('date')) {
  54. bootbox.alert('your number expired on ' + self.m_lineModel.get('date') + ', so we generated a new number for you...');
  55. self._getServiceID();
  56. return;
  57. }
  58. $(Elements.FQ_DISPLAY_QR_NUMBER).text(self.model.get('service_id'));
  59. $(Elements.FQ_DISPLAY_VERIFICATION).text(self.model.get('verification'));
  60. $(Elements.FQ_DISPLAY_LINE_NAME).text(self.model.get('line_name'));
  61.  
  62. self._createStorage(self.model.get('service_id'), self.model.get('verification'), self.model.get('date'));
  63. self._pollNowServicing();
  64. }
  65.  
  66. // QR
  67. if (call_type == 'QR'){
  68. self._getServiceID();
  69. }
  70. },
  71.  
  72. /**
  73. Forget spot in line
  74. @method _listenForgetSpot
  75. **/
  76. _listenForgetSpot: function () {
  77. var self = this;
  78. $(Elements.FQ_RELEASE_SPOT).on('click', function () {
  79. bootbox.prompt('are you sure you want to let go of your spot (type yes or no)?', function (i_answer) {
  80. if (i_answer) {
  81. if (i_answer.toLowerCase() == 'yes') {
  82. $(Elements.APP_ENTRY).html('<h1 style="text-align: center; padding: 100px">have a nice day</h1>');
  83. simplestorage.deleteKey('data');
  84. window.clearInterval(self.m_statusHandler);
  85. }
  86. }
  87. })
  88. });
  89. },
  90.  
  91. /**
  92. Forget spot in line
  93. @method _listenGetNewNumber
  94. **/
  95. _listenGetNewNumber: function () {
  96. var self = this;
  97. $(Elements.FQ_GET_NEW_NUMBER).on('click', function () {
  98. bootbox.prompt('are you sure you want to get a new number (type yes or no)?', function (i_answer) {
  99. if (i_answer) {
  100. if (i_answer.toLowerCase() == 'yes') {
  101. simplestorage.deleteKey('data');
  102. window.clearInterval(self.m_statusHandler);
  103. var url = self._buildURL();
  104. $(location).attr('href',url);
  105. }
  106. }
  107. })
  108. });
  109. },
  110.  
  111. _createStorage: function (i_service_id, i_verification, i_date) {
  112. var self = this;
  113. simplestorage.set('data', {
  114. service_id: i_service_id,
  115. date: i_date,
  116. verification: i_verification
  117. });
  118. },
  119.  
  120. /**
  121. Create queue in table as well as matching data in analytics
  122. @method _getServiceID server:setQueue
  123. **/
  124. _getServiceID: function () {
  125. var self = this;
  126. self.m_queueModel.save({
  127. business_id: self.m_lineModel.get('business_id'),
  128. line_id: self.m_lineModel.get('line_id'),
  129. call_type: self.m_lineModel.get('call_type'),
  130. email: self.m_lineModel.get('email')
  131. }, {
  132. success: (function (model, data) {
  133. self._createStorage(self.m_queueModel.get('service_id'), self.m_queueModel.get('verification'), self.m_queueModel.get('date'));
  134. self._populateCustomerInfo();
  135. self._pollNowServicing();
  136. }),
  137. error: (function (e) {
  138. log('Service request failure: ' + e);
  139. }),
  140. complete: (function (e) {
  141. })
  142. });
  143. },
  144.  
  145. _populateCustomerInfo: function () {
  146. var self = this;
  147. $(Elements.FQ_DISPLAY_QR_NUMBER).text(self.m_queueModel.get('service_id'));
  148. $(Elements.FQ_DISPLAY_VERIFICATION).text(self.m_queueModel.get('verification'));
  149. $(Elements.FQ_DISPLAY_LINE_NAME).text(self.m_lineModel.get('line_name'));
  150. },
  151.  
  152. /**
  153. Get the last called service_id for line
  154. @method _pollNowServicing server:LastCalledQueue
  155. **/
  156. _pollNowServicing: function () {
  157. var self = this;
  158. var lastCalledQueue = function () {
  159. $.ajax({
  160. url: BB.CONSTS.ROOT_URL + '/LastCalledQueue',
  161. data: {
  162. business_id: self.m_lineModel.get('business_id'),
  163. line_id: self.m_lineModel.get('line_id')
  164. },
  165. success: function (i_model) {
  166. $(Elements.FQ_CURRENTLY_SERVING).text(i_model.service_id);
  167.  
  168. },
  169. error: function (e) {
  170. log('error ajax ' + e);
  171. },
  172. dataType: 'json'
  173. });
  174. };
  175. self.m_statusHandler = setInterval(function () {
  176. lastCalledQueue();
  177. }, 5000);
  178. lastCalledQueue();
  179. },
  180.  
  181. /**
  182. Get current server date / time
  183. @method _getServerDateTime server:getDateTime
  184. @param {Function} i_cb
  185. **/
  186. _getServerDateTime: function (i_cb) {
  187. var self = this;
  188. $.ajax({
  189. url: BB.CONSTS.ROOT_URL + '/GetDateTime',
  190. success: function (dateTime) {
  191. $.proxy(i_cb, self)(dateTime);
  192. },
  193. error: function (e) {
  194. log('error ajax ' + e);
  195. },
  196. dataType: 'json'
  197. });
  198. },
  199.  
  200. /**
  201. Create URL string to load customer terminal UI for FasterQ queue generation
  202. @method _buildURL
  203. @return {String} URL
  204. **/
  205. _buildURL: function () {
  206. var self = this;
  207. var data = {
  208. line_id: self.m_lineModel.get('line_id'),
  209. business_id: self.m_lineModel.get('business_id'),
  210. line_name: self.model.get('line_name'),
  211. call_type: 'QR'
  212. };
  213. data = $.base64.encode(JSON.stringify(data));
  214. return self.m_base_url + data;
  215. }
  216.  
  217. });
  218.  
  219. return FQRemoteStatus;
  220.  
  221. });
  222.  
  223.