diff --git a/mail_activity_done/README.rst b/mail_activity_done/README.rst new file mode 100644 index 00000000..b78fab61 --- /dev/null +++ b/mail_activity_done/README.rst @@ -0,0 +1,99 @@ +================== +Mail Activity Done +================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:5a0ce87bede46ee3ef4aca69080182899705bb737283ce6f2e369921f635edf0 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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/licence-LGPL--3-blue.png + :target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html + :alt: License: LGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fmail-lightgray.png?logo=github + :target: https://github.com/OCA/mail/tree/18.0/mail_activity_done + :alt: OCA/mail +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/mail-18-0/mail-18-0-mail_activity_done + :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/mail&target_branch=18.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module implements the capability to keep activities that have been +completed, for future reporting, by setting them with the boolean +'Done'. + +**Table of contents** + +.. contents:: + :local: + +Usage +===== + +To use this module, you need to: + +1. Access to an activity from the systray activities menu. +2. Once finished, open the activity and mark it as Done. + +To check activities: + +1. Go to Settings -> Technical -> Activities +2. To see finished activities filter by Completed Activities + +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 +------- + +* ForgeFlow + +Contributors +------------ + +- Jordi Ballester + (`www.forgeflow.com `__) +- Eduardo Magdalena (C2i Change 2 improve + http://www.c2i.es) +- Radovan Skolnik (https://www.kema.sk) +- Manuel Regidor (https://www.sygel.es) +- Bernat Puig + (`www.forgeflow.com `__) +- Stefan Rijnhart + +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/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_done/__init__.py b/mail_activity_done/__init__.py new file mode 100644 index 00000000..5540bf58 --- /dev/null +++ b/mail_activity_done/__init__.py @@ -0,0 +1,2 @@ +from . import models +from .hooks import pre_init_hook, uninstall_hook diff --git a/mail_activity_done/__manifest__.py b/mail_activity_done/__manifest__.py new file mode 100644 index 00000000..944cecd8 --- /dev/null +++ b/mail_activity_done/__manifest__.py @@ -0,0 +1,14 @@ +# Copyright 2018-22 ForgeFlow +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html). +{ + "name": "Mail Activity Done", + "version": "18.0.1.0.0", + "author": "ForgeFlow, Odoo Community Association (OCA)", + "license": "LGPL-3", + "category": "Discuss", + "website": "https://github.com/OCA/mail", + "depends": ["mail"], + "data": ["views/mail_activity_views.xml"], + "pre_init_hook": "pre_init_hook", + "uninstall_hook": "uninstall_hook", +} diff --git a/mail_activity_done/hooks.py b/mail_activity_done/hooks.py new file mode 100644 index 00000000..5117e7ac --- /dev/null +++ b/mail_activity_done/hooks.py @@ -0,0 +1,42 @@ +# Copyright 2018-22 ForgeFlow +# Copyright 2018 Odoo, S.A. +# License AGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html). + + +def pre_init_hook(env): + """The objective of this hook is to default to false all values of field + 'done' of mail.activity + """ + cr = env.cr + cr.execute( + """SELECT column_name + FROM information_schema.columns + WHERE table_name='mail_activity' AND + column_name='done'""" + ) + if not cr.fetchone(): + cr.execute( + """ + ALTER TABLE mail_activity ADD COLUMN done boolean; + """ + ) + + cr.execute( + """ + UPDATE mail_activity + SET done = False + """ + ) + + +def uninstall_hook(env): + """The objective of this hook is to remove all activities that are done + upon module uninstall + """ + cr = env.cr + cr.execute( + """ + DELETE FROM mail_activity + WHERE done=True + """ + ) diff --git a/mail_activity_done/i18n/es.po b/mail_activity_done/i18n/es.po new file mode 100644 index 00000000..c453e069 --- /dev/null +++ b/mail_activity_done/i18n/es.po @@ -0,0 +1,101 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mail_activity_done +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2023-11-08 13:36+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_done +#: model:ir.model.fields,field_description:mail_activity_done.field_mail_activity__active +msgid "Active" +msgstr "Activo" + +#. module: mail_activity_done +#: model:ir.model.fields,field_description:mail_activity_done.field_account_bank_statement_line__activity_ids +#: model:ir.model.fields,field_description:mail_activity_done.field_account_journal__activity_ids +#: model:ir.model.fields,field_description:mail_activity_done.field_account_move__activity_ids +#: model:ir.model.fields,field_description:mail_activity_done.field_account_payment__activity_ids +#: model:ir.model.fields,field_description:mail_activity_done.field_account_setup_bank_manual_config__activity_ids +#: model:ir.model.fields,field_description:mail_activity_done.field_mail_activity_mixin__activity_ids +#: model:ir.model.fields,field_description:mail_activity_done.field_mailing_mailing__activity_ids +#: model:ir.model.fields,field_description:mail_activity_done.field_product_pricelist__activity_ids +#: model:ir.model.fields,field_description:mail_activity_done.field_product_product__activity_ids +#: model:ir.model.fields,field_description:mail_activity_done.field_product_template__activity_ids +#: model:ir.model.fields,field_description:mail_activity_done.field_res_partner__activity_ids +#: model:ir.model.fields,field_description:mail_activity_done.field_res_partner_bank__activity_ids +#: model:ir.model.fields,field_description:mail_activity_done.field_res_users__activity_ids +msgid "Activities" +msgstr "Actividades" + +#. module: mail_activity_done +#: model:ir.model,name:mail_activity_done.model_mail_activity +msgid "Activity" +msgstr "Actividad" + +#. module: mail_activity_done +#: model:ir.model,name:mail_activity_done.model_mail_activity_mixin +msgid "Activity Mixin" +msgstr "Mezclador de Actividad" + +#. module: mail_activity_done +#: model_terms:ir.ui.view,arch_db:mail_activity_done.mail_activity_view_search +#: model_terms:ir.ui.view,arch_db:mail_activity_done.res_partner_view_search_inherit_mail +msgid "Completed Activities" +msgstr "Actividades Completadas" + +#. module: mail_activity_done +#: model:ir.model.fields,field_description:mail_activity_done.field_mail_activity__date_done +msgid "Completed Date" +msgstr "Completado Fecha" + +#. module: mail_activity_done +#: model:ir.model.fields,field_description:mail_activity_done.field_mail_activity__done +#: model:ir.model.fields.selection,name:mail_activity_done.selection__mail_activity__state__done +msgid "Done" +msgstr "Hecho" + +#. module: mail_activity_done +#: model_terms:ir.ui.view,arch_db:mail_activity_done.res_partner_view_search_inherit_mail +msgid "Open Activities" +msgstr "Actividades Abiertas" + +#. module: mail_activity_done +#: model:ir.model.fields,field_description:mail_activity_done.field_mail_activity__state +msgid "State" +msgstr "Estado" + +#. module: mail_activity_done +#: model:ir.model,name:mail_activity_done.model_res_users +msgid "User" +msgstr "Usuario" + +#, python-format +#~ msgid "%d days overdue" +#~ msgstr "%d días de retraso" + +#, python-format +#~ msgid "Due in %d days" +#~ msgstr "Vencimiento en %d días" + +#, python-format +#~ msgid "Today" +#~ msgstr "Hoy" + +#, python-format +#~ msgid "Tomorrow" +#~ msgstr "Mañana" + +#, python-format +#~ msgid "Yesterday" +#~ msgstr "Ayer" diff --git a/mail_activity_done/i18n/fi.po b/mail_activity_done/i18n/fi.po new file mode 100644 index 00000000..12f8ea8b --- /dev/null +++ b/mail_activity_done/i18n/fi.po @@ -0,0 +1,101 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mail_activity_done +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2024-01-22 16:35+0000\n" +"Last-Translator: Miku Laitinen \n" +"Language-Team: none\n" +"Language: fi\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_done +#: model:ir.model.fields,field_description:mail_activity_done.field_mail_activity__active +msgid "Active" +msgstr "Aktiivinen" + +#. module: mail_activity_done +#: model:ir.model.fields,field_description:mail_activity_done.field_account_bank_statement_line__activity_ids +#: model:ir.model.fields,field_description:mail_activity_done.field_account_journal__activity_ids +#: model:ir.model.fields,field_description:mail_activity_done.field_account_move__activity_ids +#: model:ir.model.fields,field_description:mail_activity_done.field_account_payment__activity_ids +#: model:ir.model.fields,field_description:mail_activity_done.field_account_setup_bank_manual_config__activity_ids +#: model:ir.model.fields,field_description:mail_activity_done.field_mail_activity_mixin__activity_ids +#: model:ir.model.fields,field_description:mail_activity_done.field_mailing_mailing__activity_ids +#: model:ir.model.fields,field_description:mail_activity_done.field_product_pricelist__activity_ids +#: model:ir.model.fields,field_description:mail_activity_done.field_product_product__activity_ids +#: model:ir.model.fields,field_description:mail_activity_done.field_product_template__activity_ids +#: model:ir.model.fields,field_description:mail_activity_done.field_res_partner__activity_ids +#: model:ir.model.fields,field_description:mail_activity_done.field_res_partner_bank__activity_ids +#: model:ir.model.fields,field_description:mail_activity_done.field_res_users__activity_ids +msgid "Activities" +msgstr "Toimenpiteet" + +#. module: mail_activity_done +#: model:ir.model,name:mail_activity_done.model_mail_activity +msgid "Activity" +msgstr "Toimenpide" + +#. module: mail_activity_done +#: model:ir.model,name:mail_activity_done.model_mail_activity_mixin +msgid "Activity Mixin" +msgstr "Toimenpide-mixin" + +#. module: mail_activity_done +#: model_terms:ir.ui.view,arch_db:mail_activity_done.mail_activity_view_search +#: model_terms:ir.ui.view,arch_db:mail_activity_done.res_partner_view_search_inherit_mail +msgid "Completed Activities" +msgstr "Tehdyt toimenpiteet" + +#. module: mail_activity_done +#: model:ir.model.fields,field_description:mail_activity_done.field_mail_activity__date_done +msgid "Completed Date" +msgstr "Merkattu tehdyksi" + +#. module: mail_activity_done +#: model:ir.model.fields,field_description:mail_activity_done.field_mail_activity__done +#: model:ir.model.fields.selection,name:mail_activity_done.selection__mail_activity__state__done +msgid "Done" +msgstr "Tehty" + +#. module: mail_activity_done +#: model_terms:ir.ui.view,arch_db:mail_activity_done.res_partner_view_search_inherit_mail +msgid "Open Activities" +msgstr "Avoimet toimenpiteet" + +#. module: mail_activity_done +#: model:ir.model.fields,field_description:mail_activity_done.field_mail_activity__state +msgid "State" +msgstr "Tila" + +#. module: mail_activity_done +#: model:ir.model,name:mail_activity_done.model_res_users +msgid "User" +msgstr "Käyttäjä" + +#, python-format +#~ msgid "%d days overdue" +#~ msgstr "%d päivää myöhässä" + +#, python-format +#~ msgid "Due in %d days" +#~ msgstr "Erääntyy %d päivän päästä" + +#, python-format +#~ msgid "Today" +#~ msgstr "Tänään" + +#, python-format +#~ msgid "Tomorrow" +#~ msgstr "Huomenna" + +#, python-format +#~ msgid "Yesterday" +#~ msgstr "Eilen" diff --git a/mail_activity_done/i18n/fr.po b/mail_activity_done/i18n/fr.po new file mode 100644 index 00000000..678bc232 --- /dev/null +++ b/mail_activity_done/i18n/fr.po @@ -0,0 +1,101 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mail_activity_done +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2024-03-14 13:29+0000\n" +"Last-Translator: Houzéfa Abbasbhay \n" +"Language-Team: none\n" +"Language: fr\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_done +#: model:ir.model.fields,field_description:mail_activity_done.field_mail_activity__active +msgid "Active" +msgstr "Actif" + +#. module: mail_activity_done +#: model:ir.model.fields,field_description:mail_activity_done.field_account_bank_statement_line__activity_ids +#: model:ir.model.fields,field_description:mail_activity_done.field_account_journal__activity_ids +#: model:ir.model.fields,field_description:mail_activity_done.field_account_move__activity_ids +#: model:ir.model.fields,field_description:mail_activity_done.field_account_payment__activity_ids +#: model:ir.model.fields,field_description:mail_activity_done.field_account_setup_bank_manual_config__activity_ids +#: model:ir.model.fields,field_description:mail_activity_done.field_mail_activity_mixin__activity_ids +#: model:ir.model.fields,field_description:mail_activity_done.field_mailing_mailing__activity_ids +#: model:ir.model.fields,field_description:mail_activity_done.field_product_pricelist__activity_ids +#: model:ir.model.fields,field_description:mail_activity_done.field_product_product__activity_ids +#: model:ir.model.fields,field_description:mail_activity_done.field_product_template__activity_ids +#: model:ir.model.fields,field_description:mail_activity_done.field_res_partner__activity_ids +#: model:ir.model.fields,field_description:mail_activity_done.field_res_partner_bank__activity_ids +#: model:ir.model.fields,field_description:mail_activity_done.field_res_users__activity_ids +msgid "Activities" +msgstr "Activités" + +#. module: mail_activity_done +#: model:ir.model,name:mail_activity_done.model_mail_activity +msgid "Activity" +msgstr "Activité" + +#. module: mail_activity_done +#: model:ir.model,name:mail_activity_done.model_mail_activity_mixin +msgid "Activity Mixin" +msgstr "Activité - Mixin" + +#. module: mail_activity_done +#: model_terms:ir.ui.view,arch_db:mail_activity_done.mail_activity_view_search +#: model_terms:ir.ui.view,arch_db:mail_activity_done.res_partner_view_search_inherit_mail +msgid "Completed Activities" +msgstr "Activités réalisées" + +#. module: mail_activity_done +#: model:ir.model.fields,field_description:mail_activity_done.field_mail_activity__date_done +msgid "Completed Date" +msgstr "Date de réalisation" + +#. module: mail_activity_done +#: model:ir.model.fields,field_description:mail_activity_done.field_mail_activity__done +#: model:ir.model.fields.selection,name:mail_activity_done.selection__mail_activity__state__done +msgid "Done" +msgstr "Réalisé" + +#. module: mail_activity_done +#: model_terms:ir.ui.view,arch_db:mail_activity_done.res_partner_view_search_inherit_mail +msgid "Open Activities" +msgstr "Activités ouvertes" + +#. module: mail_activity_done +#: model:ir.model.fields,field_description:mail_activity_done.field_mail_activity__state +msgid "State" +msgstr "État" + +#. module: mail_activity_done +#: model:ir.model,name:mail_activity_done.model_res_users +msgid "User" +msgstr "Utilisateur" + +#, python-format +#~ msgid "%d days overdue" +#~ msgstr "%d jours de retard" + +#, python-format +#~ msgid "Due in %d days" +#~ msgstr "Dû dans %d jours" + +#, python-format +#~ msgid "Today" +#~ msgstr "Aujourd'hui" + +#, python-format +#~ msgid "Tomorrow" +#~ msgstr "Demain" + +#, python-format +#~ msgid "Yesterday" +#~ msgstr "Hier" diff --git a/mail_activity_done/i18n/hu.po b/mail_activity_done/i18n/hu.po new file mode 100644 index 00000000..508bc75d --- /dev/null +++ b/mail_activity_done/i18n/hu.po @@ -0,0 +1,104 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mail_activity_done +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 13.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2021-04-16 14:36+0000\n" +"Last-Translator: Tamás Dombos \n" +"Language-Team: none\n" +"Language: hu\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.3.2\n" + +#. module: mail_activity_done +#: model:ir.model.fields,field_description:mail_activity_done.field_mail_activity__active +msgid "Active" +msgstr "Aktív" + +#. module: mail_activity_done +#: model:ir.model.fields,field_description:mail_activity_done.field_account_bank_statement_line__activity_ids +#: model:ir.model.fields,field_description:mail_activity_done.field_account_journal__activity_ids +#: model:ir.model.fields,field_description:mail_activity_done.field_account_move__activity_ids +#: model:ir.model.fields,field_description:mail_activity_done.field_account_payment__activity_ids +#: model:ir.model.fields,field_description:mail_activity_done.field_account_setup_bank_manual_config__activity_ids +#: model:ir.model.fields,field_description:mail_activity_done.field_mail_activity_mixin__activity_ids +#: model:ir.model.fields,field_description:mail_activity_done.field_mailing_mailing__activity_ids +#: model:ir.model.fields,field_description:mail_activity_done.field_product_pricelist__activity_ids +#: model:ir.model.fields,field_description:mail_activity_done.field_product_product__activity_ids +#: model:ir.model.fields,field_description:mail_activity_done.field_product_template__activity_ids +#: model:ir.model.fields,field_description:mail_activity_done.field_res_partner__activity_ids +#: model:ir.model.fields,field_description:mail_activity_done.field_res_partner_bank__activity_ids +#: model:ir.model.fields,field_description:mail_activity_done.field_res_users__activity_ids +msgid "Activities" +msgstr "Tevékenységek" + +#. module: mail_activity_done +#: model:ir.model,name:mail_activity_done.model_mail_activity +msgid "Activity" +msgstr "Tevékenység" + +#. module: mail_activity_done +#: model:ir.model,name:mail_activity_done.model_mail_activity_mixin +msgid "Activity Mixin" +msgstr "Tevékenység mixin" + +#. module: mail_activity_done +#: model_terms:ir.ui.view,arch_db:mail_activity_done.mail_activity_view_search +#: model_terms:ir.ui.view,arch_db:mail_activity_done.res_partner_view_search_inherit_mail +msgid "Completed Activities" +msgstr "Elkészült tevékenységek" + +#. module: mail_activity_done +#: model:ir.model.fields,field_description:mail_activity_done.field_mail_activity__date_done +msgid "Completed Date" +msgstr "Elkészülés dátuma" + +#. module: mail_activity_done +#: model:ir.model.fields,field_description:mail_activity_done.field_mail_activity__done +#: model:ir.model.fields.selection,name:mail_activity_done.selection__mail_activity__state__done +msgid "Done" +msgstr "Kész" + +#. module: mail_activity_done +#: model_terms:ir.ui.view,arch_db:mail_activity_done.res_partner_view_search_inherit_mail +msgid "Open Activities" +msgstr "Nyitott tevékenységek" + +#. module: mail_activity_done +#: model:ir.model.fields,field_description:mail_activity_done.field_mail_activity__state +msgid "State" +msgstr "Állapot" + +#. module: mail_activity_done +#: model:ir.model,name:mail_activity_done.model_res_users +msgid "User" +msgstr "" + +#, python-format +#~ msgid "%d days overdue" +#~ msgstr "%d nap késésben" + +#, python-format +#~ msgid "Due in %d days" +#~ msgstr "%d napon belül esedékes" + +#, python-format +#~ msgid "Today" +#~ msgstr "Ma" + +#, python-format +#~ msgid "Tomorrow" +#~ msgstr "Holnap" + +#, python-format +#~ msgid "Yesterday" +#~ msgstr "Tegnap" + +#~ msgid "Users" +#~ msgstr "Felhasználók" diff --git a/mail_activity_done/i18n/it.po b/mail_activity_done/i18n/it.po new file mode 100644 index 00000000..216ba8b5 --- /dev/null +++ b/mail_activity_done/i18n/it.po @@ -0,0 +1,101 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mail_activity_done +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2023-12-07 12:35+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 4.17\n" + +#. module: mail_activity_done +#: model:ir.model.fields,field_description:mail_activity_done.field_mail_activity__active +msgid "Active" +msgstr "Attiva" + +#. module: mail_activity_done +#: model:ir.model.fields,field_description:mail_activity_done.field_account_bank_statement_line__activity_ids +#: model:ir.model.fields,field_description:mail_activity_done.field_account_journal__activity_ids +#: model:ir.model.fields,field_description:mail_activity_done.field_account_move__activity_ids +#: model:ir.model.fields,field_description:mail_activity_done.field_account_payment__activity_ids +#: model:ir.model.fields,field_description:mail_activity_done.field_account_setup_bank_manual_config__activity_ids +#: model:ir.model.fields,field_description:mail_activity_done.field_mail_activity_mixin__activity_ids +#: model:ir.model.fields,field_description:mail_activity_done.field_mailing_mailing__activity_ids +#: model:ir.model.fields,field_description:mail_activity_done.field_product_pricelist__activity_ids +#: model:ir.model.fields,field_description:mail_activity_done.field_product_product__activity_ids +#: model:ir.model.fields,field_description:mail_activity_done.field_product_template__activity_ids +#: model:ir.model.fields,field_description:mail_activity_done.field_res_partner__activity_ids +#: model:ir.model.fields,field_description:mail_activity_done.field_res_partner_bank__activity_ids +#: model:ir.model.fields,field_description:mail_activity_done.field_res_users__activity_ids +msgid "Activities" +msgstr "Attività" + +#. module: mail_activity_done +#: model:ir.model,name:mail_activity_done.model_mail_activity +msgid "Activity" +msgstr "Attività" + +#. module: mail_activity_done +#: model:ir.model,name:mail_activity_done.model_mail_activity_mixin +msgid "Activity Mixin" +msgstr "Mixin attività" + +#. module: mail_activity_done +#: model_terms:ir.ui.view,arch_db:mail_activity_done.mail_activity_view_search +#: model_terms:ir.ui.view,arch_db:mail_activity_done.res_partner_view_search_inherit_mail +msgid "Completed Activities" +msgstr "Attività completate" + +#. module: mail_activity_done +#: model:ir.model.fields,field_description:mail_activity_done.field_mail_activity__date_done +msgid "Completed Date" +msgstr "Data di completamento" + +#. module: mail_activity_done +#: model:ir.model.fields,field_description:mail_activity_done.field_mail_activity__done +#: model:ir.model.fields.selection,name:mail_activity_done.selection__mail_activity__state__done +msgid "Done" +msgstr "Eseguita" + +#. module: mail_activity_done +#: model_terms:ir.ui.view,arch_db:mail_activity_done.res_partner_view_search_inherit_mail +msgid "Open Activities" +msgstr "Attività aperte" + +#. module: mail_activity_done +#: model:ir.model.fields,field_description:mail_activity_done.field_mail_activity__state +msgid "State" +msgstr "Stato" + +#. module: mail_activity_done +#: model:ir.model,name:mail_activity_done.model_res_users +msgid "User" +msgstr "Utente" + +#, python-format +#~ msgid "%d days overdue" +#~ msgstr "%d giorni di ritardo" + +#, python-format +#~ msgid "Due in %d days" +#~ msgstr "Scade tra %d giorni" + +#, python-format +#~ msgid "Today" +#~ msgstr "Oggi" + +#, python-format +#~ msgid "Tomorrow" +#~ msgstr "Domani" + +#, python-format +#~ msgid "Yesterday" +#~ msgstr "Ieri" diff --git a/mail_activity_done/i18n/mail_activity_done.pot b/mail_activity_done/i18n/mail_activity_done.pot new file mode 100644 index 00000000..e1ee3f82 --- /dev/null +++ b/mail_activity_done/i18n/mail_activity_done.pot @@ -0,0 +1,78 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mail_activity_done +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.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_done +#: model:ir.model.fields,field_description:mail_activity_done.field_mail_activity__active +msgid "Active" +msgstr "" + +#. module: mail_activity_done +#: model:ir.model.fields,field_description:mail_activity_done.field_account_bank_statement_line__activity_ids +#: model:ir.model.fields,field_description:mail_activity_done.field_account_journal__activity_ids +#: model:ir.model.fields,field_description:mail_activity_done.field_account_move__activity_ids +#: model:ir.model.fields,field_description:mail_activity_done.field_account_payment__activity_ids +#: model:ir.model.fields,field_description:mail_activity_done.field_account_setup_bank_manual_config__activity_ids +#: model:ir.model.fields,field_description:mail_activity_done.field_mail_activity_mixin__activity_ids +#: model:ir.model.fields,field_description:mail_activity_done.field_mailing_mailing__activity_ids +#: model:ir.model.fields,field_description:mail_activity_done.field_product_pricelist__activity_ids +#: model:ir.model.fields,field_description:mail_activity_done.field_product_product__activity_ids +#: model:ir.model.fields,field_description:mail_activity_done.field_product_template__activity_ids +#: model:ir.model.fields,field_description:mail_activity_done.field_res_partner__activity_ids +#: model:ir.model.fields,field_description:mail_activity_done.field_res_partner_bank__activity_ids +#: model:ir.model.fields,field_description:mail_activity_done.field_res_users__activity_ids +msgid "Activities" +msgstr "" + +#. module: mail_activity_done +#: model:ir.model,name:mail_activity_done.model_mail_activity +msgid "Activity" +msgstr "" + +#. module: mail_activity_done +#: model:ir.model,name:mail_activity_done.model_mail_activity_mixin +msgid "Activity Mixin" +msgstr "" + +#. module: mail_activity_done +#: model_terms:ir.ui.view,arch_db:mail_activity_done.mail_activity_view_search +#: model_terms:ir.ui.view,arch_db:mail_activity_done.res_partner_view_search_inherit_mail +msgid "Completed Activities" +msgstr "" + +#. module: mail_activity_done +#: model:ir.model.fields,field_description:mail_activity_done.field_mail_activity__date_done +msgid "Completed Date" +msgstr "" + +#. module: mail_activity_done +#: model:ir.model.fields,field_description:mail_activity_done.field_mail_activity__done +#: model:ir.model.fields.selection,name:mail_activity_done.selection__mail_activity__state__done +msgid "Done" +msgstr "" + +#. module: mail_activity_done +#: model_terms:ir.ui.view,arch_db:mail_activity_done.res_partner_view_search_inherit_mail +msgid "Open Activities" +msgstr "" + +#. module: mail_activity_done +#: model:ir.model.fields,field_description:mail_activity_done.field_mail_activity__state +msgid "State" +msgstr "" + +#. module: mail_activity_done +#: model:ir.model,name:mail_activity_done.model_res_users +msgid "User" +msgstr "" diff --git a/mail_activity_done/models/__init__.py b/mail_activity_done/models/__init__.py new file mode 100644 index 00000000..1ff38802 --- /dev/null +++ b/mail_activity_done/models/__init__.py @@ -0,0 +1 @@ +from . import mail_activity diff --git a/mail_activity_done/models/mail_activity.py b/mail_activity_done/models/mail_activity.py new file mode 100644 index 00000000..75d304e6 --- /dev/null +++ b/mail_activity_done/models/mail_activity.py @@ -0,0 +1,83 @@ +# Copyright 2018-22 ForgeFlow +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html). +from odoo import api, fields, models + +delete_sentinel = object() + + +class MailActivity(models.Model): + _inherit = "mail.activity" + + active = fields.Boolean(default=True) + done = fields.Boolean(default=False) + state = fields.Selection( + selection_add=[("done", "Done")], + compute="_compute_state", + search="_search_state", + ) + date_done = fields.Date("Completed Date", index="btree") + + @api.depends("date_deadline", "done") + def _compute_state(self): + res = super()._compute_state() + for record in self.filtered(lambda activity: activity.done): + record.state = "done" + return res + + def _search_state(self, operator, operand): + if not operand: + # checking for is (not) set + if operator == "=": + # is not set - never happens actually so we create impossible domain + return [("id", "=", False)] + else: + # is set - always - return empty domain + return [] + else: + # checking for value + if operand == "done": + if operator == "=": + return ["&", ("done", operator, True), ("active", "=", False)] + else: + return ["&", ("done", operator, False), ("active", "=", True)] + else: + if operator == "=": + return [ + "&", + ( + "date_deadline", + {"today": "=", "overdue": "<", "planned": ">"}[operand], + fields.Date.today(), + ), + ("done", "=", False), + ] + else: + return [ + "|", + ( + "date_deadline", + {"today": "!=", "overdue": ">=", "planned": "<="}[operand], + fields.Date.today(), + ), + ("done", "=", True), + ] + + def unlink(self): + """Don't unlink if we're asked not to""" + if self.env.context.get("mail_activity_done") != delete_sentinel: + return super().unlink() + + def _action_done(self, feedback=False, attachment_ids=None): + """Ask super not to delete the activity and set it to done""" + self.write({"done": True, "active": False, "date_done": fields.Date.today()}) + return super( + MailActivity, + self.with_context(mail_activity_done=delete_sentinel), + )._action_done(feedback=feedback, attachment_ids=attachment_ids) + + +class MailActivityMixin(models.AbstractModel): + _inherit = "mail.activity.mixin" + activity_ids = fields.One2many( + domain=lambda self: [("res_model", "=", self._name), ("active", "=", True)] + ) diff --git a/mail_activity_done/pyproject.toml b/mail_activity_done/pyproject.toml new file mode 100644 index 00000000..4231d0cc --- /dev/null +++ b/mail_activity_done/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/mail_activity_done/readme/CONTRIBUTORS.md b/mail_activity_done/readme/CONTRIBUTORS.md new file mode 100644 index 00000000..923f96ea --- /dev/null +++ b/mail_activity_done/readme/CONTRIBUTORS.md @@ -0,0 +1,8 @@ +- Jordi Ballester \<\> + (www.forgeflow.com) +- Eduardo Magdalena \<\> (C2i Change 2 improve + ) +- Radovan Skolnik \<\> () +- Manuel Regidor \<\> () +- Bernat Puig \<\> (www.forgeflow.com) +- Stefan Rijnhart \<\> diff --git a/mail_activity_done/readme/DESCRIPTION.md b/mail_activity_done/readme/DESCRIPTION.md new file mode 100644 index 00000000..cd8d551c --- /dev/null +++ b/mail_activity_done/readme/DESCRIPTION.md @@ -0,0 +1,3 @@ +This module implements the capability to keep activities that have been +completed, for future reporting, by setting them with the boolean +'Done'. diff --git a/mail_activity_done/readme/USAGE.md b/mail_activity_done/readme/USAGE.md new file mode 100644 index 00000000..459511f9 --- /dev/null +++ b/mail_activity_done/readme/USAGE.md @@ -0,0 +1,9 @@ +To use this module, you need to: + +1. Access to an activity from the systray activities menu. +2. Once finished, open the activity and mark it as Done. + +To check activities: + +1. Go to Settings -\> Technical -\> Activities +2. To see finished activities filter by Completed Activities diff --git a/mail_activity_done/static/description/icon.png b/mail_activity_done/static/description/icon.png new file mode 100644 index 00000000..3a0328b5 Binary files /dev/null and b/mail_activity_done/static/description/icon.png differ diff --git a/mail_activity_done/static/description/index.html b/mail_activity_done/static/description/index.html new file mode 100644 index 00000000..6f0f6a33 --- /dev/null +++ b/mail_activity_done/static/description/index.html @@ -0,0 +1,447 @@ + + + + + +Mail Activity Done + + + +
+

