コード例 #1
0
def create_new_unaccepted_version(data):
    """
    Creates unaccepted version of existing schedule
    :param data: json with all information for every individual schedule
    """
    if acc_test.check_access(1) is False:
        return redirect(url_for("main.index"))

    unaccepted_schedule = Schedule.query.filter_by(
        name="%s-%s-%s" % (data["main_data"]["year"], data["main_data"]["month"],
                           data["main_data"]["workplace"]), accepted=False).first()

    name = unaccepted_schedule.name
    year = unaccepted_schedule.year
    month = unaccepted_schedule.month
    workplace = unaccepted_schedule.workplace
    hours = unaccepted_schedule.hrs_to_work
    accepted = True
    version = unaccepted_schedule.version + 1
    billing_period = unaccepted_schedule.billing_period
    schedule = Schedule(name=name, year=year, month=month, workplace=workplace, hrs_to_work=hours,
                        accepted=accepted, version=version, billing_period=billing_period)
    db.session.add(schedule)

    ind_schedules_to_db(data, schedule, billing_period)
    db.session.commit()

    for ind_schedule in unaccepted_schedule.ind:
        db.session.delete(ind_schedule)
    db.session.delete(unaccepted_schedule)
    db.session.commit()
コード例 #2
0
ファイル: routes.py プロジェクト: KozielPiotr/work-schedules
def billing_period():
    """
    Allows to set beginning of counting billing periods and length of it in months.
    """
    if acc_test.check_access(0) is False:
        return redirect(url_for("main.index"))

    form = BillingPeriod()
    cur_begin = "{: %d - %m - %Y}".format(
        Billing_period.query.filter_by(id=1).first().begin)
    cur_duration = Billing_period.query.filter_by(id=1).first().duration

    if form.validate_on_submit():
        begin = datetime(int(form.begin_year.data), int(form.begin_month.data),
                         1)
        duration = form.length_of_billing_period.data

        b_p = Billing_period
        b_p.query.filter_by(id=1).all()[0].begin = begin
        b_p.query.filter_by(id=1).all()[0].duration = duration
        db.session.commit()
        flash("Zmieniono okres rozliczeniowy na: Początek: %s Długość: %s" %
              ("{:%d - %m - %Y}".format(begin), duration))
        return redirect(url_for("main.index"))
    return render_template("billing_period/billing_period.html",
                           title="Grafiki - okres rozliczeniowy",
                           form=form,
                           cur_begin=cur_begin,
                           cur_duration=cur_duration)
コード例 #3
0
ファイル: routes.py プロジェクト: KozielPiotr/work-schedules
def worker_to_workplace():
    """
    Allows to manage connections between workers and workplaces.
    """
    if acc_test.check_access(0) is False:
        return redirect(url_for("main.index"))

    form = UserToShopForm()
    assign_worker(form)
    workplaces = Shop.query.order_by(Shop.shopname).all()

    if form.validate_on_submit():
        worker = User.query.filter_by(username=form.worker.data).first()
        workplace = Shop.query.filter_by(shopname=form.workplace.data).first()
        already_assigned = workplace.works
        if worker not in already_assigned:
            workplace.works.append(worker)
            db.session.commit()
            flash("Przypisano %s do %s" % (worker, workplace))
        else:
            flash("%s był już przypisany do %s" % (worker, workplace))
        return redirect(url_for("acc.worker_to_workplace"))
    return render_template(
        "acc_man/worker_to_workplace.html",
        title="Grafiki - przydzielanie użytkownika do sklepu",
        form=form,
        workplaces=workplaces)
コード例 #4
0
ファイル: routes.py プロジェクト: KozielPiotr/work-schedules
def remove_schedule(schedule):
    """
    Removes schedule with passed id from db.
    :param schedule: schedule's id
    """
    if acc_test.check_access(2) is False:
        return redirect(url_for("main.index"))

    return remove_sched.remove_sched(schedule)
コード例 #5
0
ファイル: routes.py プロジェクト: KozielPiotr/work-schedules
def guidelines_to_db():
    """
    Adds records with guidelines to db.
    """
    if acc_test.check_access(1) is False:
        return redirect(url_for("main.index"))

    guideline_to_database.add_guideline()

    return url_for("main.index")
