Beispiel #1
0
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})
Beispiel #2
0
def checkouts_checkout(user_id, asset_id):
    """
    Checkouts out the specified asset to the specified user.

    @path '/checkouts/:user_id/new/:asset_id'
    @param 'user_id'
    @param 'asset_id'
    """
    users = User.query.filter_by(_id=user_id)
    if users.count() == 0:
        abort(404)

    assets = Asset.query.filter_by(_id=asset_id)
    if assets.count() == 0:
        abort(404)

    asset = assets[0]
    if asset.stock == 0:
        asset.total += 1
        asset.save()

    checkout = Checkout()
    checkout.user_id = user_id
    checkout.asset_id = asset_id
    checkout.save()

    return redirect(url_for("checkouts_list"))
    def checkout(self, member: Member, book: Book) -> Checkout: 
        self._validate(member, book)

        checkout = Checkout()
        currentDate = datetimeNowProxy()
        lengthOfCheckout = 7
        if member.hasCheckoutHistory:
            lengthOfCheckout = 14
            
        self._bookInventory.removeBook(book)

        checkout.dueDate = currentDate + timedelta(days=+lengthOfCheckout)
        return checkout
Beispiel #4
0
def ccbasket_adapter(request):
    """An adapter function for django-ccbasket"""
    # get the checkout
    try:
        checkout = Checkout.objects.get(session_id=request.session.session_key)
    except Checkout.DoesNotExist:
        checkout = Checkout()
        checkout.session_id = request.session.session_key
        checkout.save()
    # get the basket
    basket_name = getattr(settings, "CCBASKET_SESSION_KEY_NAME", ccbasket_settings.CCBASKET_SESSION_KEY_NAME)
    basket = request.session[basket_name]
    # now set up the items
    checkout.items = basket.basketitem_set.all()
    # and item total
    checkout.item_total = basket.total_price()
    # and the lines
    lines = 0
    for b in basket.basketitem_set.all():
        lines += b.quantity
    checkout.lines = lines
    # attatch and save the session
    request.session["cccheckout"] = checkout
    request.session.save()
    # return it
    return checkout
Beispiel #5
0
def checkout():
    #store directory of folder
    working_dir = os.path.dirname(os.path.abspath( __file__ ))
    main_dir = os.path.dirname(working_dir)
    showbooks = []
    len_books = 0
    disp_cart = session['user_cart']
    print(disp_cart)
    username = session.get('logged_in_user')
    sub_total = 0
    for i in range(len(disp_cart)):
        showbooks.append(db.session.query(Books.title, Books.isbn, Books.price).filter_by(isbn = disp_cart[i]).first())
    
        sub_total += float(db.session.query(Books.price).filter_by(isbn = disp_cart[i]).first().price)

    sub_total = round(sub_total + 5.99,2)
    total = round(sub_total*1.13,2)
    #print(sub_total)
    #print(total)
    len_books = len(showbooks)

    if request.method == 'POST':
        if request.form['confirm'] == "Confirm Purchase":
            #update tables views, checkout, and confirm-purchase
            #and update-order track
            
            
            checkoutid = db.session.query(Checkout.c_out_id).count() + 1
            #add checkout
            add_checkout = Checkout(checkoutid, request.form['credit_card'], date.today(),"5.99",request.form['total'])
            db.session.add(add_checkout)
            db.session.commit()

            #add order_track
            orderid = db.session.query(Order_track.order_id).count() + 1
            add_order_track = Order_track(orderid, date.today(), str(datetime.now() + timedelta(hours=5)), str(datetime.now() + timedelta(hours=200)), "Seattle")
            db.session.add(add_order_track)
            db.session.commit()


            #add a view for this customer
            id = session['user_id']
            
            add_viewer = Views(id,checkoutid)
            db.session.add(add_viewer)
            db.session.commit()

            #add complete purchase
            add_cp = Confirm_purchase(checkoutid, orderid, request.form['total'])
            db.session.add(add_cp)
            db.session.commit()

            return redirect(url_for('ordercomplete')) 


    return render_template('checkout.html', username=username, showbooks=showbooks, len_books=len_books,\
    sub_total=sub_total, total=total)
