> ## Documentation Index
> Fetch the complete documentation index at: https://dokumentation.websale.de/llms.txt
> Use this file to discover all available pages before exploring further.

# Kundenspezifische Angebote

> Individuell verhandelte Angebote mit eigenen Preisen sowie Zahlungs- und Versandkonditionen aus der Warenwirtschaft in den Shop übernehmen und dort bestellbar machen.

Kundenspezifische Angebote bringen das Telefongeschäft in den Shop. Ein Sachbearbeiter verhandelt mit einem Kunden Preise, Zahlungs- und Lieferkonditionen, und der Kunde findet das Ergebnis anschließend als fertiges Angebot in seinem Konto und kann es dort bestellen.

Die Angebote entstehen nicht im Shop, sondern in der Warenwirtschaft. WEBSALE V8s stellt dafür eine Schnittstelle bereit, die ursprünglich für das D\&G-Versandhandelssystem entstanden ist und die andere Warenwirtschaftssysteme ebenso bedienen können.

## Was ein Angebot ausmacht

| Eigenschaft | Regel |
| - | - |
| Konditionen | Preise, Zahlungs- und Versandkonditionen gelten nur für dieses Angebot |
| Shopeinstellungen | werden für das Angebot vollständig übergangen |
| Bestellung | nur separat, nicht zusammen mit anderen Produkten |
| Häufigkeit | jedes Angebot ist genau einmal bestellbar |
| Gültigkeit | zeitlich begrenzt |
| Änderbarkeit | der Käufer kann ein Angebot nicht ändern |
| Anzahl je Kunde | beliebig viele, mit unterschiedlichen Produkten und Konditionen |

Dass die Shopeinstellungen übergangen werden, ist der eigentliche Zweck. Sie können einem ausländischen Kunden im Angebot den Kauf auf Rechnung anbieten, obwohl Ihr Shop diese Zahlungsart sonst nur im Inland zeigt. Dasselbe gilt für Versandart und Versandkosten, und beide dürfen auch kostenfrei sein.

Solange ein Angebot bestellt wird, schaltet der Shop alle anderen Versandarten ab und ersetzt die erste durch Name und Kosten aus dem Angebot. Daher kommt die Regel, dass ein Angebot nur separat bestellbar ist: Für gewöhnliche Produkte im selben Warenkorb gäbe es dann keine passenden Versandkosten mehr.

> [!WARNING]
>
> Angebote sind an ein Kundenkonto **mit Kundennummer** gebunden. Der Kunde muss angemeldet sein, und in seinem Konto muss die Kundennummer stehen, unter der die Warenwirtschaft das Angebot abgelegt hat. Fehlt eines von beidem, sieht er keine Angebote.

## Welche Daten die Warenwirtschaft liefert

### Zum Angebot

| Angabe | Pflicht |
| - | - |
| Subshop-ID | ja |
| Kundennummer | ja |
| Angebotsnummer, je Kunde eindeutig | ja |
| Angebotsdatum | ja |
| Gültigkeitsdauer | ja |
| Zahlungsartencode und Zahlungskosten | ja |
| Versandart und Versandkosten | ja |
| Angebotsbeschreibung | nein |

### Je Produkt

| Angabe | Pflicht |
| - | - |
| Produktname | ja |
| Produktnummer | ja |
| Bestellmenge | ja |
| Preis für die Bestellmenge | ja |
| Mehrwertsteuer-Index | ja |
| Rabatt, prozentual oder absolut | nein |

## Die Zahlungsart angeben

Die Zahlungsart wird über einen Code zugewiesen. Sie muss im Shop konfiguriert und aktiv sein, sonst greift sie auch im Angebot nicht. Zahlungskosten sind optional.

| Zahlungsart | Code |
| - | - |
| Kreditkarte | 1 |
| Nachnahme | 3 |
| Bankeinzug und Lastschrift | 4 |
| Vorauskasse | 5 |
| Rechnung | 6 |
| Geldkarte | 8 |
| Kundenkonto | 9 |
| Online-Überweisung und giropay | 10 |
| frei definierbare Zahlungsarten | 16 bis 20 |

Die Codes 2 und 7 sind in dieser Aufstellung nicht vergeben. Die vollständige Übersicht aller Zahlungsarten-Codes steht in den Materialien.

