2017-12-18 23:26:26 +01:00
#include "advancedviewdialog.h"
#include "ui_advancedviewdialog.h"
2017-12-18 20:52:10 +01:00
2017-12-18 21:41:39 +01:00
#include <QMenu>
#include <QAction>
#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"
2017-12-18 20:52:10 +01:00
#include "stripswidget.h"
#include "mainwindow.h"
2017-12-18 21:41:39 +01:00
#include "timeutils.h"
#include "dialogs/bookingdialog.h"
#include "dialogs/timeassignmentdialog.h"
#include "models/bookingsmodel.h"
#include "models/timeassignmentsmodel.h"
2017-12-18 20:52:10 +01:00
2017-12-18 23:26:26 +01:00
AdvancedViewDialog :: AdvancedViewDialog ( StripsWidget & stripsWidget ) :
2017-12-18 20:52:10 +01:00
QDialog ( & stripsWidget . mainWindow ()),
2017-12-18 23:26:26 +01:00
ui ( new Ui :: AdvancedViewDialog ),
2017-12-18 21:41:39 +01:00
m_stripsWidget ( stripsWidget ),
m_bookingsModel ( new BookingsModel ( stripsWidget , this )),
m_timeAssignmentsModel ( new TimeAssignmentsModel ( stripsWidget , this ))
2017-12-18 20:52:10 +01:00
{
ui -> setupUi ( this );
2017-12-18 21:41:39 +01:00
ui -> bookingsView -> setModel ( m_bookingsModel );
2017-12-18 21:50:30 +01:00
ui -> bookingsView -> setEnabled ( m_bookingsModel -> enabled ());
2017-12-18 21:41:39 +01:00
connect ( m_bookingsModel , & BookingsModel :: enabledChanged , ui -> bookingsView , & QWidget :: setEnabled );
2017-12-18 23:26:26 +01:00
connect ( ui -> bookingsView , & QWidget :: customContextMenuRequested , this , & AdvancedViewDialog :: contextMenuBooking );
2017-12-18 21:41:39 +01:00
ui -> timeAssignmentsView -> setModel ( m_timeAssignmentsModel );
2017-12-18 21:50:30 +01:00
ui -> timeAssignmentsView -> setEnabled ( m_timeAssignmentsModel -> enabled ());
2017-12-18 21:41:39 +01:00
connect ( m_timeAssignmentsModel , & TimeAssignmentsModel :: enabledChanged , ui -> timeAssignmentsView , & QWidget :: setEnabled );
2017-12-18 23:26:26 +01:00
connect ( ui -> timeAssignmentsView , & QWidget :: customContextMenuRequested , this , & AdvancedViewDialog :: contextMenuTimeAssignment );
2017-12-18 20:52:10 +01:00
}
2017-12-18 23:26:26 +01:00
AdvancedViewDialog ::~ AdvancedViewDialog ()
2017-12-18 20:52:10 +01:00
{
delete ui ;
}
2017-12-18 21:41:39 +01:00
2017-12-18 23:26:26 +01:00
void AdvancedViewDialog :: contextMenuBooking ( const QPoint & pos )
2017-12-18 21:41:39 +01:00
{
auto index = ui -> bookingsView -> indexAt ( pos );
if ( ! index . isValid ())
{
QMenu menu ;
auto createAction = menu . addAction ( tr ( "Create booking" ));
2017-12-20 20:29:33 +01:00
auto refreshAction = menu . addAction ( QIcon ( QPixmap ( QStringLiteral ( ":/zeiterfassung/zeiterfassunglib/images/refresh.png" ))), tr ( "Refresh bookings" ));
2017-12-18 21:41:39 +01:00
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 ()
);
2017-12-18 21:59:30 +01:00
reply -> waitForFinished ();
2017-12-18 21:41:39 +01:00
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 ()
);
2017-12-18 21:59:30 +01:00
reply -> waitForFinished ();
2017-12-18 21:41:39 +01:00
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 );
2017-12-18 21:59:30 +01:00
reply -> waitForFinished ();
2017-12-18 21:41:39 +01:00
if ( reply -> success ())
m_stripsWidget . refreshBookings ();
else
QMessageBox :: warning ( this , tr ( "Could not delete booking!" ), tr ( "Could not delete booking!" ) % " \n\n " % reply -> message ());
}
}
}
}
2017-12-18 23:26:26 +01:00
void AdvancedViewDialog :: contextMenuTimeAssignment ( const QPoint & pos )
2017-12-18 21:41:39 +01:00
{
auto index = ui -> timeAssignmentsView -> indexAt ( pos );
if ( ! index . isValid ())
{
QMenu menu ;
auto createAction = menu . addAction ( tr ( "Create time assignment" ));
2017-12-20 20:29:33 +01:00
auto refreshAction = menu . addAction ( QIcon ( QPixmap ( QStringLiteral ( ":/zeiterfassung/zeiterfassunglib/images/refresh.png" ))), tr ( "Refresh time assignments" ));
2017-12-18 21:41:39 +01:00
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 ()
);
2017-12-18 21:59:30 +01:00
reply -> waitForFinished ();
2017-12-18 21:41:39 +01:00
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 ()
);
2017-12-18 21:59:30 +01:00
reply -> waitForFinished ();
2017-12-18 21:41:39 +01:00
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 );
2017-12-18 21:59:30 +01:00
reply -> waitForFinished ();
2017-12-18 21:41:39 +01:00
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 ());
}
}
}
}