Utløpsdatoer vindu implementert (#10)

This commit is contained in:
Helge-Mikael Nordgård 2021-10-02 23:02:29 +02:00
parent 5cf40bcba4
commit 15bef4617a
10 changed files with 449 additions and 12 deletions

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 4.15.0, 2021-09-29T00:05:03. -->
<!-- Written by QtCreator 4.15.0, 2021-09-29T00:16:25. -->
<qtcreator>
<data>
<variable>EnvironmentId</variable>

View File

@ -507,7 +507,8 @@ void MainWindow::on_commandCustomers_clicked() {
delete prosjektW;
pListe = false;
} else if (utlop) {
delete utlopW;
utlop = false;
}
kundeW = new KundeWidget(this);
@ -536,6 +537,9 @@ void MainWindow::on_commandProsjekter_clicked() {
if (kListe) {
delete kundeW;
kListe = false;
} else if (utlop) {
delete utlopW;
utlop = false;
}
prosjektW = new ProsjektWidget(this);
@ -554,6 +558,83 @@ void MainWindow::on_commandProsjekter_clicked() {
}
}
/* on_commandDeadlines_clicked():
* -------------------------------
*
* Setter inn listen over fremtidige prosjekter widgeten inn i hoved dialogboksen.
*/
void MainWindow::on_commandDeadlines_clicked() {
if (!utlop) {
if (kListe) {
delete kundeW;
kListe = false;
} else if (pListe) {
delete prosjektW;
pListe = false;
}
} else {
delete utlopW;
utlop = false;
}
utlopW = new UtlopWidget(this);
connect(utlopW, SIGNAL(prosjektListeStarter()), this, SLOT(prosjektOppstartsListe()));
connect(utlopW, SIGNAL(prosjektListeAvslutter()), this, SLOT(prosjektAvslutterListe()));
connect(utlopW, SIGNAL(visProsjekt(int)), this, SLOT(hoppTilProsjekt(int)));
ui->hovedLayout->insertWidget(0, utlopW);
utlopW->tegnUtlopsDatoer(prosjektKart);
utlopW->show();
utlop = true;
}
/* prosjektOppstartsListe():
* -------------------------------
*
* Tegner utløpsdato tabellen ny for å vise når prosjekter starter
*/
void MainWindow::prosjektOppstartsListe() {
utlopW->tegnOppstartsDatoer(prosjektKart);
}
/* prosjektAvslutterListe():
* -------------------------------
*
* Tegner utløpsdato tabellen ny for å vise når prosjekter slutter
*/
void MainWindow::prosjektAvslutterListe() {
utlopW->tegnUtlopsDatoer(prosjektKart);
}
/* hoppTilProsjekt():
* -------------------------------
*
* Hopper fra utløpsdato til prosjekt widget og viser prosjektet brukeren dobbelklikket
*/
void MainWindow::hoppTilProsjekt(int prosjektId) {
prosjektW = new ProsjektWidget(this);
connect(prosjektW, SIGNAL(opprettProsjekt()), this, SLOT(visNyttProsjektDlg()));
connect(prosjektW, SIGNAL(hentProsjektFil(int)), this, SLOT(sendProsjektFil(int)));
connect(prosjektW, SIGNAL(redigerProsjekt(int)), this, SLOT(visRedigerProsjektDialog(int)));
connect(prosjektW, SIGNAL(slettProsjekt(int)), this, SLOT(slettProsjekt(int)));
connect(prosjektW, SIGNAL(settAktiv(int)), this, SLOT(settAktivInaktiv(int)));
connect(prosjektW, SIGNAL(fjernKunde(int,int)), this, SLOT(fjernKundeFraProsjekt(int,int)));
ui->hovedLayout->insertWidget(0, prosjektW);
prosjektW->oppdaterProsjektListe(prosjektKart, bindinger, kundeKart, prosjektId);
prosjektW->show();
pListe = true;
delete utlopW;
utlop = false;
}
/* visNyttProsjektDlg():
* -------------------------------
*
@ -940,3 +1021,4 @@ void MainWindow::on_actionOm_triggered() {
this->hide();
om->show();
}

View File

@ -10,6 +10,7 @@
#include "kundewidget.h"
#include "prosjektwidget.h"
#include "utlopwidget.h"
#include "datahandler.h"
#include "nykundedialog.h"
#include "redigerkundedialog.h"
@ -67,6 +68,12 @@ private slots:
void settAktivInaktiv(int kartotekPlassering);
void fjernKundeFraProsjekt(int prosjektKartotekPosisjon, int kundeID);
/* Ultøpslots */
void on_commandDeadlines_clicked();
void prosjektOppstartsListe();
void prosjektAvslutterListe();
void hoppTilProsjekt(int prosjektId);
/* Arbeidshest slots */
void varsle(ProsjektFil prosjekt, AlertConditions kondisjon);
@ -74,6 +81,7 @@ private:
Ui::MainWindow *ui;
KundeWidget *kundeW;
ProsjektWidget *prosjektW;
UtlopWidget *utlopW;
DataHandler *ioHandler;
NyKundeDialog *nyKdlg;
RedigerKundeDialog *redigerKdlg;

View File

@ -25,7 +25,7 @@ void KundeWidget::lagKundeTabell(KundeKartotek &kundeKart) {
}
QStringList overskrifter;
overskrifter << "Kundenummer" << tr("Fornavn") << tr("Etternavn") << tr("Firmanavn") << tr("Telefonnr") << tr("Epostadresse");
overskrifter << tr("Kundenummer") << tr("Fornavn") << tr("Etternavn") << tr("Firmanavn") << tr("Telefonnr") << tr("Epostadresse");
ui->kundeTabell->setRowCount(aktivKartotek.size());
ui->kundeTabell->setColumnCount(6);
ui->kundeTabell->setHorizontalHeaderLabels(overskrifter);
@ -62,6 +62,8 @@ void KundeWidget::lagKundeTabell(KundeKartotek &kundeKart) {
ui->kundeTabell->setItem(i, 4, telefon);
ui->kundeTabell->setItem(i, 5, epost);
}
ui->kundeTabell->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
}
void KundeWidget::on_pushNyKunde_clicked() {

View File

@ -7,15 +7,18 @@ DEPENDPATH += \
SOURCES += \
$$PWD/kundewidget.cpp \
$$PWD/prosjektwidget.cpp
$$PWD/prosjektwidget.cpp \
$$PWD/utlopwidget.cpp
HEADERS += \
$$PWD/kundewidget.h \
$$PWD/prosjektwidget.h
$$PWD/prosjektwidget.h \
$$PWD/utlopwidget.h
FORMS += \
$$PWD/kundewidget.ui \
$$PWD/prosjektwidget.ui
$$PWD/prosjektwidget.ui \
$$PWD/utlopwidget.ui
RESOURCES += \
$$PWD/../../resources.qrc

View File

@ -11,7 +11,8 @@ ProsjektWidget::~ProsjektWidget() {
delete ui;
}
void ProsjektWidget::oppdaterProsjektListe(ProsjektKartotek &kartotek, ProsjektBindinger &bindinger, KundeKartotek &kundeKart) {
void ProsjektWidget::oppdaterProsjektListe(ProsjektKartotek &kartotek, ProsjektBindinger &bindinger, KundeKartotek &kundeKart, int prosjekt) {
lokaltKartotek = kartotek;
ui->prosjektTre->clear();
ui->prosjektTre->setColumnCount(1);
@ -58,12 +59,19 @@ void ProsjektWidget::oppdaterProsjektListe(ProsjektKartotek &kartotek, ProsjektB
prosjektGjenstand->addChildren(kundeGjenstander);
}
prosjektGjenstand->setData(0, Qt::UserRole, i);
prosjektGjenstand->setData(0, Qt::UserRole, kartotek.at(i).value("ordrenummer").toInt());
prosjektListe.append(prosjektGjenstand);
}
}
ui->prosjektTre->addTopLevelItems(prosjektListe);
for (int i = 0; i < prosjektListe.size(); ++i) {
if (prosjekt > 0 && prosjekt == prosjektListe.at(i)->data(0, Qt::UserRole).toInt()) {
prosjektListe.at(i)->setSelected(true);
gjenstandKlikk(prosjektListe.at(i), 0);
}
}
}
void ProsjektWidget::settGjeldendeProsjekt(ProsjektFil prosjekt) {
@ -76,8 +84,8 @@ void ProsjektWidget::on_pushNy_clicked() {
void ProsjektWidget::gjenstandKlikk(QTreeWidgetItem *gjenstand, int kolonne) {
if (gjenstand->type() == QTreeWidgetItem::Type) {
emit hentProsjektFil(gjenstand->data(kolonne, Qt::UserRole).toInt());
kartotekPosisjon = gjenstand->data(kolonne, Qt::UserRole).toInt();
emit hentProsjektFil(hentKartotekPosisjon(gjenstand->data(kolonne, Qt::UserRole).toInt()));
kartotekPosisjon = hentKartotekPosisjon(gjenstand->data(kolonne, Qt::UserRole).toInt());
ui->labelProsjektNavn->setText(valgtProsjekt.value("prosjektnavn").toString());
ui->labelOrdrenrValue->setText(valgtProsjekt.value("ordrenummer").toString());
@ -93,7 +101,7 @@ void ProsjektWidget::gjenstandKlikk(QTreeWidgetItem *gjenstand, int kolonne) {
prosjektUI();
} else {
QTreeWidgetItem *forelder = gjenstand->parent();
kartotekPosisjon = forelder->data(kolonne, Qt::UserRole).toInt();
kartotekPosisjon = hentKartotekPosisjon(forelder->data(kolonne, Qt::UserRole).toInt());
kundeID = gjenstand->data(kolonne, Qt::UserRole).toInt();
ui->labelProsjektNavn->setText("Ingen prosjekt valgt");
ui->labelOrdrenrValue->setText("-");
@ -119,6 +127,16 @@ void ProsjektWidget::kundeUI() {
ui->pushMerkFerdig->setEnabled(false);
}
int ProsjektWidget::hentKartotekPosisjon(int prosjektId) {
int posisjon = 0;
for (int i = 0; i < lokaltKartotek.size(); ++i) {
if (lokaltKartotek.at(i).value("ordrenummer").toInt() == prosjektId)
posisjon = i;
}
return posisjon;
}
void ProsjektWidget::on_pushRediger_clicked() {
emit redigerProsjekt(kartotekPosisjon);

View File

@ -17,7 +17,7 @@ public:
explicit ProsjektWidget(QWidget *parent = nullptr);
~ProsjektWidget();
void oppdaterProsjektListe(ProsjektKartotek &kartotek, ProsjektBindinger &bindinger, KundeKartotek &kundeKart);
void oppdaterProsjektListe(ProsjektKartotek &kartotek, ProsjektBindinger &bindinger, KundeKartotek &kundeKart, int prosjekt = 0);
void settGjeldendeProsjekt(ProsjektFil prosjekt);
signals:
@ -39,9 +39,11 @@ private slots:
private:
Ui::ProsjektWidget *ui;
ProsjektFil valgtProsjekt;
ProsjektKartotek lokaltKartotek;
void prosjektUI();
void kundeUI();
int hentKartotekPosisjon(int prosjektId);
int kartotekPosisjon, kundeID;
};

View File

@ -0,0 +1,116 @@
#include "utlopwidget.h"
#include "ui_utlopwidget.h"
UtlopWidget::UtlopWidget(QWidget *parent) :
QWidget(parent),
ui(new Ui::UtlopWidget) {
ui->setupUi(this);
}
UtlopWidget::~UtlopWidget() {
delete ui;
}
void UtlopWidget::tegnUtlopsDatoer(ProsjektKartotek &kartotek) {
ui->prosjektTable->clear();
ProsjektKartotek gyldigKartotek = fjernUgyldigeProsjekter(kartotek);
QStringList overskrifter;
overskrifter << tr("Prosjektnavn") << tr("Antall dager til prosjektet slutter");
ui->prosjektTable->setRowCount(gyldigKartotek.size());
ui->prosjektTable->setColumnCount(2);
ui->prosjektTable->setHorizontalHeaderLabels(overskrifter);
for (int i = 0; i < gyldigKartotek.size(); ++i) {
QDateTime iDag = QDateTime::currentDateTime();
quint64 iDagEpoch = iDag.toMSecsSinceEpoch();
quint64 utlop = gyldigKartotek.at(i).value("prosjektslutt").toULongLong() - iDagEpoch;
int antallDagerUtlop = utlop / 24 / 60 / 60 / 1000;
QTableWidgetItem *prosjektNavn = new QTableWidgetItem();
prosjektNavn->setFlags(prosjektNavn->flags() ^ Qt::ItemIsEditable);
prosjektNavn->setData(Qt::EditRole, gyldigKartotek.at(i).value("prosjektnavn").toString());
prosjektNavn->setData(Qt::UserRole, gyldigKartotek.at(i).value("ordrenummer").toInt());
QTableWidgetItem *utloper = new QTableWidgetItem();
utloper->setFlags(utloper->flags() ^ Qt::ItemIsEditable);
if (antallDagerUtlop < 0)
utloper->setData(Qt::EditRole, tr("Utløpt"));
else if (antallDagerUtlop == 0)
utloper->setData(Qt::EditRole, tr("I dag"));
else
utloper->setData(Qt::EditRole, antallDagerUtlop);
utloper->setData(Qt::UserRole, gyldigKartotek.at(i).value("ordrenummer").toInt());
ui->prosjektTable->setItem(i, 0, prosjektNavn);
ui->prosjektTable->setItem(i, 1, utloper);
}
ui->prosjektTable->sortItems(1);
ui->prosjektTable->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
}
void UtlopWidget::tegnOppstartsDatoer(ProsjektKartotek &kartotek) {
ui->prosjektTable->clear();
ProsjektKartotek gyldigKartotek = fjernUgyldigeProsjekter(kartotek);
QStringList overskrifter;
overskrifter << tr("Prosjektnavn") << tr("Antall dager til prosjektet starter");
ui->prosjektTable->setRowCount(gyldigKartotek.size());
ui->prosjektTable->setColumnCount(2);
ui->prosjektTable->setHorizontalHeaderLabels(overskrifter);
for (int i = 0; i < gyldigKartotek.size(); ++i) {
QDateTime iDag = QDateTime::currentDateTime();
quint64 iDagEpoch = iDag.toMSecsSinceEpoch();
quint64 utlop = gyldigKartotek.at(i).value("prosjektstart").toULongLong() - iDagEpoch;
int antallDagerUtlop = utlop / 24 / 60 / 60 / 1000;
QTableWidgetItem *prosjektNavn = new QTableWidgetItem();
prosjektNavn->setFlags(prosjektNavn->flags() ^ Qt::ItemIsEditable);
prosjektNavn->setData(Qt::EditRole, gyldigKartotek.at(i).value("prosjektnavn").toString());
prosjektNavn->setData(Qt::UserRole, gyldigKartotek.at(i).value("ordrenummer").toInt());
QTableWidgetItem *utloper = new QTableWidgetItem();
utloper->setFlags(utloper->flags() ^ Qt::ItemIsEditable);
if (antallDagerUtlop < 0)
utloper->setData(Qt::EditRole, tr("Startet"));
else if (antallDagerUtlop == 0)
utloper->setData(Qt::EditRole, tr("I dag"));
else
utloper->setData(Qt::EditRole, antallDagerUtlop);
utloper->setData(Qt::UserRole, gyldigKartotek.at(i).value("ordrenummer").toInt());
ui->prosjektTable->setItem(i, 0, prosjektNavn);
ui->prosjektTable->setItem(i, 1, utloper);
}
ui->prosjektTable->sortItems(1);
ui->prosjektTable->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
}
void UtlopWidget::on_radioVisAvslutt_clicked() {
emit prosjektListeAvslutter();
}
void UtlopWidget::on_radioVisBegynner_clicked() {
emit prosjektListeStarter();
}
ProsjektKartotek UtlopWidget::fjernUgyldigeProsjekter(ProsjektKartotek kartotek) {
ProsjektKartotek gyldige;
for (int i = 0; i < kartotek.size(); ++i) {
if (kartotek.at(i).value("active").toBool() && !kartotek.at(i).value("ferdig").toBool())
gyldige << kartotek.at(i);
}
return gyldige;
}
void UtlopWidget::on_prosjektTable_itemDoubleClicked(QTableWidgetItem *item) {
emit visProsjekt(item->data(Qt::UserRole).toInt());
}

View File

@ -0,0 +1,40 @@
#ifndef UTLOPWIDGET_H
#define UTLOPWIDGET_H
#include <QWidget>
#include <QTableWidgetItem>
#include <QDateTime>
#include "datatypes.h"
namespace Ui {
class UtlopWidget;
}
class UtlopWidget : public QWidget
{
Q_OBJECT
public:
explicit UtlopWidget(QWidget *parent = nullptr);
~UtlopWidget();
void tegnUtlopsDatoer(ProsjektKartotek &kartotek);
void tegnOppstartsDatoer(ProsjektKartotek &kartotek);
signals:
void prosjektListeAvslutter();
void prosjektListeStarter();
void visProsjekt(int prosjektId);
private slots:
void on_radioVisAvslutt_clicked();
void on_radioVisBegynner_clicked();
void on_prosjektTable_itemDoubleClicked(QTableWidgetItem *item);
private:
Ui::UtlopWidget *ui;
ProsjektKartotek fjernUgyldigeProsjekter(ProsjektKartotek kartotek);
};
#endif // UTLOPWIDGET_H

View File

@ -0,0 +1,166 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>UtlopWidget</class>
<widget class="QWidget" name="UtlopWidget">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>764</width>
<height>542</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QLabel" name="labelHeadline">
<property name="font">
<font>
<pointsize>12</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Utløpsdatoer</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<spacer name="horizontalSpacer_3">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QLabel" name="labelSubHeadline">
<property name="font">
<font>
<pointsize>10</pointsize>
<weight>50</weight>
<bold>false</bold>
</font>
</property>
<property name="text">
<string>Viser alle prosjekter med utløpsdatoer i synkende rekkefølge</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_4">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item>
<widget class="QTableWidget" name="prosjektTable">
<property name="sortingEnabled">
<bool>true</bool>
</property>
<attribute name="verticalHeaderVisible">
<bool>false</bool>
</attribute>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
<spacer name="horizontalSpacer_5">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QRadioButton" name="radioVisAvslutt">
<property name="text">
<string>Vis når prosjekter slutter</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="radioVisBegynner">
<property name="text">
<string>Vis når prosjekter begynner</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_6">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>