From a14a1088307f469fbc4b5e21f1bcbe15d808af70 Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 <0xFEEDC0DE64@gmail.com> Date: Tue, 19 Dec 2017 00:12:41 +0100 Subject: [PATCH] Moved report functionality into plugin --- plugins/presenceplugin/presenceplugin.cpp | 1 - plugins/presenceplugin/presencewidget.h | 1 + plugins/reportsplugin/images/refresh.png | Bin 0 -> 6914 bytes .../reportsplugin/images/report.png | Bin plugins/reportsplugin/reportsplugin.cpp | 3 + plugins/reportsplugin/reportsplugin.pro | 8 +- .../reportsplugin/reportsplugin_resources.qrc | 6 + plugins/reportsplugin/reportswidget.cpp | 145 ++++++++++++++++++ plugins/reportsplugin/reportswidget.h | 43 ++++++ zeiterfassunglib/mainwindow.cpp | 128 ++-------------- zeiterfassunglib/mainwindow.h | 16 +- zeiterfassunglib/mainwindow.ui | 12 -- zeiterfassunglib/resources.qrc | 1 - 13 files changed, 221 insertions(+), 143 deletions(-) create mode 100644 plugins/reportsplugin/images/refresh.png rename zeiterfassunglib/images/auswertung.png => plugins/reportsplugin/images/report.png (100%) create mode 100644 plugins/reportsplugin/reportsplugin_resources.qrc create mode 100644 plugins/reportsplugin/reportswidget.cpp create mode 100644 plugins/reportsplugin/reportswidget.h diff --git a/plugins/presenceplugin/presenceplugin.cpp b/plugins/presenceplugin/presenceplugin.cpp index 0560bb6..790c36e 100644 --- a/plugins/presenceplugin/presenceplugin.cpp +++ b/plugins/presenceplugin/presenceplugin.cpp @@ -2,7 +2,6 @@ #include -#include "mainwindow.h" #include "presencewidget.h" PresencePlugin::PresencePlugin(QObject *parent) : diff --git a/plugins/presenceplugin/presencewidget.h b/plugins/presenceplugin/presencewidget.h index b01b179..90d2433 100644 --- a/plugins/presenceplugin/presencewidget.h +++ b/plugins/presenceplugin/presencewidget.h @@ -13,6 +13,7 @@ class MainWindow; class PresenceWidget : public QWidget { Q_OBJECT + public: explicit PresenceWidget(MainWindow &mainWindow); diff --git a/plugins/reportsplugin/images/refresh.png b/plugins/reportsplugin/images/refresh.png new file mode 100644 index 0000000000000000000000000000000000000000..f3585b74a877cd7716fb55a1c7392c87164095ac GIT binary patch literal 6914 zcmeAS@N?(olHy`uVBq!ia0y~yU~m9o4mJh`hE5oB~f~#Qr zA_Iwb3!aIs8=Ey*jD%)gowfVw-B%C4RkRzw+j~7KzV1!&@_Evn|0=@QM*W^w{Lb!m z?f&o5*9soY|EaqFm3}~|OG|(K_s8FE{MqQ0G&wD0k(+kz(v7{^N=lB-*G^hR3U>8z z=Ox~~vFqUS{GVHx1%6)T`xyS|%Pm<`E?pn(tX`8x$DX;}+OcZtwskq7(X)@QN`CFW zdU5jNs~5di-}35_c$s#$W}p51v)|I6Kl}Z;{Tch`-(qas{w1Hz9sav$fBM3R8NI%5 z{Qo=`*8df;Sp2Q0JeyF0!)EgrZw<2YUb+8$9ehdKCudn!;98^5*-3v-R9)*`lf23D zWJak-w$5C~_Q!J{%gnPslUOYATt@co6W2hQ_g}2ffBAIJf6gxXPx+NC9hNp9TE)|E z=*KYDGhK18^2vDM##uoEV#$6xX%Fkc zYX3lyFYL8_XXTU6PqckwwWB+>y{s_fUqHb@+2fzMdG0&?XmmOA!14c=Kh8Dpzvn;C z_#g4<7;k>f*JIC)o!#7gb9emae_Ma=`}re&9|MzJra^9N#4MJ*p?mkm+g?{y%gmj3 zJ_U|?) z_Ex`3{l4*TisI|ehjtr3h4S2=cxDcdX@A|nGlxy)3p>Tnwl>TAA71}wQ~gi%X!q@Y z@2&Q|UR^G~=l5Z0sn@^vi!ff4Wm^-)RoPng&-cSa*_FQTIe0NifB)ByQ08n=>N8U(r&q(-OKyzJO%dO zcX{S-_=lhK%r2J?^Glcf*JN7S`H(OFkGpwqURKSct@EEee9ZrGukHQ2wQI`XOgnOH zw|+&-#dhIGhZeh;t@`ku`62)8scEl|z1@FOdi#FP=*|rB+&#a7c}A&Wx08f?qZ-$lsq*6#Qjd_+PVVv%ICTTQsYVuIKr2>hxpF z$T=!Tg4f?w$WHf(Jyb6DWA?3iH*NnrP2pX(N`AV+?$9rMybl*=&$`@Oo?p+O{rdHc z*XJKLAC_tsWR7tVTT!oY@HwOKNx#U!MBu+x5MZy*7KPzhCfTJ?o!S*@g{f zkJ$183Z5Un|9IkI{)KMuC!Vlbcx-?6Cd;e8=FWYe=9_JMcM| z)wZAMmAuEo^%2?I0zX&^=Iu*+t-a&v*L+2lQ#twHu5(pgRc$!5X0~dt)}3#k$^+J4 z*;)SIe($-~N4H)cld8P^t=uSZe%dMuv*hg4C7Dxq z-n;Wjc}Y!=XtSWBB|GEV@5>ehg|9Ccs5qV~z5OKb`hUJvUoS=$tM!a%BC^5^BWZBvFFzdFZ$fvTW{X~zHUyl zJO8EgzcMZu3*XS+t*qYn;mzmsLdy*wCqK^Fo1z_Umb>s~j-K$wOWt3m{LA^y)iQ}e z*_r8_1aqIZ+SFZqUz#61>C)D}fAYvK&0EdiSQ)n`dHSAe+{?b>|Hj{z1z#A>?M}^} zx%tmxp4qIXUUEfgY3UZX>`n!<&wKP~?exv5m&I01ef6@?>HLNH4^0J+W~^iow7koz zR=3};aLEC)xA~dt-p`SloAx?&`bABv=lbcQk2KuaPuce0J-qn5o!7MV(+9)~S0ylc z7@R05&{`12xp7gMg;ww+L7xXM?^*2YKRuV3VS6C-_PV5`lt*t^=2Y$fWEvULVA;+6 zWon9z+}FP!+QSxq%$=U=u07%T^N-c7CSH7Oxo^`73UXxl8Lok*1GK zj$wigjRKkrg$jBb*0Y;P3MC%sPXB-M?-u#|;lLD;YM=YA~(8 zpkV!CgKzO(v8umMZm1-`R(p}U_p?NtXRcTIy3_sd{~8*rr-e-vWp$nvos)Qgv5~L9 zVQMXhtb=NRctz)vO`2Lc#*z^qnN{Z(?3mbaD^+~v+4PuWv}KIb7sm6U@DQ zm4c3@gI_P>LSc_(IcK+jy=!*kV()CdgSQ<5=U6{=HA}jnt-D`nk3vX|OHjm-g&OBq zKK0YF7doxnA#*tEXMsCQ&+2sbQ(qVDxmuDE9ipQ4eO}I7kS9icXR za;i_nOv!T|Ejq#pEXjVIj8Rd~i%NgBxo!03t=N~>E_I|+Y zmxSaku@U@uUx>U%&L#zrXXYq!J%71+zMj3g%7UzQ<$5~3 zOftXg`c23Ze-_0)hy5BHzZcMDs+AVbwb#crUt|bv_ zx;q?*rMBST6=K zU7Xh6bGc6EaM;ateWjU;yQ0oX{&8u^TYvh@#;K0{tBypNdK}rFd$h*(OSAo#aBgwd zx?k6r`}io%(+9OhiOz;^khiSSF7mCH^ay|!|nea<7+uX3e~ zA*|XfoJ=fYF4S8sFH7CzyZ74SsHWidUBxW+f_-xKUiRh1=HOXzKDvDmXYd_}{%szjJeS{!4`AbeelGi2gemQo+!8 zcmDnly*xAzO1$XZ?pc)KCQZK)oP=IEXhW0uYyk;e44lOnM9L$ zmO_KoQVEd~>sYa8;t>%M2U0DwuU}a?L&9lhpwfKJhdaERuk)^Ia%np>_wIkzh1XwS zJpU_|rPHA&fxGz-!x#5v<-`eVwu@H?UAAxvu(Ar9aIP{9{BZE`9m`MqTlc+R{L!HO$kKeFmV}vx6Xk-- z4<1v`jdD{f>Q3Lfw>>yEp>S1KkVoJ>F4RO-}cosHvGU^{+wU|O z9Gjw}*5t`Ei9?9n@~05vB%am`#u6Xh& z!I36UmS91X1BdSOobz+wQ1D}4HAjS{yV3PSx5H%7@7f2}@0q@A!Dg%86RT^E+uQtX zv^u{3PVGmD0D+?dD^x;P2MO{r^D2giu3se=y1dJkbJaoTf>kOP{>%;OOtfH3c_@9; zh*2eBneVgP?-~}lWC=L$he;B>qyw>hSLjt?dlKiGG9A8vC+%CvmU9jr#iUnOOR;?18y6RF@{i#FoQ&evJ z@H+iKy>dd~=Gdk?BFn=zU0K*I=4TPhx?ICaC*-ok?u3Anpq@M4$BNHJ2k){!9dE$+ zk&T;`vvKQGw~(*;msi+Fxwsy6cU7KIbLD1@(TpUk2z${Uzg3A&M|wJ3e3KW=Qe5ex z6!t-}LuJA~C8g>E!Z&l-ijOp1T+XyG+xbe5lC#|J%S-FDeyoUz6=aF$4!OQ8#W+uP z8ox{MGsm|do4%i$mG5KN+3~*RYvWQF(=Ye^!sn4%A4N2lP0zLtnW6kz7*!N|Iw-S5u8=6 zU&EX9Lj%I1*H*E(>5gt=`nlWM5Z2^_pntGkN(OF@1BB*)K!B zzOs0^zPQs#Noixpk;7K&=S-dQKsU|9X{NAGmU3o>(qBKtg9{>LxQ_l^sG@Ky^TfaT z+GpHmik(0EH7aYfTVwy19?1hYu09ZdFWT{XTG&#j7um`carzyzZrIpWh1OoE$v$(a z|GfW^BWq1_avmL=_()XfiEMAxuFRBlQ`wlPCFfdP6a*#veA?Ek98`*6U7c3At0nX3 zO2gdbs%EDRB7d#t_HT>4qu<8zV>#2sQZ}91(mgxHjy_I{d7-WyVxZ!rBays8`#|)> zhYOh%1w5n$m9KJHU8wr-@GINSJ4>vjSK1ow+#0y0&OGs*`|{_{w!Y80bZ4g9qD`h2 zwbMgC&%5T4dilrIt6pU@S3kKH&JrZ(IboAdv{CnlH7%QTHf!BDAz_@BwXA-RLFI?8 zsc|JMIVWkoi;JBX?qV+Ku_9x(eg3hR^4s;iEp2u=2(o&#KbXEGe}lG8etSzqvVmJi zPomD+OEOEoq;pxlog+}vcHn;ZbG;Bb7TZG&KDI(G!Si26oH#71c>Vf{$GdLKczN+; zR@`14xsvP8{_Ycrm3J~{dCPWn9sey}sVcjS`|TILulg&nMc#yG&npF%vwPZdR92;| zz3Ej~Qm@YM_Po>5OX11?yVG|}SMC$wYhw)EceVKEZTIKelh1Z?sV}~FX-jxY>zC;V zPHTPW_Ij~HCd**kRZq0E^Xg(qh%g7|!6h>$G$5Kdkk7~N}C zT=|5g32?KU?K~8>Q2yPip@@YI#`c z$JCURdxe+2W%w=Y@ei5#;@XMlwWis-bt~`Zb5=G4*r|8%Oign!O4=*WeaWBulIv&t!D%eY7@6!r$HawUfZt4p)~RL&vKuA$wLi1#r3PmlEq9+5i2p`>&;lu?j% zTG+SJ3K^!zxTD5yCAnKY?HEIN zNxUYmj41Hk&0y8&HR-P!Jbo4l*JZsI8)cn(S5f?lz7S*nG*)bzi&^TtQgq&X7 zoogBg_48)v=9&42WL??K`TN_siR|}}e&U#CrupIXXTcA$3G5qYCZ933KXHdw*E4(Z z`)3-PC40}0pR&)swdIm**op(|)Di^$1jXxFbOjm)oqM{(#%1{}FRfkowtabU zncHUff0nqznHTiQ zrS}`>DE+?d8BtX$!F=V#rJ9m?&5CpJ$W*lFku-=%bA31MTOo z<%}#0Hhg>73Um^Fto*EKfAeK*nI)ymx9H)~GCy5stCRvBr2+jeu+_devVn5WM6?@`l)SOv!JcN@5O%#thc zcPKyqon7D7?Dp(+KThQ2^jui8JmG-nftwpx@(jh+s5}Y@4_NKpUKt)$D_G%mBqijr zs!`V&iOMI9hd;eAHZEcNd70zC=)=<*>OZ7DJYZeCi-SpQy?bN$qegXuKgnShs2|krky`C)kr*PtBGpr+{}%d@~XBH zn}0V>w)ybEk#By+`Ckj}yZzvo_$Q|NI9t5;8LQl<|I7|61S*(M$wy}A$*m7xZoXDB z^=_Nk)vbcfg2!ue57byKkbeGUa+6M>i01+i8$I3@kBtWdPAX?r`e^%0N?(!44)^SL zDf#x)=KmX+_CB2pFVjDBl`Ge*jBWrhFo6DuA>HSUosSh;*fg;U79o1Mkpw>I9eY_?xj!k;?F;?Cn28}&ZV zZPcD)-}524C7;=z@zi1V`!$J&>p#{#`&gDB^J0=xj^YQkDbfvdH*VGUe7qviS1Ee+ zu_aSGG|XHkIx;?Ia(yTHMRu>FV|_r&ot=H*a~b8Nnf_}Ynq2bo62re&M2GWuQ8eV{r(~v8LNyrb8XATeSXvnySs5EZG-!3lW-%}@ zq=TH~lbM{FSDea_QBqQ1rLPaRE3+&$IX^cyKd)FXzbIWl2co1{KdDl;I8onN&p=-x zzes@?9X{>>KKe#_hWgR{HpwtILYzk+6hu6>-eh24kOa9gI6tkVJh3R1p}f3YFEcN@ zI61K(738$p?`)(P7#M^hib{);QyKg#D$`T*6g-pj^NQa{tb4)0z@Uzhjt>p;fq4~V fSUy;_ZYD@I$Uyz~=BrMF=CV9p{an^LB{Ts5FplN% literal 0 HcmV?d00001 diff --git a/zeiterfassunglib/images/auswertung.png b/plugins/reportsplugin/images/report.png similarity index 100% rename from zeiterfassunglib/images/auswertung.png rename to plugins/reportsplugin/images/report.png diff --git a/plugins/reportsplugin/reportsplugin.cpp b/plugins/reportsplugin/reportsplugin.cpp index b8ddf29..ea8d0fa 100644 --- a/plugins/reportsplugin/reportsplugin.cpp +++ b/plugins/reportsplugin/reportsplugin.cpp @@ -2,6 +2,8 @@ #include +#include "reportswidget.h" + ReportsPlugin::ReportsPlugin(QObject *parent) : ZeiterfassungPlugin(parent) { @@ -10,4 +12,5 @@ ReportsPlugin::ReportsPlugin(QObject *parent) : void ReportsPlugin::attachTo(MainWindow &mainWindow) { + new ReportsWidget(mainWindow); } diff --git a/plugins/reportsplugin/reportsplugin.pro b/plugins/reportsplugin/reportsplugin.pro index 4673528..a299f62 100644 --- a/plugins/reportsplugin/reportsplugin.pro +++ b/plugins/reportsplugin/reportsplugin.pro @@ -14,13 +14,15 @@ DEPENDPATH += $$PWD/../../zeiterfassunglib DEFINES += QT_DEPRECATED_WARNINGS QT_DISABLE_DEPRECATED_BEFORE=0x060000 QT_MESSAGELOGCONTEXT -HEADERS += reportsplugin.h +HEADERS += reportsplugin.h \ + reportswidget.h -SOURCES += reportsplugin.cpp +SOURCES += reportsplugin.cpp \ + reportswidget.cpp FORMS += -RESOURCES += +RESOURCES += reportsplugin_resources.qrc TRANSLATIONS += diff --git a/plugins/reportsplugin/reportsplugin_resources.qrc b/plugins/reportsplugin/reportsplugin_resources.qrc new file mode 100644 index 0000000..acd4367 --- /dev/null +++ b/plugins/reportsplugin/reportsplugin_resources.qrc @@ -0,0 +1,6 @@ + + + images/refresh.png + images/report.png + + diff --git a/plugins/reportsplugin/reportswidget.cpp b/plugins/reportsplugin/reportswidget.cpp new file mode 100644 index 0000000..ad045e3 --- /dev/null +++ b/plugins/reportsplugin/reportswidget.cpp @@ -0,0 +1,145 @@ +#include "reportswidget.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "mainwindow.h" +#include "zeiterfassungapi.h" + +ReportsWidget::ReportsWidget(MainWindow &mainWindow) : + QWidget(&mainWindow), + m_mainWindow(mainWindow) +{ + m_labelBalance = new QLabel(this); + m_labelBalance->setFrameShape(QFrame::Panel); + m_labelBalance->setFrameShadow(QFrame::Sunken); + m_mainWindow.statusBar()->addPermanentWidget(m_labelBalance); + + m_labelHolidays = new QLabel(this); + m_labelHolidays->setFrameShape(QFrame::Panel); + m_labelHolidays->setFrameShadow(QFrame::Sunken); + m_mainWindow.statusBar()->addPermanentWidget(m_labelHolidays); + + m_actionRefreshReport = m_mainWindow.menuView()->addAction(QIcon(QStringLiteral(":/zeiterfassung/plugins/reportsplugin/images/refresh.png")), + tr("Refresh report"), this, &ReportsWidget::refresh); + + m_actionOpenReport = m_mainWindow.menuTools()->addAction(QIcon(QStringLiteral(":/zeiterfassung/plugins/reportsplugin/images/report.png")), + tr("Open report"), this, &ReportsWidget::openReport); + m_mainWindow.toolBar()->addAction(m_actionOpenReport); + + dateChanged(m_mainWindow.date()); +} + +void ReportsWidget::dateChanged(const QDate &date) +{ + if(!date.isValid()) + { + qWarning() << "invalid date" << date; + return; + } + + auto monthBegin = QDate(date.year(), date.month(), 1); + if(monthBegin != m_date) + { + m_date = monthBegin; + refresh(); + } +} + +void ReportsWidget::refresh() +{ + if(!m_date.isValid()) + { + qWarning() << "invalid date" << m_date; + return; + } + + m_actionRefreshReport->setEnabled(false); + m_actionOpenReport->setEnabled(false); + + m_labelBalance->setText(tr("%0: %1").arg(tr("Balance")).arg(tr("???"))); + m_labelHolidays->setText(tr("%0: %1").arg(tr("Holidays")).arg(tr("???"))); + + m_reply = m_mainWindow.erfassung().doGetAuswertung(m_mainWindow.userInfo().userId, m_date); + connect(m_reply.get(), &ZeiterfassungReply::finished, this, &ReportsWidget::finished); +} + +void ReportsWidget::finished() +{ + if(!m_reply->success()) + { + m_date = QDate(); + QMessageBox::warning(this, tr("Could not load report!"), tr("Could not load report!") % "\n\n" % m_reply->message()); + goto after; + } + + { + auto content = m_reply->auswertung(); + + { + static QRegularExpression regex(QStringLiteral("Gleitzeit +([0-9]+\\:[0-9]+\\-?) +([0-9]+\\:[0-9]+\\-?)")); + auto match = regex.match(content); + if(match.hasMatch()) + { + auto balance = match.captured(2); + if(balance.endsWith(QChar('-'))) + { + balance.chop(1); + balance = QChar('-') % balance; + } + m_labelBalance->setText(tr("%0: %1").arg(tr("Balance")).arg(tr("%0h").arg(balance))); + } + else + { + m_labelBalance->setText(tr("%0: %1").arg(tr("Balance")).arg(tr("n/a"))); + qWarning() << "balance not found in PDF"; + } + } + + { + static QRegularExpression regex(QStringLiteral("Urlaubsanspruch +([0-9]+\\.[0-9]+\\-?) +([0-9]+\\.[0-9]+\\-?)")); + auto match = regex.match(content); + if(match.hasMatch()) + m_labelHolidays->setText(tr("%0: %1").arg(tr("Holidays")).arg(match.captured(2))); + else + { + m_labelHolidays->setText(tr("%0: %1").arg(tr("Holidays")).arg(tr("n/a"))); + qWarning() << "holidays not found in PDF"; + } + } + + { + QTemporaryFile file(QDir::temp().absoluteFilePath(QStringLiteral("auswertungXXXXXX.pdf"))); + file.setAutoRemove(false); + if(!file.open()) + { + QMessageBox::warning(this, tr("Could not write report!"), tr("Could not write report!") % "\n\n" % file.errorString()); + goto after; + } + + file.write(content); + + m_url = QUrl::fromLocalFile(file.fileName()); + } + } + + m_actionOpenReport->setEnabled(true); + + after: + m_actionRefreshReport->setEnabled(true); + m_reply = Q_NULLPTR; +} + +void ReportsWidget::openReport() +{ + if(!QDesktopServices::openUrl(m_url)) + QMessageBox::warning(this, tr("Could not launch your default PDF viewer!"), tr("Could not launch your default PDF viewer!")); +} diff --git a/plugins/reportsplugin/reportswidget.h b/plugins/reportsplugin/reportswidget.h new file mode 100644 index 0000000..bfe59c2 --- /dev/null +++ b/plugins/reportsplugin/reportswidget.h @@ -0,0 +1,43 @@ +#ifndef REPORTSWIDGET_H +#define REPORTSWIDGET_H + +#include +#include +#include + +#include "replies/getauswertungreply.h" + +class QLabel; +class QAction; + +class MainWindow; + +class ReportsWidget : public QWidget +{ + Q_OBJECT + +public: + explicit ReportsWidget(MainWindow &mainWindow); + +private Q_SLOTS: + void dateChanged(const QDate &date); + void refresh(); + void finished(); + void openReport(); + +private: + MainWindow &m_mainWindow; + + QLabel *m_labelBalance; + QLabel *m_labelHolidays; + + QAction *m_actionOpenReport; + QAction *m_actionRefreshReport; + + QDate m_date; + QUrl m_url; + + std::unique_ptr m_reply; +}; + +#endif // REPORTSWIDGET_H diff --git a/zeiterfassunglib/mainwindow.cpp b/zeiterfassunglib/mainwindow.cpp index 9d52cd9..b4612ed 100644 --- a/zeiterfassunglib/mainwindow.cpp +++ b/zeiterfassunglib/mainwindow.cpp @@ -22,7 +22,6 @@ #include "dialogs/aboutmedialog.h" #include "dialogs/settingsdialog.h" #include "replies/getprojectsreply.h" -#include "replies/getauswertungreply.h" #include "replies/createbookingreply.h" #include "replies/createtimeassignmentreply.h" #include "replies/updatetimeassignmentreply.h" @@ -35,8 +34,6 @@ MainWindow::MainWindow(ZeiterfassungSettings &settings, ZeiterfassungApi &erfass m_erfassung(erfassung), m_userInfo(userInfo), m_stripFactory(stripFactory), - m_getProjectsReply(Q_NULLPTR), - m_getAuswertungReply(Q_NULLPTR), m_currentStripWidget(Q_NULLPTR) { ui->setupUi(this); @@ -57,8 +54,6 @@ MainWindow::MainWindow(ZeiterfassungSettings &settings, ZeiterfassungApi &erfass ui->actionRefresh->setShortcut(QKeySequence::Refresh); connect(ui->actionRefresh, &QAction::triggered, this, [=](){ dateChanged(true); }); - connect(ui->actionAuswertung, &QAction::triggered, this, &MainWindow::openAuswertung); - connect(ui->actionAboutMe, &QAction::triggered, [=](){ AboutMeDialog(userInfo, this).exec(); }); connect(ui->actionSettings, &QAction::triggered, [=](){ SettingsDialog(m_settings, this).exec(); }); @@ -88,13 +83,6 @@ MainWindow::MainWindow(ZeiterfassungSettings &settings, ZeiterfassungApi &erfass connect(ui->pushButtonStart, &QAbstractButton::pressed, this, &MainWindow::pushButtonStartPressed); connect(ui->pushButtonEnd, &QAbstractButton::pressed, this, &MainWindow::pushButtonEndPressed); - ui->statusbar->addPermanentWidget(m_balanceLabel = new QLabel(ui->statusbar)); - m_balanceLabel->setFrameShape(QFrame::Panel); - m_balanceLabel->setFrameShadow(QFrame::Sunken); - ui->statusbar->addPermanentWidget(m_holidaysLabel = new QLabel(ui->statusbar)); - m_holidaysLabel->setFrameShape(QFrame::Panel); - m_holidaysLabel->setFrameShadow(QFrame::Sunken); - dateChanged(); } @@ -123,6 +111,11 @@ QMenu *MainWindow::menuAbout() const return ui->menuAbout; } +QToolBar *MainWindow::toolBar() const +{ + return ui->mainToolBar; +} + ZeiterfassungSettings &MainWindow::settings() const { return m_settings; @@ -143,6 +136,11 @@ StripFactory &MainWindow::stripFactory() const return m_stripFactory; } +QDate MainWindow::date() const +{ + return ui->dateEditDate->date(); +} + const QMap &MainWindow::projects() const { return m_projects; @@ -171,66 +169,6 @@ void MainWindow::getProjectsFinished() m_getProjectsReply = Q_NULLPTR; } -void MainWindow::getAuswertungFinished() -{ - if(std::none_of(std::begin(m_stripsWidgets), std::end(m_stripsWidgets), [](StripsWidget *stripsWidget){ - return stripsWidget->refreshing(); - })) - { - ui->actionToday->setEnabled(true); - ui->actionRefresh->setEnabled(true); - ui->dateEditDate->setReadOnly(false); - ui->pushButtonPrev->setEnabled(true); - ui->pushButtonNext->setEnabled(true); - } - - if(!m_getAuswertungReply->success()) - { - m_auswertungDate = QDate(); - QMessageBox::warning(this, tr("Could not load Auswertung!"), tr("Could not load Auswertung!") % "\n\n" % m_getAuswertungReply->message()); - m_getAuswertungReply = Q_NULLPTR; - return; - } - - ui->actionAuswertung->setEnabled(true); - m_auswertung = m_getAuswertungReply->auswertung(); - - auto urlaubsAnspruch = tr("n/a"); - - { - static QRegularExpression regex(QStringLiteral("Urlaubsanspruch +([0-9]+\\.[0-9]+\\-?) +([0-9]+\\.[0-9]+\\-?)")); - auto match = regex.match(m_auswertung); - if(match.hasMatch()) - urlaubsAnspruch = match.captured(2); - else - qWarning() << "Urlaubsanspruch not found"; - } - - auto gleitzeit = tr("n/a"); - - { - static QRegularExpression regex(QStringLiteral("Gleitzeit +([0-9]+\\:[0-9]+\\-?) +([0-9]+\\:[0-9]+\\-?)")); - auto match = regex.match(m_auswertung); - if(match.hasMatch()) - { - gleitzeit = match.captured(2); - if(gleitzeit.endsWith(QChar('-'))) - { - gleitzeit.chop(1); - gleitzeit = QChar('-') % gleitzeit; - } - gleitzeit = tr("%0h").arg(gleitzeit); - } - else - qWarning() << "Gleitzeit not found"; - } - - m_balanceLabel->setText(tr("%0: %1").arg(tr("Balance")).arg(gleitzeit)); - m_holidaysLabel->setText(tr("%0: %1").arg(tr("Holidays")).arg(urlaubsAnspruch)); - - m_getAuswertungReply = Q_NULLPTR; -} - void MainWindow::pushButtonStartPressed() { auto bookingsChanged = false; @@ -307,8 +245,7 @@ void MainWindow::pushButtonStartPressed() if(bookingsChanged) { m_currentStripWidget->refresh(); - - refreshAuswertung(); + //refreshAuswertung(); } else m_currentStripWidget->refreshTimeAssignments(); @@ -359,7 +296,7 @@ void MainWindow::pushButtonEndPressed() } m_currentStripWidget->refresh(); - refreshAuswertung(); + //refreshAuswertung(); ui->actionToday->setEnabled(false); ui->actionRefresh->setEnabled(false); @@ -400,12 +337,9 @@ void MainWindow::dateChanged(bool force) } } - if(force || m_auswertungDate != QDate(ui->dateEditDate->date().year(), ui->dateEditDate->date().month(), 1)) - refreshAuswertung(); - if(std::any_of(std::begin(m_stripsWidgets), std::end(m_stripsWidgets), [](StripsWidget *stripsWidget) { return stripsWidget->refreshing(); - }) || m_getAuswertungReply) + })) { ui->actionToday->setEnabled(false); ui->actionRefresh->setEnabled(false); @@ -415,26 +349,6 @@ void MainWindow::dateChanged(bool force) } } -void MainWindow::openAuswertung() -{ - QTemporaryFile file(QDir::temp().absoluteFilePath(QStringLiteral("auswertungXXXXXX.pdf"))); - file.setAutoRemove(false); - if(!file.open()) - { - QMessageBox::warning(this, tr("Could not open auswertung!"), tr("Could not open auswertung!") % "\n\n" % file.errorString()); - return; - } - - file.write(m_auswertung); - file.close(); - - if(!QDesktopServices::openUrl(QUrl::fromLocalFile(file.fileName()))) - { - QMessageBox::warning(this, tr("Could not open auswertung!"), tr("Could not open default PDF viewer!")); - return; - } -} - void MainWindow::minimumTimeChanged() { ui->timeEditTime->setMinimumTime(m_currentStripWidget->minimumTime()); @@ -442,9 +356,6 @@ void MainWindow::minimumTimeChanged() void MainWindow::refreshingChanged() { - if(m_getAuswertungReply) - return; - { auto allFinished = std::none_of(std::begin(m_stripsWidgets), std::end(m_stripsWidgets), [](StripsWidget *stripsWidget){ return stripsWidget->refreshing(); @@ -487,19 +398,6 @@ void MainWindow::endEnabledChanged() ui->pushButtonEnd->setEnabled(endEnabled); } -void MainWindow::refreshAuswertung() -{ - m_balanceLabel->setText(tr("%0: %1").arg(tr("Balance")).arg(tr("???"))); - m_holidaysLabel->setText(tr("%0: %1").arg(tr("Holidays")).arg(tr("???"))); - - ui->actionAuswertung->setEnabled(false); - m_auswertung.clear(); - - m_auswertungDate = QDate(ui->dateEditDate->date().year(), ui->dateEditDate->date().month(), 1); - m_getAuswertungReply = m_erfassung.doGetAuswertung(m_userInfo.userId, m_auswertungDate); - connect(m_getAuswertungReply.get(), &ZeiterfassungReply::finished, this, &MainWindow::getAuswertungFinished); -} - void MainWindow::updateComboboxes() { ui->comboBoxProject->clear(); diff --git a/zeiterfassunglib/mainwindow.h b/zeiterfassunglib/mainwindow.h index 6f30f71..a49ae98 100644 --- a/zeiterfassunglib/mainwindow.h +++ b/zeiterfassunglib/mainwindow.h @@ -9,9 +9,10 @@ #include "zeiterfassunglib_global.h" #include "replies/getuserinforeply.h" #include "replies/getprojectsreply.h" -#include "replies/getauswertungreply.h" #include "replies/getpresencestatusreply.h" +class QMenu; +class QToolBar; class QLabel; class QBoxLayout; @@ -33,22 +34,23 @@ public: QMenu *menuView() const; QMenu *menuTools() const; QMenu *menuAbout() const; + QToolBar *toolBar() const; ZeiterfassungSettings &settings() const; ZeiterfassungApi &erfassung() const; const GetUserInfoReply::UserInfo &userInfo() const; StripFactory &stripFactory() const; + QDate date() const; + const QMap &projects() const; const std::array &stripsWidgets() const; private Q_SLOTS: void getProjectsFinished(); - void getAuswertungFinished(); void pushButtonStartPressed(); void pushButtonEndPressed(); void dateChanged(bool force = false); - void openAuswertung(); void minimumTimeChanged(); void refreshingChanged(); @@ -56,7 +58,6 @@ private Q_SLOTS: void endEnabledChanged(); private: - void refreshAuswertung(); void updateComboboxes(); Ui::MainWindow *ui; @@ -66,16 +67,9 @@ private: StripFactory &m_stripFactory; std::unique_ptr m_getProjectsReply; - std::unique_ptr m_getAuswertungReply; QMap m_projects; - QDate m_auswertungDate; - QByteArray m_auswertung; - - QLabel *m_balanceLabel; - QLabel *m_holidaysLabel; - std::array m_stripsWidgets; StripsWidget *m_currentStripWidget; }; diff --git a/zeiterfassunglib/mainwindow.ui b/zeiterfassunglib/mainwindow.ui index 9bfdf0b..ebc7280 100644 --- a/zeiterfassunglib/mainwindow.ui +++ b/zeiterfassunglib/mainwindow.ui @@ -229,7 +229,6 @@ &Tools - @@ -245,8 +244,6 @@ - - @@ -299,15 +296,6 @@ &Refresh everything - - - - :/zeiterfassunglib/images/auswertung.png:/zeiterfassunglib/images/auswertung.png - - - &Auswertung - - diff --git a/zeiterfassunglib/resources.qrc b/zeiterfassunglib/resources.qrc index 13f4b93..252e452 100644 --- a/zeiterfassunglib/resources.qrc +++ b/zeiterfassunglib/resources.qrc @@ -1,7 +1,6 @@ images/about.png - images/auswertung.png images/authentication.png images/help.png images/icon.png