Don’t you just love it when a plan comes together and multiple/compound scripts work pretty much first time
Have whittled my room charge script down to this sexy little thing;
var NewBookRequests = script.Load("NewBookRequests","postRoomCharge"); //Load NewBook Inhouse Request
var ticketChargeArrays = script.Load("ticketChargeArrays","itemized"); //Load NewBook Inhouse Request
function test(ticketId,roomNumber){
var chargeAccount = api.Entity(roomNumber).Data(entityField_accountid).Get();
var itemizedArray = ticketChargeArrays.itemized(ticketId);
var chargesResponse = NewBookRequests.postRoomCharge(chargeAccount,itemizedArray);
return chargesResponse;
}
The power comes in the background
Expanded master requests scripts
//Load NewBook Variables
var vars = script.Load("NewBookVariables","initialize"); //Load NewBook Variables
vars.initialize(); //Instalize variables
//Autherisation test script
function authtest() {
var url = instanceURL+authTest; //Request URL
var requestdata = new Object(); //Request JSON Object
requestdata.api_key = apikey; //JSON Data API Key
var requestjson = JSON.stringify(requestdata); //Stringify Request Data
var response = web.PostJson(url,requestjson,username,password); //JSON POST
return response;
}
//Inhouse Bookings List
function inhouseList() {
var url = instanceURL+bookingList; //Request URL
var requestdata = new Object(); //Request JSON Object
requestdata.api_key = apikey; //JSON Data API Key
requestdata.list_type = 'inhouse'; //JSON Data List Type
var requestjson = JSON.stringify(requestdata); //Stringify Request Data
var response = web.PostJson(url,requestjson,username,password); //JSON POST
return response;
}
//Room Charge
function postRoomCharge(inputAccount,inputChargesArray) {
var url = instanceURL+posSale; //Request URL
//Sales array building
var requestSalesArrayAccount = '"account_id":"'+inputAccount+'"'; //Account ID from script parameter
var requestSalesArrayGenerated = '"generated_when":"'+chargeGenerated+'"'; //Generated when from newbook variables
var requestSalesArrayCharges = '"charges":['+inputChargesArray+']'; //Charges array from script parameter
var requestSalesArray = '{'+requestSalesArrayAccount+','+requestSalesArrayGenerated+','+requestSalesArrayCharges+'}'; //Build sales array from above variables
//Request Building
var requestAPI = '"api_key":"'+apikey+'"'; //API key from newbook variables
var requestSales = '"sales":['+requestSalesArray+']'; //Sales value with array from above
var requestjson = '{'+requestAPI+','+requestSales+'}'; //Request build
var response = web.PostJson(url,requestjson,username,password); //JSON Request POST
return response;
}
//Sales Post
function postEposSales(inputChargesArray,inputPaymentsArray) {
var url = instanceURL+posSale; //Request URL
//Sales array building
var requestSalesArrayAccount = '"account_id":"'+posAccount+'"'; //Account ID from script parameter
var requestSalesArrayGenerated = '"generated_when":"'+chargeGenerated+'"'; //Generated when from newbook variables
var requestSalesArrayCharges = '"charges":['+inputChargesArray+']'; //Charges array from script parameter
var requestSalesArrayPayments = '"payments":['+inputPaymentsArray+']'; //Payments array from script parameter
var requestSalesArray = '{'+requestSalesArrayAccount+','+requestSalesArrayGenerated+','+requestSalesArrayCharges+','+requestSalesArrayPayments+'}'; //Build sales array from above variables
//Request Building
var requestAPI = '"api_key":"'+apikey+'"'; //API key from newbook variables
var requestSales = '"sales":['+requestSalesArray+']'; //Sales value with array from above
var requestjson = '{'+requestAPI+','+requestSales+'}'; //Request build
var response = web.PostJson(url,requestjson,username,password); //JSON Request POST
return response;
}
First of 3 charge array scripts for ‘itemized’ charge array’
//Load NewBook Variables
var vars = script.Load("NewBookVariables","initialize"); //Load NewBook Variables
vars.initialize(); //Instalise NewBook Variables
//Load Scripts
var dbTools = script.Load("dbTools","ticketOrderCount","ticketOrderList","orderDetails"); //Load dbTools Scripts
var JSONTools = script.Load("JSONTools","searchArrayNamesForValue"); //Search JSON array for data name value
function itemized(PostTicketId)
{
var orderid_qty = dbTools.ticketOrderCount(PostTicketId); //Call ticket order ID qty
var orderid_list = dbTools.ticketOrderList(PostTicketId); //Call ticket order list
var chargesArray = '';
for (n = 0; n < orderid_qty ; n++)
{
var OrderId = orderid_list[n];
var order_row_string = dbTools.orderDetails(OrderId);
var order_row_array = order_row_string.split('~');
var order_ticket = order_row_array[1];
var order_quantity = order_row_array[5];
var order_quantity_rounded = +(Math.round(order_quantity + "e+2") + "e-2");
var order_name = order_row_array[2];
var order_DBportion = order_row_array[3];
if(order_DBportion == 'Normal')
{
var order_portion = '';
} else {
var order_portion = order_DBportion;
}
var order_price = order_row_array[4];
var order_total = order_quantity * order_price;
var order_tag_json_raw = order_row_array[6];
var order_tag_json = JSON.parse(order_tag_json_raw);
var tag_array_number = JSONTools.searchArrayNamesForValue(order_tag_json,pmsDepartment)
if (tag_array_number >= 0)
{
var pms_glaccount = order_tag_json[tag_array_number].TV;
}else{
var pms_glaccount = unspecifiedDepartment;
}
var post_desctiption = chargePrefix+' '+order_ticket+' - '+order_quantity_rounded+' x '+order_name+' '+order_portion;
var post_pmsdepartment = pms_glaccount;
var post_amount = order_total.toFixed(2);
var post_taxfree = '1';
var post_json_data = new Object();
post_json_data.description = post_desctiption;
post_json_data.gl_account_code = post_pmsdepartment;
post_json_data.amount = post_amount;
post_json_data.tax_free = post_taxfree;
var post_json = JSON.stringify(post_json_data);
if (n < orderid_qty-1)
{
chargesArray += post_json + ',';
} else {
chargesArray += post_json;
}
}
return chargesArray;
}
dbTools scripts for ticket order count, ticket order id list and order details from order ID
function ticketOrderCount(ticketId) {
qry = "@@TicketOrderCount:" + ticketId; //QRY Variable '@@TicketOrderCount' Script: + 'ticketId' Variable
var orderCount = sql.Query(qry).First; //SQL Query responce -> entities Variable (comma seperated list of entities)
return orderCount; //Return
}
function ticketOrderList(ticketId) {
qry = "@@TicketOrderIdList:" + ticketId; //QRY Variable '@@EntityList' Script: + 'roomEntityType' Variable
var orderList = sql.Query(qry).Delimit(',').All; //SQL Query responce -> entities Variable (comma seperated list of entities)
return orderList; //Return
}
function orderDetails(orderId) {
qry = "@@OrderDetails:" + orderId; //QRY Variable '@@EntityList' Script: + 'roomEntityType' Variable
var orderDetails = sql.Query(qry).Delimit('~').First; //SQL Query responce -> entities Variable (comma seperated list of entities)
return orderDetails;
Search Samba JSON (tags/states) for Array index for Tag Name=X
function searchArrayNamesForValue(jsonData,inputName) {
arrayIndex = -1; //<===reset index for each sub loop
for(var i = 0; i<jsonData.length;i++) //<=== OPEN SUBLOOP - RESPONCE SEARCH FOR ENTITY NAME
{
if (jsonData[i].TN == inputName) //SUBLOOP if JSON Name = inputName
{
var arrayIndex = i; //<===set arrayIndex with array number when if is TRUE
break; //<=== END SUBLOOP when if is TRUE
}
}
return arrayIndex;
}
Just need to integrate my logs system for debug/reference.