Ergebnis 1 bis 10 von 10

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

  1. #1
    Neuer Benutzer
    Registriert seit
    19.12.2010
    Beiträge
    9
    Downloads
    0
    Uploads
    0

    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
    Geändert von Elektrofuzzy (07.04.2011 um 17:02 Uhr)

  2. #2
    Erfahrener Benutzer
    Registriert seit
    30.09.2010
    Beiträge
    140
    Downloads
    4
    Uploads
    0

    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

  3. #3
    Neuer Benutzer
    Registriert seit
    19.12.2010
    Beiträge
    9
    Downloads
    0
    Uploads
    0

    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

  4. #4
    Administrator Avatar von KlausK
    Registriert seit
    29.09.2010
    Beiträge
    2.883
    Downloads
    256
    Uploads
    390

    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.

  5. #5
    Erfahrener Benutzer
    Registriert seit
    30.09.2010
    Beiträge
    140
    Downloads
    4
    Uploads
    0

    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

  6. #6
    Neuer Benutzer
    Registriert seit
    19.12.2010
    Beiträge
    9
    Downloads
    0
    Uploads
    0

    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.

  7. #7
    Erfahrener Benutzer
    Registriert seit
    30.09.2010
    Beiträge
    140
    Downloads
    4
    Uploads
    0

    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

  8. #8
    Administrator Avatar von KlausK
    Registriert seit
    29.09.2010
    Beiträge
    2.883
    Downloads
    256
    Uploads
    390

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

    Zumindest bei meinem Gambio GX siehts so aus:


  9. #9
    Neuer Benutzer
    Registriert seit
    19.12.2010
    Beiträge
    9
    Downloads
    0
    Uploads
    0

    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

  10. #10
    Neuer Benutzer
    Registriert seit
    19.12.2010
    Beiträge
    9
    Downloads
    0
    Uploads
    0

    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.)

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •