Exemplo n.º 1
0
    def testAddRental(self):

        rentalDate = datetime.datetime.now().date()
        self.rentalController.addRental(2, 2, 1)
        self.assertEqual(self.rentalList.getAll(), [
            Rental(0, 0, 1, datetime.datetime.strptime("2017-10-10",
                                                       '%Y-%m-%d'),
                   datetime.datetime.strptime("2017-10-20", '%Y-%m-%d'), ""),
            Rental(1, 1, 1, datetime.datetime.strptime("2017-10-10",
                                                       '%Y-%m-%d'),
                   datetime.datetime.strptime("2017-10-20", '%Y-%m-%d'), ""),
            Rental(2, 2, 1, rentalDate,
                   rentalDate + datetime.timedelta(days=10), "")
        ])
        try:
            self.rentalController.addRental(
                Rental(100, 1,
                       datetime.datetime.strptime("2017-10-10", '%Y-%m-%d'),
                       datetime.datetime.strptime("2017-10-20", '%Y-%m-%d')))
            self.rentalController.addRental(
                Rental(2, 200,
                       datetime.datetime.strptime("2017-10-10", '%Y-%m-%d'),
                       datetime.datetime.strptime("2017-10-20", '%Y-%m-%d')))
        except Exception:
            pass
Exemplo n.º 2
0
    def setUp(self):
        unittest.TestCase.setUp(self)
        undoController = UndoController()

        self.rentalList = Repository()
        self.bookList = Repository()
        self.clientList = Repository()

        self.rentalList.add(
            Rental(0, 0, 1, datetime.datetime.strptime("2017-10-10",
                                                       '%Y-%m-%d'),
                   datetime.datetime.strptime("2017-10-20", '%Y-%m-%d'), ""))
        self.rentalList.add(
            Rental(1, 1, 1, datetime.datetime.strptime("2017-10-10",
                                                       '%Y-%m-%d'),
                   datetime.datetime.strptime("2017-10-20", '%Y-%m-%d'), ""))

        self.bookList.add(Book(0, "book0", "desc0", "author0"))
        self.bookList.add(Book(1, "book1", "desc1", "author1"))
        self.bookList.add(Book(2, "book2", "desc2", "author2"))

        self.clientList.add(Client(0, "name0"))
        self.clientList.add(Client(1, "name1"))
        self.clientList.add(Client(2, "name2"))

        self.rentalController = RentalController(self.rentalList,
                                                 self.bookList,
                                                 self.clientList,
                                                 undoController)
        self.bookController = BookController(self.bookList, undoController,
                                             self.rentalController)
        self.clientController = ClientController(self.clientList,
                                                 undoController,
                                                 self.rentalController)
Exemplo n.º 3
0
 def __loadFromFile(self):
     try:
         f = open(self.__f_name, "r")
         line = f.readline().strip()
         while line != "":
             attrs = line.split(',')
             attrs[3].strip(' ')
             attrs[3] = attrs[3].split('-')
             attrs[4].strip(' ')
             attrs[4] = attrs[4].split('-')
             attrs[5].strip(' ')
             if not attrs[5] == " False":
                 attrs[5] = attrs[5].split('-')
                 b = Rental(int(attrs[0]), int(attrs[1]), int(attrs[2]),
                            date(int(attrs[3][0]), int(attrs[3][1]), int(attrs[3][2])),
                            date(int(attrs[4][0]), int(attrs[4][1]), int(attrs[4][2])),
                            date(int(attrs[5][0]), int(attrs[5][1]), int(attrs[5][2])))
             else:
                 b = Rental(int(attrs[0]), int(attrs[1]), int(attrs[2]),
                            date(int(attrs[3][0]), int(attrs[3][1]), int(attrs[3][2])),
                            date(int(attrs[4][0]), int(attrs[4][1]), int(attrs[4][2])),
                            False)
             Repository.add(self, b)
             line = f.readline().strip()
     except IOError:
         raise RepositoryException("Can't load data from file " + self.__f_name + "!")
     f.close()
    def setUp(self):
        new_release_movie = Movie("新作", NewReleasePrice())
        children_movie = Movie("子供", ChildrenPrice())
        regular_movie = Movie("一般", RegularPrice())

        self.new_release = Rental(new_release_movie, 3)
        self.children = Rental(children_movie, 2)
        self.regular = Rental(regular_movie, 1)
