def add_log(self, name: str, temperature: float, date: str, group: str): """ Создает новую запись. :param name: ФИО человека. :param temperature: Температура. :param date: Дата (в формате '%Y-%m-%d'). :param group: Группа, в которой создаётся запись. """ logger.info("Запрос на создание записи в группе `%s`.", group) tools.loading_modal("addModalBody") arrival_time = datetime.now().strftime("%H:%M") # Текущее время self.thermometry_logs.insert( name=name, temperature=Float(temperature), date=datetime.strptime(date, "%Y-%m-%d").strftime("%d.%m.%Y"), grp=web.app.groups.get()[group]["id"], arrival_time=arrival_time, ) logger.info( "Создана новая запись в группе `%s`. " "name=%s, temperature=%s, date=%s, arrival_time=%s", *(group, name, temperature, date, arrival_time), ) tools.submit_form("addForm")
def import_logs(self, date: str, group: str): """ Импортирует записи. :param date: Дата, на которую импортируются данные (В формате '%Y-%m-%d'). :param group: Группа, в которую импортируются данные. """ logger.info("Запрос на импортирование данных.") group = web.app.groups.get()[group]["id"] file = window.create_file_dialog( dialog_type=webview.OPEN_DIALOG, file_types=( "All (*.xls;*.xlsx;*.xlsm;*.csv;*.csvt)", "Excel file (*.xls;*.xlsx;*.xlsm)", "csv file (*.csv)", "csv template file (*.csvt)", ), ) # Получаем путь к нужному файлу if file: tools.loading_modal("importLogsModalBody") file: str = file[0] logger.info("Выбран файл %s", file) file_type = file.split(".")[-1] # Расширение файла if file_type in ["xls", "xlsx", "xlsm"]: # Excel файл excel.import_data(file, self.thermometry_logs, group) else: csv_handler.import_data(file, self.thermometry_logs, date, group) logger.info("Импорт завершён.") else: logger.info("Файл не выбран.") tools.submit_form("importLogsForm")
def edit_log(self, log_id: int, name: str, temperature: float, leaving_time: str): """ Изменяет запись под номером `log_id`. :param log_id: ID записи, которую нужно изменить. :param name: Новое значение для поля `name`. :param temperature: Новое значение для поля `temperature`. :param leaving_time: Время ухода. """ logger.info("Запрос на изменение записи `%s`.", log_id) tools.loading_modal("editModalBody") leaving_time = 0 if leaving_time == "00:00" else leaving_time log = self.thermometry_logs.filter(id=log_id) log.update( name=name, temperature=Float(temperature), arrival_time=log.arrival_time if log.arrival_time != "0" else datetime.now().strftime("%H:%M"), leaving_time=leaving_time, ) logger.info( "Изменена запись `%s`. новые данные: name=%s, temperature=%s, leaving_time=%s", *(log_id, name, temperature, leaving_time), ) tools.submit_form("editForm")
def edit_group(old_name: str, new_name: str): """ Изменяет группу. :param old_name: Старое название группы. :param new_name: Новое название группы. """ logger.info("Запрос на изменение группы `%s`.", old_name) tools.file_modal("editModalBody") file = window.create_file_dialog( dialog_type=webview.OPEN_DIALOG, file_types=("csv template file (*.csvt)",), ) # Получаем путь к шаблону tools.loading_modal("editModalBody") if file: file = file[0] logger.info("Выбран шаблон %s", file) else: file = None logger.info("Шаблон не выбран.") web.app.groups.edit_group(old_name, new_name, file) logger.info( "Изменена группа `%s`. новые данные: name=%s, template=%s", *(old_name, new_name, file), ) tools.submit_form("editForm")
def change_color_scheme(color_scheme: Literal["default", "light", "dark"]): """ Изменяет цветовую схему. """ logger.info("Запрос на изменение цветовой схемы.") web.app.settings["color_scheme"] = color_scheme with open(web.app.SETTINGS_FILE, "w") as settings_file: json.dump(web.app.settings, settings_file) logger.info(f"Цветовая схема изменена на `%s`", color_scheme) tools.submit_form("settingsForm")
def export_logs( self, file_type: Literal["excel", "csv"], dates: Tuple[str, str], group: str, template: bool, ): """ Экспортирует записи в excel или csv. :param file_type: Куда импортирует. :param dates: Временные рамки (в формате '%Y-%m-%d'). :param group: Группа из которой импортирует данные. :param template: Для True - необходимо экспортировать данные как шаблон. """ logger.info("Запрос на экспортирование данных.") tools.file_modal("exportLogsModalBody") group = (web.app.groups.get()[group]["id"], group) start_date = datetime.strptime(dates[0], "%Y-%m-%d") end_date = datetime.strptime(dates[1], "%Y-%m-%d") dates = [ (start_date + timedelta(days=i)).strftime("%d.%m.%Y") for i in range((end_date - start_date).days + 1) ] # Список дат, которые нужно экспортировать save_filename = "Журнал термометрии - {group} {dates}{ft}".format( group=group[1], dates=(dates[0] if dates[0] == dates[-1] else f"{dates[0]} - {dates[-1]}"), ft=".xlsx" if file_type == "excel" else (".csvt" if template else ".csv"), ) # Имя файла для сохранения file = window.create_file_dialog( dialog_type=webview.SAVE_DIALOG, save_filename=save_filename, ) # Получаем местоположение файла if file: tools.loading_modal("exportLogsModalBody") logger.info("Выбран файл %s", file) if file_type == "excel": excel.export_data(file, dates, self.thermometry_logs, group) else: csv_handler.export_data( file, dates, self.thermometry_logs, group[0], template ) logger.info("Экспорт завершён.") else: logger.info("Файл не выбран.") tools.submit_form("exportLogsForm")
def delete_log(self, log_id: int): """ Удаляет запись под номером `log_id`. :param log_id: ID записи, которую нужно удалить. """ logger.info("Запрос на удаление записи `%s`.", log_id) tools.loading_modal("deleteModalBody") sql = self.sql # Не заменять на self.sql.execute()! sql.execute("DELETE FROM thermometrylog WHERE id=?", log_id) sql.commit() logger.info("Удалена запись `%s` .", log_id) tools.submit_form("deleteForm")
def global_edit(self, name: str, temperature: float, date: str, group: str): """ Редактирует или добавляет запись в группе. :param name: ФИО человека. :param temperature: Температура. :param date: Дата (в формате '%Y-%m-%d'). :param group: Группа, в которой редактируется/создаётся запись. """ logger.info("Запрос на изменение записи в группе %s. name=`%s`.", group, name) tools.loading_modal("globalEditModalBody") date = datetime.strptime(date, "%Y-%m-%d") group = web.app.groups.get()[group] # Нужная группа log: List[ThermometryLog] = self.thermometry_logs.filter( date=date.strftime("%d.%m.%Y"), grp=group["id"], name=name, return_list=True, ) if len(log) == 1: log: ThermometryLog = log[0] # Нужная запись if log.arrival_time == "0": # Если нет данных log.update( temperature=Float(temperature), arrival_time=datetime.now().strftime("%H:%M"), ) logger.info( "Изменена запись в группе %s. данные: name=%s, temperature=%s", *(group["id"], name, temperature), ) return tools.submit_form("globalEditForm") self.thermometry_logs.insert( name=name, temperature=Float(temperature), date=date.strftime("%d.%m.%Y"), grp=group["id"], arrival_time=datetime.now().strftime("%H:%M"), ) logger.info( "Создана новая запись в группе `%s`. name=%s, temperature=%s, date=%s", *(group, name, temperature, date), ) tools.submit_form("globalEditForm")
def delete_group(name: str): """ Удаляет группу. :param name: Имя группы. """ logger.info("Запрос на удаление группы `%s`.", name) tools.loading_modal("deleteModalBody") _id = web.app.groups.del_group(name) sql = js_api.sql sql.execute( "DELETE FROM thermometrylog WHERE grp=?", _id ) # Удаляем все записи группы sql.commit() logger.info("Удалена группа `%s`", name) tools.submit_form("deleteForm")
def add_group(name: str): """ Создаёт новую группу. :param name: Название группы. """ logger.info("Запрос на создание группы.") tools.loading_modal("addModalBody") groups = web.app.groups.get() if name in groups: window.evaluate_js("alert('Группа с таким названием уже существует.')") else: tools.file_modal("addModalBody") file = window.create_file_dialog( dialog_type=webview.OPEN_DIALOG, file_types=("csv template file (*.csvt)",), ) # Получаем путь к шаблону tools.loading_modal("addModalBody") if file: file = file[0] logger.info("Выбран шаблон %s", file) else: file = None logger.info("Шаблон не выбран.") group_id = web.app.groups.add_group(name, file) if file: csv_handler.import_data( filename=file, database=js_api.thermometry_logs, date=datetime.now().strftime("%Y-%m-%d"), group=group_id, ) # Инициализируем шаблон logger.info("Создана группа. name=%s, template=%s", name, file) tools.submit_form("addForm")