X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;ds=sidebyside;f=httemplate%2Fedit%2Fpart_svc.cgi;h=79703435cb6ab613019ee228294436ea0fbd74dd;hb=f920fdb29a19105c9102d29e532f8cbb40dd1171;hp=595d7b87acfe9ac4fb4b49819d5667fb14ef81bc;hpb=c8cccb4a92adceb943c635fe62dad0d034462ce0;p=freeside.git diff --git a/httemplate/edit/part_svc.cgi b/httemplate/edit/part_svc.cgi index 595d7b87a..79703435c 100755 --- a/httemplate/edit/part_svc.cgi +++ b/httemplate/edit/part_svc.cgi @@ -1,34 +1,7 @@ -% -%my $part_svc; -%my $clone = ''; -%if ( $cgi->param('clone') && $cgi->param('clone') =~ /^(\d+)$/ ) {#clone -% #$cgi->param('clone') =~ /^(\d+)$/ or die "malformed query: $query"; -% $part_svc = qsearchs('part_svc', { 'svcpart'=>$1 } ) -% or die "unknown svcpart: $1"; -% $clone = $part_svc->svcpart; -% $part_svc->svcpart(''); -%} elsif ( $cgi->keywords ) { #edit -% my($query) = $cgi->keywords; -% $query =~ /^(\d+)$/ or die "malformed query: $query"; -% $part_svc=qsearchs('part_svc', { 'svcpart'=>$1 } ) -% or die "unknown svcpart: $1"; -%} else { #adding -% $part_svc = new FS::part_svc {}; -%} -% -%my $action = $part_svc->svcpart ? 'Edit' : 'Add'; -%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" - ), - ) +<% include('/elements/header.html', "$action Service Definition", + menubar('View all service definitions' => "${p}browse/part_svc.cgi"), + #" onLoad=\"visualize()\"" + ) %>
@@ -55,150 +28,41 @@ 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.

-% -% -%#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_phone' => { -% 'countrycode' => { desc => 'Country code', -% type => 'text', -% disable_inventory => 1, -% }, -% 'phonenum' => 'Phone number', -% 'pin' => { desc => 'Personal Identification Number', -% type => 'text', -% disable_inventory => 1, -% }, -% }, -% -% 'svc_external' => { -% #'id' => '', -% #'title' => '', -% }, -% -%); -% -% 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 + +% #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 % # params: ( $def, $layer, $field ) (see SUB below) % my $inv_sub = sub { -% ref($_[0]) && ( $_[0]->{disable_inventory} -% || $_[0]->{'type'} ne 'text' ) -% }; +% $_[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} }, +% sub { $_[0]->{disable_default} }, % }, % 'F' => { 'desc' => 'Fixed (unchangeable)', % 'condition' => -% sub { ref($_[0]) && $_[0]->{disable_fixed} }, +% sub { $_[0]->{disable_fixed} }, +% }, +% 'S' => { 'desc' => 'Selectable Choice', +% 'condition' => +% sub { !ref($_[0]) || $_[0]->{disable_select} }, % }, %# need to template-ize httemplate/edit/svc_* first %# 'M' => { 'desc' => 'Manual selection from inventory', @@ -216,7 +80,7 @@ that field. % % my @dbs = $hashref->{svcdb} % ? ( $hashref->{svcdb} ) -% : qw( svc_acct svc_domain svc_forward svc_www svc_broadband svc_phone svc_external ); +% : FS::part_svc->svc_tables(); % % tie my %svcdb, 'Tie::IxHash', map { $_=>$_ } grep dbdef->table($_), @dbs; % my $widget = new HTML::Widgets::SelectLayers( @@ -258,6 +122,7 @@ that field. % $html .= include('/elements/table-grid.html', 'cellpadding' => 4 ). % ''. % 'Field'. +% 'Label'. % 'Modifier'. % ''; % @@ -267,7 +132,14 @@ that field. % % #yucky kludge % my @fields = defined( dbdef->table($layer) ) -% ? grep { $_ ne 'svcnum' } fields($layer) +% ? grep { +% $_ ne 'svcnum' && +% ( !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'; #kludge % $part_svc->svcpart($clone) if $clone; #haha, undone below @@ -275,11 +147,15 @@ that field. % % foreach my $field (@fields) { % +% #a few lines of false laziness w/browse/part_svc.cgi +% my $def = FS::part_svc->svc_table_fields($layer)->{$field}; +% my $def_info = $def->{'def_info'}; +% my $formatter = $def->{'format'} || sub { shift }; +% % 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; +% my $label = $part_svc_column->columnlabel || $def->{'label'}; +% my $value = &$formatter($part_svc_column->columnvalue); +% my $flag = $part_svc_column->columnflag; % % if ( $bgcolor eq $bgcolor1 ) { % $bgcolor = $bgcolor2; @@ -287,15 +163,17 @@ that field. % $bgcolor = $bgcolor1; % } % -% $html .= qq!!. -% $field; -% $html .= "- $desc" if $desc; -% $html .= ""; -% $flag = '' if ref($def) && $def->{type} eq 'disabled'; +% $html .= qq!!. +% ( $def->{'label'} || $field ). +% ""; +% +% $html .= qq!'; +% +% $flag = '' if $def->{type} eq 'disabled'; % % $html .= qq!!; % -% if ( ref($def) && $def->{type} eq 'disabled' ) { +% if ( $def->{type} eq 'disabled' ) { % % $html .= 'No default'; % @@ -329,9 +207,14 @@ that field. % " what.form.${layer}__${field}_classnum.disabled = true;". % " what.form.${layer}__${field}_classnum.style.backgroundColor = '#dddddd';". % " }". -% ' } else if ( f == "D" || f == "F" ) { //enable, text box', +% ' } else if ( f == "D" || f == "F" || f =="S" ) { //enable, text box', % " what.form.${layer}__${field}.disabled = false;". % " what.form.${layer}__${field}.style.backgroundColor = '#ffffff';". +% " if ( f == 'S' || '${field}' == 'usergroup' ) {". # kludge +% " what.form.${layer}__${field}.multiple = true;". +% " } else {". +% " what.form.${layer}__${field}.multiple = false;". +% " }". % " what.form.${layer}__${field}.style.display = '';". % " if ( what.form.${layer}__${field}_classnum ) {". % " what.form.${layer}__${field}_classnum.disabled = false;". @@ -359,7 +242,7 @@ that field. % my $disabled = $flag ? '' % : 'DISABLED STYLE="background-color: #dddddd"'; % -% if ( ! ref($def) || $def->{type} eq 'text' ) { +% if ( !$def->{type} || $def->{type} eq 'text' ) { % % my $nodisplay = ' STYLE="display:none"'; % my $is_inv = ( $flag =~ /^[MA]$/ ); @@ -384,20 +267,23 @@ that field. % % } elsif ( $def->{type} eq 'select' ) { % -% $html .= qq!{select_table} ) { % foreach my $record ( qsearch( $def->{select_table}, {} ) ) { % my $rvalue = $record->getfield($def->{select_key}); +% my $select_label = $def->{select_label}; % $html .= qq!'; +% (grep(/^$rvalue$/, split(',',$value)) ? ' SELECTED>' : '>' ). +% $record->$select_label(). ''; % } #next $record % } else { # select_list % foreach my $item ( @{$def->{select_list}} ) { % $html .= qq!'; +% (grep(/^$item$/, split(',',$value)) ? ' SELECTED>' : '>' ). +% $item. ''; % } #next $item % } #endif % $html .= ''; @@ -422,6 +308,15 @@ that field. % } % % $html .= "\n"; + +% $def_info = "($def_info)" if $def_info; +% $html .= +% qq!!. +% qq! !. +% qq! $def_info!. +% qq! !. +% qq!\n!; % % } #foreach my $field (@fields) { % @@ -451,6 +346,38 @@ that field. % Table <% $widget->html %> - - + +<% include('/elements/footer.html') %> + +<%init> + +die "access denied" + unless $FS::CurrentUser::CurrentUser->access_right('Configuration'); + +my $part_svc; +my $clone = ''; +if ( $cgi->param('clone') && $cgi->param('clone') =~ /^(\d+)$/ ) {#clone + #$cgi->param('clone') =~ /^(\d+)$/ or die "malformed query: $query"; + $part_svc = qsearchs('part_svc', { 'svcpart'=>$1 } ) + or die "unknown svcpart: $1"; + $clone = $part_svc->svcpart; + $part_svc->svcpart(''); +} elsif ( $cgi->keywords ) { #edit + my($query) = $cgi->keywords; + $query =~ /^(\d+)$/ or die "malformed query: $query"; + $part_svc=qsearchs('part_svc', { 'svcpart'=>$1 } ) + or die "unknown svcpart: $1"; +} else { #adding + $part_svc = new FS::part_svc {}; +} + +my $action = $part_svc->svcpart ? 'Edit' : 'Add'; +my $hashref = $part_svc->hashref; +# my $p_svcdb = $part_svc->svcdb || 'svc_acct'; + + + + + +