From b9d9cd5725820f95de8d11b25343beecdaff801d Mon Sep 17 00:00:00 2001 From: Carol Date: Wed, 7 Feb 2024 13:34:04 +0100 Subject: [PATCH] [MIG] subscription_oca: Migration to 16.0 --- subscription_oca/README.rst | 2 +- subscription_oca/__manifest__.py | 2 +- subscription_oca/models/sale_subscription.py | 4 +- .../models/sale_subscription_line.py | 31 ++++----- .../models/sale_subscription_stage.py | 7 +- subscription_oca/readme/CONTRIBUTORS.rst | 1 + subscription_oca/readme/USAGE.rst | 2 +- .../views/sale_subscription_stage_views.xml | 12 ++-- .../sale_subscription_template_views.xml | 66 +++++++++---------- .../views/sale_subscription_views.xml | 4 +- 10 files changed, 64 insertions(+), 67 deletions(-) diff --git a/subscription_oca/README.rst b/subscription_oca/README.rst index f8a70688f..9ba4a3b68 100644 --- a/subscription_oca/README.rst +++ b/subscription_oca/README.rst @@ -2,7 +2,7 @@ Subscription management ======================= -.. +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! diff --git a/subscription_oca/__manifest__.py b/subscription_oca/__manifest__.py index fe221adda..fa4400f48 100644 --- a/subscription_oca/__manifest__.py +++ b/subscription_oca/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Subscription management", "summary": "Generate recurring invoices.", - "version": "15.0.1.0.1", + "version": "16.0.1.0.0", "development_status": "Beta", "category": "Subscription Management", "website": "https://github.com/OCA/contract", diff --git a/subscription_oca/models/sale_subscription.py b/subscription_oca/models/sale_subscription.py index 250f97a00..684570684 100644 --- a/subscription_oca/models/sale_subscription.py +++ b/subscription_oca/models/sale_subscription.py @@ -114,7 +114,7 @@ class SaleSubscription(models.Model): string="Stage", tracking=True, group_expand="_read_group_stage_ids", - store="true", + store=True, ) stage_str = fields.Char( related="stage_id.name", @@ -228,7 +228,7 @@ class SaleSubscription(models.Model): self.fiscal_position_id = ( self.env["account.fiscal.position"] .with_company(self.company_id) - .get_fiscal_position(self.partner_id.id) + ._get_fiscal_position(self.partner_id) ) def action_start_subscription(self): diff --git a/subscription_oca/models/sale_subscription_line.py b/subscription_oca/models/sale_subscription_line.py index b90792d1b..a780e4075 100644 --- a/subscription_oca/models/sale_subscription_line.py +++ b/subscription_oca/models/sale_subscription_line.py @@ -96,8 +96,8 @@ class SaleSubscriptionLine(models.Model): for line in self: fpos = ( line.sale_subscription_id.fiscal_position_id - or line.sale_subscription_id.fiscal_position_id.get_fiscal_position( - line.sale_subscription_id.partner_id.id + or line.sale_subscription_id.fiscal_position_id._get_fiscal_position( + line.sale_subscription_id.partner_id ) ) # If company_id is set, always filter taxes by the company @@ -174,10 +174,9 @@ class SaleSubscriptionLine(models.Model): partner_id=record.sale_subscription_id.partner_id.id, date=fields.Datetime.now(), uom=record.product_id.uom_id.id, - ).get_product_price_rule( + )._get_product_price_rule( record.product_id, record.product_uom_qty or 1.0, - record.sale_subscription_id.partner_id, ) new_list_price, currency = record.with_context( partner_id=record.sale_subscription_id.partner_id.id, @@ -203,7 +202,7 @@ class SaleSubscriptionLine(models.Model): def _get_real_price_currency(self, product, rule_id, qty, uom): PricelistItem = self.env["product.pricelist.item"] - field_name = "lst_price" + product_price = product.lst_price currency_id = None product_currency = product.currency_id if rule_id: @@ -217,18 +216,18 @@ class SaleSubscriptionLine(models.Model): ): _price, rule_id = pricelist_item.base_pricelist_id.with_context( uom=uom.id - ).get_product_price_rule( - product, qty, self.sale_subscription_id.partner_id - ) + )._get_product_price_rule(product, qty) pricelist_item = PricelistItem.browse(rule_id) if pricelist_item.base == "standard_price": - field_name = "standard_price" + product_price = product.standard_price product_currency = product.cost_currency_id elif ( pricelist_item.base == "pricelist" and pricelist_item.base_pricelist_id ): - field_name = "price" + product_price = pricelist_item.base_pricelist_id._get_product_price( + product, self.product_uom_qty or 1.0, uom=self.product_id.uom_id + ) product = product.with_context( pricelist=pricelist_item.base_pricelist_id.id ) @@ -256,23 +255,21 @@ class SaleSubscriptionLine(models.Model): else: uom_factor = 1.0 - return product[field_name] * uom_factor * cur_factor, currency_id + return product_price * uom_factor * cur_factor, currency_id def _get_display_price(self, product): if self.sale_subscription_id.pricelist_id.discount_policy == "with_discount": - return product.with_context( - pricelist=self.sale_subscription_id.pricelist_id.id, - uom=self.product_id.uom_id.id, - ).price + return self.sale_subscription_id.pricelist_id._get_product_price( + product, self.product_uom_qty or 1.0, uom=self.product_id.uom_id + ) final_price, rule_id = self.sale_subscription_id.pricelist_id.with_context( partner_id=self.sale_subscription_id.partner_id.id, date=fields.Datetime.now(), uom=self.product_id.uom_id.id, - ).get_product_price_rule( + )._get_product_price_rule( product or self.product_id, self.product_uom_qty or 1.0, - self.sale_subscription_id.partner_id, ) base_price, currency = self.with_context( partner_id=self.sale_subscription_id.partner_id.id, diff --git a/subscription_oca/models/sale_subscription_stage.py b/subscription_oca/models/sale_subscription_stage.py index ee6b6bb46..8bc396178 100644 --- a/subscription_oca/models/sale_subscription_stage.py +++ b/subscription_oca/models/sale_subscription_stage.py @@ -11,7 +11,7 @@ class SaleSubscriptionStage(models.Model): name = fields.Char(required=True, translate=True) sequence = fields.Integer() - display_name = fields.Char(string="Display name") + display_name = fields.Char(string="Display name", compute="_compute_display_name") in_progress = fields.Boolean(string="In progress", default=False) fold = fields.Boolean(string="Kanban folded") description = fields.Text(translate=True) @@ -27,3 +27,8 @@ class SaleSubscriptionStage(models.Model): ) if len(post_stages) > 1: raise ValidationError(_("There is already a Closed-type stage declared")) + + @api.depends("name") + def _compute_display_name(self): + for stage in self: + stage.display_name = stage.name diff --git a/subscription_oca/readme/CONTRIBUTORS.rst b/subscription_oca/readme/CONTRIBUTORS.rst index 3324fc474..8ddfb0521 100644 --- a/subscription_oca/readme/CONTRIBUTORS.rst +++ b/subscription_oca/readme/CONTRIBUTORS.rst @@ -1,4 +1,5 @@ * Carlos Martínez +* Carolina Ferrer * `Ooops404 `__: diff --git a/subscription_oca/readme/USAGE.rst b/subscription_oca/readme/USAGE.rst index 4c5a5ed85..f3ef9cf85 100644 --- a/subscription_oca/readme/USAGE.rst +++ b/subscription_oca/readme/USAGE.rst @@ -3,7 +3,7 @@ To make a subscription: #. Go to *Subscriptions > Configuration > Subscription templates*. #. Create the templates you consider, choosing the billing frequency: daily, monthly... and the method of creating the invoice and/or order. #. Go to *Subscription > Subscriptions*. -#. Create a subscription and indicate the start date. When the *Subscriptions Management* cron job is executed, the subscription will begin and the first invoice will be created if the execution date matches the start date. The invoice will also be created when the execution date matches the next invoice date. Additionally, you can manually change the subscription status and create an invoice. +#. Create a subscription and indicate the start date. When the *Subscriptions Management* cron job is executed, the subscription will begin and the first invoice will be created if the execution date matches the start date. The invoice will also be created when the execution date matches the next invoice date. Additionally, you can manually change the subscription status and create an invoice by using the *Create Invoice* button. This action creates just an invoice even if the subscription template has the *Sale Order & Invoice* option selected, because the *Invoicing mode* option is triggered through the cron job. #. The cron job will also end the subscription if its end date has been reached. To create subscriptions with the sale of a product: diff --git a/subscription_oca/views/sale_subscription_stage_views.xml b/subscription_oca/views/sale_subscription_stage_views.xml index 8e6b0bd72..7ef0d8ad7 100644 --- a/subscription_oca/views/sale_subscription_stage_views.xml +++ b/subscription_oca/views/sale_subscription_stage_views.xml @@ -28,13 +28,11 @@ - - - + diff --git a/subscription_oca/views/sale_subscription_template_views.xml b/subscription_oca/views/sale_subscription_template_views.xml index d683c55b7..f6ac959ce 100644 --- a/subscription_oca/views/sale_subscription_template_views.xml +++ b/subscription_oca/views/sale_subscription_template_views.xml @@ -8,34 +8,32 @@
- -
- - -
-
+
+ + +

- - - + diff --git a/subscription_oca/views/sale_subscription_views.xml b/subscription_oca/views/sale_subscription_views.xml index 427914348..9a7dafa0a 100644 --- a/subscription_oca/views/sale_subscription_views.xml +++ b/subscription_oca/views/sale_subscription_views.xml @@ -26,8 +26,7 @@ @@ -104,6 +103,7 @@ name="recurring_next_date" attrs="{'invisible': ['|', ('recurring_next_date', '=', False), ('in_progress', '=', False)]}" /> +