From f71c4d2c59e5eddc4184e90749012de664db7226 Mon Sep 17 00:00:00 2001 From: NoeBerdoz Date: Tue, 12 May 2026 15:27:31 +0200 Subject: [PATCH] [MIG] T3173: surgical revert of integrated translation platform, PR #2094 frontend (T2913) - Delete static/src/frontend/** (PR #2094 in-Odoo OWL portal frontend) - Delete templates/portal_templates.xml + PR-added menu icons - Drop web.assets_frontend block from manifest - controllers/main.py: restored file_open serve at /translation-platform - _compute_translation_url: reads sbc_translation.webapp_base_url ICP, falls back to /translation-platform (the controller's mount point); URL path /letters/letter-edit/ matches the webapp's routes.ts entry - correspondence.remove_local_translate / resubmit_to_translation: thin forwarders to the action_* methods so the webapp keeps calling the v14 names while view buttons keep the action_* prefix --- sbc_translation/__manifest__.py | 8 - sbc_translation/controllers/main.py | 84 ++----- sbc_translation/models/correspondence.py | 40 +++- sbc_translation/static/img/menu_icon.png | Bin 34663 -> 0 bytes .../static/img/menu_icon_small.png | Bin 6431 -> 0 bytes .../frontend/components/tp_child_modal.esm.js | 21 -- .../frontend/components/tp_child_modal.xml | 43 ---- .../components/tp_content_editor.esm.js | 52 ----- .../frontend/components/tp_content_editor.xml | 73 ------ .../components/tp_languages_pick_modal.esm.js | 122 ---------- .../components/tp_languages_pick_modal.xml | 85 ------- .../components/tp_letter_viewer.esm.js | 61 ----- .../frontend/components/tp_letter_viewer.xml | 175 -------------- .../src/frontend/components/tp_loader.esm.js | 21 -- .../src/frontend/components/tp_loader.xml | 25 -- .../src/frontend/components/tp_modal.esm.js | 72 ------ .../src/frontend/components/tp_modal.xml | 48 ---- .../components/tp_signal_problem.esm.js | 70 ------ .../frontend/components/tp_signal_problem.xml | 26 --- .../components/tp_translator_button.esm.js | 40 ---- .../components/tp_translator_button.xml | 42 ---- .../src/frontend/models/letter_dao.esm.js | 221 ------------------ .../src/frontend/models/settings_dao.esm.js | 46 ---- .../src/frontend/models/translator_dao.esm.js | 146 ------------ .../static/src/frontend/notification.esm.js | 65 ------ .../static/src/frontend/pages/tp_home.esm.js | 155 ------------ .../static/src/frontend/pages/tp_home.xml | 127 ---------- .../src/frontend/pages/tp_letter_edit.esm.js | 170 -------------- .../src/frontend/pages/tp_letter_edit.xml | 70 ------ .../src/frontend/pages/tp_letters.esm.js | 130 ----------- .../static/src/frontend/pages/tp_letters.xml | 154 ------------ .../src/frontend/pages/tp_translators.esm.js | 120 ---------- .../src/frontend/pages/tp_translators.xml | 114 --------- .../static/src/frontend/rpc.esm.js | 89 ------- .../src/frontend/translation_platform.css | 87 ------- .../src/frontend/translation_platform.esm.js | 126 ---------- .../src/frontend/translation_platform.xml | 111 --------- .../templates/portal_templates.xml | 55 ----- 38 files changed, 57 insertions(+), 3037 deletions(-) delete mode 100644 sbc_translation/static/img/menu_icon.png delete mode 100644 sbc_translation/static/img/menu_icon_small.png delete mode 100644 sbc_translation/static/src/frontend/components/tp_child_modal.esm.js delete mode 100644 sbc_translation/static/src/frontend/components/tp_child_modal.xml delete mode 100644 sbc_translation/static/src/frontend/components/tp_content_editor.esm.js delete mode 100644 sbc_translation/static/src/frontend/components/tp_content_editor.xml delete mode 100644 sbc_translation/static/src/frontend/components/tp_languages_pick_modal.esm.js delete mode 100644 sbc_translation/static/src/frontend/components/tp_languages_pick_modal.xml delete mode 100644 sbc_translation/static/src/frontend/components/tp_letter_viewer.esm.js delete mode 100644 sbc_translation/static/src/frontend/components/tp_letter_viewer.xml delete mode 100644 sbc_translation/static/src/frontend/components/tp_loader.esm.js delete mode 100644 sbc_translation/static/src/frontend/components/tp_loader.xml delete mode 100644 sbc_translation/static/src/frontend/components/tp_modal.esm.js delete mode 100644 sbc_translation/static/src/frontend/components/tp_modal.xml delete mode 100644 sbc_translation/static/src/frontend/components/tp_signal_problem.esm.js delete mode 100644 sbc_translation/static/src/frontend/components/tp_signal_problem.xml delete mode 100644 sbc_translation/static/src/frontend/components/tp_translator_button.esm.js delete mode 100644 sbc_translation/static/src/frontend/components/tp_translator_button.xml delete mode 100644 sbc_translation/static/src/frontend/models/letter_dao.esm.js delete mode 100644 sbc_translation/static/src/frontend/models/settings_dao.esm.js delete mode 100644 sbc_translation/static/src/frontend/models/translator_dao.esm.js delete mode 100644 sbc_translation/static/src/frontend/notification.esm.js delete mode 100644 sbc_translation/static/src/frontend/pages/tp_home.esm.js delete mode 100644 sbc_translation/static/src/frontend/pages/tp_home.xml delete mode 100644 sbc_translation/static/src/frontend/pages/tp_letter_edit.esm.js delete mode 100644 sbc_translation/static/src/frontend/pages/tp_letter_edit.xml delete mode 100644 sbc_translation/static/src/frontend/pages/tp_letters.esm.js delete mode 100644 sbc_translation/static/src/frontend/pages/tp_letters.xml delete mode 100644 sbc_translation/static/src/frontend/pages/tp_translators.esm.js delete mode 100644 sbc_translation/static/src/frontend/pages/tp_translators.xml delete mode 100644 sbc_translation/static/src/frontend/rpc.esm.js delete mode 100644 sbc_translation/static/src/frontend/translation_platform.css delete mode 100644 sbc_translation/static/src/frontend/translation_platform.esm.js delete mode 100644 sbc_translation/static/src/frontend/translation_platform.xml delete mode 100644 sbc_translation/templates/portal_templates.xml diff --git a/sbc_translation/__manifest__.py b/sbc_translation/__manifest__.py index f38d1541c..6f214f104 100644 --- a/sbc_translation/__manifest__.py +++ b/sbc_translation/__manifest__.py @@ -36,13 +36,6 @@ "license": "AGPL-3", "website": "https://github.com/CompassionCH/compassion-modules", "depends": ["sbc_compassion", "partner_contact_birthdate", "portal"], - "assets": { - "web.assets_frontend": [ - "sbc_translation/static/src/frontend/**/*.css", - "sbc_translation/static/src/frontend/**/*.xml", - "sbc_translation/static/src/frontend/**/*.esm.js", - ], - }, "data": [ "security/ir_groups.xml", "security/ir.model.access.csv", @@ -53,7 +46,6 @@ "data/mail_template.xml", "data/update_translation_priority_cron.xml", "data/queue_job.xml", - "templates/portal_templates.xml", "views/translation_user_view.xml", "views/correspondence_view.xml", "views/translation_pool_view.xml", diff --git a/sbc_translation/controllers/main.py b/sbc_translation/controllers/main.py index cfdc7aaf2..0306b508e 100644 --- a/sbc_translation/controllers/main.py +++ b/sbc_translation/controllers/main.py @@ -1,6 +1,6 @@ ############################################################################## # -# Copyright (C) 2023 Compassion CH (http://www.compassion.ch) +# Copyright (C) 2023-2026 Compassion CH (http://www.compassion.ch) # Releasing children from poverty in Jesus' name # # The licence is in the file __manifest__.py @@ -11,75 +11,31 @@ from werkzeug.utils import redirect from odoo import http -from odoo.http import request - -from odoo.addons.portal.controllers.portal import CustomerPortal +from odoo.tools import file_open _logger = logging.getLogger(__name__) -class TranslationPlatformController(CustomerPortal): - @http.route( - "/my/translation-platform", - type="http", - auth="user", - website=True, - ) - def translation_platform_portal(self, **kwargs): - """ - Portal page for the Translation Platform OWL app. - Only accessible to authenticated users who belong to the - sbc_translation.group_user group. - """ - if not request.env.user.has_group("sbc_translation.group_user"): - return redirect("/my") - return request.render("sbc_translation.portal_translation_platform", {}) - +class TranslationPlatformController(http.Controller): @http.route( ["/translation-platform", "/translation-platform/"], type="http", - auth="user", - website=True, + auth="public", ) - def translation_platform_legacy(self, page="", **kwargs): + def translation_platform(self, page=""): + """Serve the built translation-platform-web SPA from + `static/tp/`. + + `static/tp/` is the destination for the `npm run build` + output of the external translation-platform-web repo: copy + the `dist/` folder there at release time. The webapp itself + does client-side routing; this controller only serves + `index.html` for app routes and redirects asset URLs into + `/sbc_translation/static/tp/...`. """ - Legacy route: redirect old standalone-app URLs to the new portal page. - """ - return redirect("/my/translation-platform", 301) - - def _prepare_home_portal_values(self, counters): - values = super()._prepare_home_portal_values(counters) - if not request.env.user.has_group("sbc_translation.group_user"): - return values - partner = request.env.user.partner_id - translator = request.env["translation.user"].search( - [("partner_id", "=", partner.id)] - ) - if translator and "letters_to_translate" in counters: - if translator.translation_skills: - nb_letters = request.env["correspondence"].search_count( - [ - ("state", "=", "Global Partner translation queue"), - ("translation_status", "=", "to do"), - ("new_translator_id", "=", False), - ( - "translation_competence_id.skill_ids", - "in", - translator.translation_skills.ids, - ), - ] - ) - values["letters_to_translate"] = nb_letters - else: - values["letters_to_translate"] = 1 - if translator and "letters_in_progress" in counters: - nb_letters = request.env["correspondence"].search_count( - [ - ("state", "=", "Global Partner translation queue"), - ("translation_status", "!=", "done"), - ("new_translator_id", "=", translator.id), - ] - ) - values["letters_in_progress"] = nb_letters - values["translator"] = translator - return values + if ( + "assets" in page or page.endswith(".png") or page.endswith(".jpg") + ): + return redirect(f"/sbc_translation/static/tp/{page}") + with file_open("sbc_translation/static/tp/index.html") as app: + return app.read() diff --git a/sbc_translation/models/correspondence.py b/sbc_translation/models/correspondence.py index 1182180f3..d75009c8a 100644 --- a/sbc_translation/models/correspondence.py +++ b/sbc_translation/models/correspondence.py @@ -122,11 +122,28 @@ def _compute_translation_priority_name(self): ) def _compute_translation_url(self): - base_url = self.env["ir.config_parameter"].sudo().get_param("web.base.url", "") - base_url = base_url.rstrip("/") + """Build the link translators click to open this letter in + the webapp. + + The base URL is read from the system parameter + `sbc_translation.webapp_base_url`. If unset, the webapp is + assumed to be served by Odoo itself at `/translation-platform` + (see `controllers/main.py`), and the link falls back to + `/translation-platform`. + + Set the parameter to point at an external host + (e.g. `http://localhost:5173` for `npm run dev`) when the + webapp is not served by Odoo. + """ + icp = self.env["ir.config_parameter"].sudo() + webapp_url = icp.get_param("sbc_translation.webapp_base_url") + if not webapp_url: + base_url = icp.get_param("web.base.url", "").rstrip("/") + webapp_url = f"{base_url}/translation-platform" + webapp_url = webapp_url.rstrip("/") for letter in self: letter.translation_url = ( - f"{base_url}/odoo/translation-platform?letterId={letter.id}" + f"{webapp_url}/letters/letter-edit/{letter.id}" ) def _compute_paragraph_ids(self): @@ -564,6 +581,13 @@ def submit_translation(self, letter_elements, translator_id=None) -> bool: return True def action_approve_translation(self): + """Manager-side approval of a letter in `to validate` status. + + Marks the translator's skill for this letter's competence as + verified (if not already), clears any reported translation + issue, records the current user as supervisor, and runs the + post-processing step that ships the letter on. + """ for letter in self: skill_to_validate = letter.new_translator_id.translation_skills.filtered( lambda s, _letter=letter: s.competence_id @@ -619,6 +643,16 @@ def list_letters(self): """API call to fetch letters to translate""" return [letter.get_letter_info() for letter in self.sorted("scanned_date")] + # Webapp-facing aliases for the action_* methods. + # translation-platform-web calls these by their unprefixed names; + # the action_* names stay for backend button bindings (Odoo + # convention). + def remove_local_translate(self): + return self.action_remove_local_translate() + + def resubmit_to_translation(self): + return self.action_resubmit_to_translation() + def get_letter_info(self): """Translation Platform API for fetching letter data.""" self.ensure_one() diff --git a/sbc_translation/static/img/menu_icon.png b/sbc_translation/static/img/menu_icon.png deleted file mode 100644 index 0dfa89b60a9ddf0c2cfa0a982f991b978b21da27..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34663 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 diff --git a/sbc_translation/static/img/menu_icon_small.png b/sbc_translation/static/img/menu_icon_small.png deleted file mode 100644 index 445d02e3f40ed1e4e85182a8149132f4eae67b28..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6431 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 diff --git a/sbc_translation/static/src/frontend/components/tp_child_modal.esm.js b/sbc_translation/static/src/frontend/components/tp_child_modal.esm.js deleted file mode 100644 index 6652af45e..000000000 --- a/sbc_translation/static/src/frontend/components/tp_child_modal.esm.js +++ /dev/null @@ -1,21 +0,0 @@ -import { Component } from "@odoo/owl"; -import { TpModal } from "./tp_modal.esm"; - -/** - * Child protection policy modal. - * Props: - * active {Boolean} - * onClose {Function} - */ -export class TpChildModal extends Component { - static template = "sbc_translation.TpChildModal"; - - static components = { TpModal }; - - static props = { - active: { type: Boolean }, - onClose: { type: Function }, - }; -} - -export default TpChildModal; diff --git a/sbc_translation/static/src/frontend/components/tp_child_modal.xml b/sbc_translation/static/src/frontend/components/tp_child_modal.xml deleted file mode 100644 index 422d500c6..000000000 --- a/sbc_translation/static/src/frontend/components/tp_child_modal.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - - - -
-
Expected/acceptable behaviors:
-
    -
  • I will demonstrate the proper respect and dignity of all children and will demonstrate Jesus's love and care for them, regardless of their gender, age, race, religion, social background, culture, special need or disability.
  • -
  • I will maintain appropriate and reasonable expectations for children based on their age and ability level.
  • -
  • I will engage in age-appropriate communication with beneficiaries.
  • -
  • I will submit to the appropriate background or police checks as permissible by law prior to face-to-face contact with beneficiaries.
  • -
  • I will engage in activities with beneficiaries only in open or visible places, and in the event that an activity needs to take place in an enclosed space, I will ensure that at least one other approved adult is present.
  • -
  • If I witness child abuse, know a child is in danger, observe any concerning behaviors from colleagues, partners or other representatives, or a child comes to me with a report of abuse, I will take it seriously and report it to the proper staff or relevant authorities.
  • -
  • I will keep all information about child protection investigations confidential, keeping in mind privacy and dignity concerns of all involved.
  • -
  • I will contribute to building an environment where children are respected and encouraged to discuss their concerns and rights.
  • -
  • I will follow Compassion's rules about communication with beneficiaries, including social media interaction.
  • -
