Implementert mulighet for å søke i kundekartoteket (#7)

This commit is contained in:
Helge-Mikael Nordgård 2021-10-03 23:29:22 +02:00
parent fb07909440
commit bb62eadc44
6 changed files with 237 additions and 5 deletions

View File

@ -37,4 +37,12 @@ enum UIElementer {
FIRMANAVN FIRMANAVN
}; };
enum CustomerFilters {
ID,
NAME,
COMPANYNAME,
PHONE,
EMAIL
};
#endif // DATATYPES_H #endif // DATATYPES_H

View File

@ -517,6 +517,7 @@ void MainWindow::on_commandCustomers_clicked() {
connect(kundeW, SIGNAL(redigerKunde(int)), this, SLOT(visRedigerKundeDlg(int))); connect(kundeW, SIGNAL(redigerKunde(int)), this, SLOT(visRedigerKundeDlg(int)));
connect(kundeW, SIGNAL(slettKunde(int)), this, SLOT(slettKunde(int))); connect(kundeW, SIGNAL(slettKunde(int)), this, SLOT(slettKunde(int)));
connect(kundeW, SIGNAL(tilordneProsjekt(int)), this, SLOT(visProsjektListe(int))); connect(kundeW, SIGNAL(tilordneProsjekt(int)), this, SLOT(visProsjektListe(int)));
connect(kundeW, SIGNAL(startSok(QString)), this, SLOT(kundeSok(QString)));
ui->hovedLayout->insertWidget(0, kundeW); ui->hovedLayout->insertWidget(0, kundeW);
kundeW->lagKundeTabell(kundeKart); 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)); QMessageBox::information(this, "Tilknyttet", tr("Kunde med kundenummer %1 er tilknyttet prosjekt med ordrenummer %2").arg(kunde).arg(prosjekt));
} }
/* kundeSok():
* --------------------------------------
*
* Tegner kundetabellen 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(): /* on_action_Innstillinger_triggered():
* -------------------------------------- * --------------------------------------
* *

View File

@ -56,6 +56,7 @@ private slots:
void slettKunde(int posisjon); void slettKunde(int posisjon);
void visProsjektListe(int posisjon); void visProsjektListe(int posisjon);
void knyttProsjekt(int kunde, int prosjekt); void knyttProsjekt(int kunde, int prosjekt);
void kundeSok(QString sok);
/* Prosjektslots */ /* Prosjektslots */
void on_commandProsjekter_clicked(); void on_commandProsjekter_clicked();

View File

@ -5,13 +5,15 @@ KundeWidget::KundeWidget(QWidget *parent) :
QWidget(parent), QWidget(parent),
ui(new Ui::KundeWidget) { ui(new Ui::KundeWidget) {
ui->setupUi(this); ui->setupUi(this);
filterFelt = CustomerFilters::ID;
} }
KundeWidget::~KundeWidget() { KundeWidget::~KundeWidget() {
delete ui; delete ui;
} }
void KundeWidget::lagKundeTabell(KundeKartotek &kundeKart) { void KundeWidget::lagKundeTabell(KundeKartotek &kundeKart, bool filtrer, QString filter) {
ui->kundeTabell->clear(); ui->kundeTabell->clear();
connect(ui->kundeTabell, SIGNAL(itemClicked(QTableWidgetItem*)), this, SLOT(celleKlikk(QTableWidgetItem*))); 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; QStringList overskrifter;
overskrifter << tr("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->setRowCount(aktivKartotek.size());
@ -93,3 +138,46 @@ void KundeWidget::on_pushProsjekt_clicked() {
emit tilordneProsjekt(kundeNummer); 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;
}

View File

@ -2,7 +2,10 @@
#define KUNDEWIDGET_H #define KUNDEWIDGET_H
#include <QWidget> #include <QWidget>
#include <QTableWidget>
#include <QTableWidgetItem> #include <QTableWidgetItem>
#include <QRegularExpression>
#include <QRegularExpressionMatch>
#include "datahandler.h" #include "datahandler.h"
#include "datatypes.h" #include "datatypes.h"
@ -19,13 +22,14 @@ public:
explicit KundeWidget(QWidget *parent = nullptr); explicit KundeWidget(QWidget *parent = nullptr);
~KundeWidget(); ~KundeWidget();
void lagKundeTabell(KundeKartotek &kundeKart); void lagKundeTabell(KundeKartotek &kundeKart, bool filtrer = false, QString filter = QString());
signals: signals:
void opprettKunde(); void opprettKunde();
void redigerKunde(int posisjon); void redigerKunde(int posisjon);
void slettKunde(int posisjon); void slettKunde(int posisjon);
void tilordneProsjekt(int posisjon); void tilordneProsjekt(int posisjon);
void startSok(QString soekeStreng);
private slots: private slots:
void on_pushNyKunde_clicked(); void on_pushNyKunde_clicked();
@ -33,10 +37,18 @@ private slots:
void on_pushRediger_clicked(); void on_pushRediger_clicked();
void on_pushSlett_clicked(); void on_pushSlett_clicked();
void on_pushProsjekt_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: private:
Ui::KundeWidget *ui; Ui::KundeWidget *ui;
int kundeNummer; int kundeNummer;
CustomerFilters filterFelt;
void kopierKartotekFelt(KundeFil kilde, KundeKartotek &maal);
}; };
#endif // KUNDEWIDGET_H #endif // KUNDEWIDGET_H

View File

@ -6,14 +6,14 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>543</width> <width>532</width>
<height>499</height> <height>378</height>
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
<string>Form</string> <string>Form</string>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout"> <layout class="QVBoxLayout" name="verticalLayout_2">
<item> <item>
<layout class="QHBoxLayout" name="horizontalLayout"> <layout class="QHBoxLayout" name="horizontalLayout">
<item> <item>
@ -58,6 +58,115 @@
</item> </item>
</layout> </layout>
</item> </item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_6">
<item>
<spacer name="horizontalSpacer_7">
<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>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_4">
<item>
<widget class="QLabel" name="labelSok">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Søk:</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="lineSok"/>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_5">
<item>
<widget class="QLabel" name="labelSokI">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Søk i:</string>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="radioSokKundeNummer">
<property name="text">
<string>Kundenummer</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="radioSokIFornavn">
<property name="text">
<string>Navn</string>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="radioSokIFirma">
<property name="text">
<string>Firma</string>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="radioSokITlf">
<property name="text">
<string>Telefon</string>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="radioSokIEpost">
<property name="text">
<string>Epost</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</item>
<item>
<spacer name="horizontalSpacer_8">
<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> <item>
<widget class="QTableWidget" name="kundeTabell"> <widget class="QTableWidget" name="kundeTabell">
<attribute name="verticalHeaderVisible"> <attribute name="verticalHeaderVisible">