X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=FS%2FFS%2Fcust_bill.pm;h=2755be0ae3948746c1bf7562a46d724dd283af63;hp=72852d1f143c6ff4a0a559ae54c83ccf141c095f;hb=4a881cc149f6892da35f85b767a1e806f237a05f;hpb=79c0fbbfc4cb61fc948b8517bc204b9d7ec01104 diff --git a/FS/FS/cust_bill.pm b/FS/FS/cust_bill.pm index 72852d1f1..2755be0ae 100644 --- a/FS/FS/cust_bill.pm +++ b/FS/FS/cust_bill.pm @@ -6,6 +6,7 @@ use vars qw( $invoice_lines @buf ); #yuck use Date::Format; use Text::Template; use File::Temp 0.14; +use String::ShellQuote; use FS::UID qw( datasrc ); use FS::Record qw( qsearch qsearchs ); use FS::Misc qw( send_email ); @@ -335,7 +336,10 @@ sub send { my $self = shift; my $template = scalar(@_) ? shift : ''; return 'N/A' if scalar(@_) && $_[0] && $self->cust_main->agentnum != shift; - my $invoice_from = scalar(@_) ? shift : $conf->config('invoice_from'); + my $invoice_from = + scalar(@_) + ? shift + : ( $self->_agent_invoice_from || $conf->config('invoice_from') ); my @print_text = $self->print_text('', $template); my @invoicing_list = $self->cust_main->invoicing_list; @@ -668,24 +672,38 @@ sub batch_card { sub _agent_template { my $self = shift; + $self->_agent_plandata('agent_templatename'); +} + +sub _agent_invoice_from { + my $self = shift; + $self->_agent_plandata('agent_invoice_from'); +} + +sub _agent_plandata { + my( $self, $option ) = @_; - my $cust_bill_event = qsearchs( 'part_bill_event', + my $part_bill_event = qsearchs( 'part_bill_event', { 'payby' => $self->cust_main->payby, 'plan' => 'send_agent', - 'eventcode' => { 'op' => 'LIKE', - 'value' => '_%, '. $self->cust_main->agentnum. ');' }, + 'plandata' => { 'op' => '~', + 'value' => "(^|\n)agentnum ". + $self->cust_main->agentnum. + "(\n|\$)", + }, }, '', 'ORDER BY seconds LIMIT 1' ); - return '' unless $cust_bill_event; + return '' unless $part_bill_event; - if ( $cust_bill_event->eventcode =~ /\(\s*'(.*)'\s*,\s*(\d+)\s*\)\;$/ ) { + if ( $part_bill_event->plandata =~ /^$option (.*)$/m ) { return $1; } else { - warn "can't parse eventcode for agent-specific invoice template"; + warn "can't parse part_bill_event eventpart#". $part_bill_event->eventpart. + " plandata for $option"; return ''; } @@ -702,14 +720,16 @@ L and L for conversion functions. =cut +#still some false laziness w/print_text sub print_text { my( $self, $today, $template ) = @_; $today ||= time; + # my $invnum = $self->invnum; - my $cust_main = qsearchs('cust_main', { 'custnum', $self->custnum } ); + my $cust_main = $self->cust_main; $cust_main->payname( $cust_main->first. ' '. $cust_main->getfield('last') ) - unless $cust_main->payname && $cust_main->payby ne 'CHEK'; + unless $cust_main->payname && $cust_main->payby !~ /^(CHEK|DCHK)$/; my( $pr_total, @pr_cust_bill ) = $self->previous; #previous balance # my( $cr_total, @cr_cust_credit ) = $self->cust_credit; #credits @@ -949,7 +969,7 @@ sub print_latex { # my $invnum = $self->invnum; my $cust_main = $self->cust_main; $cust_main->payname( $cust_main->first. ' '. $cust_main->getfield('last') ) - unless $cust_main->payname && $cust_main->payby ne 'CHEK'; + unless $cust_main->payname && $cust_main->payby !~ /^(CHEK|DCHK)$/; my( $pr_total, @pr_cust_bill ) = $self->previous; #previous balance # my( $cr_total, @cr_cust_credit ) = $self->cust_credit; #credits @@ -1145,9 +1165,11 @@ sub print_ps { my $dir = $FS::UID::conf_dir. "cache.". $FS::UID::datasrc; chdir($dir); - system("pslatex $file.tex >/dev/null 2>&1") == 0 + my $sfile = shell_quote $file; + + system("pslatex $sfile.tex >/dev/null 2>&1") == 0 or die "pslatex $file.tex failed: $!"; - system("pslatex $file.tex >/dev/null 2>&1") == 0 + system("pslatex $sfile.tex >/dev/null 2>&1") == 0 or die "pslatex $file.tex failed: $!"; system('dvips', '-q', '-t', 'letter', "$file.dvi", '-o', "$file.ps" ) == 0 @@ -1192,15 +1214,17 @@ sub print_pdf { #system('pdflatex', "$file.tex"); #! LaTeX Error: Unknown graphics extension: .eps. - system("pslatex $file.tex >/dev/null 2>&1") == 0 + my $sfile = shell_quote $file; + + system("pslatex $sfile.tex >/dev/null 2>&1") == 0 or die "pslatex $file.tex failed: $!"; - system("pslatex $file.tex >/dev/null 2>&1") == 0 + system("pslatex $sfile.tex >/dev/null 2>&1") == 0 or die "pslatex $file.tex failed: $!"; #system('dvipdf', "$file.dvi", "$file.pdf" ); system( - "dvips -q -t letter -f $file.dvi ". - "| gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=$file.pdf ". + "dvips -q -t letter -f $sfile.dvi ". + "| gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=$sfile.pdf ". " -c save pop -" ) == 0 or die "dvips | gs failed: $!"; @@ -1406,7 +1430,7 @@ sub _items_credits { #'description' => 'Credit ref\#'. $_->crednum. # " (". time2str("%x",$_->cust_credit->_date) .")". # $reason, - 'description' => 'Credit applied'. + 'description' => 'Credit applied '. time2str("%x",$_->cust_credit->_date). $reason, 'amount' => sprintf("%10.2f",$_->amount), };