[FIX] project_retro_planning: When testing project_long_term, a datetime value is...
[odoo/odoo.git] / addons / project_retro_planning / project_retro_planning.py
index 9550128..d566714 100644 (file)
@@ -1,8 +1,8 @@
 # -*- coding: utf-8 -*-
 ##############################################################################
-#    
+#
 #    OpenERP, Open Source Management Solution
-#    Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>).
+#    Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
 #
 #    This program is free software: you can redistribute it and/or modify
 #    it under the terms of the GNU Affero General Public License as
 #    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 <http://www.gnu.org/licenses/>.     
+#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #
 ##############################################################################
 
-from datetime import date,timedelta
+from datetime import date, timedelta, datetime
 import time
+
 from osv import fields, osv
-from datetime import datetime
 
 class project_project(osv.osv):
     _inherit = 'project.project'
-    _description = 'project.project'
 
-    def write(self, cr, uid, ids,vals, *args, **kwargs):
-        if 'date_end' in vals and vals['date_end']:
-            data_project = self.browse(cr,uid,ids)
+    def write(self, cr, uid, ids, vals, *args, **kwargs):
+        if isinstance(ids, (int, long)):
+            ids = [ids]
+        if vals.get('date', False):
+            data_project = self.browse(cr, uid, ids)
             for prj in data_project:
-                c= date(*time.strptime(vals['date_end'],'%Y-%m-%d')[:3])
-                if prj.date_end:
-                    d= date(*time.strptime(prj.date_end,'%Y-%m-%d')[:3])
+                if isinstance(vals['date'], datetime):
+                    new_end_date = vals['date'].date()
+                elif isinstance(vals['date'], date):
+                    new_end_date = vals['date']
+                else:
+                    new_end_date = date(*time.strptime(vals['date'],'%Y-%m-%d')[:3])
+                if prj.date:
+                    old_end_date = date(*time.strptime(prj.date,'%Y-%m-%d')[:3])
                     for task in prj.tasks:
-                        start_dt = (datetime(*time.strptime(task.date_start,'%Y-%m-%d  %H:%M:%S')[:6])+(c-d)).strftime('%Y-%m-%d %H:%M:%S')
-                        if task.date_deadline:
-                            deadline_dt = (datetime(*time.strptime(task.date_deadline,'%Y-%m-%d  %H:%M:%S')[:6])+(c-d)).strftime('%Y-%m-%d %H:%M:%S')
-                            self.pool.get('project.task').write(cr,uid,task.id,{'date_start':start_dt, 'date_deadline':deadline_dt})
-                        else:
-                            self.pool.get('project.task').write(cr,uid,task.id,{'date_start':start_dt})
-        return super(project_project,self).write(cr, uid, ids,vals, *args, **kwargs)
+                        if task.date_start:
+                            start_dt = (date(*time.strptime(str(task.date_start),'%Y-%m-%d  %H:%M:%S')[:3])+(new_end_date-old_end_date)).strftime('%Y-%m-%d %H:%M:%S')
+                            if task.date_deadline:
+                                deadline_dt = (datetime(*time.strptime(str(task.date_deadline),'%Y-%m-%d')[:3])+(new_end_date-old_end_date)).strftime('%Y-%m-%d')
+                                self.pool.get('project.task').write(cr, uid, [task.id], {'date_start':start_dt, 'date_deadline':deadline_dt})
+                            else:
+                                self.pool.get('project.task').write(cr, uid, [task.id], {'date_start':start_dt})
+        return super(project_project,self).write(cr, uid, ids, vals, *args, **kwargs)
 
 project_project()
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
 
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: