diff --git a/applog.cpp b/applog.cpp
index f42fa0e..71cab21 100644
--- a/applog.cpp
+++ b/applog.cpp
@@ -1,9 +1,9 @@
#include "applog.h"
+#include "models/slocalsettings.h"
SAppLog::SAppLog()
{
- QDir appDataDir = QDir(QStandardPaths::writableLocation(QStandardPaths::ConfigLocation)); // C:/Users/user/AppData/Local
- file.setFileName(appDataDir.path()+"/snap/snap.log");
+ file.setFileName(SLocalSettings::appSettingsPath()+"/snap.log");
}
QString SAppLog::filePath()
diff --git a/appver.h b/appver.h
index 6e55e63..e90a793 100644
--- a/appver.h
+++ b/appver.h
@@ -8,7 +8,7 @@
#define APP_MAJOR 0
#define APP_MINOR 0
#define APP_PATCH 0
-#define APP_COMMIT 280
+#define APP_COMMIT 281
#define FILE_VER APP_MAJOR,APP_MINOR,APP_PATCH,APP_COMMIT // обязательно запятые!
#define PRODUCT_VER FILE_VER
diff --git a/global.cpp b/global.cpp
index 1348d71..83c635b 100644
--- a/global.cpp
+++ b/global.cpp
@@ -56,7 +56,7 @@ QString commonSpinBoxStyleSheetRed = "QSpinBox, QDoubleSpinBox { border: 1px so
SStandardItemModel *rejectReasonModel = new SStandardItemModel;
SStandardItemModel *priceColModel = new SStandardItemModel;
SStandardItemModel *itemUnitsModel = new SStandardItemModel;
-SAppLog *appLog = new SAppLog();
+SAppLog *appLog;
SUserActivityModel *userActivityLog;
SStandardItemModel *clientBinaryProperties;
QSettings *debugOptions = nullptr;
diff --git a/lang/snap_ru_RU.ts b/lang/snap_ru_RU.ts
index e09fee2..7dfa789 100644
--- a/lang/snap_ru_RU.ts
+++ b/lang/snap_ru_RU.ts
@@ -2148,29 +2148,29 @@
-
+
Сумма ремонта не равна согласованной. Всё ОК?
-
+
Ошибка
-
+
Подтвердите правильность ввода данных
-
+
Подтвердите выдачу
-
+
Списание %1 за ремонт №%2
@@ -6034,7 +6034,7 @@ p, li { white-space: pre-wrap; }
-
+
Печать
@@ -6054,197 +6054,197 @@ p, li { white-space: pre-wrap; }
-
+
Печать %1
-
+
Печать <%1> еще не реализована
-
+
Информация
-
+
Отправлено на печать
-
+
new_rep
квитанции
-
+
pko
ПКО
-
+
reject
акта отказа
-
+
rko
РКО
-
+
sticker1
стикера
-
+
sticker2
стикера
-
+
sticker3
стикера
-
+
rep_label
стикера
-
+
warranty
гарантийного талона
-
+
works
акта выполненных работ
-
+
diag
акта диагностики
-
+
pn
ПН
-
+
rn
РН
-
+
lost
акта утери квитанции
-
+
price1
ценника
-
+
invoice0
счета
-
+
invoice1
счета
-
+
invoice2
счета
-
+
invoice3
счета
-
+
vatinvoice0
счета
-
+
p_list0
товарной накладной
-
+
w_list0
наряда
-
+
new_cartridge
квитанции
-
+
sticker_cartridge
стикера
-
+
issue_cartridge
акта (заправки)
-
+
slip
слип-чека
-
+
move
накладной перемещения
-
+
buyout
закупочного акта
-
+
repairs
списка ремонтов
-
+
cartridges
списка картриджей
-
+
Печать квитанции к ремонту №%1
-
+
Печать стикеров к ремонту №%1 в кол-ве %2шт.
-
+
Не удалось вызвать драйвер принтера
-
+
Размер страницы отчета больше размера страницы принтера
-
+
\(перенаправлено \d\)
@@ -6342,17 +6342,17 @@ p, li { white-space: pre-wrap; }
-
+
картридж
-
+
Информация
-
+
Нельзя принять картриджи разных клиентов вместе.
@@ -6752,7 +6752,7 @@ p, li { white-space: pre-wrap; }
- Готово
+ Готово к выдаче
@@ -7577,7 +7577,7 @@ p, li { white-space: pre-wrap; }
windowsDispatcher
-
+
Login
diff --git a/mainwindow.cpp b/mainwindow.cpp
index 7e3aa4f..0a579af 100644
--- a/mainwindow.cpp
+++ b/mainwindow.cpp
@@ -486,11 +486,13 @@ void MainWindow::createTabRepairCartridges(QList *list)
{
tabRepairCartridges *subwindow = tabRepairCartridges::getInstance(list, this);
if(ui->tabWidget->indexOf(subwindow) == -1)
+ {
ui->tabWidget->addTab(subwindow, subwindow->tabTitle());
+ QObject::connect(subwindow, &tabRepairCartridges::createTabClient, this, &MainWindow::createTabClient);
+ QObject::connect(subwindow, &tabRepairCartridges::createTabRepair, this, &MainWindow::createTabRepair);
+ }
ui->tabWidget->setCurrentWidget(subwindow);
- QObject::connect(subwindow, &tabRepairCartridges::createTabClient, this, &MainWindow::createTabClient);
- QObject::connect(subwindow, &tabRepairCartridges::createTabRepair, this, &MainWindow::createTabRepair);
}
void MainWindow::createTabRepairNew()
diff --git a/models/scomsettingstypes.h b/models/scomsettingstypes.h
index 26c55f3..d003323 100644
--- a/models/scomsettingstypes.h
+++ b/models/scomsettingstypes.h
@@ -16,7 +16,7 @@ class t_status : public QSerializer
QS_JSON_FIELD(QString, Color)
QS_JSON_FIELD(QString, Terms)
public:
- int TermsSec;
+ qint64 TermsSec;
QStringList ContainsStr; // данные в таком формате нужны для фильтрации в прокси-моделях
QStringList ActionsStr;
@@ -37,6 +37,9 @@ class t_status : public QSerializer
TermsSec = statusTermDays*24*3600 + statusTermSecons;
ContainsStr = toStringList(Contains);
ActionsStr = toStringList(Actions);
+
+ if(Color.isEmpty()) // для вновь созданного статуса, если не был выбран цвет, в БД записывается значение null
+ Color = "#00000000";
}
private:
QStringList toStringList(QList intList)
diff --git a/models/stablerepairsmodel.cpp b/models/stablerepairsmodel.cpp
index 6b79462..7e46877 100644
--- a/models/stablerepairsmodel.cpp
+++ b/models/stablerepairsmodel.cpp
@@ -17,7 +17,7 @@ QVariant STableRepairsModel::data(const QModelIndex &index, int role) const
if (role == Qt::BackgroundRole)
{
if(index.column() == Columns::Status)
- return QColor(comSettings->repairStatuses[QSqlQueryModel::data(index, Qt::DisplayRole).toInt()].Color);
+ return QColor(comSettings->repairStatuses[STableBaseModel::unformattedData(index, Qt::DisplayRole).toInt()].Color);
QString rowColor = STableBaseModel::data(index.siblingAtColumn(Columns::Color)).toString();
if(!rowColor.isEmpty())
diff --git a/tabprintdialog.cpp b/tabprintdialog.cpp
index db7ad31..037f5bf 100644
--- a/tabprintdialog.cpp
+++ b/tabprintdialog.cpp
@@ -75,6 +75,8 @@ tabPrintDialog *tabPrintDialog::create(Global::Reports type)
bool tabPrintDialog::tabCloseRequest()
{
+ if(m_reportState != ReportState::RenderingFinished)
+ return 0;
return 1;
}
@@ -103,7 +105,7 @@ void tabPrintDialog::paintEvent(QPaintEvent *event)
// При отображении вкладки предпросмотра событие PainEvent вызывается не менее трёх раз, но т. к. достоверно неизвестно
// точное ли это число вызовов, таймер кажется более надёжным; при каждом вызове этого метода таймер перезапускается
// а спустя заданную задержку после последнего вызова будет произведён запуск рендеринга.
- if(!m_isReportInitialized)
+ if(m_reportState == ReportState::New)
{
renderDelayTimer->start(20);
}
@@ -113,7 +115,7 @@ bool tabPrintDialog::event(QEvent *ev)
{
bool ret = tabCommon::event(ev);
- if(!m_isReportRendered)
+ if(m_reportState < ReportState::RenderingFinished)
return ret;
if(ev->type() == QEvent::ShowToParent) // при переключении на вкладку нужно установить фокус на виджет (например, при печати документа, нажатием Пробел можно быстро запустить печать и не делать лишних телодвижений мышью)
@@ -163,7 +165,7 @@ void tabPrintDialog::notImplementedReport()
void tabPrintDialog::initReport()
{
- m_isReportInitialized = 1;
+ m_reportState = ReportState::Initialized;
QObject::connect(progressUpdateTimer, &QTimer::timeout, this, &tabPrintDialog::updateProgressWidget);
progressUpdateTimer->start(250);
@@ -185,7 +187,6 @@ void tabPrintDialog::initReport()
setProgressText("Renderind report");
m_report->prepareReportPages();
- initPrinter(false);
}
void tabPrintDialog::showPreview()
@@ -613,16 +614,17 @@ void tabPrintDialog::pageSetupAccepted()
void tabPrintDialog::reportRenderStarted()
{
- m_isReportRendered = 0;
+ m_reportState = ReportState::RenderingInProcess;
}
void tabPrintDialog::reportRenderFinished()
{
- m_isReportRendered = 1;
+ m_reportState = ReportState::RenderingFinished;
// эмуляция задержки
// QTime dieTime= QTime::currentTime().addSecs(2);
// while (QTime::currentTime() < dieTime)
// QCoreApplication::processEvents(QEventLoop::AllEvents, 100);
+ initPrinter(false);
selectPrinter();
diff --git a/tabprintdialog.h b/tabprintdialog.h
index df09b9a..c963479 100644
--- a/tabprintdialog.h
+++ b/tabprintdialog.h
@@ -77,11 +77,11 @@ class tabPrintDialog : public tabCommon, public SReportsCommonFunctions
protected:
void paintEvent(QPaintEvent *event) override;
private:
+ enum ReportState {New = 0, Initialized = 1, RenderingInProcess = 2, RenderingFinished = 3};
Ui::tabPrintDialog *ui;
QPrinter *m_printer = nullptr;
QStringList m_printersList;
- bool m_isReportRendered = 0;
- bool m_isReportInitialized = 0;
+ int m_reportState = ReportState::New;
QLabel *m_progressWidget = nullptr;
QString m_progressWidgetStaticText;
LimeReport::PreviewReportWidget *m_previewWidget = nullptr;
diff --git a/tabreceptcartridge.cpp b/tabreceptcartridge.cpp
index bcba4df..1b19199 100644
--- a/tabreceptcartridge.cpp
+++ b/tabreceptcartridge.cpp
@@ -17,11 +17,6 @@ tabReceptCartridge::tabReceptCartridge(MainWindow *parent) :
ui->setupUi(this);
tabReceptCartridge::guiFontChanged();
- // установка белого фона только для scrollArea (не наследуется)
- // https://qtcentre.org/threads/14099-How-to-stop-child-widgets-from-inheriting-parent-s-StyleSheet-and-use-system-default?p=73101#post73101
- ui->scrollAreaWidgetContents->setStyleSheet("#scrollAreaWidgetContents {\
- background-color: rgb(255, 255, 255);\
- }");
m_tableModel = new QStandardItemModel();
m_vendorsModel = new SSqlQueryModel();
m_cartridgesModel = new SSqlQueryModel();
@@ -86,6 +81,11 @@ void tabReceptCartridge::setFocusSerialNumber()
void tabReceptCartridge::setDefaultStyleSheets()
{
+ // установка фона только для scrollArea (не наследуется)
+ // https://qtcentre.org/threads/14099-How-to-stop-child-widgets-from-inheriting-parent-s-StyleSheet-and-use-system-default?p=73101#post73101
+ ui->scrollAreaWidgetContents->setStyleSheet("#scrollAreaWidgetContents {\
+ background-color: #FFFFFF;\
+ }");
ui->comboBoxPresetEngineer->setStyleSheet(commonComboBoxStyleSheet);
ui->comboBoxCompany->setStyleSheet(commonComboBoxStyleSheet);
ui->comboBoxOffice->setStyleSheet(commonComboBoxStyleSheet);
@@ -187,6 +187,14 @@ bool tabReceptCartridge::checkInput()
error = qMax(error, ui->widgetClient->checkInput());
+ if(existentForms().empty())
+ {
+ ui->scrollAreaWidgetContents->setStyleSheet("#scrollAreaWidgetContents {\
+ background-color: #FFD1D1;\
+ }");
+ error = 4;
+ }
+
if (error)
{
qDebug() << "Ошибка создания карточки(-ек) заправки: не заполнены общие обязательные поля (error " << error << ")";
diff --git a/tabrepaircartridges.cpp b/tabrepaircartridges.cpp
index ad84181..1397058 100644
--- a/tabrepaircartridges.cpp
+++ b/tabrepaircartridges.cpp
@@ -112,12 +112,14 @@ void tabRepairCartridges::updateWidgets()
m_readyButtonVisible = 0;
m_issueButtonVisible = 1;
bool formReady;
+ bool nEmpty = 0;
if(comSettings->useSimplifiedCartridgeRepair)
m_readyButtonVisible = 1; // кнопка видна только в упрощенном режиме работы с картриджами
for(auto form : existentForms())
{
+ nEmpty = 1;
formReady = form->isReady();
m_readyButtonVisible &= formReady;
m_issueButtonVisible &= formReady;
@@ -125,8 +127,8 @@ void tabRepairCartridges::updateWidgets()
m_issueButtonVisible &= 0;
client = form->clientId();
}
- ui->buttonSetReadyToIssue->setVisible(m_readyButtonVisible);
- ui->buttonIssue->setVisible(m_issueButtonVisible);
+ ui->buttonSetReadyToIssue->setVisible(m_readyButtonVisible && nEmpty);
+ ui->buttonIssue->setVisible(m_issueButtonVisible && nEmpty);
}
const QList tabRepairCartridges::existentForms()
@@ -209,6 +211,9 @@ void tabRepairCartridges::createDialogIssue()
list.append(form->model());
}
+ if(list.isEmpty())
+ return;
+
m_dialogIssue = new SDialogIssueRepair(list, Qt::SplashScreen, this);
connect(m_dialogIssue, &SDialogIssueRepair::printWorksLists, [=](){tabPrintDialog::printCartridgeWorksReports(list, false);});
connect(m_dialogIssue, &SDialogIssueRepair::issueSuccessfull, this, &tabRepairCartridges::closeTab);
diff --git a/tabrepaircartridges.ui b/tabrepaircartridges.ui
index 11d0a19..6d52996 100644
--- a/tabrepaircartridges.ui
+++ b/tabrepaircartridges.ui
@@ -203,7 +203,7 @@
Установить всем картритджам в скиске статус "Готово к выдаче"
- Готово
+ Готово к выдаче
diff --git a/tabrepairs.cpp b/tabrepairs.cpp
index 65d998a..1ab6cdb 100644
--- a/tabrepairs.cpp
+++ b/tabrepairs.cpp
@@ -214,7 +214,7 @@ void tabRepairs::autorefreshTable()
void tabRepairs::tableItemDoubleClick(QModelIndex item)
{
- int id = repairs_table->record(item.row()).value("id").toInt();
+ int id = repairs_table->unformattedData(item.siblingAtColumn(STableRepairsModel::Columns::Id)).toInt();
if(!id)
return;
@@ -246,7 +246,7 @@ void tabRepairs::tableItemClick(QModelIndex index)
searchStr = searchStr.replace("^", "\\^").replace("$", "\\$");
searchStr = searchStr.replace("?", "\\?").replace("\\", "\\\\");
}
- ui->lineEditSearch->setText(searchStr);
+ ui->lineEditSearch->setText(searchStr.replace("\\\\","\\"));
}
}
diff --git a/tabsale.cpp b/tabsale.cpp
index ae1b1ae..cc582f7 100644
--- a/tabsale.cpp
+++ b/tabsale.cpp
@@ -326,7 +326,7 @@ bool tabSale::checkInput()
if( !ui->checkBoxAnonymous->isChecked() )
{
- if (ui->lineEditClientLastName->text() == "") // если не указана фамилия
+ if (ui->lineEditClientLastName->text() == "" && !clientModel->type()) // если не указана фамилия (обычный клиент; у юрика может быть пустым)
{
ui->lineEditClientLastName->setStyleSheet(commonLineEditStyleSheetRed);
error = 1;
diff --git a/widgets/scartridgeform.cpp b/widgets/scartridgeform.cpp
index 8d4e8f2..68c4c8f 100644
--- a/widgets/scartridgeform.cpp
+++ b/widgets/scartridgeform.cpp
@@ -25,7 +25,7 @@ SCartridgeForm::SCartridgeForm(const int repairId, QWidget *parent) :
{
initWidgets();
}
- catch (int)
+ catch (...)
{
m_repairId = 0;
}
diff --git a/widgets/sdialogissuerepair.cpp b/widgets/sdialogissuerepair.cpp
index abf98d7..e908b5b 100644
--- a/widgets/sdialogissuerepair.cpp
+++ b/widgets/sdialogissuerepair.cpp
@@ -76,6 +76,12 @@ SDialogIssueRepair::SDialogIssueRepair(QList repairs, Qt::WindowF
#ifdef QT_DEBUG
// ui->checkBoxConfirmGetOut->setChecked(true);
// ui->checkBoxPaymentCheckout->setChecked(true);
+// if(ui->checkBoxSetReturnedInCredit->isVisible() && m_clientModel->balanceEnabled())
+// ui->checkBoxSetReturnedInCredit->setChecked(true);
+// if(ui->checkBoxPaymentCheckout->isVisible() && ui->checkBoxPaymentCheckout->isEnabled())
+// ui->checkBoxPaymentCheckout->setChecked(true);
+// if(ui->checkBoxConfirmGetOut->isVisible() && ui->checkBoxConfirmGetOut->isEnabled())
+// ui->checkBoxConfirmGetOut->setChecked(true);
// buttonIssueClicked();
#endif
}
diff --git a/widgets/stableviewrepairsitemdelegates.cpp b/widgets/stableviewrepairsitemdelegates.cpp
index d9bf985..7d1a40f 100644
--- a/widgets/stableviewrepairsitemdelegates.cpp
+++ b/widgets/stableviewrepairsitemdelegates.cpp
@@ -30,10 +30,10 @@ void STableViewRepairsItemDelegates::paintStatusProgressBar(QPainter *painter, c
{
uint progressStatus = 0;
uint repairStatus = i_tableModel->unformattedData(index.siblingAtColumn(STableRepairsModel::Columns::Status)).toInt();
- uint statusTermSecons = comSettings->repairStatuses[repairStatus].TermsSec;
+ qint64 statusTermSecons = comSettings->repairStatuses[repairStatus].TermsSec;
QDateTime statusChanged = i_tableModel->unformattedData(index.siblingAtColumn(STableRepairsModel::Columns::LastStatusChanged)).toDateTime();
statusChanged.setTimeZone(QTimeZone::utc());
- qint64 secondsSinceStatusChanged = statusChanged.secsTo(QDateTime::currentDateTimeUtc());
+ qint64 secondsSinceStatusChanged = statusChanged.secsTo(QDateTime::currentDateTimeUtc()) + 1;
if(statusTermSecons <= 0) // если термин статуса не задан, что шкала прогресса 100%
statusTermSecons = secondsSinceStatusChanged;
diff --git a/windowsdispatcher.cpp b/windowsdispatcher.cpp
index bb617e0..fa9819e 100644
--- a/windowsdispatcher.cpp
+++ b/windowsdispatcher.cpp
@@ -12,6 +12,7 @@ windowsDispatcher::windowsDispatcher(QObject *parent) :
setObjectName("windowsDispatcherObj");
debugInitSettings();
+ appLog = new SAppLog();
appLog->appendRecord(QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss") + " Application start");
LoginWindow *windowLogin = new LoginWindow(this);