slightly better voip_cdr package edit: use radio buttons for selecting long things
[freeside.git] / httemplate / edit / part_pkg.cgi
index ab2407b..b1851a7 100755 (executable)
@@ -1,12 +1,9 @@
-<% include("/elements/header.html","$action Package Definition", menubar(
-  'Main Menu' => popurl(2),
+<% include('/elements/header.html', "$action Package Definition", menubar(
   'View all packages' => popurl(2). 'browse/part_pkg.cgi',
 )) %>
 % #), ' onLoad="visualize()"'); 
 
-% if ( $cgi->param('error') ) { 
-  <FONT SIZE="+1" COLOR="#ff0000">Error: <% $cgi->param('error') %></FONT>
-% } 
+<% include('/elements/error.html') %>
 
 <FORM NAME="dummy">
 
@@ -69,7 +66,6 @@ Tax information
     </TD>
   </TR>
 
-% my $conf = new FS::Conf; 
 % if ( $conf->exists('enable_taxclasses') ) { 
 
   <TR>
@@ -106,10 +102,14 @@ Line-item revenue recognition
 
 </TD><TD VALIGN="top">
 
-% if ( $cgi->param('clone') || $conf->exists('agent_defaultpkg') ) {
+% if ( $cgi->param('clone') ) {
 
     <INPUT TYPE="hidden" NAME="agent_type" VALUE="">
 
+% } elsif ( scalar(@all_agent_types) == 1) {
+
+    <INPUT TYPE="hidden" NAME="agent_type" VALUE="<% $all_agent_types[0] %>">
+
 % } else {
 
     Reseller information
@@ -122,8 +122,8 @@ Line-item revenue recognition
                       'table'        => 'agent_type',
                       'name_col'     => 'atype',
                       'value'        => \@agent_type,
-                      'empty_label'  => 'select agent types',
-                      'element_etc'  => 'multiple size="10"',
+                      'multiple'     =>  '1',
+                      'element_etc'  => 'size="10"',
                     )
           %>
         </TD>
@@ -177,10 +177,18 @@ Line-item revenue recognition
 %  }
 %
 %  push @fixups, "pkg_svc$svcpart";
+%
+%  my $quan = 0;
+%  if ( $cgi->param("pkg_svc$svcpart") =~ /^\s*(\d+)\s*$/ ) {
+%    $quan = $1;
+%  } elsif ( $pkg_svc->quantity ) {
+%    $quan = $pkg_svc->quantity;
+%  }
+
 
   <TR>
     <TD>
-      <INPUT TYPE="text" NAME="pkg_svc<% $svcpart %>" SIZE=4 MAXLENGTH=3 VALUE="<% $cgi->param("pkg_svc$svcpart") || $pkg_svc->quantity || 0 %>">
+      <INPUT TYPE="text" NAME="pkg_svc<% $svcpart %>" SIZE=4 MAXLENGTH=3 VALUE="<% $quan %>">
     </TD>
    
     <TD>
@@ -204,10 +212,9 @@ Line-item revenue recognition
 
 
 </TR></TABLE></TD></TR></TABLE>
-% foreach my $f ( qw( clone pkgnum ) ) { 
-
-  <INPUT TYPE="hidden" NAME="<% $f %>" VALUE="<% $cgi->param($f) %>">
-% } 
+% foreach my $f ( qw( clone pkgnum ) ) { #safe, these were untained in %init 
+    <INPUT TYPE="hidden" NAME="<% $f %>" VALUE="<% $cgi->param($f) %>">
+% }
 
 <INPUT TYPE="hidden" NAME="pkgpart" VALUE="<% $part_pkg->pkgpart %>">
 %
@@ -236,6 +243,7 @@ Line-item revenue recognition
 %  delete $freq{$_} foreach grep { ! /^\d+$/ } keys %freq;
 %}
 %
+%#this should be replaced by /elements/selectlayers.html
 %my $widget = new HTML::Widgets::SelectLayers(
 %  'selected_layer' => $part_pkg->plan,
 %  'options'        => \%options,
@@ -278,19 +286,25 @@ Line-item revenue recognition
 %
 %      my $format = sub { shift };
 %      $format = $href->{$field}{'format'} if exists($href->{$field}{'format'});
+%
 %      if ( ! exists($href->{$field}{'type'}) ) {
+%
 %        $html .= qq!<INPUT TYPE="text" NAME="$field" VALUE="!.
 %                 ( exists($plandata{$field})
 %                     ? &$format($plandata{$field})
 %                     : $href->{$field}{'default'} ).
 %                 qq!" onChange="fchanged(this)">!;
+%
 %      } elsif ( $href->{$field}{'type'} eq 'checkbox' ) {
+%
 %        $html .= qq!<INPUT TYPE="checkbox" NAME="$field" VALUE=1 !.
 %                 ( exists($plandata{$field}) && $plandata{$field}
 %                   ? ' CHECKED'
 %                   : ''
 %                 ). '>';
+%
 %      } elsif ( $href->{$field}{'type'} =~ /^select/ ) {
+%
 %        $html .= '<SELECT';
 %        $html .= ' MULTIPLE'
 %          if $href->{$field}{'type'} eq 'select_multiple';
@@ -311,13 +325,13 @@ Line-item revenue recognition
 %          }
 %        } elsif ( $href->{$field}{'select_options'} ) {
 %          foreach my $key ( keys %{ $href->{$field}{'select_options'} } ) {
-%            my $value = $href->{$field}{'select_options'}{$key};
+%            my $label = $href->{$field}{'select_options'}{$key};
 %            $html .= qq!<OPTION VALUE="$key"!.
-%                     ( $plandata{$field} =~ /(^|, *)$value *(,|$)/
+%                     ( $plandata{$field} =~ /(^|, *)$key *(,|$)/ #XXX fix
 %                         ? ' SELECTED'
 %                         : ''
 %                     ).
-%                     '>'. $value;
+%                     '>'. $label;
 %          }
 %
 %        } else {
@@ -326,6 +340,22 @@ Line-item revenue recognition
 %                   '</font>';
 %        }
 %        $html .= '</SELECT>';
+%
+%      } elsif ( $href->{$field}{'type'} eq 'radio' ) {
+%
+%        my $radio =
+%          qq!<INPUT TYPE="radio" NAME="$field" onChange="fchanged(this)"!;
+%
+%        foreach my $key ( keys %{ $href->{$field}{'options'} } ) {
+%          my $label = $href->{$field}{'options'}{$key};
+%          $html .= qq!$radio VALUE="$key"!.
+%                   ( $plandata{$field} =~ /(^|, *)$key *(,|$)/ #XXX fix
+%                       ? ' CHECKED'
+%                       : ''
+%                   ).
+%                   "> $label<BR>";
+%        }
+%
 %      }
 %
 %      $html .= '</TD></TR>';
@@ -352,8 +382,8 @@ Line-item revenue recognition
 
 
 <BR><BR>Price plan <% $widget->html %>
-  </BODY>
-</HTML>
+
+<% include('/elements/footer.html') %>
 <%init>
 
 if ( $cgi->param('clone') && $cgi->param('clone') =~ /^(\d+)$/ ) {
@@ -367,10 +397,19 @@ if ( $cgi->param('pkgnum') && $cgi->param('pkgnum') =~ /^(\d+)$/ ) {
   $cgi->param('pkgnum', '');
 }
 
+my $curuser = $FS::CurrentUser::CurrentUser;
+
+die "access denied"
+  unless $curuser->access_right('Edit package definitions')
+      || $curuser->access_right('Edit global package definitions')
+      || ( $cgi->param('pkgnum') && $curuser->access_right('Customize customer package') );
+
 my ($query) = $cgi->keywords;
 
+my $conf = new FS::Conf; 
 my $part_pkg = '';
 my @agent_type = ();
+my @all_agent_types = map {$_->typenum} qsearch('agent_type',{});
 if ( $cgi->param('error') ) {
   $part_pkg = new FS::part_pkg ( {
     map { $_, scalar($cgi->param($_)) } fields('part_pkg')
@@ -397,6 +436,8 @@ if ( $cgi->param('clone') ) {
   unless ( $part_pkg ) {
     $part_pkg = new FS::part_pkg {};
     $part_pkg->plan('flat');
+    @agent_type = @all_agent_types if $conf->exists('agent_defaultpkg');
+      
   }
 }
 unless ( $part_pkg->plan ) { #backwards-compat