- Frontend React (SKEEN Brand) con Vite, TypeScript, Tailwind - Frontend Homenest (versión alternativa) - Módulos Odoo 17 custom (citas, pacientes, monedero, pagos, ventas, inventario, whatsapp) - WACRM fork (Next.js 16 + Supabase) - Hermes + Bridge + Skills (Qwen3.6 via Nan Builders) - Scripts de migración y operación - Documentación extensiva en docs/
103 lines
5.5 KiB
Python
Executable File
103 lines
5.5 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
"""Script para crear datos de prueba en Odoo SKEEN"""
|
|
|
|
import xmlrpc.client
|
|
|
|
# Conexión a Odoo
|
|
url = 'http://localhost:8069'
|
|
db = 'skeen_odoo'
|
|
username = 'admin'
|
|
password = 'admin'
|
|
|
|
# Autenticación
|
|
common = xmlrpc.client.ServerProxy(f'{url}/xmlrpc/2/common')
|
|
uid = common.authenticate(db, username, password, {})
|
|
|
|
if not uid:
|
|
print("Error: No se pudo autenticar")
|
|
exit(1)
|
|
|
|
print(f"Autenticado como uid={uid}")
|
|
|
|
models = xmlrpc.client.ServerProxy(f'{url}/xmlrpc/2/object')
|
|
|
|
# 1. Crear servicios
|
|
servicios = [
|
|
{'name': 'Consulta Dermatologica General', 'code': 'CONS-GEN', 'category': 'consulta', 'price': 800, 'duration_min': 30, 'description': 'Evaluación completa de la piel'},
|
|
{'name': 'Consulta de Valoracion Gratuita', 'code': 'CONS-VAL', 'category': 'consulta', 'price': 0, 'duration_min': 15, 'description': 'Evaluación breve sin compromiso'},
|
|
{'name': 'Tratamiento Facial para Acne', 'code': 'TRAT-ACN', 'category': 'tratamiento', 'price': 1500, 'duration_min': 60, 'description': 'Limpieza profunda y extracción'},
|
|
{'name': 'Peel Quimico', 'code': 'PROC-PEEL', 'category': 'procedimiento', 'price': 1500, 'duration_min': 30, 'description': 'Exfoliación química para renovar piel'},
|
|
{'name': 'Depilacion Laser', 'code': 'PROC-LAS', 'category': 'procedimiento', 'price': 500, 'duration_min': 15, 'description': 'Depilación laser por zona'},
|
|
{'name': 'Tratamiento Anti-Edad', 'code': 'TRAT-ANTI', 'category': 'tratamiento', 'price': 2500, 'duration_min': 75, 'description': 'Microdermoabrasión y vitaminas'},
|
|
]
|
|
|
|
for s in servicios:
|
|
existing = models.execute_kw(db, uid, password, 'skeen.servicio', 'search', [[['code', '=', s['code']]]])
|
|
if not existing:
|
|
sid = models.execute_kw(db, uid, password, 'skeen.servicio', 'create', [s])
|
|
print(f"Servicio creado: {s['name']} (ID: {sid})")
|
|
else:
|
|
print(f"Servicio ya existe: {s['name']}")
|
|
|
|
# 2. Crear pacientes
|
|
pacientes = [
|
|
{'name': 'Sofia Garcia', 'phone': '+526641234567', 'email': 'sofia@email.com', 'is_patient': True, 'source': 'whatsapp', 'blood_type': 'o+', 'allergies': 'Ninguna'},
|
|
{'name': 'Maria Lopez', 'phone': '+526642345678', 'email': 'maria@email.com', 'is_patient': True, 'source': 'facebook', 'blood_type': 'a+', 'allergies': 'Penicilina'},
|
|
{'name': 'Ana Martinez', 'phone': '+526643456789', 'email': 'ana@email.com', 'is_patient': True, 'source': 'instagram', 'blood_type': 'b+', 'allergies': 'Ninguna'},
|
|
{'name': 'Carmen Ruiz', 'phone': '+526644567890', 'email': 'carmen@email.com', 'is_patient': True, 'source': 'google', 'blood_type': 'ab+', 'allergies': 'Látex'},
|
|
{'name': 'Laura Hernandez', 'phone': '+526645678901', 'email': 'laura@email.com', 'is_patient': True, 'source': 'referral', 'blood_type': 'o-', 'allergies': 'Ninguna'},
|
|
]
|
|
|
|
for p in pacientes:
|
|
existing = models.execute_kw(db, uid, password, 'res.partner', 'search', [[['phone', '=', p['phone']]]])
|
|
if not existing:
|
|
pid = models.execute_kw(db, uid, password, 'res.partner', 'create', [p])
|
|
print(f"Paciente creado: {p['name']} (ID: {pid})")
|
|
else:
|
|
print(f"Paciente ya existe: {p['name']}")
|
|
|
|
# 3. Crear citas
|
|
from datetime import datetime, timedelta
|
|
hoy = datetime.now().date()
|
|
manana = hoy + timedelta(days=1)
|
|
|
|
# Obtener IDs de pacientes y servicios
|
|
partner_ids = models.execute_kw(db, uid, password, 'res.partner', 'search', [[['is_patient', '=', True]]])
|
|
servicio_ids = models.execute_kw(db, uid, password, 'skeen.servicio', 'search', [[]])
|
|
|
|
if partner_ids and servicio_ids:
|
|
citas = [
|
|
{'partner_id': partner_ids[0], 'servicio_id': servicio_ids[0], 'date': str(hoy), 'time': 9.0, 'state': 'confirmed'},
|
|
{'partner_id': partner_ids[1], 'servicio_id': servicio_ids[2], 'date': str(hoy), 'time': 10.0, 'state': 'confirmed'},
|
|
{'partner_id': partner_ids[2], 'servicio_id': servicio_ids[3], 'date': str(hoy), 'time': 11.5, 'state': 'pending'},
|
|
{'partner_id': partner_ids[3], 'servicio_id': servicio_ids[4], 'date': str(manana), 'time': 14.0, 'state': 'confirmed'},
|
|
{'partner_id': partner_ids[4], 'servicio_id': servicio_ids[1], 'date': str(manana), 'time': 16.0, 'state': 'confirmed'},
|
|
]
|
|
|
|
for c in citas:
|
|
existing = models.execute_kw(db, uid, password, 'skeen.cita', 'search', [
|
|
[['partner_id', '=', c['partner_id']], ['date', '=', c['date']], ['time', '=', c['time']]]
|
|
])
|
|
if not existing:
|
|
cid = models.execute_kw(db, uid, password, 'skeen.cita', 'create', [c])
|
|
print(f"Cita creada: ID {cid}")
|
|
else:
|
|
print(f"Cita ya existe para fecha {c['date']} hora {c['time']}")
|
|
|
|
# 4. Crear monederos
|
|
for pid in partner_ids:
|
|
existing = models.execute_kw(db, uid, password, 'skeen.monedero', 'search', [[['partner_id', '=', pid]]])
|
|
if not existing:
|
|
mid = models.execute_kw(db, uid, password, 'skeen.monedero', 'create', [
|
|
{'partner_id': pid, 'points': (pid % 10) * 100 + 50}
|
|
])
|
|
print(f"Monedero creado para paciente {pid}: {(pid % 10) * 100 + 50} pts")
|
|
else:
|
|
print(f"Monedero ya existe para paciente {pid}")
|
|
|
|
print("\n=== Datos de prueba creados exitosamente ===")
|
|
print(f"Servicios: {len(models.execute_kw(db, uid, password, 'skeen.servicio', 'search', [[]]))}")
|
|
print(f"Pacientes: {len(models.execute_kw(db, uid, password, 'res.partner', 'search', [[['is_patient', '=', True]]]))}")
|
|
print(f"Citas: {len(models.execute_kw(db, uid, password, 'skeen.cita', 'search', [[]]))}")
|
|
print(f"Monederos: {len(models.execute_kw(db, uid, password, 'skeen.monedero', 'search', [[]]))}")
|