X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2FCron%2Fnotify.pm;h=34977c8e6d0cad6aa02b27209a8ba351d96f15d5;hb=f822e27a1e00594332ffa487a1c284234c5580a6;hp=37106509415e455e76e64fc9cac62dc0d01300d8;hpb=b270bdf15e7ac5e9c47a127f82625da25ff16436;p=freeside.git diff --git a/FS/FS/Cron/notify.pm b/FS/FS/Cron/notify.pm index 371065094..34977c8e6 100644 --- a/FS/FS/Cron/notify.pm +++ b/FS/FS/Cron/notify.pm @@ -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,44 +21,59 @@ 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"; - 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 - ) - ) - ) - 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 - ) + 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 +#*/ + + $where_pkg .= <<"END"; + ) + ) + ) + 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 .= <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) {