Open kurkop opened 10 years ago
En la documentación oficial de odoo recomiendan NO USAR relaciones one2one: "A one2one field expresses a one:to:one relation between two objects. It is deprecated. Use many2one instead".
Ver: https://doc.openerp.com/trunk/server/03_module_dev_02/#relational-types
Efectivamente la idea es que al crear un "Profesional de la salud" o un "Paciente" automáticamente sea creado el usuario relacionado, esa es la mejora que se propuso en otro issue. Según entiendo para lograr eso se puede usar la herencia por delegación: Inheritance by Delegation - _inherits.
Ver: https://doc.openerp.com/trunk/server/03_module_dev_02/#inheritance-by-delegation-inherits
En mi opinión los "usuarios" solo deben ser creados si el tercero tiene correo electrónico, de esa manera se puede dejar la gestión de contraseñas como una tarea autónoma del usuario. También creo importante colocar como "dependencia" el módulo que encripta la contraseña del usuario, es un aspecto de seguridad importante en un sistema de historia clínica.
Entendida la recomendación. Respecto al tipo de herencia que se debe manejar he estado revisando los tres tipos de herencia de OpenERP, pero veo que la herencia por delegación solo sirve para heredar de ciertos campos del modelo los atributos de la case padre, entonces no veo la forma de "crear automaticamente" el usuario y relacionarlo de esta forma, respecto a la herencia por prototipo, solamente se heredan los modelos, cuando en realidad se deben heredar también los métodos, como de login por ejemplo (o un exceso de campos heredados) y en el caso de herencia de clase, noto que no garantizaría una segmentación en la estructura del módulo doctor con el resto de odoo.
La solución que se me ocurre para esto sería crear un campo de correo electrónico y que en el momento de guardar cree el usuario respectivo en el modelo user_id (en odoo v8 se respeta mucho la asignación de correo por usuario). Sin embargo no sabría cuál es el método que ejecuta el guardado, para así relacionarlo directamente en el campo "invisible" user_id.
Quedo atento. Cordialmente,
En el archivo "base/res/res_users.py" el modelo res_users utiliza la herencia por delegación para crear automáticamente el partner en la base de datos:
class res_users(osv.osv):
""" User class. A res.users record models an OpenERP user and is different
from an employee.
res.users class now inherits from res.partner. The partner model is
used to store the data related to the partner: lang, name, address,
avatar, ... The user model is now dedicated to technical data.
"""
__admin_ids = {}
_uid_cache = {}
_inherits = {
'res.partner': 'partner_id',
}
_name = "res.users"
_description = 'Users'
¿No se puede hacer lo contrario?, que al crear el tercero se cree automáticamente el usuario?
Otra opción es estudiar las funciones asociadas al formulario que se despliega desde el formulario del partner a través del botón "Más/Administración de acceso al portal" y hacer que se ejecute de forma automática cada que se cree un profesional de la salud o un paciente.
Estuve revisando el código de res_user y veo que de igual forma escriben el campo partner_id desde los onchange. He realizado lo mismo con un campo que llamé username, el cual si no existe el usuario lo crea, y si existe muestra una alerta diciendo que por favor cambie el nombre de usuario. Creo que sería conveniente ocultar el campo user_id. Quedo atento a cualquier duda.
68bd3756d1cb0f3e2aab1330e900290e528045ec
Hola Hector,
Quisiera preguntarle por qué existe una relación many2one entre el profesional de la salud y los usuarios, creería que debe ser necesario solo un usuario por profesional de la salud y viceversa, es decir una relación one2one.
Adicionalmente también me surgió otra duda, y es por qué los profesionales de la salud y quizá pacientes no heredan directamente de los usuarios de Odoo, ya que considero importante que cada profesional de la salud y paciente tenga un usuario de acceso y contraseña. Para el caso de paciente se me ocurre que el usuario sea su documento de identidad y para el profesional el correo electrónico.
Quedo atento. Cordialmente,