From 7130a00bfbee33e93b442bf5cf5823a5dccc095d Mon Sep 17 00:00:00 2001 From: Christopher Rogos Date: Wed, 2 Sep 2026 13:58:47 +0000 Subject: [PATCH 1/2] [ADD] agreement_termination: Add module for managing term dates and termination tracking in agreements --- agreement_termination/README.rst | 97 ++++ agreement_termination/__init__.py | 3 + agreement_termination/__manifest__.py | 23 + agreement_termination/data/cron.xml | 23 + agreement_termination/models/__init__.py | 3 + agreement_termination/models/agreement.py | 76 +++ agreement_termination/pyproject.toml | 3 + agreement_termination/readme/CONTRIBUTORS.md | 5 + agreement_termination/readme/DESCRIPTION.md | 10 + .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 444 ++++++++++++++++++ .../static/description/screenshot_form.png | Bin 0 -> 75168 bytes agreement_termination/tests/__init__.py | 3 + .../tests/test_agreement_termination.py | 74 +++ agreement_termination/views/agreement.xml | 44 ++ 15 files changed, 808 insertions(+) create mode 100644 agreement_termination/README.rst create mode 100644 agreement_termination/__init__.py create mode 100644 agreement_termination/__manifest__.py create mode 100644 agreement_termination/data/cron.xml create mode 100644 agreement_termination/models/__init__.py create mode 100644 agreement_termination/models/agreement.py create mode 100644 agreement_termination/pyproject.toml create mode 100644 agreement_termination/readme/CONTRIBUTORS.md create mode 100644 agreement_termination/readme/DESCRIPTION.md create mode 100644 agreement_termination/static/description/icon.png create mode 100644 agreement_termination/static/description/index.html create mode 100644 agreement_termination/static/description/screenshot_form.png create mode 100644 agreement_termination/tests/__init__.py create mode 100644 agreement_termination/tests/test_agreement_termination.py create mode 100644 agreement_termination/views/agreement.xml diff --git a/agreement_termination/README.rst b/agreement_termination/README.rst new file mode 100644 index 000000000..5f3d808b4 --- /dev/null +++ b/agreement_termination/README.rst @@ -0,0 +1,97 @@ +.. image:: https://odoo-community.org/readme-banner-image + :target: https://odoo-community.org/get-involved?utm_source=readme + :alt: Odoo Community Association + +===================== +Agreement Termination +===================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:3f07e0081786446c37b27ce860fc2844361c6dd79e794b9ac80b5976b5ce6175 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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%2Fagreement-lightgray.png?logo=github + :target: https://github.com/OCA/agreement/tree/19.0/agreement_termination + :alt: OCA/agreement +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/agreement-19-0/agreement-19-0-agreement_termination + :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/agreement&target_branch=19.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module adds the "Term Dates" section to legal agreements, grouping +the signature/start/end dates together with the expiration and change +notice periods, the notification address and the termination tracking +dates (termination requested / terminated). + +It also adds a review date to each agreement, computed as the end date +minus the expiration notice. A daily cron schedules a "review" activity +on that date, assigned to the user who last modified the agreement. + +.. image:: https://raw.githubusercontent.com/OCA/agreement/19.0/agreement_termination/static/description/screenshot_form.png + :alt: Agreement Form + +**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 +------- + +* Pavlov Media +* Open Source Integrators +* Yves Goldberg (Ygol Internetwork) + +Contributors +------------ + +- Pavlov Media +- Open Source Integrators +- Yves Goldberg (Ygol Internetwork) +- `glueckkanja AG `__: + + - Christopher Rogos + +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/agreement `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/agreement_termination/__init__.py b/agreement_termination/__init__.py new file mode 100644 index 000000000..69f7babdf --- /dev/null +++ b/agreement_termination/__init__.py @@ -0,0 +1,3 @@ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from . import models diff --git a/agreement_termination/__manifest__.py b/agreement_termination/__manifest__.py new file mode 100644 index 000000000..955922ac8 --- /dev/null +++ b/agreement_termination/__manifest__.py @@ -0,0 +1,23 @@ +# Copyright (C) 2018 - TODAY, Pavlov Media +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + "name": "Agreement Termination", + "summary": "Term dates, notices, review reminders and termination tracking for " + "agreements", + "author": "Pavlov Media, " + "Open Source Integrators, " + "Yves Goldberg (Ygol Internetwork), " + "Odoo Community Association (OCA)", + "website": "https://github.com/OCA/agreement", + "category": "Partner", + "license": "AGPL-3", + "version": "19.0.1.0.0", + "depends": ["agreement"], + "excludes": ["agreement_legal"], + "data": [ + "data/cron.xml", + "views/agreement.xml", + ], + "development_status": "Beta", +} diff --git a/agreement_termination/data/cron.xml b/agreement_termination/data/cron.xml new file mode 100644 index 000000000..6e73c4f7f --- /dev/null +++ b/agreement_termination/data/cron.xml @@ -0,0 +1,23 @@ + + + + + Agreement needs a review + Review agreement before it ends + default + agreement + fa-tasks + 0 + + + + Agreement: Check Review Date + + code + model._alert_to_review_date() + + 1 + days + + + diff --git a/agreement_termination/models/__init__.py b/agreement_termination/models/__init__.py new file mode 100644 index 000000000..61b20a4ef --- /dev/null +++ b/agreement_termination/models/__init__.py @@ -0,0 +1,3 @@ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from . import agreement diff --git a/agreement_termination/models/agreement.py b/agreement_termination/models/agreement.py new file mode 100644 index 000000000..54051c107 --- /dev/null +++ b/agreement_termination/models/agreement.py @@ -0,0 +1,76 @@ +# Copyright (C) 2018 - TODAY, Pavlov Media +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from datetime import timedelta + +from odoo import api, fields, models + + +class Agreement(models.Model): + _name = "agreement" + _inherit = ["agreement"] + + expiration_notice = fields.Integer( + string="Exp. Notice (Days)", + tracking=True, + help="Number of Days before expiration to be notified.", + ) + change_notice = fields.Integer( + string="Change Notice (Days)", + tracking=True, + help="Number of Days to be notified before changes.", + ) + termination_requested = fields.Date( + string="Termination Requested Date", + tracking=True, + help="Date that a request for termination was received.", + ) + termination_date = fields.Date( + tracking=True, help="Date that the contract was terminated." + ) + notification_address_id = fields.Many2one( + "res.partner", + string="Notification Address", + help="The address to send notifications to, if different from " + "customer address.(Address Type = Other)", + ) + to_review_date = fields.Date( + compute="_compute_to_review_date", + store=True, + readonly=False, + help="Date on which the last modifier is reminded to review the " + "agreement. Defaults to the end date minus the expiration notice.", + ) + + @api.depends("end_date", "expiration_notice") + def _compute_to_review_date(self): + for record in self: + if record.end_date: + record.to_review_date = record.end_date - timedelta( + days=record.expiration_notice + ) + + @api.model + def _alert_to_review_date(self): + """Cron: schedule a review activity for agreements whose review date + is today, assigned to the user who last modified the agreement.""" + activity_type = self.env.ref( + "agreement_termination.mail_activity_review_agreement" + ) + agreements = self.search( + [ + ("to_review_date", "=", fields.Date.today()), + ("is_template", "=", False), + ] + ) + for agreement in agreements: + if agreement.activity_ids.filtered( + lambda a: a.activity_type_id == activity_type + ): + continue + reviewer = agreement.user_id or agreement.write_uid or agreement.create_uid + agreement.activity_schedule( + "agreement_termination.mail_activity_review_agreement", + user_id=reviewer.id, + note=self.env._("This agreement is going to end soon"), + ) diff --git a/agreement_termination/pyproject.toml b/agreement_termination/pyproject.toml new file mode 100644 index 000000000..4231d0ccc --- /dev/null +++ b/agreement_termination/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/agreement_termination/readme/CONTRIBUTORS.md b/agreement_termination/readme/CONTRIBUTORS.md new file mode 100644 index 000000000..01af77936 --- /dev/null +++ b/agreement_termination/readme/CONTRIBUTORS.md @@ -0,0 +1,5 @@ +- Pavlov Media +- Open Source Integrators +- Yves Goldberg (Ygol Internetwork) +- [glueckkanja AG](https://www.glueckkanja.com/): + - Christopher Rogos \ No newline at end of file diff --git a/agreement_termination/readme/DESCRIPTION.md b/agreement_termination/readme/DESCRIPTION.md new file mode 100644 index 000000000..e47a58c0f --- /dev/null +++ b/agreement_termination/readme/DESCRIPTION.md @@ -0,0 +1,10 @@ +This module adds the "Term Dates" section to legal agreements, grouping the +signature/start/end dates together with the expiration and change notice +periods, the notification address and the termination tracking dates +(termination requested / terminated). + +It also adds a review date to each agreement, computed as the end date minus +the expiration notice. A daily cron schedules a "review" activity on that date, +assigned to the user who last modified the agreement. + +![Agreement Form](../static/description/screenshot_form.png) \ No newline at end of file diff --git a/agreement_termination/static/description/icon.png b/agreement_termination/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 z 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 Xviia!U7SGha1wx#SCgwmn*{w2TRX*I literal 0 HcmV?d00001 diff --git a/agreement_termination/static/description/index.html b/agreement_termination/static/description/index.html new file mode 100644 index 000000000..e50800088 --- /dev/null +++ b/agreement_termination/static/description/index.html @@ -0,0 +1,444 @@ + + + + + +README.rst + + + +
+ + + +Odoo Community Association + +
+

