add pkg_svc.primary_svc flag to enable an explicit first package flag
[freeside.git] / httemplate / edit / process / part_pkg.cgi
index cd799b5..7eada7b 100755 (executable)
@@ -1,51 +1,39 @@
 <%
-#<!-- $Id: part_pkg.cgi,v 1.4 2001-10-20 12:18:00 ivan Exp $ -->
 
-use strict;
-use vars qw( $cgi $pkgpart $old $new $part_svc $error $dbh );
-use CGI;
-use CGI::Carp qw(fatalsToBrowser);
-use FS::UID qw(cgisuidsetup);
-use FS::CGI qw(popurl);
-use FS::Record qw(qsearch qsearchs fields);
-use FS::part_pkg;
-use FS::pkg_svc;
-use FS::cust_pkg;
+my $dbh = dbh;
 
-$cgi = new CGI;
-$dbh = &cgisuidsetup($cgi);
+my $pkgpart = $cgi->param('pkgpart');
 
-$pkgpart = $cgi->param('pkgpart');
-
-$old = qsearchs('part_pkg',{'pkgpart'=>$pkgpart}) if $pkgpart;
+my $old = qsearchs('part_pkg',{'pkgpart'=>$pkgpart}) if $pkgpart;
 
 #fixup plandata
 my $plandata = $cgi->param('plandata');
 my @plandata = split(',', $plandata);
 $cgi->param('plandata', 
-  join('', map { "$_=". $cgi->param($_). "\n" } @plandata )
+  join('', map { "$_=". join(', ', $cgi->param($_)). "\n" } @plandata )
 );
 
-$cgi->param('setuptax','') unless defined $cgi->param('setuptax');
-$cgi->param('recurtax','') unless defined $cgi->param('recurtax');
+foreach (qw( setuptax recurtax disabled )) {
+  $cgi->param($_, '') unless defined $cgi->param($_);
+}
 
-$new = new FS::part_pkg ( {
+my $new = new FS::part_pkg ( {
   map {
     $_, scalar($cgi->param($_));
   } fields('part_pkg')
 } );
 
-warn "setuptax: ". $new->setuptax;
-warn "recurtax: ". $new->recurtax;
+#warn "setuptax: ". $new->setuptax;
+#warn "recurtax: ". $new->recurtax;
 
 #most of the stuff below should move to part_pkg.pm
 
-foreach $part_svc ( qsearch('part_svc', {} ) ) {
+foreach my $part_svc ( qsearch('part_svc', {} ) ) {
   my $quantity = $cgi->param('pkg_svc'. $part_svc->svcpart) || 0;
   unless ( $quantity =~ /^(\d+)$/ ) {
     $cgi->param('error', "Illegal quantity" );
     print $cgi->redirect(popurl(2). "part_pkg.cgi?". $cgi->query_string );
-    exit;
+    myexit();
   }
 }
 
@@ -58,6 +46,7 @@ local $SIG{PIPE} = 'IGNORE';
 
 local $FS::UID::AutoCommit = 0;
 
+my $error;
 if ( $pkgpart ) {
   $error = $new->replace($old);
 } else {
@@ -68,21 +57,29 @@ if ( $error ) {
   $dbh->rollback;
   $cgi->param('error', $error );
   print $cgi->redirect(popurl(2). "part_pkg.cgi?". $cgi->query_string );
-  exit;
+  myexit();
 }
 
-foreach $part_svc (qsearch('part_svc',{})) {
+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);