\"docs: Anadir seccion sobre creacion de datos de demostracion complejos\"
This commit is contained in:
parent
f56b60ad15
commit
93624bc111
88
GEMINI.md
88
GEMINI.md
|
@ -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.
|
||||
|
|
Loading…
Reference in New Issue
Block a user