[interchange] Add nodiscount attribute to [subtotal] tag.
Stefan Hornburg
interchange-cvs at icdevgroup.org
Wed Jul 21 08:24:40 UTC 2010
commit d9e23173c07ec86550db9d7a610eebe0ae8b4f84
Author: Stefan Hornburg (Racke) <racke at linuxia.de>
Date: Wed Jul 21 10:19:21 2010 +0200
Add nodiscount attribute to [subtotal] tag.
code/SystemTag/subtotal.coretag | 2 +-
lib/Vend/Interpolate.pm | 66 ++++++++++++++++++++++-----------------
2 files changed, 38 insertions(+), 30 deletions(-)
---
diff --git a/code/SystemTag/subtotal.coretag b/code/SystemTag/subtotal.coretag
index 2b87f89..54d38f0 100644
--- a/code/SystemTag/subtotal.coretag
+++ b/code/SystemTag/subtotal.coretag
@@ -16,7 +16,7 @@ UserTag subtotal Version $Revision: 1.7 $
UserTag subtotal Routine <<EOR
sub {
my($cart, $noformat, $opt) = @_;
- return currency( subtotal($cart, $opt->{discount_space}),
+ return currency( subtotal($cart, $opt->{discount_space}, $opt->{nodiscount}),
$noformat, undef, $opt);
}
EOR
diff --git a/lib/Vend/Interpolate.pm b/lib/Vend/Interpolate.pm
index 9cdf751..4462632 100644
--- a/lib/Vend/Interpolate.pm
+++ b/lib/Vend/Interpolate.pm
@@ -5730,7 +5730,7 @@ sub salestax {
# Returns just subtotal of items ordered, with discounts
# applied
sub subtotal {
- my($cart, $dspace) = @_;
+ my($cart, $dspace, $nodiscount) = @_;
### If the user has assigned to salestax,
### we use their value come what may, no rounding
@@ -5747,42 +5747,50 @@ sub subtotal {
}
levies() unless $Vend::Levying;
-
- # Use switch_discount_space unconditionally to guarantee existance of proper discount structures.
- $oldspace = switch_discount_space($dspace || $Vend::DiscountSpaceName);
-
- my $discount = (ref($::Discounts) eq 'HASH' and %$::Discounts);
- $subtotal = 0;
-
- foreach $i (0 .. $#$Vend::Items) {
- $item = $Vend::Items->[$i];
- if($discount || $item->{mv_discount}) {
- $subtotal += apply_discount($item);
- }
- else {
- $subtotal += Vend::Data::item_subtotal($item);
- }
+ $subtotal = 0;
+
+ if ($nodiscount) {
+ foreach $i (0 .. $#$Vend::Items) {
+ $item = $Vend::Items->[$i];
+ $subtotal += Vend::Data::item_subtotal($item);
+ }
}
+ else {
+ # Use switch_discount_space unconditionally to guarantee existance of proper discount structures.
+ $oldspace = switch_discount_space($dspace || $Vend::DiscountSpaceName);
+
+ my $discount = (ref($::Discounts) eq 'HASH' and %$::Discounts);
+
+ foreach $i (0 .. $#$Vend::Items) {
+ $item = $Vend::Items->[$i];
+ if ($discount || $item->{mv_discount}) {
+ $subtotal += apply_discount($item);
+ } else {
+ $subtotal += Vend::Data::item_subtotal($item);
+ }
+ }
- if (defined $::Discounts->{ENTIRE_ORDER}) {
- $formula = $::Discounts->{ENTIRE_ORDER};
- $formula =~ s/\$q\b/tag_nitems()/eg;
- $formula =~ s/\$s\b/$subtotal/g;
- $cost = $Vend::Interpolate::ready_safe->reval($formula);
- if($@) {
- logError
- "Discount ENTIRE_ORDER has bad formula. Returning normal subtotal.\n$@";
- $cost = $subtotal;
+ if (defined $::Discounts->{ENTIRE_ORDER}) {
+ $formula = $::Discounts->{ENTIRE_ORDER};
+ $formula =~ s/\$q\b/tag_nitems()/eg;
+ $formula =~ s/\$s\b/$subtotal/g;
+ $cost = $Vend::Interpolate::ready_safe->reval($formula);
+ if ($@) {
+ logError
+ "Discount ENTIRE_ORDER has bad formula. Returning normal subtotal.\n$@";
+ $cost = $subtotal;
+ }
+ $subtotal = $cost;
}
- $subtotal = $cost;
+
+ # Switch to original discount space if an actual switch occured.
+ switch_discount_space($oldspace) if $dspace and defined $oldspace;
}
+
$Vend::Items = $save if defined $save;
$Vend::Session->{latest_subtotal} = $subtotal;
- # Switch to original discount space if an actual switch occured.
- switch_discount_space($oldspace) if $dspace and defined $oldspace;
-
return $subtotal;
}
More information about the interchange-cvs
mailing list