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 @@
+
+
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 @@