Initial commit
[golf-scorecard] / src / datahandling.cpp
1 #include "datahandling.h"\r
2 #include "newround.h"\r
3 #include "xmlparser.h"\r
4 #include "basicscorecard.h"\r
5 #include <QtDebug>\r
6 \r
7 datahandling::datahandling()\r
8 {\r
9 \r
10 }\r
11 \r
12 const QList<player>& datahandling::getPlayers()\r
13 {\r
14     return m_players;\r
15 }\r
16 \r
17 void datahandling::addPlayer(QString name,QString hcp,QString gender)\r
18 {\r
19     m_players.push_back(player(name,hcp,gender));\r
20 }\r
21 \r
22 const QList<course>& datahandling::getCourses()\r
23 {\r
24     return m_courses;\r
25 }\r
26 \r
27 void datahandling::addCourses(QString name, QString file)\r
28 {\r
29     m_courses.push_back(course(name, file));\r
30 }\r
31 \r
32 const QList<courseData>& datahandling::getCourseData()\r
33 {\r
34     return m_courseData;\r
35 }\r
36 \r
37 void datahandling::addCourseData(QString name, QString par, double latitude, double longitude, QString country, QString city)\r
38 {\r
39     m_courseData.push_back(courseData(name, par, latitude, longitude, country, city));\r
40 }\r
41 \r
42 const QList<courseCrMale>& datahandling::getCourseCrMale()\r
43 {\r
44     return m_courseCrMale;\r
45 }\r
46 \r
47 void datahandling::addCourseCrMale(double white, double yellow, double blue, double red)\r
48 {\r
49     m_courseCrMale.push_back(courseCrMale(white, yellow, blue, red));\r
50 }\r
51 \r
52 const QList<courseCrFemale>& datahandling::getCourseCrFemale()\r
53 {\r
54     return m_courseCrFemale;\r
55 }\r
56 \r
57 void datahandling::addCourseCrFemale(double yellow, double blue, double red)\r
58 {\r
59     m_courseCrFemale.push_back(courseCrFemale(yellow, blue, red));\r
60 }\r
61 \r
62 const QList<courseSlopeMale>& datahandling::getCourseSlopeMale()\r
63 {\r
64     return m_courseSlopeMale;\r
65 }\r
66 \r
67 void datahandling::addCourseSlopeMale(double white, double yellow, double blue, double red)\r
68 {\r
69     m_courseSlopeMale.push_back(courseSlopeMale(white, yellow, blue, red));\r
70 }\r
71 \r
72 const QList<courseSlopeFemale>& datahandling::getCourseSlopeFemale()\r
73 {\r
74     return m_courseSlopeFemale;\r
75 }\r
76 \r
77 void datahandling::addCourseSlopeFemale(double yellow, double blue, double red)\r
78 {\r
79     m_courseSlopeFemale.push_back(courseSlopeFemale(yellow, blue, red));\r
80 }\r
81 \r
82 const QList<holeData>& datahandling::getHoleData()\r
83 {\r
84     return m_holeData;\r
85 }\r
86 \r
87 void datahandling::addHoleData(QString id, QString hcp, QString par, QString map_uri)\r
88 {\r
89     m_holeData.push_back(holeData(id, hcp, par, map_uri));\r
90 }\r
91 \r
92 const QList<whiteTee>& datahandling::getWhiteTee()\r
93 {\r
94     return m_whiteTee;\r
95 }\r
96 \r
97 void datahandling::addWhiteTee(QString length, double latitude, double longitude)\r
98 {\r
99     m_whiteTee.push_back(whiteTee(length, latitude, longitude));\r
100 }\r
101 \r
102 const QList<yellowTee>& datahandling::getYellowTee()\r
103 {\r
104     return m_yellowTee;\r
105 }\r
106 \r
107 void datahandling::addYellowTee(QString length, double latitude, double longitude)\r
108 {\r
109     m_yellowTee.push_back(yellowTee(length, latitude, longitude));\r
110 }\r
111 \r
112 const QList<blueTee>& datahandling::getBlueTee()\r
113 {\r
114     return m_blueTee;\r
115 }\r
116 \r
117 void datahandling::addBlueTee(QString length, double latitude, double longitude)\r
118 {\r
119     m_blueTee.push_back(blueTee(length, latitude, longitude));\r
120 }\r
121 \r
122 const QList<redTee>& datahandling::getRedTee()\r
123 {\r
124     return m_redTee;\r
125 }\r
126 \r
127 void datahandling::addRedTee(QString length, double latitude, double longitude)\r
128 {\r
129     m_redTee.push_back(redTee(length, latitude, longitude));\r
130 }\r
131 \r
132 const QList<greenInfo>& datahandling::getGreenInfo()\r
133 {\r
134     return m_greenInfo;\r
135 }\r
136 \r
137 void datahandling::addGreenInfo(double latitude, double longitude)\r
138 {\r
139     m_greenInfo.push_back(greenInfo(latitude, longitude));\r
140 }\r
141 \r
142 void datahandling::clearData()\r
143 {\r
144     m_players.clear();\r
145     m_courses.clear();\r
146 }\r
147 \r
148 datahandling* datahandling::instance()\r
149 {\r
150     if (m_instance==0)\r
151         m_instance = new datahandling();\r
152 \r
153     return (m_instance);\r
154 }\r
155 \r
156 void datahandling::calculateHandicaps()\r
157 {\r
158     double cr[4];\r
159     double fcr[3];\r
160     double slope[4];\r
161     double fslope[3];\r
162     int par=0;\r
163     QStringList temp;\r
164 \r
165     for(int i = 0; i < 4; i++)\r
166     {\r
167         cr[i] = 0;\r
168         slope[i] = 0;\r
169     }\r
170 \r
171     for(int i = 0; i < 3; i++)\r
172     {\r
173         fcr[i] = 0;\r
174         fslope[i] = 0;\r
175     }\r
176 \r
177 \r
178     this->selectedPlayersHandicap.clear();\r
179 \r
180     foreach(courseData cD,this->m_courseData)\r
181     {\r
182         temp.push_back(cD.m_par);\r
183         par = temp[0].toInt();\r
184     }\r
185 \r
186     temp.clear();\r
187 \r
188     foreach(courseCrMale crM, this->m_courseCrMale)\r
189     {\r
190         cr[0] = (double)crM.m_white;\r
191         cr[1] = (double)crM.m_yellow;\r
192         cr[2] = (double)crM.m_blue;\r
193         cr[3] = (double)crM.m_red;\r
194     }\r
195 \r
196     temp.clear();\r
197 \r
198     foreach(courseSlopeMale sM, this->m_courseSlopeMale)\r
199     {\r
200         slope[0] = sM.m_white;\r
201         slope[1] = sM.m_yellow;\r
202         slope[2] = sM.m_blue;\r
203         slope[3] = sM.m_red;\r
204     }\r
205 \r
206     temp.clear();\r
207 \r
208     foreach(courseCrFemale crF, this->m_courseCrFemale)\r
209     {\r
210         fcr[0] = crF.m_yellow;\r
211         fcr[1] = crF.m_blue;\r
212         fcr[2] = crF.m_red;\r
213     }\r
214 \r
215     temp.clear();\r
216 \r
217     foreach(courseSlopeFemale sF, this->m_courseSlopeFemale)\r
218     {\r
219         fslope[0] = sF.m_yellow;\r
220         fslope[1] = sF.m_blue;\r
221         fslope[2] = sF.m_red;\r
222     }\r
223 \r
224     for(int i = 0; i < this->selectedPlayers.count(); i++)\r
225     {\r
226         int handicap;\r
227         if(QString::compare(this->selectedPlayersTee[i], "White", Qt::CaseInsensitive) == 0 &&\r
228            QString::compare(this->selectedPlayersGender[i], "male", Qt::CaseInsensitive) == 0)\r
229         {\r
230 \r
231             handicap = this->selectedPlayersHcp[i].toDouble() * (double)(slope[0] / 113) + (double)(cr[0] - par) + 0.5;\r
232             selectedPlayersHandicap << QString::number(handicap);\r
233             qDebug() << "Male White: " << handicap;\r
234             qDebug() << "Slope: " << slope[0] << " CR: " << cr[0];\r
235 \r
236         }\r
237         else if(QString::compare(this->selectedPlayersTee[i], "Yellow", Qt::CaseInsensitive) == 0 &&\r
238                 QString::compare(this->selectedPlayersGender[i], "male", Qt::CaseInsensitive) == 0)\r
239         {\r
240             handicap = this->selectedPlayersHcp[i].toDouble() * (double)(slope[1] / 113) + (double)(cr[1] - par) + 0.5;\r
241             selectedPlayersHandicap << QString::number(handicap);\r
242             qDebug() << "Male Yellow: " << handicap;\r
243 \r
244         }\r
245         else if(QString::compare(this->selectedPlayersTee[i], "Blue", Qt::CaseInsensitive) == 0 &&\r
246                 QString::compare(this->selectedPlayersGender[i], "male", Qt::CaseInsensitive) == 0)\r
247         {\r
248             handicap = this->selectedPlayersHcp[i].toDouble() * (double)(slope[2] / 113) + (double)(cr[2] - par) + 0.5;\r
249             selectedPlayersHandicap << QString::number(handicap);\r
250             qDebug() << "Male Blue: " << handicap;\r
251 \r
252         }\r
253         else if(QString::compare(this->selectedPlayersTee[i], "Red", Qt::CaseInsensitive) == 0 &&\r
254                 QString::compare(this->selectedPlayersGender[i], "male", Qt::CaseInsensitive) == 0)\r
255         {\r
256             handicap = this->selectedPlayersHcp[i].toDouble() * (double)(slope[3] / 113) + (double)(cr[3] - par) + 0.5;\r
257             selectedPlayersHandicap << QString::number(handicap);\r
258             qDebug() << "Male Red: " << handicap;\r
259 \r
260         }\r
261 \r
262         if(QString::compare(this->selectedPlayersTee[i], "White", Qt::CaseInsensitive) == 0 &&\r
263            QString::compare(this->selectedPlayersGender[i], "female", Qt::CaseInsensitive) == 0)\r
264         {\r
265 \r
266             handicap = this->selectedPlayersHcp[i].toDouble() * (double)(fslope[0] / 113) + (double)(fcr[0] - par) + 0.5;\r
267             selectedPlayersHandicap << QString::number(handicap);\r
268             qDebug() << "Female White: " << handicap;\r
269 \r
270         }\r
271         else if(QString::compare(this->selectedPlayersTee[i], "Yellow", Qt::CaseInsensitive) == 0 &&\r
272                 QString::compare(this->selectedPlayersGender[i], "female", Qt::CaseInsensitive) == 0)\r
273         {\r
274             handicap = this->selectedPlayersHcp[i].toDouble() * (double)(fslope[0] / 113) + (double)(fcr[0] - par) + 0.5;\r
275             selectedPlayersHandicap << QString::number(handicap);\r
276             qDebug() << "Female Yellow: " << handicap;\r
277 \r
278         }\r
279         else if(QString::compare(this->selectedPlayersTee[i], "Blue", Qt::CaseInsensitive) == 0 &&\r
280                 QString::compare(this->selectedPlayersGender[i], "female", Qt::CaseInsensitive) == 0)\r
281         {\r
282             handicap = this->selectedPlayersHcp[i].toDouble() * (double)(fslope[1] / 113) + (double)(fcr[1] - par) + 0.5;\r
283             selectedPlayersHandicap << QString::number(handicap);\r
284             qDebug() << "Female Blue: " << handicap;\r
285 \r
286         }\r
287         else if(QString::compare(this->selectedPlayersTee[i], "Red", Qt::CaseInsensitive) == 0 &&\r
288                 QString::compare(this->selectedPlayersGender[i], "female", Qt::CaseInsensitive) == 0)\r
289         {\r
290             handicap = this->selectedPlayersHcp[i].toDouble() * (double)(fslope[2] / 113) + (double)(fcr[2] - par) + 0.5;\r
291             selectedPlayersHandicap << QString::number(handicap);\r
292             qDebug() << "Female Red: " << handicap;\r
293 \r
294         }\r
295 \r
296 \r
297     }\r
298 }\r
299 \r
300 \r