Fase 2: Template engine, DAO, editor visual, plantillas y motor de exportacion PDF/XLSX/DOCX

This commit is contained in:
2026-06-09 23:26:35 +02:00
parent 7d607f5139
commit ed1ac4266c
12 changed files with 908 additions and 2 deletions
+92
View File
@@ -0,0 +1,92 @@
#include "formtemplatelist.h"
#include "ui_formtemplatelist.h"
#include "templatedao.h"
#include "formtemplateeditor.h"
#include <QSqlQueryModel>
#include <QMessageBox>
formTemplateList::formTemplateList(QWidget *parent)
: QMainWindow(parent), ui(new Ui::formTemplateList)
{
ui->setupUi(this);
setupModel();
connect(ui->refreshButton, &QPushButton::clicked, this, &formTemplateList::refreshList);
connect(ui->newButton, &QPushButton::clicked, this, &formTemplateList::createNewTemplate);
connect(ui->editButton, &QPushButton::clicked, this, &formTemplateList::editTemplate);
connect(ui->deleteButton, &QPushButton::clicked, this, &formTemplateList::deleteTemplate);
}
formTemplateList::~formTemplateList()
{
delete ui;
}
void formTemplateList::setupModel()
{
QSqlQueryModel *model = new QSqlQueryModel(this);
model->setQuery("SELECT ID, NAME, DESCRIPTION, DOCUMENT_TYPE FROM TEMPLATE ORDER BY NAME");
model->setHeaderData(0, Qt::Horizontal, tr("ID"));
model->setHeaderData(1, Qt::Horizontal, tr("Nombre"));
model->setHeaderData(2, Qt::Horizontal, tr("Descripción"));
model->setHeaderData(3, Qt::Horizontal, tr("Tipo"));
ui->templateTable->setModel(model);
ui->templateTable->setColumnHidden(0, true);
}
void formTemplateList::refreshList()
{
QSqlQueryModel *model = qobject_cast<QSqlQueryModel*>(ui->templateTable->model());
if (model)
model->setQuery(model->query().lastQuery());
}
void formTemplateList::createNewTemplate()
{
formTemplateEditor *editor = new formTemplateEditor(this);
connect(editor, &formTemplateEditor::templateSaved, this, [this]() {
refreshList();
});
editor->show();
}
void formTemplateList::editTemplate()
{
QModelIndex idx = ui->templateTable->currentIndex();
if (!idx.isValid()) {
QMessageBox::information(this, tr("Info"), tr("Selecciona una plantilla primero."));
return;
}
int row = idx.row();
int id = ui->templateTable->model()->data(ui->templateTable->model()->index(row, 0)).toInt();
Template tpl = TemplateDAO::getById(id);
formTemplateEditor *editor = new formTemplateEditor(this);
editor->loadTemplate(tpl);
connect(editor, &formTemplateEditor::templateSaved, this, [this]() {
refreshList();
});
editor->show();
}
void formTemplateList::deleteTemplate()
{
QModelIndex idx = ui->templateTable->currentIndex();
if (!idx.isValid()) {
QMessageBox::information(this, tr("Info"), tr("Selecciona una plantilla primero."));
return;
}
int row = idx.row();
int id = ui->templateTable->model()->data(ui->templateTable->model()->index(row, 0)).toInt();
int ret = QMessageBox::question(this, tr("Confirmar"), tr("¿Eliminar esta plantilla?"),
QMessageBox::Yes | QMessageBox::No);
if (ret == QMessageBox::Yes) {
if (TemplateDAO::remove(id)) {
QMessageBox::information(this, tr("Éxito"), tr("Plantilla eliminada."));
refreshList();
} else {
QMessageBox::critical(this, tr("Error"), tr("No se pudo eliminar la plantilla."));
}
}
}