def edit_item(category, item_title):
    edit_item_form = NewItemForm(request.form)
    edit_item_form.category.choices = \
        [(cat.id, cat.name) for cat in session.query(Category).all()]
    # get item if there is no item abort 404 error
    item = item_controller.get_item_in_category(category, item_title)
    if item is None:
        abort(404)

    # validate form and check if logged in user who created the item
    if request.method == 'POST' and edit_item_form.validate()\
            and current_user.id == item.user.id:
        # set item new values and save
        item.title = edit_item_form.title.data
        item.description = edit_item_form.description.data
        item.category_id = edit_item_form.category.data
        item_controller.create_item(item)
        flash("item successfully edited")
        return redirect(url_for('home'))

    # init form default values
    edit_item_form.title.default = item.title
    edit_item_form.description.default = item.description
    edit_item_form.category.default = item.category.id
    edit_item_form.process()
    return render_template('edit_item.html', form=edit_item_form, item=item)
Example #2
0
def new(request):
    if request.method == 'POST':
        # We're accepting form data for save to DB
        if not request.user.is_authenticated():
            return render_to_response('registration/pleaselogin.html')
        form = NewItemForm(request.POST)
        if not form.is_valid():
            # throw error
            return HttpResponse("Error! Form invalid. Form: %s" % form)
        else:
            new_item = form.save(commit=False) 

            # grab the user id from the current user
            #new_item.seller = request.user.id
            new_item.seller = request.user

            #cd = form.cleaned_data
            new_item.save()
            #send_mail(
            #    cd['subject'],
            #    cd['message'],
            #    cd.get('email', '*****@*****.**'),
            #    ['*****@*****.**'],
            #)
            #return HttpResponseRedirect('/contact/thanks/')
        return HttpResponseRedirect('/listings/')
    else:
        # user GET
        if not request.user.is_authenticated():
            # not logged in
            return render_to_response('registration/pleaselogin.html')
        else:
            # we are logged in
            form = NewItemForm()
            return render_to_response('listings/item_form.html', {'form': form}, context_instance=RequestContext(request))
Example #3
0
def new_item():
    form = NewItemForm()
    form.category.choices = crud.get_categories()
    form.subcategory.choices = crud.get_subcategories()

    # POST
    if form.validate_on_submit() and \
            form.image.validate(form, extra_validators=(FileRequired(),)):
        filename = save_image_upload(form.image)

        # create data
        # escape()したデータはテンプレートでsafeフィルターを併用すること
        crud.create_item(
            title=escape(form.title.data),
            description=escape(form.description.data),
            price=float(form.price.data),
            image=filename,
            category_id=form.category.data,
            subcategory_id=form.subcategory.data,
        )

        # Redirect to some page
        flash(
            "Item {} has been successfully submitted".format(
                request.form.get("title")), "success")
        return redirect(url_for("home"))

    # GET
    return render_template("new_item.html", form=form)
Example #4
0
def wishlist(userid):
    # file_folder = app.config['UPLOAD_FOLDER']
    form = NewItemForm()
    form2 = ShareForm()
    form3 = LoginForm()

    if request.method == "POST":
        if form.validate_on_submit():
            # generate item id
            id = str(uuid.uuid4().fields[-1])[:8]

            # get data from form
            title = form.title.data
            description = form.description.data
            webaddress = form.webaddress.data
            thumbnail = request.form['thumbnail']

            # retrieve item from database
            item = WishlistItem.query.filter_by(
                title=title, owner=current_user.get_id()).first()

            # if the item already exists then flash error message and redirect back to the wishlist page
            if item is not None:
                flash('' + title + ' already exists in your wishlist',
                      'danger')
                return redirect(
                    url_for('wishlist', userid=current_user.get_id()))

            # create wishlist object
            item = WishlistItem(id=id,
                                owner=current_user.get_id(),
                                title=title,
                                description=description,
                                webaddress=webaddress,
                                thumbnail=thumbnail)

            # insert item into WishlistItem
            db.session.add(item)
            db.session.commit()

            flash('' + title + ' was added to your wishlist', 'success')

            # redirect user to their wishlist page
            return redirect(url_for("wishlist", userid=current_user.get_id()))
        else:
            # flash message for failed item addition
            flash('Invalid item data, please try again', 'danger')

            # redirect user to their wishlist page
            return redirect(url_for("wishlist", userid=current_user.get_id()))
    else:
        # retrieve user wishlist items from database
        items = WishlistItem.query.filter_by(owner=current_user.get_id()).all()
    return render_template("wishlist.html",
                           userid=current_user.get_id(),
                           form=form,
                           form2=form2,
                           form3=form3,
                           items=items)
