Beispiel #1
0
 def test_search_unique(self):
     repoRental = RepositoryRentals("Reporentals:")
     repoRental.add(Rental(1, Book(1, "Title1", "Author1"), Client(1, "Name1"), datetime.date(2019, 10, 5), None))
     repoRental.add(Rental(2, Book(2, "Title2", "Author2"), Client(2, "Name2"), datetime.date(2019, 10, 6), None))
     
     self.assertRaises(RepositoryError, lambda : repoRental.search_unique(Rental(1, Book(2, "Title1", "Author1"), Client(1, "Name1"), datetime.date(2019, 10, 5), None)))
     self.assertRaises(RepositoryError, lambda : repoRental.search_unique(Rental(12, Book(1, "Title1", "Author1"), Client(1, "Name1"), datetime.date(2019, 10, 5), None)))
Beispiel #2
0
 def test_rental_remove_book(self):
     repoRental = RepositoryRentals("Reporentals:")
     repoRental.add(Rental(1, Book(1, "Title1", "Author1"), Client(1, "Name1"), datetime.date(2019, 10, 5), None))
     repoRental.add(Rental(2, Book(2, "Title2", "Author2"), Client(2, "Name2"), datetime.date(2019, 10, 6), None))
     
     repoRental.remove_book(2)
     assert(repoRental.size() == 1)
Beispiel #3
0
 def initFromMemory(self):
     self.listOfBooks.extend([
         Book("1", "B", "E"),
         Book("2", "E", "x"),
         Book("5", "po", "k"),
         Book("4", "T", "J"),
         Book("3", "z", "E"),
         Book("7", "Iz", "Pzz")
     ])
     self.listOfClients.extend([
         Client("1", "jo"),
         Client("2", "Richy"),
         Client("3", "Iu"),
         Client("4", "Jaz"),
         Client("5", "Qwe")
     ])
     self.listOfRentedBooks.extend([
         Rental("1", "1", "1", datetime.datetime(2012, 12, 5),
                datetime.datetime(2012, 12, 10)),
         Rental("2", "1", "4", datetime.datetime(2012, 12, 22),
                datetime.datetime(2013, 1, 22)),
         Rental("3", "1", "2", datetime.datetime(2012, 12, 29),
                datetime.datetime(2013, 12, 10)),
         Rental("3", "2", "5", datetime.datetime(2010, 9, 20),
                datetime.datetime(2011, 1, 1))
     ])
     self.mostRentedBooks = {}
     self.mostRentedAuthor = {}
     self.mostActiveClients = {}
Beispiel #4
0
 def initialiserentals(self):
     r = Rental(1, 1, datetime.date(2019, 7, 2), datetime.date(1, 1, 1))
     self._rentals.append(r)
     r = Rental(3, 2, datetime.date(2019, 10, 15), datetime.date(1, 1, 1))
     self._rentals.append(r)
     r = Rental(4, 4, datetime.date(2019, 12, 2), datetime.date(1, 1, 1))
     self._rentals.append(r)
Beispiel #5
0
 def test_validate_rental(self):
     validatorRental = ValidateRental()
     with self.assertRaises(ValidationError) as context:
         validatorRental.validate_rental(Rental(-2, Book(2, "Title2", "Author2"), Client(2, "Name2"), datetime.date(2019, 10, 6), datetime.date(2018, 10, 5)))
     self.assertTrue("\n[VALIDATION ERROR] -> Invalid Rental ID! Invalid returned Date!" in str(context.exception))
 
     self.assertRaises(ValidationError, lambda : validatorRental.validate_rental(Rental(-2, Book(2, "Title2", "Author2"), Client(2, "Name2"), datetime.date(2019, 10, 6), datetime.date(2018, 10, 5))))
Beispiel #6
0
def initialRentalList(repoRental):
    r1 = Rental(300, 100, 201, date(2018, 8, 15), date(2018, 8, 25), None)
    r2 = Rental(301, 102, 202, date(2018, 8, 23), date(2018, 9, 1),
                date(2018, 8, 30))
    r3 = Rental(302, 103, 203, date(2018, 9, 1), date(2018, 9, 8), None)
    r4 = Rental(303, 104, 205, date(2018, 9, 7), date(2018, 9, 14),
                date(2018, 8, 14))
    r5 = Rental(304, 105, 205, date(2018, 10, 1), date(2018, 10, 8),
                date(2018, 10, 7))
    r6 = Rental(305, 102, 205, date(2018, 5, 1), date(2018, 5, 8),
                date(2018, 10, 3))
    r7 = Rental(306, 106, 206, date(2018, 11, 1), date(2018, 12, 10), None)
    r8 = Rental(307, 102, 204, date(2018, 1, 11), date(2018, 1, 21), None)
    r9 = Rental(308, 104, 202, date(2018, 11, 5), date(2018, 12, 15), None)
    r10 = Rental(309, 108, 209, date(2018, 11, 9), date(2018, 12, 19), None)

    repoRental.addRental(r1)
    repoRental.addRental(r2)
    repoRental.addRental(r3)
    repoRental.addRental(r4)
    repoRental.addRental(r5)
    repoRental.addRental(r6)
    repoRental.addRental(r7)
    repoRental.addRental(r8)
    repoRental.addRental(r9)
    repoRental.addRental(r10)
 def rent_book(self, client, book, date):
     '''
     'rents a book': basically adds a new entry to the rental list
     '''
     self._repo.append(
         Rental(client.get_id(), book.get_id(), len(self._repo), date,
                date + timedelta(days=14), None))
     Iterator.addaos(
         self,
         Rental(client.get_id(), book.get_id(), len(self._repo), date,
                date + timedelta(days=14), None))
