simple protection against selecting and using package add-ons that point to the same...
[freeside.git] / httemplate / edit / part_pkg.cgi
index f9818c4..883630f 100755 (executable)
@@ -47,6 +47,7 @@
                             'bill_dst_pkgpart' => 'Include line item(s) from package',
                             'svc_dst_pkgpart'  => 'Include services of package',
                             'report_option'    => 'Report classes',
+                            'fcc_ds0s'         => 'Voice-grade eqivalents',
                           },
 
               'fields' => [
                               { field=>'pay_weight',    type=>'text', size=>6 },
                               { field=>'credit_weight', type=>'text', size=>6 },
 
+                              ( $conf->exists('cust_pkg-show_fcc_voice_grade_equivalent')
+                                ? ( 
+                                    { type  => 'tablebreak-tr-title',
+                                      value => 'FCC Form 477 information',
+                                    },
+                                    { field=>'fcc_ds0s', type=>'text', size=>6 },
+                                  )
+                                 : ()
+                              ),
+
 
                             { type => 'columnend' },
 
                             },
                             { 'field'      => 'bill_dst_pkgpart',
                               'type'       => 'select-part_pkg',
+                              'extra_sql'  => sub { $pkgpart
+                                                     ? "AND pkgpart != $pkgpart"
+                                                     : ''
+                                                  },
                               'm2_label'   => 'Include line item(s) from package',
                               'm2m_method' => 'bill_part_pkg_link',
                               'm2m_dstcol' => 'dst_pkgpart',
                             { 'field'      => 'svc_dst_pkgpart',
                               'label'      => 'Also include services from package: ',
                               'type'       => 'select-part_pkg',
+                              'extra_sql'  => sub { $pkgpart
+                                                     ? "AND pkgpart != $pkgpart"
+                                                     : ''
+                                                  },
                               'm2_label'   => 'Include services of package: ',
                               'm2m_method' => 'svc_part_pkg_link',
                               'm2m_dstcol' => 'dst_pkgpart',
@@ -281,6 +300,8 @@ my @taxproductnums = ( qw( setup recur ), sort (keys %taxproductnums) );
 my %options = ();
 my $recur_disabled = 1;
 
+my $pkgpart = '';
+
 my $error_callback = sub {
   my($cgi, $object, $fields, $opt ) = @_;
 
@@ -314,6 +335,8 @@ my $error_callback = sub {
   $object->set($_ => scalar($cgi->param($_)) )
     foreach (qw( setup_fee recur_fee ));
 
+  $pkgpart = $object->pkgpart;
+
 };
 
 my $new_hashref_callback = sub { { 'plan' => 'flat' }; };
@@ -363,6 +386,8 @@ my $edit_callback = sub {
   $object->set($_ => $object->option($_))
     foreach (qw( setup_fee recur_fee ));
 
+  $pkgpart = $object->pkgpart;
+
 };
 
 my $new_callback = sub {
@@ -506,6 +531,12 @@ my $html_bottom = sub {
                    : keys %{ $href };
   
     foreach my $field ( grep $_ !~ /^(setup|recur)_fee$/, @fields ) {
+
+      if(!exists($href->{$field})) {
+        # shouldn't happen
+        warn "nonexistent part_pkg option: '$field'\n";
+        next;
+      }
   
       $html .= '<TR><TD ALIGN="right">'. $href->{$field}{'name'}. '</TD><TD>';