window.onload = function() {
"use strict";
var totalSum = 0,
totatOrders = 0,
recSum = 0,
typSum = 0,
usersID = [],
noRec = 0;
var sum_2628 = 0, // для задания 2.
orders_2628 = 0,
us_2628 = [],
rec_2628 = 0;
var copyOfOL = [], // копия исходного массива, чтоб при сортировке его не изменять (не знаю, надо ли это??)
tables = document.getElementsByTagName( 'table' ), // массив всех таблиц
toFix = function(a) {return a.toFixed(2) + " грн."}, // форматирую данные, представляющие денежные средства
formatObj = { // "шаблонный" объект
'timestamp' : function(a) {return new Date(a * 1000).toLocaleDateString()},
'total' : toFix,
'typical' : toFix,
'recommended': toFix
};
document.getElementById("btn").onclick = function() { // добавил кнопку к app.html
var date_26 = Date.parse("06/26/2015")/1000,
date_29 = new Date(2015, 5, 29)/1000; // другой способ задать дату (месяцы начинаются с 0)
ordersList.forEach( function(item) {
totalSum += item.total;
totatOrders++;
recSum += item.recommended;
typSum += item.typical;
if (usersID.indexOf(item.user_id) == -1) usersID.push(item.user_id);
if (item.recommended === 0) noRec++;
if (item.timestamp >= date_26 && item.timestamp < date_29) {
sum_2628 += item.total;
orders_2628++;
if (us_2628.indexOf(item.user_id) == -1) us_2628.push(item.user_id);
rec_2628 += item.recommended;
}
copyOfOL.push(item);
});
fillTable1();
fillTable2();
fillTable3();
fillTable4();
fillTable5();
}
function fillTable1() {
document.getElementById("total-sum").innerHTML = toFix( totalSum );
document.getElementById("total-orders").innerHTML = totatOrders;
document.getElementById("total-recommended").innerHTML = toFix( recSum );
document.getElementById("total-typical").innerHTML = toFix( typSum );
document.getElementById("total-customers").innerHTML = usersID.length;
document.getElementById("total-without-recommended").innerHTML = noRec;
document.getElementById("total-without-typical").innerHTML = totatOrders - noRec;
}
function fillTable2() {
var tdsT2 = tables[1].getElementsByTagName( 'td' );
tdsT2[1].innerHTML = sum_2628.toFixed(2) + " grn";
tdsT2[3].innerHTML = orders_2628;
tdsT2[5].innerHTML = us_2628.length;
tdsT2[7].innerHTML = rec_2628.toFixed(2) + " grn";
}
function fillTable3() {
var fieldsOrder = ['timestamp', 'id', 'user_id', 'total', 'typical', 'recommended'],
// порядок вывода св-в объектов (согласно макета таблицы 3)
tBody = tables[2].getElementsByTagName("tbody")[0],
i, Nmax = 5;
copyOfOL.sort(compare); // сортируем массив по убыванию общей суммы заказа
function compare(order1, order2) {
if ( order1.total >= order2.total ) return -1;
else return 1;
}
for (i = 0; i < Nmax; i++) {
tBody.insertRow(i);
fieldsOrder.forEach( function(item, n) {
tBody.rows[i].insertCell(n).textContent = formatObj[item] ?
formatObj[item](copyOfOL[i][item]) : copyOfOL[i][item];
});
}
}
function fillTable4() {
var postCust = {}, // постоянные покупатели (сохраняю их на всякий случай)
tBody = tables[3].getElementsByTagName("tbody")[0],
len, temp, count, i, j;
copyOfOL.sort(compareByUser);
function compareByUser(order1, order2) {
if ( order1.user_id <= order2.user_id ) return -1
else return 1;
}
temp = copyOfOL[0].user_id;
count = 1;
j = 0; // индекс вставляемой строки
for(i = 1, len = copyOfOL.length; i < len; i++) {
if (copyOfOL[i].user_id == temp) {
count++
} else {
if (count > 10) {
postCust[temp] = count;
tBody.insertRow(j);
tBody.rows[j].insertCell(0).textContent = temp;
tBody.rows[j].insertCell(1).textContent = count;
j++;
}
temp = copyOfOL[i].user_id;
count = 1;
}
}
}
function fillTable5() {
document.querySelectorAll("button")[0].onclick = function() {
var userID = document.getElementsByTagName('input')[1].value,
j = 0,
fieldsOrder = [ 'timestamp', 'id', 'total', 'typical', 'recommended' ],
tBody = tables[4].getElementsByTagName("tbody")[0];
if (userID) {
ordersList.forEach( function(item, n) {
if (item.user_id == userID) {
tBody.insertRow(j);
fieldsOrder.forEach( function(a, m) {
tBody.rows[j].insertCell(m).textContent = formatObj[a] ? formatObj[a](item[a]) : item[a];
});
j++;
}
});
}
}
}
} // window.onload