Gelöst Abfrage ob aktiver Sonderpreis vorhanden

Mario.

Sehr aktives Mitglied
4. Dezember 2007
1.552
42
Ich suche eine Möglichkeit im Workflow abzufragen ob es im Artikel einen aktiven Sonderpreis gibt.
D.h. die Felder Sonderpreis aktivieren, Bis einschließlich und das Enddatum müssen geprüft werden.
 

gutberle

Sehr aktives Mitglied
29. März 2011
1.292
396
Hallo @Mario.,

das kannst Du über eine "Erweiterte Eigenschaft" herausbekommen, die eine SQL Abfrage auf den Sonderpreisstatus macht.

Um eine Erweiterte Eigenschaft anzulegen, wählst Du aus der Liste der Workflow-Bedingungen ganz unten den Button "Erweiterte Eigenschaften" aus, legst eine neue Eigenschaft an, gibst ihr einen "sprechenden" Namen wie z.B. "istSonderpreisAktiv", kopierst den folgenden Code in das Editor-Fenster rechts ...
Code:
{% capture query -%}
   SELECT nAktiv FROM tArtikelSonderpreis
   WHERE tArtikelSonderpreis.kArtikel={{ Vorgang.Allgemein.Stammdaten.InterneArtikelnummer }}
{% endcapture -%}
{% assign istSonderpreisAktiv = query | DirectQueryScalar -%}
{% if istSonderpreisAktiv != null -%}
{{ istSonderpreisAktiv }}
{% else -%}
0
{% endif -%}
... und der Code liefert dann den Wert 1 zurück, wenn der Artikel einen aktiven Sonderpreis hat, sonst den Wert 0.

Zurück in Deiner Workflow-Bedingung wählst Du nun also aus der Liste der Bedingungen unter Erweiterte Eigenschaften Deine Eigenschaft "istSonderpreisAktiv" aus, setzt den Vergleichsoperator auf "Gleich" und den Wert natürlich auf 1.

Damit wird der Workflow getriggert, wenn der aktuelle Artikel einen Sonderpreis hat, fertig ist die Laube ... :)

Gruß,
Ingmar
 

Mario.

Sehr aktives Mitglied
4. Dezember 2007
1.552
42
Boah Ingmar, du bist Spitze. Vielen Dank für die Hilfe.

Jetzt müsste nur noch geprüft werden ob das Enddatum (dEnde) vor oder nach dem aktuellen Datum liegt.
 

gutberle

Sehr aktives Mitglied
29. März 2011
1.292
396
Auch das wäre kein Problem, aber sag erst mal, ob Du das wirklich brauchst, denn nAktiv ist nur "1", wenn der Sonderpreis noch nicht ausgelaufen ist.
Der Wert geht automatisch auf 0, wenn die gesetzte(n) Bedingung(en) nicht mehr gültig sind, also z.B. wenn das Ablaufdatum erreicht/überschritten ist, der Lagerbestand nicht mehr vorhanden ist, etc.
Damit wäre die einfache Abfrage auf nAktiv=1 eigentlich schon alles, was Du brauchst, aber wenn Du mir hier widersprechen möchtest ;) dann schiebe ich gerne auch noch den Datumstest hinterher.
 

Mario.

Sehr aktives Mitglied
4. Dezember 2007
1.552
42
Bei mir anscheinend nicht. Denn der Sonderpreis bleibt immer aktiv, auch wenn das Datum abgelaufen ist.

Sonderpreis.jpg
 

gutberle

Sehr aktives Mitglied
29. März 2011
1.292
396
Das heißt nicht, dass der Sonderpreis aktiv ist, sondern dass er vom 29.03.2017 bis zum 03.04.2017 aktiv war.
Wenn Du Dir mal die Spalte "Sonderpreis" in der Artikelübersicht einblendest, dann wird Dir angezeigt, ob ein Artikel einen aktiven oder abgelaufenen Sonderpreis hat, inaktiv heißt keiner gesetzt, aber auch abgelaufen heißt natürlich "ist nicht aktiv".
So geht's: Rechts-Klick auf Spaltenköpfe > Spalteneditor anzeigen > ggfls. "Sonderpreis" von links nach rechts bewegen, dann an die gewünschte Stelle in der Liste ziehen...
 

Mario.

