Beispiel #1
0
def add_to_cart(add_to_cart):
	# try:
		print("メニューIDは" + add_to_cart["menu_id"])
		print("注文数量は" + add_to_cart["order_quantity"])

		store_id=session['store_id']
		table_number=session['table_number']
		group_id=session['group_id']

		menu_id=add_to_cart["menu_id"]
		order_quantity=add_to_cart["order_quantity"]

		# カートに加えられるアイテムが正しいか判定
		store_id==db.session.query(Menu.STORE_ID).filter_by(STORE_ID=store_id, MENU_ID=menu_id).one()

		#order_status=0はかごに入ってる状態を示す
		order_status=0

		# 既にオーダーされている種類であれば数量追加、なければ新規登録
		try:
			existing_order=db.session.query(Order).filter_by(STORE_ID=store_id, TABLE_NUMBER=table_number, GROUP_ID=group_id, ORDER_STATUS=order_status, MENU_ID=menu_id).one()
			existing_order.ORDER_QUANTITY=existing_order.ORDER_QUANTITY + int(order_quantity)
			db.session.commit()
			db.session.close()
		except:
			db.session.add(Order(STORE_ID=store_id, TABLE_NUMBER=table_number, GROUP_ID=group_id, ORDER_STATUS=order_status, MENU_ID=menu_id, ORDER_QUANTITY=order_quantity))
			db.session.commit()
			db.session.close()

		total_quantity=FlaskAPI.total_quantity(store_id, table_number, group_id, order_status)
		order_item=FlaskAPI.order_item(store_id, table_number, group_id, order_status, menu_id)
		print(order_item)
		print(type(order_item))
		room=session['room']
		emit("add_to_cart",{'total_quantity': total_quantity, 'order_item': order_item}, room=room)
Beispiel #2
0
def day_sales_data():
    period_start = request.json['period_day']
    store_id = session['store_id']
    period_start = FlaskAPI.str_to_date(period_start)
    period_end = period_start + datetime.timedelta(days=1)
    #DBクエリの発行により情報を格納する
    order_data = db.session.query(
     Order.ORDER_ID,
     Menu.CLASS_1,
     Menu.CLASS_2,
     Menu.CLASS_3,
     Menu.PRICE,
     Order.ORDER_QUANTITY,
     Order.ORDER_STATUS,
     Order.TABLE_NUMBER,
     Order.GROUP_ID,
     Order.MENU_ID
    ).\
    join(Order, Order.MENU_ID==Menu.MENU_ID).\
    filter(Order.STORE_ID==store_id, Order.ORDER_TIMESTAMP>=period_start, Order.ORDER_TIMESTAMP<period_end).\
    all()
    menu_list = db.session.query(
     Menu.MENU_ID,
     Menu.CLASS_1,
     Menu.CLASS_2,
     Menu.CLASS_3,
     Menu.PRICE
    ).\
    filter(Menu.STORE_ID==store_id).\
    all()
    db.session.close()
    period = [period_start, period_end]
    data = {'order_data': order_data, 'menu_list': menu_list, 'period': period}
    return jsonify(data)
Beispiel #3
0
def change_quantity(change_cart):
	try:
		print("注文IDは" + change_cart["order_id"])
		print("注文数量が" + str(change_cart["order_quantity"]) + "になりました")

		store_id=session['store_id']
		table_number=session['table_number']
		group_id=session['group_id']
		order_id=change_cart["order_id"]
		order_quantity=change_cart["order_quantity"]
		order_status=0

		# カートに加えられるアイテムが正しいか判定エラーが出ればexceptに飛ばす
		order_item=db.session.query(Order).\
		filter_by(ORDER_ID=order_id, STORE_ID=store_id).one()
		menu_id=order_item.MENU_ID

		# 注文数量が0の時、カートのステータスをカゴ落ち(1)に変更する
		if order_quantity<=0:
			order_item.ORDER_STATUS=1
		print(order_item)

		# 数量の変更
		order_item.ORDER_QUANTITY=order_quantity
		print(order_item)
		db.session.commit()
		db.session.close()

		total_quantity=FlaskAPI.total_quantity(store_id, table_number, group_id, order_status)
		room=session['room']
		emit("change_cart",{'total_quantity': total_quantity, 'order_id': order_id, 'order_quantity':order_quantity}, room=room)
	except:
		 room=session['room']
		 emit("server_to_client_connection","false", room=room)
