예제 #1
0
    def save(self):
        semester = super(SemesterForm, self).save()

        # Set current to false for previous semesters
        for semester in Semester.objects.all():
            semester.current = False
            semester.save()

        semester.workshift_managers = \
          [i.incumbent.user for i in Manager.objects.filter(workshift_manager=True)]
        semester.current = True
        semester.preferences_open = True
        semester.save()

        # Create the primary workshift pool
        pool = WorkshiftPool.objects.create(
            semester=semester,
            is_primary=True,
            )
        pool.managers = Manager.objects.filter(workshift_manager=True)
        pool.save()

        # Create this semester's workshift profiles
        for uprofile in UserProfile.objects.filter(status=UserProfile.RESIDENT):
            if uprofile.user.username == ANONYMOUS_USERNAME:
                continue
            WorkshiftProfile.objects.create(
                user=uprofile.user,
                semester=semester,
                )

        utils.make_workshift_pool_hours(semester=semester)
        utils.make_manager_workshifts(semester=pool.semester)

        return semester
예제 #2
0
def initialize_semester(sender, instance, created, **kwargs):
    if not created:
        return

    semester = instance
    semester.workshift_managers = [i.incumbent.user for i in Manager.objects.filter(workshift_manager=True)]
    semester.preferences_open = True
    semester.save(update_fields=["preferences_open"])

    # Set current to false for previous semesters
    for prev_semester in Semester.objects.exclude(pk=semester.pk):
        prev_semester.current = False
        prev_semester.save(update_fields=["current"])

    # Create the primary workshift pool
    pool, created = WorkshiftPool.objects.get_or_create(semester=semester, is_primary=True)
    if created:
        pool.managers = Manager.objects.filter(workshift_manager=True)

    # Create this semester's workshift profiles
    for uprofile in UserProfile.objects.filter(status=UserProfile.RESIDENT).exclude(user__username=ANONYMOUS_USERNAME):
        WorkshiftProfile.objects.create(user=uprofile.user, semester=semester)

    utils.make_workshift_pool_hours(semester=semester)
    utils.make_manager_workshifts(semester=semester)
예제 #3
0
def create_manager_workshifts(sender, instance, created, **kwargs):
    try:
        semester = Semester.objects.get(current=True)
    except (Semester.DoesNotExist, Semester.MultipleObjectsReturned):
        pass
    else:
        from workshift import utils
        utils.make_manager_workshifts(semester=semester, managers=[instance])
예제 #4
0
def create_workshift_pool_hours(sender, instance, **kwargs):
    pool = instance
    from workshift import utils
    utils.make_workshift_pool_hours(
        semester=pool.semester,
        pools=[pool],
    )
    utils.make_manager_workshifts(semester=pool.semester, )
예제 #5
0
def create_manager_workshifts(sender, instance, created, **kwargs):
    manager = instance
    try:
        semester = Semester.objects.get(current=True)
    except (Semester.DoesNotExist, Semester.MultipleObjectsReturned):
        pass
    else:
        utils.make_manager_workshifts(semester=semester, managers=[manager])
예제 #6
0
파일: fill.py 프로젝트: cwlbraa/farnsworth
def fill_regular_shifts(regular_hours=5, semester=None):
    if semester is None:
        semester = _get_semester()

    _fill_workshift_types()

    # Regular Weekly Workshift Hours
    pool, created = WorkshiftPool.objects.get_or_create(
        semester=semester,
        is_primary=True,
        defaults=dict(hours=regular_hours, any_blown=True),
        )

    if created:
        pool.managers = Manager.objects.filter(workshift_manager=True)
        pool.save()

    make_workshift_pool_hours(semester, pools=[pool])

    # Regular Workshifts
    for type_title, hours, days, count, start, end in REGULAR_WORKSHIFTS:
        wtype = WorkshiftType.objects.get(title=type_title)
        for day in days:
            RegularWorkshift.objects.get_or_create(
                workshift_type=wtype,
                pool=pool,
                day=day,
                start_time=start,
                end_time=end,
                defaults=dict(
                    count=count,
                    hours=hours,
                    ),
                )

    for type_title, hours, count in WEEK_LONG:
        wtype = WorkshiftType.objects.get(title=type_title)
        RegularWorkshift.objects.get_or_create(
            workshift_type=wtype,
            pool=pool,
            count=count,
            week_long=True,
            defaults=dict(
                start_time=None,
                end_time=None,
                hours=hours,
                ),
            )


    make_instances(semester=semester)
    make_manager_workshifts(semester)
예제 #7
0
파일: fill.py 프로젝트: knagra/farnsworth
def reset_all_shifts(semester=None, pool=None):
    if semester is None:
        semester = _get_semester()

    shifts = RegularWorkshift.objects.filter(pool__semester=semester)

    if pool is not None:
        shifts = shifts.filter(pool=pool)

    shift_count = shifts.count()
    shifts.delete()

    make_manager_workshifts(semester)

    return shift_count
