REST API - Update eines Preises (Nur eine Kundengruppe ohne die anderen zu überschreiben)

Also ich habe nun schon einige Googleanfragen gestellt, viele Beiträge auch hier im Forum durch gelesen aber es war bis lang noch nicht die richtige Information dabei!
Ich versuche mittels der REST-API einen Preis in meinem Shop zu aktualisieren. 

$art = "SW10176-1";

$param = array(
            'mainDetail'=> array(
                'prices' => array(
                    array(
                        'customerGroupKey' => 'EK',
                        'price' => 100.00,
                    )
                )
            )
        );

$rest->put("articles/{$art}?useNumberAsId=true", $param);

das ganze funktioniert auch, bis auf einen kleinen Fehler.
Bei jedem Update werden alle Preise der anderen Kundengruppen überschrieben… also Händlergruppe 1, Händlergruppe 2, Amazonkunden usw.

Meine Frage hier ist, wie kann ich den Preis aktualisieren ohne die Preise für die anderen Gruppen mit zu geben?

Probleme:
Ich kenne die anderen Preise der unterschiedlichen Kundengruppen während des Updates nicht und diese sollen wie gehabt bleiben!
 

 

Auch wenn es nicht die schönste Lösung ist: Du könntest vorher die Preise per REST-API abholen, dann selbst die Preise überschreiben, die du ändern möchtest und das ganze dann senden.

Viele Grüße
Marcus

An das habe ich auch schon gedacht und das bin ich auch grade am programmieren. Jedoch kann ich mir beim besten willen nicht vorstellen das dieser Effekt so gewollt ist und hoffe dennoch auf ein möglichkeit das mit einem Befehl bzw. Paramter oder auch Korrektur im Source zu unterbinden.

Hi,

dafür gibt es den Merge-Modus:
 http://community.shopware.com/Shopware-4-REST-API-verwenden_detail_989.html#API_Merge_Modus_.28Zusammenf.FChren.29
Dieser Parameter sollte also den gewnünschten Effekt bringen:

 '\_\_options\_prices' =\> array('replace' =\> true),

Gruß  Heiner

Erst mal Danke Hainer :slight_smile:

Wie soll das dann in meinem Beispiel aussehen ? Laut Doku so:

$param = array( 
                'mainDetail'=> array(
                    '__options_prices' => array('replace' => true),
                    'prices' => array(
                        array(
                            'customerGroupKey' => 'EK',
                            'price' => 99.00,
                        )
                    )
                )
        );

weil so hat es keinen effekt…

Wenn ich es so machen und EK update dann werden beide Preise auf den angegebenen Preis gesetzt.

Wenn ich das spiel wiedehole aber diesmal mit H dann wird EK auf 0 und H auf den angegeben Preis gesetzt.

Den Optionswert auf FALSE zu setzen bewirkt zwar das der andere Preis erhalten bleibt aber der zu aktualisierende Preis wird nicht aktualisiert sondern nur dem Aktuellen hinzugefügt…

Muss man das irgendwie vorher löschen oder…??? Bin etwas verwirrt. Ich denke auch ein “ausführliche” Antwort kann sicherlich dem einen oder anderen weiter helfen da ich mir nicht vorstellen kann der erste bzw. einzigste mit diesem Problem zu sein :slight_smile:

Ich danke schon mal im Voraus. 

 

 

Um mir vorrübergehen zu helfen habe ich jetzt vorher ein get gesetzt welches mir alle Artikelpreise bzw. das Array PRICES holt. Dieses wird durchlaufen und an entsprechner Stelle wird der Preis geändert. Hier tritt aber ein neues Problem auf. Pseudopreise kommen immer Netto und hier muss man erst schauen wie die MWST des Artikels ist und diese dann manuell drauf rechnen damit der Preis nicht verfälscht wird. Leider gibt es offensichtlich keine Option sich die Pseudopreise auch Brutto anzeigen zu lassen. Falls doch wäre ich über einen Link zu einer Doku über verfügbare __options_xxx  sehr dankbar :slight_smile:

Falls jemand ein Sample hierzu braucht kann er mich einfach anschreiben oder hier was im Forum schreiben dann poste ich was davon.

Aber die eigentliche Frage ist dennoch nicht gelöst. Jedoch habe ich grade ein schwerwigenderes Problem.

@Dwza schrieb:

$param = array( 'mainDetail'=> array( '__options_prices' => array('replace' => true), 'prices' => array( array( 'customerGroupKey' => 'EK', 'price' => 99.00, ) ) ) );

Ist ungetestet aber ich gehe davon aus, dass __options_prices im array eine Ebene hoch muss. Also eher so:

$param = array( ‚__options_prices‘ => array(‚replace‘ => true), ‚mainDetail‘=> array(‚prices‘ => array( array( ‚customerGroupKey‘ => ‚EK‘, ‚price‘ => 99.00, ) ) ) ); 

 

Edit: Ich sehe gerade, dass dein Versuch ja eigentlich genau so auch dokumentiert ist. Also wird mein Tipp wohl nichts anderes machen.

Hab ja geschrieben das es laut Doku so beschrieben ist… es funktionier an sich auch… nur nicht wie gewollt.
Der effekt ist das er einen 2. Preis anlegt und nicht den eigentlichen Preis aktualisiert.
Der 2. Preis wird aber an sich nicht berücksichtigt. Bzw. hat keinen Vorrang.

Und wenn ich überlege das ich mein Script 6 mal am Tag aufrufe dann können im Monat sehr viele Preise zusammen kommen ^^