2410 lines
98 KiB
C++
2410 lines
98 KiB
C++
// Account management toosl
|
|
#include "clog.h"
|
|
#include "cgi.h"
|
|
#include "input.h"
|
|
#include "wrenchboard_api.h"
|
|
#include "jobs.h"
|
|
#include "email.h"
|
|
#include "payments.h"
|
|
#include "safestring.h"
|
|
#include <string>
|
|
#include "common_tool.h"
|
|
#include "pgsql.h"
|
|
#include "pgsql_wrapper.h"
|
|
#include "cfg.h"
|
|
#include <curl/curl.h>
|
|
#include "common_tool.h"
|
|
#include "reco_engine.h"
|
|
#include "jobs_manager.h"
|
|
|
|
|
|
long jobs_calls(CVars in, CVars &out) {
|
|
logfmt(logINFO, "jobs_calls()");
|
|
out["result"] = "YES I GET TO BACK END";
|
|
long action = REQ_LONG(in, "action", 0, -1);
|
|
long job_mode = 0;
|
|
logfmt(logINFO, "jobs_calls() action=%lu",action);
|
|
switch (action) {
|
|
case WRENCHBOARD_JOB_POSTAGREE:
|
|
return WrenchJobPostAgree(in, out);
|
|
break;
|
|
case WRENCHBOARD_JOB_LISTJOBS:
|
|
return WrenchJobManagerList(in, out);
|
|
break;
|
|
case WRENCHBOARD_JOB_JOBFILES:
|
|
logfmt(logINFO, "jobs_calls() ~~WRENCHBOARD_JOB_JOBFILES~~ action=%lu",action);
|
|
return WrenchJobListFiles(in, out);
|
|
break;
|
|
case WRENCHBOARD_JOB_OFFERS:
|
|
return WrenchJobManagerOffers(in, out);
|
|
break;
|
|
case WRENCHBOARD_JOB_ACTIVE: //
|
|
return WrenchJobManagerActiveTasksList(in, out);
|
|
break;
|
|
|
|
case WRENCHBOARD_JOB_USERACTIVE:
|
|
return WrenchUsersActiveTasksList( in, out);
|
|
break;
|
|
case WRENCHBOARD_JOB_REPORT:
|
|
return WrenchUsersTasksReportList( in, out);
|
|
break;
|
|
case WRENCHBOARD_JOB_CREATEJOB:
|
|
job_mode = REQ_LONG(in, "job_mode", 1, -1);
|
|
switch(job_mode){
|
|
case ADD_JOB:
|
|
return WrenchCreateJobs(in, out);
|
|
break;
|
|
case UPDATE_JOB:
|
|
return WrenchEditJobs(in, out);
|
|
break;
|
|
}
|
|
break;
|
|
case WRENCHBOARD_JOB_DELETEJOB:
|
|
return WrenchDeleteJobs(in, out);
|
|
break;
|
|
case WRENCHBOARD_JOB_GROUP_MEMBER:
|
|
return WrenchAddJobsGroupMember(in, out);
|
|
break;
|
|
|
|
case WRENCHBOARD_JOB_CREATE_GROUP:
|
|
return WrenchCreateJobsGroup(in, out);
|
|
break;
|
|
|
|
case WRENCHBOARD_JOB_DELETE_GROUP:
|
|
return WrenchDeleteJobsGroup(in, out);
|
|
break;
|
|
|
|
case WRENCHBOARD_JOB_DELETE_GROUPMEMBER:
|
|
return WrenchDeleteJobsGroupMember(in, out);
|
|
break;
|
|
|
|
case WRENCHBOARD_JOB_OFFER_SYSTEM:
|
|
return WrenchJobOfferSystems(in, out);
|
|
break;
|
|
|
|
case WRENCHBOARD_JOB_OFFER_FAMILY:
|
|
|
|
break;
|
|
|
|
case WRENCHBOARD_JOB_OFFER_INDVI:
|
|
return WrenchSendJobsOfferIndividual(in, out);
|
|
break;
|
|
|
|
case WRENCHBOARD_JOB_OFFER_GROUP:
|
|
return WrenchSendJobsOfferGroup(in, out);
|
|
break;
|
|
|
|
case WRENCHBOARD_JOB_OFFER_PUBLIC:
|
|
return WrenchSendJobsOfferPublic(in, out);
|
|
break;
|
|
|
|
case WRENCHBOARD_JOB_OFFER_CONCLUDE:
|
|
return WrenchConcludeJobsOffer(in, out);
|
|
break;
|
|
|
|
case WRENCHBOARD_JOB_OFFER_INTLIST:
|
|
return WrenchJobsOfferInterestList(in, out); // people looking at your job
|
|
break;
|
|
|
|
case WRENCHBOARD_JOB_WAITING_INT: // waiting interest
|
|
return WrenchUserJobsInterestList(in, out); // me looking at your job
|
|
break;
|
|
|
|
case WRENCHBOARD_JOB_SEND_INTEREST:
|
|
return WrenchJobsOfferInterest(in, out);
|
|
break;
|
|
|
|
case WRENCHBOARD_JOB_STATS_INTEREST:
|
|
return WrenchJobsInterestStats(in, out);
|
|
break;
|
|
|
|
case WRENCHBOARD_JOB_PROC_INTEREST:
|
|
return WrenchJobsProcessInterest(in, out);
|
|
break;
|
|
|
|
case WRENCHBOARD_JOB_SEND_QUESTION:
|
|
return WrenchJobsQuestion(in, out);
|
|
break;
|
|
|
|
case WRENCHBOARD_JOB_MRKTINT_QUEST:
|
|
return WrenchMarketInterestQuestion(in, out);
|
|
break;
|
|
|
|
case WRENCHBOARD_JOB_INT_QUESTLST:
|
|
return WrenchMarketInterestQuestionList(in, out);
|
|
break;
|
|
|
|
case WRENCHBOARD_JOB_REPLY_QUESTION:
|
|
return WrenchReplyMessage(in, out);
|
|
break;
|
|
|
|
case WRENCHBOARD_JOB_EXTEND_EXPIRE:
|
|
return WrenchJobPostExtendTime(in, out);
|
|
break;
|
|
|
|
case WRENCHBOARD_JOB_RESEND_MESSAGE:
|
|
return WrenchJobPostNotifyOffer(in, out);
|
|
break;
|
|
|
|
case WRENCHBOARD_JOB_CANCEL_OFFER:
|
|
return WrenchJobPostCancelOffer(in, out);
|
|
break;
|
|
|
|
case WRENCHBOARD_JOB_JOBGROUPS: // 13045
|
|
return WrenchJobsGroupList(in, out);
|
|
break;
|
|
|
|
case WRENCHBOARD_JOB_JOBGROUPADD:
|
|
|
|
break;
|
|
|
|
}
|
|
logfmt(logINFO, "/jobs_calls()");
|
|
return 0;
|
|
}
|
|
|
|
long WrenchJobOfferSystems(CVars in, CVars &out){
|
|
long ret = PHP_API_BAD_PARAM;
|
|
try {
|
|
long assign_mode = REQ_LONG(in, "assign_mode", 1, -1);
|
|
|
|
switch(assign_mode){
|
|
case ASSIGN_MODE_MEDIA_FAMILY:
|
|
logfmt(logINFO, "WrenchJobOfferSystems()->ASSIGN_MODE_MEDIA_FAMILY");
|
|
return WrenchSendMediaOfferFamily(in, out);
|
|
break;
|
|
case ASSIGN_MODE_FAMILY:
|
|
logfmt(logINFO, "WrenchJobOfferSystems()->ASSIGN_MODE_FAMILY");
|
|
return WrenchSendJobsOfferFamily(in, out);
|
|
break;
|
|
case ASSIGN_MODE_CREATEASSIGN:
|
|
logfmt(logINFO, "WrenchJobOfferSystems()->ASSIGN_MODE_CREATEASSIGN");
|
|
return WrenchSendJobsOfferCreateAssign(in, out);
|
|
break;
|
|
case ASSIGN_MODE_INDIVIDUAL:
|
|
logfmt(logINFO, "WrenchJobOfferSystems()->ASSIGN_MODE_INDIVIDUAL");
|
|
return WrenchSendJobsOfferPublic(in, out);
|
|
break;
|
|
case ASSIGN_MODE_EMAIL:
|
|
logfmt(logINFO, "WrenchJobOfferSystems()->ASSIGN_MODE_EMAIL");
|
|
return WrenchSendJobsOfferIndividual(in, out);
|
|
break;
|
|
case ASSIGN_MODE_GROUP:
|
|
logfmt(logINFO, "WrenchJobOfferSystems()->ASSIGN_MODE_GROUP");
|
|
return WrenchSendJobsOfferGroup(in, out);
|
|
break;
|
|
}
|
|
} catch (bad_parameter) {
|
|
out["log_status"] = "error...";
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
long WrenchSendJobsOfferCreateAssign(CVars in, CVars &out){
|
|
logfmt(logINFO, "******* ~~~~ WrenchSendJobsOfferCreateAssign()");
|
|
long ret = PHP_API_BAD_PARAM;
|
|
try {
|
|
CVars xx;
|
|
long member_id = REQ_LONG(in, "member_id", 1, -1);
|
|
// REQ_LONG(in, "job_id", 1, -1);
|
|
// REQ_STRING(in, "job_uid", 1, 59, "(.*)");
|
|
REQ_STRING(in, "family_uid", 1, 59, "(.*)");
|
|
// REQ_STRING(in, "job_description", 1, 5500, "(.*)");
|
|
if ( WrenchCreateJobs(in, xx) == PHP_CREATED_OK ){
|
|
in["job_id"] = xx["job_id"]; xx["job_id"].set_valid( true );
|
|
in["job_uid"] = xx["job_uid"]; xx["job_uid"].set_valid( true );
|
|
in["job_description"] = xx["job_detail"]; xx["job_description"].set_valid( true );
|
|
|
|
// UPDATE THE JOB TO FAMILY MODE - This is a family job
|
|
pgsql_exec("UPDATE members_jobs SET job_mode = 'FAMILY' WHERE id = %lu AND uid = '%s' ",in["job_id"].Long(), in["job_uid"].c_str());
|
|
|
|
ret = WrenchSendJobsOfferFamily(in, out);
|
|
}
|
|
} catch (bad_parameter) {
|
|
out["log_status"] = "error...";
|
|
}
|
|
logfmt(logINFO, "/******* ~~~~ WrenchSendJobsOfferCreateAssign()");
|
|
return ret;
|
|
}
|
|
|
|
long WrenchJobPostExtendTime(CVars in, CVars &out){
|
|
long ret = PHP_API_BAD_PARAM;
|
|
try {
|
|
out["status"] = "Started";
|
|
long member_id = REQ_LONG(in, "member_id", 1, -1);
|
|
long extend_days = REQ_LONG(in, "extend_days", 1, -1);
|
|
REQ_STRING(in, "job_uid", 1, 55, "(.*)"); //offer_code
|
|
REQ_STRING(in, "offer_code", 1, 15, "(.*)"); //offer_code
|
|
|
|
const PGresult *res = pgsql_query("SELECT id AS offer_id FROM members_jobs_offer WHERE offer_code = '%s' AND member_id=%lu AND status =1", in["offer_code"].c_str(),member_id);
|
|
if (res != NULL && pgsql_num_rows(res) > 0) {
|
|
map<const char*, const char*>f = pgsql_fetch_assoc(res, 0);
|
|
if (!f.empty()) {
|
|
CVars rec;
|
|
map_to_cvars(f, rec);
|
|
pgsql_exec("UPDATE members_jobs_offer SET expire = now() + '%lu days()' WHERE offer_code = '%s' AND member_id=%lu AND status =1",extend_days, in["offer_code"].c_str(),member_id);
|
|
out["status"] = "Completed";
|
|
out["status_msg"] = "offer_expiration_data_extended";
|
|
load_db_record(out, "SELECT expire, uid AS job_uid FROM members_jobs_offer WHERE offer_code = '%s' ", in["offer_code"].c_str());
|
|
ret = PHP_UPDATED_OK;
|
|
}
|
|
}
|
|
} catch (bad_parameter) {
|
|
out["log_status"] = "error...";
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
long WrenchJobPostNotifyOffer(CVars in, CVars &out){
|
|
long ret = PHP_API_BAD_PARAM;
|
|
try {
|
|
out["status"] = "Started";
|
|
long member_id = REQ_LONG(in, "member_id", 1, -1);
|
|
long mode = REQ_LONG(in, "mode", 1, -1);
|
|
REQ_STRING(in, "job_uid", 1, 55, "(.*)"); //offer_code
|
|
REQ_STRING(in, "offer_code", 1, 15, "(.*)"); //offer_code
|
|
|
|
const PGresult *res = pgsql_query("SELECT id AS offer_id FROM members_jobs_offer WHERE offer_code = '%s' AND member_id=%lu AND status =1", in["offer_code"].c_str(),member_id);
|
|
if (res != NULL && pgsql_num_rows(res) > 0) {
|
|
map<const char*, const char*>f = pgsql_fetch_assoc(res, 0);
|
|
if (!f.empty()) {
|
|
logfmt(logINFO, "******* ~~~~ WrenchJobPostNotifyOffer()");
|
|
job_email(JOBS_OFFER_SENDTOME_MAIL, in, out); // the email will come from
|
|
out["status"] = "Completed";
|
|
out["status_msg"] = "offer_notification_resent";
|
|
ret = PHP_UPDATED_OK;
|
|
}
|
|
}
|
|
} catch (bad_parameter) {
|
|
out["log_status"] = "error...";
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
long WrenchJobPostCancelOffer(CVars in, CVars &out){
|
|
// case OFFER_CANCEL: // note status 4
|
|
logfmt(logINFO, "WrenchJobPostCancelOffer()");
|
|
long ret = PHP_API_BAD_PARAM;
|
|
try {
|
|
|
|
REQ_LONG(in, "member_id", 1, -1);
|
|
//long offer_result = REQ_LONG(in, "offer_result", 1, -1);
|
|
REQ_STRING(in, "offer_code", 1, 15, "(.*)");
|
|
long job_id = 0;
|
|
long owner_member_id = 0;
|
|
long offer_id = 0;
|
|
|
|
long rc = 0;
|
|
CVars outx;
|
|
// rc = 0 + load_db_record( out, "SELECT * FROM members_jobs_offer WHERE offer_code='%s' AND status = 1", in["offer_code"].c_str() );
|
|
const PGresult *res = pgsql_query("SELECT *,member_id AS owner_member_id, id AS offer_id "
|
|
" FROM members_jobs_offer WHERE offer_code='%s' AND status = 1 AND member_id = %lu", in["offer_code"].c_str(), in["member_id"].Long());
|
|
if (res != NULL && pgsql_num_rows(res) > 0) {
|
|
|
|
// now job is valid
|
|
// good to continue
|
|
map<const char*, const char*>f = pgsql_fetch_assoc(res, 0);
|
|
if (!f.empty()) {
|
|
CVars rec;
|
|
map_to_cvars(f, rec);
|
|
job_id = rec["job_id"];
|
|
offer_id = rec["offer_id"];
|
|
owner_member_id = rec["owner_member_id"];
|
|
}
|
|
|
|
logfmt(logINFO, "WrenchConcludeJobsOffer() rc=OFFER_CANCEL");
|
|
if (load_db_record(out, " SELECT id AS offer_id,*,(CASE WHEN payment_id IS NULL THEN 0 ELSE payment_id END ) AS payment_id_val"
|
|
" FROM members_jobs_offer WHERE offer_code ='%s' AND status = 1", in["offer_code"].c_str())) {
|
|
// valid load of offer needed
|
|
CVars y;
|
|
y["member_id"] = out["member_id"];
|
|
y["member_id"].set_valid(true);
|
|
y["offer_id"] = out["offer_id"];
|
|
y["offer_id"].set_valid(true);
|
|
y["code"] = "OFRFD";
|
|
y["code"].set_valid(true);
|
|
y["dir"] = DIR_SOURCE;
|
|
y["dir"].set_valid(true);
|
|
y["payment_id"] = out["payment_id_val"];
|
|
y["payment_id"].set_valid(true);
|
|
|
|
// if (WrenchRefundoffer(y, out) == PHP_CREATED_OK) {
|
|
pgsql_exec("UPDATE members_jobs_offer SET status = 4 WHERE id = %lu AND offer_code='%s' ", offer_id, in["offer_code"].c_str());
|
|
// REFUND THE MONEY
|
|
ret = PHP_CREATED_OK;
|
|
job_email(JOBS_OFFER_CANCEL_MAIL, y, out); // the email will come from offer table
|
|
// }
|
|
}
|
|
}
|
|
} catch (bad_parameter) {
|
|
out["log_status"] = "Error WrenchJobPostCancelOffer";
|
|
}
|
|
logfmt(logINFO, "/WrenchJobPostCancelOffer()");
|
|
return ret;
|
|
|
|
|
|
|
|
}
|
|
|
|
long WrenchJobPostAgree(CVars in, CVars &out) {
|
|
logfmt(logINFO, "WrenchJobPostAgree()");
|
|
long ret = PHP_API_BAD_PARAM;
|
|
try {
|
|
long member_id = REQ_LONG(in, "member_id", 1, -1);
|
|
REQ_STRING(in, "uid", 1, 500, "(.*)"); //uid
|
|
if (load_db_record(out, "SELECT id AS member_id, * FROM members WHERE id = %lu AND uid='%s' AND post_jobs IS NULL", in["member_id"].Long(), in["uid"].c_str()) ){
|
|
if ( out["member_id"].Long() > 0 )
|
|
{
|
|
pgsql_exec("UPDATE members SET post_jobs = now() WHERE id = %lu AND uid='%s'", member_id, in["uid"].c_str());
|
|
load_db_record(out, "SELECT * FROM members WHERE id = %lu AND uid='%s' AND post_jobs IS NOT NULL", in["member_id"].Long(), in["uid"].c_str());
|
|
out["status"] = "Completed";
|
|
out["advise"] = "Refresh Session Profile";
|
|
ret = PHP_CREATED_OK;
|
|
}
|
|
else{
|
|
load_db_record(out, "SELECT * FROM members WHERE id = %lu AND uid='%s' AND post_jobs IS NOT NULL", in["member_id"].Long(), in["uid"].c_str());
|
|
out["advise"] = "Probably Already Set";
|
|
out["status"] = "Invalid Update";
|
|
}
|
|
}
|
|
|
|
} catch (bad_parameter) {
|
|
out["log_status"] = "Error WrenchJobPostAgree";
|
|
}
|
|
logfmt(logINFO, "/WrenchJobPostAgree()");
|
|
return ret;
|
|
}
|
|
|
|
long WrenchUserJobsInterestList(CVars in, CVars &out) {
|
|
long ret = PHP_API_BAD_PARAM;
|
|
char vname[30];
|
|
out = in;
|
|
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);
|
|
|
|
const PGresult *res = pgsql_query("SELECT mm.id AS client_id, mm.uid AS client_uid,j.uid AS job_uid, "
|
|
" mm.firstname AS client_name, m.offer_code, m.uid AS offer_uid, "
|
|
" mo.member_id, mm.added::date AS client_added, to_char(mo.added, 'Dy Mon dd, yyyy HH:MI AM') AS sent, "
|
|
" j.title,j.description,m.job_id,to_char( m.expire, 'Dy Mon dd, yyyy HH:MI AM') AS expire,j.price AS job_price,mo.uid AS interest_uid, "
|
|
" c.code AS currency_code, c.description AS currency_description,j.country "
|
|
" FROM members_offer_interest mo "
|
|
" LEFT JOIN members_jobs_offer m ON m.id = mo.offer_id "
|
|
" LEFT JOIN members_jobs j ON j.id=m.job_id "
|
|
" LEFT JOIN members mm ON mm.id = mo.member_id "
|
|
" LEFT JOIN currency c ON c.country=j.country "
|
|
" WHERE m.status = 1 AND m.client_id=0 AND mo.status = 1 "
|
|
" AND m.expire IS NOT NULL AND m.expire> now() "
|
|
" AND mo.member_id = %lu AND j.status = 1 "
|
|
" ORDER BY mo.added 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), "interest_uid_%05d", i);
|
|
out[vname] = rec["interest_uid"];
|
|
|
|
snprintf(vname, sizeof (vname), "client_id_%05d", i);
|
|
out[vname] = rec["client_id"];
|
|
|
|
snprintf(vname, sizeof (vname), "client_uid_%05d", i);
|
|
out[vname] = rec["client_uid"];
|
|
|
|
snprintf(vname, sizeof (vname), "client_name_%05d", i);
|
|
out[vname] = rec["client_name"];
|
|
|
|
snprintf(vname, sizeof (vname), "client_added_%05d", i);
|
|
out[vname] = rec["client_added"];
|
|
|
|
snprintf(vname, sizeof (vname), "client_jobs_completed_%05d", i);
|
|
out[vname] = "0";
|
|
|
|
snprintf(vname, sizeof (vname), "client_jobs_active_%05d", i);
|
|
out[vname] = "0";
|
|
|
|
snprintf(vname, sizeof (vname), "client_addedclient_jobs_missed_%05d", i);
|
|
out[vname] = "0";
|
|
|
|
snprintf(vname, sizeof (vname), "client_offers_pending_%05d", i);
|
|
out[vname] = "0";
|
|
|
|
snprintf(vname, sizeof (vname), "client_percent_completion_%05d", i);
|
|
out[vname] = "0";
|
|
|
|
snprintf(vname, sizeof (vname), "client_ratings_%05d", i);
|
|
out[vname] = "0";
|
|
|
|
snprintf(vname, sizeof (vname), "offer_code_%05d", i);
|
|
out[vname] = rec["offer_code"];
|
|
|
|
snprintf(vname, sizeof (vname), "offer_uid_%05d", i);
|
|
out[vname] = rec["offer_uid"];
|
|
|
|
snprintf(vname, sizeof (vname), "sent_%05d", i);
|
|
out[vname] = rec["sent"];
|
|
|
|
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), "job_id_%05d", i);
|
|
out[vname] = rec["job_id"];
|
|
|
|
snprintf(vname, sizeof (vname), "job_uid_%05d", i);
|
|
out[vname] = rec["job_uid"];
|
|
|
|
snprintf(vname, sizeof (vname), "expire_%05d", i);
|
|
out[vname] = rec["expire"];
|
|
|
|
snprintf(vname, sizeof (vname), "price_%05d", i);
|
|
out[vname] = rec["job_price"];
|
|
|
|
snprintf(vname, sizeof (vname), "job_country_%05d", i);
|
|
out[vname] = rec["country"];
|
|
snprintf(vname, sizeof (vname), "currency_%05d", i);
|
|
out[vname] = rec["currency_description"];
|
|
snprintf(vname, sizeof (vname), "currency_code_%05d", i);
|
|
out[vname] = rec["currency_code"];
|
|
}
|
|
|
|
}
|
|
ret = PHP_CREATED_OK;
|
|
|
|
} catch (bad_parameter) {
|
|
out["log_status"] = "Error WrenchJobsOfferInterestList";
|
|
}
|
|
return ret;
|
|
|
|
}
|
|
|
|
long WrenchJobsInterestStats(CVars in, CVars &out) {
|
|
long ret = PHP_API_BAD_PARAM;
|
|
char vname[30];
|
|
float pcnt = 0;
|
|
//out = in;
|
|
|
|
float x = 0.61;
|
|
char buf[10];
|
|
|
|
try {
|
|
out["job_completed"] = "0";
|
|
out["job_active"] = "0";
|
|
out["job_percent_complete"] = "0.0 %";
|
|
out["job_uncompleted"] = "0";
|
|
out["job_rejected"] = "0";
|
|
out["job_pending"] = "0";
|
|
out["job_last_date"] = "0000-00-00";
|
|
|
|
REQ_STRING(in, "uid", 1, 95, "(.*)"); //uid
|
|
REQ_STRING(in, "interest_uid", 1, 95, "(.*)"); //interest_uid
|
|
REQ_STRING(in, "client_uid", 1, 95, "(.*)"); //client_uid
|
|
|
|
if (load_db_record(out, "SELECT id as client_id FROM members WHERE uid::text = '%s' ", in["client_uid"].c_str())) {
|
|
|
|
load_db_record(out, "SELECT count(id) AS job_pending FROM members_jobs_offer WHERE client_id = %lu AND expire > now()", out["client_id"].Long()); //pending jobs
|
|
load_db_record(out, "SELECT count(id) job_active FROM members_jobs_contract WHERE client_id = %lu AND delivery_date> now() AND status = 1", out["client_id"].Long()); //job_active
|
|
load_db_record(out, "SELECT delivery_date::date AS job_last_date FROM members_jobs_contract WHERE client_id = %lu AND status =7 ORDER BY delivery_date DESC LIMIT 1", out["client_id"].Long()); //job_active
|
|
|
|
load_db_record(out, "SELECT count(id) AS job_completed FROM members_jobs_contract WHERE client_id = %lu AND status =7", out["client_id"].Long()); //pending jobs
|
|
if ( out["job_completed"].Long() > 0 ){
|
|
load_db_record(out, "SELECT count(id) AS total_jobs FROM members_jobs_contract WHERE client_id = %lu AND status IN (7,4,5)", out["client_id"].Long()); //pendi
|
|
|
|
logfmt(logINFO, "~~~~~~~~~~~~~ *********** DIR ******************** %d", 100* out["job_completed"].Long() / out["total_jobs"].Long());
|
|
|
|
sprintf(buf, "%d %", 100* out["job_completed"].Long() / out["total_jobs"].Long());
|
|
|
|
logfmt(logINFO, "~~~~~~~~~~~~~ *********** Buf ******************** %s", buf);
|
|
|
|
out["job_percent_complete"] = buf;
|
|
}
|
|
|
|
}
|
|
// SELECT id as client_id FROM members WHERE uid::text = 'dfc9d601-780f-4d78-839f-422f0928f911';
|
|
// SELECT count(id), status FROM members_jobs_contract WHERE client_id = 2 GROUP BY status;
|
|
ret = PHP_CREATED_OK;
|
|
} catch (bad_parameter) {
|
|
out["log_status"] = "Error WrenchJobsInterestStats";
|
|
logfmt(logINFO, "/Error WrenchJobsInterestStats ");
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
long WrenchJobsOfferInterestList(CVars in, CVars &out) {
|
|
long ret = PHP_API_BAD_PARAM;
|
|
char vname[30];
|
|
out = in;
|
|
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);
|
|
|
|
const PGresult *res = pgsql_query("SELECT mm.id AS client_id, mm.uid AS client_uid, j.timeline_days, "
|
|
" mm.firstname AS client_name, m.offer_code, m.uid AS offer_uid,j.uid AS job_uid, "
|
|
" mo.member_id, mm.added::date AS client_added, to_char(mo.added, 'Dy Mon dd, yyyy HH:MI AM') AS sent, "
|
|
" j.title,j.description,m.job_id,to_char( m.expire, 'Dy Mon dd, yyyy HH:MI AM') AS expire,j.price AS job_price,mo.uid AS interest_uid ,"
|
|
" c.code AS currency_code, c.description AS currency_description,j.country "
|
|
" FROM members_offer_interest mo "
|
|
" LEFT JOIN members_jobs_offer m ON m.id = mo.offer_id "
|
|
" LEFT JOIN members_jobs j ON j.id=m.job_id "
|
|
" LEFT JOIN members mm ON mm.id = mo.member_id "
|
|
" LEFT JOIN currency c ON c.country=j.country "
|
|
" WHERE m.status = 1 AND m.client_id=0 AND mo.status = 1 "
|
|
" AND m.expire IS NOT NULL AND m.expire> now() "
|
|
" AND m.member_id = %lu AND j.status = 1 "
|
|
" ORDER BY mo.added 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), "interest_uid_%05d", i);
|
|
out[vname] = rec["interest_uid"];
|
|
|
|
snprintf(vname, sizeof (vname), "timeline_days_%05d", i);
|
|
out[vname] = rec["timeline_days"];
|
|
|
|
snprintf(vname, sizeof (vname), "client_id_%05d", i);
|
|
out[vname] = rec["client_id"];
|
|
|
|
snprintf(vname, sizeof (vname), "client_uid_%05d", i);
|
|
out[vname] = rec["client_uid"];
|
|
|
|
snprintf(vname, sizeof (vname), "job_uid_%05d", i);
|
|
out[vname] = rec["job_uid"];
|
|
|
|
snprintf(vname, sizeof (vname), "client_name_%05d", i);
|
|
out[vname] = rec["client_name"];
|
|
|
|
snprintf(vname, sizeof (vname), "client_added_%05d", i);
|
|
out[vname] = rec["client_added"];
|
|
|
|
snprintf(vname, sizeof (vname), "client_jobs_completed_%05d", i);
|
|
out[vname] = "0";
|
|
|
|
snprintf(vname, sizeof (vname), "client_jobs_active_%05d", i);
|
|
out[vname] = "0";
|
|
|
|
snprintf(vname, sizeof (vname), "client_addedclient_jobs_missed_%05d", i);
|
|
out[vname] = "0";
|
|
|
|
snprintf(vname, sizeof (vname), "client_offers_pending_%05d", i);
|
|
out[vname] = "0";
|
|
|
|
snprintf(vname, sizeof (vname), "client_percent_completion_%05d", i);
|
|
out[vname] = "0";
|
|
|
|
snprintf(vname, sizeof (vname), "client_ratings_%05d", i);
|
|
out[vname] = "0";
|
|
|
|
snprintf(vname, sizeof (vname), "offer_code_%05d", i);
|
|
out[vname] = rec["offer_code"];
|
|
|
|
snprintf(vname, sizeof (vname), "offer_uid_%05d", i);
|
|
out[vname] = rec["offer_uid"];
|
|
|
|
snprintf(vname, sizeof (vname), "sent_%05d", i);
|
|
out[vname] = rec["sent"];
|
|
|
|
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), "job_id_%05d", i);
|
|
out[vname] = rec["job_id"];
|
|
|
|
snprintf(vname, sizeof (vname), "expire_%05d", i);
|
|
out[vname] = rec["expire"];
|
|
|
|
snprintf(vname, sizeof (vname), "price_%05d", i);
|
|
out[vname] = rec["job_price"];
|
|
|
|
snprintf(vname, sizeof (vname), "job_country_%05d", i);
|
|
out[vname] = rec["country"];
|
|
snprintf(vname, sizeof (vname), "currency_%05d", i);
|
|
out[vname] = rec["currency_description"];
|
|
snprintf(vname, sizeof (vname), "currency_code_%05d", i);
|
|
out[vname] = rec["currency_code"];
|
|
|
|
}
|
|
|
|
}
|
|
ret = PHP_CREATED_OK;
|
|
|
|
} catch (bad_parameter) {
|
|
out["log_status"] = "Error WrenchJobsOfferInterestList";
|
|
logfmt(logINFO, "/Error WrenchJobsOfferInterestList");
|
|
}
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
long WrenchReplyMessage(CVars in, CVars &out) {
|
|
long member_id = REQ_LONG(in, "member_id", 1, -1);
|
|
long message_id = REQ_LONG(in, "message_id", 1, -1);
|
|
|
|
REQ_STRING(in, "yourmessage", 1, 500, "(.*)"); //offer_code
|
|
REQ_STRING(in, "memo", 1, 15, "(.*)"); //offer_code
|
|
|
|
// read current message
|
|
if (load_db_record(out, "SELECT * FROM members_messages WHERE id = %lu", in["message_id"].Long())) {
|
|
|
|
CVars x;
|
|
x["senders_id"] = out["member_id"];
|
|
x["senders_id"].set_valid(true);
|
|
x["member_id"] = out["senders_id"];
|
|
x["member_id"].set_valid(true); // note the swap - you are relying
|
|
x["msg"] = in["yourmessage"];
|
|
x["msg"].set_valid(true);
|
|
x["msg_type"] = out["msg_type"];
|
|
x["msg_type"].set_valid(true);
|
|
x["memo"] = out["memo"];
|
|
x["memo"].set_valid(true);
|
|
|
|
long msg_id = insert_db_record(DBS_VALID, "members_messages", "members_messages_id_seq", x);
|
|
if (msg_id > 0) {
|
|
pgsql_exec("UPDATE members_messages SET reply = now() WHERE id = %lu", message_id);
|
|
x["reply_id"] = msg_id;
|
|
x["reply_id"].set_valid(true);
|
|
job_email(WRENCHBOARD_JOB_REPLY_QUESTION, x, out);
|
|
}
|
|
}
|
|
|
|
logfmt(logINFO, "/WrenchReplyMessage()");
|
|
return 0;
|
|
}
|
|
|
|
/*
|
|
|
|
wrenchboard=> SELECT * FROM members_messages ORDER BY id DESC LIMIT 3;
|
|
id | member_id | added | msg | status | senders_id | msg_type | memo | reply | uid
|
|
-----+-----------+----------------------------+----------------------------------------------------------+--------+------------+----------+------------+-------+--------------------------------------
|
|
172 | 4 | 2023-06-23 15:15:36.499482 | YES YES YES YES 1 2 3 4 5 6 67 7 7 5 5 5 5 5 5 76 7 7 7 | 1 | 1 | MRKTINT | R17BX6RW87 | | b30d993f-c92f-42c6-b272-d76c86e5789b
|
|
171 | 4 | 2023-06-23 15:12:53.640241 | I am testing today again | 1 | 1 | MRKTINT | R17BX6RW87 | | c7da1200-489c-47ac-923c-adfd6136dc4f
|
|
170 | 4 | 2023-06-21 12:09:38.378594 | Testing this | 1 | 1 | MRKTINT | R17BX6RW87 | | 342e13b7-809d-4d1a-882d-8db6e35a8703
|
|
(3 rows)
|
|
|
|
wrenchboard=>
|
|
|
|
*/
|
|
long WrenchMarketInterestQuestionList(CVars in, CVars &out) {
|
|
long ret = PHP_API_BAD_PARAM;
|
|
char vname[30];
|
|
out = in;
|
|
try {
|
|
out["status"] = "0";
|
|
long member_id = REQ_LONG(in, "member_id", 1, -1);
|
|
REQ_STRING(in, "offer_uid", 1, 55, "(.*)");
|
|
REQ_STRING(in, "interest_uid", 1, 55, "(.*)");
|
|
|
|
|
|
const PGresult *res = pgsql_query("SELECT moi.offer_id,mjo.offer_code,mm.* "
|
|
"FROM members_offer_interest moi "
|
|
"LEFT JOIN members_jobs_offer mjo ON mjo.id=moi.offer_id "
|
|
"LEFT JOIN members_messages mm ON mm.memo=mjo.offer_code "
|
|
"WHERE moi.uid = '%s' ", in["interest_uid"].c_str());
|
|
|
|
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), "msg_uid_%05d", i);
|
|
out[vname] = rec["uid"];
|
|
|
|
snprintf(vname, sizeof (vname), "added_%05d", i);
|
|
out[vname] = rec["added"];
|
|
|
|
snprintf(vname, sizeof (vname), "msg_%05d", i);
|
|
out[vname] = rec["msg"];
|
|
|
|
}
|
|
}
|
|
ret = PHP_API_OK;
|
|
out["status"] = "OK";
|
|
|
|
} catch (bad_parameter) {
|
|
out["log_status"] = "Error WrenchMarketInterestQuestionList";
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
|
|
long WrenchMarketInterestQuestion(CVars in, CVars &out) {
|
|
long ret = PHP_API_BAD_PARAM;
|
|
out = in;
|
|
try {
|
|
out["status"] = "0";
|
|
long member_id = REQ_LONG(in, "member_id", 1, -1);
|
|
//long interest_id = REQ_LONG(in, "interest_id", 1, -1);
|
|
REQ_STRING(in, "offer_uid", 1, 55, "(.*)");
|
|
REQ_STRING(in, "interest_uid", 1, 55, "(.*)");
|
|
REQ_STRING(in, "yourmessage", 1, 500, "(.*)"); //offer_code
|
|
//REQ_STRING(in, "offer_code", 1, 15, "(.*)"); //offer_code
|
|
REQ_STRING(in, "msg_type", 1, 15, "(.*)"); //msg_type
|
|
|
|
const PGresult *res = pgsql_query("SELECT o.*,o.member_id AS client_id,jo.offer_code "
|
|
" FROM members_offer_interest o "
|
|
" LEFT JOIN members_jobs_offer jo ON jo.id=o.offer_id WHERE jo.uid='%s' AND o.uid='%s'", in["offer_uid"].c_str(), in["interest_uid"].c_str());
|
|
if (res != NULL && pgsql_num_rows(res) > 0) {
|
|
map<const char*, const char*>f = pgsql_fetch_assoc(res, 0);
|
|
if (!f.empty()) {
|
|
CVars rec;
|
|
map_to_cvars(f, rec);
|
|
out = rec;
|
|
|
|
CVars x;
|
|
|
|
x["senders_id"] = in["member_id"];
|
|
x["member_id"].set_valid(true);
|
|
x["msg"] = in["yourmessage"];
|
|
x["msg"].set_valid(true);
|
|
x["msg_type"] = "MRKTINT";
|
|
x["msg_type"].set_valid(true);
|
|
x["member_id"] = out["member_id"];
|
|
x["member_id"].set_valid(true);
|
|
x["memo"] = rec["offer_code"];
|
|
x["memo"].set_valid(true);
|
|
long msg_id = insert_db_record(DBS_VALID, "members_messages", "members_messages_id_seq", x);
|
|
if (msg_id > 0) {
|
|
x["msg_id"] = msg_id;
|
|
x["msg_id"].set_valid(true);
|
|
x["offer_id"] = out["offer_id"];
|
|
x["offer_id"].set_valid(true);
|
|
job_email(WRENCHBOARD_JOB_MRKTINT_QUEST, x, out);
|
|
}
|
|
// out["client_id"] = x["member_id"];
|
|
|
|
|
|
}
|
|
}
|
|
|
|
ret = PHP_CREATED_OK;
|
|
|
|
} catch (bad_parameter) {
|
|
out["log_status"] = "Error WrenchMarketInterestQuestion";
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
long WrenchJobsQuestion(CVars in, CVars &out) {
|
|
long ret = PHP_API_BAD_PARAM;
|
|
//out = in;
|
|
try {
|
|
out["status"] = "Started";
|
|
long member_id = REQ_LONG(in, "member_id", 1, -1);
|
|
REQ_STRING(in, "yourmessage", 1, 500, "(.*)"); //offer_code
|
|
REQ_STRING(in, "offer_code", 1, 15, "(.*)"); //offer_code
|
|
REQ_STRING(in, "msg_type", 1, 15, "(.*)"); //msg_type
|
|
|
|
const PGresult *res = pgsql_query("SELECT * FROM members_jobs_offer WHERE offer_code = '%s'", in["offer_code"].c_str());
|
|
if (res != NULL && pgsql_num_rows(res) > 0) {
|
|
map<const char*, const char*>f = pgsql_fetch_assoc(res, 0);
|
|
if (!f.empty()) {
|
|
CVars rec;
|
|
map_to_cvars(f, rec);
|
|
out = rec;
|
|
|
|
CVars x;
|
|
x["senders_id"] = in["member_id"];
|
|
x["member_id"].set_valid(true);
|
|
x["msg"] = in["yourmessage"];
|
|
x["msg"].set_valid(true);
|
|
x["msg_type"] = "JOB";
|
|
x["msg_type"].set_valid(true);
|
|
x["member_id"] = out["member_id"];
|
|
x["member_id"].set_valid(true);
|
|
x["memo"] = in["offer_code"];
|
|
x["memo"].set_valid(true);
|
|
long msg_id = insert_db_record(DBS_VALID, "members_messages", "members_messages_id_seq", x);
|
|
if (msg_id > 0) {
|
|
x["status"] = "Sent";
|
|
x["msg_id"] = msg_id;
|
|
x["msg_id"].set_valid(true);
|
|
//x["offer_id"] = out["offer_id"];
|
|
//x["offer_id"].set_valid(true);
|
|
job_email(WRENCHBOARD_JOB_SEND_QUESTION, x, out);
|
|
}
|
|
else{
|
|
x["status"] = "Error";
|
|
}
|
|
out = x;
|
|
//out["status"] = "";
|
|
|
|
}
|
|
}
|
|
|
|
ret = PHP_CREATED_OK;
|
|
|
|
} catch (bad_parameter) {
|
|
out["log_status"] = "Invalid Log Action";
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
/*
|
|
id | integer | not null default nextval('members_messages_id_seq'::regclass)
|
|
member_id | integer |
|
|
added | timestamp without time zone | default now()
|
|
msg | text |
|
|
status | integer | default 1
|
|
senders_id | integer |
|
|
Indexes:
|
|
"members_messages_id_key"
|
|
|
|
|
|
action
|
|
:
|
|
13034
|
|
client_uid
|
|
:
|
|
"43c766d9-403d-4125-9983-63c21960b187"
|
|
member_id
|
|
:
|
|
"1"
|
|
offer_code
|
|
:
|
|
"XWT8B7W377"
|
|
offer_uid
|
|
:
|
|
"10088dc3-c1ed-4782-808c-ae64940d3405"
|
|
proc
|
|
:
|
|
"ACCEPT"
|
|
sessionid
|
|
:
|
|
"800EDEE8AECA96EDAE0380537F5DE4546032B0709CD8FDA1BBAF5CAC0BF2ED1E"
|
|
uid
|
|
:
|
|
"3119b744-42ad-4834-bb83-b737588754ca"
|
|
|
|
*/
|
|
|
|
long WrenchJobsProcessInterest(CVars in, CVars &out) {
|
|
long ret = PHP_API_BAD_PARAM;
|
|
out = in;
|
|
out["status"] = "Recieved";
|
|
REQ_LONG(in, "member_id", 1, -1);
|
|
REQ_STRING(in, "client_uid", 1, 55, "(.*)");
|
|
REQ_STRING(in, "offer_uid", 1, 55, "(.*)");
|
|
long interest = REQ_LONG(in, "interest", 1, -1);
|
|
|
|
const PGresult *res0 = pgsql_query("SELECT mo.id AS interest_id, mo.*,mm.uid,jo.uid "
|
|
" FROM members_offer_interest mo "
|
|
" LEFT JOIN members mm ON mm.id= mo.member_id "
|
|
" LEFT JOIN members_jobs_offer jo ON jo.id=mo.offer_id "
|
|
" WHERE mm.uid = '%s' AND jo.uid='%s' ",in["client_uid"].c_str(),in["offer_uid"].c_str() );
|
|
if (res0 != NULL && pgsql_num_rows(res0) > 0) {
|
|
map<const char*, const char*>f = pgsql_fetch_assoc(res0, 0);
|
|
if (!f.empty()) {
|
|
CVars rec1;
|
|
map_to_cvars(f, rec1);
|
|
in = rec1;
|
|
}
|
|
}else {
|
|
out["status"] = "Not found.";
|
|
return ret;
|
|
}
|
|
|
|
|
|
long interest_id = REQ_LONG(in, "interest_id", 1, -1);
|
|
|
|
//REQ_STRING (in, "offer_code", 1, 15, "(.*)"); //offer_code
|
|
if (interest == JOB_INTEREST_ACCEPT || interest == JOB_INTEREST_REJECT || interest == JOB_INTEREST_CANCEL) {
|
|
// is job still valid
|
|
const PGresult *res = pgsql_query("SELECT mi.id,mi.member_id AS job_interest_client_id, mo.*,mo.id AS offer_id "
|
|
" FROM members_offer_interest mi LEFT JOIN members_jobs_offer mo ON mo.id=mi.offer_id "
|
|
" WHERE mo.status IN (1,4) AND mi.status=1 AND mi.id = %lu", in["interest_id"].Long());
|
|
if (res != NULL && pgsql_num_rows(res) > 0) {
|
|
map<const char*, const char*>f = pgsql_fetch_assoc(res, 0);
|
|
if (!f.empty()) {
|
|
CVars rec;
|
|
map_to_cvars(f, rec);
|
|
out = rec;
|
|
|
|
load_db_record(out, "SELECT email FROM members WHERE id = %lu", rec["job_interest_client_id"].Long());
|
|
|
|
if (interest == JOB_INTEREST_ACCEPT) {
|
|
/*
|
|
$in["job_id"] = $jobID;
|
|
$in["email"] = $email;
|
|
$in["job_description"] = $descr;
|
|
$in['member_id'] = $_SESSION['member_id'];
|
|
// var_dump($in);
|
|
|
|
$in['action'] = WRENCHBOARD_JOB_OFFER_INDVI;
|
|
*/
|
|
CVars x;
|
|
x["job_id"] = rec["job_id"];
|
|
x["job_id"].set_valid(true);
|
|
x["email"] = out["email"];
|
|
x["email"].set_valid(true);
|
|
x["job_description"] = out["job_description"];
|
|
x["job_description"].set_valid(true);
|
|
x["member_id"] = out["member_id"];
|
|
x["member_id"].set_valid(true);
|
|
|
|
ret = WrenchSendJobsOfferIndividual(x, out);
|
|
if (ret == PHP_CREATED_OK) {
|
|
pgsql_exec("UPDATE members_offer_interest SET status = 5 WHERE status=1 AND id = %lu", interest_id);
|
|
}
|
|
}
|
|
|
|
if (interest == JOB_INTEREST_REJECT) {
|
|
pgsql_exec("UPDATE members_offer_interest SET status = 3 WHERE status=1 AND id = %lu", interest_id);
|
|
// Implement emails latter
|
|
ret = PHP_CREATED_OK;
|
|
}
|
|
|
|
if (interest == JOB_INTEREST_CANCEL) {
|
|
pgsql_exec("UPDATE members_offer_interest SET status = 3 WHERE status=1 AND id = %lu", interest_id);
|
|
// Implement emails latter
|
|
pgsql_exec("UPDATE members_jobs_offer SET status = 3 WHERE status = 1 AND payment_id IS NULL AND id = %lu", rec["offer_id"].Long());
|
|
ret = PHP_CREATED_OK;
|
|
}
|
|
}
|
|
} else {
|
|
out["status"] = "Invalid Task Status";
|
|
}
|
|
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
long WrenchJobsOfferInterest(CVars in, CVars &out) {
|
|
long ret = PHP_API_BAD_PARAM;
|
|
out = in;
|
|
REQ_LONG(in, "member_id", 1, -1);
|
|
REQ_STRING(in, "offer_code", 1, 15, "(.*)"); //offer_code
|
|
|
|
const PGresult *res = pgsql_query("SELECT *,id as offer_id FROM members_jobs_offer WHERE offer_code ='%s' AND expire>= now() AND status = 1 AND public_view > 0", in["offer_code"].c_str());
|
|
if (res != NULL && pgsql_num_rows(res) > 0) {
|
|
map<const char*, const char*>f = pgsql_fetch_assoc(res, 0);
|
|
if (!f.empty()) {
|
|
CVars rec;
|
|
map_to_cvars(f, rec);
|
|
out = rec;
|
|
|
|
if (rec["member_id"] == in["member_id"]) {
|
|
out["status"] = "You cannot accept your job";
|
|
return ret;
|
|
}
|
|
|
|
const PGresult *res1 = pgsql_query("SELECT * FROM members_offer_interest WHERE offer_id =%lu AND member_id = %lu AND status IN(1,5)", rec["offer_id"].Long(), in["member_id"].Long());
|
|
if (res1 != NULL && pgsql_num_rows(res1) > 0) {
|
|
out["status"] = "You have sent or completed a request for this task already.";
|
|
return ret;
|
|
}
|
|
|
|
|
|
CVars x;
|
|
x["member_id"] = in["member_id"];
|
|
x["member_id"].set_valid(true);
|
|
x["offer_id"] = rec["offer_id"];
|
|
x["offer_id"].set_valid(true);
|
|
long interest_id = insert_db_record(DBS_VALID, "members_offer_interest", "members_offer_interest_id_seq", x);
|
|
if (interest_id > 0) {
|
|
out["status"] = "Offer interest sent";
|
|
ret = PHP_CREATED_OK;
|
|
x["interest_id"] = interest_id;
|
|
x["interest_id"].set_valid(true);
|
|
job_email(JOBS_OFFER_INTEREST_MAIL, x, out); // note I need interest_id to
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
//out["status"] = "Yes from backend";
|
|
return ret;
|
|
}
|
|
|
|
long WrenchConcludeJobsOffer(CVars in, CVars &out) {
|
|
long ret = PHP_API_BAD_PARAM;
|
|
try {
|
|
REQ_LONG(in, "member_id", 1, -1);
|
|
long offer_result = REQ_LONG(in, "offer_result", 1, -1);
|
|
REQ_STRING(in, "offer_code", 1, 15, "(.*)");
|
|
long job_id = 0;
|
|
long owner_member_id = 0;
|
|
long offer_id = 0;
|
|
|
|
long rc = 0;
|
|
CVars outx;
|
|
// rc = 0 + load_db_record( out, "SELECT * FROM members_jobs_offer WHERE offer_code='%s' AND status = 1", in["offer_code"].c_str() );
|
|
|
|
|
|
|
|
const PGresult *res = pgsql_query("SELECT *,member_id AS owner_member_id, id AS offer_id FROM members_jobs_offer WHERE offer_code='%s' AND status = 1", in["offer_code"].c_str());
|
|
if (res != NULL && pgsql_num_rows(res) > 0) {
|
|
|
|
// now job is valid
|
|
// good to continue
|
|
map<const char*, const char*>f = pgsql_fetch_assoc(res, 0);
|
|
if (!f.empty()) {
|
|
CVars rec;
|
|
map_to_cvars(f, rec);
|
|
job_id = rec["job_id"];
|
|
offer_id = rec["offer_id"];
|
|
owner_member_id = rec["owner_member_id"];
|
|
}
|
|
|
|
if( offer_result == OFFER_RESEND){
|
|
if (load_db_record(outx, "SELECT o.id AS offer_id, o.*,to_char(o.expire, 'Day Mon dd, yyyy HH:MI AM') AS expire2,j.title,j.description,j.timeline_days,j.price FROM members_jobs_offer o LEFT JOIN members_jobs j ON j.id =o.job_id WHERE o.offer_code='%s' AND o.email IS NOT NULL", in["offer_code"].c_str())) {
|
|
job_email(JOBS_INDIVIDUAL_OFFER_MAIL, outx, out); // make sure job went to individual
|
|
out["result"] = "OK";
|
|
}
|
|
|
|
return PHP_CREATED_OK;
|
|
}
|
|
|
|
|
|
load_db_record(out, "SELECT jo.member_id AS owner_member_id,jo.id AS offer_id, j.id AS job_id,jo.added::date AS added_date,j.title,j.description, j.timeline_days, j.price,jo.offer_code,jo.job_description,jo.expire FROM members_jobs_offer jo LEFT JOIN members_jobs j ON j.id = jo.job_id WHERE jo.expire > now() AND jo.status = 1 AND jo.client_id = %lu AND jo.offer_code='%s'", in["member_id"].Long(), in["offer_code"].c_str());
|
|
|
|
|
|
in["offer_id"] = out["offer_id"];
|
|
in["offer_id"].set_valid(true);
|
|
|
|
CVars x;
|
|
const char * loc = getenv("REMOTE_ADDR");
|
|
long contract_id = 0;
|
|
|
|
switch (offer_result) {
|
|
case OFFER_EXTEND:
|
|
logfmt(logINFO, "WrenchConcludeJobsOffer() rc=OFFER_EXTEND");
|
|
// You can only extend your jobs only
|
|
if( load_db_record(outx, "SELECT id AS offer_id,* FROM members_jobs_offer WHERE offer_code='%s' AND status = 1 AND member_id=%lu", in["offer_code"].c_str(),in["member_id"].Long()) ){
|
|
pgsql_exec("UPDATE members_jobs_offer SET expire = expire +'7 days' WHERE id = %lu AND offer_code='%s' ", outx["offer_id"].Long(), outx["offer_code"].c_str());
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
|
|
case OFFER_SENDTOME:
|
|
job_email(JOBS_OFFER_SENDTOME_MAIL, in, out); // the email will come from
|
|
break;
|
|
|
|
case OFFER_ACCEPT:
|
|
x["job_id"] = job_id;
|
|
x["job_id"].set_valid(true);
|
|
x["contract"] = in["offer_code"];
|
|
x["contract"].set_valid(true);
|
|
x["member_id"] = owner_member_id; //out["owner_member_id"];
|
|
x["member_id"].set_valid(true); // this is the owner of the job - from job database read
|
|
x["client_id"] = in["member_id"];
|
|
x["client_id"].set_valid(true); // be care full, you are the client accepting job
|
|
x["title"] = out["title"];
|
|
x["title"].set_valid(true);
|
|
x["description"] = out["description"];
|
|
x["description"].set_valid(true);
|
|
x["job_detail"] = out["job_description"];
|
|
x["job_detail"].set_valid(true);
|
|
x["price"] = out["price"];
|
|
x["price"].set_valid(true);
|
|
x["timeline_days"] = out["timeline_days"];
|
|
x["timeline_days"].set_valid(true);
|
|
|
|
x["loc"] = loc;
|
|
x["loc"].set_valid(true);
|
|
//x[""] = out[""]; x[""].set_valid( true );
|
|
contract_id = insert_db_record(DBS_VALID, "members_jobs_contract", "members_jobs_contract_id_seq", x);
|
|
if (contract_id > 0) {
|
|
in["contract_id"] = contract_id;
|
|
in["contract_id"].set_valid(true);
|
|
pgsql_exec("UPDATE members_jobs_contract SET delivery_date = now() +'%lu days' WHERE id = %lu", x["timeline_days"].Long(), contract_id);
|
|
pgsql_exec("UPDATE members_jobs_offer SET status = 5 WHERE id = %lu AND offer_code='%s' ", offer_id, in["offer_code"].c_str());
|
|
pgsql_exec("UPDATE members_payments SET what_contract = %lu WHERE what_offer = %lu ", contract_id, offer_id);
|
|
job_email(JOBS_OFFER_ACCEPT_MAIL, in, out); // note the email will come from contract table now
|
|
}
|
|
|
|
break;
|
|
|
|
case OFFER_REJECT: // note status= 3
|
|
logfmt(logINFO, "WrenchConcludeJobsOffer() rc=OFFER_REJECT");
|
|
if (load_db_record(out, " SELECT id AS offer_id,* FROM members_jobs_offer WHERE offer_code ='%s' AND status = 1", in["offer_code"].c_str())) {
|
|
// valid load of offer needed
|
|
CVars y;
|
|
y["member_id"] = out["member_id"];
|
|
y["member_id"].set_valid(true);
|
|
y["offer_id"] = out["offer_id"];
|
|
y["offer_id"].set_valid(true);
|
|
y["code"] = "OFRFD";
|
|
y["code"].set_valid(true);
|
|
y["dir"] = DIR_SOURCE;
|
|
y["dir"].set_valid(true);
|
|
y["payment_id"] = out["payment_id"];
|
|
y["payment_id"].set_valid(true);
|
|
|
|
if (WrenchRefundoffer(y, out) == PHP_CREATED_OK) {
|
|
pgsql_exec("UPDATE members_jobs_offer SET status = 3 WHERE id = %lu AND offer_code='%s' ", offer_id, in["offer_code"].c_str());
|
|
// REFUND THE MONEY
|
|
job_email(JOBS_OFFER_REJECT_MAIL, in, out); // the email will come from offer table
|
|
}
|
|
}
|
|
break;
|
|
|
|
case OFFER_CANCEL: // note status 4
|
|
logfmt(logINFO, "WrenchConcludeJobsOffer() rc=OFFER_CANCEL");
|
|
if (load_db_record(out, " SELECT id AS offer_id,*,(CASE WHEN payment_id IS NULL THEN 0 ELSE payment_id END ) AS payment_id_val FROM members_jobs_offer WHERE offer_code ='%s' AND status = 1", in["offer_code"].c_str())) {
|
|
// valid load of offer needed
|
|
CVars y;
|
|
y["member_id"] = out["member_id"];
|
|
y["member_id"].set_valid(true);
|
|
y["offer_id"] = out["offer_id"];
|
|
y["offer_id"].set_valid(true);
|
|
y["code"] = "OFRFD";
|
|
y["code"].set_valid(true);
|
|
y["dir"] = DIR_SOURCE;
|
|
y["dir"].set_valid(true);
|
|
y["payment_id"] = out["payment_id_val"];
|
|
y["payment_id"].set_valid(true);
|
|
|
|
if (WrenchRefundoffer(y, out) == PHP_CREATED_OK) {
|
|
pgsql_exec("UPDATE members_jobs_offer SET status = 4 WHERE id = %lu AND offer_code='%s' ", offer_id, in["offer_code"].c_str());
|
|
// REFUND THE MONEY
|
|
job_email(JOBS_OFFER_CANCEL_MAIL, y, out); // the email will come from offer table
|
|
}
|
|
}
|
|
break;
|
|
|
|
case OFFER_EXPIRE: // note status 4
|
|
case OFFER_NOREFU:
|
|
|
|
logfmt(logINFO, "WrenchConcludeJobsOffer() rc=OFFER_EXPIRE");
|
|
if (load_db_record(out, "SELECT id AS offer_id,* FROM members_jobs_offer WHERE offer_code ='%s' AND status = 1", in["offer_code"].c_str())) {
|
|
// valid load of offer needed
|
|
CVars y;
|
|
y["member_id"] = out["member_id"];
|
|
y["member_id"].set_valid(true);
|
|
y["offer_id"] = out["offer_id"];
|
|
y["offer_id"].set_valid(true);
|
|
y["code"] = "OFRFD";
|
|
y["code"].set_valid(true);
|
|
y["dir"] = DIR_SOURCE;
|
|
y["dir"].set_valid(true);
|
|
y["payment_id"] = out["payment_id"];
|
|
y["payment_id"].set_valid(true);
|
|
|
|
if ( offer_result == OFFER_EXPIRE){
|
|
if (WrenchRefundoffer(y, out) == PHP_CREATED_OK) {
|
|
pgsql_exec("UPDATE members_jobs_offer SET status = 4 WHERE id = %lu AND offer_code='%s' ", offer_id, in["offer_code"].c_str());
|
|
// REFUND THE MONEY
|
|
//job_email(JOBS_OFFER_CANCEL_MAIL, in, out); // the email will come from offer table
|
|
}
|
|
}
|
|
if ( offer_result == OFFER_NOREFU){
|
|
|
|
if (WrenchZeroRefundOffer(y, out) == PHP_CREATED_OK) {
|
|
logfmt(logINFO, "********* NO REFUND ************* NO REFUND WrenchConcludeJobsOffer() rc=FOUND");
|
|
pgsql_exec("UPDATE members_jobs_offer SET status = 4 WHERE id = %lu AND offer_code='%s' ", offer_id, in["offer_code"].c_str());
|
|
}
|
|
}
|
|
|
|
|
|
// if (WrenchRefundoffer(y, out) == PHP_CREATED_OK) {
|
|
// pgsql_exec("UPDATE members_jobs_offer SET status = 4 WHERE id = %lu AND offer_code='%s' ", offer_id, in["offer_code"].c_str());
|
|
// // REFUND THE MONEY
|
|
// //job_email(JOBS_OFFER_CANCEL_MAIL, in, out); // the email will come from offer table
|
|
// }
|
|
|
|
}
|
|
break;
|
|
}
|
|
|
|
logfmt(logINFO, "WrenchConcludeJobsOffer() rc=FOUND");
|
|
out["result"] = "OK";
|
|
} else {
|
|
out["result"] = "Invalid Offer...";
|
|
logfmt(logINFO, "WrenchConcludeJobsOffer() rc=NOT FOUND");
|
|
}
|
|
|
|
// check if the offer is still valid
|
|
|
|
// set up the work as active
|
|
|
|
// if work is rejected, refund the member balance
|
|
|
|
// send message to client_id
|
|
|
|
// send message to the member
|
|
|
|
// alert wrench board of work
|
|
|
|
|
|
|
|
//pgsql_exec("UPDATE members_job_group SET status = 0 WHERE status = 1 AND member_id = %lu AND id = %lu",in["member_id"].Long(),in["group_id"].Long());
|
|
ret = PHP_CREATED_OK;
|
|
|
|
} catch (bad_parameter) {
|
|
out["log_status"] = "Invalid Log Action";
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
long WrenchSendMediaOfferFamily(CVars in, CVars &out) {
|
|
logfmt(logINFO, "ENTER WrenchJobOfferSystems()->WrenchSendMediaOfferFamily");
|
|
|
|
long ret = PHP_API_BAD_PARAM;
|
|
// logfmt(logINFO, "WrenchSendMediaOfferFamily()");
|
|
long member_id = REQ_LONG(in, "member_id", 1, -1);
|
|
REQ_STRING(in, "uid", 1, 59, "(.*)");
|
|
REQ_STRING(in, "media_uid", 1, 59, "(.*)");
|
|
REQ_STRING(in, "family_uid", 1, 59, "(.*)");
|
|
REQ_STRING(in, "job_description", 1, 5500, "(.*)");
|
|
long amount = REQ_LONG(in, "amount", 1, -1);
|
|
REQ_LONG(in, "timeline_days", 1, -1);
|
|
|
|
REQ_STRING(in, "currency", 2, 4, "(.*)");
|
|
long job_id = 0;
|
|
srand((unsigned) time(NULL));
|
|
int r = rand();
|
|
in["offer_code"] = 10000000 * r*r;
|
|
in["offer_code"].set_valid(true);
|
|
|
|
long offer_id = 0;
|
|
out = in;
|
|
in["client_id"] = "0";
|
|
CVars x;
|
|
CVars y;
|
|
CVars u;
|
|
CVars z;
|
|
CVars kx;
|
|
CVars xy;
|
|
CVars xout;
|
|
|
|
bool family_found = false;
|
|
|
|
try {
|
|
// let us use this email to see if this already a user on the system
|
|
if (load_db_record(out, "SELECT family_member_id AS client_id FROM members_family WHERE member_id = %lu AND uid='%s';",member_id, in["family_uid"].c_str())) {
|
|
in["client_id"] = out["client_id"]; // overidding if account is found
|
|
if (out["client_id"].length() > 0) {
|
|
x["client_id"] = in["client_id"];
|
|
x["client_id"].set_valid(true);
|
|
family_found = true;
|
|
}
|
|
}
|
|
|
|
if (family_found == false){
|
|
out["status"] = "Family not Found....";
|
|
return ret;
|
|
}
|
|
|
|
// we need this job id
|
|
if (load_db_record(y, " SELECT * FROM common_media WHERE uid ='%s'", in["media_uid"].c_str())) {
|
|
// valid load of job needed
|
|
} else {
|
|
out["status"] = "Unable to create offer";
|
|
return ret;
|
|
}
|
|
|
|
load_db_record(u,"SELECT code AS currency FROM currency WHERE country = '%s'", in["currency"].c_str() );
|
|
logfmt(logINFO, " The Currency code = %s", u["currency"].c_str());
|
|
long wallet_id = CheckWallet( in["member_id"].Long() , u);
|
|
logfmt(logINFO, " The wallet_id = %lu", wallet_id);
|
|
|
|
if (in["client_id"].Long() == in["member_id"].Long()) {
|
|
out["status"] = "Unable to create offer";
|
|
return ret;
|
|
} // same client and member not allowed
|
|
|
|
if (in["amount"].Long() > 0) {
|
|
} else {
|
|
out["status"] = "Unable to create offer";
|
|
return ret;
|
|
} // no price zero for job on this path
|
|
|
|
// Now do you have money to do this ....
|
|
z["balance"] = "0";
|
|
z["balance"].set_valid(true); // just initialize it
|
|
if (load_db_record(z, " SELECT * FROM members_wallet WHERE id =%lu AND member_id =%lu AND amount >= %lu",wallet_id, in["member_id"].Long(), in["amount"].Long())) {
|
|
|
|
} else {
|
|
out["status"] = "Insufficient balance to create this offer";
|
|
logfmt(logINFO, "Price2 = %lu Balance = %lu", in["amount"].Long(), z["amount"].Long());
|
|
}
|
|
|
|
//***************************************
|
|
const char * loc = getenv("REMOTE_ADDR");
|
|
logfmt(logINFO, "ENTER WrenchJobOfferSystems()->DATA for hidden Job");
|
|
kx["member_id"] = in["member_id"];
|
|
kx["member_id"].set_valid(true);
|
|
kx["title"] = y["title"];
|
|
kx["title"].set_valid(true);
|
|
kx["price"] = in["amount"];
|
|
kx["price"].set_valid(true);
|
|
kx["timeline_days"] = in["timeline_days"];
|
|
kx["timeline_days"].set_valid(true);
|
|
kx["description"] = y["description"];
|
|
kx["description"].set_valid(true);
|
|
kx["loc"] = loc;
|
|
kx["loc"].set_valid(true);
|
|
kx["job_detail"] = in["job_description"];
|
|
kx["job_detail"].set_valid(true);
|
|
//country added
|
|
kx["country"] = in["currency"]; // currency in the input data
|
|
kx["country"].set_valid(true);
|
|
kx["job_type"] = "MEDIA";
|
|
kx["job_type"].set_valid(true);
|
|
kx["media_uid"] = in["media_uid"];
|
|
kx["media_uid"].set_valid(true);
|
|
kx["status"] ="77"; // need the job to be hidden , data needed for payment systems
|
|
kx["status"].set_valid(true);
|
|
logfmt(logINFO, "ENTER WrenchJobOfferSystems()->DATA for hidden Job -- Ready");
|
|
|
|
job_id = insert_db_record(DBS_VALID, "members_jobs", "members_jobs_id_seq", kx);
|
|
logfmt(logINFO, "ENTER WrenchJobOfferSystems()->DATA for hidden Job Inserted job_id = %lu",job_id);
|
|
if (job_id) {
|
|
|
|
}
|
|
//***************************************
|
|
|
|
// we re ready to create the offer now
|
|
x["member_id"] = in["member_id"];
|
|
x["member_id"].set_valid(true);
|
|
x["job_id"] = job_id;
|
|
x["job_id"].set_valid(true);
|
|
x["media_uid"] = in["media_uid"];
|
|
x["media_uid"].set_valid(true);
|
|
x["job_description"] = in["job_description"];
|
|
x["job_description"].set_valid(true);
|
|
x["offer_code"] = in["offer_code"];
|
|
x["offer_code"].set_valid(true);
|
|
|
|
|
|
x["loc"] = loc;
|
|
x["loc"].set_valid(true);
|
|
offer_id = insert_db_record(DBS_VALID, "members_jobs_offer", "members_jobs_offer_id_seq", x);
|
|
|
|
if (offer_id > 0) {
|
|
CVars y;
|
|
y["member_id"] = x["member_id"];
|
|
y["offer_id"] = offer_id;
|
|
y["code"] = "OFDPS";
|
|
y["dir"] = DIR_TARGET;
|
|
if (WrenchOfferPayment(y, out) == PHP_CREATED_OK) { // if you reserve pauments
|
|
char offer_code[15] = "";
|
|
GetOfferCode(offer_id, offer_code, sizeof (offer_code)); // this stamp the offer code directly in that call
|
|
|
|
pgsql_exec("UPDATE members_jobs_offer SET expire = now() + '2 day',payment_id=%lu WHERE id = %lu", out["payment_id"].Long(), offer_id); // date of expiration will be dynamic latter
|
|
|
|
ret = PHP_CREATED_OK;
|
|
x["offer_id"] = offer_id;
|
|
x["offer_id"].set_valid(true);
|
|
job_email(JOBS_INDIVIDUAL_OFFER_MAIL, x, out);
|
|
load_db_record(out, "SELECT *,id AS offer_id FROM members_jobs_offer WHERE id = %lu ", offer_id);
|
|
out["status"] = "Offer sent to recipient";
|
|
recommendation_engine(RECOMMEND_OFFERS , y, out); // trigger the card interaction in apps
|
|
|
|
if ( load_db_record(xy, "SELECT mj.client_id AS member_id, m.uid AS member_uid "
|
|
" FROM members_jobs_offer mj "
|
|
" LEFT JOIN members m ON m.id = mj.client_id "
|
|
" WHERE mj.id = %lu ",offer_id ) > 0 ){
|
|
xy["msg"] = "You have a task to start !";
|
|
xy["msg"].set_valid(true);
|
|
plan_notification(xy, xout);
|
|
}
|
|
|
|
|
|
} else {
|
|
out["error_msg"] = "error_unable_to_create_fund_for_task";
|
|
out["status"] = "Unable to create this offer";
|
|
}
|
|
} else {
|
|
out["status"] = "Unable to create offer";
|
|
}
|
|
|
|
} catch (bad_parameter) {
|
|
out["log_status"] = "Invalid Log Action";
|
|
}
|
|
|
|
logfmt(logINFO, "/WrenchSendMediaOfferFamily()");
|
|
return ret;
|
|
}
|
|
|
|
|
|
|
|
long WrenchSendJobsOfferFamily(CVars in, CVars &out) {
|
|
long ret = PHP_API_BAD_PARAM;
|
|
logfmt(logINFO, "WrenchSendJobsOfferFamily()");
|
|
long member_id = REQ_LONG(in, "member_id", 1, -1);
|
|
REQ_LONG(in, "job_id", 1, -1);
|
|
REQ_STRING(in, "job_uid", 1, 59, "(.*)");
|
|
REQ_STRING(in, "family_uid", 1, 59, "(.*)");
|
|
REQ_STRING(in, "job_description", 1, 5500, "(.*)");
|
|
|
|
srand((unsigned) time(NULL));
|
|
int r = rand();
|
|
in["offer_code"] = 10000000 * r*r;
|
|
in["offer_code"].set_valid(true);
|
|
|
|
long offer_id = 0;
|
|
out = in;
|
|
/*
|
|
'member_id' => int 1
|
|
'sessionid' => string 'DFD8812B9A3ABE7FCF920B71A22AA3E93BB9F9C33AE22E90AAC47537367B2E2B' (length=64)
|
|
'uid' => string '3119b744-42ad-4834-bb83-b737588754ca' (length=36)
|
|
'job_id' => string '98' (length=2)
|
|
'job_uid' => string '473d3239-ecd7-4eb5-859c-78261720cb8e' (length=36)
|
|
'family_uid' => string 'a24f1193-7885-4c26-afac-3e5ad744ef40' (length=36)
|
|
'job_description' => string 'Nitetronic Z6 Anti Snoring Pillow, Best Snore Stopper Device, Clinically Proven Snoring Solution for Snorers, Smart Stop Snoring Technology Suitable for All Sleepers' (length=165)
|
|
'action' => int 13025
|
|
'assign_mode' => int 110011
|
|
|
|
|
|
CREATE TABLE members_jobs_offer (
|
|
id SERIAL,
|
|
offer_code varchar(15) UNIQUE NOT NULL,
|
|
member_id INT REFERENCES members(id),
|
|
client_id INT DEFAULT 0,
|
|
group_id INT DEFAULT 0,
|
|
job_id INT REFERENCES members_jobs(id),
|
|
email varchar(50),
|
|
job_description varchar(500),
|
|
status integer DEFAULT 1,
|
|
sent_count integer DEFAULT 0,
|
|
added timestamp without time zone DEFAULT now()
|
|
);
|
|
|
|
*/
|
|
in["client_id"] = "0";
|
|
CVars x;
|
|
CVars y;
|
|
CVars u;
|
|
CVars z;
|
|
|
|
CVars xy;
|
|
CVars xout;
|
|
|
|
bool family_found = false;
|
|
|
|
try {
|
|
// let us use this email to see if this already a user on the system
|
|
if (load_db_record(out, "SELECT family_member_id AS client_id FROM members_family WHERE member_id = %lu AND uid='%s';",member_id, in["family_uid"].c_str())) {
|
|
in["client_id"] = out["client_id"]; // overidding if account is found
|
|
if (out["client_id"].length() > 0) {
|
|
x["client_id"] = in["client_id"];
|
|
x["client_id"].set_valid(true);
|
|
family_found = true;
|
|
}
|
|
}
|
|
|
|
if (family_found == false){
|
|
out["status"] = "Family not Found....";
|
|
return ret;
|
|
}
|
|
|
|
// we need this job id
|
|
if (load_db_record(y, " SELECT * FROM members_jobs WHERE id =%lu", in["job_id"].Long())) {
|
|
// valid load of job needed
|
|
} else {
|
|
out["status"] = "Unable to create offer";
|
|
return ret;
|
|
}
|
|
|
|
load_db_record(u,"SELECT code AS currency FROM currency WHERE country = '%s'", y["country"].c_str() );
|
|
logfmt(logINFO, " The Currency code = %s", u["currency"].c_str());
|
|
long wallet_id = CheckWallet( in["member_id"].Long() , u);
|
|
logfmt(logINFO, " The wallet_id = %lu", wallet_id);
|
|
|
|
if (in["client_id"].Long() == in["member_id"].Long()) {
|
|
out["status"] = "Unable to create offer";
|
|
return ret;
|
|
} // same client and member not allowed
|
|
|
|
if (y["price"].Long() > 0) {
|
|
} else {
|
|
out["status"] = "Unable to create offer";
|
|
return ret;
|
|
} // no price zero for job on this path
|
|
|
|
// Now do you have money to do this ....
|
|
z["balance"] = "0";
|
|
z["balance"].set_valid(true); // just initialize it
|
|
if (load_db_record(z, " SELECT * FROM members_wallet WHERE id =%lu AND member_id =%lu AND amount >= %lu",wallet_id, in["member_id"].Long(), y["price"].Long())) {
|
|
|
|
} else {
|
|
out["status"] = "Insufficient balance to create this offer";
|
|
logfmt(logINFO, "Price2 = %lu Balance = %lu", y["price"].Long(), z["amount"].Long());
|
|
}
|
|
|
|
|
|
// we re ready to create the offer now
|
|
x["member_id"] = in["member_id"];
|
|
x["member_id"].set_valid(true);
|
|
x["job_id"] = in["job_id"];
|
|
x["job_id"].set_valid(true);
|
|
x["email"] = in["email"];
|
|
x["email"].set_valid(true);
|
|
x["job_description"] = in["job_description"];
|
|
x["job_description"].set_valid(true);
|
|
x["offer_code"] = in["offer_code"];
|
|
x["offer_code"].set_valid(true);
|
|
|
|
const char * loc = getenv("REMOTE_ADDR");
|
|
x["loc"] = loc;
|
|
x["loc"].set_valid(true);
|
|
offer_id = insert_db_record(DBS_VALID, "members_jobs_offer", "members_jobs_offer_id_seq", x);
|
|
|
|
if (offer_id > 0) {
|
|
CVars y;
|
|
y["member_id"] = x["member_id"];
|
|
y["offer_id"] = offer_id;
|
|
y["code"] = "OFDPS";
|
|
y["dir"] = DIR_TARGET;
|
|
if (WrenchOfferPayment(y, out) == PHP_CREATED_OK) { // if you reserve pauments
|
|
char offer_code[15] = "";
|
|
GetOfferCode(offer_id, offer_code, sizeof (offer_code)); // this stamp the offer code directly in that call
|
|
|
|
pgsql_exec("UPDATE members_jobs_offer SET expire = now() + '1 day',payment_id=%lu WHERE id = %lu", out["payment_id"].Long(), offer_id); // date of expiration will be dynamic latter
|
|
|
|
ret = PHP_CREATED_OK;
|
|
x["offer_id"] = offer_id;
|
|
x["offer_id"].set_valid(true);
|
|
job_email(JOBS_INDIVIDUAL_OFFER_MAIL, x, out);
|
|
load_db_record(out, "SELECT *,id AS offer_id FROM members_jobs_offer WHERE id = %lu ", offer_id);
|
|
out["status"] = "Offer sent to recipient";
|
|
recommendation_engine(RECOMMEND_OFFERS , y, out); // trigger the card interaction in apps
|
|
|
|
if ( load_db_record(xy, "SELECT mj.client_id AS member_id, m.uid AS member_uid "
|
|
" FROM members_jobs_offer mj "
|
|
" LEFT JOIN members m ON m.id = mj.client_id "
|
|
" WHERE mj.id = %lu ",offer_id ) > 0 ){
|
|
xy["msg"] = "You have a task to start !";
|
|
xy["msg"].set_valid(true);
|
|
plan_notification(xy, xout);
|
|
}
|
|
|
|
|
|
} else {
|
|
out["error_msg"] = "error_unable_to_create_fund_for_task";
|
|
out["status"] = "Unable to create this offer";
|
|
}
|
|
} else {
|
|
out["status"] = "Unable to create offer";
|
|
}
|
|
|
|
} catch (bad_parameter) {
|
|
out["log_status"] = "Invalid Log Action";
|
|
}
|
|
|
|
logfmt(logINFO, "/WrenchSendJobsOfferFamily()");
|
|
return ret;
|
|
}
|
|
|
|
|
|
long WrenchSendJobsOfferIndividual(CVars in, CVars &out) {
|
|
long ret = PHP_API_BAD_PARAM;
|
|
logfmt(logINFO, "WrenchSendJobsOfferIndividual()");
|
|
REQ_LONG(in, "member_id", 1, -1);
|
|
REQ_LONG(in, "job_id", 1, -1);
|
|
REQ_STRING(in, "email", 1, 59, "(.*)");
|
|
REQ_STRING(in, "job_description", 1, 5500, "(.*)");
|
|
|
|
srand((unsigned) time(NULL));
|
|
int r = rand();
|
|
in["offer_code"] = 10000000 * r*r;
|
|
in["offer_code"].set_valid(true);
|
|
|
|
long offer_id = 0;
|
|
out = in;
|
|
|
|
in["client_id"] = "0";
|
|
CVars x;
|
|
CVars y;
|
|
CVars u;
|
|
CVars z;
|
|
|
|
try {
|
|
// let us use this email to see if this already a user on the system
|
|
if (load_db_record(out, " SELECT username,id AS client_id FROM members WHERE LOWER(username) =LOWER(TRIM('%s'));", in["email"].c_str())) {
|
|
in["client_id"] = out["client_id"]; // overiddind if account is found
|
|
if (out["client_id"].length() > 0) {
|
|
x["client_id"] = in["client_id"];
|
|
x["client_id"].set_valid(true);
|
|
}
|
|
}
|
|
// we need this job id
|
|
if (load_db_record(y, " SELECT * FROM members_jobs WHERE id =%lu", in["job_id"].Long())) {
|
|
// valid load of job needed
|
|
} else {
|
|
out["status_msg"] = "Job not found";
|
|
out["status"] = "Unable to create offer";
|
|
return ret;
|
|
}
|
|
|
|
load_db_record(u,"SELECT code AS currency FROM currency WHERE country = '%s'", y["country"].c_str() );
|
|
logfmt(logINFO, " The Currency code = %s", u["currency"].c_str());
|
|
long wallet_id = CheckWallet( in["member_id"].Long() , u);
|
|
logfmt(logINFO, " The wallet_id = %lu", wallet_id);
|
|
|
|
if (in["client_id"].Long() == in["member_id"].Long()) {
|
|
out["status_msg"] = "You cannot send job to yourself";
|
|
out["status"] = "Unable to create offer";
|
|
return ret;
|
|
} // same client and member not allowed
|
|
|
|
if (y["price"].Long() > 0) {
|
|
} else {
|
|
out["status_msg"] = "Price cannot be zero";
|
|
out["status"] = "Unable to create offer";
|
|
return ret;
|
|
} // no price zero for job on this path
|
|
|
|
// Now do you have money to do this ....
|
|
z["balance"] = "0";
|
|
z["balance"].set_valid(true); // just initialize it
|
|
if (load_db_record(z, " SELECT * FROM members_wallet WHERE id =%lu AND member_id =%lu AND amount >= %lu",wallet_id, in["member_id"].Long(), y["price"].Long())) {
|
|
|
|
} else {
|
|
out["status"] = "Insufficient balance to create this offer";
|
|
logfmt(logINFO, "Price2 = %lu Balance = %lu", y["price"].Long(), z["amount"].Long());
|
|
return ret;
|
|
}
|
|
|
|
|
|
// we re ready to create the offer now
|
|
x["member_id"] = in["member_id"];
|
|
x["member_id"].set_valid(true);
|
|
x["job_id"] = in["job_id"];
|
|
x["job_id"].set_valid(true);
|
|
x["email"] = in["email"];
|
|
x["email"].set_valid(true);
|
|
x["job_description"] = in["job_description"];
|
|
x["job_description"].set_valid(true);
|
|
x["offer_code"] = in["offer_code"];
|
|
x["offer_code"].set_valid(true);
|
|
|
|
const char * loc = getenv("REMOTE_ADDR");
|
|
x["loc"] = loc;
|
|
x["loc"].set_valid(true);
|
|
offer_id = insert_db_record(DBS_VALID, "members_jobs_offer", "members_jobs_offer_id_seq", x);
|
|
|
|
if (offer_id > 0) {
|
|
CVars y;
|
|
y["member_id"] = x["member_id"];
|
|
y["offer_id"] = offer_id;
|
|
y["code"] = "OFDPS";
|
|
y["dir"] = DIR_TARGET;
|
|
if (WrenchOfferPayment(y, out) == PHP_CREATED_OK) { // if you reserve pauments
|
|
char offer_code[15] = "";
|
|
GetOfferCode(offer_id, offer_code, sizeof (offer_code)); // this stamp the offer code directly in that call
|
|
|
|
pgsql_exec("UPDATE members_jobs_offer SET expire = now() + '1 day',payment_id=%lu WHERE id = %lu", out["payment_id"].Long(), offer_id); // date of expiration will be dynamic latter
|
|
|
|
ret = PHP_CREATED_OK;
|
|
x["offer_id"] = offer_id;
|
|
x["offer_id"].set_valid(true);
|
|
job_email(JOBS_INDIVIDUAL_OFFER_MAIL, x, out);
|
|
load_db_record(out, "SELECT *,id AS offer_id FROM members_jobs_offer WHERE id = %lu ", offer_id);
|
|
out["status"] = "Offer sent to recipient";
|
|
recommendation_engine(RECOMMEND_OFFERS , y, out); // trigger the card interaction in apps
|
|
CVars xy;
|
|
if ( load_db_record(xy, "SELECT id AS member_id, uid AS member_uid, 'alert.svg' AS icon "
|
|
" FROM members WHERE LOWER(username) = LOWER('%s') ",in["email"].c_str()) > 0 ){
|
|
xy["msg"] = "You have received a new offer !!!";
|
|
xy["msg"].set_valid(true);
|
|
plan_notification(xy, out);
|
|
}
|
|
} else {
|
|
out["error_msg"] = "error_unable_to_create_fund_for_task";
|
|
out["status"] = "Unable to create this offer";
|
|
}
|
|
|
|
} else {
|
|
out["status"] = "Unable to create offer";
|
|
}
|
|
|
|
} catch (bad_parameter) {
|
|
out["log_status"] = "Invalid Log Action";
|
|
}
|
|
|
|
logfmt(logINFO, "/WrenchSendJobsOfferIndividual()");
|
|
return ret;
|
|
}
|
|
|
|
long WrenchSendJobsOfferPublic(CVars in, CVars &out) {
|
|
logfmt(logINFO, "WrenchSendJobsOfferPublic()");
|
|
|
|
long ret = PHP_API_BAD_PARAM;
|
|
REQ_LONG(in, "member_id", 1, -1);
|
|
REQ_LONG(in, "job_id", 1, -1);
|
|
REQ_LONG(in, "duration", 1, -1);
|
|
//REQ_STRING (in, "email", 1, 59, "(.*)");
|
|
REQ_STRING(in, "job_description", 1, 5500, "(.*)");
|
|
|
|
srand((unsigned) time(NULL));
|
|
int r = rand();
|
|
in["offer_code"] = 10000000 * r*r;
|
|
|
|
long offer_id = 0;
|
|
out = in;
|
|
|
|
CVars x;
|
|
CVars y;
|
|
CVars z;
|
|
CVars u;
|
|
|
|
|
|
// we need this job id
|
|
if (load_db_record(y, " SELECT * FROM members_jobs WHERE id =%lu", in["job_id"].Long())) {
|
|
// valid load of job needed
|
|
} else {
|
|
out["status"] = "Unable to create offer";
|
|
return ret;
|
|
}
|
|
|
|
load_db_record(u,"SELECT code AS currency FROM currency WHERE country = '%s'", y["country"].c_str() );
|
|
logfmt(logINFO, " The Currency code = %s", u["currency"].c_str());
|
|
long wallet_id = CheckWallet( in["member_id"].Long() , u);
|
|
logfmt(logINFO, " The wallet_id = %lu", wallet_id);
|
|
|
|
if (y["price"].Long() > 0) {
|
|
} else {
|
|
out["status"] = "Unable to create offer";
|
|
return ret;
|
|
} // no price zero for job on this path
|
|
|
|
// Now do you have money to do this ....
|
|
z["balance"] = "0";
|
|
z["balance"].set_valid(true); // just initialize it
|
|
if (load_db_record(z, " SELECT * FROM members_wallet WHERE id =%lu AND member_id =%lu AND amount >= %lu",wallet_id, in["member_id"].Long(), y["price"].Long())) {
|
|
|
|
} else {
|
|
out["status"] = "Insufficient balance to create this offer";
|
|
logfmt(logINFO, "Price2 = %lu Balance = %lu", y["price"].Long(), z["amount"].Long());
|
|
}
|
|
|
|
if (y["price"].Long() >= z["amount"].Long()) {
|
|
out["status"] = "Insufficient balance to create this offer";
|
|
logfmt(logINFO, "Price = %lu Balance = %lu", y["price"].Long(), z["amount"].Long());
|
|
return ret;
|
|
}
|
|
|
|
logfmt(logINFO, "Price = %lu Balance = %lu", y["price"].Long(), z["amount"].Long());
|
|
|
|
try {
|
|
x["member_id"] = in["member_id"];
|
|
x["member_id"].set_valid(true);
|
|
x["job_id"] = in["job_id"];
|
|
x["job_id"].set_valid(true);
|
|
x["group_id"] = "0";
|
|
x["group_id"].set_valid(true);
|
|
x["client_id"] = "0";
|
|
x["client_id"].set_valid(true);
|
|
x["job_description"] = in["job_description"];
|
|
x["job_description"].set_valid(true);
|
|
x["offer_code"] = in["offer_code"];
|
|
x["offer_code"].set_valid(true);
|
|
|
|
x["depend_uid"] = in["depend_uid"];
|
|
x["depend_uid"].set_valid(true);
|
|
|
|
x["strict_timeline"] = in["strict_timeline"];
|
|
x["strict_timeline"].set_valid(true);
|
|
|
|
|
|
if ( x["depend_uid"] != ""){
|
|
logfmt(logINFO, "****** Let us confirm this job is in the market === > %s", x["depend_uid"].c_str());
|
|
|
|
const PGresult *resF = pgsql_query(" SELECT c.public_view,c.expire,c.job_id "
|
|
" FROM members_jobs_offer c "
|
|
" LEFT JOIN members_jobs j ON j.id = c.job_id "
|
|
" WHERE c.public_view = 1 and c.expire> now() AND j.uid::text ='%s' ", x["depend_uid"].c_str());
|
|
if (resF != NULL && pgsql_num_rows(resF) > 0) {
|
|
logfmt(logINFO, "ALL Good ****** Let us confirm this job is in the market === > %s", x["depend_uid"].c_str());
|
|
}
|
|
else{
|
|
out["status"] = "Depended task must be active in the market";
|
|
return ret;
|
|
}
|
|
}
|
|
|
|
|
|
const char * loc = getenv("REMOTE_ADDR");
|
|
x["loc"] = loc;
|
|
x["loc"].set_valid(true);
|
|
offer_id = insert_db_record(DBS_VALID, "members_jobs_offer", "members_jobs_offer_id_seq", x);
|
|
|
|
if (offer_id > 0) {
|
|
|
|
char offer_code[15] = "";
|
|
GetOfferCode(offer_id, offer_code, sizeof (offer_code)); // this stamp the offer code directly in that call
|
|
|
|
pgsql_exec("UPDATE members_jobs_offer SET expire = now() + '%lu day',public_view=1 WHERE id = %lu", in["duration"].Long(), offer_id);
|
|
|
|
ret = PHP_CREATED_OK;
|
|
x["offer_id"] = offer_id;
|
|
x["offer_id"].set_valid(true);
|
|
job_email(JOBS_GROUP_OFFER_PUBLIC, x, out);
|
|
load_db_record(out, "SELECT *,id AS offer_id FROM members_jobs_offer WHERE id = %lu ", offer_id);
|
|
out["status"] = "Offer sent to recipient";
|
|
} else {
|
|
out["status"] = "Unanble to create offer";
|
|
}
|
|
|
|
} catch (bad_parameter) {
|
|
out["log_status"] = "Invalid Log Action";
|
|
}
|
|
|
|
logfmt(logINFO, "/WrenchSendJobsOfferPublic()");
|
|
return ret;
|
|
}
|
|
|
|
long WrenchSendJobsOfferGroup(CVars in, CVars &out) {
|
|
logfmt(logINFO, "WrenchSendJobsOfferGroup()");
|
|
|
|
long ret = PHP_API_BAD_PARAM;
|
|
long sum_ret = 0;
|
|
|
|
REQ_LONG(in, "member_id", 1, -1);
|
|
REQ_LONG(in, "job_id", 1, -1);
|
|
REQ_LONG(in, "group_id", 1, -1);
|
|
//REQ_STRING (in, "email", 1, 59, "(.*)");
|
|
REQ_STRING(in, "job_description", 1, 5000, "(.*)");
|
|
long bypass = REQ_LONG(in, "bypass", 1, -1);
|
|
|
|
srand((unsigned) time(NULL));
|
|
int r = rand();
|
|
in["offer_code"] = 10000000 * r*r;
|
|
|
|
long offer_id = 0;
|
|
out = in;
|
|
CVars x;
|
|
CVars y;
|
|
CVars z;
|
|
CVars u;
|
|
|
|
long total_member = 0;
|
|
load_db_record(out, "SELECT count(id) AS m_count "
|
|
" FROM members_job_groupmember "
|
|
" WHERE group_id = %lu AND member_id= %lu", in["group_id"].Long(), in["member_id"].Long());
|
|
|
|
// valid load of job needed
|
|
total_member = out["m_count"].Long() + 0;
|
|
if (total_member == 0) {
|
|
out["status"] = "Empty members in group";
|
|
out["status_message"] = "cannot_send_offer_to_empty_group";
|
|
return ret;
|
|
}
|
|
|
|
// we need this job id
|
|
// make sure job is valid
|
|
if (load_db_record(y, " SELECT * FROM members_jobs "
|
|
" WHERE id =%lu AND status = 1", in["job_id"].Long())) {
|
|
// valid load of job needed
|
|
} else {
|
|
out["status"] = "Unable to create offer";
|
|
out["status_message"] = "cannot_find_valid_offer";
|
|
return ret;
|
|
}
|
|
|
|
load_db_record(u,"SELECT code AS currency FROM currency WHERE country = '%s'", y["country"].c_str() );
|
|
logfmt(logINFO, " The Currency code = %s", u["currency"].c_str());
|
|
long wallet_id = CheckWallet( in["member_id"].Long() , u);
|
|
logfmt(logINFO, " The wallet_id = %lu", wallet_id);
|
|
|
|
if (y["price"].Long() > 0) {
|
|
} else {
|
|
out["status"] = "Unable to create offer";
|
|
return ret;
|
|
} // no price zero for job on this path
|
|
|
|
// Now do you have money to do this ....
|
|
z["balance"] = "0";
|
|
z["balance"].set_valid(true); // just initialize it
|
|
if (load_db_record(z, " SELECT * FROM members_wallet WHERE id =%lu "
|
|
" AND member_id =%lu AND amount >= %lu",wallet_id, in["member_id"].Long(), y["price"].Long())) {
|
|
|
|
} else {
|
|
out["status"] = "Insufficient balance to create this offer";
|
|
logfmt(logINFO, "Price2 = %lu Balance = %lu", y["price"].Long(), z["balance"].Long());
|
|
}
|
|
|
|
if (y["price"].Long() >= z["amount"].Long()) {
|
|
out["status"] = "Insufficient balance to create this offer";
|
|
logfmt(logINFO, "Price = %lu Balance = %lu", y["price"].Long(), z["balance"].Long());
|
|
return ret;
|
|
}
|
|
|
|
logfmt(logINFO, "Price = %lu Balance = %lu", y["price"].Long() * total_member, z["amount"].Long());
|
|
|
|
if (total_member > 2 && bypass == 0 ){
|
|
// REQ_LONG(in, "member_id", 1, -1);
|
|
// REQ_LONG(in, "job_id", 1, -1);
|
|
// REQ_LONG(in, "group_id", 1, -1);
|
|
// //REQ_STRING (in, "email", 1, 59, "(.*)");
|
|
// REQ_STRING(in, "job_description", 1, 5000, "(.*)");
|
|
CVars jj;
|
|
jj["member_id"] = in["member_id"]; jj["member_id"].set_valid( true );
|
|
jj["job_id"] = in["job_id"]; jj["job_id"].set_valid( true );
|
|
jj["group_id"] = in["group_id"]; jj["group_id"].set_valid( true );
|
|
jj["job_description"] = in["job_description"]; jj["job_description"].set_valid( true );
|
|
jj["total_member"] = total_member; jj["total_member"].set_valid( true );
|
|
out["planned_offer_id"] = insert_db_record(DBS_VALID, "group_offer_schedule", "group_offer_schedule_id_seq", jj);
|
|
|
|
out["status_msg"] = "Offer is scheduled to be sent in few minutes";
|
|
ret = PHP_CREATED_OK;
|
|
return ret;
|
|
}
|
|
|
|
|
|
try {
|
|
const PGresult *res = pgsql_query("SELECT email FROM members_job_groupmember "
|
|
" WHERE group_id = %lu "
|
|
" AND member_id = %lu "
|
|
" AND status=1", in["group_id"].Long(), in["member_id"].Long());
|
|
if (res != NULL && pgsql_num_rows(res) > 0) {
|
|
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);
|
|
|
|
rec["job_id"] = in["job_id"];
|
|
rec["job_id"].set_valid(true);
|
|
rec["job_description"] = in["job_description"];
|
|
rec["job_description"].set_valid(true);
|
|
rec["member_id"] = in["member_id"];
|
|
rec["member_id"].set_valid(true);
|
|
long call_ret = WrenchSendJobsOfferIndividual(rec, out);
|
|
sum_ret = sum_ret + call_ret; // a way to know all came back positive
|
|
if (call_ret == PHP_CREATED_OK) {
|
|
ret = PHP_CREATED_OK;
|
|
}
|
|
}
|
|
|
|
if (ret == PHP_CREATED_OK && sum_ret == 0 ) {
|
|
out["status_msg"] = "Completed";
|
|
ret = PHP_CREATED_OK;
|
|
}
|
|
else{
|
|
out["status_msg"] = "Completed";
|
|
ret = sum_ret;
|
|
}
|
|
|
|
}
|
|
} catch (bad_parameter) {
|
|
out["log_status"] = "Invalid Log Action";
|
|
}
|
|
|
|
logfmt(logINFO, "/WrenchSendJobsOfferGroup()");
|
|
return ret;
|
|
}
|
|
|
|
long WrenchJobsGroupList(CVars in, CVars &out) {
|
|
long ret = PHP_API_BAD_PARAM;
|
|
char vname[30];
|
|
CVars rec;
|
|
out = in;
|
|
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);
|
|
|
|
const PGresult *res = pgsql_query("SELECT * FROM members_job_group "
|
|
" WHERE member_id= %lu AND status = 1 "
|
|
" ORDER BY group_name ASC",member_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;
|
|
map_to_cvars(f, rec);
|
|
snprintf(vname, sizeof (vname), "group_uid_%05d", i);
|
|
out[vname] = rec["uid"];
|
|
|
|
snprintf(vname, sizeof (vname), "group_id_%05d", i);
|
|
out[vname] = rec["id"];
|
|
|
|
snprintf(vname, sizeof (vname), "group_name_%05d", i);
|
|
out[vname] = rec["group_name"];
|
|
}
|
|
|
|
}
|
|
|
|
const PGresult *res1 = pgsql_query("SELECT * FROM members_job_groupmember "
|
|
" WHERE member_id= %lu AND status =1",member_id);
|
|
if (res1 != NULL && pgsql_num_rows(res1) > 0) {
|
|
out["gm_total_record"] = pgsql_num_rows(res1);
|
|
for (int i = 0, n = pgsql_num_rows(res1); i < n; i++) {
|
|
map<const char*, const char*>f = pgsql_fetch_assoc(res1, i);
|
|
if (f.empty()) continue;
|
|
map_to_cvars(f, rec);
|
|
snprintf(vname, sizeof (vname), "gm_uid_%05d", i);
|
|
out[vname] = rec["uid"];
|
|
|
|
snprintf(vname, sizeof (vname), "gm_group_id_%05d", i);
|
|
out[vname] = rec["group_id"];
|
|
|
|
snprintf(vname, sizeof (vname), "gm_firstname_%05d", i);
|
|
out[vname] = rec["firstname"];
|
|
|
|
snprintf(vname, sizeof (vname), "gm_lastname_%05d", i);
|
|
out[vname] = rec["lastname"];
|
|
|
|
snprintf(vname, sizeof (vname), "gm_email_%05d", i);
|
|
out[vname] = rec["email"];
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
wrenchboard=> SELECT group_id,count(id) FROM members_job_groupmember WHERE member_id = 1 GROUP BY group_id;
|
|
group_id | count
|
|
----------+-------
|
|
10 | 1
|
|
1 | 1
|
|
4 | 1
|
|
(3 rows)
|
|
|
|
wrenchboard=>
|
|
*/
|
|
|
|
const PGresult *res2 = pgsql_query("SELECT group_id,count(id) AS group_count "
|
|
" FROM members_job_groupmember WHERE member_id = %lu GROUP BY group_id",member_id);
|
|
if (res2 != NULL && pgsql_num_rows(res2) > 0) {
|
|
for (int i = 0, n = pgsql_num_rows(res2); i < n; i++) {
|
|
map<const char*, const char*>f = pgsql_fetch_assoc(res2, i);
|
|
if (f.empty()) continue;
|
|
map_to_cvars(f, rec);
|
|
|
|
snprintf(vname, sizeof (vname), "group_count_id_%d", rec["group_id"].Long());
|
|
out[vname] = rec["group_count"];
|
|
}
|
|
}
|
|
|
|
ret = PHP_API_OK;
|
|
|
|
} catch (bad_parameter) {
|
|
out["log_status"] = "Error WrenchJobsGroupList";
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
|
|
|
|
long WrenchDeleteJobsGroup(CVars in, CVars &out) {
|
|
long ret = PHP_API_BAD_PARAM;
|
|
try {
|
|
REQ_LONG(in, "member_id", 1, -1);
|
|
REQ_LONG(in, "group_id", 1, -1);
|
|
pgsql_exec("UPDATE members_job_group SET status = 0 WHERE status = 1 AND member_id = %lu AND id = %lu", in["member_id"].Long(), in["group_id"].Long());
|
|
ret = PHP_CREATED_OK;
|
|
out["result"] = "OK";
|
|
|
|
//#include "common_tool.h"
|
|
CVars xx, yy;
|
|
xx["member_id"] = in["member_id"]; xx["member_id"].set_valid( true );
|
|
xx["title"] = "A job was deleted"; xx["title"].set_valid( true );
|
|
xx["description"] = "A job was deleted"; xx["description"].set_valid( true );
|
|
WrenchLogRecent(xx, yy);
|
|
|
|
} catch (bad_parameter) {
|
|
out["log_status"] = "Invalid Log Action";
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
long WrenchDeleteJobsGroupMember(CVars in, CVars &out) {
|
|
long ret = PHP_API_BAD_PARAM;
|
|
try {
|
|
REQ_LONG(in, "member_id", 1, -1);
|
|
REQ_LONG(in, "group_id", 1, -1);
|
|
REQ_LONG(in, "group_member_id", 1, -1);
|
|
|
|
pgsql_exec("UPDATE members_job_groupmember SET status = 0 WHERE status = 1 AND member_id = %lu AND group_id = %lu AND id = %lu", in["member_id"].Long(), in["group_id"].Long(), in["group_member_id"].Long());
|
|
ret = PHP_CREATED_OK;
|
|
out["result"] = "OK";
|
|
} catch (bad_parameter) {
|
|
out["log_status"] = "Invalid Log Action";
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
long WrenchCreateJobsGroup(CVars in, CVars &out) {
|
|
long ret = PHP_API_BAD_PARAM;
|
|
logfmt(logINFO, "WrenchCreateJobsGroup()");
|
|
ULONG group_id = 0;
|
|
REQ_LONG(in, "member_id", 1, -1);
|
|
REQ_STRING(in, "group_name", 1, 29, "(.*)");
|
|
|
|
CVars x;
|
|
|
|
try {
|
|
if (load_db_record(out, "SELECT count(id) AS duplicate_name FROM members_job_group WHERE LOWER(group_name)=LOWER('%s') AND member_id =%lu AND status = 1", in["group_name"].c_str(), in["member_id"].Long())) {
|
|
if (out["duplicate_name"].Long() > 0) {
|
|
out["error_status_message"] = "Duplicate Name";
|
|
return PHP_API_BAD_PARAM;
|
|
} // return no duplicate on any active name
|
|
} // this action blocks out duplicate
|
|
|
|
x["member_id"] = in["member_id"];
|
|
x["member_id"].set_valid(true);
|
|
x["group_name"] = in["group_name"];
|
|
x["group_name"].set_valid(true);
|
|
const char * loc = getenv("REMOTE_ADDR");
|
|
x["loc"] = loc;
|
|
x["loc"].set_valid(true);
|
|
group_id = insert_db_record(DBS_VALID, "members_job_group", "members_job_group_id_seq", x);
|
|
|
|
if (group_id > 0) {
|
|
ret = PHP_CREATED_OK;
|
|
x["group_id"] = group_id;
|
|
x["group_id"].set_valid(true);
|
|
//JobAddedMail(x);
|
|
load_db_record(out, "SELECT *,id AS group_id FROM members_job_group WHERE id = %lu ", group_id);
|
|
} else {
|
|
out["status"] = "Unable to create job group";
|
|
}
|
|
|
|
} catch (bad_parameter) {
|
|
out["log_status"] = "Invalid Log Action";
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
long WrenchAddJobsGroupMember(CVars in, CVars &out) {
|
|
long ret = PHP_API_BAD_PARAM;
|
|
logfmt(logINFO, "WrenchAddJobsGroupMember()");
|
|
ULONG group_member_id = 0;
|
|
REQ_LONG(in, "group_id", 1, -1);
|
|
REQ_LONG(in, "member_id", 1, -1);
|
|
REQ_STRING(in, "firstname", 1, 29, "(.*)");
|
|
REQ_STRING(in, "lastname", 1, 29, "(.*)");
|
|
REQ_STRING(in, "email", 1, 149, "(.*)");
|
|
|
|
CVars x;
|
|
|
|
try {
|
|
x["member_id"] = in["member_id"];
|
|
x["member_id"].set_valid(true);
|
|
x["group_id"] = in["group_id"];
|
|
x["group_id"].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);
|
|
|
|
const char * loc = getenv("REMOTE_ADDR");
|
|
x["loc"] = loc;
|
|
x["loc"].set_valid(true);
|
|
group_member_id = insert_db_record(DBS_VALID, "members_job_groupmember", "members_job_groupmember_id_seq", x);
|
|
|
|
if (group_member_id > 0) {
|
|
ret = PHP_CREATED_OK;
|
|
x["group_member_id"] = group_member_id;
|
|
x["group_member_id"].set_valid(true);
|
|
//JobAddedMail(x);
|
|
load_db_record(out, "SELECT *,id AS group_member_id FROM members_job_groupmember WHERE id = %lu AND member_id = %lu ", group_member_id, in["member_id"].Long());
|
|
} else {
|
|
out["status"] = "Uanble to create job group member";
|
|
}
|
|
|
|
} catch (bad_parameter) {
|
|
out["log_status"] = "Invalid Log Action";
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
long WrenchDeleteJobs(CVars in, CVars &out) {
|
|
long ret = PHP_API_BAD_PARAM;
|
|
long member_id = REQ_LONG(in, "member_id", 1, -1);
|
|
long job_id = REQ_LONG(in, "job_id", 1, -1);
|
|
REQ_STRING(in, "job_uid", 15, 149, "(.*)");
|
|
|
|
const PGresult *res = pgsql_query("SELECT *,id AS job_id FROM members_jobs WHERE id = %lu AND member_id = %lu AND uid='%s'", job_id, member_id,in["job_uid"].c_str());
|
|
if (res != NULL && pgsql_num_rows(res) > 0) {
|
|
pgsql_exec("UPDATE members_jobs SET status = 0 WHERE status = 1 AND id = %lu AND member_id = %lu AND uid='%s'", job_id, member_id,in["job_uid"].c_str());
|
|
ret = PHP_CREATED_OK;
|
|
out["status"] = "Job/Task Deleted";
|
|
} else {
|
|
out["status"] = "Valid Job/Task Not Found";
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
long WrenchCreateJobs(CVars in, CVars &out) {
|
|
long ret = PHP_API_BAD_PARAM;
|
|
logfmt(logINFO, "WrenchCreateJobs()");
|
|
ULONG job_id = 0;
|
|
|
|
REQ_LONG(in, "member_id", 1, -1);
|
|
REQ_LONG(in, "price", 1, -1);
|
|
REQ_LONG(in, "timeline_days", 1, -1);
|
|
REQ_STRING(in, "title", 5, 149, "(.*)");
|
|
REQ_STRING(in, "country", 2, 3, "(.*)");
|
|
REQ_STRING(in, "description", 5, 299, "(.*)");
|
|
REQ_STRING (in, "job_detail", 4, 1440, "(.*)");
|
|
const char * loc = getenv("REMOTE_ADDR");
|
|
in["loc"] = loc;
|
|
in["loc"].set_valid(true);
|
|
|
|
if (in["price"].Long()<=0){
|
|
out["status"] = "Unable to create job, price cannot be zero";
|
|
return ret;
|
|
}
|
|
|
|
CVars x;
|
|
x["member_id"] = in["member_id"];
|
|
x["member_id"].set_valid(true);
|
|
x["title"] = in["title"];
|
|
x["title"].set_valid(true);
|
|
x["price"] = in["price"];
|
|
x["price"].set_valid(true);
|
|
x["timeline_days"] = in["timeline_days"];
|
|
x["timeline_days"].set_valid(true);
|
|
x["description"] = in["description"];
|
|
x["description"].set_valid(true);
|
|
x["loc"] = in["loc"];
|
|
x["loc"].set_valid(true);
|
|
x["job_detail"] = in["job_detail"];
|
|
x["job_detail"].set_valid(true);
|
|
//country added
|
|
x["country"] = in["country"];
|
|
x["country"].set_valid(true);
|
|
|
|
x["category"] = in["category"];
|
|
x["category"].set_valid(true);
|
|
|
|
x["banner"] = in["banner"];
|
|
x["banner"].set_valid(true);
|
|
|
|
x["depend_uid"] = in["depend_uid"];
|
|
x["depend_uid"].set_valid(true);
|
|
|
|
job_id = insert_db_record(DBS_VALID, "members_jobs", "members_jobs_id_seq", x);
|
|
|
|
if (job_id) {
|
|
ret = PHP_CREATED_OK;
|
|
x["job_id"] = job_id;
|
|
x["job_id"].set_valid(true);
|
|
JobAddedMail(x);
|
|
load_db_record(out, "SELECT *,id AS job_id, uid AS job_uid FROM members_jobs WHERE id = %lu ", job_id);
|
|
|
|
CVars xxx, yy;
|
|
xxx["member_id"] = in["member_id"]; xxx["member_id"].set_valid( true );
|
|
xxx["title"] = "A job was created"; xxx["title"].set_valid( true );
|
|
xxx["description"] = "Added a new job"; xxx["description"].set_valid( true );
|
|
WrenchLogRecent(xxx, yy);
|
|
|
|
} else {
|
|
out["status"] = "Unable to create job";
|
|
}
|
|
|
|
logfmt(logINFO, "/WrenchCreateJobs()");
|
|
return ret;
|
|
}
|
|
|
|
long WrenchEditJobs(CVars in, CVars &out) {
|
|
logfmt(logINFO, "WrenchEditJobs()");
|
|
|
|
long ret = PHP_API_BAD_PARAM;
|
|
ULONG job_id = 0;
|
|
|
|
long member_id = REQ_LONG(in, "member_id", 1, -1);
|
|
job_id = REQ_LONG(in, "job_id", 1, -1);
|
|
REQ_STRING(in, "job_uid", 15, 149, "(.*)");
|
|
REQ_LONG(in, "timeline_days", 1, -1);
|
|
REQ_STRING(in, "title", 5, 149, "(.*)");
|
|
REQ_STRING(in, "description", 5, 299, "(.*)");
|
|
REQ_STRING (in, "job_detail", 4, 1440, "(.*)");
|
|
const char * loc = getenv("REMOTE_ADDR");
|
|
in["loc"] = loc;
|
|
in["loc"].set_valid(true);
|
|
|
|
if (in["price"].Long()<=0){
|
|
out["status"] = "Unable to update job, price cannot be zero";
|
|
return ret;
|
|
}
|
|
|
|
const PGresult *res = pgsql_query("SELECT *,id AS job_id FROM members_jobs WHERE id = %lu AND member_id = %lu AND uid='%s'", job_id, member_id,in["job_uid"].c_str());
|
|
if (res != NULL && pgsql_num_rows(res) > 0) {
|
|
// good to continue
|
|
map<const char*, const char*>f = pgsql_fetch_assoc(res, 0);
|
|
if (!f.empty()) {
|
|
CVars rec;
|
|
map_to_cvars(f, rec);
|
|
job_id = rec["job_id"];
|
|
}
|
|
} else {
|
|
out["status"] = "Valid Job/Task Not Found";
|
|
return ret;
|
|
}
|
|
|
|
|
|
CVars x;
|
|
x["title"] = in["title"];
|
|
x["title"].set_valid(true);
|
|
x["price"] = in["price"];
|
|
x["price"].set_valid(true);
|
|
x["timeline_days"] = in["timeline_days"];
|
|
x["timeline_days"].set_valid(true);
|
|
x["description"] = in["description"];
|
|
x["description"].set_valid(true);
|
|
x["loc"] = in["loc"];
|
|
x["loc"].set_valid(true);
|
|
x["job_detail"] = in["job_detail"];
|
|
x["job_detail"].set_valid(true);
|
|
|
|
x["category"] = in["category"];
|
|
x["category"].set_valid(true);
|
|
|
|
if ( in["banner"] != ""){
|
|
x["banner"] = in["banner"];
|
|
x["banner"].set_valid(true);
|
|
}
|
|
|
|
// job_id = insert_db_record(DBS_VALID, "members_jobs", "members_jobs_id_seq", x);
|
|
|
|
if (job_id> 0) {
|
|
update_db_record(DBS_VALID, "members_jobs", x, job_id) ;
|
|
load_db_record(out, "SELECT *,id AS job_id FROM members_jobs WHERE id = %lu ", job_id);
|
|
ret = PHP_UPDATED_OK;
|
|
|
|
CVars xxx, yy;
|
|
xxx["member_id"] = in["member_id"]; xxx["member_id"].set_valid( true );
|
|
xxx["title"] = "A job was updated"; xxx["title"].set_valid( true );
|
|
xxx["description"] = "A job was updated"; xxx["description"].set_valid( true );
|
|
WrenchLogRecent(xxx, yy);
|
|
|
|
} else {
|
|
out["status"] = "Unable to create job";
|
|
}
|
|
logfmt(logINFO, "/WrenchEditJobs()");
|
|
return ret;
|
|
}
|
|
|
|
//******************************************************************************
|
|
/*
|
|
vi:ts=2
|
|
*/
|
|
|