예제 #8
0
    def save(self):
        semester = super(SemesterForm, self).save()

        # Set current to false for previous semesters
        for semester in Semester.objects.all():
            semester.current = False
            semester.save()

        semester.workshift_managers = \
          [i.incumbent.user for i in Manager.objects.filter(workshift_manager=True)]
        semester.current = True
        semester.preferences_open = True
        semester.save()

        # Create the primary workshift pool
        pool = WorkshiftPool.objects.create(
            semester=semester,
            is_primary=True,
        )
        pool.managers = Manager.objects.filter(workshift_manager=True)
        pool.save()

        # Create this semester's workshift profiles
        for uprofile in UserProfile.objects.filter(
                status=UserProfile.RESIDENT):
            if uprofile.user.username == ANONYMOUS_USERNAME:
                continue
            WorkshiftProfile.objects.create(
                user=uprofile.user,
                semester=semester,
            )

        utils.make_workshift_pool_hours(semester=semester)
        utils.make_manager_workshifts(semester=pool.semester)

        return semester
예제 #9
0
def main(args):
    # Add Managers
    for title, compensation, hours, email, duties in MANAGERS:
        Manager.objects.create(
            title=title,
            compensation=compensation,
            semester_hours=str(hours),
            summer_hours=str(hours),
            duties=duties,
            email="{0}{1}@bsc.coop".format(settings.HOUSE_ABBREV, email) if email else "",
            president="president" in title.lower(),
            workshift_manager="workshift" in title.lower(),
            )

    # Add Requests
    for name, managers, glyphicon in REQUESTS:
        r = RequestType.objects.create(
            name=name,
            glyphicon=glyphicon,
            )
        r.managers = [Manager.objects.get(title=i) for i in managers]
        r.save()

    if "workshift" in settings.INSTALLED_APPS:
        # Start the Workshift Semester
        year, season = get_year_season()
        start_date, end_date = get_semester_start_end(year, season)
        semester = Semester.objects.create(
            year=year,
            season=season,
            start_date=start_date,
            end_date=end_date,
            )

        for uprofile in UserProfile.objects.filter(status=UserProfile.RESIDENT):
            profile = WorkshiftProfile.objects.create(
                user=uprofile.user,
                semester=semester,
                )

        # Regular Weekly Workshift Hours
        pool = WorkshiftPool.objects.create(
            semester=semester,
            is_primary=True,
            hours=5,
            any_blown=True,
            )
        pool.managers = Manager.objects.filter(workshift_manager=True)
        pool.save()

        # HI Hours
        hi_pool = WorkshiftPool.objects.create(
            title="Home Improvement",
            semester=semester,
            hours=str(4),
            weeks_per_period=0,
            )
        hi_pool.managers = Manager.objects.filter(title="Maintenance Manager")
        hi_pool.save()

        # Social Hours
        social_pool = WorkshiftPool.objects.create(
            title="Social",
            semester=semester,
            hours=str(1),
            weeks_per_period=6,
            )
        social_pool.managers = Manager.objects.filter(title="Social Manager")
        social_pool.save()

        # Humor Shift
        humor_pool = WorkshiftPool.objects.create(
            title="Humor Shift",
            semester=semester,
            any_blown=True,
            hours=str(2),
            weeks_per_period=6,
            )
        humor_pool.managers = Manager.objects.filter(workshift_manager=True)
        humor_pool.save()

        make_workshift_pool_hours(semester)

        # Workshift Types
        for title, description, quick_tips, hours, rateable in WORKSHIFT_TYPES:
            WorkshiftType.objects.create(
                title=title,
                description=description,
                quick_tips=quick_tips,
                hours=str(hours),
                rateable=rateable,
                )

        # Regular Workshifts
        for title, type_title, days, count, start, end in REGULAR_WORKSHIFTS:
            wtype = WorkshiftType.objects.get(title=type_title)
            shift = RegularWorkshift.objects.create(
                workshift_type=wtype,
                title=title,
                pool=pool,
                count=count,
                start_time=start,
                end_time=end,
                hours=wtype.hours,
                )
            shift.days = get_int_days(days)
            shift.save()

        for title, type_title, count in WEEK_LONG:
            wtype = WorkshiftType.objects.get(title=type_title)
            shift = RegularWorkshift.objects.create(
                workshift_type=wtype,
                title=title,
                pool=pool,
                count=count,
                week_long=True,
                start_time=None,
                end_time=None,
                hours=wtype.hours,
                )

        # Humor Workshifts
        for title, type_title, days, start, end in HUMOR_WORKSHIFTS:
            wtype = WorkshiftType.objects.get(title=type_title)
            shift = RegularWorkshift.objects.create(
                workshift_type=wtype,
                title=title,
                pool=humor_pool,
                start_time=start,
                end_time=end,
                hours=wtype.hours,
                )
            shift.days = get_int_days(days)
            shift.save()

        make_instances(semester=semester)
        make_manager_workshifts(semester)