Beispiel #4
0
def login():
    session.clear()  #エラーのセッションなどを持っている可能性があるので、クリアしている
    e_mail = request.form['e_mail']
    password = request.form['password']
    user = Staff.query.filter_by(E_MAIL=e_mail).first()
    if user is not None and FlaskAPI.verify_password(user.PASSWORD,
                                                     password) == True:
        #パスワードOKの処理
        login_user(user)
        session['loggin'] = True  #これは必要ないが、どこかで見ている可能性があるので残しておく。
        session['store_id'] = user.STORE_ID
        session['staff_id'] = user.STAFF_ID
        store_info = db.session.query(Store).filter(
            Store.STORE_ID == user.STORE_ID).one()
        session['store_name'] = store_info.STORE_NAME
        session['table_number'] = 0
        session['tables'] = store_info.TABLES
        username_session = user.STORE_ID  #デバック用

        #bufへ店舗専用のディレクトリを作成する(初回ログインのみ)
        store_dir_path = app.config['BUF_DIR'] + "/" + str(user.STORE_ID)
        if (os.path.isdir(store_dir_path) == False):
            os.makedirs(store_dir_path)

        return redirect('/')
    else:
        #パスワードNGの処理
        session['error'] = "メールアドレスもしくはパスワードが間違っています"
        return render_template('login.html')
Beispiel #5
0
def order_menu():
    try:
        one_time_password = session['one_time_password']
        one_time_password_check = db.session.query(Table.ONE_TIME_PASSWORD).\
                filter(Table.ONE_TIME_PASSWORD==one_time_password).\
                one()
        store_id = session['store_id']
        table_number = session['table_number']
        session['group_id'] = FlaskAPI.group_id()
        session['room'] = str(session['store_id']) + '_' + str(
            session['table_number']) + '_' + str(session['group_id'])
        class_2 = db.session.query(Menu.CLASS_1_ID, Menu.CLASS_2_ID, Menu.CLASS_2).filter(Menu.STORE_ID==store_id).\
            group_by(Menu.CLASS_1_ID, Menu.CLASS_2_ID, Menu.CLASS_2).\
            order_by(Menu.CLASS_2_ID).\
            all()
        class_3 = db.session.query(Menu.MENU_ID, Menu.CLASS_1_ID, Menu.CLASS_2_ID, Menu.CLASS_3_ID, Menu.CLASS_3, Menu.PRICE).filter(Menu.STORE_ID==store_id).\
            order_by(Menu.CLASS_3_ID).\
            all()
        return render_template('order.html',
                               class_2=class_2,
                               class_3=class_3,
                               table_number=table_number,
                               one_time_password=one_time_password)
    except:
        return redirect("/logout")
Beispiel #6
0
def create_account():
    #エラーのセッションなどを持っている可能性があるので、クリアしている
    session.clear()
    e_mail = request.form['e_mail']
    password = FlaskAPI.hash_password(request.form['password'])
    # メールアドレスとパスワードが両方ある場合既に登録されているので、.one()がエラーを吐きexceptに飛ぶ。(.first()だとエラーにならないので注意)
    try:
        double_create_check = db.session.query(Staff).filter(Staff.E_MAIL==e_mail, Staff.PASSWORD!="").one()
        print(double_create_check.E_MAIL + "は既に存在しています")
        session['error'] = "そのメールアドレスは使用できません"
        return render_template('login.html')
    except NoResultFound as ex:
        print(ex)
