QUe un campo selección de su valor en otro campo.

406 views
Skip to first unread message

marco garcia baturan

unread,
Dec 7, 2016, 7:45:30 AM12/7/16
to Usuarios Odoo / OpenERP en España
Hola a todos,

Les publico aquí una consulta a una persona que no me ha respondido todavia y preciso una posible solución:
Pero ahora tengo un pequeño desafío que el cliente me ha pedido. El quiere que en el formulario de mi módulo existan dos campos:
-provincia
-código postal
Entonces me basé en tu artículo pero sigo sin ver como hacerlo correctamente.
He pensado que el campo 'provincia' sea un desplegable que deduzco por lo que leo  tiene que ser un field.selection y que ahí introduzca una tupla con las provincias como clave y el código postal como valor.

Hasta ahí bien y lo entiendo, pero lo que quiero es que el desplegable muestre solo provincia y que el campo código postal muestre el valor de la clave.
Datos del proyecto:
SO: Ubuntu 14.04
ERP: Odoo 8.0
Módulo complementario: field format (permite dar formato a campos como móvil o código postal que en este caso son de seis dígitos y quiero que se llenen los dos primeros con lo explicado arriba)
Módulo desarrollandose: Ingreso de Pacientes.
Código de los campos en python:

Provincia_Paciente = fields.Char(string='Provincia del paciente', size=60 ,required=True)
CP_Paciente = fields.Char(string='CP del paciente', size= 6 ,required=True)

Script en la misma clase del modelo que he desarrollado hasta ahora:
ENLACE A GITHUB

Código XML de la vista:
<field name="Provincia_Paciente" placeholder = "Alicante"/>
<field name="CP_Paciente" data-inputmask="'mask': '99999'"/>

Y aquí usando diferentes artículos he creado esto:
# defino función que relaciona campo selección con campo CP
def _sel_func(self, cr, uid, context=None):
obj = self.pool.get('admision.ingreso')
ids = obj.search(cr, uid, [])

res = obj.read(cr, uid, ids, ['name', 'id'], context)
res = [(r['id'], r['name']) for r in res]
return res
#defino campo selección con meta tupla provincia con clave
Provincia_Paciente = fields.selection((('Álava','01'),('Albacete','02'),('Alicante','03'),('Almería','04'),('Ávila','05'),('Badajoz','06'),(
'Islas Baleares','07'),('Barcelona',''08''),('Burgos',''09''),('Cáceres','10'),('Cádiz','11'),(
'Castellón','12'),('Ciudad Real','13'),('Córdoba','14'),('La Coruña','15'),('Cuenca','16'),(
'Gerona','17'),('Granada','18'),('Guadalajara','19'),('Guipúzcoa','20'),('Huelva','21'),('Huesca','21'),(
'Jaén','23'),('León','24'),('Lérida','25'),('La Rioja','26'),('Lugo','27'),('Madrid','28'),('Malaga','29'),(
'Murcia','30'),('Navarra','31'),('Orense','32'),('Astirias','33'),('Palencia','34'),('Las Palmas','35'),(
'Pontevedra','36'),('Salamanca','37'),('Santa Cruz de Tenerife','38'),('Cantabria','39'),(
'Segovia','40'),('Sevilla','41'),('Soria','42'),('Tarragona','43'),('Teruel','44'),('Toledo','45'),(
'Valencia','46'),('Valladolid','47'),('Vizcaya','48'),('Zamora','49'),('Zaragoza','50'),('Ceuta','51'),(
'Melilla','52'),()), string = 'Provincia del paciente')
# defino campo CP que recibe el valor de la seleccion
CP_Paciente = fields.Reference(string='CP del paciente',selection = _sel_func, size= 6 ,required=True)

Pero me da error de sobrecarga de servidor.
¿Alguna idea?

Un saludo y espero pronta respuesta,
Marco García Baturan.

adok...@aizean.com

unread,
Dec 13, 2016, 9:02:47 AM12/13/16
to Usuarios Odoo / OpenERP en España

Buenas Marco,

Si te he entendido bien lo que quieres es que el usuario seleccione la provincia (desde un seleccionable) y automáticamente se rellene un campo con el código postal correspondiente.

Si estas usando Odoo v8 supongo que estaras programando en la nueva api, el artículo en el que te estas basando es de la vieja api.

Los fields en la nueva api empiezan en mayúsculas, tu tienes puesto fields.selection y tendrías que tener puesto fields.Selection

Aparte si quieres que te salgan las provincias en el desplegable tienes que invertir el orden de la tupla, la primera parte es la llave(el valor interno que maneja Odoo) y la segunda lo que se visualiza al usuario. El campo Provincia_Paciente te tendría que quedar algo como esto:



Provincia_Paciente = fields.Selection(selection=(('01', 'Álava'),('02', 'Albacete'),('03', 'Alicante'),
('04', 'Almería'),('05', 'Ávila'),('06', 'Badajoz'),
('07', 'Islas Baleares'),('08', 'Barcelona'),('09', 'Burgos'),
('10', 'Cáceres'),('11', 'Cádiz'),('12','Castellón'),
('13','Ciudad Real'),('14','Córdoba'),
('15', 'La Coruña'),('16', 'Cuenca'),('17','Gerona'),
('18','Granada'),('19','Guadalajara'),('20','Guipúzcoa'),
('21','Huelva'),('22','Huesca'),('23','Jaén'),('24','León'),
('25','Lérida'),('26','La Rioja'),('27','Lugo'),('28','Madrid'),
('29','Malaga'),('30','Murcia'),('31','Navarra'),('32','Orense'),
('33','Astirias'),('34','Palencia'),('35','Las Palmas'),
('36','Pontevedra'),('37','Salamanca'),
('38','Santa Cruz de Tenerife'),('39','Cantabria'),
('40','Segovia'),('41','Sevilla'),('42','Soria'),
('43','Tarragona'),('44','Teruel'),('45','Toledo'),
('46','Valencia'),('47','Valladolid'),('48','Vizcaya'),
('49','Zamora'),('50','Zaragoza'),('51','Ceuta'),('52','Melilla')),

string = 'Provincia del paciente')


Para que en el campo CP_Paciente sea el código de la provincia podrías usar un método onchange. Te quedaria algo tal que así:

@api.onchange('Provincia_Paciente')
def onchange_provincia_paciente(self):
self.CP_Paciente = self.Provincia_Paciente


CP_Paciente = fields.Char(string='CP del paciente',size= 6 ,required=True)



Un saludo.



El miércoles, 7 de diciembre de 2016, 13:45:30 (UTC+1), marco garcia baturan escribió:
Hola a todos,
dasdas

marco garcia baturan

unread,
Dec 14, 2016, 4:37:27 AM12/14/16
to openerp-s...@googlegroups.com
Hola adokando,
Muchas gracias por tu sugerencia, ha funcionado a la primera y efectivamente es mucho más sencilla la nueva api de odoo 8. Estaba usando conceptos mezclados de la vieja con la nueva y la verdad que no esta la documentación muy estructurada que digamos.

Un saludo,
M

--
Has recibido este mensaje porque estás suscrito a un tema del grupo "Usuarios Odoo / OpenERP en España" de Grupos de Google.
Para cancelar la suscripción a este tema, visita https://groups.google.com/d/topic/openerp-spain-users/ZBCiei_nu6s/unsubscribe.
Para cancelar la suscripción a este grupo y a todos sus temas, envía un correo electrónico a openerp-spain-users+unsub...@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

adok...@aizean.com

unread,
Dec 15, 2016, 12:35:58 PM12/15/16
to Usuarios Odoo / OpenERP en España
Buenas Marco,

Toda la documentación de la versión 8 la tienes en esta pagina
https://www.odoo.com/documentation/8.0/. Concretamente lo referente a la nueva api lo tienes en https://www.odoo.com/documentation/8.0/reference/orm.html. De todos modos si quieres hacer algo y la documentación oficial no te resuelve las dudas siempre puedes mirar el código de los módulos de la OCA para orientante, te dejo el link https://github.com/OCA.

Saludos.
Reply all
Reply to author
Forward
0 new messages