コード例 #6
0
ファイル: routes.py プロジェクト: KozielPiotr/work-schedules
def modifiable_schedules():
    """
    Makes list of schedules modifiable by current user.
    :return: renders template with form that allows to filter all accepted schedules and chose one to modify
    """
    if acc_test.check_access(2) is False:
        return redirect(url_for("main.index"))

    return render_template("schedules/schedules-to-modify.html",
                           title="Grafiki - modyfikowalne grafiki",
                           mn=MONTH_NAMES,
                           Schedule=Schedule)
コード例 #7
0
ファイル: routes.py プロジェクト: KozielPiotr/work-schedules
def new_schedule_find_workers(workplace):
    """
    Finds workers assigned to chosen workplace and sends back list with them to template that allow to choose workers
    that will be in schedule.
    :param workplace: chosen workplace
    :return: jsonified list of workers assigned to chosen workplace
    """
    if acc_test.check_access(2) is False:
        return redirect(url_for("main.index"))

    jsondict = find_workers.find_workers(workplace)
    return jsonify({"workers": jsondict})
コード例 #8
0
ファイル: routes.py プロジェクト: KozielPiotr/work-schedules
def new_schedule_to_db(action):
    """
    Adds new (unaccepted) schedule do database or replaces unaccepted version with accepted one.
    :param action: tells function if it has to add new version to db or replace existing one with it's accepted version.
    """
    if acc_test.check_access(2) is False:
        return redirect(url_for("main.index"))

    data = request.json

    new_schd_to_db.add_schedule_to_db(action, data)

    return url_for("main.index")
コード例 #9
0
ファイル: routes.py プロジェクト: KozielPiotr/work-schedules
def filter_schedules_to_modify(year, month, workplace, action):
    """
    Finds schedule that matches filter criteria.
    :param year: year of schedule
    :param month: month of schedule
    :param workplace: workplace of schedule
    :param action: action to take
    :return: matching schedule
    """
    if acc_test.check_access(2) is False:
        return redirect(url_for("main.index"))

    return jsonify(
        filter_sched_to_modify.find_schedule(year, month, workplace, action))
コード例 #10
0
ファイル: routes.py プロジェクト: KozielPiotr/work-schedules
def unaccepted_schedules():
    """
    :return: shows list of every unaccepted schedules which current user can accept.
    """
    if acc_test.check_access(1) is False:
        return redirect(url_for("main.index"))

    los = list_of_schedules.list_of_schedules_acc_mod(mod_acc=False)

    return render_template("schedules/schedules-to-accept.html",
                           title="Grafiki - niezaakceptowane grafiki",
                           ua=los["schedules"],
                           sn=los["nos"],
                           Schedule=Schedule)
コード例 #11
0
ファイル: routes.py プロジェクト: KozielPiotr/work-schedules
def remove_from_shop():
    """
    Removes link between worker and workplace.
    """
    if acc_test.check_access(0) is False:
        return redirect(url_for("main.index"))

    user = request.args.get("user")
    workplace = request.args.get("workplace")
    found_user = User.query.filter_by(username=user).first()
    found_workplace = Shop.query.filter_by(shopname=workplace).first()
    found_workplace.works.remove(found_user)
    db.session.commit()
    flash("Usunięto %s z %s" % (user, workplace))
    return redirect(url_for("acc.worker_to_workplace"))
コード例 #12
0
ファイル: routes.py プロジェクト: KozielPiotr/work-schedules
def show_changes(sch_id):
    """
    Shows changes between last accepted and unaccepted version of schedule.
    :param sch_id: id of unaccepted schedule
    :return: renders template with changes
    """
    if acc_test.check_access(1) is False:
        return redirect(url_for("main.index"))

    changes = None
    schedule_id = sch_id
    schedule = Schedule.query.filter_by(id=schedule_id).first()
    if schedule.version > 0:
        changes = differences.get_diff(schedule_id)

    return render_template("schedules/changes.html", changes=changes)
