1 # -*- encoding: utf-8 -*-
2 ##############################################################################
4 # OpenERP, Open Source Management Solution
5 # Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>). All Rights Reserved
8 # This program is free software: you can redistribute it and/or modify
9 # it under the terms of the GNU General Public License as published by
10 # the Free Software Foundation, either version 3 of the License, or
11 # (at your option) any later version.
13 # This program is distributed in the hope that it will be useful,
14 # but WITHOUT ANY WARRANTY; without even the implied warranty of
15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 # GNU General Public License for more details.
18 # You should have received a copy of the GNU General Public License
19 # along with this program. If not, see <http://www.gnu.org/licenses/>.
21 ##############################################################################
23 from osv import fields,osv
25 class report_sale_order_product(osv.osv):
26 _name = "report.sale.order.product"
27 _description = "Sales Orders by Products"
30 'name': fields.date('Month', readonly=True),
31 'state': fields.selection([
32 ('draft','Quotation'),
33 ('waiting_date','Waiting Schedule'),
34 ('manual','Manual in progress'),
35 ('progress','In progress'),
36 ('shipping_except','Shipping Exception'),
37 ('invoice_except','Invoice Exception'),
40 ], 'Order State', readonly=True),
41 'product_id':fields.many2one('product.product', 'Product', readonly=True),
42 'quantity': fields.float('# of Products', readonly=True),
43 'price_total': fields.float('Total Price', readonly=True),
44 'price_average': fields.float('Average Price', readonly=True),
45 'count': fields.integer('# of Lines', readonly=True),
47 _order = 'name desc,price_total desc'
50 create or replace view report_sale_order_product as (
53 to_char(s.date_order, 'YYYY-MM-01') as name,
56 sum(l.product_uom_qty*u.factor) as quantity,
58 sum(l.product_uom_qty*l.price_unit) as price_total,
59 (sum(l.product_uom_qty*l.price_unit)/sum(l.product_uom_qty*u.factor))::decimal(16,2) as price_average
61 right join sale_order_line l on (s.id=l.order_id)
62 left join product_uom u on (u.id=l.product_uom)
63 where l.product_uom_qty != 0
64 group by l.product_id, to_char(s.date_order, 'YYYY-MM-01'),s.state
67 report_sale_order_product()
69 class report_sale_order_category(osv.osv):
70 _name = "report.sale.order.category"
71 _description = "Sales Orders by Categories"
74 'name': fields.date('Month', readonly=True),
75 'state': fields.selection([
76 ('draft','Quotation'),
77 ('waiting_date','Waiting Schedule'),
78 ('manual','Manual in progress'),
79 ('progress','In progress'),
80 ('shipping_except','Shipping Exception'),
81 ('invoice_except','Invoice Exception'),
84 ], 'Order State', readonly=True),
85 'category_id': fields.many2one('product.category', 'Categories', readonly=True),
86 'quantity': fields.float('# of Products', readonly=True),
87 'price_total': fields.float('Total Price', readonly=True),
88 'price_average': fields.float('Average Price', readonly=True),
89 'count': fields.integer('# of Lines', readonly=True),
91 _order = 'name desc,price_total desc'
94 create or replace view report_sale_order_category as (
97 to_char(s.date_order, 'YYYY-MM-01') as name,
99 t.categ_id as category_id,
100 sum(l.product_uom_qty*u.factor) as quantity,
102 sum(l.product_uom_qty*l.price_unit) as price_total,
103 (sum(l.product_uom_qty*l.price_unit)/sum(l.product_uom_qty*u.factor))::decimal(16,2) as price_average
105 right join sale_order_line l on (s.id=l.order_id)
106 left join product_product p on (p.id=l.product_id)
107 left join product_template t on (t.id=p.product_tmpl_id)
108 left join product_uom u on (u.id=l.product_uom)
109 where l.product_uom_qty != 0
110 group by t.categ_id, to_char(s.date_order, 'YYYY-MM-01'),s.state
113 report_sale_order_category()
115 class report_turnover_per_month(osv.osv):
116 _name = "report.turnover.per.month"
117 _description = "Turnover Per Month"
120 'name': fields.date('Month', readonly=True),
121 'turnover': fields.float('Total Turnover', readonly=True),
126 create or replace view report_turnover_per_month as (
127 select min(am.id) as id, sum(credit) as turnover,to_char(am.date, 'YYYY-MM-01') as name from account_move_line am
128 where am.account_id in (select distinct(account_id) from account_invoice_line)
130 am.move_id in(select distinct(aw.move_id) from account_invoice aw,account_invoice_line l where l.invoice_id=aw.id)
131 group by to_char(am.date, 'YYYY-MM-01')
134 report_turnover_per_month()
136 class report_turnover_per_product(osv.osv):
137 _name = "report.turnover.per.product"
138 _description = "Turnover Per Product"
140 _rec_name = 'product_id'
143 'product_id': fields.many2one('product.product','Product', readonly=True),
144 'turnover': fields.float('Total Turnover', readonly=True),
149 create or replace view report_turnover_per_product as (
150 select min(am.id) as id, sum(credit) as turnover,am.product_id as product_id
151 from account_move_line am
152 group by am.product_id
155 report_turnover_per_product()
157 class report_sale_order_created(osv.osv):
158 _name = "report.sale.order.created"
159 _description = "Report of Created Sale Order"
162 'date_order':fields.date('Date Ordered', readonly=True),
163 'name': fields.char('Order Reference', size=64, readonly=True),
164 'partner_id':fields.many2one('res.partner', 'Customer', readonly=True),
165 'partner_shipping_id':fields.many2one('res.partner.address', 'Shipping Address', readonly=True),
166 'amount_untaxed': fields.float('Untaxed Amount', readonly=True),
167 'state': fields.selection([
168 ('draft','Quotation'),
169 ('waiting_date','Waiting Schedule'),
170 ('manual','Manual In Progress'),
171 ('progress','In Progress'),
172 ('shipping_except','Shipping Exception'),
173 ('invoice_except','Invoice Exception'),
176 ], 'Order State', readonly=True),
177 'create_date' : fields.datetime('Create Date', readolnly=True)
179 _order = 'create_date'
182 cr.execute("""create or replace view report_sale_order_created as (
184 sale.id as id, sale.date_order as date_order, sale.name as name,
185 sale.partner_id as partner_id,
186 sale.partner_shipping_id as partner_shipping_id,
187 sale.amount_untaxed as amount_untaxed, sale.state as state,
188 sale.create_date as create_date
192 (to_date(to_char(sale.create_date, 'YYYY-MM-dd'),'YYYY-MM-dd') <= CURRENT_DATE)
194 (to_date(to_char(sale.create_date, 'YYYY-MM-dd'),'YYYY-MM-dd') > (CURRENT_DATE-15))
196 report_sale_order_created()
198 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: