[freeside-commits] freeside/FS/FS Conf.pm, 1.233, 1.234 Conf_compat17.pm, 1.6, 1.7 cust_main.pm, 1.348, 1.349

Jeff Finucane,420,, jeff at wavetail.420.am
Tue Jun 24 09:39:58 PDT 2008


Update of /home/cvs/cvsroot/freeside/FS/FS
In directory wavetail.420.am:/tmp/cvs-serv2916/FS/FS

Modified Files:
	Conf.pm Conf_compat17.pm cust_main.pm 
Log Message:
postal invoice fees

Index: Conf_compat17.pm
===================================================================
RCS file: /home/cvs/cvsroot/freeside/FS/FS/Conf_compat17.pm,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -d -r1.6 -r1.7
--- Conf_compat17.pm	4 Jun 2008 17:59:42 -0000	1.6
+++ Conf_compat17.pm	24 Jun 2008 16:39:55 -0000	1.7
@@ -1954,6 +1954,25 @@
   },
 
   {
+    'key'         => 'postal_invoice-fee_pkgpart',
+    'section'     => 'billing',
+    'description' => 'This allows selection of a package to insert on invoices for customers with postal invoices selected.',
+    'type'        => 'select-sub',
+    'options_sub' => sub { require FS::Record;
+                           require FS::part_pkg;
+                          map { $_->pkgpart => $_->pkg }
+                               FS::Record::qsearch('part_pkg', { disabled=>'' } );
+                        },
+    'option_sub'  => sub { require FS::Record;
+                           require FS::part_pkg;
+                          my $part_pkg = FS::Record::qsearchs(
+                            'part_pkg', { 'pkgpart'=>shift }
+                          );
+                           $part_pkg ? $part_pkg->pkg : '';
+                        },
+  },
+
+  {
     'key'         => 'batch-enable',
     'section'     => 'billing',
     'description' => 'Enable credit card and/or ACH batching - leave disabled for real-time installations.',

Index: Conf.pm
===================================================================
RCS file: /home/cvs/cvsroot/freeside/FS/FS/Conf.pm,v
retrieving revision 1.233
retrieving revision 1.234
diff -u -d -r1.233 -r1.234
--- Conf.pm	16 Jun 2008 06:53:43 -0000	1.233
+++ Conf.pm	24 Jun 2008 16:39:55 -0000	1.234
@@ -1882,6 +1882,25 @@
   },
 
   {
+    'key'         => 'postal_invoice-fee_pkgpart',
+    'section'     => 'billing',
+    'description' => 'This allows selection of a package to insert on invoices for customers with postal invoices selected.',
+    'type'        => 'select-sub',
+    'options_sub' => sub { require FS::Record;
+                           require FS::part_pkg;
+			   map { $_->pkgpart => $_->pkg }
+                               FS::Record::qsearch('part_pkg', { disabled=>'' } );
+			 },
+    'option_sub'  => sub { require FS::Record;
+                           require FS::part_pkg;
+			   my $part_pkg = FS::Record::qsearchs(
+			     'part_pkg', { 'pkgpart'=>shift }
+			   );
+                           $part_pkg ? $part_pkg->pkg : '';
+			 },
+  },
+
+  {
     'key'         => 'batch-enable',
     'section'     => 'billing',
     'description' => 'Enable credit card and/or ACH batching - leave disabled for real-time installations.',

Index: cust_main.pm
===================================================================
RCS file: /home/cvs/cvsroot/freeside/FS/FS/cust_main.pm,v
retrieving revision 1.348
retrieving revision 1.349
diff -u -d -r1.348 -r1.349
--- cust_main.pm	18 Jun 2008 05:22:52 -0000	1.348
+++ cust_main.pm	24 Jun 2008 16:39:56 -0000	1.349
@@ -2068,15 +2068,14 @@
   # & generate invoice database.
   ###
 
-  my( $total_setup, $total_recur ) = ( 0, 0 );
+  my( $total_setup, $total_recur, $postal_charge ) = ( 0, 0, 0 );
   my %tax;
   my %taxlisthash;
   my %taxname;
   my @precommit_hooks = ();
 
-  foreach my $cust_pkg (
-    qsearch('cust_pkg', { 'custnum' => $self->custnum } )
-  ) {
+  my @cust_pkgs = qsearch('cust_pkg', { 'custnum' => $self->custnum } );
+  foreach my $cust_pkg (@cust_pkgs) {
 
     #NO!! next if $cust_pkg->cancel;  
     next if $cust_pkg->getfield('cancel');  
@@ -2242,6 +2241,17 @@
   
         if ( $setup != 0 || $recur != 0 ) {
   
+          unless ($postal_charge) {
+            $postal_charge = 1;  # try only once
+            my $postal_pkg = $self->charge_postal_fee();
+            if ( $postal_pkg && !ref( $postal_pkg ) ) {
+              $dbh->rollback if $oldAutoCommit;
+              return "can't charge postal invoice fee for customer ".
+                $self->custnum. ": $postal_pkg";
+            }
+            push @cust_pkgs, $postal_pkg if $postal_pkg;
+          }
+
           warn "    charges (setup=$setup, recur=$recur); adding line items\n"
             if $DEBUG > 1;
           my $cust_bill_pkg = new FS::cust_bill_pkg {
@@ -4764,6 +4774,33 @@
 
 }
 
+#=item charge_postal_fee
+#
+#Applies a one time charge this customer.  If there is an error,
+#returns the error, returns the cust_pkg charge object or false
+#if there was no charge.
+#
+#=cut
+#
+# This should be a customer event.  For that to work requires that bill
+# also be a customer event.
+
+sub charge_postal_fee {
+  my $self = shift;
+
+  my $pkgpart = $conf->config('postal_invoice-fee_pkgpart');
+  return '' unless ($pkgpart && grep { $_ eq 'POST' } $self->invoicing_list);
+
+  my $cust_pkg = new FS::cust_pkg ( {
+    'custnum'  => $self->custnum,
+    'pkgpart'  => $pkgpart,
+    'quantity' => 1,
+  } );
+
+  my $error = $cust_pkg->insert;
+  $error ? $error : $cust_pkg;
+}
+
 =item cust_bill
 
 Returns all the invoices (see L<FS::cust_bill>) for this customer.



More information about the freeside-commits mailing list