Example #5
0
def add_item(request):
    if request.method == 'POST':
        print "post"
        copied_post = request.POST.copy()
        tags = request.POST['tags'].split(',')
        obj_list = []  #list of tag objects
        new_tags = []  #list of tags that don't exist yet
        for i in tags:
            if i and Tag.objects.filter(name=i.strip()):
                obj_list.append(Tag.objects.get(name=i.strip()))
            elif i:
                new_tags.append(i.strip())
        copied_post['tags'] = obj_list
        copied_post['categories'] = [
            Category.objects.get(id=request.POST['categories'])
        ]
        print copied_post['categories']
        form = NewItemForm(copied_post, request.FILES)
        if form.is_valid():
            data = form.cleaned_data
            user = User.objects.get(id=request.session['current_user_id'])
            instance = Product(name=data['name'],
                               description=data['description'],
                               image=request.FILES['image'],
                               seller=user)
            # print tags
            instance.save()
            for i in new_tags:
                if not Tag.objects.filter(name=i):
                    new_tag = Tag.objects.create(name=i)
                    obj_list.append(new_tag)
            for i in obj_list:
                instance.tags.add(i)
            instance.categories.add(data['categories'][0])
            instance.save()
            return redirect('/user')
        else:
            print form.errors
            return render(
                request, 'add_item/form.html', {
                    'form': form,
                    'products': Product.objects.all(),
                    'tags': Tag.objects.all(),
                    'user':
                    User.objects.get(id=request.session['current_user_id'])
                })
    else:
        form = NewItemForm()

    return render(
        request, 'add_item/form.html', {
            'form': form,
            'products': Product.objects.all(),
            'tags': Tag.objects.all(),
            'user': User.objects.get(id=request.session['current_user_id'])
        })
def add_item():
    new_item_form = NewItemForm(request.form)
    new_item_form.category.choices = \
        [(cat.id, cat.name) for cat in session.query(Category).all()]

    if request.method == 'POST' and new_item_form.validate():
        item = Item(title=new_item_form.title.data,
                    description=new_item_form.description.data,
                    category_id=new_item_form.category.data,
                    user_id=current_user.id)
        item_controller.create_item(item)
        flash("new Item successfully added")
        return redirect(url_for('home'))

    return render_template('new_item.html', form=new_item_form)
def create_item():
    ''' Save a new Item in the database '''
    owner_id = session.get('user_id')
    if not owner_id:
        return ("You must be logged in to be able to create items", 401)
    form = NewItemForm()
    if form.validate_on_submit():
        file = request.files.get(form.image_file.name)
        saved_path = save_image(file) if file else None
        new_item = Item(name=form.data["name"],
                        category_id=form.data["category_id"],
                        description=form.data["description"],
                        image_file=saved_path,
                        owner_id=owner_id)
        db.session.add(new_item)
        db.session.commit()
        return "ok"
    return render_template('edit_item.html', form=form, action="/items")
Example #8
0
def new_listing():
    tut_completed = User.query.filter_by(id=current_user.id).first().tutorial_completed
    """Create a new item."""
    form = NewItemForm()
    if form.validate_on_submit():
        listing = Listing(
            name=form.listing_name.data,
            description=form.listing_description.data,
            available=True,
            unit= form.listing_unit.data,
            quantity= form.listing_quantity.data,
            price=form.listing_price.data,
            vendor_id=current_user.id,
            product_id=form.listing_productID.data
        )
        db.session.add(listing)
        db.session.commit()
        flash('Item {} successfully created'.format(listing.name),
              'form-success')
        return redirect(url_for('.new_listing', tut_completed=tut_completed))
    return render_template('vendor/new_listing.html', form=form, tut_completed=tut_completed)
