],
},
+ {
+ 'key' => 'agent-email_day',
+ 'section' => '',
+ 'description' => 'On this day of each month, agents with master customer records containing email addresses will be emailed a list of their customers and balances.',
+ 'type' => 'text',
+ },
+
{ key => "apacheroot", section => "deprecated", description => "<b>DEPRECATED</b>", type => "text" },
{ key => "apachemachine", section => "deprecated", description => "<b>DEPRECATED</b>", type => "text" },
{ key => "apachemachines", section => "deprecated", description => "<b>DEPRECATED</b>", type => "text" },
--- /dev/null
+package FS::Cron::agent_email;
+use base qw( Exporter );
+
+use strict;
+use vars qw( @EXPORT_OK $DEBUG );
+use Date::Simple qw(today);
+use URI::Escape;
+use FS::Mason qw( mason_interps );
+use FS::Conf;
+use FS::Misc qw(send_email);
+use FS::Record qw(qsearch);# qsearchs);
+use FS::agent;
+
+@EXPORT_OK = qw ( agent_email );
+$DEBUG = 1;
+
+sub agent_email {
+ my %opt = @_;
+
+ my $conf = new FS::Conf;
+
+ my $day = $conf->config('agent-email_day') or return;
+ return unless $day == today->day;
+
+ if ( 1 ) { #XXX if ( %%%RT_ENABLED%%% ) {
+ require RT;
+ RT::LoadConfig();
+ RT::Init();
+ RT::ConnectToDatabase();
+ }
+
+ my $from = $conf->config('invoice_from');
+
+ my $outbuf = '';;
+ my( $fs_interp, $rt_interp ) = mason_interps('standalone', 'outbuf'=>\$outbuf);
+
+ my $comp = '/search/cust_main.html';
+ my %args = (
+ 'cust_fields' => 'Cust# | Cust. Status | Customer | Current Balance',
+ '_type' => 'html-print',
+ );
+ my $query = join('&', map "$_=".uri_escape($args{$_}), keys %args );
+
+ my $extra_sql = $opt{a} ? " AND agentnum IN ( $opt{a} ) " : '';
+
+ foreach my $agent ( qsearch({
+ 'table' => 'agent',
+ 'hashref' => {
+ 'disabled' => '',
+ 'agent_custnum' => { op=>'!=', value=>'' },
+ },
+ 'extra_sql' => $extra_sql,
+ })
+ )
+ {
+
+ $FS::Mason::Request::QUERY_STRING = $query. '&agentnum='. $agent->agentnum;
+ $fs_interp->exec($comp);
+
+ my @email = $agent->agent_cust_main->invoicing_list or next;
+
+ warn "emailing ". join(',',@email). " for agent ". $agent->agent. "\n"
+ if $DEBUG;
+ send_email(
+ 'from' => $from,
+ 'to' => \@email,
+ 'subject' => 'Customer report',
+ 'body' => $outbuf,
+ 'content-type' => 'text/html',
+ #'content-encoding'
+ );
+
+ $outbuf = '';
+
+ }
+
+}
+
+1;
&untaint_argv; #what it sounds like (eww)
use vars qw(%opt);
-getopts("p:a:d:vl:sy:nmrkg:uo", \%opt);
+getopts("p:a:d:vl:sy:nmrkg:o", \%opt);
my $user = shift or die &usage;
adminsuidsetup $user;
notify_flat_delay(%opt);
}
-#debian Pg 8.1+ auto-vaccums, 7.4 w/postgresql-contrib
-if ( $opt{u} ) {
- use FS::Cron::vacuum qw(vacuum);
- vacuum();
-}
-
-#you can skip this just by not having the config
-use FS::Cron::backup qw(backup);
-backup();
-
#same
use FS::Cron::rt_tasks qw(rt_daily);
rt_daily(%opt);
batch_submit(%opt);
batch_receive(%opt);
+#you can skip this by not having the config
+use FS::Cron::agent_email qw(agent_email);
+agent_email(%opt);
+
my $deldir = "$FS::UID::cache_dir/cache.$FS::UID::datasrc/";
unlink <${deldir}.invoice*>;
unlink <${deldir}.letter*>;
unlink <${deldir}.CGItemp*>;
+#backup should be last
+#you can skip this just by not having the config
+use FS::Cron::backup qw(backup);
+backup();
+
###
# subroutines
###
-k: skip notify_flat_delay
- -u: Do a vacuum (starting with version 1.9, this is not run by default).
-
user: From the mapsecrets file - see config.html from the base documentation
custnum: if one or more customer numbers are specified, only bills those
--- /dev/null
+#!/usr/bin/perl
+
+use strict;
+use Getopt::Std;
+use FS::UID qw(adminsuidsetup);
+
+&untaint_argv; #what it sounds like (eww)
+use vars qw(%opt);
+getopts("a:", \%opt);
+
+my $user = shift or die &usage;
+adminsuidsetup $user;
+
+use FS::Cron::agent_email qw(agent_email);
+agent_email(%opt);
+
+###
+# subroutines
+###
+
+sub untaint_argv {
+ foreach $_ ( $[ .. $#ARGV ) { #untaint @ARGV
+ #$ARGV[$_] =~ /^([\w\-\/]*)$/ || die "Illegal arguement \"$ARGV[$_]\"";
+ # Date::Parse
+ $ARGV[$_] =~ /^(.*)$/ || die "Illegal arguement \"$ARGV[$_]\"";
+ $ARGV[$_]=$1;
+ }
+}
+
+1;