Whats the best way to get Samba Entity Data onto a webserver with strict network policies

This is cool. Never done this before, so I find it to be somewhat awesome. One more step toward online integration …

##SambaPOS postJSON() Script:

function postJSON(tid,oid,onm,ouid)
{
  // override values for testing
  //var tid = 3214;
  //var oid = 7757;
  //var onm = 347;
  //var ouid = 'YTYb4Ra7H0aN4ucamXrwDg';
  //return "TID:"+tid + " OID:"+oid + " ONM:"+onm + " OUID:"+ouid;
  
  // webserver URL, Username, Password
  var url = "http://localhost:82/posthandler.php";
  var usr = "q";
  var pwd = "nada";
  
  var datafields = new Array();
  datafields.push("TicketId");
  datafields.push("Id");
  datafields.push("OrderNumber");
  datafields.push("OrderUid");
  
  datafields.push("MenuItemId");
  datafields.push("MenuItemName");
  datafields.push("PortionName");
  datafields.push("Price");
  datafields.push("Quantity");
  datafields.push("PortionCount");

  datafields.push("PriceTag");
  datafields.push("Tag");
  datafields.push("Taxes");
  datafields.push("OrderTags");
  datafields.push("OrderStates");
  
/*
  qry += " ,[CalculatePrice]";
  qry += " ,[DecreaseInventory]";
  qry += " ,[IncreaseInventory]";

  qry += " ,[CreatingUserName]";
  qry += " ,[CreatedDateTime]";
  qry += " ,[LastUpdateDateTime]";
  qry += " ,[AccountTransactionTypeId]";
  qry += " ,[ProductTimerValueId]";

  qry += " ,[GroupTagName]";
  qry += " ,[GroupTagFormat]";
  qry += " ,[Separator]";
  
  qry += " ,[Locked]";
  qry += " ,[WarehouseId]";
  qry += " ,[DepartmentId]";
  qry += " ,[TerminalId]";
*/

  var datafieldscount = datafields.length;
  
  var qry = "";

  qry += "SELECT";
  
  for (var d=0; d < datafieldscount; d++)
  {
    qry += (d>0 ? " ," : " ");
    qry += "[" + datafields[d] + "]";
  }
  
  qry += " FROM [Orders]";

  qry += " WHERE 1=1";
  qry += " AND [TicketId] = " + tid;
  //qry += " AND [Id] = " + oid;
  qry += " AND [OrderNumber] = " + onm;
  qry += " AND [OrderUid] = '" + ouid + "'";
  qry += " ORDER BY [Id]";
  
  //return qry;
  
  var qryresult = sql.Query(qry).Delimit('~').First;
  var qrydata = qryresult.split('~');
  var qryfieldcount = qrydata.length;  

  //return qryfieldcount;
  
  var data = new Object();
  
  for (var d=0; d < datafieldscount; d++)
  {
    data[datafields[d]] = qrydata[d];
  }
  
  var jsondata = JSON.stringify(data);
  //return jsondata;

  var res = web.PostJson(url,jsondata,usr,pwd);
  return res;
}

##Server PHP posthandler.php

I am writing the post data to a file, but you could easily process it to create INSERT statements to push data into a DB on the Server.

<?php
$usr_auth = "q";
$pwd_auth = "nada";

$usr           = $_SERVER["PHP_AUTH_USER"];
$pwd           = $_SERVER["PHP_AUTH_PW"];

if ($usr!==$usr_auth || $pwd!==$pwd_auth) {
    die("Authentication FAILED.");
}

$contentType   = $_SERVER["HTTP_CONTENT_TYPE"];
$contentLength = $_SERVER["HTTP_CONTENT_LENGTH"];

//$data .= "USER:" . $usr . " PWD:" . $pwd . "\r\n";
//$data .= "CT:" . $contentType . " LEN:" . $contentLength . "\r\n";

$inputJSON = file_get_contents('php://input');
$input = json_decode( $inputJSON, TRUE ); //convert JSON into array

$data .= "================================================================\r\n";

$data .= "JSON (" . count($input) ."):\r\n";
$data .= $inputJSON ."\r\n\r\n";

$ticketID = $input["TicketId"];
$orderID  = $input["Id"];
$orderNum = $input["OrderNumber"];
$orderUID = $input["OrderUid"];

$data .= "TicketId:" . $ticketID ."\r\n";
$data .= "OrderID:" . $orderID ."\r\n";
$data .= "OrderNum:" . $orderNum ."\r\n";
$data .= "OrderUID:" . $orderUID ."\r\n";

$data .= "------------------\r\n";

foreach ($input as $inkey => $inval) {
    $data .= $inkey . ":";
    $data .= $inval . "\r\n";
}

$data .= "================================================================\r\n\r\n";

$fileName = "ticket_".$ticketID.".txt";
// FILE_APPEND | LOCK_EX
$fwsuccess = file_put_contents ($fileName, $data, FILE_APPEND);

return 0;
?>

This is what is written to the “Ticket_<ticketId>.txt” file when it receives the data:

================================================================
JSON (15):
{"TicketId":"3235","Id":"7836","OrderNumber":"390","OrderUid":"fVokZfRcckmb9qLCXSt8Fg","MenuItemId":"118","MenuItemName":"Item A","PortionName":"Normal","Price":"100.00","Quantity":"1.000","PortionCount":"1","PriceTag":"","Tag":"","Taxes":"[]","OrderTags":"[{\"OI\":25,\"OK\":\"000010\",\"PR\":-10,\"Q\":1,\"TF\":true,\"TN\":\"Discount Festival\",\"TV\":\"Category 1\",\"UI\":2}]","OrderStates":"[{\"D\":\"\\/Date(1461272870335-0600)\\/\",\"OK\":\"000000\",\"S\":\"Submitted\",\"SN\":\"Status\",\"SV\":\"\",\"U\":2},{\"D\":\"\\/Date(1461272868589-0600)\\/\",\"OK\":\"000000\",\"S\":\"0\",\"SN\":\"Staff\",\"SV\":\"\",\"U\":2}]"}

TicketId:3235
OrderID:7836
OrderNum:390
OrderUID:fVokZfRcckmb9qLCXSt8Fg
------------------
TicketId:3235
Id:7836
OrderNumber:390
OrderUid:fVokZfRcckmb9qLCXSt8Fg
MenuItemId:118
MenuItemName:Item A
PortionName:Normal
Price:100.00
Quantity:1.000
PortionCount:1
PriceTag:
Tag:
Taxes:[]
OrderTags:[{"OI":25,"OK":"000010","PR":-10,"Q":1,"TF":true,"TN":"Discount Festival","TV":"Category 1","UI":2}]
OrderStates:[{"D":"\/Date(1461272870335-0600)\/","OK":"000000","S":"Submitted","SN":"Status","SV":"","U":2},{"D":"\/Date(1461272868589-0600)\/","OK":"000000","S":"0","SN":"Staff","SV":"","U":2}]
================================================================

#Automation

… Actions and Rules removed from this post - see later posting with updated Automation …

4 Likes