diff options
Diffstat (limited to 'httemplate')
| -rwxr-xr-x | httemplate/view/cust_main/packages.html | 704 | ||||
| -rw-r--r-- | httemplate/view/cust_main/packages/location.html | 35 | ||||
| -rw-r--r-- | httemplate/view/cust_main/packages/package.html | 213 | ||||
| -rw-r--r-- | httemplate/view/cust_main/packages/services.html | 120 | ||||
| -rw-r--r-- | httemplate/view/cust_main/packages/status.html | 374 | 
5 files changed, 770 insertions, 676 deletions
| diff --git a/httemplate/view/cust_main/packages.html b/httemplate/view/cust_main/packages.html index 5f1db4ab6..5fde2f392 100755 --- a/httemplate/view/cust_main/packages.html +++ b/httemplate/view/cust_main/packages.html @@ -123,7 +123,6 @@ Current packages  % }   % if ( @$packages ) {  -  <% include('/elements/table-grid.html') %>  % my $bgcolor1 = '#eeeeee';  %   my $bgcolor2 = '#ffffff'; @@ -132,444 +131,40 @@ Current packages  <TR>    <TH CLASS="grid" BGCOLOR="#cccccc">Package</TH>    <TH CLASS="grid" BGCOLOR="#cccccc">Status</TH> +  <TH CLASS="grid" BGCOLOR="#cccccc">Location</TH>    <TH CLASS="grid" BGCOLOR="#cccccc">Services</TH>  </TR> -%foreach my $cust_pkg (@$packages) { -% -%  my $part_pkg = $cust_pkg->part_pkg; +% foreach my $cust_pkg (@$packages) {  % -%  if ( $bgcolor eq $bgcolor1 ) { -%    $bgcolor = $bgcolor2; -%  } else { -%    $bgcolor = $bgcolor1; -%  } - - -<!--pkgnum: <% $cust_pkg->pkgnum %>--> -<TR> - -  <TD CLASS="inv" BGCOLOR="<% $bgcolor %>"> -    <TABLE CLASS="inv" BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH="100%"> -      <TR> -        <TD COLSPAN=2> -          <A NAME="cust_pkg<% $cust_pkg->pkgnum %>" -             ID  ="cust_pkg<% $cust_pkg->pkgnum %>" -          ><% $curuser->option('show_pkgnum') ? $cust_pkg->pkgnum.': ' : '' %><% $part_pkg->pkg %></A> -          -  -          <% $part_pkg->comment %> -        </TD> -      </TR> - -%   if ( $cust_pkg->quantity > 1 ) { -      <TR> -        <TD COLSPAN=2> -                Quantity:  -          <B><% $cust_pkg->quantity %></B> -        </TD> -      </TR> +%   if ( $bgcolor eq $bgcolor1 ) { +%     $bgcolor = $bgcolor2; +%   } else { +%     $bgcolor = $bgcolor1;  %   } - -      <TR> -        <TD COLSPAN=2> - -          <FONT SIZE=-1> - -% unless ( $cust_pkg->get('cancel') ) {  -%   my $br = 0; -%   if ( $curuser->access_right('Change customer package') ) { $br=1; - -            ( <%pkg_change_link($cust_pkg)%> ) -%   }  -%   if ( $curuser->access_right('Edit customer package dates') ) { $br=1; - -            ( <%pkg_dates_link($cust_pkg)%> ) -%   }  -%   if ( $curuser->access_right('Customize customer package') ) { $br=1; - -            ( <%pkg_customize_link($cust_pkg,$cust_main->custnum)%> ) -%   }  -    <% $br ? '<BR>' : '' %> -% }  - -% if ( $cust_pkg->num_cust_event -%      && (    $curuser->access_right('Billing event reports') -%           || $curuser->access_right('View customer billing events') -%         ) -%    ) { -    ( <%pkg_event_link($cust_pkg)%> ) -% } - -          </FONT> - -        </TD> -      </TR> - -%   my $editi = $curuser->access_right('Edit customer package invoice details'); -%   my $editc = $curuser->access_right('Edit customer package comments');  % -%   if ( $cust_pkg->cust_pkg_detail('I') || $cust_pkg->cust_pkg_detail('C') -%        || $editi || $editc                                                ) { -% -%     my $editlink = $p. 'edit/cust_pkg_detail?pkgnum='. $cust_pkg->pkgnum. -%                    ';detailtype='; - -      <TR> - -%       if ( $cust_pkg->cust_pkg_detail('I') ) {  -          <TD VALIGN="top"> -            <% include('/elements/table-grid.html') %> -              <TR> -                <TH BGCOLOR="#dddddd" STYLE="border-bottom: dashed 1px black; padding-bottom: 1px"> -                  <FONT SIZE="-1"> -                    Invoice details -%                   if ( $editi && ! $cust_pkg->get('cancel') ) { -                      (<% include('/elements/popup_link.html', {  -                                    'action'      => $editlink. 'I', -                                    'label'       => 'edit', -                                    'actionlabel' => 'Edit invoice details', -                                    'color'       => '#333399', -                                    'width'       => 763, -                                 }) -                       %>) -%                   } -                  </FONT> -                </TH> -              </TR> -%             foreach my $cust_pkg_detail ( $cust_pkg->cust_pkg_detail('I') ) { -                <TR> -                  <TD><FONT SIZE="-1"> - <% $cust_pkg_detail->detail |h %></FONT></TD> -                </TR> -%             } -            </TABLE> -          </TD> -%       } else { -          <TD> -%           if ( $editi && ! $cust_pkg->get('cancel') ) { -              <FONT SIZE="-1"> -                ( <% include('/elements/popup_link.html', {  -                               'action'      => $editlink. 'I', -                               'label'       => 'Add invoice details', -                               'actionlabel' => 'Add invoice details', -                               'color'       => '#333399', -                               'width'       => 763, -                            }) -                  %> ) -              </FONT> -%           } -          </TD> -%       } - -%       if ( $cust_pkg->cust_pkg_detail('C') ) {  -          <TD VALIGN="top"> -            <% include('/elements/table-grid.html') %> -              <TR> -                <TH BGCOLOR="#dddddd" STYLE="border-bottom: dashed 1px black; padding-bottom: 1px"> -                  <FONT SIZE="-1"> -                    Comments -%                   if ( $editc ) { -                      (<% include('/elements/popup_link.html', {  -                                    'action'      => $editlink. 'C', -                                    'label'       => 'edit', -                                    'actionlabel' => 'Edit comments', -                                    'color'       => '#333399', -                                    'width'       => 763, -                                 }) -                       %>) -%                   } -                  </FONT> -                </TH> -              </TR> -%             foreach my $cust_pkg_detail ( $cust_pkg->cust_pkg_detail('C') ) { -                <TR> -                  <TD><FONT SIZE="-1"> - <% $cust_pkg_detail->detail |h %></FONT></TD> -                </TR> -%             } -            </TABLE> -          </TD> -%       } else { -          <TD> -%           if ( $editc ) { -              <FONT SIZE="-1"> -                ( <% include('/elements/popup_link.html', {  -                               'action'      => $editlink. 'C', -                               'label'       => 'Add comments', -                               'actionlabel' => 'Add comments', -                               'color'       => '#333399', -                               'width'       => 763, -                            }) -                  %> ) -              </FONT> -%           } -          </TD> -%       } - -      </TR> -%   } - -    </TABLE> - -  </TD> - -  <TD CLASS="inv" BGCOLOR="<% $bgcolor %>"> -    <TABLE CLASS="inv" BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH="100%"> -% -%  sub myfreq { -%    my $part_pkg = shift; -%    my $freq = $part_pkg->freq_pretty; -%    $freq =~ s/ / /g; -%    $freq; -%  } -% -%  #this should use cust_pkg->status and cust_pkg->statuscolor eventually -%  #my $colspan = $conf->exists('cust_pkg-display_times') ? 8 : 4; -%  #my $width = $conf->exists('cust_pkg-display_times') ? '38%' : '56%'; -% -%  #false laziness w/edit/REAL_cust_pkg.cgi -%  my( $billed_or_prepaid, $last_bill_or_renewed, $next_bill_or_prepaid_until ); -%  unless ( $part_pkg->is_prepaid ) { -%    $billed_or_prepaid = 'billed'; -%    $last_bill_or_renewed = 'Last bill'; -%    $next_bill_or_prepaid_until = 'Next bill'; -%  } else { -%    $billed_or_prepaid = 'prepaid'; -%    $last_bill_or_renewed = 'Renewed'; -%    $next_bill_or_prepaid_until = 'Prepaid until'; -%  } -% -% -% if ( $cust_pkg->get('cancel') ) { #status: cancelled -%   my $cpr = $cust_pkg->last_cust_pkg_reason('cancel'); - -    <% pkg_status_row($cust_pkg, 'Cancelled', 'cancel', 'color'=>'FF0000', conf=>$conf ) %> - -    <% pkg_status_row_colspan( -         ( $cpr ? $cpr->reasontext. ' by '. $cpr->otaker : '' ), '', -         'align' => 'right', 'color' => 'ff0000', 'size' => '-2', -       ) -    %> - -%   unless ( $cust_pkg->get('setup') ) {  - -        <% pkg_status_row_colspan('Never billed') %> - -%   } else {  - -       <% pkg_status_row( $cust_pkg, 'Setup', 'setup', conf=>$conf ) %> -       <% pkg_status_row_changed( $cust_pkg, conf=>$conf ) %> -       <% pkg_status_row_if( $cust_pkg, $last_bill_or_renewed, 'last_bill', conf=>$conf, curuser=>$curuser ) %> -       <% pkg_status_row_if( $cust_pkg, 'Suspended', 'susp', conf=>$conf, curuser=>$curuser ) %> - -%   }  -% -% } else {  -% -%   if ( $cust_pkg->get('susp') ) { #status: suspended -%     my $cpr = $cust_pkg->last_cust_pkg_reason('susp'); - -    <% pkg_status_row( $cust_pkg, 'Suspended', 'susp', 'color'=>'FF9900', conf=>$conf ) %> - -    <% pkg_status_row_colspan( -         ( $cpr ? $cpr->reasontext. ' by '. $cpr->otaker : '' ), '', -         'align' => 'right', 'color' => 'FF9900', 'size' => '-2', -       ) -    %> - -%   unless ( $cust_pkg->get('setup') ) {  -      <% pkg_status_row_colspan('Never billed') %> -%   } else {  -      <% pkg_status_row($cust_pkg, 'Setup', 'setup', conf=>$conf ) %> -%   }  - -    <% pkg_status_row_changed( $cust_pkg, conf=>$conf ) %> -    <% pkg_status_row_if( $cust_pkg, $last_bill_or_renewed, 'last_bill', conf=>$conf, curuser=>$curuser ) %> -%   # pkg_status_row($cust_pkg, 'Next bill', 'bill', conf=>$conf) -    <% pkg_status_row_if( $cust_pkg, 'Expires', 'expire', conf=>$conf, curuser=>$curuser ) %> +%   my %iopt = ( +%     'bgcolor'  => $bgcolor, +%     'cust_pkg' => $cust_pkg, +%     'part_pkg' => $cust_pkg->part_pkg, +%   ); +    <!--pkgnum: <% $cust_pkg->pkgnum %>-->      <TR> -      <TD COLSPAN=<%$colspan%>> -        <FONT SIZE=-1> -%         if ( $curuser->access_right('Unsuspend customer package') ) {  -            ( <% pkg_unsuspend_link($cust_pkg) %> ) -%         }  -%         if ( $curuser->access_right('Cancel customer package immediately') ) { -            ( <% pkg_cancel_link($cust_pkg) %> ) -%         }  -        </FONT> -      </TD> +      <% include('packages/package.html',  %iopt) %> +      <% include('packages/status.html',   %iopt) %> +      <% include('packages/location.html', %iopt) %> +      <% include('packages/services.html', %iopt) %>      </TR> -%   } else { #status: active -% -%     unless ( $cust_pkg->get('setup') ) { #not setup -% -%       unless ( $part_pkg->freq ) {  - -          <% pkg_status_row_colspan('Not yet billed (one-time charge)') %> - -          <TR> -            <TD COLSPAN=<%$colspan%>> -              <FONT SIZE=-1> -%               if ( $curuser->access_right('Cancel customer package immediately') ) {  -                  ( <% pkg_cancel_link($cust_pkg) %> ) -%               }  -              </FONT> -            </TD> -          </TR> - -%       } else {  - -         <% pkg_status_row_colspan("Not yet billed ($billed_or_prepaid ". myfreq($part_pkg). ')' ) %> - -%       }  -% -%     } else { #setup -% -%       unless ( $part_pkg->freq ) {  - -          <% pkg_status_row_colspan('One-time charge') %> - -          <% pkg_status_row($cust_pkg, 'Billed', 'setup', conf=>$conf) %> - -%       } else {  -% -%         if (scalar($cust_pkg->overlimit)) { - -            <% pkg_status_row_colspan( -                 'Overlimit', -                 $billed_or_prepaid. ' '. myfreq($part_pkg), -                 'color' => 'FFD000', -               ) -            %> - -%         } else { -            <% pkg_status_row_colspan( -                 'Active', -                 $billed_or_prepaid. ' '. myfreq($part_pkg), -                 'color' => '00CC00', -               ) -            %> -%         }  - -          <% pkg_status_row($cust_pkg, 'Setup', 'setup', conf=>$conf) %> - -%       }  -% -%     }  -%   my $autosuspend = pkg_autosuspend_time( $cust_pkg ); -%   $cust_pkg->set('autosuspend', $autosuspend) if $autosuspend; - -      <% pkg_status_row_changed( $cust_pkg, conf=>$conf ) %> -      <% pkg_status_row_if( $cust_pkg, $last_bill_or_renewed, 'last_bill', conf=>$conf, curuser=>$curuser ) %> -      <% pkg_status_row_if( $cust_pkg, $next_bill_or_prepaid_until, 'bill', conf=>$conf, curuser=>$curuser ) %> -      <% pkg_status_row_if($cust_pkg, 'Will automatically suspend by', 'autosuspend', conf=>$conf) %> -      <% pkg_status_row_if( $cust_pkg, 'Will suspend on', 'adjourn', conf=>$conf, curuser=>$curuser ) %> -      <% pkg_status_row_if( $cust_pkg, 'Expires', 'expire', conf=>$conf, curuser=>$curuser ) %> - -%     if ( $part_pkg->freq ) {  - -        <TR> -          <TD COLSPAN=<%$colspan%>> -            <FONT SIZE=-1> -%             if ( $curuser->access_right('Suspend customer package') ) {  -                ( <% pkg_suspend_link($cust_pkg) %> ) -%             }  -%             if ( $curuser->access_right('Suspend customer package later') ) {  -                ( <% pkg_adjourn_link($cust_pkg) %> ) -%             }  -%             if ( $curuser->access_right('Delay suspension events') ) {  -                ( <% pkg_delay_link($cust_pkg) %> ) -%             }  -%             if ( $curuser->access_right('Cancel customer package immediately') ) {  -                ( <% pkg_cancel_link($cust_pkg) %> ) -%             }  -%             if ( $curuser->access_right('Cancel customer package later') ) {  -                ( <% pkg_expire_link($cust_pkg) %> ) -%             }  - -            <FONT> -          </TD> -        </TR> -%     } -% -%   }  -% }  - -</TABLE> -</TD> - -<TD CLASS="inv" BGCOLOR="<% $bgcolor %>"> -  <TABLE CLASS="inv" BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH="100%"> - -%  #foreach my $svcpart (sort {$a->{svcpart} <=> $b->{svcpart}} @{$pkg->{svcparts}}) { -%  foreach my $part_svc ( $cust_pkg->part_svc ) { - -%    #foreach my $service (@{$svcpart->{services}}) { -%    foreach my $cust_svc ( @{ $part_svc->cust_pkg_svc } ) { - -      <TR> -        <TD ALIGN="right" VALIGN="top"><% FS::UI::Web::svc_link($m, $part_svc, $cust_svc) %></TD> -        <TD STYLE="padding-bottom:0px"><B><% FS::UI::Web::svc_label_link($m, $part_svc, $cust_svc) %></B></TD> -        <TD><% FS::UI::Web::svc_export_links($m, $part_svc, $cust_svc) %></TD> -      </TR> - -      <TR> -        <TD ALIGN="right" COLSPAN="3" VALIGN="top" STYLE="padding-bottom:1px;padding-top:0px"><FONT SIZE="-2" COLOR="#FFD000"> - -            <% $cust_svc->overlimit ? "Overlimit: ". time2str('%b %o %Y' . ($conf->exists('cust_pkg-display_times') ? ' %l:%M %P' : ''), $cust_svc->overlimit) : '' %> -          </FONT></TD> -      </TR> - -      <TR> -        <TD ALIGN="right" VALIGN="top" STYLE="padding-bottom:5px;padding-top:0px"><FONT SIZE="-2"> - -%         if ( $curuser->access_right('Recharge customer service') -%              && $part_svc->svcdb eq 'svc_acct' -%              && (    $cust_svc->svc_x->seconds    ne '' -%                   || $cust_svc->svc_x->upbytes    ne '' -%                   || $cust_svc->svc_x->downbytes  ne '' -%                   || $cust_svc->svc_x->totalbytes ne '' -%                 ) -%         ) {  -            ( <%svc_recharge_link($cust_svc)%> ) -%         }  -          </FONT></TD> - -          <TD ALIGN="right" VALIGN="top" STYLE="padding-bottom:5px;padding-top:0px"><FONT SIZE="-2"> - -%         if ( $curuser->access_right('Unprovision customer service') ) {  -            ( <%svc_unprovision_link($cust_svc)%> ) -%         }  -          </FONT></TD> -        </TR> -%   }  - -%   if (    ! $cust_pkg->get('cancel') -%        && $curuser->access_right('Provision customer service')  -%        && $part_svc->num_avail -%      ) { - -      <TR> -        <TD COLSPAN=3 ALIGN="center" STYLE="padding-bottom:4px;padding-top:0px"> -          <B><% svc_provision_link($cust_pkg, $part_svc, $conf, $curuser) %></B> -        </TD> -      </TR> - -%   }  - -% }  - -</TABLE> -</TD> -% } #end display packages -% - +% }  </TABLE> -% } else {  +% } else {  <BR>  % }  +  % if ( $cgi->param('fragment') =~ /^cust_pkg(\d+)$/ ) {    <SCRIPT>      // IE-specific hack.  other browsers listen to #fragments @@ -588,74 +183,6 @@ my $curuser = $FS::CurrentUser::CurrentUser;  my $packages = get_packages($cust_main, $conf); -my $colspan = $conf->exists('cust_pkg-display_times') ? 8 : 4; -my $width = $conf->exists('cust_pkg-display_times') ? '38%' : '56%'; - -sub pkg_status_row { -  my( $cust_pkg, $title, $field, %opt ) = @_; - -  my $color = $opt{'color'}; - -  my $html = qq(<TR><TD WIDTH="<%$width%>" ALIGN="right">); -  $html   .= qq(<FONT COLOR="#$color"><B>) if length($color); -  $html   .= qq($title ); -  $html   .= qq(</B></FONT>) if length($color); -  $html   .= qq(</TD>); -  $html   .= pkg_datestr($cust_pkg, $field, $opt{conf}).'</TR>'; - -  $html; -} - -sub pkg_status_row_if { -  my( $cust_pkg, $title, $field, %opt ) = @_; -   -  $title = '<FONT SIZE=-1>( '. pkg_unadjourn_link($cust_pkg). ' ) </FONT>'. $title -    if ( $field eq 'adjourn' && -         $opt{curuser}->access_right('Suspend customer package later') -       ); - -  $title = '<FONT SIZE=-1>( '. pkg_unexpire_link($cust_pkg). ' ) </FONT>'. $title -    if ( $field eq 'expire' && -         $opt{curuser}->access_right('Cancel customer package later') -       ); - -  $cust_pkg->get($field) ? pkg_status_row($cust_pkg, $title, $field, %opt) : ''; -} - -sub pkg_status_row_changed { -  my( $cust_pkg, %opt ) = @_; -  return '' unless $cust_pkg->change_date; -  my $html = pkg_status_row( $cust_pkg, 'Package changed', 'change_date', conf=>$opt{'conf'} ); -  my $old = $cust_pkg->old_cust_pkg; -  if ( $old ) { -    my $part_pkg = $old->part_pkg; -    my $label = 'Changed from '. $cust_pkg->change_pkgnum. ': '. -                $part_pkg->pkg. ' - '. $part_pkg->comment; -    $html .= pkg_status_row_colspan( $label, '', size=>'-1', align=>'right' ); -  } -  $html; -} - -sub pkg_status_row_colspan { -  my($title, $addl, %opt) = @_; - -  my $align = $opt{'align'} ? 'ALIGN="'. $opt{'align'}.'"' : ''; -  my $color = $opt{'color'} ? 'COLOR="#'.$opt{'color'}.'"' : ''; -  my $size  = $opt{'size'}  ? 'SIZE="'.  $opt{'size'}. '"' : ''; - -  my $html = qq(<TR><TD COLSPAN=$colspan $align>); -  $html   .= qq(<FONT $color $size>) if length($color) || $size; -  $html   .= qq(<B>) if $color && !$size; -  $html   .= $title; -  $html   .= qq(</B>) if $color && !$size; -  $html   .= qq(</FONT>) if length($color) || $size; -  $html   .= ", $addl" if length($addl); -  $html   .= qq(</TD></TR>); - -  $html; - -} -  #subroutines  sub get_packages { @@ -677,190 +204,15 @@ sub get_packages {    [ $cust_main->$method() ];  } -sub svc_provision_link { -  my ($cust_pkg, $part_svc, $conf, $curuser) = @_; -  ( my $svc_nbsp = $part_svc->svc ) =~ s/\s+/ /g; -  my $num_avail = $part_svc->num_avail; -  my $pkgnum_svcpart = "pkgnum=". $cust_pkg->pkgnum. ';'. -                       "svcpart=". $part_svc->svcpart; -  my $url; -  if ( $part_svc->svcdb eq 'svc_external' #could be generalized -       && $conf->exists('svc_external-skip_manual') -  ) { -    $url = "${p}edit/process/". $part_svc->svcdb. ".cgi?$pkgnum_svcpart"; -  } else { -    $url = svc_url( -                    'm'        => $m, -                    'action'   => 'edit', -                    'part_svc' => $part_svc,  -                    'query'    => $pkgnum_svcpart, -                  ); -    #$url = "${p}edit/$svcpart->{svcdb}.cgi?$pkgnum_svcpart"; -  } - -  my $link = qq!<A CLASS="provision" HREF="$url">!. -             "Provision $svc_nbsp ($num_avail)</A>"; -  if ( $conf->exists('legacy_link') -       && $curuser->access_right('View/link unlinked services') -     ) -  { -    $link .= '<BR>'. -             qq!<A CLASS="provision" HREF="${p}misc/link.cgi?!. -             qq!$pkgnum_svcpart">!. -            "Link to legacy $svc_nbsp ($num_avail)</A>"; -  } -  $link; -} - -sub svc_unprovision_link { -  my $cust_svc = shift or return ''; -  qq!<A HREF="javascript:areyousure('${p}misc/unprovision.cgi?!. $cust_svc->svcnum. -  qq!', 'Permanently unprovision and delete this service?')">Unprovision</A>!; -} - -sub pkg_datestr { -  my($cust_pkg, $field, $conf) = @_ or return ''; -  return ' ' unless $cust_pkg->get($field); -  my $format = '<TD align="left"><B>%b</B></TD>'. -               '<TD align="right"><B> %o,</B></TD>'. -               '<TD align="right"><B> %Y</B></TD>'; -  #$format .= ' <FONT SIZE=-3>%l:%M:%S%P %z</FONT>' -  $format .= '<TD ALIGN="right"><B> %l</TD>'. -             '<TD ALIGN="center"><B>:</B></TD>'. -             '<TD ALIGN="left"><B>%M</B></TD>'. -             '<TD ALIGN="left"><B> %P</B></TD>' -    if $conf->exists('cust_pkg-display_times'); -  my $strip = time2str($format, $cust_pkg->get($field) ); -  $strip =~ s/ (\d)/$1/g; -  $strip; -} - -sub pkg_change_link { include( '/elements/popup_link-cust_pkg.html', -                               { 'action'      => $p. 'misc/change_pkg.cgi?dummy=value', -                                 'label'       => 'Change package', -                                 'actionlabel' => 'Change', -                                 'cust_pkg'    => shift, -                               } -                             ) -                     } - -sub pkg_suspend_link { include( '/elements/popup_link-cust_pkg.html', -                                { 'action'      => $p. 'misc/cancel_pkg.html?method=suspend', -                                  'label'       => 'Suspend now', -                                  'actionlabel' => 'Suspend', -                                  'color'       => '#FF9900', -                                  'cust_pkg'    => shift, -                                } -                              ) -                     } - - -sub pkg_adjourn_link { include( '/elements/popup_link-cust_pkg.html', -                                { 'action'      => $p. 'misc/cancel_pkg.html?method=adjourn', -                                  'label'       => 'Suspend later', -                                  'actionlabel' => 'Adjourn', -                                  'color'       => '#CC6600', -                                  'cust_pkg'    => shift, -                                } -                              ) -                     } - -sub pkg_delay_link   { include( '/elements/popup_link-cust_pkg.html', -                                { 'action'      => $p. 'misc/delay_susp_pkg.html', -                                  'label'       => 'Delay suspend', -                                  'actionlabel' => 'Delay suspend for', -                                  'cust_pkg'    => shift, -                                } -                              ) -                     } - -sub pkg_unsuspend_link { pkg_link('misc/unsusp_pkg',    'Unsuspend',           @_ ); } -sub pkg_dates_link     { pkg_link('edit/REAL_cust_pkg', 'Edit dates',     @_ ); } -sub pkg_unadjourn_link { pkg_link('misc/unadjourn_pkg', 'Abort',               @_ ); } -sub pkg_unexpire_link  { pkg_link('misc/unexpire_pkg',  'Abort',               @_ ); } - -sub pkg_cancel_link { include( '/elements/popup_link-cust_pkg.html', -                               { 'action'      => $p. 'misc/cancel_pkg.html?method=cancel', -                                 'label'       => 'Cancel now', -                                 'actionlabel' => 'Cancel', -                                 'color'       => '#ff0000', -                                 'cust_pkg'    => shift, -                               } -                             ) -                    } - -sub pkg_expire_link { include( '/elements/popup_link-cust_pkg.html', -                               { 'action'      => $p. 'misc/cancel_pkg.html?method=expire', -                                 'label'       => 'Cancel later', -                                 'actionlabel' => 'Expire', #"Cancel package $num later" -                                 'color'       => '#CC0000', -                                 'cust_pkg'    => shift, -                               } -                             ) -                    } - -sub svc_recharge_link { include( '/elements/popup_link-cust_svc.html', -                                 { 'action'      => $p. 'misc/recharge_svc.html', -                                   'label'       => 'Recharge', -                                   'actionlabel' => 'Recharge', -                                   'color'       => '#333399', -                                   'cust_svc'    => shift, -                                 } -                               ) -                      } - -sub order_pkg_link { include( '/elements/popup_link-cust_main.html', -                              { 'action'      => $p. 'misc/order_pkg.html', -                                'label'       => 'Order new package', -                                'actionlabel' => 'Order new package', -                                'color'       => '#333399', -                                'cust_main'   => shift, -                                'closetext'   => 'Close', -                              } -                            ) -                   } - -sub pkg_event_link { -  my($cust_pkg) = @_; -  qq!<a href="${p}search/cust_event.html?pkgnum=!. $cust_pkg->pkgnum. qq!">!. -  'View package events'. -  '</a>'; -} - -sub pkg_link { -  my($action, $label, $cust_pkg) = @_; -  return '' unless $cust_pkg; -  qq!<a href="$p$action.cgi?!. $cust_pkg->pkgnum. qq!">$label</a>!; +sub order_pkg_link { +  include( '/elements/popup_link-cust_main.html', +             'action'      => $p. 'misc/order_pkg.html', +             'label'       => 'Order new package', +             'actionlabel' => 'Order new package', +             'color'       => '#333399', +             'cust_main'   => shift, +             'closetext'   => 'Close', +         )  } -sub pkg_customize_link { -  my $cust_pkg = shift or return ''; -  my $custnum = $cust_pkg->custnum; -  qq!<A HREF="${p}edit/part_pkg.cgi?!. -    "clone=". $cust_pkg->part_pkg->pkgpart. ';'. -    "pkgnum=". $cust_pkg->pkgnum. -    qq!">Customize</A>!; -} - -sub pkg_autosuspend_time { -  my $cust_pkg = shift or return ''; -  my $days = 7; -  my $time = time; -  my $pending_suspend = 0; -  while ( $days > 0 && -          scalar( -            grep { $_->part_event->action eq 'suspend' } -            @{$cust_pkg->cust_main->due_cust_event( time => $time + 86400*$days, -                                                    testonly => 1, -                                                  ) } -          ) -        ) -  { -    $pending_suspend = 1; -    $days--; -  } - -  $pending_suspend ? time + ($days + 1) * 86400 : ''; - -}  </%init> diff --git a/httemplate/view/cust_main/packages/location.html b/httemplate/view/cust_main/packages/location.html new file mode 100644 index 000000000..3f84148c3 --- /dev/null +++ b/httemplate/view/cust_main/packages/location.html @@ -0,0 +1,35 @@ +<TD CLASS="inv" BGCOLOR="<% $bgcolor %>"> + +% unless ( $cust_pkg->locationnum ) { +  <I><FONT SIZE=-1>(default service address)</FONT><BR> +% } + +  <% $loc->address1 |h %><BR> + +% if ( $loc->address2 !~ /^\s*$/ ) { +    <% $loc->address2 |h %><BR> +% } + +  <% $loc->city |h %><% %>, +  <% $loc->state |h %>   <% $loc->zip |h %><BR> + +% if ( $loc->country ne $countrydefault ) { +  <% code2country( $loc->country ) %> +% } + +  </I> + +</TD> +<%init> + +my %opt = @_; + +my $bgcolor        = $opt{'bgcolor'}; +my $cust_pkg       = $opt{'cust_pkg'}; +my $part_pkg       = $opt{'part_pkg'}; +my $conf           = new FS::Conf; +my $countrydefault = $conf->config('countrydefault') || 'US'; + +my $loc = $cust_pkg->cust_location_or_main; + +</%init> diff --git a/httemplate/view/cust_main/packages/package.html b/httemplate/view/cust_main/packages/package.html new file mode 100644 index 000000000..4311d8cf2 --- /dev/null +++ b/httemplate/view/cust_main/packages/package.html @@ -0,0 +1,213 @@ +<TD CLASS="inv" BGCOLOR="<% $bgcolor %>"> +  <TABLE CLASS="inv" BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH="100%"> +    <TR> +      <TD COLSPAN=2> +        <A NAME="cust_pkg<% $cust_pkg->pkgnum %>" +           ID  ="cust_pkg<% $cust_pkg->pkgnum %>" +        ><% $curuser->option('show_pkgnum') ? $cust_pkg->pkgnum.': ' : '' %><B><% $part_pkg->pkg |h %></B></A> +        -  +        <% $part_pkg->comment |h %> +      </TD> +    </TR> + +% if ( $cust_pkg->quantity > 1 ) { +    <TR> +      <TD COLSPAN=2> +              Quantity:  +        <B><% $cust_pkg->quantity %></B> +      </TD> +    </TR> +%  } + +    <TR> +      <TD COLSPAN=2> +        <FONT SIZE=-1> + +%         unless ( $cust_pkg->get('cancel') ) {  +% +%           my $br = 0; +%           if ( $curuser->access_right('Change customer package') ) { +%             $br=1; +              ( <%pkg_change_link($cust_pkg)%> ) +%           }  +% +%           if ( $curuser->access_right('Edit customer package dates') ) { +%             $br=1; +              ( <%pkg_dates_link($cust_pkg)%> ) +%           }  +% +%           if ( $curuser->access_right('Customize customer package') ) { +%             $br=1; +              ( <%pkg_customize_link($cust_pkg,$cust_pkg->custnum)%> ) +%           }  +% +            <% $br ? '<BR>' : '' %> +%         }  + +%         if ( $cust_pkg->num_cust_event +%              && (    $curuser->access_right('Billing event reports') +%                   || $curuser->access_right('View customer billing events') +%                 ) +%            ) { +            ( <%pkg_event_link($cust_pkg)%> ) +%         } + +        </FONT> +      </TD> +    </TR> + +%   my $editi = $curuser->access_right('Edit customer package invoice details'); +%   my $editc = $curuser->access_right('Edit customer package comments'); +% +%   if (    $cust_pkg->cust_pkg_detail('I') +%        || $cust_pkg->cust_pkg_detail('C') +%        || $editi +%        || $editc                          ) { +% +%     my $editlink = $p. 'edit/cust_pkg_detail?pkgnum='. $cust_pkg->pkgnum. +%                    ';detailtype='; + +      <TR> + +%       if ( $cust_pkg->cust_pkg_detail('I') ) {  +          <TD VALIGN="top"> +            <% include('/elements/table-grid.html') %> +              <TR> +                <TH BGCOLOR="#dddddd" STYLE="border-bottom: dashed 1px black; padding-bottom: 1px"> +                  <FONT SIZE="-1"> +                    Invoice details +%                   if ( $editi && ! $cust_pkg->get('cancel') ) { +                      (<% include('/elements/popup_link.html', {  +                                    'action'      => $editlink. 'I', +                                    'label'       => 'edit', +                                    'actionlabel' => 'Edit invoice details', +                                    'color'       => '#333399', +                                    'width'       => 763, +                                 }) +                       %>) +%                   } +                  </FONT> +                </TH> +              </TR> +%             foreach my $cust_pkg_detail ( $cust_pkg->cust_pkg_detail('I') ) { +                <TR> +                  <TD><FONT SIZE="-1"> - <% $cust_pkg_detail->detail |h %></FONT></TD> +                </TR> +%             } +            </TABLE> +          </TD> +%       } else { +          <TD> +%           if ( $editi && ! $cust_pkg->get('cancel') ) { +              <FONT SIZE="-1"> +                ( <% include('/elements/popup_link.html', {  +                               'action'      => $editlink. 'I', +                               'label'       => 'Add invoice details', +                               'actionlabel' => 'Add invoice details', +                               'color'       => '#333399', +                               'width'       => 763, +                            }) +                  %> ) +              </FONT> +%           } +          </TD> +%       } + +%       if ( $cust_pkg->cust_pkg_detail('C') ) {  +          <TD VALIGN="top"> +            <% include('/elements/table-grid.html') %> +              <TR> +                <TH BGCOLOR="#dddddd" STYLE="border-bottom: dashed 1px black; padding-bottom: 1px"> +                  <FONT SIZE="-1"> +                    Comments +%                   if ( $editc ) { +                      (<% include('/elements/popup_link.html', {  +                                    'action'      => $editlink. 'C', +                                    'label'       => 'edit', +                                    'actionlabel' => 'Edit comments', +                                    'color'       => '#333399', +                                    'width'       => 763, +                                 }) +                       %>) +%                   } +                  </FONT> +                </TH> +              </TR> +%             foreach my $cust_pkg_detail ( $cust_pkg->cust_pkg_detail('C') ) { +                <TR> +                  <TD><FONT SIZE="-1"> - <% $cust_pkg_detail->detail |h %></FONT></TD> +                </TR> +%             } +            </TABLE> +          </TD> +%       } else { +          <TD> +%           if ( $editc ) { +              <FONT SIZE="-1"> +                ( <% include('/elements/popup_link.html', {  +                               'action'      => $editlink. 'C', +                               'label'       => 'Add comments', +                               'actionlabel' => 'Add comments', +                               'color'       => '#333399', +                               'width'       => 763, +                            }) +                  %> ) +              </FONT> +%           } +          </TD> +%       } + +      </TR> +%   } + +  </TABLE> + +</TD> + +<%init> + +my %opt = @_; + +my $bgcolor  = $opt{'bgcolor'}; +my $cust_pkg = $opt{'cust_pkg'}; +my $part_pkg = $opt{'part_pkg'}; + +my $curuser = $FS::CurrentUser::CurrentUser; + +#subroutines + +#false laziness w/status.html +sub pkg_link { +  my($action, $label, $cust_pkg) = @_; +  return '' unless $cust_pkg; +  qq!<a href="$p$action.cgi?!. $cust_pkg->pkgnum. qq!">$label</a>!; +} + +sub pkg_change_link { +  include( '/elements/popup_link-cust_pkg.html', +             'action'      => $p. 'misc/change_pkg.cgi?dummy=value', +             'label'       => 'Change package', +             'actionlabel' => 'Change', +             'cust_pkg'    => shift, +         ) +} + +sub pkg_dates_link { pkg_link('edit/REAL_cust_pkg', 'Edit dates', @_ ); } + +sub pkg_customize_link { +  my $cust_pkg = shift or return ''; +  my $custnum = $cust_pkg->custnum; +  qq!<A HREF="${p}edit/part_pkg.cgi?!. +    "clone=". $cust_pkg->part_pkg->pkgpart. ';'. +    "pkgnum=". $cust_pkg->pkgnum. +    qq!">Customize</A>!; +} + +sub pkg_event_link { +  my($cust_pkg) = @_; +  qq!<a href="${p}search/cust_event.html?pkgnum=!. $cust_pkg->pkgnum. qq!">!. +  'View package events'. +  '</a>'; +} + +</%init> diff --git a/httemplate/view/cust_main/packages/services.html b/httemplate/view/cust_main/packages/services.html new file mode 100644 index 000000000..f46afb926 --- /dev/null +++ b/httemplate/view/cust_main/packages/services.html @@ -0,0 +1,120 @@ +% ### +% # Services +% ### + +  <TD CLASS="inv" BGCOLOR="<% $bgcolor %>"> +    <TABLE CLASS="inv" BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH="100%"> + +%  #foreach my $svcpart (sort {$a->{svcpart} <=> $b->{svcpart}} @{$pkg->{svcparts}}) { +%  foreach my $part_svc ( $cust_pkg->part_svc ) { + +%    #foreach my $service (@{$svcpart->{services}}) { +%    foreach my $cust_svc ( @{ $part_svc->cust_pkg_svc } ) { + +      <TR> +        <TD ALIGN="right" VALIGN="top"><% FS::UI::Web::svc_link($m, $part_svc, $cust_svc) %></TD> +        <TD STYLE="padding-bottom:0px"><B><% FS::UI::Web::svc_label_link($m, $part_svc, $cust_svc) %></B></TD> +        <TD><% FS::UI::Web::svc_export_links($m, $part_svc, $cust_svc) %></TD> +      </TR> + +      <TR> +        <TD ALIGN="right" COLSPAN="3" VALIGN="top" STYLE="padding-bottom:1px;padding-top:0px"><FONT SIZE="-2" COLOR="#FFD000"> + +            <% $cust_svc->overlimit ? "Overlimit: ". time2str('%b %o %Y' . ($conf->exists('cust_pkg-display_times') ? ' %l:%M %P' : ''), $cust_svc->overlimit) : '' %> +          </FONT></TD> +      </TR> + +      <TR> +        <TD ALIGN="right" VALIGN="top" STYLE="padding-bottom:5px;padding-top:0px"><FONT SIZE="-2"> + +%         if ( $curuser->access_right('Recharge customer service') +%              && $part_svc->svcdb eq 'svc_acct' +%              && (    $cust_svc->svc_x->seconds    ne '' +%                   || $cust_svc->svc_x->upbytes    ne '' +%                   || $cust_svc->svc_x->downbytes  ne '' +%                   || $cust_svc->svc_x->totalbytes ne '' +%                 ) +%         ) {  +            ( <%svc_recharge_link($cust_svc)%> ) +%         }  +          </FONT></TD> + +          <TD ALIGN="right" VALIGN="top" STYLE="padding-bottom:5px;padding-top:0px"><FONT SIZE="-2"> + +%         if ( $curuser->access_right('Unprovision customer service') ) {  +            ( <%svc_unprovision_link($cust_svc)%> ) +%         }  +          </FONT></TD> +        </TR> +%   }  + +%   if (    ! $cust_pkg->get('cancel') +%        && $curuser->access_right('Provision customer service')  +%        && $part_svc->num_avail +%      ) { + +      <TR> +        <TD COLSPAN=3 ALIGN="center" STYLE="padding-bottom:4px;padding-top:0px"> +          <B><% svc_provision_link($cust_pkg, $part_svc, $conf, $curuser) %></B> +        </TD> +      </TR> + +%   }  + +% }  + +    </TABLE> +  </TD> + +<%init> + +my %opt = @_; + +my $bgcolor  = $opt{'bgcolor'}; +my $cust_pkg = $opt{'cust_pkg'}; +my $part_pkg = $opt{'part_pkg'}; +my $curuser  = $FS::CurrentUser::CurrentUser; +my $conf     = new FS::Conf; + +sub svc_provision_link { +  my ($cust_pkg, $part_svc, $conf, $curuser) = @_; +  ( my $svc_nbsp = $part_svc->svc ) =~ s/\s+/ /g; +  my $num_avail = $part_svc->num_avail; +  my $pkgnum_svcpart = "pkgnum=". $cust_pkg->pkgnum. ';'. +                       "svcpart=". $part_svc->svcpart; +  my $url; +  if ( $part_svc->svcdb eq 'svc_external' #could be generalized +       && $conf->exists('svc_external-skip_manual') +  ) { +    $url = "${p}edit/process/". $part_svc->svcdb. ".cgi?$pkgnum_svcpart"; +  } else { +    $url = svc_url( +                    'm'        => $m, +                    'action'   => 'edit', +                    'part_svc' => $part_svc,  +                    'query'    => $pkgnum_svcpart, +                  ); +    #$url = "${p}edit/$svcpart->{svcdb}.cgi?$pkgnum_svcpart"; +  } + +  my $link = qq!<A CLASS="provision" HREF="$url">!. +             "Provision $svc_nbsp ($num_avail)</A>"; +  if ( $conf->exists('legacy_link') +       && $curuser->access_right('View/link unlinked services') +     ) +  { +    $link .= '<BR>'. +             qq!<A CLASS="provision" HREF="${p}misc/link.cgi?!. +             qq!$pkgnum_svcpart">!. +            "Link to legacy $svc_nbsp ($num_avail)</A>"; +  } +  $link; +} + +sub svc_unprovision_link { +  my $cust_svc = shift or return ''; +  qq!<A HREF="javascript:areyousure('${p}misc/unprovision.cgi?!. $cust_svc->svcnum. +  qq!', 'Permanently unprovision and delete this service?')">Unprovision</A>!; +} + +</%init> diff --git a/httemplate/view/cust_main/packages/status.html b/httemplate/view/cust_main/packages/status.html new file mode 100644 index 000000000..4e7462b75 --- /dev/null +++ b/httemplate/view/cust_main/packages/status.html @@ -0,0 +1,374 @@ +<TD CLASS="inv" BGCOLOR="<% $bgcolor %>"> +  <TABLE CLASS="inv" BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH="100%"> + +%#this should use cust_pkg->status and cust_pkg->statuscolor eventually + +% if ( $cust_pkg->get('cancel') ) { #status: cancelled +%   my $cpr = $cust_pkg->last_cust_pkg_reason('cancel'); + +    <% pkg_status_row($cust_pkg, 'Cancelled', 'cancel', 'color'=>'FF0000', conf=>$conf ) %> + +    <% pkg_status_row_colspan( +         ( $cpr ? $cpr->reasontext. ' by '. $cpr->otaker : '' ), '', +         'align' => 'right', 'color' => 'ff0000', 'size' => '-2', +       ) +    %> + +%   unless ( $cust_pkg->get('setup') ) {  + +        <% pkg_status_row_colspan('Never billed') %> + +%   } else {  + +       <% pkg_status_row( $cust_pkg, 'Setup', 'setup', conf=>$conf ) %> +       <% pkg_status_row_changed( $cust_pkg, conf=>$conf ) %> +       <% pkg_status_row_if( $cust_pkg, $last_bill_or_renewed, 'last_bill', conf=>$conf, curuser=>$curuser ) %> +       <% pkg_status_row_if( $cust_pkg, 'Suspended', 'susp', conf=>$conf, curuser=>$curuser ) %> + +%   }  +% +% } else {  +% +%   if ( $cust_pkg->get('susp') ) { #status: suspended +%     my $cpr = $cust_pkg->last_cust_pkg_reason('susp'); + +    <% pkg_status_row( $cust_pkg, 'Suspended', 'susp', 'color'=>'FF9900', conf=>$conf ) %> + +    <% pkg_status_row_colspan( +         ( $cpr ? $cpr->reasontext. ' by '. $cpr->otaker : '' ), '', +         'align' => 'right', 'color' => 'FF9900', 'size' => '-2', +       ) +    %> + +%   unless ( $cust_pkg->get('setup') ) {  +      <% pkg_status_row_colspan('Never billed') %> +%   } else {  +      <% pkg_status_row($cust_pkg, 'Setup', 'setup', conf=>$conf ) %> +%   }  + +    <% pkg_status_row_changed( $cust_pkg, conf=>$conf ) %> +    <% pkg_status_row_if( $cust_pkg, $last_bill_or_renewed, 'last_bill', conf=>$conf, curuser=>$curuser ) %> +%   # pkg_status_row($cust_pkg, 'Next bill', 'bill', conf=>$conf) +    <% pkg_status_row_if( $cust_pkg, 'Expires', 'expire', conf=>$conf, curuser=>$curuser ) %> + +    <TR> +      <TD COLSPAN=<%$colspan%>> +        <FONT SIZE=-1> +%         if ( $curuser->access_right('Unsuspend customer package') ) {  +            ( <% pkg_unsuspend_link($cust_pkg) %> ) +%         }  +%         if ( $curuser->access_right('Cancel customer package immediately') ) { +            ( <% pkg_cancel_link($cust_pkg) %> ) +%         }  +        </FONT> +      </TD> +    </TR> + +%   } else { #status: active +% +%     unless ( $cust_pkg->get('setup') ) { #not setup +% +%       unless ( $part_pkg->freq ) {  + +          <% pkg_status_row_colspan('Not yet billed (one-time charge)') %> + +          <TR> +            <TD COLSPAN=<%$colspan%>> +              <FONT SIZE=-1> +%               if ( $curuser->access_right('Cancel customer package immediately') ) {  +                  ( <% pkg_cancel_link($cust_pkg) %> ) +%               }  +              </FONT> +            </TD> +          </TR> + +%       } else {  + +         <% pkg_status_row_colspan("Not yet billed ($billed_or_prepaid ". myfreq($part_pkg). ')' ) %> + +%       }  +% +%     } else { #setup +% +%       unless ( $part_pkg->freq ) {  + +          <% pkg_status_row_colspan('One-time charge') %> + +          <% pkg_status_row($cust_pkg, 'Billed', 'setup', conf=>$conf) %> + +%       } else {  +% +%         if (scalar($cust_pkg->overlimit)) { + +            <% pkg_status_row_colspan( +                 'Overlimit', +                 $billed_or_prepaid. ' '. myfreq($part_pkg), +                 'color' => 'FFD000', +               ) +            %> + +%         } else { +            <% pkg_status_row_colspan( +                 'Active', +                 $billed_or_prepaid. ' '. myfreq($part_pkg), +                 'color' => '00CC00', +               ) +            %> +%         }  + +          <% pkg_status_row($cust_pkg, 'Setup', 'setup', conf=>$conf) %> + +%       }  +% +%     }  +%   my $autosuspend = pkg_autosuspend_time( $cust_pkg ); +%   $cust_pkg->set('autosuspend', $autosuspend) if $autosuspend; + +      <% pkg_status_row_changed( $cust_pkg, conf=>$conf ) %> +      <% pkg_status_row_if( $cust_pkg, $last_bill_or_renewed, 'last_bill', conf=>$conf, curuser=>$curuser ) %> +      <% pkg_status_row_if( $cust_pkg, $next_bill_or_prepaid_until, 'bill', conf=>$conf, curuser=>$curuser ) %> +      <% pkg_status_row_if($cust_pkg, 'Will automatically suspend by', 'autosuspend', conf=>$conf) %> +      <% pkg_status_row_if( $cust_pkg, 'Will suspend on', 'adjourn', conf=>$conf, curuser=>$curuser ) %> +      <% pkg_status_row_if( $cust_pkg, 'Expires', 'expire', conf=>$conf, curuser=>$curuser ) %> + +%     if ( $part_pkg->freq ) {  + +        <TR> +          <TD COLSPAN=<%$colspan%>> +            <FONT SIZE=-1> +%             if ( $curuser->access_right('Suspend customer package') ) {  +                ( <% pkg_suspend_link($cust_pkg) %> ) +%             }  +%             if ( $curuser->access_right('Suspend customer package later') ) {  +                ( <% pkg_adjourn_link($cust_pkg) %> ) +%             }  +%             if ( $curuser->access_right('Delay suspension events') ) {  +                ( <% pkg_delay_link($cust_pkg) %> ) +%             }  +%             if ( $curuser->access_right('Cancel customer package immediately') ) {  +                ( <% pkg_cancel_link($cust_pkg) %> ) +%             }  +%             if ( $curuser->access_right('Cancel customer package later') ) {  +                ( <% pkg_expire_link($cust_pkg) %> ) +%             }  + +            <FONT> +          </TD> +        </TR> +%     } +% +%   }  +% }  + +  </TABLE> +</TD> + +<%init> + +my %opt = @_; + +my $bgcolor  = $opt{'bgcolor'}; +my $cust_pkg = $opt{'cust_pkg'}; +my $part_pkg = $opt{'part_pkg'}; +my $curuser  = $FS::CurrentUser::CurrentUser; +my $conf     = new FS::Conf; +my $colspan  = $conf->exists('cust_pkg-display_times') ? 8 : 4; +my $width    = $conf->exists('cust_pkg-display_times') ? '38%' : '56%'; + +#false laziness w/edit/REAL_cust_pkg.cgi +my( $billed_or_prepaid, $last_bill_or_renewed, $next_bill_or_prepaid_until ); +unless ( $part_pkg->is_prepaid ) { +  $billed_or_prepaid = 'billed'; +  $last_bill_or_renewed = 'Last bill'; +  $next_bill_or_prepaid_until = 'Next bill'; +} else { +  $billed_or_prepaid = 'prepaid'; +  $last_bill_or_renewed = 'Renewed'; +  $next_bill_or_prepaid_until = 'Prepaid until'; +} + +#subroutines + +sub myfreq { +  my $part_pkg = shift; +  my $freq = $part_pkg->freq_pretty; +  $freq =~ s/ / /g; +  $freq; +} + +#false laziness w/package.html +sub pkg_link { +  my($action, $label, $cust_pkg) = @_; +  return '' unless $cust_pkg; +  qq!<a href="$p$action.cgi?!. $cust_pkg->pkgnum. qq!">$label</a>!; +} + +sub pkg_status_row { +  my( $cust_pkg, $title, $field, %opt ) = @_; + +  my $color = $opt{'color'}; + +  my $html = qq(<TR><TD WIDTH="<%$width%>" ALIGN="right">); +  $html   .= qq(<FONT COLOR="#$color"><B>) if length($color); +  $html   .= qq($title ); +  $html   .= qq(</B></FONT>) if length($color); +  $html   .= qq(</TD>); +  $html   .= pkg_datestr($cust_pkg, $field, $opt{conf}).'</TR>'; + +  $html; +} + +sub pkg_status_row_if { +  my( $cust_pkg, $title, $field, %opt ) = @_; +   +  $title = '<FONT SIZE=-1>( '. pkg_unadjourn_link($cust_pkg). ' ) </FONT>'. $title +    if ( $field eq 'adjourn' && +         $opt{curuser}->access_right('Suspend customer package later') +       ); + +  $title = '<FONT SIZE=-1>( '. pkg_unexpire_link($cust_pkg). ' ) </FONT>'. $title +    if ( $field eq 'expire' && +         $opt{curuser}->access_right('Cancel customer package later') +       ); + +  $cust_pkg->get($field) ? pkg_status_row($cust_pkg, $title, $field, %opt) : ''; +} + +sub pkg_status_row_changed { +  my( $cust_pkg, %opt ) = @_; +  return '' unless $cust_pkg->change_date; +  my $html = pkg_status_row( $cust_pkg, 'Package changed', 'change_date', conf=>$opt{'conf'} ); +  my $old = $cust_pkg->old_cust_pkg; +  if ( $old ) { +    my $part_pkg = $old->part_pkg; +    my $label = 'Changed from '. $cust_pkg->change_pkgnum. ': '. +                $part_pkg->pkg. ' - '. $part_pkg->comment; +    $html .= pkg_status_row_colspan( $label, '', size=>'-1', align=>'right' ); +  } +  $html; +} + +sub pkg_status_row_colspan { +  my($title, $addl, %opt) = @_; + +  my $align = $opt{'align'} ? 'ALIGN="'. $opt{'align'}.'"' : ''; +  my $color = $opt{'color'} ? 'COLOR="#'.$opt{'color'}.'"' : ''; +  my $size  = $opt{'size'}  ? 'SIZE="'.  $opt{'size'}. '"' : ''; + +  my $html = qq(<TR><TD COLSPAN=$colspan $align>); +  $html   .= qq(<FONT $color $size>) if length($color) || $size; +  $html   .= qq(<B>) if $color && !$size; +  $html   .= $title; +  $html   .= qq(</B>) if $color && !$size; +  $html   .= qq(</FONT>) if length($color) || $size; +  $html   .= ", $addl" if length($addl); +  $html   .= qq(</TD></TR>); + +  $html; + +} + +sub pkg_datestr { +  my($cust_pkg, $field, $conf) = @_ or return ''; +  return ' ' unless $cust_pkg->get($field); +  my $format = '<TD align="left"><B>%b</B></TD>'. +               '<TD align="right"><B> %o,</B></TD>'. +               '<TD align="right"><B> %Y</B></TD>'; +  #$format .= ' <FONT SIZE=-3>%l:%M:%S%P %z</FONT>' +  $format .= '<TD ALIGN="right"><B> %l</TD>'. +             '<TD ALIGN="center"><B>:</B></TD>'. +             '<TD ALIGN="left"><B>%M</B></TD>'. +             '<TD ALIGN="left"><B> %P</B></TD>' +    if $conf->exists('cust_pkg-display_times'); +  my $strip = time2str($format, $cust_pkg->get($field) ); +  $strip =~ s/ (\d)/$1/g; +  $strip; +} + +sub pkg_suspend_link { +  include( '/elements/popup_link-cust_pkg.html', +             'action'      => $p. 'misc/cancel_pkg.html?method=suspend', +             'label'       => 'Suspend now', +             'actionlabel' => 'Suspend', +             'color'       => '#FF9900', +             'cust_pkg'    => shift, +         ) +} + +sub pkg_adjourn_link { +  include( '/elements/popup_link-cust_pkg.html', +             'action'      => $p. 'misc/cancel_pkg.html?method=adjourn', +             'label'       => 'Suspend later', +             'actionlabel' => 'Adjourn', +             'color'       => '#CC6600', +             'cust_pkg'    => shift, +         ) +} + +sub pkg_delay_link  { +  include( '/elements/popup_link-cust_pkg.html', +             'action'      => $p. 'misc/delay_susp_pkg.html', +             'label'       => 'Delay suspend', +             'actionlabel' => 'Delay suspend for', +             'cust_pkg'    => shift, +         ) +} + +sub pkg_unsuspend_link { pkg_link('misc/unsusp_pkg',    'Unsuspend', @_ ); } +sub pkg_unadjourn_link { pkg_link('misc/unadjourn_pkg', 'Abort',     @_ ); } +sub pkg_unexpire_link  { pkg_link('misc/unexpire_pkg',  'Abort',     @_ ); } + +sub pkg_cancel_link { +  include( '/elements/popup_link-cust_pkg.html', +             'action'      => $p. 'misc/cancel_pkg.html?method=cancel', +             'label'       => 'Cancel now', +             'actionlabel' => 'Cancel', +             'color'       => '#ff0000', +             'cust_pkg'    => shift, +         ) +} + +sub pkg_expire_link { +  include( '/elements/popup_link-cust_pkg.html', +             'action'      => $p. 'misc/cancel_pkg.html?method=expire', +             'label'       => 'Cancel later', +             'actionlabel' => 'Expire', #"Cancel package $num later" +             'color'       => '#CC0000', +             'cust_pkg'    => shift, +         ) +} + +sub svc_recharge_link { +  include( '/elements/popup_link-cust_svc.html', +             'action'      => $p. 'misc/recharge_svc.html', +             'label'       => 'Recharge', +             'actionlabel' => 'Recharge', +             'color'       => '#333399', +             'cust_svc'    => shift, +         ) +} + +sub pkg_autosuspend_time { +  my $cust_pkg = shift or return ''; +  my $days = 7; +  my $time = time; +  my $pending_suspend = 0; +  #this seems to be extremely inefficient... +  while ( $days > 0 && +          scalar( +            grep { $_->part_event->action eq 'suspend' } +            @{$cust_pkg->cust_main->due_cust_event( time => $time + 86400*$days, +                                                    testonly => 1, +                                                  ) } +          ) +        ) +  { +    $pending_suspend = 1; +    $days--; +  } + +  $pending_suspend ? time + ($days + 1) * 86400 : ''; + +} + +</%init> | 
