def add_working_days(self, day, delta,<EOL>extra_working_days=None, extra_holidays=None,<EOL>keep_datetime=False):
day = cleaned_date(day, keep_datetime)<EOL>if extra_working_days:<EOL><INDENT>extra_working_days = tuple(map(cleaned_date, extra_working_days))<EOL><DEDENT>if extra_holidays:<EOL><INDENT>extra_holidays = tuple(map(cleaned_date, extra_holidays))<EOL><DEDENT>days = <NUM_LIT:0><EOL>temp_day = day<EOL>if type(temp_day) is datetime and not keep_datetime:<EOL><INDENT>temp_day = temp_day.date()<EOL><DEDENT>day_added = <NUM_LIT:1> if delta >= <NUM_LIT:0> else -<NUM_LIT:1><EOL>delta = abs(delta)<EOL>while days < delta:<EOL><INDENT>temp_day = temp_day + timedelta(days=day_added)<EOL>if self.is_working_day(temp_day,<EOL>extra_working_days=extra_working_days,<EOL>extra_holidays=extra_holidays):<EOL><INDENT>days += <NUM_LIT:1><EOL><DEDENT><DEDENT>return temp_day<EOL>
Add `delta` working days to the date.

        You can provide either a date or a datetime to this function that will
        output a ``date`` result. You can alter this behaviour using the
        ``keep_datetime`` option set to ``True``.

        the ``delta`` parameter might be positive or negative. If it's
        negative, you may want to use the ``sub_working_days()`` method with
        a positive ``delta`` argument.

        By providing ``extra_working_days``, you'll state that these dates
        **are** working days.

        By providing ``extra_holidays``, you'll state that these dates **are**
        holidays, even if not in the regular calendar holidays (or weekends).

        Please note that the ``extra_working_days`` list has priority over the
        ``extra_holidays`` list.