From 40deb136d5a6edc6bb15086b8d4be831213a88ed Mon Sep 17 00:00:00 2001 From: Luis Ernesto Portillo Zaldivar Date: Sun, 13 Jul 2025 17:49:30 -0600 Subject: [PATCH 01/11] \"feat(partner): Add patient and doctor fields to res.partner\" --- lims_management/models/__init__.py | 1 + lims_management/models/partner.py | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) create mode 100644 lims_management/models/partner.py diff --git a/lims_management/models/__init__.py b/lims_management/models/__init__.py index 40a96af..1d3c2e9 100644 --- a/lims_management/models/__init__.py +++ b/lims_management/models/__init__.py @@ -1 +1,2 @@ # -*- coding: utf-8 -*- +from . import partner \ No newline at end of file diff --git a/lims_management/models/partner.py b/lims_management/models/partner.py new file mode 100644 index 0000000..766d24f --- /dev/null +++ b/lims_management/models/partner.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +from odoo import models, fields, api + +class ResPartner(models.Model): + _inherit = 'res.partner' + + is_patient = fields.Boolean(string="Es Paciente") + patient_identifier = fields.Char(string="Identificador de Paciente", copy=False) + + is_doctor = fields.Boolean(string="Es Médico") + doctor_license = fields.Char(string="Licencia Médica", copy=False) + + _sql_constraints = [ + ('patient_identifier_unique', 'unique(patient_identifier)', 'El identificador del paciente debe ser único.'), + ('doctor_license_unique', 'unique(doctor_license)', 'La licencia médica debe ser única.') + ] From 6569c5c55b4fe9b10acdc164093af661d88fbf26 Mon Sep 17 00:00:00 2001 From: Luis Ernesto Portillo Zaldivar Date: Sun, 13 Jul 2025 18:12:46 -0600 Subject: [PATCH 02/11] \"feat(partner): Add patient and doctor fields to partner form view\" --- lims_management/__manifest__.py | 1 + lims_management/views/partner_views.xml | 30 +++++++++++++++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 lims_management/views/partner_views.xml diff --git a/lims_management/__manifest__.py b/lims_management/__manifest__.py index 3e68aef..5fbc27f 100644 --- a/lims_management/__manifest__.py +++ b/lims_management/__manifest__.py @@ -21,6 +21,7 @@ 'security/lims_security.xml', 'security/ir.model.access.csv', 'views/menus.xml', + 'views/partner_views.xml', ], 'installable': True, 'application': True, diff --git a/lims_management/views/partner_views.xml b/lims_management/views/partner_views.xml new file mode 100644 index 0000000..034fe3e --- /dev/null +++ b/lims_management/views/partner_views.xml @@ -0,0 +1,30 @@ + + + + + + res.partner.form.patient + res.partner + + + + + + + + + + + + res.partner.form.doctor + res.partner + + + + + + + + + + \ No newline at end of file From ab031b24a62b01c4283ec3820f933442973d56ec Mon Sep 17 00:00:00 2001 From: Luis Ernesto Portillo Zaldivar Date: Sun, 13 Jul 2025 18:18:47 -0600 Subject: [PATCH 03/11] \"feat(partner): Add demo data for patients and doctors\" --- lims_management/__manifest__.py | 3 +++ lims_management/data/lims_demo.xml | 40 ++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 lims_management/data/lims_demo.xml diff --git a/lims_management/__manifest__.py b/lims_management/__manifest__.py index 5fbc27f..dfda99f 100644 --- a/lims_management/__manifest__.py +++ b/lims_management/__manifest__.py @@ -23,6 +23,9 @@ 'views/menus.xml', 'views/partner_views.xml', ], + 'demo': [ + 'data/lims_demo.xml', + ], 'installable': True, 'application': True, 'auto_install': False, diff --git a/lims_management/data/lims_demo.xml b/lims_management/data/lims_demo.xml new file mode 100644 index 0000000..5561edc --- /dev/null +++ b/lims_management/data/lims_demo.xml @@ -0,0 +1,40 @@ + + + + + + + Ana Torres + + P0001 + +1-202-555-0174 + ana.torres@example.com + + + + Carlos Ruiz + + P0002 + +1-202-555-0192 + carlos.ruiz@example.com + + + + + Dr. Luis Herrera + + L-98765 + +1-202-555-0145 + luis.herrera@hospital.com + + + + Dra. Sofia Vargas + + L-54321 + +1-202-555-0133 + sofia.vargas@clinic.com + + + + From a79af24c62a5a319e246e2081165b6d9ab5fdc14 Mon Sep 17 00:00:00 2001 From: Luis Ernesto Portillo Zaldivar Date: Sun, 13 Jul 2025 18:27:18 -0600 Subject: [PATCH 04/11] \"feat(partner): Add demo data for patients and doctors\" --- lims_management/__manifest__.py | 3 +++ lims_management/data/lims_demo.xml | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/lims_management/__manifest__.py b/lims_management/__manifest__.py index dfda99f..1f2b28a 100644 --- a/lims_management/__manifest__.py +++ b/lims_management/__manifest__.py @@ -26,6 +26,9 @@ 'demo': [ 'data/lims_demo.xml', ], + 'demo': [ + 'data/lims_demo.xml', + ], 'installable': True, 'application': True, 'auto_install': False, diff --git a/lims_management/data/lims_demo.xml b/lims_management/data/lims_demo.xml index 5561edc..4bf318d 100644 --- a/lims_management/data/lims_demo.xml +++ b/lims_management/data/lims_demo.xml @@ -37,4 +37,4 @@ - + \ No newline at end of file From db3bb92c52f7700e854d6963d9cf90ae45fe7d3e Mon Sep 17 00:00:00 2001 From: Luis Ernesto Portillo Zaldivar Date: Sun, 13 Jul 2025 20:12:54 -0600 Subject: [PATCH 05/11] chore: remove compiled files and add .gitignore --- .gitignore | Bin 0 -> 44 bytes .../models/__pycache__/__init__.cpython-312.pyc | Bin 149 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 .gitignore delete mode 100644 lims_management/models/__pycache__/__init__.cpython-312.pyc diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..12829c01a33a63f07077d85ce9d9be3692ae3f3b GIT binary patch literal 44 pcmezWFPcf&6#|eFk0zE(R?IJ*XUr2LSfG2v`6B literal 0 HcmV?d00001 diff --git a/lims_management/models/__pycache__/__init__.cpython-312.pyc b/lims_management/models/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 6650407c7a1bc7ea24c5d8cc549137c6024116f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 149 zcmX@j%ge<81kdgkWk>+&#~=-5!pP83g5+AQuQ2C3)1}IpXlWJGQ V3N(Zfh>JmtkIamWj77{q761c1B%=TT From cd8880a624d377c2c33471041495e8eed1269d4e Mon Sep 17 00:00:00 2001 From: Luis Ernesto Portillo Zaldivar Date: Sun, 13 Jul 2025 20:22:01 -0600 Subject: [PATCH 06/11] \"fix(odoo): Corrige errores de inicio en Odoo\" --- lims_management/__manifest__.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/lims_management/__manifest__.py b/lims_management/__manifest__.py index 1f2b28a..71c4ec4 100644 --- a/lims_management/__manifest__.py +++ b/lims_management/__manifest__.py @@ -26,10 +26,8 @@ 'demo': [ 'data/lims_demo.xml', ], - 'demo': [ - 'data/lims_demo.xml', - ], 'installable': True, 'application': True, 'auto_install': False, + 'license': 'LGPL-3', } From aef6e49c505cad41d54667446c819ccc62624e72 Mon Sep 17 00:00:00 2001 From: Luis Ernesto Portillo Zaldivar Date: Sun, 13 Jul 2025 20:47:21 -0600 Subject: [PATCH 07/11] =?UTF-8?q?\"feat(#4):=20Implementa=20vista=20y=20ca?= =?UTF-8?q?mpos=20cl=C2=A1nicos=20en=20res.partner\"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- GEMINI.md | 61 +++++++++++++++++++++---- lims_management/data/lims_demo.xml | 4 ++ lims_management/models/partner.py | 6 +++ lims_management/views/partner_views.xml | 39 ++++++++-------- 4 files changed, 81 insertions(+), 29 deletions(-) diff --git a/GEMINI.md b/GEMINI.md index ce926f7..1c15ed2 100644 --- a/GEMINI.md +++ b/GEMINI.md @@ -21,10 +21,13 @@ tea issue create --title "Título del Issue" --description "Descripción detalla Para agregar un comentario a un issue existente, se utiliza el comando `comment` seguido del número del issue y el texto del comentario entre comillas. **Formato correcto:** + ```bash tea comment "Tu comentario aquí" ``` + **Ejemplo:** + ```bash tea comment 3 "Comentario de prueba" ``` @@ -37,22 +40,45 @@ tea comment 3 "Comentario de prueba" Debido a problemas de interpretación de comillas en el shell de ejecución, el uso de `git commit -m "mensaje"` puede fallar. Para evitar estos problemas, se debe pasar el mensaje del commit a través de la entrada estándar (`stdin`). +### Política de Mensajes de Commit + +**Es mandatorio que el título de cada commit referencie el número del issue que resuelve.** Esto se hace para mantener una trazabilidad clara entre el código y las tareas. + +**Formato del Título:** +``` +(#): +``` +- **``:** `feat` (nueva funcionalidad), `fix` (corrección de bug), `docs` (cambios en documentación), `style` (formato), `refactor`, `test`, `chore` (otras tareas). +- **`()`:** El número del issue entre paréntesis y precedido de `#`. + +**Ejemplo:** +``` +feat(#4): Agregar campos de género y fecha de nacimiento al paciente +``` + ### Método Recomendado Utiliza el comando `echo` y una tubería (`|`) para enviar el mensaje a `git commit -F -`. **Commit de una sola línea:** + ```bash -echo "feat(scope): Tu mensaje de commit conciso" | git commit -F - +echo "feat(#4): Tu mensaje de commit conciso" | git commit -F - ``` **Commit multilínea:** -Para mensajes de commit multilínea, la forma más segura es usar `printf` que maneja mejor los saltos de línea (`\n`): +Para mensajes de commit multilínea, la forma más segura es usar `printf` que maneja mejor los saltos de línea (` +`): + ```bash -printf "feat(scope): Título del commit\n\nCuerpo del mensaje con una descripción más detallada.\n\n- Un punto importante.\n- Otro punto importante.\n\nResolves: #123" | git commit -F - +printf "feat(#4): Título del commit + +Cuerpo del mensaje con descripción detallada." | git commit -F - ``` + Esto asegura que el formato del mensaje del commit se preserve correctamente. + --- ## Crear un Pull Request @@ -60,11 +86,13 @@ Esto asegura que el formato del mensaje del commit se preserve correctamente. Para crear un pull request (PR), se utiliza el comando `tea pulls create`. Debes especificar la rama base (hacia donde van los cambios) y la rama `head` (tu rama actual), junto con un título que referencie el issue que resuelve. **Formato del comando:** + ```bash tea pulls create --base "" --head "" --title "(#issue): Título descriptivo" ``` **Ejemplo:** + ```bash tea pulls create --base "dev" --head "feature/3-core-setup" --title "feat(#3): Actualiza instrucciones en GEMINI.md" ``` @@ -86,14 +114,29 @@ Al iniciar cada sesión de trabajo, es **mandatorio** leer los siguientes docume Para levantar la instancia efímera de Odoo 18 junto con la base de datos de PostgreSQL, se utiliza Docker Compose. -**Comando:** +**Comando de inicio:** ```bash docker-compose up -d ``` +Este comando levantará los servicios definidos en el archivo `docker-compose.yml` en modo "detached" (`-d`). -Este comando levantará los servicios definidos en el archivo `docker-compose.yml` en modo "detached" (`-d`), lo que significa que se ejecutarán en segundo plano. - -Para detener los servicios, utiliza: +**Comando de detención y limpieza:** +Para detener los servicios y asegurar un estado limpio, **siempre se deben eliminar los volúmenes**, a menos que se indique lo contrario. ```bash -docker-compose down -``` \ No newline at end of file +docker-compose down -v +``` + +### Verificación de la Inicialización + +Después de levantar la instancia, es **mandatorio** verificar los registros del contenedor de inicialización para confirmar que los módulos se instalaron o actualizaron correctamente. + +**Comando para ver los logs:** +```bash +docker-compose logs odoo_init +``` + +Busca errores en la salida. Si encuentras alguno, debes presentar un resumen del problema y sus posibles causas, como: +- **Dependencias faltantes:** Un módulo no se puede instalar porque requiere otro que no está presente. +- **Errores de sintaxis:** Problemas en archivos Python (`.py`) o XML (`.views`, `.xml`). +- **Permisos incorrectos:** Problemas de acceso a archivos o directorios. +- **Datos incorrectos:** Errores en los archivos de datos de demostración o iniciales. diff --git a/lims_management/data/lims_demo.xml b/lims_management/data/lims_demo.xml index 4bf318d..c373c56 100644 --- a/lims_management/data/lims_demo.xml +++ b/lims_management/data/lims_demo.xml @@ -7,6 +7,8 @@ Ana Torres P0001 + 1985-05-15 + female +1-202-555-0174 ana.torres@example.com @@ -15,6 +17,8 @@ Carlos Ruiz P0002 + 1992-11-20 + male +1-202-555-0192 carlos.ruiz@example.com diff --git a/lims_management/models/partner.py b/lims_management/models/partner.py index 766d24f..e691ffe 100644 --- a/lims_management/models/partner.py +++ b/lims_management/models/partner.py @@ -6,6 +6,12 @@ class ResPartner(models.Model): is_patient = fields.Boolean(string="Es Paciente") patient_identifier = fields.Char(string="Identificador de Paciente", copy=False) + birthdate_date = fields.Date(string="Fecha de Nacimiento") + gender = fields.Selection([ + ('male', 'Masculino'), + ('female', 'Femenino'), + ('other', 'Otro') + ], string="Género") is_doctor = fields.Boolean(string="Es Médico") doctor_license = fields.Char(string="Licencia Médica", copy=False) diff --git a/lims_management/views/partner_views.xml b/lims_management/views/partner_views.xml index 034fe3e..de3e73b 100644 --- a/lims_management/views/partner_views.xml +++ b/lims_management/views/partner_views.xml @@ -1,30 +1,29 @@ - - - res.partner.form.patient + + + res.partner.form.lims res.partner - - - - - - - - - - res.partner.form.doctor - res.partner - - - - - + + + + + + + + + + + + + + + - \ No newline at end of file + From da27d0bc839afbc7293aa97f522113f116f46de5 Mon Sep 17 00:00:00 2001 From: Luis Ernesto Portillo Zaldivar Date: Sun, 13 Jul 2025 21:16:10 -0600 Subject: [PATCH 08/11] =?UTF-8?q?\"feat(#4):=20A=C2=A4ade=20l=C2=A2gica=20?= =?UTF-8?q?de=20autogeneraci=C2=A2n=20y=20campo=20de=20origen\"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lims_management/__manifest__.py | 1 + lims_management/data/ir_sequence.xml | 13 +++++++++++++ lims_management/data/lims_demo.xml | 6 ++++-- lims_management/models/partner.py | 12 ++++++++++++ lims_management/views/partner_views.xml | 3 ++- 5 files changed, 32 insertions(+), 3 deletions(-) create mode 100644 lims_management/data/ir_sequence.xml diff --git a/lims_management/__manifest__.py b/lims_management/__manifest__.py index 71c4ec4..e3116fd 100644 --- a/lims_management/__manifest__.py +++ b/lims_management/__manifest__.py @@ -20,6 +20,7 @@ 'data': [ 'security/lims_security.xml', 'security/ir.model.access.csv', + 'data/ir_sequence.xml', 'views/menus.xml', 'views/partner_views.xml', ], diff --git a/lims_management/data/ir_sequence.xml b/lims_management/data/ir_sequence.xml new file mode 100644 index 0000000..1bb0b3c --- /dev/null +++ b/lims_management/data/ir_sequence.xml @@ -0,0 +1,13 @@ + + + + + + Patient Identifier Sequence + res.partner.patient_identifier + P + 6 + + + + diff --git a/lims_management/data/lims_demo.xml b/lims_management/data/lims_demo.xml index c373c56..145c6d7 100644 --- a/lims_management/data/lims_demo.xml +++ b/lims_management/data/lims_demo.xml @@ -6,7 +6,8 @@ Ana Torres - P0001 + P-A87B01 + Carga Inicial 1985-05-15 female +1-202-555-0174 @@ -16,7 +17,8 @@ Carlos Ruiz - P0002 + P-C45D02 + Carga Inicial 1992-11-20 male +1-202-555-0192 diff --git a/lims_management/models/partner.py b/lims_management/models/partner.py index e691ffe..f90bc73 100644 --- a/lims_management/models/partner.py +++ b/lims_management/models/partner.py @@ -6,6 +6,11 @@ class ResPartner(models.Model): is_patient = fields.Boolean(string="Es Paciente") patient_identifier = fields.Char(string="Identificador de Paciente", copy=False) + origin = fields.Char( + string="Origen", + default='Manual', + help="Este campo indica el origen del registro del paciente (ej. Manual, Carga Inicial)." + ) birthdate_date = fields.Date(string="Fecha de Nacimiento") gender = fields.Selection([ ('male', 'Masculino'), @@ -20,3 +25,10 @@ class ResPartner(models.Model): ('patient_identifier_unique', 'unique(patient_identifier)', 'El identificador del paciente debe ser único.'), ('doctor_license_unique', 'unique(doctor_license)', 'La licencia médica debe ser única.') ] + + @api.model_create_multi + def create(self, vals_list): + for vals in vals_list: + if vals.get('is_patient') and not vals.get('patient_identifier'): + vals['patient_identifier'] = self.env['ir.sequence'].next_by_code('res.partner.patient_identifier') + return super(ResPartner, self).create(vals_list) diff --git a/lims_management/views/partner_views.xml b/lims_management/views/partner_views.xml index de3e73b..4610484 100644 --- a/lims_management/views/partner_views.xml +++ b/lims_management/views/partner_views.xml @@ -12,7 +12,8 @@ - + + From e9ffe7a4bf3ca97e502a796d026aea931bcd294d Mon Sep 17 00:00:00 2001 From: Luis Ernesto Portillo Zaldivar Date: Sun, 13 Jul 2025 22:06:54 -0600 Subject: [PATCH 09/11] =?UTF-8?q?\"feat(#4):=20A=C2=A4ade=20gesti=C2=A2n?= =?UTF-8?q?=20de=20relaci=C2=A2n=20tutor-paciente\"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lims_management/data/lims_demo.xml | 17 +++++++++++++++++ lims_management/views/partner_views.xml | 4 ++++ 2 files changed, 21 insertions(+) diff --git a/lims_management/data/lims_demo.xml b/lims_management/data/lims_demo.xml index 145c6d7..37a1576 100644 --- a/lims_management/data/lims_demo.xml +++ b/lims_management/data/lims_demo.xml @@ -42,5 +42,22 @@ sofia.vargas@clinic.com + + + Laura Mendoza + +1-202-555-0188 + laura.mendoza@example.com + + + + Pedro Infante Jr. + + P-M12E03 + Carga Inicial + + male + + + \ No newline at end of file diff --git a/lims_management/views/partner_views.xml b/lims_management/views/partner_views.xml index 4610484..3897c36 100644 --- a/lims_management/views/partner_views.xml +++ b/lims_management/views/partner_views.xml @@ -22,6 +22,10 @@ + + + + From ccb8a447d89e5633cfb3e1ea6c06f5e12e15a912 Mon Sep 17 00:00:00 2001 From: Luis Ernesto Portillo Zaldivar Date: Sun, 13 Jul 2025 22:44:36 -0600 Subject: [PATCH 10/11] =?UTF-8?q?fix(#4):=20Corregir=20errores=20de=20vist?= =?UTF-8?q?as=20y=20men=C3=BAs=20en=20Odoo=2018?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Se solucionaron los problemas de inicialización y visualización relacionados con las vistas de árbol y las definiciones de menú en Odoo 18. - Se actualizó la sintaxis de la vista de árbol de a . - Se corrigió el 'view_mode' en la acción de ventana a 'list,form'. - Se ajustó el orden de carga de las vistas en __manifest__.py. - Se eliminaron dependencias de módulos no utilizados. --- lims_management/__manifest__.py | 4 +-- lims_management/views/menus.xml | 36 +++++++++++-------------- lims_management/views/partner_views.xml | 14 ++++++++++ 3 files changed, 31 insertions(+), 23 deletions(-) diff --git a/lims_management/__manifest__.py b/lims_management/__manifest__.py index e3116fd..a4a94ac 100644 --- a/lims_management/__manifest__.py +++ b/lims_management/__manifest__.py @@ -16,13 +16,13 @@ 'website': "https://gitea.grupoconsiti.com/luis_portillo/clinical_laboratory", 'category': 'Industries', 'version': '18.0.1.0.0', - 'depends': ['base', 'sale_management', 'stock', 'account'], + 'depends': ['base'], 'data': [ 'security/lims_security.xml', 'security/ir.model.access.csv', 'data/ir_sequence.xml', - 'views/menus.xml', 'views/partner_views.xml', + 'views/menus.xml', ], 'demo': [ 'data/lims_demo.xml', diff --git a/lims_management/views/menus.xml b/lims_management/views/menus.xml index 9b9876a..8583cc9 100644 --- a/lims_management/views/menus.xml +++ b/lims_management/views/menus.xml @@ -7,34 +7,28 @@ name="Laboratorio" sequence="10"/> - - + + + Pacientes + res.partner + list,form + + [('is_patient', '=', True)] + {'default_is_patient': True} + +

