Carregar ficheiros para "/"
This commit is contained in:
144
batch_upload.py
Normal file
144
batch_upload.py
Normal file
@ -0,0 +1,144 @@
|
||||
from PySide6.QtWidgets import (QWidget, QVBoxLayout, QHBoxLayout, QPushButton,
|
||||
QTableWidget, QTableWidgetItem, QHeaderView,
|
||||
QFileDialog, QMessageBox, QProgressDialog)
|
||||
from PySide6.QtCore import Qt, Signal
|
||||
import os
|
||||
from database import get_session
|
||||
from models import Document
|
||||
from document_form import DocumentForm
|
||||
|
||||
class BatchUploadWidget(QWidget):
|
||||
upload_completed = Signal()
|
||||
|
||||
def __init__(self, parent=None):
|
||||
super().__init__(parent)
|
||||
self.files_to_upload = []
|
||||
self.folder_id = None
|
||||
self.setup_ui()
|
||||
|
||||
def setup_ui(self):
|
||||
layout = QVBoxLayout(self)
|
||||
|
||||
# Buttons
|
||||
button_layout = QHBoxLayout()
|
||||
self.add_files_btn = QPushButton("Adicionar Arquivos")
|
||||
self.add_files_btn.clicked.connect(self.add_files)
|
||||
self.remove_files_btn = QPushButton("Remover Selecionados")
|
||||
self.remove_files_btn.clicked.connect(self.remove_selected_files)
|
||||
self.upload_all_btn = QPushButton("Upload em Lote")
|
||||
self.upload_all_btn.clicked.connect(self.upload_all)
|
||||
|
||||
button_layout.addWidget(self.add_files_btn)
|
||||
button_layout.addWidget(self.remove_files_btn)
|
||||
button_layout.addWidget(self.upload_all_btn)
|
||||
layout.addLayout(button_layout)
|
||||
|
||||
# Files table
|
||||
self.files_table = QTableWidget()
|
||||
self.files_table.setColumnCount(2)
|
||||
self.files_table.setHorizontalHeaderLabels(["Nome do Arquivo", "Caminho"])
|
||||
self.files_table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
|
||||
layout.addWidget(self.files_table)
|
||||
|
||||
# Create document form for metadata
|
||||
self.doc_form = DocumentForm()
|
||||
layout.addWidget(self.doc_form)
|
||||
|
||||
def add_files(self):
|
||||
files, _ = QFileDialog.getOpenFileNames(
|
||||
self,
|
||||
"Selecionar Arquivos",
|
||||
"",
|
||||
"Todos os Arquivos (*);;PDF (*.pdf);;Imagens (*.png *.jpg);;Documentos (*.doc *.docx)"
|
||||
)
|
||||
|
||||
for file_path in files:
|
||||
if file_path not in [self.files_table.item(row, 1).text()
|
||||
for row in range(self.files_table.rowCount())]:
|
||||
row = self.files_table.rowCount()
|
||||
self.files_table.insertRow(row)
|
||||
self.files_table.setItem(row, 0, QTableWidgetItem(os.path.basename(file_path)))
|
||||
self.files_table.setItem(row, 1, QTableWidgetItem(file_path))
|
||||
|
||||
def remove_selected_files(self):
|
||||
rows = set(item.row() for item in self.files_table.selectedItems())
|
||||
for row in sorted(rows, reverse=True):
|
||||
self.files_table.removeRow(row)
|
||||
|
||||
def upload_all(self):
|
||||
if not self.validate_form():
|
||||
return
|
||||
|
||||
progress = QProgressDialog(
|
||||
"Fazendo upload dos arquivos...",
|
||||
"Cancelar",
|
||||
0,
|
||||
self.files_table.rowCount(),
|
||||
self
|
||||
)
|
||||
progress.setWindowModality(Qt.WindowModal)
|
||||
|
||||
try:
|
||||
session = get_session()
|
||||
|
||||
for row in range(self.files_table.rowCount()):
|
||||
if progress.wasCanceled():
|
||||
break
|
||||
|
||||
file_path = self.files_table.item(row, 1).text()
|
||||
|
||||
# Create new document with metadata
|
||||
new_doc = Document(
|
||||
file_path=file_path,
|
||||
file_name=os.path.basename(file_path),
|
||||
marca=self.doc_form.marca_edit.text(),
|
||||
modelo=self.doc_form.modelo_edit.text(),
|
||||
ano=self.doc_form.ano_spin.value(),
|
||||
cilindrada=self.doc_form.cilindrada_edit.text(),
|
||||
codigo_motor=self.doc_form.codigo_motor_edit.text(),
|
||||
tipo_documento=self.doc_form.tipo_combo.currentText(),
|
||||
variante=self.doc_form.variante_combo.currentText(),
|
||||
observacoes=self.doc_form.observacoes_edit.toPlainText(),
|
||||
folder_id=self.folder_id
|
||||
)
|
||||
|
||||
session.add(new_doc)
|
||||
progress.setValue(row + 1)
|
||||
|
||||
session.commit()
|
||||
session.close()
|
||||
|
||||
QMessageBox.information(self, "Sucesso",
|
||||
"Upload em lote concluído com sucesso!")
|
||||
self.clear_form()
|
||||
self.upload_completed.emit()
|
||||
|
||||
except Exception as e:
|
||||
QMessageBox.critical(self, "Erro",
|
||||
f"Erro durante o upload em lote: {str(e)}")
|
||||
session.rollback()
|
||||
session.close()
|
||||
|
||||
progress.close()
|
||||
|
||||
def validate_form(self):
|
||||
if self.files_table.rowCount() == 0:
|
||||
QMessageBox.warning(self, "Validação",
|
||||
"Adicione pelo menos um arquivo.")
|
||||
return False
|
||||
|
||||
if not self.doc_form.marca_edit.text():
|
||||
QMessageBox.warning(self, "Validação",
|
||||
"Por favor, preencha a marca.")
|
||||
return False
|
||||
|
||||
if not self.doc_form.modelo_edit.text():
|
||||
QMessageBox.warning(self, "Validação",
|
||||
"Por favor, preencha o modelo.")
|
||||
return False
|
||||
|
||||
return True
|
||||
|
||||
def clear_form(self):
|
||||
self.files_table.setRowCount(0)
|
||||
self.doc_form.clear_form()
|
||||
Reference in New Issue
Block a user