Ank?ndigung

Einklappen
Keine Ank?ndigung bisher.

Nettopreis in Bestätigungsmail aufnehmen (xtc / gambio 2007)

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles l?schen
neue Beitr?ge

  • Nettopreis in Bestätigungsmail aufnehmen (xtc / gambio 2007)

    Hallo zusammen,

    ich scheitere hier gerade kläglich an der Aufgabe, die automatisierte Mail, die unser Gambio (Version 2007) verschickt, um eine einfache Nettopreisangabe zu ergänzen.

    Würde gerne via Smarty eine Variable PRODUCTS_PRICE_NETTO übergeben, auf die ich dann im Template unter order_mail.htm zugreifen kann.

    Wo muss man denn das "Assign" dafür unterbringen? Habe es zunächst in der shop/print_order.php probiert, später auch in der send_order.php. In beiden taucht der Array $order_data auf, auf den per Smarty zugegriffen wird.

    Habe mich dann an folgendem versucht:

    Code:
    $order_data[] = array ('PRODUCTS_MODEL' => $order_data_values['products_model'], 
    'PRODUCTS_NAME' => $order_data_values['products_name'], 
    'PRODUCTS_ATTRIBUTES' => $attributes_data, 
    'PRODUCTS_ATTRIBUTES_MODEL' => $attributes_model, 
    'PRODUCTS_PRICE' => $xtPrice->xtcFormat($order_data_values['final_price'], true),
    'PRODUCTS_SINGLE_PRICE' => $xtPrice->xtcFormat($order_data_values['final_price']/$order_data_values['products_quantity'], true),
    'PRODUCTS_PRICE_NETTO' => $order_data_values['products_price'], 
    'PRODUCTS_QTY' => $order_data_values['products_quantity']);
    Geht aber nicht, die Variable bleibt leer. Kann jemand helfen?

    Danke,
    Fuzzy
    Zuletzt ge?ndert von Elektrofuzzy; 07.04.2011, 16:02.

  • #2
    AW: Nettopreis in Bestätigungsmail aufnehmen (xtc / gambio 2007)

    Hallo
    Ich habe keine Gambio, in XT:C gibt es genau 3 Dateien, in der die $order_data[] gefüllt wird. Müsste auch für dich zutreffen.
    admin/print_order.php
    admin/print_packingslip.php
    includes/classes/order.php
    letztere ist für die Bestellungen des Kunden.
    Eine Spalte products_price (wie du es versuchtest) steht zwar mit den reichtigen Daten in der Tabelle der Datenbank, wird aber leider vorher nicht abgefragt.

    Es geht auch einfacher indem man der xtcFormat Funktion 0% Steuer übergibt (das ganze habe ich bei mir nicht getestet, bitte daher um Rückmeldung)
    Code:
    'PRODUCTS_NETTO_PRICE' => $xtPrice->xtcFormat($order_data_values['final_price'], true, 0) ,
    'PRODUCTS_NETTO_SINGLE_PRICE' => $xtPrice->xtcFormat($order_data_values['final_price']/$order_data_values['products_quantity'], true, 0),
    jay-ar

    Kommentar


    • #3
      AW: Nettopreis in Bestätigungsmail aufnehmen (xtc / gambio 2007)

      Hallo jay-ar,

      danke für die Hilfestellung, offenbar hat sich von xt:c auf Gambio an der Stelle etwas getan. Die Variable findet sich bei Gambio 2007 nicht mehr in /includes/classes/order.php. Dank Deiner Hilfe konnte ich aber herausfinden, dass ganz offensichtlich send_order.php (im Stammverzeichnis) zuständig ist.

      Der Teilerfolg ist wie folgt: Habe in der send_order.php Deine Codezeile wie folgt eingesetzt:

      Code:
      'PRODUCTS_PRICE_NETTO' => $xtPrice->xtcFormat($order_data_values['final_price']/$order_data_values['products_quantity'], true, 0),
      Und siehe, die Variable bleibt in der Bestätigungsmail nicht mehr leer! Allerdings wird nicht der Nettopreis, sondern der Bruttopreis ausgegeben.

      Gruß,
      Lutz

      Kommentar


      • #4
        AW: Nettopreis in Bestätigungsmail aufnehmen (xtc / gambio 2007)

        Soweit ich mich erinnere werden zumindest im Gambio GX nur die Bruttopreise gespeichert und die Nettopreise lediglich errechnet.
        Demnach müsstest du die MwSt. aus products_tax wieder abziehen, sofern allow_tax gleich "1" ist.
        Funktionen testen in unserem immer aktuellen Gambio Testshop
        Aktuelle Infos zu unserem Gambio Testshop
        Welches Update für welche Version?
        Bilder und Dateien korrekt hochladen und anzeigen
        Wenn nichts mehr geht: Caches komplett leeren
        __________________________________________________ ________________
        Dienstleistungen: iNTERFILE Datenrettung und Service seit 1998
        Blog: Mitwachsende Kinderzimmer von Flexa
        Projekt: Flexa Kinderbetten und Hochbetten bei kindermoebel-24 günstig auf Rechnung kaufen
        System: Gambio GX v4.3.3.1 / PHP Version 7.4.80 / MySQL 5.5.62
        Betreuung durch IT-Recht-Kanzlei München

        Kommentar


        • #5
          AW: Nettopreis in Bestätigungsmail aufnehmen (xtc / gambio 2007)

          Hallo Jungs
          Bruttopreise zu speichern macht nicht viel Sinn, da die Steuer abhängig von Kundengruppe einstellbar ist.
          Das Errechnen übernimmt die function xtcFormat. Eher ist es so, dass die 0 als dritten Parameter (also 0% Steuer), so wie ich bei kurzer Betrachtungsweise annahm, nichts bewirkt. Bei 0 wird die eingestellte Steuer in dieser Funktion hinzu gerechnet.

          Man könnte jetzt diese Funktion umschreiben, oder einfacher Weise die beiden Zeilen ohne diese zu bemühen, verwenden.
          So sieht es dann aus (mit Tausenderpunkt, 2 Stellen nach dem Komma und einem € am ende)
          Code:
          'PRODUCTS_SINGLE_PRICE_NETTO' => number_format(round($order_data_values['final_price']/$order_data_values['products_quantity'],2), 2,',','.').' €',
          'PRODUCTS_PRICE_NETTO' => number_format(round($order_data_values['final_price'],2), 2,',','.').' €',
          ohne Tausenderpunkt und keinem € am ende
          Code:
          'PRODUCTS_SINGLE_PRICE_NETTO' => number_format(round($order_data_values['final_price']/$order_data_values['products_quantity'],2), 2,',',''),
          'PRODUCTS_PRICE_NETTO' => number_format(round($order_data_values['final_price'],2), 2,',',''),
          mfg
          jay-ar

          Kommentar


          • #6
            AW: Nettopreis in Bestätigungsmail aufnehmen (xtc / gambio 2007)

            Klaus hat wohl recht: Auch der Versuch mit

            Code:
            'PRODUCTS_PRICE_NETTO' => number_format(round($order_data_values['final_price']/$order_data_values['products_quantity'],2), 2,',',''),
            bringt erneut den Bruttopreis zutage. Zweckmäßig ist es sicherlich nicht, dass die Shop-Software auf Basis des Bruttopreises operiert. Sie tut es aber ganz offenbar, zumindest an dieser Stelle (send_order.php)....


            In der Datei order.php wird hingegen (noch? oder kommt die später?) mit der Mehrwertsteuer gearbeitet:

            Code:
              
            .
            .
            ...
                $this->billing = array('firstname' => $billing_address['entry_firstname'],
                                         'lastname' => $billing_address['entry_lastname'],
                                         'company' => $billing_address['entry_company'],
                                         'street_address' => $billing_address['entry_street_address'],
                                         'suburb' => $billing_address['entry_suburb'],
                                         'city' => $billing_address['entry_city'],
                                         'postcode' => $billing_address['entry_postcode'],
                                         'state' => ((xtc_not_null($billing_address['entry_state'])) ? $billing_address['entry_state'] : $billing_address['zone_name']),
                                         'zone_id' => $billing_address['entry_zone_id'],
                                         'country' => array('id' => $billing_address['countries_id'], 'title' => $billing_address['countries_name'], 'iso_code_2' => $billing_address['countries_iso_code_2'], 'iso_code_3' => $billing_address['countries_iso_code_3']),
                                         'country_id' => $billing_address['entry_country_id'],
                                         'format_id' => $billing_address['address_format_id']);
            
                  $index = 0;
                  $products = $_SESSION['cart']->get_products();
                  for ($i=0, $n=sizeof($products); $i<$n; $i++) {
            
                    $products_price=$xtPrice->xtcGetPrice($products[$i]['id'],
                                                    $format=false,
                                                    $products[$i]['quantity'],
                                                    $products[$i]['tax_class_id'],
                                                    '')+$xtPrice->xtcFormat($_SESSION['cart']->attributes_price($products[$i]['id']),false);
            
                    $this->products[$index] = array('qty' => $products[$i]['quantity'],
                                                    'name' => $products[$i]['name'],
                                                    'model' => $products[$i]['model'],
                                                    'tax_class_id'=> $products[$i]['tax_class_id'],
                                                    'tax' => xtc_get_tax_rate($products[$i]['tax_class_id'], $tax_address['entry_country_id'], $tax_address['entry_zone_id']),
                                                    'tax_description' => xtc_get_tax_description($products[$i]['tax_class_id'], $tax_address['entry_country_id'], $tax_address['entry_zone_id']),
                                                    'price' =>  $products_price ,
                                        		    'final_price' => $products_price*$products[$i]['quantity'],
            					                    'weight' => $products[$i]['weight'],
                                                    'id' => $products[$i]['id']);
            
                    if ($products[$i]['attributes']) {
                      $subindex = 0;
                      reset($products[$i]['attributes']);
                      while (list($option, $value) = each($products[$i]['attributes'])) {
                        $attributes_query = xtc_db_query("select popt.products_options_name, poval.products_options_values_name, pa.options_values_price, pa.price_prefix from " . TABLE_PRODUCTS_OPTIONS . " popt, " . TABLE_PRODUCTS_OPTIONS_VALUES . " poval, " . TABLE_PRODUCTS_ATTRIBUTES . " pa where pa.products_id = '" . $products[$i]['id'] . "' and pa.options_id = '" . $option . "' and pa.options_id = popt.products_options_id and pa.options_values_id = '" . $value . "' and pa.options_values_id = poval.products_options_values_id and popt.language_id = '" . $_SESSION['languages_id'] . "' and poval.language_id = '" . $_SESSION['languages_id'] . "'");
                        $attributes = xtc_db_fetch_array($attributes_query);
            
                        $this->products[$index]['attributes'][$subindex] = array('option' => $attributes['products_options_name'],
                                                                                 'value' => $attributes['products_options_values_name'],
                                                                                 'option_id' => $option,
                                                                                 'value_id' => $value,
                                                                                 'prefix' => $attributes['price_prefix'],
                                                                                 'price' => $attributes['options_values_price']);
            
                        $subindex++;
                      }
                    }
            
                    $shown_price = $this->products[$index]['final_price'];
            
            //echo '<br>debug:'.$shown_price;
            
                    $this->info['subtotal'] += $shown_price;
                    if ($_SESSION['customers_status']['customers_status_ot_discount_flag'] == 1){
                      $shown_price_tax = $shown_price-($shown_price/100 * $_SESSION['customers_status']['customers_status_ot_discount']);
                    }
            
                    $products_tax = $this->products[$index]['tax'];
                    $products_tax_description = $this->products[$index]['tax_description'];
                    if ($_SESSION['customers_status']['customers_status_show_price_tax'] == '1') {
                      if ($_SESSION['customers_status']['customers_status_ot_discount_flag'] == 1) {
                        $this->info['tax'] += $shown_price_tax - ($shown_price_tax / (($products_tax < 10) ? "1.0" . str_replace('.', '', $products_tax) : "1." . str_replace('.', '', $products_tax)));
            
                        $nc_test = (($shown_price_tax /(100+$products_tax)) * $products_tax);
            //echo "1111:".$nc_test;
                        $this->info['tax_groups'][TAX_ADD_TAX."$products_tax_description"] += $nc_test;
                      } else {
                        $this->info['tax'] += $shown_price - ($shown_price / (($products_tax < 10) ? "1.0" . str_replace('.', '', $products_tax) : "1." . str_replace('.', '', $products_tax)));
            
                        $nc_test = (($shown_price /(100+$products_tax)) * $products_tax);
            //echo "2222";
                        $this->info['tax_groups'][TAX_ADD_TAX . "$products_tax_description"] += $nc_test;
                      }
                    } else {
                      if ($_SESSION['customers_status']['customers_status_ot_discount_flag'] == 1) {
                        $this->info['tax'] += ($shown_price_tax/100) * ($products_tax);
                        $this->info['tax_groups'][TAX_NO_TAX . "$products_tax_description"] += ($shown_price_tax/100) * ($products_tax);
                      } else {
                        $this->info['tax'] += ($shown_price/100) * ($products_tax);
                        $this->info['tax_groups'][TAX_NO_TAX . "$products_tax_description"] += ($shown_price/100) * ($products_tax);
                      }
                    }
                    $index++;
                  }
            Aber meine PHP-Kenntnisse reichen nicht aus, um da durchzublicken.

            Kommentar


            • #7
              AW: Nettopreis in Bestätigungsmail aufnehmen (xtc / gambio 2007)

              Hallo
              Die order.php sollte die einzige sein, die so etwas macht, und nicht noch an anderen Stellen. Dafür gibt es ja Klassen und Funktionen, die das einheitlich per include/require allen anderen zur Verfügung stellt. Zentralisierung und das Zurückgreifen auf schon vorhandenes ist doch der große Vorteil einer solchen Programmierung. Deswegen kann ich nicht recht glauben(habe kein Gambio), dass Gambio hier in dem Fall eine Ausnahme macht. Vielleicht hat das auch ein nachträglich installiertes Modul so verändert. Ich habe bei uns geschaut, (XT:C, ECB, Commerce:SEO 1+2, XTC-Modified), dort werden in allen die entsprechenden Bestelldaten aus 2 Funktionen geholt, welche in der includes/classes/order.php enthalten sind. Der Aufruf in bsw. der send_order.php und print_order.php lautet.
              Code:
                      $order_total = $order->getTotalData($oID);
                      $smarty->assign('order_data', $order->getOrderData($oID));
                      $smarty->assign('order_total', $order_total['data']);
              in der includes/classes/order.php steht das von Dir angegebene Füllen des array $order_data[] drin, dass wiederum beim Preis auf die funktion xtcFormat zur Aufbereitung zugreift. Mehr zusätzliche Abfragen hinsichtlich der Bestellung in send_order.php oder print_order.php stehen hier nicht.

              Um das Problem bei Dir zu lösen, bitte ich Dich in die orders_products Tabelle der Datenbank zu schauen, ob es sich wirklich um Bruttopreise handelt. products_price ist der Einzelpreis und final_price ist Einzelpreis x Anzahl. Wenn dem so ist, dann kann man die Steuer wieder zurückrechnen. Wir müssen aber dann etwas mathematisch denken, da auch 0% Steuer theoretisch möglich ist (Division durch 0 geht aber bekanntermaßen nicht). In der orders_products spalte products_tax ist die Steuer angegeben.
              Berechnung erfolgt so: netto = brutto*100/(100+steuer)
              Anhand meines obigen Beispiels
              Code:
              'PRODUCTS_SINGLE_PRICE_NETTO' => number_format(round($order_data_values['final_price']/$order_data_values['products_quantity']*100/(100+$order_data_values['products_tax']),2), 2,',','.').' &euro;',
              'PRODUCTS_PRICE_NETTO' => number_format(round($order_data_values['final_price']*100/(100+$order_data_values['products_tax']),2), 2,',','.').' &euro;',
              Wenn im Shop alles und für jeden 19% ist, geht es auch mit festem Steuerwert
              Code:
              'PRODUCTS_SINGLE_PRICE_NETTO' => number_format(round($order_data_values['final_price']/$order_data_values['products_quantity']/1.19,2), 2,',','.').' &euro;',
              'PRODUCTS_PRICE_NETTO' => number_format(round($order_data_values['final_price']/1.19,2), 2,',','.').' &euro;',
              mfg
              jay-ar

              Kommentar


              • #8
                AW: Nettopreis in Bestätigungsmail aufnehmen (xtc / gambio 2007)

                Zumindest bei meinem Gambio GX siehts so aus:

                Funktionen testen in unserem immer aktuellen Gambio Testshop
                Aktuelle Infos zu unserem Gambio Testshop
                Welches Update für welche Version?
                Bilder und Dateien korrekt hochladen und anzeigen
                Wenn nichts mehr geht: Caches komplett leeren
                __________________________________________________ ________________
                Dienstleistungen: iNTERFILE Datenrettung und Service seit 1998
                Blog: Mitwachsende Kinderzimmer von Flexa
                Projekt: Flexa Kinderbetten und Hochbetten bei kindermoebel-24 günstig auf Rechnung kaufen
                System: Gambio GX v4.3.3.1 / PHP Version 7.4.80 / MySQL 5.5.62
                Betreuung durch IT-Recht-Kanzlei München

                Kommentar


                • #9
                  AW: Nettopreis in Bestätigungsmail aufnehmen (xtc / gambio 2007)

                  Hi zusammen,
                  der nächste Teilerfolg hat sich eingestellt. Die Variable

                  'PRODUCTS_PRICE_NETTO' => number_format(round($order_data_values['products_price']*100/(100+$order_data_values['products_tax']),2), 2,',',''),

                  füllte sich mit Leben, nachdem ich weiter oben auch den $order_query um die Abfrage von "products_tax" erweiterte:

                  Code:
                  	$order_query = xtc_db_query("SELECT
                  	        				products_id,
                  	        				orders_products_id,
                  	        				products_model,
                  	        				products_name,
                  	        				products_price,
                  	        				products_tax,
                  	        				final_price,
                  	        				products_quantity
                  	        				FROM ".TABLE_ORDERS_PRODUCTS."
                  	        				WHERE orders_id='".$insert_id."'");
                  Heureka! Jetzt wird bei mehrwertsteuerpflichtigen Bestellern 19% abgezogen.
                  Problem: bei den Mehrwertsteuerbefreiten Kunden (Ausland) wird leider auch 19 % abgezogen.

                  Die Lösung hatte der Klaus weiter oben schon angesprochen:
                  Demnach müsstest du die MwSt. aus products_tax wieder abziehen, sofern allow_tax gleich "1" ist.
                  Klingt einfach, aber entweder ich mache was falsch, oder ich habe in meiner send_order.php keine Variable allow_tax zur Verfügung. Gibts da ein Funktion, die mir die Info zurückliefert, ob der Kunde Mwst-pflichtig ist?

                  Danke für Eure Geduld,
                  Fuzzy

                  Kommentar


                  • #10
                    AW: Nettopreis in Bestätigungsmail aufnehmen (xtc / gambio 2007)

                    Habe mich jetzt an einer kurzen Abfrage in order.php orientiert, wo es an einer Stelle kurz und knackig heißt:

                    ($_SESSION['customers_status']['customers_status_show_price_tax'] == '1'
                    Das hab ich jetzt in meine send_order.php eingefügt:

                    Code:
                            if ($_SESSION['customers_status']['customers_status_show_price_tax'] == '1')
                     		  { $products_price_netto = number_format(round($order_data_values['products_price']*100/(100+$order_data_values['products_tax']),2), 2,',',''); }
                     		  else
                     		  { $products_price_netto = $xtPrice->xtcFormat($order_data_values['final_price']/$order_data_values['products_quantity'], true); 
                     		}
                    
                    		$order_data[] = array (
                    			'PRODUCTS_MODEL' => $order_data_values['products_model'],
                    			'PRODUCTS_NAME' => $order_data_values['products_name'] . $nc_ship_info,
                    			'PRODUCTS_ATTRIBUTES' => $attributes_data,
                    			'PRODUCTS_ATTRIBUTES_MODEL' => $attributes_model,
                    			'PRODUCTS_PRICE' => $xtPrice->xtcFormat($order_data_values['final_price'], true),
                    			'PRODUCTS_SINGLE_PRICE' => $xtPrice->xtcFormat($order_data_values['final_price']/$order_data_values['products_quantity'], true),
                    			'PRODUCTS_PRICE_NETTO' => $products_price_netto,
                    			'PRODUCTS_QTY' => $order_data_values['products_quantity']
                    		);
                    Vermutlich nicht schön, geht garantiert kürzer und eleganter... Funktioniert aber.
                    In meiner Order_Mail.htm frage ich dann noch ab, ob sich Nettopreis und Bruttopreis unterscheiden. Nur falls ja, wird der Nettopreis noch mit ausgegeben.

                    Damit ist die Sache aus meiner Sicht vom Tisch.
                    (Mann, was ein Act, nur für so eine popelige Zusatzangabe.)

                    Kommentar

                    L?dt...
                    X