/**
A public terminal for users to collect queue numbers
@class FQCustomerTerminal
@constructor
@return {Object} instantiated FQCustomerTerminal
**/
define(['jquery', 'backbone', 'bootbox', 'qrcode', 'QueueModel', 'moment'], function ($, Backbone, Bootbox, qrcode, QueueModel, moment) {
var FQCustomerTerminal = Backbone.View.extend({
/**
Constructor
@method initialize
**/
initialize: function () {
var self = this;
self.m_base_url = BB.CONSTS.BASE_URL + '?mode=remoteStatus¶m=';
$(Elements.FASTERQ_LINE_NAME).text(self.model.get('name'));
$(Elements.FQ_TAKE_NUMBER_LINE_NAME).text(self.model.get('line_name'));
self._createQRcode();
self._listenPrintButton();
self._listenEmailButton();
self._listenSMSButton();
},
/**
Listen to custom selection on queue id creator via Print button
@method _listenPrintButton
**/
_listenPrintButton: function () {
var self = this;
$(Elements.FQ_PRINT_NUMBER).on('click', function (e) {
e.preventDefault();
e.stopImmediatePropagation();
self._getServiceID();
return false;
});
},
/**
Listen to custom selection on queue id creator via QR scan
@method _createQRcode
**/
_createQRcode: function () {
var self = this;
var q = $("#qrcode");
q = q[0];
var qrcode = new QRCode(q, {
width: 200,
height: 200
});
var url = self._buildURL();
log(url);
qrcode.makeCode(url);
},
/**
Listen to custom selection on queue id creator via email
@method _listenEmailButton
**/
_listenEmailButton: function () {
var self = this;
$(Elements.FQ_SENDIT_BUTTON).on('click', function (e) {
var email = $(Elements.FQ_ENTER_EMAIL).val();
if (!BB.lib.validateEmail(email)) {
bootbox.alert('the emailed entered is invalid');
return false;
}
$(Elements.FQ_DISPLAY_EMAIL_SENT).text('check your email').fadeIn();
setTimeout(function () {
$(Elements.FQ_DISPLAY_EMAIL_SENT).fadeOut();
$(Elements.FQ_ENTER_EMAIL).val('');
}, 5000);
self._sendQueueEmail(email);
});
return false;
},
/**
Listen to custom selection on queue id creator via SMS
@method _listenEmailButton
**/
_listenSMSButton: function () {
var self = this;
$(Elements.FQ_CALL_IT).on('click', function (e) {
var sms = $(Elements.FQ_ENTER_SMS).val();
if (sms.length < 6) {
bootbox.alert('the phone number entered is invalid');
return false;
}
$(Elements.FQ_DISPLAY_SMS_SENT).text('we will call you').fadeIn();
setTimeout(function () {
$(Elements.FQ_DISPLAY_SMS_SENT).fadeOut();
$(Elements.FQ_ENTER_SMS).val('');
}, 5000);
self._sendQueueSMS(sms);
});
return false;
},
/**
Send customer email with link to create queue
@method _sendQueueEmail server:sendQueueEmail
@param {String} i_email
**/
_sendQueueEmail: function (i_email) {
var self = this;
$.ajax({
url: BB.CONSTS.ROOT_URL + '/SendQueueSMSEmail',
data: {
business_id: BB.comBroker.getService(BB.SERVICES.FQ_LINE_MODEL).get('business_id'),
line_id: BB.comBroker.getService(BB.SERVICES.FQ_LINE_MODEL).get('line_id'),
line_name: BB.comBroker.getService(BB.SERVICES.FQ_LINE_MODEL).get('line_name'),
email: i_email,
call_type: 'EMAIL',
url: self.m_base_url
},
success: function (e) {
},
error: function (e) {
log('error ajax ' + e);
},
dataType: 'json'
});
},
/**
Send customer SMS / call when service id is up
@method _sendQueueSMS server:sendQueueSMS
@param {String} i_sms
**/
_sendQueueSMS: function (i_sms) {
var self = this;
$.ajax({
url: BB.CONSTS.ROOT_URL + '/SendQueueSMSEmail',
data: {
business_id: BB.comBroker.getService(BB.SERVICES.FQ_LINE_MODEL).get('business_id'),
line_id: BB.comBroker.getService(BB.SERVICES.FQ_LINE_MODEL).get('line_id'),
line_name: BB.comBroker.getService(BB.SERVICES.FQ_LINE_MODEL).get('line_name'),
sms: i_sms,
call_type: 'SMS',
url: self.m_base_url
},
success: function (e) {
},
error: function (e) {
log('error ajax ' + e);
},
dataType: 'json'
});
},
/**
Get the next service id from remote server
@method _getServiceID server:setQueue
**/
_getServiceID: function () {
var self = this;
// save with extra parameters
var model = new QueueModel();
model.save({
business_id: BB.comBroker.getService(BB.SERVICES.FQ_LINE_MODEL).get('business_id'),
line_id: BB.comBroker.getService(BB.SERVICES.FQ_LINE_MODEL).get('line_id'),
type: 'PRINT'
}, {
success: (function (model, data) {
$(Elements.FQ_DISPLAY_PRINT_NUMBER).text(model.get('service_id'));
self._printNumber(model.get('service_id'), model.get('name'));
}),
error: (function (e) {
log('Service request failure: ' + e);
}),
complete: (function (e) {
})
});
},
/**
Print current customer service id
@method _printNumber
@param {Number} i_service_id
**/
_printNumber: function(i_service_id, name){
var self = this;
var $printDiag = $(Elements.PRINT_DIAG);
//var div = document.getElementById("printerDiv");
var p = function(){
$('body').append('<h2></h2>')
}
var arg = BB.lib.base64Encode(i_service_id + ':_:' + name)
$printDiag.html('<iframe src="print.html?serviceId=' + arg + '" onload="this.contentWindow.print();"></iframe>');
// $printDiag.find('h1').text('your number is ' + i_service_id);
// $printDiag.find('h3').text('created on ' + moment().format('MMMM Do YYYY, h:mm:ss a'));
// var divContents = $(Elements.PRINT_DIAG).html();
// var printWindow = window.open('', '', 'height=250,width=450');
// printWindow.document.write('<html><head><title>' + self.model.get('name') + '</title>');
// printWindow.document.write('</head><body><center>');
// printWindow.document.write(divContents);
// printWindow.document.write('</center></body></html>');
// printWindow.document.close();
// printWindow.print();
},
/**
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: BB.comBroker.getService(BB.SERVICES.FQ_LINE_MODEL).get('line_id'),
business_id: BB.comBroker.getService(BB.SERVICES.FQ_LINE_MODEL).get('business_id'),
call_type: 'QR'
};
data = $.base64.encode(JSON.stringify(data));
return self.m_base_url + data;
}
});
return FQCustomerTerminal;
});