mirror of
https://github.com/OCA/contract.git
synced 2025-02-13 17:57:24 +02:00
[ADD] contract_price_revision: new module to update contract prices easily
This commit is contained in:
1
contract_price_revision/wizards/__init__.py
Normal file
1
contract_price_revision/wizards/__init__.py
Normal file
@@ -0,0 +1 @@
|
||||
from . import create_revision_line
|
||||
50
contract_price_revision/wizards/create_revision_line.py
Normal file
50
contract_price_revision/wizards/create_revision_line.py
Normal file
@@ -0,0 +1,50 @@
|
||||
# Copyright 2019 Tecnativa <vicent.cubells@tecnativa.com>
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
|
||||
from dateutil.relativedelta import relativedelta
|
||||
|
||||
from odoo import api, fields, models
|
||||
import odoo.addons.decimal_precision as dp
|
||||
|
||||
|
||||
class CreateRevisionLineWizard(models.TransientModel):
|
||||
_name = 'create.revision.line.wizard'
|
||||
|
||||
date_start = fields.Date(
|
||||
required=True,
|
||||
)
|
||||
date_end = fields.Date()
|
||||
variation_percent = fields.Float(
|
||||
digits=dp.get_precision('Product Price'),
|
||||
required=True,
|
||||
string='Variation %',
|
||||
)
|
||||
|
||||
@api.multi
|
||||
def action_apply(self):
|
||||
contract_obj = self.env['account.analytic.account']
|
||||
line_obj = self.env['account.analytic.invoice.line']
|
||||
active_ids = self.env.context['active_ids']
|
||||
line_news = line_obj
|
||||
for item in contract_obj.browse(active_ids).mapped(
|
||||
'recurring_invoice_line_ids').filtered(
|
||||
lambda x: not x.automatic_price):
|
||||
line_news |= item.copy({
|
||||
'date_start': self.date_start,
|
||||
'date_end': self.date_end,
|
||||
'previous_revision_id': item.id,
|
||||
'price_unit': item.price_unit * (
|
||||
1.0 + self.variation_percent / 100.0),
|
||||
})
|
||||
item.date_end = (fields.Date.from_string(self.date_start) -
|
||||
relativedelta(days=1))
|
||||
action = self.env.ref(
|
||||
'contract.action_account_analytic_sale_overdue_all').read()[0]
|
||||
if len(active_ids) > 1: # pragma: no cover
|
||||
action['domain'] = [('id', 'in', active_ids)]
|
||||
elif active_ids:
|
||||
action['views'] = [(
|
||||
self.env.ref('contract.account_analytic_account_sale_form').id,
|
||||
'form')]
|
||||
action['res_id'] = active_ids[0]
|
||||
return action
|
||||
@@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
|
||||
<record id="contract_line_duplicate_wizard_view" model="ir.ui.view">
|
||||
<field name="name">Create Revision Line</field>
|
||||
<field name="model">create.revision.line.wizard</field>
|
||||
<field name="arch" type="xml">
|
||||
<form>
|
||||
<div>
|
||||
Set new start date and variation percent to duplicate.
|
||||
This process set start date previous day as end date of
|
||||
origin record.
|
||||
<br/>
|
||||
<br/>
|
||||
</div>
|
||||
<group>
|
||||
<group>
|
||||
<field name="date_start"/>
|
||||
<field name="date_end"/>
|
||||
<field name="variation_percent"/>
|
||||
</group>
|
||||
</group>
|
||||
<footer>
|
||||
<button string="Apply" name="action_apply"
|
||||
type="object" class="oe_highlight"/>
|
||||
or
|
||||
<button string="Cancel" class="oe_link" special="cancel"/>
|
||||
</footer>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<act_window id="contract_line_duplicate_wizard_action"
|
||||
name="Create revision of contract lines"
|
||||
src_model="account.analytic.account"
|
||||
res_model="create.revision.line.wizard"
|
||||
view_type="form" view_mode="form"
|
||||
key2="client_action_multi" target="new"
|
||||
/>
|
||||
|
||||
</odoo>
|
||||
Reference in New Issue
Block a user