From 67159b01329f1aebc962847da1aa40007f3af8da Mon Sep 17 00:00:00 2001 From: Olusesan Ameye Date: Wed, 5 Feb 2020 07:15:32 -0500 Subject: [PATCH] fix --- coregrade/src/shared_tool/account.cc | 129 ++++---- coregrade/src/shared_tool/groups.cc | 193 ++++++----- coregrade/src/shared_tool/topups.cc | 462 +++++++++++++-------------- 3 files changed, 382 insertions(+), 402 deletions(-) diff --git a/coregrade/src/shared_tool/account.cc b/coregrade/src/shared_tool/account.cc index 5764947..3b6a571 100644 --- a/coregrade/src/shared_tool/account.cc +++ b/coregrade/src/shared_tool/account.cc @@ -142,27 +142,27 @@ long SessionCheck(long uid, const char *sessionid, int create) { return -1L; // Invalif parameters } // Clean old sessions - pgsql_exec("DELETE FROM members_session WHERE uid=%ld AND updated < (now() - interval '15 minutes')", uid); + pgsql_exec("DELETE FROM members_session WHERE member_id=%ld AND updated < (now() - interval '15 minutes')", uid); // Update/check existing session - if (create == 0 && pgsql_exec("UPDATE members_session SET updated=NOW() WHERE uid=%ld AND sessionid='%s'", uid, sessionid) > 0) { + if (create == 0 && pgsql_exec("UPDATE members_session SET updated=NOW() WHERE member_id=%ld AND session='%s'", uid, sessionid) > 0) { return 1L; // Session updated } if (create > 0) { // Check session i? - const PGresult *res = pgsql_query("SELECT * FROM members_session WHERE uid=%ld AND sessionid<>'%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) { return -2L; // Active sessions found } CVars sess; // Do we have the same session already? - if (load_db_record(sess, "SELECT * FROM members_session WHERE uid=%lu AND sessionid='%s'", uid, sessionid) > 0) { - pgsql_exec("UPDATE members_session SET updated=NOW() WHERE uid=%ld AND sessionid='%s'", uid, sessionid); + 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 - sess["uid"] = uid; - sess["uid"].set_valid(true); - sess["sessionid"] = sessionid; - sess["sessionid"].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); if (sid > 0) { return sid; // New session created @@ -180,10 +180,12 @@ long LoginCoreGradeAccount(CVars in, CVars &out) { REQ_STRING(in, "password", 5, 49, "(.*)"); REQ_STRING(in, "sessionid", 4, 40, "(.*)"); OPTIONAL(in, "loc") REQ_STRING(in, "loc", 3, 15, "(.*)"); + + - ret = load_db_record(out, "SELECT *,id AS member_id FROM members WHERE status=1 AND LOWER(username)=LOWER('%s') AND password= md5('%s')", in["username"].c_str(), in["password"].c_str()); + ret = load_db_record(out, "SELECT UPPER( md5( now()::text ) ) AS sessionid, *,id AS member_id FROM members WHERE status=1 AND LOWER(username)=LOWER('%s') AND password= md5('%s')", in["username"].c_str(), in["password"].c_str()); if (ret) { - if (SessionCheck(out["id"].Long(), in["sessionid"].c_str(), 1) > 0) { + if (SessionCheck(out["member_id"].Long(), out["sessionid"].c_str(), 1) > 0) { out["stauts"] = "OK"; ret = PHP_API_OK; } else { @@ -203,21 +205,24 @@ long CreateCoreGradeAccountPending(CVars in, CVars &out) { out = in; /* - CREATE TABLE members_pending ( -id SERIAL, - username VARCHAR(15) UNIQUE NOT NULL, - firstname VARCHAR(50), - lastname VARCHAR(50), - email VARCHAR(50), - phone VARCHAR(25), -status integer DEFAULT 1, -added timestamp without time zone DEFAULT now(), - verify_link VARCHAR(100), - expire timestamp without time zone DEFAULT now() +'30 days' - ); - ALTER TABLE ONLY members_pending -ADD CONSTRAINT members_pending_id_key UNIQUE (id); + CREATE TABLE members_pending ( + id SERIAL, + username VARCHAR(15) UNIQUE NOT NULL, + firstname VARCHAR(50), + lastname VARCHAR(50), + email VARCHAR(50), + phone VARCHAR(25), + status integer DEFAULT 1, + added timestamp without time zone DEFAULT now(), + verify_link VARCHAR(100), + expire timestamp without time zone DEFAULT now() +'30 days' + ); + ALTER TABLE ONLY members_pending + ADD CONSTRAINT members_pending_id_key UNIQUE (id); */ + + + REQ_STRING(in, "username", 5, 49, "(.*)"); REQ_STRING(in, "firstname", 2, 49, "(.*)"); REQ_STRING(in, "lastname", 2, 49, "(.*)"); @@ -225,6 +230,9 @@ ADD CONSTRAINT members_pending_id_key UNIQUE (id); OPTIONAL(in, "phone") REQ_STRING(in, "phone", 3, 15, "(.*)"); OPTIONAL(in, "loc") REQ_STRING(in, "loc", 3, 15, "(.*)"); + out["pending_id"] = "0"; + out["status_message"] = "Pending"; + int r1, r2, r3; char verify_link[100]; srand(time(NULL)); @@ -238,32 +246,45 @@ ADD CONSTRAINT members_pending_id_key UNIQUE (id); const char *loc = getenv("REMOTE_ADDR"); - CVars x; - 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["email"] = in["email"]; - x["email"].set_valid(true); - x["phone"] = in["phone"]; - x["phone"].set_valid(true); - x["loc"] = loc; - x["loc"].set_valid(true); - x["verify_link"] = verify_link; - x["verify_link"].set_valid(true); - ret = insert_db_record(DBS_VALID, "members_pending", "members_pending_id_seq", x); - if (ret > 0) { - pgsql_query("UPDATE members SET password = md5('%s') WHERE id = %lu", in["password"].c_str(), ret); - out["pending_id"] = ret; - out["pending_id"].set_valid(true); - x["pending_id"] = ret; - x["pending_id"].set_valid(true); - AccountPendingMail(x); + const PGresult *res = pgsql_query("SELECT * FROM members WHERE LOWER(username) = LOWER('%s') ", in["username"].c_str()); + + if (res != NULL && pgsql_num_rows(res) > 0) { + out["status_message"] = "Unable to create account, try another username or reset password"; + } else { + // dulpicate condition satisfied + + + CVars x; + 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["email"] = in["email"]; + x["email"].set_valid(true); + x["phone"] = in["phone"]; + x["phone"].set_valid(true); + x["loc"] = loc; + x["loc"].set_valid(true); + x["verify_link"] = verify_link; + x["verify_link"].set_valid(true); + ret = insert_db_record(DBS_VALID, "members_pending", "members_pending_id_seq", x); + + if (ret > 0) { + pgsql_query("UPDATE members_pending SET password = md5('%s') WHERE id = %lu", in["password"].c_str(), ret); + out["pending_id"] = ret; + out["pending_id"].set_valid(true); + x["pending_id"] = ret; + x["pending_id"].set_valid(true); + AccountPendingMail(x); + } } + + + return ret; } //****************************************************************************** @@ -272,9 +293,9 @@ long CreateCoreGradeAccount(CVars in, CVars &out) { logfmt(logINFO, "CreateCoreGradeAccount()"); long ret = PHP_API_BAD_PARAM; REQ_STRING(in, "verify_link", 2, 120, "(.*)"); - // REQ_STRING(in, "pass1", 3, 15, "(.*)"); + // REQ_STRING(in, "pass1", 3, 15, "(.*)"); OPTIONAL(in, "loc") REQ_STRING(in, "loc", 3, 15, "(.*)"); - const char *loc = getenv("REMOTE_ADDR"); + const char *loc = getenv("REMOTE_ADDR"); try { long lonkF = load_db_record(out, "SELECT *,id AS pending_id FROM members_pending WHERE verify_link ='%s' AND expire > now() LIMIT 1", in["verify_link"].c_str()); if (lonkF) { @@ -292,7 +313,7 @@ long CreateCoreGradeAccount(CVars in, CVars &out) { x["phone"].set_valid(true); x["loc"] = loc; x["loc"].set_valid(true); - x["password"] = out["password"];; + x["password"] = out["password"]; x["password"].set_valid(true); ret = insert_db_record(DBS_VALID, "members", "members_id_seq", x); @@ -302,10 +323,10 @@ long CreateCoreGradeAccount(CVars in, CVars &out) { out["member_id"].set_valid(true); x["member_id"] = ret; x["member_id"].set_valid(true); - // pgsql_query("UPDATE members SET password = md5('%s') WHERE id = %lu", in["pass1"].c_str(), ret); - pgsql_query("UPDATE members_pending SET status = 5 WHERE id = %lu", out["pending_id"].Long()); + // pgsql_query("UPDATE members SET password = md5('%s') WHERE id = %lu", in["pass1"].c_str(), ret); + pgsql_query("UPDATE members_pending SET status = 5,verified=now() WHERE id = %lu", out["pending_id"].Long()); - AccountPendingMail(x); + // AccountPendingMail(x); welcome email } diff --git a/coregrade/src/shared_tool/groups.cc b/coregrade/src/shared_tool/groups.cc index 5daf383..5e9cd8e 100644 --- a/coregrade/src/shared_tool/groups.cc +++ b/coregrade/src/shared_tool/groups.cc @@ -12,119 +12,104 @@ #include "cfg.h" #include +long groups_calls(CVars in, CVars &out) { + logfmt(logINFO, "groups_calls()"); + out["result"] = "YES I GET TO BACK END"; + long action = REQ_LONG(in, "action", 0, -1); + switch (action) { -long groups_calls(CVars in, CVars &out) -{ - logfmt( logINFO, "groups_calls()" ); - out["result"] = "YES I GET TO BACK END"; - long action = REQ_LONG( in, "action", 0, -1); - switch( action ) - { + case COREGRADE_GROUP_ACCEPTGROUP: + //return LoginCoreGradeAccount( in, out); + break; - - case COREGRADE_GROUP_ACCEPTGROUP: - //return LoginCoreGradeAccount( in, out); - break; - - case COREGRADE_GROUP_INVITEGROUP: - //return CreateCoreGradeAccountPending(in, out); - break; - - case COREGRADE_GROUP_CREATEGROUP: - return CreateCoreGradeGroup( in, out); - break; - } - logfmt( logINFO, "/groups_calls()" ); - return 0; + case COREGRADE_GROUP_INVITEGROUP: + //return CreateCoreGradeAccountPending(in, out); + break; + + case COREGRADE_GROUP_CREATEGROUP: + return CreateCoreGradeGroup(in, out); + break; + } + logfmt(logINFO, "/groups_calls()"); + return 0; } -long CreateCoreGradeGroup(CVars in, CVars &out) -{ - long ret = PHP_API_BAD_PARAM; - out =in; +long CreateCoreGradeGroup(CVars in, CVars &out) { + long ret = PHP_API_BAD_PARAM; + out = in; - REQ_STRING (in, "group_name", 5, 99, "(.*)"); - OPTIONAL( in, "description" ) REQ_STRING (in, "description", 1, 249, "(.*)"); - REQ_LONG( in, "contribute", 1, -1 ); - REQ_LONG( in, "member_id", 1, -1 ); - OPTIONAL( in, "loc" ) REQ_STRING (in, "loc", 3, 15, "(.*)"); - - CVars x; - x["group_name"] = in["group_name"]; x["group_name"].set_valid( true ); - x["description"] = in["description"]; x["description"].set_valid( true ); - x["invite"] = "1"; x["invite"].set_valid( true ); - x["member_id"] = in["member_id"]; x["member_id"].set_valid( true ); - x["loc"] = in["loc"]; x["loc"].set_valid( true ); - ret = insert_db_record( DBS_VALID, "members_groups", "members_groups_id_seq", x ); + REQ_STRING(in, "group_name", 5, 99, "(.*)"); + OPTIONAL(in, "description") REQ_STRING(in, "description", 1, 249, "(.*)"); + REQ_LONG(in, "contribute", 1, -1); + REQ_LONG(in, "member_id", 1, -1); + OPTIONAL(in, "loc") REQ_STRING(in, "loc", 3, 15, "(.*)"); - if ( ret > 0 ) - { - if ( in["contribute"].Long() > 0 ) - { - pgsql_exec("UPDATE members_groups SET contribute=NOW() WHERE id=%lu ", ret); - } - out["group_id"] = ret; out["group_id"].set_valid( true ); - x["group_id"] = ret; x["group_id"].set_valid( true ); - CVars y; - y["member_id"] = in["member_id"]; y["member_id"].set_valid( true ); - y["admin_status"] = in["member_id"]; y["admin_status"].set_valid( true ); - y["group_id"] = out["group_id"]; y["group_id"].set_valid( true ); - y["loc"] = in["loc"]; y["loc"].set_valid( true ); - //ALTER TABLE group_members ADD admin_status INT REFERENCES members(id); - CoreGradeGroupCreateMember(y,out); - CreateCoreGradeGroupMail(y); - } - return ret; + CVars x; + x["group_name"] = in["group_name"]; + x["group_name"].set_valid(true); + x["description"] = in["description"]; + x["description"].set_valid(true); + x["invite"] = "1"; + x["invite"].set_valid(true); + x["member_id"] = in["member_id"]; + x["member_id"].set_valid(true); + x["loc"] = in["loc"]; + x["loc"].set_valid(true); + ret = insert_db_record(DBS_VALID, "members_groups", "members_groups_id_seq", x); + + if (ret > 0) { + if (in["contribute"].Long() > 0) { + pgsql_exec("UPDATE members_groups SET contribute=NOW() WHERE id=%lu ", ret); + } + out["group_id"] = ret; + out["group_id"].set_valid(true); + x["group_id"] = ret; + x["group_id"].set_valid(true); + CVars y; + y["member_id"] = in["member_id"]; + y["member_id"].set_valid(true); + y["admin_status"] = in["member_id"]; + y["admin_status"].set_valid(true); + y["group_id"] = out["group_id"]; + y["group_id"].set_valid(true); + y["loc"] = in["loc"]; + y["loc"].set_valid(true); + //ALTER TABLE group_members ADD admin_status INT REFERENCES members(id); + CoreGradeGroupCreateMember(y, out); + CreateCoreGradeGroupMail(y); + } + return ret; } -long CoreGradeGroupCreateMember(CVars in, CVars &out) -{ - long ret = PHP_API_BAD_PARAM; - out =in; - REQ_LONG( in, "member_id", 1, -1 ); - REQ_LONG( in, "group_id", 1, -1 ); - OPTIONAL( in, "loc" ) REQ_STRING (in, "loc", 3, 15, "(.*)"); - - CVars x; - x["group_id"] = in["group_id"]; x["group_id"].set_valid( true ); - x["member_id"] = in["member_id"]; x["member_id"].set_valid( true ); - x["loc"] = in["loc"]; x["loc"].set_valid( true ); - if (in["admin_status"].Long() > 0) - { - x["admin_status"] = in["admin_status"]; x["admin_status"].set_valid( true ); - } - ret = insert_db_record( DBS_VALID, "group_members", "group_members_id_seq", x ); +long CoreGradeGroupCreateMember(CVars in, CVars &out) { + long ret = PHP_API_BAD_PARAM; + out = in; + REQ_LONG(in, "member_id", 1, -1); + REQ_LONG(in, "group_id", 1, -1); + OPTIONAL(in, "loc") REQ_STRING(in, "loc", 3, 15, "(.*)"); - if ( ret > 0 ) - { out["group_member_id"] = ret; out["group_member_id"].set_valid( true ); - x["group_member_id"] = ret; x["group_member_id"].set_valid( true ); - GroupCreateMemberMail(x); - pgsql_exec("UPDATE members_groups SET accepted = (SELECT count(*) FROM group_members WHERE group_id = %lu ) WHERE id=%lu",x["group_id"].Long(),x["group_id"].Long() ); - } - return ret; + CVars x; + x["group_id"] = in["group_id"]; + x["group_id"].set_valid(true); + x["member_id"] = in["member_id"]; + x["member_id"].set_valid(true); + x["loc"] = in["loc"]; + x["loc"].set_valid(true); + if (in["admin_status"].Long() > 0) { + x["admin_status"] = in["admin_status"]; + x["admin_status"].set_valid(true); + } + ret = insert_db_record(DBS_VALID, "group_members", "group_members_id_seq", x); + + if (ret > 0) { + out["group_member_id"] = ret; + out["group_member_id"].set_valid(true); + x["group_member_id"] = ret; + x["group_member_id"].set_valid(true); + GroupCreateMemberMail(x); + pgsql_exec("UPDATE members_groups SET accepted = (SELECT count(*) FROM group_members WHERE group_id = %lu ) WHERE id=%lu", x["group_id"].Long(), x["group_id"].Long()); + } + return ret; } //****************************************************************************** - - - /* -CREATE TABLE group_members ( - id SERIAL, - member_id INT REFERENCES members(id), - group_name VARCHAR(100) UNIQUE NOT NULL, - description VARCHAR(250), - added timestamp without time zone DEFAULT now(), - balance integer DEFAULT 0, - contribute timestamp without time zone, - alert integer DEFAULT 0, - status integer DEFAULT 1, - invite integer DEFAULT 0, - accepted integer DEFAULT 0, - rejected integer DEFAULT 0, - loc INET - ); -ALTER TABLE ONLY members_groups - ADD CONSTRAINT members_groups_id_key UNIQUE (id); - - */ - diff --git a/coregrade/src/shared_tool/topups.cc b/coregrade/src/shared_tool/topups.cc index 1561e2b..85ea1ba 100644 --- a/coregrade/src/shared_tool/topups.cc +++ b/coregrade/src/shared_tool/topups.cc @@ -16,263 +16,237 @@ #include "account.h" #include "storeface.h" +long CreateBulkTopupBatch(CVars in, CVars &out) { + long ret = 0; + REQ_STRING(in, "batch_name", 1, 50, "(.*)"); + REQ_LONG(in, "customer_id", 1, -1); + CVars cust; + cust["customer_id"] = in["customer_id"]; + cust["customer_id"].set_valid(true); + cust["batch_name"] = in["batch_name"]; + cust["batch_name"].set_valid(true); + out["bulk_id"] = insert_db_record(DBS_VALID, "bulktopup_batch", "bulktopup_batch_id_seq", cust); + if (out["bulk_id"].Long() > 0) { + ret = out["bulk_id"].Long(); + } - -long CreateBulkTopupBatch(CVars in, CVars &out) -{ -long ret = 0; - REQ_STRING( in, "batch_name", 1, 50, "(.*)"); - REQ_LONG( in, "customer_id", 1, -1 ); - CVars cust; - cust["customer_id"] = in["customer_id"]; cust["customer_id"].set_valid(true); - cust["batch_name"] = in["batch_name"]; cust["batch_name"].set_valid(true); - - out["bulk_id"] = insert_db_record( DBS_VALID, "bulktopup_batch", "bulktopup_batch_id_seq", cust ); - if (out["bulk_id"].Long() > 0 ) - { - ret = out["bulk_id"].Long(); - } - - return ret; -} -long AddBulkTopupBatchItem(CVars in, CVars &out) -{ -long ret = 0; - -/* -CREATE TABLE bulktopup_batch_items -( - id serial NOT NULL, - bulk_id INT REFERENCES bulktopup_batch(id), - customer_id INT REFERENCES customer(id), - topup_name VARCHAR(50), - topup_number VARCHAR(15) NOT NULL, - topup_amount INT DEFAULT 0, - topup_network VARCHAR(10), - order_id VARCHAR(25), - deliver_status VARCHAR(15), - status integer DEFAULT 1, -added TIMESTAMP DEFAULT NOW() -); -*/ - - REQ_STRING( in, "topup_name", 1, 50, "(.*)"); - REQ_STRING( in, "topup_number", 1, 15, "(.*)"); - REQ_STRING( in, "topup_network", 1, 15, "(.*)"); - REQ_LONG( in, "topup_amount", 1, -1 ); - REQ_LONG( in, "customer_id", 1, -1 ); - REQ_LONG( in, "bulk_id", 1, -1 ); - - CVars cust; - cust["topup_name"] = in["topup_name"]; cust["topup_name"].set_valid(true); - cust["topup_number"] = in["topup_number"]; cust["topup_number"].set_valid(true); - cust["topup_network"] = in["topup_network"]; cust["topup_network"].set_valid(true); - cust["topup_amount"] = in["topup_amount"]; cust["topup_amount"].set_valid(true); - cust["customer_id"] = in["customer_id"]; cust["customer_id"].set_valid(true); - cust["bulk_id"] = in["bulk_id"]; cust["bulk_id"].set_valid(true); - - out["bulk_item_id"] = insert_db_record( DBS_VALID, "bulktopup_batch_items", "bulktopup_batch_items_id_seq", cust ); - if (out["bulk_item_id"].Long() > 0 ) - { - ret = out["bulk_item_id"].Long(); - } - return ret; -} -long UpdateBulkTopupItem(CVars in, CVars &out) -{ -long ret =0; - REQ_LONG( in, "bulk_id", 1, -1 ); - REQ_LONG( in, "customer_id", 1, -1 ); - if ( load_db_record( out, "SELECT id FROM bulktopup_batch WHERE id= %lu AND status <> 5 AND completed IS NULL",in["bulk_id"].Long() ) ) - { - pgsql_exec( "UPDATE bulktopup_batch SET status = 2 WHERE completed IS NULL AND status <> 5 AND id=%lu AND customer_id = %lu",in["bulk_id"].Long(),in["customer_id"].Long()); - ret = in["bulk_id"].Long(); - } - - return ret; + return ret; } -long DeliverBulkTopupItem(CVars in, CVars &out) -{ -CVars xx; -CVars yy; -long ret = 0; - REQ_LONG( in, "bulk_id", 1, -1 ); - REQ_LONG( in, "item_id", 1, -1 ); - REQ_STRING( in, "payment_code", 1, 50, "(.*)"); - - if ( load_db_record( out, "SELECT gid AS paymentitemid FROM interswitch_biller_payment_items WHERE paymentcode = '%lu'",in["payment_code"].Long() ) ) - { - in["paymentitemid"] = out["paymentitemid"]; - xx["paymentitemid"] = out["paymentitemid"]; - in["paymentitemid"].set_valid( true ); - xx["paymentitemid"].set_valid( true ); - } - else - { - return 0; - } - - if ( load_db_record( out, "SELECT * FROM bulktopup_batch WHERE id= %lu AND status <> 5 AND completed IS NULL",in["bulk_id"].Long() ) ) - { - if ( load_db_record( yy, "SELECT * FROM bulktopup_batch_items WHERE id= %lu AND status <> 5 AND completed IS NULL",in["item_id"].Long() ) ) - { - xx["customer_id"]= out["customer_id"]; xx["customer_id"].set_valid( true ); - xx["amount"]= yy["topup_amount"]; xx["amount"].set_valid( true ); - xx["recipient_no"]= yy["topup_number"]; xx["topup_number"].set_valid( true ); - xx["bulk_topup_item_id"] = yy["id"]; xx["bulk_topup_item_id"].set_valid( true ); - // pgsql_exec( "UPDATE bulktopup_batch SET status = 2 WHERE completed IS NULL AND status <> 5 AND id=%lu AND customer_id = %lu",in["bulk_id"].Long(),in["customer_id"].Long()); - xx["trans_not_id"] =CreateTopupOrder(xx,out); - - if ( xx["trans_not_id"].Long() > 0 ) - { - - pgsql_exec( "UPDATE bulktopup_batch_items SET order_id = '%s', payment_code = '%s' WHERE id = %lu",out["orderid"].c_str(),in["payment_code"].c_str(),in["item_id"].Long() ); - xx["customermobile"]=xx["recipient_no"]; xx["customermobile"].set_valid( true ); - xx["customerid"]= xx["customer_id"]; xx["customerid"].set_valid( true ); // bad but true - xx["orderid"] =out["orderid"]; xx["orderid"].set_valid( true ); - xx["order_id"] =out["orderid"]; xx["order_id"].set_valid( true ); - xx["trans_not_id"].set_valid( true ); - xx["payment_code"] = in["payment_code"]; xx["payment_code"].set_valid( true ); - - if ( DeliverTopOrderByBalance(xx,out) == 100 ) - { - pgsql_exec( "UPDATE bulktopup_batch_items SET completed=now(),status=5 WHERE id = %lu",in["item_id"].Long() ); - } - } - - ret = in["bulk_id"].Long(); - } +long AddBulkTopupBatchItem(CVars in, CVars &out) { + long ret = 0; - } -return ret; + + REQ_STRING(in, "topup_name", 1, 50, "(.*)"); + REQ_STRING(in, "topup_number", 1, 15, "(.*)"); + REQ_STRING(in, "topup_network", 1, 15, "(.*)"); + REQ_LONG(in, "topup_amount", 1, -1); + REQ_LONG(in, "customer_id", 1, -1); + REQ_LONG(in, "bulk_id", 1, -1); + + CVars cust; + cust["topup_name"] = in["topup_name"]; + cust["topup_name"].set_valid(true); + cust["topup_number"] = in["topup_number"]; + cust["topup_number"].set_valid(true); + cust["topup_network"] = in["topup_network"]; + cust["topup_network"].set_valid(true); + cust["topup_amount"] = in["topup_amount"]; + cust["topup_amount"].set_valid(true); + cust["customer_id"] = in["customer_id"]; + cust["customer_id"].set_valid(true); + cust["bulk_id"] = in["bulk_id"]; + cust["bulk_id"].set_valid(true); + + out["bulk_item_id"] = insert_db_record(DBS_VALID, "bulktopup_batch_items", "bulktopup_batch_items_id_seq", cust); + if (out["bulk_item_id"].Long() > 0) { + ret = out["bulk_item_id"].Long(); + } + return ret; } -long DeliverTopOrderByBalance(CVars in, CVars &out) -{ -long retval=0; -long process_status=0; -// in["amount"] - arrives as niara - send cents/kobo to interswitch +long UpdateBulkTopupItem(CVars in, CVars &out) { + long ret = 0; + REQ_LONG(in, "bulk_id", 1, -1); + REQ_LONG(in, "customer_id", 1, -1); + if (load_db_record(out, "SELECT id FROM bulktopup_batch WHERE id= %lu AND status <> 5 AND completed IS NULL", in["bulk_id"].Long())) { + pgsql_exec("UPDATE bulktopup_batch SET status = 2 WHERE completed IS NULL AND status <> 5 AND id=%lu AND customer_id = %lu", in["bulk_id"].Long(), in["customer_id"].Long()); + ret = in["bulk_id"].Long(); + } - out["route_id"] = "0"; - out["route_etisalat"] = "0"; - if( load_db_record( out,"SELECT id AS route_id FROM airtime_route WHERE payment_code ='%s'",in["payment_code"].c_str() ) ) - { - out["route_etisalat"] = "1"; - }else{ } - - - - if ( in["pmode"].Long() == PAY_MODE_BALANCE ) // paying with balance - { - if ( load_db_record( out, "SELECT * FROM customer WHERE id = %lu",in["customer_id"].Long() ) ) - { - long amount_in_cents = in["amount"].Long()*100; - - if ( out["balance"].Long() < amount_in_cents ) - { - out["status"] = "Insufficient Balance for Purchase"; - out["status_code"] = "F0004"; - } - else - { - in["amount"] = amount_in_cents; - in["amount"].set_valid( true ); - //-------------------------------------------------- - pgsql_exec( "UPDATE customer SET balance = balance - %lu WHERE id=%lu ",amount_in_cents,in["customer_id"].Long()); - //-------------------------------------------------- - //retval = INTW_sendBillPaymentAdvice( in, out ); - if ( out["route_etisalat"].Long() > 0 && out["route_id"].Long() > 0 ) - { - retval = DeliverMobilseEtisalat( in, out ); - out["ResponseCode"] = retval; - } - else - { - retval = INTW_sendBillPaymentAdvice( in, out ); - } - - if (out["ResponseCode"].Long() == 90000L) { - process_status = 100; // completed - out["status"] = "Completed"; - out["status_code"] = "A0001"; - pgsql_exec( "UPDATE trans_notification SET completed = now() WHERE id=%lu AND customer_id = %lu ",in["trans_not_id"].Long(),in["customer_id"].Long()); - out["email_alert"] = "I am sending Email of Success"; - //CustomerAirSale( in); - VirtualAirSaleAlert(out); - } - else - { - //-------------------------------------------------- - pgsql_exec( "UPDATE customer SET balance = balance + %lu WHERE id=%lu ",amount_in_cents,in["customer_id"].Long()); - //-------------------------------------------------- - VirtualAirSaleAlert(out); - out["email_alert"] = "I am sending Email of Failure"; - - out["status"] = "Unable to deliver topup"; - out["status_code"] = "F0005"; - - } - } - } - else - { // customer not found - out["status"] = "Account not found"; - out["status_code"] = "F0003"; - } - } - - - return process_status; + return ret; } +long DeliverBulkTopupItem(CVars in, CVars &out) { + CVars xx; + CVars yy; + long ret = 0; + REQ_LONG(in, "bulk_id", 1, -1); + REQ_LONG(in, "item_id", 1, -1); + REQ_STRING(in, "payment_code", 1, 50, "(.*)"); -long CreateTopupOrder(CVars in, CVars &out) -{ -CVars cust; -CVars xx; -char xtid[12]; -int r; -long ret =0; + if (load_db_record(out, "SELECT gid AS paymentitemid FROM interswitch_biller_payment_items WHERE paymentcode = '%lu'", in["payment_code"].Long())) { + in["paymentitemid"] = out["paymentitemid"]; + xx["paymentitemid"] = out["paymentitemid"]; + in["paymentitemid"].set_valid(true); + xx["paymentitemid"].set_valid(true); + } else { + return 0; + } - REQ_LONG( in, "amount", 1, -1 ); - REQ_STRING( in, "recipient_no", 1, 15, "(.*)"); - REQ_LONG( in, "customer_id", 1, -1 ); + if (load_db_record(out, "SELECT * FROM bulktopup_batch WHERE id= %lu AND status <> 5 AND completed IS NULL", in["bulk_id"].Long())) { + if (load_db_record(yy, "SELECT * FROM bulktopup_batch_items WHERE id= %lu AND status <> 5 AND completed IS NULL", in["item_id"].Long())) { + xx["customer_id"] = out["customer_id"]; + xx["customer_id"].set_valid(true); + xx["amount"] = yy["topup_amount"]; + xx["amount"].set_valid(true); + xx["recipient_no"] = yy["topup_number"]; + xx["topup_number"].set_valid(true); + xx["bulk_topup_item_id"] = yy["id"]; + xx["bulk_topup_item_id"].set_valid(true); + // pgsql_exec( "UPDATE bulktopup_batch SET status = 2 WHERE completed IS NULL AND status <> 5 AND id=%lu AND customer_id = %lu",in["bulk_id"].Long(),in["customer_id"].Long()); + xx["trans_not_id"] = CreateTopupOrder(xx, out); + if (xx["trans_not_id"].Long() > 0) { - - srand(time(NULL)); - r = abs( rand()*10000000); + pgsql_exec("UPDATE bulktopup_batch_items SET order_id = '%s', payment_code = '%s' WHERE id = %lu", out["orderid"].c_str(), in["payment_code"].c_str(), in["item_id"].Long()); + xx["customermobile"] = xx["recipient_no"]; + xx["customermobile"].set_valid(true); + xx["customerid"] = xx["customer_id"]; + xx["customerid"].set_valid(true); // bad but true + xx["orderid"] = out["orderid"]; + xx["orderid"].set_valid(true); + xx["order_id"] = out["orderid"]; + xx["order_id"].set_valid(true); + xx["trans_not_id"].set_valid(true); + xx["payment_code"] = in["payment_code"]; + xx["payment_code"].set_valid(true); - cust["orderid"] = r; - in["orderid"] = r; - - in["orderid"].set_valid(true); - - cust["amount"] = in["amount"]; cust["amount"].set_valid(true); - cust["description"] = in["description"]; cust["description"].set_valid(true); - cust["customer_id"] = in["customer_id"]; cust["customer_id"].set_valid(true); - cust["recipient_no"] = in["recipient_no"]; cust["recipient_no"].set_valid(true); - - cust["orderid"].set_valid(true); - out=in; - - out["order_id"] = insert_db_record( DBS_VALID, "trans_notification", "trans_notification_id_seq", cust ); - - - if (out["order_id"].Long() > 0 ) - { - - sprintf( xtid, "9%011lu", out["order_id"].Long() ); - xx["orderid"] = xtid; - pgsql_exec( "UPDATE trans_notification SET orderid ='%s' WHERE id=%lu AND customer_id = %lu ",xtid,out["order_id"].Long(),in["customer_id"].Long()); - out["orderid"] = xtid; - ret = out["order_id"].Long(); - } - else - { - out["orderid"]=""; - } - return ret; + if (DeliverTopOrderByBalance(xx, out) == 100) { + pgsql_exec("UPDATE bulktopup_batch_items SET completed=now(),status=5 WHERE id = %lu", in["item_id"].Long()); + } + } + + ret = in["bulk_id"].Long(); + } + + } + return ret; +} + +long DeliverTopOrderByBalance(CVars in, CVars &out) { + long retval = 0; + long process_status = 0; + // in["amount"] - arrives as niara - send cents/kobo to interswitch + + out["route_id"] = "0"; + out["route_etisalat"] = "0"; + if (load_db_record(out, "SELECT id AS route_id FROM airtime_route WHERE payment_code ='%s'", in["payment_code"].c_str())) { + out["route_etisalat"] = "1"; + } else { + } + + + + if (in["pmode"].Long() == PAY_MODE_BALANCE) // paying with balance + { + if (load_db_record(out, "SELECT * FROM customer WHERE id = %lu", in["customer_id"].Long())) { + long amount_in_cents = in["amount"].Long()*100; + + if (out["balance"].Long() < amount_in_cents) { + out["status"] = "Insufficient Balance for Purchase"; + out["status_code"] = "F0004"; + } else { + in["amount"] = amount_in_cents; + in["amount"].set_valid(true); + //-------------------------------------------------- + pgsql_exec("UPDATE customer SET balance = balance - %lu WHERE id=%lu ", amount_in_cents, in["customer_id"].Long()); + //-------------------------------------------------- + //retval = INTW_sendBillPaymentAdvice( in, out ); + if (out["route_etisalat"].Long() > 0 && out["route_id"].Long() > 0) { + retval = DeliverMobilseEtisalat(in, out); + out["ResponseCode"] = retval; + } + else { + retval = INTW_sendBillPaymentAdvice(in, out); + } + + if (out["ResponseCode"].Long() == 90000L) { + process_status = 100; // completed + out["status"] = "Completed"; + out["status_code"] = "A0001"; + pgsql_exec("UPDATE trans_notification SET completed = now() WHERE id=%lu AND customer_id = %lu ", in["trans_not_id"].Long(), in["customer_id"].Long()); + out["email_alert"] = "I am sending Email of Success"; + //CustomerAirSale( in); + VirtualAirSaleAlert(out); + } else { + //-------------------------------------------------- + pgsql_exec("UPDATE customer SET balance = balance + %lu WHERE id=%lu ", amount_in_cents, in["customer_id"].Long()); + //-------------------------------------------------- + VirtualAirSaleAlert(out); + out["email_alert"] = "I am sending Email of Failure"; + + out["status"] = "Unable to deliver topup"; + out["status_code"] = "F0005"; + + } + } + } else { // customer not found + out["status"] = "Account not found"; + out["status_code"] = "F0003"; + } + } + + + return process_status; +} + +long CreateTopupOrder(CVars in, CVars &out) { + CVars cust; + CVars xx; + char xtid[12]; + int r; + long ret = 0; + + REQ_LONG(in, "amount", 1, -1); + REQ_STRING(in, "recipient_no", 1, 15, "(.*)"); + REQ_LONG(in, "customer_id", 1, -1); + + + + srand(time(NULL)); + r = abs(rand()*10000000); + + cust["orderid"] = r; + in["orderid"] = r; + + in["orderid"].set_valid(true); + + cust["amount"] = in["amount"]; + cust["amount"].set_valid(true); + cust["description"] = in["description"]; + cust["description"].set_valid(true); + cust["customer_id"] = in["customer_id"]; + cust["customer_id"].set_valid(true); + cust["recipient_no"] = in["recipient_no"]; + cust["recipient_no"].set_valid(true); + + cust["orderid"].set_valid(true); + out = in; + + out["order_id"] = insert_db_record(DBS_VALID, "trans_notification", "trans_notification_id_seq", cust); + + + if (out["order_id"].Long() > 0) { + + sprintf(xtid, "9%011lu", out["order_id"].Long()); + xx["orderid"] = xtid; + pgsql_exec("UPDATE trans_notification SET orderid ='%s' WHERE id=%lu AND customer_id = %lu ", xtid, out["order_id"].Long(), in["customer_id"].Long()); + out["orderid"] = xtid; + ret = out["order_id"].Long(); + } else { + out["orderid"] = ""; + } + return ret; }