Files
MermsEmrWeb/mermsemr/src/shared_tool/function_agents.cc
T
2019-02-19 22:35:27 +00:00

1266 lines
48 KiB
C++

// Topup management toosl
#include "clog.h"
#include "cgi.h"
#include "input.h"
#include "mermsemr_api.h"
#include "safestring.h"
#include <string>
#include "pgsql.h"
#include "pgsql_wrapper.h"
#include <curl/curl.h>
#include "medTEmails.h"
/* -- */
#include "function_agents.h"
#include "medTrTransporter.h"
//#include "function_driver.h"
void GenerateSeed( char * number, int sz, int seed );
long medTrDeviceList(CVars in, CVars &out) {
long ret = PHP_API_BAD_PARAM;
char vname[30];
try {
OPTIONAL(in, "limit") REQ_LONG(in, "limit", 0, -1);
REQ_LONG(in, "agent_id", 0, -1);
REQ_LONG(in, "location_id", 0, -1);
OPTIONAL(in, "device_id") REQ_LONG(in, "device_id", 0, -1);
out["total_record"] = "0";
const PGresult *res;
if (in["device_id"].Long() > 0) {
res = pgsql_query("SELECT * FROM transport_devices "
"WHERE agent_id = %lu AND transporter_id = %lu "
"AND id=%ly", in["agent_id"].Long(), in["location_id"].Long(), in["device_id"].Long() );
} else {
res = pgsql_query("SELECT * FROM transport_devices "
"WHERE agent_id = %lu AND transporter_id = %lu "
"ORDER BY description ASC", in["agent_id"].Long(), in["location_id"].Long() );
}
if (res != NULL && pgsql_num_rows(res) > 0) {
out["total_record"] = pgsql_num_rows(res);
for (int i = 0, n = pgsql_num_rows(res); i < n; i++) {
map<const char*, const char*>f = pgsql_fetch_assoc(res, i);
if (f.empty()) continue;
CVars rec;
map_to_cvars(f, rec);
snprintf(vname, sizeof (vname), "description_id_%05d", i);
out[vname] = rec["description"];
snprintf(vname, sizeof (vname), "lic_number_%05d", i);
out[vname] = rec["lic_number"];
snprintf(vname, sizeof (vname), "lic_state_%05d", i);
out[vname] = rec["lic_state"];
snprintf(vname, sizeof (vname), "expr_month_%05d", i);
out[vname] = rec["expr_month"];
snprintf(vname, sizeof (vname), "expr_year_%05d", i);
out[vname] = rec["expr_year"];
snprintf(vname, sizeof (vname), "state_%05d", i);
out[vname] = rec["state"];
snprintf(vname, sizeof (vname), "country_%05d", i);
out[vname] = rec["country"];
snprintf(vname, sizeof (vname), "agent_id_%05d", i);
out[vname] = rec["agent_id"];
snprintf(vname, sizeof (vname), "transporter_id_%05d", i);
out[vname] = rec["transporter_id"];
}
}
ret = PHP_API_OK;
out["status"] = "OK";
} catch (bad_parameter) {
logfmt(logINFO, "ERROR CALL long medTrDeviceList(CVars in, CVars &out)");
}
return ret;
}
long medAssignTranspoter(CVars in, CVars &out) {
long ret = PHP_API_BAD_PARAM;
REQ_LONG(in, "pid", 0, -1);
REQ_LONG(in, "service_id", 0, -1);
REQ_LONG(in, "driver_id", 0, -1);
const char * loc = getenv("REMOTE_ADDR");
CVars x;
const PGresult *res;
res = pgsql_query("SELECT * FROM members_service_request WHERE id=%lu AND status= 1 AND flags = %lu", in["service_id"].Long(), CONFIRMED);
if (res != NULL && pgsql_num_rows(res) > 0) {
if (load_db_record(out, "SELECT id AS driver_id FROM providers WHERE id= %lu ", in["driver_id"].Long()) > 0) {
if (out["driver_id"].Long() > 0) {
pgsql_exec("UPDATE members_service_request SET flags = %lu, provider =%lu WHERE id = %lu AND flags=%lu AND status = 1 ", ASSIGNED, out["driver_id"].Long(), in["service_id"].Long(), CONFIRMED);
ret = PHP_API_OK;
provider_email_calls( in["action"].Long(), in, out );
agent_email_calls(in["action"].Long(), in, out);
}
}
} else {
out["status"] = "Valid driver not found";
}
return ret;
}
long medTrInterpreterLangList(CVars in, CVars &out) {
long ret = PHP_API_BAD_PARAM;
char vname[30];
try {
REQ_LONG(in, "limit", 0, -1);
REQ_LONG(in, "agent_id", 0, -1);
REQ_LONG(in, "interpreter_id", 0, -1);
REQ_LONG(in, "language_id", 0, -1);
out["total_record"] = "0";
const PGresult *res;
if (in["language_id"].Long() > 0) {
res = pgsql_query("SELECT i.id as language_id,i.*,l.language FROM interpreters_language i "
"LEFT JOIN languages l ON l.code=i.lang_code "
"WHERE i.agent_id = %lu "
"AND i.interpreter_id = %lu AND i.id= %lu", in["agent_id"].Long(), in["interpreter_id"].Long(), in["language_id"].Long());
} else {
res = pgsql_query("SELECT i.id as language_id,i.*,l.language FROM interpreters_language i "
"LEFT JOIN languages l ON l.code=i.lang_code "
"WHERE i.agent_id = %lu AND i.interpreter_id = %lu "
"ORDER BY l.language ASC LIMIT %lu", in["agent_id"].Long(), in["interpreter_id"].Long(), in["limit"].Long());
}
if (res != NULL && pgsql_num_rows(res) > 0) {
out["total_record"] = pgsql_num_rows(res);
for (int i = 0, n = pgsql_num_rows(res); i < n; i++) {
map<const char*, const char*>f = pgsql_fetch_assoc(res, i);
if (f.empty()) continue;
CVars rec;
map_to_cvars(f, rec);
snprintf(vname, sizeof (vname), "language_id_%05d", i);
out[vname] = rec["language_id"];
snprintf(vname, sizeof (vname), "lang_code_%05d", i);
out[vname] = rec["lang_code"];
snprintf(vname, sizeof (vname), "agent_id_%05d", i);
out[vname] = rec["agent_id"];
snprintf(vname, sizeof (vname), "interpreter_id_%05d", i);
out[vname] = rec["interpreter_id"];
snprintf(vname, sizeof (vname), "flags_%05d", i);
out[vname] = rec["flags"];
snprintf(vname, sizeof (vname), "status_%05d", i);
out[vname] = rec["status"];
snprintf(vname, sizeof (vname), "language_%05d", i);
out[vname] = rec["language"];
snprintf(vname, sizeof (vname), "weekend_%05d", i);
out[vname] = rec["weekend"];
snprintf(vname, sizeof (vname), "document_%05d", i);
out[vname] = rec["document"];
snprintf(vname, sizeof (vname), "document_id_%05d", i);
out[vname] = rec["document_id"];
// |
}
}
ret = PHP_API_OK;
out["status"] = "OK";
} catch (bad_parameter) {
logfmt(logINFO, "ERROR CALL long medTrInterpreterLangList(CVars in, CVars &out)");
}
return ret;
}
long medTrAgentLangList(CVars in, CVars &out)
{
long ret = PHP_API_BAD_PARAM;
char vname[30];
try {
REQ_LONG(in, "agent_id", 0, -1);
REQ_LONG(in, "language_id", 0, -1);
out["total_record"] = "0";
const PGresult *res;
if (in["language_id"].Long() > 0) {
res = pgsql_query("SELECT t.firstname,t.lastname,t.phone,t.city,t.zipcode, i.lang_code,l.language,i.interpreter_id,i.id AS language_id,i.agent_id,i.flags,i.weekend,t.street,t.state,t.city "
"FROM interpreters_language i "
"LEFT JOIN languages l ON l.code=i.lang_code "
"LEFT JOIN interpreters t ON t.id=i.interpreter_id WHERE i.agent_id=%lu", in["agent_id"].Long(), in["language_id"].Long());
} else {
res = pgsql_query("SELECT t.firstname,t.lastname,t.phone,t.city,t.zipcode, i.lang_code,l.language,i.interpreter_id,i.id AS language_id,i.agent_id,i.flags,i.weekend,t.street,t.state,t.city "
"FROM interpreters_language i "
"LEFT JOIN languages l ON l.code=i.lang_code "
"LEFT JOIN interpreters t ON t.id=i.interpreter_id WHERE i.agent_id=%lu", in["agent_id"].Long());
}
if (res != NULL && pgsql_num_rows(res) > 0) {
out["total_record"] = pgsql_num_rows(res);
for (int i = 0, n = pgsql_num_rows(res); i < n; i++) {
map<const char*, const char*>f = pgsql_fetch_assoc(res, i);
if (f.empty()) continue;
CVars rec;
map_to_cvars(f, rec);
snprintf(vname, sizeof (vname), "language_id_%05d", i);
out[vname] = rec["language_id"];
snprintf(vname, sizeof (vname), "lang_code_%05d", i);
out[vname] = rec["lang_code"];
snprintf(vname, sizeof (vname), "agent_id_%05d", i);
out[vname] = rec["agent_id"];
snprintf(vname, sizeof (vname), "firstname_%05d", i);
out[vname] = rec["firstname"];
snprintf(vname, sizeof (vname), "lastname_%05d", i);
out[vname] = rec["lastname"];
snprintf(vname, sizeof (vname), "state_%05d", i);
out[vname] = rec["state"];
snprintf(vname, sizeof (vname), "street_%05d", i);
out[vname] = rec["street"];
snprintf(vname, sizeof (vname), "flags_%05d", i);
out[vname] = rec["flags"];
snprintf(vname, sizeof (vname), "phone_%05d", i);
out[vname] = rec["phone"];
snprintf(vname, sizeof (vname), "language_%05d", i);
out[vname] = rec["language"];
snprintf(vname, sizeof (vname), "weekend_%05d", i);
out[vname] = rec["weekend"];
snprintf(vname, sizeof (vname), "zipcode_%05d", i);
out[vname] = rec["zipcode"];
snprintf(vname, sizeof (vname), "city_%05d", i);
out[vname] = rec["city"];
snprintf(vname, sizeof (vname), "interpreter_id_%05d", i);
out[vname] = rec["interpreter_id"];
// |
}
}
ret = PHP_API_OK;
out["status"] = "OK";
} catch (bad_parameter) {
logfmt(logINFO, "ERROR CALL long medTrInterpreterLangList(CVars in, CVars &out)");
}
return ret;
}
/*
mermsemr=> SELECT i.*,l.language FROM interpreters_language i LEFT JOIN languages l ON l.code=i.lang_code WHERE agent_id=8;
id | pid | agent_id | interpreter_id | lang_code | document | document_id | weekend | flags | status | added | loc | language
----+-----+----------+----------------+-----------+----------+-------------+---------+-------+--------+----------------------------+-----------------+-----------------
71 | | 8 | 5 | L0019 | | 0 | 0 | 0 | 1 | 2017-10-14 20:05:29.179305 | 104.238.127.115 | Bislama
65 | | 8 | 5 | L0023 | | 0 | 0 | 0 | 1 | 2017-10-14 20:04:51.771004 | 104.238.127.115 | Burmese
*/
long medTrInterpreterLanguage(CVars in, CVars &out) {
logfmt(FLOG_MAX, "long medTrInterpreterLanguage(CVars in, CVars &out)");
long ret = PHP_API_BAD_PARAM;
const char * loc = getenv("REMOTE_ADDR");
try {
long mode = REQ_LONG(in, "mode", 0, -1);
REQ_LONG(in, "agent_id", 0, -1); // Always needed
if (mode == MODE_ADD) {
REQ_LONG(in, "interpreter_id", 0, -1);
REQ_STRING(in, "lang_code", 4, 6, "(.*)");
const PGresult *res = pgsql_query("SELECT * FROM interpreters_language WHERE agent_id = %lu AND interpreter_id=%lu AND lang_code='%s' ", in["agent_id"].Long(), in["interpreter_id"].Long(), in["lang_code"].c_str());
if (res != NULL && pgsql_num_rows(res) > 0) {
logfmt(FLOG_MAX, "*** Interpreter's language already exists ***");
map<const char*, const char*>f = pgsql_fetch_assoc(res, 0);
if (f.empty()) {
logfmt(FLOG_MAX, "Record is empty");
} else {
CVars rec;
map_to_cvars(f, rec);
rec["status"] = 1; rec["status"].set_valid(true);
update_db_record( DBS_VALID, "interpreters_language", rec, rec["id"].Long());
ret = PHP_API_OK;
}
} else {
CVars x;
x["interpreter_id"] = in["interpreter_id"];
x["interpreter_id"].set_valid(true);
x["agent_id"] = in["agent_id"];
x["agent_id"].set_valid(true);
x["lang_code"] = in["lang_code"];
x["lang_code"].set_valid(true);
x["loc"] = loc;
x["loc"].set_valid(true);
out["language_id"] = insert_db_record(DBS_VALID, "interpreters_language", "interpreters_language_id_seq", x);
if (out["language_id"].Long() > 0) {
ret = PHP_API_OK;
load_db_record(out, "SELECT i.*,l.language FROM interpreters_language i LEFT JOIN languages l ON l.code=i.lang_code WHERE i.id= %lu ", out["language_id"].Long());
agent_email_calls(in["action"].Long(), in, out);
}
}
}//end of if ( mode == MODE_ADD )
if (mode == MODE_UPDATE) {
REQ_LONG(in, "interpreter_id", 0, -1);
REQ_STRING(in, "lang_code", 4, 6, "(.*)");
REQ_LONG(in, "language_id", 0, -1);
REQ_LONG(in, "flags", 0, -1);
const PGresult *res1 = pgsql_query("SELECT * FROM interpreters_language WHERE status = 1 AND agent_id = %lu AND interpreter_id=%lu AND id=%lu ", in["agent_id"].Long(), in["interpreter_id"].Long(), in["language_id"].Long());
if (res1 != NULL && pgsql_num_rows(res1) > 0) {
pgsql_exec("UPDATE interpreters_language SET flags = %lu WHERE agent_id = %lu AND interpreter_id=%lu AND id=%lu ",in["flags"].Long(), in["agent_id"].Long(), in["interpreter_id"].Long(), in["language_id"].Long());
ret = PHP_API_OK;
}
else
{
out["status"] ="Error - Applicable entry not found";
}
}
if (mode == MODE_DELETE) {
REQ_LONG(in, "interpreter_id", 0, -1);
REQ_STRING(in, "lang_code", 4, 6, "(.*)");
REQ_LONG(in, "language_id", 0, -1);
const PGresult *res1 = pgsql_query("SELECT * FROM interpreters_language WHERE status = 1 AND agent_id = %lu AND interpreter_id=%lu AND id=%lu ", in["agent_id"].Long(), in["interpreter_id"].Long(), in["language_id"].Long());
if (res1 != NULL && pgsql_num_rows(res1) > 0) {
pgsql_exec("UPDATE interpreters_language SET status = 0 WHERE agent_id = %lu AND interpreter_id=%lu AND id=%lu ", in["agent_id"].Long(), in["interpreter_id"].Long(), in["language_id"].Long());
ret = PHP_API_OK;
}
else
{
out["status"] ="Error - Applicable entry not found";
}
}
} catch (bad_parameter) {
logfmt(logINFO, "ERROR CALL long medTrInterpreterLanguage(CVars in, CVars &out)");
}
logfmt(FLOG_MAX, "/long medTrInterpreterLanguage(CVars in, CVars &out)");
return ret;
}
long medTrTransporterTranslatortList(CVars in, CVars &out) {
long ret = PHP_API_BAD_PARAM;
char vname[20];
try {
REQ_LONG(in, "limit", 0, -1);
REQ_LONG(in, "agent_id", 0, -1);
out["total_record"] = "0";
const PGresult *res = pgsql_query("SELECT * FROM interpreters WHERE agent_id = %lu ORDER BY id DESC LIMIT %lu", in["agent_id"].Long(), in["limit"].Long());
// const PGresult *res = pgsql_query("SELECT * FROM interpreters WHERE agent_id >0 ORDER BY id DESC LIMIT %lu", in["limit"].Long());
if (res != NULL && pgsql_num_rows(res) > 0) {
out["total_record"] = pgsql_num_rows(res);
for (int i = 0, n = pgsql_num_rows(res); i < n; i++) {
map<const char*, const char*>f = pgsql_fetch_assoc(res, i);
if (f.empty()) continue;
CVars rec;
map_to_cvars(f, rec);
snprintf(vname, sizeof (vname), "firstname_%05d", i);
out[vname] = rec["firstname"];
snprintf(vname, sizeof (vname), "lastname_%05d", i);
out[vname] = rec["lastname"];
snprintf(vname, sizeof (vname), "id_%05d", i);
out[vname] = rec["id"];
snprintf(vname, sizeof (vname), "agent_id_%05d", i);
out[vname] = rec["agent_id"];
snprintf(vname, sizeof (vname), "street_%05d", i);
out[vname] = rec["street"];
snprintf(vname, sizeof (vname), "city_%05d", i);
out[vname] = rec["city"];
snprintf(vname, sizeof (vname), "zipcode_%05d", i);
out[vname] = rec["zipcode"];
snprintf(vname, sizeof (vname), "state_%05d", i);
out[vname] = rec["state"];
}
}
ret = PHP_API_OK;
out["status"] = "OK";
} catch (bad_parameter) {
logfmt(logINFO, "ERROR CALL long medTMemberLogin(CVars in, CVars &out)");
}
return ret;
}
long medTrTransporterLocationtList(CVars in, CVars &out) {
long ret = PHP_API_BAD_PARAM;
char vname[20];
try {
REQ_LONG(in, "limit", 0, -1);
REQ_LONG(in, "agent_id", 0, -1);
out["total_record"] = "0";
const PGresult *res = pgsql_query("SELECT * FROM transporter WHERE agent_id = %lu ORDER BY id DESC LIMIT %lu",in["agent_id"].Long(), in["limit"].Long());
if (res != NULL && pgsql_num_rows(res) > 0) {
out["total_record"] = pgsql_num_rows(res);
for (int i = 0, n = pgsql_num_rows(res); i < n; i++) {
map<const char*, const char*>f = pgsql_fetch_assoc(res, i);
if (f.empty()) continue;
CVars rec;
map_to_cvars(f, rec);
snprintf(vname, sizeof (vname), "id_%05d", i);
out[vname] = rec["id"];
snprintf(vname, sizeof (vname), "agent_id_%05d", i);
out[vname] = rec["agent_id"];
snprintf(vname, sizeof (vname), "street_%05d", i);
out[vname] = rec["street"];
snprintf(vname, sizeof (vname), "city_%05d", i);
out[vname] = rec["city"];
snprintf(vname, sizeof (vname), "zipcode_%05d", i);
out[vname] = rec["zipcode"];
snprintf(vname, sizeof (vname), "state_%05d", i);
out[vname] = rec["state"];
snprintf(vname, sizeof (vname), "loc_name_%05d", i);
out[vname] = rec["loc_name"];
}
}
ret = PHP_API_OK;
out["status"] = "OK";
} catch (bad_parameter) {
logfmt(logINFO, "ERROR CALL long medTMemberLogin(CVars in, CVars &out)");
}
return ret;
}
long medTrLoadTransporter(CVars in, CVars &out) {
long ret = PHP_API_BAD_PARAM;
logfmt(logINFO, "medTrLoadTransporter()");
try {
REQ_LONG(in, "pid", 0, -1);
long agent_id = REQ_LONG(in, "agent_id", 0, -1);
long transporter_id = REQ_LONG(in, "transporter_id", 0, -1);
ret = load_db_record(out, "SELECT *,id AS transporter_id FROM transporter WHERE id=%lu AND agent_id=%lu",transporter_id, agent_id);
logfmt(logINFO, "~~~~ **** medTrLoadTransporter(CVars in, CVars &out) ret==>%d", ret);
if (ret > 0) {
if (transporter_id>0) {
load_db_record(out, "SELECT *,id AS transporter_id FROM transporter WHERE id= %lu ", transporter_id);
if (out["transporter_id"].Long()>0) {
ret = PHP_API_OK;
out["status"] = "1";
} else {
out["status"] = "Transporter is not found";
}
} else {
out["status"] = "Invalid transporter id";
}
} else {
out["status"] = "Invalid or wrong agent type";
}
} catch (bad_parameter) {
logfmt(logINFO, "ERROR CALL long medTrLoadTransporter(CVars in, CVars &out)");
out["status"] = "Invalid input";
}
logfmt(logINFO, "/medTrLoadTransporter()");
return ret;
}
long medTrCreateTransporter(CVars in, CVars &out) {
long ret = PHP_API_BAD_PARAM;
logfmt(logINFO, "medTrCreateTransporter()");
try {
REQ_LONG(in, "pid", 0, -1);
long agent_id = REQ_LONG(in, "agent_id", 0, -1);
REQ_STRING(in, "street", 5, 49, "(.*)");
REQ_STRING(in, "zipcode", 3, 12, "(.*)");
OPTIONAL(in, "phone") REQ_STRING(in, "phone", 5, 23, "(.*)");
REQ_STRING(in, "city", 5, 49, "(.*)");
REQ_STRING(in, "state", 2, 25, "(.*)");
REQ_STRING(in, "loc_name", 1, 49, "(.*)");
const char * loc = getenv("REMOTE_ADDR");
ret = load_db_record(out, "SELECT *,id AS agent_id FROM agents WHERE id=%lu AND agent_type IN (1,3) ", agent_id);
logfmt(logINFO, "~~~~ **** medTrCreateIntepreter(CVars in, CVars &out) ret==>%d", ret);
if (ret > 0) {
// LETS CREATE THE REQUEST NOW
CVars x;
x["pid"] = in["pid"];
x["pid"].set_valid(true);
x["agent_id"] = in["agent_id"];
x["agent_id"].set_valid(true);
x["loc_name"] = in["loc_name"];
x["loc_name"].set_valid(true);
x["street"] = in["street"];
x["street"].set_valid(true);
x["zipcode"] = in["zipcode"];
x["zipcode"].set_valid(true);
x["phone"] = in["phone"];
x["phone"].set_valid(true);
x["city"] = in["city"];
x["city"].set_valid(true);
x["state"] = in["state"];
x["state"].set_valid(true);
x["loc"] = loc;
x["loc"].set_valid(true);
x["country"] = "US";
x["country"].set_valid(true);
out["transporter_id"] = insert_db_record(DBS_VALID, "transporter", "transporter_id_seq", x);
if (out["interpreter_id"].Long() > 0) {
ret = PHP_API_OK;
load_db_record(out, "SELECT *,id AS transporter_id FROM transporter WHERE id= %lu ", out["transporter_id"].Long());
agent_email_calls(in["action"].Long(), in, out);
}
} else {
ret = PHP_API_BAD_PARAM;
out["status"] = "Invalid or wrong agent type";
}
} catch (bad_parameter) {
logfmt(logINFO, "ERROR CALL long medTrCreateTransporter(CVars in, CVars &out)");
}
logfmt(logINFO, "/medTrCreateTransporter()");
return ret;
}
// transport_date::time
long medTrTransporterTransportList(CVars in, CVars &out) {
long ret = PHP_API_BAD_PARAM;
char vname[30];
try {
REQ_LONG(in, "limit", 0, -1);
REQ_LONG(in, "agent_id", 0, -1);
REQ_LONG(in, "transport_id", 0, -1);
out["total_record"] = "0";
const PGresult *res;
if (in["transport_id"].Long() > 0) {
// res = pgsql_query("SELECT *,transport_date::time AS transport_time FROM members_transport_request WHERE id = %lu", in["transport_id"].Long());
res = pgsql_query("SELECT r.*,r.transport_date::time AS transport_time,a.added AS assign_date FROM members_transport_request r LEFT JOIN transport_assignment a ON a.transport_id = r.id WHERE a.agent_id=%lu AND r.id =%lu", in["agent_id"].Long(), in["transport_id"].Long());
} else {
res = pgsql_query("SELECT r.*,r.transport_date::time AS transport_time,a.added AS assign_date FROM members_transport_request r LEFT JOIN transport_assignment a ON a.transport_id = r.id WHERE a.agent_id=%lu AND a.flags IN (0,2,4,5) ORDER BY r.id DESC LIMIT %lu", in["agent_id"].Long(), in["limit"].Long());
}
if (res != NULL && pgsql_num_rows(res) > 0) {
out["total_record"] = pgsql_num_rows(res);
for (int i = 0, n = pgsql_num_rows(res); i < n; i++) {
map<const char*, const char*>f = pgsql_fetch_assoc(res, i);
if (f.empty()) continue;
CVars rec;
map_to_cvars(f, rec);
snprintf(vname, sizeof (vname), "transport_date_%05d", i);
out[vname] = rec["transport_date"];
snprintf(vname, sizeof (vname), "firstname_%05d", i);
out[vname] = rec["firstname"];
snprintf(vname, sizeof (vname), "id_%05d", i);
out[vname] = rec["id"];
snprintf(vname, sizeof (vname), "lastname_%05d", i);
out[vname] = rec["lastname"];
snprintf(vname, sizeof (vname), "from_street_%05d", i);
out[vname] = rec["from_street"];
snprintf(vname, sizeof (vname), "to_street_%05d", i);
out[vname] = rec["to_street"];
snprintf(vname, sizeof (vname), "from_city_%05d", i);
out[vname] = rec["from_city"];
snprintf(vname, sizeof (vname), "to_city_%05d", i);
out[vname] = rec["to_city"];
snprintf(vname, sizeof (vname), "from_state_%05d", i);
out[vname] = rec["from_state"];
snprintf(vname, sizeof (vname), "to_state_%05d", i);
out[vname] = rec["to_state"];
snprintf(vname, sizeof (vname), "from_zipcode_%05d", i);
out[vname] = rec["from_zipcode"];
snprintf(vname, sizeof (vname), "to_zipcode_%05d", i);
out[vname] = rec["to_zipcode"];
snprintf(vname, sizeof (vname), "flags_%05d", i);
out[vname] = rec["flags"];
snprintf(vname, sizeof (vname), "from_phone_%05d", i);
out[vname] = rec["from_phone"]; //"20.7 ml";
snprintf(vname, sizeof (vname), "distance_%05d", i);
out[vname] = rec["miles"]; //"20.7 ml";
snprintf(vname, sizeof (vname), "transport_%05d", i);
out[vname] = rec["transport"]; //"20.7 ml";
snprintf(vname, sizeof (vname), "translate_%05d", i);
out[vname] = rec["translate"]; //"20.7 ml";
snprintf(vname, sizeof (vname), "transport_time_%05d", i);
out[vname] = rec["transport_time"];
snprintf(vname, sizeof (vname), "lang_code_%05d", i);
out[vname] = rec["lang_code"]; //
snprintf(vname, sizeof (vname), "status_%05d", i);
out[vname] = rec["status"]; //
snprintf(vname, sizeof (vname), "assign_date_%05d", i);
out[vname] = rec["assign_date"]; //
snprintf(vname, sizeof (vname), "dist_mode_%05d", i);
out[vname] = rec["dist_mode"]; //
}
}
ret = PHP_API_OK;
out["status"] = "OK";
} catch (bad_parameter) {
logfmt(logINFO, "ERROR CALL long medTMemberLogin(CVars in, CVars &out)");
}
return ret;
}
long TranspLoginAdmin(CVars in, CVars &out) {
long ret = PHP_API_BAD_PARAM;
try {
REQ_STRING(in, "username", 2, 49, "(.*)");
REQ_STRING(in, "password", 2, 49, "(.*)");
const char * loc = getenv("REMOTE_ADDR");
ret = load_db_record(out, "SELECT UPPER( md5( now()::text) ) AS sessionid,m.*,m.id AS agent_id FROM agents m \
WHERE m.status=1 AND LOWER(m.username)=LOWER('%s') AND m.password= md5('%s')", in["username"].c_str(), in["password"].c_str());
if (ret && out["agent_id"].Long() > 0) {
// remove all existing session
if ( out["folder"].length() < 5 ) // backward compatibility - you all need folder path
{
char folder[15] = "";
GenerateAgentFolder(out["agent_id"].Long(), folder, sizeof (folder));
}
pgsql_exec("DELETE FROM agents_session WHERE agent_id=%ld ", out["agent_id"].Long());
// Create New Session Now
if (TransporterSessionCheck(out["id"].Long(), out["sessionid"].c_str(), 1) > 0) {
out["stauts"] = "OK";
/*LOAD THE SESSION INTO OUT now */
load_db_record(out, "SELECT session FROM agents_session WHERE agent_id=%lu ORDER BY id DESC LIMIT 1", out["agent_id"].Long());
//===============================================================================================================================
pgsql_query("UPDATE agents SET last_login = now() WHERE id = %lu", out["agent_id"].Long());
// account_email(ACCOUNT_LOGIN_ALERT,out,out); // ALERT CUSTOMER OF LOGIN
ret = PHP_LOGIN_OK;
} else {
out["status"] = "Session check failed";
}
} else {
out["status_message"] = "Invalid Username/Password";
}
} catch (bad_parameter) {
logfmt(logINFO, "ERROR CALL long medTMemberLogin(CVars in, CVars &out)");
}
return ret;
}
long TransporterSessionCheck(long uid, const char *sessionid, int create) {
logfmt(logINFO, "long TransporterSessionCheck(long uid, const char *sessionid, int create )");
// Sanity check
if (uid < 1 || sessionid == NULL || strlen(sessionid) < 4) {
return -1L; // Invalif parameters
}
if (create == 1) // Clean Previous session by force
{
pgsql_exec("DELETE FROM agents_session WHERE agent_id=%ld", uid);
}
long session_expired_minutes = 15; // load in the global
// Clean old sessions
pgsql_exec("DELETE FROM agents_session WHERE agent_id=%ld AND updated < (now() - interval '%lu minutes')", uid, session_expired_minutes);
// Update/check existing session
if (create == 0) {
pgsql_exec("UPDATE agents_session SET updated=NOW() WHERE agent_id=%ld AND session='%s'", uid, sessionid);
const PGresult *res = pgsql_query("SELECT * FROM agents_session WHERE agent_id=%ld AND session='%s'", uid, sessionid);
if (res != NULL && pgsql_num_rows(res) > 0) {
logfmt(logINFO, "VALID SESSION *****");
return 1L; // Session updated
} else {
logfmt(logINFO, "INVALID SESSION *****");
//INVALID SESSION DETECTED
return -1L; // Invalid parameters
}
}
if (create > 0) {
// Check session i?
const PGresult *res = pgsql_query("SELECT * FROM agents_session WHERE agent_id=%ld AND session<>'%s'", uid, sessionid);
if (res != NULL && pgsql_num_rows(res) > 0) {
return -2L; // Active sessions found
}
CVars sess; // Do we have the same session already?
if (load_db_record(sess, "SELECT * FROM agents_session WHERE agent_id=%lu AND session='%s'", uid, sessionid) > 0) {
pgsql_exec("UPDATE agents_session SET updated=NOW() WHERE agent_id=%lu AND session='%s'", uid, sessionid);
return sess["id"].Long();
}
// Create a new session
const char * loc = getenv("REMOTE_ADDR");
sess["loc"] = loc;
sess["loc"].set_valid(true);
sess["agent_id"] = uid;
sess["agent_id"].set_valid(true);
sess["session"] = sessionid;
sess["session"].set_valid(true);
long sid = insert_db_record(DBS_VALID, "agents_session", "agents_session_id_seq", sess); //agents_session_id_seq
if (sid > 0) {
return sid; // New session created
}
return -3L; // Failed to create new session
}
logfmt(logINFO, "/long TransporterSessionCheck(long uid, const char *sessionid, int create )");
return 0L; // No route
}
long medTrCreateAgent(CVars in, CVars &out) {
long ret = PHP_API_BAD_PARAM;
logfmt(logINFO, "medTrCreateAgent()");
try {
REQ_LONG(in, "pid", 0, -1);
long agent_type = REQ_LONG(in, "agent_type", 0, -1);
REQ_STRING(in, "agent_name", 2, 49, "(.*)");
REQ_STRING(in, "firstname", 2, 49, "(.*)");
REQ_STRING(in, "lastname", 2, 49, "(.*)");
REQ_STRING(in, "username", 2, 49, "(.*)"); // note same as email
REQ_STRING(in, "password", 2, 15, "(.*)");
OPTIONAL(in, "login") REQ_LONG(in, "login", 0, -1);
REQ_STRING(in, "street", 5, 49, "(.*)");
REQ_STRING(in, "zipcode", 3, 12, "(.*)");
OPTIONAL(in, "phone") REQ_STRING(in, "phone", 5, 23, "(.*)");
REQ_STRING(in, "city", 5, 49, "(.*)");
REQ_STRING(in, "state", 2, 25, "(.*)");
//REQ_STRING (in, "sessionid", 4, 40, "(.*)");
const char * loc = getenv("REMOTE_ADDR");
long login = 0 + in["login"].Long();
ret = load_db_record(out, "SELECT *,id AS agent_id FROM agents WHERE lower(username)=lower('%s') ", in["username"].c_str());
logfmt(logINFO, "~~~~ **** medTrCreateAgent(CVars in, CVars &out) ret==>%d", ret);
if (ret <= 0 && agent_type > 0) {
// LETS CREATE THE REQUEST NOW
CVars x;
x["pid"] = in["pid"];
x["pid"].set_valid(true);
// x["agent_type"] = in["agent_type"];
// x["agent_type"].set_valid(true);
x["username"] = in["username"];
x["username"].set_valid(true);
x["email"] = in["username"];
x["email"].set_valid(true);
x["firstname"] = in["firstname"];
x["firstname"].set_valid(true);
x["lastname"] = in["lastname"];
x["lastname"].set_valid(true);
x["street"] = in["street"];
x["street"].set_valid(true);
x["agent_name"] = in["agent_name"];
x["agent_name"].set_valid(true);
x["zipcode"] = in["zipcode"];
x["zipcode"].set_valid(true);
x["phone"] = in["phone"];
x["phone"].set_valid(true);
x["city"] = in["city"];
x["city"].set_valid(true);
x["state"] = in["state"];
x["state"].set_valid(true);
x["loc"] = loc;
x["loc"].set_valid(true);
x["country"] = "US";
x["country"].set_valid(true);
out["agent_id"] = insert_db_record(DBS_VALID, "agents", "agents_id_seq", x);
if (out["agent_id"].Long() > 0) {
pgsql_query("UPDATE agents SET password = md5('%s') WHERE id = %lu", in["password"].c_str(), out["agent_id"].Long()); // setting the password MD5 now
char folder[15] = "";
GenerateAgentFolder(out["agent_id"].Long(), folder, sizeof (folder)); // this stamp the offer code directly in that call
/*
if (agent_type == 1 || agent_type == 3) {
CVars y;
y["street"] = in["street"];
y["street"].set_valid(true);
y["agent_id"] = out["agent_id"];
y["agent_id"].set_valid(true);
y["zipcode"] = in["zipcode"];
y["zipcode"].set_valid(true);
y["phone"] = in["phone"];
y["phone"].set_valid(true);
y["city"] = in["city"];
y["city"].set_valid(true);
y["state"] = in["state"];
y["state"].set_valid(true);
y["loc_name"] = "Main Branch";
y["loc_name"].set_valid(true);
y["loc"] = loc;
y["loc"].set_valid(true);
y["country"] = "US";
y["country"].set_valid(true);
out["agent_id"] = insert_db_record(DBS_VALID, "transporter", "transporter_id_seq", y);
}
*/
// Now Send Email
// ==============
}
if (login == 1) {
return TranspLoginAdmin(in, out);
} else {
load_db_record(out, "SELECT *,id AS agent_id FROM agents WHERE id= %lu ", out["agent_id"].Long());
}
}
} catch (bad_parameter) {
logfmt(logINFO, "ERROR CALL long medTrCreateAgent(CVars in, CVars &out)");
}
logfmt(logINFO, "/medTrCreateAgent()");
return 0;
}
void GenerateSeed( char * number, int sz, int seed )
{
char chars[] = "WRB01234WRB56789WRB";
int n = sizeof(chars);
int i;
srand((unsigned int)time((time_t *)NULL));
for ( i=0; i<10 && i<sz-1; i++ )
{
int k = seed%n;
if (seed>1 && k==i) {
number[i] = chars[n-k];
} else {
number[i] = chars[ (int) ( (n-1.0)*rand()/(RAND_MAX+1.0)) ];
}
}
number[i] = 0;
}
void GenerateAgentFolder(unsigned long agent_id, char * number, int sz) {
SQLINTEGER rows;
char confirmation[11];
// Lock table to prevent generation of two identical confirmation numbers
pgsql_exec("BEGIN; LOCK TABLE agents;");
int i = 0;
do {
GenerateSeed(confirmation, sizeof (confirmation), i++);
//st.CloseCursor();
rows = 0;
const PGresult *res = pgsql_query("SELECT id FROM agents WHERE folder='%s'", confirmation);
if (res != NULL) {
rows = pgsql_num_rows(res);
}
} while (rows > 0 && i < 100);
pgsql_exec("UPDATE agents SET folder='%s' WHERE id=%lu AND folder IS NULL", confirmation, agent_id);
pgsql_exec("COMMIT"); // Unlock table 'data'
strsafecpy(number, confirmation, sz);
}
long medTrCreateIntepreter(CVars in, CVars &out) {
long ret = PHP_API_BAD_PARAM;
logfmt(logINFO, "medTrCreateIntepreter()");
try {
REQ_LONG(in, "pid", 0, -1);
long agent_id = REQ_LONG(in, "agent_id", 0, -1);
REQ_STRING(in, "firstname", 2, 49, "(.*)");
REQ_STRING(in, "lastname", 2, 49, "(.*)");
REQ_STRING(in, "email", 5, 49, "(.*)");
REQ_STRING(in, "street", 5, 49, "(.*)");
REQ_STRING(in, "zipcode", 3, 12, "(.*)");
OPTIONAL(in, "phone") REQ_STRING(in, "phone", 5, 23, "(.*)");
REQ_STRING(in, "city", 5, 49, "(.*)");
REQ_STRING(in, "state", 2, 25, "(.*)");
const char * loc = getenv("REMOTE_ADDR");
long login = 0 + in["login"].Long();
ret = load_db_record(out, "SELECT *,id AS agent_id FROM agents WHERE id=%lu AND agent_type IN (2,3) ", agent_id);
logfmt(logINFO, "~~~~ **** medTrCreateIntepreter(CVars in, CVars &out) ret==>%d", ret);
if (ret > 0) {
// LETS CREATE THE REQUEST NOW
CVars x;
x["pid"] = in["pid"];
x["pid"].set_valid(true);
x["agent_id"] = in["agent_id"];
x["agent_id"].set_valid(true);
x["email"] = in["email"];
x["email"].set_valid(true);
x["firstname"] = in["firstname"];
x["firstname"].set_valid(true);
x["lastname"] = in["lastname"];
x["lastname"].set_valid(true);
x["street"] = in["street"];
x["street"].set_valid(true);
x["zipcode"] = in["zipcode"];
x["zipcode"].set_valid(true);
x["phone"] = in["phone"];
x["phone"].set_valid(true);
x["city"] = in["city"];
x["city"].set_valid(true);
x["state"] = in["state"];
x["state"].set_valid(true);
x["loc"] = loc;
x["loc"].set_valid(true);
x["country"] = "US";
x["country"].set_valid(true);
out["interpreter_id"] = insert_db_record(DBS_VALID, "interpreters", "interpreters_id_seq", x);
if (out["interpreter_id"].Long() > 0) {
ret = PHP_API_OK;
load_db_record(out, "SELECT *,id AS interpreter_id FROM interpreters WHERE id= %lu ", out["interpreter_id"].Long());
agent_email_calls(in["action"].Long(), in, out);
}
} else {
ret = PHP_API_BAD_PARAM;
out["status"] = "Invalid or wrong agent type";
}
} catch (bad_parameter) {
logfmt(logINFO, "ERROR CALL long medTrCreateIntepreter(CVars in, CVars &out)");
}
logfmt(logINFO, "/medTrCreateIntepreter()");
return ret;
}
long medTrLoadIntepreter(CVars in, CVars &out) {
long ret = PHP_API_BAD_PARAM;
logfmt(logINFO, "medTrLoadItepreter()");
try {
REQ_LONG(in, "pid", 0, -1);
long agent_id = REQ_LONG(in, "agent_id", 0, -1);
long interpreter_id = REQ_LONG(in, "interpreter_id", 0, -1);
ret = load_db_record(out, "SELECT *,id AS interpreter_id FROM interpreters WHERE id=%lu AND agent_id=%lu",interpreter_id, agent_id);
logfmt(logINFO, "~~~~ **** medTrLoadItepreter(CVars in, CVars &out) ret==>%d", ret);
if (ret > 0) {
if (interpreter_id>0) {
load_db_record(out, "SELECT *,id AS interpreter_id FROM interpreters WHERE id= %lu ", interpreter_id);
if (out["interpreter_id"].Long()>0) {
ret = PHP_API_OK;
out["status"] = "1";
} else {
out["status"] = "Interpreter is not found";
}
} else {
out["status"] = "Invalid interpreter id";
}
} else {
out["status"] = "Invalid or wrong agent type";
}
} catch (bad_parameter) {
logfmt(logINFO, "ERROR CALL long medTrLoadItepreter(CVars in, CVars &out)");
out["status"] = "Invalid input";
}
logfmt(logINFO, "/medTrLoadItepreter()");
return ret;
}
long medTrUpdateTransporter(CVars in, CVars &out) {
long ret = PHP_API_BAD_PARAM;
try {
REQ_LONG(in, "pid", 0, -1);
long agent_id = REQ_LONG(in, "agent_id", 0, -1);
long transporter_id = REQ_LONG(in, "transporter_id", 0, -1);
REQ_STRING(in, "loc_name", 2, 49, "(.*)");
REQ_STRING(in, "street", 5, 49, "(.*)");
REQ_STRING(in, "zipcode", 3, 12, "(.*)");
OPTIONAL(in, "phone") REQ_STRING(in, "phone", 5, 23, "(.*)");
REQ_STRING(in, "city", 5, 49, "(.*)");
REQ_STRING(in, "state", 2, 25, "(.*)");
const char * loc = getenv("REMOTE_ADDR");
/*
mermsemr=> select * from transporter;
id | pid | agent_id | street | city | zipcode | phone | state | country | added | loc | loc_name
----+-----+----------+-------------------------------+----------------+---------+------------+-------+---------+----------------------------+-----------------+-----------------------
32 | 100 | 28 | 10641 Barberry Drive | Hampton | 30228 | | GA | US | 2017-10-13 13:43:31.098596 | 104.238.127.115 | My ayodeji Branch
1 | | 1 | 2085 market place blvd | cumming | 30041 | | GA | US | 2017-10-05 14:30:43.106611 | 104.238.127.115 | cumming Branch
2 | | 3 | 5025 jimmy lee smith pkwy | hiram | 30141 | | GA | US | 2017-10-05 14:45:11.384743 | 104.238.127.115 | hiram Branch
3 | | 4 | 3205 woodward crossing blvd | buford | 30519 | | GA | US | 2017-10-05 14:49:38.489784 | 104.238.127.115 | buford Branch
4 | | 5 | 2085 market place blvd | cumming | 30041 | | GA | US | 2017-10-05 14:50:04.443468 | 104.238.127.115 | cumming Branch
*/
ret = load_db_record(out, "SELECT *,id AS transporter_id FROM transporter WHERE id=%lu AND agent_id=%lu",transporter_id, agent_id);
logfmt(logINFO, "~~~~ **** medTrUpdateItepreter(CVars in, CVars &out) ret==>%d", ret);
if (ret > 0) {
// LETS CREATE THE REQUEST NOW
CVars x;
x["pid"] = in["pid"];
x["pid"].set_valid(true);
// x["agent_id"] = in["agent_id"];
// x["agent_id"].set_valid(true);
x["loc_name"] = in["loc_name"];
x["loc_name"].set_valid(true);
x["street"] = in["street"];
x["street"].set_valid(true);
x["zipcode"] = in["zipcode"];
x["zipcode"].set_valid(true);
x["phone"] = in["phone"];
x["phone"].set_valid(true);
x["city"] = in["city"];
x["city"].set_valid(true);
x["state"] = in["state"];
x["state"].set_valid(true);
x["loc"] = loc;
x["loc"].set_valid(true);
x["country"] = "US";
x["country"].set_valid(true);
update_db_record( DBS_VALID, "transporter", x, in["transporter_id"].Long());
if (1) {
ret = PHP_API_OK;
load_db_record(out, "SELECT *,id AS transporter_id FROM transporter WHERE id= %lu ", out["transporter_id"].Long());
agent_email_calls(in["action"].Long(), in, out);
}
} else {
ret = PHP_API_BAD_PARAM;
out["status"] = "Invalid or wrong agent type";
}
} catch (bad_parameter) {
logfmt(logINFO, "ERROR CALL long medTrUpdateTransporter(CVars in, CVars &out)");
}
logfmt(logINFO, "/medTrUpdateTransporter()");
return ret;
}
long medTrUpdateItepreter(CVars in, CVars &out) {
long ret = PHP_API_BAD_PARAM;
logfmt(logINFO, "medTrUpdateItepreter()");
try {
REQ_LONG(in, "pid", 0, -1);
long agent_id = REQ_LONG(in, "agent_id", 0, -1);
long interpreter_id = REQ_LONG(in, "interpreter_id", 0, -1);
REQ_STRING(in, "firstname", 2, 49, "(.*)");
REQ_STRING(in, "lastname", 2, 49, "(.*)");
REQ_STRING(in, "email", 5, 49, "(.*)");
REQ_STRING(in, "street", 5, 49, "(.*)");
REQ_STRING(in, "zipcode", 3, 12, "(.*)");
OPTIONAL(in, "phone") REQ_STRING(in, "phone", 5, 23, "(.*)");
REQ_STRING(in, "city", 5, 49, "(.*)");
REQ_STRING(in, "state", 2, 25, "(.*)");
const char * loc = getenv("REMOTE_ADDR");
long login = 0 + in["login"].Long();
ret = load_db_record(out, "SELECT *,id AS interpreter_id FROM interpreters WHERE id=%lu AND agent_id=%lu",interpreter_id, agent_id);
logfmt(logINFO, "~~~~ **** medTrUpdateItepreter(CVars in, CVars &out) ret==>%d", ret);
if (ret > 0) {
// LETS CREATE THE REQUEST NOW
CVars x;
x["pid"] = in["pid"];
x["pid"].set_valid(true);
// x["agent_id"] = in["agent_id"];
// x["agent_id"].set_valid(true);
x["email"] = in["email"];
x["email"].set_valid(true);
x["firstname"] = in["firstname"];
x["firstname"].set_valid(true);
x["lastname"] = in["lastname"];
x["lastname"].set_valid(true);
x["street"] = in["street"];
x["street"].set_valid(true);
x["zipcode"] = in["zipcode"];
x["zipcode"].set_valid(true);
x["phone"] = in["phone"];
x["phone"].set_valid(true);
x["city"] = in["city"];
x["city"].set_valid(true);
x["state"] = in["state"];
x["state"].set_valid(true);
x["loc"] = loc;
x["loc"].set_valid(true);
x["country"] = "US";
x["country"].set_valid(true);
update_db_record( DBS_VALID, "interpreters", x, in["interpreter_id"].Long());
if (1) {
ret = PHP_API_OK;
load_db_record(out, "SELECT *,id AS interpreter_id FROM interpreters WHERE id= %lu ", out["interpreter_id"].Long());
agent_email_calls(in["action"].Long(), in, out);
}
} else {
ret = PHP_API_BAD_PARAM;
out["status"] = "Invalid or wrong agent type";
}
} catch (bad_parameter) {
logfmt(logINFO, "ERROR CALL long medTrUpdateItepreter(CVars in, CVars &out)");
}
logfmt(logINFO, "/medTrUpdateItepreter()");
return ret;
}