Beispiel #8
0
 def test_most_clients(self):
     repoClients = RepositoryClients("Repoclients:")
     repoRental = RepositoryRentals("Reporentals:")
     
     repoClients.add(Client(1, "Name1"))
     repoClients.add(Client(2, "Name2"))
     repoRental.add(Rental(1, Book(1, "Title1", "Author1"), Client(1, "Name1"), datetime.date(2019, 10, 5), None))
     repoRental.add(Rental(2, Book(2, "Title2", "Author2"), Client(2, "Name2"), datetime.date(2019, 10, 6), datetime.date(2019, 10, 15)))
     
     c = repoClients.get_all()
     clist = repoRental.most_clients(c)
     assert(len(c) == len(clist))
Beispiel #9
0
 def test_most_authors(self):
     repoBooks = RepositoryBooks("Repobooks:")
     repoRental = RepositoryRentals("Reporentals:")
     
     repoBooks.add(Book(1, "Title1", "Author1"))
     repoBooks.add(Book(2, "Title2", "Author2"))
     repoRental.add(Rental(1, Book(1, "Title1", "Author1"), Client(1, "Name1"), datetime.date(2019, 10, 5), None))
     repoRental.add(Rental(2, Book(2, "Title2", "Author2"), Client(2, "Name2"), datetime.date(2019, 10, 6), None))
     
     a = repoBooks.get_all_authors()
     alist = repoRental.most_authors(a)
     assert(len(a) == len(alist))
 def create (self, ID, movieID, clientID, rentedDate, dueDate):
     '''
         Adds a new rental to the repository
     '''
     rental = Rental(ID, movieID, clientID, rentedDate, dueDate)
     self._validator.validate(rental)
     self._repository.add(rental)
Beispiel #11
0
 def update_rental(self, rentalId, returnedDate, u):
     #updates a rental by adding its returnedDate
     #rentalID = (int) the rental ID
     #returnedDate = (date) the returnedDate
     rent = Rental(rentalId, None, None, None, returnedDate)
     book = self._repoRental.search(rent).book
     client = self._repoRental.search(rent).client
     rentedDate = self._repoRental.search(rent).rentedDate
     rent = Rental(rentalId, book, client, rentedDate, returnedDate)
     self._validatorRental.validate_rental(rent)
     rent2 = self._repoRental.search(rent)
     self._repoRental.update(rent)
     if u == True:
         UndoManager.register_operation(self, UndoHandler.UPDATE_RENTAL,
                                        int(rentalId), book.bookID,
                                        client.clientID, rentedDate,
                                        rent2.returnedDate)
Beispiel #12
0
 def remove_rental(self, rentalId, u):
     rent = Rental(int(rentalId), None, None, None, None)
     rent = self._repoRental.search(rent)
     #print(self._repoRental.size())
     self._repoRental.remove(rent)
     if u == True:
         UndoManager.register_operation(self, UndoHandler.REMOVE_RENTAL,
                                        rent.rentalID, rent.book.bookID,
                                        rent.client.clientID,
                                        rent.rentedDate, rent.returnedDate)
Beispiel #13
0
    def add_rent(self, bookid, clientid, rentdate):
        '''
        adds a rent to rentals list
        :param bookid: book id
        :param clientid: client id
        :param rentdate: rent date
        :return: append to the list of rentals
        '''

        r = Rental(bookid, clientid, rentdate, datetime.date(1, 1, 1))
        self._rentals.append(r)
