add pkg_freq event condition, RT#8896
authormark <mark>
Thu, 29 Jul 2010 23:11:31 +0000 (23:11 +0000)
committermark <mark>
Thu, 29 Jul 2010 23:11:31 +0000 (23:11 +0000)
FS/FS/Misc.pm
FS/FS/part_event/Condition/pkg_freq.pm [new file with mode: 0644]
FS/FS/part_pkg.pm

index 19ac35c..3b0616a 100644 (file)
@@ -8,6 +8,7 @@ use Data::Dumper;
 use IPC::Run qw( run timeout );   # for _pslatex
 use IPC::Run3; # for do_print... should just use IPC::Run i guess
 use File::Temp;
+use Tie::IxHash;
 #do NOT depend on any FS:: modules here, causes weird (sometimes unreproducable
 #until on client machine) dependancy loops.  put them in FS::Misc::Something
 #instead
@@ -16,6 +17,7 @@ use File::Temp;
 @EXPORT_OK = qw( send_email generate_email send_fax
                  states_hash counties cities state_label
                  card_types
+                 pkg_freqs
                  generate_ps generate_pdf do_print
                  csv_from_fixed
                );
@@ -608,6 +610,39 @@ sub card_types {
   \%card_types;
 }
 
+=item pkg_freqs
+
+Returns a hash reference of allowed package billing frequencies.
+
+=cut
+
+sub pkg_freqs {
+  tie my %freq, 'Tie::IxHash', (
+    '0'    => '(no recurring fee)',
+    '1h'   => 'hourly',
+    '1d'   => 'daily',
+    '2d'   => 'every two days',
+    '3d'   => 'every three days',
+    '1w'   => 'weekly',
+    '2w'   => 'biweekly (every 2 weeks)',
+    '1'    => 'monthly',
+    '45d'  => 'every 45 days',
+    '2'    => 'bimonthly (every 2 months)',
+    '3'    => 'quarterly (every 3 months)',
+    '4'    => 'every 4 months',
+    '137d' => 'every 4 1/2 months (137 days)',
+    '6'    => 'semiannually (every 6 months)',
+    '12'   => 'annually',
+    '13'   => 'every 13 months (annually +1 month)',
+    '24'   => 'biannually (every 2 years)',
+    '36'   => 'triannually (every 3 years)',
+    '48'   => '(every 4 years)',
+    '60'   => '(every 5 years)',
+    '120'  => '(every 10 years)',
+  ) ;
+  \%freq;
+}
+
 =item generate_ps FILENAME
 
 Returns an postscript rendition of the LaTex file, as a scalar.
diff --git a/FS/FS/part_event/Condition/pkg_freq.pm b/FS/FS/part_event/Condition/pkg_freq.pm
new file mode 100644 (file)
index 0000000..1fb8484
--- /dev/null
@@ -0,0 +1,36 @@
+package FS::part_event::Condition::pkg_freq;
+
+use strict;
+use FS::Misc;
+use FS::cust_pkg;
+
+use base qw( FS::part_event::Condition );
+
+sub description { 'Package billing frequency'; }
+
+sub option_fields {
+  my $freqs = FS::Misc::pkg_freqs();
+  (
+    'freq' => { 'label'      => 'Frequency',
+                'type'       => 'select',
+                'labels'     => $freqs,
+                'options'    => [ keys(%$freqs) ],
+              },
+  );
+}
+
+sub eventtable_hashref {
+  { 'cust_main' => 0,
+    'cust_bill' => 0,
+    'cust_pkg'  => 1,
+  };
+}
+
+sub condition {
+  my($self, $cust_pkg) = @_;
+
+  $cust_pkg->part_pkg->freq eq $self->option('freq')
+}
+
+1;
+
index ef7f557..f278d5e 100644 (file)
@@ -774,34 +774,9 @@ sub is_free {
 sub can_discount { 0; }
 
 sub freqs_href {
-  #method, class method or sub? #my $self = shift;
-
-  tie my %freq, 'Tie::IxHash', 
-    '0'    => '(no recurring fee)',
-    '1h'   => 'hourly',
-    '1d'   => 'daily',
-    '2d'   => 'every two days',
-    '3d'   => 'every three days',
-    '1w'   => 'weekly',
-    '2w'   => 'biweekly (every 2 weeks)',
-    '1'    => 'monthly',
-    '45d'  => 'every 45 days',
-    '2'    => 'bimonthly (every 2 months)',
-    '3'    => 'quarterly (every 3 months)',
-    '4'    => 'every 4 months',
-    '137d' => 'every 4 1/2 months (137 days)',
-    '6'    => 'semiannually (every 6 months)',
-    '12'   => 'annually',
-    '13'   => 'every 13 months (annually +1 month)',
-    '24'   => 'biannually (every 2 years)',
-    '36'   => 'triannually (every 3 years)',
-    '48'   => '(every 4 years)',
-    '60'   => '(every 5 years)',
-    '120'  => '(every 10 years)',
-  ;
-
-  \%freq;
-
+  # moved to FS::Misc to make this accessible to other packages
+  # at initialization
+  FS::Misc::pkg_freqs();
 }
 
 =item freq_pretty