Exemplo n.º 5
0
 def _initRentals(self):
     List = []
     List.append(Rental("1", "1", "1", Date(19, 10, 2019), Date(21, 11, 2019)))
     List.append(Rental("2", "2", "3", Date(17, 11, 2019), Date(18, 11, 2019)))
     List.append(Rental("3", "3", "5", Date(15, 6, 2015), Date(12, 12, 2020)))
     List.append(Rental("4", "4", "7", Date(2, 6, 2000), Date(2, 6, 2020)))
     List.append(Rental("5", "5", "9", Date(6, 11, 2019), Date(6, 12, 2019)))
     return List
Exemplo n.º 6
0
Arquivo: tests.py Projeto: rzvpop/lab4
    def test_setGet(self):
        r = Rental(1, 4, 2, date(2017, 12, 5),
                   date(2017, 12, 5) + timedelta(days=10), False)
        self.assertTrue(r.dueDate == date(2017, 12, 15))

        r.clientId = 10

        self.assertTrue(r.clientId == 10)
Exemplo n.º 7
0
 def setUp(self):
     self.rentalsList = RentalController(False)
     r1 = Rental(90, 106, 10, None, datetime(2018, 3, 10), None)
     r2 = Rental(91, 100, 11)
     r3 = Rental(92, 106, 12)
     self.rentalsList.add(r1)
     self.rentalsList.add(r2)
     self.rentalsList.add(r3)
Exemplo n.º 8
0
    def returnBook(self, args, recForUndo = True):
        r = Rental(int(args[0]), 1, 1, date.today(), date.today(), False)
        r = self._repo.find(r)
        old_r = deepcopy(self._repo.find(r))
        self._validator.rentalValidator(r)
        r.retDate = date.today()
        self._repo.upd(r)

        if recForUndo == True:
            undo = FunctionCall(self.updateRental, [old_r.id, old_r.bookId, old_r.clientId, old_r.renDate, old_r.dueDate, old_r.retDate], False)
            redo = FunctionCall(self.updateRental, [r.id, r.bookId, r.clientId, r.renDate, r.dueDate, r.retDate], False)
            operation = Operation(redo, undo)
            self._undo_ctrl.recordOp(operation)
Exemplo n.º 9
0
    def rent(self, rentalId, clientId, movieId, n, client_repo, movie_repo):
        """
        Creates a new rental with the given parameters
        The function checks if the movie is available (either has not been rented or the return dat is set != None
        Takes the number of days for the rental and uses it to create a due_date
        """
        returned_date = None  # None
        # fa-l input cu numarul de zile
        rented_date = datetime.now()
        due_date = datetime.now() + timedelta(days=n)
        print(clientId, movieId, client_repo.get_position(clientId))

        if client_repo.find_by_id(clientId):
            if movie_repo.find_by_id(movieId) == True:
                client = client_repo[client_repo.get_position(clientId)]
                movie = movie_repo[movie_repo.get_position(movieId)]

                print("The Client:", client.name, "rented the movie: ",
                      movie.title, " ")
                rental = Rental(rentalId, movie.id, client.id, rented_date,
                                due_date, returned_date)

                undo = FunctionCall(self.remove_by_clientId,
                                    self.__rentalList.size() - 1)
                redo = FunctionCall(self.add, rental)
                op = Operation(undo, redo)
                self.__undo_controller.addOperation(op)

                self.__rentalList.add(rental)
Exemplo n.º 10
0
def testInitRentals(repo):

    for i in range(0, 10):
        repo.add(
            Rental(
                i, i, i,
                datetime.datetime.now().date(),
                datetime.datetime.now().date() + datetime.timedelta(days=10),
                datetime.datetime(2017, 12, 1).date()))
    for i in range(10, 20):
        repo.add(
            Rental(
                i, i - 10, i - 10,
                datetime.datetime(2017, 4, 27).date(),
                datetime.datetime(2017, 4, 27).date() +
                datetime.timedelta(days=10), ""))