-
Unacceptable behaviors:
-
    -
  • I will not solicit a romantic/dating relationship and will never engage in sexual/sexually suggestive behavior with any beneficiary, regardless of age.
  • -
  • I will never engage in sexual/sexually suggestive behavior with any child under age 18, regardless of the legal age of consent in-country.
  • -
  • I will never use language that is verbally/emotionally abusive, sexually suggestive, degrading, humiliating, shaming or is otherwise culturally inappropriate with a beneficiary.
  • -
  • I will not touch beneficiaries in an inappropriate or culturally insensitive way.
  • -
  • I will never use any kind of physical discipline or physical punishment as a method of correction for beneficiaries.
  • -
  • I will never travel alone with a beneficiary, without an approved representative or prior approval, except in a life-threatening emergency.
  • -
  • I will not hire any child in any harmful form of child labor and follow local laws regarding child employment.
  • -
  • I will not gather, disclose or support the disclosure of information about beneficiaries or their families without prior, express permission.
  • -
-
-

Child Protection Videos

- -
-
-
-
- -
diff --git a/sbc_translation/static/src/frontend/components/tp_content_editor.esm.js b/sbc_translation/static/src/frontend/components/tp_content_editor.esm.js deleted file mode 100644 index 69dd18fc9..000000000 --- a/sbc_translation/static/src/frontend/components/tp_content_editor.esm.js +++ /dev/null @@ -1,52 +0,0 @@ -import { Component, useState } from "@odoo/owl"; -import { TpModal } from "./tp_modal.esm"; - -/** - * Tips modal showing translation best practices. - * Props: - * active {Boolean} - * onClose {Function} - */ -class TpTipsModal extends Component { - static template = "sbc_translation.TpTipsModal"; - static components = { TpModal }; - static props = { - active: { type: Boolean }, - onClose: { type: Function }, - }; -} - -/** - * Content editor for translating individual paragraphs. - * Props: - * letter {Object} - letter data with translatedElements array - */ -export class TpContentEditor extends Component { - static template = "sbc_translation.TpContentEditor"; - - static components = { TpModal, TpTipsModal }; - - static props = { - letter: { type: Object }, - }; - - state = useState({ - sourceElem: undefined, - showTips: false, - }); - - openSource(elemId) { - const elem = this.props.letter.translatedElements.find( - (e) => e.id === elemId, - ); - if (elem && elem.type === "paragraph") { - this.state.sourceElem = elem.source || ""; - } - } - - openTips() { - this.state.showTips = true; - } -} - -export default TpContentEditor; diff --git a/sbc_translation/static/src/frontend/components/tp_content_editor.xml b/sbc_translation/static/src/frontend/components/tp_content_editor.xml deleted file mode 100644 index 1c529f711..000000000 --- a/sbc_translation/static/src/frontend/components/tp_content_editor.xml +++ /dev/null @@ -1,73 +0,0 @@ - - - - - - -
-
    -
  • Keep the same tone and emotional register as the source text.
  • -
  • Do not paraphrase – translate as closely as possible.
  • -
  • Preserve paragraph breaks from the source.
  • -
  • If the source text is unclear, add a comment explaining the issue.
  • -
  • Names of people and places should be kept as they appear.
  • -
  • If you're unsure about a phrase, use the comment field to flag it.
  • -
-
-
-
- - - -
-
- -
- — Page Break — -
- -
-
-
Translated Content
-