50 lines
2.4 KiB
Python
50 lines
2.4 KiB
Python
|
# -*- coding: utf-8 -*-
|
||
|
# Part of flectra. See LICENSE file for full copyright and licensing details.
|
||
|
|
||
|
from flectra import api, fields, models
|
||
|
|
||
|
|
||
|
class SaleReport(models.Model):
|
||
|
_inherit = "sale.report"
|
||
|
website_id = fields.Many2one('website', 'Website', readonly=True)
|
||
|
|
||
|
def _select(self):
|
||
|
select_str = """
|
||
|
WITH currency_rate as (%s)
|
||
|
SELECT min(l.id) as id,
|
||
|
l.product_id as product_id,
|
||
|
t.uom_id as product_uom,
|
||
|
sum(l.product_uom_qty / u.factor * u2.factor) as product_uom_qty,
|
||
|
sum(l.qty_delivered / u.factor * u2.factor) as qty_delivered,
|
||
|
sum(l.qty_invoiced / u.factor * u2.factor) as qty_invoiced,
|
||
|
sum(l.qty_to_invoice / u.factor * u2.factor) as qty_to_invoice,
|
||
|
sum(l.price_total / COALESCE(cr.rate, 1.0)) as price_total,
|
||
|
sum(l.price_subtotal / COALESCE(cr.rate, 1.0)) as price_subtotal,
|
||
|
sum(l.amt_to_invoice / COALESCE(cr.rate, 1.0)) as amt_to_invoice,
|
||
|
sum(l.amt_invoiced / COALESCE(cr.rate, 1.0)) as amt_invoiced,
|
||
|
count(*) as nbr,
|
||
|
s.name as name,
|
||
|
s.date_order as date,
|
||
|
s.confirmation_date as confirmation_date,
|
||
|
s.state as state,
|
||
|
s.partner_id as partner_id,
|
||
|
s.user_id as user_id,
|
||
|
s.company_id as company_id,
|
||
|
extract(epoch from avg(date_trunc('day',s.date_order)-date_trunc('day',s.create_date)))/(24*60*60)::decimal(16,2) as delay,
|
||
|
t.categ_id as categ_id,
|
||
|
s.pricelist_id as pricelist_id,
|
||
|
s.analytic_account_id as analytic_account_id,
|
||
|
s.team_id as team_id,
|
||
|
s.website_id as website_id,
|
||
|
p.product_tmpl_id,
|
||
|
partner.country_id as country_id,
|
||
|
partner.commercial_partner_id as commercial_partner_id,
|
||
|
sum(p.weight * l.product_uom_qty / u.factor * u2.factor) as weight,
|
||
|
sum(p.volume * l.product_uom_qty / u.factor * u2.factor) as volume
|
||
|
""" % self.env['res.currency']._select_companies_rates()
|
||
|
return select_str
|
||
|
|
||
|
def _group_by(self):
|
||
|
res = super(SaleReport, self)._group_by()
|
||
|
return res + ',s.website_id'
|