diff --git a/account_spread_cost_revenue/models/account_spread.py b/account_spread_cost_revenue/models/account_spread.py index d4e9c2c9..03a37c7b 100644 --- a/account_spread_cost_revenue/models/account_spread.py +++ b/account_spread_cost_revenue/models/account_spread.py @@ -44,6 +44,9 @@ class AccountSpread(models.Model): default='month', help="Period length for the entries", required=True) + use_invoice_line_account = fields.Boolean( + string="Use invoice line's account", + ) credit_account_id = fields.Many2one( 'account.account', string='Credit Account', diff --git a/account_spread_cost_revenue/models/account_spread_template.py b/account_spread_cost_revenue/models/account_spread_template.py index c4677d9f..76c164e1 100644 --- a/account_spread_cost_revenue/models/account_spread_template.py +++ b/account_spread_cost_revenue/models/account_spread_template.py @@ -23,10 +23,18 @@ class AccountSpreadTemplate(models.Model): 'account.journal', string='Journal', required=True) + use_invoice_line_account = fields.Boolean( + string="Invoice account as spread account", + help="Use invoice line's account as Balance sheet / spread account.\n" + "In this case, user need to select expense/revenue account too.") spread_account_id = fields.Many2one( 'account.account', string='Spread Balance Sheet Account', - required=True) + required=False) + exp_rev_account_id = fields.Many2one( + 'account.account', + string='Expense/Revenue Account', + help="Optional account to overwrite the existing expense/revenue account") period_number = fields.Integer( string='Number of Repetitions', help="Define the number of spread lines") @@ -66,22 +74,28 @@ class AccountSpreadTemplate(models.Model): if journal: self.spread_journal_id = journal - def _prepare_spread_from_template(self): + @api.onchange('use_invoice_line_account') + def _onchange_user_invoice_line_account(self): + self.exp_rev_account_id = False + + def _prepare_spread_from_template(self, spread_account_id=False): self.ensure_one() company = self.company_id spread_vals = { 'name': self.name, 'template_id': self.id, 'journal_id': self.spread_journal_id.id, + 'use_invoice_line_account': self.use_invoice_line_account, 'company_id': company.id, } + account_id = spread_account_id or self.spread_account_id.id if self.spread_type == 'sale': invoice_type = 'out_invoice' - spread_vals['debit_account_id'] = self.spread_account_id.id + spread_vals['debit_account_id'] = account_id else: invoice_type = 'in_invoice' - spread_vals['credit_account_id'] = self.spread_account_id.id + spread_vals['credit_account_id'] = account_id if self.period_number: spread_vals['period_number'] = self.period_number diff --git a/account_spread_cost_revenue/readme/CONTRIBUTORS.rst b/account_spread_cost_revenue/readme/CONTRIBUTORS.rst index 4518218c..db876642 100644 --- a/account_spread_cost_revenue/readme/CONTRIBUTORS.rst +++ b/account_spread_cost_revenue/readme/CONTRIBUTORS.rst @@ -1 +1,2 @@ * Andrea Stirpe +* Kitti U. diff --git a/account_spread_cost_revenue/readme/HISTORY.rst b/account_spread_cost_revenue/readme/HISTORY.rst index adda066a..99014e15 100644 --- a/account_spread_cost_revenue/readme/HISTORY.rst +++ b/account_spread_cost_revenue/readme/HISTORY.rst @@ -1,3 +1,10 @@ +12.0.1.1.0 +~~~~~~~~~~ + +* [ENH] Add optional Expense/Revenue Account in Chart Template, which can be used + in place of account from invoice line to set Expense/Revenue account in the spread + + 12.0.1.0.0 ~~~~~~~~~~ diff --git a/account_spread_cost_revenue/readme/USAGE.rst b/account_spread_cost_revenue/readme/USAGE.rst index da01e39e..a514e602 100644 --- a/account_spread_cost_revenue/readme/USAGE.rst +++ b/account_spread_cost_revenue/readme/USAGE.rst @@ -69,6 +69,7 @@ Under Invoicing -> Configuration -> Accounting -> Spread Templates, create a new * *Spread Type* * *Spread Balance Sheet Account* +* *Expense/Revenue Account* This option visible if invoice line account is balance sheet account, user need to specify this too. * *Journal* When creating a new Spread Costs/Revenues Board, select the right template. diff --git a/account_spread_cost_revenue/views/account_spread.xml b/account_spread_cost_revenue/views/account_spread.xml index a2de275e..3d294bce 100644 --- a/account_spread_cost_revenue/views/account_spread.xml +++ b/account_spread_cost_revenue/views/account_spread.xml @@ -37,6 +37,7 @@ + @@ -46,14 +47,26 @@ attrs="{'invisible':[('invoice_type','not in',('out_invoice','in_refund'))]}"/> - + + + diff --git a/account_spread_cost_revenue/wizards/account_spread_invoice_line_link_wizard.py b/account_spread_cost_revenue/wizards/account_spread_invoice_line_link_wizard.py index 92041887..2ab34ecd 100644 --- a/account_spread_cost_revenue/wizards/account_spread_invoice_line_link_wizard.py +++ b/account_spread_cost_revenue/wizards/account_spread_invoice_line_link_wizard.py @@ -60,10 +60,18 @@ class AccountSpreadInvoiceLineLinkWizard(models.TransientModel): template_id = fields.Many2one( 'account.spread.template', string='Spread Template') + use_invoice_line_account = fields.Boolean( + string="Use invoice line's account", + help="Use invoice line's account as Balance sheet / spread account.\n" + "In this case, user need to select expense/revenue account too.") spread_account_id = fields.Many2one( 'account.account', string='Balance sheet account / Spread account', store=True) + exp_rev_account_id = fields.Many2one( + 'account.account', + string='Expense/revenue account', + help="Optional account to overwrite the existing expense/revenue account") spread_journal_id = fields.Many2one( 'account.journal', string='Spread Journal', @@ -108,6 +116,12 @@ class AccountSpreadInvoiceLineLinkWizard(models.TransientModel): res = {'domain': {'spread_id': domain}} return res + @api.onchange('use_invoice_line_account') + def _onchange_user_invoice_line_account(self): + self.spread_account_id = (self.use_invoice_line_account and + self.invoice_line_id.account_id or False) + self.exp_rev_account_id = False + @api.multi def confirm(self): self.ensure_one() @@ -129,9 +143,11 @@ class AccountSpreadInvoiceLineLinkWizard(models.TransientModel): elif self.spread_action_type == 'new': debit_account = credit_account = self.spread_account_id if self.invoice_type in ('out_invoice', 'in_refund'): - credit_account = self.invoice_line_id.account_id + credit_account = (self.exp_rev_account_id or + self.invoice_line_id.account_id) else: - debit_account = self.invoice_line_id.account_id + debit_account = (self.exp_rev_account_id or + self.invoice_line_id.account_id) analytic_account = self.invoice_line_id.account_analytic_id analytic_tags = self.invoice_line_id.analytic_tag_ids @@ -149,6 +165,7 @@ class AccountSpreadInvoiceLineLinkWizard(models.TransientModel): 'default_name': self.invoice_line_id.name, 'default_invoice_type': self.invoice_type, 'default_invoice_line_id': self.invoice_line_id.id, + 'default_use_invoice_line_account': self.use_invoice_line_account, 'default_debit_account_id': debit_account.id, 'default_credit_account_id': credit_account.id, 'default_journal_id': self.spread_journal_id.id, @@ -160,8 +177,14 @@ class AccountSpreadInvoiceLineLinkWizard(models.TransientModel): elif self.spread_action_type == 'template': if not self.invoice_line_id.spread_id: account = self.invoice_line_id.account_id - spread_vals = self.template_id._prepare_spread_from_template() + spread_account_id = False + if self.template_id.use_invoice_line_account: + account = self.template_id.exp_rev_account_id + spread_account_id = self.invoice_line_id.account_id.id + spread_vals = self.template_id._prepare_spread_from_template( + spread_account_id=spread_account_id + ) date_invoice = self.invoice_id.date_invoice date_invoice = date_invoice or self.template_id.start_date date_invoice = date_invoice or fields.Date.today() diff --git a/account_spread_cost_revenue/wizards/account_spread_invoice_line_link_wizard.xml b/account_spread_cost_revenue/wizards/account_spread_invoice_line_link_wizard.xml index 2760cd68..3eb05fcc 100644 --- a/account_spread_cost_revenue/wizards/account_spread_invoice_line_link_wizard.xml +++ b/account_spread_cost_revenue/wizards/account_spread_invoice_line_link_wizard.xml @@ -17,7 +17,9 @@ + +