From: Ivan Kohler Date: Thu, 6 Mar 2014 00:11:52 +0000 (-0800) Subject: Merge branch 'master' of git.freeside.biz:/home/git/freeside X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=commitdiff_plain;h=7a7a0c736e3cfbd10b06151a93bf499d185d37d3;hp=e7b95770b51655bd02464c84e3fd33bddb711f5f Merge branch 'master' of git.freeside.biz:/home/git/freeside --- diff --git a/FS/FS/Misc.pm b/FS/FS/Misc.pm index 9c18961ea..c598507cc 100644 --- a/FS/FS/Misc.pm +++ b/FS/FS/Misc.pm @@ -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}; diff --git a/FS/FS/Schema.pm b/FS/FS/Schema.pm index 9b1ce007a..a9fc13d95 100644 --- a/FS/FS/Schema.pm +++ b/FS/FS/Schema.pm @@ -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' => [ ], diff --git a/FS/FS/cust_bill.pm b/FS/FS/cust_bill.pm index 83ddb6566..3c0e3e7da 100644 --- a/FS/FS/cust_bill.pm +++ b/FS/FS/cust_bill.pm @@ -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'); diff --git a/FS/FS/cust_msg.pm b/FS/FS/cust_msg.pm index c9cf68663..8d57a54ac 100644 --- a/FS/FS/cust_msg.pm +++ b/FS/FS/cust_msg.pm @@ -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::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::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; diff --git a/FS/FS/cust_pay.pm b/FS/FS/cust_pay.pm index 0f643c9ae..10b51ad7a 100644 --- a/FS/FS/cust_pay.pm +++ b/FS/FS/cust_pay.pm @@ -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), diff --git a/FS/FS/cust_pkg.pm b/FS/FS/cust_pkg.pm index 668de754d..4ea3966c0 100644 --- a/FS/FS/cust_pkg.pm +++ b/FS/FS/cust_pkg.pm @@ -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 ) { diff --git a/FS/FS/part_export/send_email.pm b/FS/FS/part_export/send_email.pm index 1fcb828b7..41f04093e 100644 --- a/FS/FS/part_export/send_email.pm +++ b/FS/FS/part_export/send_email.pm @@ -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); diff --git a/FS/FS/pay_batch/nacha.pm b/FS/FS/pay_batch/nacha.pm index 0662c3fd5..d6786e035 100644 --- a/FS/FS/pay_batch/nacha.pm +++ b/FS/FS/pay_batch/nacha.pm @@ -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 diff --git a/httemplate/search/cust_msg.html b/httemplate/search/cust_msg.html index f71a86607..716addfd6 100644 --- a/httemplate/search/cust_msg.html +++ b/httemplate/search/cust_msg.html @@ -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('
', split(/,\s*/, $_[0]->env_to) ) }, @@ -31,9 +33,11 @@ '', '', ], - '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!
!. @@ -110,6 +123,17 @@ include('/elements/select.html', 'failed' => 'failed', 'sent' => 'sent', }, ) . +'
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', + }, +) . '

diff --git a/httemplate/search/elements/search-html.html b/httemplate/search/elements/search-html.html index bee33cfe8..10cc95539 100644 --- a/httemplate/search/elements/search-html.html +++ b/httemplate/search/elements/search-html.html @@ -446,7 +446,7 @@ % $cstyle = qq(STYLE="$cstyle") % if $cstyle; - <% $cstyle %>><% $font %><% $a %><% $s %><% $field %><% $es %><% $a ? '' : '' %><% $font ? '' : '' %> + <% $cstyle %>><% $a %><% $font %><% $s %><% $field %><% $es %><% $font ? '' : '' %><% $a ? '' : '' %> % } %