X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FPresenter%2FPart.pm;h=4b7b15d3d1c244ac6dcf616de550e2848901de7b;hb=ebc23a03b49e640a64d1b5b2c792c0bd01e6c93c;hp=1a33a463bb01bb4a8b8da7151ac17d8889855bfb;hpb=df33875fc30c508b60af9421d0061e66cdc0d55a;p=kivitendo-erp.git diff --git a/SL/Presenter/Part.pm b/SL/Presenter/Part.pm index 1a33a463b..4b7b15d3d 100644 --- a/SL/Presenter/Part.pm +++ b/SL/Presenter/Part.pm @@ -10,7 +10,7 @@ our @EXPORT = qw(part_picker); 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 $ret = @@ -18,6 +18,8 @@ sub part_picker { 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'); } @@ -75,16 +77,88 @@ presenter can not do this from the template. =back -=head1 BUGS +=head1 PART PICKER SPECIFICATION + +The following list of design goals were applied: =over 4 =item * -Picker icons aren't displayed with css menu, because the spritemap is not loaded. +Parts should not be perceived by the user as distinct inputs of partnumber and +description but as a single object + +=item * + +Easy to use without documentation for novice users + +=item * + +Fast to use with keyboard for experienced users + +=item * + +Possible to use without any keyboard interaction for mouse (or touchscreen) +users + +=item * + +Must not leave the current page in event of ambiguity (cf. current select_item +mechanism) + +=item * + +Should be useable with hand scanners or similar alternative keyboard devices + +=item * + +Should not require a feedback/check loop in the common case + +=item * + +Should not be constraint to exact matches + +=back + +The implementation consists of the following parts which will be referenced later: + +=over 4 + +=item 1 + +A hidden input (id input), used to hold the id of the selected part. The only +input that gets submitted + +=item 2 + +An input (dummy input) containing a description of the currently selected part, +also used by the user to search for parts + +=item 3 + +A jquery.autocomplete mechanism attached to the dummy field + +=item 4 + +A popup layer for both feedback and input of additional data in case of +ambiguity. + +=item 5 + +An internal status of the part picker, indicating wether id input and dummy +input are consistent. After leaving the dummy input the part picker must +place itself in a consistent status. + +=item 6 + +A clickable icon (popup trigger) attached to the dummy input, which triggers the popup layer. =back +=head1 BUGS + +None atm :) + =head1 AUTHOR Sven Schöling Es.schoeling@linet-services.deE