X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=httemplate%2Fedit%2Fpart_svc.cgi;h=b80118f898fe7cc2c051169e77667fffd295287d;hp=0298a5461d7ca90b2530b2e5c2a4fa521987e06b;hb=aad287228dfbe5ef01be73ebaaa9a06dfbe11226;hpb=947c955be56140c4a10b16345c1b15c44b02070a diff --git a/httemplate/edit/part_svc.cgi b/httemplate/edit/part_svc.cgi index 0298a5461..b80118f89 100755 --- a/httemplate/edit/part_svc.cgi +++ b/httemplate/edit/part_svc.cgi @@ -1,4 +1,226 @@ -<% +<& /elements/header.html, "$action Service Definition" &> +<& /elements/menubar.html, + 'View all service definitions' => "${p}browse/part_svc.cgi" + #" onLoad=\"visualize()\"" +&> + +<& /elements/init_overlib.html &> + +

+ + + + +
+ +Service Part #<% $part_svc->svcpart ? $part_svc->svcpart : "(NEW)" %> + +<& /elements/tr-input-locale-text.html, + 'object' => $part_svc, + 'cgi' => $cgi, + 'field' => 'svc', + 'label' => 'Service', + 'curr_value' => $hashref->{svc}, +&> +%# +%# +%# +%# + +<& /elements/tr-select-part_svc_class.html, curr_value=>$hashref->{classnum} &> + + + + + + + + + + + + + + +
Service
Self-service access + + +
Disable new orders + {disabled} eq 'Y' ? ' CHECKED' : '' %>>
Preserve this service on package cancellation + {'preserve'} eq 'Y' ? ' CHECKED' : '' %>> 
+ + + +
+ +Table <% $widget->html %> + +<& /elements/footer.html &> + +<%init> + +die "access denied" + unless $FS::CurrentUser::CurrentUser->access_right('Configuration'); + +my $conf = FS::Conf->new; my $part_svc; my $clone = ''; if ( $cgi->param('clone') && $cgi->param('clone') =~ /^(\d+)$/ ) {#clone @@ -21,414 +243,43 @@ my $hashref = $part_svc->hashref; # my $p_svcdb = $part_svc->svcdb || 'svc_acct'; - #" onLoad=\"visualize()\"" -%> -<%= include("/elements/header.html","$action Service Definition", - menubar( 'Main Menu' => $p, - 'View all service definitions' => "${p}browse/part_svc.cgi" - ), - ) -%> - - - - Service Part #<%= $part_svc->svcpart ? $part_svc->svcpart : "(NEW)" %> -

-Service
-Disable new orders {disabled} eq 'Y' ? ' CHECKED' : '' %>>
- -
-Service definitions are the templates for items you offer to your customers. - -For the selected table, you can give fields default or fixed (unchangable) -values, or select an inventory class to manually or automatically fill in -that field. -

- -<% +my @dbs = $hashref->{svcdb} + ? ( $hashref->{svcdb} ) + : FS::part_svc->svc_tables(); + +my $help = ''; +unless ( $hashref->{svcpart} ) { + $help = ' '. + include('/elements/popup_link.html', + 'action' => $p.'docs/part_svc-table.html', + 'label' => 'help', + 'actionlabel' => 'Service table help', + 'width' => 960, + 'height' => 400, + ); +} -#these might belong somewhere else for other user interfaces -#pry need to eventually create stuff that's shared amount UIs -my $conf = new FS::Conf; -my %defs = ( - 'svc_acct' => { - 'dir' => 'Home directory', - 'uid' => 'UID (set to fixed and blank for no UIDs)', - 'slipip' => 'IP address', -# 'popnum' => qq!POP number!, - 'popnum' => { - desc => 'Access number', - type => 'select', - select_table => 'svc_acct_pop', - select_key => 'popnum', - select_label => 'city', - }, - 'username' => { - desc => 'Username', - type => 'text', - disable_default => 1, - disable_fixed => 1, - }, - 'quota' => { - desc => '', - type => 'text', - disable_inventory => 1, - }, - '_password' => 'Password', - 'gid' => 'GID (when blank, defaults to UID)', - 'shell' => { - #desc =>'Shell (all service definitions should have a default or fixed shell that is present in the shells configuration file, set to blank for no shell tracking)', - desc =>'Shell ( set to blank for no shell tracking)', - type =>'select', - select_list => [ $conf->config('shells') ], - disable_inventory => 1, - }, - 'finger' => 'Real name (GECOS)', - 'domsvc' => { - desc =>'svcnum from svc_domain', - type =>'select', - select_table => 'svc_domain', - select_key => 'svcnum', - select_label => 'domain', - disable_inventory => 1, - }, - 'usergroup' => { - desc =>'RADIUS groups', - type =>'radius_usergroup_selector', - disable_inventory => 1, - }, - 'seconds' => { desc => '', - type => 'text', - disable_inventory => 1, - }, - }, - 'svc_domain' => { - 'domain' => 'Domain', - }, - 'svc_forward' => { - 'srcsvc' => 'service from which mail is to be forwarded', - 'dstsvc' => 'service to which mail is to be forwarded', - 'dst' => 'someone@another.domain.com to use when dstsvc is 0', - }, -# 'svc_charge' => { -# 'amount' => 'amount', -# }, -# 'svc_wo' => { -# 'worker' => 'Worker', -# '_date' => 'Date', -# }, - 'svc_www' => { - #'recnum' => '', - #'usersvc' => '', - }, - 'svc_broadband' => { - 'speed_down' => 'Maximum download speed for this service in Kbps. 0 denotes unlimited.', - 'speed_up' => 'Maximum upload speed for this service in Kbps. 0 denotes unlimited.', - 'ip_addr' => 'IP address. Leave blank for automatic assignment.', - 'blocknum' => 'Address block.', - }, - 'svc_external' => { - #'id' => '', - #'title' => '', - }, +tie my %svcdb, 'Tie::IxHash', map { $_=>$_ } grep dbdef->table($_), @dbs; +my $widget = new HTML::Widgets::SelectLayers( + #'selected_layer' => $p_svcdb, + 'selected_layer' => $hashref->{svcdb} || 'svc_acct', + 'options' => \%svcdb, + 'form_name' => 'SvcEditMain', + #'form_action' => 'process/part_svc.cgi', + 'form_action' => 'part_svc.cgi', #self +# 'form_elements' => [qw( svc svcpart classnum selfservice_access +# disabled preserve +# )], + 'html_between' => $help, + 'layer_callback' => sub { + include('elements/part_svc_column.html', + shift, + 'part_svc' => $part_svc, + 'clone' => $clone + ) + } ); + - my %vfields; - foreach my $svcdb (grep dbdef->table($_), keys %defs ) { - my $self = "FS::$svcdb"->new; - $vfields{$svcdb} = {}; - foreach my $field ($self->virtual_fields) { # svc_Common::virtual_fields with a null svcpart returns all of them - my $pvf = $self->pvf($field); - my @list = $pvf->list; - if (scalar @list) { - $defs{$svcdb}->{$field} = { desc => $pvf->label, - type => 'select', - select_list => \@list }; - } else { - $defs{$svcdb}->{$field} = $pvf->label; - } #endif - $vfields{$svcdb}->{$field} = $pvf; - warn "\$vfields{$svcdb}->{$field} = $pvf"; - } #next $field - } #next $svcdb - - #code duplication w/ edit/part_svc.cgi, should move this hash to part_svc.pm - # and generalize the subs - # condition sub is tested to see whether to disable display of this choice - # params: ( $def, $layer, $field ) (see SUB below) - my $inv_sub = sub { - ref($_[0]) && ( $_[0]->{disable_inventory} - || $_[0]->{'type'} ne 'text' ) - }; - tie my %flag, 'Tie::IxHash', - '' => { 'desc' => 'No default', }, - 'D' => { 'desc' => 'Default', - 'condition' => - sub { ref($_[0]) && $_[0]->{disable_default} }, - }, - 'F' => { 'desc' => 'Fixed (unchangeable)', - 'condition' => - sub { ref($_[0]) && $_[0]->{disable_fixed} }, - }, -# need to template-ize httemplate/edit/svc_* first -# 'M' => { 'desc' => 'Manual selection from inventory', -# 'condition' => $inv_sub, -# }, - 'A' => { 'desc' => 'Automatically fill in from inventory', - 'condition' => $inv_sub, - }, - 'X' => { 'desc' => 'Excluded', - 'condition' => - sub { ! $vfields{$_[1]}->{$_[2]} }, - - }, - ; - - my @dbs = $hashref->{svcdb} - ? ( $hashref->{svcdb} ) - : qw( svc_acct svc_domain svc_forward svc_www svc_broadband svc_external ); - - tie my %svcdb, 'Tie::IxHash', map { $_=>$_ } grep dbdef->table($_), @dbs; - my $widget = new HTML::Widgets::SelectLayers( - #'selected_layer' => $p_svcdb, - 'selected_layer' => $hashref->{svcdb} || 'svc_acct', - 'options' => \%svcdb, - 'form_name' => 'dummy', - #'form_action' => 'process/part_svc.cgi', - 'form_action' => 'part_svc.cgi', #self - 'form_text' => [ qw( svc svcpart ) ], - 'form_checkbox' => [ 'disabled' ], - 'layer_callback' => sub { - my $layer = shift; - - my $html = qq!!; - - my $columns = 3; - my $count = 0; - my @part_export = - map { qsearch( 'part_export', {exporttype => $_ } ) } - keys %{FS::part_export::export_info($layer)}; - $html .= '

'. table(). - "Exports"; - foreach my $part_export ( @part_export ) { - $html .= 'svcpart ) #null svcpart search causing error - && qsearchs( 'export_svc', { - exportnum => $part_export->exportnum, - svcpart => $clone || $part_svc->svcpart }); - $html .= '>'. $part_export->exportnum. ': '. $part_export->exporttype. - ' to '. $part_export->machine. ''; - $count++; - $html .= '' unless $count % $columns; - } - $html .= '

