# Preis per Skript anpassen

**URL:** <https://forum.oxid-esales.com/t/preis-per-skript-anpassen/98230>\
**Category:** Deutsches Forum\
**Tags:** module, development\
**Created:** [January 21, 2022, 2:01pm UTC](https://forum.oxid-esales.com/t/preis-per-skript-anpassen/98230 "2022-01-21T14:01:14Z")\
**Posts on this page:** 14\
**Page:** 1

<div class="post-metadata">

**Author:** ![Thoni](https://forum.oxid-esales.com/letter_avatar_proxy/v4/letter/t/ad7895/32.png) [@Thoni](https://forum.oxid-esales.com/u/Thoni)\
**Post date:** [January 21, 2022, 2:01pm UTC](https://forum.oxid-esales.com/t/preis-per-skript-anpassen/98230/1 "2022-01-21T14:01:14Z")

</div>

Hallo,

für eine bestimmte Benutzergruppe muss der Preis angepasst werden.  
PreisA, PreisB, … sollen dafür nicht genutzt werden.

An welcher Stelle wird der Preis des Artikels gesetzt?  
In der Klasse oxarticle bringen getUnitPrice() und setPrice() keinen Erfolg.

Danke Thoni

---

<div class="post-metadata">

**Author:** ![indianer3c](https://forum.oxid-esales.com/user_avatar/forum.oxid-esales.com/indianer3c/32/4325_2.png) [@indianer3c](https://forum.oxid-esales.com/u/indianer3c)\
**Post date:** [January 21, 2022, 2:30pm UTC](https://forum.oxid-esales.com/t/preis-per-skript-anpassen/98230/2 "2022-01-21T14:30:54Z")

</div>

Moin 🙂

> [@Thoni](#):
>
> An welcher Stelle wird der Preis des Artikels gesetzt?

das einfachste ist in der Datenbank der Artikel unter `oxarticles` Tabelle.

Welche Preisinfos Du im Detail über ein Skript anpassen willst musst Dir erarbeiten über Abgleich des Datenbankdesigns und wie die Preiseinstellungen im Admin und Frontend dann dargestellt werden. Also welche Daten Du über Dein Skript alles in die Datenbank einpflegen lässt bzw. aktualisierst.

Viele Grüße,  
Tim

**Update:** Ansonsten lohnt immer ein Blick in die Dokumentation z.B. unter [Interacting with the database — OXID eShop developer documentation 7.0 documentation](https://docs.oxid-esales.com/developer/en/latest/development/modules_components_themes/module/using_database.html) oder wenn Du es mit einem ERP System oder WaWi zu tun hast dann kannst über Symfony einen eigenen Service integrieren [Services — OXID eShop developer documentation 7.0 documentation](https://docs.oxid-esales.com/developer/en/latest/development/modules_components_themes/module/module_services.html)

---

<div class="post-metadata">

**Author:** ![Thoni](https://forum.oxid-esales.com/letter_avatar_proxy/v4/letter/t/ad7895/32.png) [@Thoni](https://forum.oxid-esales.com/u/Thoni)\
**Post date:** [January 21, 2022, 2:58pm UTC](https://forum.oxid-esales.com/t/preis-per-skript-anpassen/98230/3 "2022-01-21T14:58:21Z")

</div>

> [@indianer3c](#):
>
> das einfachste ist in der Datenbank der Artikel unter `oxarticles` Tabelle

Moin,

da stehen doch auch nur PreisA … drin.

Es ist ein Brutto-Shop.  
B2B soll es ein Netto-Shop (Ausland) sein.  
PreisA ist der B2B-Preis.  
Für den ausländischen B2B- Kunde muss ich den Preis mit einem Skript anpassen.  
PreisB und PreisC sind vergeben.

Für einen Tipp für die Stelle in der Doku wäre ich dankbar, Tim.

---

<div class="post-metadata">

**Author:** ![indianer3c](https://forum.oxid-esales.com/user_avatar/forum.oxid-esales.com/indianer3c/32/4325_2.png) [@indianer3c](https://forum.oxid-esales.com/u/indianer3c)\
**Post date:** [January 21, 2022, 3:53pm UTC](https://forum.oxid-esales.com/t/preis-per-skript-anpassen/98230/4 "2022-01-21T15:53:10Z")

</div>

> [@Thoni](#):
>
> Es ist ein Brutto-Shop.  
> B2B soll es ein Netto-Shop (Ausland) sein.

Für die Dateneingabe der Preise kann über die Grundeinstellungen unter Mehrwertsteuer die Einstellungen prüfen:

 ![Bildschirmfoto von 2022-01-21 16.36.40](https://forum.oxid-esales.com/uploads/default/original/2X/7/74dd4255db49fd4623e1f928f5ab9f92f6f825a4.png)

Dies wäre jetzt Beispiel für Shop in Deutschland mit 19% Standard-MwSt. Satz für alle Artikel, Artikelpreise werden beim Artikel **netto** gepflegt und es ist die Einstellung Nettopreise im Frontend gewählt, weil es sich um einen B2B Shop handelt.

Wenn es sich bei Deinem Shop um einen Verbraucher-Shop (B2C) handelt und Auslandskunden die eine Umsatzsteuer-Identnummer hinterlegt haben (Unternehmen) wird über die Länder Konfiguration mit gewählter Einstellung **Mehrwertsteuerfrei falls Umsatzsteuer-Identnummer bekannt** beim Land z.B. Frankreich im Frontend im Warenkorb dann Netto-Preise angezeigt:

 ![Bildschirmfoto von 2022-01-21 16.43.56](https://forum.oxid-esales.com/uploads/default/original/2X/c/c9b95b4537d183d0ad43cffddc5a1e706c9a7404.png)

> [@Thoni](#):
>
> PreisA ist der B2B-Preis.  
> Für den ausländischen B2B- Kunde muss ich den Preis mit einem Skript anpassen.

Dies heißt ja im Umkehrschluss, je nach Grundeinstellung und Länder Konfiguration musst in das Feld für den PreisA der Tabelle `oxarticles` in der Spalte `OXPRICEA` über Dein Skript den Netto- oder Brutto-Preis einpflegen.

Der Fall Netto-Preis wäre bei der Umsetzung/Datenpflege am Einfachsten, weil sich die Mehrwertsteuersätze je nach Land unterscheiden.

Dann wäre ein Code-Beispiel relativ einfach:

```auto
$product = oxNew(\OxidEsales\Eshop\Application\Model\Article::class);
$product->load($oxid);
$product->oxarticles__oxpricea = new \OxidEsales\Eshop\Core\Field ($nettoprice);
$product->save();

```

Du bräuchtest für die Datenpflege die OXID (`$oxid`) welche der Artikel besitzt und die Info wie der Nettopreis (`$nettoprice`) sein sollte.

Aber man merkt bereits, dass dort viel Gedankenarbeit von Nöten ist um die jeweiligen Umgebungsvariablen in Form von getroffenen Grundeinstellungen, Shop Varianten CE, PE oder EE und welche bisherigen weiteren Anpassungen/Logiken bereits shopspezifisch umgesetzt wurden sind.

Viele Grüße,  
Tim

---

<div class="post-metadata">

**Author:** ![Thoni](https://forum.oxid-esales.com/letter_avatar_proxy/v4/letter/t/ad7895/32.png) [@Thoni](https://forum.oxid-esales.com/u/Thoni)\
**Post date:** [January 21, 2022, 5:26pm UTC](https://forum.oxid-esales.com/t/preis-per-skript-anpassen/98230/5 "2022-01-21T17:26:11Z")

</div>

> [@indianer3c](#):
>
> Für die Dateneingabe der Preise kann über

Es wurden **überall Bruttopreise** eingegeben.  
Die unterschiedlichen Umsatzsteuern in den Ländern funktionieren auch bereits.

Diese Fälle gibt es:

B2C in Deutschland: kein Problem  
B2C im Ausland: kein Problem da alle B2C **denselben Bruttopreis** haben.

B2B in Deutschland: kein Problem über PreisA  
B2B im Ausland: benötigt **denselben Nettopreis** , wie in Deutschland

Mit Standardeinstellungen ist das nicht zu lösen, soweit ich weiß.

Meine Versuche, das Article-Objekt anzupassen, sind gescheitert.  
Ich versuche es jetzt mal beim Price-Object.

Gruß Thoni

---

<div class="post-metadata">

**Author:** ![patchwork.de](https://forum.oxid-esales.com/user_avatar/forum.oxid-esales.com/patchwork.de/32/324_2.png) [@patchwork.de](https://forum.oxid-esales.com/u/patchwork.de)\
**Post date:** [January 21, 2022, 5:32pm UTC](https://forum.oxid-esales.com/t/preis-per-skript-anpassen/98230/6 "2022-01-21T17:32:54Z")

</div>

> [@Thoni](#):
>
> B2C im Ausland: kein Problem da alle B2C **denselben Bruttopreis** haben.

gilt nur innerhalb der EU - ausserhalb der EU → Nettopreis

---

<div class="post-metadata">

**Author:** ![Thoni](https://forum.oxid-esales.com/letter_avatar_proxy/v4/letter/t/ad7895/32.png) [@Thoni](https://forum.oxid-esales.com/u/Thoni)\
**Post date:** [January 21, 2022, 5:35pm UTC](https://forum.oxid-esales.com/t/preis-per-skript-anpassen/98230/7 "2022-01-21T17:35:13Z")

</div>

> [@patchwork.de](#):
>
> gilt nur innerhalb der EU - ausserhalb der EU → Nettopreis

Danke für den Hinweis.

Es handelt sich nur um die EU.

---

<div class="post-metadata">

**Author:** ![Thoni](https://forum.oxid-esales.com/letter_avatar_proxy/v4/letter/t/ad7895/32.png) [@Thoni](https://forum.oxid-esales.com/u/Thoni)\
**Post date:** [January 21, 2022, 5:59pm UTC](https://forum.oxid-esales.com/t/preis-per-skript-anpassen/98230/8 "2022-01-21T17:59:05Z")

</div>

> [@Thoni](#):
>
> Ich versuche es jetzt mal beim Price-Object.

Das klappt auch nicht, weil ich dort nur den Bruttopreis habe und nicht den Steuersatz des Artikels um den Netto-Preis zu berechnen.

---

<div class="post-metadata">

**Author:** ![indianer3c](https://forum.oxid-esales.com/user_avatar/forum.oxid-esales.com/indianer3c/32/4325_2.png) [@indianer3c](https://forum.oxid-esales.com/u/indianer3c)\
**Post date:** [January 21, 2022, 8:57pm UTC](https://forum.oxid-esales.com/t/preis-per-skript-anpassen/98230/9 "2022-01-21T20:57:46Z")

</div>

> [@Thoni](#):
>
> Das klappt auch nicht, weil ich dort nur den Bruttopreis habe und nicht den Steuersatz des Artikels um den Netto-Preis zu berechnen.

Kannst Du nicht einfach vom Price Object den Netto-Preis holen über den Artikel?

```auto
$product = oxNew(\OxidEsales\Eshop\Application\Model\Article::class);
$product->load($oxid);
$product->getPrice()->getNettoPrice();

```

Das Preis Object berücksichtigt bei der Rückgabe des Netto-Preises in der Regel bereits die gewählte Grundeinstellung ob Brutto- oder Netto-Preise gepflegt.

Du kannst Dir das Verhalten von Simple Variant Klasse abgucken wo geprüft wird ob ein ABC Preis vorliegt, dies wäre ggfs. noch ein Ansatz:

```auto
$price = oxNew(\OxidEsales\Eshop\Core\Price::class);
$price->setPrice($bruttoprice, $vat);
$price->getPrice()->getNettoPrice();

```

Ich sehe gerade der Hook `modifyGroupPrice()` für Deinen Fall sehr nützlich, wenn man annehmen darf das B2B aus dem Ausland in der Kundengruppe für A-Preise und er darüber den Brutto-Preis im Frontend erhalten sollte.  
Im Hook könntest prüfen über `$this->getArticleUser()` ob Du das User Object hast und ob beim User Object die Umsatzsteuer-Identifikationsnummer hinterlegt und könntest den übergebenen Preis wie oben beschrieben neu nach Netto-Preis berechnen lassen.

**Update:** Der Steuersatz sollte doch eigentlich mit dem Land verknüpft sein der Rechnungsadresse des Kundens und nicht mit dem Artikel außer Du arbeitest mit speziellen MwSt. Sätzen in Kategorien bzw. Artikeln, was die Sache weiter verkomplizieren würde 😉

---

<div class="post-metadata">

**Author:** ![rubbercut](https://forum.oxid-esales.com/user_avatar/forum.oxid-esales.com/rubbercut/32/3520_2.png) [@rubbercut](https://forum.oxid-esales.com/u/rubbercut)\
**Post date:** [January 22, 2022, 10:27am UTC](https://forum.oxid-esales.com/t/preis-per-skript-anpassen/98230/10 "2022-01-22T10:27:12Z")

</div>

> [@Thoni](#):
>
> An welcher Stelle wird der Preis des Artikels gesetzt?

Wichtig für dich ist der Warenkorb. Schau dazu in basketitem::getArticle(); Hier kannst den Preis anpassen und vorher prüfen, ob der Kunde in der Gruppe ist:

```auto
public function getArticle($blCheckProduct = false, $sProductId = null, $blDisableLazyLoading = false)

    {

                      if( USER IN GROUP) // Abfrage erstellen

                        { $newprice = $this->newPrice( $data ); //INT

                                   $this->_oArticle->oxarticles__oxprice = new Field($newprice );

                        }

                        return parent::getArticle($blCheckProduct, $sProductId, $blDisableLazyLoading);

    }
;

```

Brutto-Netto: In Articles hast immer \_getPriceObject(); und \_preparePrice(…); zur Verfügung. Damit kannst Brutto oder Netto entnehmen.

---

<div class="post-metadata">

**Author:** ![Thoni](https://forum.oxid-esales.com/letter_avatar_proxy/v4/letter/t/ad7895/32.png) [@Thoni](https://forum.oxid-esales.com/u/Thoni)\
**Post date:** [January 24, 2022, 8:34am UTC](https://forum.oxid-esales.com/t/preis-per-skript-anpassen/98230/11 "2022-01-24T08:34:42Z")

</div>

> [@rubbercut](#):
>
> Schau dazu in basketitem::getArticle();

Ist basketitem nicht schon zu spät?  
Den Preis benötige ich auch in der Kategorie und auf der Detailseite.

---

<div class="post-metadata">

**Author:** ![rubbercut](https://forum.oxid-esales.com/user_avatar/forum.oxid-esales.com/rubbercut/32/3520_2.png) [@rubbercut](https://forum.oxid-esales.com/u/rubbercut)\
**Post date:** [January 24, 2022, 9:47am UTC](https://forum.oxid-esales.com/t/preis-per-skript-anpassen/98230/12 "2022-01-24T09:47:35Z")

</div>

Achso, ich hatte gedacht, dass der Preis im Warenkorb per Skript angepasst wird. Dann würde ich über

`protected function _getGroupPrice()`

gehen. Hier kannst eine eigene Methodik zu oxpriceA,B, und C anlegen,

---

<div class="post-metadata">

**Author:** ![Thoni](https://forum.oxid-esales.com/letter_avatar_proxy/v4/letter/t/ad7895/32.png) [@Thoni](https://forum.oxid-esales.com/u/Thoni)\
**Post date:** [January 24, 2022, 12:10pm UTC](https://forum.oxid-esales.com/t/preis-per-skript-anpassen/98230/13 "2022-01-24T12:10:55Z")

</div>

> [@rubbercut](#):
>
> protected function \_getGroupPrice()

Super,

das war genau die Stelle.

Danke

---

<div class="post-metadata">

**Author:** ![system](https://forum.oxid-esales.com/user_avatar/forum.oxid-esales.com/system/32/4245_2.png) [@system](https://forum.oxid-esales.com/u/system)\
**Post date:** [January 24, 2023, 12:11pm UTC](https://forum.oxid-esales.com/t/preis-per-skript-anpassen/98230/14 "2023-01-24T12:11:06Z")

</div>

This topic was automatically closed 365 days after the last reply. New replies are no longer allowed.
