Esempio n. 1
0
def buy_complete(item_id):
    sell = Sell.select_sell_by_sell_id(item_id)
    buy = Buy.select_buy_by_sell_id(item_id)
    # レコメンドキャッシュのクリア
    # 読み込み速度の問題によりデモではキャッシュクリアを行わない
    # getRecommendations.cache_clear()
    # topMatches.cache_clear()
    return render_template('buy/buy_complete.html', item=sell, buy=buy)
Esempio n. 2
0
 def decorated_function(*args, **kwargs):
     sell_id = kwargs['item_id']
     sell = Sell.select_sell_by_sell_id(sell_id)
     if sell is None:
         return redirect(url_for('route.home'))
     else:
         if sell.User_id != current_user.User_id:
             return redirect(url_for('route.home'))
     return func(*args, **kwargs)
Esempio n. 3
0
def buy(item_id):
    """購入処理"""
    form = HiddenBuyForm(request.form)
    item = Sell.select_sell_by_sell_id(item_id)
    if request.method == 'POST' and form.validate():
        user_id = current_user.get_id()
        s_address = ShippingAddress.search_shippingaddress(
            form.ShippingAddress_id.data)
        if form.pay_way.data == '2':
            credit = Credit.search_credit(form.Credit_id.data)
            buycredit = BuyCredit(credit_name=credit.credit_name,
                                  credit_num=credit.credit_num,
                                  expire=credit.expire,
                                  security_code_hash=credit.security_code_hash)
            with db.session.begin(subtransactions=True):
                buycredit.create_new_buycredit()
            db.session.commit()
        buyshippingaddress = BuyShippingAddress(
            last_name=s_address.last_name,
            first_name=s_address.first_name,
            last_name_kana=s_address.last_name_kana,
            first_name_kana=s_address.first_name_kana,
            zip_code=s_address.zip_code,
            prefecture=s_address.prefecture,
            address1=s_address.address1,
            address2=s_address.address2,
            address3=s_address.address3)
        with db.session.begin(subtransactions=True):
            buyshippingaddress.create_new_buyshippingaddress()
        db.session.commit()
        creditid = ""
        if form.pay_way.data == '2':
            creditid = buycredit.BuyCredit_id
        buy = Buy(User_id=user_id,
                  Sell_id=item_id,
                  pay_way=form.pay_way.data,
                  Credit_id=creditid,
                  ShippingAddress_id=buyshippingaddress.BuyShippingAddress_id)
        with db.session.begin(subtransactions=True):
            buy.create_new_buy()
            item.deal_status = Deal_status['取引中']
            item.update_at = datetime.datetime.now()
        db.session.commit()
        # セッションの破棄
        session.pop('pay_way', None)
        session.pop('Credit_id', None)
        session.pop('ShippingAddress_id', None)
        return redirect(url_for('buy.buy_complete', item_id=item_id))
    return render_template('buy/buy.html', item=item, form=form)
Esempio n. 4
0
def sell_flg_update():
    form = SellUpdateFlgAndDeleteForm(request.form)
    # データベース処理
    if request.method == 'POST':
        sell = Sell.select_sell_by_sell_id(form.Sell_id.data)
        with db.session.begin(subtransactions=True):
            if sell.sell_flg:
                sell.sell_flg = False
                flash('出品を一時停止しました')
            else:
                sell.sell_flg = True
                flash('出品を再開しました')
        db.session.commit()
        return redirect(url_for('item.itemdata', item_id=form.Sell_id.data))
    return redirect(url_for('route.home'))
