Merge branch 'master' of git.freeside.biz:/home/git/freeside
authorIvan Kohler <ivan@freeside.biz>
Thu, 6 Mar 2014 00:11:52 +0000 (16:11 -0800)
committerIvan Kohler <ivan@freeside.biz>
Thu, 6 Mar 2014 00:11:52 +0000 (16:11 -0800)
FS/FS/Misc.pm
FS/FS/Schema.pm
FS/FS/cust_bill.pm
FS/FS/cust_msg.pm
FS/FS/cust_pay.pm
FS/FS/cust_pkg.pm
FS/FS/part_export/send_email.pm
FS/FS/pay_batch/nacha.pm
httemplate/search/cust_msg.html
httemplate/search/elements/search-html.html

index 9c18961..c598507 100644 (file)
@@ -267,7 +267,7 @@ sub send_email {
   }
 
   # Logging
-  if ( $conf->exists('log_sent_mail') and $options{'custnum'} ) {
+  if ( $conf->exists('log_sent_mail') ) {
     my $cust_msg = FS::cust_msg->new({
         'env_from'  => $options{'from'},
         'env_to'    => join(', ', @to),
@@ -278,6 +278,7 @@ sub send_email {
         'custnum'   => $options{'custnum'},
         'msgnum'    => $options{'msgnum'},
         'status'    => ($error ? 'failed' : 'sent'),
+        'msgtype'   => $options{'msgtype'},
     });
     $cust_msg->insert; # ignore errors
   }
@@ -337,7 +338,7 @@ sub generate_email {
 
   my $me = '[FS::Misc::generate_email]';
 
-  my @fields = qw(from to bcc subject custnum msgnum);
+  my @fields = qw(from to bcc subject custnum msgnum msgtype);
   my %return;
   @return{@fields} = @args{@fields};
 
index 9b1ce00..a9fc13d 100644 (file)
@@ -6013,7 +6013,7 @@ sub tables_hashref {
     'cust_msg' => {
       'columns' => [
         'custmsgnum', 'serial',     '',     '', '', '',
-        'custnum',       'int',     '',     '', '', '',
+        'custnum',       'int', 'NULL',     '', '', '',
         'msgnum',        'int', 'NULL',     '', '', '',
         '_date',    @date_type,                 '', '',
         'env_from',  'varchar', 'NULL',    255, '', '',
@@ -6022,6 +6022,7 @@ sub tables_hashref {
         'body',         'blob', 'NULL',     '', '', '',
         'error',     'varchar', 'NULL',    255, '', '',
         'status',    'varchar',     '',$char_d, '', '',
+        'msgtype',   'varchar', 'NULL',     16, '', '',
       ],
       'primary_key'  => 'custmsgnum',
       'unique'       => [ ],
index 83ddb65..3c0e3e7 100644 (file)
@@ -1065,6 +1065,8 @@ sub generate_email {
   my %return = (
     'from'      => $args{'from'},
     'subject'   => ($args{'subject'} || $self->email_subject),
+    'custnum'   => $self->custnum,
+    'msgtype'   => 'invoice',
   );
 
   $args{'unsquelch_cdr'} = $conf->exists('voip-cdr_email');
index c9cf686..8d57a54 100644 (file)
@@ -22,9 +22,9 @@ FS::cust_msg - Object methods for cust_msg records
 
 =head1 DESCRIPTION
 
-An FS::cust_msg object represents a template-generated message sent to 
-a customer (see L<FS::msg_template>).  FS::cust_msg inherits from
-FS::Record.  The following fields are currently supported:
+An FS::cust_msg object represents an email message generated by Freeside 
+and sent to a customer (see L<FS::msg_template>).  FS::cust_msg inherits 
+from FS::Record.  The following fields are currently supported:
 
 =over 4
 
@@ -34,6 +34,8 @@ FS::Record.  The following fields are currently supported:
 
 =item msgnum - template number
 
+=item msgtype - the message type
+
 =item _date - the time the message was sent
 
 =item env_from - envelope From address
@@ -125,8 +127,8 @@ sub check {
 
   my $error = 
     $self->ut_numbern('custmsgnum')
-    || $self->ut_number('custnum')
-    || $self->ut_foreign_key('custnum', 'cust_main', 'custnum')
+    || $self->ut_numbern('custnum')
+    || $self->ut_foreign_keyn('custnum', 'cust_main', 'custnum')
     || $self->ut_numbern('msgnum')
     || $self->ut_foreign_keyn('msgnum', 'msg_template', 'msgnum')
     || $self->ut_numbern('_date')
@@ -136,6 +138,11 @@ sub check {
     || $self->ut_anything('body')
     || $self->ut_enum('status', \@statuses)
     || $self->ut_textn('error')
+    || $self->ut_enum('msgtype', [  '',
+                                    'invoice',
+                                    'receipt',
+                                    'admin',
+                                 ])
   ;
   return $error if $error;
 
index 0f643c9..10b51ad 100644 (file)
@@ -616,11 +616,12 @@ sub send_receipt {
         'custnum' => $cust_main->custnum,
       };
       $error = $queue->insert(
-         FS::msg_template->by_key($msgnum)->prepare(
+        FS::msg_template->by_key($msgnum)->prepare(
           'cust_main'   => $cust_main,
           'object'      => $self,
           'from_config' => 'payment_receipt_from',
-        )
+        ),
+        'msgtype' => 'receipt', # override msg_template's default
       );
 
     } elsif ( $conf->exists('payment_receipt_email') ) {
@@ -663,6 +664,7 @@ sub send_receipt {
         'job'     => 'FS::Misc::process_send_generated_email',
         'paynum'  => $self->paynum,
         'custnum' => $cust_main->custnum,
+        'msgtype' => 'receipt',
       };
       $error = $queue->insert(
         'from'    => $conf->config('invoice_from', $cust_main->agentnum),
index 668de75..4ea3966 100644 (file)
@@ -923,6 +923,8 @@ sub cancel {
         'to'      => \@invoicing_list,
         'subject' => ( $conf->config('cancelsubject') || 'Cancellation Notice' ),
         'body'    => [ map "$_\n", $conf->config('cancelmessage') ],
+        'custnum' => $self->custnum,
+        'msgtype' => '', #admin?
       );
     }
     #should this do something on errors?
@@ -1343,6 +1345,8 @@ sub suspend {
           'Package : #'. $self->pkgnum. " (". $self->part_pkg->pkg_comment. ")\n",
           ( map { "Service : $_\n" } @labels ),
         ],
+        'custnum' => $self->custnum,
+        'msgtype' => 'admin'
       );
 
       if ( $error ) {
@@ -1589,6 +1593,8 @@ sub unsuspend {
           : ''
         ),
       ],
+      'custnum' => $self->custnum,
+      'msgtype' => 'admin',
     );
 
     if ( $error ) {
index 1fcb828..41f0409 100644 (file)
@@ -6,7 +6,6 @@ use FS::part_export;
 use FS::Record qw(qsearch qsearchs);
 use FS::Conf;
 use FS::msg_template;
-use FS::Misc qw(send_email);
 
 @ISA = qw(FS::part_export);
 
index 0662c3f..d6786e0 100644 (file)
@@ -185,7 +185,7 @@ $DEBUG = 0;
                                   #                    200 mixed debits&credits)
     sprintf('%06d', $batchcount). #Entry / Addenda Count
     $entry_hash.
-    sprintf('%012d', $batchtotal * 100). #Debit total
+    sprintf('%012.0f', $batchtotal * 100). #Debit total
     '000000000000'.               #Credit total
     $origin.                      #Company Identification (Immediate Origin)
     (' 'x19).                     #Message Authentication Code (19 char blank)
@@ -202,7 +202,7 @@ $DEBUG = 0;
     sprintf('%06d', $batchcount + 4).    #num of physical blocks on the file..?
     sprintf('%08d', $batchcount).        #total # of entry detail and addenda
     $entry_hash.
-    sprintf('%012d', $batchtotal * 100). #Debit total
+    sprintf('%012.0f', $batchtotal * 100). #Debit total
     '000000000000'.                      #Credit total
     ( ' 'x39 )                           #Reserved / blank
 
index f71a866..716addf 100644 (file)
@@ -5,7 +5,7 @@
        'count_query' => $count_query,
        'header' => [ 
                      'Date',
-                     'Template',
+                     'Type',
                      'Destination',
                      'Status',
                      '', #error
@@ -15,7 +15,9 @@
                        my $date = $_[0]->_date;
                        $date ? time2str('%Y-%m-%d %T',$_[0]->_date) : '' 
                      },
-                     'msgname',
+                     sub {
+                       ucfirst($_[0]->msgtype) || $_[0]->msgname
+                     },
                      sub {
                        join('<BR>', split(/,\s*/, $_[0]->env_to) )
                      },
                     '',
                     '',
                   ],
-       'color' => [ ('') x 3, 
-                     $statuscolor,
-                     $statuscolor,
+       'color' => [ '',
+                    $typecolor,
+                    '',
+                    $statuscolor,
+                    $statuscolor,
                   ],
        'html_init' => $html_init,
        'really_disable_download' => 1,
@@ -51,6 +55,9 @@ my @where;
 if ( $cgi->param('status') =~ /^(\w+)$/ ) {
   push @where, "status = '$1'";
 }
+if ( $cgi->param('msgtype') =~ /^(\w+)$/ ) {
+  push @where, "msgtype = '$1'";
+}
 my ($beginning, $ending) = FS::UI::Web::parse_beginning_ending($cgi, '');
 push @where, "(_date >= $beginning AND _date <= $ending)";
 
@@ -79,16 +86,22 @@ my $sub_popup_link = sub {
   include('/elements/popup_link_onclick.html',
     'action'      => $p. 'view/cust_msg.html?' . $custmsgnum,
     'actionlabel' => 'Message detail',
-    'width'       => 600,
-    'height'      => 500,
+    'width'       => 680,
+    'height'      => 550,
   );
 };
 
 my %color = (
   'failed'   => 'FF0000',
   'sent'     => '',
+
+  'invoice'  => '00CC00',
+  'receipt'  => '0000CC',
+  'admin'    => 'CC0000',
+  ''         => '000000',
 );
 my $statuscolor = sub { $color{$_[0]->status} };
+my $typecolor = sub { $color{$_[0]->msgtype} };
 
 my $html_init = qq!<FORM ACTION="$p/search/cust_msg.html" METHOD="GET">
 <TABLE cellspacing="10">!.
@@ -110,6 +123,17 @@ include('/elements/select.html',
                 'failed'  => 'failed',
                 'sent'    => 'sent', },
 ) .
+'</TD><TD> Type '.
+include('/elements/select.html',
+  'field' => 'msgtype',
+  'curr_value' => $cgi->param('msgtype') || '',
+  'options' => [ '', 'invoice', 'receipt', 'admin' ],
+  'labels'  => { ''         => '(any)',
+                 'invoice'  => 'Invoices',
+                 'receipt'  => 'Receipts',
+                 'admin'    => 'Admin notices',
+               },
+) .
 '</TD>
 <TD><INPUT type="submit" value="Search"></TD></TR>
 </TABLE></FORM><BR>
index bee33cf..10cc955 100644 (file)
 %                       $cstyle = qq(STYLE="$cstyle")
 %                         if $cstyle;
 
-                        <TD CLASS="<% $class %>" BGCOLOR="<% $bgcolor %>" <% $align %> <% $cstyle %>><% $font %><% $a %><% $s %><% $field %><% $es %><% $a ? '</A>' : '' %><% $font ? '</FONT>' : '' %></TD>
+                        <TD CLASS="<% $class %>" BGCOLOR="<% $bgcolor %>" <% $align %> <% $cstyle %>><% $a %><% $font %><% $s %><% $field %><% $es %><% $font ? '</FONT>' : '' %><% $a ? '</A>' : '' %></TD>
 
 %                     } 
 %