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
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)
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])
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, )
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])
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)
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
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
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)
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)
def save(self): manager = super(ManagerForm, self).save() if make_manager_workshifts: make_manager_workshifts(managers=[manager]) return manager