Returns an iterator for the month in a year
        This iterator will return all days (as NepDate objects) for the month
        and all days before the start of the month or after the end of the month
        that are required to get a complete week.

def itermonthdates(cls, year, month):
        """
        Returns an iterator for the month in a year
        This iterator will return all days (as NepDate objects) for the month
        and all days before the start of the month or after the end of the month
        that are required to get a complete week.
        """
        curday = NepDate.from_bs_date(year, month, 1)
        start_weekday = curday.weekday()
        # Start_weekday represents the number of days we have to pad
        for i in range(start_weekday, 0, -1):
            yield (curday - timedelta(days=i))

        for i in range(0, values.NEPALI_MONTH_DAY_DATA[year][month - 1]):
            if i > 0:
                curday.day += 1
                curday.en_date = curday.en_date + timedelta(days=1)
            # Create a new object and return it
            n_date = NepDate(curday.year, curday.month, curday.day)
            n_date.en_date = curday.en_date
            yield n_date
        # Now, curday points to the last day of the month. Check it's weekday
        # and return days from next month to complete the week
        last_weekday = curday.weekday()
        remain = 6 - last_weekday

        for i in range(1, remain + 1):
            yield (curday + timedelta(days=i))