I expect rounding will easily cover the very small variance however all prices are in 5p so dont understand where the variance comes from…
Script is quite long so have started with sales etc first;
Have only rang in a few products to test script;
Fosters 3.80 (Tax 1)
Kronie 4.10 (Tax 1)
Sausages 9.95 (Tax 0)
Tax setup is irrelevant as all i need to know is if taxed for not and set 0 or 1.
It has no impact on calculated price as all workings are in gross/tax inclusive product price.
Here is my accounts screen;
The response from my script is;
GLA: 10003 - Tax: 0 - Total: 0
GLA: 10003 - Tax: 1 - Total: 7.8999999999999995
GLA: 10002 - Tax: 0 - Total: 9.95
GLA: 10002 - Tax: 1 - Total: 0
Here is the script;
//Load NewBook Variables
var vars = script.Load("NewBookVariables","initialize"); //Load NewBook Variables
vars.initialize(); //Instalise NewBook Variables
//Load Scripts
var NewBookRequests = script.Load("NewBookRequests","postRoomCharge"); //Load NewBook Room Post Script
var dbTools = script.Load("dbTools","ticketOrderCount","ticketOrderList","orderDetails","uniqueListofTags","eodTicketIdCount","eodTicketIdList"); //Load dbTools Scripts
var JSONTools = script.Load("JSONTools","searchTagArrayIndex","searchStateArrayIndex","searchTaxArrayIndex"); //Search JSON array for data name value
function eodSalesArray() {
var runDate = new Date() //Set script run time
var startDate = '2016-01-01';
var ticketIdCount = dbTools.eodTicketIdCount(startDate,roomPostPaymentName);
var ticketIdList = dbTools.eodTicketIdList(startDate,roomPostPaymentName);
var posDepartmentList = dbTools.uniqueListofTags(pmsDepartment);
var posDepartmentCount = posDepartmentList.length;
var salesArray = '';
var taxList = ["0","1"];
var taxCount = taxList.length;
for (g = 0; g < posDepartmentCount ; g++)
{
var loopDepartment = posDepartmentList[g];
var loopDepartmentTotal = 0;
var chargeArray = '';
for (v = 0; v < taxCount ; v++)
{
var loopTax = taxList[v];
var taxTotal = 0;
for (t = 0; t < ticketIdCount ; t++)
{
var loopTicket = ticketIdList[t];
var loopTicketOrderCount = dbTools.ticketOrderCount(loopTicket);
var loopTicketOrderList = dbTools.ticketOrderList(loopTicket);
var ticketTotal = 0;
for (o = 0; o < loopTicketOrderCount ; o++)
{
var loopOrder = loopTicketOrderList[o];
var orderRowString = dbTools.orderDetails(loopOrder);
var orderRowArray = orderRowString.split('~');
var orderPrice = orderRowArray[4];
var orderQuantity = orderRowArray[5];
var orderQuantityRounded = +(Math.round(orderQuantity + "e+2") + "e-2");
var orderStateJsonRaw = orderRowArray[7];
var orderStateJson = JSON.parse(orderStateJsonRaw);
var stateArrayNumber = JSONTools.searchStateArrayIndex(orderStateJson,pmsDepartment);
var orderGLAccount = orderStateJson[stateArrayNumber].S;
var orderTaxJsonRaw = orderRowArray[6];
var orderTaxJson = JSON.parse(orderTaxJsonRaw);
var taxArrayNumber = JSONTools.searchTaxArrayIndex(orderTaxJson,postTaxName);
if (taxArrayNumber == '-1')
{
var orderTaxable = 0;
} else {
var orderTaxable = 1;
}
var orderGiftStateJsonRaw = orderRowArray[7];
var orderGiftStateJson = JSON.parse(orderGiftStateJsonRaw);
var giftStateArrayNumber = JSONTools.searchStateArrayIndex(orderGiftStateJson,'GStatus');
if (giftStateArrayNumber == '-1')
{
var giftStateMultiplier = 1;
} else {
var giftStateMultiplier = orderGiftStateJson[giftStateArrayNumber].SV;
}
var orderTotal = orderQuantityRounded * orderPrice * giftStateMultiplier;
if (orderGLAccount == loopDepartment && orderTaxable == loopTax)
{
ticketTotal += orderTotal
}
} //order loop end
taxTotal += ticketTotal
} //ticket loop end
chargeArray += 'GLA: '+loopDepartment+' - Tax: '+loopTax+' - Total: '+taxTotal+'\r';
} //tax loop end
salesArray += chargeArray;
} //department loop end
return salesArray
}
Pretty much its just compounded for loops which go through;
->Department/GLA (Only 10002 and 10003 at the moment
|-->Tax (0 or 1)
|-->Tickets (All tickets for work period)
|-->Orders (All orders in tickets loop)
There are then a few ifs in the orders loop which only adds the value of orders which meet the Department && Tax from that cycle.
If I create a log of all parts of the loop where calculations are made I get this;
| 1 x 4.10 x 1 | 1 x 3.80 x 1 | 1 x 9.95 x 1