X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;ds=sidebyside;f=SL%2FPresenter%2FPart.pm;h=9533e1d6c48a669f30cd73d7aff9841b909e925f;hb=833f083eae2a4547c49f8f92a2fdca6ba4dfe5f4;hp=599d0935656ebf4f15ee69fcfdaadea2714eb57e;hpb=c312836ce432677d4f7876f1e3a2b6d99f433cd6;p=kivitendo-erp.git diff --git a/SL/Presenter/Part.pm b/SL/Presenter/Part.pm index 599d09356..9533e1d6c 100644 --- a/SL/Presenter/Part.pm +++ b/SL/Presenter/Part.pm @@ -5,19 +5,43 @@ use strict; use SL::DB::Part; use Exporter qw(import); -our @EXPORT = qw(part_picker); +our @EXPORT = qw(part_picker part); + +use Carp; + +sub part { + my ($self, $part, %params) = @_; + + $params{display} ||= 'inline'; + + croak "Unknown display type '$params{display}'" unless $params{display} =~ m/^(?:inline|table-cell)$/; + + my $text = join '', ( + $params{no_link} ? '' : '', + $self->escape($part->partnumber), + $params{no_link} ? '' : '', + ); + return $self->escaped_text($text); +} sub part_picker { my ($self, $name, $value, %params) = @_; - $value = SL::DB::Manager::Part->find_by(id => $value) if !ref $value; + $value = SL::DB::Manager::Part->find_by(id => $value) if $value && !ref $value; my $id = delete($params{id}) || $self->name_to_id($name); + my $fat_set_item = delete $params{fat_set_item}; + + my @classes = $params{class} ? ($params{class}) : (); + push @classes, 'part_autocomplete'; + push @classes, 'partpicker_fat_set_item' if $fat_set_item; my $ret = - $self->input_tag($name, (ref $value && $value->can('id') ? $value->id : ''), class => 'part_autocomplete', type => 'hidden', id => $id) . + $self->input_tag($name, (ref $value && $value->can('id') ? $value->id : ''), class => "@classes", type => 'hidden', id => $id) . join('', map { $params{$_} ? $self->input_tag("", delete $params{$_}, id => "${id}_${_}", type => 'hidden') : '' } qw(column type unit convertible_unit)) . $self->input_tag("", (ref $value && $value->can('description')) ? $value->description : '', id => "${id}_name", %params); + $::request->presenter->need_reinit_widgets($id); + $self->html_tag('span', $ret, class => 'part_picker'); } @@ -29,11 +53,15 @@ __END__ =head1 NAME -SL::Presenter::Part - Part lelated presenter stuff +SL::Presenter::Part - Part related presenter stuff =head1 SYNOPSIS -see L + # Create an html link for editing/opening a part/service/assembly + my $object = my $object = SL::DB::Manager::Part->get_first; + my $html = SL::Presenter->get->part($object, display => 'inline'); + +see also L =head1 DESCRIPTION @@ -41,8 +69,29 @@ see L =head1 FUNCTIONS +=over 2 + +=item C + +Returns a rendered version (actually an instance of +L) of the part object C<$object> + +C<%params> can include: + =over 4 +=item * display + +Either C (the default) or C. At the moment both +representations are identical and produce the part's name linked +to the corresponding 'edit' action. + +=back + +=back + +=over 2 + =item C All-in-one picker widget for parts. The name will be both id and name @@ -55,11 +104,6 @@ C. C<$value> can be a parts id or a C instance. -All-in-one picker widget for parts. The name will be both id and name of the -resulting hidden C input field. An additional dummy input will be generated -which is used to find parts. For a detailed description of it's behaviour, see -section L. - If C<%params> contains C only parts of this type will be used for autocompletion. You may comma separate multiple types as in C. @@ -160,13 +204,7 @@ A clickable icon (popup trigger) attached to the dummy input, which triggers the =head1 BUGS -=over 4 - -=item * - -Popup triggers are not displayed with css menu, because the spritemap is not loaded. - -=back +None atm :) =head1 AUTHOR