Sehr aktives Mitglied
4. Dezember 2007
1.552
42
Ah ok, dann brauche ich wohl die Abfrage ob abgelaufen/inaktiv oder aktiv. Könntest du mir da noch einmal helfen?

Ich würde für diese Artikel gern das Merkmal Sonderpreis setzen um es in der Suche zu verwenden. Leider stürzt die WaWi ab wenn ich im Workflow bei Aktionen -> Merkmal auswähle. Scheint ein bug zu sein.
 

_af

Aktives Mitglied
9. Februar 2016
13
0
Ich habe das gleiche bzw. ähnliche Anliegen, allerdings würde ich gerne nur auf "abgelaufen" triggern.
Das ist aber eher nicht möglich oder ? Obwohl man es in der WAWI bei der erweiterten Suche kann.
 

gutberle

Sehr aktives Mitglied
29. März 2011
1.292
396
Hallo @Mario.,

sorry wegen der Stille, ich war jetzt 10 Tage geschäftlich im Ausland und musste auch erst mal versuchen zu verstehen, warum nAktiv auch dann =1 bleibt, wenn der Sonderpreis gar nicht aktiv ist. Der JTL Guide gibt hier den entscheidenden Hinweis, denn er sagt, dass wenn z.B. der Lagerendbestand gesetzt ist und unterschritten wird, dann wird der Sonderpreis zwar inaktiv, sobald neue Ware reinkommt, wird er aber wieder aktiv. Der Sonderpreis geht also nur in so eine Art Standby und ist automatisch reaktivierbar.

Wirklich inaktiv ist er also erst, wenn im Reiter "Sonderpreis" kein Haken mehr gesetzt ist. Ok, da ist ein kleiner Logikbruch drin, denn wenn der Lagerendstand nicht gesetzt ist, aber ein Enddatum, dann fehlt mir so ein wenig die Phantasie, was den Sonderpreis wieder aus dem Standby holen sollte. Sozusagen "when hell freezes over", aber hey, wir wollen nicht kleinlich sein, es sind ja noch Haken gesetzt ... ;)

Nachdem ich nun also begriffen habe, warum mein Vorschlag von oben zwar ehrenhaft, aber leider nicht zielführend war, habe ich den Code neu geschrieben und eine vollständige und Wawi analoge Prüfung eingebaut. Im Gegensatz zur Artikelliste der Wawi, wo zwischen Inaktiv, Abgelaufen und Aktiv unterschieden wird, liefere ich hier aber nur 1=Aktiv oder 0=Inaktiv zurück. Das reicht ja auch und eine differenziertere Rückmeldung wäre zwar auch möglich, aber die SQL Abfrage wäre deutlich komplexer.
Code:
{% capture query -%}
    SELECT nAktiv FROM tArtikelSonderpreis AS t1
    JOIN dbo.vLagerbestandEx AS t2 ON t2.kArtikel=t1.kArtikel
    WHERE t1.nAktiv=1
        AND (CONVERT(varchar(10), t1.dStart, 104) <= CONVERT(varchar(10), GETDATE(), 104))
           AND ((t1.nIstDatum=0) OR ((t1.nIstDatum=1) AND (CONVERT(varchar(10), t1.dEnde, 104) > CONVERT(varchar(10), GETDATE(), 104))))
           AND ((t1.nIstAnzahl=0) OR ((t1.nIstAnzahl=1) AND (t2.fVerfuegbar>=t1.nAnzahl)))
        AND t1.kArtikel={{ Vorgang.Allgemein.Stammdaten.InterneArtikelnummer }}
{% endcapture -%}
{% assign istSonderpreisAktiv = query | DirectQueryScalar -%}
{% if istSonderpreisAktiv != null -%}
{{ istSonderpreisAktiv }}
{% else -%}
0
{% endif -%}

Die Bedingungen, die erfüllt sein müssen, damit 1=Aktiv zurückgemeldet wird, lauten also wie folgt ...

1. Das Startdatum liegt in der Vergangenheit.
2. Das Enddatum ist entweder nicht gesetzt, oder noch nicht abgelaufen
3. Der Lagerendbestand ist entweder nicht gesetzt, oder nicht unterschritten.
>> Achtung: Bei Lagerende=0 wird der Sonderpreis wirklich erst bei Lager <0 inaktiv.

Viele Grüße,
Ingmar
 

