postal_invoicing
Set to 1 to enable postal invoicing
-=item payby
-
-CARD, DCRD, CHEK, DCHK, LECB, BILL, COMP or PREPAY
-
-=item payinfo
-
-Card number for CARD/DCRD, account_number@aba_number for CHEK/DCHK, prepaid "pin" for PREPAY, purchase order number for BILL
-
-=item paycvv
-
-Credit card CVV2 number (1.5+ or 1.4.2 with CVV schema patch)
-
-=item paydate
-
-Expiration date for CARD/DCRD
-
-=item payname
-
-Exact name on credit card for CARD/DCRD, bank name for CHEK/DCHK
-
=item referral_custnum
Referring customer number
postal_invoicing
Set to 1 to enable postal invoicing
-=item payby
-
-CARD, DCRD, CHEK, DCHK, LECB, BILL, COMP or PREPAY
-
-=item payinfo
-
-Card number for CARD/DCRD, account_number@aba_number for CHEK/DCHK, prepaid
-"pin" for PREPAY, purchase order number for BILL
-
-=item paycvv
-
-Credit card CVV2 number (1.5+ or 1.4.2 with CVV schema patch)
-
-=item paydate
-
-Expiration date for CARD/DCRD
-
-=item payname
-
-Exact name on credit card for CARD/DCRD, bank name for CHEK/DCHK
-
=item referral_custnum
Referring customer number
my @customers = qsearch({
'table' => 'cust_main',
'hashref' => { 'agentnum' => $agent->agentnum,
- 'payby' => { op=>'!=', value=>'COMP', },
+ 'complimentary' => { op=>'!=', value=>'Y', },
},
'extra_sql' => $extra_sql,
});
#with billing type Complimentary. Leave the First package dropdown set to
#(none).
'cust_main' => [
- { 'agentnum' => 1, #XXX
- 'refnum' => 1, #XXX
- 'first' => 'System',
- 'last' => 'Accounts',
- 'payby' => 'COMP',
- 'payinfo' => 'system', #or something
- 'paydate' => '1/2037',
+ { 'agentnum' => 1, #XXX
+ 'refnum' => 1, #XXX
+ 'first' => 'System',
+ 'last' => 'Accounts',
+ 'complimentary' => 'Y',
'bill_location' => $cust_location,
'ship_location' => $cust_location,
},
use strict;
use vars qw( $DEBUG $me );
# but NOT $conf
+use Carp;
use Fcntl qw(:flock); #for spool_csv
use Cwd;
use List::Util qw(min max sum);
}
-=item comp
-
-Pays this invoice with a compliemntary payment. If there is an error,
-returns the error, otherwise returns false.
-
-=cut
-
sub comp {
- my $self = shift;
- my $cust_pay = new FS::cust_pay ( {
- 'invnum' => $self->invnum,
- 'paid' => $self->owed,
- '_date' => '',
- 'payby' => 'COMP',
- 'payinfo' => $self->cust_main->payinfo,
- 'paybatch' => '',
- } );
- $cust_pay->insert;
+ croak 'cust_bill->comp is deprecated (COMP payments are deprecated)';
}
=item realtime_card
first last company daytime night fax mobile
);
# locale
-# payby payinfo payname paystart_month paystart_year payissue payip
-# ss paytype paystate stateid stateid_state
+# ss stateid stateid_state
@location_editable_fields = qw(
address1 address2 city county state zip country
);
#same for refnum like signup_server-default_refnum?
my $cust_main = new FS::cust_main ( { # $class->new( {
- 'payby' => 'BILL',
'tagnum' => [ FS::part_tag->default_tags ],
map { $_ => $opt{$_} } qw(
agentnum salesnum refnum agent_custid referral_custnum
last first company
daytime night fax mobile
- payby payinfo paydate paycvv payname
),
} );
agentnum salesnum refnum agent_custid referral_custnum
last first company
daytime night fax mobile
- payby payinfo paydate paycvv payname
),
my @invoicing_list;
sub bill {
my( $self, %options ) = @_;
- return '' if $self->payby eq 'COMP';
+ return '' if $self->complimentary eq 'Y';
local($DEBUG) = $FS::cust_main::DEBUG if $FS::cust_main::DEBUG > $DEBUG;
my $log = FS::Log->new('FS::cust_main::Billing::bill');
$cust_pay->set('otaker', 'legacy');
}
- delete $FS::payby::hash{'COMP'}->{cust_pay}; #quelle kludge
my $error = $cust_pay->replace;
if ( $error ) {
next;
}
- $FS::payby::hash{'COMP'}->{cust_pay} = ''; #restore it
-
$count++;
if ( $DEBUG > 1 && $lastprog + 30 < time ) {
warn "$me $count/$total (".sprintf('%.2f',100*$count/$total). '%)'."\n";
# otaker->usernum upgrade
###
- delete $FS::payby::hash{'COMP'}->{cust_pay}; #quelle kludge
$class->_upgrade_otaker(%opt);
- $FS::payby::hash{'COMP'}->{cust_pay} = ''; #restore it
# if we do this anywhere else, it should become an FS::Upgrade method
my $num_to_upgrade = $class->count('paybatch is not null');
join(';', map { "$_=". uri_escape($t->$_) } @params);
my $itemdesc_loc =
- # " payby != 'COMP' ". # breaks the entire report under 4.x
- # # and unnecessary since COMP accounts don't
- # # get taxes calculated in the first place
" ( itemdesc = ? OR ? = '' AND itemdesc IS NULL ) ".
"AND ". FS::tax_rate_location->location_sql( map { $_ => $t->$_ }
@taxparams
<% &ntable("#cccccc") %>
% my $curuser = $FS::CurrentUser::CurrentUser;
+
+% ###
+% # complimentry flag
+% ###
+
+% if ( $curuser->access_right('Complimentary customer') ) {
+
+ <TR>
+ <TD COLSPAN="2"><INPUT TYPE="checkbox" NAME="complimentary" VALUE="Y" <% $cust_main->complimentary eq "Y" ? 'CHECKED' : '' %>>Complimentary customer
+ </TR>
+
+% } else {
+
+ <INPUT TYPE="hidden" NAME="complimentary" VALUE="<% $cust_main->complimentary eq 'Y' ? 'Y' : '' %>">
+
+% }
+
+% ###
+% # tax exemptions
+% ###
+
% my @exempt_groups = grep /\S/, $conf->config('tax-cust_exempt-groups');
% if ( $conf->exists('cust_class-tax_exempt')
% || $conf->exists('tax-cust_exempt-groups-require_individual_nums')
% } else {
<TR>
- <TD WIDTH="608" COLSPAN="2"><INPUT TYPE="checkbox" NAME="tax" VALUE="Y" <% $cust_main->tax eq "Y" ? 'CHECKED' : '' %>> Tax Exempt<% @exempt_groups ? ' (all taxes)' : '' %></TD>
+ <TD COLSPAN="2"><INPUT TYPE="checkbox" NAME="tax" VALUE="Y" <% $cust_main->tax eq "Y" ? 'CHECKED' : '' %>> Tax Exempt<% @exempt_groups ? ' (all taxes)' : '' %></TD>
</TR>
% }
% }
% }
+% ###
+% # postal invoices
+% ###
+
% unless ( $conf->exists('emailinvoiceonly') ) {
<TR>
- <TD WIDTH="608" COLSPAN="2"><INPUT TYPE="checkbox" NAME="invoicing_list_POST" VALUE="POST" <%
+ <TD COLSPAN="2"><INPUT TYPE="checkbox" NAME="invoicing_list_POST" VALUE="POST" <%
( grep { $_ eq 'POST' } @invoicing_list )
% }
+% ###
+% # email invoices
+% ###
+
<TR>
- <TD WIDTH="608" COLSPAN="2"><INPUT TYPE="checkbox" NAME="invoice_email" VALUE="Y" <%
+ <TD COLSPAN="2"><INPUT TYPE="checkbox" NAME="invoice_email" VALUE="Y" <%
( $cust_main->invoice_noemail eq 'Y' )
? ''
</TR>
% }
+% ###
+% # prorate_day
+% ###
+
% if ( $conf->exists('cust_main-select-prorate_day') ) {
<TR>
<TD ALIGN="right" WIDTH="200"><% mt('Prorate day (1-28)') |h %> </TD>
<INPUT TYPE="hidden" NAME="prorate_day" VALUE="<% $cust_main->prorate_day %>">
% }
+% ###
+% # billday
+% ###
+
<TR>
<TD ALIGN="right" WIDTH="200"><% mt('Charge card/e-check on this day of the month') |h %> </TD>
<TD>
% $ret;
% }
+% ###
+% # invoice_terms
+% ###
+
<TR>
<TD ALIGN="right" WIDTH="200"><% mt('Invoice terms') |h %> </TD>
<TD WIDTH="408">
</TD>
</TR>
+% ###
+% # credit_limit
+% ###
+
<TR>
<TD ALIGN="right" WIDTH="200"><% mt('Credit limit') |h %> </TD>
<TD WIDTH="408">
</TD>
</TR>
+% ###
+% # CDR flags / options
+% ###
+
% if ( $conf->exists('voip-cust_cdr_spools') ) {
<TR>
<TD COLSPAN="2"><INPUT TYPE="checkbox" NAME="spool_cdr" VALUE="Y" <% $cust_main->spool_cdr eq "Y" ? 'CHECKED' : '' %>> <% mt('Spool CDRs') |h %></TD>
<INPUT TYPE="hidden" NAME="cdr_termination_percentage" VALUE="<% $cust_main->cdr_termination_percentage %>">
% }
+% ###
+% # Invoicing currency
+% ###
+
%my @currencies = $conf->config('currencies');
%if ( scalar(@currencies) ) {
% unshift @currencies, ''; #default
&>
% }
+% ###
+% # Invoicing locale
+% ###
%my @available_locales = $conf->config('available-locales');
%if ( scalar(@available_locales) ) {
my $money_char = $conf->config('money_char') || '$';
-my @payby = grep /\w/, $conf->config('payby');
-#@payby = (qw( CARD DCRD CHEK DCHK BILL CASH WEST COMP ))
-@payby = (qw( CARD DCRD CHEK DCHK BILL CASH COMP ))
- unless @payby;
-
my $show_term = '';
if ( $cust_main->custnum ) {
#false laziness w/view/cust_main/billing.html
#if ( $beginning || $ending ) {
# push @where, "_date >= $beginning",
# "_date <= $ending";
-# #"payby != 'COMP';
#}
if ( $cgi->param('agentnum') =~ /^(\d+)$/ ) {
if ( $beginning || $ending ) {
push @where, "_date >= $beginning",
"_date <= $ending";
- #"payby != 'COMP';
}
if ( $cgi->param('agentnum') =~ /^(\d+)$/ ) {
$opt{'barcode_img'} = 1 if $conf->exists('invoice-barcode');
my @payby = grep /\w/, $conf->config('payby');
-#@payby = (qw( CARD DCRD CHEK DCHK LECB BILL CASH WEST COMP ))
-@payby = (qw( CARD DCRD CHEK DCHK LECB BILL CASH COMP ))
+@payby = (qw( CARD DCRD CHEK DCHK BILL CASH ))
unless @payby;
my %payby = map { $_=>1 } @payby;
&>
% }
+% my $yes = emt('yes');
+% my $no = emt('no');
+
<TABLE CLASS="fsinnerbox">
+% if ( $cust_main->complimentary ) {
+ <TR>
+ <TD ALIGN="right"><% mt('Complimentary') |h %></TD>
+ <TD BGCOLOR="#ffffff"><% $yes %></TD>
+ </TR>
+% }
+
%( my $balance = $cust_main->balance )
% =~ s/^(\-?)(.*)$/<FONT SIZE=+1>$1<\/FONT>$money_char$2/;
</TR>
% }
-% my $yes = emt('yes');
-% my $no = emt('no');
-
% my @exempt_groups = grep /\S/, $conf->config('tax-cust_exempt-groups');
% unless ( $conf->exists('cust_class-tax_exempt')
my $conf = new FS::Conf;
-my @payby = grep /\w/, $conf->config('payby');
-#@payby = (qw( CARD DCRD CHEK DCHK LECB BILL CASH WEST COMP ))
-@payby = (qw( CARD DCRD CHEK DCHK LECB BILL CASH COMP ))
- unless @payby;
-my %payby = map { $_=>1 } @payby;
-
my $cust_statement = qsearchs({
'select' => 'cust_statement.*',
'table' => 'cust_statement',