Gelöst Maximalabnahme durch JTL-Wawi steuerbar?

leonidas

Aktives Mitglied
24. Januar 2017
25
0
Gibt es eine Möglichkeit die in Shopware (v5.2.16) verwendete "Maximalabnahme" durch JTL-Wawi (v1.2.2.1) zu setzen?

In der Registerkarte "Abnahme" von JTL gibt es nur Mindestabnahme und Abnahmeintervall. Evlt. über Attribute möglich?
Die "Maximalabnahme" ist als "maxpurchase" in "s_articles_details".
Hat jemand eine Lösung hier?
 

Daniel B.

Moderator
17. Juni 2009
1.430
40
Dazu gibt ein Demo Plugin für Entwickler. Das Plugin macht aber genau das, was du brauchst.

Du kannst dir die ZIP Datei einfach hier runterladen https://gitlab.jtl-software.de/jtlconnector/demo-plugin/repository/master/archive.zip und in den Plugin Ordner vom Connector entpacken.

Bitte jedoch darauf achten, dass du den entpackten Ordner demo-plugin-master-7f066f5d8238781def5cb085f40b6d7a5038978d nach izzle umbenennst.

Wenn du dann einem Artikel das Attribut maximumOrderQuantity gibst mit einem Wert, dann wird die Maximalabnahme im Shopware gesetzt.
 
  • Gefällt mir
Reaktionen: leonidas

3po

Sehr aktives Mitglied
30. August 2011
2.605
100
Als kleiner Hinweis ist noch zu erwähnen, das der Wert des Funktionsattribut auch / zusätzlich in das erste zu verfügung stehende attr_xxx gespeichert wird. Kann unter ümständen, je nachdem wie man seine Attribute verarbeitet probleme hervorufen.
 
  • Gefällt mir
Reaktionen: leonidas

Daniel B.

Moderator
17. Juni 2009
1.430
40
Genau, wenn man allerdings im Shopware Backend eine Attributsspalte mit dem Namen anlegt und in der JTL-Wawi das Attribut genau so wie die Spalte nennt, wird es auch exakt dort gespeichert.
 
  • Gefällt mir
Reaktionen: 3po

leonidas

Aktives Mitglied
24. Januar 2017
25
0
@3po was genau heißt: "in das erste zu verfügung stehende attr_xxx gespeichert wird"
Wenn ich auf "Einstellungen" -> "Freitextfeld-Verwaltung" gehe, dort auf "Artikel (s_articles_attributes)" sehe ich einmal:

"Konfiguriert (5 Freitextfelder)" und
"Nicht Konfiguriert (16 Freitextfelder)".

Welches ist das "erste zur Verfügung stehende"? Das Erste unter "Nicht Konfiguriert (16 Freitextfelder)"?

@Daniel B. Wie sollte ich dann in meinem Fall mit der Maximalabnahme vorgehen?
Auf "Einstellungen" -> "Freitextfeld-Verwaltung", dort auf "Artikel (s_articles_attributes)" gehen.
Auf "Hinzufügen" klicken, dann als:
Spaltenname" "maximumOrderQuantity"
Spaltentyp: "Ganzzahl - [INT(11)]"
Label: "Maximalabnahme"
Support Text:
Hilfe Text:
Position: einfach die nächst höhere als unter den Einträgen in "Konfiguriert (5 Freitextfelder)"?
Im Backend anzeigen: Y
Übersetzbar: N

Wäre das so richtig für das izzle demo plugin?
 

3po

Sehr aktives Mitglied
30. August 2011
2.605
100
Das von Dir beschriebene vorgehen ist richtig, ich würde bei Backend anzeigen aber Nein wählen, da es nicht relevant ist. Mein Hinweis bezog sich auf die SW Version vor 5.2 bzw. den passenden connector hierzu. Dort gab es noch keine Freitextfeldverwaltung wo man die Attribute frei benennen konnte, daher hat der Connector dann nicht gleichnamige Attribute in das erste freie attr_ gespeichert. Das macht er immer noch, jedoch hat Daniel einen super Tipp gegeben, wenn man es identisch nennt landet es nicht in attr_xx sondern in das gleichnamige Attribut. Da Du es aber nicht doppelt benötigst würde ich anzeigen gleich Nein einstellen. Das erste freie ist im normalfall attr_4, 1-3 sind fest vergeben.
 

leonidas

Aktives Mitglied
24. Januar 2017
25
0
Der von mir oben beschriebene Vorgang kann leider nicht so umgesetzt werden.
Bei Spaltenname" "maximumOrderQuantity" bekomme ich die Fehlermeldung: "Es dürfen nur Zahlen, Kleinbuchstaben und _ verwendet werden...".
Was mache ich in diesem Fall? Einfach weglassen, dass das nächste freie Attribut verwendet wird oder dann eins der Varianten verwenden:

"maximum_order_quantity"
"maximumorderquantity"
 

3po

Sehr aktives Mitglied
30. August 2011
2.605
100
"maximum_order_quantity" würde ich nehmen und dann halt im plugin auch so umbenennen.
 

leonidas

Aktives Mitglied
24. Januar 2017
25
0
Okay also die Zeile in der ProductListener.php des Plugins:
"&& $i18n->getName() === 'maximumOrderQuantity') {"

benenne ich um in:

"&& $i18n->getName() === 'maximum_order_quantity') {"

und in JTL bei den Artikelattributen verwende ich dann ebenso "maximum_order_quantity"?
 

3po

Sehr aktives Mitglied
30. August 2011
2.605
100
genau, und das selbst erstellte Freitextfeld in Shopware ebenso bennenen, sonst landet es ja wieder in attr_xx
 

