diff options
author | Mark Wells <mark@freeside.biz> | 2014-11-27 15:21:29 -0800 |
---|---|---|
committer | Mark Wells <mark@freeside.biz> | 2014-11-27 15:21:29 -0800 |
commit | 1af8ff7f48f7259fc99f090c301c84b9680fdb4d (patch) | |
tree | e21d72df5e6dd2eddebc8debc3b954bf2e0830e8 /httemplate/view | |
parent | 0f0bc1ef7aafc6b3869c0f71ee2528c1c9897ce6 (diff) |
svc_circuit, #23879, #25933, #30830
Diffstat (limited to 'httemplate/view')
-rw-r--r-- | httemplate/view/elements/svc_Common.html | 163 | ||||
-rw-r--r-- | httemplate/view/svc_circuit.html | 80 | ||||
-rw-r--r-- | httemplate/view/svc_phone.cgi | 7 |
3 files changed, 198 insertions, 52 deletions
diff --git a/httemplate/view/elements/svc_Common.html b/httemplate/view/elements/svc_Common.html index b12d2ddcd..6c5c90201 100644 --- a/httemplate/view/elements/svc_Common.html +++ b/httemplate/view/elements/svc_Common.html @@ -32,6 +32,15 @@ function areyousure(href) { window.location.href = href; } </SCRIPT> +<STYLE> + td.content { + background-color: #ffffff; + } + .error { + color: #ff0000; + font-weight: bold; + } +</STYLE> % if ( $custnum ) { @@ -67,61 +76,20 @@ function areyousure(href) { <% ntable("#cccccc") %><TR><TD><% ntable("#cccccc",2) %> -% my @inventory_items = $svc_x->inventory_item; % foreach my $f ( @$fields ) { -% -% my($field, $type, $value); -% if ( ref($f) ) { -% $field = $f->{'field'}; -% $type = $f->{'type'} || 'text'; -% if ( $f->{'value_callback'} ) { -% my $hack_strict_refs = \&{ $f->{'value_callback'} }; -% $value = &$hack_strict_refs($svc_x); -% } else { -% $value = encode_entities($svc_x->$field); -% } -% } else { -% $field = $f; -% $type = 'text'; -% $value = encode_entities($svc_x->$field); -% } -% -% my $columndef = $part_svc->part_svc_column($field); -% if ( $columndef->columnflag =~ /^[MA]$/ && $columndef->columnvalue =~ /,/ ) -% { -% # inventory-select field with multiple classes -% # show the class name to disambiguate -% my ($item) = grep { $_->svc_field eq $field } @inventory_items; -% my $class = qsearchs('inventory_class', { classnum => $item->classnum }); -% $value .= ' <i>('. $class->classname . ')</i>' if $class; -% } -% unless ($columndef->columnflag eq 'F' && !length($columndef->columnvalue)) { - +% my ($field, $label, $value) = &{ $format_field }($f); +% next if !$field; <TR> <TD ALIGN="right"> - <% ( $opt{labels} && exists $opt{labels}->{$field} ) - ? $opt{labels}->{$field} - : $field - %> + <% $label %> </TD> -% $value = time2str($date_format,$value) -% if $type eq 'date' && $value; -% $value = time2str("$date_format %H:%M",$value) -% if $type eq 'datetime' && $value; -% $value = $value eq 'Y' ? emt('Yes') : emt('No') -% if $type eq 'checkbox'; -% $value .= ' ('. (Net::MAC::Vendor::lookup($value))->[0]. ')' -% if $type =~ /mac_addr$/ && $value =~ /\w/i; -% #eventually more options for <SELECT>, etc. fields - - <TD BGCOLOR="#ffffff"><% $value %><TD> - + <TD CLASS="content"> + <% $value %> + </TD> </TR> -% } -% -% } +% } % foreach (sort { $a cmp $b } $svc_x->virtual_fields) { <% $svc_x->pvf($_)->widget('HTML', 'view', $svc_x->getfield($_)) %> @@ -193,7 +161,7 @@ my $svc_x = qsearchs({ my $cust_svc = $svc_x->cust_svc; my ($label, $value, $svcdb, $part_svc ); -my $labels = $opt{labels}; #not -> here +my $labels = $opt{labels} || {}; if ( $cust_svc ) { ($label, $value, $svcdb) = $cust_svc->label; @@ -227,7 +195,10 @@ if ($pkgnum) { # attached routers if ( my $router = qsearchs('router', { svcnum => $svc_x->svcnum }) ) { - push @$fields, qw(router_routername router_block); + push @$fields, + 'router_routername', + 'router_block'; + $labels->{'router_routername'} = 'Attached router'; $labels->{'router_block'} = 'Attached address block'; $svc_x->set('router_routername', $router->routername); @@ -235,10 +206,100 @@ if ( my $router = qsearchs('router', { svcnum => $svc_x->svcnum }) ) { if ( $block ) { $svc_x->set('router_block', $block->cidr); } else { - $svc_x->set('router_block', '<i>(none)</i>'); + $svc_x->set('router_block', '(none)'); } } +my @inventory_items = $svc_x->inventory_item; + +my $format_field = sub { + my $f = shift; + my($field, $type, $value); + if ( ref($f) ) { + $field = $f->{'field'}; + $type = $f->{'type'} || 'text'; + } else { + $field = $f; + $type = 'text'; + } + + my $columndef = $part_svc->part_svc_column($field); + # skip fields that are fixed and empty + if ( $columndef->columnflag eq 'F' + and length($columndef->columnvalue) == 0 ) { + return; + } + + # things that override the column value: value_callback, select + if ( ref($f) and $f->{'value_callback'} ) { + + my $hack_strict_refs = \&{ $f->{'value_callback'} }; + $value = &$hack_strict_refs($svc_x); + + } elsif ( $type eq 'select-table' ) { + # imitates the /elements/select-table interface + $value = $svc_x->$field; + + my $value_col = $f->{'value_col'} || + dbdef->table($f->{'table'})->primary_key; + my $name_col = $f->{'name_col'} or die 'name_col required'; + # we don't yet support multiple-valued fields here + my $obj = qsearchs($f->{'table'}, { $value_col => $value }); + if ( $obj ) { + $value = $obj->$name_col; # can be any method of the object + } else { + # show the raw value, but mark it as an error + $value = '<SPAN CLASS="error">' . $f->{'table'} . ' ' . + encode_entities($value) . '</SPAN>'; + } + + } else { + $value = encode_entities($svc_x->$field); + } + + # inventory-select field with multiple classes + # show the class name to disambiguate + if ( $columndef->columnflag =~ /^[MA]$/ && $columndef->columnvalue =~ /,/ ) + { + my ($item) = grep { $_->svc_field eq $field } @inventory_items; + my $class = qsearchs('inventory_class', { classnum => $item->classnum }); + $value .= ' <i>('. $class->classname . ')</i>' if $class; + } + + # formatting tweaks + if ( $type eq 'date' and $value ) { + $value = time2str($date_format,$value) + } elsif ( $type eq 'datetime' and $value ) { + $value = time2str("$date_format %H:%M",$value) + } elsif ( $type eq 'checkbox' ) { + $value = $value eq 'Y' ? emt('Yes') : emt('No'); + } elsif ( $type eq 'mac_addr' and $value =~ /\w/) { + $value .= ' ('. (Net::MAC::Vendor::lookup($value))->[0]. ')' + } + + # 'link' option + my $href; + if ( ref($f) and exists $f->{'link'} ) { + my $link = $f->{'link'}; + if ( ref($link) eq 'CODE' ) { + $link = &{$link}($svc_x); + } + if ( ref($link) eq 'ARRAY' ) { + my ($base, $method) = @$link; + $href = $base . $svc_x->$method(); + } elsif ( !ref($link) ) { + $href = $link; + } + + if ( $href ) { + $value = qq!<A HREF="$href">$value</A>!; + } + } + + my $label = $opt{labels}->{$field} || $field; + return ($field, $label, $value); +}; + &{ $opt{'svc_callback'} }( $cgi, $svc_x, $part_svc, $cust_pkg, $fields, \%opt ) if $opt{'svc_callback'}; </%init> diff --git a/httemplate/view/svc_circuit.html b/httemplate/view/svc_circuit.html new file mode 100644 index 000000000..c8d5d23ee --- /dev/null +++ b/httemplate/view/svc_circuit.html @@ -0,0 +1,80 @@ +<& elements/svc_Common.html, + 'table' => 'svc_circuit', + 'labels' => \%labels, + 'fields' => \@fields, + 'html_foot' => sub { $self->call_method('.foot', @_) }, +&> +<%method .foot> +% my $svc_circuit = shift; +% my $link = [ 'svc_phone.cgi?', 'svcnum' ]; +% if ( FS::svc_phone->count('circuit_svcnum = '.$svc_circuit->svcnum) ) { +<& /search/elements/search.html, + + 'title' => 'Provisioned phone services', + 'name_singular' => 'phone number', + 'query' => { 'table' => 'svc_phone', + 'hashref' => { 'circuit_svcnum' => $svc_circuit->svcnum }, + 'addl_from' => ' LEFT JOIN cust_svc USING (svcnum)'. + ' LEFT JOIN part_svc USING (svcpart)', + 'select' => 'svc_phone.*, part_svc.*', + }, + 'count_query' => 'SELECT COUNT(*) FROM svc_phone WHERE circuit_svcnum = '. + $svc_circuit->svcnum, + 'header' => [ '#', 'Service', 'Phone number', ], + 'fields' => [ 'svcnum', 'svc', 'phonenum' ], + 'links' => [ $link, $link, $link ], + 'align' => 'rlr', + + 'html_form' => '<SPAN CLASS="fsinnerbox-title">Phone services</SPAN>', + 'nohtmlheader' => 1, + 'disable_total' => 1, + 'disable_maxselect' => 1, + 'really_disable_download' => 1, +&> + <BR> +% } +</%method> +<%init> + +my @fields = ( + 'circuit_id', + { field => 'providernum', + type => 'select-table', + table => 'circuit_provider', + name_col => 'provider', + }, + { field => 'typenum', + type => 'select-table', + table => 'circuit_type', + name_col => 'typename', + }, + { field => 'termnum', + type => 'select-table', + table => 'circuit_termination', + name_col => 'termination', + }, + qw( vendor_qual_id vendor_order_id vendor_order_type vendor_order_status + desired_due_date due_date + endpoint_ip_addr + ), + { field => 'endpoint_mac_addr', type => 'mac_addr' }, +); + + +my %labels = ( + circuit_id => 'Circuit ID', + providernum => 'Provider', + typenum => 'Circuit type', + termnum => 'Termination', + vendor_qual_id => 'Qualification ID', + vendor_order_id => 'Order ID', + vendor_order_type => 'Order type', + vendor_order_status => 'Order status', + desired_due_date => 'Desired due date', + due_date => 'Due date', + endpoint_ip_addr => 'Endpoint IP address', + endpoint_mac_addr => 'MAC address', +); + +my $self = $m->request_comp; +</%init> diff --git a/httemplate/view/svc_phone.cgi b/httemplate/view/svc_phone.cgi index 2a2ef243b..1c0fb39c5 100644 --- a/httemplate/view/svc_phone.cgi +++ b/httemplate/view/svc_phone.cgi @@ -1,7 +1,7 @@ <& elements/svc_Common.html, 'table' => 'svc_phone', 'fields' => \@fields, - 'labels' => \%labels, + 'labels' => \%labels, 'html_foot' => $html_foot, &> <%init> @@ -53,6 +53,11 @@ if ( $conf->exists('svc_phone-lnp') ) { ; } +$labels{circuit_label} = mt('Circuit'); +push @fields, { field => 'circuit_label', + link => [ $p.'view/svc_circuit.html?', 'circuit_svcnum' ] + }; + my $html_foot = sub { my $svc_phone = shift; |