def export_to_pdf(self, filename):
printer = QPrinter(QPrinter.PrinterMode.ScreenResolution)
printer.setOutputFormat(QPrinter.OutputFormat.PdfFormat)
printer.setOutputFileName(filename)
printer.setPageOrientation(QPageLayout.Orientation.Landscape)
painter = QPainter(printer)
# Get the width and height of the scene
scene_width = self.scene.width()
scene_height = self.scene.height()
# Get the width and height of the printer's page
page_width = printer.pageLayout().fullRect(QPageLayout.Unit.Point).width()
page_height = printer.pageLayout().fullRect(QPageLayout.Unit.Point).height()
# Calculate the scale factor
scale_factor = max(page_width / scene_width, page_height / scene_height)
# Calculate the translation to center the scene
x_translation = (page_width - scene_width * scale_factor) / 2
y_translation = (page_height - scene_height * scale_factor) / 2
# Apply the scaling and translation
painter.translate(x_translation, y_translation)
#painter.scale(scale_factor, scale_factor)
# Render the scene
self.scene.render(painter)
painter.end()
print(f"Exported to {filename}")
def save_button_event(self):
try:
selection_model = self.tree_view.selectionModel()
selected_indexes = selection_model.selectedIndexes()
# Проверка, что выбран хотя бы один индекс
if not selected_indexes:
print("Выберите ячейки для сохранения.")
self.status_label.setText("Выберите ячейки для сохранения.")
return
updated_rows = defaultdict(list)
for index in selected_indexes:
row = index.row()
column = index.column()
item = self.tree_model.itemFromIndex(index)
if item is not None:
value = item.text()
updated_rows[row].append((column, value))
for row, columns in updated_rows.items():
parent_index = selected_indexes[0].parent()
# Проверяем, что родительский элемент существует
if not parent_index.isValid():
print(f"Не удалось найти родительский элемент для строки {row}.")
error_message = "Не удалось найти родительский элемент для строки " + str(row)
self.status_label.setText(error_message)
continue
parent_item = self.tree_model.itemFromIndex(parent_index)
class_part = parent_item.text()
# Получаем значения для обновления из строки
part_reference_index = self.tree_model.index(row, 0, parent_index)
manufacturer_part_number_index = self.tree_model.index(row, 1, parent_index)
manufacturer_index = self.tree_model.index(row, 2, parent_index)
quantity_index = self.tree_model.index(row, 3, parent_index)
description_index = self.tree_model.index(row, 4, parent_index)
item_number_index = self.tree_model.index(row, 5, parent_index)
part_reference_item = self.tree_model.itemFromIndex(part_reference_index)
manufacturer_part_number_item = self.tree_model.itemFromIndex(manufacturer_part_number_index)
manufacturer_item = self.tree_model.itemFromIndex(manufacturer_index)
quantity_item = self.tree_model.itemFromIndex(quantity_index)
description_item = self.tree_model.itemFromIndex(description_index)
item_number_item = self.tree_model.itemFromIndex(item_number_index)
# Проверяем, что все необходимые элементы строки не None
if None in (part_reference_item, manufacturer_part_number_item, manufacturer_item, quantity_item, description_item, item_number_item):
print(f"Не удалось получить все элементы строки {row}.")
error_message = "Не удалось получить все элементы строки " + str(row)
self.status_label.setText(error_message)
continue
part_reference = part_reference_item.text()
manufacturer_part_number = manufacturer_part_number_item.text()
manufacturer = manufacturer_item.text()
quantity = quantity_item.text()
description = description_item.text()
itemnumber = item_number_item.text()
print("Параметры запроса:")
print(f"ClassPart: {class_part}")
print(f"PartReference: {part_reference}")
print(f"ManufacturerPartNumber: {manufacturer_part_number}")
print(f"Manufacturer: {manufacturer}")
print(f"Quantity: {quantity}")
print(f"Description: {description}")
print(f"ItemNumber: {itemnumber}")
# Проверяем наличие дубликатов по PartReference для существующих индексов, кроме текущего
query_check = QtSql.QSqlQuery()
query_check.prepare("SELECT COUNT(*) FROM RAWDATA WHERE PartReference = :part_reference")
query_check.bindValue(":part_reference", part_reference)
query_check.exec()
query_check.next()
count = query_check.value(0)
if count > 0: # Если count > 0, значит PartReference уже существует
if any(value == '-' for _, value in columns): # Проверка для новой строки
self.tree_model.removeRow(row, parent_index)
print(f"Новая строка с PartReference '{part_reference}' уже существует и была удалена.")
warning_message = f"Новая строка с PartReference '{part_reference}' уже существует и была удалена."
else:
print(f"Предупреждение: PartReference '{part_reference}' уже существует. Изменение не будет сохранено.")
warning_message = f"Предупреждение: PartReference '{part_reference}' уже существует. Изменение не будет сохранено."
self.status_label.setText(warning_message)
continue
# Обновляем данные в базе данных только для текущего индекса
query = QtSql.QSqlQuery()
query.prepare("UPDATE RAWDATA SET PartReference = :part_reference, \
ManufacturerPartNumber = :manufacturer_part_number, \
Manufacturer = :manufacturer, \
Quantity = :quantity, \
Description = :description, \
ItemNumber = :itemnumber \
WHERE ClassPart = :class_part AND ItemNumber = :old_item_number")
query.bindValue(":part_reference", part_reference)
query.bindValue(":manufacturer_part_number", manufacturer_part_number)
query.bindValue(":manufacturer", manufacturer)
query.bindValue(":quantity", quantity)
query.bindValue(":description", description)
query.bindValue(":itemnumber", itemnumber)
query.bindValue(":class_part", class_part)
query.bindValue(":old_item_number", itemnumber)
if not query.exec():
print("Ошибка выполнения запроса:", query.lastError().text())
error_message = "Ошибка выполнения запроса: " + query.lastError().text()
self.status_label.setText(error_message)
else:
print("Данные сохранены успешно.")
self.status_label.setText("Данные сохранены успешно.")
except Exception as e:
print("Произошла ошибка:", str(e))
error_message = "Произошла ошибка: " + str(e)
self.status_label.setText(error_message)
Сглажено:
Не сглажено: