From 959663cd4d4885295f44de43ac005e55d054102f Mon Sep 17 00:00:00 2001 From: ivan Date: Mon, 31 Jan 2000 05:22:23 +0000 Subject: [PATCH] prepaid "internet cards" --- FS/FS/cust_main.pm | 72 ++++++++++++++--- FS/FS/prepay_credit.pm | 128 +++++++++++++++++++++++++++++++ bin/fs-setup | 18 ++++- fs_signup/FS-SignupClient/cgi/signup.cgi | 7 +- htdocs/docs/schema.html | 10 ++- htdocs/docs/signup.html | 3 +- htdocs/docs/upgrade5.html | 7 ++ 7 files changed, 229 insertions(+), 16 deletions(-) create mode 100644 FS/FS/prepay_credit.pm diff --git a/FS/FS/cust_main.pm b/FS/FS/cust_main.pm index 50535da55..59ec41b81 100644 --- a/FS/FS/cust_main.pm +++ b/FS/FS/cust_main.pm @@ -27,6 +27,7 @@ use FS::part_referral; use FS::cust_main_county; use FS::agent; use FS::cust_main_invoice; +use FS::prepay_credit; @ISA = qw( FS::Record ); @@ -148,9 +149,9 @@ FS::Record. The following fields are currently supported: =item fax - phone (optional) -=item payby - `CARD' (credit cards), `BILL' (billing), or `COMP' (free) +=item payby - `CARD' (credit cards), `BILL' (billing), `COMP' (free), or `PREPAY' (special billing type: applies a credit - see L and sets billing type to BILL) -=item payinfo - card number, P.O.#, or comp issuer (4-8 lowercase alphanumerics; think username) +=item payinfo - card number, P.O., comp issuer (4-8 lowercase alphanumerics; think username) or prepayment identifier (see L) =item paydate - expiration date, mm/yyyy, m/yyyy, mm/yy or m/yy @@ -182,6 +183,52 @@ sub table { 'cust_main'; } Adds this customer to the database. If there is an error, returns the error, otherwise returns false. +=cut + +sub insert { + my $self = shift; + + my $flag = 0; + if ( $self->payby eq 'PREPAY' ) { + $self->payby('BILL'); + $flag = 1; + } + + 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 $error = $self->SUPER::insert; + return $error if $error; + + if ( $flag ) { + my $prepay_credit = + qsearchs('prepay_credit', { 'identifier' => $self->payinfo } ); + warn "WARNING: can't find pre-found prepay_credit: ". $self->payinfo + unless $prepay_credit; + my $amount = $prepay_credit->amount; + my $error = $prepay_credit->delete; + if ( $error ) { + warn "WARNING: can't delete prepay_credit: ". $self->payinfo; + } else { + my $cust_credit = new FS::cust_credit { + 'custnum' => $self->custnum, + 'amount' => $amount, + }; + my $error = $cust_credit->insert; + warn "WARNING: error inserting cust_credit for prepay_credit: $error" + if $error; + } + + } + + ''; + +} + =item delete NEW_CUSTNUM This deletes the customer. If there is an error, returns the error, otherwise @@ -314,7 +361,7 @@ sub check { or return "Illegal zip: ". $self->zip; $self->zip($1); - $self->payby =~ /^(CARD|BILL|COMP)$/ + $self->payby =~ /^(CARD|BILL|COMP|PREPAY)$/ or return "Illegal payby: ". $self->payby; $self->payby($1); @@ -340,10 +387,21 @@ sub check { $error = $self->ut_textn('payinfo'); return "Illegal comp account issuer: ". $self->payinfo if $error; + } elsif ( $self->payby eq 'PREPAY' ) { + + my $payinfo = $self->payinfo; + $payinfo =~ s/\W//g; #anything else would just confuse things + $self->payinfo($payinfo); + $error = $self->ut_alpha('payinfo'); + return "Illegal prepayment identifier: ". $self->payinfo if $error; + return "Unknown prepayment identifier" + unless qsearchs('prepay_credit', { 'identifier' => $self->payinfo } ); + } if ( $self->paydate eq '' ) { - return "Expriation date required" unless $self->payby eq 'BILL'; + return "Expriation date required" + unless $self->payby eq 'BILL' || $self->payby eq 'PREPAY'; $self->paydate(''); } else { $self->paydate =~ /^(\d{1,2})[\/\-](\d{2}(\d{2})?)$/ @@ -799,10 +857,6 @@ sub collect { return "Unknown payment type ". $self->payby; } - - - - } ''; @@ -939,7 +993,7 @@ sub check_invoicing_list { =head1 VERSION -$Id: cust_main.pm,v 1.2 1999-08-12 04:16:01 ivan Exp $ +$Id: cust_main.pm,v 1.3 2000-01-31 05:22:23 ivan Exp $ =head1 BUGS diff --git a/FS/FS/prepay_credit.pm b/FS/FS/prepay_credit.pm new file mode 100644 index 000000000..86274aa4c --- /dev/null +++ b/FS/FS/prepay_credit.pm @@ -0,0 +1,128 @@ +package FS::prepay_credit; + +use strict; +use vars qw( @ISA ); +#use FS::Record qw( qsearch qsearchs ); +use FS::Record qw(); + +@ISA = qw(FS::Record); + +=head1 NAME + +FS::prepay_credit - Object methods for prepay_credit records + +=head1 SYNOPSIS + + use FS::prepay_credit; + + $record = new FS::prepay_credit \%hash; + $record = new FS::prepay_credit { + 'identifier' => '4198123455512121' + 'amount' => '19.95', + }; + + $error = $record->insert; + + $error = $new_record->replace($old_record); + + $error = $record->delete; + + $error = $record->check; + +=head1 DESCRIPTION + +An FS::table_name object represents an pre--paid credit, such as a pre-paid +"calling card". FS::prepay_credit inherits from FS::Record. The following +fields are currently supported: + +=over 4 + +=item field - description + +=item identifier - identifier entered by the user to receive the credit + +=item amount - amount of the credit + +=back + +=head1 METHODS + +=over 4 + +=item new HASHREF + +Creates a new pre-paid credit. To add the example to the database, see +L<"insert">. + +Note that this stores the hash reference, not a distinct copy of the hash it +points to. You can ask the object for a copy with the I method. + +=cut + +sub table { 'prepay_credit'; } + +=item insert + +Adds this record to the database. If there is an error, returns the error, +otherwise returns false. + +=cut + +=item delete + +Delete this record from the database. + +=cut + +=item replace OLD_RECORD + +Replaces the OLD_RECORD with this one in the database. If there is an error, +returns the error, otherwise returns false. + +=cut + +=item check + +Checks all fields to make sure this is a valid pre-paid credit. If there is +an error, returns the error, otherwise returns false. Called by the insert +and replace methods. + +=cut + +sub check { + my $self = shift; + + my $identifier = $self->identifier; + $identifier =~ s/\W//g; #anything else would just confuse things + $self->identifier($identifier); + + $self->ut_number('prepaynum') + || $self->ut_alpha('identifier') + || $self->ut_money('amount') + ; + +} + +=back + +=head1 VERSION + +$Id: prepay_credit.pm,v 1.1 2000-01-31 05:22:23 ivan Exp $ + +=head1 BUGS + +=head1 SEE ALSO + +L, schema.html from the base documentation. + +=head1 HISTORY + +$Log: prepay_credit.pm,v $ +Revision 1.1 2000-01-31 05:22:23 ivan +prepaid "internet cards" + + +=cut + +1; + diff --git a/bin/fs-setup b/bin/fs-setup index f1dd3a8b4..dcaccdf1c 100755 --- a/bin/fs-setup +++ b/bin/fs-setup @@ -1,6 +1,6 @@ #!/usr/bin/perl -Tw # -# $Id: fs-setup,v 1.21 2000-01-30 06:03:26 ivan Exp $ +# $Id: fs-setup,v 1.22 2000-01-31 05:22:23 ivan Exp $ # # ivan@sisd.com 97-nov-8,9 # @@ -32,7 +32,10 @@ # fix radius attributes ivan@sisd.com 98-sep-27 # # $Log: fs-setup,v $ -# Revision 1.21 2000-01-30 06:03:26 ivan +# Revision 1.22 2000-01-31 05:22:23 ivan +# prepaid "internet cards" +# +# Revision 1.21 2000/01/30 06:03:26 ivan # postgres 6.5 finally supports decimal(10,2) # # Revision 1.20 2000/01/28 22:53:33 ivan @@ -663,6 +666,17 @@ sub tables_hash_hack { # 'index' => [ [] ], #}, + 'prepay_credit' => { + 'columns' => [ + 'prepaynum', 'int', '', '', + 'identifier', 'varchar', '', $char_d, + 'amount', @money_type, + ], + 'primary_key' => 'prepaynum', + 'unique' => [ ['identifier'] ], + 'index => [ [] ], + }, + ); %tables; diff --git a/fs_signup/FS-SignupClient/cgi/signup.cgi b/fs_signup/FS-SignupClient/cgi/signup.cgi index 6fccf11b1..961ad505a 100755 --- a/fs_signup/FS-SignupClient/cgi/signup.cgi +++ b/fs_signup/FS-SignupClient/cgi/signup.cgi @@ -1,6 +1,6 @@ #!/usr/bin/perl -Tw # -# $Id: signup.cgi,v 1.3 2000-01-28 22:49:49 ivan Exp $ +# $Id: signup.cgi,v 1.4 2000-01-31 05:22:23 ivan Exp $ use strict; use vars qw( @payby $cgi $locales $packages $pops $r $error @@ -22,7 +22,8 @@ use Text::Template; # #@payby = qw( CARD BILL COMP ); #@payby = qw( CARD BILL ); -@payby = qw( CARD ); +#@payby = qw( CARD ); +@payby = qw( CARD PREPAY ); $ieak_file = '/usr/local/freeside/ieak.template'; @@ -220,12 +221,14 @@ END 'CARD' => qq!Credit card
${r}
${r}Exp !. expselect("CARD"). qq!
${r}Name on card
!, 'BILL' => qq!Billing
P.O.
${r}Exp !. expselect("BILL", "12-2037"). qq!
${r}Attention
!, 'COMP' => qq!Complimentary
${r}Approved by
${r}Exp !. expselect("COMP"), + 'PREPAY' => qq!Prepaid card
${r}!, ); my %paybychecked = ( 'CARD' => qq!Credit card
${r}
${r}Exp !. expselect("CARD", $paydate). qq!
${r}Name on card
!, 'BILL' => qq!Billing
P.O.
${r}Exp !. expselect("BILL", $paydate). qq!
${r}Attention
!, 'COMP' => qq!Complimentary
${r}Approved by
${r}Exp !. expselect("COMP", $paydate), + 'PREPAY' => qq!Prepaid card
${r}!, ); for (@payby) { diff --git a/htdocs/docs/schema.html b/htdocs/docs/schema.html index 92965d795..3eea6f69d 100644 --- a/htdocs/docs/schema.html +++ b/htdocs/docs/schema.html @@ -154,8 +154,8 @@
  • part_referral - Referral listing
      -
    • refnum
    • - primary key -
    • referral
    • - referral +
    • refnum - primary key +
    • referral - referral
  • part_svc - Service definitions
      @@ -176,6 +176,12 @@
    • svcpart - Service definition
    • quantity - quantity of this service that this package includes
    +
  • prepay_credit +
      +
    • prepaynum - primary key +
    • identifier - text or numeric string used to receive this credit +
    • amount - amount of credit +
  • svc_acct - Accounts
    • svcnum - primary key diff --git a/htdocs/docs/signup.html b/htdocs/docs/signup.html index a00995994..c78d1362c 100644 --- a/htdocs/docs/signup.html +++ b/htdocs/docs/signup.html @@ -41,6 +41,7 @@ Optional:
    • $password
    • $email_name - first and last name
    -(an example file is included as fs_signup/ieak.template) + (an example file is included as fs_signup/ieak.template) +
  • If there are any entries in the prepay_credit table, a user can enter a string matching the identifier column to receive the credit specified in the amount column, after which that identifier is no longer valid. This can be used to implement pre-paid "calling card" type signups. diff --git a/htdocs/docs/upgrade5.html b/htdocs/docs/upgrade5.html index 82a7602a3..fc4bf2c39 100644 --- a/htdocs/docs/upgrade5.html +++ b/htdocs/docs/upgrade5.html @@ -12,6 +12,13 @@
  • Apply the following changes to your database:
     ALTER TABLE svc_acct_pop ADD loc CHAR(4);
    +CREATE TABLE prepay_credit (
    +  prepaynum int NOT NULL,
    +  identifier varchar(80) NOT NULL,
    +  amount decimal(10,2) NOT NULL,
    +  PRIMARY KEY (prepaynum),
    +  INDEX (identifier)
    +);
     
  • Copy or symlink htdocs to the new copy.
  • Remove the symlink or directory (your_site_perl_directory)/FS. -- 2.11.0