make sure we can clone carts and merge all attributes into new cart.
modified: make_post_sell/models/cart.py modified: make_post_sell/routes.py modified: make_post_sell/templates/cart.j2 modified: make_post_sell/templates/join-or-log-in.j2 modified: make_post_sell/templates/verification-challenge.j2 modified: make_post_sell/views/__init__.py modified: make_post_sell/views/authentication.py modified: make_post_sell/views/cart.py
This commit is contained in:
parent
62283edffd
commit
f169d23aad
8 changed files with 42 additions and 10 deletions
|
|
@ -156,6 +156,15 @@ class Cart(RBase, Base):
|
|||
tmp_cart[product_id] += count
|
||||
else:
|
||||
tmp_cart[product_id] = count
|
||||
|
||||
self.handling_option = other.handling_option
|
||||
self.handling_cost_in_cents = self.handling_cost_in_cents
|
||||
|
||||
for coupon in other.coupons:
|
||||
if coupon not in self.coupons:
|
||||
self.coupons.append(coupon)
|
||||
|
||||
# this busts memoization.
|
||||
self.cart = tmp_cart
|
||||
|
||||
@property
|
||||
|
|
|
|||
|
|
@ -50,6 +50,7 @@ def includeme(config):
|
|||
config.add_route("user_cart_public", "/u/cart/{cart_id}/public")
|
||||
config.add_route("user_cart_unpublic", "/u/cart/{cart_id}/unpublic")
|
||||
|
||||
|
||||
# cart routes.
|
||||
config.add_route("cart", "/cart")
|
||||
config.add_route("cart_checkout", "/cart/checkout")
|
||||
|
|
@ -59,7 +60,7 @@ def includeme(config):
|
|||
config.add_route("cart_remove_product", "/cart/{cart_id}/remove")
|
||||
config.add_route("cart_quantity_product", "/cart/{cart_id}/quantity")
|
||||
|
||||
config.add_route("cart_handling_option", "/u/cart/{cart_id}/handling-option")
|
||||
config.add_route("cart_handling_option", "/cart/{cart_id}/handling-option")
|
||||
|
||||
config.add_route("view_invoice", "/invoices/{invoice_id}")
|
||||
|
||||
|
|
|
|||
|
|
@ -196,7 +196,7 @@
|
|||
<h2>Total: ${{ '%0.2f' % cart.total }}</h2>
|
||||
{% endif %}
|
||||
|
||||
{% if not cart.is_empty %}
|
||||
{% if not cart.is_empty and request.user == cart.user %}
|
||||
|
||||
<a href="/u/cart/{{ cart.id }}/checkout" class="cart-checkout-button mps-button">Checkout</a>
|
||||
|
||||
|
|
@ -216,9 +216,9 @@
|
|||
<a href="/u/cart/save" class="cart-save-button mps-button">Save Cart</a>
|
||||
<br/>
|
||||
|
||||
{% elif request.user and request.active_cart != cart %}
|
||||
{% elif request.active_cart != cart %}
|
||||
|
||||
{% if request.user == cart.user %}
|
||||
{% if request.user and request.user == cart.user %}
|
||||
<a href="/u/cart/{{ cart.id }}/activate" class="cart-activate-button mps-button">Make Cart Active</a>
|
||||
<br/>
|
||||
{% else %}
|
||||
|
|
|
|||
|
|
@ -27,6 +27,11 @@
|
|||
required
|
||||
autofocus />
|
||||
|
||||
<input
|
||||
name = "next"
|
||||
type = "hidden"
|
||||
value = "{{ next }}" />
|
||||
|
||||
<br/>
|
||||
<br/>
|
||||
|
||||
|
|
|
|||
|
|
@ -26,6 +26,11 @@
|
|||
required
|
||||
autofocus />
|
||||
|
||||
<input
|
||||
name = "next"
|
||||
type = "hidden"
|
||||
value = "{{ next }}" />
|
||||
|
||||
<br/>
|
||||
<br/>
|
||||
|
||||
|
|
|
|||
|
|
@ -19,8 +19,11 @@ def user_required(
|
|||
if request.user and request.user.authenticated:
|
||||
return fn(request)
|
||||
request.session.flash((flash_msg, flash_level))
|
||||
next_url = request.url
|
||||
if redirect_to_route_name:
|
||||
return HTTPFound(request.route_url(redirect_to_route_name))
|
||||
return HTTPFound(
|
||||
request.route_url(redirect_to_route_name, _query={"next": next_url})
|
||||
)
|
||||
return HTTPFound(get_referer_or_home(request))
|
||||
|
||||
return inner
|
||||
|
|
|
|||
|
|
@ -82,11 +82,14 @@ def join_or_log_in(request):
|
|||
|
||||
request.session.flash(msg)
|
||||
|
||||
email_encoded = urlencode({"email": email})
|
||||
email_encoded = urlencode(
|
||||
{"email": email, "next": request.params.get("next", "")}
|
||||
)
|
||||
return HTTPFound("/verification-challenge?{}".format(email_encoded))
|
||||
|
||||
return {
|
||||
"title": "join or log in",
|
||||
"next": request.params.get("next", request.route_url("home")),
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -127,9 +130,14 @@ def verification_challenge(request):
|
|||
# save user and user's active cart.
|
||||
request.dbsession.add(user)
|
||||
request.dbsession.add(request.active_cart)
|
||||
|
||||
request.dbsession.flush()
|
||||
return HTTPFound("/")
|
||||
|
||||
if request.active_cart.count > 0:
|
||||
next_url = "/cart"
|
||||
else:
|
||||
next_url = request.params.get("next", request.route_url("home"))
|
||||
|
||||
return HTTPFound(next_url)
|
||||
|
||||
else:
|
||||
msg = ("Invalid Verification Code", "error")
|
||||
|
|
@ -139,4 +147,5 @@ def verification_challenge(request):
|
|||
"title": "Please Enter Verification Code",
|
||||
"email": email,
|
||||
"raw_otp": raw_otp,
|
||||
"next": request.params.get("next", request.route_url("home")),
|
||||
}
|
||||
|
|
|
|||
|
|
@ -101,7 +101,6 @@ def cart_unpublic(request):
|
|||
|
||||
|
||||
@view_config(route_name="user_cart_activate")
|
||||
@user_required()
|
||||
def cart_activate(request):
|
||||
cart = get_cart_from_matchdict(request)
|
||||
|
||||
|
|
@ -119,7 +118,7 @@ def cart_activate(request):
|
|||
msg = ("This cart is already your active cart.", "success")
|
||||
|
||||
else:
|
||||
if request.user.owns_cart(cart):
|
||||
if request.user and request.user.owns_cart(cart):
|
||||
msg = ("You activated that cart.", "success")
|
||||
request.shop.make_cart_active_for_user(request.user, cart)
|
||||
else:
|
||||
|
|
@ -128,6 +127,7 @@ def cart_activate(request):
|
|||
new_cart.merge_in_cart(cart)
|
||||
request.dbsession.add(new_cart)
|
||||
request.session.flash(msg)
|
||||
request.session["active_cart_id"] = new_cart.uuid_str
|
||||
return HTTPFound("/cart/{}".format(new_cart.id))
|
||||
|
||||
request.session.flash(msg)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue