re-work coupons to allow multiple coupon types
[bse.git] / site / cgi-bin / modules / BSE / Coupon / Dollar.pm
1 package BSE::Coupon::Dollar;
2 use parent 'BSE::Coupon::Base';
3 use strict;
4
5 our $VERSION = "1.003";
6
7 sub config_fields {
8   my ($class) = @_;
9
10   return
11     {
12      min_cart =>
13      {
14       description => "Min Cart Value",
15       required => 1,
16       width => 5,
17       htmltype => "text",
18       rules => "money",
19       type => "money",
20       order => 1,
21      },
22      discount_dollars =>
23      {
24       description => "Discount \$",
25       required => 1,
26       width => 5,
27       htmltype => "text",
28       rules => "money",
29       type => "money",
30       order => 2,
31      },
32     };
33 }
34
35 sub config_valid {
36   1;
37 }
38
39 sub class_description {
40   "Simple dollar 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   unless ($cart->total_cost >= $self->{config}{min_cart}) {
49     require BSE::Util::Format;
50     return ( 0, sprintf("You need \$%s of items in the cart for the discount",
51                         BSE::Util::Format::bse_number("money", $self->{config}{min_cart})) );
52   }
53
54   1;
55 }
56
57 sub product_valid {
58   my ($self, $coupon, $cart, $index) = @_;
59
60   return $self->test_tier_matches($coupon, $cart, $index);
61 }
62
63 sub discount {
64   my ($self, $coupon, $cart) = @_;
65
66   return 0
67     if $cart->total_cost < $self->{config}{min_cart};
68
69   return $self->{config}{discount_dollars};
70 }
71
72 sub describe {
73   my ($self) = @_;
74
75   require BSE::Util::Format;
76
77   sprintf("\$%s discount on cart over \$%s",
78           BSE::Util::Format::bse_number("money", $self->{config}{discount_dollars}),
79           BSE::Util::Format::bse_number("money", $self->{config}{min_cart}));
80 }
81
82 1;