Partpicker: fat_set_item mit neuem Part-Controller gefixt
[kivitendo-erp.git] / js / kivi.Part.js
index 06f9591..de5571c 100644 (file)
@@ -274,6 +274,7 @@ namespace('kivi.Part', function(ns) {
       TAB:    9,
       LEFT:   37,
       RIGHT:  39,
+      DOWN:   40,
       PAGE_UP: 33,
       PAGE_DOWN: 34,
       SHIFT:     16,
@@ -284,11 +285,16 @@ namespace('kivi.Part', function(ns) {
       PICKED:       'partpicker-picked',
       UNDEFINED:    'partpicker-undefined',
       FAT_SET_ITEM: 'partpicker_fat_set_item',
-    }
+    };
     var o = $.extend({
       limit: 20,
       delay: 50,
       fat_set_item: $real.hasClass(CLASSES.FAT_SET_ITEM),
+      action: {
+        on_enter_match_none:  function(){},
+        on_enter_match_one:   function(){$('#update_button').click();},
+        on_enter_match_many:  function(){open_dialog();}
+      }
     }, options);
     var STATES = {
       PICKED:    CLASSES.PICKED,
@@ -300,6 +306,7 @@ namespace('kivi.Part', function(ns) {
     var $classification_id = $('#' + real_id + '_classification_id');
     var $unit              = $('#' + real_id + '_unit');
     var $convertible_unit  = $('#' + real_id + '_convertible_unit');
+    var autocomplete_open  = false;
     var state   = STATES.PICKED;
     var last_real = $real.val();
     var last_dummy = $dummy.val();
@@ -360,7 +367,7 @@ namespace('kivi.Part', function(ns) {
       if (o.fat_set_item && item.id) {
         $.ajax({
           url: 'controller.pl?action=Part/show.json',
-          data: { id: item.id },
+          data: { 'part.id': item.id },
           success: function(rsp) {
             $real.trigger('set_item:PartPicker', rsp);
           },
@@ -458,6 +465,12 @@ namespace('kivi.Part', function(ns) {
       search: function(event, ui) {
         if ((event.which == KEY.SHIFT) || (event.which == KEY.CTRL) || (event.which == KEY.ALT))
           event.preventDefault();
+      },
+      open: function() {
+        autocomplete_open = true;
+      },
+      close: function() {
+        autocomplete_open = false;
       }
     });
     /*  In case users are impatient and want to skip ahead:
@@ -487,11 +500,16 @@ namespace('kivi.Part', function(ns) {
         }
         if (event.which == KEY.ENTER) {
           handle_changed_text({
-            match_one:  function(){$('#update_button').click();},
-            match_many: function(){open_dialog();}
+            match_one:  o.action.on_enter_match_one,
+            match_many: o.action.on_enter_match_many
           });
           return false;
         }
+      } else if (event.which == KEY.DOWN && !autocomplete_open) {
+        var old_options = $dummy.autocomplete('option');
+        $dummy.autocomplete('option', 'minLength', 0);
+        $dummy.autocomplete('search', $dummy.val());
+        $dummy.autocomplete('option', 'minLength', old_options.minLength);
       } else if ((event.which != KEY.SHIFT) && (event.which != KEY.CTRL) && (event.which != KEY.ALT)) {
         state = STATES.UNDEFINED;
       }
@@ -553,6 +571,12 @@ namespace('kivi.Part', function(ns) {
     return pp;
   };
 
+  ns.reinit_widgets = function() {
+    kivi.run_once_for('input.part_autocomplete', 'part_picker', function(elt) {
+      kivi.Part.Picker($(elt));
+    });
+  }
+
   $(function(){
 
     // assortment
@@ -595,8 +619,6 @@ namespace('kivi.Part', function(ns) {
 
     $('#part_warehouse_id').change(kivi.Part.reload_bin_selection);
 
-    $('input.part_autocomplete').each(function(i,real){
-      kivi.Part.Picker($(real));
-    });
+    ns.reinit_widgets();
   });
 });