예제 #10
0
def main(args, verbose=True):
    # Add Managers
    managers = 0
    for title, compensation, hours, email, duties in MANAGERS:
        created = Manager.objects.get_or_create(
            title=title,
            defaults=dict(
                compensation=compensation,
                semester_hours=hours,
                summer_hours=hours,
                duties=duties,
                email="{0}{1}@bsc.coop".format(settings.HOUSE_ABBREV, email) if email else "",
                president="president" in title.lower(),
                workshift_manager="workshift" in title.lower(),
                ),
            )[1]
        if created:
            managers += 1

    if verbose:
        print("Created {0} managers".format(managers))

    # Add Requests
    requests = 0
    for name, managers, glyphicon in REQUESTS:
        r, created = RequestType.objects.get_or_create(
            name=name,
            defaults=dict(
                glyphicon=glyphicon,
                ),
            )

        if created:
            r.managers = [Manager.objects.get(title=i) for i in managers]
            r.save()
            requests += 1

    if verbose:
        print("Created {0} request types".format(requests))

    if "workshift" in settings.INSTALLED_APPS:
        # Start the Workshift Semester
        year, season = get_year_season()
        start_date, end_date = get_semester_start_end(year, season)
        try:
            semester = Semester.objects.get(current=True)
        except Semester.DoesNotExist:
            semester, created = Semester.objects.get_or_create(
                year=year,
                season=season,
                defaults=dict(start_date=start_date, end_date=end_date),
                )
        else:
            created = False

        if created and verbose:
            print("Started a new workshift semester")

        # Regular Weekly Workshift Hours
        pool, created = WorkshiftPool.objects.get_or_create(
            semester=semester,
            is_primary=True,
            defaults=dict(hours=5, any_blown=True),
            )
        if created:
            pool.managers = Manager.objects.filter(workshift_manager=True)
            pool.save()

        # HI Hours
        hi_pool, created = WorkshiftPool.objects.get_or_create(
            title="Home Improvement",
            semester=semester,
            defaults=dict(hours=4, weeks_per_period=0),
            )
        if created:
            hi_pool.managers = Manager.objects.filter(title="Maintenance Manager")
            hi_pool.save()

        # Social Hours
        social_pool, created = WorkshiftPool.objects.get_or_create(
            title="Social",
            semester=semester,
            defaults=dict(hours=1, weeks_per_period=0),
            )
        if created:
            social_pool.managers = Manager.objects.filter(title="Social Manager")
            social_pool.save()

        # Humor Shift
        humor_pool, created = WorkshiftPool.objects.get_or_create(
            title="Humor Shift",
            semester=semester,
            defaults=dict(any_blown=True, hours=2, weeks_per_period=6),
            )
        if created:
            humor_pool.managers = Manager.objects.filter(workshift_manager=True)
            humor_pool.save()

        make_workshift_pool_hours(semester)

        # Workshift Types
        for title, description, quick_tips, rateable in WORKSHIFT_TYPES:
            WorkshiftType.objects.get_or_create(
                title=title,
                defaults=dict(
                    description=description,
                    quick_tips=quick_tips,
                    rateable=rateable,
                    ),
                )

        # Regular Workshifts
        for type_title, hours, days, count, start, end in REGULAR_WORKSHIFTS:
            wtype = WorkshiftType.objects.get(title=type_title)
            for day in days:
                RegularWorkshift.objects.get_or_create(
                    workshift_type=wtype,
                    pool=pool,
                    day=day,
                    start_time=start,
                    end_time=end,
                    defaults=dict(
                        count=count,
                        hours=hours,
                        ),
                    )

        for type_title, hours, count in WEEK_LONG:
            wtype = WorkshiftType.objects.get(title=type_title)
            RegularWorkshift.objects.get_or_create(
                workshift_type=wtype,
                pool=pool,
                count=count,
                week_long=True,
                defaults=dict(
                    start_time=None,
                    end_time=None,
                    hours=hours,
                    ),
                )

        # Humor Workshifts
        for type_title, hours, days, start, end in HUMOR_WORKSHIFTS:
            wtype = WorkshiftType.objects.get(title=type_title)
            for day in days:
                RegularWorkshift.objects.get_or_create(
                    workshift_type=wtype,
                    pool=humor_pool,
                    day=day,
                    defaults=dict(
                        start_time=start,
                        end_time=end,
                        hours=hours,
                        ),
                    )

        make_instances(semester=semester)
        make_manager_workshifts(semester)
예제 #11
0
파일: forms.py 프로젝트: nherson/farnsworth
 def save(self):
     manager = super(ManagerForm, self).save()
     if make_manager_workshifts:
         make_manager_workshifts(managers=[manager])
     return manager