def new_listing():
    tut_completed = User.query.filter_by(id=current_user.id).first().tutorial_completed
    """Create a new item."""
    form = NewItemForm()
    if form.validate_on_submit():
        listing = Listing(
            name=form.listing_name.data,
            description=form.listing_description.data,
            available=True,
            unit= form.listing_unit.data,
            quantity= form.listing_quantity.data,
            price=form.listing_price.data,
            vendor_id=current_user.id,
            product_id=form.listing_productID.data
        )
        db.session.add(listing)
        db.session.commit()
        flash('Item {} successfully created'.format(listing.name),
              'form-success')
        return redirect(url_for('.new_listing', tut_completed=tut_completed))
    return render_template('vendor/new_listing.html', form=form, tut_completed=tut_completed)
def update_item(id):
    ''' Updates an Item in the database '''
    user_id = session.get('user_id')
    if not user_id:
        return ("You must be logged in to be able to edit items", 401)
    item = Item.query.filter_by(id=id).first()
    if not item:
        return "Not Found", 404
    if item.owner_id != user_id:
        return ("This item doesn't belong to you", 401)
    form = NewItemForm(obj=item)
    if form.validate_on_submit():
        file = request.files.get(form.image_file.name)
        saved_path = save_image(file) if file else None
        if saved_path:
            item.image_file = saved_path
        item.name = form.data["name"]
        item.description = form.data["description"]
        db.session.commit()
        return "ok"
    return render_template('edit_item.html', form=form, action=item.url)
Example #11
0
def add_item(id):
    form = NewItemForm()
    new_item = Item(request.form['item_name'], id)
    if new_item is not None:
        db.session.add(new_item)
        db.session.commit()
        response = jsonify({'MSG': 'Item added to list'})
        response.status_code = 201
    else:
        response.jsonify({'ERR': 'Item wasnt added to list'})
        response.status_code = 400
    return response
Example #12
0
def checkout_item (request, idnum):
    if len(CheckoutItem.objects.filter(id=idnum)) == 0:
        if request.method == 'POST':
            form = NewItemForm(request.POST)
            if form.is_valid():
                item = form.save(commit=False)
                item.id = idnum
                item.save()
            else:
                form = NewItemForm()
                return render(request, "scanner/newitem.html", {"idnum": idnum, "form": form})
        else:
            form = NewItemForm()
            return render(request, "scanner/newitem.html", {"idnum": idnum, "form": form})
            
    return render(request, "scanner/item.html", {"item": CheckoutItem.objects.get(id=idnum)})
Example #13
0
def add():
    form = NewItemForm()

    if form.validate_on_submit():
        #filename = secure_filename(form.image.data.filename)

        # save new data here
        file = form.image.data

        if file:
            filename = secure_filename(file.filename)
            file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))

            key = form.key.data

            new_item = Item(key=key, image=filename)
            db.session.add(new_item)
            db.session.commit()

            return redirect('/')
    else:
        return render_template('add.html', 
            title = 'Add new item',
            form=form)
Example #14
0
def new(request):
    if request.method == 'POST':
        # We're accepting form data for save to DB
        if not request.user.is_authenticated():
            return render_to_response('registration/pleaselogin.html')
        form = NewItemForm(request.POST)
        if not form.is_valid():
            # throw error
            return HttpResponse("Error! Form invalid. Form: %s" % form)
        else:
            new_item = form.save(commit=False)

            # grab the user id from the current user
            #new_item.seller = request.user.id
            new_item.seller = request.user

            #cd = form.cleaned_data
            new_item.save()
            #send_mail(
            #    cd['subject'],
            #    cd['message'],
            #    cd.get('email', '*****@*****.**'),
            #    ['*****@*****.**'],
            #)
            #return HttpResponseRedirect('/contact/thanks/')
        return HttpResponseRedirect('/listings/')
    else:
        # user GET
        if not request.user.is_authenticated():
            # not logged in
            return render_to_response('registration/pleaselogin.html')
        else:
            # we are logged in
            form = NewItemForm()
            return render_to_response('listings/item_form.html',
                                      {'form': form},
                                      context_instance=RequestContext(request))
