# 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** | Fugt die CSV der E-Mail hinzu           | ✓ aktiv                         |
| **Trennzeichen**          | Feldtrenner                             | `;` oder `,` oder `\|`          |
| **Dateiname**             | Name der Datei (Twig-Variablen moglich) | `ORDER_{{ order.orderNumber }}` |
| **Dateipfad**             | Speicherort auf Server (ab `files/`)    | `files/dropshipping/`           |
| **Datei speichern**       | Speichert CSV zusatzlich 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 fur 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 fur **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
