Example #1
0
def perform_carryforward():
    """Perform as many carryforwards as needed.

    Walk back through weeks until the week is non-persistent or carryforward is true.  Then perform
    carry-forward on the oldest week without carryforward set.  Repeat until we're carrying forward
    last week until this week.
    """

    offset = 1
    nonpersistentweeks = 0
    while True:
        weekname = naming.relative_name(offset)
        week = reader.DiaryReader().read_file(weekname)
        if not week.persistent:
            nonpersistentweeks += 1
        if week.has_carryforward() or nonpersistentweeks == MAXIMUM_HOLIDAY_WEEKS:
            break
        offset += 1

    while offset > 1:
        offset -= 1
        fromname = naming.relative_name(offset)
        toname = naming.relative_name(offset - 1)

        fromweek = reader.DiaryReader().read_file(fromname)
        toweek = reader.DiaryReader().read_file(toname)

        _carryforward(fromweek, toweek)

        writer.DiaryWriter().write_file(fromname, fromweek)
        writer.DiaryWriter().write_file(toname, toweek)

    return