X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=FS%2FFS%2FTemplateItem_Mixin.pm;h=fa20c240f7d5e59d33c24f473d22bef0cbb9d911;hp=8b0e16a2d12d5977ec74a5a2c1847e2726a9b447;hb=e9e0cf0989259b94d9758eceff448666a2e5a5cc;hpb=1724266692e1e3ebe8d71a540077ddee92118bb2 diff --git a/FS/FS/TemplateItem_Mixin.pm b/FS/FS/TemplateItem_Mixin.pm index 8b0e16a2d..fa20c240f 100644 --- a/FS/FS/TemplateItem_Mixin.pm +++ b/FS/FS/TemplateItem_Mixin.pm @@ -1,15 +1,21 @@ package FS::TemplateItem_Mixin; use strict; -use vars qw( $DEBUG $me ); # but NOT $conf +use vars qw( $DEBUG $me $conf $date_format ); use Carp; +use Date::Format; use FS::UID; use FS::Record qw( qsearch qsearchs dbh ); +use FS::Conf; use FS::part_pkg; use FS::cust_pkg; $DEBUG = 0; $me = '[FS::TemplateItem_Mixin]'; +FS::UID->install_callback( sub { + $conf = new FS::Conf; + $date_format = $conf->config('date_format') || '%x'; #/YY +} ); =item cust_pkg @@ -42,7 +48,7 @@ sub part_pkg { } -=item desc +=item desc LOCALE Returns a description for this line item. For typical line items, this is the I field of the corresponding B object (see L). @@ -55,12 +61,67 @@ sub desc { my( $self, $locale ) = @_; if ( $self->pkgnum > 0 ) { - $self->itemdesc || $self->part_pkg->pkg_locale($locale); - } else { + return $self->itemdesc if $self->itemdesc; + my $part_pkg = $self->part_pkg or return 'UNKNOWN'; + return $part_pkg->pkg_locale($locale); + + } elsif ( $self->feepart ) { + return $self->part_fee->itemdesc_locale($locale); + + } else { # by the process of elimination it must be a tax my $desc = $self->itemdesc || 'Tax'; $desc .= ' '. $self->itemcomment if $self->itemcomment =~ /\S/; - $desc; + return $desc; + } + +} + +=item time_period_pretty PART_PKG, AGENTNUM + +Returns a formatted time period for this line item. + +=cut + +sub time_period_pretty { + my( $self, $part_pkg, $agentnum ) = @_; + + #more efficient to look some of this conf stuff up outside the + # invoice/template display loop we're called from + # (Template_Mixin::_invoice_cust_bill_pkg) and pass them in as options + + return '' if $conf->exists('disable_line_item_date_ranges') + || $part_pkg->option('disable_line_item_date_ranges',1) + || ! $self->sdate + || ! $self->edate; + + my $date_style = ''; + $date_style = $conf->config( 'cust_bill-line_item-date_style-non_monhtly', + $agentnum + ) + if $part_pkg && $part_pkg->freq !~ /^1m?$/; + $date_style ||= $conf->config( 'cust_bill-line_item-date_style', + $agentnum + ); + + my $time_period; + if ( defined($date_style) && $date_style eq 'month_of' ) { + # (now watch, someone's going to make us do Chinese) + $time_period = $self->mt('The month of [_1]', + $self->time2str_local('%B', $self->sdate) + ); + } elsif ( defined($date_style) && $date_style eq 'X_month' ) { + my $desc = $conf->config( 'cust_bill-line_item-date_description', + $agentnum + ); + $desc .= ' ' unless $desc =~ /\s$/; + $time_period = $desc. $self->time2str_local('%B', $self->sdate); + } else { + $time_period = $self->time2str_local($date_format, $self->sdate). + " - ". $self->time2str_local($date_format, $self->edate); } + + " ($time_period)"; + } =item details [ OPTION => VALUE ... ]