diff --git a/.hgtags b/.hgtags index 8b8413ec0b2009b8c386a73b95414f68f9dc1c3d_LmhndGFncw==..bea2d255368c74fbae5a91e426bbd7eebe665e22_LmhndGFncw== 100644 --- a/.hgtags +++ b/.hgtags @@ -38,3 +38,4 @@ f4028ddaf01b66f895d74ddf1d0dac95635f5b5e 17.0.1.4.1 1ee5e8b99e8a2b52f3877d3a8394bd2514b5ff05 17.0.1.4.1.1 26ba3f1cae7afe29f496435ac1ad714f73b0e5c5 17.0.1.4.1.2 +5f6c4cb70c0e0e89f7adaa7063a4ca16841ed490 17.0.1.5.0 diff --git a/NEWS.rst b/NEWS.rst index 8b8413ec0b2009b8c386a73b95414f68f9dc1c3d_TkVXUy5yc3Q=..bea2d255368c74fbae5a91e426bbd7eebe665e22_TkVXUy5yc3Q= 100644 --- a/NEWS.rst +++ b/NEWS.rst @@ -2,6 +2,11 @@ Changelog ========= +17.0.1.5.0 +---------- + +Fix prop validation and refactor placeholder logic. + 17.0.1.4.1 ---------- diff --git a/__manifest__.py b/__manifest__.py index 8b8413ec0b2009b8c386a73b95414f68f9dc1c3d_X19tYW5pZmVzdF9fLnB5..bea2d255368c74fbae5a91e426bbd7eebe665e22_X19tYW5pZmVzdF9fLnB5 100644 --- a/__manifest__.py +++ b/__manifest__.py @@ -21,7 +21,7 @@ { "name": "Redner", "license": "AGPL-3", - "version": "17.0.1.4.1", + "version": "17.0.1.5.0", "category": "Reporting", "author": "XCG Consulting", "website": "https://orbeet.io/", diff --git a/i18n/fr.po b/i18n/fr.po index 8b8413ec0b2009b8c386a73b95414f68f9dc1c3d_aTE4bi9mci5wbw==..bea2d255368c74fbae5a91e426bbd7eebe665e22_aTE4bi9mci5wbw== 100644 --- a/i18n/fr.po +++ b/i18n/fr.po @@ -6,8 +6,8 @@ msgstr "" "Project-Id-Version: Odoo Server 17.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-12-18 16:34+0000\n" -"PO-Revision-Date: 2024-12-18 16:36+0000\n" +"POT-Creation-Date: 2025-01-29 20:00+0000\n" +"PO-Revision-Date: 2025-01-29 20:03+0000\n" "Last-Translator: Axel PREL <axel.prel@xcg-consulting.fr>\n" "Language-Team: XCG Consulting\n" "Language: fr\n" @@ -20,9 +20,10 @@ #. module: redner #. odoo-python #: code:addons/redner/models/redner_template.py:0 +#, python-format msgid "%s (copy)" msgstr "%s (copie)" #. module: redner #. odoo-python #: code:addons/redner/models/ir_actions_report.py:0 @@ -23,9 +24,10 @@ msgid "%s (copy)" msgstr "%s (copie)" #. module: redner #. odoo-python #: code:addons/redner/models/ir_actions_report.py:0 +#, python-format msgid "(Native)" msgstr "(Natif)" @@ -45,21 +47,5 @@ msgstr "Archivé" #. module: redner -#: model_terms:ir.ui.view,arch_db:redner.view_expression_builder_wizard_form -msgid "Build Expression" -msgstr "Construire l'expression" - -#. module: redner -#: model_terms:ir.ui.view,arch_db:redner.redner_report_view -#: model_terms:ir.ui.view,arch_db:redner.view_email_template_form -msgid "Build expression" -msgstr "Construire l'expression" - -#. module: redner -#: model_terms:ir.ui.view,arch_db:redner.view_expression_builder_wizard_form -msgid "Cancel" -msgstr "Annuler" - -#. module: redner #. odoo-python #: code:addons/redner/redner.py:0 @@ -64,8 +50,9 @@ #. odoo-python #: code:addons/redner/redner.py:0 +#, python-format msgid "Cannot Establish a connection to server" msgstr "La connexion au serveur ne peut pas être établie" #. module: redner #. odoo-python #: code:addons/redner/redner.py:0 @@ -66,9 +53,10 @@ msgid "Cannot Establish a connection to server" msgstr "La connexion au serveur ne peut pas être établie" #. module: redner #. odoo-python #: code:addons/redner/redner.py:0 +#, python-format msgid "" "Cannot find redner config url. Please add it in odoo.conf or in ir." "config_parameter" @@ -82,11 +70,6 @@ msgstr "Le code pour le template redner mjml doit être ajouté ici" #. module: redner -#: model:ir.model.fields,field_description:redner.field_expression_builder_field__field_comodel_name -msgid "Comodel Name" -msgstr "Nom du modèle relié" - -#. module: redner #: model:ir.model.fields.selection,name:redner.selection__redner_substitution__converter__constant msgid "Constant value" msgstr "Valeur constante" @@ -97,8 +80,6 @@ msgstr "Convertisseur" #. module: redner -#: model:ir.model.fields,field_description:redner.field_expression_builder_field__create_uid -#: model:ir.model.fields,field_description:redner.field_expression_builder_wizard__create_uid #: model:ir.model.fields,field_description:redner.field_redner_report__create_uid #: model:ir.model.fields,field_description:redner.field_redner_substitution__create_uid #: model:ir.model.fields,field_description:redner.field_redner_template__create_uid @@ -107,8 +88,6 @@ msgstr "Créé par" #. module: redner -#: model:ir.model.fields,field_description:redner.field_expression_builder_field__create_date -#: model:ir.model.fields,field_description:redner.field_expression_builder_wizard__create_date #: model:ir.model.fields,field_description:redner.field_redner_report__create_date #: model:ir.model.fields,field_description:redner.field_redner_substitution__create_date #: model:ir.model.fields,field_description:redner.field_redner_template__create_date @@ -134,8 +113,6 @@ msgstr "Description du modèle" #. module: redner -#: model:ir.model.fields,field_description:redner.field_expression_builder_field__display_name -#: model:ir.model.fields,field_description:redner.field_expression_builder_wizard__display_name #: model:ir.model.fields,field_description:redner.field_redner_report__display_name #: model:ir.model.fields,field_description:redner.field_redner_substitution__display_name #: model:ir.model.fields,field_description:redner.field_redner_template__display_name @@ -144,11 +121,6 @@ msgstr "Nom à afficher" #. module: redner -#: model:ir.model.fields,field_description:redner.field_redner_substitution__dynamic_placeholder_button_hidden -msgid "Dynamic Placeholder Button Hidden" -msgstr "Dynamic Placeholder Button Hidden" - -#. module: redner #: model:ir.model.fields,field_description:redner.field_redner_substitution__template_id msgid "Email Template" msgstr "Modèle de courriel" @@ -169,21 +141,6 @@ msgstr "Expression" #. module: redner -#: model:ir.model,name:redner.model_expression_builder_field -msgid "Expression Builder Field" -msgstr "Champ du constructeur d'expression" - -#. module: redner -#: model:ir.model,name:redner.model_expression_builder_wizard -msgid "Expression Builder Wizard" -msgstr "Constructeur d'expression" - -#. module: redner -#: model:ir.model.fields,field_description:redner.field_expression_builder_field__wizard_id -msgid "Expression builder" -msgstr "Constructeur d'expression" - -#. module: redner #: model_terms:ir.ui.view,arch_db:redner.view_template_list_wizard_tree msgid "External Templates" msgstr "Modèles externes" @@ -191,6 +148,7 @@ #. module: redner #. odoo-python #: code:addons/redner/models/redner_template.py:0 +#, python-format msgid "Failed to update Redner template, %s" msgstr "Échec de la mise à jour du modèle redner, %s" @@ -202,7 +160,8 @@ #. module: redner #. odoo-python #: code:addons/redner/models/ir_actions_report.py:0 +#, python-format msgid "Field 'Output Format' is required for Redner report" msgstr "Le champ 'Format de sortie' est requis pour le rapport Redner" #. module: redner @@ -205,22 +164,7 @@ msgid "Field 'Output Format' is required for Redner report" msgstr "Le champ 'Format de sortie' est requis pour le rapport Redner" #. module: redner -#: model:ir.model.fields,field_description:redner.field_expression_builder_field__field_technical_name -msgid "Field Technical Name" -msgstr "Nom technique du champ" - -#. module: redner -#: model:ir.model.fields,field_description:redner.field_expression_builder_field__field_type -msgid "Field Type" -msgstr "Type de champ" - -#. module: redner -#: model:ir.model.fields,field_description:redner.field_expression_builder_field__field_name -msgid "Field name" -msgstr "Nom du champ" - -#. module: redner #: model_terms:ir.ui.view,arch_db:redner.view_email_template_form msgid "Get Substitutions from Redner Template" msgstr "Obtenir les substitutions à partir du modèle Redner" @@ -236,8 +180,11 @@ msgstr "HTML + mustache" #. module: redner -#: model:ir.model.fields,field_description:redner.field_expression_builder_field__id -#: model:ir.model.fields,field_description:redner.field_expression_builder_wizard__id +#: model:ir.model.fields,field_description:redner.field_redner_substitution__hide_placeholder_button +msgid "Hide Placeholder Button" +msgstr "Masquer le bouton placeholder" + +#. module: redner #: model:ir.model.fields,field_description:redner.field_redner_report__id #: model:ir.model.fields,field_description:redner.field_redner_substitution__id #: model:ir.model.fields,field_description:redner.field_redner_template__id @@ -257,11 +204,6 @@ "cochée si la source est \"Odoo\"." #. module: redner -#: model:ir.model.fields,help:redner.field_expression_builder_field__field_comodel_name -msgid "If the field is relational, store the comodel name here" -msgstr "Si le champ est relationnel, contient le nom du modèle relié" - -#. module: redner #: model:ir.model.fields,help:redner.field_redner_template__active msgid "" "If unchecked, it will allow you to hide the template without removing it." @@ -324,8 +266,6 @@ msgstr "Langage" #. module: redner -#: model:ir.model.fields,field_description:redner.field_expression_builder_field__write_uid -#: model:ir.model.fields,field_description:redner.field_expression_builder_wizard__write_uid #: model:ir.model.fields,field_description:redner.field_redner_report__write_uid #: model:ir.model.fields,field_description:redner.field_redner_substitution__write_uid #: model:ir.model.fields,field_description:redner.field_redner_template__write_uid @@ -334,8 +274,6 @@ msgstr "Dernière mise à jour par" #. module: redner -#: model:ir.model.fields,field_description:redner.field_expression_builder_field__write_date -#: model:ir.model.fields,field_description:redner.field_expression_builder_wizard__write_date #: model:ir.model.fields,field_description:redner.field_redner_report__write_date #: model:ir.model.fields,field_description:redner.field_redner_substitution__write_date #: model:ir.model.fields,field_description:redner.field_redner_template__write_date @@ -364,6 +302,13 @@ msgstr "MJML + mustache" #. module: redner +#. odoo-javascript +#: code:addons/redner/static/src/components/dynamic_placeholder_char_field/dynamic_placeholder_char_field.xml:0 +#, python-format +msgid "Magic" +msgstr "" + +#. module: redner #: model:ir.model.fields,field_description:redner.field_ir_actions_report__redner_multi_in_one msgid "Multiple Records in a Single Redner Report" msgstr "Plusieurs enregistrements dans un seul rapport Redner" @@ -371,6 +316,7 @@ #. module: redner #. odoo-python #: code:addons/redner/models/redner_substitution.py:0 +#, python-format msgid "N/A" msgstr "N/A" @@ -420,6 +366,11 @@ msgstr "Langue de traduction facultative (code ISO)." #. module: redner +#: model:ir.model.fields,field_description:redner.field_redner_substitution__value_placeholder +msgid "Placeholder Text" +msgstr "Texte placeholder" + +#. module: redner #: model:ir.model.fields,field_description:redner.field_redner_template__preview #: model:ir.model.fields,field_description:redner.field_template_list_wizard__preview #: model_terms:ir.ui.view,arch_db:redner.redner_template_view_form @@ -462,12 +413,6 @@ msgstr "Modèles Redner" #. module: redner -#. odoo-python -#: code:addons/redner/controllers/main.py:0 -msgid "Redner action report not found for report_name %s" -msgstr "Action du rapport redner introuvable pour le rapport %s" - -#. module: redner #: model:ir.model.fields,field_description:redner.field_redner_substitution__model msgid "Related Report Model" msgstr "Modèle de Rapport Associé" @@ -514,13 +459,8 @@ msgstr "Type de rapport" #. module: redner -#: model_terms:ir.ui.view,arch_db:redner.view_expression_builder_wizard_form -msgid "Save" -msgstr "Enregistrer" - -#. module: redner #: model_terms:ir.ui.view,arch_db:redner.view_template_list_wizard_tree msgid "Select" msgstr "Sélectionner" #. module: redner @@ -522,13 +462,8 @@ #: model_terms:ir.ui.view,arch_db:redner.view_template_list_wizard_tree msgid "Select" msgstr "Sélectionner" #. module: redner -#: model:ir.model.fields,field_description:redner.field_expression_builder_field__selected -msgid "Selected" -msgstr "Sélectionné" - -#. module: redner #: model_terms:ir.ui.view,arch_db:redner.redner_template_view_form msgid "Settings" msgstr "Paramètres" @@ -550,15 +485,6 @@ "La source du modèle, si il a été créé dans Odoo ou importé depuis Redner." #. module: redner -#: model:ir.model.fields,help:redner.field_expression_builder_wizard__expression -msgid "" -"Stores the substitution value the builder is working on. (example: " -"'partner_id.name')" -msgstr "L'expression qui sera ajoutée (exemple: 'partner_id.name')" - -#. module: redner -#: model:ir.model.fields,field_description:redner.field_expression_builder_wizard__expression -#: model:ir.model.fields,field_description:redner.field_expression_builder_wizard__substitution_id #: model:ir.model.fields,field_description:redner.field_ir_actions_report__substitution_ids msgid "Substitution" msgstr "Substitution" @@ -571,11 +497,6 @@ msgstr "Substitutions" #. module: redner -#: model:ir.model.fields,field_description:redner.field_expression_builder_wizard__suggested_fields -msgid "Suggested Fields" -msgstr "Champs suggérés" - -#. module: redner #: model_terms:ir.ui.view,arch_db:redner.redner_template_view_form msgid "Template Body" msgstr "Corps du modèle" @@ -611,26 +532,6 @@ msgstr "La prévisualisation en PNG du modèle" #. module: redner -#: model:ir.model.fields,help:redner.field_expression_builder_wizard__substitution_id -msgid "The Redner Substitution on which we assign the value" -msgstr "La substitution de variable redner à laquelle on assigne la valeur" - -#. module: redner -#: model:ir.model.fields,help:redner.field_expression_builder_field__field_name -msgid "The field's comprehensible name" -msgstr "Le nom du champ" - -#. module: redner -#: model:ir.model.fields,help:redner.field_expression_builder_field__field_technical_name -msgid "The field's technical name" -msgstr "Le nom technique du champ" - -#. module: redner -#: model:ir.model.fields,help:redner.field_expression_builder_field__field_type -msgid "The field's type (boolean, text, ...)" -msgstr "Le type de champ (booléen, texte, ...)" - -#. module: redner #: model:ir.model.fields,help:redner.field_redner_template__name msgid "" "The name of the template. Once the template is created, updating the name is " @@ -642,6 +543,7 @@ #. module: redner #. odoo-python #: code:addons/redner/models/ir_actions_report.py:0 +#, python-format msgid "" "The output format cannot be different from the extension defined in \"Save " "as attachment prefix\"." @@ -650,18 +552,6 @@ "\"Enregistrer comme préfixe de pièce jointe\"." #. module: redner -#: model:ir.model.fields,help:redner.field_expression_builder_wizard__suggested_fields -msgid "The suggested fields, based on the substitution converter value" -msgstr "" -"Les champs suggérés, basés sur le type de convertisseur utilisé dans la " -"substitution" - -#. module: redner -#: model:ir.model.fields,help:redner.field_expression_builder_wizard__expression -msgid "The temporary expression (example: 'partner_id.name')" -msgstr "L'expression qui sera ajoutée (exemple: 'partner_id.name')" - -#. module: redner #: model:ir.model.fields,help:redner.field_ir_actions_report__report_type msgid "" "The type of the report that will be rendered, each one having its own " @@ -680,13 +570,5 @@ msgstr "Il s'agit d'une prévisualisation du template" #. module: redner -#: model_terms:ir.ui.view,arch_db:redner.redner_report_view -#: model_terms:ir.ui.view,arch_db:redner.view_email_template_form -msgid "This will delete the current substitution value. Continue anyway ?" -msgstr "" -"Ceci va supprimer la valeur de substitution actuelle. Continuer malgré " -"tout ?" - -#. module: redner #. odoo-python #: code:addons/redner/models/redner_template.py:0 @@ -691,5 +573,6 @@ #. odoo-python #: code:addons/redner/models/redner_template.py:0 +#, python-format msgid "" "Unable to update the template data. Please check the logs for more details." msgstr "" @@ -698,7 +581,8 @@ #. module: redner #. odoo-python #: code:addons/redner/redner.py:0 +#, python-format msgid "Unexpected redner error: %r" msgstr "Erreur redner : %r" #. module: redner @@ -701,12 +585,7 @@ msgid "Unexpected redner error: %r" msgstr "Erreur redner : %r" #. module: redner -#: model:ir.model.fields,field_description:redner.field_redner_substitution__value_placeholder -msgid "Value Placeholder" -msgstr "Placeholder de l'expresion" - -#. module: redner #: model:ir.model.fields,field_description:redner.field_redner_substitution__keyword msgid "Variable" msgstr "Variable" @@ -726,6 +605,7 @@ #. odoo-python #: code:addons/redner/models/mail_template.py:0 #: code:addons/redner/models/redner_report.py:0 +#, python-format msgid "" "We received an unexpected error from redner server. Please contact your " "administrator" @@ -734,16 +614,5 @@ "votre administrateur" #. module: redner -#: model:ir.model.fields,help:redner.field_expression_builder_field__selected -msgid "When selected, it will me added to the substitution value" -msgstr "" -"Si l'option est cochée, ce champ sera ajouté à la valeur de la substitution" - -#. module: redner -#: model:ir.model.fields,help:redner.field_expression_builder_field__field_comodel_name -msgid "if the field is relationnal, store the comodel name here" -msgstr "si le champ est relationnel, contient le nom du modèle relié" - -#. module: redner #. odoo-python #: code:addons/redner/models/redner_substitution.py:0 @@ -748,8 +617,9 @@ #. odoo-python #: code:addons/redner/models/redner_substitution.py:0 +#, python-format msgid "e.g: name or partner_id.name" msgstr "par ex. name or partner_id.name" #. module: redner #. odoo-python #: code:addons/redner/models/redner_substitution.py:0 @@ -750,12 +620,13 @@ msgid "e.g: name or partner_id.name" msgstr "par ex. name or partner_id.name" #. module: redner #. odoo-python #: code:addons/redner/models/redner_substitution.py:0 +#, python-format msgid "e.g: partner_id/category_id/name ou partner_id/child_ids[]" msgstr "par ex. partner_id/category_id/name ou partner_id/child_ids[]" #. module: redner #. odoo-python #: code:addons/redner/models/redner_substitution.py:0 @@ -756,12 +627,13 @@ msgid "e.g: partner_id/category_id/name ou partner_id/child_ids[]" msgstr "par ex. partner_id/category_id/name ou partner_id/child_ids[]" #. module: redner #. odoo-python #: code:addons/redner/models/redner_substitution.py:0 +#, python-format msgid "e.g: tax_ids" msgstr "par ex. tax_ids" #. module: redner #. odoo-python #: code:addons/redner/models/redner_substitution.py:0 @@ -762,12 +634,20 @@ msgid "e.g: tax_ids" msgstr "par ex. tax_ids" #. module: redner #. odoo-python #: code:addons/redner/models/redner_substitution.py:0 +#, python-format +msgid "e.g: www.orbeet.io" +msgstr "par ex. www.orbeet.io" + +#. module: redner +#. odoo-python +#: code:addons/redner/models/redner_substitution.py:0 +#, python-format msgid "e.g: {{ object.get_partner_info() | safe }}" msgstr "par ex. {{ object.get_partner_info() | safe }}" #. module: redner #. odoo-python #: code:addons/redner/models/redner_substitution.py:0 @@ -768,12 +648,13 @@ msgid "e.g: {{ object.get_partner_info() | safe }}" msgstr "par ex. {{ object.get_partner_info() | safe }}" #. module: redner #. odoo-python #: code:addons/redner/models/redner_substitution.py:0 +#, python-format msgid "e.g: {{object.partner_id.name}}" msgstr "par ex. {{object.partner_id.name}}" #. module: redner #. odoo-python #: code:addons/redner/models/redner_substitution.py:0 @@ -774,15 +655,10 @@ msgid "e.g: {{object.partner_id.name}}" msgstr "par ex. {{object.partner_id.name}}" #. module: redner #. odoo-python #: code:addons/redner/models/redner_substitution.py:0 -msgid "e.g: www.orbeet.io" -msgstr "par ex. www.orbeet.io" - -#. module: redner -#. odoo-python -#: code:addons/redner/models/redner_substitution.py:0 +#, python-format msgid "invalid converter type: %s" msgstr "type de convertisseur invalide : %s" @@ -799,18 +675,4 @@ #. module: redner #: model:ir.model.fields,help:redner.field_redner_template__language msgid "templating language" -msgstr "langage du modèle" - -#. module: redner -#: model_terms:ir.ui.view,arch_db:redner.redner_report_view -msgid "this will delete the current substitution value. Continue anyway ?" -msgstr "" -"ceci va supprimer la valeur de substitution actuelle. Continuer malgré " -"tout ?" - -#. module: redner -#: model:ir.model.fields,field_description:redner.field_redner_report____last_update -#: model:ir.model.fields,field_description:redner.field_redner_substitution____last_update -#: model:ir.model.fields,field_description:redner.field_redner_template____last_update -msgid "Last Modified on" -msgstr "Dernière modification le" +msgstr "langage du modèle" \ No newline at end of file diff --git a/models/redner_substitution.py b/models/redner_substitution.py index 8b8413ec0b2009b8c386a73b95414f68f9dc1c3d_bW9kZWxzL3JlZG5lcl9zdWJzdGl0dXRpb24ucHk=..bea2d255368c74fbae5a91e426bbd7eebe665e22_bW9kZWxzL3JlZG5lcl9zdWJzdGl0dXRpb24ucHk= 100644 --- a/models/redner_substitution.py +++ b/models/redner_substitution.py @@ -81,5 +81,7 @@ depth = fields.Integer(string="Depth", compute="_compute_depth", store=True) - value_placeholder = fields.Char(compute="_compute_value_placeholder") + value_placeholder = fields.Char( + compute="_compute_value_placeholder", string="Placeholder Text" + ) @@ -85,5 +87,5 @@ - dynamic_placeholder_button_hidden = fields.Boolean( - compute="_compute_dynamic_placeholder_button_hidden" + hide_placeholder_button = fields.Boolean( + compute="_compute_hide_placeholder_button", string="Hide Placeholder Button" ) @@ -88,4 +90,9 @@ ) + @api.onchange("converter") + def _onchange_converter(self): + if self.converter: + self.value = False + @api.depends("converter") def _compute_value_placeholder(self): @@ -90,25 +97,18 @@ @api.depends("converter") def _compute_value_placeholder(self): - """Computes a dynamic placeholder that depends on the selected type - to help the user inputs their data. - """ - for subsitution in self: - placeholder = _("N/A") - if subsitution.converter == FIELD: - placeholder = _("e.g: name or partner_id.name") - elif subsitution.converter == MAIL_TEMPLATE: - placeholder = _("e.g: {{object.partner_id.name}}") - elif subsitution.converter == MAIL_TEMPLATE_DESERIALIZE: - placeholder = _("e.g: {{ object.get_partner_info() | safe }}") - elif subsitution.converter == RELATION_2MANY: - placeholder = _("e.g: tax_ids") - elif subsitution.converter == RELATION_PATH: - placeholder = _( - "e.g: partner_id/category_id/name ou partner_id/child_ids[]" - ) - elif subsitution.converter == CONSTANT: - placeholder = _("e.g: www.orbeet.io") - subsitution.value_placeholder = placeholder + """Compute placeholder text based on conversion type""" + placeholder_map = { + FIELD: _("e.g: name or partner_id.name"), + MAIL_TEMPLATE: _("e.g: {{object.partner_id.name}}"), + MAIL_TEMPLATE_DESERIALIZE: _("e.g: {{ object.get_partner_info() | safe }}"), + RELATION_PATH: _( + "e.g: partner_id/category_id/name ou partner_id/child_ids[]" + ), + RELATION_2MANY: _("e.g: tax_ids"), + CONSTANT: _("e.g: www.orbeet.io"), + } + for record in self: + record.value_placeholder = placeholder_map.get(record.converter, _("N/A")) @api.depends("value") def _compute_render_model(self): @@ -126,5 +126,6 @@ record.depth = record.keyword.count(".") @api.depends("converter") - def _compute_dynamic_placeholder_button_hidden(self): + def _compute_hide_placeholder_button(self): + """Determine if placeholder button should be hidden""" for record in self: @@ -130,5 +131,5 @@ for record in self: - record.dynamic_placeholder_button_hidden = ( + record.hide_placeholder_button = ( record.converter not in DYNAMIC_PLACEHOLDER_ALLOWED_CONVERTERS ) diff --git a/static/src/components/charfield/charfield.js b/static/src/components/dynamic_placeholder_char_field/dynamic_placeholder_char_field.js similarity index 57% rename from static/src/components/charfield/charfield.js rename to static/src/components/dynamic_placeholder_char_field/dynamic_placeholder_char_field.js index 8b8413ec0b2009b8c386a73b95414f68f9dc1c3d_c3RhdGljL3NyYy9jb21wb25lbnRzL2NoYXJmaWVsZC9jaGFyZmllbGQuanM=..bea2d255368c74fbae5a91e426bbd7eebe665e22_c3RhdGljL3NyYy9jb21wb25lbnRzL2R5bmFtaWNfcGxhY2Vob2xkZXJfY2hhcl9maWVsZC9keW5hbWljX3BsYWNlaG9sZGVyX2NoYXJfZmllbGQuanM= 100644 --- a/static/src/components/charfield/charfield.js +++ b/static/src/components/dynamic_placeholder_char_field/dynamic_placeholder_char_field.js @@ -9,11 +9,11 @@ CharField.props = { ...CharField.props, placeholderField: {type: String, optional: true}, - placeholderRenderField: {type: String, optional: true}, - converterField: {type: String, optional: true}, + buttonVisibilityField: {type: String, optional: true}, + converterTypeField: {type: String, optional: true}, }; // Extending charField to extract the new property const charExtractProps = charField.extractProps; charField.extractProps = (fieldInfo) => { return Object.assign(charExtractProps(fieldInfo), { @@ -14,12 +14,12 @@ }; // Extending charField to extract the new property const charExtractProps = charField.extractProps; charField.extractProps = (fieldInfo) => { return Object.assign(charExtractProps(fieldInfo), { - placeholderField: fieldInfo.options.placeholder_field, - placeholderRednerField: fieldInfo.options?.placeholder_redner || false, - converterField: fieldInfo.options?.converter_field || false, + placeholderField: fieldInfo.options?.placeholder_field || "", + buttonVisibilityField: fieldInfo.options?.button_visibility_field || "", + converterTypeField: fieldInfo.options?.converter_type_field || "", }); }; @@ -43,7 +43,7 @@ this.props.placeholder ); }, - get showDynamicPlaceholderButton() { + get showPlaceholderButton() { return ( this.props.dynamicPlaceholder && !this.props.readonly && @@ -47,6 +47,6 @@ return ( this.props.dynamicPlaceholder && !this.props.readonly && - !this.props.record.data[this.props.placeholderRednerField] + this.props.record.data[this.props.buttonVisibilityField] ); }, @@ -51,9 +51,8 @@ ); }, - - get converterValue() { - return this.props.record.data[this.props.converterField] || ""; + get activeConverterType() { + return this.props.record.data[this.props.converterTypeField] || ""; }, async onDynamicPlaceholderOpen() { await this.dynamicPlaceholder.open({ @@ -56,7 +55,7 @@ }, async onDynamicPlaceholderOpen() { await this.dynamicPlaceholder.open({ - validateCallback: this.onDynamicPlaceholderValidate.bind(this), + validateCallback: this.handlePlaceholderInsert.bind(this), }); }, @@ -61,5 +60,5 @@ }); }, - async onDynamicPlaceholderValidate(chain, defaultValue) { + async handlePlaceholderInsert(chain, defaultValue) { if (chain) { this.input.el.focus(); @@ -64,6 +63,5 @@ if (chain) { this.input.el.focus(); - // Initialize dynamicPlaceholder with a default structure - let dynamicPlaceholder = ` {{object.${chain}${ + let placeholder = `{{object.${chain}${ defaultValue?.length ? ` ||| ${defaultValue}` : "" }}}`; @@ -68,4 +66,5 @@ defaultValue?.length ? ` ||| ${defaultValue}` : "" }}}`; - switch (this.converter) { + + switch (this.activeConverterType) { case "field": @@ -71,4 +70,3 @@ case "field": - // For "field" converter, use the chain directly as the value - dynamicPlaceholder = `${chain}`; + placeholder = chain; break; @@ -74,4 +72,4 @@ break; - + // Add other converter types here default: // Default case if no specific converter type is found @@ -76,7 +74,7 @@ default: // Default case if no specific converter type is found - dynamicPlaceholder = ` {{object.${chain}${ + placeholder = ` {{object.${chain}${ defaultValue?.length ? ` ||| ${defaultValue}` : "" }}}`; break; } @@ -79,5 +77,6 @@ defaultValue?.length ? ` ||| ${defaultValue}` : "" }}}`; break; } + this.input.el.setRangeText( @@ -83,6 +82,6 @@ this.input.el.setRangeText( - dynamicPlaceholder, + placeholder, this.selectionStart, this.selectionStart, "end" ); @@ -85,10 +84,9 @@ this.selectionStart, this.selectionStart, "end" ); - // trigger events to make the field dirty this.input.el.dispatchEvent(new InputEvent("input")); this.input.el.dispatchEvent(new KeyboardEvent("keydown")); this.input.el.focus(); } }, @@ -90,6 +88,38 @@ this.input.el.dispatchEvent(new InputEvent("input")); this.input.el.dispatchEvent(new KeyboardEvent("keydown")); this.input.el.focus(); } }, + // async handlePlaceholderValidation(chain, defaultValue) { + // if (chain) { + // this.input.el.focus(); + // // Initialize dynamicPlaceholder with a default structure + // let dynamicPlaceholder = ` {{object.${chain}${ + // defaultValue?.length ? ` ||| ${defaultValue}` : "" + // }}}`; + // switch (this.converter) { + // case "field": + // // For "field" converter, use the chain directly as the value + // dynamicPlaceholder = `${chain}`; + // break; + + // default: + // // Default case if no specific converter type is found + // dynamicPlaceholder = ` {{object.${chain}${ + // defaultValue?.length ? ` ||| ${defaultValue}` : "" + // }}}`; + // break; + // } + // this.input.el.setRangeText( + // dynamicPlaceholder, + // this.selectionStart, + // this.selectionStart, + // "end" + // ); + // // trigger events to make the field dirty + // this.input.el.dispatchEvent(new InputEvent("input")); + // this.input.el.dispatchEvent(new KeyboardEvent("keydown")); + // this.input.el.focus(); + // } + // }, }); diff --git a/static/src/components/charfield/charfield.scss b/static/src/components/dynamic_placeholder_char_field/dynamic_placeholder_char_field.scss similarity index 100% rename from static/src/components/charfield/charfield.scss rename to static/src/components/dynamic_placeholder_char_field/dynamic_placeholder_char_field.scss diff --git a/static/src/components/charfield/charfield.xml b/static/src/components/dynamic_placeholder_char_field/dynamic_placeholder_char_field.xml similarity index 92% rename from static/src/components/charfield/charfield.xml rename to static/src/components/dynamic_placeholder_char_field/dynamic_placeholder_char_field.xml index 8b8413ec0b2009b8c386a73b95414f68f9dc1c3d_c3RhdGljL3NyYy9jb21wb25lbnRzL2NoYXJmaWVsZC9jaGFyZmllbGQueG1s..bea2d255368c74fbae5a91e426bbd7eebe665e22_c3RhdGljL3NyYy9jb21wb25lbnRzL2R5bmFtaWNfcGxhY2Vob2xkZXJfY2hhcl9maWVsZC9keW5hbWljX3BsYWNlaG9sZGVyX2NoYXJfZmllbGQueG1s 100644 --- a/static/src/components/charfield/charfield.xml +++ b/static/src/components/dynamic_placeholder_char_field/dynamic_placeholder_char_field.xml @@ -13,6 +13,6 @@ <t t-name="dynamic_placeholder.magicButton"> <div class="position-relative d-inline"> <button - t-if="showDynamicPlaceholderButton" + t-if="activeConverterType" class="btn position-absolute end-0" t-attf-class="{{positionCenter ? 'pb-0 pt-0' : 'bottom-0'}}" @@ -17,5 +17,6 @@ class="btn position-absolute end-0" t-attf-class="{{positionCenter ? 'pb-0 pt-0' : 'bottom-0'}}" + t-att-disabled="showPlaceholderButton" t-ref="magicButton" t-on-click="onDynamicPlaceholderOpen" > diff --git a/views/ir_actions_report.xml b/views/ir_actions_report.xml index 8b8413ec0b2009b8c386a73b95414f68f9dc1c3d_dmlld3MvaXJfYWN0aW9uc19yZXBvcnQueG1s..bea2d255368c74fbae5a91e426bbd7eebe665e22_dmlld3MvaXJfYWN0aW9uc19yZXBvcnQueG1s 100644 --- a/views/ir_actions_report.xml +++ b/views/ir_actions_report.xml @@ -46,7 +46,7 @@ <field name="render_model" column_invisible="1" /> <field name="value_placeholder" column_invisible="1" /> <field - name="dynamic_placeholder_button_hidden" + name="hide_placeholder_button" column_invisible="1" /> <field @@ -57,8 +57,8 @@ 'dynamic_placeholder': true, 'dynamic_placeholder_model_reference_field': 'render_model', 'placeholder_field': 'value_placeholder', - 'placeholder_redner': 'dynamic_placeholder_button_hidden', - 'converter_field': 'converter' + 'button_visibility_field': 'hide_placeholder_button', + 'converter_type_field': 'converter' }" default_focus="1" /> diff --git a/views/mail_template.xml b/views/mail_template.xml index 8b8413ec0b2009b8c386a73b95414f68f9dc1c3d_dmlld3MvbWFpbF90ZW1wbGF0ZS54bWw=..bea2d255368c74fbae5a91e426bbd7eebe665e22_dmlld3MvbWFpbF90ZW1wbGF0ZS54bWw= 100644 --- a/views/mail_template.xml +++ b/views/mail_template.xml @@ -42,7 +42,7 @@ <field name="render_model" column_invisible="1" /> <field name="value_placeholder" column_invisible="1" /> <field - name="dynamic_placeholder_button_hidden" + name="hide_placeholder_button" column_invisible="1" /> <field @@ -53,8 +53,8 @@ 'dynamic_placeholder': true, 'dynamic_placeholder_model_reference_field': 'render_model', 'placeholder_field': 'value_placeholder', - 'placeholder_redner': 'dynamic_placeholder_button_hidden', - 'converter_field': 'converter' + 'button_visibility_field': 'hide_placeholder_button', + 'converter_type_field': 'converter' }" default_focus="1" />