#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 ServiceLoadDB::loadLocations() { QMap 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 ServiceLoadDB::loadDepartments() { QMap 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 ServiceLoadDB::loadManufacturers() { QMap 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 ServiceLoadDB::loadDeviceTypes() { QMap 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 ServiceLoadDB::loadDeviceModels() { QFile file("../../data/requestDeviceModels.sql"); if (!file.open(QIODevice::ReadOnly)) { qDebug() << "Не получилось открыть файл \"requestDeviceModels.sql\""; return QMap(); } db_input = QString(file.readAll()); if (!query.exec(db_input)) { qDebug() << "Ошибка запроса при получении информации о моделях устройств: " << query.lastError().text(); return QMap(); } 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 ServiceLoadDB::loadDevices() { QMap 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 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 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(); } QSqlRecord rec; QList 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; }