0
votes

this is the first code
class timetable_timetable(osv.osv):
      _name='timetable.timetable'
      _columns={
           'name': fields.char('Name',size="64",required=True),
           'course': fields.many2one('college.course','Course'),
           'semester': fields.many2one('course.semester','Semester'),
           'subject' : fields.one2many('timetable.subjects','timetable_id','Subject')
}
timetable_timetable()

this is the second code
class timetable_subjects(osv.osv):
    _name = 'timetable.subjects'
    _columns ={
           'timetable_id' : fields.many2one('timetable.timetable','Time Table'),
           'subject_id': fields.many2one('semester.subject','Subject'),
           'start_date': fields.datetime('Start Date',store=True),
           'duration' : fields.float('Duration',size=64,required=True),
           'end_date' : fields.datetime('End Date',store=True),
           'professor' : fields.many2one('professor.professor','Professor')
           }
timetable_subjects()

i want to make a function on_change which returns me end_date from start_date & duration. So how can i make that function.

2

2 Answers

0
votes

def on_change(self, cr, uid, ids, t_date, duration):

    res = {'end_date': False}
    if t_date:
        now = datetime.strptime(t_date, '%Y-%m-%d %H:%M:%S')

        e_date = now + timedelta(hours=duration)
        print e_date
        f_date = datetime.strftime(e_date, '%Y-%m-%d %H:%M:%S')
        res['end_date'] = f_date
    return {'value': res}
0
votes

Write this code in your onchange method for end_date,

from datetime import datetime
from dateutil.relativedelta import relativedelta

def my_onchange(self, cr, uid, ids, s_date, duration):
    return {'value': {'end_date': (datetime.strptime(s_date,'%Y-%m-%d %H:%M:%S') + relativedelta(days=duration)).strftime('%Y-%m-%d %H:%M:%S')}}

If your duration is in terms of months or years, write relativedelta(months=duration) for months and relativedelta(years=duration) for years and same way for hours or minutes or seconds.