def POST(self): params = web.input(district="", subcounty="") if params.district and params.subcounty: if USE_OLD_WEBHOOKS: patient_id = get_webhook_msg_old(params, 'patient_id') patient_age = get_webhook_msg_old(params, 'patient_age') patient_sex = get_webhook_msg_old(params, 'patient_sex') else: payload = json.loads(web.data()) patient_id = get_webhook_msg(payload, 'patient_id') patient_age = get_webhook_msg(payload, 'patient_age') patient_sex = get_webhook_msg(payload, 'patient_sex') district_contacts = CARAMAL_RESEARCH_TEAM.get(params.district, '') if district_contacts: subcounty_team_contacts = district_contacts.get(params.subcounty, '') if subcounty_team_contacts: # time to schedule reminder accordingly msg = ( "Patient with ID %s, age of %s and sex %s is " "due for follow up 3 days from now." % ( patient_id, int(float(patient_age)), patient_sex)) sms_params = {'text': msg, 'to': subcounty_team_contacts} current_time = datetime.datetime.now() run_time = current_time + datetime.timedelta(days=25) queue_schedule(db, sms_params, run_time, None, 'sms') return json.dumps({"message": "scheduled successfully"}) return json.dumps({"message": "success"})
def POST(self, id): params = web.input(to_subcounty="", sms="") session = get_session() subcounty_reporters = get_location_role_reporters( db, params.to_subcounty, config['subcounty_reporters']) if not subcounty_reporters: return "<h4>No reporters</h4>" sms_params = {'text': params.sms, 'to': ' '.join(subcounty_reporters)} current_time = datetime.datetime.now() sched_time = current_time + datetime.timedelta(minutes=1) queue_schedule(db, sms_params, sched_time, session.sesid) return "<h4>Successfully sent notification SMS</h4>"
def POST(self): params = web.input(firstname="", lastname="", gender="", telephone="", email="", location="", role="", alt_telephone="", page="1", ed="", d_id="", district="", facility="", code="", date_of_birth="", national_id="", caller="", user="******", districtname="", subcounty="", parish="", subcountyname="", parishname="", villagename="", facilityname="") if params.caller != 'api': session = get_session() username = session.username userid = session.sesid else: rs = db.query( "SELECT id, username FROM users WHERE username = '******';" % params.user) if rs: xuser = rs[0] userid = xuser['id'] username = xuser['username'] allow_edit = False try: edit_val = int(params.ed) allow_edit = True except: pass facilityuid = "" rs = db.query("SELECT code FROM healthfacilities WHERE id = %s;" % params.facility) if rs: facilityuid = rs[0]['code'] current_time = datetime.datetime.now() # Set params to schedule a push_contact to Push reporter to RapidPro urns = [] if params.alt_telephone: try: alt_telephone = format_msisdn(params.alt_telephone) urns.append("tel:" + alt_telephone) except: alt_telephone = '' if params.telephone: try: telephone = format_msisdn(params.telephone) urns.append("tel:" + telephone) except: telephone = '' contact_params = { 'urns': urns, 'name': params.firstname + ' ' + params.lastname, # 'groups': ['%s' % rolesById[int(params.role)]], 'fields': { # 'email': params.email, 'gender': params.gender, 'facility': params.facilityname, 'village': params.villagename, 'district': params.districtname, 'sub_county': params.subcountyname, 'parish': params.parishname, 'facilityuid': facilityuid, 'type': '%s' % rolesById[int(params.role)] } } with db.transaction(): if params.ed and allow_edit: location = params.location if params.location else None date_of_birth = params.date_of_birth if params.date_of_birth else None r = db.query( "UPDATE reporters SET firstname=$firstname, lastname=$lastname, gender=$gender, " "telephone=$telephone, reporting_location=$location, " "alternate_tel=$alt_tel, district_id = $district_id, facilityid=$facility, " "code=$code, date_of_birth=$date_of_birth, national_id=$national_id " "WHERE id=$id RETURNING id", { 'firstname': params.firstname, 'lastname': params.lastname, 'gender': params.gender, 'telephone': params.telephone, 'location': location, 'id': params.ed, 'alt_tel': params.alt_telephone, 'district_id': params.district, 'code': params.code, 'date_of_birth': date_of_birth, 'national_id': params.national_id, 'facility': params.facility }) if r: db.query( "UPDATE reporters SET groups = $groups::INTEGER[], " " jparents = $ancestors WHERE id = $id", { 'id': params.ed, 'groups': str([int(params.role)]).replace('[', '{').replace( ']', '}').replace('\'', '\"'), 'ancestors': psycopg2.extras.Json( { 'd': params.district, 's': params.subcounty, 'p': params.parish }, dumps=simplejson.dumps) }) log_dict = { 'logtype': 'Web', 'action': 'Update', 'actor': username, 'ip': web.ctx['ip'], 'descr': 'Updated reporter %s:%s (%s)' % (params.ed, params.firstname + ' ' + params.lastname, params.telephone), 'user': userid } audit_log(db, log_dict) sync_time = current_time + datetime.timedelta(seconds=60) queue_schedule(db, contact_params, sync_time, userid, 'push_contact', params.ed) if params.caller == 'api': web.header("Content-Type", "application/json; charset=utf-8") return json.dumps( {'message': 'Reporter edited successfully.'}) else: return web.seeother("/reporters") else: location = params.location if params.location else None has_reporter = db.query( "SELECT id FROM reporters WHERE telephone = $tel", {'tel': params.telephone}) if has_reporter: if params.caller == 'api': web.header("Content-Type", "application/json; charset=utf-8") return json.dumps({ 'message': "Reporter with Telephone:%s already registered" % params.telephone }) else: session.rdata_err = ( "Reporter with Telephone:%s already registered" % params.telephone) return web.seeother("/reporters") if params.caller != 'api': session.rdata_err = "" r = db.query( "INSERT INTO reporters (firstname, lastname, gender, telephone, " " reporting_location, alternate_tel, " " district_id, code, date_of_birth, national_id, facilityid) VALUES " " ($firstname, $lastname, $gender, $telephone, $location, " " $alt_tel, $district_id, $code, $date_of_birth, $national_id, $facilityid) RETURNING id", { 'firstname': params.firstname, 'lastname': params.lastname, 'gender': params.gender, 'telephone': params.telephone, 'location': location, 'alt_tel': params.alt_telephone, 'district_id': params.district, 'code': params.code, 'date_of_birth': params.date_of_birth if params.date_of_birth else None, 'national_id': params.national_id, 'facilityid': params.facility }) if r: reporter_id = r[0]['id'] db.query( "UPDATE reporters SET groups = $groups::INTEGER[], " " jparents = $ancestors WHERE id = $id", { 'id': reporter_id, 'groups': str([int(params.role)]).replace('[', '{').replace( ']', '}').replace('\'', '\"'), 'ancestors': psycopg2.extras.Json( { 'd': params.district, 's': params.subcounty, 'p': params.parish }, dumps=simplejson.dumps) }) log_dict = { 'logtype': 'Web', 'action': 'Create', 'actor': username, 'ip': web.ctx['ip'], 'descr': 'Created reporter %s:%s (%s)' % (reporter_id, params.firstname + ' ' + params.lastname, params.telephone), 'user': userid } audit_log(db, log_dict) sync_time = current_time + datetime.timedelta(seconds=60) queue_schedule(db, contact_params, sync_time, userid, 'push_contact', reporter_id) if params.caller == 'api': web.header("Content-Type", "application/json; charset=utf-8") return json.dumps({'message': 'success'}) else: return web.seeother("/reporters?show=true") l = locals() del l['self'] if params.caller == 'api': pass else: return render.reporters(**l)
def POST(self): params = web.input(firstname="", lastname="", gender="", telephone="", email="", location="", role=[], alt_telephone="", page="1", ed="", d_id="", district="", facility="", code="", date_of_birth="", caller="", user="******") if params.caller != 'api': session = get_session() username = session.username userid = session.sesid else: rs = db.query( "SELECT id, username FROM users WHERE username = '******';" % params.user) if rs: xuser = rs[0] userid = xuser['id'] username = xuser['username'] allow_edit = False try: edit_val = int(params.ed) allow_edit = True except: pass current_time = datetime.datetime.now() # Set params to schedule a push_contact to Push reporter to RapidPro urns = [] if params.alt_telephone: try: alt_telephone = format_msisdn(params.alt_telephone) urns.append("tel:" + alt_telephone) except: alt_telephone = '' if params.telephone: try: telephone = format_msisdn(params.telephone) urns.append("tel:" + telephone) except: telephone = '' groups = ['%s' % rolesById[int(i)] for i in params.role] contact_params = { 'urns': urns, 'name': params.firstname + ' ' + params.lastname, 'groups': groups, 'fields': { # 'email': params.email, 'type': 'VHT' if 'VHT' in groups else 'HC' } } with db.transaction(): if params.ed and allow_edit: location = params.location if params.location else None r = db.query( "UPDATE reporters SET firstname=$firstname, lastname=$lastname, " "telephone=$telephone, reporting_location=$location, " "alternate_tel=$alt_tel, district_id = $district_id " "WHERE id=$id RETURNING id", { 'firstname': params.firstname, 'lastname': params.lastname, 'gender': params.gender, 'telephone': params.telephone, 'location': location, 'id': params.ed, 'alt_tel': params.alt_telephone, 'district_id': params.district }) if r: for group_id in params.role: rx = db.query( "SELECT id FROM reporter_groups_reporters " "WHERE reporter_id = $id AND group_id =$gid ", { 'gid': group_id, 'id': params.ed }) if not rx: db.query( "INSERT INTO reporter_groups_reporters (group_id, reporter_id) " " VALUES ($group_id, $reporter_id)", { 'group_id': group_id, 'reporter_id': params.ed }) # delete other groups db.query( "DELETE FROM reporter_groups_reporters WHERE " "reporter_id=$id AND group_id NOT IN $roles", { 'id': params.ed, 'roles': params.role }) log_dict = { 'logtype': 'Web', 'action': 'Update', 'actor': username, 'ip': web.ctx['ip'], 'descr': 'Updated reporter %s:%s (%s)' % (params.ed, params.firstname + ' ' + params.lastname, params.telephone), 'user': userid } audit_log(db, log_dict) sync_time = current_time + datetime.timedelta(seconds=60) if urns: # only queue if we have numbers queue_schedule(db, contact_params, sync_time, userid, 'contact_push') return web.seeother("/reporters") else: location = params.location if params.location else None has_reporter = db.query( "SELECT id FROM reporters WHERE telephone = $tel", {'tel': params.telephone}) if has_reporter: reporterid = has_reporter[0]["id"] rx = db.query( "UPDATE reporters SET firstname=$firstname, lastname=$lastname, " "telephone=$telephone, reporting_location=$location, " "alternate_tel=$alt_tel, district_id = $district_id " "WHERE id=$id RETURNING id", { 'firstname': params.firstname, 'lastname': params.lastname, 'gender': params.gender, 'telephone': params.telephone, 'location': location, 'id': reporterid, 'alt_tel': params.alt_telephone, 'district_id': params.district }) if params.caller == 'api': return json.dumps({ 'message': "Reporter with Telephone:%s already registered" % params.telephone }) else: session.rdata_err = ( "Reporter with Telephone:%s already registered" % params.telephone) return web.seeother("/reporters") if params.caller != 'api': session.rdata_err = "" r = db.query( "INSERT INTO reporters (firstname, lastname, telephone, " " reporting_location, alternate_tel, " " district_id) VALUES " " ($firstname, $lastname, $telephone, $location, " " $alt_tel, $district_id) RETURNING id", { 'firstname': params.firstname, 'lastname': params.lastname, 'telephone': params.telephone, 'location': location, 'alt_tel': params.alt_telephone, 'district_id': params.district, }) if r: reporter_id = r[0]['id'] db.query( "INSERT INTO reporter_healthfacility (reporter_id, facility_id) " "VALUES($reporter_id, $facility_id)", { 'reporter_id': reporter_id, 'facility_id': params.facility }) for group_id in params.role: db.query( "INSERT INTO reporter_groups_reporters (group_id, reporter_id) " " VALUES ($role, $reporter_id)", { 'role': group_id, 'reporter_id': reporter_id }) log_dict = { 'logtype': 'Web', 'action': 'Create', 'actor': username, 'ip': web.ctx['ip'], 'descr': 'Created reporter %s:%s (%s)' % (reporter_id, params.firstname + ' ' + params.lastname, params.telephone), 'user': userid } audit_log(db, log_dict) sync_time = current_time + datetime.timedelta(seconds=60) if contact_params['urns']: queue_schedule(db, contact_params, sync_time, userid, 'contact_push') if params.caller == 'api': return json.dumps({'message': 'success'}) else: return web.seeother("/reporters?show=true") l = locals() del l['self'] if params.caller == 'api': pass else: return render.reporters(**l)
'firstname': _firstname, 'lastname': _lastname, 'telephone': telephone, 'alternate_tel': alt_telephone }) if res: reporter_id = res[0]['id'] contact_params = { 'urns': urns, 'name': _firstname + ' ' + _lastname, 'fields': { # 'email': params.email, 'gender': _gender, 'registered_by': 'CHWR', 'type': _role, 'facility': _fac, 'facilityuid': _facility_code, 'district': _district, 'sub_county': _subcounty, 'parish': _parish, 'village': _village, } } sync_time = current_time + datetime.timedelta(seconds=60) queue_schedule(db, contact_params, sync_time, None, 'push_contact', reporter_id) conn.close()
def POST(self): params = web.input(ed="", d_id="", district="", subcounty="", release_order="", waybill="", quantity_bales="", warehouse="", warehouse_branch="", departure_date="", departure_time="", driver="", driver_tel="", remarks="", track_no_plate="", quantity_bales_old=0, parish="") session = get_session() current_time = datetime.datetime.now() allow_edit = False try: edit_val = int(params.ed) allow_edit = True except ValueError: pass with db.transaction(): if params.ed and allow_edit: q = db.query( "SELECT id FROM reporters WHERE " "replace(telephone, '+', '') = $tel OR " "replace(alternate_tel, '+', '') = $tel", {'tel': params.driver_tel.replace('+', '')}) if q: driver_id = q[0]['id'] else: q = db.query( "INSERT INTO reporters (firstname, telephone, reporting_location) " " VALUES ($name, $tel, 1) RETURNING id", { 'name': params.driver, 'tel': params.driver_tel }) driver_id = q[0]['id'] db.query( "INSERT INTO reporter_groups_reporters (group_id, reporter_id) " "VALUES ((SELECT id FROM reporter_groups WHERE name = 'Driver'), $reporter_id)", {'reporter_id': driver_id}) # Schedule a push_contact to Push driver to RapidPro contact_params = { 'phone': params.driver_tel, 'name': params.driver, 'groups': ['Driver'] } sync_time = current_time + datetime.timedelta( seconds=5 ) # XXX consider making the seconds configurable queue_schedule(db, contact_params, sync_time, session.sesid, 'push_contact') # check if new quantities leave us in a consistent state old_quantity = int(params.quantity_bales_old) quantity_bales = int(params.quantity_bales) if not can_still_distribute(db, quantity_bales, old_quantity): session.ddata_err = ( "You cannot distribute more than is available for distribution!" ) return web.seeother("/dispatch") session.ddata_err = "" r = db.query( "UPDATE distribution_log SET release_order=$release_order, " "destination=$destination, waybill=$waybill, warehouse_branch = $branch, " "departure_date=$ddate, departure_time=$dtime, remarks=$remarks, " "quantity_bales=$quantity_bales, quantity_nets=$quantity_nets, " " district_id=$district, " "delivered_by=$delivered_by WHERE id = $id RETURNING id", { 'release_order': params.release_order, 'destination': params.subcounty, 'waybill': params.waybill, 'branch': params.warehouse_branch, 'ddate': params.departure_date, 'dtime': params.departure_time, 'remarks': params.remarks, 'quantity_bales': params.quantity_bales, 'quantity_nets': (QUANTITY_PER_BALE * int(params.quantity_bales)), 'delivered_by': driver_id, 'district': params.district, 'id': params.ed }) if r: data_id = r[0]['id'] subcounty = "" district = "" parish = "" # get subcounty name to use in SMS sc = db.query( "SELECT get_location_name($subcounty) as name;", {'subcounty': params.subcounty}) if sc: subcounty = sc[0]['name'] # get parish name if available par = db.query( "SELECT get_location_name($parish) as name;", {'parish': params.parish}) if par: parish = par[0]['name'] db.query( "UPDATE distribution_log SET dest_parish = $parish " "WHERE id = $id", { 'parish': params.parish, 'id': data_id }) # get district name to use in SMS dist = db.query( "SELECT get_location_name($district) as name;", {'district': params.district}) if dist: district = dist[0]['name'] # sched_time = time to send SMS sched_time = current_time + datetime.timedelta( minutes=SMS_OFFSET_TIME) # appropriately edit scheduled messages sms_args = { 'parish': parish, 'subcounty': subcounty, 'district': district, 'waybill': params.waybill, 'quantity': quantity_bales, 'shortcode': config.get('shortcode', '6400') } national_reporters = get_location_role_reporters( db, 1, config['national_reporters']) district_reporters = get_location_role_reporters( db, params.district, config['district_reporters']) district_reporters += get_location_role_reporters( db, params.subcounty, ['Subcounty Supervisor']) subcounty_reporters = get_location_role_reporters( db, params.subcounty, config['subcounty_reporters']) parish_reporters = get_location_role_reporters( db, params.parish, config['parish_reporters']) scheduled_msgs = db.query( "SELECT a.schedule_id, a.level, a.triggered_by FROM distribution_log_schedules a, " " schedules b WHERE a.distribution_log_id = $log_id AND " " b.id = a.schedule_id AND b.status = 'ready' " " AND a.triggered_by = 1", {'log_id': data_id}) # XXX 'ready' if scheduled_msgs: # we still have ready schedules for s in scheduled_msgs: sched = db.query( "SELECT id FROM schedules WHERE id = $sched_id " "FOR UPDATE NOWAIT", {'sched_id': s['schedule_id']}) # build SMS to send to notifying parties sms_text = "" if parish: sms_text = config[ 'parish_nets_sms_prefix_template'] % sms_args sms_text += config[ 'national_sms_template'] % sms_args if s['level'] == 'national': sms_params = { 'text': sms_text, 'to': ' '.join(national_reporters) } update_queued_sms(db, s['schedule_id'], sms_params, sched_time, session.sesid) elif s['level'] == 'district': sms_params = { 'text': sms_text, 'to': ' '.join(district_reporters) } update_queued_sms(db, s['schedule_id'], sms_params, sched_time, session.sesid) elif s['level'] == 'subcounty': if subcounty_reporters and not parish: sms_text += ( '\n Once received / offloaded, please send ' '"REC %(waybill)s %(quantity)s" to %(shortcode)s' % sms_args) sms_params = { 'text': sms_text, 'to': ' '.join(subcounty_reporters) } update_queued_sms(db, s['schedule_id'], sms_params, sched_time, session.sesid) elif s['level'] == 'parish': if parish_reporters: sms_text += ( '\n Once received / offloaded, please send ' '"REC %(waybill)s %(quantity)s" to %(shortcode)s' % sms_args) sms_params = { 'text': sms_text, 'to': ' '.join(parish_reporters) } update_queued_sms(db, s['schedule_id'], sms_params, sched_time, session.sesid) elif s['level'] == 'driver': if parish: driver_sms_text = config[ 'driver_parish_sms_template'] % sms_args else: driver_sms_text = config[ 'driver_sms_template'] % sms_args sms_params = { 'text': driver_sms_text, 'to': params.driver_tel } update_queued_sms(db, s['schedule_id'], sms_params, sched_time, session.sesid) else: # no ready schedules were found sms_text = config['national_sms_template'] % sms_args sms_params = { 'text': sms_text, 'to': ' '.join(district_reporters) } sched_id = queue_schedule(db, sms_params, sched_time, session.sesid) log_schedule(db, data_id, sched_id, 'district') # print "+=======+=======+===>", district_reporters sms_params = { 'text': sms_text, 'to': ' '.join(national_reporters) } sched_id = queue_schedule(db, sms_params, sched_time, session.sesid) log_schedule(db, data_id, sched_id, 'national') # print "*=======*=======*===>", national_reporters if subcounty_reporters and not parish: sms_text += ( '\n Once received / offloaded, please send ' '"REC %(waybill)s %(quantity)s" to %(shortcode)s' % sms_args) sms_params = { 'text': sms_text, 'to': ' '.join(subcounty_reporters) } sched_id = queue_schedule(db, sms_params, sched_time, session.sesid) log_schedule(db, data_id, sched_id, 'subcounty') # print "@=======@=======@===>", subcounty_reporters if parish_reporters: sms_text += ( '\n Once received / offloaded, please send ' '"REC %(waybill)s %(quantity)s" to %(shortcode)s' % sms_args) sms_params = { 'text': sms_text, 'to': ' '.join(parish_reporters) } sched_id = queue_schedule(db, sms_params, sched_time, session.sesid) log_schedule(db, data_id, sched_id, 'parish') # print "@=======@=======@===>", parish_reporters # for the driver if parish: driver_sms_text = config[ 'driver_parish_sms_template'] % sms_args else: driver_sms_text = config[ 'driver_sms_template'] % sms_args sms_params = { 'text': driver_sms_text, 'to': params.driver_tel } sched_id = queue_schedule(db, sms_params, sched_time, session.sesid) log_schedule(db, data_id, sched_id, 'driver') log_dict = { 'logtype': 'Distribution', 'action': 'Update', 'actor': session.username, 'ip': web.ctx['ip'], 'descr': 'Updated distribution data id:%s, Waybill:%s, Qty (bales):%s' % (data_id, params.waybill, params.quantity_bales), 'user': session.sesid } audit_log(db, log_dict) return web.seeother("/dispatch") else: # check whether what we want to distribute is available in stock quantity_bales = int(params.quantity_bales) if not can_still_distribute(db, quantity_bales): session.ddata_err = ( "You cannot distribute more than is available for distribution!" ) return web.seeother("/dispatch") session.ddata_err = "" has_entry = db.query( "SELECT id FROM distribution_log WHERE waybill=$waybill", {'waybill': params.waybill}) if has_entry: session.ddata_err = ( "Entry with Waybill: %s already entered!" % params.waybill) return web.seeother("/dispatch") session.ddata_err = "" q = db.query("SELECT id FROM reporters WHERE telephone = $tel", {'tel': params.driver_tel}) if q: driver_id = q[0]['id'] else: q = db.query( "INSERT INTO reporters (firstname, telephone, reporting_location) " " VALUES ($name, $tel, 1) RETURNING id", { 'name': params.driver, 'tel': params.driver_tel }) driver_id = q[0]['id'] db.query( "INSERT INTO reporter_groups_reporters (group_id, reporter_id) " "VALUES ((SELECT id FROM reporter_groups WHERE name = 'Driver'), $reporter_id)", {'reporter_id': driver_id}) # Schedule a push_contact to Push driver to RapidPro contact_params = { 'phone': params.driver_tel, 'name': params.driver, 'groups': ['Driver'], } sync_time = current_time + datetime.timedelta( seconds=10 ) # XXX consider making the seconds configurable queue_schedule(db, contact_params, sync_time, session.sesid, 'push_contact') r = db.query( "INSERT INTO distribution_log (source, dest, release_order, waybill, " " quantity_bales, quantity_nets, remarks, warehouse_branch, " " departure_date, departure_time, destination, delivered_by, created_by, " " district_id, track_no_plate) " "VALUES('national', 'subcounty', $release_order, $waybill, $quantity_bales, " "$quantity_nets, $remarks, $branch, $ddate, $dtime, $destination, " "$delivered_by, $user, $district, $noplate) " "RETURNING id", { 'release_order': params.release_order, 'waybill': params.waybill, 'quantity_bales': params.quantity_bales, 'quantity_nets': (QUANTITY_PER_BALE * int(params.quantity_bales)), 'remarks': params.remarks, 'branch': params.warehouse_branch, 'ddate': params.departure_date, 'dtime': params.departure_time, 'destination': params.subcounty, 'delivered_by': driver_id, 'user': session.sesid, 'noplate': params.track_no_plate, 'district': params.district }) if r: log_id = r[0]['id'] subcounty = "" district = "" parish = "" # get subcounty name to use in SMS sc = db.query( "SELECT get_location_name($subcounty) as name;", {'subcounty': params.subcounty}) if sc: subcounty = sc[0]['name'] # get parish name if available par = db.query( "SELECT get_location_name($parish) as name;", {'parish': params.parish}) if par: parish = par[0]['name'] db.query( "UPDATE distribution_log SET dest_parish = $parish " "WHERE id = $id", { 'parish': params.parish, 'id': log_id }) # get district name to use in SMS dist = db.query( "SELECT get_location_name($district) as name;", {'district': params.district}) if dist: district = dist[0]['name'] # sched_time allows to give distribution_log edits sometime #SMS_OFFSET_TIME sched_time = current_time + datetime.timedelta( minutes=SMS_OFFSET_TIME) # build SMS to send to notifying parties sms_args = { 'parish': parish, 'subcounty': subcounty, 'district': district, 'waybill': params.waybill, 'quantity': quantity_bales, 'shortcode': config.get('shortcode', '6400') } sms_text = "" if parish: sms_text = config[ 'parish_nets_sms_prefix_template'] % sms_args sms_text += config['national_sms_template'] % sms_args district_reporters = get_location_role_reporters( db, params.district, config['district_reporters']) district_reporters += get_location_role_reporters( db, params.subcounty, ['Subcounty Supervisor']) sms_params = { 'text': sms_text, 'to': ' '.join(district_reporters) } sched_id = queue_schedule(db, sms_params, sched_time, session.sesid) log_schedule(db, log_id, sched_id, 'district') # print "+=======+=======+===>", district_reporters national_reporters = get_location_role_reporters( db, 1, config['national_reporters']) sms_params = { 'text': sms_text, 'to': ' '.join(national_reporters) } sched_id = queue_schedule(db, sms_params, sched_time, session.sesid) log_schedule(db, log_id, sched_id, 'national') # print "*=======*=======*===>", national_reporters subcounty_reporters = get_location_role_reporters( db, params.subcounty, config['subcounty_reporters']) parish_reporters = get_location_role_reporters( db, params.parish, config['parish_reporters']) if subcounty_reporters and not parish: sms_text += ( '\n Once received / offloaded, please send ' '"REC %(waybill)s %(quantity)s" to %(shortcode)s' % sms_args) sms_params = { 'text': sms_text, 'to': ' '.join(subcounty_reporters) } sched_id = queue_schedule(db, sms_params, sched_time, session.sesid) log_schedule(db, log_id, sched_id, 'subcounty') # print "@=======@=======@===>", subcounty_reporters if parish_reporters: sms_text += ( '\n Once received / offloaded, please send ' '"REC %(waybill)s %(quantity)s" to %(shortcode)s' % sms_args) sms_params = { 'text': sms_text, 'to': ' '.join(parish_reporters) } sched_id = queue_schedule(db, sms_params, sched_time, session.sesid) log_schedule(db, log_id, sched_id, 'parish') # print "@=======@=======@===>", parish_reporters # for the driver if parish: driver_sms_text = config[ 'driver_parish_sms_template'] % sms_args else: driver_sms_text = config[ 'driver_sms_template'] % sms_args sms_params = { 'text': driver_sms_text, 'to': params.driver_tel } sched_id = queue_schedule(db, sms_params, sched_time, session.sesid) log_schedule(db, log_id, sched_id, 'driver') log_dict = { 'logtype': 'Distribution', 'action': 'Create', 'actor': session.username, 'ip': web.ctx['ip'], 'descr': 'Added distribution entry id:%s, Waybill:%s, Qty (bales):%s' % (log_id, params.waybill, params.quantity_bales), 'user': session.sesid } audit_log(db, log_dict) return web.seeother("/dispatch") l = locals() del l['self'] return render.dispatch(**l)