diff --git a/subscription_oca/__manifest__.py b/subscription_oca/__manifest__.py index f34b423f9..a38c5909c 100644 --- a/subscription_oca/__manifest__.py +++ b/subscription_oca/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Subscription management", "summary": "Generate recurring invoices.", - "version": "16.0.1.0.0", + "version": "16.0.1.0.1", "development_status": "Beta", "category": "Subscription Management", "website": "https://github.com/OCA/contract", @@ -22,6 +22,7 @@ "data/ir_cron.xml", "data/sale_subscription_data.xml", "wizard/close_subscription_wizard.xml", + "report/report_invoice.xml", "security/ir.model.access.csv", ], "installable": True, diff --git a/subscription_oca/models/account_move.py b/subscription_oca/models/account_move.py index 7b3679697..526873990 100644 --- a/subscription_oca/models/account_move.py +++ b/subscription_oca/models/account_move.py @@ -10,6 +10,8 @@ class AccountMove(models.Model): subscription_id = fields.Many2one( comodel_name="sale.subscription", string="Subscription" ) + subscription_start_date = fields.Date(readonly=True) + subscription_end_date = fields.Date(readonly=True) def action_open_subscription(self): self.ensure_one() diff --git a/subscription_oca/models/sale_subscription.py b/subscription_oca/models/sale_subscription.py index 95edbdf81..8bdbcca80 100644 --- a/subscription_oca/models/sale_subscription.py +++ b/subscription_oca/models/sale_subscription.py @@ -212,15 +212,17 @@ def _onchange_template_id(self): else: self.calculate_recurring_next_date(today) + def _calculate_recurring_next_date(self, start_date): + self.ensure_one() + if not self.template_id: + return start_date + type_interval = self.template_id.recurring_rule_type + interval = int(self.template_id.recurring_interval) + return start_date + relativedelta(**{type_interval: interval}) + def calculate_recurring_next_date(self, start_date): - if self.account_invoice_ids_count == 0: - self.recurring_next_date = date.today() - else: - type_interval = self.template_id.recurring_rule_type - interval = int(self.template_id.recurring_interval) - self.recurring_next_date = start_date + relativedelta( - **{type_interval: interval} - ) + self.ensure_one() + self.recurring_next_date = self._calculate_recurring_next_date(start_date) @api.onchange("partner_id") def onchange_partner_id(self): @@ -272,8 +274,21 @@ def _prepare_sale_order(self, line_ids=False): "order_line": line_ids, } + def _generate_subscription_date_range(self): + self.ensure_one() + if self.account_invoice_ids_count == 0: + start_date = self.date_start + end_date = self.recurring_next_date + else: + start_date = self.recurring_next_date + end_date = self._calculate_recurring_next_date(self.recurring_next_date) + + return start_date, end_date + def _prepare_account_move(self, line_ids): self.ensure_one() + start_date, end_date = self._generate_subscription_date_range() + values = { "partner_id": self.partner_id.id, "invoice_date": self.recurring_next_date, @@ -283,6 +298,8 @@ def _prepare_account_move(self, line_ids): "partner_bank_id": self.company_id.partner_id.bank_ids[:1].id, "invoice_line_ids": line_ids, "subscription_id": self.id, + "subscription_start_date": start_date, + "subscription_end_date": end_date, } if self.journal_id: values["journal_id"] = self.journal_id.id diff --git a/subscription_oca/models/sale_subscription_template.py b/subscription_oca/models/sale_subscription_template.py index df89f401b..6b54c1aff 100644 --- a/subscription_oca/models/sale_subscription_template.py +++ b/subscription_oca/models/sale_subscription_template.py @@ -60,6 +60,9 @@ class SaleSubscriptionTemplate(models.Model): subscription_count = fields.Integer( compute="_compute_subscription_count", string="subscription_ids" ) + show_subscription_range = fields.Boolean( + help="Display the subscription range in the invoice", + ) def _compute_subscription_count(self): data = self.env["sale.subscription"].read_group( diff --git a/subscription_oca/report/report_invoice.xml b/subscription_oca/report/report_invoice.xml new file mode 100644 index 000000000..14714a2ce --- /dev/null +++ b/subscription_oca/report/report_invoice.xml @@ -0,0 +1,18 @@ + + + + + + diff --git a/subscription_oca/views/account_move_views.xml b/subscription_oca/views/account_move_views.xml index c3c6e403e..9a356331e 100644 --- a/subscription_oca/views/account_move_views.xml +++ b/subscription_oca/views/account_move_views.xml @@ -1,16 +1,31 @@ - + + account.move - +