Beispiel #6
0
def checkout(d_id, staff):
    note = request.json['note']

    desk = Desk.query.get(d_id)
    uuid = desk.token
    if not uuid:
        abort(403)

    orders = desk.orders
    checkout_info = []
    time = time_translate(datetime.utcnow())
    for order in orders:
        order.status = True
        order_products = order.order_products
        checkout_info.append(order_products)

    checkout = Checkout(token=uuid,
                        staff=staff,
                        total_price=desk.price,
                        note=note,
                        desk_name=desk.name)
    try:
        pos = POS.query.get(1)
        # only pos machine at the checkout counter prints the checkout info
        print_bill(pos, checkout, checkout_info, desk.price)
    except Exception as e:
        checkout.printed = False
        return json_err(str(e))
    finally:
        db.session.add(checkout)
        desk.token = None
        desk.occupied = False
        db.session.commit()
    if not config.checkout_pos_working:
        return {'state': 'printer error'}
    return {'state': 'ok'}
Beispiel #7
0
def populate_db(app):
    book1 = Book(isbn13='7796594424423', title='foo', inside_cover_id='A')
    book2 = Book(isbn13='9781491946008', title='fluent python') # Fluent Python book
    # book2.append_google_book_data() # too slow sometimes...

    room1 = Room(id='1', name='Ms Foo')
    room2 = Room(id='2', name='Mr Spam')

    alice = Person(first_name='Alice', middle_name='X', last_name='Aaronson')
    bob = Person(first_name='Bob', last_name='Bobberson')
    inactive_student = Person(first_name='Inactive', last_name='Student', active=False)

    co1 = Checkout(book=book1, room=room1, person=alice, return_date=datetime.now())
    co2 = Checkout(book=book2, room=room2, person=bob)

    admin = Admin(username='******', password='******')

    with app.app_context():
        for rec in (book1, book2, room1, room2, alice, bob, inactive_student, co1, co2, admin):
            db.session.add(rec)
            print repr(rec), 'added'

        db.session.commit()
    print 'added some data'
Beispiel #8
0
def checkout(book_id):
    selected_book = Book.query.get_or_404(book_id)
    if not selected_book.is_available:
        flash('"%s" (ID: %s) is already checked out. It must be returned before you can check it out.' % (selected_book.title, selected_book.inside_cover_id), category='danger')
        return redirect(url_for('.books'))

    checkout_form = CheckoutForm()
    if checkout_form.validate_on_submit():
        new_checkout = Checkout(checkout_date=checkout_form.checkout_date.data, book=selected_book, person=checkout_form.person.data, room=checkout_form.room.data)

        db.session.add(new_checkout)
        db.session.commit()

        flash('Checked out %s to Room %s' % (selected_book.title, checkout_form.room.data.id), category='success')
        return redirect(url_for('.books'))
    # return render_template('checkout.html', book=bk, people=people, rooms=rooms)
    return render_template('checkout.html', book=selected_book, form=checkout_form)
def load_checkout(checkoutlist):
    i = 0
    while i < len(checkoutlist):
        newentry = None
        newentry = Checkout(bibnum=int(checkoutlist[i]['bibnum']),
                            itemtype=checkoutlist[i]['itemtype'],
                            checkoutmonth=checkoutlist[i]['checkoutmonth'],
                            checkoutyear=checkoutlist[i]['checkoutyear'],
                            checkoutday=checkoutlist[i]['checkoutday'],
                            checkouttime=checkoutlist[i]['checkouttime'])

        book = db.session.query(Book).filter(
            Book.bibnum == int(checkoutlist[i]['bibnum'])).first()
        if book is not None:
            db.session.add(newentry)
            book.checkoutentry.append(newentry)
        db.session.commit()
        i += 1
Beispiel #10
0
    def create(cart_number) -> dict:
        """ Create Checkout """
        result: dict = {}
        try:
            data_cart = Cart.query.filter_by(cart_number=cart_number).all()
            result_messages = []
            for res_cart in data_cart:
                data_stock = Stock.query.filter_by(
                    product_id=res_cart.product_id).first()
                if (data_stock is not None and data_stock.stock > 0):
                    if ((data_stock.stock - res_cart.qty) >= 0):
                        current_stock = data_stock.stock - res_cart.qty
                        data_stock.stock = current_stock
                        remark = "Stock Decreased from " + str(
                            data_stock.stock) + " to " + str(current_stock)
                        data_stock.commit()
                        result = {
                            'product_id': res_cart.product_id,
                            'message': remark
                        }
                        LogStockRepository.create(current_stock,
                                                  res_cart.product_id, remark)
                    else:
                        result = {
                            'product_id': res_cart.product_id,
                            'message': 'Stock is not Enough'
                        }
                else:
                    result = {
                        'product_id': res_cart.product_id,
                        'message': 'Stock Unavailable'
                    }
                result_messages.append(result)
            data = Checkout(cart_number)
            data.save()
            result = {
                'cart_number': cart_number,
                'date_created': str(data.date_created),
                'message': result_messages
            }
        except IntegrityError:
            Checkout.rollback()
            raise ResourceExists('file_name already exists')

        return result
