treat untiered as if it were tier #0
authorTony Cook <tony@develop-help.com>
Thu, 4 Jul 2013 08:47:10 +0000 (18:47 +1000)
committerTony Cook <tony@develop-help.com>
Sun, 21 Jul 2013 23:34:16 +0000 (09:34 +1000)
site/cgi-bin/modules/BSE/TB/Coupon.pm
site/cgi-bin/modules/BSE/TB/Coupons.pm
site/cgi-bin/modules/BSE/UI/AdminShop.pm
site/templates/admin/coupons/add.tmpl
site/templates/admin/coupons/edit.tmpl

index fcd9fbf..4d36e00 100644 (file)
@@ -4,9 +4,9 @@ use Squirrel::Row;
 our @ISA = qw/Squirrel::Row/;
 use BSE::TB::CouponTiers;
 
-=head1 NAME
+our $VERSION = "1.003";
 
-our $VERSION = "1.002";
+=head1 NAME
 
 BSE::TB::Coupon - shop coupon objects
 
@@ -47,18 +47,26 @@ sub defaults {
 
 Return the tier ids for a coupon.
 
+This includes an entry for tier "0" if the coupon is untiered.
+
 =cut
 
 sub tiers {
   my ($self) = @_;
 
-  return BSE::TB::CouponTiers->getColumnBy
+  my @tiers =
     (
-     tier_id =>
-     [
-      coupon_id => $self->id
-     ]
+     ( $self->untiered ? ( 0 ) : () ),
+     BSE::TB::CouponTiers->getColumnBy
+     (
+      tier_id =>
+      [
+       coupon_id => $self->id
+      ]
+     )
     );
+
+  return wantarray ? @tiers : \@tiers;
 }
 
 =item tier_objects
@@ -83,6 +91,9 @@ Set the tiers for a coupon.
 sub set_tiers {
   my ($self, $tiers) = @_;
 
+  my @tiers = grep $_, @$tiers;
+  $self->set_untiered((grep $_ == 0, @$tiers) ? 1 : 0);
+
   my %current = map { $_->tier_id => $_ }
     BSE::TB::CouponTiers->getBy2
        (
@@ -91,11 +102,11 @@ sub set_tiers {
         ]
        );
 
-  my %keep = map { $_->tier_id => $_ } grep $_, delete @current{@$tiers};
+  my %keep = map { $_->tier_id => $_ } grep $_, delete @current{@tiers};
 
   $_->remove for values %current;
 
-  for my $tier_id (grep !$keep{$_}, @$tiers) {
+  for my $tier_id (grep !$keep{$_}, @tiers) {
     BSE::TB::CouponTiers->make
        (
         coupon_id => $self->id,
@@ -277,24 +288,21 @@ sub fields {
       {
        values => sub {
         require BSE::TB::PriceTiers;
-        BSE::TB::PriceTiers->getColumnsBy
-            (
-             [ qw(id description) ],
-             [ ],
-             { order => "display_order asc" },
-            );
+        return
+          [
+           { id => 0, description => "Untiered" },
+           BSE::TB::PriceTiers->getColumnsBy
+           (
+            [ qw(id description) ],
+            [ ],
+            { order => "display_order asc" },
+           ),
+          ];
        },
        id => "id",
        label => "description",
       },
      },
-     untiered =>
-     {
-      description => "Untiered",
-      htmltype => "checkbox",
-      units => "Applies to untiered products too",
-      default => 1,
-     },
     );
 
   if (ref $self && !$self->is_renamable) {
index d551477..24894f5 100644 (file)
@@ -4,7 +4,7 @@ use Squirrel::Table;
 our @ISA = qw(Squirrel::Table);
 use BSE::TB::Coupon;
 
-our $VERSION = "1.000";
+our $VERSION = "1.001";
 
 sub rowClass {
   return 'BSE::TB::Coupon';
@@ -19,6 +19,7 @@ sub make {
 
   if ($tiers) {
     $coupon->set_tiers($tiers);
+    $coupon->save;
   }
 
   return $coupon;
index 80c7d12..00ba85f 100644 (file)
@@ -21,7 +21,7 @@ use BSE::CfgInfo qw(cfg_dist_image_uri);
 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.023";
+our $VERSION = "1.024";
 
 my %actions =
   (
@@ -1278,6 +1278,28 @@ Display a form for adding new coupons.
 
 Template: F<admin/coupons/add>
 
+Template variables:
+
+=over
+
+=item *
+
+C<fields> - coupon fields.
+
+=item *
+
+C<coupon> - set to undef.
+
+=item *
+
+C<errors> - an errors from an attempted save.
+
+=item *
+
+C<tiers> - a list of defined price tiers.
+
+=back
+
 =cut
 
 sub req_coupon_addform {
@@ -1291,6 +1313,8 @@ sub req_coupon_addform {
   $req->set_variable(fields => BSE::TB::Coupon->fields);
   $req->set_variable(coupon => undef);
   $req->set_variable(errors => $errors || {});
+  require BSE::TB::PriceTiers;
+  $req->set_variable(tiers => [ BSE::TB::PriceTiers->all ]);
 
   return $req->dyn_response("admin/coupons/add", \%acts);
 }
@@ -1405,6 +1429,28 @@ Requires C<id> as a coupon id to edit.
 
 Template: F<admin/coupons/edit>
 
+Template variables:
+
+=over
+
+=item *
+
+C<fields> - coupon fields.
+
+=item *
+
+C<coupon> - the coupon being edited
+
+=item *
+
+C<errors> - an errors from an attempted save.
+
+=item *
+
+C<tiers> - a list of defined price tiers.
+
+=back
+
 =cut
 
 sub req_coupon_edit {
@@ -1422,6 +1468,8 @@ sub req_coupon_edit {
   $req->set_variable(fields => $coupon->fields);
   $req->set_variable(coupon => $coupon);
   $req->set_variable(errors => $errors || {});
+  require BSE::TB::PriceTiers;
+  $req->set_variable(tiers => [ BSE::TB::PriceTiers->all ]);
 
   return $req->dyn_response("admin/coupons/edit", \%acts);
 }
index f0b76ca..caa4d2a 100644 (file)
@@ -16,7 +16,6 @@
     <:.call "field", "name":"release" :>
     <:.call "field", "name":"expiry" :>
     <:.call "field", "name":"discount_percent" :>
-    <:.call "field", "name":"untiered" :>
     <:.call "field", "name":"campaign" :>
   </fieldset>
   <:.call "fieldset", "name":"tiers" :>
index d91ed0b..9eab3ab 100644 (file)
@@ -17,7 +17,6 @@
     <:.call "field", "name":"release" :>
     <:.call "field", "name":"expiry" :>
     <:.call "field", "name":"discount_percent" :>
-    <:.call "field", "name":"untiered" :>
     <:.call "field", "name":"campaign" :>
   </fieldset>
   <:.call "fieldset", "name":"tiers" :>