\"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.
|
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