summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjem-odoo <jem@openerp.com>2018-05-07 14:46:19 +0200
committerjem-odoo <jem@openerp.com>2018-05-23 10:12:45 +0200
commit9548d218f19cb344ee961bceb06badf99c9bfd2f (patch)
treebc86998ac89b7dd967f135ff5b19e39e451f9f69
parentdb649229a1273f2e29fa21829a981e1f49ebaa21 (diff)
[IMP] purchase: make purchase report extendable
The idea is to do like the sale report: being able for other modules to extend the report and add their own fields. As we are going to split stock from purchase, we will need this.
-rw-r--r--addons/purchase/report/purchase_report.py117
1 files changed, 67 insertions, 50 deletions
diff --git a/addons/purchase/report/purchase_report.py b/addons/purchase/report/purchase_report.py
index 4f72b3ceaf5..8ab87b64da1 100644
--- a/addons/purchase/report/purchase_report.py
+++ b/addons/purchase/report/purchase_report.py
@@ -22,7 +22,7 @@ class PurchaseReport(models.Model):
('purchase', 'Purchase Order'),
('done', 'Done'),
('cancel', 'Cancelled')
- ], 'Order Status', readonly=True)
+ ], 'Order Status', readonly=True)
product_id = fields.Many2one('product.product', 'Product', readonly=True)
picking_type_id = fields.Many2one('stock.warehouse', 'Warehouse', readonly=True)
partner_id = fields.Many2one('res.partner', 'Vendor', readonly=True)
@@ -50,17 +50,23 @@ class PurchaseReport(models.Model):
@api.model_cr
def init(self):
- tools.drop_view_if_exists(self._cr, 'purchase_report')
- self._cr.execute("""
- create view purchase_report as (
- WITH currency_rate as (%s)
- select
+ # self._table = sale_report
+ tools.drop_view_if_exists(self.env.cr, self._table)
+ self.env.cr.execute("""CREATE or REPLACE VIEW %s as (
+ %s
+ FROM ( %s )
+ %s
+ )""" % (self._table, self._select(), self._from(), self._group_by()))
+
+ def _select(self):
+ select_str = """
+ WITH currency_rate as (%s)
+ SELECT
min(l.id) as id,
s.date_order as date_order,
s.state,
s.date_approve,
s.dest_address_id,
- spt.warehouse_id as picking_type_id,
s.partner_id as partner_id,
s.user_id as user_id,
s.company_id as company_id,
@@ -82,46 +88,57 @@ class PurchaseReport(models.Model):
partner.commercial_partner_id as commercial_partner_id,
analytic_account.id as account_analytic_id,
sum(p.weight * l.product_qty/u.factor*u2.factor) as weight,
- sum(p.volume * l.product_qty/u.factor*u2.factor) as volume
- from purchase_order_line l
- join purchase_order s on (l.order_id=s.id)
- join res_partner partner on s.partner_id = partner.id
- left join product_product p on (l.product_id=p.id)
- left join product_template t on (p.product_tmpl_id=t.id)
- LEFT JOIN ir_property ip ON (ip.name='standard_price' AND ip.res_id=CONCAT('product.template,',t.id) AND ip.company_id=s.company_id)
- left join uom_uom u on (u.id=l.product_uom)
- left join uom_uom u2 on (u2.id=t.uom_id)
- left join stock_picking_type spt on (spt.id=s.picking_type_id)
- left join account_analytic_account analytic_account on (l.account_analytic_id = analytic_account.id)
- left join currency_rate cr on (cr.currency_id = s.currency_id and
- cr.company_id = s.company_id and
- cr.date_start <= coalesce(s.date_order, now()) and
- (cr.date_end is null or cr.date_end > coalesce(s.date_order, now())))
- group by
- s.company_id,
- s.user_id,
- s.partner_id,
- u.factor,
- s.currency_id,
- l.price_unit,
- s.date_approve,
- l.date_planned,
- l.product_uom,
- s.dest_address_id,
- s.fiscal_position_id,
- l.product_id,
- p.product_tmpl_id,
- t.categ_id,
- s.date_order,
- s.state,
- spt.warehouse_id,
- u.uom_type,
- u.category_id,
- t.uom_id,
- u.id,
- u2.factor,
- partner.country_id,
- partner.commercial_partner_id,
- analytic_account.id
- )
- """ % self.env['res.currency']._select_companies_rates())
+ sum(p.volume * l.product_qty/u.factor*u2.factor) as volume,
+ spt.warehouse_id as picking_type_id
+ """ % self.env['res.currency']._select_companies_rates()
+ return select_str
+
+ def _from(self):
+ from_str = """
+ purchase_order_line l
+ join purchase_order s on (l.order_id=s.id)
+ join res_partner partner on s.partner_id = partner.id
+ left join product_product p on (l.product_id=p.id)
+ left join product_template t on (p.product_tmpl_id=t.id)
+ LEFT JOIN ir_property ip ON (ip.name='standard_price' AND ip.res_id=CONCAT('product.template,',t.id) AND ip.company_id=s.company_id)
+ left join uom_uom u on (u.id=l.product_uom)
+ left join uom_uom u2 on (u2.id=t.uom_id)
+ left join account_analytic_account analytic_account on (l.account_analytic_id = analytic_account.id)
+ left join currency_rate cr on (cr.currency_id = s.currency_id and
+ cr.company_id = s.company_id and
+ cr.date_start <= coalesce(s.date_order, now()) and
+ (cr.date_end is null or cr.date_end > coalesce(s.date_order, now())))
+ left join stock_picking_type spt on (spt.id=s.picking_type_id)
+ """
+ return from_str
+
+ def _group_by(self):
+ group_by_str = """
+ GROUP BY
+ s.company_id,
+ s.user_id,
+ s.partner_id,
+ u.factor,
+ s.currency_id,
+ l.price_unit,
+ s.date_approve,
+ l.date_planned,
+ l.product_uom,
+ s.dest_address_id,
+ s.fiscal_position_id,
+ l.product_id,
+ p.product_tmpl_id,
+ t.categ_id,
+ s.date_order,
+ s.state,
+ u.uom_type,
+ u.category_id,
+ t.uom_id,
+ u.id,
+ u2.factor,
+ partner.country_id,
+ partner.commercial_partner_id,
+ analytic_account.id,
+ spt.warehouse_id
+ """
+ return group_by_str