# メールアドレスは存在するが、パスワードが存在しない場合、招待されているので、tryで処理する。(STAFF_CLASSは招待時に付与される想定)
        try:
            staff = db.session.query(Staff).filter(Staff.E_MAIL==e_mail, Staff.PASSWORD=="").one()
            staff.update({PASSWORD: password})
            db.session.commit()
            db.session.close()
            # 今の所、招待機能は追加していないので、エラーに飛ぶようにしている
            return render_template('error_1.html')
# 上記2パターン以外の場合、純粋な新規登録なので下記で処理
        except:
            db.session.add(Staff(E_MAIL=e_mail, PASSWORD=password, STAFF_CLASS_ID=1, STAFF_CLASS="Representative")) #代表者として登録。その際のIDは1とする。
            store_create=db.session.query(Staff).filter(Staff.E_MAIL==e_mail).one() #登録した代表者のレコードを抽出
            store_create.STORE_ID = store_create.STAFF_ID
            store_id=store_create.STAFF_ID  #登録した代表者のSTAFF_IDを取得
            db.session.add(Store(STORE_ID=store_id))    #代表者が登録された場合、新しいお店としてstoresテーブルに登録
            db.session.commit()
            db.session.close()
        return redirect("/login")
Beispiel #7
0
def login():
    session.clear()     #エラーのセッションなどを持っている可能性があるので、クリアしている
    e_mail = request.form['e_mail']
    password = request.form['password']
# メールアドレスが合致しているかで、アカウントがあるかを確認
    try:
        login_user = db.session.query(Staff).filter(Staff.E_MAIL==e_mail).one()
        login_password = FlaskAPI.verify_password(login_user.PASSWORD, password)
        if login_password == True:
            #パスワードOKの処理
            session['loggin'] = True
            session['store_id'] = login_user.STORE_ID
            session['staff_id'] = login_user.STAFF_ID
            store_info = db.session.query(Store).filter(Store.STORE_ID==login_user.STORE_ID).one()
            session['store_name'] = store_info.STORE_NAME
            session['table_number'] = 0
            session['tables'] = store_info.TABLES
            username_session = login_user.STORE_ID#デバック用

            #bufへ店舗専用のディレクトリを作成する(初回ログインのみ)
            store_dir_path = app.config['BUF_DIR'] + "/" + str(login_user.STORE_ID)
            if (os.path.isdir(store_dir_path) == False):
                os.makedirs(store_dir_path)
                print("{} is CREATE".format(store_dir_path))

            return redirect('/')
        else:
            #パスワードNGの処理
            session['error'] = "メールアドレスもしくはパスワードが間違っています"
            return render_template('login.html')
    except:
        session['error'] = "メールアドレスもしくはパスワードが間違っています"   #この処理はアカウントが存在しない場合に起こるが、エラー文を変えるとリスクがあるので、パスワードエラーと同一の文章にしている
        return render_template('login.html')
Beispiel #8
0
def qr_generate():
    store_id = session['store_id']
    #DBクエリの発行により情報を格納する
    store_info = db.session.query(Store).filter(
        Store.STORE_ID == store_id).one()
    store_name = store_info.STORE_NAME
    tablenum = store_info.TABLES

    QR_name = []
    QR_save_path = []

    for i in range(tablenum):
        QR_string = str(store_id) + "-" + store_name + "-" + str(i + 1)

        QR_name.append("{}".format(QR_string))
        QR_save_path.append(FlaskAPI.qrmaker(QR_string, store_id, store_name))

        #QRのZipファイル化(ここは後々関数化予定)
        with zipfile.ZipFile(app.config['BUF_DIR'] + "/" + str(store_id) +
                             "/" + "grandmenu.zip",
                             'w',
                             compression=zipfile.ZIP_DEFLATED) as new_zip:
            for n in range(len(QR_save_path)):
                new_zip.write(QR_save_path[n],
                              arcname="table_QR" + "/" + QR_name[n] + ".png")
    return render_template("/qrcode/zipdownload.html", tablenum=tablenum)