Beispiel #14
0
 def read_data(self):
     #reads all the data from the sql table
     self._entities = []
     cmd = 'SELECT * FROM ' + self._table_name
     self._cursor.execute(cmd)
     line = self._cursor.fetchone()
     while line is not None:
         if line[4] is not None:
             obj = Rental(
                 int(line[0]), Book(int(line[1]), None, None),
                 Client(int(line[2]), None),
                 datetime.datetime.strptime(line[3], '%Y-%m-%d').date(),
                 datetime.datetime.strptime(line[4], '%Y-%m-%d').date())
         else:
             obj = Rental(
                 int(line[0]), Book(int(line[1]), None, None),
                 Client(int(line[2]), None),
                 datetime.datetime.strptime(line[3], '%Y-%m-%d').date(),
                 None)
         self._entities.append(obj)
         line = self._cursor.fetchone()
Beispiel #15
0
 def add_rental(self, rentalId, bookId, clientId, rentedDate, returnedDate,
                u):
     #adds a new rental to the list of rentals
     #rentalID = (int) the rental ID
     #bookID = (int) the book ID
     #clientID = (int) the client ID
     #rentedDate = (date) the rentedDate
     #returnedDate = (date) the returnedDate
     rent = Rental(rentalId, Book(bookId, None, None),
                   Client(clientId, None), rentedDate, returnedDate)
     book = self._booksList.search(rent.book)
     client = self._clientsList.search(rent.client)
     rent = Rental(rentalId, book, client, rentedDate, returnedDate)
     self._validatorRental.validate_rental(rent)
     self._repoRental.search_unique(rent)
     self._repoRental.add(rent)
     if u == True:
         UndoManager.register_operation(self, UndoHandler.ADD_RENTAL,
                                        int(rentalId), int(bookId),
                                        int(clientId), rentedDate,
                                        returnedDate)
Beispiel #16
0
 def search(self, keyobj):
     #returns an object with a specific key (keyobj) from the repo
     #raises a RepositoryError if the id is not in the repo
     #print(str(keyobj.bookID))
     cmd = "SELECT * FROM " + self._table_name + " WHERE Id=" + str(
         keyobj.rentalID) + ";"
     self._cursor.execute(cmd)
     line = self._cursor.fetchone()
     if line is None:
         raise RepositoryError(self._name + " Inexistent ID!\n")
     if line[4] is not None:
         obj = Rental(
             int(line[0]), Book(int(line[1]), None, None),
             Client(int(line[2]), None),
             datetime.datetime.strptime(line[3], '%Y-%m-%d').date(),
             datetime.datetime.strptime(line[4], '%Y-%m-%d').date())
     else:
         obj = Rental(
             int(line[0]), Book(int(line[1]), None, None),
             Client(int(line[2]), None),
             datetime.datetime.strptime(line[3], '%Y-%m-%d').date(), None)
     return obj
    def createRental(self, rentalID, bookID, clientID, rd, dd, retd):
        rental = Rental(rentalID, bookID, clientID, rd, dd, retd)
        self.__repositoryRental.addRental(rental)
        rentals = self.__repositoryRental.getAll()
        """for rent in rentals:
            if rent.getRentalID == rentalID:
                raise ValueError("The ID must be unique!")"""

        redo = FunctionCall(self.createRental, rentalID, bookID, clientID, rd,
                            dd, retd)
        undo = FunctionCall(self.removeRental, rentalID)
        oper = Operation(undo, redo)
        self.__UndoController.add(oper)
        self.__repositoryRental.addRental(rental)

        return rental
 def generateRentals(self, dimension, idBasis, books, clients):
     result = []
     for i in range(dimension):
         rentedDate = datetime.date(random.randint(2000, 2018),
                                    random.randint(1, 12),
                                    random.randint(1, 28))
         dueDate = rentedDate + datetime.timedelta(
             days=random.randint(150, 300))
         returnedDate = rentedDate + datetime.timedelta(
             days=random.randint(60, 400))
         if random.choice([True, False, False
                           ]) or returnedDate > datetime.date.today():
             returnedDate = None
         r = Rental(idBasis + i,
                    random.choice(books).getID(),
                    random.choice(clients).getID(), rentedDate, dueDate,
                    returnedDate)
         result.append(r)
     return result
