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:
Russell Ballestrini 2024-06-19 10:13:50 -04:00
parent 62283edffd
commit f169d23aad
8 changed files with 42 additions and 10 deletions

View file

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

View file

@ -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}")

View file

@ -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 %}

View file

@ -27,6 +27,11 @@
required
autofocus />
<input
name = "next"
type = "hidden"
value = "{{ next }}" />
<br/>
<br/>

View file

@ -26,6 +26,11 @@
required
autofocus />
<input
name = "next"
type = "hidden"
value = "{{ next }}" />
<br/>
<br/>

View file

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

View file

@ -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")),
}

View file

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