From 754c921bd02858cd0a09ecc9a5cfbcf1146071ab Mon Sep 17 00:00:00 2001 From: "ron@tinyerp.com" <> Date: Thu, 16 Dec 2010 17:34:02 +0530 Subject: [PATCH] [FIX]Stock_planning:Unable to create Forecasting periods from Create Stock and Sales Periods Menu lp bug: https://launchpad.net/bugs/690581 fixed bzr revid: ron@tinyerp.com-20101216120402-h832bva5c7t30296 --- .../wizard/stock_planning_create_periods.py | 43 ++++++++++++++----- 1 file changed, 33 insertions(+), 10 deletions(-) diff --git a/addons/stock_planning/wizard/stock_planning_create_periods.py b/addons/stock_planning/wizard/stock_planning_create_periods.py index 12e0d56e755..72acc603ff8 100644 --- a/addons/stock_planning/wizard/stock_planning_create_periods.py +++ b/addons/stock_planning/wizard/stock_planning_create_periods.py @@ -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,