diff options
| author | ivan <ivan> | 2010-07-13 11:09:55 +0000 | 
|---|---|---|
| committer | ivan <ivan> | 2010-07-13 11:09:55 +0000 | 
| commit | 7bab9a9fae4b88014262f7154e54874adcf3d947 (patch) | |
| tree | 848255257d04dcf5b603e815f8b0f0e5c29c3d70 | |
| parent | e491946343abd5b7dddfd19f20a44ceb767bd37b (diff) | |
notices, RT#8324
| -rw-r--r-- | FS/FS/Mason.pm | 1 | ||||
| -rw-r--r-- | FS/FS/cust_main.pm | 11 | ||||
| -rw-r--r-- | FS/FS/msg_template.pm | 121 | ||||
| -rw-r--r-- | httemplate/edit/elements/edit.html | 5 | ||||
| -rw-r--r-- | httemplate/edit/msg_template.html | 8 | ||||
| -rw-r--r-- | httemplate/elements/htmlarea.html | 3 | 
6 files changed, 148 insertions, 1 deletions
| diff --git a/FS/FS/Mason.pm b/FS/FS/Mason.pm index e7cae4994..00b955c9d 100644 --- a/FS/FS/Mason.pm +++ b/FS/FS/Mason.pm @@ -446,6 +446,7 @@ sub mason_interps {      escape_flags => { 'js_string' => sub {                          #${$_[0]} =~ s/(['\\\n])/'\\'.($1 eq "\n" ? 'n' : $1)/ge;                          ${$_[0]} =~ s/(['\\])/\\$1/g; +                        ${$_[0]} =~ s/\r/\\r/g;                          ${$_[0]} =~ s/\n/\\n/g;                          ${$_[0]} = "'". ${$_[0]}. "'";                        } diff --git a/FS/FS/cust_main.pm b/FS/FS/cust_main.pm index ad61d8c1b..bc1838ebe 100644 --- a/FS/FS/cust_main.pm +++ b/FS/FS/cust_main.pm @@ -2385,6 +2385,17 @@ sub agent {    qsearchs( 'agent', { 'agentnum' => $self->agentnum } );  } +=item agent_name + +Returns the agent name (see L<FS::agent>) for this customer. + +=cut + +sub agent_name { +  my $self = shift; +  $self->agent->agent; +} +  =item bill_and_collect   Cancels and suspends any packages due, generates bills, applies payments and diff --git a/FS/FS/msg_template.pm b/FS/FS/msg_template.pm index 7bf050441..83acde245 100644 --- a/FS/FS/msg_template.pm +++ b/FS/FS/msg_template.pm @@ -2,6 +2,9 @@ package FS::msg_template;  use strict;  use base qw( FS::Record ); +use Text::Template; +use FS::Misc qw( generate_email send_email ); +use FS::Conf;  use FS::Record qw( qsearch qsearchs );  =head1 NAME @@ -130,6 +133,124 @@ sub check {    $self->SUPER::check;  } +=item send OPTION => VALUE, ... + +Fills in the template and emails it to the customer. + +Options are passed as a list of name/value pairs: + +=over 4 + +=item cust_main + +Customer object (required). + +=item object + +Additional context object (currently, can be a cust_main object, cust_pkg +object, or cust_bill object). + +=back + +=cut + +sub send { +  my( $self, %opt ) = @_; + +  my $cust_main = $opt{'cust_main'}; +  my $object = $opt{'object'}; + +  ### +  # fill-in +  ### + +  my $subs = $self->substitutions; +   +  use Data::Dumper; +  warn Dumper($subs); + +  #XXX html escape this stuff +  my %hash = map { $_ => $cust_main->$_() } @{ $subs->{'cust_main'} }; +  unless ( ! $object || $object->table eq 'cust_main' ) { +    %hash = ( %hash, map { $_ => $object->$_() } @{ $subs->{$object->table} } ); +  } +  warn Dumper(\%hash); + +  my $subject_tmpl = new Text::Template ( +    TYPE   => 'STRING', +    SOURCE => $self->subject, +  ); +  my $subject = $subject_tmpl->fill_in( HASH => \%hash ); + +  my $body_tmpl = new Text::Template ( +    TYPE   => 'STRING', +    SOURCE => $self->body, +  ); +  my $body = $body_tmpl->fill_in( HASH => \%hash ); + +  ### +  # and email +  ### + +  my @to = $cust_main->invoicing_list_emailonly; +  #unless (@to) { #XXX do something } + +  my $conf = new FS::Conf; + +  send_email( +    generate_email( +       #XXX override from in event? +      'from' => scalar( $conf->config('invoice_from', $cust_main->agentnum) ), +      'to'   => \@to, +      'subject'   => $subject, +      'html_body' => $body, +      #XXX auto-make a text copy w/HTML::FormatText? +      #  alas, us luddite mutt/pine users just aren't that big a deal +    ) +  ); + +} + +#return contexts and fill-in values +sub substitutions { +  { 'cust_main' => [qw( +      display_custnum agentnum agent_name + +      last first company +      name name_short contact contact_firstlast +      address1 address2 city county state zip +      country +      daytime night fax + +      has_ship_address +      ship_last ship_first ship_company +      ship_name ship_name_short ship_contact ship_contact_firstlast +      ship_address1 ship_address2 ship_city ship_county ship_state ship_zip +      ship_country +      ship_daytime ship_night ship_fax + +      payby paymask payname paytype payip +      num_cancelled_pkgs num_ncancelled_pkgs num_pkgs +      classname categoryname +      balance +      invoicing_list_emailonly +      cust_status ucfirst_cust_status cust_statuscolor +    )], +    #XXX make these pretty: signupdate dundate paydate_monthyear usernum +    # next_bill_date + +    'cust_pkg'  => [qw( +    )], +    #XXX these are going to take more pretty-ing up + +    'cust_bill' => [qw( +      invnum +    )], +    #XXX not really thinking about cust_bill substitutions quite yet + +  }; +} +  =back  =head1 BUGS diff --git a/httemplate/edit/elements/edit.html b/httemplate/edit/elements/edit.html index 45556efa7..f44dc949b 100644 --- a/httemplate/edit/elements/edit.html +++ b/httemplate/edit/elements/edit.html @@ -304,6 +304,11 @@ Example:  %   $include_common{$_} = $f->{$_}  %     foreach grep exists($f->{$_}), qw( hashref agent_virt agent_null_right );  % +%   #htmlarea +%   $include_common{$_} = $f->{$_} +%     foreach grep exists($f->{$_}), qw( width height ); +% +%  %   if ( $type eq 'tablebreak-tr-title' ) {  %     $include_common{'table_id'} = 'TableNumber'. $tablenum++;  %   } diff --git a/httemplate/edit/msg_template.html b/httemplate/edit/msg_template.html index 6632d027a..68725e243 100644 --- a/httemplate/edit/msg_template.html +++ b/httemplate/edit/msg_template.html @@ -3,8 +3,14 @@                'table'         => 'msg_template',                'viewall_dir'   => 'browse',                'fields' => [ 'msgname', -                            { field=>'body', type=>'htmlarea' }, +                            'subject', +                            { field=>'body', type=>'htmlarea', width=>763 },                            ], +              'labels' => { 'msgnum'  => 'Template', +                            'msgname' => 'Template name', +                            'subject' => 'Message subject', +                            'body'    => 'Message template', +                          },            )  %>  <%init> diff --git a/httemplate/elements/htmlarea.html b/httemplate/elements/htmlarea.html index dca4328ab..f00c77360 100644 --- a/httemplate/elements/htmlarea.html +++ b/httemplate/elements/htmlarea.html @@ -22,6 +22,9 @@ Example:    oFCKeditor.BasePath = '<% $p %>elements/fckeditor/';    oFCKeditor.Config['SkinPath'] = '<% $p %>elements/fckeditor/editor/skins/silver/'; +% if ( $opt{'width'} ) { +    oFCKeditor.Width = '<% $opt{'width'} %>'; +% }    oFCKeditor.Height = '<% $opt{'height'} || 420 %>';    oFCKeditor.Config['StartupFocus'] = true;    oFCKeditor.Config['EnterMode'] = 'br'; | 
