#include "headers/Park_spot.h" // constructors Park_spot::Park_spot(Vehicle_type v_type_) : parked_customer{0}, id{auto_increment_db() + 1}, taken{false}, v_type{v_type_} { save_db(); } Park_spot::Park_spot(int id_, bool taken_, int parked, Vehicle_type v_type_) : parked_customer{parked}, id{id_}, v_type{v_type_}, taken{taken_} {} // clock in en out, calls de correct customer.clock_x depending on internal state of the spot void Park_spot::clock(Customer& c_customer) { if (!taken) { parked_customer = c_customer.id; taken = true; c_customer.clock_in(id); update_db(); } else { taken = false; c_customer.clock_out(id); parked_customer = 0; update_db(); } } // --------------------- db functs void Park_spot::update_db() { string statement = "UPDATE Park_spot SET taken = '', customer_id = '' where id = '';"; statement.insert(63, to_string(id)); if (taken) { statement.insert(49, to_string(parked_customer)); statement.insert(30, "1"); } else { statement.insert(49, "NULL"); statement.insert(30, "0"); } data::db.exec(statement); } void Park_spot::save_db() { string statement{"insert into Park_spot values ( , , , );"}; statement.insert(36, to_string(int(v_type))); statement.insert(34, "NULL"); statement.insert(32, "0"); statement.insert(30, to_string(id)); SQLite::Transaction transaction(data::db); data::db.exec(statement); transaction.commit(); } void Park_spot::delete_db() { string statement = "delete from Park_spot where id= ;"; statement.insert(statement.length() - 2, to_string(id)); SQLite::Transaction transaction(data::db); data::db.exec(statement); transaction.commit(); } int Park_spot::auto_increment_db() { SQLite::Statement max_id(data::db, "select max(id) from Park_spot;"); int id = 0; max_id.executeStep(); id = max_id.getColumn(0); max_id.reset(); return id; }