diff options
-rw-r--r-- | FS/FS/Conf.pm | 2 | ||||
-rw-r--r-- | FS/FS/cdr/cia.pm | 54 | ||||
-rw-r--r-- | FS/FS/cust_main.pm | 3 | ||||
-rw-r--r-- | FS/FS/cust_main/Billing_ThirdParty.pm | 6 | ||||
-rw-r--r-- | FS/FS/cust_payby.pm | 2 | ||||
-rw-r--r-- | FS/FS/msg_template.pm | 1 | ||||
-rw-r--r-- | FS/FS/payby.pm | 10 | ||||
-rw-r--r-- | FS/FS/payinfo_Mixin.pm | 32 | ||||
-rwxr-xr-x | httemplate/edit/cust_refund.cgi | 2 | ||||
-rw-r--r-- | httemplate/edit/msg_template.html | 3 | ||||
-rwxr-xr-x | httemplate/edit/process/cust_refund.cgi | 2 | ||||
-rwxr-xr-x | httemplate/search/elements/cust_pay_or_refund.html | 2 | ||||
-rw-r--r-- | httemplate/search/elements/report_cust_pay_or_refund.html | 1 | ||||
-rw-r--r-- | httemplate/search/report_h_cust_pay.html | 1 | ||||
-rwxr-xr-x | httemplate/view/cust_bill.cgi | 7 | ||||
-rw-r--r-- | httemplate/view/cust_main/payment_history.html | 10 |
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"> |