From 958cf4bbbeccc458c0b56f40b0960cb24e632a8b Mon Sep 17 00:00:00 2001
From: "nel@tinyerp.com" <>
Date: Fri, 4 Jun 2010 19:54:17 +0200
Subject: [PATCH] [IMP] project_issue, purchase, sale reports
bzr revid: nel@tinyerp.com-20100604175417-4u3jzricew1j7i96
---
addons/mrp/report/mrp_production_order.py | 9 +-
.../mrp/report/mrp_production_order_view.xml | 27 +--
addons/project/report/project_report.py | 69 +++---
addons/project/report/project_report_view.xml | 33 ++-
.../report/project_issue_report.py | 43 ++--
.../report/project_issue_report_view.xml | 107 ++++-----
addons/purchase/report/purchase_report.py | 13 +-
.../purchase/report/purchase_report_view.xml | 220 ------------------
addons/sale/report/sale_report.py | 5 +-
addons/sale/report/sale_report_view.xml | 17 +-
10 files changed, 164 insertions(+), 379 deletions(-)
delete mode 100644 addons/purchase/report/purchase_report_view.xml
diff --git a/addons/mrp/report/mrp_production_order.py b/addons/mrp/report/mrp_production_order.py
index d754d6a50ad..4fffbdf1689 100644
--- a/addons/mrp/report/mrp_production_order.py
+++ b/addons/mrp/report/mrp_production_order.py
@@ -32,11 +32,12 @@ class mrp_production_order(osv.osv):
('07','July'), ('08','August'), ('09','September'), ('10','October'), ('11','November'), ('12','December')],'Month',readonly=True),
'day': fields.char('Day',size=64,readonly=True),
'origin': fields.char('Source Document', size=64),
- 'nbr': fields.integer('# of Orders', readonly=True),
+ 'nbr': fields.integer('# of Lines', readonly=True),
'products_to_consume': fields.integer('Products to Consume', readonly=True),
'consumed_products': fields.integer('Consumed Products', readonly=True),
'date': fields.date('Date', readonly=True),
'product_id': fields.many2one('product.product', 'Product', readonly=True),
+ 'product_id2': fields.many2one('product.product', 'Product Consumed', readonly=True),
'product_qty': fields.float('Product Qty', readonly=True),
'state': fields.selection([('draft','Draft'),
('picking_except', 'Picking Exception'),
@@ -74,11 +75,12 @@ class mrp_production_order(osv.osv):
to_char(s.create_date, 'YYYY') as year,
to_char(s.create_date, 'MM') as month,
to_char(s.create_date, 'YYYY-MM-DD') as day,
- l.product_id as product_id,
+ s.product_id as product_id,
+ l.product_id as product_id2,
l.product_uom,
sum(l.product_qty * u.factor) as product_qty,
s.company_id as company_id,
- count(*) as nbr,
+ (select 1) as nbr,
(select sum(sm.product_qty) from stock_move as sm
left join mrp_production_move_ids as mv on (sm.id=mv.move_id)
left join mrp_production_product_line as ll on (ll.production_id=mv.production_id)
@@ -111,6 +113,7 @@ class mrp_production_order(osv.osv):
to_char(s.create_date, 'YYYY-MM-DD'),
to_date(to_char(s.create_date, 'MM-dd-YYYY'),'MM-dd-YYYY'),
l.product_id,
+ s.product_id,
l.product_uom,
s.id,
l.id,
diff --git a/addons/mrp/report/mrp_production_order_view.xml b/addons/mrp/report/mrp_production_order_view.xml
index 55957619e31..c182e524ba8 100644
--- a/addons/mrp/report/mrp_production_order_view.xml
+++ b/addons/mrp/report/mrp_production_order_view.xml
@@ -11,19 +11,20 @@
tree
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/addons/project/report/project_report.py b/addons/project/report/project_report.py
index 1cd452d736e..b115b576859 100644
--- a/addons/project/report/project_report.py
+++ b/addons/project/report/project_report.py
@@ -31,7 +31,6 @@ class report_project_task_user(osv.osv):
'day': fields.char('Day', size=128, readonly=True),
'year': fields.char('Year',size=64,required=False, readonly=True),
'user_id':fields.many2one('res.users', 'Assigned To', readonly=True),
- 'done_by':fields.many2one('res.users', 'Done By', readonly=True),
'date_start': fields.date('Starting Date',readonly=True),
'no_of_days': fields.integer('# of Days', size=128, readonly=True),
'description': fields.text('Description',readonly=True),
@@ -48,7 +47,7 @@ class report_project_task_user(osv.osv):
help="Number of Days to close the task"),
'opening_days': fields.float('Days to Open', digits=(16,2), readonly=True, group_operator="avg",
help="Number of Days to Open the task"),
- 'delay_endings_days': fields.float('Overpass Delay', digits=(16,2), readonly=True, group_operator="avg"),
+ 'delay_endings_days': fields.float('Overpassed Deadline', digits=(16,2), readonly=True),
'nbr': fields.integer('# of tasks', readonly=True),
'priority' : fields.selection([('4','Very Low'),
('3','Low'),
@@ -74,53 +73,61 @@ class report_project_task_user(osv.osv):
def init(self, cr):
tools.sql.drop_view_if_exists(cr, 'report_project_task_user')
cr.execute("""
- create or replace view report_project_task_user as (
- select
- min(t.id) as id,
+ create view report_project_task_user as
+ select
+ (select 1 ) AS nbr,
+ t.id as id,
to_char(date_start, 'YYYY') as year,
to_char(date_start, 'MM') as month,
to_char(date_start, 'YYYY-MM-DD') as day,
- count(distinct t.id) as nbr,
date_trunc('day',t.date_start) as date_start,
date_trunc('day',t.date_end) as date_end,
to_date(to_char(t.date_deadline, 'dd-MM-YYYY'),'dd-MM-YYYY') as date_deadline,
- sum(cast(to_char(date_trunc('day',t.date_end) - date_trunc('day',t.date_start),'DD') as int)) as no_of_days,
+-- sum(cast(to_char(date_trunc('day',t.date_end) - date_trunc('day',t.date_start),'DD') as int)) as no_of_days,
+ (extract('epoch' from (t.date_end-t.date_start)))/(3600*24) as no_of_days,
t.user_id,
- sum(progress) as progress,
+ progress as progress,
t.project_id,
t.state,
+ t.effective_hours as hours_effective,
t.priority,
t.name as name,
t.company_id,
t.partner_id,
t.type,
- w.user_id as done_by,
- sum(remaining_hours) as remaining_hours,
- sum(total_hours) as total_hours,
- sum(planned_hours) as hours_planned,
- avg(extract('epoch' from (t.date_end-t.create_date)))/(3600*24) as closing_days,
- avg(extract('epoch' from (t.date_start-t.create_date)))/(3600*24) as opening_days,
- avg(extract('epoch' from (t.date_deadline-t.date_end)))/(3600*24) as delay_endings_days,
- sum(w.hours) as hours_effective,
- ((sum(planned_hours)-sum(w.hours))/count(distinct t.id))::decimal(16,2) as hours_delay
- from project_task t
- left join project_task_work w on (t.id=w.task_id)
- group by
- to_char(date_start, 'YYYY'),
- to_char(date_start, 'MM'),
- t.priority,
+ remaining_hours as remaining_hours,
+ total_hours as total_hours,
+ t.delay_hours as hours_delay,
+ planned_hours as hours_planned,
+ (extract('epoch' from (t.date_end-t.create_date)))/(3600*24) as closing_days,
+ (extract('epoch' from (t.date_start-t.create_date)))/(3600*24) as opening_days,
+ (extract('epoch' from (t.date_deadline-t.date_end)))/(3600*24) as delay_endings_days
+ from project_task t
+
+ group by
+ t.id,
+ remaining_hours,
+ t.effective_hours,
+ progress,
+ total_hours,
+ planned_hours,
+ hours_delay,
+ year,
+ month,
+ day,
+ create_date,
+ date_start,
+ date_end,
+ date_deadline,
t.user_id,
- w.user_id,
+ t.project_id,
t.state,
- date_trunc('day',t.date_end),
- to_date(to_char(t.date_deadline, 'dd-MM-YYYY'),'dd-MM-YYYY'),
+ t.priority,
+ name,
t.company_id,
t.partner_id,
- t.type,
- t.name,
- t.project_id,
- t.date_start
- )
+ t.type
+
""")
report_project_task_user()
diff --git a/addons/project/report/project_report_view.xml b/addons/project/report/project_report_view.xml
index 26488eae254..9b685001664 100644
--- a/addons/project/report/project_report_view.xml
+++ b/addons/project/report/project_report_view.xml
@@ -12,7 +12,6 @@
-
@@ -31,8 +30,8 @@
-
+
@@ -87,9 +86,14 @@
icon="terp-dialog-close"
name="done"
domain="[('state','=','done')]"/>
-
-
-
+
+
+
+
+
-
-
-
-
+
+
-
-
-
+
+
+
-
@@ -126,7 +124,6 @@
-
@@ -145,7 +142,7 @@
form
tree,graph
- {'search_default_month':1,'search_default_User':1,'search_default_user_id':uid,'group_by_no_leaf':1,'group_by':[]}
+ {'search_default_month':1,'search_default_project':1,'group_by_no_leaf':1,'group_by':[]}
diff --git a/addons/project_issue/report/project_issue_report.py b/addons/project_issue/report/project_issue_report.py
index 70a08e2c7b4..26ae5252dc8 100644
--- a/addons/project_issue/report/project_issue_report.py
+++ b/addons/project_issue/report/project_issue_report.py
@@ -9,7 +9,6 @@ AVAILABLE_STATES = [
('done', 'Closed'),
('pending','Pending')
]
-
class project_issue_report(osv.osv):
_name = "project.issue.report"
_auto = False
@@ -51,9 +50,8 @@ class project_issue_report(osv.osv):
_columns = {
'name': fields.char('Year', size=64, required=False, readonly=True),
- 'user_id':fields.many2one('res.users', 'User', readonly=True),
+ 'user_id':fields.many2one('res.users', 'Responsible', readonly=True),
'section_id':fields.many2one('crm.case.section', 'Section', readonly=True),
- 'nbr': fields.integer('# of Cases', readonly=True),
'state': fields.selection(AVAILABLE_STATES, 'State', size=16, readonly=True),
'avg_answers': fields.function(_get_data, string='Avg. Answers', method=True, type="integer"),
'perc_done': fields.function(_get_data, string='%Done', method=True, type="float"),
@@ -65,23 +63,29 @@ class project_issue_report(osv.osv):
('09', 'September'), ('10', 'October'),\
('11', 'November'), ('12', 'December')], 'Month', readonly=True),
'company_id': fields.many2one('res.company', 'Company', readonly=True),
- 'create_date': fields.datetime('Create Date', readonly=True),
'day': fields.char('Day', size=128, readonly=True),
+ 'opening_date': fields.date('Opening Date', readonly=True),
+ 'creation_date': fields.date('Creation Date', readonly=True),
'categ_id': fields.many2one('crm.case.categ', 'Category', domain="[('section_id','=',section_id),('object_id.model', '=', 'project.issue')]"),
'stage_id': fields.many2one ('crm.case.stage', 'Stage', domain="[('object_id.model', '=', 'project.issue')]"),
'nbr': fields.integer('# of Issues', readonly=True),
+ 'working_hours_open': fields.float('# Working Open Hours', readonly=True),
+ 'working_hours_close': fields.float('# Working Closing Hours', readonly=True),
+ 'delay_open': fields.float('Avg opening Delay', digits=(16,2), readonly=True, group_operator="avg",
+ help="Number of Days to close the project issue"),
'delay_close': fields.float('Avg Closing Delay', digits=(16,2), readonly=True, group_operator="avg",
help="Number of Days to close the project issue"),
'company_id' : fields.many2one('res.company', 'Company'),
'priority': fields.selection(crm.AVAILABLE_PRIORITIES, 'Priority'),
'project_id':fields.many2one('project.project', 'Project',readonly=True),
'type_id': fields.many2one('crm.case.resource.type', 'Type', domain="[('object_id.model', '=', 'project.issue')]"),
- 'date_closed': fields.datetime('Close Date', readonly=True),
+ 'date_closed': fields.date('Close Date', readonly=True),
'assigned_to' : fields.many2one('res.users', 'Assigned to',readonly=True),
'partner_id': fields.many2one('res.partner','Partner',domain="[('object_id.model', '=', 'project.issue')]"),
'canal_id': fields.many2one('res.partner.canal', 'Channel',readonly=True),
'task_id': fields.many2one('project.task', 'Task',domain="[('object_id.model', '=', 'project.issue')]" )
}
+
def init(self, cr):
tools.drop_view_if_exists(cr, 'project_issue_report')
cr.execute("""
@@ -91,51 +95,60 @@ class project_issue_report(osv.osv):
to_char(c.create_date, 'YYYY') as name,
to_char(c.create_date, 'MM') as month,
to_char(c.create_date, 'YYYY-MM-DD') as day,
+ to_char(c.date_open, 'YYYY-MM-DD') as opening_date,
+ to_char(c.create_date, 'YYYY-MM-DD') as creation_date,
c.state,
c.user_id,
+ c.working_hours_open,
+ c.working_hours_close,
c.section_id,
c.categ_id,
c.stage_id,
- to_char(c.date_closed, 'YYYY/mm/dd') as date_closed,
- u.company_id as company_id,
+ to_char(c.date_closed, 'YYYY-mm-dd') as date_closed,
+ c.company_id as company_id,
c.priority as priority,
c.project_id as project_id,
c.type_id as type_id,
- count(*) as nbr,
+ (select 1) as nbr,
c.assigned_to,
c.partner_id,
c.canal_id,
c.task_id,
date_trunc('day',c.create_date) as create_date,
+ avg(extract('epoch' from (c.date_open-c.create_date)))/(3600*24) as delay_open,
avg(extract('epoch' from (c.date_closed-c.create_date)))/(3600*24) as delay_close
from
project_issue c
- left join
- res_users u on (c.id = u.id)
+ where c.categ_id in (select res_id from ir_model_data where name='bug_categ')
group by
to_char(c.create_date, 'YYYY'),
to_char(c.create_date, 'MM'),
to_char(c.create_date, 'YYYY-MM-DD'),
c.state,
+ to_char(c.date_open, 'YYYY-MM-DD'),
+ to_char(c.date_closed, 'YYYY-mm-dd'),
c.user_id,
c.section_id,
c.categ_id,
c.stage_id,
- c.date_closed,
- u.company_id,
+ c.company_id,
c.priority,
+ c.working_hours_open,
+ c.working_hours_close,
c.project_id,
+ to_char(c.date_closed, 'YYYY-MM-DD'),
c.type_id,
+ c.working_hours_open,
+ c.working_hours_close,
date_trunc('day',c.create_date),
c.assigned_to,
c.partner_id,
c.canal_id,
c.task_id
- )""")
-
+ )""")
project_issue_report()
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/project_issue/report/project_issue_report_view.xml b/addons/project_issue/report/project_issue_report_view.xml
index adc1b3c662f..396a892e38c 100644
--- a/addons/project_issue/report/project_issue_report_view.xml
+++ b/addons/project_issue/report/project_issue_report_view.xml
@@ -15,7 +15,6 @@
-
@@ -24,10 +23,13 @@
-
+
+
+
+
@@ -51,29 +53,25 @@
-
-
-
-
-
-
-
+
+
-
-
-
+
-
-
-
-
-
+
+
+
+
+
+
+
-
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
-
-
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
-
-
@@ -179,7 +152,7 @@
project.issue.report
form
graph,tree
- {"search_default_This Month":1,"search_default_User":1,"search_default_user_id":uid,'group_by_no_leaf':1,'group_by':[]}
+ {'search_default_This Month':1,'search_default_project_id':1,'group_by_no_leaf':1,'group_by':[]}
diff --git a/addons/purchase/report/purchase_report.py b/addons/purchase/report/purchase_report.py
index cf177319ea5..71f2638d628 100644
--- a/addons/purchase/report/purchase_report.py
+++ b/addons/purchase/report/purchase_report.py
@@ -31,7 +31,7 @@ class purchase_report(osv.osv):
_description = "Purchases Orders"
_auto = False
_columns = {
- 'date': fields.date('Date', readonly=True),
+ 'date': fields.date('Date order', readonly=True),
'name': fields.char('Year',size=64,required=False, readonly=True),
'day': fields.char('Day', size=128, readonly=True),
'state': fields.selection([
@@ -61,7 +61,11 @@ class purchase_report(osv.osv):
'expected_date':fields.date('Expected Date', readonly=True),
'validator' : fields.many2one('res.users', 'Validated by', readonly=True),
'company_id':fields.many2one('res.company', 'Company', readonly=True),
+ 'shipped_qty':fields.integer('Received Qty', readonly=True),
+ 'invoiced_qty':fields.integer('Invoiced Qty', readonly=True),
'user_id':fields.many2one('res.users', 'Responsible', readonly=True),
+ 'delay':fields.float('Days to Close', digits=(16,2), readonly=True),
+ 'delay_pass':fields.float('Overpassed expected', digits=(16,2), readonly=True),
'quantity': fields.float('# of Products', readonly=True),
'price_total': fields.float('Total Price', readonly=True),
'price_average': fields.float('Average Price', readonly=True),
@@ -94,9 +98,13 @@ class purchase_report(osv.osv):
s.create_uid as user_id,
s.company_id as company_id,
s.invoice_method,
+ s.shipped::integer as shipped_qty,
+ l.invoiced::integer as invoiced_qty,
l.product_id,
s.location_id as location_id,
sum(l.product_qty*u.factor) as quantity,
+ extract(epoch from age(s.date_approve,s.date_order))/(24*60*60)::decimal(16,2) as delay,
+ extract(epoch from age(s.minimum_planned_date,s.date_order))/(24*60*60)::decimal(16,2) as delay_pass,
count(*) as nbr,
sum(l.product_qty*l.price_unit) as price_total,
(sum(l.product_qty*l.price_unit)/sum(l.product_qty*u.factor))::decimal(16,2) as price_average
@@ -107,9 +115,12 @@ class purchase_report(osv.osv):
group by
s.company_id,
s.create_uid,
+ s.shipped,
+ l.invoiced,
s.partner_id,
s.location_id,
s.date_approve,
+ s.minimum_planned_date,
date_trunc('day',s.minimum_planned_date),
s.partner_address_id,
s.pricelist_id,
diff --git a/addons/purchase/report/purchase_report_view.xml b/addons/purchase/report/purchase_report_view.xml
deleted file mode 100644
index 8fb7836468d..00000000000
--- a/addons/purchase/report/purchase_report_view.xml
+++ /dev/null
@@ -1,220 +0,0 @@
-
-
-
-
- product.month.graph
- purchase.report
- graph
-
-
-
-
-
-
-
-
-
-
- purchase.order.tree
- purchase.report
- tree
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- report.purchase.order.search
- purchase.report
- search
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Purchase Orders
- purchase.report
- form
- tree,graph
-
- {'search_default_month':1,'search_default_Responsible':1,'group_by_no_leaf':1,'group_by':[]}
-
-
-
-
-
-
- purchase.order.qty.amount.graph
- purchase.order.qty.amount
- graph
-
-
-
-
-
-
-
-
-
-
- purchase.order.qty.amount.tree
- purchase.order.qty.amount
- tree
-
-
-
-
-
-
-
-
-
-
- Total Qty and Amount by month
- purchase.order.qty.amount
- form
- graph,tree
-
-
-
- purchase.order.by.user.graph
- purchase.order.by.user
- graph
-
-
-
-
-
-
-
-
-
-
- purchase.order.by.user.tree
- purchase.order.by.user
- tree
-
-
-
-
-
-
-
-
-
-
- Total Orders by User per month
- purchase.order.by.user
- form
- graph,tree
-
-
-
diff --git a/addons/sale/report/sale_report.py b/addons/sale/report/sale_report.py
index d9be5f49274..68f50068ec0 100644
--- a/addons/sale/report/sale_report.py
+++ b/addons/sale/report/sale_report.py
@@ -71,7 +71,8 @@ class sale_report(osv.osv):
cr.execute("""
create or replace view sale_report as (
select el.*,
- (select count(1) from sale_order_line where order_id = s.id) as nbr,
+ -- (select count(1) from sale_order_line where order_id = s.id) as nbr,
+ (select 1) as nbr,
s.date_order as date,
s.date_confirm as date_confirm,
to_char(s.date_order, 'YYYY') as year,
@@ -101,7 +102,7 @@ class sale_report(osv.osv):
sale_order_line l
left join product_uom u on (u.id=l.product_uom)
left join product_template pt on (pt.id=l.product_id)
- group by l.id, l.order_id, l.product_id, u.name, pt.categ_id) el
+ group by l.id, l.order_id, l.product_id, u.name, pt.categ_id) el
where s.id = el.order_id
)
""")
diff --git a/addons/sale/report/sale_report_view.xml b/addons/sale/report/sale_report_view.xml
index 75dd9d55642..f6090638891 100644
--- a/addons/sale/report/sale_report_view.xml
+++ b/addons/sale/report/sale_report_view.xml
@@ -19,7 +19,7 @@
-
+
@@ -85,19 +85,19 @@
-
+
-
-
+
-
+
+
+
-
-
-
+
+
@@ -109,7 +109,6 @@
-