def enter_vendor_name(request, start_response): if not request['input']: return start_response(message='Please enter your name\n', next='enter_vendor_name', params=request['params']) else: request['params']['name'] = request['input'] return forward(request, 'select_vendor_village')
def describe_kiosk_location(request, start_response): if not request['input']: return start_response( message='Describe your location relative to the landmark using 160 characters.', next='describe_kiosk_location', params=request['params'] ) else: request['params']['description'] = request['input'] return forward(request, 'select_purification_method')
def enter_vendor_name(request, start_response): if not request['input']: return start_response( message='Please enter your name\n', next='enter_vendor_name', params=request['params'] ) else: request['params']['name'] = request['input'] return forward(request, 'select_vendor_village')
def describe_kiosk_location(request, start_response): if not request['input']: return start_response( message= 'Describe your location relative to the landmark using 160 characters.', next='describe_kiosk_location', params=request['params']) else: request['params']['description'] = request['input'] return forward(request, 'select_purification_method')
def enter_preference(request, start_response): if not request['input']: return start_response(message=print_menu([ ('Find cheapest water near me', ), ('Find clean water only', ) ]), next='enter_preference', params=request['params']) else: request['params']['preference'] = request['input'] return forward(request, 'select_village')
def enter_preference(request, start_response): if not request['input']: return start_response( message=print_menu( [ ('Find cheapest water near me',), ('Find clean water only', ) ] ), next='enter_preference', params=request['params'] ) else: request['params']['preference'] = request['input'] return forward(request, 'select_village')
def list_ads(request, start_response, limit=4, sort_by=None): # Buyer just landed on this page # Buyer has used M-Maji before try: buyer = Buyer.objects.get(phone_number=request['phone_number']) ads = Advertisement.objects.select_related( 'kiosk', 'kiosk__seller, kiosk__landmark', ) # Check if buyer has specified a particular landmark in this # session, else use their default landmark landmark = request['params'].get('landmark_id', buyer.landmark) ads = ads.filter(kiosk__landmark=buyer.landmark) # Check if buyer has specified a preference for clean / cheap # in this session, else apply their default preference preference = request['params'].get('preference', buyer.preference) if preference == Buyer.CLEAN_PREFERENCE: ads = ads.exclude( kiosk__seller__purification_method=Seller.NO_PURIFICATION )[:limit] # Build listings t = Template('${price} KES $seller @ $landmark$condition') listings = [] for ad in ads: condition = '' if (ad.kiosk.seller.purification_method != Seller.NO_PURIFICATION): condition = ', purified' listing = ( t.substitute( price=ad.price, seller=ad.kiosk.seller.name, landmark=ad.kiosk.landmark, condition=condition ) ) listings.append(listing) # raise Exception('ads is %s' % str(ads)) params = dict((i+1, ad.id) for i, ad in enumerate(ads)) request['params'].update(params) menu = [(listing, 'view_ad') for listing in listings] menu += [ ('More', 'list_ads', {'limit':None}), ('Options', 'ads_options'), ] # First-time buyer except Buyer.DoesNotExist, be: return forward(request, 'new_buyer')
def list_ads(request, start_response, limit=4, sort_by=None): # Buyer just landed on this page # Buyer has used M-Maji before try: buyer = Buyer.objects.get(phone_number=request['phone_number']) ads = Advertisement.objects.select_related( 'kiosk', 'kiosk__seller, kiosk__landmark', ) # Check if buyer has specified a particular landmark in this # session, else use their default landmark landmark = request['params'].get('landmark_id', buyer.landmark) ads = ads.filter(kiosk__landmark=buyer.landmark) # Check if buyer has specified a preference for clean / cheap # in this session, else apply their default preference preference = request['params'].get('preference', buyer.preference) if preference == Buyer.CLEAN_PREFERENCE: ads = ads.exclude(kiosk__seller__purification_method=Seller. NO_PURIFICATION)[:limit] # Build listings t = Template('${price} KES $seller @ $landmark$condition') listings = [] for ad in ads: condition = '' if (ad.kiosk.seller.purification_method != Seller.NO_PURIFICATION): condition = ', purified' listing = (t.substitute(price=ad.price, seller=ad.kiosk.seller.name, landmark=ad.kiosk.landmark, condition=condition)) listings.append(listing) # raise Exception('ads is %s' % str(ads)) params = dict((i + 1, ad.id) for i, ad in enumerate(ads)) request['params'].update(params) menu = [(listing, 'view_ad') for listing in listings] menu += [ ('More', 'list_ads', { 'limit': None }), ('Options', 'ads_options'), ] # First-time buyer except Buyer.DoesNotExist, be: return forward(request, 'new_buyer')
def send_info_sms(request, start_response): t = Template("$price KES $kiosk_description\n") advert = Advertisement.objects.get( id=request['params']['advertisement_id']) kiosk = advert.kiosk sms_message = t.substitute(price=advert.price, kiosk_description=kiosk.description) if sms_message: Message(to=("+%s" % request['phone_number']), text=sms_message).save() return ussd.response("SMS sent to +%(phone_number)s.\nThank you for using M-Maji."%\ ({'phone_number':request['phone_number']}), None, status=ussd.STOP) #TODO: Should we inform the client if there is an error, #Or just Queue up for later? return forward(request, 'quit')
def send_info_sms(request, start_response): t = Template("$price KES $kiosk_description\n") advert = Advertisement.objects.get(id=request['params']['advertisement_id']) kiosk = advert.kiosk sms_message = t.substitute( price=advert.price, kiosk_description=kiosk.description ) if sms_message: Message(to=("+%s" % request['phone_number']), text=sms_message).save() return ussd.response("SMS sent to +%(phone_number)s.\nThank you for using M-Maji."%\ ({'phone_number':request['phone_number']}), None, status=ussd.STOP) #TODO: Should we inform the client if there is an error, #Or just Queue up for later? return forward(request, 'quit')
def place_ad(request, start_response): try: seller = Seller.objects.get(phone_number=request['phone_number']) menu = [ ('New advertisement', 'select_kiosk', {'seller_id':seller.id}), ('Add kiosk', 'select_village', {'create':0, 'landmarks':'select_vendor_landmark'}) ] if not request['input']: return start_response( message=print_menu(menu), next='place_ad', params=request['params'] ) else: return forward_from_menu(request, menu) except Seller.DoesNotExist: return forward(request, 'enter_vendor_name')
def view_ad(request, start_response): menu = [('Send me info via SMS', 'send_info_sms'), ('Back', 'list_ads')] if not request['input']: t = Template("$price KES $kiosk_description\n") advert = Advertisement.objects.get( id=request['params']['advertisement_id']) kiosk = advert.kiosk greeting = t.substitute(price=advert.price, kiosk_description=kiosk.description) message = greeting + print_menu(menu) return start_response(message=message, next='view_ad', params=request['params']) else: handler_name = get_handler(request, menu) return forward(request, handler_name)
def place_ad(request, start_response): try: seller = Seller.objects.get(phone_number=request['phone_number']) menu = [('New advertisement', 'select_kiosk', { 'seller_id': seller.id }), ('Add kiosk', 'select_village', { 'create': 0, 'landmarks': 'select_vendor_landmark' })] if not request['input']: return start_response(message=print_menu(menu), next='place_ad', params=request['params']) else: return forward_from_menu(request, menu) except Seller.DoesNotExist: return forward(request, 'enter_vendor_name')
def view_ad(request, start_response): menu = [ ('Send me info via SMS', 'send_info_sms'), ('Back', 'list_ads') ] if not request['input']: t = Template("$price KES $kiosk_description\n") advert = Advertisement.objects.get(id=request['params']['advertisement_id']) kiosk = advert.kiosk greeting = t.substitute( price=advert.price, kiosk_description=kiosk.description ) message = greeting + print_menu(menu) return start_response(message=message, next='view_ad', params=request['params']) else: handler_name = get_handler(request, menu) return forward(request, handler_name)