# API Funktionen

## I. Rechnungs Integration

Mit der API-Verbindung und dem Tablet kann das **Ticket System von EmergencyOS** mit Ihrem **Rechnungssystem** verknüpft werden, dadurch bekommt ein Spieler **automatisch** eine Rechung wenn ein Ticket für ihn ausgestellt wurde. Wenn die Rechnung bezahlt wird, wird auch das Ticket **automatisch** als bezahlt markiert.

### Einrichtung

Um Ihr Rechnungssystem zu integrieren, öffnen Sie die `api_config.lua`, dort finden Sie die Konfiguration für die Rechnungsintegration.

```lua
SVConfig.UseBilling = true
SVConfig.UseBillingUI = true
SVConfig.UseCustomBillAssign = false
SVConfig.BillingTrigger = "EmergencyOS:billPayed"
```

#### Konfigurationen

```lua
SVConfig.UseBilling = true
```

Hier können sie einstellen, ob Sie die Rechnungsintegration nutzen möchten.

```lua
SVConfig.UseBillingUI = true
```

Hier können sie auswählen, ob Sie das Script "BillingUi" von jaksam1074 für ihre Rechnungen benutzen. Dieses wurde bereits standartmäßig integriert.

```lua
SVConfig.UseCustomBillAssign = false
```

Falls Sie ein anderes Rechnungssystem als esx\_billing oder billingUi benutzen, müssen sie dies auf `true` setzen und dann in `sv_integrations.lua` die Rechnungserstellung selbst konfigurieren.&#x20;

```lua
SVConfig.BillingTrigger = "EmergencyOS:billPayed"
```

Dies ist der Trigger welcher an der stelle in ihrem Rechnungssystem getriggert werden muss, an der die Rechnung bezahlt wird. Dieser Trigger muss die `billId` übergeben.

```lua
TriggerEvent("EmergencyOS:billPayed", billId)
-- oder
exports["EmergencyOS"]:billPaid(billId)
```

### Integration in Rechnungssystem

Um die Rechnungsintegration verwenden zu können müssen die das oben genannte TriggerEvent in ihr Rechnungssystem integrieren um EmergencyOS mitzuteilen, sobald eine Rechnung bezahlt wurde.

Hier finden Sie nun einige Beispiele anhand von bekannten Rechnungssystemen

#### Beispiel 1: esx\_billing

{% hint style="warning" %}
Diese Anleitung basiert auf der Version 1.9.1 von esx\_billing, es sollte bei älteren Versionen ähnlich oder sogar gleich funktionieren. Wir geben aber keinen Support bei Problemen mit älteren Versionen.
{% endhint %}

Navigieren Sie zu ihrem resources Ordner und suchen nach **esx\_billing**, öffnen sie diesen Ordner und klicken Sie auf **/server** und dann **server.lua**.

Ändern die in den Zeilen: **58, 71, 95 & 110**

Diesen Code:

```lua
MySQL.update('DELETE FROM billing WHERE id = ?', {billId},
function(rowsChanged)
```

Zu diesem:

<pre class="language-lua"><code class="lang-lua"><strong>TriggerEvent("EmergencyOS:billPayed", billId)
</strong><strong>MySQL.update('DELETE FROM billing WHERE id = ?', {billId},
</strong>function(rowsChanged)
</code></pre>

Jetzt wird jedes mal, wenn eine Rechnung, egal welches types bezhalt wird, das Event bei EmergencyOS getriggert und falls zu dieser billId ein Ticket existiert, wird dieses auf bezahlt gesetzt.&#x20;

#### Beispiel 2: myBilling

{% hint style="warning" %}
Diese Anleitung basiert auf der Version 1.3.0 von myBilling, es sollte bei älteren Versionen ähnlich oder sogar gleich funktionieren. Wir geben aber keinen Support bei Problemen mit älteren Versionen.
{% endhint %}

Navigieren Sie zu ihrem resources Ordner und suchen nach **myBilling**, öffnen sie diesen Ordner und klicken Sie dann auf **server.lua**.

Ändern die in der Zeile **162,** bzw. fügen sie hinzu:

Diesen Code:

```lua
TriggerClientEvent('myBills:msg', xPlayer.source, Translation[Config.Locale]['bill_paid'] .. amount .. Translation[Config.Locale]['bill_paid2'])
TriggerClientEvent('myBills:refreshMenu', _source)
```

Zu diesem:

```lua
TriggerEvent("EmergencyOS:billPayed", invoiceID)
TriggerClientEvent('myBills:msg', xPlayer.source, Translation[Config.Locale]['bill_paid'] .. amount .. Translation[Config.Locale]['bill_paid2'])
TriggerClientEvent('myBills:refreshMenu', _source)
```

Jetzt wird jedes mal, wenn eine Rechnung bezahlt wird das Event bei EmegergencyOS getriggert und die `invoiceID` wird übergeben.

Da die Rechnugssaustellung für myBilling noch nicht standartmäßig unterstützt wird, müssen sie dies selbständig in sv\_integrations.lua integrieren. Hier sit ein Code Snippet welches funktionieren sollte.

{% hint style="info" %}
In diesem Snippet wird davon ausgegangen, dass Sie eine ESX Version glich oder höher als 1.8.5 verwenden und oxmysql nutzen.
{% endhint %}

```lua
ESX = exports["es_extended"]:getSharedObject()

function FrameworkCreateBill(targetIdentifier, billSender, billSociety, billText, billAmount)

    local billTargetPlayer = ESX.GetPlayerFromIdentifier(targetIdentifier)

    local billId = MySQL.insert.await('INSERT INTO billing (identifier, sender, target_type, target, label, amount) VALUES (?, ?, ?, ?, ?, ?)', {targetIdentifier, billSender, 'society', billSociety, billText, billAmount})
    
    if billTargetPlayer then -- check if player is in server
        EMOSServerNotify(billTargetPlayer.source ,"Strafe", "Du hast eine Strafe in höhe von " .. tostring(billAmount) .. "$ wegen " .. billText .. " erhalten. Bitte bezahle diese Zeitnah.")
    end
    
    return billId
end
```

Vergessen Sie nicht, `SVConfig.UseCustomBillAssign` in `sv_integartions.lua` auf `true` zu setzen. Wenn SIe alle Schritte korrekt beflogt haben, sollte nun myBilling mit EmergencyOS funktionieren.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.emergencyos.de/installation/ingame-tablet/api-integration/api-funktionen.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
