report_invoice_utility.py 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. # -*- coding: utf-8 -*-
  2. from openerp import tools, models, fields, api
  3. from openerp.osv import fields, osv
  4. class report_invoice_utility(models.Model):
  5. _name = "report.invoice.utility"
  6. _description = "report.invoice.utility"
  7. _auto = False
  8. # _columns = {
  9. # 'id': fields.integer('id',required=True),
  10. # 'product_id': fields.many2one('product.product', 'Product', required=True, select=True, readonly=True),
  11. # 'quantity': fields.float('Cantidad', readonly=True),
  12. # 'brand_id': fields.many2one('product.brand', 'Marca', readonly=True),
  13. # 'genre_id': fields.many2one('product.genre', 'Genero', readonly=True),
  14. # 'categ_id': fields.many2one('product.category', 'Categoria', readonly=True),
  15. # 'factory_reference': fields.char('Referencia', readonly=True),
  16. # 'location_id': fields.many2one('stock.location', 'Ubicacion', readonly=True),
  17. # 'id_parent' : fields.many2one('product.category', 'Categoria Padre', readonly=True),
  18. # }
  19. _columns ={
  20. 'id': fields.integer('id',required=True),
  21. 'id_invoice' : fields.many2one('account.invoice', 'invoice',readonly=True),
  22. 'type' : fields.char('type'),
  23. 'number' : fields.char('number'),
  24. 'origin' : fields.char('origin'),
  25. 'state' : fields.char('state'),
  26. 'journal_id' : fields.many2one('account.journal', 'journal', readonly=True),
  27. 'currency_id' : fields.many2one('res.currency', 'currency', readonly=True),
  28. 'rate' : fields.float('rate', readonly=True),
  29. 'id_line' : fields.many2one('account.invoice.line', 'Line invoice', readonly=True),
  30. 'quantity' : fields.float('quantity', readonly=True),
  31. 'price_unit_original' : fields.float('price_unit_original', readonly=True),
  32. 'price_unit' : fields.float('price_unit', readonly=True),
  33. 'discount' : fields.float('discount', readonly=True),
  34. 'name' : fields.char('name', readonly=True),
  35. 'id_product' : fields.many2one('product.product', 'Product', readonly=True),
  36. 'default_code' : fields.char('default_code', readonly=True),
  37. 'name_template' : fields.char('name_template', readonly=True),
  38. 'factory_code' : fields.char('factory_code', readonly=True),
  39. 'factory_reference' : fields.char('factory_reference', readonly=True),
  40. 'factory_barcode' : fields.char('factory_barcode', readonly=True),
  41. 'standard_price' : fields.float('standard_price', readonly=True),
  42. 'price_subtotal' : fields.float('price_subtotal', readonly=True),
  43. 'cost_subtotal' : fields.float('cost_subtotal', readonly=True),
  44. 'utilidad' : fields.float('utilidad', readonly=True),
  45. }
  46. _order = 'id asc'
  47. def init(self, cr):
  48. tools.sql.drop_view_if_exists(cr, 'report_invoice_utility')
  49. cr.execute("""
  50. CREATE OR REPLACE VIEW report_invoice_utility as (
  51. SELECT row_number() over (ORDER BY il.id)as id,
  52. i.id as id_invoice,
  53. i.type as type,
  54. i.number as number,
  55. i.origin as origin,
  56. i.state as state,
  57. i.journal_id as journal_id,
  58. i.currency_id as currency_id,
  59. rcr.rate as rate,
  60. il.id as id_line,
  61. il.quantity as quantity,
  62. il.price_unit as price_unit_original,
  63. trunc(il.price_unit / rcr.rate,2) as price_unit,
  64. il.discount as discount,
  65. il.name as name,
  66. pp.id as id_product,
  67. pp.default_code as default_code,
  68. pp.name_template as name_template,
  69. pp.factory_code as factory_code,
  70. pp.factory_reference as factory_reference,
  71. pp.factory_barcode as factory_barcode,
  72. (pph.cost)::numeric as standard_price,
  73. trunc(il.quantity * (trunc(il.price_unit / rcr.rate,2)),2) as price_subtotal,
  74. trunc((il.quantity) * (pph.cost)::numeric ,2) as cost_subtotal,
  75. (trunc(il.quantity * (trunc(il.price_unit / rcr.rate,2)),2)-trunc((il.quantity) * (pph.cost)::numeric ,2))as utilidad
  76. FROM account_invoice i
  77. left join res_currency_rate rcr on(rcr.currency_id= i.currency_id)
  78. left join account_invoice_line il on (il.invoice_id =i.id)
  79. left join product_product pp on (pp.id =il.product_id)
  80. left join (SELECT cost, product_template_id FROM product_price_history ppa
  81. where create_date=(select max(create_date) FROM product_price_history pps where ppa.product_template_id = pps.product_template_id))
  82. pph on(pph.product_template_id = pp.product_tmpl_id)
  83. where trim(upper(i.type))=trim(upper('out_invoice')) AND (i.state='open' OR i.state='paid'))
  84. """)
  85. # Select i.id as id_invoice, i.type as type, i.number as number, i.origin as origin, i.state as state,
  86. # il.id as id_line, il.quantity as quantity, il.price_unit as price_unit, il.discount as discount, il.name as name,
  87. # pp.id as id_product, pp.default_code as default_code, pp.name_template as name_template, pp.factory_code as factory_code,
  88. # pp.factory_reference as factory_reference, pp.factory_barcode as factory_barcode, pp.product_tmpl_id,
  89. # pph.cost as standard_price, pph.product_template_id as product_template_id
  90. # FROM account_invoice i
  91. # left join account_invoice_line il on (il.invoice_id =i.id)
  92. # left join product_product pp on (pp.id =il.product_id)
  93. # left join (SELECT cost, product_template_id FROM product_price_history ppa
  94. # where create_date=(select max(create_date) FROM product_price_history pps where ppa.product_template_id = pps.product_template_id))
  95. # pph on(pph.product_template_id = pp.product_tmpl_id)
  96. # where i.type='out_invoice' and i.state='open' or i.state='paid'
  97. # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
  98. #
  99. # def init(self, cr):
  100. # tools.sql.drop_view_if_exists(cr, 'report_invoice_utility')
  101. # cr.execute("""
  102. # CREATE OR REPLACE VIEW report_invoice_utility as (
  103. # SELECT row_number() over (ORDER BY product_id)as id,
  104. # s.product_id as product_id,
  105. # SUM(s.qty) as quantity,
  106. # pt.product_brand_id as brand_id,
  107. # pt.product_genre_id as genre_id,
  108. # pt.categ_id as categ_id,
  109. # pt.factory_reference as factory_reference,
  110. # s.location_id as location_id,
  111. # pcc.id_parent as id_parent
  112. # FROM stock_quant s
  113. # left join stock_location r on (r.id=s.location_id)
  114. # left join product_product p on (p.id=s.product_id)
  115. # left join product_template pt on (pt.id=p.product_tmpl_id)
  116. # left join product_brand z on (pt.product_brand_id=z.id)
  117. # left join product_genre t on (pt.product_genre_id=t.id)
  118. # left join product_category g on (g.id=pt.categ_id)
  119. # left join (SELECT pp.id, pp.parent_id,
  120. # case when (select ppp.parent_id from product_category ppp where ppp.id= pp.parent_id and ppp.parent_id !=1) is NULL
  121. # then pp.parent_id ELSE
  122. # (select ppp.parent_id from product_category ppp where ppp.id= pp.parent_id and ppp.parent_id !=1) END as id_parent
  123. # from product_category pp) as pcc on pcc.id = pt.categ_id
  124. # WHERE r.usage='internal' and s.qty>0 and pt.active=True
  125. # GROUP BY s.location_id, s.product_id, pt.product_brand_id, pt.product_genre_id, pt.factory_reference, pt.categ_id, pcc.id_parent)
  126. # """)