Beispiel #9
0
def check__submit_for_kitchin(table_number):
    store_id = session['store_id']
    table_number = table_number['table_number']
    group_id = FlaskAPI.group_id_for_kitchin(table_number)
    db.session.query(Order).filter(
        Order.STORE_ID == store_id, Order.TABLE_NUMBER == table_number,
        Order.GROUP_ID == group_id,
        Order.ORDER_STATUS == status_check_request).update(
            {Order.ORDER_STATUS: status_checked})
    db.session.query(Order).filter(
        Order.STORE_ID == store_id, Order.TABLE_NUMBER == table_number,
        Order.GROUP_ID == group_id,
        or_(Order.ORDER_STATUS == status_orderd,
            Order.ORDER_STATUS == status_cooked)).update(
                {Order.ORDER_STATUS: status_checked})
    db.session.query(Table).filter(Table.STORE_ID == store_id,
                                   Table.TABLE_NUMBER == table_number).update({
                                       Table.TABLE_ACTIVATE:
                                       0,
                                       Table.ONE_TIME_PASSWORD:
                                       None,
                                       Table.TOTAL_FEE:
                                       None
                                   })
    db.session.commit()
    emit("checkout", {'table_number': table_number}, room=store_id)
Beispiel #10
0
def table_activate(table_number):
    # activate_statusをDBに書き込み、クライアント側に情報を戻して、反映する
    store_id = session['store_id']
    table_number = table_number["table_number"]
    activate_status_befor = db.session.query(Table.TABLE_ACTIVATE).\
     filter(Table.STORE_ID==store_id, Table.TABLE_NUMBER==table_number).\
     scalar()
    type(activate_status_befor)
    if activate_status_befor == 0:
        while True:
            one_time_password = FlaskAPI.one_time_password()
            # one_time_password = '******' わざと無限ループを起こす場合に使用
            one_time_password_exists = db.session.query(Table.ONE_TIME_PASSWORD).\
             filter(Table.ONE_TIME_PASSWORD==one_time_password).\
             scalar()
            if one_time_password != one_time_password_exists:
                activate_status_after = 1
                break
    else:
        one_time_password = None
        activate_status_after = 0

    db.session.query(Table).\
     filter(Table.STORE_ID==store_id, Table.TABLE_NUMBER==table_number).\
     update({Table.TABLE_ACTIVATE: activate_status_after, Table.ONE_TIME_PASSWORD: one_time_password})
    db.session.commit()
    db.session.close()
    table_information = {
        'table_number': table_number,
        'activate_status': activate_status_after,
        'one_time_password': one_time_password
    }
    emit("table_activate", table_information, room=store_id)
    emit("table_activate_origin", table_information)
Beispiel #11
0
def index():
    # sessionに'login'がなければlogout処理
    login_check = FlaskAPI.login_check()
    # 店舗名が登録されてなければ、store_settingに飛ばす
    try:
        store_id = session['store_id']
        store_name = db.session.query(Store.STORE_NAME).filter(Store.STORE_ID==store_id, Store.STORE_NAME != "", Store.TABLES != None).one()
        return render_template('index.html',store_name=store_name)
    except:
        return redirect('/store_setting')
Beispiel #12
0
def one_time_password(one_time_password):
    session.clear()
    try:
        tables = db.session.query(Table).\
                filter(Table.ONE_TIME_PASSWORD==one_time_password).\
                one()
        session['store_id'] = tables.STORE_ID
        session['one_time_password'] = tables.ONE_TIME_PASSWORD
        session['table_number'] = tables.TABLE_NUMBER
        group_id = FlaskAPI.group_id()
        return redirect("/order_menu")
    except:
        return redirect("/logout")
