delta_import: desactivar _check_bloqueos y dedup de servicios HIST por codigo (reimport robusto)

This commit is contained in:
2026-09-02 23:45:43 +00:00
parent cfacb23f45
commit 3f6f1c5f8f

View File

@@ -104,9 +104,11 @@ def main():
CitaModel = env.registry['skeen.cita']
Cita = env['skeen.cita'].sudo()
# Desactivar validación de solapamiento durante la importación
# Desactivar validaciones durante la importación
original_check = CitaModel._check_availability
CitaModel._check_availability = lambda self: None
original_bloqueos = CitaModel._check_bloqueos
CitaModel._check_bloqueos = lambda self: None
# ---------- Cachés Odoo ----------
log('Cargando cachés de Odoo...')
@@ -125,6 +127,11 @@ def main():
if name:
service_by_name.setdefault(normalize_name(name), sid)
service_by_code = {}
cr.execute("SELECT id, code FROM skeen_servicio WHERE code IS NOT NULL AND code != ''")
for sid, code in cr.fetchall():
service_by_code[code] = sid
doctor_by_name = {}
cr.execute("SELECT id, name FROM hr_employee")
for eid, name in cr.fetchall():
@@ -153,9 +160,15 @@ def main():
if key in service_by_name:
return service_by_name[key]
code = 'HIST_' + hashlib.md5(key.encode('utf-8')).hexdigest()[:12]
if code in service_by_code:
# Mismo servicio creado en una importación anterior con nombre
# que ya no normaliza igual: reusar por código, no duplicar.
service_by_name[key] = service_by_code[code]
return service_by_code[code]
new_s = Servicio.create({'name': name, 'code': code, 'category': 'tratamiento',
'price': 0, 'duration_min': 30})
service_by_name[key] = new_s.id
service_by_code[code] = new_s.id
return new_s.id
# ---------- Login legacy ----------
@@ -340,6 +353,7 @@ def main():
# Restaurar validación y cerrar
CitaModel._check_availability = original_check
CitaModel._check_bloqueos = original_bloqueos
cr.commit()
cr.close()