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;
#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";
- where ( cancel is null or cancel = 0 )
- and ( bill > 0 )
- and
- 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
- 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 ( cust_pkg.expire is null
- or cust_pkg.expire > $time
- + cast(part_pkg_option.optionvalue as integer)
- * 86400
+ WHERE ( cancel IS NULL OR cancel = 0 )
+ AND ( bill > 0 )
+ AND EXISTS (
+ SELECT 1 FROM part_pkg
+ WHERE cust_pkg.pkgpart = part_pkg.pkgpart
+ AND part_pkg.plan = 'flat_delayed'
+ AND EXISTS ( SELECT 1 from part_pkg_option
+ WHERE part_pkg.pkgpart = part_pkg_option.pkgpart
+ AND part_pkg_option.optionname = 'recur_notify'
+ 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
+ )
END
-#/* and ( cust_pkg.adjourn is null
-# or cust_pkg.adjourn > $time
-#-- Should notify suspended ones + 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
#*/
$where_pkg .= <<"END";
- )
- )
- )
- and
- 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 NOT EXISTS (
+ SELECT 1 from cust_pkg_option
+ WHERE cust_pkg.pkgnum = cust_pkg_option.pkgnum
+ AND cust_pkg_option.optionname = 'impending_recur_notification_sent'
+ AND CAST( cust_pkg_option.optionvalue AS $integer ) = 1
+ )
END
if ($opt{a}) {
$where_pkg .= <<END;
- and 0 < ( select count(*) from cust_main
- where cust_pkg.custnum = cust_main.custnum
- and cust_main.agentnum = $opt{a}
- )
+ AND EXISTS ( SELECT 1 from cust_main
+ WHERE cust_pkg.custnum = cust_main.custnum
+ AND cust_main.agentnum IN ( $opt{a} )
+ )
END
}
push @cust_pkgs, $cust_pkg[0];
shift @cust_pkg;
}
- my $error =
- $cust_main->notify( 'impending_recur_template',
- 'extra_fields' => { 'packages' => \@packages,
- 'recurdates' => \@recurdates,
- 'package' => $packages[0],
- 'recurdate' => $recurdates[0],
- },
- );
+ 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,
+ 'object' => $cust_main);
+ }
warn "Error notifying, custnum ". $cust_main->custnum. ": $error" if $error;
unless ($error) {