Files
XdlOrm/test/qxClientServer/qxClient/src/main_dlg.cpp
2026-04-03 11:32:07 +08:00

224 lines
9.1 KiB
C++

#include "../include/precompiled.h"
#include <QtGui/qcursor.h>
#if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0))
#include <QtWidgets/qmessagebox.h>
#else // (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0))
#include <QtGui/qmessagebox.h>
#endif // (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0))
#include "../include/main_dlg.h"
#include "../../qxService/include/service/server_infos.h"
#include "../../qxService/include/service/user_service.h"
#include <QxOrm_Impl.h>
#define QX_CLIENT_BIRTHDATE_QDATETIME_FORMAT "dd/MM/yyyy"
void main_dlg::init()
{
setupUi(this);
QObject::connect(btnDateTime, SIGNAL(clicked()), this, SLOT(onClickBtnDateTime()));
QObject::connect(btnDateTime_Async, SIGNAL(clicked()), this, SLOT(onClickBtnDateTimeAsync()));
QObject::connect(btnAddUser, SIGNAL(clicked()), this, SLOT(onClickBtnAddUser()));
QObject::connect(btnUpdateUser, SIGNAL(clicked()), this, SLOT(onClickBtnUpdateUser()));
QObject::connect(btnRemoveUser, SIGNAL(clicked()), this, SLOT(onClickBtnRemoveUser()));
QObject::connect(btnRemoveAllUser, SIGNAL(clicked()), this, SLOT(onClickBtnRemoveAllUsers()));
QObject::connect(btnFetchUser, SIGNAL(clicked()), this, SLOT(onClickBtnFetchUser()));
QObject::connect(btnGetAllUser, SIGNAL(clicked()), this, SLOT(onClickBtnGetAllUsers()));
QObject::connect(btnSearchUser, SIGNAL(clicked()), this, SLOT(onClickBtnSearchUsers()));
QObject::connect(txtIp, SIGNAL(editingFinished()), this, SLOT(onUpdateServerConnection()));
QObject::connect(spinPort, SIGNAL(editingFinished()), this, SLOT(onUpdateServerConnection()));
txtBirthDate->setText(QX_CLIENT_BIRTHDATE_QDATETIME_FORMAT);
txtBirthDate->setToolTip(QString("Birthdate : ") + QX_CLIENT_BIRTHDATE_QDATETIME_FORMAT);
txtIp->setText("127.0.0.1");
spinPort->setValue(7694);
onUpdateServerConnection();
}
void main_dlg::updateLastTransactionLog(qx::service::QxTransaction_ptr transaction)
{
if (! transaction) { txtTransaction->setPlainText(""); return; }
#ifdef _QX_ENABLE_BOOST_SERIALIZATION_XML
QString text = qx::serialization::xml::to_string(* transaction);
#else // _QX_ENABLE_BOOST_SERIALIZATION_XML
QString text = transaction->getInfos();
#endif // _QX_ENABLE_BOOST_SERIALIZATION_XML
txtTransaction->setPlainText(text.replace("\t", " "));
qx_bool bMsgReturn = transaction->getMessageReturn();
if (! bMsgReturn.getValue() && ! bMsgReturn.getDesc().isEmpty())
{ QMessageBox::warning(this, "qxClient - transaction error", bMsgReturn.getDesc()); }
}
void main_dlg::fillUser(user_ptr user)
{
if (! user) { return; }
txtId->setText(QString::number(user->id));
txtFirstName->setText(user->first_name);
txtLastName->setText(user->last_name);
txtBirthDate->setText(user->birth_date.toString(QX_CLIENT_BIRTHDATE_QDATETIME_FORMAT));
}
user_ptr main_dlg::fileUser()
{
user_ptr user_to_file = user_ptr(new user());
user_to_file->id = txtId->text().toLong();
user_to_file->first_name = txtFirstName->text();
user_to_file->last_name = txtLastName->text();
user_to_file->birth_date = QDateTime::fromString(txtBirthDate->text(), QX_CLIENT_BIRTHDATE_QDATETIME_FORMAT);
return user_to_file;
}
void main_dlg::onUpdateServerConnection()
{
qx::service::QxConnect::getSingleton()->setIp(txtIp->text());
qx::service::QxConnect::getSingleton()->setPort(spinPort->value());
}
void main_dlg::onClickBtnDateTime()
{
QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
// Create service and call method to retrieve current server date-time
server_infos service;
service.get_current_date_time();
// Update transaction log
updateLastTransactionLog(service.getTransaction());
QApplication::restoreOverrideCursor();
}
void main_dlg::onClickBtnDateTimeAsync()
{
if (m_pDateTimeAsync) { qDebug("[QxOrm] '%s' transaction is already running", "server_infos::get_current_date_time"); return; }
// Create service and call method to retrieve current server date-time (async mode)
server_infos_ptr service = server_infos_ptr(new server_infos());
m_pDateTimeAsync.reset(new qx::service::QxClientAsync());
QObject::connect(m_pDateTimeAsync.get(), SIGNAL(finished()), this, SLOT(onDateTimeAsyncFinished()));
m_pDateTimeAsync->setService(service, "get_current_date_time");
m_pDateTimeAsync->start();
}
void main_dlg::onDateTimeAsyncFinished()
{
if (! m_pDateTimeAsync || ! m_pDateTimeAsync->getService()) { return; }
updateLastTransactionLog(m_pDateTimeAsync->getService()->getTransaction());
m_pDateTimeAsync.reset();
}
void main_dlg::onClickBtnAddUser()
{
QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
// Create input parameters with user to add
user_service_input_ptr input = user_service_input_ptr(new user_service_input());
input->user = fileUser();
// Create service to call and set input parameters
user_service service;
service.setInputParameter(input);
service.insert();
// If transaction is ok => display user with new id added to database
user_ptr output = (service.isValidWithOutput() ? service.getOutputParameter()->user : user_ptr());
if (output) { fillUser(output); }
// Update transaction log
updateLastTransactionLog(service.getTransaction());
QApplication::restoreOverrideCursor();
}
void main_dlg::onClickBtnUpdateUser()
{
QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
// Create input parameters with user to update
user_service_input_ptr input = user_service_input_ptr(new user_service_input());
input->user = fileUser();
// Create service to call and set input parameters
user_service service;
service.setInputParameter(input);
service.update();
// Update transaction log
updateLastTransactionLog(service.getTransaction());
QApplication::restoreOverrideCursor();
}
void main_dlg::onClickBtnRemoveUser()
{
QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
// Create input parameters with user id to remove
user_service_input_ptr input = user_service_input_ptr(new user_service_input());
input->id = txtId->text().toLong();
// Create service to call and set input parameters
user_service service;
service.setInputParameter(input);
service.remove();
// Update transaction log
updateLastTransactionLog(service.getTransaction());
QApplication::restoreOverrideCursor();
}
void main_dlg::onClickBtnRemoveAllUsers()
{
QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
// Create service to call
user_service service;
service.remove_all();
// Update transaction log
updateLastTransactionLog(service.getTransaction());
QApplication::restoreOverrideCursor();
}
void main_dlg::onClickBtnFetchUser()
{
QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
// Create input parameters with user id to fetch
user_service_input_ptr input = user_service_input_ptr(new user_service_input());
input->id = txtId->text().toLong();
// Create service to call and set input parameters
user_service service;
service.setInputParameter(input);
service.fetch_by_id();
// If transaction is ok => display user fetched on GUI
user_ptr output = (service.isValidWithOutput() ? service.getOutputParameter()->user : user_ptr());
if (output) { fillUser(output); }
// Update transaction log
updateLastTransactionLog(service.getTransaction());
QApplication::restoreOverrideCursor();
}
void main_dlg::onClickBtnGetAllUsers()
{
QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
// Create service to call
user_service service;
service.fetch_all();
// If transaction is ok => display in a message box the number of users fetched from database
list_of_users_ptr output = (service.isValidWithOutput() ? service.getOutputParameter()->list_of_users : list_of_users_ptr());
if (output) { QMessageBox::information(this, "qxClient - get all users", "database contains '" + QString::number(output->size()) + "' user(s)."); }
// Update transaction log
updateLastTransactionLog(service.getTransaction());
QApplication::restoreOverrideCursor();
}
void main_dlg::onClickBtnSearchUsers()
{
QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
// Create criteria to search users
user_search_ptr criteria = user_search_ptr(new user_search());
criteria->first_name = txtFirstName->text();
criteria->last_name = txtLastName->text();
criteria->birth_date = QDateTime::fromString(txtBirthDate->text(), QX_CLIENT_BIRTHDATE_QDATETIME_FORMAT);
// Create input parameters with criteria to search users
user_service_input_ptr input = user_service_input_ptr(new user_service_input());
input->criteria = criteria;
// Create service to call and set input parameters
user_service service;
service.setInputParameter(input);
service.get_by_criteria();
// If transaction is ok => display in a message box the number of users fetched from database
list_of_users_ptr output = (service.isValidWithOutput() ? service.getOutputParameter()->list_of_users : list_of_users_ptr());
if (output) { QMessageBox::information(this, "qxClient - search users", "database contains '" + QString::number(output->size()) + "' user(s) with input criteria."); }
// Update transaction log
updateLastTransactionLog(service.getTransaction());
QApplication::restoreOverrideCursor();
}