Discussion:
[tryton-es] Ayuda con filtros en tryton
Elmer Steven Salazar Arias
2017-06-27 21:16:31 UTC
Permalink
Estimados, en mi proceso de aprendizaje de la herramienta me encuentro con
un caso de aplicación de filtros que no se como aplicar en tryton:

Tengo una tabla con varias columnas que contienen la cantidad de trabajos
realizados en un mes. Se requiere filtrar solo los registros que tengan en
los 3 primeros meses algún trabajo, he intentado aplicar un filtro similar
a este:

(Job1:+Job2:+Job3:)>0, pero evidentemente esta mal. Como se puede aplicar
ese tipo de filtros?

Es posible tener uno o varios combo box en la cabecera de la rejilla para
parametrizar los filtros a aplicar?

Adjunto una imagen de lo que requiero hacer en tryton, espero que sea
posible.

<Loading Image...>

Gracias po su ayuda.

Att
Elmer
Sergi Almacellas Abellana
2017-06-28 09:00:04 UTC
Permalink
Post by Elmer Steven Salazar Arias
Estimados, en mi proceso de aprendizaje de la herramienta me encuentro
Tengo una tabla con varias columnas que contienen la cantidad de
trabajos realizados en un mes. Se requiere filtrar solo los registros
que tengan en los 3 primeros meses algún trabajo, he intentado aplicar
(Job1:+Job2:+Job3:)>0, pero evidentemente esta mal. Como se puede
aplicar ese tipo de filtros?
Es posible tener uno o varios combo box en la cabecera de la rejilla
para parametrizar los filtros a aplicar?
Deberias utilizar un context_model para definir los valors que quieres
settear en en contexto y luego applicar los filtros en tu modelo segun
estos valores.

En el context_model puedes añadir los campos que quieras.
--
Sergi Almacellas Abellana
www.koolpi.com
Twitter: @pokoli_srk
Elmer Steven Salazar Arias
2017-06-28 17:17:10 UTC
Permalink
Se tiene documentación sobre el context_model?. Donde encuentro un ejemplo
de su uso.

Att
Elmer

El miércoles, 28 de junio de 2017, 4:00:08 (UTC-5), Sergi Almacellas
Post by Sergi Almacellas Abellana
Post by Elmer Steven Salazar Arias
Estimados, en mi proceso de aprendizaje de la herramienta me encuentro
Tengo una tabla con varias columnas que contienen la cantidad de
trabajos realizados en un mes. Se requiere filtrar solo los registros
que tengan en los 3 primeros meses algún trabajo, he intentado aplicar
(Job1:+Job2:+Job3:)>0, pero evidentemente esta mal. Como se puede
aplicar ese tipo de filtros?
Es posible tener uno o varios combo box en la cabecera de la rejilla
para parametrizar los filtros a aplicar?
Deberias utilizar un context_model para definir los valors que quieres
settear en en contexto y luego applicar los filtros en tu modelo segun
estos valores.
En el context_model puedes añadir los campos que quieras.
--
Sergi Almacellas Abellana
www.koolpi.com
Elmer Steven Salazar Arias
2017-06-29 04:19:42 UTC
Permalink
He creado un objeto para el contexto:
class CustomersContext(ModelView, Workflow, ModelSQL):
'Customers Context'
__name__ = 'crm.customers.context'
range_months = fields.Selection([
('current', 'Current Month'),
('two_last', '2 Last Months'),
('three_last', '3 Last Months'),
('six_last', '6 Last Months'),
('nine_last', '9 Last Months'),
('all', 'All Year'),
], 'Range Months')
company = fields.Many2One('company.company', 'Company', required=True)
salesman = fields.Many2One('company.employee', 'Salesman')
subdivision = fields.Function(fields.Many2One('country.subdivision',
'State'), 'get_subdivision', searcher='search_subdivision')

@classmethod
def __setup__(cls):
super(CustomersContext, cls).__setup__()
cls._buttons.update({
'current_month': {
'invisible': False,
},
'two_last_month': {
'invisible': False,
},
'three_last_month': {
'invisible': False,
},
})


@fields.depends('range_months')
def on_change_range_months(cls):
print 60 * "*"
print "Cambio el combo de Customers"
print cls.range_months
pool = Pool()
Party = pool.get('party.party')
context = Transaction().context
parties= Transaction().context.get('parties')
print parties
print 60 * "*"
pass

y la vista xml correspondiente:
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<form col="8">
<label name="range_months"/>
<field name="range_months"/>
<label name="salesman"/>
<field widget='selection' name="salesman"/>
</form>

y la llamada:
<record model="ir.ui.view" id="customers_context_view_form">
<field name="model">crm.customers.context</field>
<field name="type">form</field>
<field name="name">customers_context_form</field>
</record>

<record model="ir.ui.view" id="customer_view_tree">
<field name="model">party.party</field>
<field name="type">tree</field>
<field name="name">customer_tree</field>
</record>

<record model="ir.action.act_window" id="act_customer_form">
<field name="name">Customers</field>
<field name="res_model">party.party</field>
<field name="context_model">crm.customers.context</field>
</record>


Esto me genera una vista como la que adjunto.

Me he quedado estancado por que no se como obtener el listado de registros
de parties y como aplicarle un filtro y volver a mostrar el nuevo listado
filtrado.
Si alguien me da una mano estaré muy agradecido.

Att

<Loading Image...>
Elmer



El miércoles, 28 de junio de 2017, 12:17:11 (UTC-5), Elmer Steven Salazar
Post by Elmer Steven Salazar Arias
Se tiene documentación sobre el context_model?. Donde encuentro un ejemplo
de su uso.
Att
Elmer
El miércoles, 28 de junio de 2017, 4:00:08 (UTC-5), Sergi Almacellas
Post by Sergi Almacellas Abellana
Post by Elmer Steven Salazar Arias
Estimados, en mi proceso de aprendizaje de la herramienta me encuentro
Tengo una tabla con varias columnas que contienen la cantidad de
trabajos realizados en un mes. Se requiere filtrar solo los registros
que tengan en los 3 primeros meses algún trabajo, he intentado aplicar
(Job1:+Job2:+Job3:)>0, pero evidentemente esta mal. Como se puede
aplicar ese tipo de filtros?
Es posible tener uno o varios combo box en la cabecera de la rejilla
para parametrizar los filtros a aplicar?
Deberias utilizar un context_model para definir los valors que quieres
settear en en contexto y luego applicar los filtros en tu modelo segun
estos valores.
En el context_model puedes añadir los campos que quieras.
--
Sergi Almacellas Abellana
www.koolpi.com
Sergi Almacellas Abellana
2017-06-29 07:27:29 UTC
Permalink
Si solo lo vas a mostrar en esta pantalla no hace falta que sea ni
Workflow, ni ModelSQL.
Post by Elmer Steven Salazar Arias
'Customers Context'
__name__ = 'crm.customers.context'
range_months = fields.Selection([
('current', 'Current Month'),
('two_last', '2 Last Months'),
('three_last', '3 Last Months'),
('six_last', '6 Last Months'),
('nine_last', '9 Last Months'),
('all', 'All Year'),
], 'Range Months')
company = fields.Many2One('company.company', 'Company', required=True)
salesman = fields.Many2One('company.employee', 'Salesman')
subdivision = fields.Function(fields.Many2One('country.subdivision',
'State'), 'get_subdivision', searcher='search_subdivision')
@classmethod
super(CustomersContext, cls).__setup__()
cls._buttons.update({
'current_month': {
'invisible': False,
},
'two_last_month': {
'invisible': False,
},
'three_last_month': {
'invisible': False,
},
})
@fields.depends('range_months')
print 60 * "*"
print "Cambio el combo de Customers"
print cls.range_months
pool = Pool()
Party = pool.get('party.party')
context = Transaction().context
parties= Transaction().context.get('parties')
print parties
print 60 * "*"
pass
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<form col="8">
<label name="range_months"/>
<field name="range_months"/>
<label name="salesman"/>
<field widget='selection' name="salesman"/>
</form>
<record model="ir.ui.view" id="customers_context_view_form">
<field name="model">crm.customers.context</field>
<field name="type">form</field>
<field name="name">customers_context_form</field>
</record>
<record model="ir.ui.view" id="customer_view_tree">
<field name="model">party.party</field>
<field name="type">tree</field>
<field name="name">customer_tree</field>
</record>
<record model="ir.action.act_window" id="act_customer_form">
<field name="name">Customers</field>
<field name="res_model">party.party</field>
<field name="context_model">crm.customers.context</field>
</record>
Esto me genera una vista como la que adjunto.
Me he quedado estancado por que no se como obtener el listado de
registros de parties y como aplicarle un filtro y volver a mostrar el
nuevo listado filtrado.
Si alguien me da una mano estaré muy agradecido.
Debes sobreescribir el search del party.party para que te aplique el
filtro segun los valores del contexto. Mucho mas no te puedo decir
porqué no se lo que estas intentado realizar.

UN saludo,
--
Sergi Almacellas Abellana
www.koolpi.com
Twitter: @pokoli_srk
Elmer Steven Salazar Arias
2017-06-29 07:38:34 UTC
Permalink
Gracias,
Una consulta en donde encuentro la definicion del metodo search del modelo
party par ver que parametros recive y poder sobreescribirlo