gutberle

Sehr aktives Mitglied
29. März 2011
1.292
396
@_af - Ok, hier dann doch noch die Variante, die den Status des Sonderpreises differenzierter zurückmeldet ...
Code:
{% capture query -%}
SELECT CASE t3.nAktiv WHEN 0 THEN 0
   ELSE ISNULL((SELECT nAktiv FROM tArtikelSonderpreis AS t1
   JOIN dbo.vLagerbestandEx AS t2 ON t2.kArtikel=t1.kArtikel
       WHERE t1.nAktiv=1
           AND (CONVERT(varchar(10), t1.dStart, 104) <= CONVERT(varchar(10), GETDATE(), 104))
           AND ((t1.nIstDatum=0) OR ((t1.nIstDatum=1) AND (CONVERT(varchar(10), t1.dEnde, 104) > CONVERT(varchar(10), GETDATE(), 104))))
           AND ((t1.nIstAnzahl=0) OR ((t1.nIstAnzahl=1) AND (t2.fVerfuegbar>=t1.nAnzahl)))
           AND t1.kArtikel={{ Vorgang.Allgemein.Stammdaten.InterneArtikelnummer }}),2)
   END
   FROM tArtikelSonderpreis AS t3 WHERE kArtikel={{ Vorgang.Allgemein.Stammdaten.InterneArtikelnummer }}
   UNION
   SELECT 0 WHERE NOT EXISTS (SELECT nAktiv FROM tArtikelSonderpreis WHERE kArtikel={{ Vorgang.Allgemein.Stammdaten.InterneArtikelnummer }})
{% endcapture -%}
{% assign SonderpreisStatus = query | DirectQueryScalar -%}
{{ SonderpreisStatus }}
Diese Variante liefert bei inaktiv=0, bei aktiv=1 und bei abgelaufen=2 zurück.

Und diese Variante ist damit natürlich auch als mächtigerer Ersatz für die Lösung für @Mario. hier drüber geeignet ... ;)

Gruß,
Ingmar
 
Zuletzt bearbeitet:

_af

Aktives Mitglied
9. Februar 2016
13
0
Genial - funktioniert astrein, sogar als automatischer workflow !!!
Vielen, vielen Dank für deinen EInsatz und die Mühe - bin absolut happy, daß das funktioniert.
Merci, Ingmar.

Gruß
Andrea
 

Mario.

Sehr aktives Mitglied
4. Dezember 2007
1.552
42
Ingmar, ich musste echt über deinen Beitrag schmunzeln. Die Eingangsbeschreibung ist schon einen dicken Daumen Wert, aber die Lösung bekommt zwei dicke Daumen. Vielen Dank, du hast mir sehr geholfen!!!
 

gutberle

Sehr aktives Mitglied
29. März 2011
1.292
396
@Rico Giesler hat vor einiger Zeit hier einen Thread aufgemacht, in dem man seine Wünsche für Workflow Aktionen posten kann und wo andere dann über "Gefällt mir" den Vorschlägen Gewicht geben können.
Dort habe ich jetzt einen Beitrag mit den Wunsch nach einer echten DotLiquid-Variable oder DotLiquid-Funktion eingestellt, die den Sonderpreis Status zum Artikel direkt und ohne diese SQL Kasperei abbildet.
Ich würde mich freuen, wenn Ihr der Sache "Gewicht" geben würdet, denn dort ist Euer Wunsch eigentlich am Besten aufgehoben ... ;)
 

webonanza

Offizieller Servicepartner
SPBanner
12. September 2011
50
10
Genial - funktioniert astrein, sogar als automatischer workflow !!!
Vielen, vielen Dank für deinen EInsatz und die Mühe - bin absolut happy, daß das funktioniert.
Merci, Ingmar.

Gruß
Andrea


Hallo Andrea,

darf ich mal neugierg fragen, wo Ihr diese Abfrage als "automatischen" Workflow eingebaut habt ... bzw. wie?
Denn das "ablaufen" eines Sonderpreises löst ja leider nicht das Ereignis "Artikel geändert" aus.

Danke fürs Feedback :)
Michael
 
  • Gefällt mir
Reaktionen: ManuelHudec

KrisZap

Aktives Mitglied
2. Februar 2017
37
8
Hallo,

das ist eine super Sache!

