diff --git a/subscription_oca/README.rst b/subscription_oca/README.rst index f8a70688ff..9ba4a3b681 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 fe221adda4..fa4400f482 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 250f97a006..6845706840 100644 --- a/subscription_oca/models/sale_subscription.py +++ b/subscription_oca/models/sale_subscription.py @@ -114,7 +114,7 @@ def _read_group_stage_ids(self, stages, domain, order): 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 @@ def onchange_partner_id_fpos(self): 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 b90792d1b5..a780e4075b 100644 --- a/subscription_oca/models/sale_subscription_line.py +++ b/subscription_oca/models/sale_subscription_line.py @@ -96,8 +96,8 @@ def _compute_tax_ids(self): 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 @@ def _compute_discount(self): 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 @@ def _compute_discount(self): 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 @@ def _get_real_price_currency(self, product, rule_id, qty, uom): ): _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 @@ def _get_real_price_currency(self, product, rule_id, qty, uom): 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 ee6b6bb460..8bc3961788 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 @@ def _check_lot_product(self): ) 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 3324fc4745..8ddfb05210 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 4c5a5ed85a..f3ef9cf85a 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 8e6b0bd724..7ef0d8ad79 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 d683c55b7b..f6ac959cea 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 4279143483..9a7dafa0a9 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)]}" /> +