summaryrefslogtreecommitdiff
path: root/FS
diff options
context:
space:
mode:
Diffstat (limited to 'FS')
-rw-r--r--FS/FS/Record.pm2
-rw-r--r--FS/FS/cust_bill.pm15
-rw-r--r--FS/FS/cust_main.pm85
-rw-r--r--FS/FS/part_export/vpopmail.pm19
-rw-r--r--FS/FS/part_pkg.pm2
-rw-r--r--FS/FS/pkg_svc.pm2
-rw-r--r--FS/FS/svc_acct.pm2
7 files changed, 116 insertions, 11 deletions
diff --git a/FS/FS/Record.pm b/FS/FS/Record.pm
index c247ed2db..e6126a13b 100644
--- a/FS/FS/Record.pm
+++ b/FS/FS/Record.pm
@@ -930,7 +930,7 @@ sub ut_ip {
$self->getfield($field) =~ /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/
or return "Illegal (IP address) $field: ". $self->getfield($field);
for ( $1, $2, $3, $4 ) { return "Illegal (IP address) $field" if $_ > 255; }
- $self->setfield($field, "$1.$2.$3.$4");
+ $self->setfield($field, "$1.$2.$3.$3");
'';
}
diff --git a/FS/FS/cust_bill.pm b/FS/FS/cust_bill.pm
index fd79f238c..5e041ea59 100644
--- a/FS/FS/cust_bill.pm
+++ b/FS/FS/cust_bill.pm
@@ -681,7 +681,8 @@ sub realtime_card {
my $capture =
new Business::OnlinePayment( $bop_processor, @bop_options );
- $capture->content(
+ my %capture = (
+ type => 'CC',
action => $action2,
login => $bop_login,
password => $bop_password,
@@ -689,8 +690,18 @@ sub realtime_card {
amount => $amount,
authorization => $auth,
description => $description,
+ card_number => $cust_main->payinfo,
+ expiration => $exp,
);
+ foreach my $field (qw( authorization_source_code returned_ACI transaction_identifier validation_code
+ transaction_sequence_num local_transaction_date
+ local_transaction_time AVS_result_code )) {
+ $capture{$field} = $transaction->$field() if $transaction->can($field);
+ }
+
+ $capture->content( %capture );
+
$capture->submit();
unless ( $capture->is_success ) {
@@ -1101,7 +1112,7 @@ sub print_text {
=head1 VERSION
-$Id: cust_bill.pm,v 1.40 2002-08-30 23:48:43 ivan Exp $
+$Id: cust_bill.pm,v 1.41 2002-09-05 16:51:49 ivan Exp $
=head1 BUGS
diff --git a/FS/FS/cust_main.pm b/FS/FS/cust_main.pm
index 8e47f23d5..cfa6b8bb6 100644
--- a/FS/FS/cust_main.pm
+++ b/FS/FS/cust_main.pm
@@ -2075,6 +2075,91 @@ sub batch_import {
}
+=item batch_charge
+
+=cut
+
+sub batch_charge {
+ my $param = shift;
+ #warn join('-',keys %$param);
+ my $fh = $param->{filehandle};
+ my @fields = @{$param->{fields}};
+
+ eval "use Date::Parse;";
+ die $@ if $@;
+ eval "use Text::CSV_XS;";
+ die $@ if $@;
+
+ my $csv = new Text::CSV_XS;
+ #warn $csv;
+ #warn $fh;
+
+ my $imported = 0;
+ #my $columns;
+
+ local $SIG{HUP} = 'IGNORE';
+ local $SIG{INT} = 'IGNORE';
+ local $SIG{QUIT} = 'IGNORE';
+ local $SIG{TERM} = 'IGNORE';
+ local $SIG{TSTP} = 'IGNORE';
+ local $SIG{PIPE} = 'IGNORE';
+
+ my $oldAutoCommit = $FS::UID::AutoCommit;
+ local $FS::UID::AutoCommit = 0;
+ my $dbh = dbh;
+
+ #while ( $columns = $csv->getline($fh) ) {
+ my $line;
+ while ( defined($line=<$fh>) ) {
+
+ $csv->parse($line) or do {
+ $dbh->rollback if $oldAutoCommit;
+ return "can't parse: ". $csv->error_input();
+ };
+
+ my @columns = $csv->fields();
+ #warn join('-',@columns);
+
+ my %row = ();
+ foreach my $field ( @fields ) {
+ $row{$field} = shift @columns;
+ }
+
+ my $cust_main = qsearchs('cust_main', { 'custnum' => $row{'custnum'} } );
+ unless ( $cust_main ) {
+ $dbh->rollback if $oldAutoCommit;
+ return "unknown custnum $row{'custnum'}";
+ }
+
+ if ( $row{'amount'} > 0 ) {
+ my $error = $cust_main->charge($row{'amount'}, $row{'pkg'});
+ if ( $error ) {
+ $dbh->rollback if $oldAutoCommit;
+ return $error;
+ }
+ $imported++;
+ } elsif ( $row{'amount'} < 0 ) {
+ my $error = $cust_main->credit( sprintf( "%.2f", 0-$row{'amount'} ),
+ $row{'pkg'} );
+ if ( $error ) {
+ $dbh->rollback if $oldAutoCommit;
+ return $error;
+ }
+ $imported++;
+ } else {
+ #hmm?
+ }
+
+ }
+
+ $dbh->commit or die $dbh->errstr if $oldAutoCommit;
+
+ return "Empty file!" unless $imported;
+
+ ''; #no error
+
+}
+
=back
=head1 BUGS
diff --git a/FS/FS/part_export/vpopmail.pm b/FS/FS/part_export/vpopmail.pm
index cc8136e25..561e2742a 100644
--- a/FS/FS/part_export/vpopmail.pm
+++ b/FS/FS/part_export/vpopmail.pm
@@ -1,6 +1,7 @@
package FS::part_export::vpopmail;
-use vars qw(@ISA @saltset $exportdir $rsync $ssh);
+use vars qw(@ISA @saltset $exportdir);
+use Fcntl qw(:flock);
use File::Path;
use FS::UID qw( datasrc );
use FS::part_export;
@@ -9,9 +10,6 @@ use FS::part_export;
@saltset = ( 'a'..'z' , 'A'..'Z' , '0'..'9' , '.' , '/' );
-$rsync = "rsync";
-$ssh = "ssh";
-
sub rebless { shift; }
sub _export_insert {
@@ -60,7 +58,15 @@ sub _export_delete {
#a good idea to queue anything that could fail or take any time
sub vpopmail_queue {
my( $self, $svcnum, $method ) = (shift, shift, shift);
+
my $exportdir = "/usr/local/etc/freeside/export." . datasrc;
+ mkdir $exportdir, 0700 or die $! unless -d $exportdir;
+ $exportdir .= "/vpopmail";
+ mkdir $exportdir, 0700 or die $! unless -d $exportdir;
+ $exportdir .= '/'. $self->machine;
+ mkdir $exportdir, 0700 or die $! unless -d $exportdir;
+ mkdir "$exportdir/domains", 0700 or die $! unless -d "$exportdir/domains";
+
my $queue = new FS::queue {
'svcnum' => $svcnum,
'job' => "FS::part_export::vpopmail::vpopmail_$method",
@@ -78,7 +84,10 @@ sub vpopmail_queue {
sub vpopmail_insert { #subroutine, not method
my( $exportdir, $machine, $dir, $uid, $gid ) = splice @_,0,5;
my( $username, $password, $domain, $quota ) = @_;
-
+
+ mkdir "$exportdir/domains/$domain", 0700 or die $!
+ unless -d "$exportdir/domains/$domain";
+
(open(VPASSWD, ">>$exportdir/domains/$domain/vpasswd")
and flock(VPASSWD,LOCK_EX)
) or die "can't open vpasswd file for $username\@$domain: ".
diff --git a/FS/FS/part_pkg.pm b/FS/FS/part_pkg.pm
index e914636e4..9c33e9a3b 100644
--- a/FS/FS/part_pkg.pm
+++ b/FS/FS/part_pkg.pm
@@ -297,7 +297,7 @@ sub payby {
=head1 VERSION
-$Id: part_pkg.pm,v 1.16 2002-06-10 01:39:50 khoff Exp $
+$Id: part_pkg.pm,v 1.14 2002-05-09 12:38:39 ivan Exp $
=head1 BUGS
diff --git a/FS/FS/pkg_svc.pm b/FS/FS/pkg_svc.pm
index 3c544ffd8..1812dbf29 100644
--- a/FS/FS/pkg_svc.pm
+++ b/FS/FS/pkg_svc.pm
@@ -137,7 +137,7 @@ sub part_svc {
=head1 VERSION
-$Id: pkg_svc.pm,v 1.3 2002-06-10 01:39:50 khoff Exp $
+$Id: pkg_svc.pm,v 1.1 1999-08-04 09:03:53 ivan Exp $
=head1 BUGS
diff --git a/FS/FS/svc_acct.pm b/FS/FS/svc_acct.pm
index 6fe26c8d5..e62cdd7bb 100644
--- a/FS/FS/svc_acct.pm
+++ b/FS/FS/svc_acct.pm
@@ -708,7 +708,7 @@ sub check {
$recref->{dir} =~ /^([\/\w\-\.\&]*)$/
- or return "Illegal directory";
+ or return "Illegal directory: ". $recref->{dir};
$recref->{dir} = $1;
return "Illegal directory"
if $recref->{dir} =~ /(^|\/)\.+(\/|$)/; #no .. component