# CSV- & XML-Export

Das Plugin kann Bestelldaten als **CSV**- oder **XML**-Datei exportieren und diese als E-Mail-Anhang an den Lieferanten senden oder auf dem Server speichern.

Die Export-Konfiguration wird **pro Lieferant** vorgenommen (unter Katalog > Dropshipping Lieferanten > \[Lieferant]).

***

## CSV-Export

### Grundeinstellungen

| Feld                      | Beschreibung                            | Beispiel                        |
| ------------------------- | --------------------------------------- | ------------------------------- |
| **CSV als Anhang senden** | Fügt die CSV der E-Mail hinzu           | ✓ aktiv                         |
| **Trennzeichen**          | Feldtrenner                             | `;` oder `,` oder `\|`          |
| **Dateiname**             | Name der Datei (Twig-Variablen möglich) | `ORDER_{{ order.orderNumber }}` |
| **Dateipfad**             | Speicherort auf Server (ab `files/`)    | `files/dropshipping/`           |
| **Datei speichern**       | Speichert CSV zusätzlich auf Server     | optional                        |

### Kopfzeile definieren

Geben Sie die Spaltennamen **zeilenweise** ein - jede Zeile entspricht einer Spalte:

```
OrderNumber
OrderDate
NetPrice
TotalPrice
Tax
ProductName
ManufacturerNumber
Quantity
```

### Spalten definieren

Geben Sie pro Zeile eine Twig-Vorlage für die entsprechende Spalte ein. Die Reihenfolge muss zur Kopfzeile passen:

```twig
{{ order.orderNumber }}
{{ order.orderDate|date }}
{{ order.price.netPrice }}
{{ order.price.totalPrice }}
{{ order.price.calculatedTaxes.at(0).tax }}
{{ order.lineItems.at(n).label }}
{{ order.lineItems.at(n).payload.manufacturerNumber|default('') }}
{{ order.lineItems.at(n).quantity }}
```

> **Wichtig:** `lineItems.at(n)` ist ein Platzhalter. Das Plugin ersetzt `n` automatisch durch den jeweiligen Index der aktuellen Bestellposition.

***

## XML-Export

### Grundeinstellungen

| Feld                    | Beschreibung                        |
| ----------------------- | ----------------------------------- |
| **Als XML exportieren** | Wechselt von CSV auf XML-Format     |
| **Dateipfad**           | Speicherort auf Server              |
| **Datei speichern**     | Speichert XML zusatzlich auf Server |

### XML-Struktur

Die XML-Datei besteht aus drei Teilen:

**Header** - wird einmalig am Anfang ausgegeben:

```xml
<?xml version="1.0" encoding="UTF-8"?><orders>
```

**Body** - wird für **jede Bestellposition** wiederholt:

```xml
<order>
  <number>{{ order.orderNumber }}</number>
  <date>{{ order.orderDate|date }}</date>
  <price>{{ order.price.netPrice }}</price>
  <total_price>{{ order.price.totalPrice }}</total_price>
  <tax>{{ order.price.calculatedTaxes.at(0).tax }}</tax>
  <item_name>{{ order.lineItems.at(n).label }}</item_name>
  <manufacturer_number>{{ order.lineItems.at(n).payload.manufacturerNumber|default('') }}</manufacturer_number>
  <quantity>{{ order.lineItems.at(n).quantity }}</quantity>
</order>
```

**Footer** - wird einmalig am Ende ausgegeben:

```xml
</orders>
```

***

## Verfugbare Twig-Variablen

### Bestellung (`order`)

| Variable                                | Beschreibung                     | Beispiel     |
| --------------------------------------- | -------------------------------- | ------------ |
| `order.orderNumber`                     | Bestellnummer                    | `10042`      |
| `order.orderDate`                       | Bestelldatum (Timestamp)         | -            |
| `order.orderDate\|date`                 | Formatiertes Datum               | `15.03.2024` |
| `order.orderDate\|date('d.m.Y')`        | Datum mit Formatangabe           | `15.03.2024` |
| `order.orderDate\|date('d-m-Y')`        | Datum mit Bindestrichen          | `15-03-2024` |
| `order.price.netPrice`                  | Netto-Gesamtbetrag               | `84.03`      |
| `order.price.totalPrice`                | Brutto-Gesamtbetrag              | `100.00`     |
| `order.price.calculatedTaxes.at(0).tax` | Steuerbetrag (erster Steuersatz) | `15.97`      |

