def send_email():
    # check the last time an email was sent. if the duration is
    # above 7 days, then send an email. else do nothing
    latest_email, date = Email.get_latest(Email)
    duration = datetime.timedelta(0)
    if latest_email:
        today = datetime.datetime.now()
        duration = today - date
    if duration > datetime.timedelta(7):
        # get sales and purchases
        sales = Sale.filter(Sale, "all", "", "", date,
                            datetime.datetime(9999, 12, 31))
        total_sales = utils.compute_sales(sales)
        purchases = Purchase.filter(Purchase, "", date,
                                    datetime.datetime(9999, 12, 31))
        total_purchases = utils.compute_purchases(purchases)
        # get boss' email address
        boss_email = current_user.manager.boss_email
        # send email
        msg = Message("Weekly sales and purchases",
                      sender='*****@*****.**',
                      recipients=[boss_email])
        msg.html = render_template('manager/sales_and_purchases_email.html',
                                   sales=sales,
                                   purchases=purchases,
                                   total_sales=total_sales,
                                   total_purchases=total_purchases,
                                   date=date)
        try:
            mail.send(msg)
            Email()
            # return render_template('manager/sales_and_purchases_email.html', sales=sales, purchases=purchases, total_sales=total_sales, total_purchases=total_purchases, date=date)
        except:
            pass
    return redirect(url_for('user.login'))
def get_sales():
    sales = Sale.read(Sale)
    sale_page = Sale.read_limit(Sale, 1, 10)
    cashiers = Cashier.read(Cashier)
    waiters = Waiter.read(Waiter)
    items = Food.read(Food) + Brand.read(Brand)
    total_sales = utils.compute_sales(sales)
    return render_template("manager/sales.html",
                           mod=module,
                           sales=sales,
                           sale_page=sale_page,
                           total_sales=total_sales,
                           cashiers=cashiers,
                           waiters=waiters,
                           items=items)
def filter_food():
    if request.method == "GET":
        cashiers = Cashier.read(Cashier)
        waiters = Waiter.read(Waiter)
        items = Food.read(Food)

        item = request.args["item"]
        cashier = request.args["cashier"]
        waiter = request.args["waiter"]
        _from = request.args["from"]
        to = request.args["to"]

        if _from:
            _from = utils.convert_date_from_html(_from)
        else:
            _from = datetime.datetime(2000, 1, 1)
        if to:
            to = utils.convert_date_from_html(to)
        else:
            to = datetime.datetime(3000, 1, 1)

        if item == '0':
            return redirect(url_for('sale.get_food_sales'))

        sales = Sale.filter(Sale, item, cashier, waiter, _from, to)
        total_sales = utils.compute_sales(sales)

        # Avoid error on changing str to int
        if cashier == "":
            cashier = 0
        if waiter == "":
            waiter = 0

        return render_template("chef/food-sales.html",
                               mod=module,
                               sales=sales,
                               total_sales=total_sales,
                               cashiers=cashiers,
                               waiters=waiters,
                               items=items,
                               today=_from,
                               tomorrow=to,
                               item_id=item,
                               cashier_id=int(cashier),
                               waiter_id=int(waiter))
def get_food_sales():
    if request.args.get("page"):
        page = int(request.args.get("page"))
        if page == 0:
            return redirect(url_for('sale.get_food_sales'))
    else:
        page = 1
    sale_page = Sale.read_food_sales(Sale, page, 10)
    sales = sale_page.items
    cashiers = Cashier.read(Cashier)
    waiters = Waiter.read(Waiter)
    items = Food.read(Food)
    total_sales = utils.compute_sales(sales)
    return render_template("chef/food-sales.html",
                           mod=module,
                           sales=sales,
                           sale_page=sale_page,
                           current_page=page,
                           total_sales=total_sales,
                           cashiers=cashiers,
                           waiters=waiters,
                           items=items)
def get_sale_page():
    page = request.args.get("page")
    if page:
        page = int(page)
        if page == 0:
            return redirect(url_for('sale.get_sales'))
        sale_page = Sale.read_limit(Sale, page, 10)
        sales = sale_page.items
        cashiers = Cashier.read(Cashier)
        waiters = Waiter.read(Waiter)
        items = Food.read(Food) + Brand.read(Brand)
        total_sales = utils.compute_sales(sales)
        return render_template("manager/sales.html",
                               mod=module,
                               sales=sales,
                               sale_page=sale_page,
                               current_page=page,
                               total_sales=total_sales,
                               cashiers=cashiers,
                               waiters=waiters,
                               items=items)
    else:
        return redirect(url_for("sale.get_sales"))