def get_subscribed_emails(): list_of_customers = crm.read_content_from_file_in_nested_list() list_of_subscribed_emails = [] for customer in list_of_customers: if customer[3] == '1': list_of_subscribed_emails.append(customer[2]) view.print_general_results(list_of_subscribed_emails, 'Subscribed emails')
def get_subscribed_emails(): subscribed_emails_list = crm.get_emails_of_subscribent() if len(subscribed_emails_list) > 0: view.print_general_results(subscribed_emails_list, "Subscribed Emails:") else: view.print_error_message("There are no subscribed emails!")
def count_employees_per_department(): list_of_employes = hr.get_employee() emp_per_dep = {} for i in range(len(list_of_employes)): if list_of_employes[i][hr.DEPARTMENT_INDEX] in emp_per_dep: emp_per_dep[list_of_employes[i][hr.DEPARTMENT_INDEX]] += 1 else: emp_per_dep[list_of_employes[i][hr.DEPARTMENT_INDEX]] = 1 view.print_general_results(emp_per_dep, "Employees per department")
def get_biggest_revenue_transaction(): transactions = sales.read_data_from_file() price_index = sales.HEADERS.index("Price") transaction_price = [ float(transaction[price_index]) for transaction in transactions ] transaction_index = transaction_price.index(max(transaction_price)) view.print_general_results(transactions[transaction_index], "Biggest revenue transaction")
def count_employees_with_clearance(): list_of_employes = hr.get_employee() employes_with_clearance = 0 number = int(view.get_input("Please write a clearence level: ")) for i in range(len(list_of_employes)): if int(list_of_employes[i][hr.CLEARANCE_INDEX]) <= number: employes_with_clearance += 1 view.print_general_results( employes_with_clearance, "Number of employeees with required clearance level")
def count_employees_with_clearance(): label = "Number of employees with inputted clearance level or greater" list_of_employes = hr.read_content_from_file_in_nested_list() clearance = hr.HEADERS.index("Clearance") iterator = 0 number = view.get_input("clearance level") for employee in list_of_employes: if employee[clearance] >= number: iterator += 1 view.print_general_results(iterator, label)
def get_average_age(): list_of_employes = hr.get_employee() employee_birthday = hr.date_1(list_of_employes) total_age = 0 for i in range(len(employee_birthday)): years = int(employee_birthday[i][hr.YEARS_OLD]) total_age += hr.CURRENT_YEAR - years view.print_general_results(total_age / len(list_of_employes), "Employees average age is")
def count_employees_per_department(): label = "Employees in department in dictionary" list_of_employes = hr.read_content_from_file_in_nested_list() dictionary_of_departments = {} department = hr.HEADERS.index("Department") for employee in list_of_employes: if employee[department] in dictionary_of_departments: dictionary_of_departments[employee[department]] += 1 else: dictionary_of_departments[employee[department]] = 1 view.print_general_results(dictionary_of_departments, label)
def get_average_age(): label = "Average age of employees" list_of_employes = hr.read_content_from_file_in_nested_list() birth_date = hr.HEADERS.index("Date of birth") sum_of_age = 0 for employee in list_of_employes: birth_date_in_list = employee[birth_date].split("-") year_of_birthday = int(birth_date_in_list[0]) sum_of_age += (2020 - year_of_birthday) results = sum_of_age / len(list_of_employes) view.print_general_results(results, label)
def sum_transactions_between(): start_date, end_date = view.get_inputs(["start date", "end date"]) transactions = sales.read_data_from_file() price_index = sales.HEADERS.index("Price") transactions_price = [ float(element[price_index]) for element in transactions_between_dates( start_date, end_date, transactions) ] prices_sum = sum(transactions_price) view.print_general_results( prices_sum, f"Sum of transactions between {start_date} and {end_date}")
def get_oldest_and_youngest(): convert_dates = [] list_of_employes = hr.get_employee() for i in range(len(list_of_employes)): convert_dates.append(hr.convert_date( list_of_employes[i][hr.DOB_INDEX])) names = (list_of_employes[convert_dates.index(min(convert_dates))][1], list_of_employes[convert_dates.index(max(convert_dates))][1]) view.print_general_results(names, "The oldest and the youngest employes are")
def count_transactions_between(): try: start_date, end_date = view.get_inputs(["start date", "end date"]) if date_correct_input(start_date) or date_correct_input(end_date): transactions = sales.read_data_from_file() view.print_general_results( len( transactions_between_dates(start_date, end_date, transactions)), f"Number of transactions between {start_date} and {end_date}") except ValueError: view.print_error_message("Date in invalid format")
def sum_transactions_between(): date_labels = [ "Please enter date to sum transactions from (i.e. YYYY-MM-DD): ", "Please enter date to sum transactions to (i.e. YYYY-MM-DD): " ] time_frame = view.get_inputs(date_labels) date_from, date_to = time_frame[0], time_frame[1] summed_transactions = sales.find_sum_transactions_between( date_from, date_to) view.print_general_results( summed_transactions, f"Sum of transactions between {date_from} to {date_to} equals")
def get_oldest_and_youngest(): view.clear_console() employees = hr.read() employees.sort(key=lambda employee: employee[2]) oldest_employee = employees[0][1] youngest_employee = employees[len(employees) - 1][1] oldest_and_youngest = oldest_employee, youngest_employee oldest_and_youngest_label = "Oldest and youngest employees is : " view.print_general_results(oldest_and_youngest, oldest_and_youngest_label) view.wait_for_reaction() return oldest_employee, youngest_employee
def get_oldest_and_youngest(): label = ("Oldest person and Youngest person") list_of_employes = hr.read_content_from_file_in_nested_list() name = hr.HEADERS.index("Name") birth_date = hr.HEADERS.index("Date of birth") dict_of_names_with_birth_date = {} for employee in list_of_employes: dict_of_names_with_birth_date[employee[birth_date]] = employee[name] latest_date = min(dict_of_names_with_birth_date) earliest_date = max(dict_of_names_with_birth_date) results = (dict_of_names_with_birth_date[latest_date], dict_of_names_with_birth_date[earliest_date]) view.print_general_results(results, label)
def count_employees_per_department(): employees = hr.EMPLOYEES department_dict = {} for employee in employees: department_dict.update({employee[DEPARTMENT]: 0}) for employee in employees: department_dict[employee[DEPARTMENT]] += 1 view.print_general_results(department_dict, "number of departments")
def add_customer(): '''Creates the new customer in the dataset.''' PREFIX = "New Customer" # prepares labels to ask User about the new customer data labels = (f"{PREFIX} {HEADERS[HEADER_NAME]}", f"{PREFIX} {HEADERS[HEADER_EMAIL]}", f"{PREFIX} {HEADERS[HEADER_SUBSCRIBE]}") customer_data = view.get_inputs(labels) crm.create_item(customer_data) view.print_general_results(customer_data, "New Customer added")
def count_employees_with_clearance(): employees = hr.EMPLOYEES least_clearance = employees[0][CLEARANCE_LEVEL] counter = 0 for employee in employees: if employee[CLEARANCE_LEVEL] < least_clearance: least_clearance = employee[CLEARANCE_LEVEL] for employee in employees: if employee[CLEARANCE_LEVEL] == least_clearance: counter += 1 view.print_general_results(counter, "number of employees with at least clearance level")
def next_birthdays(): view.clear_console() employee_list = hr.get_birthday_date_and_name() next_birthdays_list = [] for employee in employee_list: days_to_next_birthday = hr.count_time_to_next_birth_day(employee[1]) if days_to_next_birthday < 14: next_birthdays_list.append(employee[0]) next_birthdays_list.append(str(employee[1].date())) next_birthdays_label = "Next birthday has: " view.print_general_results(next_birthdays_list, next_birthdays_label) view.wait_for_reaction() return next_birthdays_list
def count_transactions_between(): date_labels = [ "Please enter date to count from (i.e. YYYY-MM-DD): ", "Please enter date to count to (i.e. YYYY-MM-DD): " ] time_frame = view.get_inputs(date_labels) date_from, date_to = time_frame[0], time_frame[1] transactions_between = sales.find_transactions_between(date_from, date_to) if len(transactions_between) > 1: view.print_message(f"\nTransactions between {date_from} to {date_to}") view.print_table(sales.HEADERS, transactions_between) else: view.print_general_results( transactions_between, f"Transaction between {date_from} to {date_to}")
def get_average_age(): current_year = 2021 employees = hr.EMPLOYEES list_of_age = [] sum_of_age = 0 for employee in employees: list_of_age.append(current_year - int(((employee[DATE_OF_BIRTH]).split("-"))[0])) for element in list_of_age: sum_of_age += element average_age = sum_of_age / len(list_of_age) view.print_general_results(average_age, "average age is: ")
def count_employees_per_department(): view.clear_console() employees = hr.read() sep = " " employees.sort(key=lambda emplo: emplo[3]) dict_of_emplo_in_departament = {} for employee in employees: name_of_departament = employee[3] if name_of_departament not in dict_of_emplo_in_departament: dict_of_emplo_in_departament[name_of_departament] = 1 elif name_of_departament in dict_of_emplo_in_departament: dict_of_emplo_in_departament[name_of_departament] += 1 dict_of_emplo_in_departament_label = "Employee numbers by department" view.print_general_results(dict_of_emplo_in_departament, dict_of_emplo_in_departament_label) view.wait_for_reaction()
def next_birthdays(date_str): list_employees() dic = {} names = [] data_file = hr.DATAFILE for line in data_file[1:]: dic.update({line[1]: line[2]}) for key, value in dic.items(): new_value = date_str[0:5] + value[5:] start_date = date.datetime.strptime(date_str, '%Y-%m-%d').date() end_date = date.datetime.strptime(new_value, '%Y-%m-%d').date() delta = (end_date - start_date).days if delta > 0 and delta <= 14: names.append(key) view.print_general_results( names, f'Birthdays in the next two weeks {date_str}')
def count_employees_with_clearance(): view.clear_console() employees = hr.read() sep = " " employees.sort(key=lambda employee: employee[4]) list_of_employees_with_lowest_clearance = [] for worker in employees: int_worker_clearance = int(worker[4]) if int_worker_clearance > 0: worker_str = sep.join(worker) list_of_employees_with_lowest_clearance.append(worker_str) list_of_employees_with_lowest_clearance.sort(key=lambda emplo: emplo[4]) employees_with_lowest_clearance_label = "number of employees with clearances is :" view.print_general_results(len(list_of_employees_with_lowest_clearance), employees_with_lowest_clearance_label) view.wait_for_reaction()
def get_oldest_and_youngest(): employees = hr.EMPLOYEES name_of_oldest_user = [] year_of_oldest = int(((employees[0][DATE_OF_BIRTH]).split("-"))[0]) month_of_oldest = int(((employees[0][DATE_OF_BIRTH]).split("-"))[1]) day_of_oldest = int(((employees[0][DATE_OF_BIRTH]).split("-"))[2]) for employee in employees: if int(((employee[DATE_OF_BIRTH]).split("-"))[0]) < year_of_oldest: name_of_oldest_user[0] = employee[NAME_INDEX] year_of_oldest = int(((employee[DATE_OF_BIRTH]).split("-"))[0]) elif int(((employee[DATE_OF_BIRTH]).split("-"))[0]) == year_of_oldest and int(((employee[DATE_OF_BIRTH]).split("-"))[1]) < month_of_oldest: name_of_oldest_user[0] = employee[NAME_INDEX] month_of_oldest = int(((employee[DATE_OF_BIRTH]).split("-"))[1]) elif int(((employee[DATE_OF_BIRTH]).split("-"))[0]) == year_of_oldest and int(((employee[DATE_OF_BIRTH]).split("-"))[1]) == month_of_oldest and int(((employee[DATE_OF_BIRTH]).split("-"))[2]) < day_of_oldest: name_of_oldest_user[0] = employee[NAME_INDEX] day_of_oldest = int(((employee[DATE_OF_BIRTH]).split("-"))[2]) elif int(((employee[DATE_OF_BIRTH]).split("-"))[0]) == year_of_oldest and int(((employee[DATE_OF_BIRTH]).split("-"))[1]) == month_of_oldest and int(((employee[DATE_OF_BIRTH]).split("-"))[2]) == day_of_oldest: name_of_oldest_user.append(employee[NAME_INDEX]) name_of_youngest_user = [] year_of_youngest = int(((employees[0][DATE_OF_BIRTH]).split("-"))[0]) month_of_youngest = int(((employees[0][DATE_OF_BIRTH]).split("-"))[1]) day_of_youngest = int(((employees[0][DATE_OF_BIRTH]).split("-"))[2]) for employee in employees: if int(((employee[DATE_OF_BIRTH]).split("-"))[0]) > year_of_youngest: name_of_youngest_user[0] = employee[NAME_INDEX] year_of_youngest = int(((employee[DATE_OF_BIRTH]).split("-"))[0]) elif int(((employee[DATE_OF_BIRTH]).split("-"))[0]) == year_of_youngest and int(((employee[DATE_OF_BIRTH]).split("-"))[1]) > month_of_youngest: name_of_youngest_user[0] = employee[NAME_INDEX] month_of_youngest = int(((employee[DATE_OF_BIRTH]).split("-"))[1]) elif int(((employee[DATE_OF_BIRTH]).split("-"))[0]) == year_of_youngest and int(((employee[DATE_OF_BIRTH]).split("-"))[1]) == month_of_youngest and int(((employee[DATE_OF_BIRTH]).split("-"))[2]) > day_of_youngest: name_of_youngest_user[0] = employee[NAME_INDEX] day_of_youngest = int(((employee[DATE_OF_BIRTH]).split("-"))[2]) elif int(((employee[DATE_OF_BIRTH]).split("-"))[0]) == year_of_youngest and int(((employee[DATE_OF_BIRTH]).split("-"))[1]) == month_of_youngest and int(((employee[DATE_OF_BIRTH]).split("-"))[2]) == day_of_youngest: name_of_youngest_user.append(employee[NAME_INDEX]) oldest_and_youngest = tuple(name_of_oldest_user) oldest_and_youngest += tuple(name_of_youngest_user) print(oldest_and_youngest) view.print_general_results(oldest_and_youngest, "name of oldest and youngest user: ")
def get_average_age(): view.clear_console() current_year = int(datetime.now().year) all_together = 0 number_of_employee = 0 employees = hr.read() for employee in employees: date_list = employee[2].split("-") year = int(date_list[0]) all_together += year number_of_employee += 1 average = current_year - all_together // number_of_employee average_label = "the average age of the employees is" view.print_general_results(average, average_label) view.wait_for_reaction() return average
def next_birthdays(): label = "Employees which have birthday in 14days from inputted date" list_of_employes = hr.read_content_from_file_in_nested_list() list_of_employes_with_birthday = [] name = hr.HEADERS.index("Name") birth_date = hr.HEADERS.index("Date of birth") try: start_date = view.get_input("data") if not inputted_date_in_right_format(start_date): raise ValueError max_date = start_date.split("-") max_year, max_month, max_day = int(max_date[0]), int(max_date[1]), int(max_date[2]) + 14 end_date = change_data_into_correct_format(max_day, max_month, max_year) for employee in list_of_employes: if employee[birth_date] >= start_date and employee[birth_date] <= end_date: list_of_employes_with_birthday.append(employee[name]) view.print_general_results(list_of_employes_with_birthday, label) except ValueError: view.print_error_message("Data in invalid format")
def next_birthdays(): employees = hr.EMPLOYEES date_within_two_weeks = [] coming_birthday_names = [] user_input_date = view.get_input("Please input the date like : MM-DD") month = int(((user_input_date).split("-"))[0]) day = int(((user_input_date).split("-"))[1]) if month in range(1,13) and day in range(1,32): for _ in range(14): date = (f"{str(month).zfill(2)}-{str(day).zfill(2)}") date_within_two_weeks.append(date) if day == 31: if month == 12: month = 1 day = 1 else: day = 1 month += 1 else: day += 1 for employee in employees: month_of_birth = int(((employee[DATE_OF_BIRTH]).split("-"))[1]) day_of_birth = int(((employee[DATE_OF_BIRTH]).split("-"))[2]) date = (f"{str(month_of_birth).zfill(2)}-{str(day_of_birth).zfill(2)}") if date in date_within_two_weeks: coming_birthday_names.append(employee[NAME_INDEX]) if len(coming_birthday_names) > 0: view.print_general_results(coming_birthday_names, "Names of employees having birthdays within the two weeks") else: view.print_error_message("Nobody has birthday within two weeks") else: view.print_error_message("The input date is not correct")
def update_logic(label, folder_name_update_function, headers, department_data): row_to_update = int( view.get_input(f"\nEnter a valid row number to edit " f"{label}'s data(e.g. 1): ")) - 1 if len(department_data) > row_to_update >= 0: view.print_general_results(department_data[row_to_update], headers) column_index = view.print_message( "\nWhich category would you like to edit:") for index, header in enumerate(headers, 1): if index == len(headers) - 1: view.print_message(f"{index}) {headers[index]}") break else: view.print_message(f"{index}) {headers[index]},") column_index = int(view.get_input("")) if 0 < column_index < len(headers): cell_update_content = view.get_input( "\nEnter a new value for the selected category: ") update_confirmation = view.get_input( f"Are you sure you want to update {label}'s " f"{headers[column_index]}: " f"{department_data[row_to_update][column_index]} " f"to {cell_update_content}? (y/n) ").lower() if update_confirmation.startswith("y"): folder_name_update_function(row_to_update, column_index, cell_update_content) view.print_message(f"\nSuccessfully updated data!\n" f"{headers[column_index]} " f"for row {row_to_update + 1} has been " f"changed to: {cell_update_content} ") else: view.print_message("\nNo data has been updated.") else: view.print_error_message("No such category in this table!") else: view.print_error_message( f"There is no such row ({row_to_update + 1}) in this table!")
def get_subscribed_emails(): subs_mails = crm.get_subscribed_emails() view.print_general_results(subs_mails, "subscribers mails")