X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=httemplate%2Fedit%2Fpart_svc.cgi;h=4bd083798b27e2c664f73e29383f34665930b31d;hp=4b8a2408037488038c1fdb5672d214c0ff4cff72;hb=8d7cd4b2bd99cc1a711d81b55a1652d31eda4df5;hpb=0930d22ffc440f80c1b222b2e750cadbabd9e8f6 diff --git a/httemplate/edit/part_svc.cgi b/httemplate/edit/part_svc.cgi index 4b8a24080..4bd083798 100755 --- a/httemplate/edit/part_svc.cgi +++ b/httemplate/edit/part_svc.cgi @@ -1,47 +1,59 @@ -<% include('/elements/header.html', "$action Service Definition", +<& /elements/header.html, "$action Service Definition", menubar('View all service definitions' => "${p}browse/part_svc.cgi"), #" onLoad=\"visualize()\"" - ) -%> +&> + +<& /elements/init_overlib.html &> + +
- Service Part #<% $part_svc->svcpart ? $part_svc->svcpart : "(NEW)" %> -

-Service
-Disable new orders {disabled} eq 'Y' ? ' CHECKED' : '' %>>
+Service Part #<% $part_svc->svcpart ? $part_svc->svcpart : "(NEW)" %> + + + + + + +<& /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' : '' %>> 
+ +
-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. -

-% #YUCK. false laziness w/part_svc.pm. go away virtual fields, please % my %vfields; -% foreach my $svcdb ( FS::part_svc->svc_tables() ) { -% eval "use FS::$svcdb;"; -% 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); -% $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 @@ -64,13 +76,15 @@ that field. % 'condition' => % sub { !ref($_[0]) || $_[0]->{disable_select} }, % }, -%# need to template-ize httemplate/edit/svc_* first -%# 'M' => { 'desc' => 'Manual selection from inventory', -%# 'condition' => $inv_sub, -%# }, +% 'M' => { 'desc' => 'Manual selection from inventory', +% 'condition' => $inv_sub, +% }, % 'A' => { 'desc' => 'Automatically fill in from inventory', % 'condition' => $inv_sub, % }, +% 'H' => { 'desc' => 'Select from hardware class', +% 'condition' => sub { $_[0]->{type} ne 'select-hardware' }, +% }, % 'X' => { 'desc' => 'Excluded', % 'condition' => % sub { ! $vfields{$_[1]}->{$_[2]} }, @@ -82,6 +96,18 @@ that field. % ? ( $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' => 763, +% #'height' => 400, +% ); +% } +% % tie my %svcdb, 'Tie::IxHash', map { $_=>$_ } grep dbdef->table($_), @dbs; % my $widget = new HTML::Widgets::SelectLayers( % #'selected_layer' => $p_svcdb, @@ -90,21 +116,27 @@ that field. % 'form_name' => 'dummy', % #'form_action' => 'process/part_svc.cgi', % 'form_action' => 'part_svc.cgi', #self -% 'form_text' => [ qw( svc svcpart ) ], -% 'form_checkbox' => [ 'disabled' ], +% 'form_elements' => [qw( svc svcpart classnum selfservice_access +% disabled preserve +% )], +% 'html_between' => $help, % 'layer_callback' => sub { % my $layer = shift; % % my $html = qq!!; % +% #$html .= $svcdb_info; +% % my $columns = 3; % my $count = 0; +% my $communigate = 0; % my @part_export = % map { qsearch( 'part_export', {exporttype => $_ } ) } % keys %{FS::part_export::export_info($layer)}; -% $html .= '

'. table(). +% $html .= '

'. include('/elements/table.html') . % "Exports"; % foreach my $part_export ( @part_export ) { +% $communigate++ if $part_export->exporttype =~ /^communigate/; % $html .= ' $part_export->exportnum, % svcpart => $clone || $part_svc->svcpart }); -% $html .= '>'. $part_export->exportnum. ': '. $part_export->exporttype. -% ' to '. $part_export->machine. ''; +% $html .= '>'.$part_export->exportnum. ': '; +% $html .= $part_export->exportname . '
' +% if ( $part_export->exportname ); +% $html .= $part_export->exporttype. ' to '. $part_export->machine; +% $html .= '
' if ( $part_export->exportname ); +% $html .= ''; % $count++; % $html .= '' unless $count % $columns; % } -% $html .= '

'; +% $html .= '

'. $mod_info; % % $html .= include('/elements/table-grid.html', 'cellpadding' => 4 ). % ''. % 'Field'. +% 'Label'. % 'Modifier'. % ''; % @@ -130,22 +167,36 @@ that field. % my $bgcolor; % % #yucky kludge -% my @fields = defined( dbdef->table($layer) ) -% ? grep { $_ ne 'svcnum' } fields($layer) -% : (); -% push @fields, 'usergroup' if $layer eq 'svc_acct'; #kludge +% my @fields = (); +% if ( defined( dbdef->table($layer) ) ) { +% @fields = grep { +% $_ ne 'svcnum' +% && ( $communigate || !$communigate_fields{$layer}->{$_} ) +% && ( !FS::part_svc->svc_table_fields($layer) +% ->{$_}->{disable_part_svc_column} +% || $part_svc->part_svc_column($_)->columnflag +% ) +% } fields($layer); +% } +% push @fields, 'usergroup' +% if $layer eq 'svc_acct' +% or ( $layer eq 'svc_broadband' and +% $conf->exists('svc_broadband-radius') ); # double kludge +% # (but we do want to check the config, right?) % $part_svc->svcpart($clone) if $clone; #haha, undone below % % % foreach my $field (@fields) { % -% #my $def = $defs{$layer}{$field}; +% #a few lines of false laziness w/browse/part_svc.cgi % my $def = FS::part_svc->svc_table_fields($layer)->{$field}; -% my $label = $def->{'def_label'} || $def->{'label'}; +% my $def_info = $def->{'def_info'}; % my $formatter = $def->{'format'} || sub { shift }; +% % my $part_svc_column = $part_svc->part_svc_column($field); +% my $label = $part_svc_column->columnlabel || $def->{'label'}; % my $value = &$formatter($part_svc_column->columnvalue); -% my $flag = $part_svc_column->columnflag; +% my $flag = $part_svc_column->columnflag; % % if ( $bgcolor eq $bgcolor1 ) { % $bgcolor = $bgcolor2; @@ -153,9 +204,12 @@ that field. % $bgcolor = $bgcolor1; % } % -% $html .= qq!!. -% ( $label || $field ). +% $html .= qq!!. +% ( $def->{'label'} || $field ). % ""; +% +% $html .= qq!'; +% % $flag = '' if $def->{type} eq 'disabled'; % % $html .= qq!!; @@ -171,6 +225,9 @@ that field. % % foreach my $f ( keys %flag ) { % +% # need to template-ize more httemplate/edit/svc_* first +% next if $f eq 'M' and $layer !~ /^svc_(broadband|external|phone|dish)$/; +% % #here is where the SUB from above is called, to skip some choices % next if $flag{$f}->{condition} % && &{ $flag{$f}->{condition} }( $def, $layer, $field ); @@ -208,7 +265,8 @@ that field. % " what.form.${layer}__${field}_classnum.style.backgroundColor = '#ffffff';". % " what.form.${layer}__${field}_classnum.style.display = 'none';". % " }". -% ' } else if ( f == "M" || f == "A" ) { //enable, inventory', +% ' } else if ( f == "M" || f == "A" || f == "H" ) { '. +% '//enable, inventory', % " what.form.${layer}__${field}.disabled = false;". % " what.form.${layer}__${field}.style.backgroundColor = '#ffffff';". % " what.form.${layer}__${field}.style.display = 'none';". @@ -228,10 +286,10 @@ that field. % % my $disabled = $flag ? '' % : 'DISABLED STYLE="background-color: #dddddd"'; +% my $nodisplay = ' STYLE="display:none"'; % % if ( !$def->{type} || $def->{type} eq 'text' ) { % -% my $nodisplay = ' STYLE="display:none"'; % my $is_inv = ( $flag =~ /^[MA]$/ ); % % $html .= @@ -242,6 +300,7 @@ that field. % % $html .= include('/elements/select-table.html', % 'element_name' => "${layer}__${field}_classnum", +% 'id' => "${layer}__${field}_classnum", % 'element_etc' => ( $is_inv % ? $disabled % : $nodisplay @@ -252,6 +311,14 @@ that field. % 'empty_label' => 'Select inventory class', % ); % +% } elsif ( $def->{type} eq 'checkbox' ) { +% +% $html .= include('/elements/checkbox.html', +% 'field' => $layer.'__'.$field, +% 'curr_value' => $value, +% 'value' => 'Y', +% ); +% % } elsif ( $def->{type} eq 'select' ) { % % $html .= qq!'; % -% } elsif ( $def->{type} eq 'radius_usergroup_selector' ) { +% } elsif ( $def->{type} eq 'textarea' ) { % -% #XXX disable the RADIUS usergroup selector? ugh it sure does need -% #an overhaul, people have dum group problems because of it +% $html .= +% qq!'; +% +% } elsif ( $def->{type} =~ /select-(.*?).html/ ) { +% +% $html .= include("/elements/".$def->{type}, +% 'curr_value' => $value, +% 'element_name' => "${layer}__${field}", +% 'element_etc' => $disabled, +% 'multiple' => ($def->{multiple} || +% $flag eq 'S'), +% # allow the table def to force 'multiple' +% ); % -% $html .= FS::svc_acct::radius_usergroup_selector( -% [ split(',', $value) ], "${layer}__${field}" ); +% } elsif ( $def->{type} eq 'communigate_pro-accessmodes' ) { +% +% $html .= include('/elements/communigate_pro-accessmodes.html', +% 'element_name_prefix' => "${layer}__${field}_", +% 'curr_value' => $value, +% #doesn't work#'element_etc' => $disabled, +% ); +% +% } elsif ( $def->{type} eq 'select-hardware' ) { +% +% $html .= qq!!; +% $html .= include('/elements/select-hardware_class.html', +% 'curr_value' => $value, +% 'element_name' => "${layer}__${field}_classnum", +% 'id' => "${layer}__${field}_classnum", +% 'element_etc' => $flag ne 'H' && $nodisplay, +% 'empty_label' => 'Select hardware class', +% ); % % } elsif ( $def->{type} eq 'disabled' ) { % @@ -289,11 +395,20 @@ that field. % % } else { % -% $html .= 'unknown type'. $def->{type}; +% $html .= 'unknown type '. $def->{type}; % % } % % $html .= "\n"; + +% $def_info = "($def_info)" if $def_info; +% $html .= +% qq!!. +% qq! !. +% qq! $def_info!. +% qq! !. +% qq!\n!; % % } #foreach my $field (@fields) { % @@ -302,7 +417,10 @@ that field. % % $html .= include('/elements/progress-init.html', % $layer, #form name -% [ qw(svc svcpart disabled exportnum), @fields ], +% [ qw(svc svcpart classnum selfservice_access +% disabled preserve +% exportnum), +% @fields ], % 'process/part_svc.cgi', % $p.'browse/part_svc.cgi', % $layer, @@ -319,9 +437,8 @@ that field. % % }, % ); -% -% +
Table <% $widget->html %> <% include('/elements/footer.html') %> @@ -331,6 +448,7 @@ Table <% $widget->html %> 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 @@ -352,7 +470,27 @@ my $action = $part_svc->svcpart ? 'Edit' : 'Add'; my $hashref = $part_svc->hashref; # my $p_svcdb = $part_svc->svcdb || 'svc_acct'; +my %communigate_fields = ( + 'svc_acct' => { map { $_=>1 } + qw( file_quota file_maxnum file_maxsize + password_selfchange password_recover + ), + grep /^cgp_/, fields('svc_acct') + }, + 'svc_domain' => { map { $_=>1 } + qw( max_accounts trailer parent_svcnum ), + grep /^(cgp|acct_def)_/, fields('svc_domain') + }, + #'svc_forward' => { map { $_=>1 } qw( ) }, + #'svc_mailinglist' => { map { $_=>1 } qw( ) }, + #'svc_cert' => { map { $_=>1 } qw( ) }, +); +my $mod_info = ' +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. +';