Files
WrenchBoradWeb/wrenchboard/src/shared_tool/family_acc.cc
T
CHIEFSOFT\ameye a8be0ef476 fix synt
2023-10-28 13:13:20 -04:00

927 lines
36 KiB
C++

#include "clog.h"
#include "cgi.h"
#include "input.h"
#include "wrenchboard_api.h"
#include "reco_engine.h" //error in file name
#include "email.h"
#include "safestring.h"
#include <string>
#include "pgsql.h"
#include "pgsql_wrapper.h"
#include <curl/curl.h>
#include "account.h"
#include "cards.h"
#include "twilo.h"
#include "mobile.h"
#include "jobs_manager.h"
#include "family_acc.h"
#include "common_tool.h"
#include "account.h"
#include "payments.h"
long WrenchFamilyList(CVars in, CVars &out);
long WrenchFamilyWallet(CVars in, CVars &out);
long WrenchFamilyAdd(CVars in, CVars &out);
long WrenchFamilyUpdate(CVars in, CVars &out);
long WrenchFamilyManage(CVars in, CVars &out);
long WrenchSampleTasks(CVars in, CVars &out);
long WrenchSuggestTasks(CVars in, CVars &out);
long WrenchSuggestList(CVars in, CVars &out);
long WrenchSuggestWaitingList(CVars in, CVars &out);
long WrenchSuggestTaskStatus(CVars in, CVars &out);
long WrenchFamilyTransferStart(CVars in, CVars &out);
long WrenchFamilyTransfer(CVars in, CVars &out);
long family_calls(CVars in, CVars &out){
logfmt(logINFO, "family_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");
const PGresult *res;
logfmt(logINFO, "action = %ld", action);
switch (action) {
case WRENCHBOARD_FAMILY_LIST:
return WrenchFamilyList(in, out);
break;
case WRENCHBOARD_FAMILY_WALLET:
return WrenchFamilyWallet(in, out);
break;
case WRENCHBOARD_FAMILY_TRANSFERSTART:
return WrenchFamilyTransferStart(in, out);
break;
case WRENCHBOARD_FAMILY_TRANSFER:
return WrenchFamilyTransfer(in, out);
break;
case WRENCHBOARD_FAMILY_SAMPLETASKS:
return WrenchSampleTasks(in, out);
break;
case WRENCHBOARD_FAMILY_SGGESTSTATUS:
logfmt(logINFO, "ENTER CALL long WRENCHBOARD_FAMILY_SGGESTTASKS");
return WrenchSuggestTaskStatus(in, out);
break;
case WRENCHBOARD_FAMILY_ADD:
return WrenchFamilyAdd(in, out);
break;
case WRENCHBOARD_FAMILY_UPDATE:
return WrenchFamilyUpdate(in, out);
break;
case WRENCHBOARD_FAMILY_MANAGE:
return WrenchFamilyManage(in, out);
break;
case WRENCHBOARD_FAMILY_SGGESTTASKS:
logfmt(logINFO, "ENTER CALL long WRENCHBOARD_FAMILY_SGGESTTASKS");
return WrenchSuggestTasks(in, out);
break;
case WRENCHBOARD_FAMILY_SGGESTLIST:
logfmt(logINFO, "ENTER CALL long WRENCHBOARD_FAMILY_SGGESTLIST");
return WrenchSuggestList(in, out);
break;
//long WrenchSuggestWaitingList(CVars in, CVars &out)
case WRENCHBOARD_FAMILY_SGGESTWAITING:
logfmt(logINFO, "ENTER CALL long WRENCHBOARD_FAMILY_SGGESTWAITING");
return WrenchSuggestWaitingList(in, out); // this now the parent
break;
}
return 0;
}
long WrenchSuggestWaitingList(CVars in, CVars &out){ // this is the parent now
logfmt(logINFO, "ENTER CALL long WrenchSuggestWaitingList");
char vname[30];
long ret = PHP_API_BAD_PARAM;
const PGresult *res;
try{
long member_id = REQ_LONG(in, "member_id", 1, -1);
long offset = REQ_LONG(in, "offset", 1, -1);
long limit = REQ_LONG(in, "limit", 1, -1);
out["total_record"] = "0";
// res = pgsql_query("SELECT id FROM family_task_suggestion WHERE status=1 ");
// out["total_record"] = pgsql_num_rows(res);
res = pgsql_query("SELECT sg.*,mf.firstname,to_char(sg.created, 'Day Mon dd, yyyy HH:MI AM') AS formarted_added "
" FROM members_family_suggesttask sg "
" LEFT JOIN members_family mf ON mf.uid::text = sg.family_uid "
" WHERE sg.family_uid::text IN (SELECT uid::text FROM members_family "
" WHERE member_id = %lu ) "
" AND sg.status IN ( 1,2,3,4,5) "
" ORDER BY sg.created DESC LIMIT %lu OFFSET %lu", member_id, limit, offset);
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), "uid_%05d", i);
out[vname] = rec["uid"];
snprintf(vname, sizeof (vname), "family_uid_%05d", i);
out[vname] = rec["family_uid"];
snprintf(vname, sizeof (vname), "title_%05d", i);
out[vname] = rec["title"];
snprintf(vname, sizeof (vname), "description_%05d", i);
out[vname] = rec["description"];
snprintf(vname, sizeof (vname), "added_%05d", i);
out[vname] = rec["formarted_added"];
snprintf(vname, sizeof (vname), "status_%05d", i);
out[vname] = rec["status"];
snprintf(vname, sizeof (vname), "banner_%05d", i);
out[vname] = rec["banner"];
snprintf(vname, sizeof (vname), "firstname_%05d", i);
out[vname] = rec["firstname"];
}
}
ret = PHP_API_OK;
out["status"] = "OK";
} catch (bad_parameter) {
logfmt(logINFO, "ERROR CALL long WrenchSuggestWaitingList");
}
logfmt(logINFO, "WrenchSuggestList()");
return ret;
}
long WrenchSuggestList(CVars in, CVars &out){
logfmt(logINFO, "ENTER CALL long WrenchSuggestList");
char vname[30];
long ret = PHP_API_BAD_PARAM;
const PGresult *res;
try{
long member_id = REQ_LONG(in, "member_id", 1, -1);
long offset = REQ_LONG(in, "offset", 1, -1);
long limit = REQ_LONG(in, "limit", 1, -1);
out["total_record"] = "0";
// res = pgsql_query("SELECT id FROM family_task_suggestion WHERE status=1 ");
// out["total_record"] = pgsql_num_rows(res);
//ALTER TABLE members_family_suggesttask ADD remind timestamp;
res = pgsql_query(" SELECT * FROM members_family_suggesttask WHERE member_id = %lu AND status IN ( 1,2,3,4,5) "
" ORDER BY created DESC LIMIT %lu OFFSET %lu", member_id, limit, offset);
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), "uid_%05d", i);
out[vname] = rec["uid"];
snprintf(vname, sizeof (vname), "title_%05d", i);
out[vname] = rec["title"];
snprintf(vname, sizeof (vname), "description_%05d", i);
out[vname] = rec["description"];
snprintf(vname, sizeof (vname), "added_%05d", i);
out[vname] = rec["created"];
snprintf(vname, sizeof (vname), "status_%05d", i);
out[vname] = rec["status"];
snprintf(vname, sizeof (vname), "banner_%05d", i);
out[vname] = rec["banner"];
snprintf(vname, sizeof (vname), "remind_%05d", i);
out[vname] = rec["remind"];
}
}
ret = PHP_API_OK;
out["status"] = "OK";
} catch (bad_parameter) {
logfmt(logINFO, "ERROR CALL long WrenchSuggestList");
}
logfmt(logINFO, "WrenchSuggestList()");
return ret;
}
long WrenchSuggestTaskStatus(CVars in, CVars &out){
long ret = PHP_API_BAD_PARAM;
// const PGresult *res;
try{
long member_id = REQ_LONG(in, "member_id", 1, -1);
REQ_STRING(in, "uid", 3, 150, "(.*)");
REQ_STRING(in, "suggest_uid", 3, 150, "(.*)");
long suggest_action = REQ_LONG(in, "suggest_action", 1, -1);
out["suggested_task_id"] ="0";// we will set if all okay
const PGresult *res = pgsql_query("SELECT m.*,mf.uid AS family_uid FROM members m "
" LEFT JOIN members_family mf ON mf.family_member_id = m.id "
" WHERE m.id=%lu AND m.uid='%s'", member_id, in["uid"].c_str());
if (res != NULL && pgsql_num_rows(res) > 0) {
map<const char*, const char*>f = pgsql_fetch_assoc(res, 0);
CVars rec;
map_to_cvars(f, rec);
ret = PHP_API_OK;
out["status"] = "ACCOUNT FOUND";
//out = rec;
if (rec["family_uid"] != ""){ // we are sure you are a family now
// NOW LET US FIND THIS TASK
logfmt(logINFO, " CALL long WrenchSuggestTaskStatus- NOW LET US FIND THIS TASK");
const PGresult *res0 = pgsql_query("SELECT id AS suggest_id,* FROM members_family_suggesttask "
" WHERE member_id = %lu AND uid='%s' AND status IN (1,2)", member_id, in["suggest_uid"].c_str());
if (res0 != NULL && pgsql_num_rows(res0) > 0) {
map<const char*, const char*>f = pgsql_fetch_assoc(res0, 0);
CVars rec2;
map_to_cvars(f, rec2);
if (suggest_action == 555 ){
pgsql_exec("UPDATE members_family_suggesttask SET status=0,updated=now() "
" WHERE id=%lu AND uid='%s'", rec2["suggest_id"].Long(),in["suggest_uid"].c_str() );
out["status"] = "OK";
out["status_msg"] = "family_suggest_deleted";
ret = PHP_API_OK;
}
if (suggest_action == 222 ){
pgsql_exec("UPDATE members_family_suggesttask SET remind=now(),updated=now() "
" WHERE id=%lu AND uid='%s'", rec2["suggest_id"].Long(), in["suggest_uid"].c_str() );
family_email(WRENCHBOARD_FAMILY_SGGESTTASKS, rec2, rec2);
out["status"] = "OK";
out["status_msg"] = "family_suggest_reminder_sent";
ret = PHP_API_OK;
}
}
}
}
} catch (bad_parameter) {
logfmt(logINFO, "ERROR CALL long WrenchSuggestTaskStatus");
}
logfmt(logINFO, "WrenchSuggestTaskStatus()");
return ret;
}
long WrenchSuggestTasks(CVars in, CVars &out){
long ret = PHP_API_BAD_PARAM;
// const PGresult *res;
try{
long member_id = REQ_LONG(in, "member_id", 1, -1);
REQ_STRING(in, "uid", 3, 150, "(.*)");
REQ_STRING(in, "title", 3, 150, "(.*)");
REQ_STRING(in, "description", 3, 299, "(.*)");
REQ_STRING(in, "banner", 3, 25, "(.*)");
out["suggested_task_id"] ="0";// we will set if all okay
const PGresult *res = pgsql_query("SELECT m.*,mf.uid AS family_uid FROM members m "
" LEFT JOIN members_family mf ON mf.family_member_id = m.id "
" WHERE m.id=%lu AND m.uid='%s'", member_id, in["uid"].c_str());
if (res != NULL && pgsql_num_rows(res) > 0) {
map<const char*, const char*>f = pgsql_fetch_assoc(res, 0);
CVars rec;
map_to_cvars(f, rec);
ret = PHP_API_OK;
out["status"] = "ACCOUNT FOUND";
//out = rec;
if (rec["family_uid"] != ""){ // we are sure you are a family now
CVars xx;
xx["member_id"] = member_id;
xx["member_id"].set_valid(true);
xx["title"] = in["title"];
xx["title"].set_valid(true);
xx["description"] = in["description"];
xx["description"].set_valid(true);
xx["family_uid"] = rec["family_uid"];
xx["family_uid"].set_valid(true);
xx["banner"] = in["banner"];
xx["banner"].set_valid(true);
out["suggested_task_id"] = insert_db_record(DBS_VALID, "members_family_suggesttask", "members_family_suggesttask_id_seq", xx);
if(out["suggested_task_id"].Long() > 0 ){
load_db_record( out, "SELECT id AS suggest_id,* FROM members_family_suggesttask WHERE id = %lu ", out["suggested_task_id"].Long());
family_email(WRENCHBOARD_FAMILY_SGGESTTASKS, out, out); //
}
ret = PHP_API_OK;
out["status"] = "OK";
}
}
} catch (bad_parameter) {
logfmt(logINFO, "ERROR CALL long WrenchSuggestTasks");
}
logfmt(logINFO, "WrenchSuggestTasks()");
return ret;
}
long WrenchSampleTasks(CVars in, CVars &out){
logfmt(logINFO, "ENTER CALL long WrenchSampleTasks");
char vname[30];
long ret = PHP_API_BAD_PARAM;
const PGresult *res;
try{
long member_id = REQ_LONG(in, "member_id", 1, -1);
long offset = REQ_LONG(in, "offset", 1, -1);
long limit = REQ_LONG(in, "limit", 1, -1);
out["total_record"] = "0";
// res = pgsql_query("SELECT id FROM family_task_suggestion WHERE status=1 ");
// out["total_record"] = pgsql_num_rows(res);
res = pgsql_query(" SELECT * FROM family_task_suggestion WHERE status = 1 "
" ORDER BY title DESC LIMIT %lu OFFSET %lu", limit, offset);
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), "uid_%05d", i);
out[vname] = rec["uid"];
snprintf(vname, sizeof (vname), "title_%05d", i);
out[vname] = rec["title"];
snprintf(vname, sizeof (vname), "description_%05d", i);
out[vname] = rec["description"];
snprintf(vname, sizeof (vname), "added_%05d", i);
out[vname] = rec["added"];
snprintf(vname, sizeof (vname), "age_%05d", i);
out[vname] = rec["age"];
snprintf(vname, sizeof (vname), "banner_%05d", i);
out[vname] = rec["banner"];
}
}
ret = PHP_API_OK;
out["status"] = "OK";
} catch (bad_parameter) {
logfmt(logINFO, "ERROR CALL long WrenchSampleTasks");
}
logfmt(logINFO, "WrenchSampleTasks()");
return ret;
}
long WrenchFamilyTransfer(CVars in, CVars &out){
logfmt(logINFO, "ENTER CALL long WrenchFamilyTransfer");
char vname[30];
long ret = PHP_API_BAD_PARAM;
long family_member_id = 0;
const PGresult *res0;
int err_count = 0;
try {
/*
member_id' => int 1
'sessionid' => string '64C3E325C554381B055233298A267198A1F19251E2DBD04634B3E6A58847DC0B' (length=64)
'uid' => string '3119b744-42ad-4834-bb83-b737588754ca' (length=36)
'family_uid' => string '1f385837-b5e6-420e-a17a-488c4b8ef015' (length=36)
'wallet_uid' => string 'aa6e6488-2e71-4f83-b265-27c3c4339f73' (length=36)
'origing_wallet_uid' => string 'cc0f8743-3f18-4214-ba4b-781e5dda9cb8' (length=36)
'currency' => string 'NAIRA' (length=5)
'amount' => int 100500
'family_transfer_mode' => int 100
*/
// }
long member_id = REQ_LONG(in, "member_id", 1, -1);
long amount = REQ_LONG(in, "amount", 1, -1);
REQ_STRING(in, "family_uid", 2, 50, "(.*)");
REQ_STRING(in, "uid", 2, 50, "(.*)");
REQ_STRING(in, "wallet_uid", 2, 50, "(.*)");
REQ_STRING(in, "origing_wallet_uid", 2, 50, "(.*)");
REQ_STRING(in, "sessionid", 2, 149, "(.*)");
REQ_STRING(in, "currency", 2, 20, "(.*)");
REQ_STRING(in, "description", 2, 100, "(.*)");
logfmt(logINFO, "WrenchFamilyWallet() Verify Session ");
CVars rec0;
if ( VerifySession(in, out) != PHP_API_OK ){
return ret;
}
res0 = pgsql_query("SELECT family_member_id FROM members_family WHERE member_id = %lu AND uid='%s' ", in["member_id"].Long(), in["family_uid"].c_str());
if (res0 != NULL && pgsql_num_rows(res0) > 0) {
map<const char*, const char*>f = pgsql_fetch_assoc(res0, 0);
map_to_cvars(f, rec0);
family_member_id = rec0["family_member_id"].Long();
}
else{
out["status"] = "Family not found";
return ret;
}
out["total_record"] = "0";
const PGresult *res;
res = pgsql_query("SELECT w.amount AS current_balance, w.currency, w.uid AS recipient_wallet_uid "
"FROM members_wallet w LEFT JOIN currency c ON c.code=w.currency "
"WHERE w.member_id = %lu AND w.uid='%s' ORDER BY c.lorder DESC", rec0["family_member_id"].Long(), in["wallet_uid"].c_str());
if (res != NULL && pgsql_num_rows(res) > 0) {
out["total_record"] = pgsql_num_rows(res);
map<const char*, const char*>f = pgsql_fetch_assoc(res, 0);
CVars rec;
map_to_cvars(f, rec);
out = rec;
// lets get the parent wallet too
if( load_db_record(out,"SELECT w.amount AS origing_current_balance,w.uid AS origing_wallet_uid,"
" w.transfer_limit AS origing_transfer_limit, w.currency as origing_currency "
" FROM members_wallet w "
" WHERE w.member_id = %lu AND w.currency='%s' AND w.uid='%s'", in["member_id"].Long(), out["currency"].c_str(), in["origing_wallet_uid"].c_str()) >0 ){
if (in["amount"].Long() > out["origing_transfer_limit"].Long() ){
err_count++;
out["error_limit"] = "amount_greater_than_limit";
}
if (in["amount"].Long() <= 0 ){
err_count++;
out["error_balance"] = "amount_inavlid";
}
if (in["amount"].Long() > out["origing_current_balance"].Long() ){
err_count++;
out["error_balance"] = "amount_greater_than_balance";
}
if (err_count> 0){
out["status"] = "Send Error";
return ret;
}
CVars inx;
inx["member_id"] = in["member_id"]; inx["member_id"].set_valid( true );
inx["recipient"] = rec0["family_member_id"]; inx["recipient"].set_valid( true );
inx["uid"] = in["uid"]; inx["uid"].set_valid( true );
inx["currency"] = in["currency"]; inx["currency"].set_valid( true );
inx["origing_wallet"] = in["origing_wallet_uid"]; inx["origing_wallet"].set_valid( true );
inx["target_wallet"] = out["recipient_wallet_uid"]; inx["target_wallet"].set_valid( true );
inx["amount"] = in["amount"]; inx["amount"].set_valid( true );
inx["description"] = in["description"]; inx["description"].set_valid( true );
long family_transfer_id = insert_db_record(DBS_VALID, "family_transfer", "family_transfer_id_seq", inx);
if ( family_transfer_id > 0 ){
CVars trx;
if ( load_db_record(trx, "SELECT * FROM family_transfer WHERE id =%lu",family_transfer_id) > 0 ){
return WrenchFamilyPayment( trx, out );
out["status"] = "OK";
out["exchange_rate"] ="1";
ret = PHP_API_OK;
}
else{
out["status"] = "System Error 02";
return ret;
}
}
else
{
out["status"] = "System Error 01";
return ret;
}
/*
CREATE TABLE family_transfer (
id SERIAL,
uid uuid DEFAULT uuid_generate_v4(),
member_id INT REFERENCES members(id) NOT NULL,
recipient INT REFERENCES members(id) NOT NULL,
origing_wallet VARCHAR(150) NOT NULL,
target_wallet VARCHAR(150) NOT NULL,
amount INT Default 0,
currency VARCHAR(5) REFERENCES currency(code),
description VARCHAR(150),
status INT DEFAULT 1,
flags INT DEFAULT 0,
added timestamp without time zone DEFAULT now(),
updated timestamp without time zone DEFAULT now()
);
ALTER TABLE ONLY family_transfer
ADD CONSTRAINT family_transfer_id_key UNIQUE (id);
*/
}
else{
out["status"] = "Originating wallet not found";
}
}
} catch (bad_parameter) {
logfmt(logINFO, "ERROR CALL long WrenchFamilyTransfer(CVars in, CVars &out)");
}
logfmt(logINFO, "EXIT CALL long WrenchFamilyTransfer");
return 0;
}
long WrenchFamilyTransferStart(CVars in, CVars &out){
logfmt(logINFO, "ENTER CALL long WrenchFamilyWallet");
char vname[30];
long ret = PHP_API_BAD_PARAM;
long family_member_id = 0;
const PGresult *res0;
try {
long member_id = REQ_LONG(in, "member_id", 1, -1);
REQ_STRING(in, "family_uid", 2, 50, "(.*)");
REQ_STRING(in, "uid", 2, 50, "(.*)");
REQ_STRING(in, "wallet_uid", 2, 50, "(.*)");
REQ_STRING(in, "sessionid", 2, 149, "(.*)");
logfmt(logINFO, "WrenchFamilyWallet() Verify Session ");
CVars rec0;
if ( VerifySession(in, out) != PHP_API_OK ){
return 0;
}
res0 = pgsql_query("SELECT family_member_id FROM members_family WHERE member_id = %lu AND uid='%s' ", in["member_id"].Long(), in["family_uid"].c_str());
if (res0 != NULL && pgsql_num_rows(res0) > 0) {
map<const char*, const char*>f = pgsql_fetch_assoc(res0, 0);
map_to_cvars(f, rec0);
family_member_id = rec0["family_member_id"].Long();
}
else{
return 0;
}
out["total_record"] = "0";
const PGresult *res;
res = pgsql_query("SELECT w.amount AS current_balance, w.currency, w.uid AS recipient_wallet_uid "
"FROM members_wallet w LEFT JOIN currency c ON c.code=w.currency "
"WHERE w.member_id = %lu AND w.uid='%s' ORDER BY c.lorder DESC", rec0["family_member_id"].Long(), in["wallet_uid"].c_str());
if (res != NULL && pgsql_num_rows(res) > 0) {
out["total_record"] = pgsql_num_rows(res);
map<const char*, const char*>f = pgsql_fetch_assoc(res, 0);
CVars rec;
map_to_cvars(f, rec);
out = rec;
// lets get the parent wallet too
if( load_db_record(out,"SELECT w.amount AS origing_current_balance,w.uid AS origing_wallet_uid,"
" w.transfer_limit AS origing_transfer_limit, w.currency as origing_currency "
" FROM members_wallet w "
" WHERE w.member_id = %lu AND w.currency='%s'", in["member_id"].Long(), out["currency"].c_str()) ){
ret = PHP_API_OK;
out["status"] = "OK";
out["exchange_rate"] ="1";
}
else{
out["status"] = "Originating wallet not found";
}
}
ret = PHP_API_OK;
out["status"] = "OK";
} catch (bad_parameter) {
logfmt(logINFO, "ERROR CALL long WrenchFamilyTransferStart(CVars in, CVars &out)");
}
logfmt(logINFO, "EXIT CALL long WrenchFamilyTransferStart");
return 0;
}
long WrenchFamilyWallet(CVars in, CVars &out){
logfmt(logINFO, "ENTER CALL long WrenchFamilyWallet");
char vname[30];
long ret = PHP_API_BAD_PARAM;
long family_member_id = 0;
const PGresult *res0;
try {
long member_id = REQ_LONG(in, "member_id", 1, -1);
REQ_STRING(in, "family_uid", 2, 50, "(.*)");
REQ_STRING(in, "uid", 2, 50, "(.*)");
REQ_STRING(in, "sessionid", 2, 149, "(.*)");
logfmt(logINFO, "WrenchFamilyWallet() Verify Session ");
CVars rec0;
if ( VerifySession(in, out) != PHP_API_OK ){
return 0;
}
res0 = pgsql_query("SELECT family_member_id FROM members_family WHERE member_id = %lu AND uid='%s' ", in["member_id"].Long(), in["family_uid"].c_str());
if (res0 != NULL && pgsql_num_rows(res0) > 0) {
map<const char*, const char*>f = pgsql_fetch_assoc(res0, 0);
map_to_cvars(f, rec0);
family_member_id = rec0["family_member_id"].Long();
}
else{
return 0;
}
out["total_record"] = "0";
const PGresult *res;
res = pgsql_query("SELECT w.amount,c.*,w.amount AS current_balance,c.country,w.transfer_limit,w.uid AS wallet_uid "
"FROM members_wallet w LEFT JOIN currency c ON c.code=w.currency "
"WHERE w.member_id = %lu ORDER BY c.lorder DESC", rec0["family_member_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), "amount_%05d", i);
out[vname] = rec["amount"];
snprintf(vname, sizeof (vname), "currency_%05d", i);
out[vname] = rec["currency"];
// amount | id | code | description | symbol | action_type | lorder | current_balance
snprintf(vname, sizeof (vname), "description_%05d", i);
out[vname] = rec["description"];
snprintf(vname, sizeof (vname), "symbol_%05d", i);
out[vname] = rec["symbol"];
snprintf(vname, sizeof (vname), "action_type_%05d", i);
out[vname] = rec["action_type"];
snprintf(vname, sizeof (vname), "code_%05d", i);
out[vname] = rec["code"];
snprintf(vname, sizeof (vname), "country_%05d", i);
out[vname] = rec["country"];
snprintf(vname, sizeof (vname), "transfer_limit_%05d", i);
out[vname] = rec["transfer_limit"];
snprintf(vname, sizeof (vname), "wallet_uid_%05d", i);
out[vname] = rec["wallet_uid"];
}
}
ret = PHP_API_OK;
out["status"] = "OK";
} catch (bad_parameter) {
logfmt(logINFO, "ERROR CALL long WrenchFamilyWallet(CVars in, CVars &out)");
}
logfmt(logINFO, "EXIT CALL long WrenchFamilyWallet");
return 0;
}
//,to_char(last_login, 'Day Mon dd, yyyy HH:MI AM')
long WrenchFamilyList(CVars in, CVars &out){
logfmt(logINFO, "ENTER CALL long WrenchFamilyList");
char vname[30];
long ret = PHP_API_BAD_PARAM;
const PGresult *res;
try{
long member_id = REQ_LONG(in, "member_id", 1, -1);
long offset = REQ_LONG(in, "offset", 1, -1);
long limit = REQ_LONG(in, "limit", 1, -1);
out["total_record"] = "0";
res = pgsql_query("SELECT id FROM members_family WHERE member_id = %lu AND status=1 ", in["member_id"].Long());
out["total_record"] = pgsql_num_rows(res);
res = pgsql_query(" SELECT *,to_char(last_login, 'Day Mon dd, yyyy HH:MI AM') AS last_login_formatted FROM members_family WHERE member_id = %lu AND status=1 "
" ORDER BY id DESC LIMIT %lu OFFSET %lu", in["member_id"].Long(), limit, offset);
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), "uid_%05d", i);
out[vname] = rec["uid"];
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), "added_%05d", i);
out[vname] = rec["added"];
snprintf(vname, sizeof (vname), "age_%05d", i);
out[vname] = rec["age"];
snprintf(vname, sizeof (vname), "last_login_%05d", i);
out[vname] = rec["last_login_formatted"];
snprintf(vname, sizeof (vname), "task_count_%05d", i);
out[vname] = rec["task_count"];
snprintf(vname, sizeof (vname), "year_%05d", i);
out[vname] = rec["year"];
snprintf(vname, sizeof (vname), "month_%05d", i);
out[vname] = rec["month"];
snprintf(vname, sizeof (vname), "enable_traking_%05d", i);
out[vname] = rec["enable_traking"];
}
}
ret = PHP_API_OK;
out["status"] = "OK";
} catch (bad_parameter) {
logfmt(logINFO, "ERROR CALL long WrenchFamilyList");
}
logfmt(logINFO, "WrenchFamilyList()");
return ret;
}
long WrenchFamilyAdd(CVars in, CVars &out){
logfmt(logINFO, "WrenchFamilyAdd()");
long family_id = 0;
try {
REQ_LONG(in, "member_id", 1, -1);
//REQ_LONG(in, "age", 1, -1);
REQ_LONG(in, "year", 1, -1);
REQ_LONG(in, "month", 1, -1);
REQ_STRING(in, "firstname", 2, 34, "(.*)");
REQ_STRING(in, "lastname", 2, 34, "(.*)");
CVars x;
x["member_id"] = in["member_id"];
x["member_id"].set_valid(true);
x["age"] = "0";
x["age"].set_valid(true);
x["firstname"] = in["firstname"];
x["firstname"].set_valid(true);
x["lastname"] = in["lastname"];
x["lastname"].set_valid(true);
x["status"] = "1";
x["status"].set_valid(true);
x["year"] = in["year"];
x["year"].set_valid(true);
x["month"] = in["month"];
x["month"].set_valid(true);
family_id = insert_db_record(DBS_VALID, "members_family", "members_family_id_seq", x);
if (family_id > 0) {
load_db_record(out, "SELECT * FROM members_family WHERE id =%lu",family_id);
// send notice here
}
out["status"] = "OK";
} catch (bad_parameter) {
logfmt(logINFO, "ERROR CALL long WrenchFamilyAdd(CVars in, CVars &out)");
}
logfmt(logINFO, "WrenchFamilyAdd()");
return family_id;
}
long WrenchFamilyUpdate(CVars in, CVars &out){
long ret = PHP_API_BAD_PARAM;
logfmt(logINFO, "WrenchFamilyUpdate()");
long family_id = 0;
try {
long member_id = REQ_LONG(in, "member_id", 1, -1);
REQ_STRING(in, "firstname", 2, 34, "(.*)");
REQ_STRING(in, "lastname", 2, 34, "(.*)");
REQ_STRING(in, "family_uid", 2, 50, "(.*)");
REQ_LONG(in, "year", 1, -1);
REQ_LONG(in, "month", 1, -1);
REQ_LONG(in, "enable_traking", 1, -1);
CVars x;
x["firstname"] = in["firstname"];
x["firstname"].set_valid(true);
x["lastname"] = in["lastname"];
x["lastname"].set_valid(true);
x["year"] = in["year"];
x["year"].set_valid(true);
x["month"] = in["month"];
x["month"].set_valid(true);
x["enable_traking"] = in["enable_traking"];
x["enable_traking"].set_valid(true);
const PGresult *res = pgsql_query(" SELECT id AS family_id FROM members_family "
" WHERE member_id=%lu AND uid='%s' ", member_id,in["family_uid"].c_str());
if (res != NULL && pgsql_num_rows(res) > 0) {
map<const char*, const char*>f = pgsql_fetch_assoc(res, 0);
CVars rec;
map_to_cvars(f, rec);
update_db_record(DBS_VALID, "members_family", x, rec["family_id"].Long());
ret = PHP_API_OK;
}
out["status"] = "OK";
} catch (bad_parameter) {
logfmt(logINFO, "ERROR CALL long WrenchFamilyUpdate(CVars in, CVars &out)");
}
logfmt(logINFO, "WrenchFamilyUpdate()");
return ret;
}
long WrenchFamilyInitializeAccount(CVars in, CVars &out);
long WrenchFamilyManage(CVars in, CVars &out){
/*
wrenchboard=> select * from members_family;
id | member_id | firstname | lastname | age | active | status | added | updated
----+-----------+-----------+----------+-----+--------+--------+-------+---------
(0 rows)
*/
long ret = PHP_API_BAD_PARAM;
logfmt(logINFO, "WrenchFamilyManage()");
long family_id = 0;
try {
long member_id = REQ_LONG(in, "member_id", 1, -1);
REQ_STRING(in, "uid", 2, 45, "(.*)");
REQ_STRING(in, "family_uid", 2, 45, "(.*)");
const PGresult *res = pgsql_query(" SELECT id AS family_id,* FROM members_family "
" WHERE member_id=%lu AND uid='%s' ", member_id,in["family_uid"].c_str());
if (res != NULL && pgsql_num_rows(res) > 0) {
map<const char*, const char*>f = pgsql_fetch_assoc(res, 0);
CVars rec;
map_to_cvars(f, rec);
if( rec["username"]=="" || rec["pin"]==""){
logfmt(logINFO, "WrenchFamilyManage()- NEED TI INITIALIZE USERNAME PIN");
WrenchFamilyInitializeAccount(rec,out);
}
out = rec;
ret = PHP_API_OK;
}
out["status"] = "OK";
} catch (bad_parameter) {
logfmt(logINFO, "ERROR CALL long WrenchFamilyUpdate(CVars in, CVars &out)");
}
logfmt(logINFO, "/WrenchFamilyManage()");
return ret;
}
long WrenchFamilyInitializeAccount(CVars in, CVars &out){
const PGresult *res;
char username[7] = "";
logfmt(logINFO, "WrenchFamilyInitializeAccount()");
try {
SetFamilyUsername(in["family_id"].Long(), username, 6);
} catch (bad_parameter) {
logfmt(logINFO, "ERROR CALL void SetFamilyUsername(CVars in, CVars &out)");
}
/*
int r1;
//srand(time(NULL));
r1 = 1000+(rand()%9000);
pgsql_exec("UPDATE members_family SET pin='%s' WHERE id=%lu", r1, in["family_id"].Long() );
*/
pgsql_exec("UPDATE members_family SET pin='1234' WHERE id=%lu", in["family_id"].Long() );
load_db_record(out, "SELECT * FROM members_family WHERE id = %lu", in["family_id"].Long());
return 0;
}
/*
#define WRENCHBOARD_FAMILY_LIST 22010
#define WRENCHBOARD_FAMILY_ADD 22015
#define WRENCHBOARD_FAMILY_UPDATE 22020
#define WRENCHBOARD_FAMILY_MANAGE 22025
*/