def getPartAssignment(self, co=None, numWeekInit=-1, numYearInit=-1, numWeekEnd=-1, numYearEnd=-1): ''' Prend en parametre un ou plusieurs doublets du type : ("nom", "bob") => WHERE NOM='Bob' Permet de récupérer un objet python depuis la base de donnée en fonction d'un filtre. Le type d'objet retournée varie en fonction de la classe fille qui l'appel. ''' TEMPLATE_WHERE_NAT = Template("select A.ID_WORKER as _worker_num, A.FIRST_NAME as _worker_firstName, A.NAME as _worker_name, A.ADDRESS as _worker_position_address," + \ "E.ID_SITE _phase_site_num, E.NUM_SITE as _phase_site_numSite, E.NUM_WEEK as _phase_numWeek, E.NUM_YEAR as _phase_numYear " + \ "from (select w.ID as ID_WORKER, w.FIRST_NAME, w.NAME, p.ADDRESS " + \ "from WORKER w, POSITION p " + \ "where w.ID_POSITION = p.ID) A, " + \ "(select G.ID_WORKER, D.ID_SITE, D.NUM_SITE, D.NUM_WEEK, D.NUM_YEAR " + \ "from ASSIGNMENT G, (select B.ID_SITE, B.NUM_SITE, C.NUM_WEEK, C.NUM_YEAR, C.ID_PHASE " + \ "from (select SITE.ID as ID_SITE, SITE.NUM_SITE " + \ "from SITE " + \ """where "$dateInit" >= SITE.DATE_INIT and "$dateEnd" <= SITE.DATE_END) B, """ + \ "(select PHASE.ID as ID_PHASE, PHASE.NUM_WEEK, PHASE.NUM_YEAR, PHASE.ID_SITE " + \ "from PHASE " + \ "where $numYearInit <= PHASE.NUM_YEAR and $numYearEnd >= PHASE.NUM_YEAR " + \ "and $numWeekInit <= PHASE.NUM_WEEK and $numWeekEnd >= PHASE.NUM_WEEK) C ) D " + \ "where G.ID_PHASE = D.ID_PHASE) E " + \ "where A.ID_WORKER = E.ID_WORKER") from isoweek import Week d1 = Week(numYearInit, numWeekInit).monday() d2 = Week(numYearEnd, numWeekEnd).monday() # Construit la requête SQL request = TEMPLATE_WHERE_NAT.substitute(dateInit = d1.isoformat(), dateEnd = d2.isoformat(), numYearInit = numYearInit, numYearEnd = numYearEnd, numWeekInit = numWeekInit, numWeekEnd = numWeekEnd) if self._verboseMode: (request) cursor = co[1] # execution d'une requete cursor.execute(request) o = cursor.fetchall() if o != None: # construit et retourne un Objet du Systeme res = set() for x in o: if self._verboseMode: print(x) res.add(self._buildObject(co, x)) return res else: return None
def cleaning_schedule(request, room_id): room = get_object_or_404(Room, pk=room_id) members = RoomMembers.objects.filter(room=room_id) takenWeeks = Tasks.objects.filter(room=room_id).filter(type="clean").filter(task="weekly cleaning") #get all weeks of the year (year hardcoded) weeks = [] i = 1 while i <= 52: w = Week(2021, i) week = {'week': w.isoformat(), 'weekStart': w.monday().isoformat(), 'weekEnd': w.sunday().isoformat(), 'deadline': None, 'user': None } weeks.append(week) i += 1 context={ 'user': request.user, 'room': room, 'members': members, 'weeks': weeks, 'takenWeeks': takenWeeks } return render(request, 'kitchen_app/cleaning_schedule.html', context)
def test_stringification(self): w = Week(2011, 20) self.assertEqual(str(w), "2011W20") self.assertEqual(w.isoformat(), "2011W20") self.assertEqual(repr(w), "isoweek.Week(2011, 20)")
def admin_schedule(request, room_id): assert is_room_admin(request.user, room_id), 'Member routed to member view.' room = get_object_or_404(Room, pk=room_id) members = RoomMembers.objects.filter(room=room_id) # get all weeks that have cleaning schedule takenWeeks = Tasks.objects.filter(room=room_id).filter(type="clean").filter(task="weekly cleaning") #get all weeks of the year weeks = [] i = 1 while i <= 52: w = Week(2021, i) week = {'week': w.isoformat(), 'weekStart': w.monday().isoformat(), 'weekEnd': w.sunday().isoformat(), 'deadline': None, 'user': None } weeks.append(week) i += 1 context={ 'user': request.user, 'room': room, 'members': members, 'weeks': weeks, 'takenWeeks': takenWeeks } taken = False # assign a week to a room member for cleaning if request.method == 'POST' and 'addBtn' in request.POST: try: dueToWeek = Week.fromstring(request.POST['week']) if takenWeeks: for takenWeek in takenWeeks: if dueToWeek.isoformat() == takenWeek.deadline: context['error'] = "Week is taken" taken = True if taken == False: #create a task for the week of cleaning assignedUser = request.POST['members_choice'] user = get_object_or_404(User, username=assignedUser) Tasks.create(user, room, "weekly cleaning", "clean", dueToWeek) #create a list of subtasks queryset = Tasks.objects.filter(room=room_id) task = get_object_or_404(queryset, deadline=dueToWeek.isoformat()) list = get_object_or_404(List, pk=1) listTasks = ListTasks.objects.filter(list=list) for listTask in listTasks: Subtasks.create(task, listTask.task) return HttpResponseRedirect(reverse('kitchen_app:admin_schedule', args=(room.id,))) except IntegrityError as e: context['error'] = "Week is taken" # remove an assigned week if request.method == 'POST' and 'removeBtn' in request.POST: takenWeekID = request.POST['takenWeekID'] task = get_object_or_404(Tasks, pk=takenWeekID) task.delete() return HttpResponseRedirect(reverse('kitchen_app:admin_schedule', args=(room.id,))) return render(request, 'kitchen_app/admin_cleaning_schedule.html', context)