Materialien: [Übersicht aller Zahlungsarten-Codes](https://dokumentation.websale.de/v8s/materialien/zahlungsarten-codes.md)

Der Name der Versandart ist dagegen frei wählbar, Versandkosten sind ebenfalls optional.

## Die Konfiguration

### Das Template zuweisen

Angebote laufen über ein eigenes Template.

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<Templates>
   Offers = ws_offers.htm
</Templates>
```

### Die Meldungen hinterlegen

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<NotifyMessages-Txt>
   NoOffers       = Es liegen keine Angebote vor.
   OffersBasket-1 = Es befinden sich bereits Produkte im Warenkorb. Ein Angebot kann nur separat bestellt werden.
   OffersBasket-2 = Es befindet sich bereits ein Angebot im Warenkorb. Ein Angebot kann nur separat bestellt werden.
</NotifyMessages-Txt>
```

Die beiden Warenkorbmeldungen unterscheiden zwei verschiedene Lagen: gewöhnliche Produkte im Warenkorb und ein bereits gewähltes Angebot. Der Kunde muss in beiden Fällen etwas anderes tun, deshalb lohnen sich zwei Texte.

### Die Beschriftungen festlegen

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<Offers>
   OfferID-Txt = Angebotsnummer
   Offer-Txt   = Angebot
   From-Txt    = vom
</Offers>
```

`Offer-Txt` und `From-Txt` bauen den Text jedes Eintrags in der Auswahlliste, also beispielsweise "Angebot 4711 vom 12.03.2026". `OfferID-Txt` ist die Beschriftung der Angebotsnummer.

Referenz: [Abschnitt Templates](https://dokumentation.websale.de/v8s/referenz/konfigurationen/shopkonfiguration-shop-config/grundlagen-und-technik.md#templates) · [Abschnitt NotifyMessages-Txt](https://dokumentation.websale.de/v8s/referenz/konfigurationen/shopkonfiguration-shop-config/texte-und-meldungen.md#notifymessages-txt) · [Abschnitt Offers](https://dokumentation.websale.de/v8s/referenz/konfigurationen/shopkonfiguration-shop-config/warenkorb-und-bestellprozess.md#offers)

## Das Template `ws_offers.htm`

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{MSG-Offers_Notify}
   ~MSG-Offers_Notify~
{/MSG-Offers_Notify}

{WS-OffersList}
   <form action="~FORM-Offers~" method="post">
      <input type="hidden" name="referer" value="Angebot-VS4">

      {BASKET-PR-Data}
         {!DC-CompareStringInList($BASKET-TotalPositions$, 0)}
            Angebote können nur separat bestellt werden.
            {!DC-FPBasketHasOffer(1)}
               In Ihrem Warenkorb liegen noch ~BASKET-TotalPositions~ Artikel.
               Bitte leeren Sie den Warenkorb, um ein Angebot zu bestellen.
            {/!DC-FPBasketHasOffer(1)}
            {DC-FPBasketHasOffer(1)}
               In Ihrem Warenkorb liegt bereits ein Angebot.
               Bitte leeren Sie den Warenkorb, um ein anderes Angebot zu wählen.
            {/DC-FPBasketHasOffer(1)}
         {/!DC-CompareStringInList($BASKET-TotalPositions$, 0)}
      {/BASKET-PR-Data}

      Bitte wählen Sie ein Angebot aus:
      ~WS-OffersList~
      <noscript>
         <input type="submit" value="Absenden">
      </noscript>

      {Cat-AdvData($Offers,1)}
         {@OPR-Data}
            <img src="~OPR-Image~" alt="~OPR-Name~">
            Produktname: ~OPR-Name~
            Artikelnummer: ~OPR-Number~
            Menge: ~OPR-Quantity~ ~OPR-Unit~
            {OPR-DiscountRate}Rabatt: ~OPR-DiscountRate~%{/OPR-DiscountRate}
            Preis: ~OPR-Price~ ~WS-CurrencySymbol~
         {/@OPR-Data}

         Zahlungsart:  ~Offer-PaymentName~
         Zustellung:   ~Offer-DeliveryName~
         Lieferkosten: ~Offer-DeliveryCost~ ~WS-CurrencySymbol~
         Gesamtsumme:  ~Offer-TotalSum~ ~WS-CurrencySymbol~
      {/Cat-AdvData($Offers,1)}

      <input type="submit" value="Angebot bestellen" name="button_offer_basket">
   </form>
{/WS-OffersList}
```

`WS-OffersList` gibt eine fertige Auswahlliste aus, die sich beim Wechsel selbst abschickt. Deshalb steht der Absendebutton im `noscript`-Block: Er wird nur gebraucht, wenn JavaScript abgeschaltet ist.

> [!WARNING]
>
> Klammern Sie die Rabattzeile, so wie im Beispiel. `OPR-DiscountRate` und `OPR-Discount` geben **nichts** aus, wenn kein Rabatt vereinbart ist. Ohne Klammerung steht auf dem Angebot dann "Rabatt: %".

## Die Verlinkung zur Angebotsseite

Der Link lässt sich überall setzen. Sinnvoll ist er auf der Kontoseite des Kunden.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<a href="~WS-Link~&act=offers">Zu Ihren Angeboten</a>
```

## Die Tags für Angebote

### Angaben zum Angebot

| Tag | Inhalt |
| - | - |
| `Offer-ID` | die Angebotsnummer |
| `Offer-Date` | das Angebotsdatum |
| `Offer-ExpireDate` | das Ende der Gültigkeit |
| `Offer-Descr` | die Angebotsbeschreibung |
| `Offer-PaymentName` | die Zahlungsart |
| `Offer-PaymentCost` | die Zahlungskosten |
| `Offer-DeliveryName` | die Versandart |
| `Offer-DeliveryCost` | die Versandkosten |
| `Offer-TotalSum` | die Gesamtsumme |

Zusätzlich gibt es die Beträge getrennt nach netto, brutto und Mehrwertsteuer: `OFFER-PaymentCostNet`, `OFFER-PaymentCostGross`, `OFFER-PaymentCostVAT`, `OFFER-DeliveryCostNet`, `OFFER-DeliveryCostGross`, `OFFER-DeliveryCostVAT`, `OFFER-TotalSumNet`, `OFFER-TotalSumGross` und `OFFER-TotalSumVAT`.

`Offer-ExpireDate` gehört auf die Angebotsseite. Angebote sind zeitlich begrenzt, und der Kunde sollte sehen, wie lange er noch Zeit hat. Ebenso lohnt sich `Offer-Descr`, wenn die Warenwirtschaft eine Beschreibung mitliefert, weil darin meist steht, worauf sich die Sonderkonditionen beziehen.

### Angaben je Produkt

| Tag | Inhalt |
| - | - |
| `OPR-Data` | die Schleife über die Produkte des Angebots |
| `OPR-Name` | der Produktname |
| `OPR-Number` | die Produktnummer |
| `OPR-Quantity` | die Bestellmenge |
| `OPR-Unit` | die Einheit |
| `OPR-Price` | der Preis für die Bestellmenge |
| `OPR-DiscountRate` | der prozentuale Rabatt, leer ohne Rabatt |
| `OPR-Discount` | der absolute Rabatt, leer ohne Rabatt |
| `OPR-Image` | das Produktbild |
| `OPR-Variations` | die Varianten und Texteingaben der Position |
| `OPR-Insert` | Werbemittel zur Position |
| `OPR-GrossPrice` | der Bruttopreis |
| `OPR-NetPrice` | der Nettopreis |
| `OPR-VAT` | der Mehrwertsteuerbetrag |

Referenz: [Tags für kundenspezifische Angebote](https://dokumentation.websale.de/v8s/referenz/tags/offer-kundenspezifische-angebote.md)

## Der Import der Angebote

Die Angebote werden per Importdatei an den WSPManager übergeben. Das Format dieser Datei beschreibt eine eigene Dokumentation, die Sie bei der WEBSALE AG anfordern können.

## Verwandte Themen

* Materialien: Übersicht aller Zahlungsarten-Codes
* Referenz: Tags für kundenspezifische Angebote


## Related topics

- [OFFER- (Kundenspezifische Angebote)](https://dokumentation.websale.de/v8s/referenz/tags/offer-kundenspezifische-angebote.md)
- [Warenkorb und Bestellprozess](https://dokumentation.websale.de/v8s/referenz/konfigurationen/shopkonfiguration-shop-config/warenkorb-und-bestellprozess.md)
- [Navigation und Kategoriebaum](https://dokumentation.websale.de/v8s/referenz/tags/cat/navigation-und-kategoriebaum.md)
- [Grundlagen und Technik](https://dokumentation.websale.de/v8s/referenz/konfigurationen/shopkonfiguration-shop-config/grundlagen-und-technik.md)
- [Angebote an Kunden erstellen (B2B)](https://dokumentation.websale.de/v8s/anwendungsbeispiele/appex-angebote-an-kunden-b2b.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.