Franz Holzinger

Verse of the day

Denn es ist ein Gott und ein Mittler zwischen Gott und den Menschen, nämlich der Mensch Christus Jesus, der sich selbst gegeben hat für alle zur Erlösung, daß solches zu seiner Zeit gepredigt würde;
1 Timotheus 2:5-6

© Bible Gateway's Verse of the Day


autor  
28-11-13 07:29:08 Rabatt und Preisberechnung
Marc Müller
Hallo,

eine Usergruppe bekommt 5% Rabatt auf den Preis. Der Preis wird auch angepasst und richtig im zb. Warenkorb angezeigt.
Liegt allerdings mehr als ein Artikel im Warenkorb teil sich der Preis durch die Anzahl der Artikel. Im Script lib/class.tx_ttproducts_discountprice.php ist $bNeedsDivision wahr und wird ausgeführt. Wie kann ich das verhindern? Ein Auskommentieren von $bNeedsDivision = TRUE; klappt natürlich. Hat aber vielleicht Nebenwirkungen?

Hier noch das TS-Setup:

[usergroup = 60]
plugin.tt_products.getDiscountPrice = 1
plugin.tt_products.discountprice >
plugin.tt_products.discountprice {
10 {
type = price
sql.where =
prod.type = percent
prod.1 = 5
}
}
[global]
28-11-13 15:27:56 Typ value
Franz Holzinger
Falls die Division nicht durchgeführt werden soll, dann muss "type = value" gesetzt werden statt "type = price".

29-11-13 08:13:37 type value
Marc Müller
Mit type = value ändert sich der Preis nicht. Muss ich hier anders Konfigurieren? In der Docu wird es leider nichts erwähnt.

Mit type = price versteh ich nicht warum bei mehreren Produkten sich der Preis / Anzahl Produkte teilt.
Beispiel:
Ein Produkt im Warenkorb:
Produkt A: Preis 1000, 5% Rabatt = 950

Bei 2 Produkten:
Produkt A: Preis 1000, 5% Rabatt = 950 mit $bNeedsDivision 475
Produkt B: Preis 100, 5% Rabatt = 95 mit $bNeedsDivision 47,5

Der Preis im Warenkorb wird also mit 475 und 47,5 ausgewiesen. Richtig wäre aber 950 und 95?
29-11-13 16:12:21 Test
Franz Holzinger
Typ value ist für speziellere Berechnungen gedacht. Es ist nicht gut ausgetestet. Deshalb habe ich es nicht beschrieben.

Ich habe nun das ursprüngliche Setup discountprice unter tt_products 2.10.0 ausgetestet. Ich kann keinen Fehler feststellen.
Ein Produkt für 1000 Euro liegt zweimal im Warenkorb. Es werden diese Einzel- und Summenpreise angezeigt. Es werden korrekt die 5% Rabatt abgezogen.
950 (netto: 798,32) 1900 (netto: 1596,64)
29-11-13 16:26:39 Version
Marc Müller
ist mit der aktuellen 2.10 Version.

Ich werde das $bNeedsDivision im Script auf false setzen. Damit funtioniert es ja wie gewünscht. Hoffentlich ohne Nebenwirkungen an anderer Stelle...
29-11-13 18:19:52 Fehler
Franz Holzinger
Diese Korrektur würde zu einem Fehler führen, zumindest bei meinen Testdaten. Es wäre besser, die genaue Ursache der fehlerhaften Berechnung herauszufinden. Diese Division ist notwendig, weil die Werte vorher aufaddiert worden sind.
4-12-13 09:31:17 debug ausgabe
Marc Müller
Hallo,

ist ein nötiger Parameter vielleicht nicht gesetzt?

Bei mir ist in der $bNeedsDivision Bedingung
$price = $prodValue / $priceItemsCount;
der $priceItemCount ist 2 (2 verschiedene Artikel, jeweils 6 Teile davon liegen im Warenkorb)
$prodValue entspricht dem richtig um den Prozentsatz reduzierten (Einzel-)Preis.




hier die Debugausgabe der class.tx_ttproducts_discountprice.php:

handlePriceItems ANFANG $discountArray
EMPTY!
handlePriceItems $bNeedsDivision
|1|
handlePriceItems $priceItems
0
sort 7500W
item 0
price 6.175
1
sort 7009
item 0
price 8.55
handlePriceItems $priceItemsCount
|2|
handlePriceItems $priceItem
sort 7500W
item 0
price 6.175
handlePriceItems $price divided
|3.0875|
handlePriceItems neuer Preis ersetzt $itemArray[7500W][0][calc]
|3.0875|
handlePriceItems $priceReduction[727]
|1|
handlePriceItems $priceItem
sort 7009
item 0
price 8.55
handlePriceItems $price divided
|4.275|
handlePriceItems neuer Preis ersetzt $itemArray[7009][0][calc]
|4.275|
handlePriceItems $priceReduction[715]
|1|
handlePriceItems ENDE $discountArray
727 3.0875
715 4.275
nach handlePriceItems $discountArray
727 3.0875
715 4.275
4-12-13 15:12:23 Produktbeschreibung fehlt
Franz Holzinger
Ohne genauere Produktbeschreibung mit Preisangabe kann ich diese Debug Information nicht auswerten. Ich weiß ja nicht, an welcher Stelle im Programm Code der Fehler auftritt, der auf meiner Testumgebung aber nicht auftritt.
Außerdem bräuchte ich die Debug Zeilen vor dem Aufruf von handlePriceItems.
4-12-13 18:03:28 Preise
Marc Müller
Danke für die Mühe!
(Das obige debug waren andere Artikel)

Artikelnummer: 7004: 9,50
Artikelnummer: 6002: 4,25


$priceCalcTemp inner foreach
type price
sql.
where
prod.
type percent
1 5
additive 0
$calctype
|price|
$prodConf price
type percent
1 5
$prodConf $prodType Pos 2
|percent|
$prodConf $prodValue Pos 1
|5|
$prodConf $newPriceItems[12345.]
0
sort 7004
item 0
price 9.025
1
sort 6002
item 0
price 4.0375
$countedItems
EMPTY!
mm $additive
|0|
$calctype no additive
|price|
handlePriceItems ANFANG $discountArray
EMPTY!
handlePriceItems $bNeedsDivision
|1|
handlePriceItems $priceItems
0
sort 7004
item 0
price 9.025
1
sort 6002
item 0
price 4.0375
handlePriceItems $priceItemsCount
|2|
handlePriceItems $priceItem
sort 7004
item 0
price 9.025
handlePriceItems $priceItem $k2 item mm
|0|
$bNeedsDivision $priceItemsCount
|2|
$bNeedsDivision $prodValue
|9.025|
$bNeedsDivision $price
|4.5125|
handlePriceItems $price divided
|4.5125|
handlePriceItems neuer Preis ersetzt $itemArray[7004][0][calc]
|4.5125|
handlePriceItems $priceReduction[120]
|1|
handlePriceItems $priceItem
sort 6002
item 0
price 4.0375
handlePriceItems $priceItem $k2 item mm
|0|
$bNeedsDivision $priceItemsCount
|2|
$bNeedsDivision $prodValue
|4.0375|
$bNeedsDivision $price
|2.01875|
handlePriceItems $price divided
|2.01875|
handlePriceItems neuer Preis ersetzt $itemArray[6002][0][calc]
|2.01875|
handlePriceItems $priceReduction[86]
|1|
handlePriceItems ENDE $discountArray
120 4.5125
86 2.01875
nach handlePriceItems $discountArray
120 4.5125
86 2.01875
4-12-13 19:22:24 Korrektur
Franz Holzinger
Scheinbar kommt es durch eine andere Programm Änderung hier zu einem Fehler. Mit dieser Korrektur sollte es funktionieren.
Datei class.tx_ttproducts_discountprice.php:

case 'value':
case 'price':
if (isset($newPriceItems[$k1]) && is_array($newPriceItems[$k1])) {

$bNeedsDivision = FALSE;
// if ($calctype != 'value') {
// $bNeedsDivision = TRUE;
// }

$this->handlePriceItems(
$newPriceItems[$k1],
$itemArray,
$priceReduction,
$discountArray,
$type,
$bNeedsDivision
);
}
break;
< Zurück zum Forum