Beispiel #19
0
    def readRental(self):
        ID = input("Rental ID:")
        if self._rentalController.exists(ID):
            print("Rental ID " + ID + " allready exists")
            return None
        movieID = input("Movie ID: ")
        if self._movieController.exists(movieID) == False:
            print("Movie id: " + movieID + " not found!")
            return None
        clientID = input("Client ID: ")
        if self._rentalController.clientCanRent(clientID) == False:
            print("Cleint " + cleintID + " cant rent any movie")
            return None
        if self._clientController.exists(clientID) == False:
            print("Client id: " + clientID + " not found!")
            return None
        rentedDate = self.readDate("Rented date(zi/luna/an): ")
        dueDate = self.readDate("Due date(zi/luna/an): ")

        return Rental(ID, movieID, clientID, rentedDate, dueDate)
 def _loadFile(self):
     try:
         #self._fileName = "D:\\INFO2018-2019\\~INFO\\FP\\Assignments\\AICIASS5-7\\57\\repository\\" + self._fileName
         f = open(self._fileName, "r")
         s = f.readline()
         while len(s) > 1:
             tok = s.split(",")
             if len(tok) == 6:
                 rental = Rental(int(tok[0]), int(tok[1]), int(tok[2]),
                                 datetime.strptime(tok[3], '%Y-%m-%d'),
                                 datetime.strptime(tok[4], '%Y-%m-%d'),
                                 datetime.strptime(tok[5], '%Y-%m-%d'))
                 RentalRepository.addRental(self, rental)
             """if len(tok) == 5:
                 rental = Rental(int(tok[0]), int(tok[1]), int(tok[2]), datetime.strptime(tok[3], '%Y-%m-%d'), datetime.strptime(tok[4], '%Y-%m-%d'),None)
                 RentalRepository.addRental(self, rental)"""
             s = f.readline().strip()
     except Exception as e:
         raise RepositoryError("The file cannot be open")
     finally:
         f.close()
Beispiel #21
0
 def initFromText(self, fileForBooks, fileForClients, fileForRentals):
     fBooks = open(fileForBooks, "r")
     fClients = open(fileForClients, "r")
     fRentals = open(fileForRentals, "r")
     linesBook = fBooks.readlines()
     linesClient = fClients.readlines()
     linesRental = fRentals.readlines()
     for lines in linesBook:
         list = lines.split(",")
         newBook = Book(list[0], list[1], list[2])
         self.addTheBookToTheRepo(newBook)
     for lines in linesClient:
         list = lines.split(",")
         newClient = Client(list[0], list[1])
         self.addTheClientToTheRepo(newClient)
     for lines in linesRental:
         list = lines.split(",")
         list[3] = self.stringToDate(list[3])
         if list[4] != "notReturned":
             list[4] = self.stringToDate(list[4])
         newRental = Rental(list[0], list[1], list[2], list[3], list[4])
         self.insertIntoRentals(newRental)
Beispiel #22
0
    def createRental(self, rentalId, client, car, start, end):
        """
        Create a rental using the provided data
        rentalId - id of the new rental
        client - The client that will rent the car
        car - The car to be rented
        start, end - The endpoints of the rental
        """
        rental = Rental(rentalId, start, end, client, car)
        self._validator.validate(rental)
        '''
        Check the car's availability for the given period 
        '''
        if self.isCarAvailable(car, start, end) == False:
            raise CarRentalException("Car is not available during that time!")

        self._repository.store(rental)
        '''
        If the operation did not raise an Exception, then we record it for Undo/Redo
        '''
        self._operations.append(AddOperation(rental))
        self._index += 1
        self._undoController.recordUpdatedControllers([self])
Beispiel #23
0
    #________________CLIENTS____________________________________________________
    repoClients.add(Client(20, "John Wright"))
    repoClients.add(Client(40, "Andrei Ivan"))
    repoClients.add(Client(35, "Frank Lampard"))
    repoClients.add(Client(78, "Gerard Pique"))
    repoClients.add(Client(24, "Moussa Dembele"))
    repoClients.add(Client(12, "Mohamed Salah"))
    repoClients.add(Client(4, "Virgil Van Dijk"))
    repoClients.add(Client(67, "Frenkie De Jong"))
    repoClients.add(Client(80, "Luuk De Jong"))
    repoClients.add(Client(36, "Joshua Kimmich"))
    #____________________________________________________________________________

    repoRental.add(
        Rental(1, Book(1, "The Secret Crusade", "Oliver Bowden"),
               Client(20, "John Wright"), datetime.date(2019, 10, 5), None))
    repoRental.add(
        Rental(2, Book(2, "The Illustrated Man", "Ray Bradbury"),
               Client(40, "Andrei Ivan"), datetime.date(2019, 10, 7), None))

    #repoRental.add(Rental(3, Book(3, "The Glass Castle", "Jeannette Walls"), Client(35, "Frank Lampard"), datetime.date(2019, 10, 15), None))
    repoRental.add(
        Rental(4, Book(4, "Still Alice", "Lisa Genova"),
               Client(78, "Gerard Pique"), datetime.date(2019, 11, 1), None))
    repoRental.add(
        Rental(5, Book(5, "Olive Again", "Elizabeth Strout"),
               Client(24, "Moussa Dembele"), datetime.date(2019, 11, 7), None))
    repoRental.add(
        Rental(6, Book(6, "The Nightshift Before Christmas", "Adam Kay"),
               Client(12, "Mohamed Salah"), datetime.date(2019, 11, 9), None))
    repoRental.add(
Beispiel #24
0
 def addToMostRentedBooks(self, newBook):
     self.mostRentedBooks.append([Rental.getBookId(newBook), 1])