示例#1
0
    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
示例#2
0
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)")
示例#4
0
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)
示例#5
0
 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)")