From a79081febf5976fb33426fd88a2dfb248443ba65 Mon Sep 17 00:00:00 2001 From: MassiveAtoms Date: Sat, 20 Jul 2019 20:32:47 -0300 Subject: [PATCH] WIP reportgen --- Interface.cpp | 199 ++++++++++++++++++++++++++++---------------- Query.cpp | 63 ++------------ headers/Interface.h | 11 ++- headers/Query.h | 7 +- 4 files changed, 151 insertions(+), 129 deletions(-) diff --git a/Interface.cpp b/Interface.cpp index 7a1e624..3e9823d 100644 --- a/Interface.cpp +++ b/Interface.cpp @@ -9,7 +9,7 @@ void interface(vector& spots) { /* string introduction = "P A R K M A N N E"; //logo animation, disable during testing - text_animation(introduction, 50); + text_animation(introduction, 50); */ cout << "\nWelcome to the parking system. Please login.."; @@ -25,16 +25,16 @@ void interface(vector& spots) { cout << "ERROR: wrong password. Please retype your password:\n"; std::getline(cin, password); } - if(query_role_customer(id)==1){ + if (query_role_customer(id) == 1) { interface_admin(spots); - } else if(query_role_customer(id)==0){ + } else if (query_role_customer(id) == 0) { interface_member(spots, c); } else { cout << "ERROR ROLE_INVALID!"; } } -void interface_member(vector& spots,Customer& c) { +void interface_member(vector& spots, Customer& c) { cout << "\nLogged in succesfully!\n"; cout << "select an option:\n [1] Parking\n[2]Monthly report\n"; int option; @@ -77,53 +77,49 @@ void interface_admin(vector& spots) { cin >> option_1; cin.ignore(10000, '\n'); switch (option_1) { - case 1: { - reports_from_allparkspots(); - break; - } - case 2: { - reports_from_allparkspots(true); - break; - } - case 3: { - cout << "Which parking spot would you like a report on?\n"; - cout << "Parking spot ID: "; - int spotID; - cin >> spotID; - cin.ignore(10000, '\n'); - reports_from_parkspot(spotID); - break; - } - case 4: { - cout << "Which parking spot would you like a report on?\n"; - cout << "Parking spot ID: "; - int spotID; - cin >> spotID; - cin.ignore(10000, '\n'); - reports_from_parkspot(spotID, true); - break; - } - /*case 5: { - cout << "Which month would you like a report on?\n"; - cout << "[1] January, [2] February, [3] March, [4] April, [5] May," - "\n[6] June, [7] July, [8] August, [9] September, [10] October, [11] November, [12] December\n"; - cout << "Enter month number: "; - int month; - cin >> month; - cin.ignore(10000, '\n'); - report_from_month(month); - break; - } - case 6: { - cout << "Which week would you like a report on?\n"; - cout << "Enter week number: "; - int week; - cin >> week; - cin.ignore(10000, '\n'); - report_from_week(week); - break; - }*/ - default: + case 1: { + reports_from_allparkspots(); + break; + } + case 2: { + reports_from_allparkspots(true); + break; + } + case 3: { + cout << "Which parking spot would you like a report on?\n"; + cout << "Parking spot ID: "; + int spotID; + cin >> spotID; + cin.ignore(10000, '\n'); + reports_from_parkspot(spotID); + break; + } + case 4: { + cout << "Which parking spot would you like a report on?\n"; + cout << "Parking spot ID: "; + int spotID; + cin >> spotID; + cin.ignore(10000, '\n'); + reports_from_parkspot(spotID, true); + break; + } + /*case 5: { + cout << "Which month would you like a report on?\n"; + cout << "[1] January, [2] February, [3] March, [4] April, [5] May," + "\n[6] June, [7] July, [8] August, [9] September, [10] October, [11] November, [12] + December\n"; cout << "Enter month number: "; int month; cin >> month; cin.ignore(10000, + '\n'); report_from_month(month); break; + } + case 6: { + cout << "Which week would you like a report on?\n"; + cout << "Enter week number: "; + int week; + cin >> week; + cin.ignore(10000, '\n'); + report_from_week(week); + break; + }*/ + default: break; } } @@ -135,14 +131,14 @@ void interface_admin(vector& spots) { cin >> option_2; cin.ignore(10000, '\n'); switch (option_2) { - case 1: { - current_status_parkspots(spots); - break; - } - case 2: { - new_parkspot(spots); - } - default: + case 1: { + current_status_parkspots(spots); + break; + } + case 2: { + new_parkspot(spots); + } + default: break; } } @@ -154,15 +150,15 @@ void interface_admin(vector& spots) { cin >> option_3; cin.ignore(10000, '\n'); switch (option_3) { - case 1: { - new_customer(); - break; - } - case 2: { - new_admin(); - break; - } - default: + case 1: { + new_customer(); + break; + } + case 2: { + new_admin(); + break; + } + default: break; } } @@ -204,7 +200,7 @@ void park(Customer& c, vector& spots) { query_parkspot_with_id(c.parked_at(), spots).clock(c); cout << "You have sucessfully clocked out."; } else { - cout << "OK, have a nice day."; //exit to customer login + cout << "OK, have a nice day."; // exit to customer login } } } @@ -230,7 +226,7 @@ void new_customer() { } void new_admin() { - int vtype = 2; //revision required! Needs to be set to NULL + int vtype = 2; // revision required! Needs to be set to NULL string name; string password; string telephone; @@ -255,3 +251,66 @@ void new_parkspot(vector& spots) { spots.push_back(newspot); cout << "New parking spot sucessfully created.\n"; } + +// time stuff----------------------------------------------------- + +pair create_month_period() { + std::time_t t = std::time(0); + std::tm* date = std::localtime(&t); + int month, year = 0; + cout << "Which month do you want a report on?[6 2018 for June 2018]\n"; + cin >> month >> year; + date->tm_year = year - 1900; + date->tm_mday = 1; + date->tm_mon = month - 1; + pair period; + period.first = mktime(date); + date->tm_mon = month; + period.second = mktime(date); + return period; +} + +pair create_week_period() { + std::time_t t = std::time(0); + std::tm* date = std::localtime(&t); + int day, month, year = 0; + cout << "Which month do you want a report on?[ 20 6 2018 for June 20th, 2018]\n"; + cin >> day >> month >> year; + date->tm_year = year - 1900; + date->tm_mday = day; + date->tm_mon = month - 1; + date->tm_hour = 0; + date->tm_min = 0; + pair period; + period.first = mktime(date); + period.second = period.first + 604800; // plus 7 days in seconds + return period; +} + +// ------------------------------ report stuff + +void report_all_spots(bool weekly) { + pair period; + if (weekly) { + pair period = create_week_period(); + } else { + pair period = create_month_period(); + } + + reports_from_allparkspots(period); // TODO: namechange of reports_from_allparkspots in query? +} + +void report_single_spot(bool weekly) { + cout << "Which parking spot would you like a report on?\n"; + cout << "Parking spot ID: "; + int spotID; + cin >> spotID; + cin.ignore(10000, '\n'); + pair period; + if (weekly) { + pair period = create_week_period(); + } else { + pair period = create_month_period(); + } + reports_from_parkspot(spotID, period); +} diff --git a/Query.cpp b/Query.cpp index dfc2524..295f53a 100644 --- a/Query.cpp +++ b/Query.cpp @@ -84,33 +84,6 @@ int query_role_customer(int id){ //------------------------------- parkspot info -pair create_month_period(int month, int year) { - std::time_t t = std::time(0); - std::tm* date = std::localtime(&t); - date->tm_year = year - 1900; - date->tm_mday = 1; - date->tm_mon = month - 1; - pair period; - period.first = mktime(date); - date->tm_mon = month; - period.second = mktime(date); - return period; -} - -pair create_week_period(int day, int month, int year){ - std::time_t t = std::time(0); - std::tm* date = std::localtime(&t); - date->tm_year = year - 1900; - date->tm_mday = day; - date->tm_mon = month - 1; - date->tm_hour = 0; - date->tm_min = 0; - pair period; - period.first = mktime(date); - period.second = period.first + 604800; // plus 7 days in seconds - return period; -} - // -- parkspots info, report gen Park_spot query_parkspot_with_id(int id, vector& parkspots) { @@ -121,22 +94,12 @@ Park_spot query_parkspot_with_id(int id, vector& parkspots) { } } -void reports_from_parkspot(int spotid, bool weekly) { - std::time_t t = std::time(0); // get time now - std::tm* now = std::localtime(&t); - - if (weekly) { - now->tm_wday = 1; - } else { - now->tm_mday = 1; - } - - int s_since_epoch = mktime(now); - +void reports_from_parkspot(int spotid, pair period) { vector park_times; - SQLite::Statement query(data::db, "SELECT * FROM Park_time WHERE spot_id = ? AND start > ?;"); + SQLite::Statement query(data::db, "SELECT * FROM Park_time WHERE spot_id = ? AND start > ? AND end < ?;"); query.bind(1, spotid); - query.bind(2, s_since_epoch); + query.bind(2, period.first); + query.bind(3, period.second); while (query.executeStep()) { int id = query.getColumn(0); int cid = query.getColumn(1); @@ -152,20 +115,12 @@ void reports_from_parkspot(int spotid, bool weekly) { } } -void reports_from_allparkspots(bool weekly) { - std::time_t t = std::time(0); // get time now - std::tm* now = std::localtime(&t); - if (weekly) { - now->tm_wday = 1; - } else { - now->tm_mday = 1; - } - - int s_since_epoch = mktime(now); - +void reports_from_allparkspots(pair period) { vector park_times; - SQLite::Statement query(data::db, "SELECT * FROM Park_time WHERE start > ?;"); - query.bind(1, s_since_epoch); + SQLite::Statement query(data::db, "SELECT * FROM Park_time WHERE start > ? AND end < >;"); + query.bind(1, period.first); + query.bind(2, period.second); + while (query.executeStep()) { int id = query.getColumn(0); int cid = query.getColumn(1); diff --git a/headers/Interface.h b/headers/Interface.h index 355c88e..89e4688 100644 --- a/headers/Interface.h +++ b/headers/Interface.h @@ -5,10 +5,19 @@ using std::cin; + void interface(vector& spots); void interface_member(vector& spots, Customer& c); void interface_admin(vector& spots); void park(Customer& c, vector& spots); void new_customer(); void new_admin(); -void new_parkspot(vector& spots); \ No newline at end of file +void new_parkspot(vector& spots); + +// time creation +pair create_month_period() ; +pair create_week_period(); + +// report stuff +void report_single_spot(bool weekly); +void report_all_spots(bool weekly) \ No newline at end of file diff --git a/headers/Query.h b/headers/Query.h index 1b4ef9e..9ab6e5e 100644 --- a/headers/Query.h +++ b/headers/Query.h @@ -62,11 +62,10 @@ vector populate_spots(); Park_spot query_parkspot_with_id(int id, vector& parkspots); int query_role_customer(int id); -void reports_from_parkspot(int spotid, bool weekly = false); -void reports_from_allparkspots(bool weekly = false); +void reports_from_parkspot(int spotid, pair period); +void reports_from_allparkspots(pair period); void current_status_parkspots(vector& spots); -pair create_month_period(int month, int year) ; -pair create_week_period(int day, int month, int year); + #endif // CUSTOMER_H