Esempio n. 5
0
def transaction(item_id):
    """取引画面処理"""
    item = Sell.select_sell_by_sell_id(item_id)
    buy = Buy.select_buy_by_sell_id(item_id)
    shippingaddress = ShippingAddress.search_shippingaddress(buy.ShippingAddress_id)
    messageform = DealMessageForm(request.form)
    messages = DealMessage.get_messages_by_sell_id(item_id)
    noticeform = NoticeRatingForm(request.form)
    # ログイン中のユーザーが出品者だった場合
    if current_user.User_id == item.User_id:
        dest_user = User.select_user_by_id(buy.User_id)
    # ログイン中のユーザーが購入者だった場合
    elif current_user.User_id == buy.User_id:
        dest_user = User.select_user_by_id(item.User_id)
    read_message_ids = [message.DealMessage_id for message in messages if (not message.is_read) and (message.from_user_id == int(dest_user.User_id))]
    if read_message_ids:
        with db.session.begin(subtransactions=True):
            # is_readをTrueに更新
            DealMessage.update_is_read_by_ids(read_message_ids)
        db.session.commit()
    not_checked_message_ids = [message.DealMessage_id for message in messages if message.is_read and (not message.is_checked) and (message.from_user_id == int(current_user.User_id))]
    if not_checked_message_ids:
        with db.session.begin(subtransactions=True):
            DealMessage.update_is_checked_by_ids(not_checked_message_ids)
        db.session.commit()
    if request.method == 'POST' and messageform.validate(read_message_ids):
        dealmessage = DealMessage(
            Sell_id = item_id,
            to_user_id = dest_user.User_id,
            from_user_id = current_user.User_id,
            message = messageform.message.data
        )
        # データベース登録処理
        with db.session.begin(subtransactions=True):
            dealmessage.create_new_dealmessage()
        db.session.commit()
        return redirect(url_for('transaction.transaction', item_id=item_id))
    return render_template(
        'transaction/transaction.html',
        item=item,
        buy=buy,
        shippingaddress=shippingaddress,
        messageform=messageform,
        messages=messages,
        dest_user=dest_user,
        noticeform=noticeform
    )
Esempio n. 6
0
 def decorated_function(*args, **kwargs):
     sell_id = kwargs['item_id']
     sell = Sell.select_sell_by_sell_id(sell_id)
     buy = Buy.select_buy_by_sell_id(sell_id)
     user_id = current_user.get_id()
     if sell is None or buy is None:
         return redirect(url_for('route.home'))
     else:
         if sell.User_id != user_id and buy.User_id != user_id:
             return redirect(url_for('route.home'))
         elif not sell.sell_flg:
             return redirect(url_for('route.home'))
         elif not sell.is_active:
             return redirect(url_for('route.home'))
         elif sell.deal_status == Deal_status['出品中']:
             return redirect(url_for('route.home'))
     return func(*args, **kwargs)
Esempio n. 7
0
def notice_rating(item_id):
    sell = Sell.select_sell_by_sell_id(item_id)
    buy = Buy.select_buy_by_sell_id(item_id)
    form = NoticeRatingForm(request.form)
    if request.method == 'POST' and form.validate():
        if form.notice_condition.data == 'has_sent':
            with db.session.begin(subtransactions=True):
                sell.has_sent = True
                sell.update_at = datetime.datetime.now()
            db.session.commit()
            flash('発送通知を送信しました。')
            return redirect(url_for('transaction.transaction', item_id=item_id))
        if form.notice_condition.data == 'has_got':
            rating = Rating(
                Sell_id = item_id,
                to_user_id = sell.User_id,
                from_user_id = current_user.User_id,
                rating = form.rating.data,
                rating_message = form.rating_message.data
            )
            with db.session.begin(subtransactions=True):
                rating.create_new_rating()
                sell.has_got = True
                sell.update_at = datetime.datetime.now()
            db.session.commit()
            flash('受け取り確認と評価を送信しました')
            return redirect(url_for('transaction.transaction', item_id=item_id))
        if form.notice_condition.data == 'seller_rating':
            rating = Rating(
                Sell_id = item_id,
                to_user_id = buy.User_id,
                from_user_id = current_user.User_id,
                rating = form.rating.data,
                rating_message = form.rating_message.data
            )
            with db.session.begin(subtransactions=True):
                rating.create_new_rating()
                sell.deal_status = Deal_status['取引済み']
                sell.update_at = datetime.datetime.now()
            db.session.commit()
            flash('評価を送信しました。取引が完了しました。')
            return redirect(url_for('transaction.transaction', item_id=item_id))
    return redirect(url_for('transaction.transaction', item_id=item_id))
Esempio n. 8
0
 def decorated_function(*args, **kwargs):
     sell_id = kwargs['item_id']
     sell = Sell.select_sell_by_sell_id(sell_id)
     user_id = current_user.get_id()
     if sell is None:
         return redirect(url_for('route.home'))
     else:
         if sell.user.User_id == user_id:
             flash("出品者の商品は購入できません。")
             return redirect(url_for('item.itemdata', item_id=sell_id))
         elif not sell.sell_flg:
             flash("選択された商品は購入できません。")
             return redirect(url_for('route.home'))
         elif not sell.is_active:
             flash("選択された商品は購入できません。")
             return redirect(url_for('route.home'))
         elif sell.deal_status != Deal_status['出品中']:
             flash("選択された商品は出品中ではありません。")
             return redirect(url_for('item.itemdata', item_id=sell_id))
     return func(*args, **kwargs)
