`;
str += row.installs_actual > 0 ? "" + row.installs_actual + " " + sInstalls_total: row.installs;
str +=`
`;
var sumInstalls = row.installs_actual;
$(row.details).each(function(i, r) {
let line = " ";
if (r.installs > 0) {
sInstalls_total = (r.installs > 0 ? " / " + r.installs: "");
sumInstalls = sumInstalls - r.installs;
line = "" + (r.installs_actual > 0 ? "" + r.installs_actual + " " + sInstalls_total: r.installs) + " ";
}
if (row.c_type == CAMPAIGN_TYPE.CPA && i == GRID_MAX_ROWS) {
//last row
line += "" + (sumInstalls > 0 ? sumInstalls : "") + " ";
str += line;
return false;
}
str += line;
});
str += " ";
return str;
} else {
return row.installs_actual > 0? "
" + row.installs_actual + " " +sInstalls_total: row.installs;
}
} else { // OLD v1.
if (row.c_type == CAMPAIGN_TYPE.HQR)
str = (row.comments_actual > 0 ? "
" + row.comments_actual + " / " + row.comments: (row.comments > 0 ? row.comments: ""));
else
str = row.installs_actual > 0? "
" + row.installs_actual + " " + sInstalls_total: row.installs;
return str;
}
}
},
{ title: "Rates", data: 'rates', className: 'num rates-group canhide-filter', orderable: false, visible: true,
render: function ( data, type, row ) {
if (row.c_type == CAMPAIGN_TYPE.CPA) return ""; //CPA CAMPAIGN
if (row.c_type == CAMPAIGN_TYPE.HQR) {
str = (row.comments_actual > 0 ? "
" + row.comments_actual + " / " + row.comments: (row.comments > 0 ? row.comments: ""));
} else
str = (row.rates_actual > 0? "
" + row.rates_actual + " / " + row.rates: (row.rates > 0 ? row.rates: ""));
return str;
},
},
{ title: "Reviews", data: 'comments', className: 'num rates-group canhide-filter', orderable: false, visible: true,
render: function ( data, type, row ) {
if (row.c_type == CAMPAIGN_TYPE.CPA) return ""; //CPA CAMPAIGN
var str = (row.comments_actual > 0? "
" + row.comments_actual + " / " + row.comments :(row.comments > 0 ? row.comments: ""));
return str;
},
},
{ title: "Days", data:'day', className: 'num', orderable: true, searchable: false,
render: function ( data, type, row) {
if (type=='sort') return row.days;
str = "
" + row.day + " / " + (row.days > 0 ? row.days : "∞");
return str;
},
},
{ title: "Price", data: 'price', className: 'num', orderable:true,
render: function ( data, type, row ) {
if (type=='sort') return row.price;
var str_body = "";
var str_head = round2(row.price).toFixed(2) + " $";
switch (row.c_type) {
case CAMPAIGN_TYPE.CPA:
if (row.cost > 0) str_head = "
" + round2(row.cost).toFixed(2) + " $ / " + str_head;
if (row.status == ORDER_STATUS.COMPLETED.value) {
str_head = "
\
" + str_head + " ";
}
if (row.hasOwnProperty('details') && row.details.length > 1) {
str_body = `
`;
str_body += str_head;
str_body +=`
`;
sumCost = row.cost;
$(row.details).each(function(i, r) {
let line = " ";
if (r.cost > 0) {
line ="" + r.cost.toFixed(2) + " $ ";
sumCost -= r.cost;
}
str_body += line;
//last row
if (i == GRID_MAX_ROWS) {
//last row
if (sumCost > 0) str_body +="" + sumCost.toFixed(2) + " $ ";
return false;
}
});
str_body += " ";
} else str_body = str_head;
break;
default:
str_body = str_head;
}
//check if order was partialy completed and refunded
let pct_progress = Math.round((row.installs_actual + row.comments_actual + row.rates_actual) / (row.installs + row.comments + row.rates) *100);
if (pct_progress < 100 && row.status == ORDER_STATUS.COMPLETED.value) {
str_body = "
\
" + str_head + " ";
}
return str_body;
},
},
{ title: "CPI", data:'cpa', className: 'num canhide-filter', orderable: false, searchable: false,
render: function ( data, type, row) {
if (row.c_type != CAMPAIGN_TYPE.CPA) return "";
str = row.cpa ? row.cpa.toFixed(2): "";
return "
" + str + " $ ";
},
},
{ title: "Budget", data:'budget', className: 'num canhide-filter', orderable: false, searchable: false,
render: function ( data, type, row) {
if (row.c_type != CAMPAIGN_TYPE.CPA) return "";
str = row.budget ? row.budget.toFixed(2): "";
return "
" + str + " $ ";
},
},
{ title: "Start time", className: 'num', type: 'date', orderable:true,
render: function ( data, type, row ) {
let field = row.time_start ? row.time_start : row.time_create;
//let field = row.time_create; changed to time_start08.11.2022
var d = new Date(Date.parse(field));
if (isNaN(d)) return field;
if (type=='sort')
return d;
else {
var tm = ('0' + d.getDate()).slice(-2).toString()
+ "." + ('0' + (d.getMonth() + 1).toString()).slice(-2).toString()
+ "." + d.getFullYear().toString()
+ " " + ('0' + d.getHours()).slice(-2).toString() + ":" + ('0' + d.getMinutes()).slice(-2).toString();
var str = "
" + tm + " ";
//add remarks
strShowRemarks ="";
return (row.cnt_remarks > 0 ? strShowRemarks : "") + str;
}
},
},
{ title: "Progress", data:null, orderable: false,
render: function ( data, type, row ) {
var pct_progress = Math.min((row.installs > 0 ? Math.round(row.installs_actual / row.installs * 100) : 0), 100);
if (row.installs == 0 && row.days > 0) { //calc progress by days
pct_progress = Math.min(Math.round((row.day - 1) / row.days * 100), 100);
if (row.day == row.days && [ORDER_STATUS.CPA_CANCELING.value, ORDER_STATUS.CPA_COMPLETING.value, ORDER_STATUS.CANCELED.value, ORDER_STATUS.COMPLETED.value, ORDER_STATUS.ARCHIVED.value].indexOf(row.status) != -1) pct_progress = 100;
}
if (row.days > 0) {
var sProgress = "
";
if (pct_progress<60) sProgress += "
" + pct_progress + "%
"; else sProgress += "" + pct_progress + "%
";
}
else
var sProgress = "
`;
str += ORDER_STATUS.draw(ORDER_STATUS.getByValue(row.status));
str +=`
`;
$(row.details).each(function(i, r) {
if (row.c_type == CAMPAIGN_TYPE.CPA && i >= GRID_MAX_ROWS) return;
if (r.installs == 0) return; //same as continue, don't break loop
if (row.status == ORDER_STATUS.DRAFT.value || row.status == ORDER_STATUS.ARCHIVED.value) return;
str +="";
str += r.status !=ORDER_STATUS.WAITING.value ? ORDER_STATUS.draw(ORDER_STATUS.getByValue(r.status)) : "";
str +=" ";
});
str += " ";
return str;
} else { // OLD v1.
return ORDER_STATUS.draw(ORDER_STATUS.getByValue(row.status));
}
}
},
{ title: '
Archive all',
className: 'num', data:null,
orderable: false,
render: function ( data, type, row ) {
var buttons = {};
buttons['pause'] = false;
buttons['start'] = false;
buttons['cancel'] = false;
buttons['abort'] = false; //same as cancel but no money back
buttons['archive'] = false;
buttons['repeat'] = false;
buttons['refund'] = false;
buttons['pay'] = false;
buttons['support']= false;
buttons['edit']= false;
// statuses
var status = ORDER_STATUS.getByValue(row.status)
switch (parseInt(row.status)) {
case ORDER_STATUS.ACTIVE.value:
buttons['pause'] = true;
buttons['cancel'] = true;
if (row.c_type == CAMPAIGN_TYPE.CPA) buttons['edit'] = true;
if (row.c_type == CAMPAIGN_TYPE.HQR) buttons['cancel'] = false;
break;
case ORDER_STATUS.IOS_ACTIVE.value:
buttons['cancel'] = true;
buttons['support']= false;
break;
case ORDER_STATUS.IOS_NEW.value:
//buttons['cancel'] = true;
buttons['support']= true;
break;
case ORDER_STATUS.IOS_UNVERIFIED.value:
buttons['cancel'] = true;
//buttons['support']= true;
//no buttons
break;
case ORDER_STATUS.CAPPED.value:
buttons['pause'] = true;
buttons['cancel'] = true;
break;
case ORDER_STATUS.ARCHIVED.value:
buttons['repeat'] = true;
break;
case ORDER_STATUS.CANCELED.value:
buttons['archive'] = true;
buttons['repeat'] = true;
break;
case ORDER_STATUS.COMPLETED.value:
buttons['archive'] = true;
buttons['repeat'] = true;
break;
case ORDER_STATUS.COMPLETED_PART.value:
buttons['refund'] = true;
break;
case ORDER_STATUS.DRAFT.value:
buttons['pay'] = true;
buttons['abort'] = true;
//buttons['archive'] = true;
break;
case ORDER_STATUS.PENDING.value:
buttons['cancel'] = true;
break;
case ORDER_STATUS.PAUSED.value:
buttons['start'] = true;
buttons['cancel'] = true;
if (row.c_type == CAMPAIGN_TYPE.CPA) buttons['edit'] = true;
break;
case ORDER_STATUS.WAITING.value:
buttons['pause'] = true;
buttons['cancel'] = true;
break;
case ORDER_STATUS.BANNED.value:
buttons['cancel'] = true;
break;
case ORDER_STATUS.REJECTED.value:
buttons['cancel'] = true;
buttons['repeat'] = true;
if (row.c_type == CAMPAIGN_TYPE.JOB) buttons['repeat'] = false;
if (row.c_type == CAMPAIGN_TYPE.HQR) buttons['repeat'] = false;
break;
case ORDER_STATUS.NOT_FOUND.value:
buttons['cancel'] = true;
buttons['start'] = true;
buttons['repeat'] = false;
if (row.c_type == CAMPAIGN_TYPE.JOB) buttons['start'] = false;
if (row.c_type == CAMPAIGN_TYPE.HQR) buttons['start'] = false;
break;
case ORDER_STATUS.INCOMPATIBLE.value:
buttons['cancel'] = true;
buttons['repeat'] = false;
break;
case ORDER_STATUS.CPA_CANCELING.value:
break;
case ORDER_STATUS.CPA_COMPLETING.value:
break;
case ORDER_STATUS.TEST.value:
buttons['cancel'] = true;
buttons['repeat'] = false;
break;
case ORDER_STATUS.MODERATION.value:
buttons['cancel'] = true;
break;
case ORDER_STATUS.UNVERIFIED.value:
buttons['cancel'] = false;
break;
}
var store = APPSTORE.getById(row.appstore_id) || APPSTORE.GOOGLE;
var c_type = parseInt(row.c_type) || CAMPAIGN_TYPE.UNDEF;
//controls
var sControls = "";
if (buttons['pay'])
sControls += "
\
Start ";
if (buttons['start'])
if ([CAMPAIGN_TYPE.SINGLE, CAMPAIGN_TYPE.MULTI, CAMPAIGN_TYPE.SMART, CAMPAIGN_TYPE.JOB].includes(c_type)) {
if (row.hasOwnProperty('details')) // only v2 orders
sControls += "
\
Start ";
} else {
sControls += "
\
Start ";
}
if (buttons['pause'])
if ([CAMPAIGN_TYPE.SINGLE, CAMPAIGN_TYPE.MULTI, CAMPAIGN_TYPE.SMART, CAMPAIGN_TYPE.CPA, CAMPAIGN_TYPE.JOB].includes(c_type)) {
if (row.hasOwnProperty('details')) // only v2 orders
sControls += "
\
Pause ";
}
if (buttons['repeat'])
if ([CAMPAIGN_TYPE.SINGLE, CAMPAIGN_TYPE.MULTI, CAMPAIGN_TYPE.SMART].includes(c_type)) {
if (row.hasOwnProperty('details') && row.details.length > 0)
// v.2 NEW
sControls += "
\
Repeat ";
else //v.1 OLD
sControls += "
Repeat ";
}
if (buttons['cancel'])
if (c_type == CAMPAIGN_TYPE.CPA) {
sControls += "
\
Cancel ";
} else {
sControls += "
\
Cancel ";
}
if (buttons['edit'])
if (c_type == CAMPAIGN_TYPE.CPA) {
sControls += "
\
Edit ";
}
if (buttons['abort'])
sControls += "
\
Cancel ";
if (buttons['refund'])
sControls += "
\
Refund ";
if (buttons['support'])
sControls += "
\
Contact support ";
if (buttons['archive'])
sControls += "
Archive ";
//return
return sControls;
}
}
]
});
//set tab counter
dtable.on('draw', function(e, settings, data){
//recalc tabs after search
var cnt = dtable.page.info().recordsDisplay;
//if (cnt == 0) cnt = $("#grid").DataTable().page.info().recordsTotal;
$("#tab_cnt_" + CURRENT_TAB).html(cnt > 0 ? "(" + cnt + ")": "");
if (cnt == 0) $("#btnOrdersArchive").hide();
hideGridColumns();
});
//set tab counter
/*
dtable.on('page.dt', function(){
console.log('page event');
});
*/
//dtable.columns.adjust().draw();
}
function setOrdersTab(index) {
CURRENT_TAB = index;
var status = "";
var status_exclude = ORDER_STATUS.ARCHIVED.value;
var isunread = 0;
switch (index) {
case TAB_ALL:
status = ORDER_STATUS.UNDEF.value;
$("#btnOrdersArchive").show();
break;
case TAB_COMPLETED:
status = ORDER_STATUS.COMPLETED.value + "|" + ORDER_STATUS.COMPLETED_PART.value + "|" + ORDER_STATUS.CPA_COMPLETING.value;
$("#btnOrdersArchive").show();
break;
case TAB_CANCELED:
status = ORDER_STATUS.CANCELED.value + "|" + ORDER_STATUS.CPA_CANCELING.value
$("#btnOrdersArchive").show();
break;
case TAB_PAUSED:
status = ORDER_STATUS.PAUSED.value;
$("#btnOrdersArchive").hide();
break;
case TAB_DRAFT:
status = ORDER_STATUS.DRAFT.value;
$("#btnOrdersArchive").show();
break;
case TAB_ACTIVE:
status = ORDER_STATUS.ACTIVE.value
+ "|" + ORDER_STATUS.CAPPED.value
+ "|" + ORDER_STATUS.WAITING.value
+ "|" + ORDER_STATUS.PENDING.value
+ "|" + ORDER_STATUS.IOS_ACTIVE.value,
+ "|" + ORDER_STATUS.IOS_UNVERIFIED.value,
+ "|" + ORDER_STATUS.IOS_NEW.value,
+ "|" + ORDER_STATUS.PAUSED.value;
$("#btnOrdersArchive").hide();
break;
case TAB_ARHIVED:
status_exclude = ORDER_STATUS.UNDEF.value;
status = ORDER_STATUS.ARCHIVED.value;
$("#btnOrdersArchive").hide();
break;
case TAB_FAILED:
status = ORDER_STATUS.NOT_FOUND.value
+ "|" + ORDER_STATUS.INCOMPATIBLE.value
+ "|" + ORDER_STATUS.REJECTED.value
+ "|" + ORDER_STATUS.BANNED.value;
$("#btnOrdersArchive").hide();
break;
case TAB_IOS_NEW:
status = ORDER_STATUS.IOS_NEW.value + "|" + ORDER_STATUS.MODERATION.value;
$("#btnOrdersArchive").hide();
break;
case TAB_IOS_UNVERIFIED:
status = ORDER_STATUS.IOS_UNVERIFIED.value;
$("#btnOrdersArchive").hide();
break;
case TAB_IOS_ACTIVE:
status = ORDER_STATUS.IOS_ACTIVE.value;
$("#btnOrdersArchive").hide();
break;
case TAB_UNREAD: //unread messagems
isunread = 1;
status_exclude = ORDER_STATUS.UNDEF.value;
$("#btnOrdersArchive").hide();
break;
case TAB_HQR_ACTIVE: //unread messagems
status = ORDER_STATUS.ACTIVE.value + "|" + ORDER_STATUS.IOS_ACTIVE.value+ "|" + ORDER_STATUS.UNVERIFIED.value
$("#btnOrdersArchive").hide();
break;
case TAB_HQR_NEW: //unread messagems
status = ORDER_STATUS.MODERATION.value + "|" + ORDER_STATUS.IOS_NEW.value
$("#btnOrdersArchive").hide();
break;
case TAB_HQR_UNVERIFIED: //unread messagems
status = ORDER_STATUS.UNVERIFIED.value;
$("#btnOrdersArchive").hide();
break;
case TAB_MODERATION:
status = ORDER_STATUS.MODERATION.value;
$("#btnOrdersArchive").hide();
break;
case TAB_HQR_REFILLING:
status = ORDER_STATUS.REFILLING.value;
$("#btnOrdersArchive").hide();
break;
default:
status = "";
isunread = 0;
$("#btnOrdersArchive").show();
};
//reloas grid
if (status.toString().length > 0 || isunread > 0) {
if (typeof AdminCore != "undefined") {
if (AdminCore.CURRENT_PAGE == PAGE_ADMIN_ORDERS_IOS || AdminCore.CURRENT_PAGE == PAGE_ADMIN_ORDERS_CPA || AdminCore.CURRENT_PAGE == PAGE_ADMIN_ORDERS_ANDROID|| AdminCore.CURRENT_PAGE == PAGE_ADMIN_ORDERS_HQR || AdminCore.CURRENT_PAGE == PAGE_ADMIN_ORDERS_JOB) {
AdminCore.grid_params_orders_admin["status"] = status;
AdminCore.grid_params_orders_admin["status_exclude"] = status_exclude;
}
} else {
Core.grid_params_orders["status"] = status;
Core.grid_params_orders["status_exclude"] = status_exclude;
}
Core.grid_params_orders["isunread"] = isunread;
$('#grid').DataTable().ajax.reload(null, true);
}
//append grid to tab
$("#grid_wrapper").appendTo("#tab_" + index);
//reinit popovers
$("#grid .popovers").popover();
}
function gridReloadCallBack() {
hideGridColumns();
}
function hideGridColumns() {
var dtable =$('#grid').DataTable();
dtable.columns('.canhide-filter').every(function () {
//if (this.rows().count()> 1) {
/*
var data = this.data().to$();
if (data.length > 0) {
arr = data.filter(function(a) {return parseFloat(a) || 0 > 0});
this.visible(arr.length > 0);
} else this.visible(true);
*/
this.visible( this.data().filter(function (a,b) {return parseFloat(a) || 0 > 0;}).count() >0);
//}
});
}
// arhive_all ionclick handler - index is a TAB index
function archiveOrders() {
switch (CURRENT_TAB) {
case TAB_COMPLETED:
status = ORDER_STATUS.COMPLETED.value;
msg_text = "COMPLETED ";
break;
case TAB_CANCELED:
status = ORDER_STATUS.CANCELED.value;
msg_text = "CANCELED ";
break;
case TAB_DRAFT:
status = ORDER_STATUS.DRAFT.value;
msg_text = "DRAFT ";
break;
default:
status = 0;
msg_text = "COMPLETED and CANCELED ";
};
// waitbox
var dlg_title = "Orders archivation";
var dlg_body = "
Are you sure you want archive all " + msg_text+ " orders and move them to «Archived» tab?
"
var callback = function () {
Core.orders_archive(status);
};
confirmBox.show(dlg_title, dlg_body, callback);
}
function printOrderPrice(data) {
if (data) {
$("#order_price").data("price", data.total);
$("#order_price").text(data.total > 0 ? data.total + "$" : "");
$("#order_price").data("price_keyword", data.keyword_price);
$("#order_price").data("price_package", data.package_price);
$("#order_price").data("price_rate", data.rate_price);
$("#order_price").data("price_review", data.review_price);
$("#order_price").data("price_hqr", data.hqr_price);
$("#order_price").data("price_job_applike", data.job_applike_price);
//first time order
$("#order_price").data("isfirstorder", data.isfirstorder);
//action bonus
$("#order_price").data("bonus_action", data.bonus_action);
if (parseInt(data.bonus_action)>0) {
$(".order_bonus_action").html(parseInt(data.bonus_action));
$(".bonus-action").show();
}else $(".bonus-action").hide();
calcOrder();
}
else {
$("#order_price").data("price", 0);
$("#order_price").text("");
}
}
function printOrderRefund(idorder, data, status, bViewOnly, c_type) {
var str = "";
var dlg_title = "";
var dlg_body = "";
var dlg_q = "";
switch (status) {
case ORDER_STATUS.CANCELED.value:
dlg_title = "Order cancelation";
dlg_body = "
Funds for undelivered installs will be returned to your balance.
";
dlg_q = "
Are you sure you want proceed and cancel this order?
"
str = "
Your order is partially completed, if you cancel it, its refunded price will be returned to your balance.
";
break;
case ORDER_STATUS.COMPLETED.value:
if (!bViewOnly) {
dlg_title = "Order refund";
dlg_body = "
Funds for undelivered installs will be returned to your account balance.
";
dlg_q = "
Are you sure you want proceed and refund this order?
"
//partially string
str = "
Your order is partially completed, funds for undelivered installs will be returned to your balance.
";
} else {
if (c_type == CAMPAIGN_TYPE.CPA) {
dlg_title = "Campaign was refunded";
dlg_body = "";
//partially string
str = "
Your CPI campaign is completed, reserved funds were returned to your account balance.
";
} else
{
dlg_title = "Order was partially refunded";
dlg_body = "";
//partially string
str = "
Your order was partially completed, funds for undelivered installs were returned to your account balance.
";
}
}
break;
case ORDER_STATUS.CPA_CANCELING.value:
dlg_title = "Campaign cancelation";
dlg_body = "
After cancelation, funds reserved for this CPI campaign will be returned to your balance in less than 24 hours . We need this time to stop all traffic to your app and calculate exact spent budget of your campaign.
";
dlg_q = "
Are you sure you want proceed and cancel this CPI campaign?
"
str = "";
break;
case ORDER_STATUS.CPA_COMPLETING.value:
dlg_title = "Campaign is completing";
dlg_body = "
Campaign is in completing stage. After final stop, funds reserved for this CPI campaign will be returned to your balance in less than 24 hours . We need this time to stop all traffic to your app and calculate exact spent budget of your campaign.
";
dlg_q = ""
str = "";
break;
default:
}
if (c_type != CAMPAIGN_TYPE.CPA) {
if (data)
if (data.refund.total > 0 && data.hasOwnProperty('installs') && data.hasOwnProperty('price') ) {
var total_installs = data.installs.total.keyword > 0 ? data.installs.total.keyword : data.installs.total.package;
var actual_installs = data.installs.total.keyword > 0 ? data.installs.actual.keyword : data.installs.actual.package;
var price_installs = data.installs.total.keyword > 0 ? data.price.keyword : data.price.package;
var refund_installs = data.installs.total.keyword > 0 ? data.refund.keyword : data.refund.package;
str = '
' + str + '
';
str += '
\
\
\
\
Total \
Actual \
Price \
Refund \
';
if (data.installs.total.keyword > 0)
str += ' \
Keywords \
' + data.installs.total.keyword + ' \
' + data.installs.actual.keyword + ' \
' + data.price.keyword.toFixed(2) + ' $ \
' + data.refund.keyword.toFixed(2) + ' $ \
';
if (data.installs.total.package > 0)
str += ' \
Package \
' + data.installs.total.package + ' \
' + data.installs.actual.package + ' \
' + data.price.package.toFixed(2) + ' $ \
' + data.refund.package.toFixed(2) + ' $ \
';
if (data.installs.total.rate > 0)
str += ' \
Rates \
' + data.installs.total.rate + ' \
' + data.installs.actual.rate + ' \
' + data.price.rate.toFixed(2) + ' $ \
' + data.refund.rate.toFixed(2)+ ' $ \
';
if (data.installs.total.review > 0)
str += ' \
Reviews \
' + data.installs.total.review + ' \
' + data.installs.actual.review + ' \
' + (c_type == CAMPAIGN_TYPE.HQR ? data.price.hqr.toFixed(2) : data.price.review.toFixed(2)) + ' $ \
' + data.refund.review.toFixed(2) + ' $ \
';
if (data.installs.total.items > 0)
str += ' \
Items \
' + data.installs.total.items + ' \
' + data.installs.actual.items + ' \
' + data.price.job.toFixed(2) + ' $ \
' + data.refund.job.toFixed(2)+ ' $ \
';
str += ' \
Total \
' + data.refund.total.toFixed(2) + ' $ \
';
str += '
';
//print
dlg_body = str;
}
else {
if (bViewOnly)
dlg_body = str;
else
if (data.refund.total > 0) dlg_body += "
This order could be refunded in total: " + data.refund.total + " $.
";
}
} else dlg_body = str;
//add question
if (!bViewOnly) dlg_body += dlg_q;
//set callback
var callback = function () {
Core.orders_upd(idorder, status, c_type);
};
if (!bViewOnly)
confirmBox.show(dlg_title, dlg_body, callback);
else
customBox.show(dlg_title, dlg_body, null, null, BOXMODE.NORMAL);
}
// BALANCE *************************
function printBalance(balance, balance_bonus) {
/*
$("#user_balance").text(balance ? balance : "0");
$("#user_balance_bonus").text(balance_bonus ? balance_bonus : "0");
*/
$('.user_balance').each(function() {
$(this).text(balance ? balance : "0");
});
$('.user_balance_bonus').each(function() {
$(this).text(balance_bonus ? balance_bonus : "0");
});
}
// PAYMENTS *************************
function printPayments(data) {
var str = "";
if (data)
$.each(data, function(i, row) {
str += "
\
"+ row.eps_name +" \
" + round2(row.amount).toFixed(2) + " $ \
" + row.dt + " \
" + (row.eps_description ? row.eps_description : (row.eps_orderid ? row.eps_orderid: "")) + " \
";
});
//notfound string
if (!str) str = "
No payments yet ";
$("#payments_list").html(str);
}
// TRANSACTIONS *************************
function printTransactions(data) {
if (!data) {
str = "
No transactions yet ";
$("#grid > tbody").html(str);
}
var dtable = $("#grid").DataTable({
data: data,
lengthChange: false,
pageLength: 20,
order: [],
columns: [
{
title: "ID",
className: "",
render: function ( data, type, row ) {
return (row.idorder > 0? row.idorder : row.idpayment > 0 ? row.idpayment: "");
}
},
{ title: "Type",
className: "nowrap",
render: function ( data, type, row ) {
if (row.idpayment > 0) return "Payment";
if (row.idorder > 0) {
switch (row.c_type) {
case CAMPAIGN_TYPE.CPA:
return "CPI Campaign";
case CAMPAIGN_TYPE.SMART:
return "Smart Campaign";
case CAMPAIGN_TYPE.MULTI:
return "Campaign";
case CAMPAIGN_TYPE.HQR:
return "High Quality Reviews order";
case CAMPAIGN_TYPE.JOB:
switch (row.job_type) {
case JOB_TYPE.APP_REVIEW_LIKE:
return "Review Likes order";
default:
return "Order";
}
default:
return "Order";
}
} else return "";
}
},
{
title: "Amount",
className: 'num',
render: function ( data, type, row ) {
styleAmount = parseFloat(row.amount) > 0 ? 'price_pos' : 'price_neg';
return "
" + row.amount + " $";
}
},
{ title: "Date", data: 'dt', className: 'nowrap'},
{
title: "Action",
orderable: false,
className: 'nowrap grid-text',
render: function ( data, type, row ) {
var store = APPSTORE.getById(row.appstore_id) || APPSTORE.UNDEF;
sSource = "";
if (row.app_name) {
sSource += row.appstore_id ? "
" : "";
sSource += "
";
sSource += "
" + row.app_name + " ";
if (row.c_type == CAMPAIGN_TYPE.CPA) {
sSource += "
" + (row.amount < 0 ? "[campaign funding]" : "[campaign refund]") + " ";
} else {
sSource += "
" + row.installs + " ";
if (row.rates > 0) sSource += "
" + row.rates + " ";
if (row.comments > 0) sSource += "
" + row.comments + " ";
}
} else sSource = "
" + (row.payment_description ? row.payment_description : row.eps_name) + " ";
return sSource;
},
},
{
title: "Status",
className: 'num',
render: function ( data, type, row ) {
return ORDER_STATUS.draw(ORDER_STATUS.getByValue(row.status));
}
}
]
});
dtable.columns.adjust().draw();
}
// STATISTICS *************************
function printStatistics(data) {
// by date
let str = "";
if (data && data.grp_date) {
let sum_keywords = 0;
let sum_packages = 0;
let sum_rates = 0;
let sum_comments = 0;
$.each(data.grp_date, function(i, row) {
str += "
\
" + row.time_stat + " \
" + (row.cnt_keywords > 0 ? row.cnt_keywords : "")+ " \
" + (row.cnt_packages > 0 ? row.cnt_packages : "") + " \
" + (row.cnt_rates > 0 ? row.cnt_rates : "") + " \
" + (row.cnt_comments > 0 ? row.cnt_comments : "")+ " \
";
sum_keywords += parseInt(row.cnt_keywords);
sum_packages += parseInt(row.cnt_packages);
sum_rates += parseInt(row.cnt_rates);
sum_comments += parseInt(row.cnt_comments);
});
//total
if (str) str+= "
\
Total \
" + (sum_keywords > 0 ? sum_keywords: "") + " \
" + (sum_packages > 0 ? sum_packages: "") + " \
" + (sum_rates > 0 ? sum_rates : "") + " \
" + (sum_comments > 0 ? sum_comments : "") + " \
";
}
//notfound string
if (!str) str = "
Statistics data is not available ";
$("#stat_list_by_date").html(str);
// by keywords
let sum_installs = 0;
str = "";
if (data && data.grp_date) {
$.each(data.grp_keyword, function (i, row) {
let nRankDif = (row.rank_start > 0 && row.rank_current > 0) ? row.rank_current - row.rank_start : 0;
let sRank = "
" + (row.rank_current > 0 ? row.rank_current : "-") + " ";
if (nRankDif != 0) sRank += "
(" + (nRankDif < 0 ? "+" : "-") + Math.abs(nRankDif) + ")";
let sChart = row.idapp2key > 0 ? "\
" : "";
str += " \
" + row.keyword + " \
" + (row.cnt > 0 ? row.cnt : "") + " \
" + sRank + " \
" + sChart + " \
";
sum_installs += parseInt(row.cnt);
});
//total
if (str && sum_installs > 0)
str+= " \
Total \
" + sum_installs + " \
\
\
";
}
//notfound string
if (!str) str = "Statistics data is not available ";
$("#stat_list_by_keyword").html(str);
//hide rates block
//if (BLOCK_ENABLED_RATES == 1) $(".rates-group").show(); else $(".rates-group").hide();
}
// STATISTICS *************************
function printUserInfo(data) {
// user details
$("#user_nickname").val(data['user_name']);
$("#user_email").val(data['user_email']);
$("#user_lastlogin").html("Last login " + data['user_lastlogin_time'] + " from IP " + data['user_lastlogin_ip'] + " ");
$("#user_apikey").html(data['user_apikey']);
if (data.priceplan) {
let str = "";
$.each(data.priceplan, function(i, row) {
str +=`
`;
//open pane
str += `
`;
//add countries
if (row.countries != null) {
//add table
var strTableStart = `
Country
Keyword
Package
Rate
Review
HQ Review
`;
var arr = Array();
arr[APPSTORE.GOOGLE.id] ="";
arr[APPSTORE.APPLE.id] ="";
$.each(row.countries, function(j, row2) {
var store = APPSTORE.getById(row2.appstore_id) || APPSTORE.GOOGLE;
arr[row2.appstore_id] +=
"" +
(row2.country.toUpperCase() != COUNTRY_OTHER
? " " + row2.country_name + " (" + row2.country.toUpperCase() + ")" + (row2.isnew == 1 ? " new " : "") + " "
: " " + row2.country_name + " ") + "\
" + drawUserInfoPriceFormatedString(row2.keyword_price, row2.bonus_action) + " \
" + drawUserInfoPriceFormatedString(row2.package_price, row2.bonus_action) + " \
" + drawUserInfoPriceFormatedString(row2.rate_price, row2.bonus_action) + " \
" + drawUserInfoPriceFormatedString(row2.review_price, row2.bonus_action) + " \
" + drawUserInfoPriceFormatedString(row2.hqr_price, 0) + " \
";
});
var strTableFinish = '
';
str += `
`;
str += '
';
str += '
';
str += strTableStart + (arr[APPSTORE.GOOGLE.id] ? arr[APPSTORE.GOOGLE.id] : "") + strTableFinish + '
';
str += '
';
str += strTableStart + (arr[APPSTORE.APPLE.id] ? arr[APPSTORE.APPLE.id] : "") + strTableFinish + '
';
str += '
';
// min limit
str += '
Required payments limit:
' + row.min_amount + ' $';
str += (!row.isbonus ? ' +
Account approval ':'');
str += '
';
}
//close pane
str += '
';
});
// apply table
$("#price_list").html(str);
$("#price_plan").html(data['payments']['priceplan']);
} else $("#price_list").empty();
$("#payments_amount").html(parseFloat(data['payments']['total']).toFixed(2) + " $");
//email_props
var email_props = parseInt(data['user_email_props']);
$("#check_email_payments").prop('checked', email_props & parseInt($("#check_email_payments").data('bitvalue')));
$("#check_email_news").prop('checked', email_props & parseInt($("#check_email_news").data('bitvalue')));
$("#check_email_orders").prop('checked', email_props & parseInt($("#check_email_orders").data('bitvalue')));
$("#check_email_reports").prop('checked', email_props & parseInt($("#check_email_reports").data('bitvalue')));
//advanced profile
$("#user_skype").val(data['user_login_skype']);
$("#user_tg").val(data['user_login_tg']);
$("#user_fullname").val(data['user_fullname']);
$("#user_phone").val(data['user_phone']);
$("#user_gender").prop('checked', data['user_gender']);
$('input:radio[name=gender]').filter("[value="+data['user_gender']+"]").prop('checked', true);
$("#user_ctype").val(data['user_ctype']);
var lang = data['user_country'];
if (lang) {
$("#user_country").val(lang);
$("#user_country").trigger('change.select2');
}
markChecks();
if (data['user_reflink']) {
$("#user_ref_link").html(data['user_reflink']);
$("#user_ref_link").attr('href', data['user_reflink']);
}
//hide rates block
//if (BLOCK_ENABLED_RATES == 1) $(".rates-group").show(); else $(".rates-group").hide();
//reinit popovers
$("#priceplan .popovers").popover();
}
//drawpriceplaninfo string
function drawUserInfoPriceFormatedString(price, bonus_action) {
price = parseFloat(price);
bonus_action = parseInt(bonus_action);
var str = (bonus_action > 0 && price > 0? "": '');
str += (price > 0 ? price.toFixed(2) : "n/a") + " ";
if (price > 0)
str += (bonus_action > 0 ? "" + parseFloat(price * (100 - bonus_action) / 100).toFixed(2) + " ":"");
return str;
}
// *************** CUSTO< REVIEWS ******************
function fillComboReviewsCategory(data) {
var str = '---- no pack selected ---- ';
retval = $.parseJSON(data);
if (retval.status == STATUS_OK)
$.each(retval.data, function(i, row) {
str += '' + row.name + ' (' + row.cnt +') ';
});
$("#review_pack").html(str);
}
// print
var reviewsTable = null;
/*
function printReviews(data) {
retval = $.parseJSON(data);
if (retval.status != STATUS_OK) {
str = "" + retval.message + " ";
$("#review_list").html(str);
return;
}
var str = "";
$.each(retval.users, function(i, row) {
str += drawReview(row);
});
if (!str) { //not found
str = "No reviews found in this pack ";
$("#review_list").html(str);
}
else {
if (reviewsTable) reviewsTable.destroy();
$("#review_list").html(str);
reviewsTable = $('#tbl_userlist').DataTable( {
"order": [[ 0, "asc" ]],
"iDisplayLength": 20,
"bSortClasses": false,
});
}
}
function drawReview(row) {
var buttons = {};
buttons['edit'] = true;
buttons['delete'] = true;
//controls
var sControls = "";
if (buttons['edit'])
sControls += " Edit ";
if (buttons['delete'])
sControls += " Delete ";
var sAdmin = (row.isadmin == 1 ? " " :"");
// main
var sBalance= "" + round2(row.balance).toFixed(2) + " $";
var sPayments_sum = row.payments_sum> 0 ? "" + round2(row.payments_sum).toFixed(2) + " $": "";
var sPayments_last = row.payments_last> 0 ? "" + round2(row.payments_last).toFixed(2) + " $": "";
var str = " \
" + row.user_id + " \
" + row.user_name + sAdmin + " \
" + row.user_email + " \
" + sBalance + " \
" + sPayments_sum + " \
" + sPayments_last + " \
" + (row.user_priceplan_name ? row.user_priceplan_name: "") + " \
" + (row.cnt_apps > 0? row.cnt_apps: "") +" \
" + (row.cnt_orders > 0? row.cnt_orders: "") +" \
" + row.user_tm_create +" \
" + row.user_tm_lastlogin +" \
" + (row.user_ref_id > 0? row.user_ref_id: "") +" \
" + sControls + "
\
";
return str;
}
*/
//********************* COOKIES *********************
function createCookie(name,value,days) {
if (days) {
var date = new Date();
date.setTime(date.getTime() + (days*24*60*60*1000));
var expires = "; expires=" + date.toUTCString();
}
else var expires = "";
var domain = "; domain=" + "." + document.domain;
document.cookie = name + "=" + value + expires + "; path=/" + domain;
}
function readCookie(name) {
var nameEQ = name + "=";
var ca = document.cookie.split(';');
for(var i=0;i < ca.length;i++) {
var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1,c.length);
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
}
return null;
}
function eraseCookie(name) {
createCookie(name,"",-1);
}
function markChecks() {
if (!jQuery().uniform) return;
$('input[type=checkbox]').each(function () {
var set = jQuery(this).attr("data-set");
var checked = jQuery(this).is(":checked");
jQuery(set).each(function () {
if (checked) {
$(this).attr("checked", true);
} else {
$(this).attr("checked", false);
}
});
jQuery.uniform.update(set);
});
}
function createChecks() {
if (!jQuery().uniform) return;
$("input[type=checkbox]:not(.toggle), input[type=radio]:not(.toggle, .star)").uniform();
}
//*************** REFERRALS ********************
function printReferrals(data, bOnlyActive) {
if (!data) return;
bOnlyActive = bOnlyActive === undefined ? true: bOnlyActive;
var str ="";
//USER LIST *******************
if (data.users.length > 0) {
$.each(data.users, function(i, row) {
//draw row
switch (parseFloat(row.level)) {
case 15: clsLvl = "text-success";break;
case 10: clsLvl = "text-info";break;
case 5: clsLvl = "text-error";break;
default: clsLvl = "";
}
strRow = " \
" + row.level + " % \
" + row.name + " \
" + row.email + " \
" + Math.floor(row.payments_paid) + " $ \
" + Math.floor(row.payments_new) + " $ \
" + Math.floor(row.payments_ref) + " $ \
" + row.tm_create + " \
";
if (!bOnlyActive)
str += strRow;
else if (row.payments_paid > 0) str += strRow;
});
// next payment ***********
str_footer = " \
Total users: " + data.info.cnt_users_total + " \
Total active users: " + data.info.cnt_users_active + " \
\
\
Total referral payments \
" + data.info.payment_total + " $ \
\
\
Previous referral payment \
" + data.info.payment_prev + " $ \
\
\
Next referral payment \
" + data.info.payment_next + " $ \
";
$("#grid > tfoot").html(str_footer);
}
else str = " No referrals found yet, try to invite new clients. ";
$("#grid > tbody").html(str);
//msgbox ************************
$("#payment_next").html(data.info.payment_next);
$("#payment_next").data('amount', data.info.payment_next);
$("#payment_next").data('min-amount', data.info.min_ref_payment_amount);
//min_ref_amount
$(".min_ref_amount").html(data.info.min_ref_amount);
$(".min_ref_payment_amount").html(data.info.min_ref_payment_amount);
//ref_link
if (data.info.ref_link) {
$("#ref_link_info").hide();
$("#ref_link").html(data.info.ref_link);
$("#ref_link").attr('href', data.info.ref_link);
} else {
$("#ref_link_info").show();
$("#ref_link").hide();
}
}
// *********** BLOG ***************
function printBlogPosts(data) {
var str_alerts = "";
var str_system = "";
var str_news = "";
var retval = $.parseJSON(data);
if (retval != null && retval.hasOwnProperty('status') && retval.status == STATUS_OK)
// print posts
$.each(retval.data, function(i, row) {
if (row.type == BLOG_TYPE_SYSTEM) {
let blog_tag = BLOG_TAGS.ALERT;
let is_pinned = false;
for (let j = 0; j < row.tags.length; j++) {
switch (row.tags[j]) {
case BLOG_TAGS.ALERT.name:
blog_tag = BLOG_TAGS.ALERT;
break;
case BLOG_TAGS.DANGER.name:
blog_tag = BLOG_TAGS.DANGER;
break;
case BLOG_TAGS.INFO.name:
blog_tag = BLOG_TAGS.INFO;
break;
case BLOG_TAGS.SUCCESS.name:
blog_tag = BLOG_TAGS.SUCCESS;
break;
}
if (row.tags[j] === 'ACTIVE') {
is_pinned = true;
}
}
if (is_pinned && str_alerts.length === 0) {
str_alerts = '' + row.content + '
';
}
else {
str_system += '';
str_system += '' + row.date + ' ';
str_system += '' + row.content + '
';
}
}
switch (Core.CURRENT_PAGE) {
case PAGE_FAQ: {
if (row.type == BLOG_TYPE_NEWS) {
str_news += '';
str_news += ' ';
str_news += '';
str_news += '
' + row.date + ' ';
if (row.categories) {
for (let j = 0; j < row.categories.length; j++) {
let s = row.categories[j].replace('FAQ:','').replace('FAQ','').trim();
if (s.length>0) str_news += '
' +s+ ' ';
}
}
str_news += '
' + row.title + ' ';
str_news += '
';
}
break;
}
default:
if (row.type == BLOG_TYPE_NEWS) {
str_news += '';
str_news += ' ';
str_news += '';
str_news += '
' + row.title + ' ';
//str_news += '
' + row.date + ' ';
str_news += '
' + row.content + ' ';
str_news += '
';
}
}
});
if (str_alerts.length > 0) {
$("#blog_posts_alerts_feed").show();
$("#blog_posts_alerts_feed").find('ul').html(str_alerts);
} else $("#blog_posts_alerts_feed").hide();
if (str_system.length > 0) {
$("#blog_posts_system").show();
$("#blog_posts_system_feed").html(str_system);
} else $("#blog_posts_system").hide();
if (str_news.length > 0) {
$("#blog_posts_news").show();
$("#blog_posts_news_feed").html(str_news);
} else $("#blog_posts_news").hide();
}
function showTooltip(x, y, contents) {
$('' + contents + '
').css({
position: 'absolute',
display: 'none',
top: y + 5,
left: x + 5,
border: '1px solid #333',
padding: '4px',
color: '#fff',
'border-radius': '3px',
'background-color': '#333',
opacity: 0.80
}).appendTo("body").fadeIn(200);
}
function printPromocodeCheck(status, msg) {
switch (status) {
case STATUS_OK:
$("#textPromo").removeClass().addClass('text-success').text(msg);
break;
case STATUS_FAIL:
$("#textPromo").removeClass().addClass('text-error').text(msg);
break;
default:
$("#textPromo").removeClass().addClass('text-warning').text("add promocode if you have any");
break;
}
}
function printOrderDetails(data) {
if (data==null) return;
if (!data.hasOwnProperty('info') || !data.hasOwnProperty('totals')) return;
var frm = $('#frmOrderDetails');
var title = "Order details" + (data.info.idorder ? " #" + data.info.idorder : "");
frm.find('.title').html(title);
frm.modal();
var grid = frm.find("#grid");
grid.empty();
grid.data('idorder', data.info.idorder ? data.info.idorder : 0);
grid.data('appstore_id', data.info.appstore_id ? data.info.appstore_id : 0);
//buttons
frm.find('.table-reviews').toggle(false);
switch (data.info.c_type) {
case CAMPAIGN_TYPE.UNDEF:
return;
case CAMPAIGN_TYPE.CPA: {
if (!data.hasOwnProperty('details')) return;
if (data.details.length == 0) return;
//set table header
var str = 'Country Impressions Clicks Installs Cost CPI ';
$.each(data.details, function(i, row) {
//country
str += ' ' + row.country_name.toUpperCase() + ' ';
//data
str += '' + (row.impressions > 0 ? row.impressions : "") + ' ';
str += '' + (row.clicks > 0 ? row.clicks : "") + ' ';
str += '' + (row.installs > 0 ? row.installs : "") + ' ';
str += '' + (row.cost.toFixed(2) > 0 ? row.cost.toFixed(2) + ' $': "") + ' ';
str += '' + (row.cpa_actual.toFixed(2) > 0 ? row.cpa_actual.toFixed(2) + ' $': "") + ' ';
str += ' ';
});
//totals
str += 'Summary' + (data.details.length > 1 ? " of " + data.details.length: "") +' ';
str += ''+ data.totals.impressions + ' ';
str += ''+ data.totals.clicks + ' ';
str += ''+ data.totals.installs + ' ';
str += ''+ data.totals.cost + ' $ ';
str += '' + (data.totals.cpa_actual.toFixed(2) + ' / ' + data.info.cpa.toFixed(2) + ' $') + ' ';
str += ' ';
//add Days
str += "";
str += 'Days in campaign ' + (data.info.day + ' / ' + (data.totals.days > 0 ? data.totals.days : "UNLIMITED"));
str += " ";
//out
grid.html(str);
}
break;
case CAMPAIGN_TYPE.HQR: {
//add reviews anmd rates
var str = "";
// draw review line
if (data.totals.reviews > 0)
str += `REVIEWS `
+ (data.info.language !== undefined && data.info.language.length > 0 ? " Language: " + data.info.language_name + " " : "")
+ (data.info.gender !== undefined && data.info.gender != 0 ? " Gender: " + data.info.gender_name + " " : "") +
` `+
` ` +
`` + data.totals.reviews_actual + " / " + data.totals.reviews + ' ';
// draw rate line
if (data.totals.rates > 0)
str += `RATES \
` + data.totals.rates_actual + " / " + data.totals.rates + ' ';
//add gender_name
if (data.info.gender_name) {
str += "Author gender: ";
str += ''+data.info.gender_name+' ';
str +=" ";
}
//add language_name
if (data.info.language_name) {
str += "Review language: ";
str += ''+data.info.language_name+' ';
str +=" ";
}
//add description
if (data.info.description) {
str += "Description: ";
str += ''+data.info.description+' ';
str +=" ";
}
//set table header
var str_head = 'Task Total ';
str = str_head + str;
//out
grid.html(str);
//show reviews pane
frm.find('.table-reviews').toggle(true);
//admin
frm.find('.table-reviews-import').toggle(data.info.appstore_id == APPSTORE.GOOGLE.id);
}
break;
default: {
//add common params
var str = "";
var totals = [];
var totals_actual = [];
var clsTDActive = (data.totals.days == data.info.day && data.info.status != ORDER_STATUS.ACTIVE.value ? 'passive' : 'active');
for (day=1; day <= data.totals.days; day++) {
totals[day] = 0;
totals_actual[day] = 0;
}
if (data.keywords && data.keywords.length > 0)
$.each(data.keywords, function(i, row) {
str += '';
// kw
if (row.id > 0)
str += '\
\
\
' + row.kw + ' ';
else //package
str +='PACKAGE ';
//totals
str += ''+ "" + row.total_actual + " / " + row.total + ' ';
//days
for (day=1; day <= data.totals.days; day++) {
//check rankrule
if (data.info.rankrule_id > 0 && row.status[day] == ORDER_STATUS.COMPLETED_PART.value && (row.installs[day]>0 && row.installs_actual[day]==0))
str += ' * ';
else
str += ''+
(row.installs[day] ? (data.info.day >= day ? "" + row.installs_actual[day] + " / " : "")
+ row.installs[day] : "") + ' ';
totals[day] += (row.installs[day] ? row.installs[day] : 0);
totals_actual[day] += (row.installs_actual[day] ? row.installs_actual[day] : 0);
}
str += ' ';
});
//totals
if (data.keywords && data.keywords.length > 1) {
str += 'Summary ' +
"" + data.totals.installs_actual + " / " + data.totals.installs
+ ' ';
for (day=1; day <= data.totals.days; day++) {
str += '';
str += (data.info.day >= day ? "" + totals_actual[day] + " / " + totals[day] : totals[day]);
str +=' ';
}
str += ' ';
}
//add reviews anmd rates
if (data.totals.rates > 0)
str += 'RATES ' +
'' + data.totals.rates_actual + ' / ' + data.totals.rates + ' ';
if (data.totals.reviews > 0)
str += 'REVIEWS ' +
'' + data.totals.reviews_actual + ' / ' + data.totals.reviews + ' ';
//add delivery type
if (data.keywords) {
str += "Delivery type: ";
switch (data.info.delivery_type) {
default:
case DELIVERY_TYPE.INSTANT:
str += 'INSTANT ';
break;
case DELIVERY_TYPE.DAYSPREAD:
str += 'SPREAD TO 24h ';
break;
}
str+=" ";
}
//add rates type
if (data.totals.rates > 0) {
str += "Rates type: ";
switch (data.info.rate_type) {
case RATE_TYPE.POSTIVE:
str += '5* postitive rates ';
break;
case RATE_TYPE.POSTIVE_AVG:
str += '5* + 4* positive rates ';
break;
case RATE_TYPE.NEGATIVE:
str += '1* negative rates ';
break;
case RATE_TYPE.NEGATIVE_AVG:
str += '1* + 2* negative rates ';
break;
default:
}
str+=" ";
}
//add raterule type
if (data.keywords) {
str += "Promotion rule: ";
str += ''+data.info.rankrule_name+' ';
str +=" ";
}
//add deeplink
if (data.info.common_details !== undefined && data.info.common_details.hasOwnProperty('deeplink')) {
str += "Deeplink: ";
str += ''+data.info.common_details.deeplink+' ';
str +=" ";
}
//add deeplink
if (data.info.common_details !== undefined && data.info.common_details.hasOwnProperty('task_suggest_mode') && data.info.common_details.task_suggest_mode == 1) {
str += "Keyword search mode: ";
str += 'KEYWORD SUGGEST MODE ';
str +=" ";
}
//add description
if (data.info.description) {
str += "Description: ";
str += ''+data.info.description+' ';
str +=" ";
}
// add vendors
if (typeof AdminCore !== undefined && data.hasOwnProperty('vendor') && data.vendor.hasOwnProperty('vendors'))
if ([PAGE_ADMIN_ORDERS_IOS, PAGE_ADMIN_ORDERS_ANDROID, PAGE_ADMIN_ORDERS_HQR, PAGE_ADMIN_ORDERS_JOB].includes(AdminCore.CURRENT_PAGE)) {
if (data.info.idorder == 0) break;
let cnt = 0;
let options = "";
let bOldVendor = true;
$.each(data.vendor.vendors, function(i, vendor) {
options += "" + vendor.name + " ";
cnt++;
if (data.vendor.id == vendor.id) bOldVendor = false;
});
//add no vendor field
if ((data.vendor.id == 0 && cnt > 0) || bOldVendor) options = "NO VENDOR " + options;
if (data.vendor.hasOwnProperty("id")) {
str += "Current vendor: ";
str += "";
str += options;
str +=" ";
str += " Change vendor ";
str +=" ";
}
}
//set table header
let str_head = 'Task Total ';
for (day=1; day <= data.totals.days; day++) {
str_head += 'Day ' + day + ' ';
}
str_head += ' ';
str = str_head + str;
//out
grid.html(str);
//remove active class for not active orders on last day
//show reviews pane
frm.find('.table-reviews').toggle(data.totals.reviews > 0);
frm.find('.table-reviews').find('.btn-reviews-actual').toggle(data.totals.reviews_actual < data.totals.reviews && data.totals.reviews_actual > 0);
}
}
}
function showReviews() {
var idorder = parseInt($('#frmOrderDetails').find("#grid").data('idorder')) || 0;
if (idorder==0) {
customBox.show("", "Can't export reviews.", null, null, BOXMODE.ALERT);
return;
}
var store_id = parseInt($('#frmOrderDetails').find("#grid").data('appstore_id')) || 0;
if (store_id==0) {
customBox.show("", "Can't export reviews.", null, null, BOXMODE.ALERT);
return;
}
//show
order_review_enum (idorder, store_id);
}
//export reviews to textfile. mode=0 - all, 1-undelivered
function exportReviews(mode, idorder=0) {
if (idorder==0) idorder = parseInt($('#frmOrderDetails').find("#grid").data('idorder')) || 0;
if (idorder==0) {
customBox.show("", "Can't export reviews.", null, null, BOXMODE.ALERT);
return;
}
$.ajax({
cache: false, url: "scripts/api.php",
data: {action: "REVIEWS_ENUM", apikey: Core.API_KEY, idorder: idorder, mode: mode},
success: function(data) {
retval = $.parseJSON(data);
if (retval.status == STATUS_OK)
downloadReviews(retval.data, mode, idorder);
else
customBox.show("", retval.message, null, null, BOXMODE.ALERT);
},
error: function() {
customBox.show("", "Can't export reviews.", null, null, BOXMODE.ALERT);
}
});
}
function downloadReviews(data, mode, idorder) {
if (data==null) return;
var str = "";
$.each(data, function(i, row) {
str += row.review + (row.title ? ";" + row.title : "") + "\r\n";
});
str = str.replace('#', '');
var el = document.createElement('a');
el.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURI(str));
el.setAttribute('download', "reviews_" +( mode == 1 ? "all" : "undelivered") + "_" + idorder.toString() +".txt");
el.style.display = 'none';
document.body.appendChild(el);
el.click();
document.body.removeChild(el);
}
function downloadOrderReport(data) {
if (data==null) return;
var str ="data:text/csv;charset=utf-8,"
str += data.header + "\r\n";
$.each(data.report, function(i, row) {
str += row + "\r\n";
});
var el = document.createElement('a');
el.setAttribute('href', encodeURI(str));
el.setAttribute('download', "order_report_" + data.idorder.toString() +".csv");
el.style.display = 'none';
document.body.appendChild(el);
el.click();
document.body.removeChild(el);
}
//updated score from check_rank score property
function setKeywordScore(data, idapp2key) {
json = $.parseJSON(data);
if (json.hasOwnProperty("score")) {
score = parseInt(json['score']);
if (score > 0) $('#grid').find('tr[data-id=' + idapp2key+']').find('td.score-id').html(score);
}
}
//fill order rank rules for order and campaign
function fillOrderRankRules(data) {
var strEmptyList = "DON'T STOP ";
if (!data || data.length == 0) {
$(".combo_rankrules").html(strEmptyList);
return;
}
str = "";
if (data) {
$.each(data, function(i, row) {
str += "" + row.name + " ";
});
}
if (str.length==0) str = strEmptyList;
$(".combo_rankrules").html(str);
}
//replaces href to link in plain text
function linkify(inputText) {
var replacedText, replacePattern1, replacePattern2, replacePattern3;
//URLs starting with http://, https://, or ftp://
replacePattern1 = /(\b(https?|ftp):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/gim;
replacedText = inputText.replace(replacePattern1, '$1 ');
//URLs starting with "www." (without // before it, or it'd re-link the ones done above).
replacePattern2 = /(^|[^\/])(www\.[\S]+(\b|$))/gim;
replacedText = replacedText.replace(replacePattern2, '$1$2 ');
//Change email addresses to mailto:: links.
replacePattern3 = /(([a-zA-Z0-9\-\_\.])+@[a-zA-Z\_]+?(\.[a-zA-Z]{2,6})+)/gim;
replacedText = replacedText.replace(replacePattern3, '$1 ');
return replacedText;
}
//request form for personal manager
function showPersonalManagerRequest() {
$.ajax({
cache: false, url: "scripts/api.php",
data: {action: "USERS_MANAGER_ADD", apikey: Core.API_KEY},
success: function(data) {
retval = $.parseJSON(data);
if (retval.status == STATUS_OK) {
var callback = function () {
window.location.href = "profile?advanced=1";
}
customBox.show("Personal manager",
"Request for personal manager assignment is sent. Your new personal manager will contact you soon. \
Please fill your Advance profile and leave any contact details for better communication.",
callback, null, BOXMODE.SUCCESS, true);
}
else
customBox.show("Personal manager", "Error sending request. Try again later or contact support.", null, null, BOXMODE.ALERT);
},
error: function() {
customBox.show("Personal manager", "Error sending request. Try again later or contact support.", null, null, BOXMODE.ALERT);
}
});
}
function showOrderRemarks(idorder, data, callback = null) {
var strHeader =
``;
str = strHeader + str + strFooter;
customBox.show("Manager's messages for campaign #" + idorder, str, callback, null, BOXMODE.NORMAL, true);
}
//****************** gToools *****************
var gTools = {
formatDate: function (date) {
var d = new Date(date),
month = '' + (d.getMonth() + 1),
day = '' + d.getDate(),
year = d.getFullYear();
if (month.length < 2) month = '0' + month;
if (day.length < 2) day = '0' + day;
return [day, month, year].join('.');
}
};
function addUsersPaymentsUntracked(data) {
$.each(data, function(i, row) {
//add tracking to FB
try {
scriptContent = "fbq('track', 'Purchase', {content_category: '" + row.eps_name + "', content_ids: ['" + row.eps_orderid + "'], value: " + row.amount + ", currency: 'USD'});";
$.globalEval(scriptContent);
} catch(err) {};
/* COMMENTED 16.04.2018 - added tracking from server script
//add tracking to GA
try {
scriptContent = "ga('require', 'ecommerce'); \
ga('ecommerce:addTransaction', \
{'id': '" + row.eps_orderid + "', \
'affiliation': 'eps-" + row.eps_id + "',\
'revenue': '" + row.amount + "', \
'shipping': '0', \
'tax': '0'}); \
ga('ecommerce:send');";
$.globalEval(scriptContent);
//set confirmation
$.ajax({
cache: false,
url: "scripts/api.php",
data: {action: "USERS_PAYMENTS_TRACK_CONFIRM", apikey: row.apikey, id: row.id, timestamp: $.now()},
});
} catch(err) {};
*/
//add tracking to Quora
try {
scriptContent = "qp('track', 'Purchase')";
$.globalEval(scriptContent);
} catch(err) {};
});
}
function getParameterByName(variable) {
var query = window.location.search.substring(1);
var vars = query.split('&');
for (var i = 0; i < vars.length; i++) {
var pair = vars[i].split('=');
if (decodeURIComponent(pair[0]) == variable) {
return decodeURIComponent(pair[1]);
}
}
}