def __init__(self, con, id):
     """
         function to initialize Employee class
     :param con: Database connection object
     :param id: Employee Id
     """
     self.id = id
     self.employee_db = EmployeeDatabase(con, id)
class SalesSalaryAvgBarChart(AbstractMakeChart):
    def __init__(self):
        super().__init__()
        self.db = EmployeeDatabase()

    # db = EmployeeDatabase()

    def create(self):
        ave_sales = self.db.get_ave_sales()
        ave_salary = self.db.get_ave_salary()
        objects = ('Average Sales', 'Average Salary')
        y_pos = np.arange(len(objects))
        performance = [ave_sales, ave_salary]
        if ave_sales < 0 or ave_salary < 0:
            raise ValueError("wrong value of the input")
        plt.bar(y_pos, performance, align='center', alpha=0.5)
        plt.xticks(y_pos, objects)
        plt.ylabel('NZ Dollor')
        plt.title('Average Sales and Average Salary')
        plt.show()
Пример #3
0
class PieChart(AbstractMakeChart):
    def __init__(self):
        super().__init__()
        self.db = EmployeeDatabase()

    def create(self):
        employee_list = self.db.get_all_employee()
        labels = [emp[0] for emp in employee_list]
        sales = [emp[5] for emp in employee_list]

        plt.pie(sales, labels=labels, shadow=True)
        plt.axis('equal')
        plt.title("Sales by Salesperson")
        plt.show()
Пример #4
0
class LineChart(AbstractMakeChart):
    def __init__(self):
        super().__init__()
        self.db = EmployeeDatabase()

    def create(self):
        employee_list = self.db.get_all_employee()
        # our X values:
        emp_id = [emp[0] for emp in employee_list]
        # our Y values:
        sales_values = [emp[3] for emp in employee_list]
        plt.plot(emp_id, sales_values, '-b', label="A simple line")
        plt.legend(loc='upper left')
        plt.title("Sales Value for Employees")
        plt.xlabel('Employee ID')
        plt.ylabel('Sales')
        plt.show()

        plt.plot(emp_id, sales_values, 'bo')
        plt.show()
Пример #5
0
 def __init__(self):
     super().__init__()
     self.db = EmployeeDatabase()
class Employee(object):

    def __init__(self, con, id):
        """
            function to initialize Employee class
        :param con: Database connection object
        :param id: Employee Id
        """
        self.id = id
        self.employee_db = EmployeeDatabase(con, id)

    def indirect(self, i):
        """
            function to redirect to a specific function
        :param i: number of the method to be called
        :return: method called
        """
        method_name = 'number_' + str(i)
        method = getattr(self, method_name, lambda: 'Invalid')
        return method()

    def show_cab_for_timing(self, rows):
        x = PrettyTable()
        x.field_names = ["Cab Number", "Timing", "Route Id", "Source", "Destination", "Seats Available"]
        for r in rows:
            x.add_row([r[1], r[2], r[3], r[5], r[6], r[7]])
        print(x)

    def number_1(self):
        """
            function to book a cab
        :return: True if executed successfully else False
        """
        source = builtins.input("Please Enter the source: ")
        dest = builtins.input("Please Enter the destination: ")
        timing = builtins.input("Please Enter the timing: ")
        rows = self.employee_db.get_cab_for_timing(timing)
        self.show_cab_for_timing(rows)
        another_route = "True"
        while another_route == "True":
            route_id = builtins.input("Please enter the route id: ")
            self.employee_db.book_a_cab(int(route_id))
            another_route = builtins.input("Do you want to add another route?(True/False) ")

    def show_booking_details(self, rows):
        x = PrettyTable()
        x.field_names = ["Cab Number", "Timing", "Route Id", "Source", "Destination", "Date", "Status"]
        for r in rows:
            x.add_row([r[11], r[12], r[1], r[7], r[8], r[2], r[4]])
        print(x)

    def number_2(self):
        """
            function to view all the past bookings
        :return: True if executed successfully else False
        """
        status = 'PAST'
        rows = self.employee_db.get_booking_details(status)
        self.show_booking_details(rows)


    def number_3(self):
        """
            function to view all upcoming bookings
        :return: True if executed successfully else False
        """
        status = 'UPCOMING'
        rows = self.employee_db.get_booking_details(status)
        self.show_booking_details(rows)

    def show_upcoming_bookings(self, rows):
        x = PrettyTable()
        x.field_names = ["Booking Id", "Cab Number", "Timing", "Route Id", "Source", "Destination", "Date", "Status"]
        for r in rows:
            x.add_row([r[0], r[11], r[12], r[1], r[7], r[8], r[2], r[4]])
        print(x)

    def number_4(self):
        """
            function to cancel an upcoming booking
        :return: True if executed successfully else False
        """
        print("Following are the upcoming bookings: ")
        time_delta = datetime.datetime.now() + datetime.timedelta(minutes=30)
        print(time_delta.strftime("%H:%M"))
        rows = self.employee_db.get_upcoming_booking_details(time_delta.strftime("%H:%M"))
        self.show_upcoming_bookings(rows)
        cancel_booking = builtins.input("Please enter the Booking Id of the booking you want to cancel: ")
        self.employee_db.cancel_booking(int(cancel_booking))
