product_product.py 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. # -*- coding: utf-8 -*-
  2. from openerp.http import request as r
  3. def get_product_product():
  4. user_store = r.env.user.store_id.id
  5. company_currency_rate = r.env.user.company_id.currency_id.rate
  6. validate_brand = '''
  7. SELECT EXISTS(
  8. SELECT table_name
  9. FROM information_schema.columns
  10. WHERE table_schema='public'
  11. AND table_name='product_brand')
  12. '''
  13. query_with_brand = '''
  14. SELECT
  15. product.id,
  16. template.categ_id,
  17. CASE
  18. WHEN product.default_code IS NOT NULL
  19. THEN ('[' || product.default_code || '] ' || product.name_template)
  20. ELSE product.name_template
  21. END AS display_name,
  22. (array_agg(attr_rel.att_id)) AS attr_rel,
  23. (array_agg(attr_value.name)) AS attr_value,
  24. (array_agg(attr.id)) AS attr,
  25. template.product_brand_id,
  26. brand.name
  27. FROM product_product AS product
  28. LEFT JOIN product_template AS template
  29. ON template.id = product.product_tmpl_id
  30. LEFT JOIN product_attribute_value_product_product_rel AS attr_rel
  31. ON attr_rel.prod_id = product.id
  32. LEFT JOIN product_attribute_value AS attr_value
  33. ON attr_value.id = attr_rel.att_id
  34. LEFT JOIN product_attribute AS attr
  35. ON attr.id = attr_value.attribute_id
  36. LEFT JOIN product_brand AS brand
  37. ON brand.id = template.product_brand_id
  38. GROUP BY
  39. product.id,
  40. template.categ_id,
  41. product.default_code,
  42. template.product_brand_id,
  43. brand.name
  44. '''
  45. query_without_brand = '''
  46. SELECT
  47. product.id,
  48. template.categ_id,
  49. CASE
  50. WHEN product.default_code IS NOT NULL
  51. THEN ('[' || product.default_code || '] ' || product.name_template)
  52. ELSE product.name_template
  53. END AS display_name,
  54. (array_agg(attr_rel.att_id)) AS attr_rel,
  55. (array_agg(attr_value.name)) AS attr_value,
  56. (array_agg(attr.id)) AS attr
  57. FROM product_product AS product
  58. LEFT JOIN product_template AS template
  59. ON template.id = product.product_tmpl_id
  60. LEFT JOIN product_attribute_value_product_product_rel AS attr_rel
  61. ON attr_rel.prod_id = product.id
  62. LEFT JOIN product_attribute_value AS attr_value
  63. ON attr_value.id = attr_rel.att_id
  64. LEFT JOIN product_attribute AS attr
  65. ON attr.id = attr_value.attribute_id
  66. GROUP BY
  67. product.id,
  68. template.categ_id,
  69. product.default_code
  70. '''
  71. r.cr.execute(validate_brand)
  72. for j in r.cr.fetchall():
  73. brand = j[0]
  74. if brand == True:
  75. r.cr.execute(query_with_brand,([company_currency_rate]))
  76. return [
  77. {
  78. 'product_id': j[0],
  79. 'categ_id': j[1],
  80. 'product_name': j[2],
  81. 'attribute_value_ids':j[3],
  82. 'attribute_values':j[4],
  83. 'attribute':j[5],
  84. 'product_brand_id':j[6],
  85. 'brand_name': j[7]
  86. } for j in r.cr.fetchall()
  87. ]
  88. else:
  89. r.cr.execute(query_without_brand,([company_currency_rate]))
  90. return [
  91. {
  92. 'product_id': j[0],
  93. 'categ_id': j[1],
  94. 'product_name': j[2],
  95. 'attribute_value_ids':j[3],
  96. 'attribute_values':j[4],
  97. 'attribute':j[5],
  98. } for j in r.cr.fetchall()
  99. ]