273 lines
10 KiB
C++
273 lines
10 KiB
C++
|
#include "serviceloaddb.h"
|
|||
|
|
|||
|
ServiceLoadDB::ServiceLoadDB(QObject *parent) : QObject(parent)
|
|||
|
{}
|
|||
|
|
|||
|
void ServiceLoadDB::start()
|
|||
|
{
|
|||
|
db = QSqlDatabase::addDatabase("QPSQL");
|
|||
|
db.setHostName("127.0.0.1");
|
|||
|
db.setDatabaseName("hardware_accounting_db");
|
|||
|
db.setUserName("postgres");
|
|||
|
db.setPassword("pass");
|
|||
|
if(!db.open()){
|
|||
|
qDebug() << "Не удалось открыть БД";
|
|||
|
return;
|
|||
|
}
|
|||
|
query = QSqlQuery(db);
|
|||
|
}
|
|||
|
|
|||
|
QMap<int, Location> ServiceLoadDB::loadLocations()
|
|||
|
{
|
|||
|
QMap<int, Location> mapLocations;
|
|||
|
|
|||
|
db_input = "SELECT * FROM public.location";
|
|||
|
if (!query.exec(db_input)) {
|
|||
|
qDebug() << "Ошибка запроса к таблице location: " << query.lastError().text();
|
|||
|
return mapLocations;
|
|||
|
}
|
|||
|
|
|||
|
QSqlRecord rec;
|
|||
|
while (query.next()) {
|
|||
|
rec = query.record();
|
|||
|
|
|||
|
Location location;
|
|||
|
location.setId(query.value(rec.indexOf("id")).toInt());
|
|||
|
location.setName(query.value(rec.indexOf("name")).toString());
|
|||
|
|
|||
|
mapLocations.insert(location.id(), location);
|
|||
|
}
|
|||
|
|
|||
|
return mapLocations;
|
|||
|
}
|
|||
|
|
|||
|
QMap<int, Department> ServiceLoadDB::loadDepartments()
|
|||
|
{
|
|||
|
QMap<int, Department> mapDepartments;
|
|||
|
|
|||
|
db_input = "SELECT * FROM public.department";
|
|||
|
if (!query.exec(db_input)) {
|
|||
|
qDebug() << "Ошибка запроса к таблице department: " << query.lastError().text();
|
|||
|
return mapDepartments;
|
|||
|
}
|
|||
|
|
|||
|
QSqlRecord rec;
|
|||
|
while (query.next()) {
|
|||
|
rec = query.record();
|
|||
|
|
|||
|
Department department;
|
|||
|
department.setId(query.value(rec.indexOf("id")).toInt());
|
|||
|
department.setName(query.value(rec.indexOf("name")).toString());
|
|||
|
|
|||
|
mapDepartments.insert(department.id(), department);
|
|||
|
}
|
|||
|
|
|||
|
return mapDepartments;
|
|||
|
}
|
|||
|
|
|||
|
QMap<int, Manufacturer> ServiceLoadDB::loadManufacturers()
|
|||
|
{
|
|||
|
QMap<int, Manufacturer> mapManufacturers;
|
|||
|
|
|||
|
db_input = "SELECT * FROM public.manufacturer";
|
|||
|
if (!query.exec(db_input)) {
|
|||
|
qDebug() << "Ошибка запроса к таблице manufacturer: " << query.lastError().text();
|
|||
|
return mapManufacturers;
|
|||
|
}
|
|||
|
|
|||
|
QSqlRecord rec;
|
|||
|
while (query.next()) {
|
|||
|
rec = query.record();
|
|||
|
|
|||
|
Manufacturer manufacturer;
|
|||
|
manufacturer.setId(query.value(rec.indexOf("id")).toInt());
|
|||
|
manufacturer.setName(query.value(rec.indexOf("name")).toString());
|
|||
|
|
|||
|
mapManufacturers.insert(manufacturer.id(), manufacturer);
|
|||
|
}
|
|||
|
|
|||
|
return mapManufacturers;
|
|||
|
}
|
|||
|
|
|||
|
QMap<int, DeviceType> ServiceLoadDB::loadDeviceTypes()
|
|||
|
{
|
|||
|
QMap<int, DeviceType> mapDeviceTypes;
|
|||
|
|
|||
|
db_input = "SELECT * FROM public.device_type";
|
|||
|
if (!query.exec(db_input)) {
|
|||
|
qDebug() << "Ошибка запроса к таблице device_type: " << query.lastError().text();
|
|||
|
return mapDeviceTypes;
|
|||
|
}
|
|||
|
|
|||
|
QSqlRecord rec;
|
|||
|
while (query.next()) {
|
|||
|
rec = query.record();
|
|||
|
|
|||
|
DeviceType deviceType;
|
|||
|
deviceType.setId(query.value(rec.indexOf("id")).toInt());
|
|||
|
deviceType.setName(query.value(rec.indexOf("name")).toString());
|
|||
|
|
|||
|
mapDeviceTypes.insert(deviceType.id(), deviceType);
|
|||
|
}
|
|||
|
|
|||
|
return mapDeviceTypes;
|
|||
|
}
|
|||
|
|
|||
|
QMap<int, DeviceModel> ServiceLoadDB::loadDeviceModels()
|
|||
|
{
|
|||
|
QFile file("../../data/requestDeviceModels.sql");
|
|||
|
if (!file.open(QIODevice::ReadOnly)) {
|
|||
|
qDebug() << "Не получилось открыть файл \"requestDeviceModels.sql\"";
|
|||
|
return QMap<int, DeviceModel>();
|
|||
|
}
|
|||
|
|
|||
|
db_input = QString(file.readAll());
|
|||
|
|
|||
|
if (!query.exec(db_input)) {
|
|||
|
qDebug() << "Ошибка запроса при получении информации о моделях устройств: " << query.lastError().text();
|
|||
|
return QMap<int, DeviceModel>();
|
|||
|
}
|
|||
|
|
|||
|
QSqlRecord rec;
|
|||
|
while (query.next()) {
|
|||
|
rec = query.record();
|
|||
|
|
|||
|
DeviceModel deviceModel;
|
|||
|
int id = query.value(rec.indexOf("id")).toInt();
|
|||
|
deviceModel.setId(id);
|
|||
|
deviceModel.setName(query.value(rec.indexOf("name")).toString());
|
|||
|
deviceModel.setDescription(query.value(rec.indexOf("description")).toString());
|
|||
|
deviceModel.setWorkEfficiency(query.value(rec.indexOf("work_efficiency")).toInt());
|
|||
|
deviceModel.setReliability(query.value(rec.indexOf("reliability")).toInt());
|
|||
|
deviceModel.setEnergyEfficiency(query.value(rec.indexOf("energy_efficiency")).toInt());
|
|||
|
deviceModel.setUserFriendliness(query.value(rec.indexOf("user_friendliness")).toInt());
|
|||
|
deviceModel.setDurability(query.value(rec.indexOf("durability")).toInt());
|
|||
|
deviceModel.setAestheticQualities(query.value(rec.indexOf("aesthetic_qualities")).toInt());
|
|||
|
deviceModel.setIdType(query.value(rec.indexOf("fk_id_type")).toInt());
|
|||
|
deviceModel.setNameType(query.value(rec.indexOf("device_type_name")).toString());
|
|||
|
deviceModel.setIdManuf(query.value(rec.indexOf("fk_id_manuf")).toInt());
|
|||
|
deviceModel.setNameManuf(query.value(rec.indexOf("manufacturer_name")).toString());
|
|||
|
deviceModel.setStructureElements(readStructureElements(id));
|
|||
|
|
|||
|
mapDeviceModels.insert(deviceModel.id(), deviceModel);
|
|||
|
}
|
|||
|
|
|||
|
return mapDeviceModels;
|
|||
|
}
|
|||
|
|
|||
|
QMap<int, Device> ServiceLoadDB::loadDevices()
|
|||
|
{
|
|||
|
QMap<int, Device> mapDevices;
|
|||
|
|
|||
|
QFile file("../../data/requestDevices.sql");
|
|||
|
if (!file.open(QIODevice::ReadOnly))
|
|||
|
return mapDevices;
|
|||
|
|
|||
|
db_input = QString(file.readAll());
|
|||
|
|
|||
|
if (!query.exec(db_input)) {
|
|||
|
qDebug() << "Ошибка запроса при получении информации о устройствах: " << query.lastError().text();
|
|||
|
return mapDevices;
|
|||
|
}
|
|||
|
|
|||
|
QSqlRecord rec;
|
|||
|
while (query.next()) {
|
|||
|
rec = query.record();
|
|||
|
|
|||
|
Device device;
|
|||
|
int id = query.value(rec.indexOf("id")).toInt();
|
|||
|
int idModel = query.value(rec.indexOf("fk_id_model")).toInt();
|
|||
|
if (!mapDeviceModels.contains(idModel)) {
|
|||
|
qDebug() << "Не загружена модель устройства. Идентификатор устройства: " << id;
|
|||
|
return QMap<int, Device>();
|
|||
|
}
|
|||
|
|
|||
|
int idDepartment = 0;
|
|||
|
QString nameDepartment = "Не относится к отделу";
|
|||
|
if (!query.value(rec.indexOf("department_id")).isNull()) {
|
|||
|
idDepartment = query.value(rec.indexOf("department_id")).toInt();
|
|||
|
nameDepartment = query.value(rec.indexOf("department_name")).toString();
|
|||
|
}
|
|||
|
|
|||
|
device.setId(id);
|
|||
|
device.setSerialNumber(query.value(rec.indexOf("serial_number")).toString());
|
|||
|
device.setPurchaseDate(query.value(rec.indexOf("purchase_date")).toDateTime());
|
|||
|
device.setPrice(query.value(rec.indexOf("price")).toDouble());
|
|||
|
device.setWarrantyExpireDate(query.value(rec.indexOf("warranty_expire_date")).toDateTime());
|
|||
|
device.setIsWorking(query.value(rec.indexOf("is_working")).toBool());
|
|||
|
device.setFurtherInformation(query.value(rec.indexOf("further_information")).toString());
|
|||
|
device.setIdLocation(query.value(rec.indexOf("fk_id_location")).toInt());
|
|||
|
device.setNameLocation(query.value(rec.indexOf("location_name")).toString());
|
|||
|
device.setIdEmployee(query.value(rec.indexOf("fk_id_employee")).toInt());
|
|||
|
device.setNameEmployee(query.value(rec.indexOf("employee_full_name")).toString());
|
|||
|
device.setIdDepartment(idDepartment);
|
|||
|
device.setNameDepartment(nameDepartment);
|
|||
|
device.setDeviceModel(mapDeviceModels[idModel]);
|
|||
|
device.setIsLiked(query.value(rec.indexOf("is_liked")).toBool());
|
|||
|
|
|||
|
mapDevices.insert(device.id(), device);
|
|||
|
}
|
|||
|
|
|||
|
return mapDevices;
|
|||
|
}
|
|||
|
|
|||
|
bool ServiceLoadDB::updateDevice(const Device &device)
|
|||
|
{
|
|||
|
QFile file("../../data/updateDevice.sql");
|
|||
|
if (!file.open(QIODevice::ReadOnly)) {
|
|||
|
qDebug() << "Не удалось открыть файл с запросом для обновления устройства";
|
|||
|
return false;
|
|||
|
}
|
|||
|
|
|||
|
QString db_input = QString(file.readAll());
|
|||
|
|
|||
|
db_input = db_input.arg(device.serialNumber())
|
|||
|
.arg(device.purchaseDate().toString("yyyy-MM-dd HH:mm:ss"))
|
|||
|
.arg(device.price())
|
|||
|
.arg(device.warrantyExpireDate().toString("yyyy-MM-dd HH:mm:ss"))
|
|||
|
.arg(device.isWorking() ? "TRUE" : "FALSE")
|
|||
|
.arg(device.furtherInformation())
|
|||
|
.arg(device.idLocation())
|
|||
|
.arg(device.idEmployee())
|
|||
|
.arg(device.deviceModel().id())
|
|||
|
.arg(device.isLiked() ? "TRUE" : "FALSE")
|
|||
|
.arg(device.id());
|
|||
|
|
|||
|
if (!query.exec(db_input)) {
|
|||
|
qDebug() << "Ошибка обновления устройства с id = " << device.id() << ": " << query.lastError().text();
|
|||
|
return false;
|
|||
|
}
|
|||
|
|
|||
|
return true;
|
|||
|
}
|
|||
|
|
|||
|
QList<DeviceStructureElement> ServiceLoadDB::readStructureElements(int modelId)
|
|||
|
{
|
|||
|
QSqlQuery secondQuery;
|
|||
|
db_input = "SELECT * FROM get_model_structure(:model_id)";
|
|||
|
secondQuery.prepare(db_input);
|
|||
|
secondQuery.bindValue(":model_id", modelId);
|
|||
|
if (!secondQuery.exec()) {
|
|||
|
qDebug() << "Ошибка при выполнении запроса для получения элементов структуры: " << secondQuery.lastError().text();
|
|||
|
return QList<DeviceStructureElement>();
|
|||
|
}
|
|||
|
|
|||
|
QSqlRecord rec;
|
|||
|
QList<DeviceStructureElement> elements;
|
|||
|
while (secondQuery.next()) {
|
|||
|
rec = secondQuery.record();
|
|||
|
|
|||
|
DeviceStructureElement element;
|
|||
|
element.setId(secondQuery.value(rec.indexOf("Идентификатор элемента")).toInt());
|
|||
|
element.setNameModel(secondQuery.value(rec.indexOf("Модель")).toString());
|
|||
|
element.setNameManuf(secondQuery.value(rec.indexOf("Производитель")).toString());
|
|||
|
element.setDescription(secondQuery.value(rec.indexOf("Описание элемента")).toString());
|
|||
|
element.setNameType(secondQuery.value(rec.indexOf("Тип элемента")).toString());
|
|||
|
element.setCount(secondQuery.value(rec.indexOf("Количество")).toInt());
|
|||
|
|
|||
|
elements.append(element);
|
|||
|
}
|
|||
|
|
|||
|
return elements;
|
|||
|
}
|