product_template.py 3.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. from openerp import api, fields, models
  2. class ProductTemplate(models.Model):
  3. _inherit = 'product.template'
  4. @api.model
  5. def get_products(self):
  6. domain = [('sale_ok', '=', True), ('active', '=', True)]
  7. products = []
  8. # map products
  9. for product in self.env['product.template'].search(domain):
  10. variants = []
  11. # map variants
  12. for variant in product.product_variant_ids:
  13. if not variant.active:
  14. continue
  15. # prices = []
  16. attributes = []
  17. # for price in variant.product_tmpl_id.pricelist_item_ids.filtered(lambda x: x.product_id.id == variant.id):
  18. # prices.append({
  19. # 'id': price.id,
  20. # 'price': price.price_surcharge
  21. # })
  22. # map product attribute
  23. for attribute_value in variant.attribute_value_ids:
  24. attributes.append({
  25. 'id': attribute_value.id,
  26. 'price': attribute_value.name,
  27. 'display_name': attribute_value.display_name
  28. })
  29. variants.append({
  30. 'id': variant.id,
  31. 'display_name': variant.display_name,
  32. 'ean13': variant.ean13,
  33. 'image_medium': variant.image_medium,
  34. 'list_price': variant.list_price,
  35. 'minimum_price': variant.minimum_price,
  36. 'maximum_price': variant.maximum_price,
  37. 'name': variant.name,
  38. 'qty_available': variant.qty_available,
  39. 'attributes': attributes
  40. })
  41. products.append({
  42. 'id': product.id,
  43. 'display_name': product.display_name,
  44. 'ean13': product.ean13,
  45. 'image_medium': product.image_medium,
  46. 'list_price': product.list_price,
  47. 'name': product.name,
  48. 'qty_available': product.qty_available,
  49. 'category': {
  50. 'id': product.categ_id.id,
  51. 'display_name': product.categ_id.display_name,
  52. 'name': product.categ_id.name,
  53. 'account_journal': {
  54. 'id': product.categ_id.property_stock_journal.id,
  55. 'code': product.categ_id.property_stock_journal.code,
  56. 'company': {
  57. 'id': product.categ_id.property_stock_journal.company_id.id,
  58. 'name': product.categ_id.property_stock_journal.company_id.name,
  59. 'currency': {
  60. 'id': product.categ_id.property_stock_journal.company_id.currency_id.id,
  61. 'name': product.categ_id.property_stock_journal.company_id.currency_id.name
  62. }
  63. },
  64. 'currency': {
  65. 'id': product.categ_id.property_stock_journal.currency.id,
  66. 'name': product.categ_id.property_stock_journal.currency.name
  67. },
  68. 'display_name': product.categ_id.property_stock_journal.display_name,
  69. 'name': product.categ_id.property_stock_journal.name,
  70. }
  71. },
  72. 'uom': {
  73. 'id': product.uom_id.id,
  74. 'name': product.uom_id.name
  75. },
  76. 'uos': {
  77. 'id': product.uos_id.id,
  78. 'name': product.uos_id.name
  79. },
  80. 'variant_count': product.product_variant_count,
  81. 'variants': variants
  82. })
  83. return products