diff --git a/src/core/datatypes.h b/src/core/datatypes.h index 1cb42c5..06c87b4 100644 --- a/src/core/datatypes.h +++ b/src/core/datatypes.h @@ -45,4 +45,10 @@ enum CustomerFilters { EMAIL }; +enum ProjectFilters { + ALL, + ACTIVE, + INACTIVE +}; + #endif // DATATYPES_H diff --git a/src/core/mainwindow.cpp b/src/core/mainwindow.cpp index 5d1ea79..0053234 100644 --- a/src/core/mainwindow.cpp +++ b/src/core/mainwindow.cpp @@ -551,6 +551,7 @@ void MainWindow::on_commandProsjekter_clicked() { 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))); + connect(prosjektW, SIGNAL(filtrerKunKunder(bool)), SLOT(filtrerProsjektMedKunKunder(bool))); ui->hovedLayout->insertWidget(0, prosjektW); prosjektW->oppdaterProsjektListe(prosjektKart, bindinger, kundeKart); @@ -627,6 +628,7 @@ void MainWindow::hoppTilProsjekt(int prosjektId) { 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))); + connect(prosjektW, SIGNAL(filtrerKunKunder(bool)), SLOT(filtrerProsjektMedKunKunder(bool))); ui->hovedLayout->insertWidget(0, prosjektW); prosjektW->oppdaterProsjektListe(prosjektKart, bindinger, kundeKart, prosjektId); @@ -792,6 +794,16 @@ void MainWindow::fjernKundeFraProsjekt(int prosjektKartotekPosisjon, int kundeID oppdaterTittel(); } +/* filtrerProsjektMedKunKunder(): + * ------------------------------ + * + * Tegner prosjekttreet på nytt og filtrerer og viser kun prosjekter med tilordnet kunder hvis bool = sann + */ + +void MainWindow::filtrerProsjektMedKunKunder(bool kunKunder) { + prosjektW->oppdaterProsjektListe(prosjektKart, bindinger, kundeKart, 0, kunKunder); +} + /* varsle(): * ------------------------------ * diff --git a/src/core/mainwindow.h b/src/core/mainwindow.h index 28d9aa9..df708ca 100644 --- a/src/core/mainwindow.h +++ b/src/core/mainwindow.h @@ -68,6 +68,7 @@ private slots: void slettProsjekt(int kartotekPlassering); void settAktivInaktiv(int kartotekPlassering); void fjernKundeFraProsjekt(int prosjektKartotekPosisjon, int kundeID); + void filtrerProsjektMedKunKunder(bool kunKunder); /* Ultøpslots */ void on_commandDeadlines_clicked(); diff --git a/src/mainwidgets/prosjektwidget.cpp b/src/mainwidgets/prosjektwidget.cpp index 24f479d..6e68a9f 100644 --- a/src/mainwidgets/prosjektwidget.cpp +++ b/src/mainwidgets/prosjektwidget.cpp @@ -5,13 +5,15 @@ ProsjektWidget::ProsjektWidget(QWidget *parent) : QWidget(parent), ui(new Ui::ProsjektWidget) { ui->setupUi(this); + + prosjektFiltre = ProjectFilters::ALL; } ProsjektWidget::~ProsjektWidget() { delete ui; } -void ProsjektWidget::oppdaterProsjektListe(ProsjektKartotek &kartotek, ProsjektBindinger &bindinger, KundeKartotek &kundeKart, int prosjekt) { +void ProsjektWidget::oppdaterProsjektListe(ProsjektKartotek &kartotek, ProsjektBindinger &bindinger, KundeKartotek &kundeKart, int prosjekt, bool visKunKunder) { lokaltKartotek = kartotek; ui->prosjektTre->clear(); ui->prosjektTre->setColumnCount(1); @@ -23,19 +25,60 @@ void ProsjektWidget::oppdaterProsjektListe(ProsjektKartotek &kartotek, ProsjektB QIcon prosjektFerdigIkon(":/res/check.svg"); QIcon kundeIkon(":/res/user.svg"); - for (int i = 0; i < kartotek.size(); ++i) { - bool aktiv = kartotek.at(i).value("active").toBool(); + ProsjektKartotek filtrertKartotek = kartotek; + + if (visKunKunder) { + filtrertKartotek.clear(); + for (int i = 0; i < kartotek.size(); ++i) { + bool harBinding = false; + if (bindinger.contains(kartotek.at(i).value("ordrenummer").toInt())) + harBinding = true; + + if (harBinding) + filtrertKartotek << kartotek.at(i); + } + } + + ProsjektKartotek ytterligereFiltrertKartotek; + + switch (prosjektFiltre) { + case ProjectFilters::ALL: { + ytterligereFiltrertKartotek = filtrertKartotek; + break; + } + case ProjectFilters::ACTIVE: { + for (int i = 0; i < filtrertKartotek.size(); ++i) { + bool ferdig = filtrertKartotek.at(i).value("ferdig").toBool(); + if (!ferdig) + ytterligereFiltrertKartotek << filtrertKartotek.at(i); + } + break; + } + case ProjectFilters::INACTIVE: { + for (int i = 0; i < filtrertKartotek.size(); ++i) { + bool ferdig = filtrertKartotek.at(i).value("ferdig").toBool(); + if (ferdig) + ytterligereFiltrertKartotek << filtrertKartotek.at(i); + } + break; + } + } + + filtrertKartotek = ytterligereFiltrertKartotek; + + for (int i = 0; i < filtrertKartotek.size(); ++i) { + bool aktiv = filtrertKartotek.at(i).value("active").toBool(); if (aktiv) { - bool ferdig = kartotek.at(i).value("ferdig").toBool(); + bool ferdig = filtrertKartotek.at(i).value("ferdig").toBool(); QTreeWidgetItem *prosjektGjenstand = new QTreeWidgetItem(QTreeWidgetItem::Type); - prosjektGjenstand->setText(0, kartotek.at(i).value("prosjektnavn").toString()); + prosjektGjenstand->setText(0, filtrertKartotek.at(i).value("prosjektnavn").toString()); if (ferdig) prosjektGjenstand->setIcon(0,prosjektFerdigIkon); else prosjektGjenstand->setIcon(0, prosjektIkon); - int ordrenummer = kartotek.at(i).value("ordrenummer").toInt(); + int ordrenummer = filtrertKartotek.at(i).value("ordrenummer").toInt(); QList kundeGjenstander; if (bindinger.contains(ordrenummer)) { QList kunder = bindinger.value(ordrenummer); @@ -59,7 +102,7 @@ void ProsjektWidget::oppdaterProsjektListe(ProsjektKartotek &kartotek, ProsjektB prosjektGjenstand->addChildren(kundeGjenstander); } - prosjektGjenstand->setData(0, Qt::UserRole, kartotek.at(i).value("ordrenummer").toInt()); + prosjektGjenstand->setData(0, Qt::UserRole, filtrertKartotek.at(i).value("ordrenummer").toInt()); prosjektListe.append(prosjektGjenstand); } } @@ -156,3 +199,26 @@ void ProsjektWidget::on_pushMerkFerdig_clicked() { void ProsjektWidget::on_pushFjernKunde_clicked() { emit fjernKunde(kartotekPosisjon, kundeID); } + +void ProsjektWidget::on_checkHarBarn_clicked() { + emit filtrerKunKunder(ui->checkHarBarn->isChecked()); +} + + +void ProsjektWidget::on_radioVisAlle_clicked() { + prosjektFiltre = ProjectFilters::ALL; + emit filtrerKunKunder(ui->checkHarBarn->isChecked()); +} + + +void ProsjektWidget::on_radioVisAktive_clicked() { + prosjektFiltre = ProjectFilters::ACTIVE; + emit filtrerKunKunder(ui->checkHarBarn->isChecked()); +} + + +void ProsjektWidget::on_radioVisFerdige_clicked() { + prosjektFiltre = ProjectFilters::INACTIVE; + emit filtrerKunKunder(ui->checkHarBarn->isChecked()); +} + diff --git a/src/mainwidgets/prosjektwidget.h b/src/mainwidgets/prosjektwidget.h index bb06295..28a16b9 100644 --- a/src/mainwidgets/prosjektwidget.h +++ b/src/mainwidgets/prosjektwidget.h @@ -17,7 +17,7 @@ public: explicit ProsjektWidget(QWidget *parent = nullptr); ~ProsjektWidget(); - void oppdaterProsjektListe(ProsjektKartotek &kartotek, ProsjektBindinger &bindinger, KundeKartotek &kundeKart, int prosjekt = 0); + void oppdaterProsjektListe(ProsjektKartotek &kartotek, ProsjektBindinger &bindinger, KundeKartotek &kundeKart, int prosjekt = 0, bool visKunKunder = false); void settGjeldendeProsjekt(ProsjektFil prosjekt); signals: @@ -27,6 +27,7 @@ signals: void slettProsjekt(int kartotekPlassering); void settAktiv(int kartotekPlassering); void fjernKunde(int prosjektKartotekPosisjon, int kundeID); + void filtrerKunKunder(bool visKunKunder); private slots: void on_pushNy_clicked(); @@ -35,11 +36,16 @@ private slots: void on_pushSlett_clicked(); void on_pushMerkFerdig_clicked(); void on_pushFjernKunde_clicked(); + void on_checkHarBarn_clicked(); + void on_radioVisAlle_clicked(); + void on_radioVisAktive_clicked(); + void on_radioVisFerdige_clicked(); private: Ui::ProsjektWidget *ui; ProsjektFil valgtProsjekt; ProsjektKartotek lokaltKartotek; + ProjectFilters prosjektFiltre; void prosjektUI(); void kundeUI(); diff --git a/src/mainwidgets/prosjektwidget.ui b/src/mainwidgets/prosjektwidget.ui index 2901440..dac513b 100644 --- a/src/mainwidgets/prosjektwidget.ui +++ b/src/mainwidgets/prosjektwidget.ui @@ -6,14 +6,14 @@ 0 0 - 605 - 427 + 637 + 439 Form - + @@ -255,6 +255,58 @@ + + + + + + + 75 + true + + + + Vis/ filtrer prosjekter: + + + + + + + + + Vis alle prosjekter + + + true + + + + + + + Vis kun aktive + + + + + + + Vis kun ferdige + + + + + + + Vis kun prosjekter med tilordnede kunder + + + + + + +