[FIX]Stock_planning:Unable to create Forecasting periods from Create Stock and Sales...
authorron@tinyerp.com <>
Thu, 16 Dec 2010 12:04:02 +0000 (17:34 +0530)
committerron@tinyerp.com <>
Thu, 16 Dec 2010 12:04:02 +0000 (17:34 +0530)
lp bug: https://launchpad.net/bugs/690581 fixed

bzr revid: ron@tinyerp.com-20101216120402-h832bva5c7t30296

addons/stock_planning/wizard/stock_planning_create_periods.py

index 12e0d56..72acc60 100644 (file)
@@ -21,7 +21,7 @@
 
 import time
 from datetime import datetime
-from dateutil.relativedelta import relativedelta 
+from dateutil.relativedelta import relativedelta
 
 from osv import osv, fields
 
@@ -35,7 +35,7 @@ class stock_period_createlines(osv.osv_memory):
         result = cr.fetchone()
         last_date = result and result[0] or False
         if last_date:
-            period_start = datetime(last_date,"%Y-%m-%d %H:%M:%S")+ relativedelta(days=1)
+            period_start = datetime.strptime(last_date,"%Y-%m-%d %H:%M:%S")+ relativedelta(days=1)
             period_start = period_start - relativedelta(hours=period_start.hour, minutes=period_start.minute, seconds=period_start.second)
         else:
             period_start = datetime.today()
@@ -51,7 +51,7 @@ class stock_period_createlines(osv.osv_memory):
     _defaults={
         'date_start': _get_new_period_start,
     }
-    
+
     def create_stock_periods(self, cr, uid, ids, context=None):
         interval = context.get('interval',0)
         name = context.get('name','Daily')
@@ -59,28 +59,51 @@ class stock_period_createlines(osv.osv_memory):
         lines = []
         for p in self.browse(cr, uid, ids, context=context):
             dt = p.date_start
+            dt_s = p.date_stop
+            dt_stp = datetime.strptime(p.date_stop, '%Y-%m-%d')
             ds = datetime.strptime(p.date_start, '%Y-%m-%d')
-            while ds.strftime('%Y-%m-%d') < p.date_stop:
+            while ds.strftime('%Y-%m-%d') <= p.date_stop:
                 if name =='Daily':
-                    de = ds + relativedelta(days=interval, minutes =-1)
+                    de = ds + relativedelta(days=(interval + 1), seconds =-1)
                     new_name = de.strftime('%Y-%m-%d')
                     new_id = period_obj.create(cr, uid, {
                     'name': new_name,
                     'date_start': ds.strftime('%Y-%m-%d'),
                     'date_stop': de.strftime('%Y-%m-%d %H:%M:%S'),
                     })
-                    ds = ds + relativedelta(days=interval) + 1
+                    ds = ds + relativedelta(days=(interval + 1))
                 if name =="Weekly":
-                    de = ds + relativedelta(days=interval, minutes =-1)
-                    new_name = de.strftime('%Y, week %W')
+                    de = ds + relativedelta(days=(interval + 1), seconds =-1)
+                    if dt_stp < de:
+                        de = dt_stp + relativedelta(days=1,seconds =-1)
+                    else:
+                        de = ds + relativedelta(days=(interval + 1), seconds =-1)
+                    start_week = ds.strftime('%W')
+                    start_year = ds.strftime('%Y')
+                    end_week = de.strftime('%W')
+                    end_year = de.strftime('%Y')
+                    if start_year <> end_year:
+                        if end_week == '00':
+                            new_name = "Week " + start_week +"-" + start_year
+                        else:
+                            new_name = "Week " + start_week +", " + start_year +" - Week " +end_week +", " + end_year
+                    elif start_week == end_week:
+                        new_name = "Week " + start_week +"-" +start_year
+
+                    else:
+                        new_name = "Week " + start_week +"-" + end_week+", " + start_year
                     new_id = period_obj.create(cr, uid, {
                     'name': new_name,
                     'date_start': ds.strftime('%Y-%m-%d'),
                     'date_stop': de.strftime('%Y-%m-%d %H:%M:%S'),
                     })
-                    ds = ds + relativedelta(days=interval) + 1
+                    ds = ds + relativedelta(days=(interval + 1))
                 if name == "Monthly":
-                    de = ds + relativedelta(months=interval, minutes=-1)
+                    de = ds + relativedelta(months=interval, seconds=-1)
+                    if dt_stp < de:
+                        de = dt_stp + relativedelta(days=1,seconds =-1)
+                    else:
+                        de = ds + relativedelta(months=interval, seconds=-1)
                     new_name = ds.strftime('%Y/%m')
                     new_id =period_obj.create(cr, uid, {
                     'name': new_name,