Saludos,
Elmer
Post by Sergi Almacellas Abellana
Si solo lo vas a mostrar en esta pantalla no hace falta que sea ni
Workflow, ni ModelSQL.
'Customers Context'
Post by Elmer Steven Salazar Arias
__name__ = 'crm.customers.context'
range_months = fields.Selection([
('current', 'Current Month'),
('two_last', '2 Last Months'),
('three_last', '3 Last Months'),
('six_last', '6 Last Months'),
('nine_last', '9 Last Months'),
('all', 'All Year'),
], 'Range Months')
company = fields.Many2One('company.company', 'Company',
required=True)
salesman = fields.Many2One('company.employee', 'Salesman')
subdivision = fields.Function(fields.Many2One('country.subdivision',
'State'), 'get_subdivision', searcher='search_subdivision')
@classmethod
super(CustomersContext, cls).__setup__()
cls._buttons.update({
'current_month': {
'invisible': False,
},
'two_last_month': {
'invisible': False,
},
'three_last_month': {
'invisible': False,
},
})
@fields.depends('range_months')
print 60 * "*"
print "Cambio el combo de Customers"
print cls.range_months
pool = Pool()
Party = pool.get('party.party')
context = Transaction().context
parties= Transaction().context.get('parties')
print parties
print 60 * "*"
pass
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<form col="8">
<label name="range_months"/>
<field name="range_months"/>
<label name="salesman"/>
<field widget='selection' name="salesman"/>
</form>
<record model="ir.ui.view" id="customers_context_view_form">
<field name="model">crm.customers.context</field>
<field name="type">form</field>
<field name="name">customers_context_form</field>
</record>
<record model="ir.ui.view" id="customer_view_tree">
<field name="model">party.party</field>
<field name="type">tree</field>
<field name="name">customer_tree</field>
</record>
<record model="ir.action.act_window" id="act_customer_form">
<field name="name">Customers</field>
<field name="res_model">party.party</field>
<field name="context_model">crm.customers.context</field>
</record>
Esto me genera una vista como la que adjunto.
Me he quedado estancado por que no se como obtener el listado de
registros de parties y como aplicarle un filtro y volver a mostrar el nuevo
listado filtrado.
Si alguien me da una mano estaré muy agradecido.
Debes sobreescribir el search del party.party para que te aplique el
filtro segun los valores del contexto. Mucho mas no te puedo decir porqué
no se lo que estas intentado realizar.
UN saludo,
--
Sergi Almacellas Abellana
www.koolpi.com
Elmer Steven Salazar Arias
2017-06-29 07:40:57 UTC
Permalink
Lo que trato de hacer es los siguiente: Cuando se seleccione un valor del
combobox se refresquen los datos del treeview con el nuevo filtro.

Att
elmer

El 29 de junio de 2017, 2:38, Elmer Steven Salazar Arias <
Post by Elmer Steven Salazar Arias
Gracias,
Una consulta en donde encuentro la definicion del metodo search del modelo
party par ver que parametros recive y poder sobreescribirlo
Saludos,
Elmer
Post by Sergi Almacellas Abellana
Si solo lo vas a mostrar en esta pantalla no hace falta que sea ni
Workflow, ni ModelSQL.
'Customers Context'
Post by Elmer Steven Salazar Arias
__name__ = 'crm.customers.context'
range_months = fields.Selection([
('current', 'Current Month'),
('two_last', '2 Last Months'),
('three_last', '3 Last Months'),
('six_last', '6 Last Months'),
('nine_last', '9 Last Months'),
('all', 'All Year'),
], 'Range Months')
company = fields.Many2One('company.company', 'Company',
required=True)
salesman = fields.Many2One('company.employee', 'Salesman')
subdivision = fields.Function(fields.Many2On
e('country.subdivision',
'State'), 'get_subdivision', searcher='search_subdivision')
@classmethod
super(CustomersContext, cls).__setup__()
cls._buttons.update({
'current_month': {
'invisible': False,
},
'two_last_month': {
'invisible': False,
},
'three_last_month': {
'invisible': False,
},
})
@fields.depends('range_months')
print 60 * "*"
print "Cambio el combo de Customers"
print cls.range_months
pool = Pool()
Party = pool.get('party.party')
context = Transaction().context
parties= Transaction().context.get('parties')
print parties
print 60 * "*"
pass
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<form col="8">
<label name="range_months"/>
<field name="range_months"/>
<label name="salesman"/>
<field widget='selection' name="salesman"/>
</form>
<record model="ir.ui.view" id="customers_context_view_form">
<field name="model">crm.customers.context</field>
<field name="type">form</field>
<field name="name">customers_context_form</field>
</record>
<record model="ir.ui.view" id="customer_view_tree">
<field name="model">party.party</field>
<field name="type">tree</field>
<field name="name">customer_tree</field>
</record>
<record model="ir.action.act_window" id="act_customer_form">
<field name="name">Customers</field>
<field name="res_model">party.party</field>
<field name="context_model">crm.customers.context</field>
</record>
Esto me genera una vista como la que adjunto.
Me he quedado estancado por que no se como obtener el listado de
registros de parties y como aplicarle un filtro y volver a mostrar el nuevo
listado filtrado.
Si alguien me da una mano estaré muy agradecido.
Debes sobreescribir el search del party.party para que te aplique el
filtro segun los valores del contexto. Mucho mas no te puedo decir porqué
no se lo que estas intentado realizar.
UN saludo,
--
Sergi Almacellas Abellana
www.koolpi.com
Sergi Almacellas Abellana
2017-06-29 07:41:50 UTC
Permalink
Post by Elmer Steven Salazar Arias
Lo que trato de hacer es los siguiente: Cuando se seleccione un valor
del combobox se refresquen los datos del treeview con el nuevo filtro.
Pues solo debes aplicar los filtros del contexto en el metodo search.

Sino recuerdo mal, creo que la información no se actualiza hasta que le
das a refrescar o buscar de nuevo.

Un saludo,
--
Sergi Almacellas Abellana
www.koolpi.com
Twitter: @pokoli_srk
Elmer Steven Salazar Arias
2017-06-29 08:27:21 UTC
Permalink
Mil gracias,
Ya pude aplicar los filtros que necesitaba pero estos se aplican como lo
indicabas cuando mando a buscar de nuevo o al refrescar. Existe alguna
manera de refrescar mediante programación, es decir no presionando el botón
de refrescar si no mediante una instrucción que podría ejecutar desde el
evento "on_change_" por ejemplo.

Saludos
elmer
Post by Elmer Steven Salazar Arias
Lo que trato de hacer es los siguiente: Cuando se seleccione un valor del
combobox se refresquen los datos del treeview con el nuevo filtro.
Pues solo debes aplicar los filtros del contexto en el metodo search.
Sino recuerdo mal, creo que la información no se actualiza hasta que le
das a refrescar o buscar de nuevo.
Un saludo,
--
Sergi Almacellas Abellana
www.koolpi.com
Sergi Almacellas Abellana
2017-06-29 08:32:28 UTC
Permalink
Post by Elmer Steven Salazar Arias
Mil gracias,
Ya pude aplicar los filtros que necesitaba pero estos se aplican como lo
indicabas cuando mando a buscar de nuevo o al refrescar. Existe alguna
manera de refrescar mediante programación, es decir no presionando el
botón de refrescar si no mediante una instrucción que podría ejecutar
desde el evento "on_change_" por ejemplo.
Que yo sepa no.
--
Sergi Almacellas Abellana
www.koolpi.com
Twitter: @pokoli_srk
Elmer Steven Salazar Arias
2017-06-30 04:45:04 UTC
Permalink
Resulta que si se preciona la tecla enter en el comboBox, manda a
refrescar. Con eso ha quedad muy bien la parte de los filtros. Gracias por
la ayuda.

Att
Elmer

El jueves, 29 de junio de 2017, 3:32:31 (UTC-5), Sergi Almacellas Abellana
Post by Sergi Almacellas Abellana
Post by Elmer Steven Salazar Arias
Mil gracias,
Ya pude aplicar los filtros que necesitaba pero estos se aplican como lo
indicabas cuando mando a buscar de nuevo o al refrescar. Existe alguna
manera de refrescar mediante programación, es decir no presionando el
botón de refrescar si no mediante una instrucción que podría ejecutar
desde el evento "on_change_" por ejemplo.
Que yo sepa no.
--
Sergi Almacellas Abellana
www.koolpi.com
Sergi Almacellas Abellana
2017-06-29 07:41:06 UTC
Permalink
Post by Elmer Steven Salazar Arias
Gracias,
Una consulta en donde encuentro la definicion del metodo search del
modelo party par ver que parametros recive y poder sobreescribirlo
http://doc.tryton.org/4.4/trytond/doc/ref/models/models.html?highlight=search#trytond.model.ModelStorage.search
--
Sergi Almacellas Abellana
www.koolpi.com
Twitter: @pokoli_srk
Sergi Almacellas Abellana
2017-06-29 07:22:45 UTC
Permalink
Se tiene documentación sobre el context_model?. Donde encuentro un
ejemplo de su uso.
En el módulo account hay varios ejemplos en el apartado de reporting.

Basicamente, lo que se hace es definir un modelo que se muestra encima
del buscador y aplica los valors en el contexto de esta acción.

Una vez en el servidor puedes acceder a los valores con
Transaction().context['nombre_campo']

Un saludo,
--
Sergi Almacellas Abellana
www.koolpi.com
Twitter: @pokoli_srk
Loading...