diff --git a/addons/document/document_view.xml b/addons/document/document_view.xml
index 840c8a4c9e1..e5719705ebe 100644
--- a/addons/document/document_view.xml
+++ b/addons/document/document_view.xml
@@ -277,7 +277,7 @@
-
+
IR Attachment0
ir.attachment
@@ -296,9 +296,9 @@
-
+
IR Attachment2
ir.attachment
search
@@ -307,12 +307,14 @@
+
ir.attachment
ir.attachment
diff --git a/addons/hr_timesheet/hr_timesheet_view.xml b/addons/hr_timesheet/hr_timesheet_view.xml
index d2da8e6ea9e..d7700d16db3 100644
--- a/addons/hr_timesheet/hr_timesheet_view.xml
+++ b/addons/hr_timesheet/hr_timesheet_view.xml
@@ -5,7 +5,6 @@
-
hr.analytic.timesheet.tree
hr.analytic.timesheet
@@ -101,7 +100,6 @@
-
hr.timesheet.employee.extd_form
diff --git a/addons/hr_timesheet_sheet/hr_timesheet_sheet_view.xml b/addons/hr_timesheet_sheet/hr_timesheet_sheet_view.xml
index 78582fd9c74..840b8fbe13b 100644
--- a/addons/hr_timesheet_sheet/hr_timesheet_sheet_view.xml
+++ b/addons/hr_timesheet_sheet/hr_timesheet_sheet_view.xml
@@ -187,6 +187,9 @@
+
+
diff --git a/addons/mail_gateway/mail_gateway_view.xml b/addons/mail_gateway/mail_gateway_view.xml
index ab118295db5..f3be1eff422 100644
--- a/addons/mail_gateway/mail_gateway_view.xml
+++ b/addons/mail_gateway/mail_gateway_view.xml
@@ -1,6 +1,10 @@
+
+
+
mailgate.message.form
mailgate.message
@@ -85,6 +89,20 @@
+
+
+
+
+ Message
+ mailgate.message
+ form
+ tree,form
+
+
+
+
+
+
mailgate.thread.form
mailgate.thread
@@ -134,6 +152,9 @@
+
+
+
Mailgateway Threads
@@ -192,5 +213,8 @@
src_model="mailgate.message"
domain="[('res_id', '=', res_id),('res_model','=',model)]"/>
+
+
diff --git a/addons/project/project.py b/addons/project/project.py
index 26f67d706ba..a09855d3bce 100644
--- a/addons/project/project.py
+++ b/addons/project/project.py
@@ -189,13 +189,13 @@ class project(osv.osv):
'warn_manager': fields.boolean('Warn Manager', help="If you check this field, the project manager will receive a request each time a task is completed by his team.", states={'close':[('readonly',True)], 'cancelled':[('readonly',True)]}),
'members': fields.many2many('res.users', 'project_user_rel', 'project_id', 'uid', 'Project Members', help="Project's member. Not used in any computation, just for information purpose.", states={'close':[('readonly',True)], 'cancelled':[('readonly',True)]}),
'tasks': fields.one2many('project.task', 'project_id', "Project tasks"),
- 'planned_hours': fields.function(_progress_rate, multi="progress", method=True, string='Planned Time', help="Sum of planned hours of all tasks related to this project and its child projects.",
+ 'planned_hours': fields.function(_progress_rate, multi="progress", method=True, string='Planned Time', help="Sum of planned hours of all tasks related to this project and its child projects.",
store = {
'project.project': (lambda self, cr, uid, ids, c={}: ids, ['tasks'], 10),
'project.task': (_get_project_task, ['planned_hours', 'effective_hours', 'remaining_hours', 'total_hours', 'progress', 'delay_hours'], 10),
'project.task.work': (_get_project_work, ['hours'], 10),
}),
- 'effective_hours': fields.function(_progress_rate, multi="progress", method=True, string='Time Spent', help="Sum of spent hours of all tasks related to this project and its child projects.",
+ 'effective_hours': fields.function(_progress_rate, multi="progress", method=True, string='Time Spent', help="Sum of spent hours of all tasks related to this project and its child projects.",
store = {
'project.project': (lambda self, cr, uid, ids, c={}: ids, ['tasks'], 10),
'project.task': (_get_project_task, ['planned_hours', 'effective_hours', 'remaining_hours', 'total_hours', 'progress', 'delay_hours'], 10),
@@ -395,10 +395,15 @@ class task(osv.osv):
if hours.get(task.id, False):
dur_in_user_uom = uom_obj._compute_qty(cr, uid, default_uom, hours.get(task.id, 0.0), user_uom)
hours[task.id] = dur_in_user_uom
-
+ timespent=0
for task in self.browse(cr, uid, ids, context=context):
res[task.id] = {'effective_hours': hours.get(task.id, 0.0), 'total_hours': task.remaining_hours + hours.get(task.id, 0.0)}
- res[task.id]['delay_hours'] = res[task.id]['total_hours'] - task.planned_hours
+# res[task.id]['delay_hours'] = res[task.id]['total_hours'] - task.planned_hours
+
+ for ctimespent in task.work_ids:
+ timespent=timespent+ctimespent.hours
+ res[task.id]['delay_hours'] = task.planned_hours - timespent
+
res[task.id]['progress'] = 0.0
if (task.remaining_hours + hours.get(task.id, 0.0)):
res[task.id]['progress'] = round(min(100.0 * hours.get(task.id, 0.0) / res[task.id]['total_hours'], 99.99),2)
@@ -463,7 +468,7 @@ class task(osv.osv):
'description': fields.text('Description'),
'priority': fields.selection([('4','Very Low'), ('3','Low'), ('2','Medium'), ('1','Urgent'), ('0','Very urgent')], 'Priority'),
'sequence': fields.integer('Sequence', help="Gives the sequence order when displaying a list of tasks."),
- 'type_id': fields.many2one('project.task.type', 'Stage',),
+ 'type_id': fields.many2one('project.task.type', 'Type',),
'state': fields.selection([('draft', 'Draft'),('open', 'In Progress'),('pending', 'Pending'), ('cancelled', 'Cancelled'), ('done', 'Done')], 'State', readonly=True, required=True,
help='If the task is created the state is \'Draft\'.\n If the task is started, the state becomes \'In Progress\'.\n If review is needed the task is in \'Pending\' state.\
\n If the task is over, the states is set to \'Done\'.'),
diff --git a/addons/project/project_demo.xml b/addons/project/project_demo.xml
index e365d095a20..8d3752c0979 100644
--- a/addons/project/project_demo.xml
+++ b/addons/project/project_demo.xml
@@ -2,6 +2,216 @@
+
+
+
+ Phuong
+
+ phu
+ phu
+
+
+ Anthony
+
+ al
+ al
+
+
+ Quentin
+
+ qdp
+ qdp
+
+
+ Francois
+
+ fpi
+ fpi
+
+
+ Julien
+
+ jth
+ jth
+
+
+ Alien
+
+ apr
+ apr
+
+
+ Fabian
+
+ fbs
+ fbs
+
+
+
+
+
+ open
+ normal
+ Integrate a Sale and Warehouse Management.
+
+
+ Integrate a Sale and Warehouse Management.
+
+
+
+
+
+
+
+ 2
+
+ Prepare Requirements Document
+
+
+
+
+
+ 2
+
+ Make SRS
+
+
+
+
+
+ 2
+
+ Design Use Cases
+
+
+
+
+
+ 2
+
+ Budget Planning
+
+
+
+
+
+ 2
+
+ Quality Planning
+
+
+
+
+
+ 2
+
+ Risk Management Planning
+
+
+
+
+
+ 2
+
+ Create Project Schedules
+
+
+
+
+
+ 2
+
+ Dataflow Design
+
+
+
+
+
+ 2
+
+ User Interface Design
+
+
+
+
+
+ 2
+
+ Develop Module in Sale Management
+
+
+
+
+
+ 2
+
+ Develop module in Warehouse
+
+
+
+
+
+ 2
+
+ Integrate Modules
+
+
+
+
+
+ 2
+
+ Unit Testing
+
+
+
+
+
+ 2
+
+ Regression Test
+
+
+
+
+
+ 2
+
+ Documentation
+
+
+
+
+
+
+ 2
+
+ Performance Tuning
+
+
+
+
+
+ 2
+
+ Deploy and Review on Customer System
+
+
+
+
+
+ 2
+
+ Training and Presentation
+
+
diff --git a/addons/project/project_view.xml b/addons/project/project_view.xml
index cda4109c32e..be93e021f96 100644
--- a/addons/project/project_view.xml
+++ b/addons/project/project_view.xml
@@ -305,13 +305,15 @@
+
-
+
+
-
+
-
+
@@ -149,7 +149,7 @@
Get detailed analysis by task
-
+
diff --git a/addons/project/security/ir.model.access.csv b/addons/project/security/ir.model.access.csv
index f0074ad885c..b409a98bc52 100644
--- a/addons/project/security/ir.model.access.csv
+++ b/addons/project/security/ir.model.access.csv
@@ -5,7 +5,7 @@
"access_account_analytic_account","account.analytic.account","analytic.model_account_analytic_account","project.group_project_user",1,1,1,1
"access_project_task_type_user","project.task.type user","model_project_task_type","project.group_project_user",1,1,1,1
"access_project_task_type","project.task.type","model_project_task_type","project.group_project_manager",1,1,1,1
-"access_project_task_manager","project.task manager","model_project_task","project.group_project_manager",0,0,0,0
+"access_project_task_manager","project.task manager","model_project_task","project.group_project_manager",1,1,1,1
"access_project_task","project.task","model_project_task","project.group_project_user",1,1,1,0
"access_project_task_work","project.task.work","model_project_task_work","project.group_project_user",1,1,1,1
"access_project_task_work_manager","project.task.work.manager","model_project_task_work","project.group_project_manager",1,1,1,1
@@ -36,7 +36,3 @@
"access_account_analytic_account_project_financial_user","account.analytic.account.project.financial.user","analytic.model_account_analytic_account","group_project_finance_user",1,0,0,0
"access_project_task_type_project_financial_user","project.task.type.project.financial.user","model_project_task_type","group_project_finance_user",1,0,0,0
"access_project_vs_hours_project_financial_user","project.vs.hours.project.financial.user","model_project_vs_hours","group_project_finance_user",1,0,0,0
-"access_project_project","project.project","model_project_project","group_project_finance_user",1,0,0,0
-"access_project_task","project.task","model_project_task","group_project_finance_user",1,0,0,0
-"access_report_project_task_user","report.project.task.user","model_report_project_task_user","group_project_finance_user",1,0,0,0
-"access_project_task_type","project.task.type","model_project_task_type","group_project_finance_user",1,0,0,0
diff --git a/addons/project_gtd/security/ir.model.access.csv b/addons/project_gtd/security/ir.model.access.csv
index cd79da5eda5..0ec1534dfcf 100644
--- a/addons/project_gtd/security/ir.model.access.csv
+++ b/addons/project_gtd/security/ir.model.access.csv
@@ -9,5 +9,3 @@
"access_project_gtd_timebox_system","project.gtd.timebox system","model_project_gtd_timebox","base.group_system",1,1,1,1
"access_project_gtd_context_finacial_user","project.gtd.context.financial.user","model_project_gtd_context","project.group_project_finance_user",1,0,0,0
"access_project_gtd_timebox_finacial_user","project.gtd.timebox.financial.user","model_project_gtd_timebox","project.group_project_finance_user",1,0,0,0
-"access_project_gtd_context","project.gtd.context","model_project_gtd_context","project.group_project_finance_user",1,0,0,0
-"access_project_gtd_timebox","project.gtd.timebox","model_project_gtd_timebox","project.group_project_finance_user",1,0,0,0
diff --git a/addons/project_issue/report/project_issue_report_view.xml b/addons/project_issue/report/project_issue_report_view.xml
index afa9be4482c..dd09592916d 100644
--- a/addons/project_issue/report/project_issue_report_view.xml
+++ b/addons/project_issue/report/project_issue_report_view.xml
@@ -56,7 +56,7 @@
+ />
-
-
-
- Phuong
-
- phu
- phu
-
-
- Anthony
-
- al
- al
-
-
- Quentin
-
- qdp
- qdp
-
-
- Francois
-
- fpi
- fpi
-
-
- Julien
-
- jth
- jth
-
-
- Alien
-
- apr
- apr
-
-
- Fabian
-
- fbs
- fbs
-
+
-
+
Analyst
-
+
Project Manager
-
+
Technical Leader
-
+
Developer
-
+
Designer
-
+
Tester
-
+
Project Finacial Manager
-
-
-
- open
- normal
- Integrate an Sale and Warehouse Management.
-
-
- Integrate an Sale and Warehouse Management.
-
+
@@ -119,8 +60,8 @@ This Demo data file includes Users, Human Resources, Projects and it' members li
30
-
-
+
+
@@ -129,8 +70,8 @@ This Demo data file includes Users, Human Resources, Projects and it' members li
20
-
-
+
+
@@ -139,8 +80,8 @@ This Demo data file includes Users, Human Resources, Projects and it' members li
20
-
-
+
+
@@ -149,8 +90,8 @@ This Demo data file includes Users, Human Resources, Projects and it' members li
90
-
-
+
+
@@ -159,8 +100,8 @@ This Demo data file includes Users, Human Resources, Projects and it' members li
30
-
-
+
+
@@ -169,8 +110,8 @@ This Demo data file includes Users, Human Resources, Projects and it' members li
10
-
-
+
+
@@ -221,173 +162,82 @@ This Demo data file includes Users, Human Resources, Projects and it' members li
-
-
-
- 2
-
- Prepare Requirements Document
+
-
-
-
- 2
-
- Make SRS
+
-
-
-
- 2
-
- Design Use Cases
+
-
-
-
- 2
-
- Budget Planning
+
-
-
-
- 2
-
- Quality Planning
+
-
-
-
- 2
-
- Risk Management Planning
+
-
-
-
- 2
-
- Create Project Schedules
+
-
-
-
- 2
-
- Dataflow Design
+
-
-
-
- 2
-
- User Interface Design
+
-
-
-
- 2
-
- Develop Module in Sale Management
+
-
-
-
- 2
-
- Develop module in Warehouse
+
-
-
-
- 2
-
- Integrate Modules
+
-
-
-
- 2
-
- Unit Testing
+
-
-
-
- 2
-
- Regression Test
+
-
-
-
- 2
-
- Documentation
+
-
-
-
-
- 2
-
- Performance Tuning
+
-
-
-
- 2
-
- Deploy and Review on Customer System
+
-
-
-
- 2
-
- Training and Presentation
+
-
+
-
+
diff --git a/addons/project_long_term/project_long_term_view.xml b/addons/project_long_term/project_long_term_view.xml
index 7e5f9d8db94..5e6ccebfe75 100644
--- a/addons/project_long_term/project_long_term_view.xml
+++ b/addons/project_long_term/project_long_term_view.xml
@@ -13,9 +13,9 @@
project.resource.allocation
gantt
-
-
-
+
+
+
@@ -373,13 +373,13 @@
id="menu_project_phase" parent="base.menu_project_long_term" sequence="1"/>
+ name="Resource Allocations" parent="base.menu_project_long_term" sequence="2"/>
-
+
diff --git a/addons/project_long_term/security/ir.model.access.csv b/addons/project_long_term/security/ir.model.access.csv
index 23b0da1a99e..ecb10470af2 100644
--- a/addons/project_long_term/security/ir.model.access.csv
+++ b/addons/project_long_term/security/ir.model.access.csv
@@ -14,8 +14,3 @@
"access_resource_calendar_financial_user","resource.calendar.financial.user","resource.model_resource_calendar","project.group_project_finance_user",1,0,0,0
"access_resource_calendar_financial_user","resource.calendar.financial.user","resource.model_resource_calendar_leaves","project.group_project_finance_user",1,0,0,0
"access_project_resource_allocation_manager","project.resource.allocation.manager","model_project_resource_allocation","project.group_project_manager",1,1,1,1
-"access_resource_resource","resource.resource","model_resource_resource","project.group_project_finance_user",1,0,0,0
-"access_project_phase","project.phase","model_project_phase","project.group_project_finance_user",1,0,0,0
-"access_project_resource_allocation","project.resource.allocation","model_project_resource_allocation","project.group_project_finance_user",1,0,0,0
-"access_resource_calendar","resource.calendar","resource.model_resource_calendar","project.group_project_finance_user",1,0,0,0
-"access_resource_calendar_leaves","resource.calendar.leaves","resource.model_resource_calendar_leaves","project.group_project_finance_user",1,0,0,0
diff --git a/addons/project_long_term/test/schedule_phase_tasks.yml b/addons/project_long_term/test/schedule_phase_tasks.yml
index 150d80af822..aa54fa1ac57 100644
--- a/addons/project_long_term/test/schedule_phase_tasks.yml
+++ b/addons/project_long_term/test/schedule_phase_tasks.yml
@@ -4,13 +4,13 @@
!record {model: project.project, id: project_project_project0}:
name: Develop an outlook-openerp synchronization plugin
members:
- - project_long_term.res_users_project_manager
- - project_long_term.res_users_technical_leader
- - project_long_term.res_users_developer
- - project_long_term.res_users_designer
- - project_long_term.res_users_tester
- - project_long_term.res_users_analyst
- - project_long_term.res_users_finacial_manager
+ - project.res_users_project_manager
+ - project.res_users_technical_leader
+ - project.res_users_developer
+ - project.res_users_designer
+ - project.res_users_tester
+ - project.res_users_analyst
+ - project.res_users_finacial_manager
-
Create phase 'Develop GUI' in Outlook
-
@@ -40,7 +40,7 @@
state: draft
phase_id: project_phase_phase0
project_id: project_project_project0
- user_id: project_long_term.res_users_developer
+ user_id: project.res_users_developer
-
Create the phase task 'Develop GUI for Modules Configuration'
@@ -52,7 +52,7 @@
state: draft
phase_id: project_phase_phase0
project_id: project_project_project0
- user_id: project_long_term.res_users_developer
+ user_id: project.res_users_developer
-
Create the phase task 'Develop GUI for OpenERP Synchronisation'
-
@@ -63,7 +63,7 @@
state: draft
phase_id: project_phase_phase0
project_id: project_project_project0
- user_id: project_long_term.res_users_developer
+ user_id: project.res_users_developer
-
Create the phase task 'Design required GUI/Menus'
-
@@ -74,7 +74,7 @@
state: draft
phase_id: project_phase_phase0
project_id: project_project_project0
- user_id: project_long_term.res_users_designer
+ user_id: project.res_users_designer
-
Schedule phase tasks
diff --git a/addons/project_long_term/test/schedule_project_tasks.yml b/addons/project_long_term/test/schedule_project_tasks.yml
index dfc4cf1fc5e..04a05437487 100644
--- a/addons/project_long_term/test/schedule_project_tasks.yml
+++ b/addons/project_long_term/test/schedule_project_tasks.yml
@@ -4,13 +4,13 @@
!record {model: project.project, id: project_project_project1}:
name: Develop a thunderbird-openerp synchronization plugin
members:
- - project_long_term.res_users_project_manager
- - project_long_term.res_users_technical_leader
- - project_long_term.res_users_developer
- - project_long_term.res_users_designer
- - project_long_term.res_users_tester
- - project_long_term.res_users_analyst
- - project_long_term.res_users_finacial_manager
+ - project.res_users_project_manager
+ - project.res_users_technical_leader
+ - project.res_users_developer
+ - project.res_users_designer
+ - project.res_users_tester
+ - project.res_users_analyst
+ - project.res_users_finacial_manager
-
Create phase 'Develop GUI' in thunderbird
@@ -41,7 +41,7 @@
state: draft
phase_id: project_phase_phase1
project_id: project_project_project1
- user_id: project_long_term.res_users_developer
+ user_id: project.res_users_developer
-
Create the phase task 'Develop GUI for Modules Configuration'
@@ -53,7 +53,7 @@
state: draft
phase_id: project_phase_phase1
project_id: project_project_project1
- user_id: project_long_term.res_users_developer
+ user_id: project.res_users_developer
-
Create the phase task 'Develop GUI for OpenERP Synchronisation'
-
@@ -64,7 +64,7 @@
state: draft
phase_id: project_phase_phase1
project_id: project_project_project1
- user_id: project_long_term.res_users_developer
+ user_id: project.res_users_developer
-
Create the phase task 'Design required GUI/Menus'
-
@@ -75,7 +75,7 @@
state: draft
phase_id: project_phase_phase1
project_id: project_project_project1
- user_id: project_long_term.res_users_designer
+ user_id: project.res_users_designer
-
diff --git a/addons/project_mailgate/__openerp__.py b/addons/project_mailgate/__openerp__.py
index 77802362c7d..a5e7fd46f4c 100644
--- a/addons/project_mailgate/__openerp__.py
+++ b/addons/project_mailgate/__openerp__.py
@@ -29,12 +29,12 @@
"depends": ["project", "mail_gateway"],
"description": """This module is an interface that synchronises mails with OpenERP Project Task.
-It allows creating tasks as soon as a new mail arrives in our configured mail server.
-Moreover, it keeps track of all further communications and task states.
+It allows creating tasks as soon as a new mail arrives in our configured mail server.
+Moreover, it keeps track of all further communications and task states.
""",
"init_xml": [],
"update_xml": ["security/ir.model.access.csv",
- "project_mailgate_view.xml",
+ "project_mailgate_view.xml",
],
'demo_xml': [
],
diff --git a/addons/project_mailgate/security.moved/ir.model.access.csv b/addons/project_mailgate/security.moved/ir.model.access.csv
new file mode 100644
index 00000000000..1a840d89e9a
--- /dev/null
+++ b/addons/project_mailgate/security.moved/ir.model.access.csv
@@ -0,0 +1,3 @@
+"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
+"access_mailgate_message_project_manager","project.mailgate.message.manager","mail_gateway.model_mailgate_message","project.group_project_manager",1,1,1,0
+"access_mailgate_message_project_user","project.mailgate.message.user","mail_gateway.model_mailgate_message","project.group_project_user",1,1,1,0
diff --git a/addons/project_messages/security/ir.model.access.csv b/addons/project_messages/security/ir.model.access.csv
index 594ba33f459..e31ffd860cb 100644
--- a/addons/project_messages/security/ir.model.access.csv
+++ b/addons/project_messages/security/ir.model.access.csv
@@ -3,4 +3,3 @@
"access_project_messages_manager","project.messages manager","model_project_messages","project.group_project_manager",1,1,1,1
"access_project_messages_financial_user","project.messages.financial.user","model_project_messages","project.group_project_finance_user",1,0,0,0
"access_project_message_project_user","project.project.user","model_project_project","project.group_project_user",1,0,0,0
-"access_project_messages","project.messages","model_project_messages","project.group_project_finance_user",1,0,0,0
diff --git a/addons/project_planning/security/ir.model.access.csv b/addons/project_planning/security/ir.model.access.csv
index 053237c6c3b..ddd0729adfe 100644
--- a/addons/project_planning/security/ir.model.access.csv
+++ b/addons/project_planning/security/ir.model.access.csv
@@ -13,4 +13,3 @@
"access_report_account_analytic_planning_stat_financial_user","report_account_analytic.planning.stat.financial.user","model_report_account_analytic_planning_stat","project.group_project_finance_user",1,0,0,0
"access_report_account_analytic_planning__project_manager","report_account_analytic.planning.manager","model_report_account_analytic_planning_user","project.group_project_manager",1,1,1,1
"access_report_account_analytic_planning__project_finance_user","report_account_analytic.planning.finance.user","model_report_account_analytic_planning_user","project.group_project_finance_user",1,0,0,0
-"access_report_account_analytic_planning","report_account_analytic.planning","model_report_account_analytic_planning","project.group_project_finance_user",1,0,0,0
diff --git a/addons/project_scrum/report/_burndown.py b/addons/project_scrum/report/_burndown.py
index 6f0db24bcb6..b2cedd85881 100644
--- a/addons/project_scrum/report/_burndown.py
+++ b/addons/project_scrum/report/_burndown.py
@@ -19,44 +19,60 @@
#
##############################################################################
-
-from mx import DateTime
+from datetime import datetime
+from dateutil.relativedelta import relativedelta
import time
+import pooler
+from report.render import render
+class external_pdf(render):
+ def __init__(self, pdf):
+ render.__init__(self)
+ self.pdf = pdf
+ self.output_type='pdf'
+ def _render(self):
+ return self.pdf
-def compute_burndown(cr, uid, tasks_id, date_start, date_stop):
+def compute_burndown(cr, uid, tasks_ids, date_start, date_stop):
latest = False
- if len(tasks_id):
- cr.execute('select id,create_date,state,planned_hours from project_task where id IN %s order by create_date',(tuple(tasks_id),))
- tasks = cr.fetchall()
-
- cr.execute('select w.date,w.hours from project_task_work w left join project_task t on (t.id=w.task_id) where t.id IN %s and t.state in (%s,%s) order by date',(tuple(tasks_id),'open','progress',))
- tasks2 = cr.fetchall()
-
- cr.execute('select date_end,planned_hours from project_task where id IN %s and state in (%s,%s) order by date_end' ,(tuple(tasks_id),'cancelled','done',))
- tasks2 += cr.fetchall()
- tasks2.sort()
+ pool = pooler.get_pool(cr.dbname)
+ project_task_pool = pool.get('project.task')
+ task_work_pool = pool.get('project.task.work')
+ if len(tasks_ids):
+ tasks_ids = project_task_pool.search(cr, uid, [('id','in',tasks_ids)], order='create_date')
+ tasks = project_task_pool.read(cr, uid, tasks_ids, ['create_date','planned_hours','state'])
+ tasks_ids = project_task_pool.search(cr, uid, [('id','in',tasks_ids),('state', 'in', ['open','progress'])], order='create_date')
+ work_ids = task_work_pool.search(cr, uid, [('task_id','in',tasks_ids)], order='date')
+ close_tasks = task_work_pool.read(cr, uid, work_ids, ['date','hours','state'])
+ tasks_ids = project_task_pool.search(cr, uid, [('id','in',tasks_ids),('state', 'in', ['cancelled','done'])], order='date_end')
+ close_tasks += project_task_pool.read(cr, uid, tasks_ids, ['date_end','planned_hours'])
+
else:
tasks = []
- tasks2 = []
+ close_tasks = []
current_date = date_start
total = 0
done = 0
result = []
- while current_date<=date_stop:
- while len(tasks) and tasks[0][1] and tasks[0][1][:10]<=current_date:
+ while datetime.strptime(current_date, '%Y-%m-%d') <= datetime.strptime(date_stop, '%Y-%m-%d'):
+ while len(tasks) and tasks[0]['create_date'] and datetime.strptime(tasks[0]['create_date'][:10], '%Y-%m-%d')<=datetime.strptime(current_date, '%Y-%m-%d'):
latest = tasks.pop(0)
- total += latest[3]
+ total += float(latest.get('planned_hours',0.0))
i = 0
- while ires:
result.append(res)
return result
@@ -92,7 +78,7 @@ class report_tasks(report_int):
ar.draw(canv)
canv.close()
- self.obj = external_pdf(io.getvalue())
+ self.obj = _burndown.external_pdf(io.getvalue())
self.obj.render()
return (self.obj.pdf, 'pdf')
report_tasks('report.scrum.sprint.burndown')
diff --git a/addons/project_scrum/report/task_burndown.py b/addons/project_scrum/report/task_burndown.py
index 50a02792ced..14807126503 100644
--- a/addons/project_scrum/report/task_burndown.py
+++ b/addons/project_scrum/report/task_burndown.py
@@ -20,53 +20,14 @@
##############################################################################
import StringIO
-
from report.render import render
from report.interface import report_int
-
-from mx import DateTime
+from datetime import datetime
import time
-
from pychart import *
import pychart.legend
-
import _burndown
-class external_pdf(render):
- def __init__(self, pdf):
- render.__init__(self)
- self.pdf = pdf
- self.output_type='pdf'
- def _render(self):
- return self.pdf
-
-def burndown_chart(cr, uid, tasks_id, date_start, date_stop):
- latest = False
-
- cr.execute('select id,date_start,state,planned_hours from project_task where id IN %s order by date_start'(tuple(tasks_id),))
- tasks = cr.fetchall()
- cr.execute('select id,date_end,state,planned_hours*progress/100 from project_task where id IN %s and state in (%s,%s) order by date_end', (tuple(tasks_id),'progress','done',))
- tasks2 = cr.fetchall()
- current_date = date_start
- total = 0
- done = 0
- result = []
- while current_date<=date_stop:
- while len(tasks) and tasks[0][1] and tasks[0][1][:10]<=current_date:
- total += tasks.pop(0)[3]
- while len(tasks2) and tasks2[0][1] and tasks2[0][1][:10]<=current_date:
- t2 = tasks2.pop(0)
- if t2[2]<>'cancel':
- done += t2[3]
- else:
- total -= t2[3]
- result.append( (int(time.mktime(time.strptime(current_date,'%Y-%m-%d'))), total-done) )
- current_date = (DateTime.strptime(current_date, '%Y-%m-%d') + DateTime.RelativeDateTime(days=1)).strftime('%Y-%m-%d')
- if not len(tasks) and not len(tasks2):
- break
- result.append( (int(time.mktime(time.strptime(date_stop,'%Y-%m-%d'))), 0) )
- return result
-
class report_tasks(report_int):
def create(self, cr, uid, ids, datas, context=None):
if context is None:
@@ -87,24 +48,19 @@ class report_tasks(report_int):
if res[1] and datas['date_stop']
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Phuong
+
+
+
+
+
+
+
+
+ Francois
+
+
+
+
+
+
+
+ Julien
+
+
+
+
+
+
+
+ Alien
+
+
+
+
+
+
+
+ Fabian
+
+
+
+
+
+
+
+
+
diff --git a/addons/project_timesheet/project_timesheet_view.xml b/addons/project_timesheet/project_timesheet_view.xml
index 65cd4ff2690..018c34d4c34 100644
--- a/addons/project_timesheet/project_timesheet_view.xml
+++ b/addons/project_timesheet/project_timesheet_view.xml
@@ -38,5 +38,7 @@
+
diff --git a/addons/project_timesheet/security/ir.model.access.csv b/addons/project_timesheet/security/ir.model.access.csv
index a05285b5b76..8f10009fa12 100644
--- a/addons/project_timesheet/security/ir.model.access.csv
+++ b/addons/project_timesheet/security/ir.model.access.csv
@@ -6,34 +6,3 @@
"access_hr_timesheet_sheet_sheet_system","hr.timesheet.sheet.sheet.system","hr_timesheet_sheet.model_hr_timesheet_sheet_sheet","base.group_system",1,1,1,1
"access_project_timesheet_project_financial_user","hr_timesheet_sheet.sheet.project.financial.user","hr_timesheet_sheet.model_hr_timesheet_sheet_sheet","project.group_project_finance_user",1,1,1,0
"access_report_timesheet_task_user_financial_user","report.timesheet.task.user.financial.user","model_report_timesheet_task_user","project.group_project_finance_user",1,0,0,0
-"access_hr_analytic_timesheet","hr.analytic.timesheet","hr_timesheet_sheet.model_hr_analytic_timesheet","project.group_project_finance_user",1,1,0,0
-"access_account_invoice","account.invoice","account.model_account_invoice","project.group_project_finance_user",1,1,0,0
-"access_account_bank_statement","account.bank.statement","account.model_account_bank_statement","project.group_project_finance_user",1,1,0,0
-"access_account_move_line","account.move.line","account.model_account_move_line","project.group_project_finance_user",1,1,0,0
-"access_account_move","account.move","account.model_account_move","project.group_project_finance_user",1,1,0,0
-"access_account_analytic_line","account.analytic.line","account.model_account_analytic_line","project.group_project_finance_user",1,1,1,0
-"access_account_move_line","account.move.line","account.model_account_move_line","project.group_project_finance_user",1,1,0,0
-"access_account_subscription","account.subscription","account.model_account_subscription","project.group_project_finance_user",1,1,0,0
-"access_account_period","account.period","account.model_account_period","project.group_project_finance_user",1,1,0,0
-"access_account_analytic_journal","account.analytic.journal","account.model_account_analytic_journal","project.group_project_finance_user",1,1,0,0
-"access_account_invoice_report","account.invoice.report","account.model_account_invoice_report","project.group_project_finance_user",1,1,0,0
-"access_account_entries_report","account.entries.report","account.model_account_entries_report","project.group_project_finance_user",1,1,0,0
-"access_analytic_entries_report","analytic.entries.report","account.model_analytic_entries_report","project.group_project_finance_user",1,1,0,0
-"access_account_journal_view","account.journal.view","account.model_account_journal_view","project.group_project_finance_user",1,1,0,0
-"access_account_account_type","account.account.type","account.model_account_account_type","project.group_project_finance_user",1,1,0,0
-"access_account_tax_code","account.tax.code","account.model_account_tax_code","project.group_project_finance_user",1,1,0,0
-"access_account_fiscalyear","account.fiscalyear","account.model_account_fiscalyear","project.group_project_finance_user",1,1,0,0
-"access_account_account","account.account","account.model_account_account","project.group_project_finance_user",1,1,0,0
-"access_account_journal","account.journal","account.model_account_journal","project.group_project_finance_user",1,1,0,0
-"access_account_tax","account.tax","account.model_account_tax","project.group_project_finance_user",1,1,0,0
-"access_account_fiscal_position","account.fiscal.position","account.model_account_fiscal_position","project.group_project_finance_user",1,1,0,0
-"access_account_chart_template","account.chart.template","account.model_account_chart_template","project.group_project_finance_user",1,1,0,0
-"access_account_account_template","account.account.template","account.model_account_account_template","project.group_project_finance_user",1,1,0,0
-"access_account_tax_template","account.tax.template","account.model_account_tax_template","project.group_project_finance_user",1,1,0,0
-"access_account_tax_code_template","account.tax.code.template","account.model_account_tax_code_template","project.group_project_finance_user",1,1,0,0
-"access_account_fiscal_position_template","account.fiscal.position.template","account.model_account_fiscal_position_template","project.group_project_finance_user",1,1,0,0
-"access_account_analytic_journal","account.analytic.journal","account.model_account_analytic_journal","project.group_project_finance_user",1,1,0,0
-"access_account_model","account.model","account.model_account_model","project.group_project_finance_user",1,1,0,0
-"access_account_payment_term","account.payment.term","account.model_account_payment_term","project.group_project_finance_user",1,1,0,0
-"access_res_currency","res.currency","base.model_res_currency","project.group_project_finance_user",1,1,0,0
-"access_account_analytic_account","account.analytic.account","analytic.model_account_analytic_account","project.group_project_finance_user",1,1,0,0