You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
37 lines
1.5 KiB
37 lines
1.5 KiB
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
|
|
|
from odoo import api, fields, models
|
|
|
|
|
|
class ContractContract(models.Model):
|
|
_inherit = 'contract.contract'
|
|
|
|
@api.multi
|
|
def _recurring_create_invoice(self, date_ref=False):
|
|
invoices = super()._recurring_create_invoice(date_ref)
|
|
for contract_to_invoice in self:
|
|
product_avg_qty_dict = {}
|
|
for each_contract_line in contract_to_invoice.contract_line_ids.\
|
|
filtered(lambda l: l.products_invoiced_by_avg_ids):
|
|
for each_avg_product in each_contract_line.products_invoiced_by_avg_ids:
|
|
product_avg_qty_dict.update(
|
|
{each_avg_product.id: each_contract_line.quantity})
|
|
for each_invoice in invoices:
|
|
for each_inv_line in each_invoice.invoice_line_ids:
|
|
if each_inv_line.product_id.id in list(product_avg_qty_dict.keys()):
|
|
qty = product_avg_qty_dict.get(
|
|
each_inv_line.product_id.id) / each_inv_line.quantity
|
|
each_inv_line.quantity = round(qty)
|
|
each_inv_line._onchange_product_id_account_invoice_pricelist()
|
|
return invoices
|
|
|
|
|
|
class ContractLine(models.Model):
|
|
_inherit = 'contract.line'
|
|
|
|
products_invoiced_by_avg_ids = fields.Many2many(
|
|
comodel_name='product.product',
|
|
relation='contract_line_product_id_rel',
|
|
column1='contract_line_id',
|
|
column2='product_id',
|
|
string='Products Invoiced using Average Quantity')
|