Exemplo n.º 1
0
def cart_finalize(seller):
    T = {'sellername':seller}
    helpers.template.get_user(T=T, path=request.path)
    if not "user" in T:
        flash(u'ログインしてから再度カートに追加してください', category='warning')
        return redirect(url_for('cart_index', seller=seller))

    # FIXME: ブラウザ2重起動によるセッション情報の変更検知

    cart_cache_key = 'C-%s' % (T["user"].user_id())
    cart = memcache.get(cart_cache_key)
    if not cart or not seller in cart:
        flash(u'カートが空です', category='warning')
        return redirect(url_for('cart_index', seller=seller))

    has_error = None
    reserved  = {}
    for code, item in cart[seller].items():
        stock = ProductStock.get_by_key_name("%s-%s" % (seller, code))
        stock.quantity -= item['quantity']
        if stock.quantity < 0:
            has_error = code
            break
        stock.put()
        reserved[code] = item['quantity']

    if has_error:
        for code, quatity in reserved.items():
            stock = ProductStock.get_by_key_name("%s-%s" % (seller, code))
            stock.quantity += quantity
            stock.put()
        flash(u'商品コード %s の在庫がなくなりました' % has_error,
              category='warning')
        return redirect(url_for('cart_index', seller=seller))
    
    content = {"cart" : helpers.template.calc_cart(cart[seller]),
               "buyer": cart["BUYER"]}

    key_name = "-".join([seller,
                         T["user"].user_id(),
                         datetime.datetime.now().strftime('%Y-%m-%d-%H-%M-%S'),
                         str(random.randint(0,256))])

    order = Order(key_name = key_name,
                  cart = unicode(json.dumps(helpers.template.calc_cart(cart[seller]))),
                  seller   = seller,
                  status   = 0)

    order.buyer_mail = cart["BUYER"]["mail"]
    order.buyer_note = cart["BUYER"]["note"]
    order.buyer_ship_country    = cart["BUYER"]["ship"]['country']
    order.buyer_ship_postalcode = cart["BUYER"]["ship"]['postalcode']
    order.buyer_ship_pref       = cart["BUYER"]["ship"]['pref']
    order.buyer_ship_city       = cart["BUYER"]["ship"]['city']
    order.buyer_ship_addr1      = cart["BUYER"]["ship"]['addr1']
    order.buyer_ship_addr2      = cart["BUYER"]["ship"]['addr2']

    order.put()

    del(cart[seller])
    memcache.set(cart_cache_key, cart, 86400)

    return redirect(url_for('cart_finished', seller=seller))