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

5 years ago
5 years ago
5 years ago
  1. # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
  2. from odoo import api, fields, models
  3. class ContractContract(models.Model):
  4. _inherit = 'contract.contract'
  5. @api.multi
  6. def _recurring_create_invoice(self, date_ref=False):
  7. invoices = super()._recurring_create_invoice(date_ref)
  8. for contract_to_invoice in self:
  9. product_avg_qty_dict = {}
  10. for each_contract_line in contract_to_invoice.contract_line_ids.\
  11. filtered(lambda l: l.products_invoiced_by_avg_ids):
  12. for each_avg_product in each_contract_line.products_invoiced_by_avg_ids:
  13. product_avg_qty_dict.update(
  14. {each_avg_product.id: each_contract_line.quantity})
  15. for each_invoice in invoices:
  16. for each_inv_line in each_invoice.invoice_line_ids:
  17. if each_inv_line.product_id.id in list(product_avg_qty_dict.keys()):
  18. qty = product_avg_qty_dict.get(
  19. each_inv_line.product_id.id) / each_inv_line.quantity
  20. each_inv_line.quantity = round(qty)
  21. each_inv_line._onchange_product_id_account_invoice_pricelist()
  22. return invoices
  23. class ContractLine(models.Model):
  24. _inherit = 'contract.line'
  25. products_invoiced_by_avg_ids = fields.Many2many(
  26. comodel_name='product.product',
  27. relation='contract_line_product_id_rel',
  28. column1='contract_line_id',
  29. column2='product_id',
  30. string='Products Invoiced using Average Quantity')