diff options
author | Christopher Burger <burgerc@freeside.biz> | 2019-02-19 14:42:25 -0500 |
---|---|---|
committer | Christopher Burger <burgerc@freeside.biz> | 2019-02-22 16:04:04 -0500 |
commit | 167a699ce4eaa68a56cd8d38a79696840ef46679 (patch) | |
tree | 31a16e45cdb2fe9a9a8dc4b6faed4c41b8402cd1 /FS | |
parent | 3e97c5dddd83bd5268c6f54a59d96421b3ca8fbe (diff) |
RT# 82092 - custom fields now save and fixed so name label is displayed insted of actual field name
Diffstat (limited to 'FS')
-rw-r--r-- | FS/FS/Record.pm | 37 | ||||
-rw-r--r-- | FS/FS/part_svc.pm | 5 | ||||
-rwxr-xr-x | FS/FS/part_virtual_field.pm | 14 |
3 files changed, 49 insertions, 7 deletions
diff --git a/FS/FS/Record.pm b/FS/FS/Record.pm index dfe6f18..31cc8a0 100644 --- a/FS/FS/Record.pm +++ b/FS/FS/Record.pm @@ -5,7 +5,7 @@ use strict; use charnames ':full'; use vars qw( $AUTOLOAD %virtual_fields_cache %fk_method_cache $fk_table_cache - $money_char $lat_lower $lon_upper + %virtual_fields_hash_cache $money_char $lat_lower $lon_upper $use_placeholders ); use Carp qw(carp cluck croak confess); @@ -1810,6 +1810,41 @@ sub virtual_fields { } +=item virtual_fields_hash [ TABLE ] + +Returns a list of virtual field records as a hash defined for the table. This should not +be exported, and should only be called as an instance or class method. + +=cut + +sub virtual_fields_hash { + my $self = shift; + my $table; + $table = $self->table or confess "virtual_fields called on non-table"; + + confess "Unknown table $table" unless dbdef->table($table); + + return () unless dbdef->table('part_virtual_field'); + + unless ( $virtual_fields_hash_cache{$table} ) { + $virtual_fields_hash_cache{$table} = []; + my $concat = [ "'cf_'", "name" ]; + my $select = concat_sql($concat).' as name, label, length'; + my @vfields = qsearch({ + select => $select, + table => 'part_virtual_field', + hashref => { 'dbtable' => $table, }, + }); + + foreach (@vfields) { + push @{ $virtual_fields_hash_cache{$table} }, $_->{Hash}; + } + } + + @{$virtual_fields_hash_cache{$table}}; + +} + =item process_batch_import JOB OPTIONS_HASHREF PARAMS Processes a batch import as a queued JSRPC job diff --git a/FS/FS/part_svc.pm b/FS/FS/part_svc.pm index 49854f7..a565ee4 100644 --- a/FS/FS/part_svc.pm +++ b/FS/FS/part_svc.pm @@ -707,6 +707,11 @@ sub _svc_defs { warn "skipping disabled service FS::$mod" if $DEBUG; next; } + + foreach ("FS::$mod"->virtual_fields_hash) { + $info->{'fields'}->{$_->{'name'}} = $_->{'label'}; + } + $info{$mod} = $info; # all svc_* modules are required to have h_svc_* modules for invoice diff --git a/FS/FS/part_virtual_field.pm b/FS/FS/part_virtual_field.pm index 0011ec6..63712b7 100755 --- a/FS/FS/part_virtual_field.pm +++ b/FS/FS/part_virtual_field.pm @@ -59,6 +59,7 @@ Create a new record. To add the record to the database, see "insert". sub table { 'part_virtual_field'; } sub virtual_fields { () } +sub virtual_fields_hash { () } =item widget UI_TYPE MODE [ VALUE ] @@ -81,19 +82,20 @@ VALUE (optional) is the current value of the field. sub widget { my $self = shift; - my ($ui_type, $mode, $value) = @_; + my ($ui_type, $mode, $value, $header_col_type) = @_; + $header_col_type = 'TD' unless $header_col_type; my $text; my $label = $self->label || $self->name; if ($ui_type eq 'HTML') { if ($mode eq 'view') { - $text = q!<TR><TD ALIGN="right">! . $label . - q!</TD><TD BGCOLOR="#ffffff">! . $value . + $text = q!<TR><!.$header_col_type.q! ALIGN="right">! . $label . + q!</!.$header_col_type.q!><TD BGCOLOR="#ffffff">! . $value . q!</TD></TR>! . "\n"; } elsif ($mode eq 'edit') { - $text = q!<TR><TD ALIGN="right">! . $label . - q!</TD><TD>!; - $text .= q!<INPUT NAME="! . $self->name . + $text = q!<TR><!.$header_col_type.q! ALIGN="right">! . $label . + q!</!.$header_col_type.q!><TD>!; + $text .= q!<INPUT TYPE=text NAME="! . $self->name . q!" VALUE="! . escapeHTML($value) . q!"!; if ($self->length) { $text .= q! SIZE="! . $self->length . q!"!; |