#include "headers/Query.h" vector query_parktimes_for_customer(int cid) { /* This is needed to initialize the park_instances for the customer constructor that is supposed to create a customer from data in the db. This should not be called on on it's own outside query_customer(); */ vector park_times; SQLite::Statement query(data::db, "SELECT * FROM Park_time WHERE customer_id = ?;"); query.bind(1, cid); while (query.executeStep()) { int id = query.getColumn(0); int spot_id = query.getColumn(2); int start = query.getColumn(3); int duration = query.getColumn(5); Park_time result{id, cid, spot_id, start, duration}; park_times.push_back(result); } query.reset(); return park_times; } //--------------------------------------------- customers Customer query_customer_with_id(int id) { /* do not call this function if you are not certain a customer with this id exists. // the only legitimate caller of this function is query_parkspot_x // there is no error handling in this function // for when this function doesn't find the customer with this id !!!! */ SQLite::Statement query(data::db, "SELECT * FROM Customer WHERE id = ?;"); query.bind(1, id); while (query.executeStep()) { string name = query.getColumn(1); string password = query.getColumn(2); int vehicle = query.getColumn(3); // cast to vehicle string telephone = query.getColumn(4); int role = query.getColumn(5); vector park_instances = query_parktimes_for_customer(id); Customer result{id, name, password, Vehicle_type(vehicle), park_instances, telephone, role}; return result; } } int query_role_customer(int id) { SQLite::Statement query(data::db, "SELECT * FROM Customer WHERE id = ?;"); query.bind(1, id); while (query.executeStep()) { int role = query.getColumn(5); return role; } } //------------------------------- parkspot info // -- parkspots info, report gen Park_spot query_parkspot_with_id(int id, vector& parkspots) { for (Park_spot& i : parkspots) { if (i.id == id) { return i; } } } 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 > ? AND end < ?;"); query.bind(1, spotid); query.bind(2, period.first); query.bind(3, period.second); while (query.executeStep()) { int id = query.getColumn(0); int cid = query.getColumn(1); int start = query.getColumn(3); int duration = query.getColumn(5); Park_time result{id, cid, spotid, start, duration}; park_times.push_back(result); } query.reset(); for (auto i : park_times) { cout << i; } } void reports_from_allparkspots(pair period) { vector park_times; 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); int spotid = query.getColumn(2); int start = query.getColumn(3); int duration = query.getColumn(5); Park_time result{id, cid, spotid, start, duration}; park_times.push_back(result); } query.reset(); for (auto i : park_times) { cout << i; } } void current_status_parkspots(vector& spots) { cout << "P.spot \t\tStatus\t\t Customer\n"; for (auto& i : spots) { cout << "\n" << i.id << "\t\t" << ((i.taken) ? "true" : "false"); if (i.taken) { cout << "\t\t" << i.parked_customer; } } cout << "\n"; } vector reports_from_customer(int cid, pair period) { vector park_times; int verhicle = int(query_customer_with_id(cid).vehicle); float sum = 0; SQLite::Statement query( data::db, "SELECT * FROM Park_time WHERE customer_id = ? AND start > ? AND end < ?;"); query.bind(1, cid); query.bind(2, period.first); query.bind(3, period.second); while (query.executeStep()) { int id = query.getColumn(0); int spotid = query.getColumn(2); int start = query.getColumn(3); int duration = query.getColumn(5); Park_time result{id, cid, spotid, start, duration}; park_times.push_back(result); sum += duration / 3600; } query.reset(); for (auto i : park_times) { cout << std::setprecision(2) << i; sum += i.duration / 3600.0; } cout << "Your fees for this month: $" << std::setprecision(4) << sum * verhicle << "\n"; return park_times; }