summaryrefslogtreecommitdiff
path: root/FS
diff options
context:
space:
mode:
authorivan <ivan>2001-10-15 10:42:29 +0000
committerivan <ivan>2001-10-15 10:42:29 +0000
commita6d3e4dc73803cffad96fd4b6270b2fb5f4b0568 (patch)
treeade2d125ae65a21bf314d6cad84ee2cd4d767218 /FS
parent87b5424ee8f16f824865cd7dbf1efde8da3bd429 (diff)
price plans web gui 1st pass, oh my
Diffstat (limited to 'FS')
-rw-r--r--FS/FS/cust_main.pm73
-rw-r--r--FS/FS/part_pkg.pm12
2 files changed, 64 insertions, 21 deletions
diff --git a/FS/FS/cust_main.pm b/FS/FS/cust_main.pm
index d5beca92a..f99a15e69 100644
--- a/FS/FS/cust_main.pm
+++ b/FS/FS/cust_main.pm
@@ -216,10 +216,9 @@ otherwise returns false.
CUST_PKG_HASHREF: If you pass a Tie::RefHash data structure to the insert
method containing FS::cust_pkg and FS::svc_I<tablename> objects, all records
-are inserted atomicly, or the transaction is rolled back (this requries a
-transactional database). Passing an empty hash reference is equivalent to
-not supplying this parameter. There should be a better explanation of this,
-but until then, here's an example:
+are inserted atomicly, or the transaction is rolled back. Passing an empty
+hash reference is equivalent to not supplying this parameter. There should be
+a better explanation of this, but until then, here's an example:
use Tie::RefHash;
tie %hash, 'Tie::RefHash'; #this part is important
@@ -233,7 +232,7 @@ INVOICING_LIST_ARYREF: If you pass an arrarref to the insert method, it will
be set as the invoicing list (see L<"invoicing_list">). Errors return as
expected and rollback the entire transaction; it is not necessary to call
check_invoicing_list first. The invoicing_list is set after the records in the
-CUST_PKG_HASHREF above are inserted, so it is now possible set set an
+CUST_PKG_HASHREF above are inserted, so it is now possible to set an
invoicing_list destination to the newly-created svc_acct. Here's an example:
$cust_main->insert( {}, [ $email, 'POST' ] );
@@ -1216,9 +1215,9 @@ sub collect {
}
my @invoicing_list = grep { $_ ne 'POST' } $self->invoicing_list;
- if ( $conf->exists('emailinvoiceonly') ) {
- @invoicing_list = $self->default_invoicing_list
- unless @invoicing_list;
+ if ( $conf->exists('emailinvoiceauto')
+ || ( $conf->exists('emailinvoiceonly') && ! @invoicing_list ) ) {
+ push @invoicing_list, $self->default_invoicing_list;
}
my $email = $invoicing_list[0];
@@ -1467,7 +1466,7 @@ sub apply_payments {
}
- # return 0;
+ return $self->total_unapplied_payments;
}
=item total_credited
@@ -1559,15 +1558,17 @@ sub invoicing_list {
} else {
@cust_main_invoice = ();
}
+ my %seen = map { $_->address => 1 } @cust_main_invoice;
foreach my $address ( @{$arrayref} ) {
- unless ( grep { $address eq $_->address } @cust_main_invoice ) {
- my $cust_main_invoice = new FS::cust_main_invoice ( {
- 'custnum' => $self->custnum,
- 'dest' => $address,
- } );
- my $error = $cust_main_invoice->insert;
- warn $error if $error;
- }
+ #unless ( grep { $address eq $_->address } @cust_main_invoice ) {
+ next if exists $seen{$address} && $seen{$address};
+ $seen{$address} = 1;
+ my $cust_main_invoice = new FS::cust_main_invoice ( {
+ 'custnum' => $self->custnum,
+ 'dest' => $address,
+ } );
+ my $error = $cust_main_invoice->insert;
+ warn $error if $error;
}
}
if ( $self->custnum ) {
@@ -1603,6 +1604,8 @@ sub check_invoicing_list {
=item default_invoicing_list
+Returns the email addresses of any
+
=cut
sub default_invoicing_list {
@@ -1647,6 +1650,40 @@ sub referral_cust_main {
@cust_main;
}
+=item referral_cust_pkg [ DEPTH ]
+
+Like referral_cust_main, except returns a flat list of all unsuspended packages
+for each customer. The number of items in this list may be useful for
+comission calculations (perhaps after a grep).
+
+=cut
+
+sub referral_cust_pkg {
+ my $self = shift;
+ my $depth = @_ ? shift : 1;
+
+ map { $_->unsuspended_pkgs }
+ grep { $_->unsuspended_pkgs }
+ $self->referral_cust_main($depth);
+}
+
+=item credit AMOUNT, REASON
+
+Applies a credit to this customer. If there is an error, returns the error,
+otherwise returns false.
+
+=cut
+
+sub credit {
+ my( $self, $amount, $reason ) = @_;
+ my $cust_credit = new FS::cust_credit {
+ 'custnum' => $self->custnum,
+ 'amount' => $amount,
+ 'reason' => $reason,
+ };
+ $cust_credit->insert;
+}
+
=back
=head1 SUBROUTINES
@@ -1788,7 +1825,7 @@ sub append_fuzzyfiles {
=head1 VERSION
-$Id: cust_main.pm,v 1.39 2001-10-09 23:10:16 ivan Exp $
+$Id: cust_main.pm,v 1.40 2001-10-15 10:42:28 ivan Exp $
=head1 BUGS
diff --git a/FS/FS/part_pkg.pm b/FS/FS/part_pkg.pm
index d262a04e0..d84b9c5b7 100644
--- a/FS/FS/part_pkg.pm
+++ b/FS/FS/part_pkg.pm
@@ -46,11 +46,15 @@ inherits from FS::Record. The following fields are currently supported:
=item comment - Text name of this billing item definition (non-customer-viewable)
-=item setup - Setup fee
+=item setup - Setup fee expression
=item freq - Frequency of recurring fee
-=item recur - Recurring fee
+=item recur - Recurring fee expression
+
+=item plan - Price plan
+
+=item plandata - Price plan data
=back
@@ -128,6 +132,8 @@ sub check {
|| $self->ut_anything('setup')
|| $self->ut_number('freq')
|| $self->ut_anything('recur')
+ || $self->ut_alphan('plan')
+ || $self->ut_anything('plandata')
;
}
@@ -166,7 +172,7 @@ sub svcpart {
=head1 VERSION
-$Id: part_pkg.pm,v 1.2 1999-08-20 08:27:06 ivan Exp $
+$Id: part_pkg.pm,v 1.3 2001-10-15 10:42:28 ivan Exp $
=head1 BUGS