def view_me(): user = User.get_by_id(session["user_id"]) if request.method == "POST": return render_template("tsktsk.html") review = Review(rating=int(request.form["rating"]), reason=request.form["reason"], user=user_id, reviewer=session["user_id"], flagged=False) review.put() update_user_rating(user_id, int(request.form["rating"])) sold_offers = [] sold_items = Item.query(Item.seller_id == session["user_id"], Item.sold == True) for item in sold_items: temp_offer = Offer.query(Offer.item == item.key.id()).get() sold_offers.append(temp_offer) purchased_offers = Offer.query(Offer.confirmed == True, Offer.bidder == session["user_id"]) notifications = Notification.query( Notification.user == session["user_id"]).order(-Notification.time) return render_template("me.html", user=user, sold_offers=sold_offers, purchased_offers=purchased_offers, notifications=notifications)
def clear_notifications(): if not session.get("logged_in"): return "error", 500 notifications = Notification.query(Notification.user == session["user_id"]) for notification in notifications: notification.key.delete() return "success"
def view_conversations(): if not session.get("logged_in"): return login() conversations = Conversation.query( ndb.OR(Conversation.user1 == session["user_id"], Conversation.user2 == session["user_id"])).order(-Conversation.time) notifications = Notification.query( Notification.user == session["user_id"]).order(-Notification.time) return render_template("conversations.html", conversations=conversations, notifications=notifications)
def view_conversation(conversation_id): if not session.get("logged_in"): return login() conversation_id = int(conversation_id) conversation = Conversation.get_by_id(conversation_id) messages = Message.query(Message.conversation == conversation_id).order( Message.time) notifications = Notification.query( Notification.user == session["user_id"]).order(-Notification.time) return render_template("view_conversation.html", messages=messages, conversation=conversation, notifications=notifications)
def delete_item(item_id): if not session.get("logged_in"): return login() item_id = int(item_id) item = Item.get_by_id(item_id) if item.seller_id != session["user_id"]: return "oops", 500 previous_notifications = Notification.query(Notification.item == item_id) notification_body = item.name + " removed" for prev_not in previous_notifications: notification = Notification(user=prev_not.user, body=notification_body, ntype="item-removed", item=item.key.id(), item_category=item.category, noticed=False, link="/browse/" + item.category) notification.put() prev_not.key.delete() offers = Offer.query(Offer.item == item.key.id()) conversation = Conversation.query(Conversation.item == item_id).get() if conversation: messages = Message.query(Message.conversation == conversation.key.id()) for message in messages: message.key.delete() conversation.key.delete() for offer in offers: offer.key.delete() item_tags = Item_Tag.query(Item_Tag.item == item.key.id()) for item_tag in item_tags: item_tag.key.delete() item.key.delete() return "success"
def browse(category_id): if not session.get("logged_in"): return login() items = Item.query(Item.category == category_id, Item.sold == False) for item in items: item.item_id = item.key.id() notifications = Notification.query( Notification.user == session["user_id"]).order(-Notification.time) category = Category.get_by_id(category_id) return render_template("browse.html", items=items, category=category, category_id=category_id, notifications=notifications)
def my_items(): if not session.get("logged_in"): return login() items = Item.query(Item.seller_id == session.get("user_id"), Item.sold == False) for item in items: item.item_id = item.key.id() notifications = Notification.query( Notification.user == session["user_id"]).order(-Notification.time) offers = Offer.query(Offer.bidder == session['user_id'], Offer.confirmed == False) return render_template("my_items.html", items=items, notifications=notifications, offers=offers)
def home(): if not session.get("logged_in"): return login() the_categories = Category.query() # categories=[] # num_categories=0 # for category in the_categories : # categories.append(category) # num_categories+=1 # dividers=[2,4,3] # category_lists=[] # count=2 # index=0 # current_list=[] # left_over=False # for category in categories : # left_over=True # current_list.append(category) # count-=1 # if count==0 : # category_lists.append((current_list,100.0/len(current_list))) # current_list=[] # index+=1 # count=dividers[index] # left_over=False # if left_over : # category_lists.append((current_list,100.0/len(current_list))) notifications = Notification.query( Notification.user == session["user_id"]).order(-Notification.time) # return render_template("home2.html", # category_lists=category_lists, # notifications=notifications) return render_template("home.html", categories=the_categories, notifications=notifications)
def post_item(): if not session.get("logged_in"): return login() if request.method == "GET": fields = [] fields.append( Field(name="name", title="Name", the_type='text', identifier='name', placeholder="Item Name")) fields.append( Field(name='description', title="Description", the_type="textarea", identifier='description', placeholder='Descriptive Description', tag="textarea")) categories = Category.query() options = [] for category in categories: option = {} option["name"] = category.name option["value"] = category.categoryID options.append(option) fields.append( Field(name='category', title="Item Category", the_type="select", identifier="category", placeholder="Select Item Category", tag="select", options=options)) fields.append( Field(name='price', title="Price", the_type="number", identifier="price", placeholder="10.95", step=True)) fields.append( Field(name='file', title="Upload Photo", the_type="file", placeholder="Upload Photo", identifier="file", tag="file")) fields.append( Field(name='biddable', title="Allow offer amounts other than suggested price.", the_type="number", identifier="biddable", tag="checkbox")) title = "Post Item" form = Form(fields=fields, title=title, submit="Post") notifications = Notification.query( Notification.user == session["user_id"]).order(-Notification.time) return render_template("post_item.html", item_form=form, notifications=notifications) if request.method == "POST": name = request.form.get("name") description = request.form.get("description") category = request.form.get("category") price = float(request.form.get("price")) seller_id = session["user_id"] biddable = False if request.form.get("biddable"): biddable = True # print "nooo" # return json.dumps(request.files) file = request.files.get("file", None) # print "whaattt??" file_data = None content_type = None photo = None if file: file_data = file.read() photo = images.resize(file_data, width=500, height=500) content_type = file.content_type new_item = Item(name=name, description=description, category=category, price=price, seller_id=seller_id, seller_name=session["first_name"] + " " + session["last_name"], biddable=biddable, sold=False, best_offer=0.0, photo=photo, photo_mimetype=content_type) new_item.put() return my_items()
def browse_item(item_id): item_id = int(item_id) if not session.get("logged_in"): return login() if request.method == "GET": item = Item.get_by_id(item_id) category_id = item.category print item.name seller = User.get_by_id(item.seller_id) previous_offer = Offer.query(Offer.bidder == session["user_id"], Offer.item == item_id).get() was_previous_offer = False if previous_offer: was_previous_offer = True fields = [] fields.append( Field( name="message", title="Message For Seller", the_type='text', identifier='message', placeholder= "A short message for the seller. Perhaps, where you can meet or payment options.", tag="textarea")) if item.biddable: fields.append( Field(name='amount', title="Offer Amount", the_type="number", identifier="amount", placeholder="10.95", step=True)) title = "Make Offer" form = Form(fields=fields, title=title) tags = Item_Tag.query(Item_Tag.item == item_id) notifications = Notification.query( Notification.user == session["user_id"]).order(-Notification.time) return render_template("browse_item.html", item=item, category_id=category_id, bid_form=form, previous_offer=previous_offer, was_previous_offer=was_previous_offer, offer=previous_offer, notifications=notifications, tags=tags) if request.method == "POST": item = Item.get_by_id(item_id) if not item or item.sold: return page_was_not_found( "Sorry but the item you tried to bid on has been removed by the seller" ) category_id = item.category seller = User.get_by_id(item.seller_id) previous_offer = Offer.query(Offer.bidder == session["user_id"], Offer.item == item_id).get() if previous_offer: previous_offer.key.delete() amount = item.price if item.biddable: amount = float(request.form["amount"]) offer = Offer(bidder=session["user_id"], item=item_id, message=request.form["message"], amount=amount, bidder_name=session["first_name"] + " " + session["last_name"], accepted=False, confirmed=False, item_name=item.name) offer.put() if item.biddable: item.update_best_offer(amount) notification_body = "Offer made on " + item.name + "for $" + str( offer.amount) notification = Notification(user=item.seller_id, body=notification_body, ntype="item-offer", item=item.key.id(), item_category=item.category, noticed=False, link="/my_items/" + str(item.key.id())) notification.put() fields = [] fields.append( Field( name="message", title="Message For Seller", the_type='text', identifier='message', placeholder= "A short message for the seller. Perhaps, where you can meet or payment options.", tag="textarea")) if item.biddable: fields.append( Field(name='amount', title="Offer Amount", the_type="number", identifier="amount", placeholder="10.95", step=True)) title = "Make Offer" form = Form(fields=fields, title=title, submit="Make Offer") tags = Item_Tag.query(Item_Tag.item == item_id) notifications = Notification.query( Notification.user == session["user_id"]).order(-Notification.time) return render_template("browse_item.html", item=item, category_id=category_id, bid_form=form, offer=offer, was_previous_offer=True, notifications=notifications, tags=tags)
def my_item(item_id): if not session.get("logged_in"): return login() item_id = int(item_id) item = Item.get_by_id(item_id) if request.method == "POST": if item.seller_id != session["user_id"]: return "Uninformative Error", 500 if request.form.get("tags"): tags = request.form["tags"].split(" ") for tag in tags: if tag == "": continue tag = tag.strip().lower() exists = Tag.get_by_id(tag) if not exists: new_tag = Tag(id=tag, name=tag) new_tag.put() exists = Item_Tag.get_by_id(str(item_id) + tag) if not exists: new_item_tag = Item_Tag(id=str(item_id) + tag, item=item_id, tag=tag) new_item_tag.put() else: item.name = request.form.get("name") item.description = request.form.get("description") item.category = request.form.get("category") item.price = float(request.form.get("price")) item.biddable = False if request.form.get("biddable"): item.biddable = True item.put() offers = Offer.query(Offer.item == item_id).order(Offer.amount) fields = [] fields.append( Field(name="name", title="Name", the_type='text', identifier='name', placeholder="Item Name", value=item.name)) fields.append( Field(name='description', title="Description", the_type="textarea", identifier='description', placeholder='Descriptive Description', tag="textarea", value=item.description)) categories = Category.query() options = [] for category in categories: option = {} option["name"] = category.name option["value"] = category.categoryID options.append(option) fields.append( Field(name='category', title="Item Category", the_type="select", identifier="category", placeholder="Select Item Category", tag="select", options=options, value=item.category)) fields.append( Field(name='price', title="Price", the_type="number", identifier="price", placeholder="10.95", step=True, value=item.price)) fields.append( Field(name='biddable', title="Allow offer amounts other than suggested price.", the_type="number", identifier="biddable", tag="checkbox", value="checked" if item.biddable else "")) fields.append( Field(name='item_id', the_type="hidden", identifier="item_id", value=item.key.id(), hidden="hidden")) title = "Edit Item" form = Form(fields=fields, title=title) fields1 = [] fields1.append( Field(name="tags", title="Tags", the_type='text', identifier='name', placeholder="Enter descriptive words seperated by spaces.")) title1 = "" submit = "Add Tag" form1 = Form(fields=fields1, title=title1, submit=submit) tags = Item_Tag.query(Item_Tag.item == item_id) notifications = Notification.query( Notification.user == session["user_id"]).order(-Notification.time) return render_template("view_my_item.html", offers=offers, item=item, notifications=notifications, item_form=form, tag_form=form1, tags=tags)
def offers(offer_id): if not session.get("logged_in"): return login() if request.method == "GET": return "oops", 404 offer_id = int(offer_id) offer = Offer.get_by_id(offer_id) if not offer: return page_was_not_found("Offer has been removed") item = Item.get_by_id(offer.item) if request.form["reason"] == "accept": if item.seller_id != session["user_id"]: return "uninformative error", 404 offer.accepted = True offer.put() previous_notification = Notification.query( Notification.user == offer.bidder, Notification.item == item.key.id(), Notification.ntype == "accepted-offer").get() if previous_notification: previous_notification.key.delete() notification_body = session["first_name"] + " " + session[ "last_name"] + " has accepted your offer for their " + item.name + " posting." notification = Notification(user=offer.bidder, body=notification_body, ntype="accepted-offer", item=item.key.id(), item_category=item.category, noticed=False, link="/browse_item/" + str(item.key.id())) notification.put() conversation = Conversation(user1=session["user_id"], user2=offer.bidder, subject="Arranging Sale", item=item.key.id(), item_name=item.name, read1=True, read2=True) conversation.put() return "success" if request.form["reason"] == "reject": if item.seller_id != session["user_id"]: return "uninformative error", 404 offer.accepted = True offer.put() previous_notification = Notification.query( Notification.user == offer.bidder, Notification.item == item.key.id(), Notification.ntype == "accepted-offer").get() if previous_notification: previous_notification.key.delete() notification_body = "Offer Rejected:" + item.name notification = Notification(user=offer.bidder, body=notification_body, ntype="rejected-offer", item=item.key.id(), item_category=item.category, noticed=False, link="/browse_item/" + str(item.key.id())) notification.put() return "success" if request.form["reason"] == "confirm": if item.seller_id != session["user_id"]: return "uninformative error", 404 item.sold = True item.put() offer.confirmed = True offer.put() offers = Offer.query(Offer.item == item.key.id(), Offer.bidder != offer.bidder) for temp_offer in offers: notification_body = item.name + " sold" notification = Notification(user=offer.bidder, body=notification_body, ntype="item-sold", item=item.key.id(), item_category=item.category, noticed=False, link="/browse/" + str(item.category)) notification.put() temp_offer.key.delete() conversation = Conversation.query( Conversation.item == item.key.id()).get() if conversation: conversation.key.delete() return "Offer confirmed" if request.form["reason"] == "remove": offer.key.delete() return "Offer removed" return "uninformative error", 404