Beispiel #13
0
def change_order_quantity(change_order_quantity):
    room = session['room']
    order_id = change_order_quantity['order_id']
    quantity = change_order_quantity['quantity']
    order_timestamp = datetime.now()

    # 注文情報が正しいか確認
    FlaskAPI.order_id_check(order_id)

    order_item = db.session.query(Order).filter_by(ORDER_ID=order_id).one()
    order_item.ORDER_QUANTITY = order_item.ORDER_QUANTITY + quantity
    # 注文数量が0の時、カートのステータスをカゴ落ち(1)に変更する
    if quantity <= 0:
        order_item.ORDER_STATUS = status_drop_cart
        order_item.ORDER_QUANTITY = 0
    else:
        order_item.ORDER_QUANTITY = quantity
    order_item.ORDER_TIMESTAMP = order_timestamp
    db.session.commit()
    db.session.close()
    order_menu = FlaskAPI.order_item(order_id)
    emit('order_list_show', order_menu, room=room)
Beispiel #14
0
def order_submit():
	print("オーダー決定")
	store_id=session['store_id']
	table_number=session['table_number']
	group_id=session['group_id']
	order_status=2

	db.session.query(Order).filter_by(STORE_ID=store_id, TABLE_NUMBER=table_number, GROUP_ID=group_id, ORDER_STATUS=0).update({Order.ORDER_STATUS: order_status})
	db.session.commit()
	db.session.close()

	order_list=FlaskAPI.order_list(store_id, table_number, group_id, order_status)

	emit("add_to_order",order_list, room=store_id)
Beispiel #15
0
def cart_information(msg):
	# 受け取ったMessageを表示
	print(msg)

	# store_id → table_table_number → group_id → room(そのテーブルに座っている人にだけ送るチャットルームみたいなもの)の順に変数を設定していく
	store_id=session['store_id']

	# 店舗の場合はsessionにtable_numberを持っていないので、0を代入
	if 'table_number' not in session:
		session['table_number']=0
	table_number=session['table_number']

	# 決済が完了しているグループのgroup_idをgroup_id_maxとして取得
	group_id_max=db.session.query(func.max(Order.GROUP_ID)).filter_by(STORE_ID=store_id, TABLE_NUMBER=table_number, ORDER_STATUS=7).scalar()
	# group_id_maxに対して+1した数字が現在のgroup_id(group_id_maxがNoneの場合、その店のそのテーブルで注文する初めての客)
	if group_id_max is None:
		group_id=1
	else:
		group_id=group_id_max + 1
	session['group_id']=group_id

	# roomをセッションに持たせる
	session['room']=str(session['store_id']) + "_" + str(session['table_number']) + "_" + str(session['group_id'])
	session['store']=str(session['store_id'])
	room=session['room']
	# roomというチャットスペースみたいなところに入る
	join_room(room)

	# カートの中身を見たいので、order_status=0を設定
	order_status=0
	# カートに入っている商品数を求める(order_statusの値を変更すれば、カートに入っているものや、注文済みのもの、決済が完了したものを見ることができる)
	total_quantity=FlaskAPI.total_quantity(store_id, table_number, group_id, order_status)
	# カートに入っている商品情報を求める(order_statusの値を変更すれば、カートに入っているものや、注文済みのもの、決済が完了したものを見ることができる)
	order_list=FlaskAPI.order_list(store_id, table_number, group_id, order_status)

	# roomのメンバーに情報を送信
	emit("cart_information",{'total_quantity': total_quantity, 'order_list': order_list})
Beispiel #16
0
def add_to_cart(add_to_cart):
    store_id = session['store_id']
    table_number = session['table_number']
    group_id = session['group_id']
    room = session['room']
    menu_id = add_to_cart['menu_id']
    quantity = add_to_cart['quantity']
    order_timestamp = datetime.now()

    # 注文されたメニューが本当にその店のメニューかチェックする
    FlaskAPI.menu_id_check(menu_id)

    try:
        add_order = db.session.query(Order).\
         filter_by(
          STORE_ID=store_id,
          TABLE_NUMBER=table_number,
          GROUP_ID=group_id,
          ORDER_STATUS=status_in_cart,
          MENU_ID=menu_id
         ).one()
        add_order.ORDER_QUANTITY = add_order.ORDER_QUANTITY + int(quantity)
        add_order.ORDER_TIMESTAMP = order_timestamp
    except:
        add_order = Order(STORE_ID=store_id,
                          TABLE_NUMBER=table_number,
                          GROUP_ID=group_id,
                          ORDER_STATUS=status_in_cart,
                          MENU_ID=menu_id,
                          ORDER_QUANTITY=quantity,
                          ORDER_TIMESTAMP=order_timestamp)
        db.session.add(add_order)
    db.session.commit()
    order_id = add_order.ORDER_ID
    order_menu = FlaskAPI.order_item(order_id)
    emit('order_list_show', order_menu, room=room)
Beispiel #17
0
def show_order(msg):
	# 受け取ったMessageを表示
	print(msg)

	# store_id → table_table_number → group_id → room(そのテーブルに座っている人にだけ送るチャットルームみたいなもの)の順に変数を設定していく
	store_id=session['store_id']
	# roomというチャットスペースみたいなところに入る
	join_room(store_id)

	# カートの中身を見たいので、order_status=0を設定
	order_status=2
	# カートに入っている商品情報を求める(order_statusの値を変更すれば、カートに入っているものや、注文済みのもの、決済が完了したものを見ることができる)
	order_list=FlaskAPI.order_list_all(store_id, order_status)

	# roomのメンバーに情報を送信
	emit("show_order",order_list, room=store_id)
Beispiel #18
0
def show_menu():
    if 'store_id' not in session:
        return redirect("/logout")
    else:
        session['group_id'] = FlaskAPI.group_id()
        store_id = session['store_id']
        session['room'] = str(session['store_id']) + '_' + str(
            session['table_number']) + '_' + str(session['group_id'])
        class_2 = db.session.query(Menu.CLASS_1_ID, Menu.CLASS_2_ID, Menu.CLASS_2).filter(Menu.STORE_ID==store_id).\
            group_by(Menu.CLASS_1_ID, Menu.CLASS_2_ID, Menu.CLASS_2).\
            order_by(Menu.CLASS_2_ID).\
            all()
        class_3 = db.session.query(Menu.MENU_ID, Menu.CLASS_1_ID, Menu.CLASS_2_ID, Menu.CLASS_3_ID, Menu.CLASS_3, Menu.PRICE).filter(Menu.STORE_ID==store_id).\
            order_by(Menu.CLASS_3_ID).\
            all()
        return render_template('show_menu.html',
                               class_2=class_2,
                               class_3=class_3)
Beispiel #19
0
def order_status_change(order_status_change):
    # order_status = 3は調理完了を示し、4は調理キャンセルを示す
    store_id = session['store_id']
    order_id = order_status_change['order_id']
    order_status = order_status_change['order_status']
    order_timestamp = datetime.now()
    # オーダーステータスのアップデート
    order = db.session.query(Order).filter(Order.STORE_ID == store_id,
                                           Order.ORDER_ID == order_id).one()
    if order.ORDER_STATUS <= order_status:
        order.ORDER_STATUS = order_status
    order.ORDER_TIMESTAMP = order_timestamp
    db.session.commit()
    table_number = order.TABLE_NUMBER
    group_id = order.GROUP_ID
    db.session.close()
    # roomのメンバーに情報を送信
    room = str(store_id) + '_' + str(table_number) + '_' + str(group_id)
    order_menu = FlaskAPI.order_item(order_id)
    emit("order_processing", order_id, room=store_id)
    emit("order_list_show", order_menu, room=room)