Esempio n. 9
0
def recommend(c_userid):
    """協調フィルタリングユーザーベースレコメンド"""
    # 商品レコメンド
    recommends = getRecommendations(str(c_userid))
    # ユーザーレコメンド
    u_recommends = topMatches(str(c_userid))
    r_item_list = []
    if recommends is not None:
        for recommend in recommends:
            recommend_id = int(recommend)
            r_item_list.append(Sell.select_sell_by_sell_id(recommend_id))
    elif recommends is None:
        r_item_list = []
    r_user_list = []
    if u_recommends is not None:
        for u_recommend in u_recommends:
            u_recommend_id = int(u_recommend)
            r_user_list.append(User.select_user_by_id(u_recommend_id))
    elif u_recommends is None:
        r_user_list = []
    return r_item_list, r_user_list
Esempio n. 10
0
def sell_update(item_id):
    sell = Sell.select_sell_by_sell_id(item_id)
    if sell.remarks == None:
        remarks = ''
    form = SellUpdateForm(request.form,
                          sell_comment=str(sell.sell_comment),
                          genre=str(sell.genre.name),
                          item_state=str(sell.item_state.name),
                          postage=str(sell.postage.name),
                          send_way=str(sell.send_way.name),
                          consignor=str(sell.consignor),
                          schedule=str(sell.schedule.name),
                          remarks=str(sell.remarks))
    if request.method == 'POST' and form.validate():
        # 画像アップロード処理 ここから--------------------------
        imagename = ''
        image = request.files[form.item_picture_path.name]
        # 画像ファイルがあった場合
        if image:
            # 画像アップロード処理用関数
            if allowed_image(image.filename):
                # ファイル名から拡張子を取り出す
                ext = image.filename.rsplit('.', 1)[1]
                # imagenameはユーザーID+現在の時間+.拡張子
                imagename = str(current_user.User_id) + '_' + \
                            str(int(datetime.now().timestamp())) + '.' + ext
                # ファイルの保存
                image.save(
                    os.path.join(app.config["ORIGINAL_ITEM_IMAGE_UPLOADS"],
                                 imagename))
                im = Image.open(
                    os.path.join(app.config["ORIGINAL_ITEM_IMAGE_UPLOADS"],
                                 imagename))
                # 最大サイズの正方形に切り出したあと、300に縮小
                im_thumb = crop_max_square(im).resize((300, 300),
                                                      Image.LANCZOS)
                # ファイルの保存
                im_thumb.save(
                    os.path.join(app.config["ITEM_IMAGE_UPLOADS"], imagename))
            else:
                flash('画像のアップロードに失敗しました。')
                return render_template('sell/sell.html', form=form)
        # 画像アップロード処理 ここまで--------------------------
        # データベース処理
        with db.session.begin(subtransactions=True):
            if imagename:  # imagenameが設定されていれば(画像があれば)更新する
                sell.item_picture_path = imagename
            sell.sell_title = str(form.sell_title.data)
            sell.key1 = str(form.key1.data)
            sell.key2 = str(form.key2.data)
            sell.key3 = str(form.key3.data)
            sell.sell_comment = str(form.sell_comment.data)
            sell.price = int(form.price.data)
            sell.genre = Genre[str(form.genre.data)]
            sell.item_state = Item_state[str(form.item_state.data)]
            sell.postage = Postage[str(form.postage.data)]
            sell.send_way = Send_way[str(form.send_way.data)]
            sell.consignor = str(form.consignor.data)
            sell.schedule = Schedule[str(form.schedule.data)]
            sell.remarks = str(form.remarks.data)
        db.session.commit()
        flash('更新に成功しました')
        return redirect(url_for('item.itemdata', item_id=item_id))
    return render_template('sell/sell_update.html', form=form, sell=sell)
Esempio n. 11
0
def sell_complete(item_id):
    sell = Sell.select_sell_by_sell_id(item_id)
    return render_template('sell/sell_complete.html', item=sell)