import torrus 1.0.9
[freeside.git] / FS / FS / Cron / notify.pm
index 622f15f..3d427b2 100644 (file)
@@ -3,8 +3,8 @@ package FS::Cron::notify;
 use strict;
 use vars qw( @ISA @EXPORT_OK $DEBUG );
 use Exporter;
-use FS::UID qw( dbh );
-use FS::Record qw(qsearch);
+use FS::UID qw( dbh driver_name );
+use FS::Record qw(qsearch qsearchs);
 use FS::cust_main;
 use FS::cust_pkg;
 
@@ -21,6 +21,10 @@ sub notify_flat_delay {
   
   #we're at now now (and later).
   my($time) = $^T;
+  my $conf = new FS::Conf;
+  my $error = '';
+
+  my $integer = driver_name =~ /^mysql/ ? 'SIGNED' : 'INTEGER';
 
   # select * from cust_pkg where
   my $where_pkg = <<"END";
@@ -30,23 +34,29 @@ sub notify_flat_delay {
       0 < ( select count(*) from part_pkg
               where cust_pkg.pkgpart = part_pkg.pkgpart
                 and part_pkg.plan = 'flat_delayed'
-                and 0 < ( select count (*) from part_pkg_option
+                and 0 < ( select count(*) from part_pkg_option
                             where part_pkg.pkgpart = part_pkg_option.pkgpart
                               and part_pkg_option.optionname = 'recur_notify'
-                              and part_pkg_option.optionvalue > 0
-                              and 0 <= $time
-                                + cast(part_pkg_option.optionvalue as integer)
-                                  * 86400
-                                - cust_pkg.bill
+                              and CAST( part_pkg_option.optionvalue AS $integer ) > 0
+                              and 0 <= ( $time
+                                         + CAST( part_pkg_option.optionvalue AS $integer )
+                                           * 86400
+                                         - cust_pkg.bill
+                                       )
                               and ( cust_pkg.expire is null
-                                or  cust_pkg.expire > $time
-                                  + cast(part_pkg_option.optionvalue as integer)
-                                    * 86400
-/*                            and ( cust_pkg.adjourn is null
-                                or  cust_pkg.adjourn > $time
--- Should notify suspended ones   + cast(part_pkg_option.optionvalue as integer)
-                                    * 86400
-*/
+                                or  cust_pkg.expire > ( $time
+                                                        + CAST( part_pkg_option.optionvalue AS $integer )
+                                                          * 86400
+                                                      )
+END
+
+#/*                            and ( cust_pkg.adjourn is null
+#                                or  cust_pkg.adjourn > $time
+#-- Should notify suspended ones  + cast(part_pkg_option.optionvalue as $integer)
+#                                    * 86400
+#*/
+
+  $where_pkg .= <<"END";
                                   )
                         )
           )
@@ -54,7 +64,7 @@ sub notify_flat_delay {
       0 = ( select count(*) from cust_pkg_option
               where cust_pkg.pkgnum = cust_pkg_option.pkgnum
                 and cust_pkg_option.optionname = 'impending_recur_notification_sent'
-                and cust_pkg_option.optionvalue = 1
+                and CAST( cust_pkg_option.optionvalue AS $integer ) = 1
           )
 END
   
@@ -93,14 +103,22 @@ END
       push @cust_pkgs, $cust_pkg[0];
       shift @cust_pkg;
     }
-    my $error = 
-      $cust_main->notify( 'impending_recur_template',
+    my $msgnum = $conf->config('impending_recur_msgnum',$cust_main->agentnum);
+    if ( $msgnum ) {
+      my $msg_template = qsearchs('msg_template', { msgnum => $msgnum });
+      $cust_main->setfield('packages', \\@packages);
+      $cust_main->setfield('recurdates', \\@recurdates);
+      $error = $msg_template->send('cust_main' => $cust_main);
+    }
+    else {
+      $error = $cust_main->notify( 'impending_recur_template',
                           'extra_fields' => { 'packages'   => \@packages,
                                               'recurdates' => \@recurdates,
                                               'package'    => $packages[0],
                                               'recurdate'  => $recurdates[0],
                                             },
                         );
+    } #if $msgnum
     warn "Error notifying, custnum ". $cust_main->custnum. ": $error" if $error;
 
     unless ($error) {