more RT integration
[freeside.git] / httemplate / view / cust_main.cgi
index 4d27765..322f067 100755 (executable)
@@ -70,239 +70,43 @@ print "This customer's signup URL: ".
       "<a href=\"$signupurl?ref=$custnum\">$signupurl?ref=$custnum</a><BR><BR>";
 }
 
-print '<A NAME="cust_main"></A>';
-
-print &itable(), '<TR>';
-
-print '<TD VALIGN="top">';
-
-  print "Billing address", &ntable("#cccccc"), "<TR><TD>",
-        &ntable("#cccccc",2),
-    '<TR><TD ALIGN="right">Contact&nbsp;name</TD>',
-      '<TD COLSPAN=3 BGCOLOR="#ffffff">',
-      $cust_main->last, ', ', $cust_main->first,
-      '</TD>';
-print '<TD ALIGN="right">SS#</TD><TD BGCOLOR="#ffffff">',
-      $cust_main->ss || '&nbsp', '</TD>'
-  if $conf->exists('show_ss');
-
-print '</TR>',
-    '<TR><TD ALIGN="right">Company</TD><TD COLSPAN=5 BGCOLOR="#ffffff">',
-      $cust_main->company,
-      '</TD></TR>',
-    '<TR><TD ALIGN="right">Address</TD><TD COLSPAN=5 BGCOLOR="#ffffff">',
-      $cust_main->address1,
-      '</TD></TR>',
-  ;
-  print '<TR><TD ALIGN="right">&nbsp;</TD><TD COLSPAN=5 BGCOLOR="#ffffff">',
-        $cust_main->address2, '</TD></TR>'
-    if $cust_main->address2;
-  print '<TR><TD ALIGN="right">City</TD><TD BGCOLOR="#ffffff">',
-          $cust_main->city,
-          '</TD><TD ALIGN="right">State</TD><TD BGCOLOR="#ffffff">',
-          $cust_main->state,
-          '</TD><TD ALIGN="right">Zip</TD><TD BGCOLOR="#ffffff">',
-          $cust_main->zip, '</TD></TR>',
-        '<TR><TD ALIGN="right">Country</TD><TD BGCOLOR="#ffffff">',
-          $cust_main->country,
-          '</TD></TR>',
-  ;
-  my $daytime_label = FS::Msgcat::_gettext('daytime') || 'Day&nbsp;Phone';
-  my $night_label = FS::Msgcat::_gettext('night') || 'Night&nbsp;Phone';
-  print '<TR><TD ALIGN="right">'. $daytime_label.
-          '</TD><TD COLSPAN=5 BGCOLOR="#ffffff">',
-          $cust_main->daytime || '&nbsp', '</TD></TR>',
-        '<TR><TD ALIGN="right">'. $night_label. 
-          '</TD><TD COLSPAN=5 BGCOLOR="#ffffff">',
-          $cust_main->night || '&nbsp', '</TD></TR>',
-        '<TR><TD ALIGN="right">Fax</TD><TD COLSPAN=5 BGCOLOR="#ffffff">',
-          $cust_main->fax || '&nbsp', '</TD></TR>',
-        '</TABLE>', "</TD></TR></TABLE>"
-  ;
-
-  if ( defined $cust_main->dbdef_table->column('ship_last') ) {
-
-    my $pre = $cust_main->ship_last ? 'ship_' : '';
-
-    print "<BR>Service address", &ntable("#cccccc"), "<TR><TD>",
-          &ntable("#cccccc",2),
-      '<TR><TD ALIGN="right">Contact name</TD>',
-        '<TD COLSPAN=5 BGCOLOR="#ffffff">',
-        $cust_main->get("${pre}last"), ', ', $cust_main->get("${pre}first"),
-        '</TD></TR>',
-      '<TR><TD ALIGN="right">Company</TD><TD COLSPAN=5 BGCOLOR="#ffffff">',
-        $cust_main->get("${pre}company"),
-        '</TD></TR>',
-      '<TR><TD ALIGN="right">Address</TD><TD COLSPAN=5 BGCOLOR="#ffffff">',
-        $cust_main->get("${pre}address1"),
-        '</TD></TR>',
-    ;
-    print '<TR><TD ALIGN="right">&nbsp;</TD><TD COLSPAN=5 BGCOLOR="#ffffff">',
-          $cust_main->get("${pre}address2"), '</TD></TR>'
-      if $cust_main->get("${pre}address2");
-    print '<TR><TD ALIGN="right">City</TD><TD BGCOLOR="#ffffff">',
-            $cust_main->get("${pre}city"),
-            '</TD><TD ALIGN="right">State</TD><TD BGCOLOR="#ffffff">',
-            $cust_main->get("${pre}state"),
-            '</TD><TD ALIGN="right">Zip</TD><TD BGCOLOR="#ffffff">',
-            $cust_main->get("${pre}zip"), '</TD></TR>',
-          '<TR><TD ALIGN="right">Country</TD><TD BGCOLOR="#ffffff">',
-            $cust_main->get("${pre}country"),
-            '</TD></TR>',
-    ;
-    print '<TR><TD ALIGN="right">'. $daytime_label. '</TD>',
-          '<TD COLSPAN=5 BGCOLOR="#ffffff">',
-            $cust_main->get("${pre}daytime") || '&nbsp', '</TD></TR>',
-          '<TR><TD ALIGN="right">'. $night_label. '</TD>'.
-          '<TD COLSPAN=5 BGCOLOR="#ffffff">',
-            $cust_main->get("${pre}night") || '&nbsp', '</TD></TR>',
-          '<TR><TD ALIGN="right">Fax</TD><TD COLSPAN=5 BGCOLOR="#ffffff">',
-            $cust_main->get("${pre}fax") || '&nbsp', '</TD></TR>',
-          '</TABLE>', "</TD></TR></TABLE>"
-    ;
-
-  }
-
-print '</TD>';
-
-print '<TD VALIGN="top">';
-
-  print &ntable("#cccccc"), "<TR><TD>", &ntable("#cccccc",2),
-        '<TR><TD ALIGN="right">Customer&nbsp;number</TD><TD BGCOLOR="#ffffff">',
-        $custnum, '</TD></TR>',
-  ;
-
-  my @agents = qsearch( 'agent', {} );
-  my $agent;
-  unless ( scalar(@agents) == 1 ) {
-    $agent = qsearchs('agent',{ 'agentnum' => $cust_main->agentnum } );
-    print '<TR><TD ALIGN="right">Agent</TD><TD BGCOLOR="#ffffff">',
-        $agent->agentnum, ": ", $agent->agent, '</TD></TR>';
-  } else {
-    $agent = $agents[0];
-  }
-  my @referrals = qsearch( 'part_referral', {} );
-  unless ( scalar(@referrals) == 1 ) {
-    my $referral = qsearchs('part_referral', {
-      'refnum' => $cust_main->refnum
-    } );
-    print '<TR><TD ALIGN="right">Advertising&nbsp;source</TD><TD BGCOLOR="#ffffff">',
-          $referral->refnum, ": ", $referral->referral, '</TD></TR>';
-  }
-  print '<TR><TD ALIGN="right">Order taker</TD><TD BGCOLOR="#ffffff">',
-    $cust_main->otaker, '</TD></TR>';
-
-  print '<TR><TD ALIGN="right">Referring&nbsp;Customer</TD><TD BGCOLOR="#ffffff">';
-  my $referring_cust_main = '';
-  if ( $cust_main->referral_custnum
-       && ( $referring_cust_main =
-            qsearchs('cust_main', { custnum => $cust_main->referral_custnum } )
-          )
-     ) {
-    print '<A HREF="'. popurl(1). 'cust_main.cgi?'.
-          $cust_main->referral_custnum. '">'.
-          $cust_main->referral_custnum. ': '.
-          ( $referring_cust_main->company
-              ? $referring_cust_main->company. ' ('.
-                  $referring_cust_main->last. ', '. $referring_cust_main->first.
-                  ')'
-              : $referring_cust_main->last. ', '. $referring_cust_main->first
-          ).
-          '</A>';
-  }
-  print '</TD></TR>';
-
-  print '</TABLE></TD></TR></TABLE>';
-
-print '<BR>';
-
-if ( $conf->config('payby-default') ne 'HIDE' ) {
-
-  my @invoicing_list = $cust_main->invoicing_list;
-  print "Billing information (",
-       qq!<A HREF="!, popurl(2), qq!misc/bill.cgi?$custnum">!, "Bill now</A>)",
-        &ntable("#cccccc"), "<TR><TD>", &ntable("#cccccc",2),
-        '<TR><TD ALIGN="right">Tax&nbsp;exempt</TD><TD BGCOLOR="#ffffff">',
-        $cust_main->tax ? 'yes' : 'no',
-        '</TD></TR>',
-        '<TR><TD ALIGN="right">Postal&nbsp;invoices</TD><TD BGCOLOR="#ffffff">',
-        ( grep { $_ eq 'POST' } @invoicing_list ) ? 'yes' : 'no',
-        '</TD></TR>',
-        '<TR><TD ALIGN="right">Email&nbsp;invoices</TD><TD BGCOLOR="#ffffff">',
-        join(', ', grep { $_ ne 'POST' } @invoicing_list ) || 'no',
-        '</TD></TR>',
-        '<TR><TD ALIGN="right">Billing&nbsp;type</TD><TD BGCOLOR="#ffffff">',
-  ;
-
-  if ( $cust_main->payby eq 'CARD' || $cust_main->payby eq 'DCRD' ) {
-    my $payinfo = $cust_main->payinfo_masked;
-    print 'Credit&nbsp;card&nbsp;',
-          ( $cust_main->payby eq 'CARD' ? '(automatic)' : '(on-demand)' ),
-          '</TD></TR>',
-          '<TR><TD ALIGN="right">Card number</TD><TD BGCOLOR="#ffffff">',
-          $payinfo, '</TD></TR>',
-          '<TR><TD ALIGN="right">Expiration</TD><TD BGCOLOR="#ffffff">',
-          $cust_main->paydate, '</TD></TR>',
-          '<TR><TD ALIGN="right">Name on card</TD><TD BGCOLOR="#ffffff">',
-          $cust_main->payname, '</TD></TR>'
-    ;
-  } elsif ( $cust_main->payby eq 'CHEK' || $cust_main->payby eq 'DCHK') {
-    my( $account, $aba ) = split('@', $cust_main->payinfo );
-    print 'Electronic&nbsp;check&nbsp;',
-          ( $cust_main->payby eq 'CHEK' ? '(automatic)' : '(on-demand)' ),
-          '</TD></TR>',
-          '<TR><TD ALIGN="right">Account number</TD><TD BGCOLOR="#ffffff">',
-          $account, '</TD></TR>',
-          '<TR><TD ALIGN="right">ABA/Routing code</TD><TD BGCOLOR="#ffffff">',
-          $aba, '</TD></TR>',
-          '<TR><TD ALIGN="right">Bank name</TD><TD BGCOLOR="#ffffff">',
-          $cust_main->payname, '</TD></TR>'
-    ;
-  } elsif ( $cust_main->payby eq 'LECB' ) {
-    $cust_main->payinfo =~ /^(\d{3})(\d{3})(\d{4})$/;
-    my $payinfo = "$1-$2-$3";
-    print 'Phone&nbsp;bill&nbsp;billing</TD></TR>',
-          '<TR><TD ALIGN="right">Phone number</TD><TD BGCOLOR="#ffffff">',
-          $payinfo, '</TD></TR>',
-    ;
-  } elsif ( $cust_main->payby eq 'BILL' ) {
-    print 'Billing</TD></TR>';
-    print '<TR><TD ALIGN="right">P.O. </TD><TD BGCOLOR="#ffffff">',
-          $cust_main->payinfo, '</TD></TR>',
-      if $cust_main->payinfo;
-    print '<TR><TD ALIGN="right">Expiration</TD><TD BGCOLOR="#ffffff">',
-          $cust_main->paydate, '</TD></TR>',
-          '<TR><TD ALIGN="right">Attention</TD><TD BGCOLOR="#ffffff">',
-          $cust_main->payname, '</TD></TR>',
-    ;
-  } elsif ( $cust_main->payby eq 'COMP' ) {
-    print 'Complimentary</TD></TR>',
-          '<TR><TD ALIGN="right">Authorized&nbsp;by</TD><TD BGCOLOR="#ffffff">',
-          $cust_main->payinfo, '</TD></TR>',
-          '<TR><TD ALIGN="right">Expiration</TD><TD BGCOLOR="#ffffff">',
-          $cust_main->paydate, '</TD></TR>',
-    ;
-  }
-
-  print "</TABLE></TD></TR></TABLE>";
-
-}
+%>
 
