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 =
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');
}
=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 E<lt>s.schoeling@linet-services.deE<gt>