コード例 #13
0
ファイル: routes.py プロジェクト: KozielPiotr/work-schedules
def new_workplace():
    """
    Adds new workplace to database.
    """
    if acc_test.check_access(0) is False:
        return redirect(url_for("main.index"))

    form = NewWorkplaceForm()
    if form.validate_on_submit():
        workplace = Shop(shopname=form.workplace_name.data)
        db.session.add(workplace)
        db.session.commit()
        flash("Stworzono nowy sklep")
        return redirect(url_for("main.index"))
    return render_template("acc_man/new_workplace.html",
                           title="Grafiki - nowy sklep",
                           form=form)
コード例 #14
0
ファイル: routes.py プロジェクト: KozielPiotr/work-schedules
def new_schedule():
    """
    Creates template with empty, modifiable schedule for chosen year, month and workplace and with unmodifiable
    schedule for previous month.
    :return: template with all necessary data for new schedule
    """
    if acc_test.check_access(2) is False:
        return redirect(url_for("main.index"))

    form = NewScheduleForm()
    new_schedule_funcs.ns_choices(form)

    if form.validate_on_submit():
        return new_schedule_funcs.ns_form_validate(form)

    return render_template("schedules/new_schedule.html",
                           title="Grafiki - nowy grafik",
                           form=form)
コード例 #15
0
ファイル: routes.py プロジェクト: KozielPiotr/work-schedules
def new_user():
    """
    Adds new user to database.
    """
    if acc_test.check_access(0) is False:
        return redirect(url_for("main.index"))

    form = NewUserForm()
    if form.validate_on_submit():
        user = User(username=form.username.data,
                    access_level=form.access_level.data)
        user.set_password(form.password.data)
        db.session.add(user)
        db.session.commit()
        flash("Nowy użytkownik zarejestrowany")
        return redirect(url_for("acc.new_user"))
    return render_template("acc_man/new_user.html",
                           title="Grafiki - nowy użytkownik",
                           form=form)
コード例 #16
0
ファイル: routes.py プロジェクト: KozielPiotr/work-schedules
def select_guideline():
    """
    Allows to select for which schedule guidelines will be created.
    :return: template for choose year, month and workplace
    """
    if acc_test.check_access(1) is False:
        return redirect(url_for("main.index"))

    title = "Grafiki - wytyczne"
    form = SelectGuideline()

    form.workplace.choices = select_guidelines_funcs.select_guidelines_choices(
    )
    if form.validate_on_submit():
        return select_guidelines_funcs.select_guideline_validate(form)

    return render_template("schedules/select-guideline.html",
                           title=title,
                           mn=MONTH_NAMES,
                           form=form)
コード例 #17
0
ファイル: routes.py プロジェクト: KozielPiotr/work-schedules
def create_guideline():
    """
    Template with calendar where user can input guidelines.
    :return: template for guidelines
    """
    if acc_test.check_access(1) is False:
        return redirect(url_for("main.index"))

    year = int(request.args.get("y"))
    month = int(request.args.get("m"))
    workplace = Shop.query.filter_by(shopname=request.args.get("w")).first()

    return render_template("schedules/create-guideline.html",
                           year=year,
                           month=month,
                           workplace=workplace,
                           mn=MONTH_NAMES,
                           wdn=WEEKDAY_NAMES,
                           cal=Calendar(),
                           Guidelines=Guidelines)
コード例 #18
0
ファイル: routes.py プロジェクト: KozielPiotr/work-schedules
def worker_to_workplace_workers(workplace):
    """
    Makes list of workers unassigned to chosen workplace
    :param workplace: chosen workplace
    :return: list of workers
    """
    if acc_test.check_access(0) is False:
        return redirect(url_for("main.index"))

    shop = Shop.query.filter_by(shopname=workplace).first()
    workers_appended = shop.works.all()
    workers_all = User.query.order_by(User.username).all()
    workers = []
    for worker in workers_all:
        if worker not in workers_appended:
            workers.append(worker)
    jsondict = []
    for worker in workers:
        workers_list = {"name": worker.username}
        jsondict.append(workers_list)
    return jsonify({"workers": jsondict})
