From d1bfb20a2775484b59e69a1c90bcda191155e35f Mon Sep 17 00:00:00 2001 From: TheSumitBasak Date: Sun, 4 Jan 2026 12:00:22 +0000 Subject: [PATCH 1/4] [19.0][MIG] mail_activity_unlink_log: migrate to 19.0 --- mail_activity_unlink_log/README.rst | 83 ++++ mail_activity_unlink_log/__init__.py | 1 + mail_activity_unlink_log/__manifest__.py | 14 + .../data/unlink_message.xml | 38 ++ mail_activity_unlink_log/i18n/es.po | 56 +++ mail_activity_unlink_log/i18n/it.po | 47 ++ .../i18n/mail_activity_unlink_log.pot | 44 ++ mail_activity_unlink_log/models/__init__.py | 1 + .../models/mail_activity.py | 39 ++ mail_activity_unlink_log/pyproject.toml | 3 + .../readme/CONTRIBUTORS.md | 2 + .../readme/DESCRIPTION.md | 3 + .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 432 ++++++++++++++++++ mail_activity_unlink_log/tests/__init__.py | 1 + .../tests/test_activity_unlink.py | 49 ++ 16 files changed, 813 insertions(+) create mode 100644 mail_activity_unlink_log/README.rst create mode 100644 mail_activity_unlink_log/__init__.py create mode 100644 mail_activity_unlink_log/__manifest__.py create mode 100644 mail_activity_unlink_log/data/unlink_message.xml create mode 100644 mail_activity_unlink_log/i18n/es.po create mode 100644 mail_activity_unlink_log/i18n/it.po create mode 100644 mail_activity_unlink_log/i18n/mail_activity_unlink_log.pot create mode 100644 mail_activity_unlink_log/models/__init__.py create mode 100644 mail_activity_unlink_log/models/mail_activity.py create mode 100644 mail_activity_unlink_log/pyproject.toml create mode 100644 mail_activity_unlink_log/readme/CONTRIBUTORS.md create mode 100644 mail_activity_unlink_log/readme/DESCRIPTION.md create mode 100644 mail_activity_unlink_log/static/description/icon.png create mode 100644 mail_activity_unlink_log/static/description/index.html create mode 100644 mail_activity_unlink_log/tests/__init__.py create mode 100644 mail_activity_unlink_log/tests/test_activity_unlink.py diff --git a/mail_activity_unlink_log/README.rst b/mail_activity_unlink_log/README.rst new file mode 100644 index 000000000..608cb0379 --- /dev/null +++ b/mail_activity_unlink_log/README.rst @@ -0,0 +1,83 @@ +.. image:: https://odoo-community.org/readme-banner-image + :target: https://odoo-community.org/get-involved?utm_source=readme + :alt: Odoo Community Association + +============================== +Mail Activities: log on unlink +============================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:9196aedd490fc01c791256582122032365ce7d26a11a5c0e13b2ae66777b06c3 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/license-AGPL--3-blue.png + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fsocial-lightgray.png?logo=github + :target: https://github.com/OCA/social/tree/19.0/mail_activity_unlink_log + :alt: OCA/social +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/social-19-0/social-19-0-mail_activity_unlink_log + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png + :target: https://runboat.odoo-community.org/builds?repo=OCA/social&target_branch=19.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This addon enforces the creation of a message when an activity is +unlinked. This change tries to avoid a possible bad practice of deletion +of an activity without notifying the deletion. + +**Table of contents** + +.. contents:: + :local: + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +------- + +* CreuBlanca + +Contributors +------------ + +- Enric Tobella +- Sumit Basak (`@TheSumitBasak `__) + +Maintainers +----------- + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +This module is part of the `OCA/social `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/mail_activity_unlink_log/__init__.py b/mail_activity_unlink_log/__init__.py new file mode 100644 index 000000000..0650744f6 --- /dev/null +++ b/mail_activity_unlink_log/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/mail_activity_unlink_log/__manifest__.py b/mail_activity_unlink_log/__manifest__.py new file mode 100644 index 000000000..8b5f6c190 --- /dev/null +++ b/mail_activity_unlink_log/__manifest__.py @@ -0,0 +1,14 @@ +# Copyright 2023 CreuBlanca +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +{ + "name": "Mail Activities: log on unlink", + "summary": """ + Leave a message when an activity is unlinked""", + "version": "19.0.1.0.0", + "license": "AGPL-3", + "author": "CreuBlanca,Odoo Community Association (OCA)", + "website": "https://github.com/OCA/social", + "depends": ["mail"], + "data": ["data/unlink_message.xml"], +} diff --git a/mail_activity_unlink_log/data/unlink_message.xml b/mail_activity_unlink_log/data/unlink_message.xml new file mode 100644 index 000000000..e19d94c3e --- /dev/null +++ b/mail_activity_unlink_log/data/unlink_message.xml @@ -0,0 +1,38 @@ + + + + + Activities unlink + + + + + + + + + diff --git a/mail_activity_unlink_log/i18n/es.po b/mail_activity_unlink_log/i18n/es.po new file mode 100644 index 000000000..a599493d3 --- /dev/null +++ b/mail_activity_unlink_log/i18n/es.po @@ -0,0 +1,56 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mail_activity_unlink_log +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2024-01-28 11:33+0000\n" +"Last-Translator: Ivorra78 \n" +"Language-Team: none\n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" + +#. module: mail_activity_unlink_log +#: model_terms:ir.ui.view,arch_db:mail_activity_unlink_log.message_activity_unlink +msgid "(originally assigned to" +msgstr "(originalmente asignado a" + +#. module: mail_activity_unlink_log +#: model_terms:ir.ui.view,arch_db:mail_activity_unlink_log.message_activity_unlink +msgid "Original note:" +msgstr "Nota original:" + +#. module: mail_activity_unlink_log +#: model:mail.message.subtype,name:mail_activity_unlink_log.mt_activities_unlink +msgid "Activities unlink" +msgstr "Desvincular actividades" + +#. module: mail_activity_unlink_log +#: model:ir.model,name:mail_activity_unlink_log.model_mail_activity +msgid "Activity" +msgstr "Actividades" + +#. module: mail_activity_unlink_log +#: model:ir.model,name:mail_activity_unlink_log.model_mail_activity_mixin +msgid "Activity Mixin" +msgstr "Mezclador de Actividad" + +#. module: mail_activity_unlink_log +#: model_terms:ir.ui.view,arch_db:mail_activity_unlink_log.message_activity_unlink +msgid "deleted" +msgstr "borrado" + +#~ msgid "Display Name" +#~ msgstr "Mostrar Nombre" + +#~ msgid "ID" +#~ msgstr "ID" + +#~ msgid "Last Modified on" +#~ msgstr "Última Modificación el" diff --git a/mail_activity_unlink_log/i18n/it.po b/mail_activity_unlink_log/i18n/it.po new file mode 100644 index 000000000..d4744cce5 --- /dev/null +++ b/mail_activity_unlink_log/i18n/it.po @@ -0,0 +1,47 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mail_activity_unlink_log +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2025-02-24 11:06+0000\n" +"Last-Translator: mymage \n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.6.2\n" + +#. module: mail_activity_unlink_log +#: model_terms:ir.ui.view,arch_db:mail_activity_unlink_log.message_activity_unlink +msgid "(originally assigned to" +msgstr "(assegnato originariamente a" + +#. module: mail_activity_unlink_log +#: model_terms:ir.ui.view,arch_db:mail_activity_unlink_log.message_activity_unlink +msgid "Original note:" +msgstr "Nota origine:" + +#. module: mail_activity_unlink_log +#: model:mail.message.subtype,name:mail_activity_unlink_log.mt_activities_unlink +msgid "Activities unlink" +msgstr "Scollega attività" + +#. module: mail_activity_unlink_log +#: model:ir.model,name:mail_activity_unlink_log.model_mail_activity +msgid "Activity" +msgstr "Attività" + +#. module: mail_activity_unlink_log +#: model:ir.model,name:mail_activity_unlink_log.model_mail_activity_mixin +msgid "Activity Mixin" +msgstr "Mixin attività" + +#. module: mail_activity_unlink_log +#: model_terms:ir.ui.view,arch_db:mail_activity_unlink_log.message_activity_unlink +msgid "deleted" +msgstr "cancellata" diff --git a/mail_activity_unlink_log/i18n/mail_activity_unlink_log.pot b/mail_activity_unlink_log/i18n/mail_activity_unlink_log.pot new file mode 100644 index 000000000..5644f1c31 --- /dev/null +++ b/mail_activity_unlink_log/i18n/mail_activity_unlink_log.pot @@ -0,0 +1,44 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mail_activity_unlink_log +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 18.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: mail_activity_unlink_log +#: model_terms:ir.ui.view,arch_db:mail_activity_unlink_log.message_activity_unlink +msgid "(originally assigned to" +msgstr "" + +#. module: mail_activity_unlink_log +#: model_terms:ir.ui.view,arch_db:mail_activity_unlink_log.message_activity_unlink +msgid "Original note:" +msgstr "" + +#. module: mail_activity_unlink_log +#: model:mail.message.subtype,name:mail_activity_unlink_log.mt_activities_unlink +msgid "Activities unlink" +msgstr "" + +#. module: mail_activity_unlink_log +#: model:ir.model,name:mail_activity_unlink_log.model_mail_activity +msgid "Activity" +msgstr "" + +#. module: mail_activity_unlink_log +#: model:ir.model,name:mail_activity_unlink_log.model_mail_activity_mixin +msgid "Activity Mixin" +msgstr "" + +#. module: mail_activity_unlink_log +#: model_terms:ir.ui.view,arch_db:mail_activity_unlink_log.message_activity_unlink +msgid "deleted" +msgstr "" diff --git a/mail_activity_unlink_log/models/__init__.py b/mail_activity_unlink_log/models/__init__.py new file mode 100644 index 000000000..1ff388029 --- /dev/null +++ b/mail_activity_unlink_log/models/__init__.py @@ -0,0 +1 @@ +from . import mail_activity diff --git a/mail_activity_unlink_log/models/mail_activity.py b/mail_activity_unlink_log/models/mail_activity.py new file mode 100644 index 000000000..4a7410fa2 --- /dev/null +++ b/mail_activity_unlink_log/models/mail_activity.py @@ -0,0 +1,39 @@ +# Copyright 2023 CreuBlanca +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import models + + +class MailActivity(models.Model): + _inherit = "mail.activity" + + def _action_done(self, *args, **kwargs): + return super( + MailActivity, self.with_context(activity_unlink_no_message=True) + )._action_done(*args, **kwargs) + + def unlink(self): + if not self.env.context.get("activity_unlink_no_message"): + for activity in self: + record = self.env[activity.res_model].browse(activity.res_id) + record.message_post_with_source( + "mail_activity_unlink_log.message_activity_unlink", + render_values={ + "activity": activity, + "display_assignee": activity.user_id != self.env.user, + }, + subtype_id=self.env["ir.model.data"]._xmlid_to_res_id( + "mail_activity_unlink_log.mt_activities_unlink" + ), + mail_activity_type_id=activity.activity_type_id.id, + ) + return super().unlink() + + +class MailActivityMixin(models.AbstractModel): + _inherit = "mail.activity.mixin" + + def unlink(self): + return super( + MailActivityMixin, self.with_context(activity_unlink_no_message=True) + ).unlink() diff --git a/mail_activity_unlink_log/pyproject.toml b/mail_activity_unlink_log/pyproject.toml new file mode 100644 index 000000000..4231d0ccc --- /dev/null +++ b/mail_activity_unlink_log/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/mail_activity_unlink_log/readme/CONTRIBUTORS.md b/mail_activity_unlink_log/readme/CONTRIBUTORS.md new file mode 100644 index 000000000..0d6def2ce --- /dev/null +++ b/mail_activity_unlink_log/readme/CONTRIBUTORS.md @@ -0,0 +1,2 @@ +- Enric Tobella +- Sumit Basak ([@TheSumitBasak](https://github.com/TheSumitBasak)) \ No newline at end of file diff --git a/mail_activity_unlink_log/readme/DESCRIPTION.md b/mail_activity_unlink_log/readme/DESCRIPTION.md new file mode 100644 index 000000000..6991c0122 --- /dev/null +++ b/mail_activity_unlink_log/readme/DESCRIPTION.md @@ -0,0 +1,3 @@ +This addon enforces the creation of a message when an activity is +unlinked. This change tries to avoid a possible bad practice of deletion +of an activity without notifying the deletion. diff --git a/mail_activity_unlink_log/static/description/icon.png b/mail_activity_unlink_log/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 zcmW++2RxMjAAjx~&dlBk9S+%}OXg)AGE&Cb*&}d0jUxM@u(PQx^-s)697TX`ehR4?GS^qbkof1cslKgkU)h65qZ9Oc=ml_0temigYLJfnz{IDzUf>bGs4N!v3=Z3jMq&A#7%rM5eQ#dc?k~! zVpnB`o+K7|Al`Q_U;eD$B zfJtP*jH`siUq~{KE)`jP2|#TUEFGRryE2`i0**z#*^6~AI|YzIWy$Cu#CSLW3q=GA z6`?GZymC;dCPk~rBS%eCb`5OLr;RUZ;D`}um=H)BfVIq%7VhiMr)_#G0N#zrNH|__ zc+blN2UAB0=617@>_u;MPHN;P;N#YoE=)R#i$k_`UAA>WWCcEVMh~L_ zj--gtp&|K1#58Yz*AHCTMziU1Jzt_jG0I@qAOHsk$2}yTmVkBp_eHuY$A9)>P6o~I z%aQ?!(GqeQ-Y+b0I(m9pwgi(IIZZzsbMv+9w{PFtd_<_(LA~0H(xz{=FhLB@(1&qHA5EJw1>>=%q2f&^X>IQ{!GJ4e9U z&KlB)z(84HmNgm2hg2C0>WM{E(DdPr+EeU_N@57;PC2&DmGFW_9kP&%?X4}+xWi)( z;)z%wI5>D4a*5XwD)P--sPkoY(a~WBw;E~AW`Yue4kFa^LM3X`8x|}ZUeMnqr}>kH zG%WWW>3ml$Yez?i%)2pbKPI7?5o?hydokgQyZsNEr{a|mLdt;X2TX(#B1j35xPnPW z*bMSSOauW>o;*=kO8ojw91VX!qoOQb)zHJ!odWB}d+*K?#sY_jqPdg{Sm2HdYzdEx zOGVPhVRTGPtv0o}RfVP;Nd(|CB)I;*t&QO8h zFfekr30S!-LHmV_Su-W+rEwYXJ^;6&3|L$mMC8*bQptyOo9;>Qb9Q9`ySe3%V$A*9 zeKEe+b0{#KWGp$F+tga)0RtI)nhMa-K@JS}2krK~n8vJ=Ngm?R!9G<~RyuU0d?nz# z-5EK$o(!F?hmX*2Yt6+coY`6jGbb7tF#6nHA zuKk=GGJ;ZwON1iAfG$E#Y7MnZVmrY|j0eVI(DN_MNFJmyZ|;w4tf@=CCDZ#5N_0K= z$;R~bbk?}TpfDjfB&aiQ$VA}s?P}xPERJG{kxk5~R`iRS(SK5d+Xs9swCozZISbnS zk!)I0>t=A<-^z(cmSFz3=jZ23u13X><0b)P)^1T_))Kr`e!-pb#q&J*Q`p+B6la%C zuVl&0duN<;uOsB3%T9Fp8t{ED108<+W(nOZd?gDnfNBC3>M8WE61$So|P zVvqH0SNtDTcsUdzaMDpT=Ty0pDHHNL@Z0w$Y`XO z2M-_r1S+GaH%pz#Uy0*w$Vdl=X=rQXEzO}d6J^R6zjM1u&c9vYLvLp?W7w(?np9x1 zE_0JSAJCPB%i7p*Wvg)pn5T`8k3-uR?*NT|J`eS#_#54p>!p(mLDvmc-3o0mX*mp_ zN*AeS<>#^-{S%W<*mz^!X$w_2dHWpcJ6^j64qFBft-o}o_Vx80o0>}Du;>kLts;$8 zC`7q$QI(dKYG`Wa8#wl@V4jVWBRGQ@1dr-hstpQL)Tl+aqVpGpbSfN>5i&QMXfiZ> zaA?T1VGe?rpQ@;+pkrVdd{klI&jVS@I5_iz!=UMpTsa~mBga?1r}aRBm1WS;TT*s0f0lY=JBl66Upy)-k4J}lh=P^8(SXk~0xW=T9v*B|gzIhN z>qsO7dFd~mgxAy4V?&)=5ieYq?zi?ZEoj)&2o)RLy=@hbCRcfT5jigwtQGE{L*8<@Yd{zg;CsL5mvzfDY}P-wos_6PfprFVaeqNE%h zKZhLtcQld;ZD+>=nqN~>GvROfueSzJD&BE*}XfU|H&(FssBqY=hPCt`d zH?@s2>I(|;fcW&YM6#V#!kUIP8$Nkdh0A(bEVj``-AAyYgwY~jB zT|I7Bf@%;7aL7Wf4dZ%VqF$eiaC38OV6oy3Z#TER2G+fOCd9Iaoy6aLYbPTN{XRPz z;U!V|vBf%H!}52L2gH_+j;`bTcQRXB+y9onc^wLm5wi3-Be}U>k_u>2Eg$=k!(l@I zcCg+flakT2Nej3i0yn+g+}%NYb?ta;R?(g5SnwsQ49U8Wng8d|{B+lyRcEDvR3+`O{zfmrmvFrL6acVP%yG98X zo&+VBg@px@i)%o?dG(`T;n*$S5*rnyiR#=wW}}GsAcfyQpE|>a{=$Hjg=-*_K;UtD z#z-)AXwSRY?OPefw^iI+ z)AXz#PfEjlwTes|_{sB?4(O@fg0AJ^g8gP}ex9Ucf*@_^J(s_5jJV}c)s$`Myn|Kd z$6>}#q^n{4vN@+Os$m7KV+`}c%4)4pv@06af4-x5#wj!KKb%caK{A&Y#Rfs z-po?Dcb1({W=6FKIUirH&(yg=*6aLCekcKwyfK^JN5{wcA3nhO(o}SK#!CINhI`-I z1)6&n7O&ZmyFMuNwvEic#IiOAwNkR=u5it{B9n2sAJV5pNhar=j5`*N!Na;c7g!l$ z3aYBqUkqqTJ=Re-;)s!EOeij=7SQZ3Hq}ZRds%IM*PtM$wV z@;rlc*NRK7i3y5BETSKuumEN`Xu_8GP1Ri=OKQ$@I^ko8>H6)4rjiG5{VBM>B|%`&&s^)jS|-_95&yc=GqjNo{zFkw%%HHhS~e=s zD#sfS+-?*t|J!+ozP6KvtOl!R)@@-z24}`9{QaVLD^9VCSR2b`b!KC#o;Ki<+wXB6 zx3&O0LOWcg4&rv4QG0)4yb}7BFSEg~=IR5#ZRj8kg}dS7_V&^%#Do==#`u zpy6{ox?jWuR(;pg+f@mT>#HGWHAJRRDDDv~@(IDw&R>9643kK#HN`!1vBJHnC+RM&yIh8{gG2q zA%e*U3|N0XSRa~oX-3EAneep)@{h2vvd3Xvy$7og(sayr@95+e6~Xvi1tUqnIxoIH zVWo*OwYElb#uyW{Imam6f2rGbjR!Y3`#gPqkv57dB6K^wRGxc9B(t|aYDGS=m$&S!NmCtrMMaUg(c zc2qC=2Z`EEFMW-me5B)24AqF*bV5Dr-M5ig(l-WPS%CgaPzs6p_gnCIvTJ=Y<6!gT zVt@AfYCzjjsMEGi=rDQHo0yc;HqoRNnNFeWZgcm?f;cp(6CNylj36DoL(?TS7eU#+ z7&mfr#y))+CJOXQKUMZ7QIdS9@#-}7y2K1{8)cCt0~-X0O!O?Qx#E4Og+;A2SjalQ zs7r?qn0H044=sDN$SRG$arw~n=+T_DNdSrarmu)V6@|?1-ZB#hRn`uilTGPJ@fqEy zGt(f0B+^JDP&f=r{#Y_wi#AVDf-y!RIXU^0jXsFpf>=Ji*TeqSY!H~AMbJdCGLhC) zn7Rx+sXw6uYj;WRYrLd^5IZq@6JI1C^YkgnedZEYy<&4(z%Q$5yv#Boo{AH8n$a zhb4Y3PWdr269&?V%uI$xMcUrMzl=;w<_nm*qr=c3Rl@i5wWB;e-`t7D&c-mcQl7x! zZWB`UGcw=Y2=}~wzrfLx=uet<;m3~=8I~ZRuzvMQUQdr+yTV|ATf1Uuomr__nDf=X zZ3WYJtHp_ri(}SQAPjv+Y+0=fH4krOP@S&=zZ-t1jW1o@}z;xk8 z(Nz1co&El^HK^NrhVHa-_;&88vTU>_J33=%{if;BEY*J#1n59=07jrGQ#IP>@u#3A z;!q+E1Rj3ZJ+!4bq9F8PXJ@yMgZL;>&gYA0%_Kbi8?S=XGM~dnQZQ!yBSgcZhY96H zrWnU;k)qy`rX&&xlDyA%(a1Hhi5CWkmg(`Gb%m(HKi-7Z!LKGRP_B8@`7&hdDy5n= z`OIxqxiVfX@OX1p(mQu>0Ai*v_cTMiw4qRt3~NBvr9oBy0)r>w3p~V0SCm=An6@3n)>@z!|o-$HvDK z|3D2ZMJkLE5loMKl6R^ez@Zz%S$&mbeoqH5`Bb){Ei21q&VP)hWS2tjShfFtGE+$z zzCR$P#uktu+#!w)cX!lWN1XU%K-r=s{|j?)Akf@q#3b#{6cZCuJ~gCxuMXRmI$nGtnH+-h z+GEi!*X=AP<|fG`1>MBdTb?28JYc=fGvAi2I<$B(rs$;eoJCyR6_bc~p!XR@O-+sD z=eH`-ye})I5ic1eL~TDmtfJ|8`0VJ*Yr=hNCd)G1p2MMz4C3^Mj?7;!w|Ly%JqmuW zlIEW^Ft%z?*|fpXda>Jr^1noFZEwFgVV%|*XhH@acv8rdGxeEX{M$(vG{Zw+x(ei@ zmfXb22}8-?Fi`vo-YVrTH*C?a8%M=Hv9MqVH7H^J$KsD?>!SFZ;ZsvnHr_gn=7acz z#W?0eCdVhVMWN12VV^$>WlQ?f;P^{(&pYTops|btm6aj>_Uz+hqpGwB)vWp0Cf5y< zft8-je~nn?W11plq}N)4A{l8I7$!ks_x$PXW-2XaRFswX_BnF{R#6YIwMhAgd5F9X zGmwdadS6(a^fjHtXg8=l?Rc0Sm%hk6E9!5cLVloEy4eh(=FwgP`)~I^5~pBEWo+F6 zSf2ncyMurJN91#cJTy_u8Y}@%!bq1RkGC~-bV@SXRd4F{R-*V`bS+6;W5vZ(&+I<9$;-V|eNfLa5n-6% z2(}&uGRF;p92eS*sE*oR$@pexaqr*meB)VhmIg@h{uzkk$9~qh#cHhw#>O%)b@+(| z^IQgqzuj~Sk(J;swEM-3TrJAPCq9k^^^`q{IItKBRXYe}e0Tdr=Huf7da3$l4PdpwWDop%^}n;dD#K4s#DYA8SHZ z&1!riV4W4R7R#C))JH1~axJ)RYnM$$lIR%6fIVA@zV{XVyx}C+a-Dt8Y9M)^KU0+H zR4IUb2CJ{Hg>CuaXtD50jB(_Tcx=Z$^WYu2u5kubqmwp%drJ6 z?Fo40g!Qd<-l=TQxqHEOuPX0;^z7iX?Ke^a%XT<13TA^5`4Xcw6D@Ur&VT&CUe0d} z1GjOVF1^L@>O)l@?bD~$wzgf(nxX1OGD8fEV?TdJcZc2KoUe|oP1#=$$7ee|xbY)A zDZq+cuTpc(fFdj^=!;{k03C69lMQ(|>uhRfRu%+!k&YOi-3|1QKB z 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 Xviia!U7SGha1wx#SCgwmn*{w2TRX*I literal 0 HcmV?d00001 diff --git a/mail_activity_unlink_log/static/description/index.html b/mail_activity_unlink_log/static/description/index.html new file mode 100644 index 000000000..59075a4a4 --- /dev/null +++ b/mail_activity_unlink_log/static/description/index.html @@ -0,0 +1,432 @@ + + + + + +README.rst + + + +
+ + + +Odoo Community Association + + +
+ + diff --git a/mail_activity_unlink_log/tests/__init__.py b/mail_activity_unlink_log/tests/__init__.py new file mode 100644 index 000000000..9ea08bfbb --- /dev/null +++ b/mail_activity_unlink_log/tests/__init__.py @@ -0,0 +1 @@ +from . import test_activity_unlink diff --git a/mail_activity_unlink_log/tests/test_activity_unlink.py b/mail_activity_unlink_log/tests/test_activity_unlink.py new file mode 100644 index 000000000..0f1446e6c --- /dev/null +++ b/mail_activity_unlink_log/tests/test_activity_unlink.py @@ -0,0 +1,49 @@ +# Copyright 2023 CreuBlanca +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo.addons.base.tests.common import BaseCommon + + +class TestActivityUnlink(BaseCommon): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.unlink_subtype = cls.env.ref( + "mail_activity_unlink_log.mt_activities_unlink" + ) + + def test_done(self): + self.assertFalse( + self.partner.message_ids.filtered( + lambda r: r.subtype_id == self.unlink_subtype + ) + ) + self.activity = self.partner.activity_schedule( + act_type_xmlid="mail.mail_activity_data_todo" + ) + self.assertTrue(self.partner.activity_ids) + self.activity.action_done() + self.assertFalse(self.partner.activity_ids) + self.assertFalse( + self.partner.message_ids.filtered( + lambda r: r.subtype_id == self.unlink_subtype + ) + ) + + def test_unlink(self): + self.assertFalse( + self.partner.message_ids.filtered( + lambda r: r.subtype_id == self.unlink_subtype + ) + ) + self.activity = self.partner.activity_schedule( + act_type_xmlid="mail.mail_activity_data_todo" + ) + self.assertTrue(self.partner.activity_ids) + self.activity.unlink() + self.assertFalse(self.partner.activity_ids) + self.assertTrue( + self.partner.message_ids.filtered( + lambda r: r.subtype_id == self.unlink_subtype + ) + ) From 6d9c3de72acc19e4b29a151fb025936b40601b02 Mon Sep 17 00:00:00 2001 From: TheSumitBasak Date: Sun, 4 Jan 2026 12:05:27 +0000 Subject: [PATCH 2/4] [IMP] mail_activity_unlink_log: pre-commit auto fixes --- mail_activity_unlink_log/README.rst | 16 ++++++++-------- mail_activity_unlink_log/__manifest__.py | 2 +- .../static/description/index.html | 8 ++++---- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/mail_activity_unlink_log/README.rst b/mail_activity_unlink_log/README.rst index 608cb0379..df7a57a11 100644 --- a/mail_activity_unlink_log/README.rst +++ b/mail_activity_unlink_log/README.rst @@ -20,14 +20,14 @@ Mail Activities: log on unlink .. |badge2| image:: https://img.shields.io/badge/license-AGPL--3-blue.png :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 -.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fsocial-lightgray.png?logo=github - :target: https://github.com/OCA/social/tree/19.0/mail_activity_unlink_log - :alt: OCA/social +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fmail-lightgray.png?logo=github + :target: https://github.com/OCA/mail/tree/19.0/mail_activity_unlink_log + :alt: OCA/mail .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/social-19-0/social-19-0-mail_activity_unlink_log + :target: https://translation.odoo-community.org/projects/mail-19-0/mail-19-0-mail_activity_unlink_log :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png - :target: https://runboat.odoo-community.org/builds?repo=OCA/social&target_branch=19.0 + :target: https://runboat.odoo-community.org/builds?repo=OCA/mail&target_branch=19.0 :alt: Try me on Runboat |badge1| |badge2| |badge3| |badge4| |badge5| @@ -44,10 +44,10 @@ of an activity without notifying the deletion. Bug Tracker =========== -Bugs are tracked on `GitHub Issues `_. +Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us to smash it by providing a detailed and welcomed -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -78,6 +78,6 @@ OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use. -This module is part of the `OCA/social `_ project on GitHub. +This module is part of the `OCA/mail `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/mail_activity_unlink_log/__manifest__.py b/mail_activity_unlink_log/__manifest__.py index 8b5f6c190..eea04bba9 100644 --- a/mail_activity_unlink_log/__manifest__.py +++ b/mail_activity_unlink_log/__manifest__.py @@ -8,7 +8,7 @@ "version": "19.0.1.0.0", "license": "AGPL-3", "author": "CreuBlanca,Odoo Community Association (OCA)", - "website": "https://github.com/OCA/social", + "website": "https://github.com/OCA/mail", "depends": ["mail"], "data": ["data/unlink_message.xml"], } diff --git a/mail_activity_unlink_log/static/description/index.html b/mail_activity_unlink_log/static/description/index.html index 59075a4a4..297ab3153 100644 --- a/mail_activity_unlink_log/static/description/index.html +++ b/mail_activity_unlink_log/static/description/index.html @@ -374,7 +374,7 @@

