#include "clog.h" #include "cgi.h" #include "input.h" #include "wrenchboard_api.h" #include "reco_engine.h" //error in file name #include "email.h" #include "safestring.h" #include #include "pgsql.h" #include "pgsql_wrapper.h" #include #include "account.h" #include "cards.h" #include "twilo.h" #include "mobile.h" #include "jobs_manager.h" /* $mysql2 = "SELECT jo.added::date AS start_job_date, jo.expire::date AS end_job_date, j.title, (CASE WHEN jo.public_view > 0 THEN '-Public View' ELSE jo.email END) AS job_to,jo.offer_code AS offer_code," . "'' AS View " . "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.member_id = " . $_SESSION['member_id'] . " ORDER BY jo.id DESC LIMIT 400"; $query2 = $this->db->query($mysql2); $data['offer_dash_rows'] = $query2->result(); wrenchboard=> \d members_jobs_offer Table "public.members_jobs_offer" Column | Type | Collation | Nullable | Default -----------------+-----------------------------+-----------+----------+------------------------------------------------ id | integer | | not null | nextval('members_jobs_offer_id_seq'::regclass) offer_code | character varying(15) | | not null | member_id | integer | | | client_id | integer | | | 0 group_id | integer | | | 0 job_id | integer | | | email | character varying(50) | | | job_description | text | | | status | integer | | | 1 sent_count | integer | | | 0 loc | inet | | | expire | timestamp without time zone | | | added | timestamp without time zone | | | now() payment_id | integer | | | public_view | integer | | | 0 auto_close | timestamp without time zone | | | reminder_count | integer | | | 0 reminder_date | timestamp without time zone | | | uid | uuid | | | Indexes: "members_jobs_offer_id_key" UNIQUE CONSTRAINT, btree (id) "members_jobs_offer_offer_code_key" UNIQUE CONSTRAINT, btree (offer_code) Foreign-key constraints: "members_jobs_offer_job_id_fkey" FOREIGN KEY (job_id) REFERENCES members_jobs(id) "members_jobs_offer_member_id_fkey" FOREIGN KEY (member_id) REFERENCES members(id) "members_jobs_offer_payment_id_fkey" FOREIGN KEY (payment_id) REFERENCES members_payments(id) Referenced by: TABLE "members_offer_interest" CONSTRAINT "members_offer_interest_offer_id_fkey" FOREIGN KEY (offer_id) REFERENCES members_jobs_offer(id) TABLE "members_payments" CONSTRAINT "members_payments_what_offer_fkey" FOREIGN KEY (what_offer) REFERENCES members_jobs_offer(id) */ long WrenchJobManagerOffers( CVars in, CVars &out){ logfmt(logINFO, "ENTER CALL long WrenchJobManagerOffers"); char vname[30]; long ret = PHP_API_BAD_PARAM; const char * loc = getenv("REMOTE_ADDR"); const PGresult *res; try{ long member_id = REQ_LONG(in, "member_id", 1, -1); long offset = REQ_LONG(in, "offset", 1, -1); long limit = REQ_LONG(in, "limit", 1, -1); out["total_record"] = "0"; res = pgsql_query("SELECT id FROM members_jobs_offer WHERE member_id = %lu AND status=1 AND expire > now() ", in["member_id"].Long()); out["total_record"] = pgsql_num_rows(res); res = pgsql_query(" SELECT j.id AS job_id,jo.expire,jo.public_view, j.*,jo.uid AS offer_uid,jo.offer_code AS offer_code, " " (CASE WHEN jo.public_view > 0 THEN 'public' ELSE jo.email END) AS job_to, " " c.code AS currency_code, c.description AS currency_description,j.country,mf.uid AS family_uid, j.banner AS banner " " FROM members_jobs_offer jo " " LEFT JOIN members_jobs j ON j.id = jo.job_id " " LEFT JOIN currency c ON c.country=j.country " " LEFT JOIN members_family mf ON mf.family_member_id = jo.client_id " " WHERE jo.expire > now() AND jo.status = 1 AND jo.member_id = %lu AND jo.status=1 " " ORDER BY jo.id DESC LIMIT %lu OFFSET %lu", in["member_id"].Long(), limit, offset); if (res != NULL && pgsql_num_rows(res) > 0) { out["total_record"] = pgsql_num_rows(res); for (int i = 0, n = pgsql_num_rows(res); i < n; i++) { mapf = pgsql_fetch_assoc(res, i); if (f.empty()) continue; CVars rec; map_to_cvars(f, rec); snprintf(vname, sizeof (vname), "banner_%05d", i); out[vname] = rec["banner"]; snprintf(vname, sizeof (vname), "job_id_%05d", i); out[vname] = rec["job_id"]; 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_detail_%05d", i); out[vname] = rec["job_detail"]; snprintf(vname, sizeof (vname), "family_uid_%05d", i); out[vname] = rec["family_uid"]; snprintf(vname, sizeof (vname), "timeline_days_%05d", i); out[vname] = rec["timeline_days"]; snprintf(vname, sizeof (vname), "price_%05d", i); out[vname] = rec["price"]; snprintf(vname, sizeof (vname), "country_%05d", i); out[vname] = rec["country"]; snprintf(vname, sizeof (vname), "job_uid_%05d", i); out[vname] = rec["uid"]; snprintf(vname, sizeof (vname), "expire_%05d", i); out[vname] = rec["expire"]; snprintf(vname, sizeof (vname), "offer_uid_%05d", i); out[vname] = rec["offer_uid"]; snprintf(vname, sizeof (vname), "job_to_%05d", i); out[vname] = rec["job_to"]; snprintf(vname, sizeof (vname), "public_view_%05d", i); out[vname] = rec["public_view"]; // snprintf(vname, sizeof (vname), "offer_code_%05d", i); out[vname] = rec["offer_code"]; snprintf(vname, sizeof (vname), "job_country_%05d", i); out[vname] = rec["job_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_API_OK; out["status"] = "OK"; /* wrenchboard=> \d members_jobs Table "public.members_jobs" Column | Type | Collation | Nullable | Default ---------------+-----------------------------+-----------+----------+------------------------------------------ id | integer | | not null | nextval('members_jobs_id_seq'::regclass) member_id | integer | | | title | character varying(150) | | | description | character varying(300) | | | job_detail | text | | | timeline_days | integer | | not null | price | integer | | not null | loc | inet | | | created | timestamp without time zone | | | now() updated | timestamp without time zone | | | now() status | integer | | | 1 country | character varying(2) | | | uid | uuid | | | uuid_generate_v4() Indexes: "members_jobs_id_key" UNIQUE CONSTRAINT, btree (id) Foreign-key constraints: "members_jobs_country_fkey" FOREIGN KEY (country) REFERENCES country(code) "members_jobs_member_id_fkey" FOREIGN KEY (member_id) REFERENCES members(id) Referenced by: TABLE "members_jobs_offer" CONSTRAINT "members_jobs_offer_job_id_fkey" FOREIGN KEY (job_id) REFERENCES members_jobs(id) wrenchboard=> */ } catch (bad_parameter) { logfmt(logINFO, "ERROR CALL long WrenchJobManagerOffers"); } return 0; } long WrenchJobManagerList( CVars in, CVars &out){ logfmt(logINFO, "ENTER CALL long WrenchJobManagerList"); char vname[30]; long ret = PHP_API_BAD_PARAM; const char * loc = getenv("REMOTE_ADDR"); const PGresult *res; try{ long member_id = REQ_LONG(in, "member_id", 1, -1); long offset = REQ_LONG(in, "offset", 1, -1); long limit = REQ_LONG(in, "limit", 1, -1); out["total_record"] = "0"; res = pgsql_query("SELECT id FROM members_jobs WHERE member_id = %lu AND status=1 ORDER BY id DESC", in["member_id"].Long()); out["total_record"] = pgsql_num_rows(res); res = pgsql_query("SELECT j.id AS job_id, j.*,c.code AS currency_code, c.description AS currency_description,j.created AS job_create_date " " FROM members_jobs j " " LEFT JOIN currency c ON c.country=j.country " " WHERE j.member_id = %lu AND j.status=1 " " ORDER BY j.id DESC LIMIT %lu OFFSET %lu", in["member_id"].Long(), limit, offset); if (res != NULL && pgsql_num_rows(res) > 0) { out["total_record"] = pgsql_num_rows(res); for (int i = 0, n = pgsql_num_rows(res); i < n; i++) { mapf = pgsql_fetch_assoc(res, i); if (f.empty()) continue; CVars rec; map_to_cvars(f, rec); snprintf(vname, sizeof (vname), "id_%05d", i); out[vname] = rec["id"]; snprintf(vname, sizeof (vname), "job_id_%05d", i); out[vname] = rec["job_id"]; 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_detail_%05d", i); out[vname] = rec["job_detail"]; snprintf(vname, sizeof (vname), "timeline_days_%05d", i); out[vname] = rec["timeline_days"]; snprintf(vname, sizeof (vname), "price_%05d", i); out[vname] = rec["price"]; snprintf(vname, sizeof (vname), "country_%05d", i); out[vname] = rec["country"]; 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"]; snprintf(vname, sizeof (vname), "category_%05d", i); out[vname] = rec["category"]; snprintf(vname, sizeof (vname), "banner_%05d", i); out[vname] = rec["banner"]; snprintf(vname, sizeof (vname), "job_uid_%05d", i); out[vname] = rec["uid"]; snprintf(vname, sizeof (vname), "created_%05d", i); out[vname] = rec["job_create_date"]; } } ret = PHP_API_OK; out["status"] = "OK"; /* 'job_country' => $out["job_country_${key}"], 'currency' => 'Naira', 'currency_code' => 'NGN', c.description AS currency_description wrenchboard=> \d members_jobs Table "public.members_jobs" Column | Type | Collation | Nullable | Default ---------------+-----------------------------+-----------+----------+------------------------------------------ id | integer | | not null | nextval('members_jobs_id_seq'::regclass) member_id | integer | | | title | character varying(150) | | | description | character varying(300) | | | job_detail | text | | | timeline_days | integer | | not null | price | integer | | not null | loc | inet | | | created | timestamp without time zone | | | now() updated | timestamp without time zone | | | now() status | integer | | | 1 country | character varying(2) | | | uid | uuid | | | uuid_generate_v4() Indexes: "members_jobs_id_key" UNIQUE CONSTRAINT, btree (id) Foreign-key constraints: "members_jobs_country_fkey" FOREIGN KEY (country) REFERENCES country(code) "members_jobs_member_id_fkey" FOREIGN KEY (member_id) REFERENCES members(id) Referenced by: TABLE "members_jobs_offer" CONSTRAINT "members_jobs_offer_job_id_fkey" FOREIGN KEY (job_id) REFERENCES members_jobs(id) wrenchboard=> */ } catch (bad_parameter) { logfmt(logINFO, "ERROR CALL long WrenchJobManagerList"); } return 0; } long WrenchJobManagerActiveTasksList(CVars in, CVars &out) { logfmt(logINFO, "WrenchJobManagerActiveTasksList()"); char vname[30]; char status_filter[300]; char status_no_filter[300]; char extra_filter[300]; long ret = PHP_API_BAD_PARAM; 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); OPTIONAL(in, "family_uid") REQ_STRING(in, "family_uid", 5, 55, "(.*)"); out["total_record"] = "0"; // Prepare more filters snprintf(extra_filter, sizeof (extra_filter), " "); // just make sure it is just space when not needed const PGresult *res0; if (in["family_uid"]!=""){ res0 = pgsql_query("SELECT family_member_id AS client_id " " FROM members_family WHERE member_id = %lu " " AND uid ='%s'", in["member_id"].Long(), in["family_uid"].c_str()); if (res0 != NULL && pgsql_num_rows(res0) > 0) { mapf1 = pgsql_fetch_assoc(res0, 0); CVars res0; map_to_cvars(f1, res0); snprintf(extra_filter, sizeof (extra_filter), " AND mc.client_id = %lu ",res0["client_id"].Long()); } } /* res = pgsql_query("SELECT mc.id AS contract_id, mc.job_id AS job_id, mc.price, mc.timeline_days,mc.contract, " " mj.title, mj.description AS description,mc.job_detail AS job_description, " " (CASE WHEN mc.status=4 THEN 'Review' " " WHEN mc.status = 1 AND mc.delivery_date > now() THEN 'Active' " " WHEN mc.status = 1 AND mc.delivery_date < now() THEN 'Past Due' " " ELSE 'Others' END) AS status_description,mc.delivery_date " " FROM members_jobs_contract mc LEFT JOIN members_jobs mj ON mj.id = mc.job_id LEFT JOIN members m ON m.id=mc.client_id " " WHERE mc.member_id =%lu %s AND mc.status IN (1,2,4) AND mc.delivery_date > now() " " ORDER BY mc.id DESC LIMIT %lu OFFSET %lu", in["member_id"].Long(),extra_filter, limit, offset); */ snprintf(status_filter, sizeof (status_filter), " AND mc.delivery_date > now() "); if (in["job_mode"]=="PASTDUE"){ snprintf(status_filter, sizeof (status_filter), " AND mc.delivery_date < now() "); } snprintf(status_no_filter, sizeof (status_no_filter), " AND mc.status IN (1,2,4) "); if (in["job_mode"]=="REVIEW"){ snprintf(status_no_filter, sizeof (status_no_filter), " AND mc.status = 4 "); snprintf(status_filter, sizeof (status_filter), " "); } const PGresult *res; res = pgsql_query("SELECT mc.id AS contract_id, mc.job_id AS job_id, mc.price, mc.timeline_days,mc.contract, " " mj.title, mj.description AS description,mc.job_detail AS job_description, mc.uid AS contract_uid,mj.banner AS banner, " " (CASE WHEN mc.status=4 THEN 'REVIEW' " " WHEN mc.status = 1 AND mc.delivery_date > now() THEN 'ACTIVE' " " WHEN mc.status = 1 AND mc.delivery_date < now() THEN 'PASTDUE' " " ELSE 'OTHERS' END) AS status_description,mc.delivery_date, " " (CASE WHEN mc.member_id = %lu THEN 'OWNER' ELSE 'WORKER' END) AS owner_status, m.firstname AS job_to, " " c.code AS currency_code, c.description AS currency_description,mj.country " " FROM members_jobs_contract mc LEFT JOIN members_jobs mj ON mj.id = mc.job_id LEFT JOIN members m ON m.id=mc.client_id " " LEFT JOIN currency c ON c.country=mj.country " " WHERE mc.member_id =%lu %s %s %s " " ORDER BY mc.id DESC LIMIT %lu OFFSET %lu", member_id, member_id ,extra_filter, status_no_filter, status_filter, limit, offset); //ORDER BY id DESC LIMIT %lu OFFSET %lu", in["member_id"].Long(), limit, offset); if (res != NULL && pgsql_num_rows(res) > 0) { out["total_record"] = pgsql_num_rows(res); for (int i = 0, n = pgsql_num_rows(res); i < n; i++) { mapf = pgsql_fetch_assoc(res, i); if (f.empty()) continue; CVars rec; map_to_cvars(f, rec); snprintf(vname, sizeof (vname), "id_%05d", i); out[vname] = rec["contract_id"]; snprintf(vname, sizeof (vname), "job_detail_%05d", i); out[vname] = ""; snprintf(vname, sizeof (vname), "expire_%05d", i); out[vname] = rec["expire"]; snprintf(vname, sizeof (vname), "title_%05d", i); out[vname] = rec["title"]; snprintf(vname, sizeof (vname), "project_%05d", i); out[vname] = rec["project"]; snprintf(vname, sizeof (vname), "description_%05d", i); out[vname] = rec["description"]; snprintf(vname, sizeof (vname), "status_description_%05d", i); out[vname] = rec["status_description"]; snprintf(vname, sizeof (vname), "delivery_date_%05d", i); out[vname] = rec["delivery_date"]; snprintf(vname, sizeof (vname), "status_description_%05d", i); out[vname] = rec["status_description"]; snprintf(vname, sizeof (vname), "timeline_days_%05d", i); out[vname] = rec["timeline_days"]; snprintf(vname, sizeof (vname), "contract_%05d", i); out[vname] = rec["contract"]; snprintf(vname, sizeof (vname), "job_description_%05d", i); out[vname] = rec["job_description"]; snprintf(vname, sizeof (vname), "price_%05d", i); out[vname] = rec["price"]; snprintf(vname, sizeof (vname), "job_id_%05d", i); out[vname] = rec["job_id"]; snprintf(vname, sizeof (vname), "job_to_%05d", i); out[vname] = rec["job_to"]; snprintf(vname, sizeof (vname), "contract_id_%05d", i); out[vname] = rec["contract_id"]; snprintf(vname, sizeof (vname), "owner_status_%05d", i); out[vname] = rec["owner_status"]; snprintf(vname, sizeof (vname), "contract_uid_%05d", i); out[vname] = rec["contract_uid"]; snprintf(vname, sizeof (vname), "job_country_%05d", i); out[vname] = rec["job_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"]; snprintf(vname, sizeof (vname), "banner_%05d", i); out[vname] = rec["banner"]; } } ret = PHP_API_OK; out["status"] = "OK"; } catch (bad_parameter) { logfmt(logINFO, "ERROR CALL long WrenchJobManagerActiveTasksList(CVars in, CVars &out)"); } logfmt(logINFO, "/WrenchJobManagerActiveTasksList()"); return ret; } long WrenchUsersActiveTasksList(CVars in, CVars &out) { logfmt(logINFO, "WrenchJobManagerActiveTasksList()"); char extraq[60]; char vname[30]; long ret = PHP_API_BAD_PARAM; 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); long allstatus = REQ_LONG(in, "allstatus", 1, -1); if ( allstatus == 100 ){ snprintf(extraq, sizeof (extraq), ""); } else { snprintf(extraq, sizeof (extraq), " AND mc.delivery_date > now() "); } out["total_record"] = "0"; const PGresult *res; res = pgsql_query("SELECT mc.id AS contract_id, mc.job_id AS job_id, mc.price, mc.timeline_days,mc.contract, " " mj.title, mj.description AS description,mc.job_detail AS job_description,mc.uid AS contract_uid, " " mj.banner AS banner, c.code AS currency_code, c.description AS currency_description, " " (CASE WHEN mc.status=4 THEN 'REVIEW' " " WHEN mc.status = 1 AND mc.delivery_date > now() THEN 'ACTIVE' " " WHEN mc.status = 1 AND mc.delivery_date 0) { out["total_record"] = pgsql_num_rows(res); for (int i = 0, n = pgsql_num_rows(res); i < n; i++) { mapf = pgsql_fetch_assoc(res, i); if (f.empty()) continue; CVars rec; map_to_cvars(f, rec); snprintf(vname, sizeof (vname), "id_%05d", i); out[vname] = rec["contract_id"]; snprintf(vname, sizeof (vname), "job_detail_%05d", i); out[vname] = ""; snprintf(vname, sizeof (vname), "expire_%05d", i); out[vname] = rec["expire"]; snprintf(vname, sizeof (vname), "title_%05d", i); out[vname] = rec["title"]; snprintf(vname, sizeof (vname), "project_%05d", i); out[vname] = rec["project"]; snprintf(vname, sizeof (vname), "description_%05d", i); out[vname] = rec["description"]; snprintf(vname, sizeof (vname), "status_description_%05d", i); out[vname] = rec["status_description"]; snprintf(vname, sizeof (vname), "delivery_date_%05d", i); out[vname] = rec["delivery_date"]; snprintf(vname, sizeof (vname), "status_description_%05d", i); out[vname] = rec["status_description"]; snprintf(vname, sizeof (vname), "timeline_days_%05d", i); out[vname] = rec["timeline_days"]; snprintf(vname, sizeof (vname), "contract_%05d", i); out[vname] = rec["contract"]; snprintf(vname, sizeof (vname), "job_description_%05d", i); out[vname] = rec["job_description"]; snprintf(vname, sizeof (vname), "price_%05d", i); out[vname] = rec["price"]; snprintf(vname, sizeof (vname), "job_id_%05d", i); out[vname] = rec["job_id"]; snprintf(vname, sizeof (vname), "contract_id_%05d", i); out[vname] = rec["contract_id"]; snprintf(vname, sizeof (vname), "owner_status_%05d", i); out[vname] = rec["owner_status"]; snprintf(vname, sizeof (vname), "contract_uid_%05d", i); out[vname] = rec["contract_uid"]; snprintf(vname, sizeof (vname), "banner_%05d", i); out[vname] = rec["banner"]; 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_API_OK; out["status"] = "OK"; } catch (bad_parameter) { logfmt(logINFO, "ERROR CALL long WrenchJobManagerActiveTasksList(CVars in, CVars &out)"); } logfmt(logINFO, "/WrenchJobManagerActiveTasksList()"); return ret; }