From: ivan Date: Sat, 31 Jan 2004 06:33:40 +0000 (+0000) Subject: add pkg_svc.primary_svc flag to enable an explicit first package flag X-Git-Tag: NET_WHOIS_RAW_0_31~157 X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=commitdiff_plain;h=c7e637f35948396ca2bf760160f2a1a3081e0484 add pkg_svc.primary_svc flag to enable an explicit first package flag --- diff --git a/FS/FS/part_pkg.pm b/FS/FS/part_pkg.pm index 695d48ceb..dcce66b38 100644 --- a/FS/FS/part_pkg.pm +++ b/FS/FS/part_pkg.pm @@ -2,7 +2,7 @@ package FS::part_pkg; use strict; use vars qw( @ISA ); -use FS::Record qw( qsearch dbh ); +use FS::Record qw( qsearch dbh dbdef ); use FS::pkg_svc; use FS::agent_type; use FS::type_pkgs; @@ -267,20 +267,24 @@ sub pkg_svc { =item svcpart [ SVCDB ] -Returns the svcpart of a single service definition (see L) +Returns the svcpart of the primary service definition (see L) associated with this billing item definition (see L). Returns -false if there not exactly one service definition with quantity 1, or if -SVCDB is specified and does not match the svcdb of the service definition, +false if there not a primary service definition or exactly one service +definition with quantity 1, or if SVCDB is specified and does not match the +svcdb of the service definition, =cut sub svcpart { my $self = shift; my $svcdb = scalar(@_) ? shift : ''; - my @pkg_svc = grep { - $_->quantity == 1 - && ( $svcdb eq $_->part_svc->svcdb || !$svcdb ) - } $self->pkg_svc; + my @svcdb_pkg_svc = + grep { ( $svcdb eq $_->part_svc->svcdb || !$svcdb ) } $self->pkg_svc; + my @pkg_svc = (); + @pkg_svc = grep { $_->primary_svc =~ /^Y/i } @svcdb_pkg_svc + if dbdef->table('pkg_svc')->column('primary_svc'); + @pkg_svc = grep {$_->quantity == 1 } @svcdb_pkg_svc + unless @pkg_svc; return '' if scalar(@pkg_svc) != 1; $pkg_svc[0]->svcpart; } diff --git a/FS/FS/pkg_svc.pm b/FS/FS/pkg_svc.pm index 2ac1a558c..ea52176cb 100644 --- a/FS/FS/pkg_svc.pm +++ b/FS/FS/pkg_svc.pm @@ -46,6 +46,8 @@ FS::Record. The following fields are currently supported: =item quantity - Quantity of this service definition that this billing item definition includes +=item primary_svc - primary flag, empty or 'Y' + =back =head1 METHODS @@ -108,6 +110,11 @@ sub check { return "Unknown pkgpart!" unless $self->part_pkg; return "Unknown svcpart!" unless $self->part_svc; + if ( $self->dbdef_table->column('primary_svc') ) { + $error = $self->ut_enum('primary_svc', [ '', 'Y' ] ); + return $error if $error; + } + $self->SUPER::check; } @@ -135,10 +142,6 @@ sub part_svc { =back -=head1 VERSION - -$Id: pkg_svc.pm,v 1.4 2003-08-05 00:20:45 khoff Exp $ - =head1 BUGS =head1 SEE ALSO diff --git a/FS/bin/freeside-setup b/FS/bin/freeside-setup index b7a414ae2..72780e363 100755 --- a/FS/bin/freeside-setup +++ b/FS/bin/freeside-setup @@ -708,6 +708,7 @@ sub tables_hash_hack { 'pkgpart', 'int', '', '', 'svcpart', 'int', '', '', 'quantity', 'int', '', '', + 'primary_svc','char', 'NULL', 1, ], 'primary_key' => '', 'unique' => [ ['pkgpart', 'svcpart'] ], diff --git a/htetc/global.asa b/htetc/global.asa index f550560ee..e05701d56 100644 --- a/htetc/global.asa +++ b/htetc/global.asa @@ -15,7 +15,7 @@ use IO::Handle; use IO::File; use String::Approx qw(amatch); use Chart::LinesPoints; -use HTML::Widgets::SelectLayers 0.02; +use HTML::Widgets::SelectLayers 0.03; use FS::UID qw(cgisuidsetup dbh getotaker datasrc driver_name); use FS::Record qw(qsearch qsearchs fields dbdef); use FS::Conf; diff --git a/htetc/handler.pl b/htetc/handler.pl index c5f685f85..584d930b1 100644 --- a/htetc/handler.pl +++ b/htetc/handler.pl @@ -73,7 +73,7 @@ sub handler use IO::File; use String::Approx qw(amatch); use Chart::LinesPoints; - use HTML::Widgets::SelectLayers 0.02; + use HTML::Widgets::SelectLayers 0.03; use FS::UID qw(cgisuidsetup dbh getotaker datasrc driver_name); use FS::Record qw(qsearch qsearchs fields dbdef); use FS::Conf; diff --git a/httemplate/browse/part_pkg.cgi b/httemplate/browse/part_pkg.cgi index efaa59e00..180f18263 100755 --- a/httemplate/browse/part_pkg.cgi +++ b/httemplate/browse/part_pkg.cgi @@ -78,8 +78,10 @@ print <Data Service Quan. - END +print 'Primary' + if dbdef->table('pkg_svc')->column('primary_svc'); +print ''; foreach my $part_pkg ( sort $sortby @part_pkg ) { my($hashref)=$part_pkg->hashref; @@ -143,7 +145,13 @@ END my($part_svc) = qsearchs('part_svc',{'svcpart'=> $svcpart }); print $n,qq!!, $part_svc->getfield('svc'),"", - $pkg_svc->getfield('quantity'),"\n"; + $pkg_svc->getfield('quantity'),""; + if ( dbdef->table('pkg_svc')->column('primary_svc') ) { + print ''; + print 'PRIMARY' if $pkg_svc->primary_svc =~ /^Y/i; + print ''; + } + print "\n"; $n=""; } diff --git a/httemplate/docs/schema.html b/httemplate/docs/schema.html index 06be8960d..40b211cf9 100644 --- a/httemplate/docs/schema.html +++ b/httemplate/docs/schema.html @@ -283,6 +283,7 @@
  • pkgpart - Package definition
  • svcpart - Service definition
  • quantity - quantity of this service that this package includes +
  • primary_svc - blank or Y: primary service
  • export_svc
      diff --git a/httemplate/docs/upgrade-1.4.2.html b/httemplate/docs/upgrade-1.4.2.html index 022916768..ea6ebe92b 100644 --- a/httemplate/docs/upgrade-1.4.2.html +++ b/httemplate/docs/upgrade-1.4.2.html @@ -8,6 +8,7 @@
    • Back up your data and current Freeside installation.
    • Install Locale::SubCountry
    • Install IPC::ShareLite +
    • Install HTML::Widgets::SelectLayers 0.03.
    • CGI.pm minimum version 2.47 is required. You will probably need to install a current CGI.pm from CPAN if you are using Perl 5.005 or earlier.
    • Run make aspdocs or make masondocs.
    • Copy aspdocs/ or masondocs/ to your web server's document space. diff --git a/httemplate/docs/upgrade10.html b/httemplate/docs/upgrade10.html index 9dc4f3dfa..e98407351 100644 --- a/httemplate/docs/upgrade10.html +++ b/httemplate/docs/upgrade10.html @@ -154,6 +154,8 @@ ALTER TABLE h_cust_main ADD paycvv varchar(4) NULL; ALTER TABLE part_referral ADD disabled char(1) NULL; ALTER TABLE h_part_referral ADD disabled char(1) NULL; CREATE INDEX part_referral1 ON part_referral ( disabled ); +ALTER TABLE pkg_svc ADD primary_svc char(1) NULL; +ALTER TABLE h_pkg_svc ADD primary_svc char(1) NULL; dump database, edit: - cust_main: increase otaker from 8 to 32 diff --git a/httemplate/edit/part_pkg.cgi b/httemplate/edit/part_pkg.cgi index f2f99b757..8416b3546 100755 --- a/httemplate/edit/part_pkg.cgi +++ b/httemplate/edit/part_pkg.cgi @@ -152,9 +152,11 @@ print ' CHECKED' if $hashref->{disabled} eq "Y"; print '>'; print ''; -my $thead = "\n\n". ntable('#cccccc', 2). <Quan.Service -END +my $thead = "\n\n". ntable('#cccccc', 2). + 'Quan.'; +$thead .= 'Primary' + if dbdef->table('pkg_svc')->column('primary_svc'); +$thead .= 'Service'; #unless ( $cgi->param('clone') ) { #dunno why... @@ -176,9 +178,10 @@ foreach my $part_svc ( @part_svc ) { 'pkgpart' => $pkgpart, 'svcpart' => $svcpart, } ) || new FS::pkg_svc ( { - 'pkgpart' => $pkgpart, - 'svcpart' => $svcpart, - 'quantity' => 0, + 'pkgpart' => $pkgpart, + 'svcpart' => $svcpart, + 'quantity' => 0, + 'primary_svc' => '', }); #? #next unless $pkg_svc; @@ -190,7 +193,13 @@ foreach my $part_svc ( @part_svc ) { print ''; # if $count == 0 ; print qq!quantity || 0, - qq!">!; + if ( dbdef->table('pkg_svc')->column('primary_svc') ) { + print qq!primary_svc =~ /^Y/i; + print '>'; + } + print qq!!, $part_svc->getfield('svc'), ""; # print "$thead" if ++$count == int(scalar(@part_svc) / 2); $count+=1; @@ -518,6 +527,10 @@ if ( $conf->exists('enable_taxclasses') ) { push @fixups, 'taxclass'; #hidden } +my @form_radio = (); +if ( dbdef->table('pkg_svc')->column('primary_svc') ) { + push @form_radio, 'pkg_svc_primary'; +} my $widget = new HTML::Widgets::SelectLayers( 'selected_layer' => $part_pkg->plan, @@ -526,7 +539,8 @@ my $widget = new HTML::Widgets::SelectLayers( 'form_action' => 'process/part_pkg.cgi', 'form_text' => [ qw(pkg comment freq clone pkgnum pkgpart), @fixups ], 'form_checkbox' => [ qw(setuptax recurtax disabled) ], - 'form_select' => [ @form_select ], + 'form_radio' => \@form_radio, + 'form_select' => \@form_select, 'fixup_callback' => sub { #my $ = @_; my $html = ''; diff --git a/httemplate/edit/process/part_pkg.cgi b/httemplate/edit/process/part_pkg.cgi index d489426f9..7eada7bc8 100755 --- a/httemplate/edit/process/part_pkg.cgi +++ b/httemplate/edit/process/part_pkg.cgi @@ -62,16 +62,24 @@ if ( $error ) { foreach my $part_svc (qsearch('part_svc',{})) { my $quantity = $cgi->param('pkg_svc'. $part_svc->svcpart) || 0; + my $primary_svc = + $cgi->param('pkg_svc_primary') == $part_svc->svcpart ? 'Y' : ''; my $old_pkg_svc = qsearchs('pkg_svc', { 'pkgpart' => $pkgpart, 'svcpart' => $part_svc->svcpart, } ); my $old_quantity = $old_pkg_svc ? $old_pkg_svc->quantity : 0; - next unless $old_quantity != $quantity; #!here + my $old_primary_svc = + ( $old_pkg_svc && $old_pkg_svc->dbdef_table->column('primary_svc') ) + ? $old_pkg_svc->primary_svc + : ''; + next unless $old_quantity != $quantity || $old_primary_svc ne $primary_svc; + my $new_pkg_svc = new FS::pkg_svc( { - 'pkgpart' => $pkgpart, - 'svcpart' => $part_svc->svcpart, - 'quantity' => $quantity, + 'pkgpart' => $pkgpart, + 'svcpart' => $part_svc->svcpart, + 'quantity' => $quantity, + 'primary_svc' => $primary_svc, } ); if ( $old_pkg_svc ) { my $myerror = $new_pkg_svc->replace($old_pkg_svc);