Verwende es mit einem Workflow, um mich bei Aktivierung oder Deaktivierung der Sonderpreise per E-Mail zu informieren und diese dann manuell im Gambio Shop zu bearbeiten oder zu löschen. Bisher war Gambio mit den Wawi Connector bzgl. der Sonderpreise leider nicht nutzbar. Nun zumindest als "Krücke".

Eine Sache musste ich im Code aber ändern, da der Vergleich der Datumsangaben nicht korrekt funktioniert hat (SQL-Version abhängig?!).

Fehler: Das Enddatum ist gesetzt und noch nicht abgelaufen, dennoch istSonderpreisAktiv=2 (abgelaufen)

Lösung: Im Code für die erweiterte Eigenschaft folgenden Code ändern:

Von (varchar(10), GETDATE(), 104) in (date, GETDATE())
von (varchar(10), t1.dEnde, 104) in (date, t1.dEnde)

Nun scheint es zuklappen :)

LG
Kris
 

gutberle

Sehr aktives Mitglied
29. März 2011
1.292
396
Hi @KrisZap,

erst einmal danke für die positive Rückmeldung. Ich habe mir das Ganze jetzt noch einmal angeschaut und glaube ich weiß, was da los ist. Es handelt sich aber mit Sicherheit nicht um ein Problem der verwendeten SQL-Version und ich halte diese Vermutung von Dir auch eher für eine nette Geste mir gegenüber, um mir nicht sagen zu müssen "buggy, nanananana...". - Danke dafür ... ;)

Es ist aber ein Bug, denn der Test auf einen noch laufenden Sonderpreis muss ja laut Wawi Menü-Label einschließlich des aktuellen Datums gemacht werden, ich habe oben im Code aber auf Ende > Heute getestet. Das ist falsch, es muß natürlich auf Ende >= Heute getestet werden und deshalb wird tatsächlich ein Sonderpreis, der mit dem Ende des heutigen Tages auslaufen soll, schon Heute als abgelaufen deklariert.

Ich denke, am Ende sollte der korrigierte Code hier noch einmal gepostet werden, damit keiner den alten und buggy Code benutzt, aber im Moment treibt mich noch um, warum es bei Dir mit dem Wechsel von varchar(10) auf date funktioniert. Das tut es bei mir erstens nicht und zweitens ist SQL zwar keine wirklich schöne Programmiersprache, aber dann doch eine "für Doofe" und Datums- und Zeitvergleiche kann man nur mit echter Mühe so zerlegen, dass sie nicht doch wie gewünscht funktionieren - und das gilt hier sowohl für meine varchar(10) Variante, die die Datumsangaben in der Form "01.11.2017" vergleicht genauso wie für Deine date Variante, die das in der Form "2017-11-01" tut.

Warum das Eine bei Dir funktioniert, das Andere aber nicht, sollten wir also definitiv noch klären, bevor hier eine Code-Korrektur gepostet wird ... o_O

Nachtrag: @KrisZap - Was ich sagen wollte, aber verbaselt habe: Könntest Du bitte mal nachschauen, ob Du beim Versuch, herauszufinden, warum es nicht funktionierte eventuell nicht nur den Tausch varchar<>date gemacht hast, sondern nebenbei vielleicht auch meinen Bug korrigiert hattest und bei Dir jetzt ">=" steht? Das würde dann alles erklären und wir wären fertig.

Gruß,
Ingmar
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: KrisZap

KrisZap

Aktives Mitglied
2. Februar 2017
37
8
Hallo @gutberle,

danke für Deine Rückmeldung.

Der Bug „Ende > Heute“ ist mir nicht aufgefallen.
Ich freue mich aber auch über, von mir unwissend, abgegebene nette Gesten :D
Habe die Korrektur „Ende >= Heute“ nun auch bei mir eingebaut.

Mit Deinem Code (inkl. Ende >= Heute) bekomme ich folgende Ergebnisse:

0. Sonderpreise sind nicht aktiviert (bzw. ein Startdatum existiert nicht), dann istSonderpreisAktiv=0 (inaktiv)
1. Das Startdatum liegt in der Vergangenheit, dann istSonderpreisAktiv=2 (abgelaufen) sollte aber =1 (aktiv)
2. Das Startdatum liegt in der Zukunft, dann istSonderpreisAktiv=2 (abgelaufen)
3. Das Enddatum ist gesetzt und liegt noch in der Zukunft, dann istSonderpreisAktiv=2 (abgelaufen) sollte aber =1 (aktiv)
4. Das Enddatum ist gesetzt und liegt in der Vergangenheit, dann istSonderpreisAktiv=2 (abgelaufen)
5. Der Lagerendbestand ist noch nicht unterschritten, dann istSonderpreisAktiv=1 (aktiv)
6. Der Lagerendbestand ist bereits unterschritten, dann istSonderpreisAktiv=2 (abgelaufen)

Zum Vergleich des Datums:

Ich habe mir meine Probleme mit dem Verarbeiten des Datums erklärt und geschaut welche Formate noch existieren.
Testweise die varchar(10) Variante mit der date Variante getauscht und dann ging es.

Mit folgendem Code:

Code:
{% capture query -%}
SELECT CASE t3.nAktiv WHEN 0 THEN 0
   ELSE ISNULL((SELECT nAktiv FROM tArtikelSonderpreis AS t1
   JOIN dbo.vLagerbestandEx AS t2 ON t2.kArtikel=t1.kArtikel
       WHERE t1.nAktiv=1
           AND (CONVERT(date, t1.dStart) <= CONVERT(date, GETDATE()))
           AND ((t1.nIstDatum=0) OR ((t1.nIstDatum=1) AND (CONVERT(date, t1.dEnde) >= CONVERT(date, GETDATE()))))
           AND ((t1.nIstAnzahl=0) OR ((t1.nIstAnzahl=1) AND (t2.fVerfuegbar>=t1.nAnzahl)))
           AND t1.kArtikel={{ Vorgang.Allgemein.Stammdaten.InterneArtikelnummer }}),2)
   END
   FROM tArtikelSonderpreis AS t3 WHERE kArtikel={{ Vorgang.Allgemein.Stammdaten.InterneArtikelnummer }}
   UNION
   SELECT 0 WHERE NOT EXISTS (SELECT nAktiv FROM tArtikelSonderpreis WHERE kArtikel={{ Vorgang.Allgemein.Stammdaten.InterneArtikelnummer }})
{% endcapture -%}
{% assign SonderpreisStatus = query | DirectQueryScalar -%}
{{ SonderpreisStatus }}

erhalte ich folgende Ergebnisse:

0. Sonderpreise sind nicht aktiviert (bzw. ein Startdatum existiert nicht), dann istSonderpreisAktiv=0 (inaktiv)
1. Das Startdatum liegt in der Vergangenheit, dann istSonderpreisAktiv=1 (aktiv)
2. Das Startdatum liegt in der Zukunft, dann istSonderpreisAktiv=2 (abgelaufen)
3. Das Enddatum ist gesetzt und liegt noch in der Zukunft, dann istSonderpreisAktiv=1 (aktiv)
4. Das Enddatum ist gesetzt und liegt in der Vergangenheit, dann istSonderpreisAktiv=2 (abgelaufen)
5. Der Lagerendbestand ist noch nicht unterschritten, dann istSonderpreisAktiv=1 (aktiv)
6. Der Lagerendbestand ist bereits unterschritten, dann istSonderpreisAktiv=2 (abgelaufen)

Warum?
Keine Ahnung :)

LG
Kris
 

gutberle

Sehr aktives Mitglied
29. März 2011
1.292
396
Hallo @KrisZap,

danke für Deine Tests und die verwirrenden Ergebnisse, denn rein von der Logik her waren meine Bedingungsabfragen schon alle OK, bis auf den Bug mit dem Vergleich auf "Ende>Heute" statt "Ende>=Heute", aber das hatten wir ja schon.

Ich habe auf Basis Deiner Tests jetzt einmal genauer geschaut, was die Wawi in der Datenbank macht, wenn Kombinationen von Optionen an- und ausgeschaltet werden und dabei ist mir klar geworden, was hier passiert und wo die Fehler herkommen.

Die Wawi setzt manche Optionen nämlich nicht von 1=an auf 0=aus zurück, sondern setzt den Wert statt auf 0 auf NULL. Damit fliegt einem aber jeder Bedingungsvergleich um die Ohren, der das nicht explizit abfängt, weil immer dann, wenn einer der Werte in einer Query-Bedingung unabgefangen NULL hat, die Query schlicht NICHTS zurückliefert. - Und in diesem Fall, also wenn NICHTS zurückgeliefert wird, greift bei mir der Alternativwert 2=abgelaufen, wie Du bei Deinen Tests ja gefunden hast.