Пример #7
0
class Controller:
    f = Filer()
    v = Validator()
    db = EmployeeDatabase()
    chart = ChartMaker()
    gd = GetData()

    # Jono's
    def load_file(self, file):
        try:
            if ".csv" in file[-4:]:
                content = self.f.read_csv(file)
            elif ".xlsx" in file[-5:]:
                content = self.f.read_excel(file)
            elif ".txt" in file[-4:]:
                content = self.f.read_txt(file)
            else:
                message = "incorrect format please see help load"
                raise NameError(message)
            validated_employees = self.validate_items(content)
            return validated_employees
        except NameError as e:
            print(e)
        except FileNotFoundError:
            print("File not found")
        except Exception as e:
            print(e)

    def validate_items(self, content):
        valid_employees = []
        invalid_employees = []
        for employee in content:
            item = self.v.validate_all(employee)
            if False in item:
                invalid_employees.append(employee)
            else:
                valid_employees.append(employee)
            emp = {'Valid': valid_employees, 'Invalid': invalid_employees}
        return emp

    def add_to_database(self, content_list):
        for item in content_list:
            self.gd.insert_employee(item)

    def get_all_employees(self):
        try:
            employees = self.gd.get_all_employee()
            if len(employees) > 0:
                return employees
            else:
                raise IndexError
        except IndexError:
            print("No employees in database")
        except Exception as e:
            print(e)

    # renee
    def print_chart_average(self):
        ave_sales = self.gd.get_ave_sales()
        ave_salary = self.gd.get_ave_salary()
        self.chart.make_bar_average(ave_sales, ave_salary)

    def print_chart_sales(self):
        employees = self.gd.get_all_employee()
        self.chart.make_bar_sales(employees)

    def print_chart_pie(self):
        employees = self.gd.get_all_employee()
        self.chart.make_pie(employees)

    def print_chart_line(self):
        employees = self.gd.get_all_employee()
        self.chart.make_line(employees)

    # Chami
    def save_file(self, file_format, employee_list):
        """
        # Chami -- added 19-03-2018
        >>> Controller.save_file('test1.txt', [['A001', 'M', '26', '200', 'Normal', '20', '08-10-1991'],['A001', 'M', '26', '200', 'Normal', '20', '08-10-1991']])
        Traceback (most recent call last):
        TypeError: save_file() missing 1 required positional argument: 'employee_list'

        >>> Controller.save_file('test1.txt',)
        Traceback (most recent call last):
        TypeError: save_file() missing 2 required positional arguments: 'file_format' and 'employee_list'

        >>> Controller.save_file()
        Traceback (most recent call last):
        TypeError: save_file() missing 3 required positional arguments: 'self', 'file_format', and 'employee_list'

        >>> Controller.save_file('test1.txt', [[],[]])
        Traceback (most recent call last):
        TypeError: save_file() missing 1 required positional argument: 'employee_list'

        >>> Controller.save_file('test1.txt', [[,[]])
        Traceback (most recent call last):
        SyntaxError: invalid syntax

        >>> Controller.save_file('test1.txt', [['A001', 'M', '26', '200', 'Normal', '20', '08-10-1991']['A001', 'M', '26', '200', 'Normal', '20', '08-10-1991']])
        Traceback (most recent call last):
        TypeError: list indices must be integers or slices, not tuple

        >>> Controller.save_file(' ', [['A001', 'M', '26', '200', 'Normal', '20', '08-10-1991']['A001', 'M', '26', '200', 'Normal', '20', '08-10-1991']])
        Traceback (most recent call last):
        TypeError: list indices must be integers or slices, not tuple

        >>> Controller.save_file(' .csv', [['A001', 'M', '26', '200', 'Normal', '20', '08-10-1991']['A001', 'M', '26', '200', 'Normal', '20', '08-10-1991']])
        Traceback (most recent call last):
        TypeError: list indices must be integers or slices, not tuple

        >>> Controller.save_file('test1.', [['A001', 'M', '26', '200', 'Normal', '20', '08-10-1991']['A001', 'M', '26', '200', 'Normal', '20', '08-10-1991']])
        Traceback (most recent call last):
        TypeError: list indices must be integers or slices, not tuple

        >>> Controller.save_file('.txt', [['A001', 'M', '26', '200', 'Normal', '20', '08-10-1991']['A001', 'M', '26', '200', 'Normal', '20', '08-10-1991']])
        Traceback (most recent call last):
        TypeError: list indices must be integers or slices, not tuple

        >>> Controller.save_file('.xlsx', [['A001', 'M', '26', '200', 'Normal', '20', '08-10-1991']['A001', 'M', '26', '200', 'Normal', '20', '08-10-1991']])
        Traceback (most recent call last):
        TypeError: list indices must be integers or slices, not tuple

        >>> Controller.save_file('.', [['A001', 'M', '26', '200', 'Normal', '20', '08-10-1991']['A001', 'M', '26', '200', 'Normal', '20', '08-10-1991']])
        Traceback (most recent call last):
        TypeError: list indices must be integers or slices, not tuple

        >>> Controller.save_file(' .xlsx', [['A001', 'M', '26', '200', 'Normal', '20', '08-10-1991']['A001', 'M', '26', '200', 'Normal', '20', '08-10-1991']])
        Traceback (most recent call last):
        TypeError: list indices must be integers or slices, not tuple

        >>> Controller.save_file('.xxx', [['A001', 'M', '26', '200', 'Normal', '20', '08-10-1991']['A001', 'M', '26', '200', 'Normal', '20', '08-10-1991']])
        Traceback (most recent call last):
        TypeError: list indices must be integers or slices, not tuple

        """
        try:
            if ".csv" in file_format:
                self.f.save_csv(file_format, employee_list)
            elif ".xlsx" in file_format:
                self.f.save_excel(file_format, employee_list)
            elif ".txt" in file_format:
                self.f.save_txt_file(file_format, employee_list)
            else:
                raise NameError("can not save that file type")
        except NameError as e:
            print(e)
        # except exception part needed

    def save_invalid(self, invalid_employees):
        try:
            self.f.save_txt_file("invalid.csv", invalid_employees)
        except:
            print("Whoops something went wrong")
