#include "headers/Park_time.h" 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(); } Park_time::Park_time(int id_, int customer_id_, int spot_id_, int start_, int duration_) : id{id_}, customer_id{customer_id_}, spot_id{spot_id_}, duration{duration_} { start = time_point(seconds(start_)); end = time_point(seconds(start_ + duration_)); } Park_time::~Park_time() { update_db(); } void Park_time::clock_out(int c_id, int s_id) { if (c_id != customer_id) { cout << "wrong customer id, you are at the wrong location"; return; } if (s_id != spot_id) { 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 { 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 = 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, 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; }