def order(): if request.method == 'GET': session.clear() data = db.session.query(Config).first() if data.state != 'ordering': return redirect("/") form = OrderForm(request.form) if request.method == 'POST' and form.validate(): db.session.rollback() db.session.expunge_all() if form.item.data == 'half': order = Half() order.email = form.email.data + EMAIL_DOMAIN order.location = form.location.data order.topping1 = form.topping1.data order.topping2 = form.topping2.data order.topping3 = form.topping3.data elif form.item.data == 'whole': order = Pizza() person = Person() order.topping1_left = form.topping1.data order.topping2_left = form.topping2.data order.topping3_left = form.topping3.data order.topping1_right = form.topping4.data order.topping2_right = form.topping5.data order.topping3_right = form.topping6.data order.sauce = form.sauce.data order.size = 'Large' person.email = form.email.data + EMAIL_DOMAIN person.location = form.location.data order.person1 = person db.session.add(person) elif form.item.data == 'medium': order = Pizza() person = Person() order.topping1_left = form.topping1.data order.topping2_left = form.topping2.data order.topping1_right = form.topping4.data order.topping2_right = form.topping5.data order.sauce = form.sauce.data order.size = 'Medium' person.email = form.email.data + EMAIL_DOMAIN person.location = form.location.data order.person1 = person db.session.add(person) order.time_added = datetime.datetime.now() db.session.add(order) db.session.flush() session['order_id'] = order.id session['order_type'] = type(order).__name__ session['payment_amount'] = set_price(form) url = 'https://api.venmo.com/v1/oauth/authorize?client_id={}&scope=make_payments&response_type=code'.format( CONSUMER_ID) return redirect(url) return render_template('order.html', data=data, form=form, domain=EMAIL_DOMAIN, large_price=LARGE_PRICE, medium_price=MEDIUM_PRICE)
def order(): if request.method == 'GET': session.clear() data = db.session.query(Config).first() if data.state != 'ordering': return redirect("/") form = OrderForm(request.form) if request.method == 'POST' and form.validate(): db.session.rollback() db.session.expunge_all() if form.item.data == 'half': order = Half() order.email = form.email.data + EMAIL_DOMAIN order.location = form.location.data order.topping1 = form.topping1.data order.topping2 = form.topping2.data order.topping3 = form.topping3.data elif form.item.data == 'whole': order = Pizza() person = Person() order.topping1_left = form.topping1.data order.topping2_left = form.topping2.data order.topping3_left = form.topping3.data order.topping1_right = form.topping4.data order.topping2_right = form.topping5.data order.topping3_right = form.topping6.data order.sauce = form.sauce.data order.size = 'Large' person.email = form.email.data + EMAIL_DOMAIN person.location = form.location.data order.person1 = person db.session.add(person) elif form.item.data == 'medium': order = Pizza() person = Person() order.topping1_left = form.topping1.data order.topping2_left = form.topping2.data order.topping1_right = form.topping4.data order.topping2_right = form.topping5.data order.sauce = form.sauce.data order.size = 'Medium' person.email = form.email.data + EMAIL_DOMAIN person.location = form.location.data order.person1 = person db.session.add(person) order.time_added = datetime.datetime.now() db.session.add(order) db.session.flush() session['order_id'] = order.id session['order_type'] = type(order).__name__ session['payment_amount'] = set_price(form) url = 'https://api.venmo.com/v1/oauth/authorize?client_id={}&scope=make_payments&response_type=code'.format(CONSUMER_ID) return redirect(url) return render_template('order.html', data=data, form=form, domain=EMAIL_DOMAIN, large_price=LARGE_PRICE, medium_price=MEDIUM_PRICE)
def new_order(supplierid): supplier = Supplier.query.filter_by(id=supplierid).first_or_404() form = OrderForm() try: if form.is_submitted(): # when a post is submitted, we first check if all fields are valid if form.validate(): order = create_order(form, supplier) if order: db.session.add(order) db.session.commit() app.logger.info('Order "{}" criada com sucesso'.format( order.id)) return redirect( url_for('detail_supplier', supplierid=supplier.id)) else: flash(('A compra não foi registrada porque o valor total ' 'dos produtos foi R$0,00!')) return redirect( url_for('detail_supplier', supplierid=supplier.id)) else: # when a field is not valid, we flash a message with the error. app.logger.error(str(form.errors)) flash("Erro! Detalhes: {}".format(str(form.errors))) # when the page is loaded, a GET is executed. # In this case, we only fill table fields. else: if len(supplier.portfolio) == 0: msg = ('O fornecedor "{}"" não tem nenhum produto em seu' ' portfolio. Antes de cadastrar uma compra, você' ' precisa adicionar produtos ao seu portfolio.').format( supplier.name) app.logger.info(msg) flash(msg) return redirect( url_for('edit_supplier', supplierid=supplier.id)) for item in supplier.portfolio: order_item_form = OrderItemForm() order_item_form.item = item.name order_item_form.quantity = 0 order_item_form.unit_price = 0 order_item_form.unity = "" form.order_items.append_entry(order_item_form) except Exception as err: db.session.rollback() app.logger.error(str(err)) flash('ERRO: {}'.format(str(err))) return render_template('orderform.html', title="Cadastrar compra", form=form, supplier=supplier)
def submit(): form = OrderForm() for error in form.errors.items(): print(error) import sys sys.stdout.flush() if request.method == "POST" and form.validate(): email = form.email.data if validate_email(email): import sys sys.stdout.flush() user = User.get_or_create(email) orders = request.get_json()["order"] orders = [ Order(user, order["id"], order["in_half"], order["notes"]) for order in orders ] place_order(email, orders) return jsonify({"success": True}) return jsonify({"success": False})
def edit_order(orderid): order = Order.query.filter_by(id=orderid).first_or_404() supplier = Supplier.query.filter_by(id=order.supplier_id).first_or_404() form = OrderForm(obj=order) try: if form.is_submitted(): # when a post is submitted, we first check if all fields are valid if form.validate(): order = create_order(form, supplier, order) if order: db.session.commit() app.logger.info('Order "{}" editada com sucesso'.format( order.id)) return redirect( url_for('detail_supplier', supplierid=supplier.id)) else: flash(('A compra não foi alterada porque o valor total ' 'dos produtos foi R$0,00!')) return redirect( url_for('detail_supplier', supplierid=supplier.id)) else: # when a field is not valid, we flash a message with the error. app.logger.error(str(form.errors)) flash('Erro! Detalhes: {}'.format(str(form.errors))) else: for item in supplier.portfolio: if not order.has_item(item): order_item_form = OrderItemForm() order_item_form.item = item.name order_item_form.quantity = 0 order_item_form.unit_price = 0 order_item_form.unity = "" form.order_items.append_entry(order_item_form) except Exception as err: db.session.rollback() app.logger.error(str(err)) flash('ERRO: {}'.format(str(err))) return render_template('orderform.html', title="Editar compra", form=form, supplier=supplier)
def edit(id): order = Orders.query.filter_by(id=id).first() form = ShippingForm() delete_order_form = DeleteOrderForm() order_form = OrderForm() add_item_form = AddItemsForm() ship_status = dict(form.ship_status.choices).get(form.ship_status.data) if form.shipping_submit.data and form.validate(): if form.order_id.data is not None: order.order_id = form.order_id.data if order.ship_amount is None: order.ship_amount = form.ship_amount.data total = order.amount + order.ship_amount if order.order_status == 'Paid': due = order.ship_amount else: due = total message = "*{}'s* order has been shipped out. \n*Total:* {} \n*Due:* {} \n*Items(SGD):* {} \n*Status:* {} \n*Shipping(SGD):* {} \n*Shipping Status:* {}".format( order.buyer.name, total, due, order.amount, order.order_status, order.ship_amount, ship_status) print(message) sendtelegram(message) if form.ship_amount.data is not None: order.ship_amount = form.ship_amount.data if form.ship_status.data is not None: order.ship_status = ship_status db.session.commit() flash("Shipping info updated", "success") return redirect(url_for("edit", id=id)) if delete_order_form.delete_order_submit.data and delete_order_form.validate( ): db.session.delete(order) db.session.commit() flash("Order deleted", "success") return redirect(url_for('index')) if order_form.order_submit.data and order_form.validate(): order.order_status = dict(order_form.order_status.choices).get( order_form.order_status.data) if order_form.amount.data is not None: order.amount = order_form.amount.data db.session.commit() flash("Order details updated", "success") return redirect(url_for("edit", id=id)) if add_item_form.add_items_submit.data and add_item_form.validate(): if add_item_form.amount is not None: operators = add_item_form.operators.data if operators == 'add': order.amount += add_item_form.amount.data elif operators == 'deduct': order.amount -= add_item_form.amount.data db.session.commit() flash("Order amount updated", "success") return redirect(url_for('edit', id=id)) if (order.order_id and order.ship_amount ) is not None and form.validate() and form.shipping_submit.data: total = order.amount + order.ship_amount if order.amount == 'Paid': due = order.ship_amount else: due = total message = "*{}'s* order has been shipped out. \n*Total:* {} \n*Due:* {} \n*Order:* {} \n*Status:* {} \n*Shipping:* {} \n*Shipping Status:* {}".format( order.buyer.name, total, due, order.amount, order.order_status, order.ship_amount, order.ship_status) sendtelegram(message) return render_template('edit.html', order=order, form=form, delete_order_form=delete_order_form, order_form=order_form, add_item_form=add_item_form)