[interchange-cvs] interchange - pajamian modified 2 files
interchange-cvs at icdevgroup.org
interchange-cvs at icdevgroup.org
Wed May 20 22:13:32 UTC 2009
User: pajamian
Date: 2009-05-20 22:13:32 GMT
Modified: . WHATSNEW-5.7
Modified: lib/Vend Cart.pm
Log:
MaxQuantity fixes:
* A null or non-numerical entry in the table(s) for the maxquantity field should
result in no maximum quantity enforcement for that product.
* Remove redundant code for fetching the quantity from the table(s).
* Fix instance where two DB hits are used to fetch one value.
* Get rid of goto.
* Basically a rewrite of the correspondign block of code.
Revision Changes Path
2.44 interchange/WHATSNEW-5.7
rev 2.44, prev_rev 2.43
Index: WHATSNEW-5.7
===================================================================
RCS file: /var/cvs/interchange/WHATSNEW-5.7,v
retrieving revision 2.43
retrieving revision 2.44
diff -u -r2.43 -r2.44
--- WHATSNEW-5.7 20 May 2009 09:39:19 -0000 2.43
+++ WHATSNEW-5.7 20 May 2009 22:13:32 -0000 2.44
@@ -111,6 +111,10 @@
* _set_acl() in UserDB.pm now uses adjust_time() instead of time_to_seconds().
+* Fix MaxQuantityField to allow a null, blank, or non-numerical entry in the
+ field to represent that no maximum quantity should be enforced for that
+ product.
+
Payment
-------
2.26 interchange/lib/Vend/Cart.pm
rev 2.26, prev_rev 2.25
Index: Cart.pm
===================================================================
RCS file: /var/cvs/interchange/lib/Vend/Cart.pm,v
retrieving revision 2.25
retrieving revision 2.26
diff -u -r2.25 -r2.26
--- Cart.pm 16 Apr 2009 14:51:41 -0000 2.25
+++ Cart.pm 20 May 2009 22:13:32 -0000 2.26
@@ -1,8 +1,8 @@
# Vend::Cart - Interchange shopping cart management routines
#
-# $Id: Cart.pm,v 2.25 2009-04-16 14:51:41 mheins Exp $
+# $Id: Cart.pm,v 2.26 2009-05-20 22:13:32 pajamian Exp $
#
-# Copyright (C) 2002-2008 Interchange Development Group
+# Copyright (C) 2002-2009 Interchange Development Group
# Copyright (C) 1996-2002 Red Hat, Inc.
#
# This program was originally based on Vend 0.2 and 0.3
@@ -25,7 +25,7 @@
package Vend::Cart;
-$VERSION = substr(q$Revision: 2.25 $, 10);
+$VERSION = substr(q$Revision: 2.26 $, 10);
use strict;
@@ -247,55 +247,65 @@
}
}
- if($Vend::Cfg->{MaxQuantityField}) {
- $item->{mv_max_quantity} = 0;
-
- foreach my $fieldspec (split('[,\s]+', $Vend::Cfg->{MaxQuantityField})) {
- next unless $fieldspec;
-
- my ($tab, $col) = split /:+/, $fieldspec;
- if(! length $col) {
- $col = $tab;
- $tab = $item->{mv_ib} || $Vend::Cfg->{ProductFiles}[0];
- }
- if ( $tab =~ s/^=// ) {
- $item->{mv_max_quantity} = $quantity_cache{"$tab.$col.$item->{code}"} = ::tag_data($tab, $col, $item->{code});
- goto DONE_QUANTITY_ADJUST;
- }
- elsif ( $tab =~ s/^\?// ) {
- if ( $item->{mv_max_quantity} ) {
- $item->{mv_max_quantity} = $quantity_cache{"$tab.$col.$item->{code}"} = ::tag_data($tab, $col, $item->{code}) if
- ::tag_data($tab, $col, $item->{code});
- goto DONE_QUANTITY_ADJUST;
- }
- }
- else {
- $item->{mv_max_quantity} += $quantity_cache{"$tab.$col.$item->{code}"} || ($quantity_cache{"$tab.$col.$item->{code}"} = ::tag_data($tab, $col, $item->{code}));
- }
- }
- $item->{mv_max_quantity} -= $total_quantity{$item->{code}};
- $item->{mv_max_quantity} = 0 if $item->{mv_max_quantity} < 0;
-
- DONE_QUANTITY_ADJUST:
-
- if(
- length $item->{mv_max_quantity}
- and
- $item->{quantity} > $item->{mv_max_quantity}
- )
- {
- $old_item = { %$item } if $quantity_raise_event;
- $item->{quantity} = $item->{mv_max_quantity};
- $item->{mv_max_over} = 1;
- delete $item->{mv_min_under};
- trigger_update(
- $s,
- $item,
- $old_item,
- $event_cartname
- ) if $quantity_raise_event;
- }
- }
+ MAX_QUANTITY: {
+ last MAX_QUANTITY unless $Vend::Cfg->{MaxQuantityField};
+ my $mv_max = \$item->{mv_max_quantity};
+ undef $$mv_max;
+
+ QUANTITY_ADJUST: {
+ QUANTITY_FIELD: foreach my $fieldspec (split('[,\s]+', $Vend::Cfg->{MaxQuantityField})) {
+ next QUANTITY_FIELD unless $fieldspec;
+
+ my ($tab, $col) = split /:+/, $fieldspec;
+ if(! length $col) {
+ $col = $tab;
+ $tab = $item->{mv_ib} || $Vend::Cfg->{ProductFiles}[0];
+ }
+
+ my ($prefix) = $tab =~ s/^([=\?])//;
+ $prefix ||= '';
+
+ my $max = \$quantity_cache{"$tab.$col.$item->{code}"};
+ $$max ||= ::tag_data($tab, $col, $item->{code});
+ undef $$max unless $$max =~ /\d/;
+
+ if ($prefix eq '=') {
+ $$mv_max = $$max;
+ last QUANTITY_ADJUST if defined $$max;
+ last MAX_QUANTITY;
+ }
+
+ elsif ($prefix = '?') {
+ next QUANTITY_FIELD if !defined $$max || $$max <= 0;
+ $$mv_max = $$max;
+ last QUANTITY_ADJUST;
+ }
+
+ elsif (defined $$max) {
+ $$mv_max ||= 0;
+ $$mv_max += $$max;
+ }
+ } # QUANTITY_FIELD
+
+ last MAX_QUANTITY unless defined $$mv_max;
+
+ $$mv_max -= $total_quantity{$item->{code}};
+ $$mv_max = 0 if $$mv_max < 0;
+ } # QUANTITY_ADJUST
+
+ if($item->{quantity} > $$mv_max) {
+ $old_item = { %$item } if $quantity_raise_event;
+ $item->{quantity} = $$mv_max;
+ $item->{mv_max_over} = 1;
+ delete $item->{mv_min_under};
+ trigger_update(
+ $s,
+ $item,
+ $old_item,
+ $event_cartname
+ ) if $quantity_raise_event;
+ }
+ } # MAX_QUANTITY
for(@{$Vend::Cfg->{AutoModifier}}) {
next unless /^!/;
More information about the interchange-cvs
mailing list