Neuigkeiten
  • Die modified eCommerce Shopsoftware ist kostenlos, aber nicht umsonst.
    Spenden
  • Damit wir die modified eCommerce Shopsoftware auch zukünftig kostenlos anbieten können:
    Spenden
  • Thema: Zugriff auf Standard-Steuersatz ?

    Simon

    • Viel Schreiber
    • Beiträge: 1.369
    Zugriff auf Standard-Steuersatz ?
    am: 24. Oktober 2012, 19:48:33

    Hallo,

    mit welcher Variable oder Konstante kann man Zugriff auf den Standard-Steuersatz bekommen, wie es in der Admin unter Steuerstätze (19%) eingegeben wurde ?
    Ich möchte den Steuersatz nicht hardcoden.

     :thx:

    Linkback: https://www.modified-shop.org/forum/index.php?topic=22966.0

    hendrik

    • Experte
    • Beiträge: 2.038
    Re: Zugriff auf Standard-Steuersatz ?
    Antwort #1 am: 24. Oktober 2012, 20:17:42

    Simon

    • Viel Schreiber
    • Beiträge: 1.369
    Re: Zugriff auf Standard-Steuersatz ?
    Antwort #2 am: 24. Oktober 2012, 20:46:03

    Hallo Hendrik,

    danke dir.

    Wer es braucht, so geht es für Standard-Steuersatz (19%):
    Code: PHP  [Auswählen]
    echo xtc_get_tax_rate(1, -1, -1);
     

    7% wäre
    Code: PHP  [Auswählen]
    echo xtc_get_tax_rate(2, -1, -1);
     

    hendrik

    • Experte
    • Beiträge: 2.038
    Re: Zugriff auf Standard-Steuersatz ?
    Antwort #3 am: 24. Oktober 2012, 22:11:57
    Artikel können unterschiedlich besteuert sein. Du mußt die Steuer-ID der jew. Artikel ermitteln und der Funktion übergeben.

    Was ist wenn der Kunde Steuersätze (Konfig. Steuersätze) löscht und neu einträgt? Dann stimmen die IDs nicht mehr. Hier codest du wieder hart. Dann kannste auch beinahe "7" und "19" in den Code schreiben.

    Wenn du die Steuer für eine Bestellung ermitteln willst (Warenkorb, Bestellung) mußt du der Reihe nach die Artikel durcharbeiten in einer Schleife. tax-ID der Artilels ermitteln, Steuersatz ermitteln, Steuer errechnen, aufsummieren. Alles andere ist nicht wetterfest.

    Gruß
    Hen

    Simon

    • Viel Schreiber
    • Beiträge: 1.369
    Re: Zugriff auf Standard-Steuersatz ?
    Antwort #4 am: 24. Oktober 2012, 22:35:15
    Hallo Hendrik,

    bei mir geht es um eine Lösung zu diesem Thema:
    http://www.modified-shop.org/forum/index.php?topic=12249

    um einen Absatz wie diesen zu bekommen:
    Zitat
    Ab 75 Euro Warenwert berechnen wir innerhalb von Deutschland keine Versandkosten.

    Bei Nettokunden (Firmen) sind es 75 Euro netto zzgl. MwSt.
    Bei Bruttokunden (Privatleute) sind es 89,25 Euro brutto inkl. MwSt.

    Für diesen Einsatz bräuchte ich den Steuersatz, um die Brutto Versandfreigrenze für die Anzeige zu errechnen.
    Das Problem ist, dass der Bruttokunden sonst bei 50 Euro brutto schon versandfrei bekommt und der Nettokunde erst ab 50 Euro netto.
    Das Modul "ot_shipping" kennt keinen Steuersatz.
    Habe das auch hier noch einmal beschrieben:
    http://www.modified-shop.org/forum/index.php?topic=22948.0

    Ich weiß mir keine andere Lösung.

    hendrik

    • Experte
    • Beiträge: 2.038
    Re: Zugriff auf Standard-Steuersatz ?
    Antwort #5 am: 25. Oktober 2012, 07:12:58
    Vielleicht hilft dir dieser Schnipsel. Hatte dieses Problem neulich bei einem Rabattmodul (ot_....). Ich mußte den Nettowert ermitteln. Hab dir die Stelle herauskopiert.

    Code: PHP  [Auswählen]
        global $order, $xtPrice;  

        // Netto ermitteln
        if( $_SESSION['customers_status']['customers_status_show_price_tax'] == '1' ) {   // privat
          $total_netto = $order->info['subtotal'] - $order->info['tax'];
          $total_brutto = $order->info['subtotal'];
        } else {                                                                          // Gewerbe
          $total_netto = $order->info['subtotal'];
          $total_brutto = $total_netto+$order->info['tax'];
        }

        $total_netto /= $order->info['currency_value'];  // auf hauptwährung umrechnen
        $total_brutto /= $order->info['currency_value'];  // auf hauptwährung umrechnen
     

    Gruß
    Hen

    Simon

    • Viel Schreiber
    • Beiträge: 1.369
    Re: Zugriff auf Standard-Steuersatz ?
    Antwort #6 am: 25. Oktober 2012, 07:53:17
    Guten Morgen,

    vielen Dank für das Schnipsel.

    So ähnlich hatte ich es vorher. Von der Brutto-Zwischensumme die Steuer abziehen.

    Das Problem hier war, dass bei der Zwischensumme bereits auch je nach Fall ein Rabatt abgezogen sein kann. Bei Brutto-Kunden ist die Zwischensumme brutto, bei Netto-Kunden ist die Zwischensumme netto.
    Ich hätte also 2x eine If-Abfrage gebraucht, 1x Kunden-Typ, 1x ob mit Rabatt (dann Rabatt abziehen) oder ohne.

    Discount steht mit
    Code: PHP  [Auswählen]
    $discount
    zur Verfügung.

    Da ich nicht wusste, welche Sonderfälle es noch gibt, hatte ich mir diese Funktion in includes\classes\shopping_cart.php gebastelt.
    Damit habe ich immer den reinen Netto-Warenwert ohne weitere Berechnungen zur Bestimmung ob versandfrei oder nicht:

    Code: PHP  [Auswählen]
          // BOF - Netto-Warenwert berechnen
          function calculate_netto() {
            global $xtPrice;
            $this->total_netto = 0;
            $this->weight = 0;
            $this->tax = array ();
            if (!is_array($this->contents)) {
              return 0;
            }
         
            reset($this->contents);
            while (list ($products_id,) = each($this->contents)) {
              $qty = $this->contents[$products_id]['qty'];
         
              // products price
              $product_query = xtc_db_query("select products_id, products_price, products_discount_allowed, products_tax_class_id, products_weight from ".TABLE_PRODUCTS." where products_id='".xtc_get_prid($products_id)."'");
              if ($product = xtc_db_fetch_array($product_query)) {
                $products_price = $xtPrice->xtcGetPrice($product['products_id'], $format = false, $qty, 0, $product['products_price']);
                $this->total_netto += $products_price * $qty;
                $this->weight += ($qty * $product['products_weight']);
         
                // attributes price
                $attribute_price = 0;
                if (isset ($this->contents[$products_id]['attributes'])) {
                  reset($this->contents[$products_id]['attributes']);
                  while (list ($option, $value) = each($this->contents[$products_id]['attributes'])) {
                    $values = $xtPrice->xtcGetOptionPrice($product['products_id'], $option, $value);
                    $this->weight += $values['weight'] * $qty;
                    $this->total += $values['price'] * $qty;
                    $attribute_price += $values['price'];
                  }
                }
              }
            }
          }
          // EOF - Netto-Warenwert berechnen
     

    Das Brutto-Limit für die Anzeige bei Bruttokunden, ab dem es versandfrei gibt, habe ich dann so errechnet. (Modul ot_shipping)
    Code: PHP  [Auswählen]
    $tax_standard = xtc_get_tax_rate(1, -1, -1);  // Standard-Steuersatz (19%)
    $free_shipping_limit = $xtPrice->xtcFormat(MODULE_ORDER_TOTAL_SHIPPING_FREE_SHIPPING_OVER, true) * (1 + ($tax_standard / 100));
     

    Die reinen Logikprüfungen ob versandfrei erreicht ist, oder nicht mache ich mit dem Netto-Warenwert.

    Insgesamt (abgesehen von Language-Files) sieht das momentan so in der order_details_cart.php aus. Ganz glücklich bin ich damit aber noch nicht. Funktionieren würde es, aber ob gut gelöst, bin ich noch unsicher. Basis ist dieses Modul.
    Der Code kann noch unaufgeräumt sein, ist aus meiner Baustelle.

    Code: PHP  [Auswählen]
        foreach ($quotes AS $quote) {
          if ($quote['id'] != 'freeamount') {
            $total_netto = $_SESSION['cart']->show_total_netto();
            // Nettokunden
            if ($_SESSION['customers_status']['customers_status_show_price_tax'] == 0) {
              $print_tax = $xtPrice->xtcFormat(xtc_add_tax($quote['methods'][0]['cost'], isset ($quote[$i]['tax']) ? $quote[$i]['tax'] : 0), true, 0, true);
              $print_tax2 = TAX_NO_TAX . TAX_SHORT_DISPLAY;
              $free_shipping_limit = $xtPrice->xtcFormat(MODULE_ORDER_TOTAL_SHIPPING_FREE_SHIPPING_OVER, true);
              $free_shipping_needed = $free_shipping_limit - $total_netto;
            } else {  // Bruttokunden
                $print_tax = $xtPrice->xtcFormat(((isset ($quote['tax']) && $quote['tax']> 0) ? $xtPrice->xtcAddTax($quote['methods'][0]['cost'],$quote['tax']) :(!empty ($quote['methods'][0]['cost']) ? $quote['methods'][0]['cost'] : '0')), true);
                $print_tax2 = TAX_ADD_TAX . TAX_SHORT_DISPLAY;
                $tax_standard = xtc_get_tax_rate(1, -1, -1);  // Standard-Steuersatz (19%)
                $free_shipping_limit = $xtPrice->xtcFormat(MODULE_ORDER_TOTAL_SHIPPING_FREE_SHIPPING_OVER, true) * (1 + ($tax_standard / 100));
                $free_shipping_needed = $free_shipping_limit - $total - $discount;
            }
            $shipping_content[$i] = array('NAME' => $quote['module'] . '(' . $quote['methods'][0]['title'] . ')',
                                          'VALUE' => $print_tax,
                                          'TAX' => $print_tax2
                                         );
            $i++;
           
            $free_shipping_note = '<strong>' . FREE_SHIPPING_DESCRIPTION . '</strong>';
            if ($total_netto < $free_shipping_limit) {
              $module_smarty->assign('FREE_SHIPPING_INFO', sprintf($free_shipping_note, $xtPrice->xtcFormat($free_shipping_limit, true, 0, true) . ' ' . $print_tax2) . '<br />' . FREE_SHIPPING_NEEDED_1 . $xtPrice->xtcFormat($free_shipping_needed, true, 0, true) . ' ' . $print_tax2 . FREE_SHIPPING_NEEDED_2);
            } else {
                $module_smarty->assign('FREE_SHIPPING_INFO', FREE_SHIPPING_NOTE);
            }
          }
        }
     

    P.s.

    War übrigens keine Absicht, dass mehrere Themen mit teilweise Überschneidungen daraus wurden. War nur auf der Suche nach einzelnen Bausteinen, alles andere hat sich entwickelt.

    hendrik

    • Experte
    • Beiträge: 2.038
    Re: Zugriff auf Standard-Steuersatz ?
    Antwort #7 am: 25. Oktober 2012, 11:16:27
    Ein Fehler springt mir ins Auge.

    Code: PHP  [Auswählen]
    $free_shipping_limit = $xtPrice->xtcFormat(MODULE_ORDER_TOTAL_SHIPPING_FREE_SHIPPING_OVER, true);

    Rechnen mit, für die Ausgabe/Anzeige, formatierten Werten. Parameter 2 (true) liefert eine Zeichenkette zurück. z.B. "123,45 EUR". Nicht gut. Wenn dann Parameter 2 =false. Aber in deinem Fall reicht ein cast.
    Code: PHP  [Auswählen]
    $free_shipping_limit = (real)MODULE_ORDER_TOTAL_SHIPPING_FREE_SHIPPING_OVER;

    Gruß
    Hen

    Simon

    • Viel Schreiber
    • Beiträge: 1.369
    Re: Zugriff auf Standard-Steuersatz ?
    Antwort #8 am: 26. Oktober 2012, 00:15:44

    Hallo Hendrik,

    vielen Dank für den Tipp.

    Einerseits nutzte ich xtcPrice zum formatieren der Preise, andererseits habe ich dann nicht daran gedacht, dass das rechnen mit Zeichenketten nicht optimal ist. Funktionierte aber komischerweise.
    Ist jetzt trotzdem korrigiert.

    hendrik

    • Experte
    • Beiträge: 2.038
    Re: Zugriff auf Standard-Steuersatz ?
    Antwort #9 am: 26. Oktober 2012, 08:52:56
    Funktionierte aber komischerweise.

    Weil php bei seiner Typumwandlung sehr kulant ist. "100,00 EUR" wird korrekt umgewandelt. Probier mal "11,99 EUR" oder "1.200,00 EUR".

    Gruß
    Hen

    Simon

    • Viel Schreiber
    • Beiträge: 1.369
    Re: Zugriff auf Standard-Steuersatz ?
    Antwort #10 am: 26. Oktober 2012, 09:51:55

    Einen Fehler habe ich noch gefunden, auf den ich absolut nicht komme:
    Code: PHP  [Auswählen]
            if ($total_netto < $free_shipping_limit) {
              $module_smarty->assign('FREE_SHIPPING_INFO', sprintf($free_shipping_note, $xtPrice->xtcFormat($free_shipping_limit, true, 0, true) . ' ' . $print_tax2) . '<br />' . FREE_SHIPPING_NEEDED_1 . $xtPrice->xtcFormat($free_shipping_needed, true, 0, true) . ' ' . $print_tax2 . FREE_SHIPPING_NEEDED_2);
            } else {
                $module_smarty->assign('FREE_SHIPPING_INFO', FREE_SHIPPING_NOTE);
            }
     

    Wenn das Versandfrei-Limit überstiegen wird, also versandfrei möglich ist, dann wird die Meldung "Bestellung versandfrei" leider nie angezeigt.

    Das wäre dieser Code:
    Code: PHP  [Auswählen]
                $module_smarty->assign('FREE_SHIPPING_INFO', FREE_SHIPPING_NOTE);
     

    Wenn ich die Zeile in das if vom if / else kopiere wird es angezeigt solange versandfrei nicht erreicht ist, also die Codezeile selbst hat keinen Fehler.

    Was ich eingrenzen konnte ist nur, dass sobald versandfrei erreicht wurde geben diese beiden Variablen keinen Inhalt mehr aus. Verstehe ich nicht.
    Code: PHP  [Auswählen]
            echo $total_netto . '<br />';
            echo $free_shipping_limit;
     

    Kannst du dir vorstellen woran das liegt ?
    Trade Republic - Provisionsfrei Aktien handeln
    6 Antworten
    3054 Aufrufe
    27. Februar 2011, 13:22:04 von Da Sandro
    2 Antworten
    2818 Aufrufe
    13. Dezember 2012, 07:34:30 von franky
    2 Antworten
    2782 Aufrufe
    01. September 2012, 00:15:47 von Tȟatȟáŋka Íyotake
    7 Antworten
    4359 Aufrufe
    27. November 2010, 14:17:44 von Tomcraft