var viewModel = (function() {
var self = this;
selectedUser = ko.observable(new user());
mobileNo = ko.observable('');
mobileOperators = ko.observableArray([
'GLOBE',
'SMART',
'SUN',
'DITO'
]);
mobileOperator = ko.observable('');
rates = ko.observableArray();
selectedRate = ko.observable(new rate());
token = ko.observable('');
password = ko.observable('');
resetText = ko.observable('reset');
showdenom = ko.observable(false);
qoute = function(data, event) {
$(event.currentTarget).attr("disabled", "disabled");
$(event.currentTarget).html('Processing')
var parameters = {
'_endpoint': 'load/quote',
'sku': selectedRate().sku,
'msisdn': this.mobileNo(),
};
$.ajax({
url: "/restadapter",
type: "GET",
data: $.param(ko.toJS(parameters)),
processData: false,
contentType: "application/json",
dataType: "json",
success: function(result) {
$("#btnsendloadnext_div").hide();
$("#password_div").show();
$('#btnsendloadsubmit_div').show();
$(event.currentTarget).attr("disabled", false);
$(event.currentTarget).html('forwardNext');
token(result.data.token);
},
error: function(result) {
var error = ko.utils.parseJson(result.responseText);
var text = "";
$.each(error.message, function(index, val) {
text += index + ": " + val + "
";
});
text += "";
toastr.error(text);
$(event.currentTarget).attr("disabled", false);
$(event.currentTarget).html('forwardNext');
}
});
};
buy = function(data, event) {
$(event.currentTarget).attr("disabled", "disabled");
$(event.currentTarget).html('Processing')
var parameters = {
'_endpoint': 'load/buy',
'token': token,
'password': password
};
$.ajax({
url: "/restadapter",
type: "POST",
data: ko.toJSON(parameters),
processData: false,
contentType: "application/json",
dataType: "json",
success: function(result) {
toastr.success('Transaction being processed');
selectedUser().moneyWallet((parseFloat(selectedUser().moneyWallet()) - parseFloat(selectedRate().amount())).toFixed(2));
amplify.store("__client", ko.toJS(selectedUser()));
$('#btnsendloadsubmit_div').hide()
$('#btnsendloaddone_div').show();
$(event.currentTarget).attr("disabled", false);
$(event.currentTarget).html('forwardSubmit');
resetText('Done');
},
error: function(result) {
$(event.currentTarget).attr("disabled", false);
$(event.currentTarget).html('forwardSubmit');
var error = ko.utils.parseJson(result.responseText);
var text = "";
$.each(error.message, function(index, val) {
text += index + ": " + val + "
";
});
text += "";
toastr.error(text);
}
});
};
reset = function() {
this.mobileNo('');
this.mobileOperator('');
this.rates([]);
this.selectedRate('');
this.token('');
this.password("");
this.password(null);
this.oldValue = undefined;
$("#btnsendloadnext").attr("disabled", false);
$("#btnsendloadnext").html('forwardNext');
$("#btnsendloadsubmit").attr("disabled", false);
$("#btnsendloadsubmit").html('forwardSubmit');
};
onOperatorChange = function() {
$("#denom_amnt").hide();
$("#denom").hide();
var parameters = {
'_endpoint': 'rate/user/' + selectedUser().id(),
'size': 500,
'page': 1,
'filter': 'category:' + mobileOperator() + ':=:AND',
'fields': 'rates.sku,amount,facevalue'
};
$.ajax({
url: "/restadapter",
type: "GET",
data: $.param(ko.toJS(parameters)),
processData: true,
contentType: "application/json",
dataType: "json",
success: function(result) {
ko.utils.arrayForEach(result.data.records, function(model) {
rates.push(new rate(model));
});
$("#denom_amnt").show();
$("#denom").show();
},
error: function(result) {
var text = "";
$.each(result.responseJSON, function(index, val) {
text += index + ": " + val + "
";
});
text += "";
toastr.error(text);
}
});
return true;
};
onMSISDChange = function() {
oldValue = typeof(oldValue) == 'undefined' ? '' : oldValue;
if (oldValue != this.mobileNo() && this.mobileNo().length == 12) {
rates([]);
mobileOperator('');
oldValue = this.mobileNo();
var parameters = {
'_endpoint': 'load/operator_lookup',
'msisdn': this.mobileNo()
};
mobileOperator('PROCESSING...');
$.ajax({
url: "/restadapter",
type: "GET",
data: $.param(ko.toJS(parameters)),
processData: false,
contentType: "application/json",
dataType: "json",
success: function(result) {
mobileOperator(result.data.operatorType);
/* if (result.data.subscriptionType == "POSTPAID") {
toastr.error("Mobile number should be a prepaid number");
mobileOperator('');
} else { */
var parameters = {
'_endpoint': 'rate/user/' + selectedUser().id(),
'size': 500,
'page': 1,
'filter': 'category:' + result.data.operatorType + ':=:AND',
'fields': 'rates.sku,amount,facevalue'
};
$.ajax({
url: "/restadapter",
type: "GET",
data: $.param(ko.toJS(parameters)),
processData: true,
contentType: "application/json",
dataType: "json",
success: function(result) {
rates([]);
ko.utils.arrayForEach(result.data.records, function(model) {
rates.push(new rate(model));
});
},
error: function(result) {
var text = "";
$.each(result.responseJSON, function(index, val) {
text += index + ": " + val + "
";
});
text += "";
toastr.error(text);
}
});
//}
},
error: function(result) {
var text = "";
$.each(result.data.records, function(index, val) {
text += index + ": " + val + "
";
});
text += "";
toastr.error(text);
}
});
}
return true;
};
})();
ko.bindingHandlers.executeOnEnter = {
init: function(element, valueAccessor, allBindingsAccessor, viewModel) {
var allBindings = allBindingsAccessor();
$(element).keypress(function(event) {
var keyCode = (event.which ? event.which : event.keyCode);
allBindings.executeOnEnter.call(viewModel);
return true;
});
}
};
(function($) {
$.fn.inputFilter = function(inputFilter) {
return this.on("input keydown keyup mousedown mouseup select contextmenu drop", function(event) {
if (inputFilter(this.value)) {
this.oldValue = this.value;
this.oldSelectionStart = this.selectionStart;
this.oldSelectionEnd = this.selectionEnd;
} else if (this.hasOwnProperty("oldValue")) {
this.value = this.oldValue;
this.setSelectionRange(this.oldSelectionStart, this.oldSelectionEnd);
}
});
};
}(jQuery));
ko.bindingHandlers.MSISDN = {
init: function(element, valueAccessor) {
$(element).inputFilter(function(value) {
value = value.replace(/\D/g, '');
var isnum = /^\d+$/.test(value);
if ((isnum && value.length < 13) || (event.keyCode == '8')) {
value = value.replace(/[^\d\.]/g, "");
if (value.length > 9 && value.length <= 12) {
if (value.length <= 12 && value.charAt(0) == '9') {
var number = value.substr(value.length - 10);
value = "63" + number;
}
if (value.length <= 12 && value.charAt(0) == '0') {
var number = value.substr(value.length - 9);
value = "63" + number;
}
}
}
element.value = value;
if (event.keyCode != '8')
return /^(0|9|6|(63)|(09)|(639)|$)[0-9]{0,9}$/.test(value);
});
}
};
ko.applyBindings(viewModel);