fase 1 productizacion: capa de configuracion (glosario multi-giro, sucursales y categorias configurables, ajustes de clinica por instancia, colores de marca, horarios, URLs de pago dinamicas) + script de provisioning de instancia nueva con datos demo + frontend consumiendo la config
This commit is contained in:
89
infra/provision/demo_limpiar.py
Executable file
89
infra/provision/demo_limpiar.py
Executable file
@@ -0,0 +1,89 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""Borra los datos de demostración sembrados por `--demo`.
|
||||
|
||||
/root/odoo-venv/bin/python demo_limpiar.py --conf /root/<slug>-odoo.conf --db <db> [--dry-run]
|
||||
|
||||
Usa la lista de ids guardada en ir.config_parameter `skeen.demo.ids` y, como
|
||||
respaldo, los marcadores ('DEMO-' en servicios, referred_by='DEMO' en
|
||||
pacientes, '[DEMO]' en citas/empleados). Pensado para no dejar basura en una
|
||||
instancia de cliente antes de entregarla.
|
||||
"""
|
||||
import argparse
|
||||
import json
|
||||
import sys
|
||||
import traceback
|
||||
|
||||
|
||||
def load_env(conf_path, db_name):
|
||||
sys.path.insert(0, '/root/skeen-odoo')
|
||||
import odoo
|
||||
from odoo.tools import config as odoo_config
|
||||
odoo_config.parse_config(['-c', conf_path, '-d', db_name,
|
||||
'--no-http', '--log-level', 'error'])
|
||||
odoo.service.server.load_server_wide_modules()
|
||||
return odoo, odoo.registry(db_name)
|
||||
|
||||
|
||||
# Orden de borrado: primero lo que depende de lo demás.
|
||||
ORDER = ['skeen.cita', 'skeen.paquete.compra', 'skeen.paquete',
|
||||
'skeen.monedero', 'skeen.servicio', 'res.partner', 'hr.employee']
|
||||
|
||||
|
||||
def main():
|
||||
ap = argparse.ArgumentParser()
|
||||
ap.add_argument('--conf', required=True)
|
||||
ap.add_argument('--db', required=True)
|
||||
ap.add_argument('--dry-run', action='store_true')
|
||||
args = ap.parse_args()
|
||||
|
||||
odoo, registry = load_env(args.conf, args.db)
|
||||
with registry.cursor() as cr:
|
||||
env = odoo.api.Environment(cr, odoo.SUPERUSER_ID, {})
|
||||
ICP = env['ir.config_parameter'].sudo()
|
||||
raw = ICP.get_param('skeen.demo.ids') or '{}'
|
||||
try:
|
||||
ids = json.loads(raw)
|
||||
except Exception:
|
||||
ids = {}
|
||||
|
||||
# respaldo por marcadores cuando no hay ids guardados
|
||||
markers = {}
|
||||
if not any(ids.values()):
|
||||
markers = {
|
||||
'skeen.servicio': [('code', 'like', 'DEMO-%')],
|
||||
'res.partner': [('referred_by', '=', 'DEMO')],
|
||||
'hr.employee': [('notes', 'like', '[DEMO]')],
|
||||
'skeen.cita': [('notes', 'like', '[DEMO]')],
|
||||
}
|
||||
|
||||
for model in ORDER:
|
||||
if model not in env:
|
||||
continue
|
||||
Model = env[model].sudo()
|
||||
recs = Model.browse([])
|
||||
for rid in ids.get(model.split('.')[-1], []):
|
||||
recs |= Model.browse(rid).exists()
|
||||
if model in markers:
|
||||
recs |= Model.search(markers[model])
|
||||
if not recs:
|
||||
continue
|
||||
print('%-22s %d registros' % (model, len(recs)))
|
||||
if not args.dry_run:
|
||||
try:
|
||||
recs.unlink()
|
||||
except Exception as e:
|
||||
print(' no se pudo borrar del todo: %s' % e)
|
||||
|
||||
if not args.dry_run:
|
||||
ICP.set_param('skeen.demo.ids', '{}')
|
||||
cr.commit()
|
||||
print('LIMPIEZA %s' % ('SIMULADA (dry-run)' if args.dry_run else 'OK'))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
try:
|
||||
main()
|
||||
except Exception:
|
||||
traceback.print_exc()
|
||||
sys.exit(1)
|
||||
Reference in New Issue
Block a user