roblonium-web/Admi/Scripts/billing_merchants.js

203 lines
7.5 KiB
JavaScript

if (typeof Roblox === "undefined") {
Roblox = {};
}
if (typeof Roblox.Admi === "undefined") {
Roblox.Admi = {};
}
if (typeof Roblox.Admi.Billing === "undefined") {
Roblox.Admi.Billing = {};
}
Roblox.Admi.Billing.Merchant = function () {
//variables
var pageSize, pageNum, totalNum;
//run on document load
$(function () {
var numMerchants = $("#dataHolder").data("merchant-count");
initialize(20, 1, numMerchants);
getMerchants();
$('.MerchActive .checkbox').live("click", Roblox.Admi.Billing.Merchant.changeActive);
$('.merch-hidden .checkbox').live("click", Roblox.Admi.Billing.Merchant.changeHidden);
$('.MerchCountry select').change(Roblox.Admi.Billing.Merchant.changeCountry);
});
//private methods
function getMerchants() {
var startRow = (pageNum - 1) * pageSize + 1;
var reqData = { startRowIndex: startRow, maxRows: pageSize };
var url = "/merchants/get-merchants";
$.post(url, reqData, function(data) {
if (data.success) {
displayMerchants(data.merchants, data.countryMerchants);
} else {
$("#ErrorText").text("Error retrieving Merchant records.");
$("#ErrorDiv").show();
}
});
}
function unwrapMerchant(merchant) {
return {
id: merchant.ID,
name: merchant.Name,
active: merchant.Active,
hidden: merchant.IsHidden,
created: dateHelper(merchant.Created),
updated: dateHelper(merchant.Updated)
}
}
function dateHelper(unclean) {
var clean = eval(unclean.substring(6, 19));
var date = new Date(clean);
return (date.getMonth() + 1) + "/" + date.getDate() + "/" + date.getFullYear();
}
function displayMerchants(merchants, countryMerchants) {
//clean out old list
$('#MerchTable').detach();
$('#.pager').children().remove();
//add new Merchants
var counter = 0;
var newTable = $("#tableTemplate").clone(true).attr('id', 'MerchTable').show();
while (merchants[counter] != null) {
var merchant = unwrapMerchant(merchants[counter]);
var newRow = $("#trTemplate").clone(true).show().attr('id', merchant.id);
$("div.MerchID", newRow).text(merchant.id);
$("div.MerchName", newRow).text(merchant.name);
$("div.MerchActive", newRow).children().attr('checked', merchant.active).attr('id', merchant.id);
$("div.merch-hidden", newRow).children().attr('checked', merchant.hidden).attr('id', merchant.id);
$("div.MerchCreated", newRow).text(merchant.created);
$("div.MerchUpdated", newRow).text(merchant.updated);
$("div.MerchCountry select", newRow).val(countryMerchants[merchant.name]).attr('id', merchant.id);
newRow.show();
newTable.append(newRow);
counter++;
}
$('#Merchants').append(newTable);
$("#pager").html('').hide();
if (totalNum > pageSize) {
var endPage = Math.ceil(totalNum / pageSize);
var endPageGroup = Math.ceil(endPage / pageSize);
var currentPageGroup = Math.ceil(pageNum / pageSize);
var startIndex = (((currentPageGroup - 1) * pageSize) + 1)
var endIndex = (currentPageGroup * pageSize)
if (currentPageGroup != 1) {
$("#pager").append('<a onclick="Roblox.Admi.Billing.Merchant.changePage(' + ((currentPageGroup * pageSize) - 1) + ')" style="padding: 5px; cursor: pointer">...</a>');
}
for (var j = startIndex; j <= endIndex; j++) {
if (j > endPage) {
break;
}
else if (j == pageNum) {
$("#pager").append('<span style="font-weight:bold;padding: 1px">' + j + '</span>');
}
else {
$("#pager").append('<a onclick="Roblox.Admi.Billing.Merchant.changePage(' + j + ')" style="padding: 5px; cursor: pointer">' + j + '</a>');
}
}
if (currentPageGroup < endPageGroup) {
$("#pager").append('<a Roblox.Admi.Billing.Merchant.changePage(' + ((currentPageGroup * pageSize) + 1) + ')" style="padding: 5px; cursor: pointer">...</a>').show();
}
$('#pager').show();
}
}
//public methods
function initialize(pagesize, pagenum, totalnum) {
pageSize = pagesize;
pageNum = pagenum;
totalNum = totalnum;
}
function changePage(newPage) {
pageNum = newPage;
$('#ErrorDiv').hide();
$('#SuccessDiv').hide();
getMerchants();
}
function changeActive() {
var id = this.id;
var checked = this.checked;
var url = "/merchants/" + id + "/update?active=" + checked;
$.post(url, function(data) {
if (data.success) {
$('#SuccessText').text(data.message);
$('#SuccessDiv').show();
} else {
$('#ErrorText').text(data.message);
$('#ErrorDiv').show();
}
});
}
function changeHidden() {
var id = this.id;
var checked = this.checked;
var url = "/merchants/" + id + "/update?hidden=" + checked;
$.post(url, function (data) {
if (data.success) {
$('#SuccessText').text(data.message);
$('#SuccessDiv').show();
} else {
$('#ErrorText').text(data.message);
$('#ErrorDiv').show();
}
});
}
function changeCountry() {
var id = this.id;
var countryID = $(this).children(":selected").val();
var url = "/merchants/" + id + "/update?countryID=" + countryID;
$.post(url, function(data) {
if (data.success) {
$('#SuccessText').text(data.message);
$('#SuccessDiv').show();
} else {
$('#ErrorText').text(data.message);
$('#ErrorDiv').show();
}
});
}
function createMerchant() {
$('#SuccessDiv').hide();
$('#ErrorDiv').hide();
var name = $('.merchantNameInput').val();
var active = ($('#merchantActive').attr('checked') === "checked");
var countryID = $('#merchantCountry').children(":selected").attr("id");
var reqData = { merchantName: name, merchantActive: active, merchantCountryID: countryID };
var url = "/merchants/add-merchant";
$.post(url, reqData, function(data) {
if (data.success) {
$('.merchantNameInput').val('');
$('#merchantActive').prop('checked', false);
$('#merchantCountry option').eq(0).prop('selected', true);
totalNum++;
changePage(Math.ceil(totalNum / pageSize));
var msg = 'Successfully added ' + name + ' to the database.';
$('#SuccessText').text(msg);
$('#SuccessDiv').show();
displayMerchants(data.merchants, data.countryMerchants);
} else {
$('#ErrorText').text(data.message);
$('#ErrorDiv').show();
}
});
}
//Interface exposing public methods!
return {
initialize: initialize,
changeActive: changeActive,
changeHidden: changeHidden,
createMerchant: createMerchant,
changePage: changePage,
changeCountry: changeCountry
}
} ();