Backend
This commit is contained in:
@@ -0,0 +1,81 @@
|
||||
// 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 "function_members.h"
|
||||
#include "creditcards.h"
|
||||
#include "stripe_charge.h"
|
||||
|
||||
/*****************************************************************************/
|
||||
long save_creditcard(CVars in, CVars &out) {
|
||||
logfmt(FLOG_MAX, "long save_creditcard(CVars in, CVars &out)" );
|
||||
long card_id = 0;
|
||||
|
||||
|
||||
try {
|
||||
CVars v;
|
||||
|
||||
REQ_LONG(in, "member_id", 1, -1); // Does not make any sence without member persitence
|
||||
REQ_STRING(in, "cardnumber", 12, 16, "(.*)"); //4111111111111111"
|
||||
REQ_STRING(in, "cvc", 3, 4, "(.*)"); //234"
|
||||
REQ_LONG(in, "paymenttype", 0, -1);
|
||||
REQ_STRING(in, "exp_month", 2, 2, "(.*)");
|
||||
REQ_STRING(in, "exp_year", 4, 4, "(.*)");
|
||||
|
||||
if ( load_db_record( v, "SELECT b.member_id,a.firstname,a.lastname,b.street1,b.street2,b.city,b.zipcode AS postal,b.state,b.country FROM members a, members_profile b WHERE a.id=%lu AND b.member_id=a.id", in["member_id"].Long()) > 0) {
|
||||
|
||||
logfmt(logDEBUG, "Loaded member %s %s", v["firstname"].c_str(), v["lastname"].c_str());
|
||||
|
||||
v["member_id"].set_valid(true);
|
||||
v["firstname"].set_valid(true);
|
||||
v["lastname"].set_valid(true);
|
||||
v["street1"].set_valid(true);
|
||||
v["street2"].set_valid(true);
|
||||
v["city"].set_valid(true);
|
||||
v["state"].set_valid(true);
|
||||
v["postal"].set_valid(true);
|
||||
v["country"].set_valid(true);
|
||||
|
||||
v["type"] = in["paymenttype"];
|
||||
v["type"].set_valid(true);
|
||||
|
||||
v["card"] = in["cardnumber"]; /* could be dirty */
|
||||
v["cvv2"] = in["cvc"]; /* we are not saving it */
|
||||
|
||||
v["digits"] = in["cardnumber"].substr(in["cardnumber"].length() - 4, 4);
|
||||
v["digits"].set_valid(true);
|
||||
|
||||
v["description"] = in["description"];
|
||||
v["description"].set_valid(true);
|
||||
|
||||
v["expiration_month"] = in["exp_month"];
|
||||
v["expiration_month"].set_valid(true);
|
||||
v["expiration_year"] = in["exp_year"];
|
||||
v["expiration_year"].set_valid(true);
|
||||
|
||||
logfmt(logDEBUG, "About to call stripe: ");
|
||||
card_id = stripe_save_card(v, out);
|
||||
|
||||
if (card_id > 0 )
|
||||
{
|
||||
pgsql_exec("UPDATE members SET def_card=%lu WHERE id=%lu", card_id, in["member_id"].Long() );
|
||||
}
|
||||
logfmt(logDEBUG, "...stripe call complete!");
|
||||
} else {
|
||||
logfmt(FLOG_MAX, "No member data loaded!" );
|
||||
throw bad_parameter( in, "member_id" );
|
||||
}
|
||||
} catch (bad_parameter) {
|
||||
card_id = PHP_API_BAD_PARAM;
|
||||
}
|
||||
logfmt(FLOG_MAX, "/long save_creditcard(CVars in, CVars &out)" );
|
||||
return card_id;
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,166 @@
|
||||
// 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_backoffice.h"
|
||||
|
||||
|
||||
long BkoCommonSessionCheck(long backoffice_id, long shop, long acc, const char *sessionid, int create);
|
||||
|
||||
long LoginBkoAdmin(CVars in, CVars &out) {
|
||||
long ret = PHP_API_BAD_PARAM;
|
||||
logfmt(logINFO, "LoginBkoAdmin()");
|
||||
REQ_STRING(in, "username", 5, 49, "(.*)");
|
||||
REQ_STRING(in, "password", 5, 49, "(.*)");
|
||||
//REQ_STRING (in, "sessionid", 4, 40, "(.*)");
|
||||
const char * loc = getenv("REMOTE_ADDR");
|
||||
|
||||
load_db_record(out, "SELECT md5( md5('now()')||'%d' ) AS sessionid", rand()*10000);
|
||||
in["sessionid"] = out["sessionid"];
|
||||
in["sessionid"].set_valid(true);
|
||||
|
||||
|
||||
ret = load_db_record(out, "SELECT *,id AS backoffice_id FROM bko_users WHERE status=1 AND LOWER(username)=LOWER('%s') AND password= md5('%s')", in["username"].c_str(), in["password"].c_str());
|
||||
if (ret > 0) {
|
||||
if (BkoCommonSessionCheck(out["id"].Long(), 0, 0, in["sessionid"].c_str(), 1) > 0) {
|
||||
out["stauts"] = "OK";
|
||||
CVars y;
|
||||
y["user_id"] = out["backoffice_id"];
|
||||
y["user_id"].set_valid(true);
|
||||
y["action"] = "Back Office Login";
|
||||
y["action"].set_valid(true);
|
||||
y["loc"] = loc;
|
||||
y["loc"].set_valid(true);
|
||||
insert_db_record(DBS_VALID, "bko_users_log", "bko_users_log_id_seq", y);
|
||||
|
||||
ret = PHP_API_OK;
|
||||
} else {
|
||||
out["status"] = "Session check failed";
|
||||
}
|
||||
} else {
|
||||
out["status"] = "Invalid username and/or password";
|
||||
}
|
||||
|
||||
logfmt(logINFO, "/LoginBkoAdmin()");
|
||||
return ret;
|
||||
}
|
||||
|
||||
long createBkoAdmin(CVars in, CVars &out) {
|
||||
long ret = PHP_API_BAD_PARAM;
|
||||
logfmt(logINFO, "medTrCreateMember()");
|
||||
try {
|
||||
REQ_LONG(in, "pid", 0, -1);
|
||||
REQ_STRING(in, "username", 5, 49, "(.*)");
|
||||
REQ_STRING(in, "firstname", 2, 49, "(.*)");
|
||||
REQ_STRING(in, "lastname", 2, 49, "(.*)");
|
||||
OPTIONAL(in, "phone") REQ_STRING(in, "phone", 5, 23, "(.*)");
|
||||
REQ_STRING(in, "password", 5, 49, "(.*)");
|
||||
OPTIONAL(in, "phone") REQ_STRING(in, "loc", 5, 16, "(.*)");
|
||||
REQ_LONG(in, "plevel", 0, -1);
|
||||
|
||||
//REQ_STRING (in, "sessionid", 4, 40, "(.*)");
|
||||
const char * loc = getenv("REMOTE_ADDR");
|
||||
|
||||
const PGresult *res = pgsql_query("SELECT * FROM bko_users WHERE lower(username)=lower('%s')", in["username"].c_str());
|
||||
if (res != NULL && pgsql_num_rows(res) > 0) {
|
||||
out["status"] = "Dulipcate username not allowed";
|
||||
return PHP_API_BAD_PARAM; // Active sessions found
|
||||
}
|
||||
|
||||
CVars x;
|
||||
x["pid"] = in["pid"];
|
||||
x["pid"].set_valid(true);
|
||||
x["firstname"] = in["firstname"];
|
||||
x["firstname"].set_valid(true);
|
||||
x["lastname"] = in["lastname"];
|
||||
x["lastname"].set_valid(true);
|
||||
x["email"] = in["email"];
|
||||
x["email"].set_valid(true);
|
||||
x["username"] = in["username"];
|
||||
x["username"].set_valid(true);
|
||||
x["plevel"] = in["plevel"];
|
||||
x["plevel"].set_valid(true);
|
||||
x["password"] = "TEMP_ENTRY";
|
||||
x["password"].set_valid(true);
|
||||
long bko_user_id = insert_db_record(DBS_VALID, "bko_users", "bko_users_id_seq", x);
|
||||
if (bko_user_id > 0) {
|
||||
// update password now - password
|
||||
pgsql_query("UPDATE bko_users SET password = md5('%s') WHERE id = %lu", in["password"].c_str(), bko_user_id);
|
||||
}
|
||||
} catch (bad_parameter) {
|
||||
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
long BkoCommonSessionCheck(long backoffice_id, long shop, long acc, const char *sessionid, int create) {
|
||||
logfmt(logINFO, "long BkoCommonSessionCheck(long backoffice_id,long shop, const char *sessionid, int create )");
|
||||
// Sanity check
|
||||
if (backoffice_id < 1 || sessionid == NULL || strlen(sessionid) < 4) {
|
||||
return -1L; // Invalif parameters
|
||||
}
|
||||
|
||||
char ptid[30];
|
||||
if (shop > 0) {
|
||||
sprintf(ptid, " AND shop=%lu ", shop);
|
||||
} else {
|
||||
sprintf(ptid, " "); // just empty space
|
||||
}
|
||||
// Clean old sessions
|
||||
if (create > 0) {
|
||||
pgsql_exec("DELETE FROM backoffice_session WHERE backoffice_id=%ld %s ", backoffice_id, ptid);
|
||||
} else {
|
||||
pgsql_exec("DELETE FROM backoffice_session WHERE backoffice_id=%ld %s AND updated < (now() - interval '15 minutes')", backoffice_id, ptid);
|
||||
}
|
||||
|
||||
if (create == 0 && pgsql_exec("UPDATE backoffice_session SET updated=NOW() WHERE backoffice_id=%ld %s AND sessionid='%s'", backoffice_id, ptid, sessionid) > 0) {
|
||||
return 1L; // Session updated
|
||||
}
|
||||
if (create > 0) {
|
||||
// Check session i?
|
||||
/*
|
||||
const PGresult *res = pgsql_query("SELECT * FROM backoffice_session WHERE backoffice_id=%ld %s AND sessionid<>'%s'", backoffice_id,ptid, 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 backoffice_session WHERE backoffice_id=%lu %s AND sessionid='%s'", backoffice_id, ptid, sessionid) > 0) {
|
||||
pgsql_exec("UPDATE backoffice_session SET updated=NOW() WHERE backoffice_id=%ld %s AND sessionid='%s'", backoffice_id, ptid, sessionid);
|
||||
return sess["id"].Long();
|
||||
}
|
||||
// Create a new session
|
||||
sess["backoffice_id"] = backoffice_id;
|
||||
sess["backoffice_id"].set_valid(true);
|
||||
sess["sessionid"] = sessionid;
|
||||
sess["sessionid"].set_valid(true);
|
||||
const char * loc = getenv("REMOTE_ADDR");
|
||||
sess["loc"] = loc;
|
||||
sess["loc"].set_valid(true);
|
||||
|
||||
if (shop > 0) {
|
||||
sess["shop"] = shop;
|
||||
sess["shop"].set_valid(true);
|
||||
}
|
||||
if (acc > 0) {
|
||||
sess["account"] = acc;
|
||||
sess["account"].set_valid(true);
|
||||
}
|
||||
long sid = insert_db_record(DBS_VALID, "backoffice_session", "backoffice_session_id_seq", sess);
|
||||
if (sid > 0) {
|
||||
return sid; // New session created
|
||||
}
|
||||
return -3L; // Failed to create new session
|
||||
}
|
||||
logfmt(logINFO, "/long BkoCommonSessionCheck(long backoffice_id,long shop, const char *sessionid, int create )");
|
||||
return 0L; // No route
|
||||
}
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
// 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 "function_members.h"
|
||||
#include "function_cron.h"
|
||||
|
||||
|
||||
@@ -0,0 +1,321 @@
|
||||
// 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_driver.h"
|
||||
#include "function_agents.h"
|
||||
#include "medTrTransporter.h"
|
||||
|
||||
|
||||
long medTrDriverFunctions(CVars in, CVars &out) {
|
||||
long ret = PHP_API_BAD_PARAM;
|
||||
|
||||
try {
|
||||
REQ_LONG(in, "agent_id", 0, -1);
|
||||
long mode = REQ_LONG(in, "mode", 0, -1);
|
||||
|
||||
if (mode == MODE_ADD) {
|
||||
return medTrCreateDriver(in, out);
|
||||
}
|
||||
|
||||
if (mode == MODE_LIST) {
|
||||
return medTrDriverList(in, out);
|
||||
}
|
||||
|
||||
if (mode == MODE_UPDATE) {
|
||||
return medTrDriverUpdate(in, out);
|
||||
}
|
||||
|
||||
|
||||
} catch (bad_parameter) {
|
||||
logfmt(logINFO, "ERROR CALL long medTrDriverFunctions(CVars in, CVars &out)");
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
long medTrDriverUpdate(CVars in, CVars &out) {
|
||||
|
||||
long ret = PHP_API_BAD_PARAM;
|
||||
logfmt(logINFO, "medTrDriverUpdate()");
|
||||
|
||||
|
||||
try {
|
||||
REQ_LONG(in, "pid", 0, -1);
|
||||
long agent_id = REQ_LONG(in, "agent_id", 0, -1);
|
||||
long driver_id = REQ_LONG(in, "driver_id", 0, -1);
|
||||
REQ_STRING(in, "lic_state", 1, 4, "(.*)");
|
||||
REQ_STRING(in, "firstname", 2, 49, "(.*)");
|
||||
REQ_STRING(in, "lastname", 2, 49, "(.*)");
|
||||
REQ_STRING(in, "lic_number", 2, 49, "(.*)"); // note same as email
|
||||
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", 1, 4, "(.*)");
|
||||
|
||||
|
||||
//REQ_STRING (in, "sessionid", 4, 40, "(.*)");
|
||||
const char * loc = getenv("REMOTE_ADDR");
|
||||
|
||||
|
||||
|
||||
ret = load_db_record(out, "SELECT *,id AS driver_id FROM transport_drivers WHERE id = %lu AND agent_id=%lu ", driver_id, in["agent_id"].Long());
|
||||
logfmt(logINFO, "~~~~ **** medTrCreateAgent(CVars in, CVars &out) ret==>%d", ret);
|
||||
|
||||
if (ret > 0 && driver_id > 0) {
|
||||
|
||||
// LETS CREATE THE REQUEST NOW
|
||||
CVars x;
|
||||
x["pid"] = in["pid"];
|
||||
x["pid"].set_valid(true);
|
||||
x["lic_number"] = in["lic_number"];
|
||||
x["lic_number"].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["expr_month"] = in["expr_month"];
|
||||
x["expr_month"].set_valid(true);
|
||||
|
||||
x["expr_year"] = in["expr_year"];
|
||||
x["expr_year"].set_valid(true);
|
||||
|
||||
x["lic_state"] = in["lic_state"];
|
||||
x["lic_state"].set_valid(true);
|
||||
|
||||
x["phone"] = in["phone"];
|
||||
x["phone"].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, "transport_drivers", x, driver_id);
|
||||
|
||||
|
||||
if (driver_id > 0) {
|
||||
|
||||
load_db_record(out, "SELECT *,id AS driver_id FROM transport_drivers WHERE id = %lu ", driver_id);
|
||||
// ==============
|
||||
ret = PHP_API_OK;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
} catch (bad_parameter) {
|
||||
logfmt(logINFO, "ERROR CALL long medTrDriverUpdate(CVars in, CVars &out)");
|
||||
}
|
||||
|
||||
|
||||
logfmt(logINFO, "/medTrDriverUpdate()");
|
||||
return ret;
|
||||
|
||||
}
|
||||
|
||||
long medTrDriverList(CVars in, CVars &out) {
|
||||
|
||||
long ret = PHP_API_BAD_PARAM;
|
||||
char vname[20];
|
||||
try {
|
||||
|
||||
REQ_LONG(in, "agent_id", 0, -1);
|
||||
long mode = REQ_LONG(in, "mode", 0, -1);
|
||||
long driver_id = REQ_LONG(in, "driver_id", 0, -1);
|
||||
|
||||
const PGresult *res;
|
||||
out["total_record"] = "0";
|
||||
out["mode"] = in["mode"]; // send this back
|
||||
if (driver_id > 0) {
|
||||
res = pgsql_query("SELECT id as driver_id, * FROM transport_drivers WHERE agent_id = %lu AND id = %lu", in["agent_id"].Long(), driver_id);
|
||||
|
||||
} else {
|
||||
res = pgsql_query("SELECT id as driver_id, * FROM transport_drivers WHERE agent_id = %lu ORDER BY id DESC LIMIT 250", in["agent_id"].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), "driver_id_%05d", i);
|
||||
out[vname] = rec["driver_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), "agent_id_%05d", i);
|
||||
out[vname] = rec["agent_id"];
|
||||
|
||||
snprintf(vname, sizeof (vname), "lic_state_%05d", i);
|
||||
out[vname] = rec["lic_state"];
|
||||
|
||||
snprintf(vname, sizeof (vname), "lic_number_%05d", i);
|
||||
out[vname] = rec["lic_number"];
|
||||
|
||||
snprintf(vname, sizeof (vname), "phone_%05d", i);
|
||||
out[vname] = rec["phone"];
|
||||
|
||||
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), "email_%05d", i);
|
||||
out[vname] = rec["email"];
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
ret = PHP_API_OK;
|
||||
out["status"] = "OK";
|
||||
|
||||
|
||||
|
||||
} catch (bad_parameter) {
|
||||
logfmt(logINFO, "ERROR CALL long medTrDriverList(CVars in, CVars &out)");
|
||||
}
|
||||
return ret;
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
long medTrCreateDriver(CVars in, CVars &out) {
|
||||
long ret = PHP_API_BAD_PARAM;
|
||||
logfmt(logINFO, "medTrCreateDriver()");
|
||||
|
||||
|
||||
try {
|
||||
REQ_LONG(in, "pid", 0, -1);
|
||||
long agent_id = REQ_LONG(in, "agent_id", 0, -1);
|
||||
REQ_STRING(in, "lic_state", 1, 4, "(.*)");
|
||||
REQ_STRING(in, "firstname", 2, 49, "(.*)");
|
||||
REQ_STRING(in, "lastname", 2, 49, "(.*)");
|
||||
REQ_STRING(in, "lic_number", 2, 49, "(.*)"); // note same as email
|
||||
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", 1, 4, "(.*)");
|
||||
|
||||
|
||||
//REQ_STRING (in, "sessionid", 4, 40, "(.*)");
|
||||
const char * loc = getenv("REMOTE_ADDR");
|
||||
|
||||
|
||||
|
||||
ret = load_db_record(out, "SELECT *,id AS agent_id FROM agents WHERE id = %lu ", in["agent_id"].Long());
|
||||
logfmt(logINFO, "~~~~ **** medTrCreateAgent(CVars in, CVars &out) ret==>%d", ret);
|
||||
|
||||
if (ret > 0 && agent_id > 0) {
|
||||
|
||||
// LETS CREATE THE REQUEST NOW
|
||||
CVars x;
|
||||
x["pid"] = in["pid"];
|
||||
x["pid"].set_valid(true);
|
||||
x["lic_number"] = in["lic_number"];
|
||||
x["lic_number"].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["expr_month"] = in["expr_month"];
|
||||
x["expr_month"].set_valid(true);
|
||||
|
||||
x["expr_year"] = in["expr_year"];
|
||||
x["expr_year"].set_valid(true);
|
||||
|
||||
x["lic_state"] = in["lic_state"];
|
||||
x["lic_state"].set_valid(true);
|
||||
|
||||
x["phone"] = in["phone"];
|
||||
x["phone"].set_valid(true);
|
||||
|
||||
|
||||
x["agent_id"] = in["agent_id"];
|
||||
x["agent_id"].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["driver_id"] = insert_db_record(DBS_VALID, "transport_drivers", "transport_drivers_id_seq", x);
|
||||
if (out["driver_id"].Long() > 0) {
|
||||
|
||||
|
||||
// ==============
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
} catch (bad_parameter) {
|
||||
logfmt(logINFO, "ERROR CALL long medTrCreateAgent(CVars in, CVars &out)");
|
||||
}
|
||||
|
||||
|
||||
logfmt(logINFO, "/medTrCreateDriver()");
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,514 @@
|
||||
|
||||
#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_invoice.h"
|
||||
#include "function_driver.h"
|
||||
#include "function_agents.h"
|
||||
#include "medTrTransporter.h"
|
||||
|
||||
long medTranportBillables(CVars in, CVars &out);
|
||||
long medTSaveInvloiceItem(CVars in);
|
||||
long medTrGetMemberInvoice(CVars in, CVars &out) {
|
||||
CVars x,n,z;
|
||||
logfmt(logINFO, "START CALL long medTrGetMemberInvoice(CVars in, CVars &out)");
|
||||
try {
|
||||
|
||||
//REQ_STRING(in, "sessionid", 15, 99, "(.*)");
|
||||
long request_id = 0;
|
||||
long member_id = 0;
|
||||
long transport = 0;
|
||||
long translate = 0;
|
||||
long hoursneeded = 0;
|
||||
long miles = 0;
|
||||
long invoice_mode = REQ_LONG(in, "invoice_mode", 0, -1);
|
||||
CVars p;
|
||||
CVars lt;
|
||||
long profile_multiple = 1;
|
||||
long totalv = 0;
|
||||
long extra_intr = 0;
|
||||
lt["transport"] = "0";
|
||||
lt["translate"] = "0";
|
||||
lt["concierge"] = "0";
|
||||
lt["transp_type"] = "0";
|
||||
|
||||
if (invoice_mode == INVOICE_FINAL) {
|
||||
|
||||
|
||||
request_id = REQ_LONG(in, "request_id", 0, -1);
|
||||
member_id = REQ_LONG(in, "member_id", 0, -1);
|
||||
|
||||
if (load_db_record(z, "SELECT t.bill_mutiple AS profile_multiple FROM members m LEFT JOIN members_acc_types t ON t.id=m.acc_type WHERE m.id = %lu", member_id)) {
|
||||
profile_multiple = z["profile_multiple"].Long();
|
||||
logfmt(logINFO, "-------------------==================-------- Profile Multiple =%lu", profile_multiple);
|
||||
} else {
|
||||
logfmt(logINFO, "ERROR CALL long medTrGetMemberInvoice(CVars in, CVars &out) -> Invalid user");
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* if (load_db_record(x, "SELECT *,id AS transport_id, TO_CHAR(transport_date :: DATE, 'Day Mon dd, yyyy') AS report_day,"
|
||||
" (CASE WHEN LOWER (TO_CHAR(transport_date :: DATE, 'Day'))::TEXT LIKE'%saturday%' THEN 100 "
|
||||
" WHEN LOWER (TO_CHAR(transport_date :: DATE, 'Day'))::TEXT LIKE'%sunday%' THEN 200 ELSE 0 END) AS day_handle "
|
||||
" FROM members_transport_request WHERE id = %lu", request_id))
|
||||
|
||||
*/
|
||||
|
||||
if (load_db_record(x, "SELECT *,id AS transport_id, TO_CHAR(transport_date :: DATE, 'Day Mon dd, yyyy') AS report_day, LOWER (TO_CHAR(transport_date::DATE, 'Day')) AS day_name "
|
||||
" FROM members_transport_request WHERE id = %lu", request_id)){
|
||||
|
||||
load_db_record(n, "SELECT TO_CHAR('%s' :: DATE, 'Day Mon dd, yyyy') AS report_day", x["transport_date"].c_str());
|
||||
logfmt(logINFO, "*********medTrGetMemberInvoice = %s ", n["report_day"].c_str());
|
||||
|
||||
CVars y;
|
||||
y["member_id"] = x["member_id"]; y["member_id"].set_valid( true );
|
||||
y["transport_id"] = x["transport_id"]; y["transport_id"].set_valid( true );
|
||||
y["transp_type"] = "0"; y["transp_type"].set_valid( true );
|
||||
out["invoice_id"] = insert_db_record(DBS_VALID, "members_invoice", "members_invoice_id_seq", y);
|
||||
|
||||
pgsql_query("UPDATE members_invoice SET flags = 3 WHERE flags <> 3 AND transport_id = %lu AND id <> %lu", y["transport_id"].Long(), out["invoice_id"].Long());
|
||||
//--------------------------------------------------------------------------------------------
|
||||
|
||||
if (x["transport"].Long() == 1 && x["miles"].Long() > 0) {
|
||||
|
||||
lt["transp_type"] = "1";
|
||||
in["type_key"] = "T001"; // this is a variable
|
||||
if (x["needwheelchair"].Long() == 1) {
|
||||
in["type_key"] = "T002"; // this is a variable
|
||||
lt["transp_type"] = "2";
|
||||
}
|
||||
|
||||
if (x["stretcherneeded"].Long() == 1) {
|
||||
in["type_key"] = "T003"; // this is a variable
|
||||
lt["transp_type"] = "3";
|
||||
}
|
||||
in["type_key"].set_valid( true );
|
||||
|
||||
load_db_record(p, "SELECT * FROM pricing_member_transport WHERE status=1 AND type_key='%s' ORDER BY id DESC LIMIT 1",in["type_key"].c_str()); // get transport profile
|
||||
medTranportBillables(in, out);
|
||||
//BASIC TRANSPORT
|
||||
CVars z1;
|
||||
z1["description"] = out["transp_basic"]; z1["description"].set_valid( true );
|
||||
z1["g_key"] = "T"; z1["g_key"].set_valid( true );
|
||||
z1["i_key"] = "T0001"; z1["i_key"].set_valid( true );
|
||||
z1["invoice_id"] = out["invoice_id"]; z1["invoice_id"].set_valid( true );
|
||||
z1["qty"] = "1"; z1["qty"].set_valid( true );
|
||||
z1["total"] = profile_multiple*p["start_price"]; z1["total"].set_valid( true );
|
||||
medTSaveInvloiceItem(z1);
|
||||
|
||||
if (p["miles"].Long() < x["miles"].Long()) {
|
||||
totalv = profile_multiple*p["extra_price"].Long()*(x["miles"].Long() - p["miles"].Long());
|
||||
out["extra_price"] = totalv;
|
||||
|
||||
CVars z2;
|
||||
z2["description"] = out["transp_extra"]; z2["description"].set_valid( true );
|
||||
z2["g_key"] = "T"; z2["g_key"].set_valid( true );
|
||||
z2["i_key"] = "T0002"; z2["i_key"].set_valid( true );
|
||||
z2["invoice_id"] = out["invoice_id"]; z2["invoice_id"].set_valid( true );
|
||||
z2["qty"] = "1"; z2["qty"].set_valid( true );
|
||||
z2["total"] = totalv; z2["total"].set_valid( true );
|
||||
medTSaveInvloiceItem(z2);
|
||||
|
||||
|
||||
}
|
||||
long saturnday_charge=0;
|
||||
if (x["day_name"] == "saturday") {
|
||||
saturnday_charge = (profile_multiple * p["start_price"].Long() + totalv) *0.25;
|
||||
CVars z3;
|
||||
z3["description"] = "Transport Saturday Surcharge";
|
||||
z3["description"].set_valid(true);
|
||||
z3["g_key"] = "T";
|
||||
z3["g_key"].set_valid(true);
|
||||
z3["i_key"] = "T0003";
|
||||
z3["i_key"].set_valid(true);
|
||||
z3["invoice_id"] = out["invoice_id"];
|
||||
z3["invoice_id"].set_valid(true);
|
||||
z3["qty"] = "1";
|
||||
z3["qty"].set_valid(true);
|
||||
z3["total"] = saturnday_charge;
|
||||
z3["total"].set_valid(true);
|
||||
medTSaveInvloiceItem(z3);
|
||||
}
|
||||
|
||||
if (x["day_name"] == "sunday") {
|
||||
|
||||
}
|
||||
|
||||
|
||||
lt["transport"] = profile_multiple*p["start_price"].Long() + totalv + saturnday_charge;
|
||||
}
|
||||
|
||||
//trnaslate
|
||||
if (x["translate"].Long() == 1 && x["hoursneeded"].Long() > 0) {
|
||||
CVars pi;
|
||||
load_db_record(pi, "SELECT * FROM pricing_member_translator WHERE status=1 ORDER BY id DESC LIMIT 1"); // get transport profile
|
||||
/*
|
||||
utransport=> select * from pricing_member_translator order by id desc limit 1;
|
||||
id | added | pricing | hours | start_price | extra_price | status
|
||||
----+----------------------------+---------+-------+-------------+-------------+--------
|
||||
3 | 2017-12-28 17:29:58.340197 | 1 | 2 | 5000 | 2500 | 1
|
||||
(1 row)
|
||||
|
||||
*/
|
||||
|
||||
CVars z10;
|
||||
z10["description"] = "Interpretation Service"; z10["description"].set_valid( true );
|
||||
z10["g_key"] = "I"; z10["g_key"].set_valid( true );
|
||||
z10["i_key"] = "I0002"; z10["i_key"].set_valid( true );
|
||||
z10["invoice_id"] = out["invoice_id"]; z10["invoice_id"].set_valid( true );
|
||||
z10["qty"] = "1"; z10["qty"].set_valid( true );
|
||||
z10["total"] = profile_multiple*pi["start_price"]; z10["total"].set_valid( true );
|
||||
medTSaveInvloiceItem(z10);
|
||||
|
||||
if ( x["hoursneeded"].Long() > pi["hours"].Long())
|
||||
{
|
||||
extra_intr = profile_multiple* ( x["hoursneeded"].Long() - pi["hours"].Long()) * pi["extra_price"].Long();
|
||||
CVars z11;
|
||||
z11["description"] = "Extra hours Interpretation Service"; z11["description"].set_valid( true );
|
||||
z11["g_key"] = "I"; z11["g_key"].set_valid( true );
|
||||
z11["i_key"] = "I0002"; z11["i_key"].set_valid( true );
|
||||
z11["invoice_id"] = out["invoice_id"]; z11["invoice_id"].set_valid( true );
|
||||
z11["qty"] = "1"; z11["qty"].set_valid( true );
|
||||
z11["total"] = extra_intr; /* pi["extra_price"]; */ z11["total"].set_valid( true );
|
||||
medTSaveInvloiceItem(z11);
|
||||
|
||||
}
|
||||
|
||||
lt["translate"] = profile_multiple*pi["start_price"].Long() + extra_intr;
|
||||
}
|
||||
|
||||
|
||||
//concierge
|
||||
if (x["conciergeneeded"].Long() == 1 && x["hoursneeded"].Long() > 0) {
|
||||
CVars p2;
|
||||
load_db_record(p2, "SELECT * FROM pricing_member_concierge WHERE status=1 ORDER BY id DESC LIMIT 1"); // get transport profile
|
||||
/*
|
||||
utransport=> SELECT * FROM pricing_member_concierge WHERE status=1 ORDER BY id DESC LIMIT 1;
|
||||
id | added | pricing | hours | start_price | extra_price | status | dead_mile | wait_hour
|
||||
----+----------------------------+---------+-------+-------------+-------------+--------+-----------+-----------
|
||||
3 | 2017-12-28 17:29:32.944421 | 1 | 2 | 15000 | 10000 | 1 | 200 | 21
|
||||
(1 row)
|
||||
*/
|
||||
|
||||
CVars z20;
|
||||
z20["description"] = "Basic Concierge Service"; z20["description"].set_valid( true );
|
||||
z20["g_key"] = "C"; z20["g_key"].set_valid( true );
|
||||
z20["i_key"] = "C0001"; z20["i_key"].set_valid( true );
|
||||
z20["invoice_id"] = out["invoice_id"]; z20["invoice_id"].set_valid( true );
|
||||
z20["qty"] = "1"; z20["qty"].set_valid( true );
|
||||
z20["total"] = profile_multiple*p2["start_price"]; z20["total"].set_valid( true );
|
||||
medTSaveInvloiceItem(z20);
|
||||
|
||||
lt["concierge"] = profile_multiple*p2["start_price"].Long();
|
||||
}
|
||||
|
||||
|
||||
|
||||
lt["transport"].set_valid(true);
|
||||
lt["translate"].set_valid(true);
|
||||
lt["concierge"].set_valid(true);
|
||||
update_db_record(DBS_VALID, "members_invoice", lt, out["invoice_id"]);
|
||||
|
||||
//--------------------------------------------------------------------------------------------
|
||||
}
|
||||
|
||||
} else {
|
||||
transport = REQ_LONG(in, "transport", 0, -1);
|
||||
translate = REQ_LONG(in, "translate", 0, -1);
|
||||
hoursneeded = REQ_LONG(in, "hoursneeded", 0, -1);
|
||||
miles = REQ_LONG(in, "miles", 0, -1);
|
||||
REQ_STRING(in, "appt_time", 5, 25, "(.*)");
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
load_db_record(x, "SELECT * FROM pricing_member_transport WHERE status=1 ORDER BY id DESC LIMIT 1");
|
||||
|
||||
|
||||
out["start_price"] = x["start_price"];
|
||||
out["miles"] = x["miles"];
|
||||
out["extra_price"] = "0";
|
||||
if ( x["miles"].Long() < in["miles"].Long())
|
||||
{
|
||||
long totalv = x["miles"].Long()*( in["miles"].Long() - x["miles"].Long() );
|
||||
out["extra_price"] = totalv;
|
||||
}
|
||||
|
||||
out["total_price"] = out["start_price"].Long() + out["extra_price"].Long() ;
|
||||
in["type_key"] = "T001";
|
||||
medTranportBillables(in, out);
|
||||
|
||||
*
|
||||
*
|
||||
*
|
||||
*
|
||||
Basic Ambulatory Transport
|
||||
Extra Ambulatory Transport Miles
|
||||
Same Day Transport Surcharge
|
||||
Rush Hour Transport Surcharge
|
||||
Evening Transport Surcharge
|
||||
Saturday Transport Surcharge
|
||||
Holidays/Sundays Transport Surcharge
|
||||
Driver Callback Surcharge
|
||||
|
||||
|
||||
Basic Wheelchair Transport
|
||||
Extra Wheelchair Transport Miles
|
||||
Same Day Request Surcharge
|
||||
Rush Hour Transport Surcharge
|
||||
Evening Transport Surcharge
|
||||
Saturday Transport Surcharge
|
||||
Holidays/Sundays Transport Surcharge
|
||||
Driver Callback Surcharge
|
||||
|
||||
|
||||
Basic Stretcher Transport
|
||||
Extra Stretcher Transport Miles
|
||||
Same Day Request Surcharge
|
||||
Rush Hour Transport Surcharge
|
||||
Evening Transport Surcharge
|
||||
Saturday Transport Surcharge
|
||||
Holidays/Sundays Transport Surcharge
|
||||
Driver Callback Surcharge
|
||||
|
||||
Basic Concierge Service
|
||||
Wait Hour Concierge
|
||||
|
||||
Interpretation Service
|
||||
Extra hours Interpretation Service
|
||||
|
||||
"sessionid" => $sessionid,
|
||||
"member_id" => $member_id,
|
||||
"request_id" => "0",
|
||||
"invoice_mode" => INVOICE_PREVIEW,
|
||||
"transport" => "1",
|
||||
"translate" => "0",
|
||||
"hoursneeded" => "0",
|
||||
"miles" => $miles,
|
||||
"appt_time" => $picktime
|
||||
*/
|
||||
|
||||
|
||||
} catch (bad_parameter) {
|
||||
logfmt(logINFO, "ERROR CALL long medTrGetMemberInvoice(CVars in, CVars &out)");
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
long medTSaveInvloiceItem(CVars in)
|
||||
{
|
||||
|
||||
return insert_db_record(DBS_VALID, "members_invoice_detail", "members_invoice_detail_id_seq", in);
|
||||
|
||||
}
|
||||
|
||||
long getMemberInvoiceID(long transport_id) {
|
||||
long ret = 0;
|
||||
CVars x,out;
|
||||
if (load_db_record(x, "SELECT member_id,id AS request_id FROM members_transport_request WHERE id = %lu", transport_id)) {
|
||||
x["invoice_mode"] = INVOICE_FINAL;
|
||||
medTrGetMemberInvoice(x, out);
|
||||
ret = out["invoice_id"].Long();
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
long medTSendInvoice(CVars in, CVars &out) {
|
||||
CVars x;
|
||||
long invoice_id = REQ_LONG(in, "invoice_id", 0, -1);
|
||||
|
||||
if (load_db_record(x, "SELECT *,id AS invoice_id FROM members_invoice WHERE id =%lu", invoice_id)) {
|
||||
member_email_calls(MEDTRANS_USER_SENDINVOICE, x, out);
|
||||
out["status"] ="Email Sent";
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
long medTrInvoice(CVars in, CVars &out) {
|
||||
|
||||
logfmt(logINFO, "****** ~~~~ medTrInvoice(CVars in, CVars &out)");
|
||||
|
||||
long transport_id = REQ_LONG(in, "transport_id", 0, -1);
|
||||
long invoice_id = getMemberInvoiceID(transport_id);
|
||||
out["total_record"] = "0";
|
||||
const PGresult *res;
|
||||
char vname[30];
|
||||
|
||||
if (load_db_record(out, "SELECT id AS invoice_id, transport AS transport_total, translate AS translate_total,concierge AS concierge_total,dt_paid, confirmation FROM members_invoice WHERE id = %lu AND flags<> 3 ", invoice_id)) {
|
||||
// x["invoice_mode"] = INVOICE_FINAL;
|
||||
// medTrGetMemberInvoice(x, out);
|
||||
// ret = out["invoice_id"].Long();
|
||||
|
||||
|
||||
res = pgsql_query("SELECT * FROM members_invoice_detail WHERE invoice_id = %lu ORDER BY id ASC", out["invoice_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), "g_key_%05d", i);
|
||||
out[vname] = rec["g_key"];
|
||||
|
||||
snprintf(vname, sizeof (vname), "i_key_%05d", i);
|
||||
out[vname] = rec["i_key"];
|
||||
|
||||
|
||||
snprintf(vname, sizeof (vname), "description_%05d", i);
|
||||
out[vname] = rec["description"];
|
||||
|
||||
|
||||
snprintf(vname, sizeof (vname), "rates_%05d", i);
|
||||
out[vname] = rec["rates"];
|
||||
|
||||
snprintf(vname, sizeof (vname), "qty_%05d", i);
|
||||
out[vname] = rec["qty"];
|
||||
|
||||
snprintf(vname, sizeof (vname), "total_%05d", i);
|
||||
out[vname] = rec["total"];
|
||||
|
||||
snprintf(vname, sizeof (vname), "detail_id_%05d", i);
|
||||
out[vname] = rec["id"];
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
|
||||
}
|
||||
/*
|
||||
g_key | character varying(2) |
|
||||
i_key | character varying(5) |
|
||||
description | character varying(50) |
|
||||
rates | integer | default 0
|
||||
qty | integer | default 0
|
||||
total | integer | default 0
|
||||
status | integer | default 1
|
||||
|
||||
*/
|
||||
long medTranportBillables(CVars in, CVars &out) {
|
||||
|
||||
REQ_STRING(in, "type_key", 2, 5, "(.*)");
|
||||
CVars x;
|
||||
char vname[60];
|
||||
/*
|
||||
type_key | type_name
|
||||
----------+------------
|
||||
T001 | Ambulatory
|
||||
T002 | Wheelchair
|
||||
T003 | Stretcher
|
||||
*
|
||||
*
|
||||
* Basic Ambulatory Transport
|
||||
Extra Ambulatory Transport Miles
|
||||
Same Day Transport Surcharge
|
||||
Rush Hour Transport Surcharge
|
||||
Evening Transport Surcharge
|
||||
Saturday Transport Surcharge
|
||||
Holidays/Sundays Transport Surcharge
|
||||
Driver Callback Surcharge
|
||||
*/
|
||||
if (load_db_record(x, "SELECT * FROM transport_types WHERE type_key='%s'", in["type_key"].c_str())) {
|
||||
|
||||
snprintf(vname, sizeof (vname), "Basic %s Transport", x["type_name"].c_str());
|
||||
out["transp_basic"] = vname;
|
||||
|
||||
snprintf(vname, sizeof (vname), "Extra %s Transport", x["type_name"].c_str());
|
||||
out["transp_extra"] = vname;
|
||||
|
||||
snprintf(vname, sizeof (vname), "Same Day Transport Surcharge");
|
||||
out["same_day"] = vname;
|
||||
|
||||
snprintf(vname, sizeof (vname), "Rush Hour Transport Surcharge");
|
||||
out["rush_hour"] = vname;
|
||||
|
||||
snprintf(vname, sizeof (vname), "Evening Transport Surcharge");
|
||||
out["evening_charges"] = vname;
|
||||
|
||||
snprintf(vname, sizeof (vname), "Saturday Transport Surcharge");
|
||||
out["saturday"] = vname;
|
||||
|
||||
snprintf(vname, sizeof (vname), "Holidays/Sundays Transport Surcharge");
|
||||
out["holiday"] = vname;
|
||||
|
||||
snprintf(vname, sizeof (vname), "Driver Callback Surcharge");
|
||||
out["callback"] = vname;
|
||||
|
||||
}
|
||||
return 0;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
long medTrGetTransportInvoice(CVars in, CVars &out) {
|
||||
long ret = PHP_API_BAD_PARAM;
|
||||
logfmt(logINFO, "long medTrGetTransportInvoice(CVars in, CVars &out)");
|
||||
try {
|
||||
|
||||
out["invoice_no"] = "INV007";
|
||||
out["total"] = 12345;
|
||||
out["responsible_name"] = "RealClient Name";
|
||||
out["dateof_service"] = "December 12, 2017";
|
||||
|
||||
out["patient_name"] = "Patient Name";
|
||||
out["patient_phone"] = "911 000 0000";
|
||||
out["patient_from"] = "<li> Normand axis LTD</li> <li>3 Goodman Street </li><li> marietta, GA 30127</li>";
|
||||
|
||||
out["patient_to"] = "<li><b> Destination</b></li> <li>56 marietta Street </li><li> Atlanta, GA 30339</li>";
|
||||
|
||||
|
||||
|
||||
|
||||
} catch (bad_parameter) {
|
||||
logfmt(logINFO, "ERROR CALL long medTrGetTransportInvoice(CVars in, CVars &out)");
|
||||
}
|
||||
logfmt(logINFO, "/long medTrGetTransportInvoice(CVars in, CVars &out)");
|
||||
return ret;
|
||||
}
|
||||
|
||||
long medTrInvoiceFunctions(CVars in, CVars &out) {
|
||||
long ret = PHP_API_BAD_PARAM;
|
||||
|
||||
try {
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
} catch (bad_parameter) {
|
||||
logfmt(logINFO, "ERROR CALL long medTrInvoiceFunctions(CVars in, CVars &out)");
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
long generateInvoiceData(CVars in, CVars &out) // most probably ran by cron job
|
||||
{
|
||||
const PGresult *res;
|
||||
res = pgsql_query("SELECT id FROM members_transport_request WHERE miles > 0 order by id desc"); // condition for invloice listing
|
||||
|
||||
if (res != NULL && pgsql_num_rows(res) > 0) {
|
||||
for (int i = 0, n = pgsql_num_rows(res); i < n; i++) {
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,825 @@
|
||||
// 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 <algorithm>
|
||||
#include <cctype>
|
||||
#include <locale>
|
||||
/*
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <assert.h>
|
||||
*/
|
||||
|
||||
/* -- */
|
||||
#include "function_members.h"
|
||||
long serviceCost(long service_id, long discount_rate);
|
||||
|
||||
long medTrMemberTransportById(CVars in, CVars &out) {
|
||||
long ret = PHP_API_BAD_PARAM;
|
||||
ret = load_db_record(out, "SELECT * FROM members_service_request WHERE id = %lu ", in["transport_id"].Long());
|
||||
if (ret > 0) {
|
||||
ret = PHP_API_OK;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
long DeletAallCards(CVars in, CVars &out) {
|
||||
long ret = PHP_API_BAD_PARAM;
|
||||
out["status"] = "Pending";
|
||||
try {
|
||||
REQ_LONG(in, "member_id", 0, -1);
|
||||
pgsql_query("UPDATE creditcard SET status = 7,active = 0 WHERE status <> 7 AND member_id = %lu", in["member_id"].Long());
|
||||
pgsql_query("UPDATE members SET stripe_customer_id = NULL,def_card = NULL WHERE id = %lu", in["member_id"].Long());
|
||||
ret = PHP_API_OK;
|
||||
out["status"] = "Completed";
|
||||
|
||||
} catch (bad_parameter) {
|
||||
out["status"] = "Error";
|
||||
|
||||
logfmt(logINFO, "ERROR CALL long DeletAallCards(CVars in, CVars &out)");
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
long medTrMemberServiceById(CVars in, CVars &out) {
|
||||
long ret = PHP_API_BAD_PARAM;
|
||||
|
||||
logfmt(logINFO, " CALL long medTrMemberServiceById(CVars in, CVars &out)");
|
||||
try {
|
||||
REQ_LONG(in, "member_id", 0, -1);
|
||||
REQ_LONG(in, "service_id", 0, -1);
|
||||
|
||||
ret = load_db_record(out, "SELECT s.service_date,s.quantity,a.agent_name,s.est_cost AS estimated_cost,s.flags,s.status,"
|
||||
" TO_CHAR(s.service_date :: TIMESTAMP, 'Day Mon dd, yyyy HH:MM AM') AS long_date,"
|
||||
" a.street,a.city,a.zipcode,a.phone,a.state, "
|
||||
" (CASE WHEN s.dt_confirmed IS NOT NULL THEN 'Confirmed' ELSE 'Not Confirmed' END) AS confirm_text,s.id AS service_id "
|
||||
" FROM members_service_request s "
|
||||
" LEFT JOIN agents a ON a.id = s.agent_id "
|
||||
" WHERE s.id = %lu ", in["service_id"].Long());
|
||||
if (ret > 0) {
|
||||
// out["estimated_cost"] ="34.00";
|
||||
|
||||
getServiceDetail( out["service_id"].Long(), out);
|
||||
|
||||
// snprintf(vname, sizeof (vname), "service_list_detail_%05d", i);
|
||||
// out[vname] = out["service_list"];
|
||||
|
||||
ret = PHP_API_OK;
|
||||
}
|
||||
|
||||
ret = PHP_API_OK;
|
||||
out["status"] = "OK";
|
||||
} catch (bad_parameter) {
|
||||
logfmt(logINFO, "ERROR CALL long medTrMemberServiceById(CVars in, CVars &out)");
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
long medTrLanguageList(CVars in, CVars &out) {
|
||||
long ret = PHP_API_BAD_PARAM;
|
||||
char vname[20];
|
||||
try {
|
||||
// REQ_LONG(in, "status", 0, -1);
|
||||
REQ_LONG( in, "member_id", 0, -1);
|
||||
|
||||
out["total_record"] = "0";
|
||||
|
||||
const PGresult *res = pgsql_query("SELECT * FROM agents WHERE status = 1 ORDER BY agent_name ASC");
|
||||
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), "agent_name_%05d", i);
|
||||
out[vname] = rec["agent_name"];
|
||||
|
||||
snprintf(vname, sizeof (vname), "agent_id_%05d", i);
|
||||
out[vname] = rec["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"];
|
||||
|
||||
}
|
||||
}
|
||||
ret = PHP_API_OK;
|
||||
out["status"] = "OK";
|
||||
} catch (bad_parameter) {
|
||||
logfmt(logINFO, "ERROR CALL long medTMemberLogin(CVars in, CVars &out)");
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
/*
|
||||
* street | city | zipcode
|
||||
kleen=> SELECT t.*,a.agent_name,TO_CHAR(t.service_date :: TIMESTAMP, 'Day Mon dd, yyyy HH:MM AM') AS long_date FROM members_service_request t LEFT JOIN agents a ON a.id=t.agent_id;
|
||||
id | pid | member_id | agent_id | service_type | service_date | quantity | added | status | flags | loc | dist_mode | miles | minutes | agent_name | long_date
|
||||
----+-----+-----------+----------+--------------+---------------------+----------+----------------------------+--------+-------+-----------------+-----------+-------+---------+----------------------------+---------------------------------
|
||||
3 | 100 | 1 | 3 | 1 | 2018-05-12 23:05:00 | 3 | 2018-05-12 23:05:34.962922 | 1 | 1 | 104.238.127.115 | | 0 | 0 | Agenr Name with name 10003 | Saturday May 12, 2018 11:05 PM
|
||||
|
||||
*/
|
||||
|
||||
long medTrMemberTransportList(CVars in, CVars &out) {
|
||||
logfmt(FLOG_MAX, "long medTrMemberTransportList(CVars in, CVars &out)");
|
||||
long ret = PHP_API_BAD_PARAM;
|
||||
char vname[30];
|
||||
try {
|
||||
REQ_LONG(in, "limit", 0, -1);
|
||||
REQ_LONG(in, "member_id", 0, -1);
|
||||
|
||||
out["total_record"] = "0";
|
||||
|
||||
const PGresult *res = pgsql_query("SELECT t.id AS service_id, t.*,a.agent_name,"
|
||||
" TO_CHAR(t.service_date :: TIMESTAMP, 'Day Mon dd, yyyy HH:MM AM') AS long_date , "
|
||||
" (CASE WHEN t.dt_confirmed IS NOT NULL THEN 'Confirmed' ELSE 'Not Confirmed' END) AS confirm_text,"
|
||||
" (CASE WHEN t.flags IN(0,1) THEN 'Not Confirmed' WHEN t.flags=2 THEN 'Confirmed' WHEN t.flags=4 THEN 'Assigned' ELSE 'Unknown' END) AS flag_text,"
|
||||
" (CASE WHEN t.service_type=1 THEN 'Laundry' WHEN t.service_type=2 THEN 'Dryclean' ELSE 'Service' END) AS service_type_description"
|
||||
" FROM members_service_request t LEFT JOIN agents a ON a.id=t.agent_id "
|
||||
" WHERE t.member_id= %lu "
|
||||
" ORDER BY t.id DESC LIMIT %lu", in["member_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);
|
||||
|
||||
long service_id = rec["service_id"].Long();
|
||||
|
||||
snprintf(vname, sizeof (vname), "service_date_%05d", i);
|
||||
out[vname] = rec["service_date"];
|
||||
|
||||
snprintf(vname, sizeof (vname), "long_date_%05d", i);
|
||||
out[vname] = rec["long_date"];
|
||||
|
||||
snprintf(vname, sizeof (vname), "service_id_%05d", i);
|
||||
out[vname] = rec["service_id"];
|
||||
|
||||
snprintf(vname, sizeof (vname), "agent_name_%05d", i);
|
||||
out[vname] = rec["agent_name"];
|
||||
|
||||
snprintf(vname, sizeof (vname), "status_%05d", i);
|
||||
out[vname] = rec["status"];
|
||||
|
||||
snprintf(vname, sizeof (vname), "flags_%05d", i);
|
||||
out[vname] = rec["flags"];
|
||||
|
||||
snprintf(vname, sizeof (vname), "from_city_%05d", i);
|
||||
out[vname] = rec["from_city"];
|
||||
|
||||
snprintf(vname, sizeof (vname), "quantity_%05d", i);
|
||||
out[vname] = rec["quantity"];
|
||||
|
||||
snprintf(vname, sizeof (vname), "confirm_text_%05d", i);
|
||||
out[vname] = rec["confirm_text"];
|
||||
|
||||
snprintf(vname, sizeof (vname), "service_fee_%05d", i);
|
||||
out[vname] = "0";
|
||||
|
||||
snprintf(vname, sizeof (vname), "stype_desc_%05d", i);
|
||||
out[vname] = rec["service_type_description"];
|
||||
|
||||
getServiceDetail( service_id, out);
|
||||
|
||||
snprintf(vname, sizeof (vname), "service_list_detail_%05d", i);
|
||||
out[vname] = out["service_list"];
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
snprintf(vname, sizeof (vname), "flag_text_%05d", i);
|
||||
out[vname] = rec["flag_text"];
|
||||
}
|
||||
}
|
||||
ret = PHP_API_OK;
|
||||
out["status"] = "OK";
|
||||
} catch (bad_parameter) {
|
||||
logfmt(logINFO, "ERROR CALL long medTMemberLogin(CVars in, CVars &out)");
|
||||
}
|
||||
logfmt(FLOG_MAX, "/long medTrMemberTransportList(CVars in, CVars &out)");
|
||||
return ret;
|
||||
}
|
||||
|
||||
long getServiceDetail(long service_id, CVars &out) {
|
||||
out["service_list"] = "";
|
||||
char vname[300];
|
||||
long ret = 0;
|
||||
int icc=0;
|
||||
ret = load_db_record(out, "SELECT * FROM members_service_request WHERE id = %lu ", service_id);
|
||||
if (ret > 0) {
|
||||
|
||||
switch (out["service_type"].Long()) {
|
||||
case 1:
|
||||
snprintf(vname, sizeof (vname), "%lu Bag(s)", out["quantity"].Long());
|
||||
out["service_list"] = vname;
|
||||
out["total_detail_record"] ="1";
|
||||
break;
|
||||
|
||||
case 2:
|
||||
|
||||
const PGresult *res = pgsql_query(" SELECT code,description,price*0.01 AS price,quantity,total*0.01 AS total "
|
||||
" FROM members_service_detail "
|
||||
" WHERE service_id=%lu", service_id);
|
||||
|
||||
if (res != NULL && pgsql_num_rows(res) > 0) {
|
||||
out["total_detail_record"] = pgsql_num_rows(res);
|
||||
snprintf(vname, sizeof (vname), ""); // clean it up
|
||||
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);
|
||||
out["lv"] = vname;
|
||||
if (icc > 0) {
|
||||
snprintf(vname, sizeof (vname), "%s, ", out["lv"].c_str());
|
||||
}
|
||||
out["lv"] = vname;
|
||||
snprintf(vname, sizeof (vname), "%s %lu %s", out["lv"].c_str(), rec["quantity"].Long(), rec["description"].c_str());
|
||||
|
||||
icc++;
|
||||
}
|
||||
out["service_list"] = vname;
|
||||
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
long medTMemberLogin(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.*,mp.*,m.id AS member_id,mp.id AS member_profile_id FROM members m \
|
||||
LEFT JOIN members_profile mp ON mp.member_id = m.id \
|
||||
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["member_id"].Long() > 0) {
|
||||
// remove all existing session
|
||||
pgsql_exec("DELETE FROM members_session WHERE member_id=%ld ", out["member_id"].Long());
|
||||
// Create New Session Now
|
||||
if (SessionCheck(out["member_id"].Long(), out["sessionid"].c_str(), 1) > 0) {
|
||||
|
||||
|
||||
out["stauts"] = "OK";
|
||||
/*LOAD THE SESSION INTO OUT now */
|
||||
load_db_record(out, "SELECT session FROM members_session WHERE member_id=%lu ORDER BY id DESC LIMIT 1", out["member_id"].Long());
|
||||
member_email_calls(in["action"].Long(), in, out);
|
||||
//===============================================================================================================================
|
||||
pgsql_query("UPDATE members SET last_login = now() WHERE id = %lu", out["member_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 SessionCheck(long uid, const char *sessionid, int create) {
|
||||
logfmt(logINFO, "long SessionCheck(long uid, const char *sessionid, int create )");
|
||||
// Sanity check
|
||||
|
||||
long session_expired_minutes = 15; // load in the global
|
||||
|
||||
|
||||
if (uid < 1 || sessionid == NULL || strlen(sessionid) < 4) {
|
||||
return -1L; // Invalif parameters
|
||||
}
|
||||
logfmt(logINFO, "#######-#########-A");
|
||||
// Clean old sessions
|
||||
if (create == 1) // Clean Previous session by force
|
||||
{
|
||||
pgsql_exec("DELETE FROM members_session WHERE member_id=%ld", uid);
|
||||
}
|
||||
logfmt(logINFO, "#######-#########-B");
|
||||
|
||||
pgsql_exec("DELETE FROM members_session WHERE member_id=%ld AND updated < (now() - interval '%lu minutes')", uid, session_expired_minutes);
|
||||
// Update/check existing session
|
||||
if (create == 0) {
|
||||
|
||||
pgsql_exec("UPDATE members_session SET updated=NOW() WHERE member_id=%ld AND session='%s'", uid, sessionid);
|
||||
|
||||
const PGresult *res = pgsql_query("SELECT * FROM members_session WHERE member_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 members_session WHERE member_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 members_session WHERE member_id=%lu AND session='%s'", uid, sessionid) > 0) {
|
||||
pgsql_exec("UPDATE members_session SET updated=NOW() WHERE member_id=%ld 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["member_id"] = uid;
|
||||
sess["member_id"].set_valid(true);
|
||||
sess["session"] = sessionid;
|
||||
sess["session"].set_valid(true);
|
||||
long sid = insert_db_record(DBS_VALID, "members_session", "members_session_id_seq", sess); //members_session_id_seq
|
||||
if (sid > 0) {
|
||||
return sid; // New session created
|
||||
}
|
||||
return -3L; // Failed to create new session
|
||||
}
|
||||
logfmt(logINFO, "/long SessionCheck(long uid, const char *sessionid, int create )");
|
||||
return 0L; // No route
|
||||
}
|
||||
|
||||
vector<string> split_string(const char *str, char c = ' ')
|
||||
{
|
||||
vector<string> result;
|
||||
do {
|
||||
const char *begin = str;
|
||||
while(*str != c && *str)
|
||||
str++;
|
||||
result.push_back(string(begin, str));
|
||||
} while (0 != *str++);
|
||||
return result;
|
||||
}
|
||||
|
||||
// trim from start (in place)
|
||||
static inline void ltrim(std::string &s) {
|
||||
s.erase(s.begin(), std::find_if(s.begin(), s.end(),
|
||||
std::not1(std::ptr_fun<int, int>(std::isspace))));
|
||||
}
|
||||
|
||||
// trim from end (in place)
|
||||
static inline void rtrim(std::string &s) {
|
||||
s.erase(std::find_if(s.rbegin(), s.rend(),
|
||||
std::not1(std::ptr_fun<int, int>(std::isspace))).base(), s.end());
|
||||
}
|
||||
|
||||
// trim from both ends (in place)
|
||||
static inline void trim(std::string &s) {
|
||||
ltrim(s);
|
||||
rtrim(s);
|
||||
}
|
||||
|
||||
// trim from start (copying)
|
||||
static inline std::string ltrim_copy(std::string s) {
|
||||
ltrim(s);
|
||||
return s;
|
||||
}
|
||||
|
||||
// trim from end (copying)
|
||||
static inline std::string rtrim_copy(std::string s) {
|
||||
rtrim(s);
|
||||
return s;
|
||||
}
|
||||
|
||||
// trim from both ends (copying)
|
||||
static inline std::string trim_copy(std::string s) {
|
||||
trim(s);
|
||||
return s;
|
||||
}
|
||||
|
||||
long kleenNewLundryPickUp(CVars in, CVars &out) {
|
||||
CVars k;
|
||||
out = in;
|
||||
|
||||
long ret = PHP_API_BAD_PARAM;
|
||||
long service_total = 0;
|
||||
long discount_rate = 0;
|
||||
try {
|
||||
|
||||
logfmt(logINFO, "kleenNewLundryPickUp Start()");
|
||||
REQ_LONG(in, "pid", 0, -1);
|
||||
REQ_LONG(in, "member_id", 0, -1);
|
||||
REQ_LONG(in, "service_type", 0, -1);
|
||||
REQ_LONG(in, "agent_id", 0, -1);
|
||||
REQ_STRING(in, "service_date", 5, 23, "(.*)");
|
||||
REQ_LONG(in, "quantity", 0, -1);
|
||||
REQ_LONG(in, "deliverydays", 0, -1);
|
||||
REQ_STRING(in, "deiverytime", 5, 11, "(.*)");
|
||||
REQ_STRING(in, "service_list", 1, 120, "(.*)");
|
||||
REQ_STRING(in, "loc", 5, 16, "(.*)");
|
||||
OPTIONAL(in, "instruction") REQ_STRING(in, "instruction", 1, 100, "(.*)");
|
||||
//REQ_STRING (in, "sessionid", 4, 40, "(.*)");
|
||||
OPTIONAL(in, "coupon") REQ_STRING(in, "coupon", 1, 15, "(.*)");
|
||||
OPTIONAL(in, "discount_rate") REQ_LONG(in, "discount_rate", 0, -1);
|
||||
|
||||
discount_rate = in["discount_rate"].Long() + 0;
|
||||
|
||||
const char * loc = getenv("REMOTE_ADDR");
|
||||
|
||||
long memberF = 0;
|
||||
logfmt(logINFO, "~~~~~SPLIT_IN1~~~~ MEMBER %lu", memberF);
|
||||
memberF = load_db_record(k, "SELECT *,id AS member_id FROM members WHERE id=%lu ", in["member_id"].Long());
|
||||
logfmt(logINFO, "~~~~~SPLIT_IN2~~~~ MEMBER %lu", memberF);
|
||||
// memberF = 1;
|
||||
if (memberF > 0) {
|
||||
// LETS CREATE THE REQUEST NOW
|
||||
CVars x;
|
||||
x["pid"] = in["pid"];
|
||||
x["pid"].set_valid(true);
|
||||
|
||||
x["service_type"] = in["service_type"];
|
||||
x["service_type"].set_valid(true);
|
||||
|
||||
x["member_id"] = in["member_id"];
|
||||
x["member_id"].set_valid(true);
|
||||
x["agent_id"] = in["agent_id"];
|
||||
x["agent_id"].set_valid(true);
|
||||
x["service_type"] = in["service_type"];
|
||||
x["service_type"].set_valid(true);
|
||||
x["service_date"] = in["service_date"];
|
||||
x["service_date"].set_valid(true);
|
||||
x["loc"] = loc;
|
||||
x["loc"].set_valid(true);
|
||||
x["quantity"] = in["quantity"];
|
||||
x["quantity"].set_valid(true);
|
||||
|
||||
x["deliverydays"] = in["deliverydays"];
|
||||
x["deliverydays"].set_valid(true);
|
||||
x["deiverytime"] = in["deiverytime"];
|
||||
x["deiverytime"].set_valid(true);
|
||||
|
||||
x["coupon"] = in["coupon"];
|
||||
x["coupon"].set_valid(true);
|
||||
|
||||
//in["service_list"] = " S01-1@S02-1@S03-1@S04-1@S05-1@S06-4@S07-1@S08-1@S09-1@S10-1@ ";
|
||||
/*
|
||||
I want to spilit int
|
||||
|
||||
S01 1
|
||||
S02 2
|
||||
S03 1
|
||||
S04 1
|
||||
S05 1
|
||||
S06 2
|
||||
S07 1
|
||||
S08 1
|
||||
S09 1
|
||||
S10 1
|
||||
|
||||
INSERT INTO table (SO1, 1)
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
out["service_id"] = insert_db_record(DBS_VALID, "members_service_request", "members_service_request_id_seq", x);
|
||||
if (out["service_id"].Long() > 0) {
|
||||
|
||||
if (in["instruction"].length() > 0)
|
||||
{
|
||||
// let us save instruction to another table
|
||||
}
|
||||
|
||||
if (x["service_type"].Long() == 2) { // dry clean service now
|
||||
logfmt(FLOG_MAX, "service_list=%s", in["service_list"].c_str());
|
||||
vector<string> result = split_string(in["service_list"].c_str(), '@');
|
||||
vector<string>::iterator it;
|
||||
char *key, *val;
|
||||
for (it = result.begin(); it != result.end(); it++) {
|
||||
string item = trim_copy(*it);
|
||||
if (item.empty()) {
|
||||
logfmt(FLOG_MAX, "item is empty");
|
||||
} else {
|
||||
logfmt(FLOG_MAX, "item=%s", item.c_str());
|
||||
key = strtok((char *) item.c_str(), "-");
|
||||
val = strtok(NULL, "-");
|
||||
logfmt(FLOG_MAX, "key=%s, val=%s", key, val);
|
||||
|
||||
CVars v;
|
||||
if ( load_db_record(v, "SELECT * FROM dryclean_service WHERE code='%s' ", key) > 0 ) {
|
||||
CVars m;
|
||||
m["member_id"] = in["member_id"];
|
||||
m["member_id"].set_valid(true);
|
||||
m["service_id"] = out["service_id"];
|
||||
m["service_id"].set_valid(true);
|
||||
m["code"] = v["code"];
|
||||
m["code"].set_valid(true);
|
||||
m["description"] = v["description"];
|
||||
m["description"].set_valid(true);
|
||||
m["price"] = v["price"];
|
||||
m["price"].set_valid(true);
|
||||
m["quantity"] = val;
|
||||
m["quantity"].set_valid(true);
|
||||
m["total"] = m["quantity"].Long() * v["price"].Long();
|
||||
m["total"].set_valid(true);
|
||||
out["detail_id"] = insert_db_record(DBS_VALID, "members_service_detail", "members_service_detail_id_seq", m);
|
||||
|
||||
service_total = m["total"].Long() + service_total;
|
||||
|
||||
/*
|
||||
id | code | description | price | added
|
||||
----+------+-------------------+-------+----------------------------
|
||||
1 | S01 | Shirt (Laundry) | 160 | 2018-07-19 09:43:21.379297
|
||||
2 | S02 | Shirt (Dry Clean) | 400 | 2018-07-19 09:43:21.383512
|
||||
3 | S03 | Shirt (Ladies) | 400 | 2018-07-19 09:43:21.386951
|
||||
|
||||
*/
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
CVars t;
|
||||
if (in["service_type"].Long() == 2) {
|
||||
|
||||
if (discount_rate < 100) {
|
||||
service_total = service_total * (100 - discount_rate)/100;
|
||||
}
|
||||
t["est_cost"] = service_total;
|
||||
} else {
|
||||
t["est_cost"] = serviceCost(out["service_id"].Long(), discount_rate);
|
||||
}
|
||||
|
||||
pgsql_query("UPDATE members_service_request SET est_cost = %lu, discount_rate = %lu WHERE id = %lu", t["est_cost"].Long(),discount_rate, out["service_id"].Long());
|
||||
|
||||
serviceCost( out["service_id"].Long(),discount_rate );
|
||||
load_db_record(out, "SELECT * FROM members_service_request WHERE id=%lu ", out["service_id"].Long());
|
||||
// Now Send Email
|
||||
member_email_calls(in["action"].Long(), out, out);
|
||||
alert_email_calls(in["action"].Long(), out, out);
|
||||
// ==============
|
||||
ret = 100;
|
||||
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
}
|
||||
|
||||
} catch (bad_parameter) {
|
||||
logfmt(logINFO, "ERROR CALL long kleenNewLundryPickUp(CVars in, CVars &out)");
|
||||
}
|
||||
|
||||
logfmt(logINFO, "/kleenNewLundryPickUp()");
|
||||
return ret;
|
||||
|
||||
}
|
||||
|
||||
long serviceCost(long service_id, long discount_rate) {
|
||||
long service_cost = 0;
|
||||
CVars k;
|
||||
if (load_db_record(k, "SELECT * FROM members_service_request WHERE id=%lu ", service_id) > 0) {
|
||||
if (k["deliverydays"].Long() == 1) {
|
||||
service_cost = (k["quantity"].Long() * 3000 + 1000)*(1.10) *1.03;
|
||||
} else {
|
||||
service_cost = (k["quantity"].Long() * 3000 + 1000) *1.03;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
if (discount_rate < 100) {
|
||||
service_cost = service_cost * (100 - discount_rate)/100;
|
||||
}
|
||||
return service_cost;
|
||||
}
|
||||
|
||||
long medTrCreateMember(CVars in, CVars &out) {
|
||||
long ret = PHP_API_BAD_PARAM;
|
||||
logfmt(logINFO, "medTrCreateMember()");
|
||||
|
||||
try {
|
||||
|
||||
REQ_LONG(in, "pid", 0, -1);
|
||||
REQ_STRING(in, "username", 5, 49, "(.*)");
|
||||
REQ_STRING(in, "firstname", 2, 49, "(.*)");
|
||||
REQ_STRING(in, "lastname", 2, 49, "(.*)");
|
||||
OPTIONAL(in, "phone") REQ_STRING(in, "phone", 5, 23, "(.*)");
|
||||
REQ_STRING(in, "password", 5, 49, "(.*)");
|
||||
OPTIONAL(in, "phone") REQ_STRING(in, "loc", 5, 16, "(.*)");
|
||||
OPTIONAL(in, "login") REQ_LONG(in, "login", 0, -1);
|
||||
|
||||
long member_id = 0;
|
||||
|
||||
//REQ_STRING (in, "sessionid", 4, 40, "(.*)");
|
||||
const char * loc = getenv("REMOTE_ADDR");
|
||||
|
||||
ret = load_db_record(out, "SELECT *,id AS member_id FROM members WHERE LOWER(username)=LOWER('%s') ", in["username"].c_str());
|
||||
if (ret > 0) {
|
||||
|
||||
|
||||
|
||||
// LETS CREATE THE ACOUNT NOW
|
||||
CVars x;
|
||||
x["pid"] = in["pid"];
|
||||
x["pid"].set_valid(true);
|
||||
x["username"] = in["username"];
|
||||
x["username"].set_valid(true);
|
||||
x["firstname"] = in["firstname"];
|
||||
x["firstname"].set_valid(true);
|
||||
x["lastname"] = in["lastname"];
|
||||
x["lastname"].set_valid(true);
|
||||
x["phone"] = in["phone"];
|
||||
x["phone"].set_valid(true);
|
||||
x["loc"] = in["loc"];
|
||||
x["loc"].set_valid(true);
|
||||
x["email"] = in["email"];
|
||||
x["email"].set_valid(true);
|
||||
x["password"] = in["email"];
|
||||
x["password"].set_valid(true);
|
||||
out["member_id"] = insert_db_record(DBS_VALID, "members", "members_id_seq", x);
|
||||
if (out["member_id"].Long() > 0) {
|
||||
pgsql_query("UPDATE members SET password = md5('%s') WHERE id = %lu", in["password"].c_str(), out["member_id"].Long()); // setting the password MD5 now
|
||||
// Now Send Email
|
||||
ret = PHP_API_OK;
|
||||
out["status"] = "OK";
|
||||
member_id = out["member_id"].Long();
|
||||
|
||||
member_email_calls(MEDTRANS_USER_CREATE, out, out);
|
||||
// out["member_id"] = member_id;
|
||||
|
||||
// if (in["login"] != "" && in["login"] == 1) {
|
||||
in["action"] = MEDTRANS_USER_LOGIN;
|
||||
in["action"].set_valid(true); // needed for next action to know what email to send
|
||||
ret = medTMemberLogin(in, out);
|
||||
ret = 100; // needed if login is good
|
||||
// }
|
||||
|
||||
// ==============
|
||||
}
|
||||
|
||||
|
||||
} else {
|
||||
// LETS CREATE THE ACOUNT NOW
|
||||
CVars x;
|
||||
x["pid"] = in["pid"];
|
||||
x["pid"].set_valid(true);
|
||||
x["username"] = in["username"];
|
||||
x["username"].set_valid(true);
|
||||
x["firstname"] = in["firstname"];
|
||||
x["firstname"].set_valid(true);
|
||||
x["lastname"] = in["lastname"];
|
||||
x["lastname"].set_valid(true);
|
||||
x["phone"] = in["phone"];
|
||||
x["phone"].set_valid(true);
|
||||
x["loc"] = in["loc"];
|
||||
x["loc"].set_valid(true);
|
||||
x["email"] = in["email"];
|
||||
x["email"].set_valid(true);
|
||||
x["password"] = in["email"];
|
||||
x["password"].set_valid(true);
|
||||
out["member_id"] = insert_db_record(DBS_VALID, "members", "members_id_seq", x);
|
||||
if (out["member_id"].Long() > 0) {
|
||||
pgsql_query("UPDATE members SET password = md5('%s') WHERE id = %lu", in["password"].c_str(), out["member_id"].Long()); // setting the password MD5 now
|
||||
// Now Send Email
|
||||
ret = PHP_API_OK;
|
||||
out["status"] = "OK";
|
||||
|
||||
|
||||
member_email_calls(in["action"].Long(), out, out);
|
||||
|
||||
// if (in["login"] != "" && in["login"] == 1) {
|
||||
in["action"] = MEDTRANS_USER_LOGIN;
|
||||
in["action"].set_valid(true); // needed for next action to know what email to send
|
||||
ret = medTMemberLogin(in, out);
|
||||
ret = 100; // needed if login is good
|
||||
// }
|
||||
|
||||
// ==============
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}catch (bad_parameter) {
|
||||
logfmt(logINFO, "ERROR CALL medTrCreateMember");
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
logfmt(logINFO, "/medTrCreateMember()");
|
||||
return ret;
|
||||
}
|
||||
|
||||
long medTrUpdateStartProfile(CVars in, CVars &out) {
|
||||
|
||||
long ret = medTrUpdateProfile(in, out);
|
||||
if (ret == PHP_API_OK) {
|
||||
load_db_record(out, "SELECT UPPER( md5( now()::text) ) AS sessionid,m.*,mp.*,m.id AS member_id,mp.id AS member_profile_id FROM members m \
|
||||
LEFT JOIN members_profile mp ON mp.member_id = m.id \
|
||||
WHERE m.id = %lu", in["member_id"].Long());
|
||||
|
||||
// We need to have the session back
|
||||
load_db_record(out, "SELECT * FROM members_session WHERE member_id = %lu ORDER BY id DESC limit 1", in["member_id"].Long());
|
||||
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
long medTrUpdateProfile(CVars in, CVars &out) {
|
||||
long ret = PHP_API_BAD_PARAM;
|
||||
logfmt(logINFO, "medTrUpdateProfile()");
|
||||
REQ_LONG(in, "pid", 0, -1);
|
||||
REQ_LONG(in, "member_id", 0, -1);
|
||||
REQ_STRING(in, "street1", 2, 49, "(.*)");
|
||||
OPTIONAL(in, "street2") REQ_STRING(in, "street2", 1, 49, "(.*)");
|
||||
REQ_STRING(in, "city", 5, 49, "(.*)");
|
||||
// OPTIONAL(in, "phone") REQ_STRING(in, "phone", 5, 23, "(.*)");
|
||||
REQ_STRING(in, "zipcode", 1, 12, "(.*)");
|
||||
REQ_STRING(in, "state", 1, 3, "(.*)");
|
||||
REQ_STRING(in, "country", 1, 3, "(.*)");
|
||||
REQ_STRING(in, "loc", 5, 16, "(.*)");
|
||||
|
||||
//REQ_STRING (in, "sessionid", 4, 40, "(.*)");
|
||||
const char * loc = getenv("REMOTE_ADDR");
|
||||
CVars x;
|
||||
x["pid"] = in["pid"];
|
||||
x["pid"].set_valid(true);
|
||||
x["street1"] = in["street1"];
|
||||
x["street1"].set_valid(true);
|
||||
x["street2"] = in["street2"];
|
||||
x["street2"].set_valid(true);
|
||||
x["city"] = in["city"];
|
||||
x["city"].set_valid(true);
|
||||
// x["phone"] = in["phone"];
|
||||
// x["phone"].set_valid(true);
|
||||
x["zipcode"] = in["zipcode"];
|
||||
x["zipcode"].set_valid(true);
|
||||
x["loc"] = in["loc"];
|
||||
x["loc"].set_valid(true);
|
||||
x["state"] = in["state"];
|
||||
x["state"].set_valid(true);
|
||||
x["country"] = in["country"];
|
||||
x["country"].set_valid(true);
|
||||
|
||||
ret = load_db_record(out, "SELECT *,id AS member_profile_id FROM members_profile WHERE member_id = %lu ", in["member_id"].Long());
|
||||
if (ret > 0) {
|
||||
update_db_record(DBS_VALID, "members_profile", x, in["member_profile_id"].Long());
|
||||
member_email_calls(in["action"].Long(), in, out);
|
||||
ret = PHP_API_OK;
|
||||
} else {
|
||||
// LETS CREATE THE ACOUNT NOW
|
||||
x["member_id"] = in["member_id"];
|
||||
x["member_id"].set_valid(true);
|
||||
out["member_profile_id"] = insert_db_record(DBS_VALID, "members_profile", "members_profile_id_seq", x);
|
||||
if (out["member_profile_id"].Long() > 0) {
|
||||
member_email_calls(in["action"].Long(), in, out);
|
||||
// Now Send Email
|
||||
ret = PHP_API_OK;
|
||||
// ==============
|
||||
}
|
||||
}
|
||||
logfmt(logINFO, "/medTrUpdateProfile()");
|
||||
return ret;
|
||||
}
|
||||
|
||||
// vi:ts=2
|
||||
|
||||
@@ -0,0 +1,337 @@
|
||||
/*
|
||||
ChiefSoft Works LLC
|
||||
2017 - Users/Members Management Extension Module
|
||||
www.chiefsoft.com
|
||||
*/
|
||||
|
||||
|
||||
// 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_users.h"
|
||||
/*
|
||||
kleen=> SELECT * FROM dryclean_service ORDER BY id ASC;
|
||||
id | code | description | price | added
|
||||
----+------+-------------------+-------+----------------------------
|
||||
1 | S01 | Shirt (Laundry) | 160 | 2018-07-19 09:43:21.379297
|
||||
2 | S02 | Shirt (Dry Clean) | 400 | 2018-07-19 09:43:21.383512
|
||||
3 | S03 | Shirt (Ladies) | 400 | 2018-07-19 09:43:21.386951
|
||||
4 | S04 | Polo Shirt | 350 | 2018-07-19 09:43:21.390057
|
||||
5 | S05 | Pants | 400 | 2018-07-19 09:43:21.392852
|
||||
6 | S06 | 2 Piece Suit | 800 | 2018-07-19 09:43:21.395957
|
||||
7 | S07 | Blouse | 500 | 2018-07-19 09:43:21.398769
|
||||
8 | S08 | Skirt | 500 | 2018-07-19 09:43:21.401478
|
||||
9 | S09 | Dress | 600 | 2018-07-19 09:43:21.404238
|
||||
10 | S10 | Bedsheets | 1500 | 2018-07-19 09:43:21.407218
|
||||
11 | S11 | Apron | 350 | 2018-08-10 06:53:05.885366
|
||||
(11 rows)
|
||||
|
||||
*/
|
||||
long kleenDryCleanList(CVars in, CVars &out) {
|
||||
long ret = PHP_API_BAD_PARAM;
|
||||
char vname[20];
|
||||
try {
|
||||
out["total_record"] = "0";
|
||||
|
||||
const PGresult *res = pgsql_query("SELECT * FROM dryclean_service ORDER BY id ASC");
|
||||
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), "code_%05d", i);
|
||||
out[vname] = rec["code"];
|
||||
|
||||
snprintf(vname, sizeof (vname), "id_%05d", i);
|
||||
out[vname] = rec["id"];
|
||||
|
||||
snprintf(vname, sizeof (vname), "description_%05d", i);
|
||||
out[vname] = rec["description"];
|
||||
|
||||
snprintf(vname, sizeof (vname), "price_%05d", i);
|
||||
out[vname] = rec["price"];
|
||||
|
||||
}
|
||||
}
|
||||
ret = PHP_API_OK;
|
||||
out["status"] = "OK";
|
||||
} catch (bad_parameter) {
|
||||
logfmt(logINFO, "ERROR CALL long kleenDryCleanList(CVars in, CVars &out)");
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
long passwordReset(CVars in, CVars &out) {
|
||||
logfmt(logINFO, "passwordReset()");
|
||||
|
||||
long mode = REQ_LONG(in, "mode", 0, -1);
|
||||
switch (mode) {
|
||||
|
||||
case RESET_START:
|
||||
return startPassReset(in, out);
|
||||
break;
|
||||
|
||||
case RESET_CONFIRM:
|
||||
return confirmPassReset(in, out);
|
||||
break;
|
||||
|
||||
|
||||
case RESET_COMPLETE:
|
||||
return completePassReset(in, out);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
long startPassReset(CVars in, CVars &out) {
|
||||
logfmt(logINFO, "startPassReset()");
|
||||
long ret = PHP_API_BAD_PARAM;
|
||||
CVars x,y;
|
||||
try {
|
||||
REQ_STRING(in, "username", 2, 49, "(.*)");
|
||||
const char * loc = getenv("REMOTE_ADDR");
|
||||
ret = load_db_record(out, "SELECT id AS member_id,now() AS reset_seed FROM members WHERE status=1 AND LOWER(username)=LOWER('%s') ", in["username"].c_str());
|
||||
if (ret && out["member_id"].Long() > 0) {
|
||||
// remove all existing session
|
||||
pgsql_exec("UPDATE resetpassword SET status=7 WHERE status NOT IN (3,5) AND member_id=%ld ", out["member_id"].Long());
|
||||
// Create New Session Now
|
||||
|
||||
if (load_db_record(y, "SELECT floor( random()*100000) AS reset_pin ,md5('%s') AS reset_key", out["reset_seed"].c_str()) >= 0) {
|
||||
x["username"] = in["username"];
|
||||
x["member_id"] = out["member_id"];
|
||||
x["loc"] = loc;
|
||||
x["reset_key"] = y["reset_key"];
|
||||
x["reset_pin"] = y["reset_pin"];
|
||||
|
||||
x["username"].set_valid(true);
|
||||
x["loc"].set_valid(true);
|
||||
x["reset_key"].set_valid(true);
|
||||
x["reset_pin"].set_valid(true);
|
||||
x["member_id"].set_valid( true );
|
||||
|
||||
out["reset_id"] = insert_db_record(DBS_VALID, "resetpassword", "resetpassword_id_seq", x);
|
||||
if (out["reset_id"].Long() > 0) {
|
||||
ret = PHP_API_OK;
|
||||
out["reset_key"] = "YOU WILL GET THIS IF PIN IS CORRECT IN CONFIRM"; //x["reset_key"];
|
||||
out["mode"] = RESET_START;
|
||||
member_email_calls(in["action"].Long(), out, x); // note the use of out to send in
|
||||
}
|
||||
}
|
||||
} else {
|
||||
x["username"] = in["username"];
|
||||
x["loc"] = loc;
|
||||
x["status"] = 3;
|
||||
|
||||
x["username"].set_valid(true);
|
||||
x["loc"].set_valid(true);
|
||||
x["status"].set_valid(true);
|
||||
out["reset_id"] = insert_db_record(DBS_VALID, "resetpassword", "resetpassword_id_seq", x);
|
||||
|
||||
out["status_message"] = "Invalid Username or disabled account";
|
||||
out["status_advice"] = "Check username or Contact support";
|
||||
}
|
||||
out["reset_seed="] = "REMOVED";
|
||||
} catch (bad_parameter) {
|
||||
logfmt(logINFO, "ERROR CALL long startPassReset(CVars in, CVars &out)");
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
long confirmPassReset(CVars in, CVars &out) {
|
||||
logfmt(logINFO, "confirmPassReset()");
|
||||
long ret = PHP_API_BAD_PARAM;
|
||||
CVars x, y;
|
||||
try {
|
||||
REQ_STRING(in, "username", 2, 49, "(.*)");
|
||||
REQ_LONG(in, "reset_pin", 0, -1);
|
||||
const char * loc = getenv("REMOTE_ADDR");
|
||||
|
||||
ret = load_db_record(out, "SELECT * FROM resetpassword WHERE status=1 AND LOWER(username)=LOWER('%s') AND reset_pin=%lu AND loc='%s'", in["username"].c_str(), in["reset_pin"].Long(), loc);
|
||||
if (ret && out["id"].Long() > 0) {
|
||||
ret = PHP_API_OK;
|
||||
} else {
|
||||
out["status_message"] = "Invalid PIN or disabled account";
|
||||
out["status_advice"] = "Contact support or Start all over";
|
||||
}
|
||||
// out["reset_seed="] = "REMOVED";
|
||||
} catch (bad_parameter) {
|
||||
logfmt(logINFO, "ERROR CALL long confirmPassReset(CVars in, CVars &out)");
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
long completePassReset(CVars in, CVars &out) {
|
||||
logfmt(logINFO, "completePassReset()");
|
||||
long ret = PHP_API_BAD_PARAM;
|
||||
CVars x, y;
|
||||
try {
|
||||
REQ_STRING(in, "username", 2, 49, "(.*)");
|
||||
REQ_STRING(in, "newpassword", 2, 15, "(.*)");
|
||||
REQ_LONG(in, "reset_pin", 0, -1);
|
||||
const char * loc = getenv("REMOTE_ADDR");
|
||||
|
||||
ret = load_db_record(out, "SELECT *,id AS reset_id FROM resetpassword WHERE status=1 AND LOWER(username)=LOWER('%s') AND reset_pin=%lu AND loc='%s' AND reset_key='%s'", in["username"].c_str(), in["reset_pin"].Long(), loc, in["reset_key"].c_str());
|
||||
if (ret && out["reset_id"].Long() > 0) {
|
||||
|
||||
|
||||
if (pgsql_query("UPDATE members SET password=md5('%s') WHERE id =%lu", in["newpassword"].c_str(), out["member_id"].Long()) >= 0) {
|
||||
pgsql_query("UPDATE resetpassword SET status = 5,reset_key=NULL WHERE id =%lu", out["reset_id"].Long());
|
||||
ret = PHP_API_OK;
|
||||
}
|
||||
|
||||
|
||||
out["reset_key"] = "YOU WILL GET THIS IF PIN IS CORRECT IN CONFIRM"; //x["reset_key"];
|
||||
out["mode"] = RESET_COMPLETE;
|
||||
member_email_calls(in["action"].Long(), out, x); // note the use of out to send in
|
||||
|
||||
|
||||
} else {
|
||||
out["status_message"] = "Invalid call or disabled account";
|
||||
out["status_advice"] = "Contact Support";
|
||||
}
|
||||
// out["reset_seed="] = "REMOVED";
|
||||
} catch (bad_parameter) {
|
||||
logfmt(logINFO, "ERROR CALL long confirmPassReset(CVars in, CVars &out)");
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
long DstartPassReset(CVars in, CVars &out) {
|
||||
logfmt(logINFO, "startPassReset()");
|
||||
return 0;
|
||||
}
|
||||
|
||||
long DconfirmPassReset(CVars in, CVars &out) {
|
||||
logfmt(logINFO, "confirmPassReset()");
|
||||
return 0;
|
||||
}
|
||||
|
||||
long DcompletePassReset(CVars in, CVars &out) {
|
||||
logfmt(logINFO, "completePassReset()");
|
||||
return 0;
|
||||
}
|
||||
|
||||
long manageUserCCList(CVars in, CVars &out) {
|
||||
logfmt(logINFO, "manageUserCCList()");
|
||||
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
utransport=> SELECT * FROM creditcard LIMIT 10 ;
|
||||
id | member_id | type | digits | cvv2 | attempts | sha1 | firstname | lastname | street1 | street2 | city | state | postal | country | status | active | added_dt | description | stripe_card_id | expiration_month | expiration_year
|
||||
----+-----------+------+--------+------+----------+------+-----------+-----------+----------------------+---------+----------+-------+--------+---------+--------+--------+-------------------------------+-------------+-------------------------------+------------------+-----------------
|
||||
1 | 2588 | 0 | 4242 | | 3 | | | | | | | | | | 3 | 1 | 2017-11-23 01:58:06.516697-05 | Visa | card_1BREevF5FERRcWDywupMIc0F | 12 | 2018
|
||||
2 | 2589 | 0 | 4242 | | 3 | | Chiedozie | Charles | 935 Merryweather Dr. | | Austell | GA | 30106 | US | 3 | 1 | 2017-11-23 02:22:44.008819-05 | Visa | card_1BRF2kF5FERRcWDypw0Hqc9q | 12 | 2018
|
||||
3 | 674 | 0 | 4242 | | 3 | | rodriguez | marylynne | 1426 Mandalay Court | | Lilburn | GA | 30047 | US | 3 | 1 | 2017-11-23 06:50:09.836866-05 | Visa | card_1BRJDYF5FERRcWDyqqo7pQc4 | 12 | 2018
|
||||
4 | 639 | 0 | 4242 | | 3 | | Gbadehan | Adebayo | 356 Holbrook Road | | Smyrna | GA | 30082 | US | 3 | 1 | 2017-11-23 07:15:37.774145-05 | Visa | card_1BRJcCF5FERRcWDyaiCdMwZA | 12 | 2018
|
||||
5 | 765 | 0 | 4242 | | 3 | | de vries | chris | 741 Crestwell Circle | | Atlanta | GA | 30331 | US | 3 | 1 | 2017-11-23 12:15:11.514433-05 | Visa | card_1BROI6F5FERRcWDyfpRUXoza | 12 | 2018
|
||||
6 | 765 | 0 | 4242 | | 3 | | de vries | chris | 741 Crestwell Circle | | Atlanta | GA | 30331 | US | 3 | 1 | 2017-11-23 12:16:24.561285-05 | Visa | card_1BROJHF5FERRcWDytk2IvLnq | 12 | 2018
|
||||
7 | 1942 | 0 | 4242 | | 3 | | Chevalier | Reynault | 1438 Mclendon drive | | Decatur | GA | 30033 | US | 3 | 1 | 2017-11-24 01:59:38.679594-05 | Visa | card_1BRb9xF5FERRcWDyj3EXBSxQ | 12 | 2018
|
||||
8 | 2404 | 0 | 4242 | | 3 | | turiano | james | 3907 Amicalola Pass | | Marietta | GA | 30062 | US | 3 | 1 | 2017-11-25 22:25:48.909543-05 | Visa | card_1BSGm7F5FERRcWDyZ6F4B6qS | 12 | 2018
|
||||
9 | 2404 | 0 | 4242 | | 3 | | turiano | james | 3907 Amicalola Pass | | Marietta | GA | 30062 | US | 3 | 1 | 2017-11-26 22:19:28.49225-05 | Visa | card_1BSd9XF5FERRcWDy8YbQA2me | 12 | 2018
|
||||
10 | 2404 | 0 | 4242 | | 3 | | turiano | james | 3907 Amicalola Pass | | Marietta | GA | 30062 | US | 3 | 1 | 2017-11-26 22:25:00.447243-05 | Visa | card_1BSdEtF5FERRcWDyohmt90nI | 12 | 2018
|
||||
(10 rows)
|
||||
|
||||
utransport=>
|
||||
|
||||
*/
|
||||
long userDeleteCard(CVars in, CVars &out) {
|
||||
logfmt(FLOG_MAX, "long userDeleteCard(CVars in, CVars &out)");
|
||||
long ret = PHP_API_BAD_PARAM;
|
||||
|
||||
REQ_LONG(in, "member_id", 0, -1);
|
||||
REQ_STRING(in, "sessionid", 2, 100, "(.*)");
|
||||
REQ_LONG(in, "paymentid", 0, -1);
|
||||
|
||||
long ret2 = load_db_record(out, "SELECT *,id AS card_id FROM creditcard "
|
||||
" WHERE member_id = %lu "
|
||||
" AND id = %lu AND status = 3", in["member_id"].Long(), in["paymentid"].Long());
|
||||
if (ret && out["card_id"].Long() > 0) {
|
||||
|
||||
if ( pgsql_query("UPDATE creditcard SET status = 7 WHERE status =3 AND member_id =%lu AND id = %lu",in["member_id"].Long(), in["paymentid"].Long())>=0 )
|
||||
{
|
||||
ret = 100;
|
||||
}
|
||||
|
||||
}
|
||||
out["delete_status"] = ret;
|
||||
|
||||
return ret;
|
||||
logfmt(FLOG_MAX, "/long userDeleteCard(CVars in, CVars &out)");
|
||||
}
|
||||
|
||||
|
||||
long getUserCCList(CVars in, CVars &out) {
|
||||
|
||||
logfmt(FLOG_MAX, "long getUserCCList(CVars in, CVars &out)");
|
||||
long ret = PHP_API_BAD_PARAM;
|
||||
char vname[30];
|
||||
try {
|
||||
REQ_LONG(in, "limit", 0, -1);
|
||||
REQ_LONG(in, "member_id", 0, -1);
|
||||
|
||||
out["total_record"] = "0";
|
||||
|
||||
const PGresult *res = pgsql_query("SELECT * FROM creditcard "
|
||||
" WHERE member_id= %lu AND stripe_card_id IS NOT NULL AND status<>7 "
|
||||
" ORDER BY id DESC LIMIT %lu", in["member_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), "description_%05d", i);
|
||||
out[vname] = rec["description"];
|
||||
|
||||
snprintf(vname, sizeof (vname), "digits_%05d", i);
|
||||
out[vname] = rec["digits"];
|
||||
snprintf(vname, sizeof (vname), "expiration_month_%05d", i);
|
||||
out[vname] = rec["expiration_month"];
|
||||
|
||||
snprintf(vname, sizeof (vname), "expiration_year_%05d", i);
|
||||
out[vname] = rec["expiration_year"];
|
||||
|
||||
|
||||
snprintf(vname, sizeof (vname), "paymentid_%05d", i);
|
||||
out[vname] = rec["id"];
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
ret = PHP_API_OK;
|
||||
out["status"] = "OK";
|
||||
} catch (bad_parameter) {
|
||||
logfmt(logINFO, "ERROR CALL long getUserCCList(CVars in, CVars &out)");
|
||||
}
|
||||
logfmt(FLOG_MAX, "/long getUserCCList(CVars in, CVars &out)");
|
||||
return ret;
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,656 @@
|
||||
/*
|
||||
General Header
|
||||
ChiefSoft Aug 2017
|
||||
*/
|
||||
#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 "cfg.h"
|
||||
#include <curl/curl.h>
|
||||
/*
|
||||
Other Headers
|
||||
*/
|
||||
#include "medTEmails.h"
|
||||
//#include "function_invoice.h"
|
||||
|
||||
|
||||
void vars2form(CVars &v, C_CGI_Form &form);
|
||||
void commonItems(C_CGI_Form &form);
|
||||
extern int mailsend(CVars in, CVars &out);
|
||||
extern long getMemberInvoiceID( long rid );
|
||||
/*
|
||||
long getMemberInvoiceID( long rid ){
|
||||
|
||||
return 0;
|
||||
}
|
||||
*/
|
||||
long member_email_calls(long action, CVars in, CVars &out) {
|
||||
logfmt(logINFO, "member_email_calls()");
|
||||
out["result"] = "ECHO BACKEND";
|
||||
|
||||
CVars x, y, z, x1, x2;
|
||||
long ret = 0;
|
||||
const char * loc = getenv("REMOTE_ADDR");
|
||||
C_CGI_Form form("", "");
|
||||
// form.LetStr("subject", "KleenApp Email Test");
|
||||
form.LetStr("site_name", "KleenApp");
|
||||
form.LetStr("contactus", "https://www.kleenapp.co/");
|
||||
|
||||
CGIList * inv_list = new CGIList(&form, "inv_items");
|
||||
char listing_items[1024];
|
||||
const PGresult *res;
|
||||
|
||||
|
||||
switch (action) {
|
||||
|
||||
case MEDTRANS_USER_NEWLUNDRYPICK:
|
||||
|
||||
|
||||
break;
|
||||
|
||||
case MERMSEMR_BKO_ADDCARD:
|
||||
logfmt(logINFO, "SEND ADD CARD EMAIL *****() %lu", in["card_id"].Long());
|
||||
if (load_db_record(x, "SELECT c.description,c.digits,m.*,m.email AS member_email FROM members m LEFT JOIN creditcard c ON c.member_id=m.id WHERE c.id = %lu", in["card_id"].Long()))
|
||||
{
|
||||
vars2form(x, form);
|
||||
form.LetStr("subject", "New Card Added");
|
||||
form.LetStr("email", x["member_email"].c_str());
|
||||
form.Email("USERS/member_card_added.mailfile");
|
||||
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case MERMSEMR_USER_CONFIRMPICKUP:
|
||||
if (load_db_record(x, "SELECT m.id AS member_id, a.agent_name,s.payment_id,"
|
||||
" TO_CHAR(s.service_date :: TIMESTAMP, 'Day Mon dd, yyyy HH:MI AM') AS long_date,"
|
||||
" a.street AS to_street,a.city AS to_city,a.state AS to_state,a.zipcode AS to_zipcode,a.phone AS to_phone,"
|
||||
" m.firstname,m.lastname,m.email AS member_email,p.amount,p.confirmation "
|
||||
" FROM members_service_request s "
|
||||
" LEFT JOIN agents a ON a.id=s.agent_id "
|
||||
" LEFT JOIN payment p ON p.id=s.payment_id "
|
||||
" LEFT JOIN members m ON m.id=s.member_id "
|
||||
" WHERE s.id=%lu", in["service_id"].Long()) > 0) {
|
||||
vars2form(x, form);
|
||||
|
||||
load_db_record(y, "SELECT street1 AS from_street, street2 AS from_street2, city AS from_city, zipcode AS from_zipcode , state AS from_state, country AS from_country "
|
||||
"FROM members_profile WHERE member_id =%lu", x["member_id"].Long());
|
||||
vars2form(y, form);
|
||||
|
||||
res = pgsql_query("SELECT *,total*0.01 AS line_total FROM members_service_detail WHERE service_id = %lu AND quantity > 0 ORDER BY id ASC", in["service_id"].Long());
|
||||
|
||||
/*
|
||||
kleen=> SELECT * FROM members_service_detail;
|
||||
id | member_id | service_id | code | description | price | quantity | total | added
|
||||
-----+-----------+------------+------+-------------------+-------+----------+-------+-------------------------------
|
||||
1 | 23 | 127 | S02 | Shirt (Dry Clean) | 400 | 3 | 1200 | 2018-07-19 10:28:35.543359-04
|
||||
2 | 23 | 127 | S05 | Pants | 400 | 3 | 1200 | 2018-07-19 10:28:35.544754-04
|
||||
3 | 23 | 127 | S08 | Skirt | 500 | 1 | 500 | 2018-07-19 10:28:35.545641-04
|
||||
4 | 23 | 128 | S01 | Shirt (Laundry) | 160 | 2 | 320 | 2018-07-19 10:42:26.895184-04
|
||||
5 | 23 | 128 | S02 | Shirt (Dry Clean) | 400 | 3 | 1200 | 2018-07-19 10:42:26.89645-04
|
||||
6 | 23 | 128 | S05 | Pants | 400 | 3 | 1200 | 2018-07-19 10:42:26.89732-04
|
||||
|
||||
*/
|
||||
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);
|
||||
|
||||
sprintf(listing_items, "<TR><td >*</td><td >%s</td><td >%s</td><td style='text-align:right;'>$%s</td></TR>", rec["description"].c_str(), rec["quantity"].c_str() , rec["line_total"].c_str());
|
||||
inv_list->LetStr("pin", listing_items);
|
||||
inv_list->CloseElement();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (x["member_id"].Long() > 0 && x["payment_id"].Long() > 0 ) {
|
||||
logfmt(logINFO, "GOOD STSRT ~*******************************************************()");
|
||||
vars2form(x, form); // bind again - somehow this email is not coming out
|
||||
form.LetStr("subject", "DryClean Pickup Confirmation");
|
||||
form.LetStr("email", x["member_email"].c_str());
|
||||
form.Email("MEMBERS/laundry_pic_confirmed.mailfile");
|
||||
logfmt(logINFO, "GOOD END ~*******************************************************()");
|
||||
|
||||
} else {
|
||||
form.LetStr("subject", "Failed Laundry Pickup Confirmation");
|
||||
form.LetStr("email", x["member_email"].c_str());
|
||||
form.Email("MEMBERS/laundry_pickup_confirmed_fail.mailfile");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
break;
|
||||
|
||||
|
||||
|
||||
case MEDTRANS_USER_LOGIN:
|
||||
if (load_db_record(x, "SELECT *,email as email2,now() AS last_login2 FROM members WHERE id = %lu ", in["member_id"].Long())) {
|
||||
vars2form(x, form);
|
||||
form.LetStr("subject", "KleenApp Account Access");
|
||||
form.LetStr("email", x["email2"].c_str());
|
||||
form.Email("USERS/user_login.mailfile");
|
||||
}
|
||||
break;
|
||||
|
||||
case MEDTRANS_USER_CREATE:
|
||||
case MERMSEMR_BKO_MEMBERADD:
|
||||
if (load_db_record(x, "SELECT *,email as email2,now() AS last_login2 FROM members WHERE id = %lu ", in["member_id"].Long())) {
|
||||
vars2form(x, form);
|
||||
form.LetStr("subject", "Welcome to KleenApp ");
|
||||
form.LetStr("email", x["email2"].c_str());
|
||||
form.Email("USERS/user_welcome.mailfile");
|
||||
|
||||
alert_email_calls(MEDTRANS_USER_CREATE, in, out);
|
||||
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case MEDTRANS_USER_PROFILE:
|
||||
// email_test(in, out);
|
||||
if (load_db_record(x, "SELECT m.*,mp.*,m.email AS email2 FROM members m LEFT JOIN members_profile mp ON m.id=mp.member_id WHERE m.id = %lu ", in["member_id"].Long())) {
|
||||
vars2form(x, form);
|
||||
form.LetStr("subject", "Profile Updated ");
|
||||
form.LetStr("email", x["email2"].c_str());
|
||||
form.Email("USERS/profile_update.mailfile");
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
}
|
||||
logfmt(logINFO, "/member_email_calls()");
|
||||
return ret;
|
||||
}
|
||||
////TO_CHAR(r.service_date :: TIMESTAMP, 'Day Mon dd, yyyy HH:MI AM') AS long_date
|
||||
long agent_email_calls(long action, CVars in, CVars &out) {
|
||||
|
||||
logfmt(logINFO, "agent_email_calls()");
|
||||
out["result"] = "ECHO BACKEND";
|
||||
|
||||
CVars x, y, z, x1, x2, x3;
|
||||
long ret = 0;
|
||||
char * server_name = getenv("SERVER_NAME");
|
||||
const char * loc = getenv("REMOTE_ADDR");
|
||||
C_CGI_Form form("", "");
|
||||
// form.LetStr("subject", "KleenApp Email Test");
|
||||
char vname[100];
|
||||
|
||||
form.LetStr("site_name", "KleenApp");
|
||||
form.LetStr("agent_site", "https://agent.medtransgo.com/");
|
||||
logfmt(logINFO, "@@@@@@->AMEYE-1)");
|
||||
|
||||
switch (action) {
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
case MEDTRANS_TRANSP_SET_TRANSSTATUS:
|
||||
|
||||
if (load_db_record(x, "SELECT r.*,l.language,a.agent_id, a.driver,"
|
||||
" TO_CHAR(r.service_date :: TIMESTAMP, 'Day Mon dd, yyyy HH:MI AM') AS long_date "
|
||||
" FROM members_service_request r LEFT JOIN transport_assignment a ON a.id=r.transp_assign"
|
||||
" LEFT JOIN languages l ON l.code = r.lang_code "
|
||||
" WHERE r.id = %lu ", in["transport_id"].Long())) {
|
||||
vars2form(x, form);
|
||||
load_db_record(y, "SELECT email AS req_email,firstname AS req_firstname,lastname AS req_lastname FROM members WHERE id = %lu ", x["member_id"].Long());
|
||||
vars2form(y, form);
|
||||
|
||||
if (x["driver"] != "" && x["driver"].Long() > 0) {
|
||||
//
|
||||
load_db_record(z, "SELECT firstname AS driver_firstname,lastname AS driver_lastname,email AS driver_email FROM transport_drivers WHERE id = %lu ", x["driver"].Long());
|
||||
vars2form(z, form);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
if (in["mode"].Long() == MODE_CONFIRM_ASSIGNMENT) {
|
||||
logfmt(logINFO, "Ready to Send Confirm Email()");
|
||||
}
|
||||
|
||||
if (in["mode"].Long() == MODE_ACTIVATE_ASSIGNMENT) {
|
||||
logfmt(logINFO, "Ready to Send Driver Selected Email()");
|
||||
form.LetStr("email", z["driver_email"].c_str());
|
||||
form.Email("AGENTS/transport_assign_driver.mailfile"); // email to driver to know of assignment
|
||||
}
|
||||
break;
|
||||
|
||||
case MEDTRANS_PROVIDER_SETSTATUS:
|
||||
/*
|
||||
if (load_db_record(x, "SELECT r.*,l.language,a.agent_id, a.driver,"
|
||||
" TO_CHAR(r.service_date :: TIMESTAMP, 'Day Mon dd, yyyy HH:MI AM') AS long_date "
|
||||
" FROM members_service_request r LEFT JOIN transport_assignment a ON a.id=r.transp_assign"
|
||||
" LEFT JOIN languages l ON l.code = r.lang_code "
|
||||
" WHERE r.id = %lu ", in["transport_id"].Long())) {
|
||||
vars2form(x, form);
|
||||
load_db_record(y, "SELECT email AS req_email,firstname AS req_firstname,lastname AS req_lastname FROM members WHERE id = %lu ", x["member_id"].Long());
|
||||
vars2form(y, form);
|
||||
|
||||
if (x["driver"] != "" && x["driver"].Long() > 0) {
|
||||
//
|
||||
load_db_record(z, "SELECT d.firstname AS driver_firstname,d.lastname AS driver_lastname,d.email AS driver_email, a.agent_name,a.email AS agent_email FROM transport_drivers d LEFT JOIN agents a ON a.id=d.agent_id WHERE d.id = %lu ", x["driver"].Long());
|
||||
vars2form(z, form);
|
||||
}
|
||||
}
|
||||
|
||||
//pickup_assigned.mailfile
|
||||
|
||||
*/
|
||||
|
||||
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
//email_test(in, out);
|
||||
return 0;
|
||||
}
|
||||
|
||||
long provider_email_calls(long action, CVars in, CVars &out) {
|
||||
|
||||
logfmt(logINFO, "provider_email_calls()");
|
||||
out["result"] = "ECHO BACKEND";
|
||||
|
||||
CVars x, y, z, x1, x2, x3, q;
|
||||
long ret = 0;
|
||||
char * server_name = getenv("SERVER_NAME");
|
||||
const char * loc = getenv("REMOTE_ADDR");
|
||||
C_CGI_Form form("", "");
|
||||
// form.LetStr("subject", "KleenApp Email Test");
|
||||
char vname[100];
|
||||
|
||||
form.LetStr("site_name", "KleenApp");
|
||||
form.LetStr("agent_site", "https://agent.medtransgo.com/");
|
||||
logfmt(logINFO, "@@@@@@->AMEYE-1)");
|
||||
|
||||
switch (action) {
|
||||
|
||||
case MEDTRANS_TRANSP_ASSIGNTRANSPORT:
|
||||
|
||||
if (load_db_record(x, "SELECT m.id AS member_id, a.agent_name,s.provider,s.quantity,"
|
||||
" TO_CHAR(s.service_date :: TIMESTAMP, 'Day Mon dd, yyyy HH:MI AM') AS long_date,"
|
||||
" a.street AS to_street,a.city AS to_city,a.state AS to_state,a.zipcode AS to_zipcode,a.phone AS to_phone,"
|
||||
" m.firstname,m.lastname,m.email AS member_email "
|
||||
" FROM members_service_request s "
|
||||
" LEFT JOIN agents a ON a.id=s.agent_id "
|
||||
" LEFT JOIN members m ON m.id=s.member_id "
|
||||
" WHERE s.id=%lu", in["service_id"].Long()) > 0) {
|
||||
vars2form(x, form);
|
||||
load_db_record(y, "SELECT email AS req_email,firstname AS cus_firstname,lastname AS cus_lastname ,phone as cus_phone FROM members WHERE id = %lu ", x["member_id"].Long());
|
||||
vars2form(y, form);
|
||||
|
||||
|
||||
load_db_record(q, "SELECT street1 AS from_street, street2 AS from_street2, city AS from_city, zipcode AS from_zipcode , state AS from_state, country AS from_country "
|
||||
"FROM members_profile WHERE member_id =%lu", x["member_id"].Long());
|
||||
vars2form(q, form);
|
||||
|
||||
if (x["provider"] != "" && x["provider"].Long() > 0) {
|
||||
//
|
||||
load_db_record(z, "SELECT d.firstname AS driver_firstname,d.lastname AS driver_lastname,d.email AS driver_email FROM providers d WHERE d.id = %lu ", x["provider"].Long());
|
||||
vars2form(z, form);
|
||||
logfmt(logINFO, "@@@@@@->AMEYE-101)");
|
||||
form.LetStr("confirm_link", in["service_id"].c_str());
|
||||
logfmt(logINFO, "@@@@@@->AMEYE-102)");
|
||||
form.LetStr("server_link", "https://www.kleenapp.co//provider/processRequest?reqId=");
|
||||
logfmt(logINFO, "@@@@@@->AMEYE-103)");
|
||||
form.LetStr("subject", "Laundry Pickup Assigned");
|
||||
form.LetStr("email", z["driver_email"].c_str());
|
||||
form.Email("PROVIDERS/pickup_assigned.mailfile");
|
||||
logfmt(logINFO, "@@@@@@->AMEYE-104)");
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
long transporter_email_calls(long action, CVars in, CVars &out) {
|
||||
email_test(in, out);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
long dailyReport();
|
||||
|
||||
long cron_email_calls(long action, CVars in, CVars &out) {
|
||||
|
||||
switch (action) {
|
||||
|
||||
case 900005:
|
||||
return dailyReport();
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
long dailyReport() {
|
||||
CVars out;
|
||||
logfmt(logINFO, "dailyReport()");
|
||||
out["result"] = "ECHO BACKEND";
|
||||
|
||||
long ret = 0;
|
||||
const char * loc = getenv("REMOTE_ADDR");
|
||||
C_CGI_Form form("", "");
|
||||
form.LetStr("subject", "KleenApp Alert Email");
|
||||
out["alertrequest"] = CfgReadChar("alerts.request");
|
||||
form.LetStr("site_name", "KleenApp");
|
||||
|
||||
CVars w, x, y, z;
|
||||
load_db_record(x, "SELECT TO_CHAR( now() :: DATE, 'Day Mon dd, yyyy') AS long_date, now()::date AS report_date, count(id) AS today_members_count FROM members WHERE added::date = now()::date;");
|
||||
vars2form(x, form);
|
||||
|
||||
load_db_record(w, "SELECT count(id) AS new_translation_request FROM members_service_request WHERE translate=1 AND added::date=now()::date");
|
||||
vars2form(w, form);
|
||||
|
||||
load_db_record(y, "SELECT count(id) AS new_transport_request FROM members_service_request WHERE transport=1 AND added::date=now()::date");
|
||||
vars2form(y, form);
|
||||
|
||||
load_db_record(z, "SELECT count(id) AS new_partners FROM agents WHERE added::date=now()::date");
|
||||
vars2form(z, form);
|
||||
|
||||
load_db_record(z, " SELECT count(id) AS new_transporter FROM transport_drivers WHERE added::date=now()::date;");
|
||||
vars2form(z, form);
|
||||
|
||||
load_db_record(z, "SELECT count(id) AS new_translators FROM interpreters WHERE added::date=now()::date");
|
||||
vars2form(z, form);
|
||||
|
||||
form.LetStr("email", out["alertrequest"].c_str());
|
||||
// form.LetStr("email", "obi@utransportcorp.com,okeh@utransportcorp.com,support@medtransgo.net,ses66181@gmail.com");
|
||||
form.Email("ALERTS/daily_report.mailfile");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
long alert_email_calls(long action, CVars in, CVars &out) {
|
||||
|
||||
logfmt(logINFO, "alert_email_calls()");
|
||||
out["result"] = "ECHO BACKEND";
|
||||
|
||||
CVars x, y, z,x1,x2,x3,q;
|
||||
long ret = 0;
|
||||
const char * loc = getenv("REMOTE_ADDR");
|
||||
C_CGI_Form form("", "");
|
||||
form.LetStr("subject", "KleenApp Alert Email");
|
||||
out["alertrequest"] = CfgReadChar("alerts.request");
|
||||
out["alertaccount"] = CfgReadChar("alerts.account");
|
||||
CGIList * inv_list = new CGIList( &form, "inv_items" );
|
||||
char listing_items[1024];
|
||||
const PGresult *res;
|
||||
|
||||
form.LetStr("site_name", "KleenApp");
|
||||
|
||||
switch (action) {
|
||||
|
||||
|
||||
case MEDTRANS_USER_CREATE:
|
||||
if (load_db_record(x, "SELECT *,email as email2,now() AS last_login3 FROM members WHERE id = %lu ", in["member_id"].Long())) {
|
||||
vars2form(x, form);
|
||||
form.LetStr("email", out["alertrequest"].c_str());
|
||||
form.Email("ALERTS/signup_alert.mailfile");
|
||||
}
|
||||
break;
|
||||
|
||||
case MEDTRANS_USER_NEWLUNDRYPICK:
|
||||
|
||||
if (load_db_record(x, "SELECT m.id AS member_id, a.agent_name,"
|
||||
" TO_CHAR(s.service_date :: TIMESTAMP, 'Day Mon dd, yyyy HH:MI AM') AS long_date,"
|
||||
" a.street AS to_street,a.city AS to_city,a.state AS to_state,a.zipcode AS to_zipcode,a.phone AS to_phone,"
|
||||
" m.firstname,m.lastname,m.email AS member_email,"
|
||||
" mp.street1 AS from_street, mp.street2 , "
|
||||
" mp.city AS from_city,mp.zipcode AS from_zipcode,"
|
||||
" m.email AS customer_email,mp.state AS from_state, mp.country AS from_country "
|
||||
" FROM members_service_request s "
|
||||
" LEFT JOIN agents a ON a.id=s.agent_id "
|
||||
" LEFT JOIN members m ON m.id=s.member_id "
|
||||
" LEFT JOIN members_profile mp ON mp.member_id=m.id "
|
||||
" WHERE s.id=%lu", in["service_id"].Long()) > 0) {
|
||||
vars2form(x, form);
|
||||
|
||||
res = pgsql_query("SELECT *,total*0.01 AS line_total FROM members_service_detail WHERE service_id = %lu AND quantity > 0 ORDER BY id ASC", in["service_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);
|
||||
|
||||
sprintf(listing_items, "<TR><td >*</td><td >%s</td><td >%s</td><td style='text-align:right;'>$%s</td></TR>", rec["description"].c_str(), rec["quantity"].c_str(), rec["line_total"].c_str());
|
||||
inv_list->LetStr("pin", listing_items);
|
||||
inv_list->CloseElement();
|
||||
}
|
||||
}
|
||||
form.LetStr("subject", "Alert - Service Request");
|
||||
form.LetStr("email", out["alertrequest"].c_str());
|
||||
form.Email("ALERTS/service_request.mailfile");
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
|
||||
case MERMSEMR_USER_CONFIRMPICKUP:
|
||||
|
||||
if (load_db_record(x, "SELECT m.id AS member_id, a.agent_name,s.payment_id,"
|
||||
" TO_CHAR(s.service_date :: TIMESTAMP, 'Day Mon dd, yyyy HH:MI AM') AS long_date,"
|
||||
" a.street AS to_street,a.city AS to_city,a.state AS to_state,a.zipcode AS to_zipcode,a.phone AS to_phone,"
|
||||
" m.firstname,m.lastname,m.email AS member_email,p.amount,p.confirmation "
|
||||
" FROM members_service_request s "
|
||||
" LEFT JOIN agents a ON a.id=s.agent_id "
|
||||
" LEFT JOIN payment p ON p.id=s.payment_id "
|
||||
" LEFT JOIN members m ON m.id=s.member_id "
|
||||
" WHERE s.id=%lu", in["service_id"].Long()) > 0) {
|
||||
vars2form(x, form);
|
||||
|
||||
load_db_record(y, "SELECT street1 AS from_street, street2 AS from_street2, city AS from_city, zipcode AS from_zipcode , state AS from_state, country AS from_country "
|
||||
"FROM members_profile WHERE member_id =%lu", x["member_id"].Long());
|
||||
vars2form(y, form);
|
||||
|
||||
res = pgsql_query("SELECT *,total*0.01 AS line_total FROM members_service_detail WHERE service_id = %lu AND quantity > 0 ORDER BY id ASC", in["service_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);
|
||||
|
||||
sprintf(listing_items, "<TR><td >*</td><td >%s</td><td >%s</td><td style='text-align:right;'>$%s</td></TR>", rec["description"].c_str(), rec["quantity"].c_str() , rec["line_total"].c_str());
|
||||
inv_list->LetStr("pin", listing_items);
|
||||
inv_list->CloseElement();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (x["member_id"].Long() > 0 && x["payment_id"].Long() > 0 ) {
|
||||
logfmt(logINFO, "GOOD STSRT ~*******************************************************()");
|
||||
vars2form(x, form); // bind again - somehow this email is not coming out
|
||||
form.LetStr("subject", "Alert Laundry Pickup Confirmation");
|
||||
form.LetStr("email", out["alertrequest"].c_str());
|
||||
form.Email("ALERTS/laundry_pickup_confirmed.mailfile");
|
||||
logfmt(logINFO, "GOOD END ~*******************************************************()");
|
||||
|
||||
} else {
|
||||
form.LetStr("subject", "Alert Failed Laundry Pickup Confirmation");
|
||||
form.LetStr("email", out["alertrequest"].c_str());
|
||||
form.Email("ALERTS/laundry_pickup_confirmed_fail.mailfile");
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
|
||||
case MEDTRANS_USER_LOGIN:
|
||||
if (load_db_record(x, "SELECT *,email as email2,now() AS last_login2 FROM members WHERE id = %lu ", in["member_id"].Long())) {
|
||||
vars2form(x, form);
|
||||
form.LetStr("email", out["alertrequest"].c_str());
|
||||
form.Email("USERS/user_login.mailfile");
|
||||
}
|
||||
break;
|
||||
|
||||
/* case MEDTRANS_USER_CREATE:
|
||||
if (load_db_record(x, "SELECT *,email as email2,now() AS last_login2 FROM members WHERE id = %lu ", in["member_id"].Long())) {
|
||||
vars2form(x, form);
|
||||
form.LetStr("email", out["alertrequest"].c_str());
|
||||
form.Email("USERS/user_welcome.mailfile");
|
||||
}
|
||||
*/
|
||||
break;
|
||||
case MEDTRANS_TRANSP_LOGIN:
|
||||
|
||||
|
||||
if (load_db_record(x, "SELECT * FROM agents WHERE id = %lu ", in["agent_id"].Long())) {
|
||||
vars2form(x, form);
|
||||
form.LetStr("email", out["alertaccount"].c_str());
|
||||
form.Email("ALERTS/agent_login.mailfile");
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
break;
|
||||
|
||||
case CRON_PROCESS_DISTANCE:
|
||||
if (load_db_record(x, "SELECT r.*,l.language,TO_CHAR(r.service_date :: TIMESTAMP, 'Day Mon dd, yyyy HH:MI AM') AS long_date"
|
||||
" FROM members_service_request r LEFT JOIN languages l ON l.code = r.lang_code WHERE r.id = %lu ", in["request_id"].Long())) {
|
||||
vars2form(x, form);
|
||||
|
||||
|
||||
load_db_record(y, "SELECT email AS req_email,firstname AS req_firstname,lastname AS req_lastname FROM members WHERE id = %lu ", out["member_id"].Long());
|
||||
vars2form(y, form);
|
||||
|
||||
if (x["transport"] == 1) {
|
||||
long invoice_id = getMemberInvoiceID( in["request_id"].Long() );
|
||||
|
||||
load_db_record(z, "SELECT (transport+translate+concierge)*0.01 AS total_price FROM members_invoice WHERE id = %lu",invoice_id);
|
||||
vars2form(z, form);
|
||||
|
||||
res = pgsql_query("SELECT *,total*0.01 AS line_total FROM members_invoice_detail WHERE invoice_id = %lu AND total > 0 ORDER BY id ASC", invoice_id);
|
||||
|
||||
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);
|
||||
|
||||
sprintf(listing_items, "<TR><td >*</td><td >%s</td><td ></td><td >$%s</td></TR>", rec["description"].c_str(), rec["line_total"].c_str());
|
||||
inv_list->LetStr("pin", listing_items);
|
||||
inv_list->CloseElement();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
form.LetStr("email", out["alertrequest"].c_str());
|
||||
form.Email("ALERTS/transport_confirm_recieved.mailfile");
|
||||
}
|
||||
|
||||
if (x["translate"] == 1) {
|
||||
// form.LetStr("email", out["alertrequest"].c_str());
|
||||
// form.Email("ALERTS/translation_recieved.mailfile");
|
||||
}
|
||||
|
||||
}
|
||||
break;
|
||||
|
||||
case MEDTRANS_TRANSL_ASSIGNFAIL:
|
||||
|
||||
if (load_db_record(x, "SELECT r.*,l.language,TO_CHAR(r.service_date :: TIMESTAMP, 'Day Mon dd, yyyy HH:MI AM') AS long_date"
|
||||
" FROM members_service_request r LEFT JOIN languages l ON l.code = r.lang_code WHERE r.id = %lu ", in["transport_id"].Long())) {
|
||||
vars2form(x, form);
|
||||
load_db_record(y, "SELECT email AS req_email,firstname AS req_firstname,lastname AS req_lastname FROM members WHERE id = %lu ", out["member_id"].Long());
|
||||
vars2form(y, form);
|
||||
if (x["translate"] == 1) {
|
||||
form.LetStr("email", out["alertrequest"].c_str());
|
||||
form.Email("ALERTS/translation_autoassign_fail.mailfile");
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
}
|
||||
logfmt(logINFO, "/alert_email_calls()");
|
||||
|
||||
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
void vars2form(CVars &v, C_CGI_Form &form) {
|
||||
CVars::const_iterator i;
|
||||
for (i = v.begin(); i != v.end(); i++) {
|
||||
char name[30];
|
||||
strsafecpy(name, i->first.c_str(), sizeof (name));
|
||||
// &fee, tax, total
|
||||
if (strcasecmp(name, "tax") == 0 ||
|
||||
strcasecmp(name, "total") == 0 ||
|
||||
strcasecmp(name, "price") == 0 ||
|
||||
strcasecmp(name, "amount") == 0 ||
|
||||
strcasecmp(name, "shipping") == 0 ||
|
||||
strcasecmp(name, "subtotal") == 0 ||
|
||||
(strlen(name) >= 3 && strcasecmp(&name[strlen(name) - 3], "fee") == 0)) {
|
||||
form.LetStrf(name, "%.2f", i->second.Long() / 100.0);
|
||||
} else {
|
||||
form.LetStr(i->first.c_str(), i->second.c_str());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void commonItems(C_CGI_Form &form) {
|
||||
char * server_name = getenv("SERVER_NAME");
|
||||
form.LetStr("server_name", server_name);
|
||||
|
||||
form.LetStr("site_name", "KleenApp");
|
||||
form.LetStr("facebook", "KleenApp");
|
||||
form.LetStr("twitter", "KleenApp");
|
||||
form.LetStr("contactus", "KleenApp");
|
||||
}
|
||||
|
||||
long email_test(CVars in, CVars &out) {
|
||||
logfmt(logINFO, "email_test()");
|
||||
|
||||
long member_id = 1;
|
||||
CVars x;
|
||||
C_CGI_Form form("", "");
|
||||
out["alertemail"] = CfgReadChar("alerts.system");
|
||||
|
||||
|
||||
//form.LetStr( "site_name", "KleenApp" );
|
||||
form.LetStr("subject", "KleenApp Email Test");
|
||||
|
||||
commonItems(form);
|
||||
|
||||
if (load_db_record(x, "SELECT *,email as email2 FROM members WHERE id = %lu ", member_id)) {
|
||||
vars2form(x, form);
|
||||
form.LetStr("email", out["alertemail"].c_str());
|
||||
//form.LetStr( "email", "ses66181@gmail.com" );
|
||||
form.Email("ALERTS/testmail.mailfile");
|
||||
}
|
||||
return 0;
|
||||
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
@@ -0,0 +1,142 @@
|
||||
// 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 "function_members.h"
|
||||
#include "medTUpload.h"
|
||||
|
||||
#define AGENT_SITE_LOGO 10005
|
||||
#define INTERPRETER_CERTIFICATE 20005
|
||||
|
||||
long medTRegisterUpload(CVars in);
|
||||
long medTRegisterDownload(CVars in, CVars &out);
|
||||
|
||||
long medtrans_upload(CVars in, CVars &out)
|
||||
{
|
||||
logfmt( logINFO, " **** +++ **** long medtrans_upload(CVars in, CVars &out)");
|
||||
long ret = 0;
|
||||
long file_type = REQ_LONG( in, "file_type", 0, -1);
|
||||
|
||||
if (file_type == INTERPRETER_CERTIFICATE)
|
||||
{
|
||||
logfmt( logINFO, " **** +++ **** long medtrans_upload This is interpreter language system");
|
||||
ret = medTRegisterUpload(in);
|
||||
if (ret > 0 )
|
||||
{
|
||||
pgsql_query("UPDATE interpreters_language SET document_id = %lu, document='Language Certificate' WHERE id = %lu AND agent_id=%lu",ret, in["language_id"].Long(), in["agent_id"].Long()); // setting the password MD5 now
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
long medtrans_download(CVars in, CVars &out)
|
||||
{
|
||||
logfmt( logINFO, " **** +++ **** long medtrans_download(CVars in, CVars &out)");
|
||||
long ret = 0;
|
||||
long file_type = REQ_LONG( in, "file_type", 0, -1);
|
||||
|
||||
if (file_type == INTERPRETER_CERTIFICATE)
|
||||
{
|
||||
logfmt( logINFO, " **** +++ **** long medtrans_download This is interpreter language system");
|
||||
ret = medTRegisterDownload(in, out);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
long medTRegisterUpload(CVars in) {
|
||||
long ret = 0;
|
||||
try {
|
||||
REQ_LONG(in, "pid", 0, -1);
|
||||
REQ_STRING(in, "part", 2, 10, "(.*)");
|
||||
REQ_LONG(in, "file_type", 0, -1);
|
||||
REQ_STRING(in, "folder", 6, 15, "(.*)");
|
||||
REQ_LONG(in, "file_type", 0, -1);
|
||||
REQ_STRING(in, "extension", 1, 10, "(.*)");
|
||||
REQ_STRING(in, "file_name", 1, 50, "(.*)");
|
||||
const char * loc = getenv("REMOTE_ADDR");
|
||||
CVars x;
|
||||
x["pid"] = in["pid"];
|
||||
x["pid"].set_valid(true);
|
||||
x["part"] = in["part"];
|
||||
x["part"].set_valid(true);
|
||||
x["file_type"] = in["file_type"];
|
||||
x["file_type"].set_valid(true);
|
||||
x["folder"] = in["folder"];
|
||||
x["folder"].set_valid(true);
|
||||
x["file_type"] = in["file_type"];
|
||||
x["file_type"].set_valid(true);
|
||||
x["extension"] = in["extension"];
|
||||
x["extension"].set_valid(true);
|
||||
x["file_name"] = in["file_name"];
|
||||
x["file_name"].set_valid(true);
|
||||
x["loc"] = loc;
|
||||
x["loc"].set_valid(true);
|
||||
|
||||
ret = insert_db_record(DBS_VALID, "uploads", "uploads_id_seq", x);
|
||||
|
||||
} catch (bad_parameter) {
|
||||
logfmt(logINFO, "ERROR CALL long medTRegisterUpload(CVars in, CVars &out)");
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
long medTRegisterDownload(CVars in, CVars &out) {
|
||||
long ret = PHP_API_BAD_PARAM;
|
||||
logfmt(FLOG_MAX, "long medTRegisterDownload(CVars in, CVars &out)");
|
||||
try {
|
||||
long pid = REQ_LONG(in, "pid", 1, -1);
|
||||
long id = REQ_LONG(in, "document_id", 1, -1);
|
||||
if ( load_db_record( out, "SELECT * FROM uploads WHERE id = %lu AND pid = %lu", id, pid) ) {
|
||||
ret = PHP_API_OK;
|
||||
}
|
||||
} catch (bad_parameter) {
|
||||
out["status"] = "Invalid input";
|
||||
logfmt(logINFO, "ERROR CALL long medTRegisterDownload(CVars in, CVars &out)");
|
||||
}
|
||||
logfmt(FLOG_MAX, "/long medTRegisterDownload(CVars in, CVars &out)");
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
*
|
||||
* wwwadmin/upload/AGT/7W425W24W5/20005/jpg/59E2C24457874.jpg
|
||||
*
|
||||
RET: action=4505
|
||||
- 02:04:52.359 INFO [20012]: RET: agent_id=4
|
||||
- 02:04:52.359 INFO [20012]: RET: extension=jpg
|
||||
- 02:04:52.359 INFO [20012]: RET: file_type=20005
|
||||
- 02:04:52.359 INFO [20012]: RET: language_id=17
|
||||
- 02:04:52.359 INFO [20012]: RET: pid=115
|
||||
- 02:04:52.359 INFO [20012]: RET: sesson_id=KKFKFDKDFKKFKDFK
|
||||
- 02:04:52.359 INFO [20012]: RET: upload_file_name=59E2C24457874.jpg
|
||||
- 02:04:52.359 INFO [20012]: RET: upload_file_path=/home/oameye/mermsemr/svrlayer/../wwwadmin/upload/AGT/7W425W24W5/20005/jpg/59E2C24457874.jpg
|
||||
- 02:04:52.359 INFO [20012]: RET: user=AGT
|
||||
|
||||
*
|
||||
CREATE TABLE uploads (
|
||||
id SERIAL,
|
||||
pid INT REFERENCES platform_user(pid),
|
||||
part VARCHAR(10),
|
||||
folder VARCHAR(15),
|
||||
file_type VARCHAR(50),
|
||||
extension VARCHAR(10),
|
||||
file_name VARCHAR(50),
|
||||
added timestamp without time zone DEFAULT now(),
|
||||
status INT DEFAULT 1,
|
||||
loc INET,
|
||||
primary key(id)
|
||||
);
|
||||
|
||||
*/
|
||||
@@ -0,0 +1,126 @@
|
||||
/*
|
||||
General Header
|
||||
ChiefSoft July 2017
|
||||
*/
|
||||
#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 "cfg.h"
|
||||
#include <curl/curl.h>
|
||||
/*
|
||||
Other Headers
|
||||
*/
|
||||
#include "medTrBackOffice.h"
|
||||
#include "medTEmails.h"
|
||||
#include "function_backoffice.h"
|
||||
#include "function_members.h"
|
||||
#include "creditcards.h"
|
||||
|
||||
long backoffice_calls(CVars in, CVars &out) {
|
||||
logfmt(logINFO, "backoffice_calls()");
|
||||
out["result"] = "YES I GET TO BACK END";
|
||||
long action = REQ_LONG(in, "action", 0, -1);
|
||||
CVars x;
|
||||
long ret = 0;
|
||||
const char * loc = getenv("REMOTE_ADDR");
|
||||
|
||||
switch (action) {
|
||||
|
||||
case MEDTRANS_BKO_LOGIN:
|
||||
return LoginBkoAdmin(in, out);
|
||||
break;
|
||||
|
||||
case MEDTRANS_BKO_CREATEUSER:
|
||||
return createBkoAdmin(in, out);
|
||||
break;
|
||||
|
||||
case MERMSEMR_ACCOUNT_PENDING:
|
||||
|
||||
break;
|
||||
|
||||
case MERMSEMR_BKO_DELETEALLCARDS:
|
||||
return DeletAallCards(in, out);
|
||||
break;
|
||||
|
||||
case MERMSEMR_BKO_MEMBERADD:
|
||||
if (medTrCreateMember(in, out) == PHP_API_OK) {
|
||||
in["member_id"] = out["member_id"];
|
||||
|
||||
if (medTrUpdateStartProfile(in, out) == PHP_API_OK) {
|
||||
out["status_message"] = "Account Created Successfully";
|
||||
} else {
|
||||
out["status_message"] = "Incomplete Account, login to complete";
|
||||
}
|
||||
} else {
|
||||
out["status_message"] = "Account Create Error";
|
||||
}
|
||||
break;
|
||||
case MERMSEMR_BKO_MEMBERUPDT:
|
||||
return medTrUpdateProfile(in, out);
|
||||
break;
|
||||
|
||||
case MERMSEMR_BKO_ADDCARD:
|
||||
in["paymenttype"] = "1";
|
||||
save_creditcard(in, out);
|
||||
break;
|
||||
|
||||
|
||||
}
|
||||
logfmt(logINFO, "/backoffice_calls()");
|
||||
return ret;
|
||||
}
|
||||
|
||||
long cron_call(CVars in, CVars &out) {
|
||||
long action = REQ_LONG(in, "action", 0, -1);
|
||||
logfmt(logINFO, "cron_call()");
|
||||
CVars x;
|
||||
long request_id = 0;
|
||||
|
||||
switch (action) {
|
||||
case CRON_PROCESS_DISTANCE:
|
||||
out = in;
|
||||
request_id = REQ_LONG(in, "request_id", 0, -1);
|
||||
REQ_STRING(in, "miles", 1, 12, "(.*)");
|
||||
REQ_STRING(in, "dist_mode", 1, 6, "(.*)");
|
||||
REQ_LONG(in, "minutes", 0, -1);
|
||||
x["miles"] = in["miles"];
|
||||
x["miles"].set_valid(true);
|
||||
x["dist_mode"] = in["dist_mode"];
|
||||
x["dist_mode"].set_valid(true);
|
||||
x["minutes"] = in["minutes"];
|
||||
x["minutes"].set_valid(true);
|
||||
|
||||
update_db_record(DBS_VALID, "members_transport_request", x, request_id);
|
||||
|
||||
//{
|
||||
//pgsql_query("UPDATE members_transport_request SET last_login = now() WHERE id = %lu",out["member_id"].Long() );
|
||||
|
||||
// }
|
||||
break;
|
||||
|
||||
case CRON_USER_REMINDER:
|
||||
|
||||
logfmt(logINFO, "cron_call() = CRON_USER_REMINDER");
|
||||
|
||||
break;
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
logfmt(logINFO, "/cron_call()");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,127 @@
|
||||
/*
|
||||
General Header
|
||||
ChiefSoft July 2017
|
||||
*/
|
||||
#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 "cfg.h"
|
||||
#include <curl/curl.h>
|
||||
/*
|
||||
Other Headers
|
||||
*/
|
||||
#include "medTrMembers.h"
|
||||
#include "function_backoffice.h"
|
||||
#include "function_members.h"
|
||||
#include "function_users.h"
|
||||
#include "creditcards.h"
|
||||
#include "payments.h"
|
||||
|
||||
|
||||
|
||||
long members_call(CVars in, CVars &out) {
|
||||
logfmt(logINFO, "members_call()");
|
||||
|
||||
long action = REQ_LONG(in, "action", 0, -1);
|
||||
CVars x;
|
||||
long ret = 0;
|
||||
const char * loc = getenv("REMOTE_ADDR");
|
||||
|
||||
switch (action) {
|
||||
case MERMSEMR_USER_DRYCLIST:
|
||||
return kleenDryCleanList(in, out);
|
||||
break;
|
||||
|
||||
case MEDTRANS_USER_LOGIN:
|
||||
return medTMemberLogin(in, out);
|
||||
break;
|
||||
|
||||
case MEDTRANS_USER_CREATE:
|
||||
return medTrCreateMember(in, out);
|
||||
break;
|
||||
case MERMSEMR_USER_COMPLETEPROFILE:
|
||||
return medTrUpdateStartProfile(in, out);
|
||||
break;
|
||||
|
||||
case MEDTRANS_USER_UPDATE:
|
||||
return medTrUpdateProfile(in, out);
|
||||
break;
|
||||
|
||||
case MEDTRANS_USER_PROFILE:
|
||||
REQ_LONG(in, "member_id", 0, -1);
|
||||
REQ_STRING(in, "sessionid", 2, 100, "(.*)");
|
||||
if (load_db_record(out, "SELECT m.*,p.* FROM members m LEFT JOIN members_profile p ON p.member_id=m.id WHERE m.id=%lu", in["member_id"].Long()) > 0) {
|
||||
return PHP_API_OK;
|
||||
}
|
||||
break;
|
||||
|
||||
case MERMSEMR_USER_SAVECARDPAYMENT:
|
||||
in["paymenttype"] = "1";
|
||||
save_creditcard(in, out);
|
||||
break;
|
||||
|
||||
case MERMSEMR_USER_GETCCLIST:
|
||||
return getUserCCList(in, out);
|
||||
break;
|
||||
|
||||
|
||||
case MEDTRANS_USER_NEWLUNDRYPICK:
|
||||
return kleenNewLundryPickUp(in, out);
|
||||
break;
|
||||
|
||||
case MEDTRANS_USER_GET_TRAN_BYID:
|
||||
return medTrMemberTransportById(in, out);
|
||||
break;
|
||||
|
||||
case MERMSEMR_USER_GETSERVICEITEM:
|
||||
return medTrMemberServiceById(in, out);
|
||||
break;
|
||||
case MERMSEMR_USER_GETSERVICELIST:
|
||||
return medTrMemberTransportList(in, out);
|
||||
break;
|
||||
|
||||
case MEDTRANS_USER_LUNDRYLOCATION:
|
||||
return medTrLanguageList(in, out);
|
||||
break;
|
||||
|
||||
case MEDTRANS_USER_VERIFYSESSION:
|
||||
REQ_LONG(in, "member_id", 0, -1);
|
||||
REQ_STRING(in, "sessionid", 2, 100, "(.*)");
|
||||
ret = PHP_INVALID_SESSION;
|
||||
out["status"] = "INVALID_SESSION";
|
||||
if (SessionCheck(in["member_id"].Long(), in["sessionid"].c_str(), 0) == 1L) {
|
||||
out = in;
|
||||
out["status"] = "VALID_SESSION";
|
||||
ret = PHP_VALID_SESSION;
|
||||
}
|
||||
break;
|
||||
|
||||
case MERMSEMR_USER_CONFIRMPICKUP:
|
||||
logfmt(logINFO, "MERMSEMR_USER_CONFIRMPICKUP()");
|
||||
REQ_LONG(in, "member_id", 0, -1);
|
||||
REQ_STRING(in, "sessionid", 2, 100, "(.*)");
|
||||
REQ_LONG(in, "service_id", 0, -1);
|
||||
REQ_LONG(in, "paymentid", 0, -1);
|
||||
return kleenConfirmPickup(in, out);
|
||||
break;
|
||||
|
||||
case MEDTRANS_USER_PASSRESET: // 200067
|
||||
REQ_LONG(in, "mode", 0, -1);
|
||||
return passwordReset(in, out);
|
||||
break;
|
||||
|
||||
case MERMSEMR_USER_DELETECARD:
|
||||
out = in;
|
||||
return userDeleteCard(in, out);
|
||||
break;
|
||||
|
||||
}
|
||||
logfmt(logINFO, "/members_call()");
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,123 @@
|
||||
/*
|
||||
General Header
|
||||
ChiefSoft July 2017
|
||||
*/
|
||||
#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 "cfg.h"
|
||||
#include <curl/curl.h>
|
||||
#include "medTEmails.h"
|
||||
/*
|
||||
Other Headers
|
||||
*/
|
||||
#include "medTrTransporter.h"
|
||||
#include "function_backoffice.h"
|
||||
#include "function_members.h"
|
||||
#include "function_agents.h"
|
||||
#include "function_driver.h"
|
||||
|
||||
long trasnporter_call(CVars in, CVars &out) {
|
||||
logfmt(logINFO, "trasnporter_call()");
|
||||
|
||||
long action = REQ_LONG(in, "action", 0, -1);
|
||||
CVars x;
|
||||
long ret = 0;
|
||||
const char * loc = getenv("REMOTE_ADDR");
|
||||
|
||||
switch (action) {
|
||||
|
||||
case MEDTRANS_TRANSP_LOGIN:
|
||||
return TranspLoginAdmin(in, out);
|
||||
break;
|
||||
|
||||
case MEDTRANS_TRANSP_CREATE:
|
||||
return medTrCreateAgent(in, out);
|
||||
break;
|
||||
|
||||
case MEDTRANS_LOAD_AGENT:
|
||||
REQ_LONG(in, "agent_id", 0, -1);
|
||||
return load_db_record(out, "SELECT *,id AS agent_id FROM agents WHERE id=%lu ", in["agent_id"].Long());
|
||||
|
||||
break;
|
||||
case MEDTRANS_TRANSP_ADDLOCATION:
|
||||
return medTrCreateTransporter(in, out);
|
||||
break;
|
||||
|
||||
case MEDTRANS_TRANSP_GET_TRANSLIST:
|
||||
return medTrTransporterTransportList(in, out);
|
||||
break;
|
||||
|
||||
case MEDTRANS_TRANSP_VERIFYSESSION:
|
||||
REQ_LONG(in, "agent_id", 0, -1);
|
||||
REQ_STRING(in, "sessionid", 2, 100, "(.*)");
|
||||
ret = PHP_INVALID_SESSION;
|
||||
out["status"] = "INVALID_SESSION";
|
||||
if (TransporterSessionCheck(in["agent_id"].Long(), in["sessionid"].c_str(), 0) == 1L) {
|
||||
out = in;
|
||||
out["status"] = "VALID_SESSION";
|
||||
ret = PHP_VALID_SESSION;
|
||||
}
|
||||
break;
|
||||
|
||||
case MEDTRANS_TRANSP_GET_TRANSLATOR:
|
||||
return medTrLoadIntepreter(in, out);
|
||||
break;
|
||||
case MEDTRANS_TRANSP_GET_TRANSPORTER:
|
||||
return medTrLoadTransporter(in, out);
|
||||
break;
|
||||
|
||||
case MEDTRANS_TRANSP_ADD_TRANSLATOR:
|
||||
return medTrCreateIntepreter(in, out);
|
||||
break;
|
||||
|
||||
case MEDTRANS_TRANSP_LIST_TRANSLATOR:
|
||||
return medTrTransporterTranslatortList(in, out);
|
||||
break;
|
||||
|
||||
case MEDTRANS_TRANSP_LISTLOCATION:
|
||||
return medTrTransporterLocationtList(in, out); // list locations for a particular agent
|
||||
break;
|
||||
|
||||
case MEDTRANS_TRANSP_EDIT_TRANSLATOR:
|
||||
return medTrUpdateItepreter(in, out);
|
||||
break;
|
||||
case MEDTRANS_TRANSP_EDITLOCATION:
|
||||
return medTrUpdateTransporter(in, out);
|
||||
break;
|
||||
|
||||
case MEDTRANS_TRANSP_MANAGELANGUAGE:
|
||||
return medTrInterpreterLanguage(in, out);
|
||||
break;
|
||||
|
||||
case MEDTRANS_TRANSP_LANGUAGELIST:
|
||||
return medTrInterpreterLangList(in, out);
|
||||
break;
|
||||
|
||||
case MEDTRANS_TRANSP_AGENTLANGUAGE:
|
||||
return medTrAgentLangList(in, out);
|
||||
break;
|
||||
|
||||
|
||||
case MEDTRANS_TRANSP_DRIVERSCALL:
|
||||
return medTrDriverFunctions(in, out);
|
||||
break;
|
||||
|
||||
case MEDTRANS_TRANSP_ASSIGNTRANSPORT:
|
||||
return medAssignTranspoter(in, out);
|
||||
break;
|
||||
|
||||
case MEDTRANS_TRANSP_DEVICELIST:
|
||||
return medTrDeviceList(in, out);
|
||||
break;
|
||||
|
||||
|
||||
}
|
||||
logfmt(logINFO, "/trasnporter_call()");
|
||||
return ret;
|
||||
}
|
||||
@@ -0,0 +1,81 @@
|
||||
/*
|
||||
main entry point for API calls Chiefsoft July 2017 */
|
||||
#include "mermsemr_api_main.h"
|
||||
#include "mermsemr_api.h"
|
||||
#include "clog.h"
|
||||
#include "input.h"
|
||||
#include "pgsql.h"
|
||||
#include "pgsql_wrapper.h"
|
||||
/*Other medtrans functions*/
|
||||
#include "medTrBackOffice.h"
|
||||
#include "medTrMembers.h"
|
||||
#include "medTrTransporter.h"
|
||||
#include "stripe_charge.h"
|
||||
#include "medTEmails.h"
|
||||
#include "medTUpload.h"
|
||||
|
||||
long mermsemr_api_main(CVars in, CVars &out)
|
||||
{
|
||||
logfmt( logINFO, "long mermsemr_api_main(CVars in, CVars &out)");
|
||||
long retval = PHP_API_BAD_PARAM;
|
||||
long action = REQ_LONG( in, "action", 0, -1);
|
||||
REQ_LONG( in, "pid", 0, -1); // global implementation - who is calling
|
||||
try
|
||||
{
|
||||
if ( action == MEDTRANS_UPLOADS )
|
||||
{
|
||||
return medtrans_upload(in, out);
|
||||
}
|
||||
if ( action == MEDTRANS_DOWNLOAD )
|
||||
{
|
||||
return medtrans_download(in, out);
|
||||
}
|
||||
|
||||
|
||||
if ( action >=MEDTRANS_BKO_START && action <=MEDTRANS_BKO_END )
|
||||
{
|
||||
return backoffice_calls(in, out);
|
||||
}
|
||||
|
||||
if ( action >=MEDTRANS_USER_START && action <=MEDTRANS_USER_END )
|
||||
{
|
||||
return members_call(in, out);
|
||||
}
|
||||
|
||||
if ( action >=MEDTRANS_INTERP_START && action <=MEDTRANS_INTERP_END )
|
||||
{
|
||||
}
|
||||
|
||||
if ( action >=MEDTRANS_TRANSP_START && action <=MEDTRANS_TRANSP_END )
|
||||
{
|
||||
return trasnporter_call(in, out);
|
||||
}
|
||||
|
||||
if ( action >=MEDTRANS_CRON_START && action <=MEDTRANS_CRON_END )
|
||||
{
|
||||
return cron_call(in, out);
|
||||
}
|
||||
|
||||
|
||||
if ( action == MEDTRANS_STRIPE_CHARGE_ONE )
|
||||
{
|
||||
return stripe_one_time_charge(in, out);
|
||||
}
|
||||
if ( action == MEDTRANS_STRIPE_CHARGE_NEW )
|
||||
{
|
||||
return stripe_new_customer_charge(in, out);
|
||||
}
|
||||
if ( action == MEDTRANS_EMAIL_TEST )
|
||||
{
|
||||
return email_test(in, out);
|
||||
}
|
||||
|
||||
}
|
||||
catch (bad_parameter) {
|
||||
logfmt( logINFO, "ERROR CALL long mermsemr_api_main(CVars in, CVars &out)");
|
||||
}
|
||||
return retval;
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,347 @@
|
||||
// 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_members.h"
|
||||
#include "payments.h"
|
||||
#include "creditcards.h"
|
||||
#include "stripe_charge.h"
|
||||
#include "function_members.h"
|
||||
|
||||
long PaymentData(CVars in, CVars &out);
|
||||
|
||||
long kleenConfirmPickup(CVars in, CVars &out) {
|
||||
long ret = PHP_API_BAD_PARAM;
|
||||
try {
|
||||
|
||||
REQ_LONG(in, "member_id", 0, -1);
|
||||
REQ_STRING(in, "sessionid", 2, 100, "(.*)");
|
||||
REQ_LONG(in, "service_id", 0, -1);
|
||||
REQ_LONG(in, "paymentid", 0, -1);
|
||||
|
||||
|
||||
|
||||
CVars x, y, z;
|
||||
in["what"] = WHAT_PICKUP_INITIALPAYMENT;
|
||||
long payment_id = PaymentData(in, out);
|
||||
|
||||
logfmt(logINFO, "***~~~~kleenConfirmPickup(CVars in, CVars &out) = %lu", payment_id);
|
||||
|
||||
if (payment_id > 0) {
|
||||
in["payment_id"] = payment_id;
|
||||
in["payment_id"].set_valid(true);
|
||||
long chgret = stripe_charge_member_paymentid(in, out);
|
||||
|
||||
if (chgret == PHP_API_OK) {
|
||||
ret = PHP_API_OK;
|
||||
logfmt(logINFO, "***~~~~REQUEST-CONFIRMED-EMAIL START******");
|
||||
in["payment_return"] = ret;
|
||||
member_email_calls(in["action"].Long(), in, out);
|
||||
alert_email_calls(in["action"].Long(), in, out);
|
||||
load_db_record(out, "SELECT s.id AS service_id,s.*,p.*,a.agent_name FROM members_service_request s "
|
||||
" LEFT JOIN payment p ON p.id=s.payment_id LEFT JOIN agents a ON a.id = s.agent_id"
|
||||
" WHERE p.id = %lu", payment_id);
|
||||
|
||||
medTrMemberServiceById(out, out); // needed more information in the out
|
||||
|
||||
} else {
|
||||
in["payment_return"] = ret;
|
||||
member_email_calls(in["action"].Long(), in, out);
|
||||
alert_email_calls(in["action"].Long(), in, out);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
} catch (bad_parameter) {
|
||||
logfmt(logINFO, "ERROR CALL long medTPaymentType(CVars in, CVars &out)");
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
long medTVerifyPaymentType(CVars in, CVars &out) {
|
||||
long ret = PHP_API_BAD_PARAM;
|
||||
char vname[20];
|
||||
try {
|
||||
REQ_LONG(in, "paymenttype", 0, -1);
|
||||
REQ_LONG(in, "member_id", 0, -1);
|
||||
|
||||
switch (in["paymenttype"].Long()) {
|
||||
|
||||
case NEW_CARD:
|
||||
|
||||
REQ_STRING(in, "cardnumber", 10, 17, "(.*)");
|
||||
REQ_LONG(in, "exp_month", 0, -1);
|
||||
REQ_LONG(in, "exp_year", 0, -1);
|
||||
REQ_LONG(in, "cvc", 0, -1);
|
||||
|
||||
ret = PHP_API_OK;
|
||||
break;
|
||||
|
||||
case EXISTING_CARD:
|
||||
REQ_LONG(in, "paymentid", 0, -1); // now we have to make sure the payment id is valid for this customer
|
||||
|
||||
break;
|
||||
|
||||
case ACH1:
|
||||
out["error_status"] = "Not Implemented yet";
|
||||
|
||||
break;
|
||||
|
||||
case ACH2:
|
||||
out["error_status"] = "Not Implemented yet";
|
||||
|
||||
break;
|
||||
|
||||
case BALANCE:
|
||||
out["error_status"] = "Not Implemented yet";
|
||||
|
||||
break;
|
||||
|
||||
case INSURANCE:
|
||||
out["error_status"] = "Not Implemented yet";
|
||||
break;
|
||||
|
||||
case INVOICED:
|
||||
const PGresult *res = pgsql_query("SELECT * FROM members WHERE invoiced =1 AND id=%lu", in["member_id"].Long());
|
||||
if (res != NULL && pgsql_num_rows(res) > 0) {
|
||||
ret = PHP_API_OK;
|
||||
} else {
|
||||
out["error_status"] = "user not authorized to use invoice";
|
||||
}
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
} catch (bad_parameter) {
|
||||
logfmt(logINFO, "ERROR CALL long medTPaymentType(CVars in, CVars &out)");
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
long medTConductInitialPayment(CVars in, CVars &out) {
|
||||
long ret = PHP_API_BAD_PARAM;
|
||||
char vname[20];
|
||||
try {
|
||||
REQ_LONG(in, "paymenttype", 0, -1);
|
||||
REQ_LONG(in, "member_id", 0, -1);
|
||||
|
||||
switch (in["paymenttype"].Long()) {
|
||||
|
||||
case NEW_CARD:
|
||||
// this is new card - add card to table - note active = 1 but status = 3
|
||||
REQ_STRING(in, "cardnumber", 10, 17, "(.*)");
|
||||
REQ_LONG(in, "exp_month", 0, -1);
|
||||
REQ_LONG(in, "exp_year", 0, -1);
|
||||
REQ_LONG(in, "cvc", 0, -1);
|
||||
// load othr paramameters with member id on memabers
|
||||
|
||||
save_creditcard(in, out);
|
||||
|
||||
|
||||
|
||||
ret = PHP_API_OK;
|
||||
break;
|
||||
|
||||
case EXISTING_CARD:
|
||||
REQ_LONG(in, "paymentid", 0, -1); // now we have to make sure the payment id is valid for this customer
|
||||
|
||||
break;
|
||||
|
||||
case ACH1:
|
||||
out["error_status"] = "Not Implemented yet";
|
||||
|
||||
break;
|
||||
|
||||
case ACH2:
|
||||
out["error_status"] = "Not Implemented yet";
|
||||
|
||||
break;
|
||||
|
||||
case BALANCE:
|
||||
out["error_status"] = "Not Implemented yet";
|
||||
|
||||
break;
|
||||
|
||||
case INSURANCE:
|
||||
out["error_status"] = "Not Implemented yet";
|
||||
break;
|
||||
|
||||
case INVOICED:
|
||||
const PGresult *res = pgsql_query("SELECT * FROM members WHERE invoiced =1 AND id= %lu", in["member_id"].Long());
|
||||
if (res != NULL && pgsql_num_rows(res) > 0) {
|
||||
ret = PHP_API_OK;
|
||||
} else {
|
||||
out["error_status"] = "user not authorized to use invoice";
|
||||
}
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
} catch (bad_parameter) {
|
||||
logfmt(logINFO, "ERROR CALL long medTPaymentType(CVars in, CVars &out)");
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
long PaymentData(CVars in, CVars &out) {
|
||||
logfmt(FLOG_MAX, "long PaymentData(CVars in, CVars &out)");
|
||||
long payment_id = 0;
|
||||
|
||||
// pgsql_exec("INSERT INTO payment ( uid,what,location,amount,fee,status,flags,pid,account_id,partner_id, approval_code) VALUES (%lu,%d,'%s',%lu,%lu,%d,%d,%lu,%lu,%lu, %lu)",
|
||||
// uid, what, getenv("REMOTE_ADDR"), amount, fee, CORE_INIT, initial_flags, pid,
|
||||
// account_id, pid_verisign, in["approval_code"].Long());
|
||||
try {
|
||||
REQ_LONG(in, "member_id", 0, -1);
|
||||
REQ_LONG(in, "service_id", 0, -1);
|
||||
long what = REQ_LONG(in, "what", 0, -1);
|
||||
if (load_db_record(out, "SELECT b.member_id,a.firstname,a.lastname,b.street1,b.street2,b.city,b.zipcode AS postal,b.state,b.country FROM members a, members_profile b WHERE a.id=%lu AND b.member_id=a.id", in["member_id"].Long()) > 0) {
|
||||
|
||||
if (load_db_record(out, "SELECT member_id,est_cost AS amount FROM members_service_request WHERE id = %lu", in["service_id"].Long()) > 0) {
|
||||
|
||||
|
||||
CVars v;
|
||||
|
||||
v["member_id"] = in["member_id"];
|
||||
v["what"] = what;
|
||||
v["location"] = getenv("REMOTE_ADDR");
|
||||
v["amount"] = out["amount"];
|
||||
v["fee"] = "0";
|
||||
v["status"] = CORE_INIT;
|
||||
v["account_id"] = in["paymentid"];
|
||||
v["member_id"] = in["member_id"];
|
||||
v["partner_id"] = PARTNER_STRIPE;
|
||||
v["pid"] = "100";
|
||||
|
||||
|
||||
|
||||
v["member_id"].set_valid(true);
|
||||
v["what"].set_valid(true);
|
||||
v["location"].set_valid(true);
|
||||
v["amount"].set_valid(true);
|
||||
v["fee"].set_valid(true);
|
||||
v["status"].set_valid(true);
|
||||
v["pid"].set_valid(true);
|
||||
v["account_id"].set_valid(true);
|
||||
v["partner_id"].set_valid(true);
|
||||
// v["approval_code"].set_valid(true);
|
||||
|
||||
|
||||
|
||||
out["payment_id"] = insert_db_record(DBS_VALID, "payment", "payment_id_seq", v);
|
||||
payment_id = out["payment_id"].Long();
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
} else {
|
||||
logfmt(FLOG_MAX, "No member data loaded!");
|
||||
throw bad_parameter(in, "member_id");
|
||||
}
|
||||
} catch (bad_parameter) {
|
||||
payment_id = PHP_API_BAD_PARAM;
|
||||
}
|
||||
return payment_id;
|
||||
}
|
||||
void GenerateConfirmationSeed(char * number, int sz, int seed);
|
||||
|
||||
void GenerateConfirmationSeed(char * number, int sz, int seed) {
|
||||
char chars[] = "WRB01234WRB56789WRB";
|
||||
int n = sizeof (chars);
|
||||
int i;
|
||||
/*
|
||||
time_t t;
|
||||
time( &t );
|
||||
pid_t pid = getpid();
|
||||
|
||||
srand(t+pid);
|
||||
*/
|
||||
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 Confirmation(unsigned long payment_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 payment;");
|
||||
int i = 0;
|
||||
do {
|
||||
GenerateConfirmationSeed(confirmation, sizeof (confirmation), i++);
|
||||
|
||||
//st.CloseCursor();
|
||||
rows = 0;
|
||||
const PGresult *res = pgsql_query("SELECT id FROM payment WHERE confirmation='%s'", confirmation);
|
||||
if (res != NULL) {
|
||||
rows = pgsql_num_rows(res);
|
||||
}
|
||||
} while (rows > 0 && i < 100);
|
||||
|
||||
pgsql_exec("UPDATE payment SET confirmation='%s', dt_confirmed=now() WHERE id=%lu", confirmation, payment_id);
|
||||
pgsql_exec("COMMIT"); // Unlock table 'data'
|
||||
strsafecpy(number, confirmation, sz);
|
||||
}
|
||||
|
||||
/*
|
||||
*
|
||||
*
|
||||
utransport=> \d payment
|
||||
payment payment_agents_concierge_id_key payment_agents_translators payment_agents_translators_id_seq payment_agents_transport_id_key payment_data payment_data_pkey payment_pkey
|
||||
payment_agents_concierge payment_agents_concierge_id_seq payment_agents_translators_id_key payment_agents_transport payment_agents_transport_id_seq payment_data_id_seq payment_id_seq
|
||||
utransport=> \d payment
|
||||
Table "public.payment"
|
||||
Column | Type | Modifiers
|
||||
----------------+-----------------------------+------------------------------------------------------
|
||||
id | integer | not null default nextval('payment_id_seq'::regclass)
|
||||
member_id | integer |
|
||||
what | integer |
|
||||
location | inet |
|
||||
time | timestamp with time zone | default now()
|
||||
amount | integer |
|
||||
fee | integer | default 0
|
||||
status | integer |
|
||||
flags | integer |
|
||||
confirmation | character varying(10) |
|
||||
pid | integer |
|
||||
random | integer |
|
||||
account_id | integer |
|
||||
partner_id | integer |
|
||||
dt_cancelled | timestamp without time zone |
|
||||
dt_confirmed | timestamp with time zone |
|
||||
approval_code | integer | default 0
|
||||
target_partner | integer | default 0
|
||||
bal_prev | integer | default 0
|
||||
bal_final | integer | default 0
|
||||
Indexes:
|
||||
"payment_pkey" PRIMARY KEY, btree (id)
|
||||
Foreign-key constraints:
|
||||
"payment_member_id_fkey" FOREIGN KEY (member_id) REFERENCES members(id)
|
||||
Referenced by:
|
||||
TABLE "payment_data" CONSTRAINT "payment_data_payment_id_fkey" FOREIGN KEY (payment_id) REFERENCES payment(id)
|
||||
|
||||
utransport=>
|
||||
utransport=>
|
||||
utransport=>
|
||||
|
||||
*/
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,454 @@
|
||||
/*
|
||||
General Header
|
||||
ChiefSoft September 2017
|
||||
*/
|
||||
#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 "cfg.h"
|
||||
#include <curl/curl.h>
|
||||
/*
|
||||
Other Headers
|
||||
*/
|
||||
#include "stripe.h"
|
||||
#include "payments.h"
|
||||
#include "medTEmails.h"
|
||||
|
||||
long stripe_save_card(CVars in, CVars &out) {
|
||||
logfmt(logINFO, "stripe_save_card()");
|
||||
long res, card_id = 0;
|
||||
char token[64], customer[64], card[64];
|
||||
const char *stripe_key = CfgReadChar("stripe.secret_key");
|
||||
if (load_db_record(out, "SELECT stripe_customer_id,email FROM members WHERE id = %lu ", in["member_id"].Long()) && out["stripe_customer_id"].length() > 0) {
|
||||
// Existing stripe account
|
||||
logfmt(logINFO, "stripe_customer_id=%s", out["stripe_customer_id"].c_str());
|
||||
snprintf(customer, sizeof (customer), "%s", out["stripe_customer_id"].c_str());
|
||||
// Tokenize card
|
||||
bzero(token, sizeof (token));
|
||||
res = stripe_tokenize_card(
|
||||
stripe_key,
|
||||
in["card"].c_str(),
|
||||
in["expiration_month"].c_str(),
|
||||
in["expiration_year"].c_str(),
|
||||
in["cvv2"].c_str(),
|
||||
token,
|
||||
sizeof (token)
|
||||
);
|
||||
remove_all_chars(token, '"');
|
||||
logfmt(logINFO, "stripe_tokenize_card(%ld)=%s\n", res, token);
|
||||
// Create a card
|
||||
if (res == 0L) {
|
||||
bzero(card, sizeof (card));
|
||||
res = stripe_create_card(
|
||||
stripe_key,
|
||||
customer,
|
||||
token,
|
||||
card,
|
||||
sizeof (card));
|
||||
remove_all_chars(card, '"');
|
||||
logfmt(logINFO, "stripe_create_card(%ld)=%s\n", res, card);
|
||||
if (res == 0L) {
|
||||
// Save card into our DB
|
||||
in["stripe_card_id"] = card;
|
||||
in["stripe_card_id"].set_valid();
|
||||
in["card"].set_valid(false);
|
||||
in["cvv2"].set_valid(false);
|
||||
in["description"] = stripe_get_card_type(in["card"].c_str());
|
||||
in["description"].set_valid();
|
||||
card_id = insert_db_record(DBS_VALID, "creditcard", "creditcard_id_seq", in);
|
||||
if (card_id > 0) {
|
||||
out["card_id"]=card_id;
|
||||
out["result"] = "Card was saved successfully";
|
||||
member_email_calls(MERMSEMR_BKO_ADDCARD, out, out);
|
||||
} else {
|
||||
out["card_id"]="0";
|
||||
out["result"] = "Failed to save card";
|
||||
member_email_calls(MERMSEMR_BKO_ADDCARD, out, out);
|
||||
}
|
||||
} else {
|
||||
out["result"] = "Failed to create card with stripe";
|
||||
}
|
||||
} else {
|
||||
out["result"] = "Failed to tokenize card";
|
||||
logfmt(FLOG_MAX, out["result"].c_str());
|
||||
}
|
||||
} else if (out["email"].length() > 0) {
|
||||
// Tokenize card
|
||||
bzero(token, sizeof (token));
|
||||
res = stripe_tokenize_card(
|
||||
stripe_key,
|
||||
in["card"].c_str(),
|
||||
in["expiration_month"].c_str(),
|
||||
in["expiration_year"].c_str(),
|
||||
in["cvv2"].c_str(),
|
||||
token,
|
||||
sizeof (token)
|
||||
);
|
||||
remove_all_chars(token, '"');
|
||||
logfmt(logINFO, "stripe_tokenize_card(%ld)=%s\n", res, token);
|
||||
// Create customer
|
||||
if (res == 0L) {
|
||||
bzero(customer, sizeof (customer));
|
||||
res = stripe_create_customer(
|
||||
stripe_key,
|
||||
token,
|
||||
out["email"].c_str(),
|
||||
in["description"].c_str(),
|
||||
in["member_id"].c_str(),
|
||||
customer,
|
||||
sizeof (customer));
|
||||
remove_all_chars(customer, '"');
|
||||
logfmt(logINFO, "stripe_create_customer(%ld)=%s\n", res, customer);
|
||||
if (res == 0L) {
|
||||
out["customer"] = customer;
|
||||
if (pgsql_exec("UPDATE members SET stripe_customer_id='%s' WHERE id=%ld", customer, in["member_id"].Long()) > 0) {
|
||||
// Get card ID
|
||||
bzero(card, sizeof (card));
|
||||
res = stripe_get_card(
|
||||
stripe_key,
|
||||
customer,
|
||||
in["digits"].c_str(),
|
||||
in["expiration_month"].c_str(),
|
||||
in["expiration_year"].c_str(),
|
||||
card,
|
||||
sizeof (card));
|
||||
remove_all_chars(card, '"');
|
||||
logfmt(logINFO, "@here stripe_get_card(%ld)=%s\n", res, card);
|
||||
if (res == 0L) {
|
||||
// Save card into our DB
|
||||
in["stripe_card_id"] = card;
|
||||
in["stripe_card_id"].set_valid();
|
||||
in["card"].set_valid(false);
|
||||
in["cvv2"].set_valid(false);
|
||||
in["description"] = stripe_get_card_type(in["card"].c_str());
|
||||
in["description"].set_valid();
|
||||
card_id = insert_db_record(DBS_VALID, "creditcard", "creditcard_id_seq", in);
|
||||
if (card_id > 0) {
|
||||
out["card_id"] = card_id;
|
||||
out["result"] = "Card was saved successfully";
|
||||
member_email_calls(MERMSEMR_BKO_ADDCARD, out, out);
|
||||
} else {
|
||||
out["card_id"] = "0";
|
||||
out["result"] = "Failed to save card";
|
||||
member_email_calls(MERMSEMR_BKO_ADDCARD, out, out);
|
||||
}
|
||||
} else {
|
||||
out["result"] = "Failed to get card stripe ID";
|
||||
}
|
||||
} else {
|
||||
out["result"] = "Failed to save customer stripe ID";
|
||||
}
|
||||
} else {
|
||||
out["result"] = "Failed to create stripe customer";
|
||||
}
|
||||
} else {
|
||||
out["result"] = "Failed to tokenize card";
|
||||
}
|
||||
} else {
|
||||
out["result"] = "Failed to load customer";
|
||||
}
|
||||
logfmt(logINFO, "/stripe_save_card()");
|
||||
return card_id;
|
||||
}
|
||||
|
||||
long stripe_one_time_charge(CVars in, CVars &out) {
|
||||
logfmt(logINFO, "stripe_charge()");
|
||||
out["result"] = "stripe_charge() call in progress...";
|
||||
long res, ret = PHP_API_BAD_PARAM;
|
||||
char token[256], id[256];
|
||||
const char *stripe_key = CfgReadChar("stripe.secret_key");
|
||||
//logfmt( logINFO, "stripe_key=%s", stripe_key );
|
||||
try {
|
||||
REQ_STRING(in, "ccnum", 12, 16, "(.*)");
|
||||
REQ_STRING(in, "ccexpm", 2, 2, "(.*)");
|
||||
REQ_STRING(in, "ccexpy", 2, 2, "(.*)");
|
||||
REQ_STRING(in, "cccvc", 3, 5, "(.*)");
|
||||
long amount = REQ_LONG(in, "amount", 1, -1);
|
||||
const char * loc = getenv("REMOTE_ADDR");
|
||||
|
||||
res = stripe_tokenize_card(
|
||||
stripe_key,
|
||||
in["ccnum"].c_str(),
|
||||
in["ccexpm"].c_str(),
|
||||
in["ccexpy"].c_str(),
|
||||
in["cccvc"].c_str(),
|
||||
token,
|
||||
sizeof (token));
|
||||
|
||||
remove_all_chars(token, '"');
|
||||
|
||||
logfmt(logINFO, "stripe_tokenize_card(%ld)=%s\n", res, token);
|
||||
if (res == 0L) {
|
||||
char *currency = "usd";
|
||||
char *description = "Example charge";
|
||||
char *metadata = "6735";
|
||||
bzero(id, sizeof (id));
|
||||
res = stripe_charge_token(
|
||||
stripe_key,
|
||||
token,
|
||||
amount,
|
||||
currency,
|
||||
description,
|
||||
metadata,
|
||||
id, sizeof (id));
|
||||
remove_all_chars(id, '"');
|
||||
logfmt(logINFO, "stripe_charge_token(%ld)=%s\n", res, id);
|
||||
if (res == 0L) {
|
||||
logfmt(logINFO, "Processed charge: %s\n", token);
|
||||
ret = PHP_API_OK;
|
||||
out["result"] = "Charge success";
|
||||
out["id"] = id;
|
||||
} else {
|
||||
out["result"] = "Charge failed";
|
||||
out["id"] = "";
|
||||
}
|
||||
} else {
|
||||
out["result"] = "Failed to tokenize card";
|
||||
}
|
||||
} catch (bad_parameter) {
|
||||
out["result"] = "Bad parameter";
|
||||
logfmt(logINFO, "ERROR CALL long strip_charge(CVars in, CVars &out)");
|
||||
}
|
||||
|
||||
out["payment_return"] = ret;
|
||||
logfmt(logINFO, "/stripe_charge()");
|
||||
return ret;
|
||||
}
|
||||
|
||||
long stripe_new_customer_charge(CVars in, CVars &out) {
|
||||
logfmt(logINFO, "stripe_new_customer_charge()");
|
||||
out["result"] = "stripe_new_customer_charge() call in progress...";
|
||||
long res, ret = PHP_API_BAD_PARAM;
|
||||
char token[64], customer[64], id[64];
|
||||
const char *stripe_key = CfgReadChar("stripe.secret_key");
|
||||
//logfmt( logINFO, "stripe_key=%s", stripe_key );
|
||||
try {
|
||||
REQ_STRING(in, "ccnum", 12, 16, "(.*)");
|
||||
REQ_STRING(in, "ccexpm", 2, 2, "(.*)");
|
||||
REQ_STRING(in, "ccexpy", 2, 2, "(.*)");
|
||||
REQ_STRING(in, "cccvc", 3, 5, "(.*)");
|
||||
long amount = REQ_LONG(in, "amount", 1, -1);
|
||||
long customer_id = REQ_LONG(in, "customer_id", 1, -1);
|
||||
REQ_STRING(in, "email", 6, 64, "(.*)");
|
||||
REQ_STRING(in, "description", 1, 64, "(.*)");
|
||||
const char * loc = getenv("REMOTE_ADDR");
|
||||
|
||||
bzero(token, sizeof (token));
|
||||
res = stripe_tokenize_card(
|
||||
stripe_key,
|
||||
in["ccnum"].c_str(),
|
||||
in["ccexpm"].c_str(),
|
||||
in["ccexpy"].c_str(),
|
||||
in["cccvc"].c_str(),
|
||||
token,
|
||||
sizeof (token));
|
||||
remove_all_chars(token, '"');
|
||||
logfmt(logINFO, "stripe_tokenize_card(%ld)=%s\n", res, token);
|
||||
if (res == 0L) {
|
||||
bzero(customer, sizeof (customer));
|
||||
res = stripe_create_customer(
|
||||
stripe_key,
|
||||
token,
|
||||
in["email"].c_str(),
|
||||
in["description"].c_str(),
|
||||
in["customer_id"].c_str(),
|
||||
customer,
|
||||
sizeof (customer));
|
||||
remove_all_chars(customer, '"');
|
||||
logfmt(logINFO, "stripe_create_customer(%ld)=%s\n", res, customer);
|
||||
if (res == 0L) {
|
||||
out["customer"] = customer;
|
||||
char *currency = "usd";
|
||||
char *description = "Example charge";
|
||||
char *metadata = "6735";
|
||||
bzero(id, sizeof (id));
|
||||
res = stripe_charge_customer(
|
||||
stripe_key,
|
||||
customer,
|
||||
amount,
|
||||
currency,
|
||||
description,
|
||||
metadata,
|
||||
id,
|
||||
sizeof (id));
|
||||
remove_all_chars(id, '"');
|
||||
logfmt(logINFO, "stripe_charge_customer(%ld)=%s\n", res, id);
|
||||
if (res == 0L) {
|
||||
logfmt(logINFO, "Processed charge: %s\n", id);
|
||||
ret = PHP_API_OK;
|
||||
out["id"] = id;
|
||||
out["result"] = "Charge success";
|
||||
} else {
|
||||
out["result"] = "Charge failed";
|
||||
}
|
||||
} else {
|
||||
out["result"] = "Create customer failed";
|
||||
}
|
||||
} else {
|
||||
out["result"] = "Failed to tokenize card";
|
||||
}
|
||||
} catch (bad_parameter) {
|
||||
out["result"] = "Bad parameter";
|
||||
logfmt(logINFO, "ERROR CALL long strip_charge(CVars in, CVars &out)");
|
||||
}
|
||||
|
||||
out["payment_return"] = ret;
|
||||
logfmt(logINFO, "/stripe_charge()");
|
||||
return ret;
|
||||
}
|
||||
|
||||
long stripe_charge_member_paymentid(CVars in, CVars &out) {
|
||||
logfmt(logINFO, "stripe_charge_member_paymentid()");
|
||||
out["result"] = "stripe_charge_member_paymentid() call in progress...";
|
||||
long res, ret = PHP_API_BAD_PARAM;
|
||||
|
||||
|
||||
try {
|
||||
REQ_LONG(in, "service_id", 0, -1);
|
||||
REQ_LONG(in, "member_id", 0, -1);
|
||||
long payment_id = REQ_LONG(in, "payment_id", 0, -1);
|
||||
|
||||
|
||||
char id[64], customer[64], data[64];
|
||||
const char *stripe_key = CfgReadChar("stripe.secret_key");
|
||||
|
||||
if (load_db_record(in, "SELECT *,account_id AS card_id , id AS payment_id FROM payment WHERE id = %lu", in["payment_id"].Long()) > 0) {
|
||||
|
||||
} else {
|
||||
|
||||
}
|
||||
|
||||
if (load_db_record(in, "SELECT *,id AS service_id FROM members_service_request WHERE id = %lu AND dt_confirmed IS NULL", in["service_id"].Long()) > 0) {
|
||||
|
||||
} else {
|
||||
out["result"] = "Failed : Duplicate Detected";
|
||||
return ret;
|
||||
}
|
||||
in["description"] = "Laundry Pickup";
|
||||
in["invoice_id"] = in["payment_id"];
|
||||
|
||||
|
||||
if (load_db_record(out, "SELECT stripe_customer_id FROM members WHERE id=%lu AND stripe_customer_id IS NOT NULL", in["member_id"].Long()) > 0) {
|
||||
if (load_db_record(out, "SELECT stripe_card_id,currency FROM creditcard WHERE id=%lu AND member_id=%lu AND stripe_card_id IS NOT NULL", in["card_id"].Long(), in["member_id"].Long()) > 0) {
|
||||
// Set card as a default funding source
|
||||
const char *entity = "default_source";
|
||||
snprintf(customer, sizeof (customer), "%s", out["stripe_customer_id"].c_str());
|
||||
bzero(data, sizeof (data));
|
||||
res = stripe_update_customer(stripe_key, customer, entity, out["stripe_card_id"].c_str(), entity, data, sizeof (data));
|
||||
remove_all_chars(data, '"');
|
||||
if (res == 0L && out["stripe_card_id"].compare(data) == 0) {
|
||||
// charge customer
|
||||
char *metadata = "6735";
|
||||
bzero(id, sizeof (id));
|
||||
res = stripe_charge_customer(
|
||||
stripe_key,
|
||||
customer,
|
||||
in["amount"].Long(),
|
||||
out["currency"].c_str(),
|
||||
in["description"].c_str(),
|
||||
in["invoice_id"].c_str(),
|
||||
id,
|
||||
sizeof (id));
|
||||
remove_all_chars(id, '"');
|
||||
logfmt(logINFO, "stripe_charge_member_paymentid(%ld)=%s\n", res, id);
|
||||
if (res == 0L) {
|
||||
logfmt(logINFO, "Processed charge: %s\n", id);
|
||||
char confirmation[15] = "";
|
||||
Confirmation(payment_id, confirmation, sizeof (confirmation)); // this stamp the payment confirmation
|
||||
|
||||
ret = PHP_API_OK;
|
||||
out["id"] = id;
|
||||
pgsql_exec("UPDATE payment SET stripe_confirm='%s',dt_confirmed=now() WHERE id = %lu", id, payment_id);
|
||||
pgsql_exec("UPDATE members_service_request SET payment_id=%lu,dt_confirmed=now(),flags=%lu WHERE id = %lu",payment_id, CONFIRMED , in["service_id"].Long());
|
||||
|
||||
out["result"] = "Charge success";
|
||||
} else {
|
||||
out["result"] = "Charge failed";
|
||||
}
|
||||
} else {
|
||||
out["result"] = "Failed to set customer default funding source";
|
||||
}
|
||||
} else {
|
||||
out["result"] = "Failed to load stripe card ID";
|
||||
}
|
||||
} else {
|
||||
out["result"] = "Failed to load stripe customer ID";
|
||||
}
|
||||
|
||||
} catch (bad_parameter) {
|
||||
logfmt(logINFO, "ERROR CALL long stripe_charge_member_paymentid(CVars in, CVars &out)");
|
||||
}
|
||||
|
||||
out["payment_return"] = ret;
|
||||
|
||||
logfmt(logINFO, "/stripe_charge_member_paymentid()");
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
long stripe_charge_member(CVars in, CVars &out) {
|
||||
logfmt(logINFO, "stripe_charge_member()");
|
||||
out["result"] = "stripe_charge_member() call in progress...";
|
||||
long res, ret = PHP_API_BAD_PARAM;
|
||||
char id[64], customer[64], data[64];
|
||||
const char *stripe_key = CfgReadChar("stripe.secret_key");
|
||||
|
||||
if (load_db_record(out, "SELECT stripe_customer_id FROM members WHERE id=%lu AND stripe_customer_id IS NOT NULL", in["member_id"].Long()) > 0) {
|
||||
if (load_db_record(out, "SELECT stripe_card_id FROM creditcard WHERE id=%lu AND member_id=%lu AND stripe_card_id IS NOT NULL", in["card_id"].Long(), in["member_id"].Long()) > 0) {
|
||||
// Set card as a default funding source
|
||||
const char *entity = "default_source";
|
||||
snprintf(customer, sizeof (customer), "%s", out["stripe_customer_id"].c_str());
|
||||
bzero(data, sizeof (data));
|
||||
res = stripe_update_customer(stripe_key, customer, entity, out["stripe_card_id"].c_str(), entity, data, sizeof (data));
|
||||
remove_all_chars(data, '"');
|
||||
if (res == 0L && out["stripe_card_id"].compare(data) == 0) {
|
||||
// charge customer
|
||||
char *metadata = "6735";
|
||||
bzero(id, sizeof (id));
|
||||
res = stripe_charge_customer(
|
||||
stripe_key,
|
||||
customer,
|
||||
in["amount"].Long(),
|
||||
in["currency"].c_str(),
|
||||
in["description"].c_str(),
|
||||
in["invoice_id"].c_str(),
|
||||
id,
|
||||
sizeof (id));
|
||||
remove_all_chars(id, '"');
|
||||
logfmt(logINFO, "stripe_charge_customer(%ld)=%s\n", res, id);
|
||||
if (res == 0L) {
|
||||
logfmt(logINFO, "Processed charge: %s\n", id);
|
||||
// char confirmation[15] = "";
|
||||
// Confirmation(payment_id, confirmation, sizeof (confirmation)); // this stamp the payment confirmation
|
||||
|
||||
|
||||
ret = PHP_API_OK;
|
||||
out["id"] = id;
|
||||
out["result"] = "Charge success";
|
||||
} else {
|
||||
out["result"] = "Charge failed";
|
||||
}
|
||||
} else {
|
||||
out["result"] = "Failed to set customer default funding source";
|
||||
}
|
||||
} else {
|
||||
out["result"] = "Failed to load stripe card ID";
|
||||
}
|
||||
} else {
|
||||
out["result"] = "Failed to load stripe customer ID";
|
||||
}
|
||||
|
||||
out["payment_return"] = ret;
|
||||
logfmt(logINFO, "/stripe_charge_member()");
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
vi:ts=2
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user