コード例 #19
0
ファイル: routes.py プロジェクト: KozielPiotr/work-schedules
def accept_modify_schedule():
    """
    :return: creates template with modifiable version of chosen unaccepted schedule and unmodifiable view.
    """
    if acc_test.check_access(1) is False:
        return redirect(url_for("main.index"))

    action = request.args.get("action")
    cal = Calendar()
    to_render = accept_or_modify_schedule.acc_mod_schd(action)
    prev = to_render["prev"]

    return render_template("schedules/accept-schedule.html",
                           action=action,
                           title=to_render["title"],
                           workplace=to_render["workplace"],
                           year=to_render["year"],
                           month=to_render["month"],
                           workers=to_render["workers"],
                           month_name=to_render["month_name"],
                           wdn=WEEKDAY_NAMES,
                           Billing_period=Billing_period,
                           version=to_render["version"],
                           shdict=to_render["shdict"],
                           hours=to_render["hours"],
                           prev_shdict=prev["prev_shdict"],
                           prev_month=prev["month"],
                           prev_hours=prev["hours"],
                           prev_month_name=prev["month_name"],
                           prev_year=prev["year"],
                           prev_workers=prev["workers"],
                           workers_hours=prev["workers_hours"],
                           cal=cal,
                           id=to_render["schedule_id"],
                           Guidelines=Guidelines,
                           Shop=Shop)
コード例 #20
0
def acc_mod_schd(action):
    """
    :param action: modify schedule or accept modifications
    :return: dictionary with data to render template in route
    """
    title = "Grafiki"
    schedule = None
    if action == "to_accept":
        if acc_test.check_access(1) is False:
            return redirect(url_for("main.index"))
        schedule = Schedule.query.filter_by(name=request.args.get("schd"),
                                            version=int(request.args.get("v")),
                                            accepted=False).first()
        title = "Grafiki - akceptacja grafiku"
    elif action == "to_modify":
        if acc_test.check_access(2) is False:
            return redirect(url_for("main.index"))
        schedule = Schedule.query.filter_by(name=request.args.get("schd"),
                                            version=int(request.args.get("v")),
                                            accepted=True).first()
        title = "Grafiki - modyfikacja grafiku"
    if not schedule:
        flash("Nie ma takiego grafiku")
        return redirect(url_for("schedules.accept_modify_schedule"))

    schedule_id = schedule.id
    workplace = schedule.workplace
    year = schedule.year
    month = schedule.month
    hours = schedule.hrs_to_work
    version = schedule.version
    workers = []
    for pers_schedule in schedule.ind:
        if str(pers_schedule.worker).replace(" ", "_") not in workers:
            workers.append(str(pers_schedule.worker).replace(" ", "_"))

    month_name = MONTH_NAMES[month - 1]

    prev = prev_schedule.prev_schedule(month, year, workplace)

    shdict = {}
    for worker in workers:
        for day in Calendar().itermonthdays(year, month):
            if day > 0:
                begin = Personal_schedule.query.filter_by(
                    date=datetime(year, month, day),
                    includes_id=schedule_id,
                    worker=worker.replace("_", " ")).first().begin_hour
                end = Personal_schedule.query.filter_by(
                    date=datetime(year, month, day),
                    includes_id=schedule_id,
                    worker=worker.replace("_", " ")).first().end_hour
                event = Personal_schedule.query.filter_by(
                    date=datetime(year, month, day),
                    includes_id=schedule_id,
                    worker=worker.replace("_", " ")).first().event
                if begin == 0:
                    begin = ""
                shdict["begin-%s-%d-%02d-%02d" %
                       (worker, year, month, day)] = begin
                if end == 0:
                    end = ""
                shdict["end-%s-%d-%02d-%02d" %
                       (worker, year, month, day)] = end
                shdict["event-%s-%d-%02d-%02d" %
                       (worker, year, month, day)] = event

    schedules = {
        "prev": prev,
        "shdict": shdict,
        "schedule_id": schedule.id,
        "workplace": workplace,
        "year": year,
        "month": month,
        "month_name": month_name,
        "workers": workers,
        "hours": hours,
        "version": version,
        "title": title
    }
    return schedules