\"docs: Anadir seccion sobre creacion de datos de demostracion complejos\"

This commit is contained in:
Luis Ernesto Portillo Zaldivar 2025-07-14 02:31:23 -06:00
parent f56b60ad15
commit 93624bc111

View File

@ -324,3 +324,91 @@ Interactuar con la base de datos directamente usando `psql` a través de `docker
```
Este método evita los problemas de entrecomillado y permite ejecutar consultas complejas de manera confiable.
---
## Creación de Datos de Demostración Complejos
Cuando los datos de demostración tienen dependencias complejas o requieren lógica de negocio (por ejemplo, cambiar el estado de un registro, o crear registros relacionados que dependen de otros), el uso de archivos XML puede ser limitado y propenso a errores de carga.
En estos casos, es preferible utilizar un script de Python para crear los datos de demostración.
### Procedimiento
1. **Crear un Script de Python:**
Crea un script que utilice el ORM de Odoo para crear los registros de demostración. Esto permite utilizar la lógica de negocio de los modelos, como los métodos `create` y `write`, y buscar registros existentes con `search` y `ref`.
**Ejemplo (`create_lab_requests.py`):**
```python
import odoo
def create_lab_requests(cr):
env = odoo.api.Environment(cr, odoo.SUPERUSER_ID, {})
# Eliminar órdenes de venta de demostración no deseadas
unwanted_orders = env['sale.order'].search([('name', 'in', ['S00001', ...])])
for order in unwanted_orders:
try:
order.action_cancel()
except Exception:
pass
try:
unwanted_orders.unlink()
except Exception:
pass
# Crear solicitudes de laboratorio
patient1 = env.ref('lims_management.demo_patient_1')
doctor1 = env.ref('lims_management.demo_doctor_1')
hemograma = env.ref('lims_management.analysis_hemograma')
env['sale.order'].create({
'partner_id': patient1.id,
'doctor_id': doctor1.id,
'is_lab_request': True,
'order_line': [
(0, 0, {'product_id': hemograma.product_variant_id.id, 'product_uom_qty': 1})
]
})
if __name__ == '__main__':
db_name = 'lims_demo'
registry = odoo.registry(db_name)
with registry.cursor() as cr:
create_lab_requests(cr)
cr.commit()
```
2. **Integrar el Script en la Inicialización:**
Modifica el script `init_odoo.py` para que ejecute el script de creación de datos después de que Odoo haya terminado de instalar los módulos.
**En `docker-compose.yml`**, asegúrate de que el script esté disponible en el contenedor `odoo_init`:
```yaml
volumes:
- ./create_lab_requests.py:/app/create_lab_requests.py
```
**En `init_odoo.py`**, añade la lógica para ejecutar el script:
```python
# --- Lógica para crear datos de demostración personalizados ---
print("Creando datos de demostración complejos...")
sys.stdout.flush()
with open("/app/create_lab_requests.py", "r") as f:
script_content = f.read()
create_requests_command = f"""
odoo shell -c {ODOO_CONF} -d {DB_NAME} <<'EOF'
{script_content}
EOF
"""
result = subprocess.run(
create_requests_command,
shell=True,
capture_output=True,
text=True,
check=False
)
```
Este enfoque proporciona un control total sobre la creación de datos de demostración y evita los problemas de dependencia y orden de carga de los archivos XML.