'Get recurrent dates based on Rule string and all event where recurrent_id is child
date_field: the field containing the reference date information for recurrency computation'

@api.multi
def _get_recurrent_date_by_event(self, date_field='start'):

    self.ensure_one()
    if ((date_field in self._fields.keys()) and (self._fields[date_field].type in ('date', 'datetime'))):
        reference_date = self[date_field]
    else:
        reference_date = self.start
    def todate(date):
        val = parser.parse(''.join(re.compile('\\d').findall(date)))
        if (not val.tzinfo):
            val = pytz.UTC.localize(val)
        return val.astimezone(timezone)
    timezone = pytz.timezone((self._context.get('tz') or 'UTC'))
    event_date = pytz.UTC.localize(fields.Datetime.from_string(reference_date))
    if (not event_date):
        event_date = datetime.now()
    if (self.allday and self.rrule and ('UNTIL' in self.rrule) and ('Z' not in self.rrule)):
        rset1 = rrule.rrulestr(str(self.rrule), dtstart=event_date.replace(tzinfo=None), forceset=True, ignoretz=True)
    else:
        event_date = event_date.astimezone(timezone)
        rset1 = rrule.rrulestr(str(self.rrule), dtstart=event_date, forceset=True, tzinfos={})
    recurring_meetings = self.search([('recurrent_id', '=', self.id), '|', ('active', '=', False), ('active', '=', True)])
    for meeting in recurring_meetings:
        rset1._exdate.append(todate(meeting.recurrent_id_date))
    return [(d.astimezone(pytz.UTC) if d.tzinfo else d) for d in rset1]
