summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMitch Jackson <mitch@freeside.biz>2018-03-31 18:00:40 +0000
committerMitch Jackson <mitch@freeside.biz>2018-03-31 18:00:40 +0000
commitc5460b6098a148102107360b7459b2a675b6e442 (patch)
tree4c24b1edb6af236ed24a5ce9f3ad3f6b0155fcfd
parent899b047b7546b3b6f1e8b7f94c585ce5b98c17b4 (diff)
RT# 79636 Add conf flag invoice_sections_multilocation
-rw-r--r--FS/FS/Conf.pm10
-rw-r--r--FS/FS/Template_Mixin.pm66
-rw-r--r--FS/FS/cust_bill.pm10
-rw-r--r--FS/FS/cust_bill_void.pm11
4 files changed, 72 insertions, 25 deletions
diff --git a/FS/FS/Conf.pm b/FS/FS/Conf.pm
index 470d99e..3f02055 100644
--- a/FS/FS/Conf.pm
+++ b/FS/FS/Conf.pm
@@ -1598,6 +1598,15 @@ and customer address. Include units.',
'per_agent' => 1,
},
+ {
+ 'key' => 'invoice_sections_multilocation',
+ 'section' => 'invoicing',
+ 'description' => 'Enable invoice_sections for for any bill with at least this many locations on the bill.',
+ 'type' => 'text',
+ 'per_agent' => 1,
+ 'validate' => sub { shift =~ /^\d+$/ ? undef : 'Please enter a number' },
+ },
+
{
'key' => 'invoice_include_aging',
'section' => 'invoice_balances',
@@ -6010,4 +6019,3 @@ and customer address. Include units.',
);
1;
-
diff --git a/FS/FS/Template_Mixin.pm b/FS/FS/Template_Mixin.pm
index 7086701..bf1290c 100644
--- a/FS/FS/Template_Mixin.pm
+++ b/FS/FS/Template_Mixin.pm
@@ -19,7 +19,7 @@ use HTML::Entities;
use Cwd;
use FS::UID;
use FS::Misc qw( send_email );
-use FS::Record qw( qsearch qsearchs );
+use FS::Record qw( qsearch qsearchs dbh );
use FS::Conf;
use FS::Misc qw( generate_ps generate_pdf );
use FS::pkg_category;
@@ -942,8 +942,6 @@ sub print_generic {
my $unsquelched = $params{unsquelch_cdr} || $cust_main->squelch_cdr ne 'Y';
my $multisection = $self->has_sections;
- $conf->exists($tc.'sections', $cust_main->agentnum) ||
- $conf->exists($tc.'sections_by_location', $cust_main->agentnum);
$invoice_data{'multisection'} = $multisection;
my $late_sections;
my $extra_sections = [];
@@ -3749,4 +3747,66 @@ sub _items_discounts_avail {
}
+=item has_sections AGENTNUM
+
+Return true if invoice_sections should be enabled for this bill.
+ (Inherited by both cust_bill and cust_bill_void)
+
+Determination:
+* False if not an invoice
+* True always if conf invoice_sections is enabled
+* True always if sections_by_location is enabled
+* True if conf invoice_sections_multilocation > 1,
+ and location_count >= invoice_sections_multilocation
+* Else, False
+
+=cut
+
+sub has_sections {
+ my ($self, $agentnum) = @_;
+
+ return 0 unless $self->invnum > 0;
+
+ $agentnum ||= $self->cust_main->agentnum;
+ return 1 if $self->conf->exists('invoice_sections', $agentnum);
+ return 1 if $self->conf->exists('sections_by_location', $agentnum);
+
+ my $location_min = $self->conf->config(
+ 'invoice_sections_multilocation', $agentnum,
+ );
+
+ return 1
+ if $location_min
+ && $self->location_count >= $location_min;
+
+ 0;
+}
+
+
+=item location_count
+
+Return the number of locations billed on this invoice
+
+=cut
+
+sub location_count {
+ my ($self) = @_;
+ return 0 unless $self->invnum;
+
+ # SELECT COUNT( DISTINCT cust_pkg.locationnum )
+ # FROM cust_bill_pkg
+ # LEFT JOIN cust_pkg USING (pkgnum)
+ # WHERE invnum = 278
+ # AND cust_bill_pkg.pkgnum > 0
+
+ my $result = qsearchs({
+ select => 'COUNT(DISTINCT cust_pkg.locationnum) as location_count',
+ table => 'cust_bill_pkg',
+ addl_from => 'LEFT JOIN cust_pkg USING (pkgnum)',
+ extra_sql => 'WHERE invnum = '.dbh->quote( $self->invnum )
+ . ' AND cust_bill_pkg.pkgnum > 0'
+ });
+ ref $result ? $result->location_count : 0;
+}
+
1;
diff --git a/FS/FS/cust_bill.pm b/FS/FS/cust_bill.pm
index ef7c6ff..0d0558a 100644
--- a/FS/FS/cust_bill.pm
+++ b/FS/FS/cust_bill.pm
@@ -147,15 +147,6 @@ Invoices are normally created by calling the bill method of a customer object
sub table { 'cust_bill'; }
sub template_conf { 'invoice_'; }
-sub has_sections {
- my $self = shift;
- my $agentnum = $self->cust_main->agentnum;
- my $tc = $self->template_conf;
-
- $self->conf->exists($tc.'sections', $agentnum) ||
- $self->conf->exists($tc.'sections_by_location', $agentnum);
-}
-
# should be the ONLY occurrence of "Invoice" in invoice rendering code.
# (except email_subject and invnum_date_pretty)
sub notice_name {
@@ -3195,4 +3186,3 @@ documentation.
=cut
1;
-
diff --git a/FS/FS/cust_bill_void.pm b/FS/FS/cust_bill_void.pm
index 50f69c9..3d50733 100644
--- a/FS/FS/cust_bill_void.pm
+++ b/FS/FS/cust_bill_void.pm
@@ -119,16 +119,6 @@ sub table { 'cust_bill_void'; }
sub notice_name { 'VOIDED Invoice'; }
sub template_conf { 'invoice_'; }
-sub has_sections {
- my $self = shift;
- my $agentnum = $self->cust_main->agentnum;
- my $tc = $self->template_conf;
-
- $self->conf->exists($tc.'sections', $agentnum) ||
- $self->conf->exists($tc.'sections_by_location', $agentnum);
-}
-
-
=item insert
Adds this record to the database. If there is an error, returns the error,
@@ -375,4 +365,3 @@ L<FS::Record>, schema.html from the base documentation.
=cut
1;
-