=item cust_main
-Customer object (required).
+Customer object (optional)
=item object
sub prepare {
my( $self, %opt ) = @_;
- my $cust_main = $opt{'cust_main'} or die 'cust_main required';
- my $object = $opt{'object'} or die 'object required';
+ my $cust_main = $opt{'cust_main'}; # or die 'cust_main required';
+ my $object = $opt{'object'}; # or die 'object required';
+
+ my $locale = $cust_main ? $cust_main->locale : '';
- # localization
- my $locale = $cust_main->locale || '';
warn "no locale for cust#".$cust_main->custnum."; using default content\n"
- if $DEBUG and !$locale;
- my $content = $self->content($cust_main->locale);
- warn "preparing template '".$self->msgname."' to cust#".$cust_main->custnum."\n"
- if($DEBUG);
+ if $DEBUG and $cust_main and !$locale;
+
+ my $content = $self->content( $locale );
+
+ warn sprintf(
+ "preparing template '%s' to cust#%s\n",
+ $self->msgname,
+ $cust_main ? $cust_main->custnum : 'none'
+ ) if $DEBUG;
my $subs = $self->substitutions;
# create substitution table
###
my %hash;
- my @objects = ($cust_main);
- my @prefixes = ('');
+ my ( @objects, @prefixes );
+ if ( $cust_main ) {
+ @objects = ( $cust_main );
+ @prefixes = ( '' );
+ }
my $svc;
if( ref $object ) {
if( ref($object) eq 'ARRAY' ) {
my @to;
if ( exists($opt{'to'}) ) {
+
@to = split(/\s*,\s*/, $opt{'to'});
+
+ } elsif ( $cust_main ) {
+
+ my @classes;
+ if ( $opt{'to_contact_classnum'} ) {
+ my $classnum = $opt{'to_contact_classnum'};
+ @classes = ref($classnum) ? @$classnum : split(',', $classnum);
+ }
+ if (!@classes) {
+ @classes = ( 'invoice' );
+ }
+ @to = $cust_main->contact_list_email(@classes);
+
+ } else {
+
+ die 'no To: address or cust_main object specified';
+
}
- else {
- @to = $cust_main->invoicing_list_emailonly;
- }
- # no warning when preparing with no destination
my $from_addr = $self->from_addr;
if ( !$from_addr ) {
+ my @agentnum = ( $cust_main->agentnum ) if $cust_main;
if ( $opt{'from_config'} ) {
- $from_addr = scalar( $conf->config($opt{'from_config'},
- $cust_main->agentnum) );
+ $from_addr = scalar( $conf->config( $opt{'from_config'}, @agentnum ));
}
- $from_addr ||= $conf->invoice_from_full($cust_main->agentnum);
+ $from_addr ||= $conf->invoice_from_full( @agentnum );
}
# my @cust_msg = ();
# if ( $conf->exists('log_sent_mail') and !$opt{'preview'} ) {
->format( HTML::TreeBuilder->new_from_content($body) )
);
(
- 'custnum' => $cust_main->custnum,
- 'msgnum' => $self->msgnum,
- 'from' => $from_addr,
- 'to' => \@to,
- 'bcc' => $self->bcc_addr || undef,
+ 'custnum' => $cust_main ? $cust_main->custnum : undef,
+ 'msgnum' => $self->msgnum,
+ 'from' => $from_addr,
+ 'to' => \@to,
+ 'bcc' => $self->bcc_addr || undef,
'subject' => $subject,
'html_body' => $body,
'text_body' => $text_body,
###
$self->_populate_initial_data;
+ ### Fix dump-email_to (needs to happen after _populate_initial_data)
+ if ($conf->config('dump-email_to')) {
+ # anyone who still uses dump-email_to should have just had this created
+ my ($msg_template) = qsearch('msg_template',{ msgname => 'System log' });
+ if ($msg_template) {
+ eval "use FS::log_email;";
+ die $@ if $@;
+ my $log_email = new FS::log_email {
+ 'context' => 'Cron::backup',
+ 'min_level' => 1,
+ 'msgnum' => $msg_template->msgnum,
+ 'to_addr' => $conf->config('dump-email_to'),
+ };
+ my $error = $log_email->insert;
+ die $error if $error;
+ $conf->delete('dump-email_to');
+ }
+ }
+
}
sub _populate_initial_data { #class method
eval "use FS::msg_template::InitialData;";
die $@ if $@;
+ eval "use FS::upgrade_journal;";
+ die $@ if $@;
my $initial_data = FS::msg_template::InitialData->_initial_data;
foreach my $hash ( @$initial_data ) {
next if $hash->{_conf} && $conf->config( $hash->{_conf} );
+ next if $hash->{_upgrade_journal} && FS::upgrade_journal->is_done( $hash->{_upgrade_journal} );
my $msg_template = new FS::msg_template($hash);
my $error = $msg_template->insert( @{ $hash->{_insert_args} || [] } );
die $error if $error;
$conf->set( $hash->{_conf}, $msg_template->msgnum ) if $hash->{_conf};
+ FS::upgrade_journal->set_done( $hash->{_upgrade_journal} );
}