diff --git a/src/core/datatypes.h b/src/core/datatypes.h index 08f4b71..1cb42c5 100644 --- a/src/core/datatypes.h +++ b/src/core/datatypes.h @@ -37,4 +37,12 @@ enum UIElementer { FIRMANAVN }; +enum CustomerFilters { + ID, + NAME, + COMPANYNAME, + PHONE, + EMAIL +}; + #endif // DATATYPES_H diff --git a/src/core/mainwindow.cpp b/src/core/mainwindow.cpp index 2975e30..5d1ea79 100644 --- a/src/core/mainwindow.cpp +++ b/src/core/mainwindow.cpp @@ -517,6 +517,7 @@ void MainWindow::on_commandCustomers_clicked() { connect(kundeW, SIGNAL(redigerKunde(int)), this, SLOT(visRedigerKundeDlg(int))); connect(kundeW, SIGNAL(slettKunde(int)), this, SLOT(slettKunde(int))); connect(kundeW, SIGNAL(tilordneProsjekt(int)), this, SLOT(visProsjektListe(int))); + connect(kundeW, SIGNAL(startSok(QString)), this, SLOT(kundeSok(QString))); ui->hovedLayout->insertWidget(0, kundeW); kundeW->lagKundeTabell(kundeKart); @@ -986,6 +987,19 @@ void MainWindow::knyttProsjekt(int kunde, int prosjekt) { QMessageBox::information(this, "Tilknyttet", tr("Kunde med kundenummer %1 er tilknyttet prosjekt med ordrenummer %2").arg(kunde).arg(prosjekt)); } +/* kundeSok(): + * -------------------------------------- + * + * Tegner kundetabellen på ny med filteret i Qstring + */ + +void MainWindow::kundeSok(QString sok) { + if (sok.isEmpty()) + kundeW->lagKundeTabell(kundeKart); + else + kundeW->lagKundeTabell(kundeKart, true, sok); +} + /* on_action_Innstillinger_triggered(): * -------------------------------------- * diff --git a/src/core/mainwindow.h b/src/core/mainwindow.h index c12a5c2..28d9aa9 100644 --- a/src/core/mainwindow.h +++ b/src/core/mainwindow.h @@ -56,6 +56,7 @@ private slots: void slettKunde(int posisjon); void visProsjektListe(int posisjon); void knyttProsjekt(int kunde, int prosjekt); + void kundeSok(QString sok); /* Prosjektslots */ void on_commandProsjekter_clicked(); diff --git a/src/mainwidgets/kundewidget.cpp b/src/mainwidgets/kundewidget.cpp index 7a8295c..008618c 100644 --- a/src/mainwidgets/kundewidget.cpp +++ b/src/mainwidgets/kundewidget.cpp @@ -5,13 +5,15 @@ KundeWidget::KundeWidget(QWidget *parent) : QWidget(parent), ui(new Ui::KundeWidget) { ui->setupUi(this); + + filterFelt = CustomerFilters::ID; } KundeWidget::~KundeWidget() { delete ui; } -void KundeWidget::lagKundeTabell(KundeKartotek &kundeKart) { +void KundeWidget::lagKundeTabell(KundeKartotek &kundeKart, bool filtrer, QString filter) { ui->kundeTabell->clear(); connect(ui->kundeTabell, SIGNAL(itemClicked(QTableWidgetItem*)), this, SLOT(celleKlikk(QTableWidgetItem*))); @@ -24,6 +26,49 @@ void KundeWidget::lagKundeTabell(KundeKartotek &kundeKart) { } } + // Hvis filtrer er sann, opprett nytt kundekartotek kalt "filtrertKartotek" og iterer igjennom aktivKartotek for dermed å legge til + // felter som kun passer med filteret. Sett dermed "aktivKartotek" til det filtrerte kartoteket ("filtrertKartotek") + if (filtrer) { + KundeKartotek filtrertKartotek; + for (int i = 0; i < aktivKartotek.size(); ++i) { + switch (filterFelt) { + case CustomerFilters::ID: { + if (aktivKartotek.at(i).value("id").toString().contains(filter)) { + kopierKartotekFelt(aktivKartotek.at(i), filtrertKartotek); + } + break; + } + case CustomerFilters::NAME: { + QString fulltNavn = aktivKartotek.at(i).value("fornavn").toString() + " " + aktivKartotek.at(i).value("etternavn").toString(); + if (fulltNavn.contains(filter, Qt::CaseSensitive)) { + kopierKartotekFelt(aktivKartotek.at(i), filtrertKartotek); + } + break; + } + case CustomerFilters::COMPANYNAME: { + if (aktivKartotek.at(i).value("firmanavn").toString().contains(filter, Qt::CaseSensitive)) { + kopierKartotekFelt(aktivKartotek.at(i), filtrertKartotek); + } + break; + } + case CustomerFilters::PHONE: { + if (aktivKartotek.at(i).value("tlf").toString().contains(filter)) { + kopierKartotekFelt(aktivKartotek.at(i), filtrertKartotek); + } + break; + } + case CustomerFilters::EMAIL: { + if (aktivKartotek.at(i).value("epost").toString().contains(filter)) { + kopierKartotekFelt(aktivKartotek.at(i), filtrertKartotek); + } + break; + } + } + } + + aktivKartotek = filtrertKartotek; + } + QStringList overskrifter; overskrifter << tr("Kundenummer") << tr("Fornavn") << tr("Etternavn") << tr("Firmanavn") << tr("Telefonnr") << tr("Epostadresse"); ui->kundeTabell->setRowCount(aktivKartotek.size()); @@ -93,3 +138,46 @@ void KundeWidget::on_pushProsjekt_clicked() { emit tilordneProsjekt(kundeNummer); } + +void KundeWidget::on_radioSokKundeNummer_clicked() { + ui->lineSok->clear(); + ui->lineSok->setFocus(); + filterFelt = CustomerFilters::ID; +} + + +void KundeWidget::on_radioSokIFornavn_clicked() { + ui->lineSok->clear(); + ui->lineSok->setFocus(); + filterFelt = CustomerFilters::NAME; +} + + +void KundeWidget::on_radioSokIFirma_clicked() { + ui->lineSok->clear(); + ui->lineSok->setFocus(); + filterFelt = CustomerFilters::COMPANYNAME; +} + + +void KundeWidget::on_radioSokITlf_clicked() { + ui->lineSok->clear(); + ui->lineSok->setFocus(); + filterFelt = CustomerFilters::PHONE; +} + + +void KundeWidget::on_radioSokIEpost_clicked() { + ui->lineSok->clear(); + ui->lineSok->setFocus(); + filterFelt = CustomerFilters::EMAIL; +} + + +void KundeWidget::on_lineSok_textChanged(const QString &arg1) { + emit startSok(arg1); +} + +void KundeWidget::kopierKartotekFelt(KundeFil kilde, KundeKartotek &maal) { + maal << kilde; +} diff --git a/src/mainwidgets/kundewidget.h b/src/mainwidgets/kundewidget.h index a7692da..8fed9cd 100644 --- a/src/mainwidgets/kundewidget.h +++ b/src/mainwidgets/kundewidget.h @@ -2,7 +2,10 @@ #define KUNDEWIDGET_H #include +#include #include +#include +#include #include "datahandler.h" #include "datatypes.h" @@ -19,13 +22,14 @@ public: explicit KundeWidget(QWidget *parent = nullptr); ~KundeWidget(); - void lagKundeTabell(KundeKartotek &kundeKart); + void lagKundeTabell(KundeKartotek &kundeKart, bool filtrer = false, QString filter = QString()); signals: void opprettKunde(); void redigerKunde(int posisjon); void slettKunde(int posisjon); void tilordneProsjekt(int posisjon); + void startSok(QString soekeStreng); private slots: void on_pushNyKunde_clicked(); @@ -33,10 +37,18 @@ private slots: void on_pushRediger_clicked(); void on_pushSlett_clicked(); void on_pushProsjekt_clicked(); + void on_radioSokKundeNummer_clicked(); + void on_radioSokIFornavn_clicked(); + void on_radioSokIFirma_clicked(); + void on_radioSokITlf_clicked(); + void on_radioSokIEpost_clicked(); + void on_lineSok_textChanged(const QString &arg1); private: Ui::KundeWidget *ui; int kundeNummer; + CustomerFilters filterFelt; + void kopierKartotekFelt(KundeFil kilde, KundeKartotek &maal); }; #endif // KUNDEWIDGET_H diff --git a/src/mainwidgets/kundewidget.ui b/src/mainwidgets/kundewidget.ui index 9e0184e..c3b298a 100644 --- a/src/mainwidgets/kundewidget.ui +++ b/src/mainwidgets/kundewidget.ui @@ -6,14 +6,14 @@ 0 0 - 543 - 499 + 532 + 378 Form - + @@ -58,6 +58,115 @@ + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + 75 + true + + + + Søk: + + + + + + + + + + + + + + + 75 + true + + + + Søk i: + + + + + + + Kundenummer + + + true + + + + + + + Navn + + + + + + + Firma + + + + + + + Telefon + + + + + + + Epost + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + +