product.py 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. # coding: utf-8
  2. # © 2015 David BEAL @ Akretion
  3. # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
  4. from openerp import api, fields, models
  5. class ProductTemplate(models.Model):
  6. _inherit = 'product.template'
  7. def _default_pricelist_item_ids(self):
  8. return self.default_pricelist_item_ids()
  9. pricelist_item_ids = fields.One2many(
  10. 'product.pricelist.item',
  11. 'product_tmpl_id',
  12. string='Pricelist Items',
  13. default=_default_pricelist_item_ids,
  14. help="These prices are defined with absolute values\n"
  15. "(no calculation with discount)"
  16. )
  17. def get_pricelist_version_domain(self):
  18. return [('pricelist_id.price_grid', '=', True)]
  19. def get_default_pricelist_item_vals(self, version):
  20. return {
  21. 'price_version_id': version.id,
  22. 'price_discount': -1,
  23. 'base': 1,
  24. }
  25. def default_pricelist_item_ids(self):
  26. versions = self.env['product.pricelist.version'].search(
  27. self.get_pricelist_version_domain())
  28. res = []
  29. for version in versions:
  30. res.append(self.get_default_pricelist_item_vals(version))
  31. return res
  32. @api.model
  33. def create(self, vals):
  34. if 'pricelist_item_ids' in vals:
  35. self.create_or_write_pricelist(vals['pricelist_item_ids'])
  36. return super(ProductTemplate, self).create(vals)
  37. @api.multi
  38. def write(self, vals):
  39. if 'pricelist_item_ids' in vals:
  40. self.create_or_write_pricelist(vals['pricelist_item_ids'])
  41. return super(ProductTemplate, self).write(vals)
  42. @api.model
  43. def create_or_write_pricelist(self, pricelist_item_vals):
  44. for version in pricelist_item_vals:
  45. if version[2]:
  46. self.update_pricelist_values(version[2])
  47. return True
  48. @api.model
  49. def update_pricelist_values(self, vals):
  50. vals.update({
  51. 'price_discount': -1,
  52. 'sequence': 1,
  53. 'base': 1,
  54. })
  55. return True