#include"headers/Park_time.h" #include #include Park_time::Park_time(int c_id, int s_id) : customer_id { c_id } , spot_id { s_id } , duration { 0 } , start { high_resolution_clock::now() } , id {auto_increment_db() + 1} { save_db(); } void Park_time::clock_out(int c_id, int s_id) { if (c_id != customer_id) { std::cout << "wrong customer id, you are at the wrong location"; return; } if (s_id != spot_id) { std::cout << "Wrong spot id, you're at the wrong location"; return; } if (!duration) { end = high_resolution_clock::now(); duration = duration_cast(end - start).count(); // use mins later update_db(); } else { std::cout << "Already clocked out. Something is wrong \n"; } } std::ostream& operator<<(std::ostream& os, const Park_time & pt){ std::time_t start_ = system_clock::to_time_t(pt.start); std::time_t end_ = system_clock::to_time_t(pt.end); os << "- - - - - - - - - - - - - - - - - - - -\n"; os << "Clocked in :" << std::ctime(&start_); os << "clocked out : " << std::ctime(&end_); os << "duration : " << pt.duration << "\n"; os << "- - - - - - - - - - - - - - - - - - - -\n"; return os; } int Park_time::start_to_int(){ auto start_to_epoch = start.time_since_epoch(); auto start_value = std::chrono::duration_cast(start_to_epoch); int start_seconds = start_value.count(); return start_seconds; } // db funcs ----------------------------------------------------------------------------- void Park_time::save_db() { string statement{"insert into Park_time values ( , , , , , );"}; statement.insert(41, "NULL"); statement.insert(39, "NULL"); statement.insert(37, to_string(start_to_int()) ); statement.insert(35, to_string(spot_id)); statement.insert(33, to_string(customer_id)); statement.insert(31, to_string(id)); SQLite::Transaction transaction(data::db); data::db.exec(statement); transaction.commit(); } void Park_time::update_db() { string statement = "UPDATE Park_time SET end = , duration = where id = '';"; statement.insert(53, std::to_string(id)); statement.insert(40, to_string(duration)); statement.insert(27, to_string(start_to_int() + duration)); data::db.exec(statement); } // to get id on first save to db int Park_time::auto_increment_db() { SQLite::Statement max_id(data::db, "select max(id) from Park_time;"); int id = 0; max_id.executeStep(); id = max_id.getColumn(0); max_id.reset(); return id; }