eSolution 3rd Party API Code
Microsoft .NET C# - WebService / SOAP
The referencing data types DataSet + DataTable are Microsoft-specific data types that are represented in standard XML streams.
Principle of data access...
The eSolutions interface runs internally under the name HSWebBL and can therefore be accessed as HSWebBL.asmx.
On the test computer (virtual machine) the service is available locally under the following URL "http: //localhost/HSWebBL/HSWebBL.asmx".
Depending on which local IP the test computer has received in its network, the service can be reached at "http://xxx.xxx.xxx.xxx/HSWebBL/HSWebBL.asmx" (xxx.xxx.xxx.xxx = local IP address of the test cash register in the LAN. (e.g. 192.168.1.200).
By default, you create a communication programme that runs in the respective location and establishes the connection to your product. Otherwise, you could access the local IIS via a port share from the outside (this is not a service of Hypersoft).
Basic information on the retrieval of item master data
Foreword to safety:
There are several functions that need or require the parameter Company and SerialNumber. Here, specifications have been defined for each partner and announced with the LOI from Hypersoft. Every partner who wishes to use the eSolutions connection is bound by these specifications and must ensure that they are included in their interface. Without valid transmission of these two parameters, requests may have to be answered negatively.
Global functions
string WebServiceInitialize()
This function is used to initialise the WebService and should be executed once after restarting the partner application.
To be on the safe side, this function is also executed automatically in the background during a data retrieval or booking process, if this has not already been executed by the partner after a restart of the IIS.
The sending IP is checked and, if necessary, a new IP is added. a station is created or prepared in the hypersoft system. If, then another ward is created behind the highest ward number of the system with the name "SOT". This new station is based on the highest station number in terms of outlet assignment and thus uses its defaults.
Feedback string:
WebService 'HSWebBL' is running. Your IP: xxx:xxx:xxx:xxx Main TerminalNumber: 1 RetStatus: Branch: 1 Your TerminalNumber: 101 Your StockID: 9 StockName: Your trading area
DataSet example
Serves as an example to illustrate the structure of the DataSet for bookings. DataSet is delivered as XML.
DataSet GetExample()
Feedback DataSet: (for description see also BookTransaction)
"Amount" | type=int | (number) |
"ProductID" | type=int | (PID unique ProductID / DB ID) |
"Price" | type=double | (Sales price) |
"Linked" | type=int | (price level) |
"PE" | type=int | (RezID from side) |
"FT" | type=string | (Free text info) |
"IHAH" | type=string | (IH=InHouse AH=outside House) |
"FreeBontext" | type=string | (optional for tickets) |
"Discount" | type=double | (Booking info (internal)) |
string CallService(string Company, string SerialNumber, string fpMessage, string MediaID)
Can only be used in conjunction with a booking process including pager assignment.
(If required, please contact Hypersoft Support)
Optional functions
Check advertising service
string WebServicePing()
Feedback string:
OK Your IP: xxx:xxx:xxx:xxx
Check version
string GetECommerceVersion()
Feedback string:
2017.1.39.0 (Status:March 2021)
Free ID for protocol
string ProtocolTransactionStart()
Feedback string:
ID:0 (A free ID to the logbook, starting with 0)
(The ID is required for ProtocolTransactionStop)
Retrieve protocol
void LogTransactionLog(string LogInfo)
All log information is cached under the last generated ID until "LogTransactionStop" is executed.
string ProtocolTransactionStop(string ID, string MailAddress)
Send all cached log entries to the passed mail address and close the ID.
Feedback string:
OK or in case of error Error:xxxx
Determining the Hypersoft customer number of the location
public string GetHypersoftCustomerNumber(string Company, string SerialNumber)
A string with the following content is returned:
OK:12345 or in case of error error:...
eSolutions API Item data / master data GetItemData
Please note: The Hypersoft POS system does not work directly in the item data but creates a working copy of the item data for this purpose. This working copy is also used for the eSolutions interface. See the description of the item master in the chapter Processing during operationfor the background.
The following functions provide the current item master of the cash register...
The functions GetItemData to GetItemData10 return the item master in different forms. Different parameters can determine the content of the data and, depending on the function selected, return the item master in a different data structure.
Related topics: Price levels with 3rd parties, Item and processes with 3rd parties
E.g. DataSet, JSON or also as a pure string (the return type is always in front of the function). DataSet is delivered as XML.
DataSet GetItemData(string Company, string SerialNumber)
All saleable items in the Standard price level without taking into account the trading area allocation.
Return = DataSet Type1
DataSet GetItemData2(string Company, string SerialNumber)
All saleable items in the Standard price level with consideration of the trading area allocation.
Return = DataSet Type2
DataSet GetItemData3(string Company, string SerialNumber)
(meanwhile identical with GetItemData2)
All saleable items in the Standard price level with consideration of the trading area allocation.
Return = DataSet Type2
DataSet GetItemData4(string Company, string SerialNumber, string InfoSeparator)
All saleable items in the price level Standard with consideration of the sales point allocation and additionally with the control which separator is to be applied in the field Info. (character Ç is then exchanged for the passed character)
Return = DataSet Type2
string GetItemData5(string Company, string SerialNumber)
(no longer recommended and is only carried for compatibility reasons)
All saleable and info items without consideration of the trading area allocation.
Return = string
json string GetItemData6(string Company, string SerialNumber, string InfoSeparator)
All saleable items in the price level Standard with consideration of the sales point allocation and additionally with the control which separator is to be applied in the field Info (character Ç is then exchanged for the transferred character).
Return = DataSet Type2 as json string
DataSet GetItemData7(string Company, string SerialNumber, string InfoSeparator)
All saleable items in the price level Standard without consideration of the sales point allocation and additionally with the control which separator is to be applied in the field Info(character Ç is then exchanged for the transferred character).
Return = DataSet Type2
string GetItemData8(string Company, string SerialNumber) (*1)
(no longer recommended and is only carried for compatibility reasons)
All saleable and info items like GetItemData5 but with consideration of the sales point allocation.
Return = string
json string GetItemData9(string Company, string SerialNumber, string InfoSeparator)
All saleable items in the price level Standard without consideration of the sales point allocation and additionally with the control which separator is to be applied in the field Info (character Ç is then exchanged for the transferred character).
Return = DataSet Type2 as json string
json string GetItemData10(string Company, string SerialNumber, string InfoSeparator, string MultiPriceLevel)
All saleable items in the price level Standard without consideration of the sales point allocation and additionally with the control which separator is to be applied in the field Info (character Ç is then exchanged for the transferred character).
Returned value = DataSet Typ3 as json string
DataSet GetMultiPLItemData(string Company, string SerialNumber, string InfoSeparator, string MultiPriceLevel)
All saleable items in the price level Standard without consideration of the sales point assignment and additionally with the control which separator is to be applied in the field Info (character Ç is then exchanged for the transferred character).
Return = DataSet Type2
Here, however, there is an extra item data record for each price level and not the prices as extra fields (PE0 to PE3) as with GetItemData10.
string GetMultiPLItemData6(string Company, string SerialNumber, string InfoSeparator, string MultiPriceLevel)
All saleable items in the price level Standard without consideration of the sales point allocation and additionally with the control which separator is to be applied in the field Info(character Ç is then exchanged for the transferred character). Also corresponds to GetMultiPLItemData.
Return = DataSet Type2 as json string
DataSet GetMultiPLItemDataSet(string Company, string SerialNumber, string InfoSeparator, string MultiPriceLevel)
All saleable items in the price level Standard without consideration of the sales point allocation and additionally with the control which separator is to be applied in the field Info (character Ç is then exchanged for the transferred character).
Return = DataSet Type3
DataSet GetItemPackage(string Company, string SerialNumber, int SelectionMode, int UsePE)
Internal function in connection with the integration of Deliverect with the control of an item image.
DataSet GetItemPackage2(string Company, string SerialNumber, int SelectionMode, int UsePE, int ItemPicture)
These two functions return the item master in a format expected by Deliverect.
DataSet Returns...
The return as DataSet varies in content (fields) depending on the method. See DataSet Types (DataSet Type1, Type2 and Type3). DataSet is delivered as XML. Returning the item in the case as string is the smallest and simplest method and offers only a few fields. Therefore, the affected methods are no longer recommended for new integrations and will only continue to be included for compatibility reasons.
The following fields are returned for type string:
ProductID;Bontext1;Artikel_Name;Preis;HGR_Nr;HGR_Name;WGR_Nr;WGR_Name;UGR_Nr;UGR_Name;TicketTyp;TicketFaktor
The fields are separated by a semicolon and each item is separated from the next item by a CR\LF.
See Commodity groups with 3rd parties.
Table with the main groups of the items concerned:
Fields: | ||
"Text" | type=string | (Group text) |
"ID" | type=int | (group number) |
"InternalID" | type=int | (internal database ID) |
"InterfaceText" | type=string | (interface text) |
"GroupFoto" | type=string | (Group picture (692*399)) |
"FotoLink" | type=string |
(internal LINK to the picture) (z.B. http://localhost/GlobalData/Clnt0001/Group12.jpg) |
"FotoData" | type=base64Binary | (Image data) |
"GroupMFoto" | type=string | (small (160*80)) |
"MFotoLink" | type=string | (internal LINK to the picture) |
"MFotoData" | type=base64Binary | (Image data) |
"ZT1" | type=string | (freely definable additional info1) |
by the time | ||
"ZT10" | type=string |
(freely definable additional info10) |
DataSet Type1:
Table name: WGR_XXX (XXX for each main group used. E.g. WGR_Drinks)
Table with the commodity groups of the affected items:
(like HGR_LISTE without InternalID plus two additional fields)
Fields: | ||
"TextSmall" | type=string | (keyboard text) |
"HGRID" | type=short | (Link to ID HGR_LISTE) |
Table with all saleable items:
Fields: | ||
"artikel_nr" | type=int | (item number) |
"Artikel_Name" | type=string | (Bontext1) |
"ProductID" | type=int | (DB ID) |
"Price" | type=string | (Sales price) |
"PE" | type=short | (Price level 0=Standard) |
"NoDiscount" | type=unsignedByte | (not discountable 1=YES 0=NO) |
"MinDiscountPrice" | type=double | (minimum price) |
"Deposit" | type=float | (deposit value) |
"Deposit_AH" | type=float | (Deposit value outside house) |
"GruppenKey" | type=int | (internal group key) |
"HGR" | type=int | (Main group ID) |
"WGR" | type=int | (Product group ID) |
"UGR" | type=int | (Sub- or Subgroup ID) |
"UGRSort" | type=string | (sorting field of the UGR) |
"TicketTyp" | type=unsignedByte | (assigned ticket type) |
"TicketFaktor" | type=unsignedByte | (assigned ticket factor) |
"SortimentA" | type=unsignedByte | (1=YES 0=NO) |
"SortimentB" | type=unsignedByte | (1=YES 0=NO) |
"SortimentC" | type=unsignedByte | (1=YES 0=NO) |
"SortimentD" | type=unsignedByte | (1=YES 0=NO) |
"CO2" | type=double | (CO2 value from item master) |
"Scheduled" | type=unsignedByte | (time-limited 1=YES 0=NO) |
"FromDate" | type=int | (in YYYYMMDD otherwise 0) |
"ToDate" | type=int | (in YYYYMMDD otherwise 0) |
"FromTime" | type=short | (in HHMM otherwise 0) |
"ToTime" | type=short | (in HHMM otherwise 0) |
"KeyName" | type=string | (Key text) |
"plu_nr" | type=int | (dispensing item number) |
"FreeBText" | type=unsignedByte | (Free receipt text 1=YES 0=NO) |
"FreeItemNumber" | type=int | (POS item number) |
"IsRecipe" | type=unsignedByte | (Recipe 1=YES 0=NO) |
"RecipeFactor" | type=short | (always 1) |
"RecipeMode" | type=short | (always 0) |
"FreeAddOnItem" | type=unsignedByte | (free appendix) |
"HGR_Name" | type=string | (main group name) |
"WGR_Name" | type=string | (product group name) |
"UGR_Name" | type=string | (subgroup name) |
This table then exists separately for each product group with the same data structure, e.g. ART_alcohol-free or ART_main dishes.
When using discounts, also note the possibility Retrieve rounding parameters for discount.
Table with all query items (components of a recipe with query):
(Attention: Hypersoft reserves the right to extend the assortments if necessary. E.g. E,F,G,H etc.)
Table with all query items (components of a recipe with query that are not themselves saleable):
fields: (like SYS_Abfragen)
Table with all counts for the query items (components of a recipe with query):
Fields: | ||
"ProductID" | type=int | (DB ID of the recipe) |
"AbAnz1" | type=string | (number of query1 possible components) |
by the time | ||
"AbAnz16" | type=string | (Number of query16 of possible components) |
"AbMode1" | type=string | (Mode Query1 "0"=optional "1"=forced) |
by the time | ||
"AbMode16" | type=string | (Mode query16 "0"=optional "1"=forced) |
Table with all counts for the query items (components of a recipe with query):
Fields: | ||
"ProductID" | type=int | (DB ID of the recipe) |
"AB1" | type=string | (query text of query1) |
"AB16" | type=string | (Query text of query16) |
Table with all saleable items:
(like DataSet Type1 but additional fields and the Artikel_name with different content)
Fields:
Content Area info:
Item info followed by the standard closing separator = Ç
Search keywords followed by the standard terminating separator = Ç
AdditionalShort followed by the standard terminator = Ç
AdditionalLong followed by the standard terminating separator = Ç
AllergensShort followed by the standard terminator = Ç
AllergensLong followed by the standard terminating separator = Ç
EnergiewerteKurz followed by the standard terminating separator = Ç
EnergiewerteLang followed by the standard terminating separator = Ç
Table with all menu courses set up:
Fields: | ||
"MenuNo" | type=string | (number of the menu course) |
"MenuName" | type=string | (name of the menu course) |
BookTransaction and BookTransactionStr
Fields: | ||
"Amount" | type=int | (number) |
"ProductID" | type=int | (PID unique product ID /DB ID) |
"Price" | type=double | (selling price) |
"Linked" | type=integer | (price level) |
"PE" | type=int | (RezID from supplements) |
"FT" | type=string | (Free text information) |
"IHAH" | type=string | (IH= In-House AH=outside) |
"Discount" | type=double | (Booking info internal) |
"MenuCourse" | type=int | (Menu course as a number. 0 to 20) |
Table with all price levels set up:
Fields: | ||
"PENo" | type=int | (Number of the price level) |
"PEName" | type=string | (name of the price level) |
Table with all saleable items:
(like DataSet Type2 but additional fields for the transferred price levels)
Fields: | ||
"PEx" | type=double | (selling price) |
"PEVATx" | type=double | (VAT rate) |
"PEVAT_AHx" | type=double | (VAT rate for out of home) |
"DEPOSITx" | type=double | (deposit amount) |
"DEPOSIT_AHx" | type=double | (Deposit amount for out of house) |
Each x stands for a Transferred Price Level. E.G. "0,1,2,3":
"PE0" | type=double | (selling price) |
"PEVAT0" | type=double | (VAT rate) |
"PEVAT_AH0" | type=double | (VAT rate for out of home) |
"DEPOSIT0" | type=double | (deposit amount) |
"DEPOSIT_AH0" | type=double | (Deposit amount for out of house) |
"PE1" | type=double | (selling price) |
"PEVAT1" | type=double | (VAT rate) |
"PEVAT_AH1" | type=double | (VAT rate for out of home) |
"DEPOSIT1" | type=double | (deposit amount) |
"DEPOSIT_AH1" | type=double | (Deposit amount for out of house) |
"PE2" | type=double | (selling price) |
"PEVAT2" | type=double | (VAT rate) |
"PEVAT_AH2" | type=double | (VAT rate for out of home) |
"DEPOSIT2" | type=double | (deposit amount) |
"DEPOSIT_AH2" | type=double | (Deposit amount for out of house) |
"PE3" | type=double | (selling price) |
"PEVAT3" | type=double | (VAT rate) |
"PEVAT_AH3" | type=double | (VAT rate for out of home) |
"DEPOSIT3" | type=double | (deposit amount) |
"DEPOSIT_AH3" | type=double | (Deposit amount for out of house) |
eSolutions API booking methods
DataSet BookTransaction(string Company, string SerialNumber, string MediaID, DataSet dsBooking)
string MediaID Valid field contents:
Each field consists of a name followed by a colon ":" and the passed value x, making sure that the characters | (pipe) and (colon) are not included in the passed values. Each parameter within the MediaID must be terminated with the | (pipe) character as a separator.
Special feature: The first parameter in the transfer decides the process type.
"ID:x" |
Unique customer ID to transfer the transaction to the POS system as a customer transaction. If ID:0 then further fields are expected to recognise a customer. Possible fields for the customer master are listed. To match an existing customer, the phone numbers are used first and then the email addresses. If neither is available in the current customer master, a new customer record is created. |
"TEL:x" | (telephone number) |
"TEL1:x" | (mobile number) |
"MAIL:x" | (Mail address) |
"EMAIL:x" | (also mail address) |
"NAME:x" | (last name) |
"FNAME:x" | (first name) |
"PREFIX:x" | (salutation Mr/Mrs etc.) |
"CITY:x" | (City) |
"ZIP:x" | (postcode) |
"ADDRESS:x" | (street and house number) |
"INFO:x" | (temporary info for ordering e.g. "Report in the backyard") |
"CUSCO:x" | (CO) |
"TNR:x.y" | Unique table number (in the range between 1 and 999999 (6 digits)). The transaction is made available to the POS system as a table transaction. A seat number is also possible here; to do this, pass the table number in decimal form. E.g. table 12 place 4 = TNR:12.4 |
"TEC:0" | Continuous delivery process 40000000 + 0=next DeliveryID |
"BPNR:x" |
Banquet number Special solution: Generates a table operation in the combination 900000 + banquet number |
"POID:x" | Hypersoft internal unique PortalID. (customer base 1 and customer base 2). The customer must have already been entered in the portal. |
In addition to each process type, further parameters can be transferred.
"ZA:x=y" | Payment transaction with the x CurrencyID and y Transaction Amount. The transaction is then transferred to the POS system with the amount and the CurrencyID. E.g. ZA:20=123.50 (Cashless payment) |
"ZZ:x=y" | Payment Subtotal with the x CurrencyID and y Transaction Amount. The transaction is then saved with the amount and the CurrencyID as an interim payment. E.g. ZZ:20=123.50 (EC payment). The difference to ZA: is that the process remains open with ZZ:. (New balance) |
"ZA:1001=y=z" | Special solution for payment by Web voucher. y=amount z=voucher number |
"ZZ:1001=y=z" |
Special solution for payment by web voucher. y=amount z=voucher number. The CurrencyID 1001 is used here. The interface then automatically determines the stored payment type from the voucher manager (internal term) and transfers it to the POS system. It must be ensured that the voucher has already been debited via the portal. (e.g. webshop 2.0) |
"ExtTNR:x" | Different terminal number (ward) if the stored fixed ward number is not to be taken into account. |
"ExtForm:x" | Different invoice form. Is used if a payment type is also transferred (see ZA:). |
"IHAH:x" | Settle entire transaction to In House or Out of House, this eliminates IHAH in the individual booking data. |
"ASSORT:x" | Selected assortment (statistical info). |
„IHTNR:x.y“ | For the transfer of a table number / seat number within a delivery transaction (TEC:0). |
"DID:x" | DisplayorderID as additional info of a delivery process (TEC:0). |
"INTTYP:x" | Delivery type as additional info of a delivery operation (TEC:0) 1 pick-up, 2 delivery, 3 in-house, (4 OrderAhead in preparation). |
Fields: | ||
"Amount" | type=int | (number) |
"ProductID" | type=int | (PID unique ProductID / DB ID) |
"Price" | type=double | (Sales price) |
"PE" | type=int | (price level) |
"Linked" |
type=int | (RezID from side) |
"FT" | type=string | (Free text info) |
"IHAH" | type=string | (IH=In House AH=Out House) |
"ValidDate" | type=int | (optional for tickets) |
"BookInfo" | type=string | (Booking info (internal)) |
"FreeBontext" | type=string | (different receipt text) |
"Discount" | type=double | (discount value) |
Return DataSet with the following content:
"Message" | type=string | (Feedback: OK or Error) |
"DeliveryID" | type=int | (DeliveryID of the transaction) |
If the system is set up with consecutive receipt numbers (superhero function), two more fields are added to the return.
ConsecutiveNumber" | type=string | (Optional the Consecutive Bon number) |
"ConsecutiveInfo" | type=string |
(Optionally a free text for the Bonnummer) (Superhero function) |
"TableNo" | type=int | (transaction number / table number) |
"Seat" | type=int | (Place number used optionally) |
In case of an error "Message=Error", another table with the faulty items is returned. The content of the table is the transferred item data plus a status.
Possible feedback in the "Status" field:
ERR1 - Price difference invalid
ERR2 - Item invalid
ERR3 - Annex invalid
DataSet BookTransactionStr(string Company, string SerialNumber, string MediaID, string strBooking)
Just like "BookTransaction", however, the bookings in the transfer as a string.
string strBooking:
Amount|ProductID|Price|PE|Linked|FT|IHAH|ValidDate|BookInfo|FreeBontext|Discount
For the content of the fields see (DataSet dsBooking:). The fields must be separated with the | (pipe) and terminated with a CRLF.
Please note that the transferred field contents must not contain a | (pipe) , a CRLF or a ; semicolon.
DataSet CheckTransaction(string Company, string SerialNumber, string MediaID, DataSet dsBooking)
Like BookTransaction but without generating the transaction (to check beforehand whether a transfer is correct).
DataSet CheckTransactionStr(string Company, string SerialNumber, string MediaID, string strBooking)
Like BookTransactionStr but without creating the transaction (to check first whether a transfer is correct).
Retrieve eSolutions API processes
Preferred function to retrieve a transaction using the returned DeliveryID from "BookTransaction".
DataTable GetDeliveryInfo(string Company, string SerialNumber, string DeliveryID)
Feedback DataSet: | ||
"OpenDate" | type=int | (opening day) |
"TTADate" | type=int | (Theoretical end of day /TTA The theoretical end of day (TTA) applies the calendar day change at a time specified by you (default setting 6:00 a.m.). The programme can automatically perform closures, updates and maintenance at this time. A new sales day then begins with the first POS booking of the day.) |
"SysDate" | type=int | (system date of transaction completion) |
"SysTime" | type=int | (system time operation completion) |
"Station" | type=int | (Station Operation Completion) |
"TotalAmount" | type=double | (Gross transaction amount) |
"TIP" | type=double | (transaction total tip) |
"Expenses" | type=double | double (transaction total, if applicable) Expenses) |
"InterfaceRef" | type=int | (Internal transaction number) |
"DocumentPrefix" | type=string | (invoice prefix , e.g. INV) |
"DocumentNo" | type=int | (Invoice number) |
"NetAmount" | type=double | (Net transaction amount) |
"Vat1Sum" | type=double | (VAT sum 1) |
"Vat1Val" | type=double | (VAT rate 1) |
"Vat2Sum" | type=double | (VAT sum 2) |
"Vat2Val" | type=double | (VAT rate 2) |
"Vat3Sum" | type=double | (VAT sum 3) |
"Vat3Val" | type=double | (VAT rate 2) |
"Vat4Sum" | type=double | (VAT sum 4) |
"Vat4Val" | type=double | (VAT rate 4) |
"NoCOOPin" | type=int | (Pin for access to the NoCOO invoice) |
"NoCOOCode" | type=string | (Code for access to the NoCOO invoice) |
"DeliveryBookID" | type=string | (Booking ID (see "BookTransaction") |
"TSETxt" | type=string | (if applicable. TSE signature text Germany) |
"TSEQR" | type=string | (if applicable. TSE QRCode Content Germany) |
"SigAUQR" | type=string | (if applicable. Signature Austria) |
"TransactionStatus" | type=string | (D=Day/before Z - F=Fixed/after Z) |
Retrieval of all open transactions:
DataTable GetOpenTable(string Company, string SerialNumber)
Feedback DataSet: | ||
"KellnerNr" | type=int | (Operator / EmpID from master data) |
"TischNr" | type=int | (table number/ transaction number) |
"Level" | type=short | (price level) |
"crowd" | type=int | (Number of the items) |
"Price" | type=double | (unit price) |
"MWST_Satz" | type=double | (VAT rate) |
"OrderBonIsPrinted" | type=unsignedByte | (Order receipt is printed 0=No >0=Yes) |
"MWST_Stufe" | type=unsignedByte | (0=undetermined 1=In-house 2=Outside) |
"TraceNo" | type=int | (unique TraceID) |
"ValidDate" | type=int | (Validity date for tickets) |
"LinkedID1" | type=int | (Enclosure1 RezID from master data) |
Until | ||
"LinkedID64" | type=int | (Enclosure64 RezID from master data) |
"ProductID" | type=int | (PID) |
"Source" | type=int | (Booking source, table follows) |
"BookInfo" | type=string | (free text) |
"Bontext" | type=string | (Bontext1) |
"TagesDatum" | type=int | (booking date) |
"TagesZeit" | type=int | (booking time) |
"ConsecutiveNumber" | type=int | (ongoing Bonn number superhero function) |
"ConsecutiveInfo" | type=string | (ongoing Bonnummerntext superhero function) |
"TableOwner" | type=int32 | (Operation owner / EmpID from master data) |
}, "empName". | type=string | (operator name) |
"OwnerEmpName" | type=string | (transaction owner name) |
"RecordPosition" | type=int32 | (unique item position in the transaction / possibly necessary if splitting is possible) |
"SupplementsTxt" | type=string | (all inserts as text / for quick display) |
DataTable GetOpenTableBySelection(string Company, string SerialNumber, string SelectionTable)
Like GetOpenTable but for a SelectionTable (table number).
Retrieval of settled transactions:
DataTable GetTransactionDT(string Company, string SerialNumber, string LastTransactionID, int DateFrom, int TimeFrom, int DateTo, int TimeTo)
Feedback DataTable: | ||
"TransactionID" | type=int | (unique ID from table) |
"SysDate" | type=int | (transaction completion date) |
"SysTime" | type=int | (transaction completion time) |
"TableNo" | type=int | (table number/operation number) |
"CashEmpID" | type=int | (Cashier EmpID see master data) |
"Station" | type=short | (Operation Completion Station) |
"CashEmpTxt" | type=string | (Operator name / Alias) |
"TerminalTxt" | type=string | (station name) |
"TabPrefix" | type=string | (D=Day or F=Fixed) |
DataSet GetTransactionDS(string Company, string SerialNumber, string LastTransactionID, int DateFrom, int TimeFrom, int DateTo, int TimeTo)
As GetTransactionDT, but as return DataSet
string GetTransactionStr(string Company, string SerialNumber, string LastTransactionID, int DateFrom, int TimeFrom, int DateTo, int TimeTo)
Wie GetTransactionDT, jedoch als Rückmeldung string. Feedback string:
TransactionID|SysDate|SysTime|TableNo|CashEmpID|Station|CashEmpTxt|TerminalTxt|TabPrefix
Retrieval of completed operations for an opening day:
DataSet GetTransactionsFromOpenDate(string Company, string SerialNumber, string Last_YYYYMMTT_Date)
Feedback DataSet: (3 tables) Table1 "Journal |
||
"TransactionID" | type=int | (unique ID from table) |
"SysDate" | type=int | (transaction completion date) |
"SysTime" | type=int | (transaction completion time) |
"OpenDate" | type=int | (opening day) |
"TTADate" | type=int | (TTA) |
"TableNo" | type=int | (table number/transaction number) |
"TableType" | type=int | (transaction type 0=table 1=customer 2=debit 3=employee) |
"ObjNo" | type=int | (Table/Customer/Employee) |
"ObjType" | type=int | (legend follows) |
"ProductID" | type=int | (Item PID) |
"Quant" | type=double | (Number of items) |
"Price" | type=double | (unit price) |
"ItemText" | type=string | (Bontext1) |
"Vat" | type=double | (VAT rate) |
"EmpID" | type=int | (Operator EmpID see master data) |
"CashEmpID" | type=int | (Cashier EmpID see master data) |
"Station" | type=short | (Operation Completion Station) |
"Source" | type=int | (0 to 255 legend follows) |
"TablePrefix" | type=string | (D=Day F=Fixed) |
"OrgObjNo" | type=string | (internal) |
Table2 "Payment |
||
"TransactionID" | type=int | (see Journal table) |
"SysDate" | type=int | (see Journal table) |
"SysTime" | type=int | (see Journal table) |
"OpenDate" | type=int | (see Journal table) |
"TTADate" | type=int | (see Journal table) |
"TableNo" | type=int | (see Journal table) |
"TableType" | type=int | (see Journal table) |
"ObjNo" | type=int | (see Journal table) |
"ObjType" | type=int | (see Journal table) |
"PaySum" | type=double | (payment amount) |
"MainCurSum" | type=double | (Total in main currency for foreign currency) |
"PayType" | type=short | (payment type as number) |
"TitlePayType" | type=string | (payment type as text (e.g. credit/cash)) |
"CurrencyID" | type=int | (currency index) |
"TitleLong" | type=string | (payment method) |
"ExternalInfo" | type=string | (optional number e.g. customer name) |
"CashEmpID" | type=int | (see Journal table) |
"Station" | type=short | (see Journal table) |
"Status" | type=int | (0=hours 2=tip counter entry etc.) |
"TablePrefix" | type=string | (see Journal table) |
"OrgObjNo" | type=string | (see Journal table) |
Tabelle3 „Invoice“ |
||
"TransactionID" | type=int | (see Journal table) |
"SysDate" | type=int | (see Journal table) |
"SysTime" | type=int | (see Journal table) |
"OpenDate" | type=int | (see Journal table) |
"TTADate" | type=int | (see Journal table) |
"DocumentPrefix" | type=string | (Invoice code e.g. "RG") |
"DocumentNo" | type=int | (Invoice number) |
"Station" | type=int | (see Journal table) |
"TablePrefix" | type=string | (see Journal table) |
Retrieval of completed operations for a TTA day:
DataSet GetTransactionsFromTTADate(string Company, string SerialNumber, string Last_YYYYMMD_Date)
Feedback DataSet: (3 tables)
Like GetTransactionsFromOpenDate.
Retrieve a transaction with the same MediaID as in the "BookTransaction" for Sinder transactions linked to a pager.
DataSet GetMediaInfo(string Company, string SerialNumber, string MediaID)
Feedback DataSet: | ||
"MediaID" | type=string | (transferred MediaID) |
"OfficerMediaID" | type=string | (transaction at POS) |
"CreditLimit" | type=string | (if applicable. Limit from Card Table) |
"UsingValue" | type=string | (current transaction total) |
"Balance" | type=string | (limit - transaction total) |
"GroupNumber" | type=string | (if applicable. Group when pager is in use) |
"PagerNumber" | type=string | (if applicable. Number from pager when in use) |
"OwnerName" | type=string | (if applicable. Name of the pager) |
"InactiveDate" | type=string | (-1 without specification otherwise date in YYYYMMDD) |
"IsWaiter" | type=string | (1 = operator pager otherwise 0 |
"IsManager" | type=string | (1 = manager pager otherwise 0) |
Retrieve a card transaction by card number:
DataTable GetMediaIDTransaction(string Company, string SerialNumber, string MediaID)
Feedback DataTable: | ||
"MediaID" | type=string | (transferred MediaID) |
"TableName" | type=string | (POS process) |
"TMaxValue" | type=double | (if applicable. Limit of the card) |
"TValue" | type=double | (operation total) |
"TItemCount" | type=int | (Number of items in the transaction) |
"Losses" | type=int | (if applicable. Reason for loss of card >0) |
"PriceLevel" | type=int | (if applicable. Price level of the card >0) |
"Discount" | type=double | (if applicable. Discount rate of the card >0) |
"Status" | type=string | (OK or Error:xxxx) |
DataTable GetMediaIDBookings(string Company, string SerialNumber, string MediaID)
Retrieve a card transaction using the card number.
Feedback DataTable:
(internal transaction structure for GOT (Guest Order Terminal).
eSolutions API Split Invoices Code
If you work with splitting and the POS system requires and enables supplementary settings, see SupplementaryAdditional splitting settings for the eSolutions API.....
The functions to be used from the e-commerce interface are as follows....
public DataSet SplittTransaction(string Company, string SerialNumber, string MediaID, DataSet dsSplittings)
or
public DataSet SplittTransactionStr(string Company, string SerialNumber, string MediaID, string strSplittings)
The specifications for Company and SerialNumber are the same as for other functions.
The MediaID is to be used as follows:
TNR:ttt.pp|ZA:x=y.yy
ttt.pp = table and optionally seat number
x = CurrencyID (CurrencyID)
y.yy = amount. (Overpayment will be converted into tip)
Optionally, the customer information such as e-mail, telephone and surname, first name and address can also be transferred here in the MediaID. The split part is then billed to the transferred customer. (See content MediaID for BookingTransaction and BookingTransactionStr)
The data content of dsSplitting is as follows: | ||
"Amount" | type=int | the quantity of the item to be split * |
"RecordPosition" | type=int | unique record number * |
* Data from the retrieval via function "GetOpenTableBySelection
Alternatively, the data can also be transferred in the form of a string with the function "SplittTransactionStr".
The following rules apply here:
Amount|RecordPosition;
e.g. 2|112; -> Split 2 times items at position 112.
eSolutions API Retrieving and checking master data
Different master data retrievals and checks.
This function allows you to check for a change in the last retrieved item master:
string StatusRequest(string fpRequest)
NewItemLayout can be queried by passing "NIL" and in the case of an item master that has been changed in the meantime, a NIL is returned.
Information on layout changes is also possible; to do this, send an empty string and the current layout is reported back. In the standard version, this is "L1". However, the partner must make a desired switch himself. The eCommmerce interface only provides a layout number here.
Feedback string:
L1 to Lx, NIL or empty
DataSet GetPriceLevels(string Company, string SerialNumber)
Feedback DataSet: | ||
"PENo" | type=int | (Price level number 0=Standard) |
"PEName" | type=string | (price level name) |
DataSet GetPaymentMethod(string Company, string SerialNumber)
Feedback DataSet: | ||
"ID" | type=int | (CurrencyID) |
"TitleLong" | type=string | (payment type text) |
"Title" | type=string | (Payment type short text) |
"InBaseCrcyFak" | type=double | (Conversion factor for foreign currency) |
"ForBaseCrcyFak" | type=double | (conversion factor Variante2) |
"IsPrimary" | type=short | (Main currency 1=Yes 0=No) |
"IsSecondary" | type=short | (Currency 1=Yes 0=No) |
Hauptwährung = 0 Währung = 1 und Umrechnungsfaktor nicht 1 bedeutet Fremdwährung.
string GetPaymentMethodJson(string Company, string SerialNumber)
Function to retrieve payment methods. (Currency table) Like GetPaymentMethod but as json string
Feedback json string:
DataSet GetVoucher(string Company, string SerialNumber)
Feedback DataSet: | ||
"ID" | type=int | (unique table ID) |
"Name" | type=string | (voucher name) |
"GET_ITEM" | type=int | (if applicable. Item assignment) |
"BEGIN_USED" | type=int | (Valid from) |
"END_USED" | type=int | (Valid until) |
"FIX_VOLUME" | "FIX_VOLUME" | x (Fixed value) |
"ADD_VOLUME" | type=double | (bonus value) |
"Auto_Volume" | type=double | (percentage value of the invoice total) |
"Auto_MinVolume" | type=double | (from min. invoice amount) |
"Auto_MaxVolume" | type=double | (up to max. invoice amount) |
"DAY_USED_TYP" | type=unsignedByte | (Validity in days 0=unlimited) |
"USINGTYPE" | type=unsignedByte | (Voucher types 4=Web 2=Value etc.) |
"ItemFactor" | type=int | (Item fix factor) |
"ItemMinFactor" | type=int | (min item factor) |
"ItemMaxFactor" | type=int | (max item factor) |
"CurrencyID" | type=int | (currency index CurrencyID) |
"SortimentA" | type=unsignedByte | (Is in assortment A 1=Yes 0=No) |
"SortimentB" | type=unsignedByte | (Is in assortment B 1=Yes 0=No) |
"SortimentC" | type=unsignedByte | (Is in assortment C 1=Yes 0=No) |
"SortimentD" | type=unsignedByte | (Is in assortment D 1=Yes 0=No) |
"IsActivWebvoucher" | type=short | (Marking is portal voucher) |
"ItemFoto" | type=string | (Items photo picture channel 1) |
"FotoData" | type=string | (Photo Image Channel 1) |
"FotoData10" | type=base64Binary | (Photo YourAPP 1) |
"FotoData11" | type=base64Binary | (Photo YourAPP 2) |
"FotoData12" | type=base64Binary | (Photo YourAPP 3) |
"FotoData13" | type=base64Binary | (Photo YourAPP 4) |
"FotoData14" | type=base64Binary | (Photo YourAPP 5) |
DataSet GetVoucherValues(string Company, string SerialNumber, string VoucherNumber)
Feedback DataSet: | ||
"Status" | type="xs:string | (OK or Error) |
"VoucherNumber" | type="xs:string | (voucher number) |
"VoucherName" | type="xs:string | (voucher name) |
"VoucherID" | type="xs:int | (Voucher ID) |
"PaymentID" | type="xs:int | (payment type CurrencyID) |
"Amount" | type="xs:int | (Current value) |
"Discount" | type="xs:double | (if applicable. Discount percentages) |
string GetBlacklist(string Company, string SerialNumber)
Feedback string:
List of PID's separated with | (pipe).
DataSet GetTerminalInfo()
Feedback DataSet: | ||
"TerminalNumber" | type=short | (station number) |
"TerminalName" | type=string | (station name) |
"TerminalType" | type=string | (Station type cashier station, kitchen station, etc.) |
DataSet GetEmployee(string Company, string SerialNumber)
Feedback DataSet: | ||
"ID" | type=int | (Internal Operator Numbers (EmpID)) |
"Name" | type=string | type=string |
"FName" | type=string | (operator's first name) |
"Alias" | type=string | (Operator Alias) |
"RevierVon" | type=int | (Table district from) |
"RevierBis" | type=int | (Table district up to) |
"ZugangAlleTische" | type=unsignedByte | (Has access to all tables) |
"AutoKeyNr" | type=short | (Automatic logout after time) |
"CardUID" | type=string | (Operator key) |
"OrigKey" | type=string | () |
"EmpFoto" | type=string | (Staff photo) |
"FotoLink" | type=string | (LINK to photo) |
"FotoData" | type=base64Binary | (Photo data) |
DataSet GetEmployee3(string Company, string SerialNumber)
string CheckEmployee(string Company, string SerialNumber, string EmpID, string PNumber, string MediaID)
Feedback string:
OK or NoOwner
DataSet GetCus(string Company, string SerialNumber, int CusID)
Feedback DataSet:
All current fields from the client database. Name, first name, address etc. as DataSet
string GetStrCus(string Company, string SerialNumber, int CusID)
Feedback string:
All current fields from the client database. Name, first name, address etc. as string
Retrieve rounding parameters for discount
You can call up the specifications of the set discount rounding. These settings are often used individually by customers. Return is a DataTable "RoundingInfo".
DataTable GetRoundingInfo(string Company, string SerialNumber)
"RoundingMode" | NONE, NORMAL, UP, DOWN | |
"RoundingPosition" | 1=only one decimal place |
2=to second decimal place |
"RoundingDigit0" | FIGURE 0 | 0=NO, 1=YES |
"RoundingDigit1" | FIGURE 1 | 0=NO, 1=YES (1 cent or 10 cents per decimal place) |
"RoundingDigit2" | FIGURE 2 | 0=NO, 1=YES (1 cent or 10 cents per decimal place) |
"RoundingDigit3" | FIGURE 3 | 0=NO, 1=YES (1 cent or 10 cents per decimal place) |
"RoundingDigit4" | FIGURE 4 | 0=NO, 1=YES (1 cent or 10 cents per decimal place) |
"RoundingDigit5" | FIGURE 5 | 0=NO, 1=YES (1 cent or 10 cents per decimal place) |
"RoundingDigit6" | FIGURE 6 | 0=NO, 1=YES (1 cent or 10 cents per decimal place) |
"RoundingDigit7" | FIGURE 7 | 0=NO, 1=YES (1 cent or 10 cents per decimal place) |
"RoundingDigit8" | FIGURE 8 | 0=NO, 1=YES (1 cent or 10 cents per decimal place) |
"RoundingDigit9" | FIGURE 9 | 0=NO, 1=YES (1 cent or 10 cents per decimal place) |
Inventory and merchandise management
Function to call up all outlets/warehouses
DataTable GetStockInfo(string Company, string SerialNumber)
Feedback DataTable:
"StockID" type=int (sales outlet ID or main warehouse ID)
"StockName" type=string (trading area name or stock name)
Function to retrieve all sales points/stocks like GetStockInfo but as json string
string GetStockInfoJson(string Company, string SerialNumber)
Feedback json string:
Function to retrieve the stock
Stock of the warehouse or sales places Stock of one or more items separated by | (pipe). E.g. 1|2|100 = retrieval of three items.
DataTable GetProdStock(string Company, string SerialNumber, string ProductIDs, int StockID)
Feedback DataTable:
"ProductID" type=int (Item PID)
"ItemNumber" type=int (item number)
"ProductName" type=string (item name)
"CurrentQuant" type=double (current stock)
Function to retrieve the stock as JSON string
Stock of the warehouse or sales places stock of one or more items exactly like GetProdStock but as a json string.
DataTable GetProdStock(string Company, string SerialNumber, string ProductIDs, int StockID)
Feedback json string:
Function to retrieve all availability items.
DataSet GetBaseItems(string Company, string SerialNumber)
Feedback DataTable:
"ProductID" type=int (Item ID PID)
"Quant" type=int (current available)
Function for calling up the available quantity
Available quantity of one or more items separated by | (pipe). E.g. 1|2|100 = retrieval of three items.
string GetBaseStock(string Company, string SerialNumber, string ProductIDs)
Feedback string:
10|9999|12
If an item has no availability, a quantity of 9999 is reported as a precaution.
SetProdStock For the time being, this function is deactivated for security reasons.
string SetProdStock(string Company, string SerialNumber, string StockItems)
The following functions return the DeliveryID in the data if the transaction was booked via the OnlineOrder Connector (e-commerce interface).
GetTransactionDS
"DeliveryID" type=int (ID of the OnlineOrder)
GetTransactionStr
"DeliveryID" type=int (ID of the OnlineOrder in all tables)
GetTransactionsFromTTADate
"DeliveryID" type=int (ID of the OnlineOrder in all tables)
GetTransactionsFromTTADate2
"DeliveryID" type=int (ID of the OnlineOrder in all tables)
GetTransactionsFromOpenDate
"DeliveryID" type=int (ID of the OnlineOrder in all tables)
GetTransactionsFromOpenDate2
"DeliveryID" type=int (ID of the OnlineOrder in all tables)
The following functions return the superhero number / superhero name in the data.
From now on, even if the transactions have already been completed by the POS system. (i.e. no longer only in open processes)
GetDeliveryInfo
"ConsecutiveNumber" type=int (running Bonnummmer superhero function)
"ConsecutiveInfo" type=string (consecutive number text superhero function)
GetTransactionDS
"ConsecutiveNumber" type=int (running Bonnummmer superhero function)
"ConsecutiveInfo" type=string (consecutive number text superhero function)
GetTransactionStr
"ConsecutiveNumber" type=int (running Bonnummmer superhero function)
"ConsecutiveInfo" type=string (consecutive number text superhero function)
GetTransactionsFromTTADate
"ConsecutiveNumber" type=int (running Bonnummmer superhero function)
"ConsecutiveInfo" type=string (consecutive number text superhero function)
GetTransactionsFromTTADate2
"ConsecutiveNumber" type=int (running Bonnummmer superhero function)
"ConsecutiveInfo" type=string (consecutive number text superhero function)
GetTransactionsFromOpenDate
"ConsecutiveNumber" type=int (running Bonnummmer superhero function)
"ConsecutiveInfo" type=string (consecutive number text superhero function)
GetTransactionsFromOpenDate2
"ConsecutiveNumber" type=int (running Bonnummmer superhero function)
"ConsecutiveInfo" type=string (consecutive number text superhero function)
Internal Hypersoft functions
Deprecated for PayPal Picture Payment.
string GetBillViaHSCode(string HSCode)
string PayPalBillViaHSCode(string HSCode, string tabID, string customerID, string locationID, double PaySum)
string SetRating(string Company, string SerialNumber, string MediaID, string strRating)
Currently only internal for Deliverect Integration
string CheckItemPicturePath(int CountPicturePath)
string GetItemPicturePath()
static string GetOrSetPictureStatus(int SetDate, int SetTime, int Mode)
Back to the parent page: 3rd party eSolution development