|
20 | 20 | <field name="model">sync.trigger.automation</field> |
21 | 21 | <field name="arch" type="xml"> |
22 | 22 | <form> |
23 | | - <div class="oe_button_box" name="button_box"> |
24 | | - <button |
25 | | - name="toggle_active" |
26 | | - type="object" |
27 | | - class="oe_stat_button" |
28 | | - icon="fa-archive" |
29 | | - > |
| 23 | + <!-- |
| 24 | + <div class="oe_button_box" name="button_box"> |
| 25 | + <button name="action_view_webhook_logs" type="object" string="Logs" class="oe_stat_button" icon="fa-list" invisible="trigger != 'on_webhook'"> |
| 26 | + </button> |
| 27 | + </div> |
| 28 | + --> |
| 29 | + <field name="active" invisible="1" /> |
| 30 | + <field name="model_name" invisible="1" force_save="True" /> |
| 31 | + <widget |
| 32 | + name="web_ribbon" |
| 33 | + title="Archived" |
| 34 | + bg_color="bg-danger" |
| 35 | + invisible="active" |
| 36 | + /> |
| 37 | + <div class="oe_title"> |
| 38 | + <h1> |
| 39 | + <field name="trigger_name" placeholder="e.g. Support flow" /> |
| 40 | + </h1> |
| 41 | + <field name="sync_task_id" invisible="1" /> |
| 42 | + </div> |
| 43 | + <group |
| 44 | + groups="!base.group_no_one" |
| 45 | + invisible="context.get('default_model_id')" |
| 46 | + > |
| 47 | + <group> |
| 48 | + <field name="model_id" options="{'no_create': True}" /> |
| 49 | + </group> |
| 50 | + </group> |
| 51 | + <group groups="base.group_no_one"> |
| 52 | + <group> |
| 53 | + <field name="model_id" options="{'no_create': True}" /> |
| 54 | + </group> |
| 55 | + </group> |
| 56 | + <group invisible="not model_id"> |
| 57 | + <group> |
| 58 | + <label for="trigger" /> |
| 59 | + <div> |
| 60 | + <div class="d-flex flex-row"> |
| 61 | + <field |
| 62 | + name="trigger" |
| 63 | + widget="base_automation_trigger_selection" |
| 64 | + class="oe_inline me-3" |
| 65 | + /> |
| 66 | + <field |
| 67 | + name="trg_selection_field_id" |
| 68 | + placeholder="Select a value..." |
| 69 | + class="oe_inline" |
| 70 | + options="{'no_open': True, 'no_create': True}" |
| 71 | + invisible="trigger not in ['on_state_set', 'on_priority_set']" |
| 72 | + required="trigger in ['on_state_set', 'on_priority_set']" |
| 73 | + /> |
| 74 | + <field |
| 75 | + name="trg_field_ref" |
| 76 | + placeholder="Select a value..." |
| 77 | + class="oe_inline" |
| 78 | + widget="base_automation_trigger_reference" |
| 79 | + invisible="trigger not in ['on_stage_set', 'on_tag_set']" |
| 80 | + required="trigger in ['on_stage_set', 'on_tag_set']" |
| 81 | + /> |
| 82 | + <field name="trg_field_ref_model_name" invisible="1" /> |
| 83 | + <field |
| 84 | + name="trg_field_ref_display_name" |
| 85 | + invisible="1" |
| 86 | + /> |
| 87 | + <field |
| 88 | + name="trg_date_id" |
| 89 | + class="oe_inline" |
| 90 | + string="Date Field" |
| 91 | + options="{'no_open': True, 'no_create': True}" |
| 92 | + invisible="trigger != 'on_time'" |
| 93 | + required="trigger in ['on_time', 'on_time_created', 'on_time_updated']" |
| 94 | + /> |
| 95 | + </div> |
| 96 | + <div class="text-muted" invisible="trigger != 'on_change'"> |
| 97 | + <i class="fa fa-warning" /> |
| 98 | + Automation rules triggered by UI changes will be |
| 99 | + executed |
| 100 | + <em>every time</em> |
| 101 | + the watched fields change, |
| 102 | + <em>whether you save or not</em> |
| 103 | + . |
| 104 | + </div> |
| 105 | + </div> |
| 106 | + <!-- |
| 107 | + <label for="url" string="URL" invisible="trigger != 'on_webhook'"/> |
| 108 | + <div invisible="trigger != 'on_webhook'"> |
| 109 | + <field name="url" widget="CopyClipboardURL" placeholder="URL will be created once the rule is saved."/> |
| 110 | + <div class="alert alert-warning" role="status"> |
| 111 | + <strong><i class="fa fa-lock"/> Keep it secret, keep it safe.</strong> |
| 112 | + <p>Your webhook URL contains a secret. Don't share it online or carelessly.</p> |
| 113 | + <button class="btn btn-seconadry" type="object" name="action_rotate_webhook_uuid" string="Rotate Secret" icon="fa-refresh" help="Change the URL's secret if you think the URL is no longer secure. You will have to update any automated system that calls this webhook to the new URL."/> |
| 114 | + </div> |
| 115 | + </div> |
| 116 | + --> |
| 117 | + <label |
| 118 | + for="trg_date_range" |
| 119 | + string="Delay" |
| 120 | + invisible="trigger not in ['on_time', 'on_time_created', 'on_time_updated']" |
| 121 | + /> |
| 122 | + <div |
| 123 | + class="d-flex flex-row gap-2" |
| 124 | + invisible="trigger not in ['on_time', 'on_time_created', 'on_time_updated']" |
| 125 | + > |
| 126 | + <field |
| 127 | + name="trg_date_range" |
| 128 | + class="oe_inline" |
| 129 | + required="trigger in ['on_time', 'on_time_created', 'on_time_updated']" |
| 130 | + /> |
| 131 | + <field |
| 132 | + name="trg_date_range_type" |
| 133 | + class="oe_inline" |
| 134 | + required="trigger in ['on_time', 'on_time_created', 'on_time_updated']" |
| 135 | + /> |
| 136 | + <span invisible="trigger != 'on_time_created'"> |
| 137 | + after creation |
| 138 | + </span> |
| 139 | + <span invisible="trigger != 'on_time_updated'"> |
| 140 | + after last update |
| 141 | + </span> |
| 142 | + <span invisible="trigger != 'on_time'">after</span> |
| 143 | + <field |
| 144 | + name="trg_date_id" |
| 145 | + class="oe_inline" |
| 146 | + string="Date Field" |
| 147 | + placeholder="Select a date field..." |
| 148 | + options="{'no_open': True, 'no_create': True}" |
| 149 | + context="{'hide_model': 1}" |
| 150 | + invisible="trigger != 'on_time'" |
| 151 | + required="trigger in ['on_time', 'on_time_created', 'on_time_updated']" |
| 152 | + /> |
| 153 | + </div> |
| 154 | + <!-- |
| 155 | + <field name="log_webhook_calls" widget="boolean_toggle" invisible="trigger != 'on_webhook'"/> |
| 156 | + --> |
30 | 157 | <field |
31 | | - name="active" |
32 | | - widget="boolean_button" |
33 | | - options='{"terminology": "archive"}' |
| 158 | + name="trg_date_calendar_id" |
| 159 | + class="oe_inline" |
| 160 | + options="{'no_open': True, 'no_create': True}" |
| 161 | + invisible="not trg_date_id or trg_date_range_type != 'day'" |
34 | 162 | /> |
35 | | - </button> |
36 | | - </div> |
37 | | - <group> |
38 | | - <field name="trigger_name" /> |
39 | | - <field name="model_id" /> |
40 | | - <field name="model_name" invisible="1" /> |
41 | | - <field name="trigger" /> |
42 | | - <field |
43 | | - name="trigger_field_ids" |
44 | | - domain="[('model_id', '=', model_id)]" |
45 | | - invisible="trigger not in ('on_write', 'on_create_or_write')" |
46 | | - widget="many2many_tags" |
47 | | - /> |
48 | | - <field |
49 | | - name="on_change_field_ids" |
50 | | - string="Trigger Fields" |
51 | | - domain="[('model_id', '=', model_id)]" |
52 | | - invisible="trigger != 'on_change'" |
53 | | - required="trigger == 'on_change'" |
54 | | - widget='many2many_tags' |
55 | | - options="{'no_create': True}" |
56 | | - /> |
57 | | - <field |
58 | | - name="filter_pre_domain" |
59 | | - widget="domain" |
60 | | - options="{'model': 'model_name', 'in_dialog': True}" |
61 | | - invisible="trigger not in ('on_write','on_create_or_write')" |
62 | | - /> |
63 | | - <field |
64 | | - name="filter_domain" |
65 | | - widget="domain" |
66 | | - options="{'model': 'model_name', 'in_dialog': True}" |
67 | | - /> |
68 | | - <field |
69 | | - name="on_change_field_ids" |
70 | | - invisible="trigger != 'on_change'" |
71 | | - required="trigger == 'on_change'" |
72 | | - /> |
73 | | - <field |
74 | | - name="trg_date_id" |
75 | | - invisible="trigger != 'on_time'" |
76 | | - required="trigger == 'on_time'" |
77 | | - /> |
78 | | - <label for="trg_date_range" invisible="trigger != 'on_time'" /> |
79 | | - <div class="o_row" invisible="trigger != 'on_time'"> |
80 | | - <field name="trg_date_range" required="trigger == 'on_time'" /> |
| 163 | + <label |
| 164 | + for="least_delay_msg" |
| 165 | + invisible="trigger not in ['on_time', 'on_time_created', 'on_time_updated'] or not least_delay_msg" |
| 166 | + string="" |
| 167 | + /> |
| 168 | + <div |
| 169 | + class="alert alert-info" |
| 170 | + role="alert" |
| 171 | + invisible="trigger not in ['on_time', 'on_time_created', 'on_time_updated'] or not least_delay_msg" |
| 172 | + > |
| 173 | + <field name="least_delay_msg" /> |
| 174 | + </div> |
81 | 175 | <field |
82 | | - name="trg_date_range_type" |
83 | | - required="trigger == 'on_time'" |
| 176 | + name="filter_pre_domain" |
| 177 | + widget="domain" |
| 178 | + groups="base.group_no_one" |
| 179 | + options="{'model': 'model_name', 'in_dialog': True}" |
| 180 | + invisible="trigger in ['on_change', 'on_webhook']" |
84 | 181 | /> |
85 | | - </div> |
86 | | - <field |
87 | | - name="trg_date_calendar_id" |
88 | | - invisible="not trg_date_id or trg_date_range_type != 'day'" |
89 | | - /> |
90 | | - <field name="sync_task_id" invisible="1" /> |
| 182 | + <field |
| 183 | + name="filter_domain" |
| 184 | + widget="domain" |
| 185 | + groups="base.group_no_one" |
| 186 | + options="{'model': 'model_name', 'in_dialog': True}" |
| 187 | + invisible="trigger in ['on_change', 'on_webhook']" |
| 188 | + /> |
| 189 | + <label |
| 190 | + for="filter_domain" |
| 191 | + groups="!base.group_no_one" |
| 192 | + invisible="trigger not in ['on_create_or_write', 'on_unlink']" |
| 193 | + /> |
| 194 | + <label |
| 195 | + for="filter_domain" |
| 196 | + groups="!base.group_no_one" |
| 197 | + string="Extra Conditions" |
| 198 | + invisible="trigger not in ['on_time', 'on_time_created', 'on_time_updated']" |
| 199 | + /> |
| 200 | + <field |
| 201 | + name="filter_domain" |
| 202 | + nolabel="1" |
| 203 | + widget="domain" |
| 204 | + groups="!base.group_no_one" |
| 205 | + options="{'model': 'model_name', 'in_dialog': False, 'foldable': True}" |
| 206 | + invisible="trigger not in ['on_create_or_write', 'on_unlink', 'on_time', 'on_time_created', 'on_time_updated']" |
| 207 | + /> |
| 208 | + <field |
| 209 | + name="trigger_field_ids" |
| 210 | + string="When updating" |
| 211 | + placeholder="Select fields..." |
| 212 | + options="{'no_open': True, 'no_create': True}" |
| 213 | + domain="[('model_id', '=', model_id),('store','=',True)]" |
| 214 | + context="{'hide_model': 1}" |
| 215 | + invisible="trigger != 'on_create_or_write'" |
| 216 | + widget="many2many_tags" |
| 217 | + /> |
| 218 | + <field |
| 219 | + name="on_change_field_ids" |
| 220 | + string="When updating" |
| 221 | + placeholder="Select fields..." |
| 222 | + options="{'no_open': True, 'no_create': True}" |
| 223 | + domain="[('model_id', '=', model_id)]" |
| 224 | + context="{'hide_model': 1}" |
| 225 | + invisible="trigger != 'on_change'" |
| 226 | + widget="many2many_tags" |
| 227 | + /> |
| 228 | + </group> |
| 229 | + <!-- |
| 230 | + <group> |
| 231 | + <label for="record_getter" string="Target Record" invisible="trigger != 'on_webhook'" /> |
| 232 | + <div invisible="trigger != 'on_webhook'"> |
| 233 | + <field name="record_getter" string="Target Record"/> |
| 234 | + <div> |
| 235 | + <div class="text-muted"><i class="fa fa-info-circle"/> The default target record getter will work out-of-the-box for any webhook coming from another Odoo instance.</div> |
| 236 | + <span class="text-muted"> Available variables: </span> |
| 237 | + <ul class="text-muted"> |
| 238 | + <li><code>env</code>: environment on which the action is triggered</li> |
| 239 | + <li><code>model</code>: model of the record on which the action is triggered; is a void recordset</li> |
| 240 | + <li><code>time</code>, <code>datetime</code>, <code>dateutil</code>, <code>timezone</code>: useful Python libraries</li> |
| 241 | + <li><code>payload</code>: the payload of the call (GET parameters, JSON body), as a dict.</li> |
| 242 | + </ul> |
| 243 | + </div> |
| 244 | + </div> |
| 245 | + </group> |
| 246 | + --> |
91 | 247 | </group> |
92 | 248 | </form> |
93 | 249 | </field> |
|
0 commit comments