[IMP] project_issue, purchase, sale reports

bzr revid: nel@tinyerp.com-20100604175417-4u3jzricew1j7i96
This commit is contained in:
nel@tinyerp.com
2010-06-04 19:54:17 +02:00
parent 47b0585fb5
commit 958cf4bbbe
10 changed files with 164 additions and 379 deletions
+6 -3
View File
@@ -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,
+14 -13
View File
@@ -11,19 +11,20 @@
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Production">
<field name="date_planned"/>
<field name="bom_id" invisible="1"/>
<field name="product_id" invisible="1"/>
<field name="product_qty" sum='Product Qty'/>
<field name="nbr" string="#Production Orders" sum='#Production Orders'/>
<field name="state" invisible="1"/>
<field name="picking_id" invisible="1"/>
<field name="priority" invisible="1"/>
<field name="year" invisible="1" />
<field name="month" invisible="1"/>
<field name="location_src_id" invisible="1"/>
<field name="location_dest_id" invisible="1"/>
<field name="company_id" groups="base.group_multi_company" invisible="1"/>
<field name="date_planned"/>
<field name="bom_id" invisible="1"/>
<field name="product_id" invisible="1"/>
<field name="product_qty" sum='Product Qty'/>
<field name="nbr" string="#Line Orders" sum='#Line Orders'/>
<field name="state" invisible="1"/>
<field name="picking_id" invisible="1"/>
<field name="priority" invisible="1"/>
<field name="day" invisible="1" />
<field name="month" invisible="1" />
<field name="year" invisible="1" />
<field name="location_src_id" invisible="1"/>
<field name="location_dest_id" invisible="1"/>
<field name="company_id" groups="base.group_multi_company" invisible="1"/>
</tree>
</field>
</record>
+38 -31
View File
@@ -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()
+15 -18
View File
@@ -12,7 +12,6 @@
<field name="name" invisible="1"/>
<field name="project_id" invisible="1"/>
<field name="user_id" invisible="1"/>
<field name="done_by" invisible="1"/>
<field name="date_deadline" invisible="1"/>
<field name="state" invisible="1"/>
<field name="date_start" invisible="1"/>
@@ -31,8 +30,8 @@
<field name="hours_effective" sum='Effective Hours'/>
<field name="hours_delay" sum='Avg. Plan.-Eff.'/>
<field name="opening_days" sum='Days to Open'/>
<field name="delay_endings_days" sum='OverPass delay'/>
<field name="closing_days" sum='Days to Close'/>
<field name="delay_endings_days" sum='OverPass delay'/>
<field name="progress" sum='Progress' widget='progressbar'/>
</tree>
</field>
@@ -87,9 +86,14 @@
icon="terp-dialog-close"
name="done"
domain="[('state','=','done')]"/>
<separator orientation="vertical"/>
<field name="partner_id" />
<field name="user_id" widget="selection">
<separator orientation="vertical"/>
<field name="project_id">
<filter icon="terp-folder-blue"
string="My Projects"
help="My Projects"
domain="[('project_id','=',context.get('project_id', False)]"/>
</field>
<field name="user_id" widget="selection">
<filter icon="terp-personal"
string="My Task"
help = "My tasks"
@@ -98,22 +102,16 @@
string="Non Assigned Tasks to users"
help="Non Assigned Tasks to users"
domain="[('user_id','=',False)]"/>
</field>
<field name="project_id">
<filter icon="terp-folder-blue"
string="My Projects"
help="My Projects"
domain="[('project_id','=',context.get('project_id', False)]"/>
</field>
</field>
<field name="partner_id" />
</group>
<newline/>
<group expand="0" string="Group By..." colspan="10" col="12">
<filter string="User" name="User" icon="terp-personal" context="{'group_by':'user_id'}" />
<filter string="Project" icon="terp-folder-blue" context="{'group_by':'project_id'}"/>
<group expand="1" string="Group By..." colspan="10" col="12">
<filter string="Project" name="project" icon="terp-folder-blue" context="{'group_by':'project_id'}"/>
<filter string="Assigned to" name="User" icon="terp-personal" context="{'group_by':'user_id'}" />
<separator orientation="vertical"/>
<filter string="Partner" icon="terp-personal" context="{'group_by':'partner_id'}" />
<filter string="Task" icon="terp-stock_align_left_24" context="{'group_by':'name'}" />
<filter string="Done By" icon="terp-personal" context="{'group_by':'done_by'}" />
<separator orientation="vertical"/>
<filter string="State" icon="terp-stock_effects-object-colorize" context="{'group_by':'state'}"/>
<filter string="Company" icon="terp-go-home" context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
@@ -126,7 +124,6 @@
<newline/>
<group expand="0" string="Extended options..." colspan="10" col="12" groups="base.group_extended">
<field name="type" widget="selection"/>
<field name="done_by" widget="selection"/>
<separator orientation="vertical"/>
<field name="date_start"/>
<field name="date_deadline"/>
@@ -145,7 +142,7 @@
<field name="view_type">form</field>
<field name="view_mode">tree,graph</field>
<field name="search_view_id" ref="view_task_project_user_search"/>
<field name="context">{'search_default_month':1,'search_default_User':1,'search_default_user_id':uid,'group_by_no_leaf':1,'group_by':[]}</field>
<field name="context">{'search_default_month':1,'search_default_project':1,'group_by_no_leaf':1,'group_by':[]}</field>
</record>
<menuitem action="action_project_task_user_tree" id="menu_project_task_user_tree" parent="base.menu_project_report"/>
@@ -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:
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
@@ -15,7 +15,6 @@
<field name="type_id" string="Type" invisible="1"/>
<field name="priority" invisible="1"/>
<field name="company_id" invisible="1" groups="base.group_multi_company"/>
<field name="delay_close" avg='Avg Closing Delay'/>
<field name="section_id" invisible="1"/>
<field name="user_id" invisible="1"/>
<field name="categ_id" invisible="1"/>
@@ -24,10 +23,13 @@
<field name="task_id" invisible="1"/>
<field name="assigned_to" invisible="1"/>
<field name="date_closed" invisible="1"/>
<field name="create_date" invisible="1"/>
<field name="state" invisible="1"/>
<field name="day" invisible="1"/>
<field name="nbr" string="#Project Issue" sum='#Number of Project Issue'/>
<field name="delay_open" avg='Avg Opening Delay'/>
<field name="delay_close" avg='Avg Closing Delay'/>
<field name="working_hours_open" sum='Open Working Hours'/>
<field name="working_hours_close" sum='Close Working hours'/>
</tree>
</field>
</record>
@@ -51,29 +53,25 @@
<field name="arch" type="xml">
<search string="Search">
<group col="16" colspan="8">
<!-- <filter string="This Year" name="This Year" icon="terp-hr"
domain="[('name','=',time.localtime()[0])]"/>-->
<filter string="This Year" icon="terp-go-year"
<filter string="365 Days" icon="terp-go-year"
domain="[('create_date','&lt;=', time.strftime('%%Y-%%m-%%d')), ('create_date','&gt;',(datetime.date.today()-datetime.timedelta(days=365)).strftime('%%Y-%%m-%%d'))]"/>
<!-- <filter string="This Month" name="This Year" icon="terp-hr"
domain="[('month','=',time.strftime('%%m'))]" />-->
<filter string="This Month" icon="terp-go-month" name="This Month"
<filter string="30 Days" icon="terp-go-month" name="This Month"
domain="[('create_date','&lt;=', time.strftime('%%Y-%%m-%%d')), ('create_date','&gt;',(datetime.date.today()-datetime.timedelta(days=30)).strftime('%%Y-%%m-%%d'))]"/>
<filter icon="terp-go-week" string="7 Days" separator="1"
domain="[('create_date','&lt;=', time.strftime('%%Y-%%m-%%d')), ('create_date','&gt;',(datetime.date.today()-datetime.timedelta(days=7)).strftime('%%Y-%%m-%%d'))]"/>
<separator orientation="vertical" />
<filter icon="terp-document-new"
string="Draft"
domain="[('state','=','draft')]"/>
<filter icon="terp-camera_test"
string="Open"
domain="[('state','=','open')]"/>
<filter icon="terp-gtk-media-pause"
<filter icon="terp-camera_test"
string="Current"
domain="[('state','in',('draft','open'))]"/>
<filter icon="terp-gtk-media-pause"
string="Pending"
domain="[('state','=','pending')]"/>
<filter icon="terp-dialog-close"
string="Done"
domain="[('state','=','done')]"/>
<separator orientation="vertical" />
<field name="section_id"
@@ -87,45 +85,35 @@
help="My section" />
</field>
<field name="company_id" widget="selection">
<filter icon="terp-go-home"
context="{'invisible_section': False}"
domain="[('section_id.user_id.company_id','=',uid)]"
help="My company"/>
</field>
<field name="project_id"/>
<field name="user_id" select="1" widget="selection"/>
</group>
<newline/>
<group expand="0" string="Group By..." colspan="4" col="8">
<filter string="User" name="User" icon="terp-personal"
domain="[]" context="{'group_by':'user_id'}" />
<filter string="Company" icon="terp-go-home"
domain="[]"
context="{'group_by':'company_id'}" />
<group expand="1" string="Group By..." colspan="4" col="8">
<filter string="Project" name="project_id" icon="terp-folder-blue" context="{'group_by':'project_id'}" />
<filter string="User" name="User" icon="terp-personal"
domain="[]" context="{'group_by':'user_id'}" />
<separator orientation="vertical" />
<filter string="Partner" icon="terp-personal" context="{'group_by':'partner_id'}" />
<filter string="Task" icon="terp-stock_align_left_24" domain="[]" context="{'group_by':'task_id'}"/>
<separator orientation="vertical" />
<filter string="Section" icon="terp-sale"
domain="[]"
context="{'group_by':'section_id'}" />
<filter string="Category" icon="terp-stock_symbol-selection"
domain="[]" context="{'group_by':'categ_id'}" />
<separator orientation="vertical" />
<filter string="Type" icon="terp-stock_symbol-selection" domain="[]" context="{'group_by':'type_id'}"/>
<filter string="Stage" icon="terp-stage" domain="[]" context="{'group_by':'stage_id'}"/>
<separator orientation="vertical"/>
<filter string="Priority" icon="terp-rating-rated" domain="[]" context="{'group_by':'priority'}" />
<separator orientation="vertical" />
<filter string="State" icon="terp-stock_effects-object-colorize"
domain="[]" context="{'group_by':'state'}" />
<filter string="Category" icon="terp-stock_symbol-selection"
domain="[]" context="{'group_by':'categ_id'}" />
<filter string="Stage" icon="terp-stage" domain="[]" context="{'group_by':'stage_id'}"/>
<separator orientation="vertical"/>
<filter string="Project" icon="terp-folder-blue" domain="[]" context="{'group_by':'project_id'}" />
<filter string="Priority" icon="terp-rating-rated" domain="[]" context="{'group_by':'priority'}" />
<separator orientation="vertical"/>
<filter string="Type" icon="terp-stock_symbol-selection" domain="[]" context="{'group_by':'type_id'}"/>
<filter string="Task" icon="terp-stock_align_left_24" domain="[]" context="{'group_by':'task_id'}"/>
<newline/>
<filter string="Assigned To" icon="terp-personal" domain="[]" context="{'group_by':'assigned_to'}"/>
<filter string="Partner" icon="terp-personal" domain="[]" context="{'group_by':'partner_id'}"/>
<filter string="Channel" icon="terp-call-start" domain="[]" context="{'group_by':'canal_id'}"/>
<separator orientation="vertical"/>
<filter string="Company" icon="terp-go-home"
domain="[]"
context="{'group_by':'company_id'}" />
<separator orientation="vertical" />
<filter string="Day" icon="terp-sale"
@@ -140,36 +128,21 @@
</group>
<newline/>
<group expand="0" string="Extended options..." colspan="10" col="12" groups="base.group_extended">
<filter icon="terp-dialog-close"
string="Done"
domain="[('state','=','done')]"/>
<filter icon="terp-gtk-stop"
string="Cancel"
domain="[('state','=','cancel')]"/>
<group>
<field name="partner_id" />
<field name="assigned_to" widget="selection"/>
<separator orientation="vertical"/>
<field name="project_id" widget="selection" />
<field name="priority" />
<separator orientation="vertical"/>
<field name="type_id" widget="selection" domain="[('object_id.model', '=', 'project.issue')]"/>
<field name="task_id"/>
<separator orientation="vertical"/>
<field name="assigned_to" widget="selection">
<filter icon="terp-personal" help = "Project Issue Assigned To Me" domain="[('assigned_to','=',uid)]" />
<filter icon="terp-personal-" help="Non Assigned Project Issue" domain="[('assigned_to','=',False)]"/>
</field>
<newline/>
<field name="categ_id" widget="selection" domain="[('object_id.model', '=', 'project.issue')]"/>
<field name="stage_id" widget="selection" domain="[('object_id.model', '=', 'project.issue')]" />
<separator orientation="vertical"/>
<field name="partner_id" />
<field name="canal_id" widget="selection"/>
<separator orientation="vertical"/>
<field name="company_id" widget="selection" groups="base.group_multi_company"/>
<newline/>
<field name="creation_date"/>
<field name="opening_date"/>
<field name="date_closed" string="Date Closed"/>
</group>
</group>
</search>
</field>
</record>
@@ -179,7 +152,7 @@
<field name="res_model">project.issue.report</field>
<field name="view_type">form</field>
<field name="view_mode">graph,tree</field>
<field name="context">{"search_default_This Month":1,"search_default_User":1,"search_default_user_id":uid,'group_by_no_leaf':1,'group_by':[]}</field>
<field name="context">{'search_default_This Month':1,'search_default_project_id':1,'group_by_no_leaf':1,'group_by':[]}</field>
<field name="view_id" ref="view_project_issue_report_tree"/>
<field name="search_view_id" ref="view_project_issue_report_filter"/>
</record>
+12 -1
View File
@@ -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,
@@ -1,220 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<record model="ir.ui.view" id="view_purchase_order_report_graph">
<field name="name">product.month.graph</field>
<field name="model">purchase.report</field>
<field name="type">graph</field>
<field name="arch" type="xml">
<graph string="Purchase Orders Statistics" type="bar">
<field name="product_id"/>
<field name="quantity" operator="+"/>
<field name="price_total" operator="+"/>
</graph>
</field>
</record>
<record id="view_purchase_order_tree" model="ir.ui.view">
<field name="name">purchase.order.tree</field>
<field name="model">purchase.report</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Purchase Orders Statistics">
<field name="date" invisible="1"/>
<field name="date_approve" invisible="1"/>
<field name="expected_date" invisible="1"/>
<field name="user_id" invisible="1"/>
<field name="partner_id" invisible="1"/>
<field name="product_id" invisible="1"/>
<field name="quantity" invisible="1"/>
<field name="nbr" sum="# of Lines"/>
<field name="price_average" avg="Average Price"/>
<field name="price_total" sum="Total Price"/>
<field name="day" invisible="1"/>
<field name="name" invisible="1"/>
<field name="month" invisible="1"/>
<field name="warehouse_id" invisible="1"/>
<field name="partner_address_id" invisible="1"/>
<field name="dest_address_id" invisible="1"/>
<field name="pricelist_id" invisible="1"/>
<field name="validator" invisible="1"/>
<field name="company_id" invisible="1"/>
<field name="state" invisible="1"/>
<field name="location_id" invisible="1"/>
<field name="fiscal_position" invisible="1"/>
</tree>
</field>
</record>
<record id="view_purchase_order_search" model="ir.ui.view">
<field name="name">report.purchase.order.search</field>
<field name="model">purchase.report</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Purchase Orders">
<group colspan="10" col="12">
<filter icon="terp-go-year" string="This Year"
domain="[('date','&lt;=', time.strftime('%%Y-%%m-%%d')),('date','&gt;',(datetime.date.today()-datetime.timedelta(days=365)).strftime('%%Y-%%m-%%d'))]"
help="Tasks performed in this year"/>
<filter icon="terp-go-month" string="This Month"
name="month"
domain="[('date','&lt;=', time.strftime('%%Y-%%m-%%d')), ('date','&gt;',(datetime.date.today()-datetime.timedelta(days=30)).strftime('%%Y-%%m-%%d'))]"
help="Tasks performed in this month"/>
<filter icon="terp-go-week"
string=" 7 Days "
separator="1"
domain="[('date','&lt;=', time.strftime('%%Y-%%m-%%d')), ('date','&gt;',(datetime.date.today()-datetime.timedelta(days=7)).strftime('%%Y-%%m-%%d'))]"
help="Tasks during last 7 days"/>
<separator orientation="vertical"/>
<filter icon="terp-document-new"
string="Quotations"
domain="[('state','=','draft')]"/>
<filter icon="terp-gtk-media-pause"
string="Waiting Schedule"
domain="[('state','=','waiting_date')]"/>
<filter icon="terp-camera_test"
string="Manual in progress"
domain="[('state','=','manual')]"/>
<separator orientation="vertical"/>
<field name="partner_id" string="Supplier"/>
<field name="product_id"/>
<field name="user_id" widget="selection">
<filter icon="terp-personal-"
string="Purchase Non User"
help="Purchase Non User"
domain="[('user_id','=',False)]"/>
</field>
<field name="company_id" groups="base.group_multi_company" widget="selection"/>
</group>
<newline/>
<group expand="0" string="Group By..." colspan="10" col="12">
<filter string="Company" icon="terp-go-home" context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
<filter string="Warehouse" icon="terp-go-home" context="{'group_by':'warehouse_id'}"/>
<filter string="Location" icon="terp-go-home" context="{'group_by':'location_id'}"/>
<separator orientation="vertical"/>
<filter string="Responsible" name="Responsible" icon="terp-personal" context="{'group_by':'user_id'}"/>
<filter string="Pricelist" icon="terp-dolar" context="{'group_by':'pricelist_id'}"/>
<filter string="Validated by" icon="terp-personal" context="{'group_by':'validator'}"/>
<separator orientation="vertical"/>
<filter string="Address Contact Name" icon="terp-personal" context="{'group_by':'partner_address_id'}"/>
<filter string="Dest. Contact Name" icon="terp-gtk-jump-to-ltr" context="{'group_by':'dest_address_id'}"/>
<filter string="Product" icon="terp-accessories-archiver" context="{'group_by':'product_id'}"/>
<separator orientation="vertical"/>
<filter string="Supplier" name="partner_id" icon="terp-personal" context="{'group_by':'partner_id'}"/>
<filter string="State" icon="terp-stock_effects-object-colorize" context="{'group_by':'state'}"/>
<filter string="Fiscal Position" icon="terp-go-year" context="{'group_by':'fiscal_position'}"/>
<newline/>
<filter string="Day" icon="terp-go-month" context="{'group_by':'day'}"/>
<filter string="Month" icon="terp-go-month" context="{'group_by':'month'}"/>
<filter string="Year" icon="terp-go-year" context="{'group_by':'name'}"/>
</group>
<newline/>
<group expand="0" string="Extended filters..." colspan="10" col="12" groups="base.group_extended">
<filter icon="terp-emblem-important" string="Shipping Exception" domain="[('state','=','shipping_except')]"/>
<filter icon="terp-dialog-close" string="Done" domain="[('state','=','done')]"/>
<separator orientation="vertical"/>
<field name="date_approve"/>
<separator orientation="vertical"/>
<field name="partner_address_id"/>
<field name="invoice_method"/>
<field name="warehouse_id" widget="selection"/>
<field name="validator" widget="selection"/>
<newline/>
<filter icon="terp-emblem-important" string="Invoice Exception " domain="[('state','=','invoice_except')]"/>
<filter icon="terp-gtk-stop" string="Cancel" domain="[('state','=','cancel')]"/>
<separator orientation="vertical"/>
<field name="expected_date"/>
<separator orientation="vertical"/>
<field name="dest_address_id"/>
<field name="fiscal_position" widget="selection"/>
<field name="location_id" widget="selection"/>
<field name="pricelist_id" widget="selection"/>
<newline/>
<field name="date"/>
</group>
</search>
</field>
</record>
<record id="action_purchase_order_report_all" model="ir.actions.act_window">
<field name="name">Purchase Orders</field>
<field name="res_model">purchase.report</field>
<field name="view_type">form</field>
<field name="view_mode">tree,graph</field>
<field name="search_view_id" ref="view_purchase_order_search"/>
<field name="context">{'search_default_month':1,'search_default_Responsible':1,'group_by_no_leaf':1,'group_by':[]}</field>
</record>
<menuitem id="base.next_id_73" name="Reporting" parent="base.menu_purchase_root" sequence="8"/>
<menuitem action="action_purchase_order_report_all" id="menu_action_purchase_order_report_all" parent="base.next_id_73" sequence="3"/>
<record model="ir.ui.view" id="view_purchase_order_qty_amount_graph">
<field name="name">purchase.order.qty.amount.graph</field>
<field name="model">purchase.order.qty.amount</field>
<field name="type">graph</field>
<field name="arch" type="xml">
<graph string="Total Qty and Amount by month" type="bar">
<field name="month"/>
<field name="total_qty" operator="+"/>
<field name="total_amount" operator="+"/>
</graph>
</field>
</record>
<record model="ir.ui.view" id="view_purchase_order_qty_amount_tree">
<field name="name">purchase.order.qty.amount.tree</field>
<field name="model">purchase.order.qty.amount</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Total Qty and Amount by month" >
<field name="month"/>
<field name="total_qty" />
<field name="total_amount"/>
</tree>
</field>
</record>
<record id="action_purchase_order_qty_amount_all" model="ir.actions.act_window">
<field name="name">Total Qty and Amount by month</field>
<field name="res_model">purchase.order.qty.amount</field>
<field name="view_type">form</field>
<field name="view_mode">graph,tree</field>
</record>
<record model="ir.ui.view" id="view_purchase_order_by_user_graph">
<field name="name">purchase.order.by.user.graph</field>
<field name="model">purchase.order.by.user</field>
<field name="type">graph</field>
<field name="arch" type="xml">
<graph string="Total Orders by User per month" type="bar">
<field name="name" />
<field name="month" group="True" />
<field name="nbr" operator="+"/>
</graph>
</field>
</record>
<record model="ir.ui.view" id="view_purchase_order_by_user_tree">
<field name="name">purchase.order.by.user.tree</field>
<field name="model">purchase.order.by.user</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Total Orders by User per month" >
<field name="name"/>
<field name="month"/>
<field name="nbr" />
</tree>
</field>
</record>
<record id="action_purchase_order_by_user_all" model="ir.actions.act_window">
<field name="name">Total Orders by User per month</field>
<field name="res_model">purchase.order.by.user</field>
<field name="view_type">form</field>
<field name="view_mode">graph,tree</field>
</record>
</data>
</openerp>
+3 -2
View File
@@ -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
)
""")
+8 -9
View File
@@ -19,7 +19,7 @@
<field name="product_id" invisible="1"/>
<field name="categ_id" invisible="1"/>
<field name="nbr" sum="# of Lines"/>
<field name="product_uom_qty" sum="# of Qty"/>
<field name="product_uom_qty" avg="# of Qty"/>
<field name="shipped_qty_1"/>
<field name="uom_name" invisible="not context.get('set_visible',False)"/>
<field name="price_average" avg="Average Price"/>
@@ -85,19 +85,19 @@
</field>
</group>
<newline/>
<group expand="0" string="Group By..." colspan="10" col="12">
<group expand="1" string="Group By..." colspan="10" col="12">
<filter string="Salesman" icon="terp-personal" name="User" context="{'group_by':'user_id'}"/>
<filter string="Shop" icon="terp-go-home" context="{'group_by':'shop_id'}"/>
<filter string="Company" icon="terp-go-home" groups="base.group_multi_company" context="{'group_by':'company_id'}"/>
<filter string="Partner" icon="terp-personal" context="{'group_by':'partner_id'}"/>
<separator orientation="vertical"/>
<filter string="Product" icon="terp-accessories-archiver" context="{'group_by':'product_id','set_visible':True}"/>
<filter string="Default UoM" icon="terp-mrp" context="{'group_by':'uom_name'}"/>
<filter string="Partner" icon="terp-personal" context="{'group_by':'partner_id'}"/>
<filter string="Category of Product" icon="terp-stock_symbol-selection" context="{'group_by':'categ_id'}"/>
<filter string="Analytic Account" icon="terp-folder-green" context="{'group_by':'analytic_account_id'}"/>
<separator orientation="vertical"/>
<filter string="State" icon="terp-stock_effects-object-colorize" context="{'group_by':'state'}"/>
<separator orientation="vertical"/>
<filter string="Pricelist" icon="terp-dolar" context="{'group_by':'pricelist_id'}"/>
<filter string="Analytic Account" icon="terp-folder-green" context="{'group_by':'analytic_account_id'}"/>
<filter string="Category of Product" icon="terp-stock_symbol-selection" context="{'group_by':'categ_id'}"/>
<filter string="Shop" icon="terp-go-home" context="{'group_by':'shop_id'}"/>
<filter string="Company" icon="terp-go-home" groups="base.group_multi_company" context="{'group_by':'company_id'}"/>
<separator orientation="vertical"/>
<filter string="Day" icon="terp-go-month" context="{'group_by':'day'}"/>
<filter string="Month" icon="terp-go-month" context="{'group_by':'month'}"/>
@@ -109,7 +109,6 @@
<field name="date_confirm"/>
<separator orientation="vertical"/>
<field name="shop_id" widget="selection"/>
<field name="state"/>
<field name="categ_id" widget="selection"/>
<field name="company_id" groups="base.group_multi_company" widget="selection"/>
</group>