121 lines
2.4 KiB
JavaScript
121 lines
2.4 KiB
JavaScript
|
|
function newAggregatedOrdersArray() {
|
|
|
|
/* This object generates an array of orders that are aggregated by Amount A. */
|
|
|
|
var aggregatedOrdersArray = {
|
|
eventHandler: undefined,
|
|
addOrder: addOrder,
|
|
removeOrder: removeOrder,
|
|
setSortOrder: setSortOrder,
|
|
initialize: initialize
|
|
};
|
|
|
|
var array = [];
|
|
|
|
var sortOrder = 'ascending';
|
|
|
|
aggregatedOrdersArray.eventHandler = newEventHandler();
|
|
|
|
return aggregatedOrdersArray;
|
|
|
|
function initialize() {
|
|
this.eventHandler.initialize();
|
|
}
|
|
|
|
function addOrder(order) {
|
|
|
|
var wasAdded = false;
|
|
|
|
for (var i = 0; i < array.length; i++) {
|
|
|
|
var currentItem = array[i];
|
|
|
|
if (currentItem.rate === order.rate) {
|
|
|
|
currentItem.amountSum = currentItem.amountSum + order.amountA;
|
|
wasAdded = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (wasAdded === false) {
|
|
|
|
var newItem = {
|
|
rate: order.rate,
|
|
amountSum: order.amountA
|
|
};
|
|
|
|
array.push(newItem);
|
|
|
|
}
|
|
|
|
applySortOrder();
|
|
|
|
aggregatedOrdersArray.eventHandler.raiseEvent('Array Changed', array);
|
|
|
|
}
|
|
|
|
function removeOrder(order) {
|
|
|
|
for (var i = 0; i < array.length; i++) {
|
|
|
|
var currentItem = array[i];
|
|
|
|
if (currentItem.rate === order.rate) { // We find the item in the array where the rate is the same as the orders rate.
|
|
|
|
currentItem.amountSum = currentItem.amountSum - order.amountA;
|
|
|
|
if (currentItem.amountSum === 0) { // If we reach zero, then there is no reason to keep this element in the array.
|
|
|
|
array.splice(i, 1); // This means remove this item from the array.
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
applySortOrder();
|
|
|
|
aggregatedOrdersArray.eventHandler.raiseEvent('Array Changed', array);
|
|
|
|
}
|
|
|
|
function setSortOrder(newSortOrder) {
|
|
|
|
sortOrder = newSortOrder;
|
|
|
|
applySortOrder();
|
|
|
|
aggregatedOrdersArray.eventHandler.raiseEvent('Array Changed', array);
|
|
|
|
}
|
|
|
|
function applySortOrder() {
|
|
|
|
array.sort(compare);
|
|
|
|
}
|
|
|
|
function compare(itemA, itemB) {
|
|
|
|
if (sortOrder === 'ascending') {
|
|
|
|
return itemA.rate - itemB.rate;
|
|
|
|
}
|
|
|
|
if (sortOrder === 'descending') {
|
|
|
|
return itemB.rate - itemA.rate;
|
|
|
|
}
|
|
|
|
return undefined;
|
|
|
|
}
|
|
|
|
}
|