re-work coupons to allow multiple coupon types
[bse.git] / site / cgi-bin / modules / BSE / Coupon / Percent.pm
1 package BSE::Coupon::Percent;
2 use parent 'BSE::Coupon::Base';
3 use strict;
4
5 our $VERSION = "1.002";
6
7 sub config_fields {
8   my ($class) = @_;
9
10   return
11     {
12      discount_percent =>
13      {
14       description => "Discount",
15       required => 1,
16       width => 5,
17       htmltype => "text",
18       rules => "coupon_percent",
19       units => "%",
20       order => 1,
21      },
22     };
23 }
24
25 sub config_rules {
26   return
27     (
28      coupon_percent =>
29      {
30       real => '0 - 100',
31      },
32     );
33 }
34
35 sub config_valid {
36   1;
37 }
38
39 sub class_description {
40   "Simple percentage cart discount";
41 }
42
43 sub is_active {
44   my ($self, $coupon, $cart) = @_;
45
46   $self->test_all_tiers_match($coupon, $cart)
47     or return ( 0, "One or more products are already discounted" );
48
49   1;
50 }
51
52 sub product_valid {
53   my ($self, $coupon, $cart, $index) = @_;
54
55   return $self->test_tier_matches($coupon, $cart, $index);
56 }
57
58 sub discount {
59   my ($self, $coupon, $cart) = @_;
60
61   return int($cart->total_cost * $self->{config}{discount_percent} / 100);
62 }
63
64 sub describe {
65   my ($self) = @_;
66
67   sprintf("%.1f%% cart discount", $self->{config}{discount_percent});
68 }
69
70 1;