214 lines
8.9 KiB
Python
214 lines
8.9 KiB
Python
# -*- coding: utf-8 -*-
|
|
##############################################################################
|
|
#
|
|
# OpenERP, Open Source Management Solution
|
|
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
|
|
#
|
|
# This program is free software: you can redistribute it and/or modify
|
|
# it under the terms of the GNU Affero General Public License as
|
|
# published by the Free Software Foundation, either version 3 of the
|
|
# License, or (at your option) any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU Affero General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU Affero General Public License
|
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
#
|
|
##############################################################################
|
|
from osv import fields, osv
|
|
import tools
|
|
|
|
def _type_get(self, cr, uid, context=None):
|
|
obj = self.pool.get('auction.lot.category')
|
|
ids = obj.search(cr, uid, [])
|
|
res = obj.read(cr, uid, ids, ['name'], context)
|
|
res = [(r['name'], r['name']) for r in res]
|
|
return res
|
|
|
|
class report_auction(osv.osv):
|
|
|
|
"""Auction Report"""
|
|
_name = "report.auction"
|
|
_description = "Auction's Summary"
|
|
_auto = False
|
|
_columns = {
|
|
'year': fields.char('Year', size=4, readonly=True),
|
|
'month':fields.selection([('01','January'), ('02','February'), ('03','March'), ('04','April'),
|
|
('05','May'), ('06','June'), ('07','July'), ('08','August'), ('09','September'),
|
|
('10','October'), ('11','November'), ('12','December')], 'Month',readonly=True),
|
|
'day': fields.char('Day', size=128, readonly=True),
|
|
'buyer_login': fields.char('Buyer Login', size=64, readonly=True, select=1),
|
|
'buyer':fields.many2one('res.partner', 'Buyer', readonly=True, select=2),
|
|
'seller': fields.many2one('res.partner', 'Seller', readonly=True, select=1),
|
|
'object':fields.integer('No of objects', readonly=True, select=1),
|
|
'total_price':fields.float('Total Price', digits=(16, 2), readonly=True, select=2),
|
|
'lot_type': fields.selection(_type_get, 'Object category', size=64),
|
|
'avg_price':fields.float('Avg Price.', digits=(16, 2), readonly=True, select=2),
|
|
'date': fields.date('Create Date', select=1),
|
|
'auction': fields.many2one('auction.dates', 'Auction date', readonly=True, select=1),
|
|
'gross_revenue':fields.float('Gross Revenue', readonly=True),
|
|
'net_revenue':fields.float('Net Revenue', readonly=True),
|
|
'net_margin':fields.float('Net Margin', readonly=True),
|
|
'avg_estimation':fields.float('Avg estimation', readonly=True),
|
|
'user_id':fields.many2one('res.users', 'User', select=1),
|
|
'state': fields.selection((('draft', 'Draft'), ('unsold', 'Unsold'), ('sold', 'Sold')), 'State', readonly=True, select=1),
|
|
|
|
}
|
|
|
|
def init(self, cr):
|
|
tools.drop_view_if_exists(cr, 'report_auction')
|
|
cr.execute('''
|
|
create or replace view report_auction as (
|
|
select
|
|
min(al.id) as id,
|
|
al.ach_login as "buyer_login",
|
|
ad.auction1 as date,
|
|
al.state,
|
|
al.create_uid as user_id,
|
|
to_char(ad.auction1, 'YYYY') as year,
|
|
to_char(ad.auction1, 'MM') as month,
|
|
to_char(ad.auction1, 'YYYY-MM-DD') as day,
|
|
al.ach_uid as "buyer",
|
|
al.lot_type as lot_type,
|
|
ade.partner_id as seller,
|
|
ad.id as auction,
|
|
count(al.id) as "object",
|
|
sum(al.obj_price) as "total_price",
|
|
(sum(al.obj_price)/count(al.id)) as "avg_price",
|
|
sum(al.gross_revenue) as gross_revenue,
|
|
sum(al.net_revenue) as net_revenue,
|
|
avg(al.net_margin) as net_margin,
|
|
sum(al.lot_est1+al.lot_est2)/2 as avg_estimation
|
|
from
|
|
auction_lots al,
|
|
auction_dates ad,
|
|
auction_deposit ade
|
|
where
|
|
ad.id=al.auction_id and ade.id=al.bord_vnd_id
|
|
group by
|
|
ad.auction1,
|
|
al.ach_uid,
|
|
ad.id,
|
|
al.ach_login,
|
|
ade.partner_id,
|
|
al.state,
|
|
al.create_uid,
|
|
al.lot_type
|
|
)
|
|
''')
|
|
report_auction()
|
|
|
|
|
|
#==========================
|
|
#Dashboard Report
|
|
#==========================
|
|
|
|
class report_auction_object_date(osv.osv):
|
|
_name = "report.auction.object.date"
|
|
_description = "Objects per day"
|
|
_auto = False
|
|
_columns = {
|
|
'obj_num': fields.integer('# of Objects'),
|
|
'name': fields.date('Created date', select=2),
|
|
'month': fields.date('Month', select=1),
|
|
'user_id':fields.many2one('res.users', 'User',select=1),
|
|
}
|
|
|
|
def init(self, cr):
|
|
tools.drop_view_if_exists(cr, 'report_auction_object_date')
|
|
cr.execute("""create or replace view report_auction_object_date as
|
|
(select
|
|
min(l.id) as id,
|
|
to_char(l.create_date, 'YYYY-MM-DD') as name,
|
|
to_char(l.create_date, 'YYYY-MM-01') as month,
|
|
count(l.obj_num) as obj_num,
|
|
l.create_uid as user_id
|
|
from
|
|
auction_lots l
|
|
group by
|
|
to_char(l.create_date, 'YYYY-MM-DD'),
|
|
to_char(l.create_date, 'YYYY-MM-01'),
|
|
l.create_uid
|
|
)
|
|
""")
|
|
report_auction_object_date()
|
|
|
|
class report_auction_adjudication(osv.osv):
|
|
_name = "report.auction.adjudication"
|
|
_description = "report_auction_adjudication"
|
|
_auto = False
|
|
_columns = {
|
|
'name': fields.many2one('auction.dates','Auction date',readonly=True,select=1),
|
|
'state': fields.selection((('draft','Draft'),('close','Closed')),'Status', select=1),
|
|
'adj_total': fields.float('Total Adjudication'),
|
|
'date': fields.date('Date', readonly=True,select=1),
|
|
'user_id':fields.many2one('res.users', 'User',select=1)
|
|
|
|
}
|
|
|
|
def init(self, cr):
|
|
tools.drop_view_if_exists(cr, 'report_auction_adjudication')
|
|
cr.execute("""
|
|
create or replace view report_auction_adjudication as (
|
|
select
|
|
l.id as id,
|
|
l.id as name,
|
|
sum(m.obj_price) as adj_total,
|
|
to_char(l.create_date, 'YYYY-MM-01') as date,
|
|
l.create_uid as user_id,
|
|
l.state
|
|
from
|
|
auction_dates l ,auction_lots m
|
|
where
|
|
m.auction_id=l.id
|
|
group by
|
|
l.id,l.state,l.name,l.create_uid,to_char(l.create_date, 'YYYY-MM-01')
|
|
|
|
)
|
|
""")
|
|
report_auction_adjudication()
|
|
|
|
class report_object_encoded(osv.osv):
|
|
_name = "report.object.encoded"
|
|
_description = "Object encoded"
|
|
_auto = False
|
|
_columns = {
|
|
'user_id':fields.many2one('res.users', 'User', select=True),
|
|
'estimation': fields.float('Estimation',select=True),
|
|
'date': fields.date('Create Date', required=True),
|
|
'gross_revenue':fields.float('Gross revenue',readonly=True, select=True),
|
|
'net_revenue':fields.float('Net revenue',readonly=True, select=True),
|
|
'obj_margin':fields.float('Net margin', readonly=True, select=True),
|
|
'obj_ret':fields.integer('# obj ret', readonly=True, select=True),
|
|
'adj':fields.integer('Adj.', readonly=True, select=True),
|
|
'obj_num':fields.integer('# of Encoded obj.', readonly=True, select=True),
|
|
'state': fields.selection((('draft','Draft'),('unsold','Unsold'),('paid','Paid'),('invoiced','Invoiced')),'Status', required=True,select=1),
|
|
}
|
|
def init(self, cr):
|
|
tools.drop_view_if_exists(cr, 'report_object_encoded')
|
|
cr.execute('''create or replace view report_object_encoded as
|
|
(select
|
|
min(al.id) as id,
|
|
to_char(al.create_date, 'YYYY-MM-DD') as date,
|
|
al.state as state,
|
|
al.create_uid as user_id,
|
|
sum((100*lot_est1)/obj_price) as estimation,
|
|
(SELECT count(1) FROM auction_lots WHERE obj_ret>0) as obj_ret,
|
|
SUM(al.gross_revenue) as "gross_revenue",
|
|
SUM(al.net_revenue) as "net_revenue",
|
|
SUM(al.net_revenue)/count(al.id) as "obj_margin",
|
|
COUNT(al.product_id) as obj_num,
|
|
SUM(al.obj_price) as "adj"
|
|
from auction_lots al
|
|
where al.obj_price>0
|
|
group by to_char(al.create_date, 'YYYY-MM-DD'), al.state, al.create_uid)
|
|
''')
|
|
|
|
report_object_encoded()
|
|
|
|
|
|
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|