re-work coupons to allow multiple coupon types
[bse.git] / site / cgi-bin / modules / BSE / TB / Coupons.pm
index 24894f5..6db06eb 100644 (file)
@@ -4,7 +4,7 @@ use Squirrel::Table;
 our @ISA = qw(Squirrel::Table);
 use BSE::TB::Coupon;
 
-our $VERSION = "1.001";
+our $VERSION = "1.002";
 
 sub rowClass {
   return 'BSE::TB::Coupon';
@@ -15,6 +15,13 @@ sub make {
 
   my $tiers = delete $opts{tiers};
 
+  my $config_obj = delete $opts{config_obj};
+  if ($config_obj) {
+    $opts{discount_percent} = delete $config_obj->{discount_percent};
+    require JSON;
+    $opts{config} = JSON->new->encode($config_obj);
+  }
+
   my $coupon = $self->SUPER::make(%opts);
 
   if ($tiers) {
@@ -25,4 +32,45 @@ sub make {
   return $coupon;
 }
 
+=item behaviour_class
+
+Return the class name of a behaviour class given a class id.
+
+Loads the class.
+
+Throws an exception if no class if configured for the class id or if
+the class cannot be loaded.
+
+=cut
+
+sub behaviour_class {
+  my ($class, $classid) = @_;
+
+  my $bclass = BSE::Cfg->single->entryErr("coupon classes", $classid);
+  (my $bfile = $bclass . ".pm") =~ s(::)(/)g;
+
+  require $bfile;
+
+  return $bclass;
+}
+
+=item behaviour_classes
+
+Returns a hash of all behaviour classes with the keys being the
+classid and the value the class name.
+
+=cut
+
+sub behaviour_classes {
+  my ($class) = @_;
+
+  my %entries = BSE::Cfg->single->entries("coupon classes");
+  my %bclasses;
+  for my $classid (keys %entries) {
+    $bclasses{$classid} = $class->behaviour_class($classid);
+  }
+
+  \%bclasses;
+}
+
 1;