diff --git a/GEMINI.md b/GEMINI.md index da0960e..c496a6a 100644 --- a/GEMINI.md +++ b/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.