Coverage for ingadhoc-odoo-saas-adhoc / saas_provider_upgrade / controllers / main.py: 28%
25 statements
« prev ^ index » next coverage.py v7.13.4, created at 2026-03-09 19:24 +0000
« prev ^ index » next coverage.py v7.13.4, created at 2026-03-09 19:24 +0000
1import json
3from odoo import http
4from odoo.http import request
5from odoo.tools.mail import html_to_inner_content
8class MajorVersionChange(http.Controller):
9 @http.route("/version_changes/<version_from>/<version_to>", type="http", auth="public")
10 def get_version_changes(self, version_from, version_to):
11 """Por como hicimos el patch en odoo module migrate este controlador lo va a llamar siempre saltando una sola version.
12 Si module migrate se llama salteando versions, se va a llamar varias veces saltado de una en una
13 Ahora bien, nos interesa igual tener compatibilidad con pedir varios salteos para renderizar cambios a cliente y/o custom upgrade lines que pongamos
14 Ej. de como llamar a este contralador: /version_changes/130/160
15 """
16 try:
17 version_from = float(version_from) / 10
18 version_to = float(version_to) / 10
19 except:
20 return request.not_found()
21 # si se llama al controlador salteando versiones, con este codigo encontramos todas las versiones entre las version from y to
22 versions = [float(i) for i in range(int(version_from) + 1, int(version_to) + 1)]
23 major_version_ids = request.env["saas.odoo.major_version"].sudo().search([("name", "in", versions)])
24 major_version_change_ids = (
25 request.env["major.version.change"].sudo().search([("major_version_id", "in", major_version_ids.ids)])
26 )
27 dict_changes = self.format_version_changes_ids(major_version_change_ids)
28 json_changes = json.dumps(dict_changes)
29 return request.make_response(json_changes)
31 def format_version_changes_ids(self, records=None):
32 result = dict()
33 if not records:
34 return result
35 for record in records:
36 result[str(record.id)] = {
37 "change_type": record.change_type,
38 "major_version_id": record.major_version_id.name,
39 "model": record.model,
40 "field": record.field,
41 "model_type": record.model_type,
42 "old_name": record.old_name,
43 "new_name": record.new_name,
44 "notes": html_to_inner_content(record.notes or ""),
45 }
46 return result