+ Crea un nuevo paciente +

+
+
- - - - - - diff --git a/lims_management/views/partner_views.xml b/lims_management/views/partner_views.xml index 3897c36..85e4603 100644 --- a/lims_management/views/partner_views.xml +++ b/lims_management/views/partner_views.xml @@ -1,6 +1,20 @@ + + + res.partner.tree.patient + res.partner + + + + + + + + + + res.partner.form.lims From 3dd835dfcc0e8af37fdfdfcfdc774d29c7068e18 Mon Sep 17 00:00:00 2001 From: Luis Ernesto Portillo Zaldivar Date: Sun, 13 Jul 2025 22:52:19 -0600 Subject: [PATCH 11/11] =?UTF-8?q?\"feat(#4):=20A=C2=A4adir=20men=C2=A3=20y?= =?UTF-8?q?=20vista=20para=20la=20gesti=C2=A2n=20de=20doctores\"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lims_management/views/menus.xml | 22 ++++++++++++++++++++++ lims_management/views/partner_views.xml | 14 ++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/lims_management/views/menus.xml b/lims_management/views/menus.xml index 8583cc9..f6229ec 100644 --- a/lims_management/views/menus.xml +++ b/lims_management/views/menus.xml @@ -30,5 +30,27 @@ action="action_lims_patient" sequence="20"/> + + + Doctores + res.partner + list,form + + [('is_doctor', '=', True)] + {'default_is_doctor': True} + +

+ Crea un nuevo doctor +

+
+
+ + +
diff --git a/lims_management/views/partner_views.xml b/lims_management/views/partner_views.xml index 85e4603..62aa9c4 100644 --- a/lims_management/views/partner_views.xml +++ b/lims_management/views/partner_views.xml @@ -15,6 +15,20 @@
+ + + res.partner.tree.doctor + res.partner + + + + + + + + + + res.partner.form.lims