def placeorder(): cart_items = Cart.query.filter_by(user_id=current_user.id).all() form = ShopOrderConfirmForm() if form.validate_on_submit(): new_request = Request() new_request.user_id = current_user.id if not current_user.customer: flash(gettext("We apologize but your customer data is insufficient. Please, contact our customer support.")) return redirect(url_for("shop")) customer_note = form.note.data if customer_note: new_request.note = customer_note new_request.customer_id = current_user.customer.id new_request.active_flg = True db.session.add(new_request) db.session.commit() for item in cart_items: new_product = db.session.query(Product).filter_by(id=item.product_id).first() if not new_product: flash(gettext("Product not found.")) return redirect(url_for("shop")) rp = RequestedProducts(quantity=item.quantity) rp.product = new_product rp.request_id = new_request.id new_request.products.append(rp) db.session.delete(item) db.session.commit() # send confirmation email mailer.order_confirmation(current_user, new_request) flash(gettext("Order created successfully.")) return redirect(url_for("orderconfirm", req_id=new_request.id)) discount = 0 if current_user.role == USER_ROLES['ROLE_CUSTOMER'] and current_user.customer: discount = current_user.customer.base_discount total = 0 pieces = 0 for item in cart_items: if not item.product.price_retail: item.product.price_retail = 0 unrounded_price = item.product.price_retail * (1.0 - discount) item.customer_price = int(5 * round(float(unrounded_price)/5)) total += item.customer_price * item.quantity pieces += item.quantity urls = getImgUrls(item.product.id) if urls: item.img_url = urls[0].split('app')[1] else: item.img_url = NO_PHOTO_URL.split('app')[1] return render_template('/shop/placeorder.html', title=gettext('Place order'), cart_items=cart_items, total=total, pieces=pieces, form=form)