You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

604 lines
21 KiB

privacy_consent: Separate automated emails send process Before https://github.com/OCA/data-protection/pull/29 there was a race condition where an email could be sent while the same transaction that created the `privacy.consent` record still wasn't committed, producing a 404 error if the user clicked on "Accept" or "Reject" before all mails were sent. To avoid that, a raw `cr.commit()` was issued, but this produced another situation where the user had to wait until the full email queue is cleared to get his page loaded. It wasn't an error, but a long queue meant several minutes waiting, and it's ulikely that an average human is so patient. So, here's the final fix (I hope!). The main problem was that I was looking in the wrong place to send the email. It turns out that the `self.post_message_with_template()` method is absolutely helpless in the case at hand, where these criteria must be met: * E-mail must be enqueued, no matter if there are less or more than 50 consents to send. * The template must be processed per record. * In an ideal world, a `cr.commit()` must be issued after each sent mail. The metod that was being used: * Didn't allow to use `auto_commit` mode. * Only allowed to render the template per record if called with `composition_mode="mass_mail"`. * Only allowed to enqueue emails if called with `composition_mode="mass_post"`. Obviously, I cannot set 2 different values for `composition_mode`, so a different strategy had to be used. I discovered that the `mail.template` model has a helpful method called `send_mail()` that, by default: * Renders the template per record * Enqueues the email * The email queue is cleared in `auto_commit=True` mode. So, from now on, problems are gone: * The user click, or the cron run, will just generate the missing `privacy.consent` records and enqueue mails for them. * The mail queue manager will send them later, in `auto_commit` mode. * After sending the e-mail, this module will set the `privacy.consent` record as `sent`. * Thanks to *not* sending the email, the process the user faces when he hits the "generate" button is faster. * Instructions in the README and text in the "generate" button are updated to reflect this new behavior. * Thanks to the `auto_commit` feature, if Odoo is rebooted in the middle of a mail queue clearance, the records that were sent remain properly marked as sent, and the missing mails will be sent after the next boot. * No hardcoded commits. * No locked transactions. * BTW I discovered that 2 different emails were created when creating a new consent. I started using `mail_create_nolog=True` to avoid that problem and only log a single creation message. Note to self: never use again `post_message_with_template()`.
5 years ago
privacy_consent: Separate automated emails send process Before https://github.com/OCA/data-protection/pull/29 there was a race condition where an email could be sent while the same transaction that created the `privacy.consent` record still wasn't committed, producing a 404 error if the user clicked on "Accept" or "Reject" before all mails were sent. To avoid that, a raw `cr.commit()` was issued, but this produced another situation where the user had to wait until the full email queue is cleared to get his page loaded. It wasn't an error, but a long queue meant several minutes waiting, and it's ulikely that an average human is so patient. So, here's the final fix (I hope!). The main problem was that I was looking in the wrong place to send the email. It turns out that the `self.post_message_with_template()` method is absolutely helpless in the case at hand, where these criteria must be met: * E-mail must be enqueued, no matter if there are less or more than 50 consents to send. * The template must be processed per record. * In an ideal world, a `cr.commit()` must be issued after each sent mail. The metod that was being used: * Didn't allow to use `auto_commit` mode. * Only allowed to render the template per record if called with `composition_mode="mass_mail"`. * Only allowed to enqueue emails if called with `composition_mode="mass_post"`. Obviously, I cannot set 2 different values for `composition_mode`, so a different strategy had to be used. I discovered that the `mail.template` model has a helpful method called `send_mail()` that, by default: * Renders the template per record * Enqueues the email * The email queue is cleared in `auto_commit=True` mode. So, from now on, problems are gone: * The user click, or the cron run, will just generate the missing `privacy.consent` records and enqueue mails for them. * The mail queue manager will send them later, in `auto_commit` mode. * After sending the e-mail, this module will set the `privacy.consent` record as `sent`. * Thanks to *not* sending the email, the process the user faces when he hits the "generate" button is faster. * Instructions in the README and text in the "generate" button are updated to reflect this new behavior. * Thanks to the `auto_commit` feature, if Odoo is rebooted in the middle of a mail queue clearance, the records that were sent remain properly marked as sent, and the missing mails will be sent after the next boot. * No hardcoded commits. * No locked transactions. * BTW I discovered that 2 different emails were created when creating a new consent. I started using `mail_create_nolog=True` to avoid that problem and only log a single creation message. Note to self: never use again `post_message_with_template()`.
5 years ago
  1. # Translation of Odoo Server.
  2. # This file contains the translation of the following modules:
  3. # * privacy_consent
  4. #
  5. msgid ""
  6. msgstr ""
  7. "Project-Id-Version: Odoo Server 13.0\n"
  8. "Report-Msgid-Bugs-To: \n"
  9. "Last-Translator: \n"
  10. "Language-Team: \n"
  11. "MIME-Version: 1.0\n"
  12. "Content-Type: text/plain; charset=UTF-8\n"
  13. "Content-Transfer-Encoding: \n"
  14. "Plural-Forms: \n"
  15. #. module: privacy_consent
  16. #: model:mail.template,body_html:privacy_consent.template_consent
  17. msgid ""
  18. "<?xml version=\"1.0\"?>\n"
  19. "<div style=\"background:#F3F5F6;color:#515166;padding:25px 0px;font-family:Arial,Helvetica,sans-serif;font-size:14px;\">\n"
  20. " <table style=\"width:600px;margin:5px auto;\">\n"
  21. " <tbody>\n"
  22. " <tr>\n"
  23. " <td>\n"
  24. " <a href=\"/\">\n"
  25. " <img src=\"/logo\" alt=\"${object.activity_id.controller_id.display_name|safe}\" style=\"vertical-align:baseline;max-width:100px;\"/>\n"
  26. " </a>\n"
  27. " </td>\n"
  28. " </tr>\n"
  29. " </tbody>\n"
  30. " </table>\n"
  31. " <table style=\"width:600px;margin:0px auto;background:white;border:1px solid #e1e1e1;\">\n"
  32. " <tbody>\n"
  33. " <tr>\n"
  34. " <td colspan=\"2\" style=\"padding:15px 20px 0px 20px; font-size:16px;\">\n"
  35. " <p>\n"
  36. " Hello, ${object.partner_id.name|safe}\n"
  37. " </p>\n"
  38. " <p>\n"
  39. " We contacted you to ask you to give us your explicit consent to include your data in a data processing activity called\n"
  40. " <b>${object.activity_id.display_name|safe}</b>, property of\n"
  41. " <i>${object.activity_id.controller_id.display_name|safe}</i>\n"
  42. " </p>\n"
  43. " ${object.description or \"\"}\n"
  44. " <p>\n"
  45. " % if object.state == \"answered\":\n"
  46. " The last time you answered, you\n"
  47. " % elif object.state == \"sent\":\n"
  48. " If you do nothing, we will assume you have\n"
  49. " % endif\n"
  50. "\n"
  51. " % if object.accepted:\n"
  52. " <b>accepted</b>\n"
  53. " % else:\n"
  54. " <b>rejected</b>\n"
  55. " % endif\n"
  56. " such data processing.\n"
  57. " </p>\n"
  58. " <p>\n"
  59. " You can update your preferences below:\n"
  60. " </p>\n"
  61. " </td>\n"
  62. " </tr>\n"
  63. " <tr>\n"
  64. " <td style=\"padding:15px 20px 0px 20px; font-size:16px; text-align:right;\">\n"
  65. " <a href=\"/privacy/consent/accept/\" style=\"background-color: #449d44; padding: 12px; font-weight: 12px; text-decoration: none; color: #fff; border-radius: 5px; font-size:16px;\">\n"
  66. " Accept\n"
  67. " </a>\n"
  68. " </td>\n"
  69. " <td style=\"padding:15px 20px 0px 20px; font-size:16px; text-align:left;\">\n"
  70. " <a href=\"/privacy/consent/reject/\" style=\"background-color: #d9534f; padding: 12px; font-weight: 12px; text-decoration: none; color: #fff; border-radius: 5px; font-size:16px;\">\n"
  71. " Reject\n"
  72. " </a>\n"
  73. " </td>\n"
  74. " </tr>\n"
  75. " <tr>\n"
  76. " <td colspan=\"2\" style=\"padding:15px 20px 15px 20px; font-size:16px;\">\n"
  77. " <p>\n"
  78. " If you need further information, please respond to this email and we will attend your request as soon as possible.\n"
  79. " </p>\n"
  80. " <p>\n"
  81. " Thank you!\n"
  82. " </p>\n"
  83. " </td>\n"
  84. " </tr>\n"
  85. " </tbody>\n"
  86. " </table>\n"
  87. " <table style=\"width:600px;margin:0px auto;text-align:center;\">\n"
  88. " <tbody>\n"
  89. " <tr>\n"
  90. " <td style=\"padding-top:10px;font-size: 12px;\">\n"
  91. " <p>\n"
  92. " Sent by\n"
  93. " <a href=\"/\" style=\"color:#717188;\">${object.activity_id.controller_id.display_name|safe}</a>.\n"
  94. " </p>\n"
  95. " </td>\n"
  96. " </tr>\n"
  97. " </tbody>\n"
  98. " </table>\n"
  99. " </div>\n"
  100. " "
  101. msgstr ""
  102. #. module: privacy_consent
  103. #: model:mail.message.subtype,name:privacy_consent.mt_activity_acceptance_changed
  104. msgid "Acceptance Changed"
  105. msgstr ""
  106. #. module: privacy_consent
  107. #: model:mail.message.subtype,name:privacy_consent.mt_consent_acceptance_changed
  108. msgid "Acceptance Changed by Subject"
  109. msgstr ""
  110. #. module: privacy_consent
  111. #: model:mail.message.subtype,description:privacy_consent.mt_consent_acceptance_changed
  112. msgid "Acceptance status updated by subject"
  113. msgstr ""
  114. #. module: privacy_consent
  115. #: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__accepted
  116. #: model_terms:ir.ui.view,arch_db:privacy_consent.consent_search
  117. msgid "Accepted"
  118. msgstr ""
  119. #. module: privacy_consent
  120. #: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity__default_consent
  121. msgid "Accepted by default"
  122. msgstr ""
  123. #. module: privacy_consent
  124. #: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_needaction
  125. msgid "Action Needed"
  126. msgstr ""
  127. #. module: privacy_consent
  128. #: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__active
  129. msgid "Active"
  130. msgstr ""
  131. #. module: privacy_consent
  132. #: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__activity_id
  133. #: model_terms:ir.ui.view,arch_db:privacy_consent.consent_search
  134. msgid "Activity"
  135. msgstr ""
  136. #. module: privacy_consent
  137. #: model:ir.model.fields.selection,name:privacy_consent.selection__privacy_consent__state__answered
  138. msgid "Answered"
  139. msgstr ""
  140. #. module: privacy_consent
  141. #: model_terms:ir.ui.view,arch_db:privacy_consent.consent_form
  142. #: model_terms:ir.ui.view,arch_db:privacy_consent.consent_search
  143. msgid "Archived"
  144. msgstr ""
  145. #. module: privacy_consent
  146. #: model_terms:ir.ui.view,arch_db:privacy_consent.consent_form
  147. msgid "Ask for consent"
  148. msgstr ""
  149. #. module: privacy_consent
  150. #: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity__consent_required
  151. msgid "Ask subjects for consent"
  152. msgstr ""
  153. #. module: privacy_consent
  154. #: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_attachment_count
  155. msgid "Attachment Count"
  156. msgstr ""
  157. #. module: privacy_consent
  158. #: model:ir.model.fields.selection,name:privacy_consent.selection__privacy_activity__consent_required__auto
  159. msgid "Automatically"
  160. msgstr ""
  161. #. module: privacy_consent
  162. #: model:ir.model.fields.selection,name:privacy_consent.selection__privacy_consent__state__sent
  163. msgid "Awaiting response"
  164. msgstr ""
  165. #. module: privacy_consent
  166. #: model_terms:ir.ui.view,arch_db:privacy_consent.activity_form
  167. msgid "Consent"
  168. msgstr ""
  169. #. module: privacy_consent
  170. #: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity__consent_template_default_body_html
  171. msgid "Consent Template Default Body Html"
  172. msgstr ""
  173. #. module: privacy_consent
  174. #: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity__consent_template_default_subject
  175. msgid "Consent Template Default Subject"
  176. msgstr ""
  177. #. module: privacy_consent
  178. #: model:ir.model,name:privacy_consent.model_privacy_consent
  179. msgid "Consent of data processing"
  180. msgstr ""
  181. #. module: privacy_consent
  182. #: model:ir.actions.act_window,name:privacy_consent.consent_action
  183. #: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity__consent_ids
  184. #: model:ir.model.fields,field_description:privacy_consent.field_res_partner__privacy_consent_count
  185. #: model:ir.model.fields,field_description:privacy_consent.field_res_users__privacy_consent_count
  186. #: model:ir.ui.menu,name:privacy_consent.menu_privacy_consent
  187. msgid "Consents"
  188. msgstr ""
  189. #. module: privacy_consent
  190. #: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity__consent_count
  191. msgid "Consents count"
  192. msgstr ""
  193. #. module: privacy_consent
  194. #: model:ir.model,name:privacy_consent.model_res_partner
  195. msgid "Contact"
  196. msgstr ""
  197. #. module: privacy_consent
  198. #: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__create_uid
  199. msgid "Created by"
  200. msgstr ""
  201. #. module: privacy_consent
  202. #: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__create_date
  203. msgid "Created on"
  204. msgstr ""
  205. #. module: privacy_consent
  206. #: model:ir.model,name:privacy_consent.model_privacy_activity
  207. msgid "Data processing activities"
  208. msgstr ""
  209. #. module: privacy_consent
  210. #: model:mail.template,subject:privacy_consent.template_consent
  211. msgid ""
  212. "Data processing consent request for ${object.activity_id.display_name|safe}"
  213. msgstr ""
  214. #. module: privacy_consent
  215. #: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__display_name
  216. msgid "Display Name"
  217. msgstr ""
  218. #. module: privacy_consent
  219. #: model:ir.model.fields.selection,name:privacy_consent.selection__privacy_consent__state__draft
  220. msgid "Draft"
  221. msgstr ""
  222. #. module: privacy_consent
  223. #: model:ir.model.constraint,message:privacy_consent.constraint_privacy_consent_unique_partner_activity
  224. msgid "Duplicated partner in this data processing activity"
  225. msgstr ""
  226. #. module: privacy_consent
  227. #: model:ir.model,name:privacy_consent.model_mail_template
  228. msgid "Email Templates"
  229. msgstr ""
  230. #. module: privacy_consent
  231. #: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity__consent_template_id
  232. msgid "Email template"
  233. msgstr ""
  234. #. module: privacy_consent
  235. #: model:ir.model.fields,help:privacy_consent.field_privacy_activity__consent_template_id
  236. msgid ""
  237. "Email to be sent to subjects to ask for consent. A good template should "
  238. "include details about the current consent request status, how to change it, "
  239. "and where to get more information."
  240. msgstr ""
  241. #. module: privacy_consent
  242. #: model:ir.model.fields,help:privacy_consent.field_privacy_activity__consent_required
  243. msgid ""
  244. "Enable if you need to track any kind of consent from the affected subjects"
  245. msgstr ""
  246. #. module: privacy_consent
  247. #: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_follower_ids
  248. msgid "Followers"
  249. msgstr ""
  250. #. module: privacy_consent
  251. #: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_channel_ids
  252. msgid "Followers (Channels)"
  253. msgstr ""
  254. #. module: privacy_consent
  255. #: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_partner_ids
  256. msgid "Followers (Partners)"
  257. msgstr ""
  258. #. module: privacy_consent
  259. #: model_terms:ir.ui.view,arch_db:privacy_consent.activity_form
  260. msgid "Generate and enqueue missing consent requests"
  261. msgstr ""
  262. #. module: privacy_consent
  263. #: model_terms:ir.ui.view,arch_db:privacy_consent.activity_form
  264. msgid "Generate missing draft consent requests"
  265. msgstr ""
  266. #. module: privacy_consent
  267. #: code:addons/privacy_consent/models/privacy_activity.py:0
  268. #, python-format
  269. msgid "Generated consents"
  270. msgstr ""
  271. #. module: privacy_consent
  272. #: model_terms:ir.ui.view,arch_db:privacy_consent.consent_search
  273. msgid "Group By"
  274. msgstr ""
  275. #. module: privacy_consent
  276. #: model_terms:ir.ui.view,arch_db:privacy_consent.form
  277. msgid "Hello,"
  278. msgstr ""
  279. #. module: privacy_consent
  280. #: model_terms:ir.ui.view,arch_db:privacy_consent.form
  281. msgid "I <b>accept</b> this processing of my data"
  282. msgstr ""
  283. #. module: privacy_consent
  284. #: model_terms:ir.ui.view,arch_db:privacy_consent.form
  285. msgid "I <b>reject</b> this processing of my data"
  286. msgstr ""
  287. #. module: privacy_consent
  288. #: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__id
  289. msgid "ID"
  290. msgstr ""
  291. #. module: privacy_consent
  292. #: model:ir.model.fields,help:privacy_consent.field_privacy_consent__message_needaction
  293. #: model:ir.model.fields,help:privacy_consent.field_privacy_consent__message_unread
  294. msgid "If checked, new messages require your attention."
  295. msgstr ""
  296. #. module: privacy_consent
  297. #: model:ir.model.fields,help:privacy_consent.field_privacy_consent__message_has_error
  298. #: model:ir.model.fields,help:privacy_consent.field_privacy_consent__message_has_sms_error
  299. msgid "If checked, some messages have a delivery error."
  300. msgstr ""
  301. #. module: privacy_consent
  302. #: model_terms:ir.ui.view,arch_db:privacy_consent.form
  303. msgid "If it was a mistake, you can undo it here:"
  304. msgstr ""
  305. #. module: privacy_consent
  306. #: model:ir.model.fields,help:privacy_consent.field_privacy_consent__accepted
  307. msgid ""
  308. "Indicates current acceptance status, which can come from subject's last "
  309. "answer, or from the default specified in the related data processing "
  310. "activity."
  311. msgstr ""
  312. #. module: privacy_consent
  313. #: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_is_follower
  314. msgid "Is Follower"
  315. msgstr ""
  316. #. module: privacy_consent
  317. #: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__last_metadata
  318. msgid "Last Metadata"
  319. msgstr ""
  320. #. module: privacy_consent
  321. #: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent____last_update
  322. msgid "Last Modified on"
  323. msgstr ""
  324. #. module: privacy_consent
  325. #: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__write_uid
  326. msgid "Last Updated by"
  327. msgstr ""
  328. #. module: privacy_consent
  329. #: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__write_date
  330. msgid "Last Updated on"
  331. msgstr ""
  332. #. module: privacy_consent
  333. #: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_main_attachment_id
  334. msgid "Main Attachment"
  335. msgstr ""
  336. #. module: privacy_consent
  337. #: model:ir.model.fields.selection,name:privacy_consent.selection__privacy_activity__consent_required__manual
  338. msgid "Manually"
  339. msgstr ""
  340. #. module: privacy_consent
  341. #: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_has_error
  342. msgid "Message Delivery error"
  343. msgstr ""
  344. #. module: privacy_consent
  345. #: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_ids
  346. msgid "Messages"
  347. msgstr ""
  348. #. module: privacy_consent
  349. #: model:ir.model.fields,help:privacy_consent.field_privacy_consent__last_metadata
  350. msgid "Metadata from the last acceptance or rejection by the subject"
  351. msgstr ""
  352. #. module: privacy_consent
  353. #: code:addons/privacy_consent/models/mail_template.py:0
  354. #, python-format
  355. msgid ""
  356. "Missing privacy consent link placeholders. You need at least these two links:\n"
  357. "<a href=\"%s\">Accept</a>\n"
  358. "<a href=\"%s\">Reject</a>"
  359. msgstr ""
  360. #. module: privacy_consent
  361. #: model:mail.message.subtype,name:privacy_consent.mt_activity_consent_new
  362. #: model:mail.message.subtype,name:privacy_consent.mt_consent_consent_new
  363. msgid "New Consent"
  364. msgstr ""
  365. #. module: privacy_consent
  366. #: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_needaction_counter
  367. msgid "Number of Actions"
  368. msgstr ""
  369. #. module: privacy_consent
  370. #: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_has_error_counter
  371. msgid "Number of errors"
  372. msgstr ""
  373. #. module: privacy_consent
  374. #: model:ir.model.fields,help:privacy_consent.field_privacy_consent__message_needaction_counter
  375. msgid "Number of messages which requires an action"
  376. msgstr ""
  377. #. module: privacy_consent
  378. #: model:ir.model.fields,help:privacy_consent.field_privacy_consent__message_has_error_counter
  379. msgid "Number of messages with delivery error"
  380. msgstr ""
  381. #. module: privacy_consent
  382. #: model:ir.model.fields,help:privacy_consent.field_privacy_consent__message_unread_counter
  383. msgid "Number of unread messages"
  384. msgstr ""
  385. #. module: privacy_consent
  386. #: model:ir.model,name:privacy_consent.model_mail_mail
  387. msgid "Outgoing Mails"
  388. msgstr ""
  389. #. module: privacy_consent
  390. #: model:mail.message.subtype,description:privacy_consent.mt_activity_acceptance_changed
  391. msgid "Privacy consent request acceptance status changed"
  392. msgstr ""
  393. #. module: privacy_consent
  394. #: model:mail.message.subtype,description:privacy_consent.mt_activity_consent_new
  395. #: model:mail.message.subtype,description:privacy_consent.mt_consent_consent_new
  396. msgid "Privacy consent request created"
  397. msgstr ""
  398. #. module: privacy_consent
  399. #: model:mail.message.subtype,description:privacy_consent.mt_activity_state_changed
  400. #: model:mail.message.subtype,description:privacy_consent.mt_consent_state_changed
  401. msgid "Privacy consent request state changed"
  402. msgstr ""
  403. #. module: privacy_consent
  404. #: model:ir.model.fields,help:privacy_consent.field_res_partner__privacy_consent_count
  405. #: model:ir.model.fields,help:privacy_consent.field_res_users__privacy_consent_count
  406. msgid "Privacy consent requests amount"
  407. msgstr ""
  408. #. module: privacy_consent
  409. #: model:ir.model.fields,field_description:privacy_consent.field_res_partner__privacy_consent_ids
  410. #: model:ir.model.fields,field_description:privacy_consent.field_res_users__privacy_consent_ids
  411. msgid "Privacy consents"
  412. msgstr ""
  413. #. module: privacy_consent
  414. #: model:ir.actions.server,name:privacy_consent.cron_auto_consent_ir_actions_server
  415. #: model:ir.cron,cron_name:privacy_consent.cron_auto_consent
  416. #: model:ir.cron,name:privacy_consent.cron_auto_consent
  417. msgid "Request automatic data processing consents"
  418. msgstr ""
  419. #. module: privacy_consent
  420. #: code:addons/privacy_consent/models/privacy_activity.py:0
  421. #, python-format
  422. msgid "Require consent is available only for subjects in current database."
  423. msgstr ""
  424. #. module: privacy_consent
  425. #: model:ir.model.fields,help:privacy_consent.field_privacy_activity__server_action_id
  426. msgid ""
  427. "Run this action when a new consent request is created or its acceptance "
  428. "status is updated."
  429. msgstr ""
  430. #. module: privacy_consent
  431. #: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_has_sms_error
  432. msgid "SMS Delivery error"
  433. msgstr ""
  434. #. module: privacy_consent
  435. #: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity__server_action_id
  436. msgid "Server action"
  437. msgstr ""
  438. #. module: privacy_consent
  439. #: model:ir.model.fields,help:privacy_consent.field_privacy_activity__default_consent
  440. msgid "Should we assume the subject has accepted if we receive no response?"
  441. msgstr ""
  442. #. module: privacy_consent
  443. #: model_terms:ir.ui.view,arch_db:privacy_consent.form
  444. msgid "Sincerely,<br/>"
  445. msgstr ""
  446. #. module: privacy_consent
  447. #: code:addons/privacy_consent/models/privacy_activity.py:0
  448. #, python-format
  449. msgid "Specify a mail template to ask automated consent."
  450. msgstr ""
  451. #. module: privacy_consent
  452. #: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__state
  453. #: model_terms:ir.ui.view,arch_db:privacy_consent.consent_search
  454. msgid "State"
  455. msgstr ""
  456. #. module: privacy_consent
  457. #: model:mail.message.subtype,name:privacy_consent.mt_activity_state_changed
  458. #: model:mail.message.subtype,name:privacy_consent.mt_consent_state_changed
  459. msgid "State Changed"
  460. msgstr ""
  461. #. module: privacy_consent
  462. #: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__partner_id
  463. msgid "Subject"
  464. msgstr ""
  465. #. module: privacy_consent
  466. #: model:ir.model.fields,help:privacy_consent.field_privacy_consent__partner_id
  467. msgid "Subject asked for consent."
  468. msgstr ""
  469. #. module: privacy_consent
  470. #: model:ir.actions.server,name:privacy_consent.sync_blacklist
  471. msgid "Sync partner's email blacklist status"
  472. msgstr ""
  473. #. module: privacy_consent
  474. #: model_terms:ir.ui.view,arch_db:privacy_consent.form
  475. msgid "Thank you!"
  476. msgstr ""
  477. #. module: privacy_consent
  478. #: model_terms:ir.ui.view,arch_db:privacy_consent.form
  479. msgid "Thanks for your response."
  480. msgstr ""
  481. #. module: privacy_consent
  482. #: model_terms:ir.ui.view,arch_db:privacy_consent.activity_form
  483. msgid "This could enqueue many consent emails, are you sure to proceed?"
  484. msgstr ""
  485. #. module: privacy_consent
  486. #: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_unread
  487. msgid "Unread Messages"
  488. msgstr ""
  489. #. module: privacy_consent
  490. #: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_unread_counter
  491. msgid "Unread Messages Counter"
  492. msgstr ""
  493. #. module: privacy_consent
  494. #: model_terms:ir.ui.view,arch_db:privacy_consent.form
  495. msgid ""
  496. "We asked you to authorize us to process your data in this data processing "
  497. "activity:"
  498. msgstr ""
  499. #. module: privacy_consent
  500. #: model_terms:ir.ui.view,arch_db:privacy_consent.form
  501. msgid "We have recorded this action on your side."
  502. msgstr ""
  503. #. module: privacy_consent
  504. #: model_terms:ir.ui.view,arch_db:privacy_consent.form
  505. msgid "You have <b class=\"text-danger\">rejected</b> such processing."
  506. msgstr ""
  507. #. module: privacy_consent
  508. #: model_terms:ir.ui.view,arch_db:privacy_consent.form
  509. msgid "You have <b class=\"text-success\">accepted</b> such processing."
  510. msgstr ""