> For the complete documentation index, see [llms.txt](https://helpcenter.etron.info/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://helpcenter.etron.info/verwaltungsoberflache/konfiguration/stammdaten-produkte/preise-and-guthaben/gutscheine-and-ewallet.md).

# Gutscheine und eWallets

Promotion, Geschenkkarte, Gutscheine, eWallet, Guthaben, E-Geldbörse, Guthaben mit Ablaufdatum, Verfallende Treuepunkte, Verfallendes Guthaben

{% hint style="success" %}
*Modul: ETRON onRetail V2 Gutscheinverwaltung und Kundenpflege*

***

*Ist das Modul nicht vorhanden, können Gutscheine nach folgender Anleitung erstellt werden:* [Gutscheinverkauf ohne Gutscheinverwaltungsmodul](/schnelles-wissen/kasse/gutscheinverkauf-ohne-gutscheinverwaltungsmodul.md)
{% endhint %}

> *Konfiguration* ➜ *Stammdaten Produkte* ➜ *Preise & Guthaben* ➜ *Gutscheine & eWallet*

{% hint style="info" %}
*Gutscheine und eWallets können im* [*Auftragswesen*](/verwaltungsoberflache/auftragswesen.md) *der Verwaltungsoberfläche, in der* [*Verkaufsoberfläche der Kasse*](/kasse/verkaufsoberflache.md) *sowie im* [*Onlineshop*](/verwaltungsoberflache/e-commerce/onlineshop.md)[ ](/verwaltungsoberflache/e-commerce/onlineshop.md)*verwendet werden.*

***

*Anleitung für den Onlineshop:* [***Gutscheine: Erstellung und Verkaufsprozess***](/schnelles-wissen/onlineshop/vorgange-and-anpassungen/gutscheine-erstellung-und-der-verkaufsprozess.md)\
*Anleitung für die Kassenoberfläche:* [***Gutscheine & eWallets***](/kasse/verkaufsoberflache/gutscheine-and-ewallets-rabatt-and-treue/gutscheine-and-ewallets.md)\
*Anleitung für das Auftragswesen:* [***Gutscheine, eWallets und Werbeaktionen einlösen***](/verwaltungsoberflache/auftragswesen/angebote-and-auftrage-auftragswesen.md#gutscheincode-rabatt-werbeaktion-einlosen)<br>

***

[*Anleitung für das automatische Versenden von Geburtstagsgutscheinen an Kunden*](/schnelles-wissen/funktionen-und-vorgange/geburtstagsgutscheine-erstellen-und-versenden.md#versand-von-geburtstagsgutscheinen-aktivieren)
{% endhint %}

<div align="left" data-with-frame="true"><figure><img src="https://2281246901-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FlM26Mg6nljOOOe95HyIq%2Fuploads%2FVnMNrNA0E380T9vbN637%2Fimage.png?alt=media&amp;token=770c6966-3dee-4b12-b9bf-1095cf1f1748" alt="Übersicht der Gutschein- und eWallet-Programme"><figcaption></figcaption></figure></div>

## Gutscheine & eWallets anlegen

Um einen neuen Gutschein oder ein neues eWallet zu erstellen, den Button "Neu" auswählen. Anschließend kann der Programmname, die Programmart usw. eingegeben werden.

<div align="left" data-with-frame="true"><figure><img src="https://2281246901-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FlM26Mg6nljOOOe95HyIq%2Fuploads%2FUsD7qRva5m3wHdN4s8QS%2Fimage.png?alt=media&amp;token=3aed6d6d-152a-4c62-bcd9-83e4113f02d9" alt="Maske zum Anlegen eines Gutschein- oder eWallet-Programms"><figcaption></figcaption></figure></div>

### Programmname

Der Name des Programms / der Aktion.

### Programmart

Bei der Programmart kann zwischen Gutschein und eWallet gewählt werden.

#### Gutschein

Kann mit einem festen Betrag als Guthaben aufgeladen und versendet werden. Das Guthaben wird durch einen Code eingelöst.

#### eWallet

Eine elektronische Geldbörse, die immer wieder aufgeladen und für die Bezahlung verwendet werden kann.

### Gutscheinprodukte / eWalletprodukte

Das für das Programm hinterlegte [Produkt in den Stammdaten](/verwaltungsoberflache/konfiguration/stammdaten-produkte.md). Der Name des Gutscheins/eWallets kann geändert werden.

{% hint style="info" %}
*Für jedes Programm sollte ein eigenes Produkt hinterlegt werden.*

*Werden mehrere Produkte hinterlegt, erfordert jede Aktion (Erstellen, Aufladen, Einlösen) die Auswahl des Programms in der Kassenoberfläche.*
{% endhint %}

#### Produktart

Das Gutschein-/eWallet-Produkt sollte mit der [Produktart](/verwaltungsoberflache/stammdaten/produkte/produkte-produktstammblatt/allgemeine-informationen.md#produktart) "Dienstleistung" angelegt werden.

#### mit Verkaufspreis (fix) / ohne Verkaufspreis (wählbar)

Wird das Produkt ohne Verkaufspreis, also 0 € angelegt, kann der Gutschein/eWallet mit einem [frei wählbaren Betrag](/kasse/verkaufsoberflache/gutscheine-and-ewallets-rabatt-and-treue/gutscheine-and-ewallets.md#wahlbarer-betrag) angelegt werden.

Wird das Produkt mit einem Verkaufspreis, z.B. 20 € angelegt, wird der Gutschein/eWallet mit diesem [fixen Betrag](/kasse/verkaufsoberflache/gutscheine-and-ewallets-rabatt-and-treue/gutscheine-and-ewallets.md#fixer-betrag) erstellt und auch wieder [aufgeladen](/kasse/verkaufsoberflache/gutscheine-and-ewallets-rabatt-and-treue/gutscheine-and-ewallets.md#aufladung-gutschein-ewallet).

<div align="left" data-with-frame="true"><figure><img src="https://2281246901-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FlM26Mg6nljOOOe95HyIq%2Fuploads%2F1YpmR8h8vIrBJHJ8XLVU%2Fimage.png?alt=media&amp;token=391c505f-d502-443b-b77d-4d77c6ba7ae1" alt="Gutschein- oder eWallet-Produkt mit Verkaufspreis"><figcaption></figcaption></figure></div>

#### mit / ohne Steuersatz (Einzweckgutschein / Mehrzweckgutschein)

Wird das Produkt mit einem [Steuersatz](/verwaltungsoberflache/stammdaten/produkte/produkte-produktstammblatt/allgemeine-informationen.md#steuern-verkauf) erstellt, wird bei Einlösungen und Aufladungen auch die Umsatzsteuer des Gutscheins/eWallets am Verkaufsbeleg und am [Kassen-Bericht](/verwaltungsoberflache/berichte/kassen/summierter-kassenbericht.md) ausgewiesen.\
Das Produkt kann auch ohne Steuer bzw. mit dem Steuersatz von 0 % angelegt werden.

| Aufladung                                                                                                                                                                                                                                                                                       | Einlösung                                                                                                                                                                                                                                                                                                 |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Gutschein mit Steuer**                                                                                                                                                                                                                                                                        | **Gutschein mit Steuer**                                                                                                                                                                                                                                                                                  |
| <img src="https://2281246901-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FlM26Mg6nljOOOe95HyIq%2Fuploads%2F8FITJ7mNKdwPOol4Q2Ry%2Fimage.png?alt=media&amp;token=4ec5432e-9986-493a-a1e2-b35974f7bba7" alt="Aufladung eines Gutscheins mit Steuer" data-size="original">  | <img src="https://2281246901-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FlM26Mg6nljOOOe95HyIq%2Fuploads%2FXor7NJB1D1Us3z1UBxfa%2Fimage.png?alt=media&amp;token=6dc3ee25-4b0b-414c-9f22-1a16aa2c86de" alt="Einlösung eines Gutscheins mit Steuer" data-size="original">            |
| **Gutschein ohne Steuer**                                                                                                                                                                                                                                                                       | **Gutschein ohne Steuer**                                                                                                                                                                                                                                                                                 |
| <img src="https://2281246901-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FlM26Mg6nljOOOe95HyIq%2Fuploads%2Frahx5Xhfkl5Lh5NMOgL4%2Fimage.png?alt=media&amp;token=eb0709a1-ad27-415e-a34c-74885cd3d245" alt="Aufladung eines Gutscheins ohne Steuer" data-size="original"> | <img src="https://2281246901-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FlM26Mg6nljOOOe95HyIq%2Fuploads%2FOkBPc9AQb7ZOpsFtCVMz%2Fimage.png?alt=media&amp;token=19adafbf-d799-4ecd-a5e7-d14b7ccf85b4" alt="Einlösung eines Gutscheins ohne Steuer" data-size="original">           |
| [**Kassenbericht**](/verwaltungsoberflache/berichte/kassen/summierter-kassenbericht.md#einloesen-aufladen-stornieren-von-gutscheinen-ewallets-am-kassenbericht) **über Einlösung / Aufladung der Gutscheine mit und ohne Steuer**                                                               | <img src="https://2281246901-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FlM26Mg6nljOOOe95HyIq%2Fuploads%2F4b7lfv0Uwfje5cxCLXqv%2Fimage.png?alt=media&amp;token=4bd7aac7-c9d9-40fb-b96c-a39f24065297" alt="Kassenbericht für Gutscheine mit und ohne Steuer" data-size="original"> |

#### Verwendung eines Produkts in mehreren Programmen

Wird ein Gutschein- bzw. eWalletprodukt in mehreren [Programmen](#programmname) hinterlegt, ist bei Auswahl des Produkts in der Kassen-Verkaufsoberfläche auch das entsprechende Gutscheinprogramm auszuwählen.

{% hint style="info" %}
*Es wird empfohlen, für jedes Programm ein eigenes Produkt zu hinterlegen.*
{% endhint %}

<details>

<summary>Beispiel</summary>

Das Produkt "eWallet aufladen" ist sowohl im Programm "eWallet" als auch im Programm "Wallet Test" hinterlegt.

<div align="left" data-with-frame="true"><figure><img src="https://2281246901-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FlM26Mg6nljOOOe95HyIq%2Fuploads%2FZJvT5pOiw9YXBHUQ85a6%2Fimage.png?alt=media&amp;token=0561093c-9590-434e-b852-bfe79a99d92b" alt="Programm eWallet mit dem Produkt eWallet aufladen"><figcaption></figcaption></figure></div>

<div align="left" data-with-frame="true"><figure><img src="https://2281246901-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FlM26Mg6nljOOOe95HyIq%2Fuploads%2FCRPpnNgCS8HH0b8Fmcp0%2Fimage.png?alt=media&amp;token=3b021e8b-b7d8-45f7-82d6-d5e878d33e19" alt="Programm Wallet Test mit dem Produkt eWallet aufladen"><figcaption></figcaption></figure></div>

Wird das Produkt in der [Gutscheinübersicht](/kasse/verkaufsoberflache/gutscheine-and-ewallets-rabatt-and-treue/gutscheine-and-ewallets.md#gutscheine-and-rabattcodes-ubersicht) der Kassen-Verkaufsoberfläche ausgewählt, oder ein auf Grundlage des Produkts erstellter Gutschein/eWallet-Code gescannt, ist das gewünschte Gutschein-/eWallet-Programm auszuwählen.

<div align="left" data-with-frame="true"><figure><img src="https://2281246901-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FlM26Mg6nljOOOe95HyIq%2Fuploads%2FoIiWrm2bKiw4xXJbhG9u%2Fimage.png?alt=media&amp;token=b0e70a11-596a-476f-820f-95f77d3710a3" alt="Auswahl eines Gutschein- oder eWallet-Programms"><figcaption></figcaption></figure></div>

</details>

### E-Mail-Vorlage

Diese E-Mail-Vorlage wird verwendet, um den Code zum Einlösen zu versenden.

### Druckdokument

Dokumentvorlage, die verwendet wird, um die in der Kasse generierten Gutscheinkarten zu drucken.

{% hint style="info" %}
*Das Gutscheindokument kann mit QWEB/XML-Kenntnissen unter dem Menüpunkt* [*Gutscheinvorlage*](/verwaltungsoberflache/einstellungen/system/gutscheinvorlage.md) *angepasst werden.*
{% endhint %}

### Währung

Die Währung, in der der Betrag auf die Gutscheinkarte / das eWallet geladen wird (z.B. Euro).

### Guthaben läuft ab, Erstattungstyp - Guthaben mit Ablaufdatum

<div align="left" data-with-frame="true"><figure><img src="https://2281246901-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FlM26Mg6nljOOOe95HyIq%2Fuploads%2FV0tkGZh7GXuedUDLqW3q%2Fimage.png?alt=media&amp;token=5ba1c29f-ca1a-44ea-8fb1-0c163c04e782" alt="Einstellungen für ablaufendes Guthaben und den Erstattungstyp"><figcaption></figcaption></figure></div>

{% hint style="warning" %}
*Die Einstellung "Guthaben läuft ab" ist nur bei Programmen zu aktivieren, bei denen noch kein Gutschein/eWallet erstellt wurde.*

*Sobald in einem Programm Gutscheine/eWallets erstellt wurden, kann die Einstellung nicht mehr aktiviert oder deaktiviert werden.*
{% endhint %}

Für das Guthaben von Gutscheinen und eWallets kann ein Gültigkeitszeitraum festgelegt werden.

Als Gültigkeitszeitraum kann eine Anzahl an Tagen, Wochen, Monaten oder Jahren eingegeben werden.

Anhand des Gültigkeitszeitraums wird bei jeder Aufladung eines Gutscheins oder eWallets ein Ablaufdatum für das Guthaben gesetzt. Die Gültigkeit der Guthaben kann durch [Öffnen des Gutscheins oder eWallets in der Übersicht](#ubersicht-generierte-gutscheine) der Verwaltungsoberfläche nachvollzogen werden.

<div align="left" data-with-frame="true"><figure><img src="https://2281246901-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FlM26Mg6nljOOOe95HyIq%2Fuploads%2FIfjuAUJSOzZnetuvWxps%2Fimage.png?alt=media&amp;token=e2dade44-fa1c-4646-abde-aacec18717e6" alt="Gutscheinübersicht: geöffneter Gutschein mit ablaufendem Guthaben"><figcaption><p>Gutscheinübersicht: geöffneter Gutschein mit ablaufendem Guthaben</p></figcaption></figure></div>

Beispiel: Guthaben läuft nach 14 Tagen ab.

1. Aufladung von 10 € am 01.01. ➜ Ablaufdatum für die 10 € Guthaben ist der 15.01.
2. Aufladung von 20 € am 10.01. ➜ Ablaufdatum für die 20 € Guthaben ist der 24.01.

Am 16.01. wären somit nur mehr 20 € Guthaben verfügbar.

#### Erstattungstyp

Wenn die Einstellung "Guthaben läuft ab" aktiviert ist, wird zusätzlich eine Einstellung für den Erstattungstyp angezeigt. Der Erstattungstyp regelt, welches Ablaufdatum rückerstattetes Guthaben (nach Storno eines Belegs bei dem Guthaben eingelöst wurde) hat.

* **Ältestes Guthaben:**

Bei einem Storno wird das Guthaben auf das älteste Guthaben (Guthaben mit dem frühesten Ablaufdatum) gutgeschrieben.<br>

Beispiel: Am Gutschein befinden sich 10 € Guthaben mit Ablaufdatum 30.03. und 20 € Guthaben mit Ablaufdatum 02.04. Beim Storno erhält das rückerstattete Guthaben das Ablaufdatum 30.03.

* **Neuestes Guthaben:**

Bei einem Storno wird das Guthaben auf das neueste Guthaben (Guthaben mit dem spätesten Ablaufdatum) gutgeschrieben.

Beispiel: Am Gutschein befinden sich 10 € Guthaben mit Ablaufdatum 30.03. und 20 € Guthaben mit Ablaufdatum 02.04. Beim Storno erhält das rückerstattete Guthaben das Ablaufdatum 02.04.

* **Neues Guthaben:**

Beim Storno wird das Guthaben als neues Guthaben gebucht und das Ablaufdatum anhand des angegebenen Gültigkeitszeitraums gesetzt.

Beispiel: Das Guthaben läuft nach 2 Tagen ab. Beim Storno läuft das rückerstattete Guthaben nach 2 Tagen ab.

### Verfügbar auf

Das Verkaufsmedium, in dem die Gutscheinkarte / das eWallet gültig ist.

* Kassensystem
* Verkauf / Auftragswesen
* Website (Onlineshop)

### Kassensystem

{% hint style="info" icon="windows" %}
**Nur für Windows verfügbar/erforderlich.**
{% endhint %}

Hier kann eingetragen werden, ob die Gutscheinkarte / das eWallet nur für bestimmte Kassenplätze gültig ist.

Wird kein Kassenplatz eingetragen, besteht die Gültigkeit bei allen Kassenplätzen.

## Gutscheine generieren

Nachdem der Programmname vergeben und die gewünschten Einstellungen getroffen wurden, wird der Button ![Button zum Generieren von Gutscheinen](https://2281246901-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FlM26Mg6nljOOOe95HyIq%2Fuploads%2FFS95gLkCzG4ZncPHBtMC%2Fimage.png?alt=media\&token=294b6604-488f-49dc-a6b8-d157c89d4eb7) ausgewählt, um die Gutscheinkarten mit den Einlöse-Codes zu

erzeugen.

<div align="left" data-with-frame="true"><figure><img src="https://2281246901-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FlM26Mg6nljOOOe95HyIq%2Fuploads%2F2YOFUzN1vYBjM42Cjt1y%2Fimage.png?alt=media&amp;token=5d65747f-d5f8-4adb-8a35-b771142004c8" alt="Maske zum Generieren von Gutscheinen"><figcaption></figcaption></figure></div>

#### Für anonyme Kunden

Die Gutscheinkarten werden keinem bestimmten Kunden zugeordnet.

#### Für ausgewählte Kunden

Die Gutscheinkarten werden für die ausgewählten Kunden erstellt und per E-Mail versendet. Durch Filter können Kunden z.B. nach Registrierdatum, Wohnort etc. ausgewählt werden.

**Kunden-Tags**

Tags / Stichwörter, die der ausgewählten Kundengruppe zugeordnet werden, z.B. „Stammkunden“.

#### Menge zu generieren

Die Anzahl der zu generierenden Gutscheinkarten.

#### Wert des Gutscheins

Die Höhe, mit der die Gutscheinkarte beladen wird.

#### Gültig bis

Das Datum, bis zu dem der Gutschein einlösbar ist.

Wird kein Datum eingetragen, läuft der Gutschein nicht ab.

{% hint style="info" %}
*In der Kasse wird eine Warnung angezeigt, wenn ein Gutschein abgelaufen ist, der Gutschein kann aber weiterhin verwendet werden.*
{% endhint %}

### Übersicht: generierte Gutscheine

<div align="left" data-with-frame="true"><figure><img src="https://2281246901-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FlM26Mg6nljOOOe95HyIq%2Fuploads%2FXXE9hWyWEzHyLhFPfPVH%2Fimage.png?alt=media&amp;token=237194ef-b4c6-42d3-be5d-df0f85c7cfe2" alt="Programmübersicht mit Anzahl der generierten Gutscheine"><figcaption></figcaption></figure></div>

Wurden zu einem Programm Gutscheine generiert, ist rechts oben ersichtlich, wie viele Gutscheine erstellt wurden. Durch Auswahl des Buttons ![Button zum Öffnen der Gutscheinübersicht](https://2281246901-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FlM26Mg6nljOOOe95HyIq%2Fuploads%2FGvbNZBtw38k5HV3RZIwq%2Fimage.png?alt=media\&token=66f83ea2-2362-408e-890d-fbb9cde7a80b) kommt man zur Ansicht dieser Gutscheine.

<div align="left" data-with-frame="true"><figure><img src="https://2281246901-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FlM26Mg6nljOOOe95HyIq%2Fuploads%2FGJMGa1JQ96WYfa9Zvd9A%2Fimage.png?alt=media&amp;token=c4efcaf5-f1ec-4f37-8649-d3855be6ae1f" alt="Übersicht der generierten Gutscheine"><figcaption></figcaption></figure></div>

Hier kann der jeweilige Gutschein versendet oder geteilt werden, und man erhält einen Überblick darüber, welche Gültigkeit, Kundenzuordnung etc. der Gutschein hat.

Wenn man einen Gutschein auswählt,

### Gutschein versenden

Klickt man bei der Gutscheinkarte auf <img src="https://2281246901-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FlM26Mg6nljOOOe95HyIq%2Fuploads%2FCmCyj6qVaMP7NJtA4VXL%2Fimage.png?alt=media&amp;token=0ed3a3ea-1716-4caf-85e2-d37c379928d3" alt="Button zum Versenden eines Gutscheins" data-size="line"> öffnet sich die E-Mail-Vorlage. Hier kann ein Kunde als Empfänger eingetragen und die E-Mail anschließend versendet werden.

<div align="left" data-with-frame="true"><figure><img src="https://2281246901-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FlM26Mg6nljOOOe95HyIq%2Fuploads%2Fx19u6yZ5NWJbyZf6iqqA%2Fimage.png?alt=media&amp;token=be1104e0-88b8-4a46-b834-2a16a210004e" alt="E-Mail-Vorlage zum Versenden eines Gutscheins"><figcaption></figcaption></figure></div>

## eWallet generieren

Nachdem der Programmname vergeben und die gewünschten Einstellungen getroffen wurden, klickt man auf ![Button zum Generieren von eWallets](https://2281246901-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FlM26Mg6nljOOOe95HyIq%2Fuploads%2F0r4kMRhcphJpATSxoop4%2Fimage.png?alt=media\&token=e395c130-dd22-4794-859d-310a9148ac4e), um die eWallets zu erzeugen.

<div align="left" data-with-frame="true"><figure><img src="https://2281246901-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FlM26Mg6nljOOOe95HyIq%2Fuploads%2FYVKUiPAvfmnl9Eb6kKjc%2Fimage.png?alt=media&amp;token=b31772b5-8982-4f22-8a89-106e0e5b7ae3" alt="Maske zum Generieren von eWallets"><figcaption></figcaption></figure></div>

#### Kunden

Hier werden die Kunden ausgewählt, für die ein eWallet erstellt wird. Pro Kunde wird ein eWallet generiert (siehe Menge zu generieren).

**Kunden-Tags**

Tags / Stichwörter die der ausgewählten Kundengruppe zugeordnet werden z.B. 'Stammkunden'

#### Menge zu generieren

Die Anzahl der zu generierenden eWallets richtet sich nach der Anzahl der eingetragenen Kunden.

#### eWallet Wert

Die Guthabenhöhe, mit der die eWallet beladen wird.

#### Gültig bis

Das Datum, bis zu dem die eWallet nutzbar ist.

Wird kein Datum eingetragen, läuft das eWallet nicht ab.

{% hint style="info" %}
*In der Kasse wird eine Warnung angezeigt, wenn ein eWallet abgelaufen ist, das eWallet kann aber weiterhin verwendet werden.*
{% endhint %}

### Übersicht: generierte eWallets

<div align="left" data-with-frame="true"><figure><img src="https://2281246901-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FlM26Mg6nljOOOe95HyIq%2Fuploads%2FiEz6LU1nuXUHn0I3xyUH%2Fimage.png?alt=media&amp;token=6bf51cd7-6a14-4635-9a0b-6f489e40d34f" alt="Programmübersicht mit Anzahl der generierten eWallets"><figcaption></figcaption></figure></div>

Wurden zu einem Programm eWallets generiert, ist rechts oben ersichtlich, wie viele eWallets erstellt wurden. Durch Klick auf den Button ![Button zum Öffnen der eWallet-Übersicht](https://2281246901-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FlM26Mg6nljOOOe95HyIq%2Fuploads%2FR6yfGoPIxB5DxrHmQTwV%2Fimage.png?alt=media\&token=8ba6e553-7b6a-4f5e-ba5c-f18095d6eb23) kommt man zur Ansicht der eWallets.

<div align="left" data-with-frame="true"><figure><img src="https://2281246901-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FlM26Mg6nljOOOe95HyIq%2Fuploads%2Ft3KoNKVzExIzs26X0Lh7%2Fimage.png?alt=media&amp;token=c82683ce-533c-4106-aef6-60cb0436eeb8" alt="Übersicht der generierten eWallets"><figcaption></figcaption></figure></div>

Hier kann das jeweilige eWallet versendet oder geteilt werden, und man erhält einen Überblick darüber, welche Gültigkeit, Kundenzuordnung etc. das eWallet hat.

### eWallet versenden

Klickt man bei einer eWallet auf <img src="https://2281246901-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FlM26Mg6nljOOOe95HyIq%2Fuploads%2FCmCyj6qVaMP7NJtA4VXL%2Fimage.png?alt=media&amp;token=0ed3a3ea-1716-4caf-85e2-d37c379928d3" alt="Button zum Versenden eines eWallets" data-size="line"> öffnet sich die E-Mail-Vorlage. Hier ist der zum eWallet zugehörige Kunde als Empfänger eingetragen und die E-Mail kann an ihn versendet werden.

<div align="left" data-with-frame="true"><figure><img src="https://2281246901-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FlM26Mg6nljOOOe95HyIq%2Fuploads%2F1CEPh1CX0rxIiBuLdUsH%2Fimage.png?alt=media&amp;token=dde67b0a-df20-4697-865d-6a8b6a1ff34e" alt="E-Mail-Vorlage zum Versenden eines eWallets"><figcaption></figcaption></figure></div>

## Gutscheinauswertung (Bericht)

Für die Auswertung von Gutscheinen und eWallets (Verkäufen, Aufladung, Einlösung, Stornierung) kann eine Gutscheinauswertung erstellt werden.

* Option 1: [Gutscheinauswertung über den Produktübersicht-Bericht](#gutscheinauswertung-uber-den-produktubersicht-bericht)
* Option 2: [Gutscheinauswertung über Belegzeilen-Bericht](#gutscheinauswertung-uber-die-kassenbelegzeilen) (nur für Kasse)
* Option 3: [Gutscheinauswertung über automatischen Report](#gutscheinauswertung-uber-automatischen-report) im Excel- oder CSV-Format erstellen

## Gutscheinauswertung über den Produktübersicht-Bericht

> *Berichte* -> *Verkaufsaufträge* -> *Produktübersicht*\
> *Berichte* -> *Kasse* -> *Produktübersicht*

Über den Produktübersicht-Bericht werden Gutscheinverkäufe und die zugehörigen Beträge je Jahr ausgewertet. Kassenverkäufe und Kundenrechnungen werden zusammengeführt.

Für die Jahresauswertung wird die Produktübersicht auf Gutscheinprodukte eingeschränkt. Anschließend wird nach *Jahr* gruppiert.

### Voraussetzungen

Für aussagekräftige Ergebnisse wird ein eindeutiges Merkmal am Gutscheinprodukt benötigt. Es wird eines der folgenden Merkmale empfohlen:

* Eine eigene **Produktkategorie** *Gutschein*, der alle Gutscheinprodukte zugeordnet sind.
* Ein einheitlich benanntes **Produkt**, beispielsweise *Gutschein*, wenn nur ein Gutscheinprodukt verwendet wird.
* Ein **Produkt-Stichwort** *Gutschein* an allen betroffenen Produkten.

{% hint style="info" %}
*Für die **Auswertung von Einlösungen** wird die **Kategorie oder Produkt-Stichwort zusätzlich am Belohnungsprodukt des Gutscheinprogramms hinterlegt**. Es wird beim Anlegen des Gutschein/e-Wallet-Programms automatisch erstellt, isund heißt **"Gutscheine"** oder **"eWallet".*** \
***Das Belohnungsprodukt ist in den Produkt-Stammdaten sichtbar, wenn der Filter "Kann verkauft werden" entfernt wird.***
{% endhint %}

### Auswertung erstellen

{% stepper %}
{% step %}

### Bericht öffnen

Die Produktübersicht wird über einen der beiden Menüpfade geöffnet. Beim Öffnen sind der Filter **Dieses Monat** und die Gruppierung nach **Kategorie** voreingestellt.

<div data-with-frame="true"><figure><img src="https://2281246901-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FlM26Mg6nljOOOe95HyIq%2Fuploads%2FeFUAFCj4VYhhI6kHGn6c%2Fimage.png?alt=media&amp;token=ec158fea-09f8-422c-b31d-76133e6de396" alt="Berichte -> Auftragswesen -> Produktübersicht"><figcaption><p>Berichte -> Auftragswesen -> Produktübersicht</p></figcaption></figure></div>
{% endstep %}

{% step %}

### Zeitraumfilter entfernen

Der voreingestellte Filter **Dieses Monat** wird in der Suchleiste über das *x* am Filtereintrag entfernt. Andernfalls bleibt die Auswertung auf den laufenden Monat beschränkt.
{% endstep %}

{% step %}

### Auf Gutscheine einschränken

Abhängig vom vorhandenen Merkmal wird eine der folgenden Einschränkungen gesetzt:

**Über die Produktkategorie**

In der Suchleiste wird `Gutschein` eingegeben. Anschließend wird in der Vorschlagsliste *Produktkategorie* gewählt. Untergeordnete Kategorien werden automatisch berücksichtigt.

<div data-with-frame="true"><figure><img src="https://2281246901-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FlM26Mg6nljOOOe95HyIq%2Fuploads%2FgbKPr0sD3J8SHOwRLL1Z%2Fimage.png?alt=media&amp;token=4017c3cb-dff0-4845-8a1d-0fedd3094786" alt="Produktübersicht auf Produktkategorie einschränken"><figcaption><p>Produktübersicht auf Produktkategorie einschränken</p></figcaption></figure></div>

**Über das Produkt**

In der Suchleiste wird `Gutschein` eingegeben. Anschließend wird *Produkt* gewählt. Diese Variante wirkt auf die Produktbezeichnung. Es werden nur Produkte erfasst, deren Name den Suchbegriff enthält.

<div data-with-frame="true"><figure><img src="https://2281246901-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FlM26Mg6nljOOOe95HyIq%2Fuploads%2F69XjQnRKnNAiOOemVE71%2Fimage.png?alt=media&amp;token=e0c94384-9013-4b44-bd8a-ffe643df3af7" alt="Produktübersicht auf Produkt einschränken"><figcaption><p>Produktübersicht auf Produkt einschränken</p></figcaption></figure></div>

**Über das Produkt-Stichwort**

In der Suchleiste wird `Gutschein` eingegeben. Anschließend wird *Produkt-Stichwörter* gewählt.

<div data-with-frame="true"><figure><img src="https://2281246901-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FlM26Mg6nljOOOe95HyIq%2Fuploads%2FacENwMqY4SyGT2U6iPDC%2Fimage.png?alt=media&amp;token=72b31a8e-8c6d-4890-b4ba-f157858f694d" alt="Produktübersicht auf Produkt-Stichwörter einschränken"><figcaption><p>Produktübersicht auf Produkt-Stichwörter einschränken</p></figcaption></figure></div>

{% hint style="warning" %}
*Bei der Einschränkung über das Produkt entscheidet allein die Bezeichnung. Produkte wie „Gutschein 50“ und „Geschenkgutschein“ werden erfasst. Ein Produkt namens „Wertkarte“ wird nicht erfasst.*

***

*Das Belohnungsprodukt für die Einlösung wird beim Anlegen des Gutscheinprogramms automatisch erstellt. Es enthält zunächst keine Produktkategorie und kein Stichwort. Daher müssen Produktkategorie und Stichwort auch bei diesem hinterlegt werden. Ansonsten zeigt die Einschränkung über die Kategorie/Stichwort nur Verkäufe.*
{% endhint %}
{% endstep %}

{% step %}

### Nach Jahr gruppieren

Bestehende Gruppierungen werden entfernt. Unter *Gruppieren nach* wird **Datum** geöffnet und die Ebene **Jahr** gewählt.

<div data-with-frame="true"><figure><img src="https://2281246901-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FlM26Mg6nljOOOe95HyIq%2Fuploads%2FTY0UC1ZtRve2aJP3I7aO%2Fimage.png?alt=media&amp;token=2179b135-19af-4990-8a69-538d50c699c3" alt="Produktübersicht nach Jahr gruppieren" width="563"><figcaption><p>Produktübersicht nach Jahr gruppieren</p></figcaption></figure></div>

Die Liste zeigt je Jahr die Summen für *Verkaufte Menge*, *Zwischensumme* und *Marge*. Als zweite Ebene kann **Produkt** gewählt werden. Damit werden die einzelnen Gutscheinprodukte innerhalb eines Jahres aufgeschlüsselt.

<div data-with-frame="true"><figure><img src="https://2281246901-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FlM26Mg6nljOOOe95HyIq%2Fuploads%2FigQpVeguk8yzF0wiaFP8%2Fimage.png?alt=media&amp;token=4c9f6f26-5a1e-4d46-809f-42217b840adb" alt="Gutscheinauswertung im Produktübersicht-Bericht"><figcaption><p>Gutscheinauswertung im Produktübersicht-Bericht</p></figcaption></figure></div>

| Wert              | Bedeutung                                                                                          |
| ----------------- | -------------------------------------------------------------------------------------------------- |
| *Verkaufte Menge* | Anzahl der Gutscheinzeilen, einschließlich Verkäufen und Einlösungen                               |
| *Zwischensumme*   | Saldo ohne Steuern: Verkäufe positiv, Einlösungen negativ                                          |
| *Gesamtpreis*     | Dieselbe Betrachtung einschließlich Steuern. Die Spalte wird über die Spaltenauswahl eingeblendet. |
| {% endstep %}     |                                                                                                    |
| {% endstepper %}  |                                                                                                    |

### Verkauf und Einlösung unterscheiden

Der Bericht enthält beide Vorgänge mit unterschiedlichem Vorzeichen:

* **Verkauf eines Gutscheins:** positive Zwischensumme auf dem verkauften Gutscheinprodukt.
* **Einlösung eines Gutscheins:** negative Zwischensumme auf dem Belohnungsprodukt des Gutscheinprogramms.

{% hint style="warning" %}
*Die Summe der Zwischensumme je Jahr ist ein Saldo aus Verkäufen und Einlösungen. Sie entspricht nicht dem Gutscheinumsatz. Für den reinen Verkaufsumsatz werden Einlösungen ausgeschlossen.*

***

*Die Spalte „Verkaufte Menge“ zählt auch Einlösungen mit der Menge 1. Die Stückzahl je Jahr liegt deshalb über der Anzahl tatsächlich verkaufter Gutscheine.*
{% endhint %}

### Nur Verkäufe auswerten

Über *Filter -> Filter hinzufügen* wird eine Bedingung auf *Zwischensumme* **größer als** `0` gesetzt. Damit bleiben nur Verkaufszeilen in der Auswertung.

<div data-with-frame="true"><figure><img src="https://2281246901-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FlM26Mg6nljOOOe95HyIq%2Fuploads%2FoZW5zdX1F0ft2EZiZtPs%2Fimage.png?alt=media&amp;token=b2eca340-a838-4453-aec0-a9a925d868a5" alt="Nur Gutscheinverkäufe über den Filter &#x22;Zwischensumme ist größer als 0&#x22; auswerten"><figcaption><p>Nur Gutscheinverkäufe über den Filter "Zwischensumme ist größer als 0" auswerten</p></figcaption></figure></div>

### Nur Einlösungen auswerten

Mit der Bedingung *Zwischensumme* **weniger als** `0` werden nur Einlösungen angezeigt. Der Betrag erscheint negativ und entspricht dem eingelösten Wert.

<div data-with-frame="true"><figure><img src="https://2281246901-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FlM26Mg6nljOOOe95HyIq%2Fuploads%2FC9ez4rC3V9vzOQhep7oX%2Fimage.png?alt=media&amp;token=6f74fbb2-51ff-423a-9715-10db1130f297" alt="Nur Gutscheineinlösungen über den Filter &#x22;Zwischensumme ist weniger als 0&#x22; auswerten"><figcaption><p>Nur Gutscheineinlösungen über den Filter "Zwischensumme ist weniger als 0" auswerten</p></figcaption></figure></div>

### Auswertung als Favorit speichern

Über das Menü **Favoriten -> Aktuelle Suche speichern** kann die Berichtansicht mit den gesetzten Einstellungen (Filtern, Gruppierungen) im Favoriten-Menü gespeichert werden.

<div data-with-frame="true"><figure><img src="https://2281246901-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FlM26Mg6nljOOOe95HyIq%2Fuploads%2FtARWCLlofXgIAsKt0gXm%2Fimage.png?alt=media&amp;token=9bfb180d-0faf-4049-a779-8d45f74739f5" alt="Gutscheinauswertung als Favorit speichern"><figcaption><p>Gutscheinauswertung als Favorit speichern</p></figcaption></figure></div>

Als Name kann beispielsweise **Gutscheinauswertung** verwendet werden. Mit **Standardmäßig verwenden** wird die Auswertung beim Öffnen des Berichts automatisch angezeigt. Mit **Mit allen Benutzern teilen** wird sie weiteren Benutzern bereitgestellt.

Ist Standardmäßig verwenden nicht aktiviert, kann die Auswertung beim Aufrufen des Berichts über das Favoriten-Menü erneut aufgerufen werden.

<div data-with-frame="true"><figure><img src="https://2281246901-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FlM26Mg6nljOOOe95HyIq%2Fuploads%2F1zUdsJ1AfWmybrCfuKie%2Fimage.png?alt=media&amp;token=537f99ca-d25e-4dc7-8403-31772384af83" alt="Gutscheinauswertung über das Favoriten-Menü aufrufen"><figcaption><p>Gutscheinauswertung über das Favoriten-Menü aufrufen</p></figcaption></figure></div>

### Gutscheinauswertung exportieren

Die Auswertung kann über **Aktion -> Exportieren** heruntergeladen werden.

### FAQ Gutscheinauswertung über den Produktübersicht-Bericht

<details>

<summary>Warum erscheinen Zeilen ohne Datum und ohne Menge?</summary>

Ausgewertet werden alle aktiven Produkte. Gutscheinprodukte ohne Verkauf erscheinen ohne Datum und Kennzahlen. Bei der Gruppierung nach Jahr werden diese Zeilen in einer Gruppe ohne Datumsangabe zusammengefasst.

</details>

<details>

<summary>Warum ist die Zwischensumme in einer Zeile negativ?</summary>

Es handelt sich um eine Einlösung. Der eingelöste Betrag wird als negative Zeile auf das Belohnungsprodukt des Gutscheinprogramms gebucht.

</details>

<details>

<summary>Kann aus dem Bericht das offene Gutscheinguthaben abgelesen werden?</summary>

Dies ist nur eingeschränkt möglich. Gutscheine werden häufig in einem anderen Jahr eingelöst. Der Jahressaldo wird dadurch verzerrt.

Das aktuelle Gutscheinguthaben kann [im Gutscheinprogramm, durch Öffnen eines Gutscheins](/kasse/verkaufsoberflache/gutscheine-and-ewallets-rabatt-and-treue/gutscheine-and-ewallets.md) eingesehen werden.

</details>

<details>

<summary>Warum ist die Marge bei Gutscheinen null?</summary>

Die Marge wird aus Verkaufserlös und Einstandswert gebildet. Bei Gutscheinprodukten ist üblicherweise kein Einstandswert hinterlegt. Die Marge entspricht daher dem Erlös oder bleibt ohne Aussagekraft.

</details>

<details>

<summary>Warum sehen zwei Benutzer unterschiedliche Summen?</summary>

Zeilen aus Kassenverkäufen werden nur angezeigt, wenn die zugehörige [Filiale](/schnelles-wissen/funktionen-und-vorgange/filialbetrieb.md) den zugewiesenen Filialen des angemeldeten Benutzers entspricht. Rechnungszeilen sind für alle Benutzer sichtbar.

</details>

## Gutscheinauswertung über die Kassenbelegzeilen

> *Berichte* -> *Kasse* -> *Belegzeilen*

Der Belegzeilen-Bericht listet die einzelnen Positionen aller Kassenbelege. Über einen benutzerdefinierten Filter auf **Gutschein ist gesetzt** werden daraus jene Positionen herausgefiltert, die mit einem Gutschein verknüpft sind — sowohl der Verkauf eines Gutscheins als auch dessen Einlösung.

{% hint style="warning" %}
*Die Gutscheinauswertung über den Belegzeilen-Bericht gibt nur Aufschluss über Gutscheine die in der Kasse erstellt und eingelöst wurden. Um auch Gutscheine aus der Verwaltungsoberfläche und dem Onlineshop auszuwerten, sollte der Produktübersicht-Bericht oder der Automatische Report gewählt werden.*
{% endhint %}

#### Auswertung erstellen

{% stepper %}
{% step %}
**Bericht öffnen**

Der Bericht wird über *Berichte -> Kasse -> Belegzeilen* geöffnet.
{% endstep %}

{% step %}
**Benutzerdefinierten Filter hinzufügen**

Über *Filter -> Benutzerdefinierten Filter hinzufügen* wird im oberen Feld **Gutschein** und im unteren Feld **ist gesetzt** gewählt. Mit **Anwenden** wird der Filter übernommen.

<div data-with-frame="true"><figure><img src="https://2281246901-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FlM26Mg6nljOOOe95HyIq%2Fuploads%2F3wATSQWon5StXIEeuDqI%2Fimage.png?alt=media&amp;token=3a5963c3-e638-4b68-b408-4d795cedf2df" alt="Gutscheinauswertung unter Berichte -> Kassen -> Belegzeilen mit Filter &#x22;Gutschein ist gesetzt&#x22;"><figcaption><p>Gutscheinauswertung unter Berichte -> Kassen -> Belegzeilen mit Filter "Gutschein ist gesetzt"</p></figcaption></figure></div>

Angezeigt werden daraufhin ausschließlich Positionen, die mit einem Gutschein verknüpft sind.
{% endstep %}

{% step %}
**Verkauf und Einlösung trennen**

Verkauf und Einlösung stehen gemeinsam in der Liste und unterscheiden sich am Vorzeichen: Der Verkauf eines Gutscheins erscheint mit positiver **Zwischensumme**, die Einlösung mit negativer.

Zur Trennung wird über **Eine Bedingung hinzufügen** eine zweite Bedingung ergänzt — *Zwischensumme* **größer als** `0` für Verkäufe, *Zwischensumme* **weniger als** `0` für Einlösungen.
{% endstep %}

{% step %}
**Zeitraum einschränken**

Die Belegzeile führt kein eigenes Belegdatum. Eine zeitliche Einschränkung erfolgt daher über eine weitere Bedingung auf **Erstellungsdatum** oder über den Filter **Beleg** auf einen bestimmten Kassenbeleg.
{% endstep %}
{% endstepper %}

## Gutscheinauswertung über automatischen Report

{% hint style="success" %}
*Module: ETRON onRetail v2 Automatische Reports + Gutscheinverwaltung und Kundenpflege*
{% endhint %}

> *Berichte* -> *Dashboards* -> *Eigene Reporte* -> *Reportpläne*\
> *Berichte* -> *Dashboards* -> *Eigene Reporte* -> *Erstellte Reporte*

Der automatische Report **Gutscheinauswertung** stellt die vollständige Saldohistorie aller Gutscheine und Geldbörsen als Excel- oder CSV-Datei bereit. Je Saldoänderung werden Datum, Aktionsart, Betrag sowie Saldo davor und danach ausgegeben. Zusätzlich werden Gutscheincode, Erstelldatum, Saldo bei Erstellung und, sofern eindeutig ermittelbar, die Kassenauftragsreferenz ausgegeben.

Der automatische Report wird über einen [Reportplan ](/verwaltungsoberflache/berichte/dashboards/eigene-reporte.md#report-plane-eigene-reporte-erstellen)eingerichtet. Dieser wird zeitgesteuert im Hintergrund ausgeführt. Die erzeugten Dateien werden unter [Erstellte Reporte](/verwaltungsoberflache/berichte/dashboards/eigene-reporte.md#erstellte-reporte) zum Download abgelegt.

{% hint style="info" %}
*Für das Erstellen von Automatischen Reports wird ein Benutzer mit der **Systemrolle Administrator** und dem **Zugriffsrecht für Berichte** benötigt.*
{% endhint %}

***

### Report für Gutscheinauswertung einrichten

{% stepper %}
{% step %}

#### Reportplan anlegen

Unter [Berichte -> Dashboards -> Eigene Reporte -> Reportpläne](/verwaltungsoberflache/berichte/dashboards/eigene-reporte.md#report-plane-eigene-reporte-erstellen) wird über den Button **Neu** ein Reportplan erstellt.

<div data-with-frame="true"><figure><img src="https://2281246901-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FlM26Mg6nljOOOe95HyIq%2Fuploads%2FtmvKDu9GyAQDdxUUgdVt%2Fimage.png?alt=media&amp;token=7a42cf8b-77b3-4b9b-9cb5-67e104c5cd19" alt="Reportplan unter Berichte -> Dashboards -> Eigene Reporte -> Reportläne anlegen"><figcaption><p>Reportplan unter <strong>Berichte -> Dashboards -> Eigene Reporte -> Reportläne</strong> anlegen</p></figcaption></figure></div>

&#x20;Im Feld **Name der Aktion** wird eine Bezeichnung eingetragen, beispielsweise *Gutscheinauswertung.*

<div data-with-frame="true"><figure><img src="https://2281246901-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FlM26Mg6nljOOOe95HyIq%2Fuploads%2F4vRZ5zGRr05JZ7FDK8V1%2Fimage.png?alt=media&amp;token=5824ded4-4b27-4ecb-83df-b4f0b3b12e45" alt="Reportplan für Gutscheinauswertung"><figcaption><p>Reportplan für Gutscheinauswertung</p></figcaption></figure></div>
{% endstep %}

{% step %}

#### Modell festlegen

Im Feld **Modell** wird *Treuegutschein* ausgewählt. Der Report greift auf die Gutscheine dieses Modells zu.
{% endstep %}

{% step %}

#### Reporttyp wählen

Im Feld **Reporttyp** wird **Excel** oder **CSV** gewählt.

{% hint style="info" %}
*Excel wird empfohlen. Datums- und Betragsspalten werden als Datums- und Zahlenzellen ausgegeben. Sie können unmittelbar sortiert und berechnet werden.*
{% endhint %}
{% endstep %}

{% step %}

#### Report-Code hinterlegen

Im Reiter **Report Code** wird der folgende Code eingefügt:

<details>

<summary>Report-Code für Reportplan Gutscheinauswertung</summary>

Der folgende Code wird im **Reiter Report Code** des Reportplans vollständig eingefügt.

```python
# Voucher Balance Report
# Report code for a report plan. Model: Loyalty Coupon (loyalty.card).
# Fills "headers" and "rows"; the report plan turns them into Excel or CSV.
# One row per balance change of every gift card and eWallet: voucher code,
# creation date, balance at creation, every movement with date, amount,
# resulting balance and the PoS order reference if available.
# Vouchers are ordered by program name, then creation date, then code; the
# movements of one voucher follow chronologically and stay together.

# ----------------------------------------------------------
# Configuration
# ----------------------------------------------------------
filename = 'voucher_report_%s.xlsx' % datetime.datetime.now().strftime('%Y%m%d')

PROGRAM_TYPES = ['gift_card', 'ewallet']
FULL_HISTORY = True
DAYS_BACK = 31
REPORT_TIMEZONE = 'Europe/Vienna'
ORIGIN_TOLERANCE_MINUTES = 120
EXPIRY_TOLERANCE_MINUTES = 5
ISSUE_WINDOW_MINUTES = 5
MATCH_MAX_DAYS = 2
ISSUE_MATCH_WINDOW_MINUTES = 60
AMOUNT_TOLERANCE = 0.005

MOVEMENT_LABELS = {
    'issue': 'Ausgabe',
    'topup': 'Aufladung',
    'redeem': 'Einlösung',
    'expiration': 'Verfall',
}

# ----------------------------------------------------------
# Helper
# ----------------------------------------------------------

utc_zone = timezone('UTC')
local_zone = timezone(REPORT_TIMEZONE)
origin_tolerance = datetime.timedelta(minutes=ORIGIN_TOLERANCE_MINUTES)
expiry_tolerance = datetime.timedelta(minutes=EXPIRY_TOLERANCE_MINUTES)
issue_window = datetime.timedelta(minutes=ISSUE_WINDOW_MINUTES)
match_window = datetime.timedelta(days=MATCH_MAX_DAYS)
issue_match_window = datetime.timedelta(minutes=ISSUE_MATCH_WINDOW_MINUTES)
report_now = datetime.datetime.now()
date_from = report_now - datetime.timedelta(days=DAYS_BACK)


def to_local(value):
    if not value:
        return ''
    local_value = utc_zone.localize(value).astimezone(local_zone)
    return local_value.replace(tzinfo=None)

def to_amount(value):
    return round(value or 0.0, 2)

def to_text(value):
    return '' if value in (False, None) else '%s' % value

def add_origin(origins, card_id, reference, order_date, amount):
    if not reference:
        return
    candidates = origins.setdefault(card_id, {})
    candidate = candidates.get(reference)
    if not candidate:
        candidate = {'date': order_date, 'amounts': []}
        candidates[reference] = candidate
    if not candidate['date']:
        candidate['date'] = order_date
    if amount:
        value = round(abs(amount), 2)
        known = False
        for existing in candidate['amounts']:
            if abs(existing - value) <= AMOUNT_TOLERANCE:
                known = True
                break
        if not known:
            candidate['amounts'].append(value)
            
def assign_references(candidates, movements, skip_index):
    best = {}
    for index in range(len(movements)):
        if index == skip_index:
            continue
        movement = movements[index]
        if movement['type'] == 'expiration':
            continue
        window = match_window
        if movement['type'] == 'issue':
            window = issue_match_window
        target = abs(movement['points_change'] or 0.0)
        moment = movement['date']
        for reference in candidates:
            candidate = candidates[reference]
            candidate_date = candidate['date']
            gap = window
            if candidate_date and moment:
                gap = abs(candidate_date - moment)
                if gap > window:
                    continue
            matched = False
            for value in candidate['amounts']:
                if abs(value - target) <= AMOUNT_TOLERANCE:
                    matched = True
                    break
            if not matched:
                continue
            current = best.get(index)
            if not current or gap < current[0]:
                best[index] = (gap, reference, value)
    claims = []
    for index in best:
        gap, reference, value = best[index]
        claims.append((gap, index, reference, value))
    claims.sort()
    assigned = {}
    taken = {}
    for gap, index, reference, value in claims:
        key = (reference, value)
        if key in taken:
            continue
        taken[key] = index
        assigned[index] = reference
    return assigned


def card_sort_key(card):
    """Order vouchers by program name, then creation date, then code."""
    return (
        (card.program_id.name or '').lower(),
        card.create_date or datetime.datetime.min,
        card.code or '',
    )

# ----------------------------------------------------------
# Source data
# ----------------------------------------------------------

cards = env['loyalty.card'].sudo().search(
    [('program_id.program_type', 'in', PROGRAM_TYPES)]
)
points_field = env['ir.model.fields'].sudo()._get('loyalty.card', 'points')
changes_per_card = {}
if cards and points_field:
    messages = env['mail.message'].sudo().search(
        [
            ('model', '=', 'loyalty.card'),
            ('res_id', 'in', cards.ids),
            ('tracking_value_ids.field', '=', points_field.id),
        ],
        order='date, id',
    )
    for message in messages:
        for tracking_value in message.tracking_value_ids:
            if tracking_value.field.id != points_field.id:
                continue
            changes_per_card.setdefault(message.res_id, []).append(
                {
                    'date': message.date,
                    'points_before': tracking_value.old_value_float,
                    'points_after': tracking_value.new_value_float,
                    'author_id': message.author_id.id,
                }
            )
author_ids = set()
for card_changes in changes_per_card.values():
    for change in card_changes:
        if change['author_id']:
            author_ids.add(change['author_id'])
user_name_per_partner = {}
if author_ids:
    report_users = env['res.users'].sudo().with_context(active_test=False).search(
        [('partner_id', 'in', list(author_ids))]
    )
    for report_user in report_users:
        user_name_per_partner.setdefault(report_user.partner_id.id, report_user.name)
origins_per_card = {}
if cards:
    pos_lines = env['pos.order.line'].sudo().search([('coupon_id', 'in', cards.ids)])
    for pos_line in pos_lines:
        pos_order = pos_line.order_id
        pos_ref = pos_order.pos_reference or pos_order.name
        add_origin(
            origins_per_card,
            pos_line.coupon_id.id,
            pos_ref,
            pos_order.date_order,
            pos_line.points_cost,
        )
        add_origin(
            origins_per_card,
            pos_line.coupon_id.id,
            pos_ref,
            pos_order.date_order,
            pos_line.price_subtotal_incl,
        )
    sale_lines = env['sale.order.line'].sudo().search([('coupon_id', 'in', cards.ids)])
    for sale_line in sale_lines:
        sale_order = sale_line.order_id
        add_origin(
            origins_per_card,
            sale_line.coupon_id.id,
            sale_order.name,
            sale_order.date_order,
            sale_line.points_cost,
        )
        add_origin(
            origins_per_card,
            sale_line.coupon_id.id,
            sale_order.name,
            sale_order.date_order,
            sale_line.price_total,
        )
    if 'sale.order.coupon.points' in env:
        coupon_points = env['sale.order.coupon.points'].sudo().search(
            [('coupon_id', 'in', cards.ids)]
        )
        for coupon_point in coupon_points:
            add_origin(
                origins_per_card,
                coupon_point.coupon_id.id,
                coupon_point.order_id.name,
                coupon_point.order_id.date_order,
                coupon_point.points,
            )
expiries_per_card = {}
if cards and 'onr_loyalty.expiration_line' in env:
    expiration_lines = env['onr_loyalty.expiration_line'].sudo().search(
        [
            ('loyalty_card_id', 'in', cards.ids),
            ('expired_date', '!=', False),
        ]
    )
    for expiration_line in expiration_lines:
        expiries_per_card.setdefault(expiration_line.loyalty_card_id.id, []).append(
            expiration_line.expired_date
        )

# ----------------------------------------------------------
# Rows
# ----------------------------------------------------------

headers = [
    'Voucher Code',
    'Voucher Created on',
    'Balance at Creation',
    'Program',
    'Program Type',
    'Customer',
    'Company',
    'Currency',
    'Movement Date',
    'Movement Type',
    'Balance Before',
    'Change',
    'Balance After',
    'Order Reference',
    'Responsible',
]
rows = []
for card in sorted(cards, key=card_sort_key):
    card_changes = changes_per_card.get(card.id, [])
    card_origins = origins_per_card.get(card.id, {})
    card_expiries = expiries_per_card.get(card.id, [])

    opening_balance = card.points
    opening_author_id = False
    remaining_changes = card_changes
    if card_changes:
        opening_balance = card_changes[0]['points_before']
        first_change = card_changes[0]
        loaded_on_creation = (
            card.create_date
            and first_change['date']
            and first_change['points_before'] == 0.0
            and abs(first_change['date'] - card.create_date) <= issue_window
        )
        if loaded_on_creation:
            opening_balance = first_change['points_after']
            opening_author_id = first_change['author_id']
            remaining_changes = card_changes[1:]
    opening_user = user_name_per_partner.get(opening_author_id, '')
    if not opening_user:
        opening_user = card.create_uid.name
    movements = [
        {
            'date': card.create_date,
            'type': 'issue',
            'points_before': 0.0,
            'points_change': opening_balance,
            'points_after': opening_balance,
            'reference': '',
            'user': opening_user,
        }
    ]
    for change in remaining_changes:
        points_change = change['points_after'] - change['points_before']
        movement_type = 'topup'
        if points_change < 0:
            movement_type = 'redeem'
            for expired_date in card_expiries:
                if abs(expired_date - change['date']) <= expiry_tolerance:
                    movement_type = 'expiration'
                    break
        movements.append(
            {
                'date': change['date'],
                'type': movement_type,
                'points_before': change['points_before'],
                'points_change': points_change,
                'points_after': change['points_after'],
                'reference': '',
                'user': user_name_per_partner.get(change['author_id'], ''),
            }
        )
    creation_reference = ''
    skip_index = -1
    if card.order_id:
        creation_reference = card.order_id.name
        skip_index = 0
    assigned = assign_references(card_origins, movements, skip_index)
    if not creation_reference:
        creation_reference = assigned.get(0, '')
    source_pos_order = card.source_pos_order_id
    if not creation_reference and source_pos_order and source_pos_order.date_order:
        if card.create_date:
            source_reference = (
                source_pos_order.pos_reference or source_pos_order.name
            )
            if source_reference not in assigned.values():
                if abs(source_pos_order.date_order - card.create_date) <= issue_match_window:
                    creation_reference = source_reference
    movements[0]['reference'] = creation_reference
    for index in range(1, len(movements)):
        movements[index]['reference'] = assigned.get(index, '')
    card_values = [
        to_text(card.code),
        to_local(card.create_date),
        to_amount(opening_balance),
        to_text(card.program_id.name),
        to_text(card.program_id.program_type),
        to_text(card.partner_id.display_name),
        to_text(card.company_id.name),
        to_text(card.currency_id.name),
    ]
    for movement in movements:
        if not FULL_HISTORY:
            if not movement['date'] or movement['date'] < date_from:
                continue
        rows.append(
            card_values
            + [
                to_local(movement['date']),
                MOVEMENT_LABELS.get(movement['type'], movement['type']),
                to_amount(movement['points_before']),
                to_amount(movement['points_change']),
                to_amount(movement['points_after']),
                to_text(movement['reference']),
                to_text(movement['user']),
            ]
        )

```

</details>

{% hint style="info" %}
*Der Dateiname (filename) ist im Code auf die Endung **.xlsx** eingestellt. Bei Reporttyp CSV ist die Endung auf **.csv** zu ändern.*
{% endhint %}
{% endstep %}

{% step %}

#### Ausführungsintervall festlegen

Im Feld **Ausführen alle** wird das Intervall eingetragen, beispielsweise `1` und *Monate*. Im Feld **Nächstes Ausführungsdatum** wird der erste Lauf festgelegt.
{% endstep %}

{% step %}

#### Aufbewahrungsdauer festlegen

Das Feld **Lösche nach Tagen** steuert die Verfügbarkeit unter *Erstellte Reporte*. Voreingestellt sind 30 Tage. Mit dem Wert `0` bleiben die Dateien dauerhaft erhalten.
{% endstep %}

{% step %}

#### Reportplan aktivieren

Der Toggle **Aktiv** wird eingeschaltet und der Reportplan gespeichert. Der Report wird anschließend im hinterlegten Intervall automatisch ausgeführt.

{% hint style="info" %}
*Ohne aktivierten Schalter wird der Reportplan gespeichert, aber nicht automatisch ausgeführt. Der Report kann manuell über den Button* ![Manuell starten](https://2281246901-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FlM26Mg6nljOOOe95HyIq%2Fuploads%2FKIvh2HBUwUAgM0gsYca8%2Fimage.png?alt=media\&token=c67021fb-304e-4849-9501-5e6492478964) *erstellt werden.*
{% endhint %}
{% endstep %}
{% endstepper %}

### Report Gutscheinauswertung öffnen und herunterladen

{% stepper %}
{% step %}

#### Erstellte Reporte öffnen

Unter [Berichte -> Dashboards -> Eigene Reporte -> Erstellte Reporte](/verwaltungsoberflache/berichte/dashboards/eigene-reporte.md#erstellte-reporte) werden alle erzeugten Reporte aufgelistet. Durch Auswählen eines Reports wird dieser geöffnet.

<div data-with-frame="true"><figure><img src="https://2281246901-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FlM26Mg6nljOOOe95HyIq%2Fuploads%2FhYcmGh7ea10INZcPE4Sc%2Fimage.png?alt=media&amp;token=8dbf243b-f89b-4d55-951d-8976826b296a" alt=""><figcaption><p>Erstellte Reporte unter <strong>Berichte -> Dashboards -> Eigene Reporte -> Erstellte Reporte</strong></p></figcaption></figure></div>
{% endstep %}

{% step %}

#### Datei herunterladen

Über das Datei-Symbol im Feld **Report** wird die **Datei heruntergeladen**. Der Dateiname enthält das Erstelldatum im Format `voucher_report_JJJJMMTT.xlsx`.

<div data-with-frame="true"><figure><img src="https://2281246901-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FlM26Mg6nljOOOe95HyIq%2Fuploads%2FJWJjoNWcy3H9vTgmZsF8%2Fimage.png?alt=media&amp;token=98bd0cc9-8165-4a4c-b1d4-f9354528dfde" alt=""><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}

#### Auswertung in Excel

Die Datei enthält eine Tabelle mit Kopfzeile.&#x20;

Die Zeilen werden nach Programmname, danach nach Erstelldatum und Gutscheincode sortiert. Die Bewegungen eines Gutscheins folgen chronologisch.

Programm, Erstelldatum und Gutscheincode werden in jeder Zeile wiederholt. Dadurch bleiben Gutscheindaten bei Sortierung und Filterung zusammen auswertbar.

<div data-with-frame="true"><figure><img src="https://2281246901-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FlM26Mg6nljOOOe95HyIq%2Fuploads%2Fsy2d9pIiLiVRSRVo8IxI%2Fimage.png?alt=media&amp;token=b60bc415-fc3d-47a3-938c-af173a204f6d" alt=""><figcaption><p>Erstellter Report für Gutscheinauswertung</p></figcaption></figure></div>

<details>

<summary>Aufbau der Auswertung</summary>

**Spalten im Bericht:**

| Spalte                | Bedeutung                                                                   |
| --------------------- | --------------------------------------------------------------------------- |
| `Voucher Code`        | Gutscheincode                                                               |
| `Voucher Created on`  | Zeitpunkt der Gutscheinerstellung                                           |
| `Balance at Creation` | Saldo zum Erstellzeitpunkt                                                  |
| `Program`             | Name des Gutschein- oder eWallet-Programms                                  |
| `Program Type`        | `gift_card` für Gutscheinkarten, `ewallet` für eWallets                     |
| `Customer`            | Zugeordneter Kontakt, sofern der Gutschein auf einen Kunden ausgestellt ist |
| `Company`             | Unternehmen, dem das Programm zugeordnet ist                                |
| `Currency`            | Währung des Programms                                                       |
| `Movement Date`       | Zeitpunkt der Saldoänderung                                                 |
| `Movement Type`       | Ausgabe, Aufladung, Einlösung oder Verfall                                  |
| `Balance Before`      | Saldo vor der Bewegung                                                      |
| `Change`              | Veränderung, negativ bei Einlösung und Verfall                              |
| `Balance After`       | Saldo nach der Bewegung                                                     |
| `Order Reference`     | Kassenauftragsreferenz oder Verkaufsauftrag, sofern eindeutig zuordenbar    |
| `Responsible`         | Benutzer, auf den die Buchung zurückgeht                                    |

</details>
{% endstep %}
{% endstepper %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

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

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://helpcenter.etron.info/verwaltungsoberflache/konfiguration/stammdaten-produkte/preise-and-guthaben/gutscheine-and-ewallet.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

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.