Пример #8
0
 def __init__(self):
     self.cf = CSVFactory()
     self.f = Filer()
     self.v = Validator()
     self.db = EmployeeDatabase()
     self.chart = ChartMaker()
Пример #9
0
class Controller:
    def __init__(self):
        self.cf = CSVFactory()
        self.f = Filer()
        self.v = Validator()
        self.db = EmployeeDatabase()
        self.chart = ChartMaker()

    @staticmethod
    def load_filer(factory, file):
        return factory.create_file_content().get_result(file)

    @staticmethod
    def save_filer(factory, file, employee_list):
        return factory.create_save_file().get_result(file, employee_list)

    # Jono's
    def load_file(self, file):
        try:
            if ".csv" in file[-4:]:
                content = self.load_filer(CSVFactory(), file)

            elif ".xlsx" in file[-5:]:
                content = self.load_filer(ExcelFactory(), file)
            elif ".txt" in file[-4:]:
                content = self.load_filer(TXTFactory(), file)
            else:
                message = "incorrect format please see help load"
                raise NameError(message)
            validated_employees = self.validate_items(content)
            return validated_employees
        except NameError as e:
            print(e)
        except FileNotFoundError:
            print("File not found")
        except Exception as e:
            print(e)

    def validate_items(self, content):
        valid_employees = []
        invalid_employees = []
        for employee in content:
            item = self.v.validate_all(employee)
            if False in item:
                invalid_employees.append(employee)
            else:
                valid_employees.append(employee)
            emp = {'Valid': valid_employees, 'Invalid': invalid_employees}
        return emp

    def add_to_database(self, content_list):
        for item in content_list:
            self.db.insert_employee(item)

    def get_all_employees(self):
        try:
            employees = self.db.get_all_employee()
            if len(employees) > 0:
                return employees
            else:
                raise IndexError
        except IndexError:
            print("No employees in database")
        except Exception as e:
            print(e)

    # renee
    def print_chart_average(self):
        bar_chart = Chart(SalesSalaryAvgBarChart())
        bar_chart.make_chart()

    def print_chart_sales(self):
        bar_chart = Chart(SalesBarChart())
        bar_chart.make_chart()

    def print_chart_pie(self):
        pie_chart = Chart(PieChart())
        pie_chart.make_chart()

    def print_chart_line(self):
        line_chart = Chart(LineChart())
        line_chart.make_chart()

    # Chami
    def save_file(self, file_format, employee_list):
        try:
            if ".csv" in file_format:
                content = self.save_filer(CSVFactory(), file_format,
                                          employee_list)
            elif ".xlsx" in file_format:
                content = self.save_filer(ExcelFactory(), file_format,
                                          employee_list)
            elif ".txt" in file_format:
                content = self.save_filer(TXTFactory(), file_format,
                                          employee_list)
            else:
                raise NameError("can not save that file type")
        except NameError as e:
            print(e)

    def save_invalid(self, invalid_employees):
        try:
            self.f.save_txt_file("invalid.csv", invalid_employees)
        except:
            print("Whoops something went wrong")