Exemplo n.º 11
0
 def _addRental(self, rentalId, movieId, clientId, dueDate, U=""):
     if self._userOk(clientId) and self._movieOk(movieId):
         self._rentals.append(Rental(rentalId, movieId, clientId, self._globalDate, dueDate))
         if U != "U":
             self._stack.append(StackObject("self._removeRental", [rentalId]))
             self._helpStack.append(StackObject("self._addRental", [rentalId, movieId, clientId, dueDate]))
             self._redoStack.clear()
    def updateRental(self,
                     id,
                     bookId,
                     clientId,
                     rentedDate,
                     dueDate,
                     returnedDate,
                     recordForUndo=True):
        """
        Updates the rental with a given id with the given data
        """
        rental = Rental(id, bookId, clientId, rentedDate, dueDate,
                        returnedDate)
        oldRental = copy.deepcopy(self.getRentalById(id))
        index = self.getIndexById(oldRental.getId())
        self._rentalRepo.update(index, rental)
        if recordForUndo == True:
            undo = FunctionCall(self.updateRental, oldRental.getId(),
                                oldRental.getBookId(), oldRental.getClientId(),
                                oldRental.getRentedDate(),
                                oldRental.getDueDate(),
                                oldRental.getReturnedDate(), False)
            redo = FunctionCall(self.updateRental, id, bookId, clientId,
                                rentedDate, dueDate, returnedDate, False)
            operation = Operation(redo, undo)
            self._undoController.recordOperation(operation)

        return oldRental
Exemplo n.º 13
0
    def testRemoveRentalByBookId(self):

        self.rentalController.removeRentalByBookId(0)
        self.assertEqual(self.rentalList.getAll(), [
            Rental(1, 1, 1, datetime.datetime.strptime("2017-10-10",
                                                       '%Y-%m-%d'),
                   datetime.datetime.strptime("2017-10-20", '%Y-%m-%d'), "")
        ])
Exemplo n.º 14
0
    def _load_file(self):
        try:
            f = open(self.file_name, 'r')

            line = f.readline()
            while line != '':
                tok = line.split(",")
                rented_date = tok[3].split('-')
                rent_year = rented_date[0]
                rent_month = rented_date[1]
                rent_day = rented_date[2]

                rented_date = date(int(rent_year), int(rent_month),
                                   int(rent_day))

                due_date = tok[4].split('-')
                due_year = due_date[0]
                due_month = due_date[1]
                due_day = due_date[2]

                due_date = date(int(due_year), int(due_month), int(due_day))

                if tok[5] == "None":
                    rental = Rental(int(tok[0]), int(tok[1]), int(tok[2]),
                                    rented_date, due_date, tok[5])
                else:
                    returned_date = tok[4].split('-')
                    returned_year = returned_date[0]
                    returned_month = returned_date[1]
                    returned_day = returned_date[2]

                    returned_date = date(int(returned_year),
                                         int(returned_month),
                                         int(returned_day))
                    rental = Rental(int(tok[0]), int(tok[1]), int(tok[2]),
                                    rented_date, due_date, returned_date)

                Rental_Repository._add(self, rental)
                line = f.readline()
        except IOError as e:
            raise Exception("cannot load file - " + str(e))
        finally:
            f.close()
Exemplo n.º 15
0
    def testReturnBook(self):

        with self.assertRaises(Exception):
            self.rentalController.returnBook(100)
        self.rentalController.returnBook(0)
        self.assertEqual(
            self.rentalList.get(0),
            Rental(0, 0, 1, datetime.datetime.strptime("2017-10-10",
                                                       '%Y-%m-%d'),
                   datetime.datetime.strptime("2017-10-20", '%Y-%m-%d'),
                   datetime.datetime.now().date()))
Exemplo n.º 16
0
    def setUp(self):
        unittest.TestCase.setUp(self)

        self.rentalList = MyList()
        self.bookList = MyList()
        self.clientList = MyList()
        self.rentalList.append(
            Rental(0, 0, 1, datetime.datetime.strptime("2017-10-10",
                                                       '%Y-%m-%d'),
                   datetime.datetime.strptime("2017-10-20", '%Y-%m-%d'), ""))
        self.rentalList.append(
            Rental(1, 1, 1, datetime.datetime.strptime("2017-10-10",
                                                       '%Y-%m-%d'),
                   datetime.datetime.strptime("2017-10-20", '%Y-%m-%d'), ""))

        self.bookList.append(Book(0, "book0", "desc0", "author1"))
        self.bookList.append(Book(1, "book1", "desc1", "author0"))
        self.bookList.append(Book(2, "book2", "desc2", "author2"))

        self.clientList.append(Client(0, "name1"))
        self.clientList.append(Client(1, "name0"))
        self.clientList.append(Client(2, "name2"))
