La til filtreringsfunksjon for prosjekter (#8)

This commit is contained in:
Helge-Mikael Nordgård 2021-10-04 15:04:04 +02:00
parent efdc3e7aee
commit f4b4a06668
6 changed files with 154 additions and 11 deletions

View File

@ -45,4 +45,10 @@ enum CustomerFilters {
EMAIL
};
enum ProjectFilters {
ALL,
ACTIVE,
INACTIVE
};
#endif // DATATYPES_H

View File

@ -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 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():
* ------------------------------
*

View File

@ -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();

View File

@ -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<QTreeWidgetItem *> kundeGjenstander;
if (bindinger.contains(ordrenummer)) {
QList<int> 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());
}

View File

@ -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();

View File

@ -6,14 +6,14 @@
<rect>
<x>0</x>
<y>0</y>
<width>605</width>
<height>427</height>
<width>637</width>
<height>439</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_3">
<layout class="QVBoxLayout" name="verticalLayout_4">
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
@ -255,6 +255,58 @@
</item>
</layout>
</item>
<item>
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<widget class="QLabel" name="labelFiltrerProsjekter">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Vis/ filtrer prosjekter:</string>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_8">
<item>
<widget class="QRadioButton" name="radioVisAlle">
<property name="text">
<string>Vis alle prosjekter</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="radioVisAktive">
<property name="text">
<string>Vis kun aktive</string>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="radioVisFerdige">
<property name="text">
<string>Vis kun ferdige</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="checkHarBarn">
<property name="text">
<string>Vis kun prosjekter med tilordnede kunder</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</item>
<item>
<widget class="QGroupBox" name="groupBeskrivelse">
<property name="title">