leonidas

Aktives Mitglied
24. Januar 2017
25
0
@3po okay ja das macht Sinn, dann ist "maximum_order_quantity" die Verbindung zwischen JTL Artikelattributen über den JTL-Connector zu den Shopware Freitextfeldern.

Ich habe jetzt versucht einen Abgleich zu machen und bekomme dabei eine Fehlermeldung:

"Synchronisation mit Webshop nicht möglich!



Exception bei core.connector.auth:

DeserializeObject-Error: Newtonsoft.Json.JsonReaderException:
Additional text encountered after finished reading JSON content: <.
Path ", line 1, position 281.
bei Newtonsoft.Json.JsonTextReader.ReadInternal()
bei Newtonsoft.Json.JsonTextReader.Read()
bei
Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JS
onReader reader, Type objectType, Boolean checkAdditionalContent)
bei Newtonsoft.Json.JsonSerializer.DeserializeInt
"

wenn ich das izzle Plugin rausnehme, funktioniert alles wie gehabt, bei erneutem einsetzen wieder diese Fehlermeldung.
 

Daniel B.

Moderator
17. Juni 2009
1.430
40
Normalerweise brauchst du das Attribut nicht im Shopware anlegen, da das Plugin eh nichts in die Attribute speichert. Das Plugin schaut einfach ob ein Attribut mit dem Namen maximumOrderQuantity existiert und welchen Wert es hat. Danach wird der Wert in die Datenbank beim Artikel geschrieben. Ob du das Attribut dann noch in die richtige Attributspalte speichern möchtest, bleibt dir überlassen. Wenn du es nicht explizit als Freifeldtext im Showpare anlegst, wird es an einer freien Position gespeichert (z.B. attr5).
 

leonidas

Aktives Mitglied
24. Januar 2017
25
0
@Daniel B. also hatte das jetzt noch einmal probiert mit einem nicht editierten "izzle" Plugin und auch das zuvor eingetragene Freitextfeld wurde entfernt, jedoch die gleiche Fehlermeldung:

"
Fehler beim Verbindungsaufbau: Exception bei core.connector.auth:

DeserializeObject-Error: Newtonsoft.Json.JsonReaderException: Additional text encountered after finished reading JSON content: <. Path '', line 1, position 281.
bei Newtonsoft.Json.JsonTextReader.ReadInternal()
bei Newtonsoft.Json.JsonTextReader.Read()
bei Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent)
bei Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType)
bei Newtonsoft.Json.JsonConvert.DeserializeObject(String value, Type type, JsonSerializerSettings settings)
bei Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value, JsonSerializerSettings settings)
bei jtlCore.ControllerClasses.Connector.Core.Json.DeserializeObject[T](String json)

Json:{"result":null,"error":{"code":4,"message":"syntax error, unexpected ')'","data":"Shutdown! File: \/FOO\/engine\/Shopware\/Plugins\/Local\/Frontend\/jtlconnector\/plugins\/izzle\/demo\/bootstrap.php - Line: 16"},"jtlrpc":"2.0","id":"unknown"}<br />
<b>Fatal error</b>: Call to a member function bindValue() on boolean in <b>phar:///FOO/engine/Shopware/Plugins/Local/Frontend/jtlconnector/connector.phar/vendor/jtl/connector/src/jtl/Connector/Core/Session/Handler.php</b> on line <b>201</b><br />

Response: {"result":null,"error":{"code":4,"message":"syntax error, unexpected ')'","data":"Shutdown! File: \/FOO\/engine\/Shopware\/Plugins\/Local\/Frontend\/jtlconnector\/plugins\/izzle\/demo\/bootstrap.php - Line: 16"},"jtlrpc":"2.0","id":"unknown"}<br />
<b>Fatal error</b>: Call to a member function bindValue() on boolean in <b>phar:///FOO/engine/Shopware/Plugins/Local/Frontend/jtlconnector/connector.phar/vendor/jtl/connector/src/jtl/Connector/Core/Session/Handler.php</b> on line <b>201</b><br />

"
 

leonidas

Aktives Mitglied
24. Januar 2017
25
0
Nein, habe es extra entpackt und die alte bearbeitete Version gelöscht.

PHP:
<?php
namespace izzle\demo;

use \jtl\Connector\Plugin\IPlugin;
use \Symfony\Component\EventDispatcher\EventDispatcher;
use \izzle\demo\listener\ProductListener;
use \jtl\Connector\Event\Product\ProductAfterPushEvent;

class Bootstrap implements IPlugin
{
    public function registerListener(EventDispatcher $dispatcher)
    {
        $dispatcher->addListener(ProductAfterPushEvent::EVENT_NAME, [
            new ProductListener(),
            'onProductAfterPushAction'
        ]));
    }
}
 

Daniel B.

Moderator
17. Juni 2009
1.430
40
Da ist eine Klammer zu viel (warum auch immer).

Bei mir sieht es so aus:

PHP:
<?php
namespace Izzle\Demo;

use jtl\Connector\Plugin\IPlugin;
use Symfony\Component\EventDispatcher\EventDispatcher;
use Izzle\Demo\listener\ProductListener;
use jtl\Connector\Event\Product\ProductAfterPushEvent;

class Bootstrap implements IPlugin
{
    public function registerListener(EventDispatcher $dispatcher)
    {
        $dispatcher->addListener(ProductAfterPushEvent::EVENT_NAME, [
            new ProductListener(),
            'onProductAfterPushAction'
        ]);
    }
}
 
  • Gefällt mir
Reaktionen: leonidas

Ähnliche Themen