def load(cls, file_pattern, nb_previous_files=1, parser=None):
        """
        Load a collection of timesheet from the given `file_pattern`. `file_pattern` is a path to a timesheet file that
        will be expanded with :func:`datetime.date.strftime` and the current date. `nb_previous_files` is the number of
        other timesheets to load, depending on `file_pattern` this will result in either the timesheet from the
        previous month or from the previous year to be loaded. If `parser` is not set, a default
        :class:`taxi.timesheet.parser.TimesheetParser` will be used.
        """
        if not parser:
            parser = TimesheetParser()

        timesheet_files = cls.get_files(file_pattern, nb_previous_files)
        timesheet_collection = cls()

        for file_path in timesheet_files:
            try:
                timesheet = Timesheet.load(
                    file_path, parser=parser, initial=lambda: timesheet_collection.get_new_timesheets_contents()
                )
            except ParseError as e:
                e.file = file_path
                raise

            timesheet_collection.timesheets.append(timesheet)

        # Fix `add_date_to_bottom` attribute of timesheet entries based on
        # previous timesheets. When a new timesheet is started it won't have
        # any direction defined, so we take the one from the previous
        # timesheet, if any
        if parser.add_date_to_bottom is None:
            previous_timesheet = None
            for timesheet in timesheet_collection.timesheets:
                if previous_timesheet:
                    previous_timesheet_top_down = previous_timesheet.entries.is_top_down()

                    if previous_timesheet_top_down is not None:
                        timesheet.entries.parser.add_date_to_bottom = previous_timesheet_top_down
                previous_timesheet = timesheet

        return timesheet_collection