Mindermenge nicht für Wertgutscheine ?

Begonnen von dobra, April 26, 2012, 22:14:52

« vorheriges - nächstes »

0 Mitglieder und 1 Gast betrachten dieses Thema.

dobra

Hallo,

Wenn ein Kunde NUR Wertgutscheine im WK hat werden keine Versandkosten verrechnet (Code wird ja per mail versendet).
Das habe ich so realisiert, dass GS ein "Gewicht" von 0 haben - alle anderen Artikel haben in ben.def. Feld GEWICHT "1" stehen.
In Callback::invoice_addpos_final wird dieses Feld dann abgefragt.

Das Problem ist aber, dass der Mindermengenzuschlag (bei Händler "bis Betrag 25" eingetragen) auch bei "NUR GS-Bestellungen" wenn unter 25,- berechnet wird.
Soll aber nicht wenn der Kunde eben NUR Wertgutscheine bestellt.

my $minderbetrag = $_[6];
ist zwar definiert aber wie kann ich das auch verwenden ?
sorry - habe mal wieder ein total-blackout :(

hier mal mein komplettes Script:
<!--spmacro:module(Callback)
$vsumme = 0;
$gewichtsumme =0;
$rabattsumme = 0;

sub invoice_addpos_final {
my $ref_gesamt = $_[0];
my $ref_gesamt_netto = $_[1];
my $ref_gesamt_steuer = $_[2];
my $anzahl = ssp::get_cart_items();
my $ust = $_[3]/100;
my $netto = $_[4];
my $versandbetrag = $_[5];
my $minderbetrag = $_[6];
my $zahlkosten = $_[7];

($sec,$min,$hour,$mday,$mon,$year) = localtime(time);
$mon += 1; $year += 1900; # Y2K
my $datum = sprintf("%02d%02d",$mon,$mday);

for (my $i = 0;$i <= $anzahl;++$i) {
my $wert = ssp::get_var_cart('RABKLASSE',$i) ;
my $tag = ssp::get_var_cart('DATUM',$i);
if ($datum == $tag){
$rabattsumme += $wert * ssp::get_var_cart('preis',$i) *
ssp::get_var_cart('anzahl',$i); }
}
if ($netto > 0) {
$$ref_gesamt = $$ref_gesamt - $rabattsumme;
$$ref_gesamt_steuer = $$ref_gesamt_steuer - ($rabattsumme*$ust);
} else {
$$ref_gesamt = $$ref_gesamt - $rabattsumme;
$$ref_gesamt_steuer = $$ref_gesamt_steuer - ($rabattsumme*(1-1/(1+$ust)));
}

my $versand = $Callback::vsumme;
my $warenwert = ssp::get_wkprodsum();
my ($zone,$txt) = ssp::get_cart_zone();
if ($warenwert >= 100 && $zone == 1) { $wert = 0; }
elsif ($warenwert >= 150 && $zone == 2) { $wert = 0; }
else {
my $ust = $_[3]/100;
my $netto = $_[4];
for (my $i = 0;$i <= $anzahl;++$i) {
my $wert = ssp::get_var_cart('anzahl',$i)*ssp::get_var_cart('GEWICHT',$i);
$gewichtsumme += $wert;
}
}
foreach my $i (@{$defs::verskosttab}) {
ssp::trace("$i->[0] $i->[1] $i->[2]\n");
if (($i->[0] <= $gewichtsumme) && ($gewichtsumme < $i->[1]) ) {
$vsumme = $i->[2];
break;
}
}
if ($netto > 0) {
$$ref_gesamt += $vsumme;
$$ref_gesamt_steuer += $vsumme*$ust;
} else {
$$ref_gesamt += $vsumme;
$$ref_gesamt_steuer += $vsumme*(1-1/(1+$ust));
}
$$ref_gesamt_netto = ($$ref_gesamt*100)/120;
$$versandbetrag = $vsumme;

ssp::trace("+++++ invoice_addpos gesamt: $$ref_gesamt / gesamt netto:$$ref_gesamt_netto / gesamt Steuer: $$ref_gesamt_steuer / vsumme: $vsumme\n");
return 0;
}
-->
mfG
dobra

ahe

Hallo Dobra,

der Mindermengenbetrag kann so gesetzt werden:

$$minderbetrag = 0;

Vermutlich muss das dann auch abgezogen werden von $$ref_gesamt und $$ref_gesamt_steuer.
Analog zu deiner bestehenden Rabattrechnung also.
MfG ahe

dobra

Hallo ahe,

funktioniert nicht wie es soll - bzw mache ichs falsch :(

mit

my $wert2 = ssp::get_var_cart('anzahl',$i)*ssp::get_var_cart('GEWICHT',$i);
$gewichtsumme2 += $wert2;
if ($gewichtsumme2 <= 0){
$$minderbetrag = 0;
}


wird die Mindermenge nicht ausgegeben aber trotzdem berechnet.

ZitatVermutlich muss das dann auch abgezogen werden von $$ref_gesamt und $$ref_gesamt_steuer.

2. Versuch:

my $wert2 = ssp::get_var_cart('anzahl',$i)*ssp::get_var_cart('GEWICHT',$i);
$gewichtsumme2 += $wert2;
if ($gewichtsumme2 <= 0){
$$minderbetrag = 0;

if ($netto > 0) {
$$ref_gesamt = $$ref_gesamt - $minderbetrag;
$$ref_gesamt_steuer = $$ref_gesamt_steuer - ($minderbetrag*$ust);
} else {
$$ref_gesamt = $$ref_gesamt - $minderbetrag;
$$ref_gesamt_steuer = $$ref_gesamt_steuer - ($minderbetrag*(1-1/(1+$ust)));
}
}


hat nichts geändert.

Glaube, da pfuscht noch irgendein anderer Cod dazwischen  ???

nur Gutschein € 10,- im WK
aber Warenwert wird 13,50 (also MIT Mindermenge) angezeigt und berechnet ?

muss mir das nochmal in Ruhe anschauen ....
Jetzt wird schon bei Warenwert
mfG
dobra

ahe

Variante 2 sieht mir schon korrekt aus.
Allerdings darf $$minderbetrag erst auf 0 gesetzt werden nachdem der Betrag vom Gesamtpreis abgezogen wurde und nicht vorher ;)
MfG ahe

dobra

hatte da einige Fehler drin - Klammern falsch gesetzt ...

SO funktioniert es jetzt wie es soll :)
Danke für den Lösungsansatz !

for (my $i = 0;$i <= $anzahl;++$i) {
my $wert = ssp::get_var_cart('RABKLASSE',$i) ;
my $tag = ssp::get_var_cart('DATUM',$i);
if ($datum == $tag){
$rabattsumme += $wert * ssp::get_var_cart('preis',$i) *
ssp::get_var_cart('anzahl',$i); }
my $wert2 = ssp::get_var_cart('anzahl',$i)*ssp::get_var_cart('GEWICHT',$i);
$gewichtsumme2 += $wert2;
}
my $klm;
if ($gewichtsumme2 == 0){
$$minderbetrag = 0;
$klm = $minderbetrag;
}

if ($netto > 0) {
$$ref_gesamt = $$ref_gesamt - $rabattsumme - $klm;
$$ref_gesamt_steuer = $$ref_gesamt_steuer - ($rabattsumme*$ust) - ($klm*$ust);
} else {
$$ref_gesamt = $$ref_gesamt - $rabattsumme - $klm;
$$ref_gesamt_steuer = $$ref_gesamt_steuer - ($rabattsumme*(1-1/(1+$ust))) - ($klm*(1-1/(1+$ust)));
}


und damit ist - hoffe ich - auch das
ZitatAllerdings darf $$minderbetrag erst auf 0 gesetzt werden nachdem der Betrag vom Gesamtpreis abgezogen wurde und nicht vorher
korrigiert ?

Bei den Test mit nur GS/anderes + GS/ nur anderes wird jetzt jedenfalls alles korrekt angezeigt und berechnet.
mfG
dobra

ahe

Zitat von: dobra am April 27, 2012, 10:01:56
und damit ist - hoffe ich - auch das
ZitatAllerdings darf $$minderbetrag erst auf 0 gesetzt werden nachdem der Betrag vom Gesamtpreis abgezogen wurde und nicht vorher
korrigiert ?
So ist es  :)
MfG ahe