Hallo SimoneST,
es gibt unzählige Möglichkeiten, die Versandkosten zu berechne und wenn man dann Kombinationen braucht wird das dann schon sehr kompliziert ::)
Wenn ich davon ausgehe, dass es keine "gestaffelten" Speditionskosten gibt (also pro Zone nur EIN Preis wenn irgendwelche speditionsversendeten Artikel im WK liegen, ist vielleicht dies Lösung möglich:
1) bei Händler -> Versandkosten muss bei "Versandkosten" und "Bis Betrag" 0 stehen.
(http://www.woll-insel.at/Bilder/SP-Forum/versk1.jpg)
2) Bei "Lieferzonen" -> Versandkosten darf ebenfalls nichts eingetragen sein
(http://www.woll-insel.at/Bilder/SP-Forum/versk2.jpg) | (http://www.woll-insel.at/Bilder/SP-Forum/versk3.jpg) |
3) die Versandkosten werden ausschließlich mit ssp berechnet.
Dazu das benutzerdef. Artikelfeld "GEWICHT" anlegen (hat aber nichts mit dem Artikelgewicht zu tun ;) )
4) in stdall.ipl schreiben:
<!--spmacro:module(defs)
#Versandkosten abhängig vom
my ($zone) = ssp::get_cart_zone();
if ($zone == 1) {$verskosttab = [
[0,0,0],[1,999,5.50],[999,99999999999999,55]
];
}
if ($zone == 2) {$verskosttab =[
[0,0,0],[1,999,9.90],[999,99999999999999,120]
];
}
if ($zone >= 3) {$verskosttab =[
[0,0,0],[1,99999,12.90],[999,99999999999999,200]
];
}
-->
<!--spmacro:module(Callback)
$vsumme = 0;
$gewichtsumme =0;
sub invoice_addpos {
my $ref_gesamt = $_[0];
my $ref_gesamt_steuer = $_[2];
my $anzahl = ssp::get_cart_items();
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));
}
ssp::trace("+++++ invoice_addpos $$ref_gesamt $$ref_gesamt_netto $$ref_gesamt_steuer\n");
}
-->
<!--spmacro:module(versk)
# Gesamtsumme der Versandkosten
sub versk {
main::mprint(main::fp($Callback::vsumme));
}
5) jetzt bei allen Artikeln im neuen Feld GEWICHT "1" eintragen (geht in einem Rutsch mit "Artikel suchen/ersetzen").
Dann bei den Gutscheinen (bzw. den Artikeln bei denen keine Versandkosten berechnet werden sollen) den Wert auf "0" ändern.
Die Speditions-Artikel bekommen "999"
6) die Scriptanpassung:
if ($zone == 1) {$verskosttab = [
[0,0,0],[1,999,5.50],[999,99999999999999,55]
];
}
"normale" Versandkosten für diese Zone - Speditionskosten für diese Zone
if ($zone == 2) {$verskosttab =[
[0,0,0],[1,999,9.90],[999,99999999999999,120]
];
}
if ($zone >= 3) {$verskosttab =[
[0,0,0],[1,99999,12.90],[999,99999999999999,200]
];
}
(möglicherweise müssen auch die "if" Bedingungen angepasst werden - also welche Zonen in welche Versandkostenklasse fallen)
7) und zuletzt:
im WK, Bestellablauf und Mailvorlagen alle __versand__ mit __versk::versk__ ersetzen.
Funktioniert dann so, wie Sie es wollten:
liegen ausschließlich Gutscheine im WK -> Versandkosten 0
sobald ein oder mehrere anderer Artikel dazu bestellt werden, werden der "normalen" Versandkosten berechnet.
Liegt mindestens ein Speditionsartikel in WK, werden EINMAL die Speditionskosten berechnet, egal wieviele andere Artikel mit bestellt werden.
Alles natürlich jeweils abhängig von der Lieferzone.
Voraussetzung: es dürfen maximal 998 Artikel mit normalen VK bestellt werden, denn der Gewichtswert wird ja addiert = ab 999 Artikeln gilt es als "mit Spedition".