Es ist mir jetzt auch gelungen ist, Situationen zu erzeugen, bei denen meine Datumsvergleiche mit der Wandlung nach varchar(10) tatsächlich NICHT funktionieren. Ich habe keine Ahnung warum, denn der Datums-Vergleich über "CONVERT(varchar..." ist absoluter Standard im MS SQL Server Bereich. Das schaue ich mir aber später an, für hier ist das egal, denn der Vergleich über die Wandlung mit "CONVERT(date..." funktioniert auch bei mir immer, also habe ich das entsprechend geändert.

Ich habe all diese Änderungen jetzt umgesetzt und alles ausgiebig in der Wawi und auch direkt im SQL Editor getestet und alle Deine Tests laufen jetzt OK durch. Die Workflow Query sieht jetzt wie folgt aus ...
Code:
{% capture query -%}
SELECT CASE t3.nAktiv WHEN 0 THEN 0
    ELSE ISNULL((SELECT nAktiv FROM tArtikelSonderpreis AS t1
    JOIN dbo.vLagerbestandEx AS t2 ON t2.kArtikel=t1.kArtikel
        WHERE t1.nAktiv=1
            AND ((ISNULL(t1.nIstDatum,0)=0) OR ((t1.nIstDatum=1) AND (CONVERT(DATE, ISNULL(t1.dEnde,'31.12.1899'), 104) >= CONVERT(DATE, GETDATE(), 104))))
            AND ((t1.nIstAnzahl=0) OR ((t1.nIstAnzahl=1) AND (t2.fVerfuegbar>=t1.nAnzahl)))
            AND t1.kArtikel={{ Vorgang.Allgemein.Stammdaten.InterneArtikelnummer }}),2)
    END SonderPreisStatus
    FROM tArtikelSonderpreis AS t3 WHERE kArtikel={{ Vorgang.Allgemein.Stammdaten.InterneArtikelnummer }}
    UNION
    SELECT 0 as SonderPreisStatus WHERE NOT EXISTS (SELECT nAktiv FROM tArtikelSonderpreis WHERE kArtikel={{ Vorgang.Allgemein.Stammdaten.InterneArtikelnummer }})
{% endcapture -%}
{% assign SonderpreisStatus = query | DirectQueryScalar -%}
{{ SonderpreisStatus }}

Achtung: Dem aufmerksamen Leser ist eventuell aufgefallen, dass in der Query im Vergleich zu vorher eine ganze Zeile in den Bedingungs-Tests fehlt, nämlich "AND (CONVERT(DATE, t1.dStart, 104) <= CONVERT(DATE, GETDATE(), 104))". Der Grund dafür ist, dass die Wawi (meines Erachtens) einen Bug bei der Auswertung der Bedingung hat, dass nur das Startdatum gesetzt ist, aber in die Zukunft zeigt.

Damit ist der Sonderpreis aktuell, soll heißen jetzt/hier/heute eigentlich NICHT aktiv, denn er ist ja noch nicht angelaufen. Er wird aber demnächst aktiv und nach der weiter oben beschriebenen Logik aus dem JTL Guide müsste der Sonderpreis-Status damit eigentlich "abgelaufen" sein, um dann später wieder nach "aktiv" zu wechseln.

Da ich hier aber nicht den Besserwisser spielen will und der Workflow genau DAS zurückliefern soll, was die Wawi zum Sonderpreis-Status sagt, habe ich die Zeile mit dem Test auf einen "noch nicht" aktiven Sonderpreis für's Erste rausgenommen und liefere genau wie die Wawi für diesen Fall 1=aktiv zurück.

Ich werde die Frage, ob das ein Bug ist, aber an JTL weiterleiten und falls es tatsächlich ein Bug ist und der korrigiert wird, dann muss die Zeile einfach nur wieder in die Gruppe der AND Bedingungen eingefügt werden.

So, ich hoffe, wir haben es jetzt und nochmals vielen Dank für Deine Hilfe! :)

Gruß,
Ingmar
 
Zuletzt bearbeitet: