From 696233dfd628c15e1b714a1edca7c3843a361e72 Mon Sep 17 00:00:00 2001
From: "ron@tinyerp.com" <>
Date: Fri, 1 Oct 2010 20:13:57 +0530
Subject: [PATCH 1/9] [IMP]: Project module-task menu :Project View-red for
ovepassed deadline
bzr revid: ron@tinyerp.com-20101001144357-lzmauail17hoytdc
---
addons/project/project_view.xml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/addons/project/project_view.xml b/addons/project/project_view.xml
index 6efc64dd494..4be52e78c1e 100644
--- a/addons/project/project_view.xml
+++ b/addons/project/project_view.xml
@@ -112,7 +112,7 @@
-
+
@@ -302,7 +302,7 @@
tree
-
+
From fdc839079f63171745b9dc18d86035d74b6c0a2c Mon Sep 17 00:00:00 2001
From: "ron@tinyerp.com" <>
Date: Mon, 4 Oct 2010 18:40:33 +0530
Subject: [PATCH 2/9] [FIX]:Issue Menu:-Issue will be Convert Task Only when
Issue in To Do State -- progressbar on issue to related with task
progressbar >> Long Term Planning Menu:The Gantt View Display Phase Name
---calender view and Gantt View Display All Phases
bzr revid: ron@tinyerp.com-20101004131033-czvqbsgeebo2wu0w
---
addons/project/project.py | 15 ++-
addons/project_issue/project_issue.py | 95 +++++++++++--------
.../project_long_term_view.xml | 8 +-
3 files changed, 69 insertions(+), 49 deletions(-)
diff --git a/addons/project/project.py b/addons/project/project.py
index 996e79a1f8b..75be42823bd 100644
--- a/addons/project/project.py
+++ b/addons/project/project.py
@@ -316,7 +316,7 @@ class project(osv.osv):
if child_ids:
self.setActive(cr, uid, child_ids, value, context=None)
return True
-
+
project()
class users(osv.osv):
@@ -523,7 +523,7 @@ class task(osv.osv):
if not project_id: return False
task = self.browse(cr, uid, project_id, context=context)
project = task.project_id
- res = self.do_close(cr, uid, [project_id], context=context)
+ res = self.do_close(cr, uid, [project_id], context=context)
if project.warn_manager or project.warn_customer:
return {
'name': _('Send Email after close task'),
@@ -534,7 +534,7 @@ class task(osv.osv):
'target': 'new',
'nodestroy': True,
'context': {'active_id': task.id}
- }
+ }
return res
def do_close(self, cr, uid, ids, context=None):
@@ -576,6 +576,8 @@ class task(osv.osv):
if context is None:
context = {}
request = self.pool.get('res.request')
+ p_issue = self.pool.get('project.issue')
+
for task in self.browse(cr, uid, ids, context=context):
project = task.project_id
if project and project.warn_manager and project.user_id.id and (project.user_id.id != uid):
@@ -590,10 +592,15 @@ class task(osv.osv):
})
self.write(cr, uid, [task.id], {'state': 'open'})
+ issue_id=p_issue.search(cr,uid,[('task_id','=',task.id)])
+ p_issue.write(cr, uid,issue_id, {'progress':0.0})
+
return True
def do_cancel(self, cr, uid, ids, *args):
request = self.pool.get('res.request')
+ p_issue = self.pool.get('project.issue')
+ print "Cancel"
tasks = self.browse(cr, uid, ids)
for task in tasks:
project = task.project_id
@@ -609,7 +616,9 @@ class task(osv.osv):
})
message = _('Task ') + " '" + task.name + "' "+ _("is Cancelled.")
self.log(cr, uid, task.id, message)
+ issue_id=p_issue.search(cr,uid,[('task_id','=',task.id)])
self.write(cr, uid, [task.id], {'state': 'cancelled', 'remaining_hours':0.0})
+ p_issue.write(cr, uid,issue_id, {'progress':100.0})
return True
def do_open(self, cr, uid, ids, *args):
diff --git a/addons/project_issue/project_issue.py b/addons/project_issue/project_issue.py
index 2788b59ed7d..6496e93f2e9 100644
--- a/addons/project_issue/project_issue.py
+++ b/addons/project_issue/project_issue.py
@@ -141,7 +141,7 @@ class project_issue(crm.crm_case, osv.osv):
else:
res[issue.id][field] = abs(float(duration))
return res
-
+
_columns = {
'id': fields.integer('ID'),
'name': fields.char('Name', size=128, required=True),
@@ -220,48 +220,59 @@ class project_issue(crm.crm_case, osv.osv):
data_obj = self.pool.get('ir.model.data')
task_obj = self.pool.get('project.task')
- if context is None:
- context = {}
- result = data_obj._get_id(cr, uid, 'project', 'view_task_search_form')
- res = data_obj.read(cr, uid, result, ['res_id'])
- id2 = data_obj._get_id(cr, uid, 'project', 'view_task_form2')
- id3 = data_obj._get_id(cr, uid, 'project', 'view_task_tree2')
- if id2:
- id2 = data_obj.browse(cr, uid, id2, context=context).res_id
- if id3:
- id3 = data_obj.browse(cr, uid, id3, context=context).res_id
+ for curr_task in case_obj.browse(cr, uid,ids):
+ if curr_task.state in ['open']:
+ if context is None:
+ context = {}
+ result = data_obj._get_id(cr, uid, 'project', 'view_task_search_form')
+ res = data_obj.read(cr, uid, result, ['res_id'])
+ id2 = data_obj._get_id(cr, uid, 'project', 'view_task_form2')
+ id3 = data_obj._get_id(cr, uid, 'project', 'view_task_tree2')
+ if id2:
+ id2 = data_obj.browse(cr, uid, id2, context=context).res_id
+ if id3:
+ id3 = data_obj.browse(cr, uid, id3, context=context).res_id
- for bug in case_obj.browse(cr, uid, ids, context=context):
- new_task_id = task_obj.create(cr, uid, {
- 'name': bug.name,
- 'partner_id': bug.partner_id.id,
- 'description':bug.description,
- 'date': bug.date,
- 'project_id': bug.project_id.id,
- 'priority': bug.priority,
- 'user_id': bug.assigned_to.id,
- 'planned_hours': 0.0,
- })
+ for bug in case_obj.browse(cr, uid, ids, context=context):
+ new_task_id = task_obj.create(cr, uid, {
+ 'name': bug.name,
+ 'partner_id': bug.partner_id.id,
+ 'description':bug.description,
+ 'date': bug.date,
+ 'project_id': bug.project_id.id,
+ 'priority': bug.priority,
+ 'user_id': bug.assigned_to.id,
+ 'planned_hours': 0.0,
+ })
- vals = {
- 'task_id': new_task_id,
- 'state':'open'
- }
- case_obj.write(cr, uid, [bug.id], vals)
+ vals = {
+ 'task_id': new_task_id,
+ 'state':'open'
+ }
+ case_obj.write(cr, uid, [bug.id], vals)
+
+ return {
+ 'name': _('Tasks'),
+ 'view_type': 'form',
+ 'view_mode': 'form,tree',
+ 'res_model': 'project.task',
+ 'res_id': int(new_task_id),
+ 'view_id': False,
+ 'views': [(id2,'form'),(id3,'tree'),(False,'calendar'),(False,'graph')],
+ 'type': 'ir.actions.act_window',
+ 'search_view_id': res['res_id'],
+ 'nodestroy': True
+ }
+ elif curr_task.state in ['done', 'cancel']:
+ raise osv.except_osv(_("Warning !"), _("Closed/Cancelled \
+Issue Could not convert into Task"))
+ return True
+ else:
+ raise osv.except_osv(_("Warning !"), _("Issue should be in \
+\'To Do\' state before converting to Task."))
+ return True
- return {
- 'name': _('Tasks'),
- 'view_type': 'form',
- 'view_mode': 'form,tree',
- 'res_model': 'project.task',
- 'res_id': int(new_task_id),
- 'view_id': False,
- 'views': [(id2,'form'),(id3,'tree'),(False,'calendar'),(False,'graph')],
- 'type': 'ir.actions.act_window',
- 'search_view_id': res['res_id'],
- 'nodestroy': True
- }
def _convert(self, cr, uid, ids, xml_id, context=None):
data_obj = self.pool.get('ir.model.data')
@@ -288,11 +299,11 @@ class project_issue(crm.crm_case, osv.osv):
if not stage.on_change:
return {'value':{}}
return {'value':{}}
-
+
def onchange_task_id(self, cr, uid, ids, task_id, context=None):
if context is None:
context = {}
- result = {}
+ result = {}
if not task_id:
return {'value':{}}
task = self.pool.get('project.task').browse(cr, uid, task_id, context)
@@ -442,7 +453,7 @@ class project_issue(crm.crm_case, osv.osv):
@param **args: Return Dictionary of Keyword Value
"""
return True
-
+
def copy(self, cr, uid, id, default=None, context=None):
if not context:
context={}
diff --git a/addons/project_long_term/project_long_term_view.xml b/addons/project_long_term/project_long_term_view.xml
index 3412ba7ca08..c7122726f75 100644
--- a/addons/project_long_term/project_long_term_view.xml
+++ b/addons/project_long_term/project_long_term_view.xml
@@ -15,7 +15,7 @@
-
+
@@ -326,7 +326,7 @@
# ------------------------------------------------------
# Project Task
# ------------------------------------------------------
-
+
phase.task.form2project.task
@@ -348,8 +348,8 @@
-
-
+
+
Date: Tue, 5 Oct 2010 13:01:06 +0530
Subject: [PATCH 3/9] [ADD]:Project->Time Tracking->Add Partner Invoices Menu
bzr revid: ron@tinyerp.com-20101005073106-4x1lvc7kcaztzb60
---
addons/account/account_invoice_view.xml | 19 +++++++++++++++++++
addons/hr_timesheet/hr_timesheet_view.xml | 4 ++--
2 files changed, 21 insertions(+), 2 deletions(-)
diff --git a/addons/account/account_invoice_view.xml b/addons/account/account_invoice_view.xml
index 1db17ed16cf..634caa86e75 100644
--- a/addons/account/account_invoice_view.xml
+++ b/addons/account/account_invoice_view.xml
@@ -1,6 +1,9 @@
+
+
-
+
project.scrum.sprint.calendarproject.scrum.sprint
@@ -204,7 +204,7 @@
-
+
project.scrum.sprint.treeproject.scrum.sprint
@@ -357,7 +357,7 @@
-
+
project.scrum.meeting.calendarproject.scrum.meeting
@@ -369,7 +369,7 @@
-
+
project.scrum.meeting.treeproject.scrum.meeting
@@ -389,10 +389,11 @@
form
From 635e3389e9fcba904ede1ae7d57fec1f6b587608 Mon Sep 17 00:00:00 2001
From: "ron@tinyerp.com" <>
Date: Thu, 7 Oct 2010 14:13:14 +0530
Subject: [PATCH 7/9] [IMP] 5008 and 5009 Revert Changes
bzr revid: ron@tinyerp.com-20101007084314-iiqqleknx8j1vy9c
---
addons/account/account_invoice_view.xml | 18 ----
addons/project/project.py | 7 --
addons/project_issue/project_issue.py | 87 +++++++++----------
.../project_long_term_view.xml | 2 +-
.../wizard/project_scrum_email_view.xml | 2 +
5 files changed, 42 insertions(+), 74 deletions(-)
diff --git a/addons/account/account_invoice_view.xml b/addons/account/account_invoice_view.xml
index 634caa86e75..e6323ae3a4b 100644
--- a/addons/account/account_invoice_view.xml
+++ b/addons/account/account_invoice_view.xml
@@ -1,10 +1,6 @@
-
-
-
@@ -439,19 +435,6 @@
Most of customer invoices are automatically generated in draft mode by OpenERP flows, following a purchase order for instance. Review, confirm or cancel, pay or refund your customers' invoices here. A manual invoice can be created here.
-
- Partner Invoice
- account.invoice
- form
- tree,form,calendar,graph
-
- [('type','=','out_invoice')]
- {'type':'out_invoice', 'journal_type': 'sale'}
-
- Most of customer invoices are automatically generated in draft mode by OpenERP flows, following a purchase order for instance. Review, confirm or cancel, pay or refund your customers' invoices here. A manual invoice can be created here.
-
-
-
@@ -467,7 +450,6 @@
-
Vendor Invoices
diff --git a/addons/project/project.py b/addons/project/project.py
index 75be42823bd..abae697cacf 100644
--- a/addons/project/project.py
+++ b/addons/project/project.py
@@ -576,7 +576,6 @@ class task(osv.osv):
if context is None:
context = {}
request = self.pool.get('res.request')
- p_issue = self.pool.get('project.issue')
for task in self.browse(cr, uid, ids, context=context):
project = task.project_id
@@ -592,15 +591,11 @@ class task(osv.osv):
})
self.write(cr, uid, [task.id], {'state': 'open'})
- issue_id=p_issue.search(cr,uid,[('task_id','=',task.id)])
- p_issue.write(cr, uid,issue_id, {'progress':0.0})
return True
def do_cancel(self, cr, uid, ids, *args):
request = self.pool.get('res.request')
- p_issue = self.pool.get('project.issue')
- print "Cancel"
tasks = self.browse(cr, uid, ids)
for task in tasks:
project = task.project_id
@@ -616,9 +611,7 @@ class task(osv.osv):
})
message = _('Task ') + " '" + task.name + "' "+ _("is Cancelled.")
self.log(cr, uid, task.id, message)
- issue_id=p_issue.search(cr,uid,[('task_id','=',task.id)])
self.write(cr, uid, [task.id], {'state': 'cancelled', 'remaining_hours':0.0})
- p_issue.write(cr, uid,issue_id, {'progress':100.0})
return True
def do_open(self, cr, uid, ids, *args):
diff --git a/addons/project_issue/project_issue.py b/addons/project_issue/project_issue.py
index 6496e93f2e9..83871e02b66 100644
--- a/addons/project_issue/project_issue.py
+++ b/addons/project_issue/project_issue.py
@@ -221,57 +221,48 @@ class project_issue(crm.crm_case, osv.osv):
task_obj = self.pool.get('project.task')
- for curr_task in case_obj.browse(cr, uid,ids):
- if curr_task.state in ['open']:
- if context is None:
- context = {}
- result = data_obj._get_id(cr, uid, 'project', 'view_task_search_form')
- res = data_obj.read(cr, uid, result, ['res_id'])
- id2 = data_obj._get_id(cr, uid, 'project', 'view_task_form2')
- id3 = data_obj._get_id(cr, uid, 'project', 'view_task_tree2')
- if id2:
- id2 = data_obj.browse(cr, uid, id2, context=context).res_id
- if id3:
- id3 = data_obj.browse(cr, uid, id3, context=context).res_id
+ if context is None:
+ context = {}
- for bug in case_obj.browse(cr, uid, ids, context=context):
- new_task_id = task_obj.create(cr, uid, {
- 'name': bug.name,
- 'partner_id': bug.partner_id.id,
- 'description':bug.description,
- 'date': bug.date,
- 'project_id': bug.project_id.id,
- 'priority': bug.priority,
- 'user_id': bug.assigned_to.id,
- 'planned_hours': 0.0,
- })
+ result = data_obj._get_id(cr, uid, 'project', 'view_task_search_form')
+ res = data_obj.read(cr, uid, result, ['res_id'])
+ id2 = data_obj._get_id(cr, uid, 'project', 'view_task_form2')
+ id3 = data_obj._get_id(cr, uid, 'project', 'view_task_tree2')
+ if id2:
+ id2 = data_obj.browse(cr, uid, id2, context=context).res_id
+ if id3:
+ id3 = data_obj.browse(cr, uid, id3, context=context).res_id
- vals = {
- 'task_id': new_task_id,
- 'state':'open'
- }
- case_obj.write(cr, uid, [bug.id], vals)
+ for bug in case_obj.browse(cr, uid, ids, context=context):
+ new_task_id = task_obj.create(cr, uid, {
+ 'name': bug.name,
+ 'partner_id': bug.partner_id.id,
+ 'description':bug.description,
+ 'date': bug.date,
+ 'project_id': bug.project_id.id,
+ 'priority': bug.priority,
+ 'user_id': bug.assigned_to.id,
+ 'planned_hours': 0.0,
+ })
- return {
- 'name': _('Tasks'),
- 'view_type': 'form',
- 'view_mode': 'form,tree',
- 'res_model': 'project.task',
- 'res_id': int(new_task_id),
- 'view_id': False,
- 'views': [(id2,'form'),(id3,'tree'),(False,'calendar'),(False,'graph')],
- 'type': 'ir.actions.act_window',
- 'search_view_id': res['res_id'],
- 'nodestroy': True
- }
- elif curr_task.state in ['done', 'cancel']:
- raise osv.except_osv(_("Warning !"), _("Closed/Cancelled \
-Issue Could not convert into Task"))
- return True
- else:
- raise osv.except_osv(_("Warning !"), _("Issue should be in \
-\'To Do\' state before converting to Task."))
- return True
+ vals = {
+ 'task_id': new_task_id,
+ 'state':'open'
+ }
+ case_obj.write(cr, uid, [bug.id], vals)
+
+ return {
+ 'name': _('Tasks'),
+ 'view_type': 'form',
+ 'view_mode': 'form,tree',
+ 'res_model': 'project.task',
+ 'res_id': int(new_task_id),
+ 'view_id': False,
+ 'views': [(id2,'form'),(id3,'tree'),(False,'calendar'),(False,'graph')],
+ 'type': 'ir.actions.act_window',
+ 'search_view_id': res['res_id'],
+ 'nodestroy': True
+ }
def _convert(self, cr, uid, ids, xml_id, context=None):
diff --git a/addons/project_long_term/project_long_term_view.xml b/addons/project_long_term/project_long_term_view.xml
index c7122726f75..6575d2e03ae 100644
--- a/addons/project_long_term/project_long_term_view.xml
+++ b/addons/project_long_term/project_long_term_view.xml
@@ -15,7 +15,7 @@
-
+
diff --git a/addons/project_scrum/wizard/project_scrum_email_view.xml b/addons/project_scrum/wizard/project_scrum_email_view.xml
index 5308bd34e89..d0d8723709e 100644
--- a/addons/project_scrum/wizard/project_scrum_email_view.xml
+++ b/addons/project_scrum/wizard/project_scrum_email_view.xml
@@ -13,7 +13,9 @@
+
+
From e848ed0cf4133f3c0827e81d13527dd1dbfa07e6 Mon Sep 17 00:00:00 2001
From: "ron@tinyerp.com" <>
Date: Tue, 12 Oct 2010 11:56:08 +0530
Subject: [PATCH 8/9] [IMP] ::Documents->Shared Repository:enlarge the FTP
server field,Documents-> descending by date and tooltip change and fix bug on
my document filter button::Reporting->Document Dashboard->group by year/Month
and default user_id context remove
bzr revid: ron@tinyerp.com-20101012062608-nvlyu9qag6zeyh5h
---
addons/document/board_document_view.xml | 6 ++--
addons/document/document.py | 7 ++--
addons/document/document_directory.py | 20 ++++++------
addons/document/document_view.xml | 6 ++--
addons/document/report/document_report.py | 8 +++--
.../document/report/document_report_view.xml | 32 +++++++------------
.../document_ftp/test/document_ftp_test2.yml | 2 +-
.../document_ftp/wizard/ftp_browse_view.xml | 2 +-
.../document_ftp/wizard/ftp_configuration.py | 2 +-
addons/hr_timesheet/hr_timesheet_view.xml | 1 +
addons/project/report/project_report.py | 2 +-
11 files changed, 41 insertions(+), 47 deletions(-)
diff --git a/addons/document/board_document_view.xml b/addons/document/board_document_view.xml
index 2bfc5a6f200..7ba8c498271 100644
--- a/addons/document/board_document_view.xml
+++ b/addons/document/board_document_view.xml
@@ -16,9 +16,7 @@
-
+ view_mode="tree,form"/>
+ />
).
#
@@ -15,7 +15,7 @@
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see .
+# along with this program. If not, see .
#
##############################################################################
@@ -44,13 +44,13 @@ class document_directory(osv.osv):
'child_ids': fields.one2many('document.directory', 'parent_id', 'Children'),
'file_ids': fields.one2many('ir.attachment', 'parent_id', 'Files'),
'content_ids': fields.one2many('document.directory.content', 'directory_id', 'Virtual Files'),
- 'type': fields.selection([
+ 'type': fields.selection([
('directory','Static Directory'),
('ressource','Folders per resource'),
],
'Type', required=True, select=1,
help="Defines directory's behaviour."),
-
+
'ressource_type_id': fields.many2one('ir.model', 'Resource model',
help="Select an object here and there will be one folder per record of that resource."),
'resource_field': fields.many2one('ir.model.fields', 'Name field', help='Field to be used as name on resource directories. If empty, the "name" will be used.'),
@@ -95,13 +95,13 @@ class document_directory(osv.osv):
return objid.browse(cr, uid, mid, context=context).res_id
except Exception:
return None
-
+
_defaults = {
'company_id': lambda s,cr,uid,c: s.pool.get('res.company')._company_default_get(cr, uid, 'document.directory', context=c),
'user_id': lambda self,cr,uid,ctx: uid,
'domain': lambda self,cr,uid,ctx: '[]',
'type': lambda *args: 'directory',
- 'ressource_id': lambda *a: 0,
+ 'ressource_id': lambda *a: 0,
'storage_id': _get_def_storage,
'resource_find_all': True,
}
@@ -151,7 +151,7 @@ class document_directory(osv.osv):
_constraints = [
(_check_recursion, 'Error! You can not create recursive Directories.', ['parent_id'])
]
-
+
def __init__(self, *args, **kwargs):
super(document_directory, self).__init__(*args, **kwargs)
@@ -172,7 +172,7 @@ class document_directory(osv.osv):
"""
if not context:
context = {}
-
+
return nodes.get_node_context(cr, uid, context).get_uri(cr, uri)
def get_dir_permissions(self, cr, uid, ids ):
@@ -180,7 +180,7 @@ class document_directory(osv.osv):
"""
assert len(ids) == 1
id = ids[0]
-
+
cr.execute( "SELECT count(dg.item_id) AS needs, count(ug.uid) AS has " \
" FROM document_directory_group_rel dg " \
" LEFT OUTER JOIN res_groups_users_rel ug " \
@@ -197,7 +197,7 @@ class document_directory(osv.osv):
Return a tuple (node_dir, remaining_path)
"""
return (nodes.node_database(context=ncontext), uri)
-
+
def copy(self, cr, uid, id, default=None, context=None):
if not default:
default ={}
diff --git a/addons/document/document_view.xml b/addons/document/document_view.xml
index 13e4cff02d4..aa4d94382ee 100644
--- a/addons/document/document_view.xml
+++ b/addons/document/document_view.xml
@@ -291,7 +291,7 @@
@@ -333,7 +333,7 @@
ir.attachmentform
- Documents give your access to all attached documents; it's a repository of all attached documents (mails, documents attached to a project, etc.)
+ The Documents repository gives you access to all attachments, such as mails, project documents, invoices etc.
- '')
inner join res_users u on (f.user_id=u.id)
- group by to_char(f.create_date, 'YYYY'), to_char(f.create_date, 'MM'),d.name,f.parent_id,d.type,f.create_date,f.user_id,f.file_size,u.name,d.type,f.write_date
+ group by to_char(f.create_date, 'YYYY'), to_char(f.create_date, 'MM'),d.name,f.parent_id,d.type,f.create_date,f.user_id,f.file_size,u.name,d.type,f.write_date,f.datas_fname
)
""")
report_document_user()
+
+
class report_files_partner(osv.osv):
_name = "report.files.partner"
_description = "Files details by Partners"
@@ -86,7 +90,7 @@ class report_files_partner(osv.osv):
to_char(date_trunc('month', f.create_date),'MM') AS month,
SUM(f.file_size) AS file_size,
p.name AS partner
-
+
FROM ir_attachment f
LEFT JOIN res_partner p ON (f.partner_id=p.id)
WHERE f.datas_fname IS NOT NULL
diff --git a/addons/document/report/document_report_view.xml b/addons/document/report/document_report_view.xml
index d0ba1303a39..b9a1652388c 100644
--- a/addons/document/report/document_report_view.xml
+++ b/addons/document/report/document_report_view.xml
@@ -10,6 +10,7 @@
+
@@ -25,10 +26,11 @@
-
-
-
-
+
+
+
+
+
@@ -60,8 +62,8 @@
All Users filesreport.document.userform
- tree
- {'search_default_user': 'user_id'}
+ tree,form
+ {'group_by': ['name','month']}
@@ -112,30 +114,18 @@
-
-
-
-
-
-
-
-
-
-
-
-
Files by Resource Typereport.document.user
-
+ form
- tree
+ graph,tree
@@ -150,7 +140,7 @@
-
+
report.document.user.tree
diff --git a/addons/document_ftp/test/document_ftp_test2.yml b/addons/document_ftp/test/document_ftp_test2.yml
index 32434962ba2..53d5a2b78bf 100644
--- a/addons/document_ftp/test/document_ftp_test2.yml
+++ b/addons/document_ftp/test/document_ftp_test2.yml
@@ -196,7 +196,7 @@
!python {model: ir.attachment}: |
from document_ftp import test_easyftp as te
ftp = te.get_ftp_folder(cr, uid, self, 'Documents')
- ftp.mkd("Test-Folder2")
+ ftp.mkd("Test-Folder3")
# TODO move
-
I remove the 'Test-Folder3'
diff --git a/addons/document_ftp/wizard/ftp_browse_view.xml b/addons/document_ftp/wizard/ftp_browse_view.xml
index 7a52c1fd291..90182b70e0d 100644
--- a/addons/document_ftp/wizard/ftp_browse_view.xml
+++ b/addons/document_ftp/wizard/ftp_browse_view.xml
@@ -8,7 +8,7 @@
-
+
diff --git a/addons/document_ftp/wizard/ftp_configuration.py b/addons/document_ftp/wizard/ftp_configuration.py
index 0522e0348b8..5c6544dac5d 100644
--- a/addons/document_ftp/wizard/ftp_configuration.py
+++ b/addons/document_ftp/wizard/ftp_configuration.py
@@ -30,7 +30,7 @@ class document_ftp_configuration(osv.osv_memory):
_rec_name = 'host'
_columns = {
'host': fields.char('Address', size=64,
- help="Server address or IP and port to which users should connect to for DMS access",
+ help="Server address or IP and port to which users should connect to for DMS access",
required=True),
}
diff --git a/addons/hr_timesheet/hr_timesheet_view.xml b/addons/hr_timesheet/hr_timesheet_view.xml
index d7138f9137f..2a47d8ea297 100644
--- a/addons/hr_timesheet/hr_timesheet_view.xml
+++ b/addons/hr_timesheet/hr_timesheet_view.xml
@@ -113,6 +113,7 @@
+
hr.timesheet.employee.extd_form
diff --git a/addons/project/report/project_report.py b/addons/project/report/project_report.py
index f4d8b32e569..989f646724e 100644
--- a/addons/project/report/project_report.py
+++ b/addons/project/report/project_report.py
@@ -89,7 +89,7 @@ class report_project_task_user(osv.osv):
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
+ abs((extract('epoch' from (t.date_deadline-t.date_end)))/(3600*24)) as delay_endings_days
FROM project_task t
GROUP BY
From 802541e5c78daac2cfc2a1273780193306ba5522 Mon Sep 17 00:00:00 2001
From: "ron@tinyerp.com" <>
Date: Tue, 12 Oct 2010 18:51:51 +0530
Subject: [PATCH 9/9] [IMP] Project->Long Term Planning--Changes Demo data for
user:Projects Phases--Useability should be availablity,rename group by user
into responsible and default group on project,top area field
arrange:Resources Allocations--change icon in group by Project and resource
bzr revid: ron@tinyerp.com-20101012132151-39z9a08pwj71c7pt
---
addons/document/board_document_view.xml | 1 +
addons/project_long_term/project_long_term.py | 32 ++++++++--------
.../project_long_term_demo.xml | 26 ++++++-------
.../project_long_term_view.xml | 37 +++++++++----------
4 files changed, 47 insertions(+), 49 deletions(-)
diff --git a/addons/document/board_document_view.xml b/addons/document/board_document_view.xml
index 7ba8c498271..8f102f5936d 100644
--- a/addons/document/board_document_view.xml
+++ b/addons/document/board_document_view.xml
@@ -26,6 +26,7 @@
phase.date_end:
dt_end = datetime.strptime(vals['date_end'], '%Y-%m-%d')
work_times = resource_calendar_obj.interval_min_get(cr, uid, calendar_id, dt_end, avg_hours or 0.0, resource_id and resource_id[0] or False)
@@ -244,7 +244,7 @@ class project_phase(osv.osv):
if next_phase.id == phase.id:
continue
self._check_date_end(cr, uid, next_phase, dt_end, context=context)
-
+
return res
def copy(self, cr, uid, id, default=None, context=None):
@@ -295,7 +295,7 @@ class project_phase(osv.osv):
Schedule phase with the start date till all the next phases are completed.
@param: start_dsate : start date for the phase
@param: calendar_id : working calendar of the project
- """
+ """
if context is None:
context = {}
resource_pool = self.pool.get('resource.resource')
@@ -306,7 +306,7 @@ class project_phase(osv.osv):
for phase in self.browse(cr, uid, ids, context=context):
if not phase.responsible_id:
raise osv.except_osv(_('No responsible person assigned !'),_("You must assign a responsible person for phase '%s' !") % (phase.name,))
-
+
phase_resource_obj = resource_pool.generate_resources(cr, uid, [phase.responsible_id.id], calendar_id, context=context)
avg_hours = uom_pool._compute_qty(cr, uid, phase.product_uom.id, phase.duration, default_uom_id)
duration = str(avg_hours) + 'H'
@@ -371,7 +371,7 @@ class project_phase(osv.osv):
if not start_date and phase.project_id.date_start:
start_date = phase.project_id.date_start
if not start_date:
- start_date = datetime.now().strftime("%Y-%m-%d")
+ start_date = datetime.now().strftime("%Y-%m-%d")
resources = resources_list.get(phase.id, [])
calendar_id = phase.project_id.resource_calendar_id.id
task_ids = map(lambda x : x.id, (filter(lambda x : x.state in ['open', 'draft', 'pending'] , phase.task_ids)))
@@ -398,7 +398,7 @@ class project_resource_allocation(osv.osv):
'user_id': fields.related('resource_id', 'user_id', type='many2one', relation="res.users", string='User'),
'date_start': fields.date('Start Date', help="Starting Date"),
'date_end': fields.date('End Date', help="Ending Date"),
- 'useability': fields.float('Usability', help="Usability of this resource for this project phase in percentage (=50%)"),
+ 'useability': fields.float('Availability', help="Usability of this resource for this project phase in percentage (=50%)"),
}
_defaults = {
'useability': 100,
@@ -460,19 +460,19 @@ class project(osv.osv):
resource_pool = self.pool.get('resource.resource')
if context is None:
context = {}
-
+
resources_list = self.generate_members(cr, uid, ids, context=context)
return_msg = {}
for project in self.browse(cr, uid, ids, context=context):
start_date = project.date_start
if not start_date:
- start_date = datetime.now().strftime("%Y-%m-%d")
+ start_date = datetime.now().strftime("%Y-%m-%d")
resources = resources_list.get(project.id, [])
calendar_id = project.resource_calendar_id.id
task_ids = task_pool.search(cr, uid, [('project_id', '=', project.id),
('state', 'in', ['draft', 'open', 'pending'])
])
-
+
if task_ids:
task_pool.generate_schedule(cr, uid, task_ids, resources, calendar_id, start_date, context=context)
@@ -483,7 +483,7 @@ class project(osv.osv):
else:
return_msg["warning"] = return_msg["warning"] + "\n" + warning_msg
- return return_msg
+ return return_msg
project()
@@ -506,7 +506,7 @@ class project_task(osv.osv):
_columns = {
'phase_id': fields.many2one('project.phase', 'Project Phase'),
}
-
+
def generate_schedule(self, cr, uid, ids, resources, calendar_id, start_date, context=None):
"""
Schedule the tasks according to resource available and priority.
@@ -556,10 +556,10 @@ class project_task(osv.osv):
if task_resource.__name__ == task_resource:
real_resource = task_resource
break
-
+
task = create_tasks(task_number, hours, priorty, real_resource)
task_number += 1
-
+
face_projects = Task.BalancedProject(Project)
loop_no = 0
diff --git a/addons/project_long_term/project_long_term_demo.xml b/addons/project_long_term/project_long_term_demo.xml
index 30acac99377..4de53c0f38d 100644
--- a/addons/project_long_term/project_long_term_demo.xml
+++ b/addons/project_long_term/project_long_term_demo.xml
@@ -1,13 +1,13 @@
-
-
+
- Phoung
+ Phuongphuphu
@@ -19,7 +19,7 @@ This Demo data file includes Users, Human Resources, Projects and it' members li
al
- Qwintin
+ Quentinqdpqdp
@@ -91,8 +91,8 @@ This Demo data file includes Users, Human Resources, Projects and it' members li
Project Finacial Manager
-
-
+
+
@@ -101,12 +101,12 @@ This Demo data file includes Users, Human Resources, Projects and it' members li
normalIntegrate an Sale and Warehouse Management.Integrate an Sale and Warehouse Management.
@@ -213,7 +213,7 @@ This Demo data file includes Users, Human Resources, Projects and it' members li
-
+
diff --git a/addons/project_long_term/project_long_term_view.xml b/addons/project_long_term/project_long_term_view.xml
index 6575d2e03ae..bb8e05770ed 100644
--- a/addons/project_long_term/project_long_term_view.xml
+++ b/addons/project_long_term/project_long_term_view.xml
@@ -81,9 +81,9 @@
-
+
-
+
@@ -111,21 +111,18 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
@@ -274,7 +271,7 @@
-
+
@@ -291,7 +288,7 @@
project.phaseformgantt,tree,form,calendar
- {'search_default_responsible_id':uid}
+ {'search_default_responsible_id':uid,'group_by':'project_id'}You can subdivide your larger projects into several phases. For each phase, you can define your resources allocation (humans or engine), describe de differend task and link your phase with previous and next one, add constraints date and scheduling. A gantt view of your project phase is also available from this menu. Gantt view is a graphically draw of the project plan; it includes any task dependencies by visually adjusting task durations and priorities, and by linking tasks to each other.