Clear filter

Event

No records to display
ID {{fn.colHeader(key)}}
{{item.id}} {{fn.cellShow(key, value)}}
Page {{model.pageData.pageIndex + 1}}/{{model.pageData.totalPages}} | Records count: {{model.pageData.totalResults | number}}
{{dataItem.text}} new child

New record - read-only

Scanner holds {{model.ticketStats.total | number}} issued ticket(s) for this event · {{model.ticketStats.cancelled | number}} cancelled · {{model.ticketStats.valid | number}} valid · {{model.ticketStats.scanned | number}} scanned ({{fn.ticketScanPct()}}% of valid) · {{fn.ticketRemaining() | number}} still to come · loaded on {{model.ticketStats.devicesLoaded}} of {{model.ticketStats.devicesAssigned}} assigned device(s)
{{model.ticketOp.text}}
MQTT {{model.mqtt ? (model.mqtt.connected ? 'connected' : 'DISCONNECTED') : '…'}} {{model.mqtt.broker}} · {{model.mqtt.environment}} · {{model.mqtt.subscribedTopics}} topics · last msg {{model.mqtt.secondsSinceLastMessage != null ? model.mqtt.secondsSinceLastMessage + 's ago' : '—'}} · {{model.mqtt.reconnects}} reconnect(s) {{model.showMqttDetails ? 'Hide details' : 'Details'}} Reconnect Dashboard
This event's channels
{{t}} {{fn.isSubscribed(t) ? 'subscribed' : 'NOT subscribed - click "Sync with AT" or Save to subscribe'}}
Last messages on this event's channels refresh (auto-refreshes every 10s while open)
! × {{m.atUtc | date:'HH:mm:ss'}} {{m.kind}} {{m.bytes}} B {{m.preview}}
No recent traffic on this event's channels (buffer holds the last 300 messages since API start).

Import tickets

This event has no Adriaticket event ID, so an import will be refused. Enter one in the event form above and save, then import. The tickets are stored under that id and the devices load them by it. Setting it does not turn on sync with Adriaticket, which stays governed by the Sync with AT flag.

Two SSMS exports of the Adriaticket database (Results to Grid → Save Results As → CSV, no headers). Show the exact queries.

In SSMS enable Tools → Options → Query Results → SQL Server → Results to Grid → "Quote strings containing list separators when saving .csv results" - the ticket JSON is full of commas.

items.csv
SELECT i.ItemID, i.ItemPurchaseID, i.ItemTicketID, i.ItemTicketInfoJson
FROM Item i
JOIN Ticket t ON t.TicketID = i.ItemTicketID
JOIN Purchase p ON p.PurchaseID = i.ItemPurchaseID
WHERE t.TicketEventID = {{fn.atEventId() || '<eventId>'}} AND p.PurchaseStatus = 4
purchases.csv
SELECT p.PurchaseID, p.PurchaseCreated, p.PurchasePromoCodeID, p.PurchasePromoCodePercentage,
       p.PurchasePromoCodeExactAmount, p.PurchasePromoCodeSkipPayment
FROM Purchase p
WHERE p.PurchaseStatus = 4 AND p.PurchaseID IN (
    SELECT i.ItemPurchaseID FROM Item i
    JOIN Ticket t ON t.TicketID = i.ItemTicketID
    WHERE t.TicketEventID = {{fn.atEventId() || '<eventId>'}})
Import Tickets already held are ignored. Re-import is safe.

Upload one CSV file. The first row is a header that names each column with a {placeholder}. Every row after it is one ticket. The code is used exactly as written, because it is the QR content itself and nothing is added to it.

ColumnGoes to
{code}required. The QR or scan code.
{row}seat row
{seat}seat number
{sector}sector
{entrance}gate the device enforces
{name}attendee name
{note}note shown on scan
{special}attention message (marks the ticket special)
{type}Regular / Invitation / Promo
{audience}Adult / Child
{oib}, {phone}optional personal info

An empty column is ignored. For example {code},,,{row} means column 1 is the code, columns 2 and 3 are skipped, and column 4 is the row. Example file:

{code},{row},{seat}
2323233213453,12,3

Re-importing the same code is safe. Existing tickets are ignored.

{{fn.pwStrength(item).label}} {{fn.pwStrength(item).problems.join(' ')}} meets the policy
{{g}}× No gates yet.
Add
Paste the entrance registry exactly as Adriaticket stores it, for example {"Ulaz":["A1","A2"]}. Switch back to Manual to edit it as chips.
{{item._entJsonError}}
Show Preview Clear File


Relation Mapping

{{dataItem.text}}

Mapping Options

{{showAlert}}