Moved advanced view code into plugin
This commit is contained in:
@@ -14,19 +14,25 @@ DEPENDPATH += $$PWD/../../zeiterfassunglib
|
|||||||
|
|
||||||
DEFINES += QT_DEPRECATED_WARNINGS QT_DISABLE_DEPRECATED_BEFORE=0x060000 QT_MESSAGELOGCONTEXT
|
DEFINES += QT_DEPRECATED_WARNINGS QT_DISABLE_DEPRECATED_BEFORE=0x060000 QT_MESSAGELOGCONTEXT
|
||||||
|
|
||||||
HEADERS += advancedviewplugin.h \
|
HEADERS += advanvedviewdialog.h \
|
||||||
|
advancedviewplugin.h \
|
||||||
advancedviewwidget.h \
|
advancedviewwidget.h \
|
||||||
advanvedviewdialog.h \
|
dialogs/bookingdialog.h \
|
||||||
views/bookingsview.h \
|
dialogs/timeassignmentdialog.h \
|
||||||
views/timeassignmentsview.h
|
models/bookingsmodel.h \
|
||||||
|
models/timeassignmentsmodel.h
|
||||||
|
|
||||||
SOURCES += advancedviewplugin.cpp \
|
SOURCES += advanvedviewdialog.cpp \
|
||||||
|
advancedviewplugin.cpp \
|
||||||
advancedviewwidget.cpp \
|
advancedviewwidget.cpp \
|
||||||
advanvedviewdialog.cpp \
|
dialogs/bookingdialog.cpp \
|
||||||
views/bookingsview.cpp \
|
dialogs/timeassignmentdialog.cpp \
|
||||||
views/timeassignmentsview.cpp
|
models/bookingsmodel.cpp \
|
||||||
|
models/timeassignmentsmodel.cpp
|
||||||
|
|
||||||
FORMS += advanvedviewdialog.ui
|
FORMS += advanvedviewdialog.ui \
|
||||||
|
dialogs/bookingdialog.ui \
|
||||||
|
dialogs/timeassignmentdialog.ui
|
||||||
|
|
||||||
RESOURCES += advancedviewplugin_resources.qrc
|
RESOURCES += advancedviewplugin_resources.qrc
|
||||||
|
|
||||||
|
@@ -1,18 +1,291 @@
|
|||||||
#include "advanvedviewdialog.h"
|
#include "advanvedviewdialog.h"
|
||||||
#include "ui_advanvedviewdialog.h"
|
#include "ui_advanvedviewdialog.h"
|
||||||
|
|
||||||
|
#include <QMenu>
|
||||||
|
#include <QAction>
|
||||||
|
#include <QEventLoop>
|
||||||
|
#include <QMessageBox>
|
||||||
|
#include <QStringBuilder>
|
||||||
|
|
||||||
|
#include "replies/createbookingreply.h"
|
||||||
|
#include "replies/updatebookingreply.h"
|
||||||
|
#include "replies/deletebookingreply.h"
|
||||||
|
#include "replies/createtimeassignmentreply.h"
|
||||||
|
#include "replies/updatetimeassignmentreply.h"
|
||||||
|
#include "replies/deletetimeassignmentreply.h"
|
||||||
|
|
||||||
#include "stripswidget.h"
|
#include "stripswidget.h"
|
||||||
#include "mainwindow.h"
|
#include "mainwindow.h"
|
||||||
|
#include "timeutils.h"
|
||||||
|
#include "dialogs/bookingdialog.h"
|
||||||
|
#include "dialogs/timeassignmentdialog.h"
|
||||||
|
#include "models/bookingsmodel.h"
|
||||||
|
#include "models/timeassignmentsmodel.h"
|
||||||
|
|
||||||
AdvanvedViewDialog::AdvanvedViewDialog(StripsWidget &stripsWidget) :
|
AdvanvedViewDialog::AdvanvedViewDialog(StripsWidget &stripsWidget) :
|
||||||
QDialog(&stripsWidget.mainWindow()),
|
QDialog(&stripsWidget.mainWindow()),
|
||||||
ui(new Ui::AdvanvedViewDialog),
|
ui(new Ui::AdvanvedViewDialog),
|
||||||
m_stripsWidget(stripsWidget)
|
m_stripsWidget(stripsWidget),
|
||||||
|
m_bookingsModel(new BookingsModel(stripsWidget, this)),
|
||||||
|
m_timeAssignmentsModel(new TimeAssignmentsModel(stripsWidget, this))
|
||||||
{
|
{
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
|
|
||||||
|
ui->bookingsView->setModel(m_bookingsModel);
|
||||||
|
connect(m_bookingsModel, &BookingsModel::enabledChanged, ui->bookingsView, &QWidget::setEnabled);
|
||||||
|
connect(ui->bookingsView, &QWidget::customContextMenuRequested, this, &AdvanvedViewDialog::contextMenuBooking);
|
||||||
|
|
||||||
|
ui->timeAssignmentsView->setModel(m_timeAssignmentsModel);
|
||||||
|
connect(m_timeAssignmentsModel, &TimeAssignmentsModel::enabledChanged, ui->timeAssignmentsView, &QWidget::setEnabled);
|
||||||
|
connect(ui->timeAssignmentsView, &QWidget::customContextMenuRequested, this, &AdvanvedViewDialog::contextMenuTimeAssignment);
|
||||||
}
|
}
|
||||||
|
|
||||||
AdvanvedViewDialog::~AdvanvedViewDialog()
|
AdvanvedViewDialog::~AdvanvedViewDialog()
|
||||||
{
|
{
|
||||||
delete ui;
|
delete ui;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AdvanvedViewDialog::contextMenuBooking(const QPoint &pos)
|
||||||
|
{
|
||||||
|
auto index = ui->bookingsView->indexAt(pos);
|
||||||
|
|
||||||
|
if(!index.isValid())
|
||||||
|
{
|
||||||
|
QMenu menu;
|
||||||
|
auto createAction = menu.addAction(tr("Create booking"));
|
||||||
|
auto refreshAction = menu.addAction(QIcon(QPixmap(QStringLiteral(":/zeiterfassunglib/images/refresh.png"))), tr("Refresh bookings"));
|
||||||
|
auto selectedAction = menu.exec(ui->bookingsView->viewport()->mapToGlobal(pos));
|
||||||
|
if(selectedAction == createAction)
|
||||||
|
{
|
||||||
|
BookingDialog dialog(this);
|
||||||
|
dialog.setTime(timeNormalise(QTime::currentTime()));
|
||||||
|
again2:
|
||||||
|
if(dialog.exec() == QDialog::Accepted)
|
||||||
|
{
|
||||||
|
auto reply = m_stripsWidget.mainWindow().erfassung().doCreateBooking(
|
||||||
|
m_stripsWidget.mainWindow().userInfo().userId,
|
||||||
|
m_stripsWidget.date(),
|
||||||
|
dialog.getTime(),
|
||||||
|
dialog.getTimespan(),
|
||||||
|
dialog.getType(),
|
||||||
|
dialog.getText()
|
||||||
|
);
|
||||||
|
|
||||||
|
{
|
||||||
|
QEventLoop eventLoop;
|
||||||
|
connect(reply.get(), &ZeiterfassungReply::finished, &eventLoop, &QEventLoop::quit);
|
||||||
|
eventLoop.exec();
|
||||||
|
}
|
||||||
|
|
||||||
|
if(reply->success())
|
||||||
|
{
|
||||||
|
m_stripsWidget.refreshBookings();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
QMessageBox::warning(this, tr("Could not create booking!"), tr("Could not create booking!") % "\n\n" % reply->message());
|
||||||
|
goto again2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(selectedAction == refreshAction)
|
||||||
|
{
|
||||||
|
m_stripsWidget.refreshBookings();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
auto booking = m_stripsWidget.bookings().at(index.row());
|
||||||
|
|
||||||
|
QMenu menu;
|
||||||
|
auto editAction = menu.addAction(tr("Edit booking"));
|
||||||
|
auto deleteAction = menu.addAction(tr("Delete booking"));
|
||||||
|
auto selectedAction = menu.exec(ui->bookingsView->viewport()->mapToGlobal(pos));
|
||||||
|
if(selectedAction == editAction)
|
||||||
|
{
|
||||||
|
BookingDialog dialog(this);
|
||||||
|
dialog.setTime(booking.time);
|
||||||
|
dialog.setTimespan(booking.timespan);
|
||||||
|
dialog.setType(booking.type);
|
||||||
|
dialog.setText(booking.text);
|
||||||
|
again1:
|
||||||
|
if(dialog.exec() == QDialog::Accepted)
|
||||||
|
{
|
||||||
|
auto reply = m_stripsWidget.mainWindow().erfassung().doUpdateBooking(
|
||||||
|
booking.id,
|
||||||
|
m_stripsWidget.mainWindow().userInfo().userId,
|
||||||
|
m_stripsWidget.date(),
|
||||||
|
dialog.getTime(),
|
||||||
|
dialog.getTimespan(),
|
||||||
|
dialog.getType(),
|
||||||
|
dialog.getText()
|
||||||
|
);
|
||||||
|
|
||||||
|
{
|
||||||
|
QEventLoop eventLoop;
|
||||||
|
connect(reply.get(), &ZeiterfassungReply::finished, &eventLoop, &QEventLoop::quit);
|
||||||
|
eventLoop.exec();
|
||||||
|
}
|
||||||
|
|
||||||
|
if(reply->success())
|
||||||
|
{
|
||||||
|
m_stripsWidget.refreshBookings();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
QMessageBox::warning(this, tr("Could not edit booking!"), tr("Could not edit booking!") % "\n\n" % reply->message());
|
||||||
|
goto again1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(selectedAction == deleteAction)
|
||||||
|
{
|
||||||
|
QMessageBox msgBox;
|
||||||
|
msgBox.setText(tr("Do you really want to delete the booking?"));
|
||||||
|
msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::Cancel);
|
||||||
|
msgBox.setDefaultButton(QMessageBox::Cancel);
|
||||||
|
if(msgBox.exec() == QMessageBox::Yes)
|
||||||
|
{
|
||||||
|
auto reply = m_stripsWidget.mainWindow().erfassung().doDeleteBooking(booking.id);
|
||||||
|
|
||||||
|
{
|
||||||
|
QEventLoop eventLoop;
|
||||||
|
connect(reply.get(), &ZeiterfassungReply::finished, &eventLoop, &QEventLoop::quit);
|
||||||
|
eventLoop.exec();
|
||||||
|
}
|
||||||
|
|
||||||
|
if(reply->success())
|
||||||
|
m_stripsWidget.refreshBookings();
|
||||||
|
else
|
||||||
|
QMessageBox::warning(this, tr("Could not delete booking!"), tr("Could not delete booking!") % "\n\n" % reply->message());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void AdvanvedViewDialog::contextMenuTimeAssignment(const QPoint &pos)
|
||||||
|
{
|
||||||
|
auto index = ui->timeAssignmentsView->indexAt(pos);
|
||||||
|
|
||||||
|
if(!index.isValid())
|
||||||
|
{
|
||||||
|
QMenu menu;
|
||||||
|
auto createAction = menu.addAction(tr("Create time assignment"));
|
||||||
|
auto refreshAction = menu.addAction(QIcon(QPixmap(QStringLiteral(":/zeiterfassunglib/images/refresh.png"))), tr("Refresh time assignments"));
|
||||||
|
auto selectedAction = menu.exec(ui->timeAssignmentsView->viewport()->mapToGlobal(pos));
|
||||||
|
if(selectedAction == createAction)
|
||||||
|
{
|
||||||
|
TimeAssignmentDialog dialog(m_stripsWidget.mainWindow().projects(),
|
||||||
|
m_stripsWidget.mainWindow().settings(), this);
|
||||||
|
again2:
|
||||||
|
if(dialog.exec() == QDialog::Accepted)
|
||||||
|
{
|
||||||
|
auto reply = m_stripsWidget.mainWindow().erfassung().doCreateTimeAssignment(
|
||||||
|
m_stripsWidget.mainWindow().userInfo().userId,
|
||||||
|
m_stripsWidget.date(),
|
||||||
|
dialog.getTime(),
|
||||||
|
dialog.getTimespan(),
|
||||||
|
dialog.getProject(),
|
||||||
|
dialog.getSubproject(),
|
||||||
|
dialog.getWorkpackage(),
|
||||||
|
dialog.getText()
|
||||||
|
);
|
||||||
|
|
||||||
|
{
|
||||||
|
QEventLoop eventLoop;
|
||||||
|
connect(reply.get(), &ZeiterfassungReply::finished, &eventLoop, &QEventLoop::quit);
|
||||||
|
eventLoop.exec();
|
||||||
|
}
|
||||||
|
|
||||||
|
if(reply->success())
|
||||||
|
{
|
||||||
|
m_stripsWidget.refreshTimeAssignments();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
QMessageBox::warning(this, tr("Could not create time assignment!"), tr("Could not create time assignment!") % "\n\n" % reply->message());
|
||||||
|
goto again2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(selectedAction == refreshAction)
|
||||||
|
{
|
||||||
|
m_stripsWidget.refreshTimeAssignments();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
auto timeAssignment = m_stripsWidget.timeAssignments().at(index.row());
|
||||||
|
|
||||||
|
QMenu menu;
|
||||||
|
auto editAction = menu.addAction(tr("Edit time assignment"));
|
||||||
|
auto deleteAction = menu.addAction(tr("Delete time assignment"));
|
||||||
|
auto selectedAction = menu.exec(ui->timeAssignmentsView->viewport()->mapToGlobal(pos));
|
||||||
|
if(selectedAction == editAction)
|
||||||
|
{
|
||||||
|
TimeAssignmentDialog dialog(m_stripsWidget.mainWindow().projects(),
|
||||||
|
m_stripsWidget.mainWindow().settings(), this);
|
||||||
|
dialog.setTime(timeAssignment.time);
|
||||||
|
dialog.setTimespan(timeAssignment.timespan);
|
||||||
|
dialog.setProject(timeAssignment.project);
|
||||||
|
dialog.setSubproject(timeAssignment.subproject);
|
||||||
|
dialog.setWorkpackage(timeAssignment.workpackage);
|
||||||
|
dialog.setText(timeAssignment.text);
|
||||||
|
again1:
|
||||||
|
if(dialog.exec() == QDialog::Accepted)
|
||||||
|
{
|
||||||
|
auto reply = m_stripsWidget.mainWindow().erfassung().doUpdateTimeAssignment(
|
||||||
|
timeAssignment.id,
|
||||||
|
m_stripsWidget.mainWindow().userInfo().userId,
|
||||||
|
m_stripsWidget.date(),
|
||||||
|
dialog.getTime(),
|
||||||
|
dialog.getTimespan(),
|
||||||
|
dialog.getProject(),
|
||||||
|
dialog.getSubproject(),
|
||||||
|
dialog.getWorkpackage(),
|
||||||
|
dialog.getText()
|
||||||
|
);
|
||||||
|
|
||||||
|
{
|
||||||
|
QEventLoop eventLoop;
|
||||||
|
connect(reply.get(), &ZeiterfassungReply::finished, &eventLoop, &QEventLoop::quit);
|
||||||
|
eventLoop.exec();
|
||||||
|
}
|
||||||
|
|
||||||
|
if(reply->success())
|
||||||
|
{
|
||||||
|
m_stripsWidget.refreshTimeAssignments();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
QMessageBox::warning(this, tr("Could not edit time assignment!"), tr("Could not edit time assignment!") % "\n\n" % reply->message());
|
||||||
|
goto again1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(selectedAction == deleteAction)
|
||||||
|
{
|
||||||
|
QMessageBox msgBox;
|
||||||
|
msgBox.setText(tr("Do you really want to delete the time assignment?"));
|
||||||
|
msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::Cancel);
|
||||||
|
msgBox.setDefaultButton(QMessageBox::Cancel);
|
||||||
|
if(msgBox.exec() == QMessageBox::Yes)
|
||||||
|
{
|
||||||
|
auto reply = m_stripsWidget.mainWindow().erfassung().doDeleteTimeAssignment(timeAssignment.id);
|
||||||
|
|
||||||
|
{
|
||||||
|
QEventLoop eventLoop;
|
||||||
|
connect(reply.get(), &ZeiterfassungReply::finished, &eventLoop, &QEventLoop::quit);
|
||||||
|
eventLoop.exec();
|
||||||
|
}
|
||||||
|
|
||||||
|
if(reply->success())
|
||||||
|
{
|
||||||
|
m_stripsWidget.refreshTimeAssignments();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
QMessageBox::warning(this, tr("Could not delete time assignment!"), tr("Could not delete time assignment!") % "\n\n" % reply->message());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@@ -3,8 +3,10 @@
|
|||||||
|
|
||||||
#include <QDialog>
|
#include <QDialog>
|
||||||
|
|
||||||
class StripsWidget;
|
|
||||||
namespace Ui { class AdvanvedViewDialog; }
|
namespace Ui { class AdvanvedViewDialog; }
|
||||||
|
class StripsWidget;
|
||||||
|
class BookingsModel;
|
||||||
|
class TimeAssignmentsModel;
|
||||||
|
|
||||||
class AdvanvedViewDialog : public QDialog
|
class AdvanvedViewDialog : public QDialog
|
||||||
{
|
{
|
||||||
@@ -14,10 +16,17 @@ public:
|
|||||||
explicit AdvanvedViewDialog(StripsWidget &stripsWidget);
|
explicit AdvanvedViewDialog(StripsWidget &stripsWidget);
|
||||||
~AdvanvedViewDialog();
|
~AdvanvedViewDialog();
|
||||||
|
|
||||||
|
private Q_SLOTS:
|
||||||
|
void contextMenuBooking(const QPoint &pos);
|
||||||
|
void contextMenuTimeAssignment(const QPoint &pos);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Ui::AdvanvedViewDialog *ui;
|
Ui::AdvanvedViewDialog *ui;
|
||||||
|
|
||||||
StripsWidget &m_stripsWidget;
|
StripsWidget &m_stripsWidget;
|
||||||
|
|
||||||
|
BookingsModel *m_bookingsModel;
|
||||||
|
TimeAssignmentsModel *m_timeAssignmentsModel;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // ADVANVEDVIEWDIALOG_H
|
#endif // ADVANVEDVIEWDIALOG_H
|
||||||
|
@@ -19,8 +19,16 @@
|
|||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
<enum>Qt::Vertical</enum>
|
<enum>Qt::Vertical</enum>
|
||||||
</property>
|
</property>
|
||||||
<widget class="BookingsView" name="bookingsView"/>
|
<widget class="QTreeView" name="bookingsView">
|
||||||
<widget class="TimeAssignmentsView" name="timeAssignmentsView"/>
|
<property name="contextMenuPolicy">
|
||||||
|
<enum>Qt::CustomContextMenu</enum>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QTreeView" name="timeAssignmentsView">
|
||||||
|
<property name="contextMenuPolicy">
|
||||||
|
<enum>Qt::CustomContextMenu</enum>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
@@ -35,18 +43,6 @@
|
|||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
<customwidgets>
|
|
||||||
<customwidget>
|
|
||||||
<class>BookingsView</class>
|
|
||||||
<extends>QTreeView</extends>
|
|
||||||
<header>views/bookingsview.h</header>
|
|
||||||
</customwidget>
|
|
||||||
<customwidget>
|
|
||||||
<class>TimeAssignmentsView</class>
|
|
||||||
<extends>QTreeView</extends>
|
|
||||||
<header>views/timeassignmentsview.h</header>
|
|
||||||
</customwidget>
|
|
||||||
</customwidgets>
|
|
||||||
<resources/>
|
<resources/>
|
||||||
<connections>
|
<connections>
|
||||||
<connection>
|
<connection>
|
||||||
|
88
plugins/advancedviewplugin/models/bookingsmodel.cpp
Normal file
88
plugins/advancedviewplugin/models/bookingsmodel.cpp
Normal file
@@ -0,0 +1,88 @@
|
|||||||
|
#include "bookingsmodel.h"
|
||||||
|
|
||||||
|
#include "stripswidget.h"
|
||||||
|
|
||||||
|
BookingsModel::BookingsModel(StripsWidget &stripsWidget, QObject *parent) :
|
||||||
|
QAbstractListModel(parent),
|
||||||
|
m_stripsWidget(stripsWidget)
|
||||||
|
{
|
||||||
|
connect(&stripsWidget, &StripsWidget::bookingsChanged, this, &BookingsModel::bookingsChanged);
|
||||||
|
connect(&stripsWidget, &StripsWidget::refreshingBookingsChanged, this, &BookingsModel::enabledChanged);
|
||||||
|
}
|
||||||
|
|
||||||
|
StripsWidget &BookingsModel::stripsWidget() const
|
||||||
|
{
|
||||||
|
return m_stripsWidget;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool BookingsModel::enabled() const
|
||||||
|
{
|
||||||
|
return !m_stripsWidget.refreshingBookings();
|
||||||
|
}
|
||||||
|
|
||||||
|
int BookingsModel::rowCount(const QModelIndex &parent) const
|
||||||
|
{
|
||||||
|
Q_UNUSED(parent)
|
||||||
|
|
||||||
|
return m_stripsWidget.bookings().count();
|
||||||
|
}
|
||||||
|
|
||||||
|
int BookingsModel::columnCount(const QModelIndex &parent) const
|
||||||
|
{
|
||||||
|
Q_UNUSED(parent)
|
||||||
|
|
||||||
|
return 5;
|
||||||
|
}
|
||||||
|
|
||||||
|
QVariant BookingsModel::data(const QModelIndex &index, int role) const
|
||||||
|
{
|
||||||
|
Q_ASSERT(index.row() < m_stripsWidget.bookings().count());
|
||||||
|
const auto &booking = m_stripsWidget.bookings().at(index.row());
|
||||||
|
|
||||||
|
switch(role)
|
||||||
|
{
|
||||||
|
case Qt::DisplayRole:
|
||||||
|
case Qt::EditRole:
|
||||||
|
switch(index.column())
|
||||||
|
{
|
||||||
|
case 0: return booking.id;
|
||||||
|
case 1: return booking.time;
|
||||||
|
case 2: return booking.timespan;
|
||||||
|
case 3: return booking.type;
|
||||||
|
case 4: return booking.text;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return QVariant();
|
||||||
|
}
|
||||||
|
|
||||||
|
QVariant BookingsModel::headerData(int section, Qt::Orientation orientation, int role) const
|
||||||
|
{
|
||||||
|
switch(orientation)
|
||||||
|
{
|
||||||
|
case Qt::Horizontal:
|
||||||
|
switch(role)
|
||||||
|
{
|
||||||
|
case Qt::DisplayRole:
|
||||||
|
case Qt::EditRole:
|
||||||
|
switch(section)
|
||||||
|
{
|
||||||
|
case 0: return tr("ID");
|
||||||
|
case 1: return tr("Time");
|
||||||
|
case 2: return tr("Timespan");
|
||||||
|
case 3: return tr("Type");
|
||||||
|
case 4: return tr("Text");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
qt_noop();
|
||||||
|
}
|
||||||
|
|
||||||
|
return QVariant();
|
||||||
|
}
|
||||||
|
|
||||||
|
void BookingsModel::bookingsChanged()
|
||||||
|
{
|
||||||
|
beginResetModel();
|
||||||
|
endResetModel();
|
||||||
|
}
|
@@ -12,14 +12,12 @@ class StripsWidget;
|
|||||||
class ZEITERFASSUNGLIBSHARED_EXPORT BookingsModel : public QAbstractListModel
|
class ZEITERFASSUNGLIBSHARED_EXPORT BookingsModel : public QAbstractListModel
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
Q_PROPERTY(StripsWidget* stripsWidget READ stripsWidget WRITE setStripsWidget NOTIFY stripsWidgetChanged)
|
|
||||||
Q_PROPERTY(bool enabled READ enabled NOTIFY enabledChanged)
|
Q_PROPERTY(bool enabled READ enabled NOTIFY enabledChanged)
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit BookingsModel(QObject *parent = Q_NULLPTR);
|
explicit BookingsModel(StripsWidget &stripsWidget, QObject *parent = Q_NULLPTR);
|
||||||
|
|
||||||
StripsWidget *stripsWidget() const;
|
StripsWidget &stripsWidget() const;
|
||||||
void setStripsWidget(StripsWidget *stripsWidget);
|
|
||||||
|
|
||||||
bool enabled() const;
|
bool enabled() const;
|
||||||
|
|
||||||
@@ -30,16 +28,13 @@ public:
|
|||||||
QVariant headerData(int section, Qt::Orientation orientation, int role) const Q_DECL_OVERRIDE;
|
QVariant headerData(int section, Qt::Orientation orientation, int role) const Q_DECL_OVERRIDE;
|
||||||
|
|
||||||
Q_SIGNALS:
|
Q_SIGNALS:
|
||||||
void stripsWidgetChanged(StripsWidget *stripsWidget);
|
|
||||||
void enabledChanged(bool enabled);
|
void enabledChanged(bool enabled);
|
||||||
|
|
||||||
private Q_SLOTS:
|
private Q_SLOTS:
|
||||||
void bookingsChanged();
|
void bookingsChanged();
|
||||||
void refreshingChanged(bool refreshing);
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
StripsWidget *m_stripsWidget;
|
StripsWidget &m_stripsWidget;
|
||||||
bool m_enabled;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // BOOKINGSMODEL_H
|
#endif // BOOKINGSMODEL_H
|
92
plugins/advancedviewplugin/models/timeassignmentsmodel.cpp
Normal file
92
plugins/advancedviewplugin/models/timeassignmentsmodel.cpp
Normal file
@@ -0,0 +1,92 @@
|
|||||||
|
#include "timeassignmentsmodel.h"
|
||||||
|
|
||||||
|
#include "stripswidget.h"
|
||||||
|
|
||||||
|
TimeAssignmentsModel::TimeAssignmentsModel(StripsWidget &stripsWidget, QObject *parent) :
|
||||||
|
QAbstractListModel(parent),
|
||||||
|
m_stripsWidget(stripsWidget)
|
||||||
|
{
|
||||||
|
connect(&stripsWidget, &StripsWidget::timeAssignmentsChanged, this, &TimeAssignmentsModel::timeAssignmentsChanged);
|
||||||
|
connect(&stripsWidget, &StripsWidget::refreshingBookingsChanged, this, &TimeAssignmentsModel::enabledChanged);
|
||||||
|
}
|
||||||
|
|
||||||
|
StripsWidget &TimeAssignmentsModel::stripsWidget() const
|
||||||
|
{
|
||||||
|
return m_stripsWidget;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool TimeAssignmentsModel::enabled() const
|
||||||
|
{
|
||||||
|
return !m_stripsWidget.refreshingTimeAssignments();
|
||||||
|
}
|
||||||
|
|
||||||
|
int TimeAssignmentsModel::rowCount(const QModelIndex &parent) const
|
||||||
|
{
|
||||||
|
Q_UNUSED(parent)
|
||||||
|
|
||||||
|
return m_stripsWidget.timeAssignments().count();
|
||||||
|
}
|
||||||
|
|
||||||
|
int TimeAssignmentsModel::columnCount(const QModelIndex &parent) const
|
||||||
|
{
|
||||||
|
Q_UNUSED(parent)
|
||||||
|
|
||||||
|
return 7;
|
||||||
|
}
|
||||||
|
|
||||||
|
QVariant TimeAssignmentsModel::data(const QModelIndex &index, int role) const
|
||||||
|
{
|
||||||
|
Q_ASSERT(index.row() < m_stripsWidget.timeAssignments().count());
|
||||||
|
const auto &timeAssignment = m_stripsWidget.timeAssignments().at(index.row());
|
||||||
|
|
||||||
|
switch(role)
|
||||||
|
{
|
||||||
|
case Qt::DisplayRole:
|
||||||
|
case Qt::EditRole:
|
||||||
|
switch(index.column())
|
||||||
|
{
|
||||||
|
case 0: return timeAssignment.id;
|
||||||
|
case 1: return timeAssignment.time;
|
||||||
|
case 2: return timeAssignment.timespan;
|
||||||
|
case 3: return timeAssignment.project;
|
||||||
|
case 4: return timeAssignment.subproject;
|
||||||
|
case 5: return timeAssignment.workpackage;
|
||||||
|
case 6: return timeAssignment.text;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return QVariant();
|
||||||
|
}
|
||||||
|
|
||||||
|
QVariant TimeAssignmentsModel::headerData(int section, Qt::Orientation orientation, int role) const
|
||||||
|
{
|
||||||
|
switch(orientation)
|
||||||
|
{
|
||||||
|
case Qt::Horizontal:
|
||||||
|
switch(role)
|
||||||
|
{
|
||||||
|
case Qt::DisplayRole:
|
||||||
|
case Qt::EditRole:
|
||||||
|
switch(section)
|
||||||
|
{
|
||||||
|
case 0: return tr("ID");
|
||||||
|
case 1: return tr("Time");
|
||||||
|
case 2: return tr("Timespan");
|
||||||
|
case 3: return tr("Project");
|
||||||
|
case 4: return tr("Subproject");
|
||||||
|
case 5: return tr("Workpackage");
|
||||||
|
case 6: return tr("Text");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
qt_noop();
|
||||||
|
}
|
||||||
|
|
||||||
|
return QVariant();
|
||||||
|
}
|
||||||
|
|
||||||
|
void TimeAssignmentsModel::timeAssignmentsChanged()
|
||||||
|
{
|
||||||
|
beginResetModel();
|
||||||
|
endResetModel();
|
||||||
|
}
|
@@ -12,14 +12,12 @@ class StripsWidget;
|
|||||||
class ZEITERFASSUNGLIBSHARED_EXPORT TimeAssignmentsModel : public QAbstractListModel
|
class ZEITERFASSUNGLIBSHARED_EXPORT TimeAssignmentsModel : public QAbstractListModel
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
Q_PROPERTY(StripsWidget* stripsWidget READ stripsWidget WRITE setStripsWidget NOTIFY stripsWidgetChanged)
|
|
||||||
Q_PROPERTY(bool enabled READ enabled NOTIFY enabledChanged)
|
Q_PROPERTY(bool enabled READ enabled NOTIFY enabledChanged)
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit TimeAssignmentsModel(QObject *parent = Q_NULLPTR);
|
explicit TimeAssignmentsModel(StripsWidget &stripsWidget, QObject *parent = Q_NULLPTR);
|
||||||
|
|
||||||
StripsWidget *stripsWidget() const;
|
StripsWidget &stripsWidget() const;
|
||||||
void setStripsWidget(StripsWidget *stripsWidget);
|
|
||||||
|
|
||||||
bool enabled() const;
|
bool enabled() const;
|
||||||
|
|
||||||
@@ -38,8 +36,7 @@ private Q_SLOTS:
|
|||||||
void refreshingChanged(bool refreshing);
|
void refreshingChanged(bool refreshing);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
StripsWidget *m_stripsWidget;
|
StripsWidget &m_stripsWidget;
|
||||||
bool m_enabled;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // TIMEASSIGNMENTSMODEL_H
|
#endif // TIMEASSIGNMENTSMODEL_H
|
@@ -1,7 +0,0 @@
|
|||||||
#include "bookingsview.h"
|
|
||||||
|
|
||||||
BookingsView::BookingsView(QWidget *parent) :
|
|
||||||
QTreeView(parent)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
@@ -1,14 +0,0 @@
|
|||||||
#ifndef BOOKINGSVIEW_H
|
|
||||||
#define BOOKINGSVIEW_H
|
|
||||||
|
|
||||||
#include <QTreeView>
|
|
||||||
|
|
||||||
class BookingsView : public QTreeView
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
|
|
||||||
public:
|
|
||||||
explicit BookingsView(QWidget *parent = Q_NULLPTR);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // BOOKINGSVIEW_H
|
|
@@ -1,7 +0,0 @@
|
|||||||
#include "timeassignmentsview.h"
|
|
||||||
|
|
||||||
TimeAssignmentsView::TimeAssignmentsView(QWidget *parent) :
|
|
||||||
QTreeView(parent)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
@@ -1,14 +0,0 @@
|
|||||||
#ifndef TIMEASSIGNMENTSVIEW_H
|
|
||||||
#define TIMEASSIGNMENTSVIEW_H
|
|
||||||
|
|
||||||
#include <QTreeView>
|
|
||||||
|
|
||||||
class TimeAssignmentsView : public QTreeView
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
|
|
||||||
public:
|
|
||||||
explicit TimeAssignmentsView(QWidget *parent = 0);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // TIMEASSIGNMENTSVIEW_H
|
|
@@ -21,21 +21,13 @@
|
|||||||
#include "stripfactory.h"
|
#include "stripfactory.h"
|
||||||
#include "stripswidget.h"
|
#include "stripswidget.h"
|
||||||
#include "dialogs/aboutmedialog.h"
|
#include "dialogs/aboutmedialog.h"
|
||||||
#include "dialogs/bookingdialog.h"
|
|
||||||
#include "dialogs/timeassignmentdialog.h"
|
|
||||||
#include "dialogs/settingsdialog.h"
|
#include "dialogs/settingsdialog.h"
|
||||||
#include "dialogs/updatedialog.h"
|
#include "dialogs/updatedialog.h"
|
||||||
#include "models/bookingsmodel.h"
|
|
||||||
#include "models/timeassignmentsmodel.h"
|
|
||||||
#include "replies/getprojectsreply.h"
|
#include "replies/getprojectsreply.h"
|
||||||
#include "replies/getauswertungreply.h"
|
#include "replies/getauswertungreply.h"
|
||||||
#include "replies/updatebookingreply.h"
|
|
||||||
#include "replies/deletebookingreply.h"
|
|
||||||
#include "replies/createbookingreply.h"
|
#include "replies/createbookingreply.h"
|
||||||
#include "replies/updatetimeassignmentreply.h"
|
|
||||||
#include "replies/deletetimeassignmentreply.h"
|
|
||||||
#include "replies/createtimeassignmentreply.h"
|
#include "replies/createtimeassignmentreply.h"
|
||||||
#include "replies/createbookingreply.h"
|
#include "replies/updatetimeassignmentreply.h"
|
||||||
|
|
||||||
MainWindow::MainWindow(ZeiterfassungSettings &settings, ZeiterfassungApi &erfassung, const GetUserInfoReply::UserInfo &userInfo,
|
MainWindow::MainWindow(ZeiterfassungSettings &settings, ZeiterfassungApi &erfassung, const GetUserInfoReply::UserInfo &userInfo,
|
||||||
StripFactory &stripFactory, QWidget *parent) :
|
StripFactory &stripFactory, QWidget *parent) :
|
||||||
@@ -47,15 +39,13 @@ MainWindow::MainWindow(ZeiterfassungSettings &settings, ZeiterfassungApi &erfass
|
|||||||
m_stripFactory(stripFactory),
|
m_stripFactory(stripFactory),
|
||||||
m_getProjectsReply(Q_NULLPTR),
|
m_getProjectsReply(Q_NULLPTR),
|
||||||
m_getAuswertungReply(Q_NULLPTR),
|
m_getAuswertungReply(Q_NULLPTR),
|
||||||
m_bookingsModel(new BookingsModel(this)),
|
|
||||||
m_timeAssignmentsModel(new TimeAssignmentsModel(this)),
|
|
||||||
m_currentStripWidget(Q_NULLPTR)
|
m_currentStripWidget(Q_NULLPTR)
|
||||||
{
|
{
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
|
|
||||||
for(quint8 i = 0; i < 7; i++)
|
for(quint8 i = 0; i < 7; i++)
|
||||||
{
|
{
|
||||||
m_stripsWidgets[i] = new StripsWidget(*this);
|
m_stripsWidgets[i] = new StripsWidget(*this, ui->widgetWeek);
|
||||||
connect(m_stripsWidgets[i], &StripsWidget::refreshingChanged, this, &MainWindow::refreshingChanged);
|
connect(m_stripsWidgets[i], &StripsWidget::refreshingChanged, this, &MainWindow::refreshingChanged);
|
||||||
ui->layoutWeek->addWidget(m_stripsWidgets[i]);
|
ui->layoutWeek->addWidget(m_stripsWidgets[i]);
|
||||||
}
|
}
|
||||||
@@ -100,14 +90,6 @@ MainWindow::MainWindow(ZeiterfassungSettings &settings, ZeiterfassungApi &erfass
|
|||||||
connect(ui->pushButtonStart, &QAbstractButton::pressed, this, &MainWindow::pushButtonStartPressed);
|
connect(ui->pushButtonStart, &QAbstractButton::pressed, this, &MainWindow::pushButtonStartPressed);
|
||||||
connect(ui->pushButtonEnd, &QAbstractButton::pressed, this, &MainWindow::pushButtonEndPressed);
|
connect(ui->pushButtonEnd, &QAbstractButton::pressed, this, &MainWindow::pushButtonEndPressed);
|
||||||
|
|
||||||
ui->treeViewBookings->setModel(m_bookingsModel);
|
|
||||||
connect(m_bookingsModel, &BookingsModel::enabledChanged, ui->treeViewBookings, &QWidget::setEnabled);
|
|
||||||
connect(ui->treeViewBookings, &QWidget::customContextMenuRequested, this, &MainWindow::contextMenuBooking);
|
|
||||||
|
|
||||||
ui->treeViewTimeAssignments->setModel(m_timeAssignmentsModel);
|
|
||||||
connect(m_timeAssignmentsModel, &TimeAssignmentsModel::enabledChanged, ui->treeViewTimeAssignments, &QWidget::setEnabled);
|
|
||||||
connect(ui->treeViewTimeAssignments, &QWidget::customContextMenuRequested, this, &MainWindow::contextMenuTimeAssignment);
|
|
||||||
|
|
||||||
ui->statusbar->addPermanentWidget(m_balanceLabel = new QLabel(ui->statusbar));
|
ui->statusbar->addPermanentWidget(m_balanceLabel = new QLabel(ui->statusbar));
|
||||||
m_balanceLabel->setFrameShape(QFrame::Panel);
|
m_balanceLabel->setFrameShape(QFrame::Panel);
|
||||||
m_balanceLabel->setFrameShadow(QFrame::Sunken);
|
m_balanceLabel->setFrameShadow(QFrame::Sunken);
|
||||||
@@ -254,225 +236,6 @@ void MainWindow::getAuswertungFinished()
|
|||||||
m_getAuswertungReply = Q_NULLPTR;
|
m_getAuswertungReply = Q_NULLPTR;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::contextMenuBooking(const QPoint &pos)
|
|
||||||
{
|
|
||||||
auto index = ui->treeViewBookings->indexAt(pos);
|
|
||||||
|
|
||||||
if(!index.isValid())
|
|
||||||
{
|
|
||||||
QMenu menu;
|
|
||||||
auto createAction = menu.addAction(tr("Create booking"));
|
|
||||||
auto refreshAction = menu.addAction(QIcon(QPixmap(QStringLiteral(":/zeiterfassunglib/images/refresh.png"))), tr("Refresh bookings"));
|
|
||||||
auto selectedAction = menu.exec(ui->treeViewBookings->viewport()->mapToGlobal(pos));
|
|
||||||
if(selectedAction == createAction)
|
|
||||||
{
|
|
||||||
BookingDialog dialog(this);
|
|
||||||
dialog.setTime(timeNormalise(QTime::currentTime()));
|
|
||||||
again2:
|
|
||||||
if(dialog.exec() == QDialog::Accepted)
|
|
||||||
{
|
|
||||||
auto reply = m_erfassung.doCreateBooking(m_userInfo.userId, ui->dateEditDate->date(),
|
|
||||||
dialog.getTime(), dialog.getTimespan(),
|
|
||||||
dialog.getType(), dialog.getText());
|
|
||||||
|
|
||||||
{
|
|
||||||
QEventLoop eventLoop;
|
|
||||||
connect(reply.get(), &ZeiterfassungReply::finished, &eventLoop, &QEventLoop::quit);
|
|
||||||
eventLoop.exec();
|
|
||||||
}
|
|
||||||
|
|
||||||
if(reply->success())
|
|
||||||
{
|
|
||||||
m_currentStripWidget->refreshBookings();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
QMessageBox::warning(this, tr("Could not create booking!"), tr("Could not create booking!") % "\n\n" % reply->message());
|
|
||||||
goto again2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if(selectedAction == refreshAction)
|
|
||||||
{
|
|
||||||
m_currentStripWidget->refreshBookings();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
auto booking = m_currentStripWidget->bookings().at(index.row());
|
|
||||||
|
|
||||||
QMenu menu;
|
|
||||||
auto editAction = menu.addAction(tr("Edit booking"));
|
|
||||||
auto deleteAction = menu.addAction(tr("Delete booking"));
|
|
||||||
auto selectedAction = menu.exec(ui->treeViewBookings->viewport()->mapToGlobal(pos));
|
|
||||||
if(selectedAction == editAction)
|
|
||||||
{
|
|
||||||
BookingDialog dialog(this);
|
|
||||||
dialog.setTime(booking.time);
|
|
||||||
dialog.setTimespan(booking.timespan);
|
|
||||||
dialog.setType(booking.type);
|
|
||||||
dialog.setText(booking.text);
|
|
||||||
again1:
|
|
||||||
if(dialog.exec() == QDialog::Accepted)
|
|
||||||
{
|
|
||||||
auto reply = m_erfassung.doUpdateBooking(booking.id, m_userInfo.userId, ui->dateEditDate->date(),
|
|
||||||
dialog.getTime(), dialog.getTimespan(),
|
|
||||||
dialog.getType(), dialog.getText());
|
|
||||||
|
|
||||||
{
|
|
||||||
QEventLoop eventLoop;
|
|
||||||
connect(reply.get(), &ZeiterfassungReply::finished, &eventLoop, &QEventLoop::quit);
|
|
||||||
eventLoop.exec();
|
|
||||||
}
|
|
||||||
|
|
||||||
if(reply->success())
|
|
||||||
{
|
|
||||||
m_currentStripWidget->refreshBookings();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
QMessageBox::warning(this, tr("Could not edit booking!"), tr("Could not edit booking!") % "\n\n" % reply->message());
|
|
||||||
goto again1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if(selectedAction == deleteAction)
|
|
||||||
{
|
|
||||||
QMessageBox msgBox;
|
|
||||||
msgBox.setText(tr("Do you really want to delete the booking?"));
|
|
||||||
msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::Cancel);
|
|
||||||
msgBox.setDefaultButton(QMessageBox::Cancel);
|
|
||||||
if(msgBox.exec() == QMessageBox::Yes)
|
|
||||||
{
|
|
||||||
auto reply = m_erfassung.doDeleteBooking(booking.id);
|
|
||||||
|
|
||||||
{
|
|
||||||
QEventLoop eventLoop;
|
|
||||||
connect(reply.get(), &ZeiterfassungReply::finished, &eventLoop, &QEventLoop::quit);
|
|
||||||
eventLoop.exec();
|
|
||||||
}
|
|
||||||
|
|
||||||
if(reply->success())
|
|
||||||
m_currentStripWidget->refreshBookings();
|
|
||||||
else
|
|
||||||
QMessageBox::warning(this, tr("Could not delete booking!"), tr("Could not delete booking!") % "\n\n" % reply->message());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void MainWindow::contextMenuTimeAssignment(const QPoint &pos)
|
|
||||||
{
|
|
||||||
auto index = ui->treeViewTimeAssignments->indexAt(pos);
|
|
||||||
|
|
||||||
if(!index.isValid())
|
|
||||||
{
|
|
||||||
QMenu menu;
|
|
||||||
auto createAction = menu.addAction(tr("Create time assignment"));
|
|
||||||
auto refreshAction = menu.addAction(QIcon(QPixmap(QStringLiteral(":/zeiterfassunglib/images/refresh.png"))), tr("Refresh time assignments"));
|
|
||||||
auto selectedAction = menu.exec(ui->treeViewTimeAssignments->viewport()->mapToGlobal(pos));
|
|
||||||
if(selectedAction == createAction)
|
|
||||||
{
|
|
||||||
TimeAssignmentDialog dialog(m_projects, m_settings, this);
|
|
||||||
again2:
|
|
||||||
if(dialog.exec() == QDialog::Accepted)
|
|
||||||
{
|
|
||||||
auto reply = m_erfassung.doCreateTimeAssignment(m_userInfo.userId, ui->dateEditDate->date(),
|
|
||||||
dialog.getTime(), dialog.getTimespan(),
|
|
||||||
dialog.getProject(), dialog.getSubproject(),
|
|
||||||
dialog.getWorkpackage(), dialog.getText());
|
|
||||||
|
|
||||||
{
|
|
||||||
QEventLoop eventLoop;
|
|
||||||
connect(reply.get(), &ZeiterfassungReply::finished, &eventLoop, &QEventLoop::quit);
|
|
||||||
eventLoop.exec();
|
|
||||||
}
|
|
||||||
|
|
||||||
if(reply->success())
|
|
||||||
{
|
|
||||||
m_currentStripWidget->refreshTimeAssignments();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
QMessageBox::warning(this, tr("Could not create time assignment!"), tr("Could not create time assignment!") % "\n\n" % reply->message());
|
|
||||||
goto again2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if(selectedAction == refreshAction)
|
|
||||||
{
|
|
||||||
m_currentStripWidget->refreshTimeAssignments();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
auto timeAssignment = m_currentStripWidget->timeAssignments().at(index.row());
|
|
||||||
|
|
||||||
QMenu menu;
|
|
||||||
auto editAction = menu.addAction(tr("Edit time assignment"));
|
|
||||||
auto deleteAction = menu.addAction(tr("Delete time assignment"));
|
|
||||||
auto selectedAction = menu.exec(ui->treeViewTimeAssignments->viewport()->mapToGlobal(pos));
|
|
||||||
if(selectedAction == editAction)
|
|
||||||
{
|
|
||||||
TimeAssignmentDialog dialog(m_projects, m_settings, this);
|
|
||||||
dialog.setTime(timeAssignment.time);
|
|
||||||
dialog.setTimespan(timeAssignment.timespan);
|
|
||||||
dialog.setProject(timeAssignment.project);
|
|
||||||
dialog.setSubproject(timeAssignment.subproject);
|
|
||||||
dialog.setWorkpackage(timeAssignment.workpackage);
|
|
||||||
dialog.setText(timeAssignment.text);
|
|
||||||
again1:
|
|
||||||
if(dialog.exec() == QDialog::Accepted)
|
|
||||||
{
|
|
||||||
auto reply = m_erfassung.doUpdateTimeAssignment(timeAssignment.id, m_userInfo.userId, ui->dateEditDate->date(),
|
|
||||||
dialog.getTime(), dialog.getTimespan(),
|
|
||||||
dialog.getProject(), dialog.getSubproject(),
|
|
||||||
dialog.getWorkpackage(), dialog.getText());
|
|
||||||
|
|
||||||
{
|
|
||||||
QEventLoop eventLoop;
|
|
||||||
connect(reply.get(), &ZeiterfassungReply::finished, &eventLoop, &QEventLoop::quit);
|
|
||||||
eventLoop.exec();
|
|
||||||
}
|
|
||||||
|
|
||||||
if(reply->success())
|
|
||||||
{
|
|
||||||
m_currentStripWidget->refreshTimeAssignments();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
QMessageBox::warning(this, tr("Could not edit time assignment!"), tr("Could not edit time assignment!") % "\n\n" % reply->message());
|
|
||||||
goto again1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if(selectedAction == deleteAction)
|
|
||||||
{
|
|
||||||
QMessageBox msgBox;
|
|
||||||
msgBox.setText(tr("Do you really want to delete the time assignment?"));
|
|
||||||
msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::Cancel);
|
|
||||||
msgBox.setDefaultButton(QMessageBox::Cancel);
|
|
||||||
if(msgBox.exec() == QMessageBox::Yes)
|
|
||||||
{
|
|
||||||
auto reply = m_erfassung.doDeleteTimeAssignment(timeAssignment.id);
|
|
||||||
|
|
||||||
{
|
|
||||||
QEventLoop eventLoop;
|
|
||||||
connect(reply.get(), &ZeiterfassungReply::finished, &eventLoop, &QEventLoop::quit);
|
|
||||||
eventLoop.exec();
|
|
||||||
}
|
|
||||||
|
|
||||||
if(reply->success())
|
|
||||||
{
|
|
||||||
m_currentStripWidget->refreshTimeAssignments();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
QMessageBox::warning(this, tr("Could not delete time assignment!"), tr("Could not delete time assignment!") % "\n\n" % reply->message());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void MainWindow::pushButtonStartPressed()
|
void MainWindow::pushButtonStartPressed()
|
||||||
{
|
{
|
||||||
auto bookingsChanged = false;
|
auto bookingsChanged = false;
|
||||||
@@ -652,9 +415,6 @@ void MainWindow::dateChanged(bool force)
|
|||||||
|
|
||||||
m_currentStripWidget = m_stripsWidgets[i];
|
m_currentStripWidget = m_stripsWidgets[i];
|
||||||
|
|
||||||
m_bookingsModel->setStripsWidget(m_currentStripWidget);
|
|
||||||
m_timeAssignmentsModel->setStripsWidget(m_currentStripWidget);
|
|
||||||
|
|
||||||
minimumTimeChanged();
|
minimumTimeChanged();
|
||||||
startEnabledChanged();
|
startEnabledChanged();
|
||||||
endEnabledChanged();
|
endEnabledChanged();
|
||||||
|
@@ -47,8 +47,6 @@ public:
|
|||||||
private Q_SLOTS:
|
private Q_SLOTS:
|
||||||
void getProjectsFinished();
|
void getProjectsFinished();
|
||||||
void getAuswertungFinished();
|
void getAuswertungFinished();
|
||||||
void contextMenuBooking(const QPoint &pos);
|
|
||||||
void contextMenuTimeAssignment(const QPoint &pos);
|
|
||||||
void pushButtonStartPressed();
|
void pushButtonStartPressed();
|
||||||
void pushButtonEndPressed();
|
void pushButtonEndPressed();
|
||||||
void dateChanged(bool force = false);
|
void dateChanged(bool force = false);
|
||||||
|
@@ -167,70 +167,26 @@
|
|||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QTabWidget" name="tabWidget">
|
<widget class="QScrollArea" name="scrollArea">
|
||||||
<property name="currentIndex">
|
<property name="frameShape">
|
||||||
<number>0</number>
|
<enum>QFrame::NoFrame</enum>
|
||||||
</property>
|
</property>
|
||||||
<widget class="QScrollArea" name="scrollArea">
|
<property name="frameShadow">
|
||||||
<property name="frameShape">
|
<enum>QFrame::Plain</enum>
|
||||||
<enum>QFrame::NoFrame</enum>
|
</property>
|
||||||
|
<property name="widgetResizable">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<widget class="QWidget" name="widgetWeek">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>1393</width>
|
||||||
|
<height>440</height>
|
||||||
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="frameShadow">
|
<layout class="QHBoxLayout" name="layoutWeek"/>
|
||||||
<enum>QFrame::Plain</enum>
|
|
||||||
</property>
|
|
||||||
<property name="widgetResizable">
|
|
||||||
<bool>true</bool>
|
|
||||||
</property>
|
|
||||||
<attribute name="title">
|
|
||||||
<string>Optimized view</string>
|
|
||||||
</attribute>
|
|
||||||
<widget class="QWidget" name="widgetWeek">
|
|
||||||
<property name="geometry">
|
|
||||||
<rect>
|
|
||||||
<x>0</x>
|
|
||||||
<y>0</y>
|
|
||||||
<width>1389</width>
|
|
||||||
<height>409</height>
|
|
||||||
</rect>
|
|
||||||
</property>
|
|
||||||
<layout class="QHBoxLayout" name="layoutWeek"/>
|
|
||||||
</widget>
|
|
||||||
</widget>
|
|
||||||
<widget class="QSplitter" name="splitter">
|
|
||||||
<property name="orientation">
|
|
||||||
<enum>Qt::Vertical</enum>
|
|
||||||
</property>
|
|
||||||
<attribute name="title">
|
|
||||||
<string>Advanced view</string>
|
|
||||||
</attribute>
|
|
||||||
<widget class="QGroupBox" name="groupBoxBookings">
|
|
||||||
<property name="title">
|
|
||||||
<string>Bookings</string>
|
|
||||||
</property>
|
|
||||||
<layout class="QHBoxLayout">
|
|
||||||
<item>
|
|
||||||
<widget class="QTreeView" name="treeViewBookings">
|
|
||||||
<property name="contextMenuPolicy">
|
|
||||||
<enum>Qt::CustomContextMenu</enum>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</widget>
|
|
||||||
<widget class="QGroupBox" name="groupBoxTimeAssignments">
|
|
||||||
<property name="title">
|
|
||||||
<string>Time assignments</string>
|
|
||||||
</property>
|
|
||||||
<layout class="QHBoxLayout">
|
|
||||||
<item>
|
|
||||||
<widget class="QTreeView" name="treeViewTimeAssignments">
|
|
||||||
<property name="contextMenuPolicy">
|
|
||||||
<enum>Qt::CustomContextMenu</enum>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</widget>
|
|
||||||
</widget>
|
</widget>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
@@ -1,123 +0,0 @@
|
|||||||
#include "bookingsmodel.h"
|
|
||||||
|
|
||||||
#include <QDebug>
|
|
||||||
|
|
||||||
#include "stripswidget.h"
|
|
||||||
|
|
||||||
BookingsModel::BookingsModel(QObject *parent) :
|
|
||||||
QAbstractListModel(parent),
|
|
||||||
m_stripsWidget(Q_NULLPTR),
|
|
||||||
m_enabled(false)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
StripsWidget *BookingsModel::stripsWidget() const
|
|
||||||
{
|
|
||||||
return m_stripsWidget;
|
|
||||||
}
|
|
||||||
|
|
||||||
void BookingsModel::setStripsWidget(StripsWidget *stripsWidget)
|
|
||||||
{
|
|
||||||
if(m_stripsWidget != stripsWidget)
|
|
||||||
{
|
|
||||||
if(m_stripsWidget)
|
|
||||||
{
|
|
||||||
disconnect(m_stripsWidget, &StripsWidget::bookingsChanged, this, &BookingsModel::bookingsChanged);
|
|
||||||
disconnect(m_stripsWidget, &StripsWidget::refreshingBookingsChanged, this, &BookingsModel::refreshingChanged);
|
|
||||||
}
|
|
||||||
|
|
||||||
beginResetModel();
|
|
||||||
Q_EMIT stripsWidgetChanged(m_stripsWidget = stripsWidget);
|
|
||||||
endResetModel();
|
|
||||||
|
|
||||||
if(m_stripsWidget)
|
|
||||||
{
|
|
||||||
connect(m_stripsWidget, &StripsWidget::bookingsChanged, this, &BookingsModel::bookingsChanged);
|
|
||||||
connect(m_stripsWidget, &StripsWidget::refreshingBookingsChanged, this, &BookingsModel::refreshingChanged);
|
|
||||||
|
|
||||||
if(m_enabled == m_stripsWidget->refreshingBookings())
|
|
||||||
Q_EMIT enabledChanged(m_enabled = !m_stripsWidget->refreshingBookings());
|
|
||||||
}
|
|
||||||
else if(m_enabled)
|
|
||||||
Q_EMIT enabledChanged(m_enabled = false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool BookingsModel::enabled() const
|
|
||||||
{
|
|
||||||
return m_enabled;
|
|
||||||
}
|
|
||||||
|
|
||||||
int BookingsModel::rowCount(const QModelIndex &parent) const
|
|
||||||
{
|
|
||||||
Q_UNUSED(parent)
|
|
||||||
|
|
||||||
return m_stripsWidget ? m_stripsWidget->bookings().count() : 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int BookingsModel::columnCount(const QModelIndex &parent) const
|
|
||||||
{
|
|
||||||
Q_UNUSED(parent)
|
|
||||||
|
|
||||||
return 5;
|
|
||||||
}
|
|
||||||
|
|
||||||
QVariant BookingsModel::data(const QModelIndex &index, int role) const
|
|
||||||
{
|
|
||||||
Q_ASSERT(m_stripsWidget != Q_NULLPTR);
|
|
||||||
Q_ASSERT(index.row() < m_stripsWidget->bookings().count());
|
|
||||||
const auto &booking = m_stripsWidget->bookings().at(index.row());
|
|
||||||
|
|
||||||
switch(role)
|
|
||||||
{
|
|
||||||
case Qt::DisplayRole:
|
|
||||||
case Qt::EditRole:
|
|
||||||
switch(index.column())
|
|
||||||
{
|
|
||||||
case 0: return booking.id;
|
|
||||||
case 1: return booking.time;
|
|
||||||
case 2: return booking.timespan;
|
|
||||||
case 3: return booking.type;
|
|
||||||
case 4: return booking.text;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return QVariant();
|
|
||||||
}
|
|
||||||
|
|
||||||
QVariant BookingsModel::headerData(int section, Qt::Orientation orientation, int role) const
|
|
||||||
{
|
|
||||||
switch(orientation)
|
|
||||||
{
|
|
||||||
case Qt::Horizontal:
|
|
||||||
switch(role)
|
|
||||||
{
|
|
||||||
case Qt::DisplayRole:
|
|
||||||
case Qt::EditRole:
|
|
||||||
switch(section)
|
|
||||||
{
|
|
||||||
case 0: return tr("ID");
|
|
||||||
case 1: return tr("Time");
|
|
||||||
case 2: return tr("Timespan");
|
|
||||||
case 3: return tr("Type");
|
|
||||||
case 4: return tr("Text");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
qt_noop();
|
|
||||||
}
|
|
||||||
|
|
||||||
return QVariant();
|
|
||||||
}
|
|
||||||
|
|
||||||
void BookingsModel::bookingsChanged()
|
|
||||||
{
|
|
||||||
beginResetModel();
|
|
||||||
endResetModel();
|
|
||||||
}
|
|
||||||
|
|
||||||
void BookingsModel::refreshingChanged(bool refreshing)
|
|
||||||
{
|
|
||||||
if(m_enabled == refreshing)
|
|
||||||
Q_EMIT enabledChanged(m_enabled = !refreshing);
|
|
||||||
}
|
|
@@ -1,127 +0,0 @@
|
|||||||
#include "timeassignmentsmodel.h"
|
|
||||||
|
|
||||||
#include <QDebug>
|
|
||||||
|
|
||||||
#include "stripswidget.h"
|
|
||||||
|
|
||||||
TimeAssignmentsModel::TimeAssignmentsModel(QObject *parent) :
|
|
||||||
QAbstractListModel(parent),
|
|
||||||
m_stripsWidget(Q_NULLPTR),
|
|
||||||
m_enabled(false)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
StripsWidget *TimeAssignmentsModel::stripsWidget() const
|
|
||||||
{
|
|
||||||
return m_stripsWidget;
|
|
||||||
}
|
|
||||||
|
|
||||||
void TimeAssignmentsModel::setStripsWidget(StripsWidget *stripsWidget)
|
|
||||||
{
|
|
||||||
if(m_stripsWidget != stripsWidget)
|
|
||||||
{
|
|
||||||
if(m_stripsWidget)
|
|
||||||
{
|
|
||||||
disconnect(m_stripsWidget, &StripsWidget::timeAssignmentsChanged, this, &TimeAssignmentsModel::timeAssignmentsChanged);
|
|
||||||
disconnect(m_stripsWidget, &StripsWidget::refreshingTimeAssignmentsChanged, this, &TimeAssignmentsModel::refreshingChanged);
|
|
||||||
}
|
|
||||||
|
|
||||||
beginResetModel();
|
|
||||||
m_stripsWidget = stripsWidget;
|
|
||||||
endResetModel();
|
|
||||||
|
|
||||||
if(m_stripsWidget)
|
|
||||||
{
|
|
||||||
connect(m_stripsWidget, &StripsWidget::timeAssignmentsChanged, this, &TimeAssignmentsModel::timeAssignmentsChanged);
|
|
||||||
connect(m_stripsWidget, &StripsWidget::refreshingTimeAssignmentsChanged, this, &TimeAssignmentsModel::refreshingChanged);
|
|
||||||
|
|
||||||
if(m_enabled == m_stripsWidget->refreshingTimeAssignments())
|
|
||||||
Q_EMIT enabledChanged(m_enabled = !m_stripsWidget->refreshingTimeAssignments());
|
|
||||||
}
|
|
||||||
else if(m_enabled)
|
|
||||||
Q_EMIT enabledChanged(m_enabled = false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool TimeAssignmentsModel::enabled() const
|
|
||||||
{
|
|
||||||
return m_enabled;
|
|
||||||
}
|
|
||||||
|
|
||||||
int TimeAssignmentsModel::rowCount(const QModelIndex &parent) const
|
|
||||||
{
|
|
||||||
Q_UNUSED(parent)
|
|
||||||
|
|
||||||
return m_stripsWidget ? m_stripsWidget->timeAssignments().count() : 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int TimeAssignmentsModel::columnCount(const QModelIndex &parent) const
|
|
||||||
{
|
|
||||||
Q_UNUSED(parent)
|
|
||||||
|
|
||||||
return 7;
|
|
||||||
}
|
|
||||||
|
|
||||||
QVariant TimeAssignmentsModel::data(const QModelIndex &index, int role) const
|
|
||||||
{
|
|
||||||
Q_ASSERT(m_stripsWidget != Q_NULLPTR);
|
|
||||||
Q_ASSERT(index.row() < m_stripsWidget->timeAssignments().count());
|
|
||||||
const auto &timeAssignment = m_stripsWidget->timeAssignments().at(index.row());
|
|
||||||
|
|
||||||
switch(role)
|
|
||||||
{
|
|
||||||
case Qt::DisplayRole:
|
|
||||||
case Qt::EditRole:
|
|
||||||
switch(index.column())
|
|
||||||
{
|
|
||||||
case 0: return timeAssignment.id;
|
|
||||||
case 1: return timeAssignment.time;
|
|
||||||
case 2: return timeAssignment.timespan;
|
|
||||||
case 3: return timeAssignment.project;
|
|
||||||
case 4: return timeAssignment.subproject;
|
|
||||||
case 5: return timeAssignment.workpackage;
|
|
||||||
case 6: return timeAssignment.text;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return QVariant();
|
|
||||||
}
|
|
||||||
|
|
||||||
QVariant TimeAssignmentsModel::headerData(int section, Qt::Orientation orientation, int role) const
|
|
||||||
{
|
|
||||||
switch(orientation)
|
|
||||||
{
|
|
||||||
case Qt::Horizontal:
|
|
||||||
switch(role)
|
|
||||||
{
|
|
||||||
case Qt::DisplayRole:
|
|
||||||
case Qt::EditRole:
|
|
||||||
switch(section)
|
|
||||||
{
|
|
||||||
case 0: return tr("ID");
|
|
||||||
case 1: return tr("Time");
|
|
||||||
case 2: return tr("Timespan");
|
|
||||||
case 3: return tr("Project");
|
|
||||||
case 4: return tr("Subproject");
|
|
||||||
case 5: return tr("Workpackage");
|
|
||||||
case 6: return tr("Text");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
qt_noop();
|
|
||||||
}
|
|
||||||
|
|
||||||
return QVariant();
|
|
||||||
}
|
|
||||||
|
|
||||||
void TimeAssignmentsModel::timeAssignmentsChanged()
|
|
||||||
{
|
|
||||||
beginResetModel();
|
|
||||||
endResetModel();
|
|
||||||
}
|
|
||||||
|
|
||||||
void TimeAssignmentsModel::refreshingChanged(bool refreshing)
|
|
||||||
{
|
|
||||||
if(m_enabled == refreshing)
|
|
||||||
Q_EMIT enabledChanged(m_enabled = !refreshing);
|
|
||||||
}
|
|
@@ -12,8 +12,8 @@
|
|||||||
#include "timeutils.h"
|
#include "timeutils.h"
|
||||||
#include "stripfactory.h"
|
#include "stripfactory.h"
|
||||||
|
|
||||||
StripsWidget::StripsWidget(MainWindow &mainWindow) :
|
StripsWidget::StripsWidget(MainWindow &mainWindow, QWidget *parent) :
|
||||||
QWidget(&mainWindow),
|
QWidget(parent),
|
||||||
m_mainWindow(mainWindow),
|
m_mainWindow(mainWindow),
|
||||||
m_refreshing(false),
|
m_refreshing(false),
|
||||||
m_refreshingBookings(false),
|
m_refreshingBookings(false),
|
||||||
|
@@ -21,7 +21,7 @@ class ZEITERFASSUNGLIBSHARED_EXPORT StripsWidget : public QWidget
|
|||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit StripsWidget(MainWindow &mainWindow);
|
explicit StripsWidget(MainWindow &mainWindow, QWidget *parent = Q_NULLPTR);
|
||||||
|
|
||||||
MainWindow &mainWindow() const;
|
MainWindow &mainWindow() const;
|
||||||
|
|
||||||
|
@@ -19,13 +19,9 @@ SOURCES += mainwindow.cpp \
|
|||||||
zeiterfassungsettings.cpp \
|
zeiterfassungsettings.cpp \
|
||||||
dialogs/aboutmedialog.cpp \
|
dialogs/aboutmedialog.cpp \
|
||||||
dialogs/authenticationdialog.cpp \
|
dialogs/authenticationdialog.cpp \
|
||||||
dialogs/bookingdialog.cpp \
|
|
||||||
dialogs/languageselectiondialog.cpp \
|
dialogs/languageselectiondialog.cpp \
|
||||||
dialogs/settingsdialog.cpp \
|
dialogs/settingsdialog.cpp \
|
||||||
dialogs/timeassignmentdialog.cpp \
|
|
||||||
dialogs/updatedialog.cpp \
|
dialogs/updatedialog.cpp \
|
||||||
models/bookingsmodel.cpp \
|
|
||||||
models/timeassignmentsmodel.cpp \
|
|
||||||
replies/createbookingreply.cpp \
|
replies/createbookingreply.cpp \
|
||||||
replies/createtimeassignmentreply.cpp \
|
replies/createtimeassignmentreply.cpp \
|
||||||
replies/deletebookingreply.cpp \
|
replies/deletebookingreply.cpp \
|
||||||
@@ -40,7 +36,7 @@ SOURCES += mainwindow.cpp \
|
|||||||
replies/updatebookingreply.cpp \
|
replies/updatebookingreply.cpp \
|
||||||
replies/updatetimeassignmentreply.cpp \
|
replies/updatetimeassignmentreply.cpp \
|
||||||
replies/zeiterfassungreply.cpp \
|
replies/zeiterfassungreply.cpp \
|
||||||
replies/getuserinforeply.cpp
|
replies/getuserinforeply.cpp
|
||||||
|
|
||||||
HEADERS += cpp14polyfills.h \
|
HEADERS += cpp14polyfills.h \
|
||||||
mainwindow.h \
|
mainwindow.h \
|
||||||
@@ -53,13 +49,9 @@ HEADERS += cpp14polyfills.h \
|
|||||||
zeiterfassungsettings.h \
|
zeiterfassungsettings.h \
|
||||||
dialogs/aboutmedialog.h \
|
dialogs/aboutmedialog.h \
|
||||||
dialogs/authenticationdialog.h \
|
dialogs/authenticationdialog.h \
|
||||||
dialogs/bookingdialog.h \
|
|
||||||
dialogs/languageselectiondialog.h \
|
dialogs/languageselectiondialog.h \
|
||||||
dialogs/settingsdialog.h \
|
dialogs/settingsdialog.h \
|
||||||
dialogs/timeassignmentdialog.h \
|
|
||||||
dialogs/updatedialog.h \
|
dialogs/updatedialog.h \
|
||||||
models/bookingsmodel.h \
|
|
||||||
models/timeassignmentsmodel.h \
|
|
||||||
replies/createbookingreply.h \
|
replies/createbookingreply.h \
|
||||||
replies/createtimeassignmentreply.h \
|
replies/createtimeassignmentreply.h \
|
||||||
replies/deletebookingreply.h \
|
replies/deletebookingreply.h \
|
||||||
@@ -74,16 +66,14 @@ HEADERS += cpp14polyfills.h \
|
|||||||
replies/updatebookingreply.h \
|
replies/updatebookingreply.h \
|
||||||
replies/updatetimeassignmentreply.h \
|
replies/updatetimeassignmentreply.h \
|
||||||
replies/zeiterfassungreply.h \
|
replies/zeiterfassungreply.h \
|
||||||
replies/getuserinforeply.h
|
replies/getuserinforeply.h
|
||||||
|
|
||||||
FORMS += mainwindow.ui \
|
FORMS += mainwindow.ui \
|
||||||
dialogs/updatedialog.ui \
|
dialogs/updatedialog.ui \
|
||||||
dialogs/settingsdialog.ui \
|
dialogs/settingsdialog.ui \
|
||||||
dialogs/languageselectiondialog.ui \
|
dialogs/languageselectiondialog.ui \
|
||||||
dialogs/authenticationdialog.ui \
|
dialogs/authenticationdialog.ui \
|
||||||
dialogs/bookingdialog.ui \
|
dialogs/aboutmedialog.ui
|
||||||
dialogs/aboutmedialog.ui \
|
|
||||||
dialogs/timeassignmentdialog.ui
|
|
||||||
|
|
||||||
RESOURCES += resources.qrc
|
RESOURCES += resources.qrc
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user