Exemplo n.º 17
0
    def create_statement(self):
        new_release_movie = Movie("新作", NewReleasePrice())

        children_movie = Movie("子供", ChildrenPrice())

        regular_movie = Movie("一般", RegularPrice())

        new_release = Rental(new_release_movie, 3)

        children = Rental(children_movie, 2)

        regular = Rental(regular_movie, 1)

        customer = Customer("山田")

        customer.add_rental(new_release)

        customer.add_rental(children)

        customer.add_rental(regular)

        return customer
Exemplo n.º 18
0
    def rent(self, movie_title, CNP, rented_date=None):
        """
            Make client identified by CNP rent a movie identified by movie_title, today

            Args:
                movie_title(str): title of the movie to be rented
                CNP(str): CNP of the client that rents
                rented_date(datetime.time): date when movie was rented by client

            Raises:
                ValueError: if movie is already rented
                            if client didn't return a rented movie
                            if client has a movie past due date
        """
        self.__validator.validate_title(movie_title)
        movie_title = self.__formatter.format_title(movie_title)
        movie = self.__movie_repository.find(movie_title)

        self.__validator.validate_CNP(CNP)
        CNP = self.__formatter.format_CNP(CNP)
        client = self.__client_repository.find(CNP)

        rentals = self.__repository.get_all()
        for rental in rentals:
            if rental.movie == movie and rental.returned_date == None:
                raise ValueError("Filmul a fost deja inchiriat")
            elif rental.client == client and rental.returned_date == None:
                raise ValueError("Clientul nu a adus un film inchiriat")
            elif rental.client == client and rental.due_date < rental.returned_date:
                raise ValueError(
                    "Clientul a intarziat cu returnarea unui film")

        if rented_date == None:
            self.__repository.add(Rental(movie, client))
        else:
            self.__repository.add(
                Rental(movie, client, rented_date=rented_date))
Exemplo n.º 19
0
def testRent():
    b_repo = testBook()
    c_repo = testClient()
    r_repo = Repository()

    ctrl = Controller(b_repo, c_repo, r_repo)

    ctrl.addRental(["1", "3", "12"])
    try:
        ctrl.addRental(["2", "4", "42"])
    except LibraryException:
        pass

    rentals = r_repo.getAll()

    assert(rentals[0] == Rental(1, 4, 12, date.today(), date.today() + timedelta(days=10), False))
Exemplo n.º 20
0
    def addRental(self, args):
        if self.avlBook(int(args[1])):
            b = Book(int(args[1]), "default", "default", "default")
            try:
                self.__book_repo.find(b)
            except LibraryException:
                raise LibraryException("Inexistent book!")

            c = Client(int(args[2]), "default")
            try:
                self.__client_repo.find(c)
            except LibraryException:
                raise LibraryException("Unregistred client!")

            r = Rental(int(args[0]), int(args[1]), int(args[2]), date.today(), date.today() + timedelta(days=10), False)
            self._validator.rentalValidator(r)
            self._repo.add(r)
        else:
            raise LibraryException("This book is not available!")
Exemplo n.º 21
0
 def _loadFromFile(self):
     try:
         f = open(self._fName, "r")
     except IOError:
         print("ERROR while trying to open " + self._fName)
     ID = f.readline().strip()
     self._nextID = ID
     ln = f.readline().strip()
     while ln != "":
         t = ln.split(" @ ")
         st = datetime.strptime(t[3], "%Y-%m-%d").date()
         end = datetime.strptime(t[4], "%Y-%m-%d").date()
         rental = Rental(int(t[0]),
                         int(t[1]),
                         int(t[2]),
                         st,
                         end,
                         active=t[5])
         RentalRepository.add(self, rental)
         ln = f.readline().strip()
     f.close()
