Example #1
0
def process_google_message(request, input_xml=None, safe_to_raise=False):
    controller = get_controller()
    if input_xml is None:
        if not request.POST:
            raise Http404('Has to be a POST request')
        input_xml = request.raw_post_data
    try:
        output_xml = controller.receive_xml(input_xml)
        return HttpResponse(output_xml, mimetype='text/xml')
    except Exception, exc:
        # For testing -- propagate the exception
        if safe_to_raise:
            raise
        return HttpResponseServerError(str(exc))
Example #2
0
def confirm_order(request, template):
    # TODO: any other prettier way to get an array input parameter value?
    ITEMS_VAR_NAME = 'item_'
    CONTINUE_SHOPPING_URL = make_back_url(request, '/digital/thanks')
    FRENCH_TAX = 0.196 # In France in general they apply the TAX of 19.6%
    if request.POST:
        items = []
        for key in request.POST.keys():
            if key[:len(ITEMS_VAR_NAME)] == ITEMS_VAR_NAME:
                try:
                    items.append(int(request.POST[key]))
                except: pass
        try:
            items = [DigitalItem.objects.get(id=i) for i in items]
            if len(items) > 0:
                controller = get_controller()
                from gchecky.model import *
                cart = controller.prepare_order(
                    order = checkout_shopping_cart_t(
                        shopping_cart=shopping_cart_t(
                            items = [
                                item_t(
                                    name=item.title,
                                    description=item.description,
                                    unit_price=price_t(
                                        value=item.price,
                                        currency=item.currency
                                    ),
                                    # TODO: Does it make sense to buy more than one of the same digital?
                                    quantity=1,
                                    merchant_item_id=item.id,
                                    digital_content=digital_content_t(
                                        description=item.brief,
                                        email_delivery=True,
                                        #TODO: get view url
                                        url = make_back_url(request,
                                                            '/digital/item/%d/' % (item.id,))
                                    )
                                )
                                for item in items
                            ],
                            merchant_private_data = 'digital'
                        ),
                        checkout_flow_support = checkout_flow_support_t(
                            edit_cart_url = None,
                            continue_shopping_url = CONTINUE_SHOPPING_URL,
                            tax_tables = tax_tables_t(
                                merchant_calculated = False,
                                default = default_tax_table_t(
                                    tax_rules = [
                                        default_tax_rule_t(
                                            shipping_taxed = True,
                                            rate = FRENCH_TAX,
                                            tax_area = tax_area_t(
                                                world_area = True
                                            )
                                        )
                                    ]
                                )
                            )
                        ),
                        request_initial_auth_details=False
                    )
                )
                total = 0.
                for item in items:
                    total += item.price
                total = '%s%.2f' % (items[0].currency, total)
                return render_to_response(template,
                                          {'items':items,
                                           'cart':cart,
                                           'total':total},
                                          request=request)
        except:
            raise
    # TODO: get view url
    return redirect_to(request=request, url=make_back_url(request, '/digital/order/'))
Example #3
0
def get_available_donations():
    controller = get_controller()
    return [{'cart':prepare_simple_donation(controller, amount, title),
             'amount':('%s %.2f' % (controller.currency, amount)),
             'title':title}
            for (amount, title) in AVAILABLE_DONATIONS]