Mail Activity Done

+ + +

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

+

This module implements the capability to keep activities that have been +completed, for future reporting, by setting them with the boolean +‘Done’.

+

Table of contents

+ +
+

Usage

+

To use this module, you need to:

+
    +
  1. Access to an activity from the systray activities menu.
  2. +
  3. Once finished, open the activity and mark it as Done.
  4. +
+

To check activities:

+
    +
  1. Go to Settings -> Technical -> Activities
  2. +
  3. To see finished activities filter by Completed Activities
  4. +
+
+
+

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

+
    +
  • ForgeFlow
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+ +Odoo Community Association + +

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/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_done/tests/__init__.py b/mail_activity_done/tests/__init__.py new file mode 100644 index 00000000..1f81564c --- /dev/null +++ b/mail_activity_done/tests/__init__.py @@ -0,0 +1 @@ +from . import test_mail_activity_done diff --git a/mail_activity_done/tests/test_mail_activity_done.py b/mail_activity_done/tests/test_mail_activity_done.py new file mode 100644 index 00000000..f528c672 --- /dev/null +++ b/mail_activity_done/tests/test_mail_activity_done.py @@ -0,0 +1,93 @@ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from datetime import date + +from odoo.tests.common import TransactionCase + + +class TestMailActivityDoneMethods(TransactionCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + + cls.user = cls.env["res.users"].create( + { + "company_id": cls.env.ref("base.main_company").id, + "name": "Test User", + "login": "testuser", + "groups_id": [(6, 0, [cls.env.ref("base.group_user").id])], + } + ) + activity_type = cls.env["mail.activity.type"].search( + [("name", "=", "Meeting")], limit=1 + ) + cls.act1 = cls.env["mail.activity"].create( + { + "activity_type_id": activity_type.id, + "res_id": cls.env.ref("base.res_partner_1").id, + "res_model": "res.partner", + "res_model_id": cls.env["ir.model"]._get("res.partner").id, + "user_id": cls.user.id, + "date_deadline": date.today(), + } + ) + + def test_mail_activity_done(self): + self.act1._action_done() + self.assertTrue(self.act1.exists()) + self.assertEqual(self.act1.state, "done") + + def test_get_activity_groups(self): + act_count = self.user.with_user(self.user)._get_activity_groups() + self.assertEqual( + len(act_count), 1, "Number of activities should be equal to one" + ) + self.assertEqual(act_count[0]["total_count"], 1) + self.act1._action_done() + self.act1.flush_recordset() + act_count = self.user.with_user(self.user)._get_activity_groups() + self.assertFalse(act_count) + + def test_read_progress_bar(self): + partner = self.env["res.partner"].browse(self.act1.res_id) + params = { + "domain": [("id", "=", partner.id)], + "group_by": "id", + "progress_bar": { + "field": "activity_state", + "colors": { + "overdue": "danger", + "today": "warning", + "planned": "success", + }, + }, + } + # The activity is present in the progress bar + self.assertEqual( + partner.read_progress_bar(**params), + {str(partner.id): {"overdue": 0, "today": 1, "planned": 0}}, + ) + # After marking the activity as done, it is removed from the progress bar + self.act1._action_done() + self.act1.flush_recordset() + self.assertEqual( + partner.read_progress_bar(**params), + {str(partner.id): {"overdue": 0, "today": 0, "planned": 0}}, + ) + + def test_activity_state_search(self): + today_activities = self.env["res.partner"].search( + [("activity_state", "=", "today")] + ) + self.assertEqual(len(today_activities), 1) + overdue_activities = self.env["res.partner"].search( + [("activity_state", "=", "overdue")] + ) + self.assertFalse(overdue_activities) + + # After the activity is marked as done, the activity state is unmarked + self.act1._action_done() + today_activities = self.env["res.partner"].search( + [("activity_state", "=", "today")] + ) + self.assertFalse(today_activities) diff --git a/mail_activity_done/views/mail_activity_views.xml b/mail_activity_done/views/mail_activity_views.xml new file mode 100644 index 00000000..2ca2d7fe --- /dev/null +++ b/mail_activity_done/views/mail_activity_views.xml @@ -0,0 +1,123 @@ + + + + + mail.activity.view.form.popup + mail.activity + + 20 + + + + + + + + + + + mail.activity.view.search + mail.activity + + + + + + + + + [('date_deadline', '<', context_today().strftime('%Y-%m-%d'))] + + + [('date_deadline', '=', context_today().strftime('%Y-%m-%d'))] + + + [('date_deadline', '>', context_today().strftime('%Y-%m-%d'))] + + + + + + res.partner.view.search.inherit.mail + res.partner + + + + + + + + [('activity_ids.date_deadline', '<', context_today().strftime('%Y-%m-%d'))] + + + [('activity_ids.date_deadline', '=', context_today().strftime('%Y-%m-%d'))] + + + [('activity_ids.date_deadline', '>', context_today().strftime('%Y-%m-%d'))] + + + + + + mail.activity.view.list + mail.activity + + + + + + + + state == 'done' + date_deadline < current_date and state != 'done' + date_deadline == current_date and state != 'done' + + + + + + mail.activity.view.calendar + mail.activity + + + + + + + + + +