def schedule(request):
    schedule=[]
    today = date.today()
    while today.weekday() >= 5 or ScheduleDay.objects.filter(date=today).count() > 0 and ScheduleDay.objects.get(date=today).day_off:
        today += timedelta(1)
    schedule_day = None
    if ScheduleDay.objects.filter(date=today).count() > 0:
        schedule_day = ScheduleDay.objects.get(date=today)
    else:
        done = False
        one_day = timedelta(1)
        today_dt = datetime.combine(today, time())
        today_dt -= one_day
        new_date = today_dt.date()
        days_ellapsed = 0
        day = 0
        while not done:
            if new_date.weekday() < 5 and ScheduleDay.objects.filter(date=new_date).count() == 0:
                days_ellapsed += 1
            elif new_date.weekday() < 5 and not ScheduleDay.objects.get(date=new_date).day_off:
                done = True
                day = (ScheduleDay.objects.get(date=new_date).day + days_ellapsed) % 7
            new_dt = datetime.combine(new_date, time())
            new_dt -= one_day
            new_date = new_dt.date()
        schedule_day = ScheduleDay(date=today, day_off=False, day=day, schedule="")
        schedule_day.save()
    print(schedule_day.day)
    if (schedule_day.schedule == ""
        schedule_day.schedule = master_schedule[schedule_day.day]
        s
        
    if len(schedule_day.period_set.all()) == 0:
        for i in range(len(schedule_day.schedule)):
            period = Period(day=schedule_day, period_number=i, period_letter=schedule_day.schedule[i:i + 1])
            period.save()
    
    schedule.append([["Day " + str(schedule_day.day + 1)]])
    for period in schedule_day.schedule:
        schedule.append([[period]])
    
    
    return render(request, "scanner/schedule.html", {'schedule_table': schedule})

@not_login_required
def checkin (request):
    
    messages = []
    
    if request.method == 'POST':
        form = ScanForm(request.POST)
        if form.is_valid():
            data = form.cleaned_data
            idnum = data["scan"]
            if len(Person.objects.filter(id=idnum)) != 0:
                person = Person.objects.get(id=idnum)
                checkins = Checkin.objects.filter(person=person, completed=False)
                if len(checkins) == 0:
                    messages.append("Successfully checked in " + person.first_name + " " + person.last_name)
                    new_checkin = Checkin(person=person, checkin=datetime.now(), checkout=datetime.now())
                    new_checkin.save()
                else:
                    for obj in checkins:
                        obj.checkout = datetime.now()
                        obj.completed = True
                        obj.save()
                        person.hours += float((obj.checkout - obj.checkin).total_seconds()) / 3600
                        person.save()
                    messages.append("Successfully checked out " + person.first_name + " " + person.last_name)
        
    form = ScanForm()
    return render(request, "scanner/checkin.html", {"form": form, "messages": messages})

@not_login_required
def scan (request, idnum):
    idnum = int(idnum)
    if idnum < 10000 or idnum > 20000:
        return user(request, idnum)
    if idnum > 10000 and idnum < 20000:
        return checkout_item(request, idnum)
    return render(request, "scanner/item.html", {"idnum": idnum})

@not_login_required
def user (request, idnum):
    if len(Person.objects.filter(id=idnum)) == 0:
        if request.method == 'POST':
            form = NewUserForm(request.POST)
            if form.is_valid():
                person = form.save(commit=False)
                person.id = idnum
                person.save()
        else:
            form = NewUserForm()
            return render(request, "scanner/newuser.html", {"idnum": idnum, "form": form})
    
    person = Person.objects.get(id=idnum)
    messages = []
    
    if request.method == 'POST':
        form = ScanForm(request.POST)
        if form.is_valid():
            if len(CheckoutItem.objects.filter(id=form.cleaned_data["scan"])) > 0:
                item = CheckoutItem.objects.get(id=form.cleaned_data["scan"])
                if len(Checkout.objects.filter(person=person, item=item, checked_in=False)) > 0:
                    for checkout in Checkout.objects.filter(person=person, item=item, checked_in=False):
                        checkout.checked_in = True
                        checkout.date_returned = datetime.now()
                        checkout.save()
                        messages.append(item.name + " successfully checked in.")
                else:
                    new_checkout = Checkout(person=person, item=CheckoutItem.objects.get(id=form.cleaned_data["scan"]), date_checked_out=datetime.now() , date_due=datetime.now() + timedelta(CheckoutItem.objects.get(id=form.cleaned_data["scan"]).default_checkout_time))
                    new_checkout.save()
                    messages.append(item.name + " successfully checked out.")
            else:
                messages.append("That item is not in the database.")
    form = ScanForm()
    return render(request, "scanner/user.html", {"person": person, "form": form, "checkouts": Checkout.objects.filter(person=person, checked_in=False), "messages": messages})

@not_login_required
def checkout_item (request, idnum):
    if len(CheckoutItem.objects.filter(id=idnum)) == 0:
        if request.method == 'POST':
            form = NewItemForm(request.POST)
            if form.is_valid():
                item = form.save(commit=False)
                item.id = idnum
                item.save()
            else:
                form = NewItemForm()
                return render(request, "scanner/newitem.html", {"idnum": idnum, "form": form})
        else:
            form = NewItemForm()
            return render(request, "scanner/newitem.html", {"idnum": idnum, "form": form})
            
    return render(request, "scanner/item.html", {"item": CheckoutItem.objects.get(id=idnum)})

@not_login_required
def checkout(request, personid, itemid):
    return render(request, "scanner/item.html", {"item": CheckoutItem.objects.get(id=itemid)})
    
@login_required
def admin(request):
    person = request.user.leadershipmember
    return render(request, "scanner/admin.html", {"person": person})

@not_login_required
def admin_login(request):
    
    if request.method == 'POST':
        form = AdminLoginForm(request.POST)
        if form.is_valid():
            data = form.cleaned_data
            username = data["id"]
            password = data["password"]
            user = authenticate(username=username, password=password)
            if user is not None:
                login(request, user)
                return HttpResponseRedirect(reverse("admin"))
    
    form = AdminLoginForm()
        
    return render(request, "scanner/admin_login.html", {"form": form})
    
@login_required
def admin_add_leadership(request):
    if not request.user.leadershipmember.can_add_leadership_members:
        return HttpResponseRedirect(reverse("admin"))
    if request.method == 'POST':
        form = NewLeadershipMemberForm(request.POST)
        if form.is_valid():
            data = form.cleaned_data
            person = Person.objects.get(id=data["id"])
            
            if len(User.objects.filter(username=data["id"])) == 0:
                print(data["password"])
                user = User.objects.create_user(data["id"], data["email"], data["password"])
                user.save()
            user = User.objects.get(username=data["id"])
            leadershipmember = LeadershipMember(first_name=person.first_name, last_name=person.last_name, id=person.id, hours=person.hours, periods=data["periods"], user=user)
            person.delete()
            leadershipmember.save()
            return HttpResponseRedirect(reverse("admin"))
    
    form = NewLeadershipMemberForm()
    return render(request, "scanner/admin_add_leadership.html", {"form": form})

@login_required
def admin_change_permissions(request):
    if not request.user.leadershipmember.can_change_leadership_permissions:
        return HttpResponseRedirect(reverse("admin"))
    leadershipmembers = LeadershipMember.objects.exclude(id=request.user.leadershipmember.id)
    return render(request, "scanner/admin_change_permissions.html", {'leadershipmembers': leadershipmembers})
    
@login_required
def admin_edit_info(request):
    if request.method == 'POST':
        form = LeadershipEditInfoForm(request.POST, instance=request.user.leadershipmember)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect(reverse("admin"))
    form = LeadershipEditInfoForm(instance=request.user.leadershipmember)        
    return render(request, "scanner/admin_edit_info.html", {"form": form})
  
@login_required  
def admin_change_user_permissions(request, id):
    if not request.user.leadershipmember.can_change_leadership_permissions:
        return HttpResponseRedirect(reverse("admin"))
    if request.method == 'POST':
        form = ChangePermissionsForm(request.POST)
        if form.is_valid():
            print("1")
            data = form.cleaned_data
            lm = LeadershipMember.objects.get(id=id)
            lm.can_add_leadership_members = data["can_add_leadership_members"]
            lm.can_change_leadership_permissions = data["can_change_leadership_permissions"]
            lm.save()
            return HttpResponseRedirect(reverse("admin change permissions"))
    person = request.user.leadershipmember
    form = ChangePermissionsForm(instance=LeadershipMember.objects.get(id=id))
    return render(request, "scanner/admin_change_user_permissions.html", {"form": form, "person": person, "id": id})