-print '</TD></TR></TABLE>';
+<A NAME="cust_main"></A>
+<%= &itable() %>
+<TR>
+  <TD VALIGN="top">
+    <%= include('cust_main/contacts.html', $cust_main ) %>
+  </TD>
+  <TD VALIGN="top">
+    <%= include('cust_main/misc.html', $cust_main ) %>
+    <% if ( $conf->config('payby-default') ne 'HIDE' ) { %>
+      <BR>
+      <%= include('cust_main/billing.html', $cust_main ) %>
+    <% } %>
+  </TD>
+</TR>
+</TABLE>
 
+<%
 if ( defined $cust_main->dbdef_table->column('comments')
-     && $cust_main->comments =~ /[^\s\n\r]/ )
-{
-  print "<BR>Comments". &ntable("#cccccc"). "<TR><TD>".
-        &ntable("#cccccc",2).
-        '<TR><TD BGCOLOR="#ffffff"><PRE>'.
-        encode_entities($cust_main->comments).
-        '</PRE></TD></TR></TABLE></TABLE>';
-}
-
+     && $cust_main->comments =~ /[^\s\n\r]/              ) {
 %>
+<BR>
+Comments
+<%= ntable("#cccccc") %><TR><TD><%= ntable("#cccccc",2) %>
+<TR>
+  <TD BGCOLOR="#ffffff">
+    <PRE><%= encode_entities($cust_main->comments) %></PRE>
+  </TD>
+</TR>
+</TABLE></TABLE>
+<% } %>
 
