sub prepare {
my( $self, %opt ) = @_;
- my $cust_main = $opt{'cust_main'} or die 'cust_main required';
+ my $cust_main = $opt{'cust_main'}; # or die 'cust_main required';
my $object = $opt{'object'} or die 'object required';
# localization
- my $locale = $cust_main->locale || '';
+ my $locale = $cust_main && $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 && !$locale;
+ my $content = $self->content($locale);
+
+ warn "preparing template '".$self->msgname."\n"
+ if $DEBUG;
my $subs = $self->substitutions;
# create substitution table
###
my %hash;
- my @objects = ($cust_main);
+ my @objects = ();
+ push @objects, $cust_main if $cust_main;
my @prefixes = ('');
my $svc;
if( ref $object ) {
my @to;
if ( exists($opt{'to'}) ) {
@to = split(/\s*,\s*/, $opt{'to'});
- }
- else {
+ } elsif ( $cust_main ) {
@to = $cust_main->invoicing_list_emailonly;
+ } else {
+ die 'no To: address or cust_main object specified';
}
- # no warning when preparing with no destination
my $from_addr = $self->from_addr;
if ( !$from_addr ) {
+
+ my $agentnum = $cust_main ? $cust_main->agentnum : '';
+
if ( $opt{'from_config'} ) {
- $from_addr = scalar( $conf->config($opt{'from_config'},
- $cust_main->agentnum) );
+ $from_addr = $conf->config($opt{'from_config'}, $agentnum);
}
- $from_addr ||= scalar( $conf->config('invoice_from',
- $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 : ''),
+ 'msgnum' => $self->msgnum,
+ 'from' => $from_addr,
+ 'to' => \@to,
+ 'bcc' => $self->bcc_addr || undef,
'subject' => $subject,
'html_body' => $body,
'text_body' => $text_body
# Graphics/stylesheets should probably go in /var/www on the Freeside
# machine.
+ my $script_path = `/usr/bin/which freeside-wkhtmltopdf`;
+ chomp $script_path;
my $kit = PDF::WebKit->new(\$html); #%options
# hack to use our wrapper script
- $kit->configure(sub { shift->wkhtmltopdf('freeside-wkhtmltopdf') });
+ $kit->configure(sub { shift->wkhtmltopdf($script_path) });
$kit->to_pdf;
}
balance
credit_limit
invoicing_list_emailonly
- cust_status ucfirst_cust_status cust_statuscolor
+ cust_status ucfirst_cust_status cust_statuscolor cust_status_label
signupdate dundate
packages recurdates
[ company_phonenum => sub {
$conf->config('company_phonenum', shift->agentnum)
} ],
+ [ selfservice_server_base_url => sub {
+ $conf->config('selfservice_server-base_url') #, shift->agentnum)
+ } ],
],
# next_bill_date
'cust_pkg' => [qw(
'cust_bill' => [qw(
invnum
_date
- )],
+ _date_pretty
+ due_date
+ ),
+ [ due_date2str => sub { shift->due_date2str('short') } ],
+ ],
#XXX not really thinking about cust_bill substitutions quite yet
# for welcome and limit warning messages
sub _upgrade_data {
my ($self, %opts) = @_;
+ ###
+ # First move any historical templates in config to real message templates
+ ###
+
my @fixes = (
[ 'alerter_msgnum', 'alerter_template', '', '', '' ],
[ 'cancel_msgnum', 'cancelmessage', 'cancelsubject', '', '' ],
} # if alerter_msgnum
}
+
+ ###
+ # Move subject and body from msg_template to template_content
+ ###
+
foreach my $msg_template ( qsearch('msg_template', {}) ) {
if ( $msg_template->subject || $msg_template->body ) {
# create new default content
die $error if $error;
}
}
+
+ ###
+ # Add new-style default templates if missing
+ ###
+ $self->_populate_initial_data;
+
+}
+
+sub _populate_initial_data { #class method
+ #my($class, %opts) = @_;
+ #my $class = shift;
+
+ eval "use FS::msg_template::InitialData;";
+ die $@ if $@;
+
+ my $initial_data = FS::msg_template::InitialData->_initial_data;
+
+ foreach my $hash ( @$initial_data ) {
+
+ next if $hash->{_conf} && $conf->config( $hash->{_conf} );
+
+ 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};
+
+ }
+
}
sub eviscerate {