예제 #1
0
    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")
예제 #2
0
    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")
예제 #3
0
    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")
예제 #4
0
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")
예제 #5
0
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")
예제 #6
0
    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")
예제 #7
0
    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")
예제 #8
0
    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")
예제 #9
0
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")
예제 #10
0
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")