- /**
- A public terminal for checking queue status
- @class FQRemoteStatus
- @constructor
- @return {Object} instantiated FQRemoteStatus
- **/
- define(['jquery', 'backbone', 'bootbox', 'QueueModel', 'simplestorage', 'moment'], function ($, Backbone, Bootbox, QueueModel, simplestorage, moment) {
-
- var FQRemoteStatus = Backbone.View.extend({
-
- /**
- Constructor
- @method initialize
- **/
- initialize: function () {
- var self = this;
- self.m_base_url = BB.CONSTS.BASE_URL + '?mode=remoteStatus¶m=';
- self.m_queueModel = new QueueModel();
- self.m_lineModel = BB.comBroker.getService(BB.SERVICES.FQ_LINE_MODEL);
- self._getServerDateTime(self._initServices);
- self._listenForgetSpot();
- self._listenGetNewNumber();
- },
-
- /**
- Check if service id exists in local storage, if not get one from server
- @method _initServices
- **/
- _initServices: function (i_dateTime) {
- var self = this;
-
- // STORAGE FIRST
- var storage = simplestorage.get('data');
- if (!_.isUndefined(storage)) {
- var storedDate = storage.date;
- if (storedDate != i_dateTime.date) {
- simplestorage.deleteKey('data');
-
- } else {
- self.m_queueModel.set('service_id', storage.service_id);
- self.m_queueModel.set('verification', storage.verification);
- self._populateCustomerInfo();
- self._pollNowServicing();
- return;
- }
- }
-
- // EMAIL OR SMS
- var call_type = self.m_lineModel.get('call_type');
-
- if (call_type == 'SMS' || call_type == 'EMAIL') {
- // xxx if (i_dateTime != self.m_lineModel.get('date')) {
- if (i_dateTime.date != self.m_lineModel.get('date')) {
- bootbox.alert('your number expired on ' + self.m_lineModel.get('date') + ', so we generated a new number for you...');
- self._getServiceID();
- return;
- }
- $(Elements.FQ_DISPLAY_QR_NUMBER).text(self.model.get('service_id'));
- $(Elements.FQ_DISPLAY_VERIFICATION).text(self.model.get('verification'));
- $(Elements.FQ_DISPLAY_LINE_NAME).text(self.model.get('line_name'));
-
- self._createStorage(self.model.get('service_id'), self.model.get('verification'), self.model.get('date'));
- self._pollNowServicing();
- }
-
- // QR
- if (call_type == 'QR'){
- self._getServiceID();
- }
- },
-
- /**
- Forget spot in line
- @method _listenForgetSpot
- **/
- _listenForgetSpot: function () {
- var self = this;
- $(Elements.FQ_RELEASE_SPOT).on('click', function () {
- bootbox.prompt('are you sure you want to let go of your spot (type yes or no)?', function (i_answer) {
- if (i_answer) {
- if (i_answer.toLowerCase() == 'yes') {
- $(Elements.APP_ENTRY).html('<h1 style="text-align: center; padding: 100px">have a nice day</h1>');
- simplestorage.deleteKey('data');
- window.clearInterval(self.m_statusHandler);
- }
- }
- })
- });
- },
-
- /**
- Forget spot in line
- @method _listenGetNewNumber
- **/
- _listenGetNewNumber: function () {
- var self = this;
- $(Elements.FQ_GET_NEW_NUMBER).on('click', function () {
- bootbox.prompt('are you sure you want to get a new number (type yes or no)?', function (i_answer) {
- if (i_answer) {
- if (i_answer.toLowerCase() == 'yes') {
- simplestorage.deleteKey('data');
- window.clearInterval(self.m_statusHandler);
- var url = self._buildURL();
- $(location).attr('href',url);
- }
- }
- })
- });
- },
-
- _createStorage: function (i_service_id, i_verification, i_date) {
- var self = this;
- simplestorage.set('data', {
- service_id: i_service_id,
- date: i_date,
- verification: i_verification
- });
- },
-
- /**
- Create queue in table as well as matching data in analytics
- @method _getServiceID server:setQueue
- **/
- _getServiceID: function () {
- var self = this;
- self.m_queueModel.save({
- business_id: self.m_lineModel.get('business_id'),
- line_id: self.m_lineModel.get('line_id'),
- call_type: self.m_lineModel.get('call_type'),
- email: self.m_lineModel.get('email')
- }, {
- success: (function (model, data) {
- self._createStorage(self.m_queueModel.get('service_id'), self.m_queueModel.get('verification'), self.m_queueModel.get('date'));
- self._populateCustomerInfo();
- self._pollNowServicing();
- }),
- error: (function (e) {
- log('Service request failure: ' + e);
- }),
- complete: (function (e) {
- })
- });
- },
-
- _populateCustomerInfo: function () {
- var self = this;
- $(Elements.FQ_DISPLAY_QR_NUMBER).text(self.m_queueModel.get('service_id'));
- $(Elements.FQ_DISPLAY_VERIFICATION).text(self.m_queueModel.get('verification'));
- $(Elements.FQ_DISPLAY_LINE_NAME).text(self.m_lineModel.get('line_name'));
- },
-
- /**
- Get the last called service_id for line
- @method _pollNowServicing server:LastCalledQueue
- **/
- _pollNowServicing: function () {
- var self = this;
- var lastCalledQueue = function () {
- $.ajax({
- url: BB.CONSTS.ROOT_URL + '/LastCalledQueue',
- data: {
- business_id: self.m_lineModel.get('business_id'),
- line_id: self.m_lineModel.get('line_id')
- },
- success: function (i_model) {
- $(Elements.FQ_CURRENTLY_SERVING).text(i_model.service_id);
-
- },
- error: function (e) {
- log('error ajax ' + e);
- },
- dataType: 'json'
- });
- };
- self.m_statusHandler = setInterval(function () {
- lastCalledQueue();
- }, 5000);
- lastCalledQueue();
- },
-
- /**
- Get current server date / time
- @method _getServerDateTime server:getDateTime
- @param {Function} i_cb
- **/
- _getServerDateTime: function (i_cb) {
- var self = this;
- $.ajax({
- url: BB.CONSTS.ROOT_URL + '/GetDateTime',
- success: function (dateTime) {
- $.proxy(i_cb, self)(dateTime);
- },
- error: function (e) {
- log('error ajax ' + e);
- },
- dataType: 'json'
- });
- },
-
- /**
- Create URL string to load customer terminal UI for FasterQ queue generation
- @method _buildURL
- @return {String} URL
- **/
- _buildURL: function () {
- var self = this;
- var data = {
- line_id: self.m_lineModel.get('line_id'),
- business_id: self.m_lineModel.get('business_id'),
- line_name: self.model.get('line_name'),
- call_type: 'QR'
- };
- data = $.base64.encode(JSON.stringify(data));
- return self.m_base_url + data;
- }
-
- });
-
- return FQRemoteStatus;
-
- });
-
-
-