\"feat(#4): Implementa vista y campos cl¡nicos en res.partner\"

This commit is contained in:
Luis Ernesto Portillo Zaldivar 2025-07-13 20:47:21 -06:00
parent cd8880a624
commit aef6e49c50
4 changed files with 81 additions and 29 deletions

View File

@ -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. 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:** **Formato correcto:**
```bash ```bash
tea comment <NÚMERO_ISSUE> "Tu comentario aquí" tea comment <NÚMERO_ISSUE> "Tu comentario aquí"
``` ```
**Ejemplo:** **Ejemplo:**
```bash ```bash
tea comment 3 "Comentario de prueba" 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`). 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:**
```
<tipo>(#<issue_id>): <descripción breve>
```
- **`<tipo>`:** `feat` (nueva funcionalidad), `fix` (corrección de bug), `docs` (cambios en documentación), `style` (formato), `refactor`, `test`, `chore` (otras tareas).
- **`(<issue_id>)`:** 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 ### Método Recomendado
Utiliza el comando `echo` y una tubería (`|`) para enviar el mensaje a `git commit -F -`. Utiliza el comando `echo` y una tubería (`|`) para enviar el mensaje a `git commit -F -`.
**Commit de una sola línea:** **Commit de una sola línea:**
```bash ```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:** **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 ```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. Esto asegura que el formato del mensaje del commit se preserve correctamente.
--- ---
## Crear un Pull Request ## 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. 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:** **Formato del comando:**
```bash ```bash
tea pulls create --base "<rama_base>" --head "<tu_rama>" --title "<Tipo>(#issue): Título descriptivo" tea pulls create --base "<rama_base>" --head "<tu_rama>" --title "<Tipo>(#issue): Título descriptivo"
``` ```
**Ejemplo:** **Ejemplo:**
```bash ```bash
tea pulls create --base "dev" --head "feature/3-core-setup" --title "feat(#3): Actualiza instrucciones en GEMINI.md" 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. 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 ```bash
docker-compose up -d 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. **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.
Para detener los servicios, utiliza:
```bash ```bash
docker-compose down 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.

View File

@ -7,6 +7,8 @@
<field name="name">Ana Torres</field> <field name="name">Ana Torres</field>
<field name="is_patient" eval="True"/> <field name="is_patient" eval="True"/>
<field name="patient_identifier">P0001</field> <field name="patient_identifier">P0001</field>
<field name="birthdate_date">1985-05-15</field>
<field name="gender">female</field>
<field name="phone">+1-202-555-0174</field> <field name="phone">+1-202-555-0174</field>
<field name="email">ana.torres@example.com</field> <field name="email">ana.torres@example.com</field>
</record> </record>
@ -15,6 +17,8 @@
<field name="name">Carlos Ruiz</field> <field name="name">Carlos Ruiz</field>
<field name="is_patient" eval="True"/> <field name="is_patient" eval="True"/>
<field name="patient_identifier">P0002</field> <field name="patient_identifier">P0002</field>
<field name="birthdate_date">1992-11-20</field>
<field name="gender">male</field>
<field name="phone">+1-202-555-0192</field> <field name="phone">+1-202-555-0192</field>
<field name="email">carlos.ruiz@example.com</field> <field name="email">carlos.ruiz@example.com</field>
</record> </record>

View File

@ -6,6 +6,12 @@ class ResPartner(models.Model):
is_patient = fields.Boolean(string="Es Paciente") is_patient = fields.Boolean(string="Es Paciente")
patient_identifier = fields.Char(string="Identificador de Paciente", copy=False) 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") is_doctor = fields.Boolean(string="Es Médico")
doctor_license = fields.Char(string="Licencia Médica", copy=False) doctor_license = fields.Char(string="Licencia Médica", copy=False)

View File

@ -1,30 +1,29 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<odoo> <odoo>
<data> <data>
<!-- Hereda la vista de formulario para añadir campos de Paciente --> <!-- Hereda la vista de formulario para añadir una pestaña de "Información Clínica" -->
<record id="view_partner_form_patient" model="ir.ui.view"> <record id="view_partner_form_lims" model="ir.ui.view">
<field name="name">res.partner.form.patient</field> <field name="name">res.partner.form.lims</field>
<field name="model">res.partner</field> <field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_partner_form"/> <field name="inherit_id" ref="base.view_partner_form"/>
<field name="arch" type="xml"> <field name="arch" type="xml">
<xpath expr="//field[@name='vat']" position="after"> <xpath expr="//page[@name='internal_notes']" position="before">
<field name="is_patient"/> <page string="Información Clínica" name="clinical_info">
<field name="patient_identifier" invisible="not is_patient"/> <group>
</xpath> <group>
</field> <field name="is_patient"/>
</record> <field name="patient_identifier" invisible="not is_patient"/>
<field name="birthdate_date" invisible="not is_patient"/>
<!-- Hereda la vista de formulario para añadir campos de Médico --> <field name="gender" invisible="not is_patient"/>
<record id="view_partner_form_doctor" model="ir.ui.view"> </group>
<field name="name">res.partner.form.doctor</field> <group>
<field name="model">res.partner</field> <field name="is_doctor"/>
<field name="inherit_id" ref="base.view_partner_form"/> <field name="doctor_license" invisible="not is_doctor"/>
<field name="arch" type="xml"> </group>
<xpath expr="//field[@name='vat']" position="after"> </group>
<field name="is_doctor"/> </page>
<field name="doctor_license" invisible="not is_doctor"/>
</xpath> </xpath>
</field> </field>
</record> </record>
</data> </data>
</odoo> </odoo>