use BSE::Util::SQL qw/now_sqldate sql_to_date date_to_sql sql_date sql_datetime/;
use BSE::Util::Valid qw/valid_date/;
-our $VERSION = "1.028";
+our $VERSION = "1.030";
my %actions =
(
return $req->dyn_response('admin/coupons/list', \%acts);
}
+# coupon behaviour classes wrapped for use in templates
+
+sub _coupon_behaviours {
+ my ($self) = @_;
+
+ require BSE::TB::Coupons;
+ my $bclasses = BSE::TB::Coupons->behaviour_classes();
+ return
+ [
+ map
+ +{
+ id => $_,
+ behaviour => Squirrel::Template::Expr::WrapClass->new($bclasses->{$_})
+ },
+ sort { lc $bclasses->{$a}->class_description cmp lc $bclasses->{$b}->class_description}
+ keys %$bclasses
+ ]
+}
+
=item coupon_addform
Display a form for adding new coupons.
$req->set_variable(errors => $errors || {});
require BSE::TB::PriceTiers;
$req->set_variable(tiers => [ BSE::TB::PriceTiers->all ]);
+ $req->set_variable(behaviours => $self->_coupon_behaviours);
return $req->dyn_response("admin/coupons/add", \%acts);
}
my %errors;
$req->validate(fields => $fields, errors => \%errors,
rules => BSE::TB::Coupon->rules);
-
my $values = $req->cgi_fields(fields => $fields);
+ unless ($errors{classid}) {
+ my $bh = BSE::TB::Coupons->behaviour_class($values->{classid});
+ my $bfields = $bh->config_fields();
+ my $brules = $bh->config_rules();
+ $req->validate(fields => $bfields, rules => $brules,
+ errors => \%errors);
+ unless (keys %errors) {
+ $values->{config_obj} = $req->cgi_fields(fields => $bfields);
+ $bh->config_valid($values->{config_obj}, \%errors);
+ }
+ }
+
unless ($errors{code}) {
my ($other) = BSE::TB::Coupons->getBy(code => $values->{code});
$other
$req->set_variable(errors => $errors || {});
require BSE::TB::PriceTiers;
$req->set_variable(tiers => [ BSE::TB::PriceTiers->all ]);
+ $req->set_variable(behaviours => $self->_coupon_behaviours);
return $req->dyn_response("admin/coupons/edit", \%acts);
}
my $values = $req->cgi_fields(fields => $fields);
+ unless ($errors{classid}) {
+ my $bh = BSE::TB::Coupons->behaviour_class($values->{classid});
+ my $bfields = $bh->config_fields();
+ my $brules = $bh->config_rules();
+ $req->validate(fields => $bfields, rules => $brules,
+ errors => \%errors);
+ unless (keys %errors) {
+ $values->{config_obj} = $req->cgi_fields(fields => $bfields);
+ $bh->config_valid($values->{config_obj}, \%errors);
+ }
+ }
+
unless ($errors{code}) {
my ($other) = BSE::TB::Coupons->getBy(code => $values->{code});
$other && $other->id != $coupon->id
my $old = $coupon->json_data;
my $tiers = delete $values->{tiers};
+ my $config_obj = delete $values->{config_obj};
for my $key (keys %$values) {
$coupon->set($key => $values->{$key});
}
$coupon->set_tiers($tiers);
+ $coupon->set_config_obj($config_obj);
$coupon->save;
$req->audit