Exemplo n.º 22
0
Arquivo: tests.py Projeto: rzvpop/lab4
    def test_search(self):
        book_repo = Repository()
        client_repo = Repository()
        rental_repo = Repository()
        book_repo.add(Book(1, "Iona", "teatru postbelic", "Marin Sorescu"))
        book_repo.add(Book(2, "Amintiri din copilarie", "proza",
                           "Ion Creanga"))
        book_repo.add(Book(3, "1984", "roman", "George Orwell"))

        st_ctrl = StatisticsController(book_repo, client_repo, rental_repo)

        l = []
        st_ctrl.search(book_repo, "author", "re", l)
        self.assertTrue(len(l) == 2)

        rental_repo.add(
            Rental(2, 2, 10, date.today(),
                   date.today() + timedelta(days=10), False))
        most_rented = st_ctrl.mostRentedBooks()
        self.assertTrue(
            most_rented[0] ==
            [Book(2, "Amintiri din copilarie", "proza", "Ion Creanga"), 1])
Exemplo n.º 23
0
 def returnBook(self, args):
     r = Rental(int(args[0]), 1, 1, date.today(), date.today(), False)
     r = self.__rental_repo.find(r)
     self.__validator.rentalValidator(r)
     r.retDate = date.today()
 def validation(self, id, bookId, clientId, rentalDate, dueDate,
                returnedDate):
     if self.rentalValidation(bookId, clientId):
         return Rental(id, bookId, clientId, rentalDate, dueDate,
                       returnedDate)
Exemplo n.º 25
0
 def create_rental(self,  rentalID ,  movieId ,  clientId ,  rented_date = None, due_date = None,  returned_date = None ):
     rent = Rental( rentalID ,  movieId ,  clientId ,  rented_date, due_date ,  returned_date)
     self._add(rent)
Exemplo n.º 26
0
 def updateRental(self, args, recForUndo = True):
     r = Rental(int(args[0]), int(args[1]), int(args[2]), args[3], args[4], args[5])
     self._validator.rentalValidator(r)
     self._repo.upd(r)
Exemplo n.º 27
0
 def _add_rental(self, clientID, movieID):
     rental = Rental(clientID, movieID)
     self._rental_rep.add(rental)
     return rental
Exemplo n.º 28
0
 def initialise(self):
     r1 = Rental(1, 100, 10, datetime(2018, 3, 10), datetime(2018, 3, 20),
                 None)
     r2 = Rental(2, 101, 11, datetime(2018, 4, 12), datetime(2018, 12, 20),
                 None)
     r3 = Rental(3, 102, 12, datetime(2018, 5, 12), datetime(2018, 12, 20),
                 datetime(2018, 10, 22))
     r4 = Rental(4, 103, 12, datetime(2018, 10, 24), datetime(2018, 11, 20),
                 None)
     r5 = Rental(5, 110, 21, datetime(2018, 11, 22), datetime(2018, 12, 20),
                 None)
     r6 = Rental(6, 111, 26, datetime(2018, 11, 25), datetime(2018, 11, 26),
                 None)
     r7 = Rental(7, 112, 28, datetime(2018, 11, 24), datetime(2018, 11, 25),
                 datetime(2018, 11, 26))
     r8 = Rental(8, 113, 20, datetime(2018, 11, 25), datetime(2018, 11, 27),
                 datetime(2018, 11, 26))
     r9 = Rental(9, 102, 29, datetime(2018, 10, 10), datetime(2018, 11, 11),
                 datetime(2018, 11, 26))
     r10 = Rental(10, 130, 20, datetime(2018, 4, 25), datetime(2018, 5, 27),
                  datetime(2018, 5, 26))
     r11 = Rental(11, 112, 22, datetime(2018, 9, 4), datetime(2018, 11, 5),
                  None)
     r12 = Rental(12, 113, 20, datetime(2018, 10, 30),
                  datetime(2018, 11, 2), datetime(2018, 11, 2))
     r13 = Rental(14, 105, 16, datetime(2018, 10, 29),
                  datetime(2018, 11, 29), None)
     self.add(r1)
     self.add(r2)
     self.add(r3)
     self.add(r4)
     self.add(r5)
     self.add(r6)
     self.add(r7)
     self.add(r8)
     self.add(r9)
     self.add(r10)
     self.add(r11)
     self.add(r12)
     self.add(r13)
Exemplo n.º 29
0
 def updateRental(self, args):
     r = Rental(int(args[0]), int(args[1]), int(args[2]), args[3], args[4], args[5])
     self.__validator.rentalValidator(r)
     self.__rental_repo.upd(r)