Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion subscription_oca/__manifest__.py
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand All @@ -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,
Expand Down
2 changes: 2 additions & 0 deletions subscription_oca/models/account_move.py
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand Down
33 changes: 25 additions & 8 deletions subscription_oca/models/sale_subscription.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand Down Expand Up @@ -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,
Expand All @@ -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
Expand Down
3 changes: 3 additions & 0 deletions subscription_oca/models/sale_subscription_template.py
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand Down
18 changes: 18 additions & 0 deletions subscription_oca/report/report_invoice.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>

<template id="report_invoice_document" inherit_id="account.report_invoice_document">
<div name="invoice_date" position="after">
<div class="col-auto col-3 mw-100 mb-2"
t-if="o.subscription_id.template_id.show_subscription_range and o.subscription_start_date and o.subscription_end_date"
name="subscription_range">
<strong>Subscription:</strong>
<p class="m-0">
<span t-field="o.subscription_start_date" /> - <span
t-field="o.subscription_end_date" />
</p>
</div>
</div>
</template>

</odoo>
25 changes: 20 additions & 5 deletions subscription_oca/views/account_move_views.xml
Original file line number Diff line number Diff line change
@@ -1,16 +1,31 @@
<?xml version="1.0" ?>
<?xml version="1.0"?>
<odoo>

<record id="view_move_form" model="ir.ui.view">
<field name="model">account.move</field>
<field name="inherit_id" ref="account.view_move_form"/>
<field name="inherit_id" ref="account.view_move_form" />
<field name="arch" type="xml">
<xpath expr="//div[@name='button_box']" position="inside">
<field name="subscription_id" invisible="1" />
<button name="action_open_subscription" type="object"
class="oe_stat_button" icon="fa-calendar"
string="Subscription"
attrs="{'invisible': [('subscription_id', '=', False)]}" />
class="oe_stat_button" icon="fa-calendar"
string="Subscription"
attrs="{'invisible': [('subscription_id', '=', False)]}" />
</xpath>

<group id="header_right_group" position="inside">
<label for="subscription_start_date" string="Subscription"
attrs="{'invisible': ['|', ('subscription_start_date', '=', False), ('subscription_end_date', '=', False)]}" />
<div name="dates" class="o_row"
attrs="{'invisible': ['|', ('subscription_start_date', '=', False), ('subscription_end_date', '=', False)]}">
<field name="subscription_start_date" widget="daterange"
options='{"related_end_date": "subscription_end_date"}' />
<i class="fa fa-long-arrow-right mx-2" aria-label="Arrow icon" title="Arrow" />
<field name="subscription_end_date" widget="daterange"
options='{"related_start_date": "subscription_start_date"}' />
</div>
</group>
</field>
</record>

</odoo>
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,7 @@
</group>
<group name="right_group">
<field name="code" readonly="0" />
<field name="show_subscription_range" />
</group>
</group>
</page>
Expand Down
Loading