summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--FS/FS/Conf.pm2
-rw-r--r--FS/FS/cdr/cia.pm54
-rw-r--r--FS/FS/cust_main.pm3
-rw-r--r--FS/FS/cust_main/Billing_ThirdParty.pm6
-rw-r--r--FS/FS/cust_payby.pm2
-rw-r--r--FS/FS/msg_template.pm1
-rw-r--r--FS/FS/payby.pm10
-rw-r--r--FS/FS/payinfo_Mixin.pm32
-rwxr-xr-xhttemplate/edit/cust_refund.cgi2
-rw-r--r--httemplate/edit/msg_template.html3
-rwxr-xr-xhttemplate/edit/process/cust_refund.cgi2
-rwxr-xr-xhttemplate/search/elements/cust_pay_or_refund.html2
-rw-r--r--httemplate/search/elements/report_cust_pay_or_refund.html1
-rw-r--r--httemplate/search/report_h_cust_pay.html1
-rwxr-xr-xhttemplate/view/cust_bill.cgi7
-rw-r--r--httemplate/view/cust_main/payment_history.html10
16 files changed, 88 insertions, 50 deletions
diff --git a/FS/FS/Conf.pm b/FS/FS/Conf.pm
index e584f0042..39f12c25a 100644
--- a/FS/FS/Conf.pm
+++ b/FS/FS/Conf.pm
@@ -2622,7 +2622,7 @@ and customer address. Include units.',
'section' => 'billing',
'description' => 'Available payment types.',
'type' => 'selectmultiple',
- 'select_enum' => [ qw(CARD DCRD CHEK DCHK BILL CASH WEST MCRD PPAL COMP) ],
+ 'select_enum' => [ qw(CARD DCRD CHEK DCHK BILL CASH WEST MCRD MCHK PPAL COMP) ],
},
{
diff --git a/FS/FS/cdr/cia.pm b/FS/FS/cdr/cia.pm
index ca44c0fdf..0471e9bb4 100644
--- a/FS/FS/cdr/cia.pm
+++ b/FS/FS/cdr/cia.pm
@@ -1,8 +1,9 @@
package FS::cdr::cia;
use strict;
-use vars qw( @ISA %info );
+use vars qw( @ISA %info $date $tmp_mday $tmp_mon $tmp_year);
use FS::cdr qw(_cdr_date_parser_maker);
+use Time::Local;
@ISA = qw(FS::cdr);
@@ -11,26 +12,39 @@ use FS::cdr qw(_cdr_date_parser_maker);
'weight' => 510,
'header' => 1,
'type' => 'csv',
- 'sep_char' => "\t",
+ 'sep_char' => "|",
'import_fields' => [
- skip(2), # Reseller Account Number, Confirmation Number
- 'description', # Conference Name
- skip(3), # Organization Name, Bill Code, Q&A Active
- 'userfield', # Chairperson Name
- skip(2), # Conference Start Time, Conference End Time
- _cdr_date_parser_maker('startdate'), # Connect Time
- _cdr_date_parser_maker('enddate'), # Disconnect Time
- skip(1), # Duration
- sub { my($cdr, $data, $conf, $param) = @_;
- $cdr->duration($data);
- $cdr->billsec( $data);
- }, # Roundup Duration
- skip(1), # User Name
- 'dst', # DNIS
- 'src', # ANI
- skip(2), # Call Type, Toll Free,
- 'accountcode', # Chair Conference Entry Code
- skip(1), # Participant Conference Entry Code,
+ 'accountcode',
+ skip(2), # First and last name
+
+ sub { my($cdr, $date) = @_;
+ $date =~ /^(\d{1,2})\/(\d{1,2})\/(\d\d(\d\d)?)$/
+ or die "unparsable date: $date"; #maybe we shouldn't die...
+ ($tmp_mday, $tmp_mon, $tmp_year) = ( $2, $1-1, $3 );
+ }, #Date
+
+ sub { my($cdr, $time) = @_;
+ #my($sec, $min, $hour, $mday, $mon, $year)= localtime($cdr->startdate);
+ $time =~ /^(\d{1,2}):(\d{1,2}):(\d{1,2})$/
+ or die "unparsable time: $time"; #maybe we shouldn't die...
+ $cdr->startdate( timelocal($3, $2, $1 ,$tmp_mday, $tmp_mon, $tmp_year));
+ $cdr->answerdate( timelocal($3, $2, $1 ,$tmp_mday, $tmp_mon, $tmp_year));
+
+ }, # Start time
+
+ sub { my($cdr, $time) = @_;
+ #my($sec, $min, $hour, $mday, $mon, $year)= localtime($cdr->startdate);
+ $time =~ /^(\d{1,2}):(\d{1,2}):(\d{1,2})$/
+ or die "unparsable time: $time"; #maybe we shouldn't die...
+ #$cdr->startdate( timelocal($3, $2, $1 ,$mday, $mon, $year) );
+ $cdr->enddate(
+ timelocal($3, $2, $1 ,$tmp_mday, $tmp_mon, $tmp_year) );
+ }, # End time
+
+ 'disposition', # Disposition
+ 'dst', # PhoneNumber
+ skip(3), # Extension, Service Type, Filler
+ 'src', # ClientContactID
],
);
diff --git a/FS/FS/cust_main.pm b/FS/FS/cust_main.pm
index 294546cf9..9f9562059 100644
--- a/FS/FS/cust_main.pm
+++ b/FS/FS/cust_main.pm
@@ -400,7 +400,7 @@ sub insert {
$payby = 'PREP' if $amount;
- } elsif ( $self->payby =~ /^(CASH|WEST|MCRD|PPAL)$/ ) {
+ } elsif ( $self->payby =~ /^(CASH|WEST|MCRD|MCHK|PPAL)$/ ) {
$payby = $1;
$self->payby('BILL');
@@ -3074,6 +3074,7 @@ Old-style:
=cut
+#super false laziness w/quotation::charge
sub charge {
my $self = shift;
my ( $amount, $setup_cost, $quantity, $start_date, $classnum );
diff --git a/FS/FS/cust_main/Billing_ThirdParty.pm b/FS/FS/cust_main/Billing_ThirdParty.pm
index faced8f2b..a1d19fb9e 100644
--- a/FS/FS/cust_main/Billing_ThirdParty.pm
+++ b/FS/FS/cust_main/Billing_ThirdParty.pm
@@ -36,7 +36,11 @@ to that URL.
=cut
my @methods = qw(PAYPAL CC);
-my %method2payby = ( 'PAYPAL' => 'PPAL', 'CC' => 'MCRD' );
+my %method2payby = ( 'PAYPAL' => 'PPAL',
+ 'CC' => 'MCRD', #? but doesn't MCRD mean _offline_
+ #card, not third-party card? but no
+ #one is doing non-paypal right now
+ );
sub create_payment {
my $self = shift;
diff --git a/FS/FS/cust_payby.pm b/FS/FS/cust_payby.pm
index 42bf64a3e..ad3d80a20 100644
--- a/FS/FS/cust_payby.pm
+++ b/FS/FS/cust_payby.pm
@@ -353,7 +353,7 @@ sub check {
if ( $self->paydate eq '' || $self->paydate eq '-' ) {
return "Expiration date required"
# shouldn't payinfo_check do this?
- unless $self->payby =~ /^(BILL|PREPAY|CHEK|DCHK|LECB|CASH|WEST|MCRD|PPAL)$/;
+ unless $self->payby =~ /^(BILL|PREPAY|CHEK|DCHK|LECB|CASH|WEST|MCRD|MCHK|PPAL)$/;
$self->paydate('');
} else {
my( $m, $y );
diff --git a/FS/FS/msg_template.pm b/FS/FS/msg_template.pm
index 5dbd591a8..65890e125 100644
--- a/FS/FS/msg_template.pm
+++ b/FS/FS/msg_template.pm
@@ -598,6 +598,7 @@ sub substitutions {
_date
_date_pretty
due_date
+ due_date2str
)],
#XXX not really thinking about cust_bill substitutions quite yet
diff --git a/FS/FS/payby.pm b/FS/FS/payby.pm
index 197d4995b..c4aa1b1b2 100644
--- a/FS/FS/payby.pm
+++ b/FS/FS/payby.pm
@@ -113,6 +113,12 @@ tie %hash, 'Tie::IxHash',
longname => 'Manual credit card',
cust_main => 'BILL', #this is a payment type only, customers go to BILL...
},
+ 'MCHK' => { #not the same as DCHK
+ tinyname => 'card',
+ shortname => 'Manual electronic check', # initial payment, then billing
+ longname => 'Manual electronic check',
+ cust_main => 'BILL', #this is a payment type only, customers go to BILL...
+ },
'APPL' => {
tinyname => 'apple store',
shortname => 'Apple Store',
@@ -207,7 +213,9 @@ sub longname {
%payby2bop = (
'CARD' => 'CC',
'CHEK' => 'ECHECK',
- 'MCRD' => 'CC',
+ 'MCRD' => 'CC', #? but doesn't MCRD mean _offline_ card? i think it got
+ # overloaded for third-party card payments -- but no one is
+ # doing those other than paypal now
'PPAL' => 'PAYPAL',
);
diff --git a/FS/FS/payinfo_Mixin.pm b/FS/FS/payinfo_Mixin.pm
index e14c5895f..c66e3bc37 100644
--- a/FS/FS/payinfo_Mixin.pm
+++ b/FS/FS/payinfo_Mixin.pm
@@ -38,14 +38,15 @@ For Customers (cust_main):
For Refunds (cust_refund):
'CARD' (credit cards), 'CHEK' (electronic check/ACH),
'LECB' (Phone bill billing), 'BILL' (billing), 'CASH' (cash),
-'WEST' (Western Union), 'MCRD' (Manual credit card), 'CBAK' Chargeback, or 'COMP' (free)
+'WEST' (Western Union), 'MCRD' (Manual credit card), 'MCHK' (Manual electronic
+check), 'CBAK' Chargeback, or 'COMP' (free)
For Payments (cust_pay):
'CARD' (credit cards), 'CHEK' (electronic check/ACH),
'LECB' (phone bill billing), 'BILL' (billing), 'PREP' (prepaid card),
-'CASH' (cash), 'WEST' (Western Union), 'MCRD' (Manual credit card),
-'PPAL' (PayPal)
+'CASH' (cash), 'WEST' (Western Union), 'MCRD' (Manual credit card), 'MCHK'
+(Manual electronic check), 'PPAL' (PayPal)
'COMP' (free) is depricated as a payment type in cust_pay
=cut
@@ -129,7 +130,11 @@ sub mask_payinfo {
return 'N/A (tokenized)'; #?
} else { # if not, mask it...
- if ($payby eq 'CARD' || $payby eq 'DCRD' || $payby eq 'MCRD') {
+ if ($payby eq 'CARD' || $payby eq 'DCRD') {
+ #|| $payby eq 'MCRD') {
+ #MCRD isn't a card in payinfo,
+ #its a record of an _offline_
+ #card
# Credit Cards
@@ -177,23 +182,6 @@ sub mask_payinfo {
Checks payby and payinfo.
-For Customers (cust_main):
-'CARD' (credit card - automatic), 'DCRD' (credit card - on-demand),
-'CHEK' (electronic check - automatic), 'DCHK' (electronic check - on-demand),
-'LECB' (Phone bill billing), 'BILL' (billing), 'COMP' (free), or
-'PREPAY' (special billing type: applies a credit - see L<FS::prepay_credit> and sets billing type to I<BILL>)
-
-For Refunds (cust_refund):
-'CARD' (credit cards), 'CHEK' (electronic check/ACH),
-'LECB' (Phone bill billing), 'BILL' (billing), 'CASH' (cash),
-'WEST' (Western Union), 'MCRD' (Manual credit card), 'CBAK' (Chargeback), or 'COMP' (free)
-
-For Payments (cust_pay):
-'CARD' (credit cards), 'CHEK' (electronic check/ACH),
-'LECB' (phone bill billing), 'BILL' (billing), 'PREP' (prepaid card),
-'CASH' (cash), 'WEST' (Western Union), or 'MCRD' (Manual credit card)
-'COMP' (free) is depricated as a payment type in cust_pay
-
=cut
sub payinfo_check {
@@ -276,6 +264,8 @@ sub payby_payinfo_pretty {
$lh->maketext('Western Union');
} elsif ( $self->payby eq 'MCRD' ) {
$lh->maketext('Manual credit card');
+ } elsif ( $self->payby eq 'MCHK' ) {
+ $lh->maketext('Manual electronic check');
} elsif ( $self->payby eq 'EDI' ) {
$lh->maketext('EDI') . ' ' . $self->paymask;
} elsif ( $self->payby eq 'PPAL' ) {
diff --git a/httemplate/edit/cust_refund.cgi b/httemplate/edit/cust_refund.cgi
index f9095fd7a..fa049a39a 100755
--- a/httemplate/edit/cust_refund.cgi
+++ b/httemplate/edit/cust_refund.cgi
@@ -140,7 +140,7 @@ my $reason = $cgi->param('reason');
my $link = $cgi->param('popup') ? 'popup' : '';
my @rights = ();
-push @rights, 'Post refund' if $payby =~ /^(BILL|CASH|MCRD)$/;
+push @rights, 'Post refund' if $payby =~ /^(BILL|CASH|MCRD|MCHK)$/;
push @rights, 'Post check refund' if $payby eq 'BILL';
push @rights, 'Post cash refund ' if $payby eq 'CASH';
push @rights, 'Refund payment' if $payby =~ /^(CARD|CHEK)$/;
diff --git a/httemplate/edit/msg_template.html b/httemplate/edit/msg_template.html
index aac4cd4fd..7f3824127 100644
--- a/httemplate/edit/msg_template.html
+++ b/httemplate/edit/msg_template.html
@@ -242,6 +242,9 @@ my %substitutions = (
],
'cust_bill' => [
'$invnum' => 'Invoice#',
+ '$_date_pretty' => 'Invoice date',
+ '$due_date' => 'Invoice due date (timestamp)',
+ '$due_date2str' => 'Invoice due date (human readable)',
],
'cust_pkg' => [
'$pkgnum' => 'Package#',
diff --git a/httemplate/edit/process/cust_refund.cgi b/httemplate/edit/process/cust_refund.cgi
index 599c8b8e2..52fede8ec 100755
--- a/httemplate/edit/process/cust_refund.cgi
+++ b/httemplate/edit/process/cust_refund.cgi
@@ -31,7 +31,7 @@ my $link = $cgi->param('popup') ? 'popup' : '';
my $payby = $cgi->param('payby');
my @rights = ();
-push @rights, 'Post refund' if $payby =~ /^(BILL|CASH|MCRD)$/;
+push @rights, 'Post refund' if $payby =~ /^(BILL|CASH|MCRD|MCHK)$/;
push @rights, 'Post check refund' if $payby eq 'BILL';
push @rights, 'Post cash refund ' if $payby eq 'CASH';
push @rights, 'Refund payment' if $payby =~ /^(CARD|CHEK)$/;
diff --git a/httemplate/search/elements/cust_pay_or_refund.html b/httemplate/search/elements/cust_pay_or_refund.html
index b5172fb36..7bebe7f40 100755
--- a/httemplate/search/elements/cust_pay_or_refund.html
+++ b/httemplate/search/elements/cust_pay_or_refund.html
@@ -271,7 +271,7 @@ if ( $cgi->param('magic') ) {
foreach my $payby ( $cgi->param('payby') ) {
$payby =~
- /^(CARD|CHEK|BILL|CASH|PPAL|APPL|ANRD|PREP|WIRE|WEST|EDI|MCRD)(-(VisaMC|Amex|Discover|Maestro|Tokenized))?$/
+ /^(CARD|CHEK|BILL|CASH|PPAL|APPL|ANRD|PREP|WIRE|WEST|EDI|MCRD|MCHK)(-(VisaMC|Amex|Discover|Maestro|Tokenized))?$/
or die "illegal payby $payby";
my $payby_search = "$table.payby = '$1'";
diff --git a/httemplate/search/elements/report_cust_pay_or_refund.html b/httemplate/search/elements/report_cust_pay_or_refund.html
index 3026605ca..9c4ca2761 100644
--- a/httemplate/search/elements/report_cust_pay_or_refund.html
+++ b/httemplate/search/elements/report_cust_pay_or_refund.html
@@ -53,6 +53,7 @@ Examples:
<OPTION VALUE="WEST" SELECTED><% mt('Western Union') |h %></OPTION>
<OPTION VALUE="EDI" SELECTED><% mt('Electronic Debit (EDI)') |h %></OPTION>
<OPTION VALUE="MCRD" SELECTED><% mt('manual credit card') |h %></OPTION>
+ <OPTION VALUE="MCHK" SELECTED><% mt('manual electronic check') |h %></OPTION>
</SELECT>
</TD>
</TR>
diff --git a/httemplate/search/report_h_cust_pay.html b/httemplate/search/report_h_cust_pay.html
index 5c7f27afb..13b7ff35f 100644
--- a/httemplate/search/report_h_cust_pay.html
+++ b/httemplate/search/report_h_cust_pay.html
@@ -54,6 +54,7 @@
<OPTION VALUE="CASH">cash</OPTION>
<OPTION VALUE="WEST">Western Union</OPTION>
<OPTION VALUE="MCRD">manual credit card</OPTION>
+ <OPTION VALUE="MCHK">manual electronic check</OPTION>
</SELECT>
</TD>
</TR>
diff --git a/httemplate/view/cust_bill.cgi b/httemplate/view/cust_bill.cgi
index 344030404..27376d505 100755
--- a/httemplate/view/cust_bill.cgi
+++ b/httemplate/view/cust_bill.cgi
@@ -25,7 +25,7 @@
% }
% if ( $cust_bill->owed > 0
-% && scalar( grep $payby{$_}, qw(BILL CASH WEST MCRD) )
+% && scalar( grep $payby{$_}, qw(BILL CASH WEST MCRD MCHK) )
% && $curuser->access_right(['Post payment', 'Post check payment', 'Post cash payment'])
% && ! $conf->exists('pkg-balances')
% )
@@ -54,6 +54,11 @@
<A HREF="<% $p %>edit/cust_pay.cgi?payby=MCRD;invnum=<% $invnum %>"><% mt('manual credit card') |h %></A>
% }
+% if ( $payby{'MCHK'} && $curuser->access_right(['Post payment']) ) {
+ <% $s++ ? ' | ' : '' %>
+ <A HREF="<% $p %>edit/cust_pay.cgi?payby=MCHK;invnum=<% $invnum %>"><% mt('manual electronic check') |h %></A>
+% }
+
<% mt('payment against this invoice') |h %><BR><BR>
% }
diff --git a/httemplate/view/cust_main/payment_history.html b/httemplate/view/cust_main/payment_history.html
index a8f2f861a..0aacb0a8d 100644
--- a/httemplate/view/cust_main/payment_history.html
+++ b/httemplate/view/cust_main/payment_history.html
@@ -58,6 +58,11 @@
<A HREF="<% $p %>edit/cust_pay.cgi?payby=MCRD;custnum=<% $custnum %>"><% mt('Post manual (offline/POS) credit card payment') |h %></A>
% }
+% if ( $payby{'MCRD'} && $curuser->access_right('Post payment') ) {
+ <% $s++ ? ' | ' : '' %>
+ <A HREF="<% $p %>edit/cust_pay.cgi?payby=MCHK;custnum=<% $custnum %>"><% mt('Post manual (offline) electronic check payment') |h %></A>
+% }
+
<% $s ? '<BR>' : '' %>
%# credit links
@@ -136,6 +141,11 @@
<A HREF="<% $p %>edit/cust_refund.cgi?payby=MCRD;custnum=<% $custnum %>"><% mt('Post manual (offline/POS) credit card refund') |h %></A>
% }
+% if ( $payby{'MCHK'} && $curuser->access_right('Post refund') ) {
+ <% $s++ ? ' | ' : '' %>
+ <A HREF="<% $p %>edit/cust_refund.cgi?payby=MCRD;custnum=<% $custnum %>"><% mt('Post manual (offline) electronic check refund') |h %></A>
+% }
+
</TD>
<TD ALIGN="right" VALIGN="top">