-function cancel_areyousure(href) {
- if (confirm("Perminantly delete all services and cancel this customer?") == true)
- window.location.href = href;
-}
-
-END
+% ###
+% # Tickets
+% ###
-print qq! | !.
- 'Cancel this customer'
- if $cust_main->ncancelled_pkgs;
+% if ( $view eq 'tickets' ) {
-print qq! | !.
- 'Delete this customer'
- if $conf->exists('deletecustomers');
+% if ( $conf->config('ticket_system') ) {
+ <& cust_main/tickets.html, $cust_main &>
+% }
+
-unless ( $conf->exists('disable_customer_referrals') ) {
- print qq! | !,
- qq!Refer a new customer!;
+% }
- print qq! | !,
- qq!View this customer's referrals!;
-}
+% ###
+% # Appointments
+% ###
-print '
';
+% if ( $view eq 'appointments' ) {
-my $signupurl = $conf->config('signupurl');
-if ( $signupurl ) {
-print "This customer's signup URL: ".
- "$signupurl?ref=$custnum
";
-}
+% if ( $conf->config('ticket_system')
+% && $curuser->access_right('View appointments') ) {
+ <& cust_main/appointments.html, $cust_main &>
+% }
+
-print '';
-
-print &itable(), '';
-
-print '';
-
- print "Billing address", &ntable("#cccccc"), " |
",
- &ntable("#cccccc",2),
- ' |
Contact name | ',
- '',
- $cust_main->last, ', ', $cust_main->first,
- ' | ';
-print 'SS# | ',
- $cust_main->ss || ' ', ' | '
- if $conf->exists('show_ss');
-
-print '
',
- 'Company | ',
- $cust_main->company,
- ' |
',
- 'Address | ',
- $cust_main->address1,
- ' |
',
- ;
- print ' | ',
- $cust_main->address2, ' |
'
- if $cust_main->address2;
- print 'City | ',
- $cust_main->city,
- ' | State | ',
- $cust_main->state,
- ' | Zip | ',
- $cust_main->zip, ' |
',
- 'Country | ',
- $cust_main->country,
- ' |
',
- ;
- my $daytime_label = FS::Msgcat::_gettext('daytime') || 'Day Phone';
- my $night_label = FS::Msgcat::_gettext('night') || 'Night Phone';
- print ''. $daytime_label.
- ' | ',
- $cust_main->daytime || ' ', ' |
',
- ''. $night_label.
- ' | ',
- $cust_main->night || ' ', ' |
',
- 'Fax | ',
- $cust_main->fax || ' ', ' |
',
- '', ""
- ;
-
- if ( defined $cust_main->dbdef_table->column('ship_last') ) {
-
- my $pre = $cust_main->ship_last ? 'ship_' : '';
-
- print "
Service address", &ntable("#cccccc"), "",
- &ntable("#cccccc",2),
- ' |
Contact name | ',
- '',
- $cust_main->get("${pre}last"), ', ', $cust_main->get("${pre}first"),
- ' |
',
- 'Company | ',
- $cust_main->get("${pre}company"),
- ' |
',
- 'Address | ',
- $cust_main->get("${pre}address1"),
- ' |
',
- ;
- print ' | ',
- $cust_main->get("${pre}address2"), ' |
'
- if $cust_main->get("${pre}address2");
- print 'City | ',
- $cust_main->get("${pre}city"),
- ' | State | ',
- $cust_main->get("${pre}state"),
- ' | Zip | ',
- $cust_main->get("${pre}zip"), ' |
',
- 'Country | ',
- $cust_main->get("${pre}country"),
- ' |
',
- ;
- print ''. $daytime_label. ' | ',
- '',
- $cust_main->get("${pre}daytime") || ' ', ' |
',
- ''. $night_label. ' | '.
- '',
- $cust_main->get("${pre}night") || ' ', ' |
',
- 'Fax | ',
- $cust_main->get("${pre}fax") || ' ', ' |
',
- '', ""
- ;
-
- }
-
-print '';
-
-print '';
-
- print &ntable("#cccccc"), " | ", &ntable("#cccccc",2),
- ' |
Customer number | ',
- $custnum, ' |
',
- ;
-
- my @agents = qsearch( 'agent', {} );
- my $agent;
- unless ( scalar(@agents) == 1 ) {
- $agent = qsearchs('agent',{ 'agentnum' => $cust_main->agentnum } );
- print 'Agent | ',
- $agent->agentnum, ": ", $agent->agent, ' |
';
- } else {
- $agent = $agents[0];
- }
- my @referrals = qsearch( 'part_referral', {} );
- unless ( scalar(@referrals) == 1 ) {
- my $referral = qsearchs('part_referral', {
- 'refnum' => $cust_main->refnum
- } );
- print 'Advertising source | ',
- $referral->refnum, ": ", $referral->referral, ' |
';
- }
- print 'Order taker | ',
- $cust_main->otaker, ' |
';
-
- print 'Referring Customer | ';
- my $referring_cust_main = '';
- if ( $cust_main->referral_custnum
- && ( $referring_cust_main =
- qsearchs('cust_main', { custnum => $cust_main->referral_custnum } )
- )
- ) {
- print ''.
- $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
- ).
- '';
- }
- print ' |
';
-
- print '';
-
-print '
';
-
-if ( $conf->config('payby-default') ne 'HIDE' ) {
-
- my @invoicing_list = $cust_main->invoicing_list;
- print "Billing information (",
- qq!!, "Bill now)",
- &ntable("#cccccc"), "", &ntable("#cccccc",2),
- ' |
Tax exempt | ',
- $cust_main->tax ? 'yes' : 'no',
- ' |
',
- 'Postal invoices | ',
- ( grep { $_ eq 'POST' } @invoicing_list ) ? 'yes' : 'no',
- ' |
',
- 'Email invoices | ',
- join(', ', grep { $_ ne 'POST' } @invoicing_list ) || 'no',
- ' |
',
- 'Billing type | ',
- ;
-
- if ( $cust_main->payby eq 'CARD' || $cust_main->payby eq 'DCRD' ) {
- my $payinfo = $cust_main->payinfo;
- $payinfo = 'x'x(length($payinfo)-4). substr($payinfo,(length($payinfo)-4));
- print 'Credit card ',
- ( $cust_main->payby eq 'CARD' ? '(automatic)' : '(on-demand)' ),
- ' |
',
- 'Card number | ',
- $payinfo, ' |
',
- 'Expiration | ',
- $cust_main->paydate, ' |
',
- 'Name on card | ',
- $cust_main->payname, ' |
'
- ;
- } elsif ( $cust_main->payby eq 'CHEK' || $cust_main->payby eq 'DCHK') {
- my( $account, $aba ) = split('@', $cust_main->payinfo );
- print 'Electronic check ',
- ( $cust_main->payby eq 'CHEK' ? '(automatic)' : '(on-demand)' ),
- '',
- 'Account number | ',
- $account, ' |
',
- 'ABA/Routing code | ',
- $aba, ' |
',
- 'Bank name | ',
- $cust_main->payname, ' |
'
- ;
- } elsif ( $cust_main->payby eq 'LECB' ) {
- $cust_main->payinfo =~ /^(\d{3})(\d{3})(\d{4})$/;
- my $payinfo = "$1-$2-$3";
- print 'Phone bill billing',
- 'Phone number | ',
- $payinfo, ' |
',
- ;
- } elsif ( $cust_main->payby eq 'BILL' ) {
- print 'Billing';
- print 'P.O. | ',
- $cust_main->payinfo, ' |
',
- if $cust_main->payinfo;
- print 'Expiration | ',
- $cust_main->paydate, ' |
',
- 'Attention | ',
- $cust_main->payname, ' |
',
- ;
- } elsif ( $cust_main->payby eq 'COMP' ) {
- print 'Complimentary',
- 'Authorized by | ',
- $cust_main->payinfo, ' |
',
- 'Expiration | ',
- $cust_main->paydate, ' |
',
- ;
- }
-
- print "";
+% }
-}
-print '';
+% ###
+% # Quotations
+% ###
-if ( defined $cust_main->dbdef_table->column('comments')
- && $cust_main->comments =~ /[^\s\n\r]/ )
-{
- print "
Comments". &ntable("#cccccc"). "".
- &ntable("#cccccc",2).
- ' |
'.
- encode_entities($cust_main->comments).
- ' |
';
-}
+% if ( $view eq 'quotations' ) {
-print '';
-
-print '
'.
- '
';
-
-if ( $conf->config('payby-default') ne 'HIDE' ) {
-
- print '
'.
- qq!
!;
+% }
-}
-print <
-function cust_pkg_areyousure(href) {
- if (confirm("Permanently delete included services and cancel this package?") == true)
- window.location.href = href;
-}
-function svc_areyousure(href) {
- if (confirm("Permanently unprovision and delete this service?") == true)
- window.location.href = href;
-}
-
-END
+% ###
+% # Packages
+% ###
-print qq!
Packages !,
-# qq!
Click on package number to view/edit package.!,
- qq!( Order and cancel packages (preserves services) )!,
-;
+% if ( $view eq 'packages' ) {
-#begin display packages
+% #XXX enable me# if ( $curuser->access_right('View customer packages') {
+<& cust_main/packages.html, $cust_main &>
+% #}
+
-#get package info
+% }
-my $packages = get_packages($cust_main, $conf);
-if ( @$packages ) {
-%>
-
-
- Package |
- Status |
- Services |
-
-<%
-foreach my $pkg (sort pkgsort_pkgnum_cancel @$packages) {
- my $rowspan = 0;
-
- if ($pkg->{cancel}) {
- $rowspan = 0;
- } else {
- foreach my $svcpart (@{$pkg->{svcparts}}) {
- $rowspan += $svcpart->{count};
- $rowspan++ if ($svcpart->{count} < $svcpart->{quantity});
- }
- }
-
-%>
-
-
- CLASS="pkgnum"><%=$pkg->{pkgnum}%> |
- >
- <%=$pkg->{pkg}%> - <%=$pkg->{comment}%> ( <%=pkg_details_link($pkg)%> )
-<% unless ($pkg->{cancel}) { %>
- ( <%=pkg_change_link($pkg)%> )
- ( <%=pkg_dates_link($pkg)%> | <%=pkg_customize_link($pkg,$custnum)%> )
-<% } %>
- |
-<%
- #foreach (qw(setup last_bill next_bill susp expire cancel)) {
- # print qq! ! . pkg_datestr($pkg,$_,$conf) . qq! | \n!;
- #}
- print "". &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 $freq months";
- }
-
- #eomove
-
- if ( $pkg->{cancel} ) { #status: cancelled
-
- print ' |
Cancelled | '.
- ''. pkg_datestr($pkg,'cancel',$conf). ' |
';
- unless ( $pkg->{setup} ) {
- print 'Never billed |
';
- } else {
- print "Setup | ".
- pkg_datestr($pkg, 'setup',$conf). ' |
';
- print "Last bill | ".
- pkg_datestr($pkg, 'last_bill',$conf). ' |
'
- if $pkg->{'last_bill'};
- print "Suspended | ".
- pkg_datestr($pkg, 'susp',$conf). ' |
'
- if $pkg->{'susp'};
- }
-
- } else {
-
- if ( $pkg->{susp} ) { #status: suspended
- print 'Suspended | '.
- ''. pkg_datestr($pkg,'susp',$conf). ' |
';
- unless ( $pkg->{setup} ) {
- print 'Never billed |
';
- } else {
- print "Setup | ".
- pkg_datestr($pkg, 'setup',$conf). ' |
';
- }
- print "Last bill | ".
- pkg_datestr($pkg, 'last_bill',$conf). ' |
'
- if $pkg->{'last_bill'};
- # next bill ??
- print "Expires | ".
- pkg_datestr($pkg, 'expire',$conf). ' |
'
- if $pkg->{'expire'};
- print '( '. pkg_unsuspend_link($pkg).
- ' | '. pkg_cancel_link($pkg). ' ) |
';
-
- } else { #status: active
-
- unless ( $pkg->{setup} ) { #not setup
-
- print 'Not yet billed (';
- unless ( $pkg->{freq} ) {
- print 'one-time charge) |
';
- print '( '. pkg_cancel_link($pkg).
- ' ) | ';
- } else {
- print 'billed '. freq($pkg->{freq}). ')
';
- }
-
- } else { #setup
-
- unless ( $pkg->{freq} ) {
- print "One-time charge |
".
- 'Billed | '.
- pkg_datestr($pkg,'setup',$conf). ' |
';
- } else {
- print 'Active'.
- ', billed '. freq($pkg->{freq}). ' |
'.
- 'Setup | '.
- pkg_datestr($pkg, 'setup',$conf). ' |
';
- }
-
- }
-
- print "Last bill | ".
- pkg_datestr($pkg, 'last_bill',$conf). ' |
'
- if $pkg->{'last_bill'};
- print "Next bill | ".
- pkg_datestr($pkg, 'next_bill',$conf). ' |
'
- if $pkg->{'next_bill'};
- print "Expires | ".
- pkg_datestr($pkg, 'expire',$conf). ' |
'
- if $pkg->{'expire'};
- if ( $pkg->{freq} ) {
- print '( '. pkg_suspend_link($pkg).
- ' | '. pkg_cancel_link($pkg). ' ) |
';
- }
-
- }
-
- }
-
- print "
\n";
-
- if ($rowspan == 0) { print qq!\n!; next; }
-
- my $cnt = 0;
- foreach my $svcpart (sort {$a->{svcpart} <=> $b->{svcpart}} @{$pkg->{svcparts}}) {
- foreach my $service (@{$svcpart->{services}}) {
- print '' if ($cnt > 0);
-%>
- <%=svc_link($svcpart,$service)%> |
- <%=svc_label_link($svcpart,$service)%> ( <%=svc_unprovision_link($service)%> ) |
-
-<%
- $cnt++;
- }
- if ($svcpart->{count} < $svcpart->{quantity}) {
- print qq!\n! if ($cnt > 0);
- print qq! !.svc_provision_link($pkg,$svcpart).qq! | \n
\n!;
- }
- }
-}
-print ''
-}
+% ###
+% # Payment History
+% ###
-#end display packages
+% if ( $view eq 'payment_history' ) {
+<& cust_main/payment_history.html, $cust_main &>
+
-print <
-function cust_pay_areyousure(href) {
- if (confirm("Are you sure you want to delete this payment?")
- == true)
- window.location.href = href;
-}
-function cust_pay_unapply_areyousure(href) {
- if (confirm("Are you sure you want to unapply this payment?")
- == true)
- window.location.href = href;
-}
-function cust_credit_areyousure(href) {
- if (confirm("Are you sure you want to delete this credit?")
- == true)
- window.location.href = href;
-}
-
-END
-
-if ( $conf->config('payby-default') ne 'HIDE' ) {
-
- #formatting
- print qq!
Payment History!.
- qq! ( !.
- qq!!.
- qq!Post payment | !.
- qq!!.
- qq!Post credit )!;
-
- #get payment history
- #
- # major problem: this whole thing is way too sloppy.
- # minor problem: the description lines need better formatting.
-
- my @history = (); #needed for mod_perl :)
-
- my %target = ();
-
- my @bills = qsearch('cust_bill',{'custnum'=>$custnum});
- foreach my $bill (@bills) {
- my($bref)=$bill->hashref;
- my $bpre = ( $bill->owed > 0 )
- ? ' Open '
- : '';
- my $bpost = ( $bill->owed > 0 ) ? '' : '';
- push @history,
- $bref->{_date} . qq!\t${bpre}Invoice #! . $bref->{invnum} .
- qq! (Balance \$! . $bill->owed . qq!)$bpost\t! .
- $bref->{charged} . qq!\t\t\t!;
-
- my(@cust_bill_pay)=qsearch('cust_bill_pay',{'invnum'=> $bref->{invnum} } );
- # my(@payments)=qsearch('cust_pay',{'invnum'=> $bref->{invnum} } );
- # my($payment);
- foreach my $cust_bill_pay (@cust_bill_pay) {
- my $payment = $cust_bill_pay->cust_pay;
- my($date,$invnum,$payby,$payinfo,$paid)=($payment->_date,
- $cust_bill_pay->invnum,
- $payment->payby,
- $payment->payinfo,
- $cust_bill_pay->amount,
- );
- $payinfo = 'x'x(length($payinfo)-4). substr($payinfo,(length($payinfo)-4))
- if $payby eq 'CARD';
- my $target = "$payby$payinfo";
- $payby =~ s/^BILL$/Check #/ if $payinfo;
- $payby =~ s/^(CARD|COMP)$/$1 /;
- my $delete = $payment->closed !~ /^Y/i && $conf->exists('deletepayments')
- ? qq! (delete)!
- : '';
- my $unapply =
- $payment->closed !~ /^Y/i && $conf->exists('unapplypayments')
- ? qq! (unapply)!
- : '';
- push @history,
- "$date\tPayment, Invoice #$invnum ($payby$payinfo)$delete$unapply\t\t$paid\t\t\t$target";
- }
-
- my(@cust_credit_bill)=
- qsearch('cust_credit_bill', { 'invnum'=> $bref->{invnum} } );
- foreach my $cust_credit_bill (@cust_credit_bill) {
- my $cust_credit = $cust_credit_bill->cust_credit;
- my($date, $invnum, $crednum, $amount, $reason, $app_date ) = (
- $cust_credit->_date,
- $cust_credit_bill->invnum,
- $cust_credit_bill->crednum,
- $cust_credit_bill->amount,
- $cust_credit->reason,
- time2str("%D", $cust_credit_bill->_date),
- );
- my $delete =
- $cust_credit->closed !~ /^Y/i && $conf->exists('deletecredits')
- ? qq! (delete)!
- : '';
- push @history,
- "$date\tCredit #$crednum: $reason
".
- "(applied to invoice #$invnum on $app_date)$delete\t\t\t$amount\t";
- }
- }
-
- my @credits = grep { scalar(my @array = $_->cust_credit_refund) }
- qsearch('cust_credit',{'custnum'=>$custnum});
- foreach my $credit (@credits) {
- my($cref)=$credit->hashref;
- my(@cust_credit_refund)=
- qsearch('cust_credit_refund', { 'crednum'=> $cref->{crednum} } );
- foreach my $cust_credit_refund (@cust_credit_refund) {
- my $cust_refund = $cust_credit_refund->cust_credit;
- my($date, $crednum, $amount, $reason, $app_date ) = (
- $credit->_date,
- $credit->crednum,
- $cust_credit_refund->amount,
- $credit->reason,
- time2str("%D", $cust_credit_refund->_date),
- );
- push @history,
- "$date\tCredit #$crednum: $reason
".
- "(applied to refund on $app_date)\t\t\t$amount\t";
- }
- }
-
- @credits = grep { $_->credited > 0 }
- qsearch('cust_credit',{'custnum'=>$custnum});
- foreach my $credit (@credits) {
- my($cref)=$credit->hashref;
- push @history,
- $cref->{_date} . "\t" .
- qq!!.
- 'Unapplied credit #' .
- $cref->{crednum} . ": ".
- $cref->{reason} . "\t\t\t" . $credit->credited . "\t";
- }
-
- my(@refunds)=qsearch('cust_refund',{'custnum'=> $custnum } );
- foreach my $refund (@refunds) {
- my($rref)=$refund->hashref;
- my($refundnum) = (
- $refund->refundnum,
- );
-
- push @history,
- $rref->{_date} . "\tRefund #$refundnum, (" .
- $rref->{payby} . " " . $rref->{payinfo} . ") by " .
- $rref->{otaker} . " - ". $rref->{reason} . "\t\t\t\t" .
- $rref->{refund};
- }
-
- my @unapplied_payments =
- grep { $_->unapplied > 0 } qsearch('cust_pay', { 'custnum' => $custnum } );
- foreach my $payment (@unapplied_payments) {
- my $payby = $payment->payby;
- my $payinfo = $payment->payinfo;
- #false laziness w/above
- $payinfo = 'x'x(length($payinfo)-4). substr($payinfo,(length($payinfo)-4))
- if $payby eq 'CARD';
- my $target = "$payby$payinfo";
- $payby =~ s/^BILL$/Check #/ if $payinfo;
- $payby =~ s/^(CARD|COMP)$/$1 /;
- my $delete = $payment->closed !~ /^Y/i && $conf->exists('deletepayments')
- ? qq! (delete)!
- : '';
- push @history,
- $payment->_date. "\t".
- 'Unapplied payment #' .
- $payment->paynum . " ($payby$payinfo) ".
- '('.
- "apply)$delete".
- "\t\t" . $payment->unapplied . "\t\t\t$target";
- }
-
- #formatting
- print &table(), <
- Date |
- Description |
- Charge |
- Payment |
- In-house Credit |
- Refund |
- Balance |
-
-END
-
- #display payment history
-
- my $balance = 0;
- foreach my $item (sort keyfield_numerically @history) {
- my($date,$desc,$charge,$payment,$credit,$refund,$target)=split(/\t/,$item);
- $charge ||= 0;
- $payment ||= 0;
- $credit ||= 0;
- $refund ||= 0;
- $balance += $charge - $payment;
- $balance -= $credit - $refund;
- $balance = sprintf("%.2f", $balance);
- $balance =~ s/^\-0\.00$/0.00/; #yay ieee fp
- $target = '' unless defined $target;
-
- print "";
- print qq!! unless $target && $target{$target}++;
- print time2str("%D",$date);
- print '' if $target && $target{$target} == 1;
- print " | ",
- "$desc | ",
- "",
- ( $charge ? "\$".sprintf("%.2f",$charge) : '' ),
- " | ",
- "",
- ( $payment ? "- \$".sprintf("%.2f",$payment) : '' ),
- " | ",
- "",
- ( $credit ? "- \$".sprintf("%.2f",$credit) : '' ),
- " | ",
- "",
- ( $refund ? "\$".sprintf("%.2f",$refund) : '' ),
- " | ",
- "\$" . $balance,
- " | ",
- "\n";
- }
-
- print "";
-
-}
-
-print '