From 364268eaa9d4e729dc162b579382c18a570f053c Mon Sep 17 00:00:00 2001 From: Alessandro Uffreduzzi Date: Fri, 15 Mar 2024 10:37:00 +0100 Subject: [PATCH 1/2] [FIX] subscription_oca: product-subscription_template company issues Make company required on subscription_template. Make subcription_template_id a company-dependent field on product_template. --- subscription_oca/README.rst | 2 +- subscription_oca/__manifest__.py | 2 +- .../migrations/14.0.2.0.0/post-migrate.py | 14 ++++++++++++++ .../migrations/14.0.2.0.0/pre-migrate.py | 13 +++++++++++++ subscription_oca/models/product_template.py | 4 +++- .../models/sale_subscription_template.py | 1 + subscription_oca/static/description/index.html | 3 ++- 7 files changed, 35 insertions(+), 4 deletions(-) create mode 100644 subscription_oca/migrations/14.0.2.0.0/post-migrate.py create mode 100644 subscription_oca/migrations/14.0.2.0.0/pre-migrate.py diff --git a/subscription_oca/README.rst b/subscription_oca/README.rst index f16548e5a..67eec7976 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:30f9f32f03f3354d63eec84cae0c6ecf6f3f9f02f0cc780d80b3de4c49a92eff + !! source digest: sha256:ebd987588c730c485dde3b984d5da1506984ed1f42cc14a649ca24b5a54e3a4a !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png diff --git a/subscription_oca/__manifest__.py b/subscription_oca/__manifest__.py index aa85bb296..db4679ed6 100644 --- a/subscription_oca/__manifest__.py +++ b/subscription_oca/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Subscription management", "summary": "Generate recurring invoices.", - "version": "14.0.1.3.0", + "version": "14.0.2.0.0", "development_status": "Beta", "category": "Subscription Management", "website": "https://github.com/OCA/contract", diff --git a/subscription_oca/migrations/14.0.2.0.0/post-migrate.py b/subscription_oca/migrations/14.0.2.0.0/post-migrate.py new file mode 100644 index 000000000..3ec83c491 --- /dev/null +++ b/subscription_oca/migrations/14.0.2.0.0/post-migrate.py @@ -0,0 +1,14 @@ +from openupgradelib import openupgrade + + +@openupgrade.migrate() +def migrate(env, version): + openupgrade.convert_to_company_dependent( + env, + "product.template", + "old_subscription_template_id", + "subscription_template_id", + ) + openupgrade.drop_columns( + env.cr, [("product_template", "old_subscription_template_id")] + ) diff --git a/subscription_oca/migrations/14.0.2.0.0/pre-migrate.py b/subscription_oca/migrations/14.0.2.0.0/pre-migrate.py new file mode 100644 index 000000000..55682c5f9 --- /dev/null +++ b/subscription_oca/migrations/14.0.2.0.0/pre-migrate.py @@ -0,0 +1,13 @@ +from openupgradelib import openupgrade + + +@openupgrade.migrate() +def migrate(env, version): + openupgrade.copy_columns( + env.cr, + { + "product_template": [ + ("subscription_template_id", "old_subscription_template_id", None) + ] + }, + ) diff --git a/subscription_oca/models/product_template.py b/subscription_oca/models/product_template.py index c866cfa3e..3c917f205 100644 --- a/subscription_oca/models/product_template.py +++ b/subscription_oca/models/product_template.py @@ -8,5 +8,7 @@ class Product(models.Model): subscribable = fields.Boolean(string="Subscribable product") subscription_template_id = fields.Many2one( - comodel_name="sale.subscription.template", string="Subscription template" + comodel_name="sale.subscription.template", + string="Subscription template", + company_dependent=True, ) diff --git a/subscription_oca/models/sale_subscription_template.py b/subscription_oca/models/sale_subscription_template.py index 25b872078..b0843c92d 100644 --- a/subscription_oca/models/sale_subscription_template.py +++ b/subscription_oca/models/sale_subscription_template.py @@ -46,6 +46,7 @@ class SaleSubscriptionTemplate(models.Model): company_id = fields.Many2one( "res.company", "Company", + required=True, default=lambda self: self.env.company, domain=lambda self: [("id", "in", self.env.companies.ids)], ) diff --git a/subscription_oca/static/description/index.html b/subscription_oca/static/description/index.html index 170e2d994..b89429067 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:30f9f32f03f3354d63eec84cae0c6ecf6f3f9f02f0cc780d80b3de4c49a92eff +!! source digest: sha256:ebd987588c730c485dde3b984d5da1506984ed1f42cc14a649ca24b5a54e3a4a !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

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.

From f42fdbb5d881d1bedf52ec4301120ea7faf7c3c2 Mon Sep 17 00:00:00 2001 From: Alessandro Uffreduzzi Date: Fri, 15 Mar 2024 12:18:36 +0100 Subject: [PATCH 2/2] [FIX] sale_subscription: get sales_team with consistent company on SO --- subscription_oca/models/sale_subscription.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/subscription_oca/models/sale_subscription.py b/subscription_oca/models/sale_subscription.py index 26091a5d4..19edb0d66 100644 --- a/subscription_oca/models/sale_subscription.py +++ b/subscription_oca/models/sale_subscription.py @@ -265,14 +265,22 @@ class SaleSubscription(models.Model): def _prepare_sale_order(self, line_ids=False): self.ensure_one() + company = self.company_id + # Fix for multi-company issue with team_id + # Cannot assign team belonging to a different company + team_id = self.env["sale.order"]._get_default_team() + if team_id.company_id and team_id.company_id != company: + team_id = False return { "partner_id": self.partner_id.id, + "company_id": company.id, "fiscal_position_id": self.fiscal_position_id.id, "date_order": datetime.now(), "payment_term_id": self.partner_id.property_payment_term_id.id, "user_id": self.user_id.id, "origin": self.name, "order_line": line_ids, + "team_id": team_id and team_id.id or False, } def _prepare_account_move(self, line_ids):