### Bestellpositionen (`order.lineItems.at(n)`)

> `n` wird automatisch durch den aktuellen Positionsindex ersetzt.

| Variable                                           | Beschreibung                     | Beispiel            |
| -------------------------------------------------- | -------------------------------- | ------------------- |
| `order.lineItems.at(n).label`                      | Produktname                      | `"T-Shirt Blau XL"` |
| `order.lineItems.at(n).quantity`                   | Bestellmenge                     | `2`                 |
| `order.lineItems.at(n).payload.manufacturerNumber` | Herstellernummer / Artikelnummer | `"MNR-001"`         |
| `order.lineItems.at(n).payload.productNumber`      | Shopware-Produktnummer           | `"SW10042"`         |

### Lieferant (`supplier`)

| Variable                  | Beschreibung                       |
| ------------------------- | ---------------------------------- |
| `supplier.name`           | Name des Lieferanten               |
| `supplier.mail`           | Haupt-E-Mail des Lieferanten       |
| `supplier.additionalMail` | Zusatzliche E-Mail des Lieferanten |

### Datums-Formatierung

Twig-Datumsformatierung nach PHP `date()`-Syntax:

| Format      | Beschreibung         | Beispiel           |
| ----------- | -------------------- | ------------------ |
| `d.m.Y`     | Tag.Monat.Jahr       | `15.03.2024`       |
| `d-m-Y`     | Tag-Monat-Jahr       | `15-03-2024`       |
| `Y-m-d`     | Jahr-Monat-Tag (ISO) | `2024-03-15`       |
| `d/m/Y H:i` | Mit Uhrzeit          | `15/03/2024 14:30` |

***

## Praxisbeispiele

### Beispiel 1: Einfaches CSV fur deutschen Lieferanten

**Kopfzeile:**

```
Bestellnummer
Bestelldatum
Produkt
Artikelnummer
Menge
Nettopreis
```

**Spalten:**

```twig
{{ order.orderNumber }}
{{ order.orderDate|date('d.m.Y') }}
{{ order.lineItems.at(n).label }}
{{ order.lineItems.at(n).payload.manufacturerNumber|default('') }}
{{ order.lineItems.at(n).quantity }}
{{ order.price.netPrice }}
```

### Beispiel 2: XML mit mehreren Feldern

```xml
Header:
<?xml version="1.0" encoding="UTF-8"?>
<bestellungen>

Body:
<bestellung>
  <bestellnummer>{{ order.orderNumber }}</bestellnummer>
  <datum>{{ order.orderDate|date('d.m.Y') }}</datum>
  <artikel>
    <bezeichnung>{{ order.lineItems.at(n).label }}</bezeichnung>
    <artikelnummer>{{ order.lineItems.at(n).payload.manufacturerNumber|default('') }}</artikelnummer>
    <menge>{{ order.lineItems.at(n).quantity }}</menge>
  </artikel>
  <preise>
    <netto>{{ order.price.netPrice }}</netto>
    <brutto>{{ order.price.totalPrice }}</brutto>
  </preise>
</bestellung>

Footer:
</bestellungen>
```

### Beispiel 3: Dateiname mit Datum und Bestellnummer

```twig
ORDER_{{ order.orderNumber }}_{{ order.orderDate|date('Y-m-d') }}
```

Ergebnis: `ORDER_10042_2024-03-15.csv`

***

## Tipps & Hinweise

* **Twig-Filter:** Sie konnen alle Standard-Twig-Filter verwenden, z. B. `|upper`, `|lower`, `|default('')`
* **Fehlende Werte:** Verwenden Sie `|default('')` um Fehler bei leeren Feldern zu vermeiden: `{{ order.lineItems.at(n).payload.manufacturerNumber|default('') }}`
* **Encoding:** XML-Dateien werden in UTF-8 kodiert
* **Trennzeichen:** Bei Zahlenwerten mit Dezimalkomma kann ein Semikolon als Trennzeichen sinnvoller sein als ein Komma


---

# 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.hubyte.de/dropshipping-bestellung-an-lieferanten-herstelle/csv-xml-export.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.