Mail Activities: log on unlink

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! source digest: sha256:9196aedd490fc01c791256582122032365ce7d26a11a5c0e13b2ae66777b06c3 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

Beta License: AGPL-3 OCA/social Translate me on Weblate Try me on Runboat

+

Beta License: AGPL-3 OCA/mail Translate me on Weblate Try me on Runboat

This addon enforces the creation of a message when an activity is unlinked. This change tries to avoid a possible bad practice of deletion of an activity without notifying the deletion.

@@ -392,10 +392,10 @@

Mail Activities: log on unlink

Bug Tracker

-

Bugs are tracked on GitHub Issues. +

Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us to smash it by providing a detailed and welcomed -feedback.

+feedback.

Do not contact contributors directly about support or help with technical issues.

@@ -422,7 +422,7 @@

Maintainers

OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use.

-

This module is part of the OCA/social project on GitHub.

+

This module is part of the OCA/mail project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

From fbdc1d521579e772e444a59e999b155a14830a7f Mon Sep 17 00:00:00 2001 From: TheSumitBasak Date: Sun, 4 Jan 2026 12:20:42 +0000 Subject: [PATCH 3/4] [IMP] mail_activity_unlink_log: add missing test coverage --- .../tests/test_activity_unlink.py | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/mail_activity_unlink_log/tests/test_activity_unlink.py b/mail_activity_unlink_log/tests/test_activity_unlink.py index 0f1446e6c..96738fda3 100644 --- a/mail_activity_unlink_log/tests/test_activity_unlink.py +++ b/mail_activity_unlink_log/tests/test_activity_unlink.py @@ -47,3 +47,27 @@ def test_unlink(self): lambda r: r.subtype_id == self.unlink_subtype ) ) + + def test_mixin_unlink(self): + # No unlink messages initially + self.assertFalse( + self.partner.message_ids.filtered( + lambda r: r.subtype_id == self.unlink_subtype + ) + ) + + # Create an activity on the partner + self.partner.activity_schedule( + act_type_xmlid="mail.mail_activity_data_todo" + ) + self.assertTrue(self.partner.activity_ids) + + # Unlink the partner → triggers mail.activity.mixin.unlink + self.partner.unlink() + + # No unlink message should be posted because of the context flag + messages = self.env["mail.message"].search( + [("subtype_id", "=", self.unlink_subtype.id)] + ) + self.assertFalse(messages) + From 9d66bd260bd5a68ca44f31de2fc7cac75f842737 Mon Sep 17 00:00:00 2001 From: TheSumitBasak Date: Sun, 4 Jan 2026 12:22:21 +0000 Subject: [PATCH 4/4] [IMP] mail_activity_unlink_log: pre-commit auto fixes --- mail_activity_unlink_log/tests/test_activity_unlink.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/mail_activity_unlink_log/tests/test_activity_unlink.py b/mail_activity_unlink_log/tests/test_activity_unlink.py index 96738fda3..6e7bf27bd 100644 --- a/mail_activity_unlink_log/tests/test_activity_unlink.py +++ b/mail_activity_unlink_log/tests/test_activity_unlink.py @@ -57,9 +57,7 @@ def test_mixin_unlink(self): ) # Create an activity on the partner - self.partner.activity_schedule( - act_type_xmlid="mail.mail_activity_data_todo" - ) + self.partner.activity_schedule(act_type_xmlid="mail.mail_activity_data_todo") self.assertTrue(self.partner.activity_ids) # Unlink the partner → triggers mail.activity.mixin.unlink @@ -70,4 +68,3 @@ def test_mixin_unlink(self): [("subtype_id", "=", self.unlink_subtype.id)] ) self.assertFalse(messages) -