def POST(self): session = get_session() params = web.input(username="", password="") username = params.username password = params.password r = auth_user(db, username, password) if r[0]: session.loggedin = True info = r[1] session.username = info.firstname + " " + info.lastname session.sesid = info.id session.role = info.role put_session(session) l = locals() del l['self'] if info.role == 'Warehouse Manager': return web.seeother("/warehousedata") elif info.role == 'Micro Planning': return web.seeother("/reporters") else: return web.seeother("/dashboard") else: session.loggedin = False session.logon_err = r[1] l = locals() del l['self'] return render.logon(**l)
def POST(self): session = get_session() params = web.input(username="", password="") username = params.username password = params.password r = auth_user(db, username, password) if r[0]: session.loggedin = True info = r[1] session.name = info.firstname + " " + info.lastname session.username = username session.sesid = info.id session.role = info.role session.criteria = "" put_session(session) log_dict = { 'logtype': 'Web', 'action': 'Login', 'actor': username, 'ip': web.ctx['ip'], 'descr': 'User %s logged in' % username, 'user': info.id } audit_log(db, log_dict) l = locals() del l['self'] return web.seeother("/requests") else: session.loggedin = False session.logon_err = r[1] l = locals() del l['self'] return render.login(**l)
def POST(self): session = get_session() params = web.input(username="", password="") username = params.username password = params.password r = auth_user(db, username, password) if r[0]: session.loggedin = True info = r[1] session.name = info.firstname + " " + info.lastname session.username = username session.sesid = info.id session.role = info.role session.perms = role_permissions(db, info.user_role) # get system permissions at log in time session.can_view_reports = has_perm(session.perms, 'Reports', 'r') session.can_view_warehouse = has_perm(session.perms, 'Warehouse', 'r') session.can_manage_warehouse = has_perm(session.perms, 'Warehouse', 'w') session.can_view_reporters = has_perm(session.perms, 'Reporters', 'r') session.can_manage_reporters = has_perm(session.perms, 'Reporters', 'w') session.can_view_dpoints = has_perm(session.perms, 'Distribution Points', 'r') session.can_manage_dpoints = has_perm(session.perms, 'Distribution Points', 'w') session.can_view_adminunits = has_perm(session.perms, 'Admin Units', 'r') session.can_manage_adminunits = has_perm(session.perms, 'Admin Units', 'w') put_session(session) log_dict = { 'logtype': 'Web', 'action': 'Login', 'actor': username, 'ip': web.ctx['ip'], 'descr': 'User %s logged in' % username, 'user': info.id } audit_log(db, log_dict) l = locals() del l['self'] if info.role == 'Warehouse Manager': return web.seeother("/warehousedata") elif info.role == 'Micro Planning': return web.seeother("/reporters") elif info.role == 'Data Manager': return web.seeother("/adminunits") else: return web.seeother("/dashboard") else: session.loggedin = False session.logon_err = r[1] l = locals() del l['self'] return render.login(**l)
def GET(self): username, password = get_basic_auth_credentials() r = auth_user(db, username, password) if not r[0]: web.header("Content-Type", "application/json; charset=utf-8") web.header('WWW-Authenticate', 'Basic realm="Auth API"') web.ctx.status = '401 Unauthorized' return json.dumps({'detail': 'Authentication failed!'}) web.header("Content-Type", "application/zip; charset=utf-8")
def GET(self): username, password = get_basic_auth_credentials() r = auth_user(db, username, password) if not r[0]: web.header("Content-Type", "application/json; charset=utf-8") web.header('WWW-Authenticate', 'Basic realm="Auth API"') web.ctx.status = '401 Unauthorized' return json.dumps({'detail': 'Authentication failed!'}) web.header("Content-Type", "application/zip; charset=utf-8") # web.header('Content-disposition', 'attachment; filename=%s.csv'%file_name) web.seeother("/static/downloads/reporters_all.xls.zip")
def POST(self): params = web.input(optoutall="false") web.header("Content-Type", "application/json; charset=utf-8") username, password = get_basic_auth_credentials() r = auth_user(db, username, password) if not r[0]: web.header('WWW-Authenticate', 'Basic realm="Auth API"') web.ctx.status = '401 Unauthorized' return json.dumps({'detail': 'Authentication failed!'}) secreceivers = get_webhook_msg_old(params, 'secreceivers') pprint.pprint(secreceivers) payload = json.loads(secreceivers) if params.optoutall == "true": for k, v in payload.iteritems(): contact_id = v['contact_id'] contact_field = v['contact_field'] db.query( "UPDATE values_value SET (string_value, decimal_value) = ('', NULL) " "WHERE contact_id = $contact_id AND contact_field_id = $contact_field_id", { 'contact_id': contact_id, 'contact_field_id': contact_field }) return json.dumps({'success': 'true'}) optout_option = get_webhook_msg_old(params, 'OptOutOption') print("OptOutOption => ", optout_option) try: contact_details = payload['%s' % int(float(optout_option))] except: contact_details = None if not contact_details: return json.dumps({'success': 'False'}) contact_id = contact_details['contact_id'] contact_field = contact_details['contact_field'] print("contact_id=>", contact_id, " fields => ", contact_field) db.query( "UPDATE values_value SET (string_value, decimal_value) = ('', NULL) " "WHERE contact_id = $contact_id AND contact_field_id = $contact_field_id", { 'contact_id': contact_id, 'contact_field_id': contact_field }) return json.dumps({'success': 'True'})
def POST(self): session = get_session() params = web.input(username="", password="") username = params.username password = params.password r = auth_user(db, username, password) if r[0]: session.loggedin = True info = r[1] session.name = info.firstname + " " + info.lastname session.username = username session.sesid = info.id session.role = info.role session.districts = info.districts # districts_string to be used in a SIMILAR TO statment while getting reports from requests table session.districts_string = '|'.join(['%s' % allDistricts[d] for d in info.districts]) print(session.districts_string) session.districts_array = str([int(x) for x in info.districts]).replace( '[', '{').replace(']', '}').replace('\'', '\"') session.criteria = "" user_perms = [] perms = db.query( "SELECT codename FROM permissions WHERE id IN " " (SELECT permission_id FROM user_permissions WHERE user_id = $user_id)", {'user_id': info.id}) for p in perms: user_perms.append(p['codename']) session.permissions = user_perms put_session(session) log_dict = { 'logtype': 'Web', 'action': 'Login', 'actor': username, 'ip': web.ctx['ip'], 'descr': 'User %s logged in' % username, 'user': info.id } audit_log(db, log_dict) l = locals() del l['self'] if info.role == 'District User': return web.seeother("/approve") else: return web.seeother("/approve") else: session.loggedin = False session.logon_err = r[1] l = locals() del l['self'] return render.login(**l)
def GET(self, district_code): params = web.input(from_date="", type="") web.header("Content-Type", "application/json; charset=utf-8") username, password = get_basic_auth_credentials() r = auth_user(db, username, password) if not r[0]: web.header('WWW-Authenticate', 'Basic realm="Auth API"') web.ctx.status = '401 Unauthorized' return json.dumps({'detail': 'Authentication failed!'}) y = db.query("SELECT id, lft, rght FROM locations WHERE code = $code", {'code': district_code}) location_id = 0 if y: loc = y[0] location_id = loc['id'] lft = loc['lft'] rght = loc['rght'] SQL = ( "SELECT a.id, a.name, a.code, a.uuid, a.lft, a.rght, a.tree_id, a.tree_parent_id, " "b.code as parent_code, c.level, c.name as type, " "to_char(a.cdate, 'YYYY-mm-dd') as created " " FROM locations a, locations b, locationtype c" " WHERE " " a.tree_parent_id = b.id " " AND a.lft > %s AND a.lft < %s " " AND a.type_id = c.id ") SQL = SQL % (lft, rght) if params.from_date: SQL += " AND a.cdate >= $date " if params.type: SQL += " AND c.name = $type " r = db.query(SQL, { 'id': location_id, 'date': params.from_date, 'type': params.type }) ret = [] for i in r: ret.append(dict(i)) return json.dumps(ret)
def POST(self): params = web.input() web.header("Content-Type", "application/json; charset=utf-8") username, password = get_basic_auth_credentials() r = auth_user(db, username, password) if not r[0]: web.header('WWW-Authenticate', 'Basic realm="Auth API"') web.ctx.status = '401 Unauthorized' return json.dumps({'detail': 'Authentication failed!'}) client = TembaClient( config.get('familyconnect_uri', 'http://localhost:8000/'), config['api_token']) secreceivers = get_webhook_msg_old(params, 'secreceivers') pprint.pprint(secreceivers) payload = json.loads(secreceivers) optout_option = get_webhook_msg_old(params, 'OptOutOption') print("OptOutOption => ", optout_option) try: contact_details = payload['%s' % int(float(optout_option))] except: contact_details = None if not contact_details: return json.dumps({'success': 'False'}) contact_id = contact_details['contact_id'] contact_uuid = contact_details['uuid'] print("contact_id=>", contact_id, " uuid => ", contact_uuid) date_of_birth = get_webhook_msg_old(params, 'child_dob') try: client.create_flow_start(config['babytrigger_flow_uuid'], contacts=[contact_uuid], extra={'child_dob': date_of_birth}) except: pass return json.dumps({'success': 'True'})
def GET(self): # params = web.input(form="") web.header("Content-Type", "application/json; charset=utf-8") username, password = get_basic_auth_credentials() r = auth_user(db, username, password) if not r[0]: web.header('WWW-Authenticate', 'Basic realm="Auth API"') web.ctx.status = '401 Unauthorized' return json.dumps({'detail': 'Authentication failed!'}) indicators = db.query( "SELECT id, form_order, form, slug, cmd, description, shortname, dataset, dataelement, " "category_combo, threshold FROM dhis2_mtrack_indicators_mapping " "ORDER BY form, form_order") ret = {} for i in indicators: ret[i["slug"]] = { 'categoryOptionCombo': i['category_combo'], 'dataElement': i['dataelement'], 'descr': i['description'], } return json.dumps(ret)
def GET(self, location_code): params = web.input(role="") web.header("Content-Type", "application/json; charset=utf-8") username, password = get_basic_auth_credentials() r = auth_user(db, username, password) if not r[0]: web.header('WWW-Authenticate', 'Basic realm="Auth API"') web.ctx.status = '401 Unauthorized' return json.dumps({'detail': 'Authentication failed!'}) ret = [] reporter_role = params.role SQL = ( "SELECT firstname, lastname, telephone, alternate_tel, email, national_id, " "reporting_location, district, role, loc_name, location_code FROM reporters_view4 " "WHERE reporting_location IN (SELECT id FROM get_descendants_including_self(( SELECT id FROM " "locations WHERE code=$location_code))) ") if reporter_role: SQL += " AND lower(role) = $role" res = db.query(SQL, { 'location_code': location_code, 'role': reporter_role.lower() }) if res: for r in res: ret.append({ "firstname": r.firstname, "lastname": r.lastname, "telephone": r.telephone, "alternate_tel": r.alternate_tel, "email": r.email, "national_id": r.national_id, "location_name": r.loc_name, "location_code": r.location_code, "distrcit": r.district, "role": r.role }) return json.dumps(ret)
def GET(self): params = web.input(contact="", babytrigger="false") web.header("Content-Type", "application/json; charset=utf-8") username, password = get_basic_auth_credentials() r = auth_user(db, username, password) if not r[0]: web.header('WWW-Authenticate', 'Basic realm="Auth API"') web.ctx.status = '401 Unauthorized' return json.dumps({'detail': 'Authentication failed!'}) print(params.contact) SQL = ("SELECT * FROM fcapp_get_secondary_receivers($contact) ") if params.babytrigger == "true": SQL += " WHERE has_msisdn = 'f'" res = db.query(SQL, {'contact': params.contact}) payload = {'secreceivers': {}} receivers_count = 0 screen_1 = "" screen_2 = "" screen_3 = "" # screen_1_len = 0 # screen_2_len = 0 # screen_3_len = 0 if res: for idx, r in enumerate(res, 1): receivers_count += 1 if idx < 6: screen_1 += "%s. %s\n" % (idx, r['name']) payload['secreceivers']['%s' % idx] = { 'name': r['name'], 'uuid': r['uuid'], 'contact_id': r['contact_id'], 'contact_field': r['contact_field'] } elif idx > 5 and idx < 11: screen_2 += "%s. %s\n" % ((idx + 1), r['name']) payload['secreceivers']['%s' % (idx + 1)] = { 'name': r['name'], 'uuid': r['uuid'], 'contact_id': r['contact_id'], 'contact_field': r['contact_field'] } elif idx > 10 and idx < 16: screen_3 += "%s. %s\n" % ((idx + 2), r['name']) payload['secreceivers']['%s' % (idx + 2)] = { 'name': r['name'], 'uuid': r['uuid'], 'contact_id': r['contact_id'], 'contact_field': r['contact_field'] } # screen_1_len = len(screen_1.strip().split('\n')) # screen_2_len = len(screen_2.strip().split('\n')) if screen_2 else 0 # screen_3_len = len(screen_3.strip().split('\n')) if screen_3 else 0 if screen_2: screen_1 += "6. More\n" screen_2 += "0. Back" if screen_3: screen_2 += "12. More\n" screen_3 += "0. Back" payload['receivers_count'] = receivers_count payload['screen_1'] = screen_1 payload['screen_2'] = screen_2 payload['screen_3'] = screen_3 # payload['screen_1_len'] = screen_1_len # payload['screen_2_len'] = screen_2_len # payload['screen_3_len'] = screen_3_len pprint.pprint(payload) return json.dumps(payload)
def GET(self): params = web.input(subcounty="", subcountyid="", districtid="", original_name="", username="", password="") username = params.username password = params.password r = auth_user(db, username, password) if not r[0]: return "Unauthorized access" with db.transaction(): res = db.query("SELECT id FROM locations WHERE dhis2id = $dhis2id", {'dhis2id': params.districtid}) if res: district_id = res[0]['id'] synced = db.query( "SELECT id FROM locations WHERE dhis2id = $dhis2id", {'dhis2id': params.subcountyid}) if synced: # we already synced this one # db.query( # "UPDATE locations SET name = $name WHERE dhis2id = $dhis2id", # {'name': params.original_name, 'dhis2id': params.subcountyid}) return "Subcounty already synced!" subcounties = {} res2 = db.query( "SELECT id, name FROM locations WHERE tree_parent_id = $id", {'id': district_id}) for subcounty in res2: subcounties[subcounty['name']] = subcounty['id'] if params.subcounty in subcounties: print "We have an exact match" db.query( "UPDATE locations SET dhis2id = $dhis2id WHERE id = $id", { 'dhis2id': params.subcountyid, 'id': subcounties[params.subcounty] }) else: print "We have to fuzzy match this one" match_dict = {} res3 = db.query( "SELECT id, name FROM locations WHERE tree_parent_id = $id AND dhis2id = ''", {'id': district_id}) for m in res3: match_dict[m['name']] = m['id'] # match_list has those we want to try fuzzy matching with choices = match_dict.keys() matched_name = find_closest_match(params.original_name, choices) if matched_name: pmatch = difflib.SequenceMatcher( None, matched_name, params.subcounty).ratio() # if pmatch > 0.84: if pmatch > 0.9: print "High match rate (%s%%) [%s => %s]" % ( (pmatch * 100), params.original_name, matched_name) db.query( "UPDATE locations SET (dhis2id) = ($dhis2id) WHERE id = $id", { 'name': params.original_name, 'dhis2id': params.subcountyid, 'id': match_dict[matched_name] }) else: print "Low mating rate (%s%%) [%s => %s]" % ( (pmatch * 100), params.original_name, matched_name) else: print "Nothing appropriate to fuzzy match with for =>", params.subcounty return "Subcounty Sync Done."
def GET(self): params = web.input(name="", ftype="", district="", code="", is_033b='f', dhis2id="", subcounty="", username="", password="") username = params.username password = params.password r = auth_user(db, username, password) if not r[0]: return "Unauthorized access" with db.transaction(): res = db.query( "SELECT id FROM healthfacility_type " "WHERE lower(name) = $name ", {'name': params.ftype.lower()}) if res: type_id = res[0]["id"] r = db.query( "SELECT id FROM healthfacilities WHERE code = $code", {'code': params.code}) if not r: logging.debug("Creating facility with ID:%s" % params.code) new = db.query( "INSERT INTO healthfacilities " "(name, code, type_id, district, is_033b) VALUES " "($name, $dhis2id, $type, $district, $is_033b) RETURNING id", { 'name': params.name, 'dhis2id': params.dhis2id, 'code': params.code, 'type': type_id, 'district': params.district, 'active': True, 'deleted': False, 'is_033b': params.is_033b }) if new: facility_id = new[0]["id"] d = db.query( "SELECT id FROM locations WHERE lower(name) = $district " "AND type_id = 3", {'district': params.district.lower()}) if d: district_id = d[0]["id"] db.query( "UPDATE healthfacilities SET district_id = $district_id " " WHERE id = $facility", { 'district_id': district_id, 'facility': facility_id }) res2 = db.query( "SELECT id FROM locations " "WHERE name ilike $name AND type_id = 4" " AND tree_parent_id = $district", { 'name': '%%%s%%' % params.subcounty, 'district': district_id }) if res2: # we have a sub county in mTrac subcounty_id = res2[0]["id"] db.query( "UPDATE healthfacilities SET location = $loc, " "location_name = $loc_name" " WHERE id = $facility ", { 'facility': facility_id, 'loc': subcounty_id, 'loc_name': params.subcounty }) logging.debug( "Set Facility Location: ID:%s Location:%s" % (params.code, subcounty_id)) else: # make district catchment area db.query( "UPDATE healthfacilities SET " " location = $loc, location_name = $loc_name WHERE id = $facility", { 'facility': facility_id, 'loc': district_id, 'loc_name': params.subcounty }) logging.debug( "Set Facility Location: ID:%s Location:%s" % (params.code, district_id)) logging.debug( "Facility with ID:%s sucessfully created." % params.code) return "Created Facility ID:%s" % params.code else: # facility with passed uuid already exists logging.debug("updating facility with ID:%s" % params.code) facility_id = r[0]["id"] db.query( "UPDATE healthfacilities SET " "name = $name, code = $dhis2id, type_id = $type, district = $district, " "is_033b = $is_033b " " WHERE id = $facility ", { 'name': params.name, 'dhis2id': params.dhis2id, 'type': type_id, 'district': params.district, 'facility': facility_id, 'is_033b': params.is_033b }) logging.debug("Set h033b for facility with ID:%s to %s" % (params.code, params.is_033b)) d = db.query( "SELECT id FROM locations WHERE lower(name) = $name " "AND type_id = 3", {'name': params.district.lower()}) if d: district_id = d[0]["id"] db.query( "UPDATE healthfacilities SET district_id = $district_id " "WHERE id = $facility ", { 'facility': facility_id, 'district_id': district_id }) res2 = db.query( "SELECT id FROM locations WHERE name ilike $name AND type_id = 4" " AND tree_parent_id = $district", { 'name': '%%%s%%' % params.subcounty.strip(), 'district': district_id }) if res2: # we have a sub county in mTrac subcounty_id = res2[0]["id"] logging.debug( "Sub county:%s set for facility with ID:%s" % (params.subcounty, params.code)) res3 = db.query( "UPDATE healthfacilities SET location = $loc, location_name = $loc_name " " WHERE id = $facility RETURNING id", { 'facility': facility_id, 'loc': subcounty_id, 'loc_name': params.subcounty.strip() }) if not res3: logging.debug( "Set Facility Location: ID:%s Location:%s" % (params.code, subcounty_id)) else: # make district catchment area res3 = db.query( "UPDATE healthfacilities SET location = $loc, location_name = $loc_name " "WHERE id = $facility RETURNING id", { 'facility': facility_id, 'loc': district_id, 'loc_name': params.district }) if not res3: logging.debug( "Set Facility Location: ID:%s Location:%s" % (params.code, district_id)) logging.debug( "Facility with ID:%s sucessfully updated." % params.code) return "Updated Facility ID:%s" % params.code else: return "Unsupported type:%s" % params.ftype