-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMain_Window.cpp
executable file
·251 lines (206 loc) · 7.62 KB
/
Main_Window.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
#include "Main_Window.h"
#include "ui_Main_Window.h"
#include "Database.h"
#include "Client_Add.h"
#include "Client_Add_Service.h"
#include "Client_Services_History.h"
#include "Stock_Add_Part.h"
#include "Stock_Control.h"
#include "Stock_Finances.h"
#include "Config_Set_Hour_Cost.h"
#include "Man_Page.h"
#include "About.h"
#include "Client_Services_History.h"
#include "System_Services_and_Info.h"
#include "QSettings"
#include "QSqlQuery"
#include "QDebug"
#include "QMessageBox"
#include "QSqlError"
#include "Login.h"
#include <qsortfilterproxymodel.h>
using namespace std;
Main_Window::~Main_Window()
{
SaveSettings();
delete ui;
}
Main_Window::Main_Window(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
LoadSettings();
ui->line_Search_Client->setFocus();
//ui->lbl_sys_version->setText(System_Services_and_Info::get_System_Version());
this->setWindowTitle(System_Services_and_Info::get_System_Version());
Database db;
if(db.Connect()){
//Check_Login();
Create_Client_Model_and_proxy();
Create_Services_Model_and_proxy();
ui->lbl_database_status->setText("Database connected!");
}else{
//If the database is not available we make the app mostly useless//
ui->line_Search_Client->setEnabled(false);
ui->menuBar->hide();
QMessageBox::critical(nullptr, tr("Database Down"), tr("Database not running or wrong user/password! \nPlease double check if the Database is correctly started. Database.cpp handles login data."));
exit(0);
}
}
bool Main_Window::getClient_Clicked_Exit_On_Login() const
{
return Client_Clicked_Exit_On_Login;
}
void Main_Window::setClient_Clicked_Exit_On_Login(bool value)
{
Client_Clicked_Exit_On_Login = value;
}
void Main_Window::Check_Login()
{
Login Login;
Login.exec();
}
void Main_Window::Set_Last_Client_in_the_Grid()
{
QSqlQuery Get_last_Client;
Get_last_Client.prepare("SELECT Client_id, Client_Name FROM Client ORDER BY Client_id DESC LIMIT 1;");
if (Get_last_Client.exec() == false){
QMessageBox::critical(this, tr("Error!"), Get_last_Client.lastError().text() + "void Main_Window::on_action_Add_Client_triggered()");
}else{
while(Get_last_Client.next()) //returns only 1 row as result(0 = id, 1=name)//
{
ui->line_Search_Client->setText(Get_last_Client.value(1).toString()); //put the retrieved name in the search bar so it get automatically 'searched'
}
}
}
void Main_Window::on_action_Add_Client_triggered()
{
Client_Add Client_Add;
Client_Add.exec();
//Since a new client is added we reload the proxy.
Create_Client_Model_and_proxy();
Set_Last_Client_in_the_Grid();
}
void Main_Window::on_tbl_Client_List_doubleClicked(const QModelIndex &selectedClientinTheGrid)
{
//Bellow 2 list will retrieve the column 0 value, which is the clientid//
const QAbstractItemModel * model = selectedClientinTheGrid.model();
QVariant clientID = model->data(model->index(selectedClientinTheGrid.row(), 0, selectedClientinTheGrid.parent()), Qt::DisplayRole);
QVariant clientName = model->data(model->index(selectedClientinTheGrid.row(), 1, selectedClientinTheGrid.parent()), Qt::DisplayRole);
Client_Services_Open(clientID.toString());
//Going back to former form keeping current client 'searched' and updated
//The empty String is to reset the 'on_text_changed' function.
ui->line_Search_Client->setText("");
ui->line_Search_Client->setText(clientName.toString());
//When he comes back we reload the proxy//
Create_Client_Model_and_proxy();
}
void Main_Window::Client_Services_Open(QString clientID)
{
Client_Services_History Client_Services_History;
Client_Services_History.setClient_id(clientID);
Client_Services_History.exec();
}
void Main_Window::Create_Client_Model_and_proxy(){
model = new QSqlTableModel();
model->setTable("Client");
model->select();
model->setEditStrategy(QSqlTableModel::OnManualSubmit);
model->setHeaderData(0, Qt::Horizontal, tr("ID"));
model->setHeaderData(1, Qt::Horizontal, tr("Name"));
model->setHeaderData(2, Qt::Horizontal, tr("Adress"));
model->setHeaderData(3, Qt::Horizontal, tr("City"));
model->setHeaderData(4, Qt::Horizontal, tr("ID"));
model->setHeaderData(5, Qt::Horizontal, tr("Phone"));
model->setHeaderData(6, Qt::Horizontal, tr("Updated at"));
model->setHeaderData(7, Qt::Horizontal, tr("Created at"));
proxy = new QSortFilterProxyModel();
proxy->setSourceModel(model);
proxy->setFilterKeyColumn(1);//Name
proxy->setFilterCaseSensitivity(Qt::CaseInsensitive);
ui->tbl_Client_List->setModel(proxy);
//hide db columns
ui->tbl_Client_List->setColumnHidden(0, true);
ui->tbl_Client_List->setColumnHidden(2, true);
ui->tbl_Client_List->resizeColumnsToContents();
}
void Main_Window::Create_Services_Model_and_proxy(){
model = new QSqlTableModel();
model->setTable("Service");
model->select();
model->setEditStrategy(QSqlTableModel::OnManualSubmit);
model->setHeaderData(0, Qt::Horizontal, tr("Service_ID"));
model->setHeaderData(1, Qt::Horizontal, tr("Service_Client_ID"));
model->setHeaderData(2, Qt::Horizontal, tr("Short_Client_Car_ID"));
model->setHeaderData(3, Qt::Horizontal, tr("Service Short Description"));
model->setHeaderData(4, Qt::Horizontal, tr("Is Finished?"));
model->setHeaderData(5, Qt::Horizontal, tr("Service_Description"));
model->setHeaderData(6, Qt::Horizontal, tr("Service Parts Cost"));
model->setHeaderData(7, Qt::Horizontal, tr("Service Hours duration"));
model->setHeaderData(8, Qt::Horizontal, tr("Service Hour Cost"));
model->setHeaderData(9, Qt::Horizontal, tr("Is Paid?"));
model->setHeaderData(10, Qt::Horizontal, tr("Updated at"));
model->setHeaderData(11, Qt::Horizontal, tr("Created at"));
proxy = new QSortFilterProxyModel();
proxy->setSourceModel(model);
proxy->setFilterKeyColumn(1);//Name
proxy->setFilterCaseSensitivity(Qt::CaseInsensitive);
ui->tbl_Services_list->setModel(proxy);
//Hide some irrelevant Columns from the model
ui->tbl_Services_list->setColumnHidden(0, true);
ui->tbl_Services_list->setColumnHidden(1, true);
ui->tbl_Services_list->setColumnHidden(2, true);
ui->tbl_Services_list->setColumnHidden(5, true);
ui->tbl_Services_list->resizeColumnsToContents();
}
void Main_Window::on_line_ID_or_Name_textChanged(const QString &Used_Search_Filter)
{
proxy->setFilterFixedString(Used_Search_Filter);
}
void Main_Window::on_action_Stock_triggered()
{
Stock_Control stock_Control;
stock_Control.exec();
}
void Main_Window::on_action_Change_Hour_Cost_triggered()
{
Config_Set_Hour_Cost set_Hour_Cost;
set_Hour_Cost.exec();
}
void Main_Window::on_action_Manpage_triggered()
{
Man_Page man_page;
man_page.exec();
}
void Main_Window::on_actionStock_Finances_triggered()
{
Stock_Finances Stock_Finances;
Stock_Finances.exec();
}
void Main_Window::on_action_Exit_triggered()
{
close();
}
void Main_Window::on_action_About_Oficina_triggered()
{
About About;
About.exec();
}
//Settings: Block to keep windows position and size//
void Main_Window::SaveSettings()
{
QSettings setting("bedi1982","Oficina");
setting.beginGroup("Main_Window");
setting.setValue("position",this->geometry());
setting.endGroup();
}
void Main_Window::LoadSettings()
{
QSettings setting("bedi1982","Oficina");
setting.beginGroup("Main_Window");
QRect myrect = setting.value("position").toRect();
setGeometry(myrect);
setting.endGroup();
}
//End block to keep windows position and size//