Пример #1
0
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')
Пример #2
0
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')
Пример #3
0
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')
Пример #4
0
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')
Пример #5
0
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')
Пример #6
0
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')
Пример #7
0
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')
Пример #8
0
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')
Пример #9
0
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')
Пример #10
0
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')
Пример #11
0
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')
Пример #12
0
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)
Пример #13
0
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')
Пример #14
0
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)