diff --git a/wrenchboard/src/include/wrenchboard_api.h b/wrenchboard/src/include/wrenchboard_api.h index be3d719b..f232e619 100644 --- a/wrenchboard/src/include/wrenchboard_api.h +++ b/wrenchboard/src/include/wrenchboard_api.h @@ -43,6 +43,8 @@ enum { PARTNER_STRIPE }; #define LOGIN_MODE_FAMILY 1105 #define ASSIGN_MODE_FAMILY 110011 +#define ASSIGN_MODE_MEDIA_FAMILY 110012 + #define ASSIGN_MODE_INDIVIDUAL 110022 #define ASSIGN_MODE_EMAIL 110033 #define ASSIGN_MODE_GROUP 110044 diff --git a/wrenchboard/src/shared_tool/jobs.cc b/wrenchboard/src/shared_tool/jobs.cc index c2fdb0b4..c189d92d 100644 --- a/wrenchboard/src/shared_tool/jobs.cc +++ b/wrenchboard/src/shared_tool/jobs.cc @@ -28,6 +28,7 @@ long WrenchJobPostNotifyOffer(CVars in, CVars &out); long WrenchJobPostCancelOffer(CVars in, CVars &out); long WrenchJobOfferSystems(CVars in, CVars &out); long WrenchSendJobsOfferFamily(CVars in, CVars &out); +long WrenchSendMediaOfferFamily(CVars in, CVars &out); long WrenchSendJobsOfferCreateAssign(CVars in, CVars &out); long WrenchJobsOfferInterestList(CVars in, CVars &out); long WrenchUserJobsInterestList(CVars in, CVars &out); @@ -176,6 +177,10 @@ long WrenchJobOfferSystems(CVars in, CVars &out){ 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); @@ -1191,6 +1196,192 @@ long WrenchConcludeJobsOffer(CVars in, CVars &out) { return ret; } +long WrenchSendMediaOfferFamily(CVars in, CVars &out) { + logfmt(logINFO, "ENTER WrenchJobOfferSystems()->WrenchSendMediaOfferFamily"); +/* +'member_id' => int 1 + 'sessionid' => string '625EECF44B88FFC527E598B48C1A5110830D5964B4DC9DB2AD9EBEB5609BC9BF' (length=64) + 'uid' => string '3119b744-42ad-4834-bb83-b737588754ca' (length=36) + 'media_uid' => string '04cd4af1-d761-4507-b2b6-f56e24e676e1' (length=36) + 'family_uid' => string 'a24f1193-7885-4c26-afac-3e5ad744ef40' (length=36) + 'amount' => int 37600 + 'currency' => string 'NGN' (length=3) + 'media_type' => string 'COMMON' (length=6) + 'job_description' => string 'Delivery detail will gp here any deliver details will go here ,Delivery detail will gp here any deliver details will go here ' (length=126) + 'action' => int 13025 + 'assign_mode' => int 110012 +*/ + 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_STRING(in, "currency", 2, 4, "(.*)"); + + 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, "/WrenchSendMediaOfferFamily()"); + return ret; +} + + + long WrenchSendJobsOfferFamily(CVars in, CVars &out) { long ret = PHP_API_BAD_PARAM; logfmt(logINFO, "WrenchSendJobsOfferFamily()");