Beispiel #11
0
def fix_pos_error(staff):
    new_loop = asyncio.new_event_loop()
    asyncio.set_event_loop(new_loop)
    loop = asyncio.get_event_loop()
    tasks = []
    # send empty requests to test pos machines
    for pos in POS.query.filter(POS.ip != '').all():
        tasks.append(loop.create_task(send_req(pos)))

    try:
        loop.run_until_complete(asyncio.gather(*tasks))
    finally:
        config.order_pos_working = POS.order_pos_all_working()
        save_printer_status({
            'order_pos_working': config.order_pos_working,
            'checkout_pos_working': config.checkout_pos_working
        })
        if config.order_pos_working is False:
            return {'state': 'error'}
        else:
            tasks = []
            # reprint orders
            for pos in POS.query.filter(POS.ip != '').all():
                for print_failed in pos.fails:
                    order = print_failed.order
                    uuid = order.token
                    time = time_translate(order.order_time)
                    desk_name = Desk.query.get(order.desk_id).name
                    staff_name = order.staff.name
                    note = order.note
                    data = []
                    for op in order.order_products:
                        quantity = op.quantity
                        data.append(
                            [op.product_name, op.product_price, quantity])
                    _format = print_order_format(uuid,
                                                 time,
                                                 desk_name,
                                                 staff_name,
                                                 pos.split,
                                                 note,
                                                 data,
                                                 reprint=True)
                    tasks.append(
                        loop.create_task(send_req(pos, _format, order)))
            # reprint checkout
            pos = POS.query.get(1)
            for c in Checkout.query.filter_by(printed=False).all():
                uuid = c.token
                time = time_translate(c.checkout_time)
                d_name = c.desk_name
                s_name = c.staff.name
                check_price = c.total_price
                checkout_info = []
                for order in Order.query.filter_by(token=uuid).all():
                    checkout_info.append(order.order_products)
                _format = print_bill_format(uuid,
                                            time,
                                            d_name,
                                            s_name,
                                            checkout_info,
                                            check_price,
                                            reprint=True)
                tasks.append(
                    loop.create_task(send_req(pos, _format, checkout=c)))
            try:
                loop.run_until_complete(asyncio.gather(*tasks))
            finally:
                config.order_pos_working = POS.order_pos_all_working()
                config.checkout_pos_working = Checkout.all_printed()
                save_printer_status({
                    'order_pos_working':
                    POS.order_pos_all_working(),
                    'checkout_pos_working':
                    Checkout.all_printed()
                })
            if config.order_pos_working or config.checkout_pos_working is False:
                return {'state': 'error'}

        loop.close()

    return {'state': 'ok'}
Beispiel #12
0
from models import Item, Checkout
from rules import pricingRules, catalogue

cc = Checkout(pricingRules)

user = None
while True:
    user = input("Enter SKU (or type 'end' to quit): ")
    if user in catalogue:
        cc.scan(Item(user))
    elif user == "end":
        break
    else:
        print("[Error] SKU not found")

cc.get_total()
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})
Beispiel #14
0
 def checkout(self, outdate, who, hw, reason, quantity, user):
     c = Checkout(outdate=outdate, who=who, hardware=hw,
             what=hw.id, reason=reason, quantity=quantity, out_auth_user=user,
             out_auth_email=user.id)
     self.add(c)
Beispiel #15
0
from models import Item, Checkout
from rules import pricingRules

# Test case 1
cc = Checkout(pricingRules)
cc.scan(Item("atv"))
cc.scan(Item("atv"))
cc.scan(Item("atv"))
cc.scan(Item("vga"))
cc.get_total()

# Test case 2
cc = Checkout(pricingRules)
cc.scan(Item("atv"))
cc.scan(Item("ipd"))
cc.scan(Item("ipd"))
cc.scan(Item("atv"))
cc.scan(Item("ipd"))
cc.scan(Item("ipd"))
cc.scan(Item("ipd"))
cc.get_total()

# Test case 3
cc = Checkout(pricingRules)
cc.scan(Item("mbp"))
cc.scan(Item("vga"))
cc.scan(Item("ipd"))
cc.get_total()