Agreement Termination

+ +

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

+

This module adds the “Term Dates” section to legal agreements, grouping +the signature/start/end dates together with the expiration and change +notice periods, the notification address and the termination tracking +dates (termination requested / terminated).

+

It also adds a review date to each agreement, computed as the end date +minus the expiration notice. A daily cron schedules a “review” activity +on that date, assigned to the user who last modified the agreement.

+Agreement Form +

Table of contents

+ +
+

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

+
    +
  • Pavlov Media
  • +
  • Open Source Integrators
  • +
  • Yves Goldberg (Ygol Internetwork)
  • +
+
+
+

Contributors

+
    +
  • Pavlov Media
  • +
  • Open Source Integrators
  • +
  • Yves Goldberg (Ygol Internetwork)
  • +
  • glueckkanja AG:
      +
    • Christopher Rogos
    • +
    +
  • +
+
+
+

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/agreement project on GitHub.

+

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

+
+
+
+
+ + diff --git a/agreement_termination/static/description/screenshot_form.png b/agreement_termination/static/description/screenshot_form.png new file mode 100644 index 0000000000000000000000000000000000000000..278a6f95106620d3279cc243227b1f3a20668b9b GIT binary patch literal 75168 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 Tbm|I$PcWn;AwGey@Nuq literal 0 HcmV?d00001 diff --git a/agreement_termination/tests/__init__.py b/agreement_termination/tests/__init__.py new file mode 100644 index 000000000..a83fe161b --- /dev/null +++ b/agreement_termination/tests/__init__.py @@ -0,0 +1,3 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html) + +from . import test_agreement_termination diff --git a/agreement_termination/tests/test_agreement_termination.py b/agreement_termination/tests/test_agreement_termination.py new file mode 100644 index 000000000..73a2b4623 --- /dev/null +++ b/agreement_termination/tests/test_agreement_termination.py @@ -0,0 +1,74 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html) + +from datetime import timedelta + +from odoo import fields +from odoo.tests.common import TransactionCase + + +class TestAgreementTermination(TransactionCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.env = cls.env(context=dict(cls.env.context, tracking_disable=True)) + cls.activity_type = cls.env.ref( + "agreement_termination.mail_activity_review_agreement" + ) + cls.partner = cls.env["res.partner"].create({"name": "TestCustomer"}) + cls.agreement = cls.env["agreement"].create( + { + "name": "TestAgreement", + "code": "TA001", + "partner_id": cls.partner.id, + "start_date": fields.Date.today(), + "end_date": fields.Date.today() + timedelta(days=365), + "expiration_notice": 30, + } + ) + + def _review_activities(self): + return self.agreement.activity_ids.filtered( + lambda a: a.activity_type_id == self.activity_type + ) + + # The review date is the end date minus the expiration notice + def test_compute_to_review_date(self): + self.assertEqual( + self.agreement.to_review_date, + self.agreement.end_date - timedelta(days=30), + ) + self.agreement.expiration_notice = 10 + self.assertEqual( + self.agreement.to_review_date, + self.agreement.end_date - timedelta(days=10), + ) + + # The cron assigns a review activity to the last modifier, once only + def test_cron_assigns_last_modifier(self): + self.env["agreement"]._alert_to_review_date() + self.assertFalse(self._review_activities()) + + modifier = self.env["res.users"].create( + {"name": "Last Modifier", "login": "last_modifier"} + ) + self.agreement.with_user(modifier).sudo().write( + {"to_review_date": fields.Date.today()} + ) + self.assertEqual(self.agreement.write_uid, modifier) + + self.env["agreement"]._alert_to_review_date() + activities = self._review_activities() + self.assertEqual(len(activities), 1) + self.assertEqual(activities.user_id, modifier) + + # Running the cron again does not duplicate the activity + self.env["agreement"]._alert_to_review_date() + self.assertEqual(len(self._review_activities()), 1) + + # Templates never get a review activity + def test_cron_skips_templates(self): + self.agreement.write( + {"is_template": True, "to_review_date": fields.Date.today()} + ) + self.env["agreement"]._alert_to_review_date() + self.assertFalse(self._review_activities()) diff --git a/agreement_termination/views/agreement.xml b/agreement_termination/views/agreement.xml new file mode 100644 index 000000000..a8c1a9b77 --- /dev/null +++ b/agreement_termination/views/agreement.xml @@ -0,0 +1,44 @@ + + + + agreement.form.termination + agreement + + + + + + + + + + + + + + + + + + + agreement.search.termination + agreement + + + + + + + + From ed632aa3c56ef1882ad56f2f6bd57e421166d938 Mon Sep 17 00:00:00 2001 From: Christopher Rogos Date: Fri, 4 Sep 2026 09:59:43 +0000 Subject: [PATCH 2/2] [DO NOT MERGE] requriements --- test-requirements.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 test-requirements.txt diff --git a/test-requirements.txt b/test-requirements.txt new file mode 100644 index 000000000..b69ba2b97 --- /dev/null +++ b/test-requirements.txt @@ -0,0 +1 @@ +odoo-addon-agreement @ git+https://github.com/oca/agreement.git@refs/pull/141/head#subdirectory=agreement