El 15/03/16 a les 21:31, Fabyc ha escrit:
Hola.

On Thursday, January 28, 2016 at 5:04:38 PM UTC-5, Jordi Esteve (Zikzakmedia) wrote:

    Hola Fernando,

    El 28/01/16 a les 14:45, Fernando Sánchez ha escrit:
    > Estimada comunidad,
    >
    > Reciban mi saludo cordial, a la vez tengo una consulta respecto
    al uso
    > de lector de código de barras con tryton 3.4.
    >
    > Sucede que estamos usando un lector de códigos Argox AS8000 y al
    > registrar los códigos en el formulario de plantillas de
    productos, nos
    > posicionamos en el campo de código (sección variantes) ,
    disparamos el
    > lector y el código del producto aparece en el campo. Hasta ahí
    perfecto.
    >
    > Tuvimos dificultad al usar el mismo lector para recibir
    productos en
    > almacén, en el formulario de recepción de productos desde el
    proveedor
    > (pienso que debe ser igual en el de envíos a clientes), al
    agregar una
    > nueva linea nos muestra el formulario respectivo, dentro de
    ellos el
    > campo producto. Posicionamos el cursor en este campo y al leer el
    > código de barras, este aparece y en una fracción de segundo
    > desaparece. Siendo este un producto cuyo código ya esta
    registrado en
    > la base de datos.
    > Pienso que tiene que ver con la funcionalidad asociada al campo,
    que
    > es uno de busqueda.
    >
    > A ver si alguien vivió esta situación y me da alguna luz para poder
    > resolver el problema.

    Seguramente será que el cliente Gtk de Tryton por defecto no
    autocompleta los campos m2o y m2m cuando la búsqueda obtiene un único
    resultado.

    Nosotros modificamos ligeramente el cliente Gtk de Tryton para que lo
    hiciera, prueba de descargarte el que hay disponible aquí

    http://www.zzsaas.com/es/descarga-tryton.html
    <http://www.zzsaas.com/es/descarga-tryton.html>


¿Habrá algún repositorio de donde descargar el código fuente de los parches aplicados para el soporte de la fuincionalidad en mención y/o algunas otras
más necesarias para la utilización en un super mercado?

Busqué en el repositorio de Zikzakmedia en Bitbucket pero no encuentro el
cliente modificado.


No, no está en bitbucket. Te mando adjunto el patch de "Autocomplete m2m, m2o and o2m when search restul is 1" para v3.8, pero es prácticamente el mismo para otras versiones.

--
Jordi Esteve
Consultor Zikzakmedia SL
[email protected]
Mòbil 679 170 693

Zikzakmedia SL
St. Jaume, 9, baixos, 2a
08720 Vilafranca del Penedès
Tel 93 890 2108

# HG changeset patch
# User resteve <[email protected]>
# Date 1447629341 -3600
#      Mon Nov 16 00:15:41 2015 +0100
# Branch zz3.8
# Node ID f336e6457599e83752979cc46e3f417235b5986a
# Parent  347f9902b024955d14614a062bc0433bd96d9dea
Autocomplete m2m and o2m when search result is 1

diff -r 347f9902b024 -r f336e6457599 tryton/gui/window/view_form/view/form_gtk/many2many.py
--- a/tryton/gui/window/view_form/view/form_gtk/many2many.py	Tue Sep 29 12:59:17 2015 +0200
+++ b/tryton/gui/window/view_form/view/form_gtk/many2many.py	Mon Nov 16 00:15:41 2015 +0100
@@ -11,6 +11,7 @@
 from tryton.common.placeholder_entry import PlaceholderEntry
 from tryton.common.completion import get_completion, update_completion
 from tryton.common.domain_parser import quote
+from tryton.common import RPCExecute, RPCException
 
 _ = gettext.gettext
 
@@ -43,6 +44,7 @@
         self.wid_text = PlaceholderEntry()
         self.wid_text.set_placeholder_text(_('Search'))
         self.wid_text.set_property('width_chars', 13)
+        self.wid_text.connect('key_press_event', self.on_keypress)
         self.wid_text.connect('focus-out-event', lambda *a: self._focus_out())
         self.focus_out = True
         hbox.pack_start(self.wid_text, expand=True, fill=True)
@@ -145,6 +147,20 @@
 
         self.focus_out = False
 
+        domain2 = [('rec_name', 'ilike', '%' + value + '%'), domain]
+        try:
+            ids = RPCExecute('model', self.attrs['relation'], 'search',
+                domain2, 0, 2, None, context=context)
+        except RPCException:
+            ids = []
+        if len(ids) == 1:
+            self.focus_out = True
+            self.screen.load(ids, modified=True)
+            self.screen.display(res_id=ids[0])
+            self.screen.set_cursor()
+            self.wid_text.set_text('')
+            return
+
         def callback(result):
             self.focus_out = True
             if result:
diff -r 347f9902b024 -r f336e6457599 tryton/gui/window/view_form/view/form_gtk/one2many.py
--- a/tryton/gui/window/view_form/view/form_gtk/one2many.py	Tue Sep 29 12:59:17 2015 +0200
+++ b/tryton/gui/window/view_form/view/form_gtk/one2many.py	Mon Nov 16 00:15:41 2015 +0100
@@ -12,6 +12,7 @@
 from tryton.common.placeholder_entry import PlaceholderEntry
 from tryton.common.completion import get_completion, update_completion
 from tryton.common.domain_parser import quote
+from tryton.common import RPCExecute, RPCException
 
 _ = gettext.gettext
 
@@ -49,6 +50,8 @@
             self.wid_text = PlaceholderEntry()
             self.wid_text.set_placeholder_text(_('Search'))
             self.wid_text.set_property('width_chars', 13)
+            if self.attrs.get('add_remove'):
+                self.wid_text.connect('key_press_event', self.on_keypress)
             self.wid_text.connect('focus-out-event',
                 lambda *a: self._focus_out())
             hbox.pack_start(self.wid_text, expand=True, fill=True)
@@ -194,8 +197,6 @@
         vbox.pack_start(self.screen.widget, expand=True, fill=True)
 
         self.screen.widget.connect('key_press_event', self.on_keypress)
-        if self.attrs.get('add_remove'):
-            self.wid_text.connect('key_press_event', self.on_keypress)
 
         but_switch.props.sensitive = self.screen.number_of_views > 1
 
@@ -453,6 +454,22 @@
         if self.screen.current_view.view_type == 'tree':
             sequence = self.screen.current_view.attributes.get('sequence')
 
+        domain2 = [('rec_name', 'ilike', '%' + text + '%'), domain]
+        try:
+            ids = RPCExecute('model', self.attrs['relation'], 'search',
+                domain2, 0, 2, None, context=context)
+        except RPCException:
+            ids = []
+        if len(ids) == 1:
+            self.focus_out = True
+            self.screen.load(ids, modified=True)
+            self.screen.display(res_id=ids[0])
+            if sequence:
+                self.screen.group.set_sequence(field=sequence)
+            self.screen.set_cursor()
+            self.wid_text.set_text('')
+            return
+
         def callback(result):
             self.focus_out = True
             if result:

Responder a