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 @@ -