hivam / doctor

Módulo para OpenERP 7.0 - Permite la gestión de un consultorio médico.
GNU Affero General Public License v3.0
4 stars 4 forks source link

Profesional de la salud #3

Open kurkop opened 10 years ago

kurkop commented 10 years ago

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,

hivam commented 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.

kurkop commented 10 years ago

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,

hivam commented 10 years ago

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.


kurkop commented 10 years ago

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