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))