Files
GostGenerator/controller/csvexporter.h
T

96 lines
3.8 KiB
C++

#ifndef CSVEXPORTER_H
#define CSVEXPORTER_H
#include <QObject>
#include <QString>
#include <QAbstractTableModel>
class SpecificationPCBTableModel;
class SpecificationTableModel;
class PerechenTableModel;
class VedomostTableModel;
/**
* @brief Класс для экспорта таблиц в формат CSV
*
* Поддерживает экспорт следующих типов таблиц:
* - SpecificationPCBTableModel (Спецификация PCB)
* - SpecificationTableModel (Спецификация материалов)
* - PerechenTableModel (Перечень элементов)
* - VedomostTableModel (Ведомость покупных изделий)
*/
class CSVExporter : public QObject
{
Q_OBJECT
public:
explicit CSVExporter(QObject *parent = nullptr);
/**
* @brief Экспортирует таблицу спецификации PCB в CSV
* @param filePath Путь к файлу для сохранения
* @param model Модель таблицы спецификации PCB
* @return true если экспорт успешен, false в противном случае
*/
bool exportSpecificationPCB(const QString &filePath, SpecificationPCBTableModel *model);
/**
* @brief Экспортирует таблицу спецификации материалов в CSV
* @param filePath Путь к файлу для сохранения
* @param model Модель таблицы спецификации материалов
* @return true если экспорт успешен, false в противном случае
*/
bool exportSpecification(const QString &filePath, SpecificationTableModel *model);
/**
* @brief Экспортирует таблицу перечня элементов в CSV
* @param filePath Путь к файлу для сохранения
* @param model Модель таблицы перечня элементов
* @return true если экспорт успешен, false в противном случае
*/
bool exportPerechen(const QString &filePath, PerechenTableModel *model);
/**
* @brief Экспортирует таблицу ведомости покупных изделий в CSV
* @param filePath Путь к файлу для сохранения
* @param model Модель таблицы ведомости покупных изделий
* @return true если экспорт успешен, false в противном случае
*/
bool exportVedomost(const QString &filePath, VedomostTableModel *model);
/**
* @brief Экспортирует любую модель таблицы в CSV
* @param filePath Путь к файлу для сохранения
* @param model Модель таблицы
* @param includeHeaders Включать ли заголовки колонок
* @return true если экспорт успешен, false в противном случае
*/
bool exportTableModel(const QString &filePath, QAbstractTableModel *model, bool includeHeaders = true);
/**
* @brief Возвращает последнюю ошибку
* @return Текст ошибки
*/
QString lastError() const;
private:
/**
* @brief Экранирует значение для CSV
* @param value Значение для экранирования
* @return Экранированное значение
*/
QString escapeCsvValue(const QString &value) const;
/**
* @brief Формирует строку CSV из списка значений
* @param values Список значений
* @return Строка CSV
*/
QString formatCsvRow(const QStringList &values) const;
QString m_lastError;
};
#endif // CSVEXPORTER_H