'; - - $html .= include('/elements/table-grid.html', 'cellpadding' => 4 ). - ''. - 'Field'. - 'Modifier'. - ''; - - my $bgcolor1 = '#eeeeee'; - my $bgcolor2 = '#ffffff'; - my $bgcolor; - - #yucky kludge - my @fields = defined( dbdef->table($layer) ) - ? grep { $_ ne 'svcnum' } fields($layer) - : (); - push @fields, 'usergroup' if $layer eq 'svc_acct'; #kludge - $part_svc->svcpart($clone) if $clone; #haha, undone below - - - foreach my $field (@fields) { - - my $part_svc_column = $part_svc->part_svc_column($field); - my $value = $part_svc_column->columnvalue; - my $flag = $part_svc_column->columnflag; - my $def = $defs{$layer}{$field}; - my $desc = ref($def) ? $def->{desc} : $def; - - if ( $bgcolor eq $bgcolor1 ) { - $bgcolor = $bgcolor2; - } else { - $bgcolor = $bgcolor1; - } - - $html .= qq!!. - $field; - $html .= "- $desc" if $desc; - $html .= ""; - $flag = '' if ref($def) && $def->{type} eq 'disabled'; - - $html .= qq!!; - - if ( ref($def) && $def->{type} eq 'disabled' ) { - - $html .= 'No default'; - - } else { - - $html .= qq!'; - - $html .= join("\n", - '', - ); - - } - - $html .= qq!!; - - my $disabled = $flag ? '' - : 'DISABLED STYLE="background-color: #dddddd"'; - - if ( ! ref($def) || $def->{type} eq 'text' ) { - - my $nodisplay = ' STYLE="display:none"'; - my $is_inv = ( $flag =~ /^[MA]$/ ); - - $html .= - qq!'; - - $html .= include('/elements/select-table.html', - 'element_name' => "${layer}__${field}_classnum", - 'element_etc' => ( $is_inv - ? $disabled - : $nodisplay - ), - 'table' => 'inventory_class', - 'name_col' => 'classname', - 'value' => $value, - 'empty_label' => 'Select inventory class', - ); - - } elsif ( $def->{type} eq 'select' ) { - - $html .= qq!'; - - } elsif ( $def->{type} eq 'radius_usergroup_selector' ) { - - #XXX disable the RADIUS usergroup selector? ugh it sure does need - #an overhaul, people have dum group problems because of it - - $html .= FS::svc_acct::radius_usergroup_selector( - [ split(',', $value) ], "${layer}__${field}" ); - - } elsif ( $def->{type} eq 'disabled' ) { - - $html .= - qq!!; - - } else { - - $html .= 'unknown type'. $def->{type}; - - } - - $html .= "\n"; - - } #foreach my $field (@fields) { - - $part_svc->svcpart('') if $clone; #undone - $html .= ""; - - $html .= include('/elements/progress-init.html', - $layer, #form name - [ qw(svc svcpart disabled exportnum), @fields ], - 'process/part_svc.cgi', - $p.'browse/part_svc.cgi', - $layer, - ); - $html .= '
'; - - #$html .= '
'; - - $html; - - }, - ); -%> -Table <%= $widget->html %> - -