Fix broken random password number range; consistently make random instead of using...
[interchange.git] / code / SystemTag / discount.coretag
1 # Copyright 2002-2007 Interchange Development Group and others
2
3 # This program is free software; you can redistribute it and/or modify
4 # it under the terms of the GNU General Public License as published by
5 # the Free Software Foundation; either version 2 of the License, or
6 # (at your option) any later version.  See the LICENSE file for details.
7
8 UserTag discount            Order        code
9 UserTag discount            AddAttr
10 UserTag discount            attrAlias    space discount_space
11 UserTag discount            hasEndTag
12 UserTag discount            PosNumber    1
13 UserTag discount            Version      1.7
14 UserTag discount            Routine      <<EOR
15
16 # Sets the value of a discount field
17 sub {
18         my($code, $opt, $value) = @_;
19
20         # API compatibility
21         if(! ref $opt) {
22                 $value = $opt;
23                 $opt = {};
24         }
25
26         if (! ($::Discounts
27                         and $Vend::Session->{discount_space}
28                         and $Vend::Session->{discount}
29                         and $Vend::DiscountSpaceName)) {
30                 $::Discounts
31                         = $Vend::Session->{discount}
32                         = $Vend::Session->{discount_space}{ $Vend::DiscountSpaceName = 'main' }
33                         ||= ($Vend::Session->{discount} || {});
34         }
35
36         my $dspace;
37         if ($Vend::Cfg->{DiscountSpacesOn} and $dspace = $opt->{discount_space}) {
38                 $dspace = $Vend::Session->{discount_space}{$dspace} ||= {};
39         }
40         else {
41                 $dspace = $::Discounts;
42         }
43
44         if($opt->{subtract}) {
45                 $value = <<EOF;
46 my \$tmp = \$s - $opt->{subtract};
47 \$tmp = 0 if \$tmp < 0;
48 return \$tmp;
49 EOF
50         }
51         elsif ($opt->{level}) {
52                 $value = <<EOF;
53 return (\$s * \$q) if \$q < $opt->{level};
54 my \$tmp = \$s / \$q;
55 return \$s - \$tmp;
56 EOF
57         }
58
59         $dspace->{$code} = $value;
60         delete $dspace->{$code}
61                 unless defined $value and $value;
62         return '';
63 }
64 EOR