diff --git a/subscription_oca/README.rst b/subscription_oca/README.rst index 9a7c68736..d31f3af2c 100644 --- a/subscription_oca/README.rst +++ b/subscription_oca/README.rst @@ -7,7 +7,7 @@ Subscription management !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:ef765aa59e854add1d8f551d169722ba58f7dd04b2720acb051ecd8dd72af96e + !! source digest: sha256:991d3417863465f9101a0ed4709e4cc97a3a8b8bcc2a0857d29e9918927ff74f !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png diff --git a/subscription_oca/__manifest__.py b/subscription_oca/__manifest__.py index d90fbf738..90fa9a76e 100644 --- a/subscription_oca/__manifest__.py +++ b/subscription_oca/__manifest__.py @@ -12,6 +12,8 @@ "maintainers": ["ilyasProgrammer", "aleuffre", "renda-dev", "PicchiSeba"], "depends": ["sale_management", "account"], "data": [ + "security/ir.model.access.csv", + "security/ir_rule.xml", "views/product_template_views.xml", "views/sale_subscription_views.xml", "views/sale_subscription_stage_views.xml", @@ -22,7 +24,6 @@ "data/ir_cron.xml", "data/sale_subscription_data.xml", "wizard/close_subscription_wizard.xml", - "security/ir.model.access.csv", ], "installable": True, "application": True, diff --git a/subscription_oca/models/sale_subscription.py b/subscription_oca/models/sale_subscription.py index 08a734481..26091a5d4 100644 --- a/subscription_oca/models/sale_subscription.py +++ b/subscription_oca/models/sale_subscription.py @@ -6,7 +6,7 @@ from datetime import date, datetime from dateutil.relativedelta import relativedelta from odoo import _, api, fields, models -from odoo.exceptions import AccessError +from odoo.exceptions import AccessError, ValidationError logger = logging.getLogger(__name__) @@ -29,6 +29,7 @@ class SaleSubscription(models.Model): required=True, index=True, default=lambda self: self.env.company, + readonly=True, ) partner_id = fields.Many2one( comodel_name="res.partner", required=True, string="Partner", index=True @@ -44,6 +45,7 @@ class SaleSubscription(models.Model): comodel_name="sale.subscription.template", required=True, string="Subscription template", + check_company=True, ) template_invoicing_mode = fields.Selection( related="template_id.invoicing_mode", readonly=True @@ -161,6 +163,15 @@ class SaleSubscription(models.Model): subscription.action_start_subscription() subscription.generate_invoice() + @api.constrains("template_id") + def _check_template_id(self): + if self.template_id.company_id not in [False, self.env.company]: + raise ValidationError( + _( + "Cannot link a Template owned by another company to this subscription" + ) + ) + @api.depends("sale_subscription_line_ids") def _compute_total(self): for record in self: diff --git a/subscription_oca/models/sale_subscription_template.py b/subscription_oca/models/sale_subscription_template.py index e429a1b66..25b872078 100644 --- a/subscription_oca/models/sale_subscription_template.py +++ b/subscription_oca/models/sale_subscription_template.py @@ -43,6 +43,12 @@ class SaleSubscriptionTemplate(models.Model): ) code = fields.Char() recurring_rule_count = fields.Integer(default=1, string="Rule count") + company_id = fields.Many2one( + "res.company", + "Company", + default=lambda self: self.env.company, + domain=lambda self: [("id", "in", self.env.companies.ids)], + ) invoice_mail_template_id = fields.Many2one( comodel_name="mail.template", string="Invoice Email", diff --git a/subscription_oca/security/ir_rule.xml b/subscription_oca/security/ir_rule.xml new file mode 100644 index 000000000..b6270710f --- /dev/null +++ b/subscription_oca/security/ir_rule.xml @@ -0,0 +1,24 @@ + + + + Sale Subscription rule + + ['|', ('company_id', 'in', company_ids), ('company_id', '=', False)] + + + Sale Subscription Line rule + + ['|', ('company_id', 'in', company_ids), ('company_id', '=', False)] + + + Sale Subscription Template rule + + ['|', ('company_id', 'in', company_ids), ('company_id', '=', False)] + + diff --git a/subscription_oca/static/description/index.html b/subscription_oca/static/description/index.html index 617d92b76..4be5bd9c6 100644 --- a/subscription_oca/static/description/index.html +++ b/subscription_oca/static/description/index.html @@ -1,3 +1,4 @@ + @@ -366,7 +367,7 @@ ul.auto-toc { !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:ef765aa59e854add1d8f551d169722ba58f7dd04b2720acb051ecd8dd72af96e +!! source digest: sha256:991d3417863465f9101a0ed4709e4cc97a3a8b8bcc2a0857d29e9918927ff74f !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

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

This module allows creating subscriptions that generate recurring invoices or orders. It also enables the sale of products that generate subscriptions.

diff --git a/subscription_oca/tests/test_subscription_oca.py b/subscription_oca/tests/test_subscription_oca.py index 8f0b4af7f..a5eebdcef 100644 --- a/subscription_oca/tests/test_subscription_oca.py +++ b/subscription_oca/tests/test_subscription_oca.py @@ -6,6 +6,7 @@ import uuid from dateutil.relativedelta import relativedelta from odoo import exceptions, fields +from odoo.exceptions import ValidationError from odoo.tests import SavepointCase @@ -756,3 +757,24 @@ class TestSubscriptionOCA(SavepointCase): ) test_res.append(group_stage_ids) return test_res + + def test_template_other_company(self): + other_company = self.env["res.company"].create( + { + "name": "Other Company", + } + ) + template = self.env["sale.subscription.template"].create( + { + "name": "Test Template", + "company_id": other_company.id, + } + ) + with self.assertRaises(ValidationError): + self.env["sale.subscription"].create( + { + "partner_id": self.partner.id, + "pricelist_id": self.pricelist1.id, + "template_id": template.id, + } + ) diff --git a/subscription_oca/views/sale_subscription_template_views.xml b/subscription_oca/views/sale_subscription_template_views.xml index d353842fb..3b7c18a37 100644 --- a/subscription_oca/views/sale_subscription_template_views.xml +++ b/subscription_oca/views/sale_subscription_template_views.xml @@ -88,6 +88,7 @@ + @@ -117,10 +118,25 @@ + + + + sale.subscription.template.filter + sale.subscription.template + + + + + + + + + + Subscription templates sale.subscription.template diff --git a/subscription_oca/views/sale_subscription_views.xml b/subscription_oca/views/sale_subscription_views.xml index f89e5f3ed..3292ce6a2 100644 --- a/subscription_oca/views/sale_subscription_views.xml +++ b/subscription_oca/views/sale_subscription_views.xml @@ -268,6 +268,7 @@ +