-</TD></TR></TABLE>
+<% if ( $conf->config('ticket_system') ) { %>
+  <BR>
+  <%= include('cust_main/tickets.html', $cust_main ) %>
+<% } %>
 
 <BR>
 <SCRIPT TYPE="text/javascript">
@@ -319,6 +123,15 @@ function enable_order_pkg () {
 <SELECT NAME="pkgpart" onChange="enable_order_pkg()"><OPTION>Order additional package
 
 <%
+
+my @agents = qsearch( 'agent', {} );
+my $agent;
+unless ( scalar(@agents) == 1 ) {
+  $agent = qsearchs('agent',{ 'agentnum' => $cust_main->agentnum } );
+} else {
+  $agent = $agents[0];
+}
+
 foreach my $part_pkg (
   qsearch( 'part_pkg', { 'disabled' => '' }, '',
            ' AND 0 < ( SELECT COUNT(*) FROM type_pkgs '.
@@ -330,7 +143,7 @@ foreach my $part_pkg (
 <OPTION VALUE="<%= $part_pkg->pkgpart %>"><%= $part_pkg->pkg %> - <%= $part_pkg->comment %>
 <% } %>
 
-</SELECT><INPUT NAME="submit" TYPE="submit" VALUE="Order Package" disabled></FORM><BR>
+</SELECT><INPUT NAME="submit" TYPE="submit" VALUE="Order Package" disabled></FORM>
 
 <%
 
@@ -364,7 +177,7 @@ if ( $conf->config('payby-default') ne 'HIDE' ) {
 }
 
 print qq!<A NAME="cust_pkg">Packages</A> !,
-      qq!( <A HREF="!, popurl(2), qq!edit/cust_pkg.cgi?$custnum">Order and cancel packages</A> (preserves services) )!,
+      qq!( <A HREF="!, popurl(2), qq!edit/cust_pkg.cgi?$custnum">Bulk order and cancel packages</A> (preserves services) )!,
 ;
 
 #begin display packages
@@ -411,27 +224,13 @@ foreach my $pkg (sort pkgsort_pkgnum_cancel @$packages) {
   #}
   print "<TD ROWSPAN=$rowspan>". &itable('');
 
-  sub freq {
-
-    #false laziness w/edit/part_pkg.cgi
-    my %freq = ( #move this
-      '1d' => 'daily',
-      '1w' => 'weekly',
-      '2w' => 'biweekly (every 2 weeks)',
-      '1'  => 'monthly',
-      '2'  => 'bimonthly (every 2 months)',
-      '3'  => 'quarterly (every 3 months)',
-      '6'  => 'semiannually (every 6 months)',
-      '12' => 'annually',
-      '24' => 'biannually (every 2 years)',
-    );
-
-    my $freq = shift;
-    exists $freq{$freq} ? $freq{$freq} : "every&nbsp;$freq&nbsp;months";
+  sub myfreq {
+    my $part_pkg = shift;
+    my $freq = $part_pkg->freq_pretty;
+    $freq =~ s/ /&nbsp;/g;
+    $freq;
   }
 
-  #eomove
-
   if ( $pkg->{cancel} ) { #status: cancelled
 
     print '<TR><TD><FONT COLOR="#ff0000"><B>Cancelled&nbsp;</B></FONT></TD>'.
@@ -480,7 +279,7 @@ foreach my $pkg (sort pkgsort_pkgnum_cancel @$packages) {
           print '<TR><TD COLSPAN=2>(&nbsp;'. pkg_cancel_link($pkg).
                 '&nbsp;)</TD</TR>';
         } else {
-          print 'billed&nbsp;'. freq($pkg->{freq}). ')</TD></TR>';
+          print 'billed&nbsp;'. myfreq($pkg->{part_pkg}). ')</TD></TR>';
         }
 
       } else { #setup
@@ -491,7 +290,7 @@ foreach my $pkg (sort pkgsort_pkgnum_cancel @$packages) {
                 pkg_datestr($pkg,'setup',$conf). '</TD></TR>';
         } else {
           print '<TR><TD COLSPAN=2><FONT COLOR="#00CC00"><B>Active</B></FONT>'.
-                ',&nbsp;billed&nbsp;'. freq($pkg->{freq}). '</TD></TR>'.
+                ',&nbsp;billed&nbsp;'. myfreq($pkg->{part_pkg}). '</TD></TR>'.
                 '<TR><TD>Setup&nbsp;</TD><TD>'.
                 pkg_datestr($pkg, 'setup',$conf). '</TD></TR>';
         }
@@ -584,6 +383,7 @@ print '</TABLE>';
 
     my $target = "$payby$payinfo";
     $payby =~ s/^BILL$/Check #/ if $payinfo;
+    $payby =~ s/^CHEK$/Electronic check /;
     $payby =~ s/^BILL$//;
     $payby =~ s/^(CARD|COMP)$/$1 /;
     my $info = $payby ? " ($payby$payinfo)" : '';
@@ -693,6 +493,7 @@ print '</TABLE>';
                     : $cust_pay_void->payinfo;
 
     $payby =~ s/^BILL$/Check #/ if $payinfo;
+    $payby =~ s/^CHEK$/Electronic check /;
     $payby =~ s/^BILL$//;
     $payby =~ s/^(CARD|COMP)$/$1 /;
     my $info = $payby ? " ($payby$payinfo)" : '';
@@ -797,6 +598,7 @@ print '</TABLE>';
                     : $cust_refund->payinfo;
 
     $payby =~ s/^BILL$/Check #/ if $payinfo;
+    $payby =~ s/^CHEK$/Electronic check /;
     $payby =~ s/^(CARD|COMP)$/$1 /;
 
     push @history, {
@@ -897,8 +699,13 @@ sub get_packages {
   ) { 
   
     my $part_pkg = $cust_pkg->part_pkg;
-  
+
     my %pkg = ();
+
+    #to get back to the original object... should use it in the first place!!
+    $pkg{cust_pkg} = $cust_pkg;
+    $pkg{part_pkg} = $part_pkg;
+
     $pkg{pkgnum} = $cust_pkg->pkgnum;
     $pkg{pkg} = $part_pkg->pkg;
     $pkg{pkgpart} = $part_pkg->pkgpart;
@@ -910,6 +717,7 @@ sub get_packages {
     $pkg{susp} = $cust_pkg->getfield('susp');
     $pkg{expire} = $cust_pkg->getfield('expire');
     $pkg{cancel} = $cust_pkg->getfield('cancel');
+
   
     my %svcparts = map {
       $_->svcpart => {
@@ -967,11 +775,21 @@ sub svc_label_link {
 sub svc_provision_link {
   my ($pkg, $svcpart, $conf) = @_;
   ( my $svc_nbsp = $svcpart->{svc} ) =~ s/\s+/&nbsp;/g;
-  my $pkgnum_svcpart = "pkgnum$pkg->{pkgnum}-svcpart$svcpart->{svcpart}";
   my $num_left = $svcpart->{quantity} - $svcpart->{count};
+  my $pkgnum_svcpart = "pkgnum$pkg->{pkgnum}-svcpart$svcpart->{svcpart}";
 
-  my $link = qq!<A CLASS="provision" HREF="${p}edit/$svcpart->{svcdb}.cgi?!.
-             qq!$pkgnum_svcpart">!.
+  my $url;
+  if ( $svcpart->{svcdb} eq 'svc_external'
+       && $conf->exists('svc_external-skip_manual')
+  ) {
+    $url = "${p}edit/process/$svcpart->{svcdb}.cgi?".
+           "pkgnum=$pkg->{pkgnum}&".
+           "svcpart=$svcpart->{svcpart}";
+  } else {
+    $url = "${p}edit/$svcpart->{svcdb}.cgi?$pkgnum_svcpart";
+  }
+
+  my $link = qq!<A CLASS="provision" HREF="$url">!.
              "Provision&nbsp;$svc_nbsp&nbsp;($num_left)</A>";
   if ( $conf->exists('legacy_link') ) {
     $link .= '<BR>'.