Exemple #1
0
 def put(self, project, bill_id):
     form = get_billform_for(project, True, meta={'csrf': False})
     if form.validate():
         bill = Bill.query.get(project, bill_id)
         form.save(bill, project)
         db.session.commit()
         return bill.id, 200
     return form.errors, 400
Exemple #2
0
 def put(self, project, bill_id):
     form = get_billform_for(project, True, meta={"csrf": False})
     if form.validate():
         bill = Bill.query.get(project, bill_id)
         form.save(bill, project)
         db.session.commit()
         return bill.id, 200
     return form.errors, 400
Exemple #3
0
 def update(self, project, bill_id):
     form = get_billform_for(project, True, meta={'csrf': False})
     if form.validate():
         bill = Bill.query.get(project, bill_id)
         form.save(bill, project)
         db.session.commit()
         return 200, bill.id
     return 400, form.errors
Exemple #4
0
 def post(self, project):
     form = get_billform_for(project, True, meta={"csrf": False})
     if form.validate():
         bill = Bill()
         form.save(bill, project)
         db.session.add(bill)
         db.session.commit()
         return bill.id, 201
     return form.errors, 400
Exemple #5
0
 def post(self, project):
     form = get_billform_for(project, True, meta={'csrf': False})
     if form.validate():
         bill = Bill()
         form.save(bill, project)
         db.session.add(bill)
         db.session.commit()
         return bill.id, 201
     return form.errors, 400
Exemple #6
0
 def add(self, project):
     form = get_billform_for(project, True, meta={'csrf': False})
     if form.validate():
         bill = Bill()
         form.save(bill, project)
         db.session.add(bill)
         db.session.commit()
         return 201, bill.id
     return 400, form.errors
Exemple #7
0
def list_bills():
    bill_form = get_billform_for(g.project)
    # set the last selected payer as default choice if exists
    if 'last_selected_payer' in session:
        bill_form.payer.data = session['last_selected_payer']
    # Preload the "owers" relationship for all bills
    bills = g.project.get_bills().options(orm.subqueryload(Bill.owers))

    return render_template("list_bills.html",
                           bills=bills, member_form=MemberForm(g.project),
                           bill_form=bill_form,
                           add_bill=request.values.get('add_bill', False),
                           current_view="list_bills",
                           )
Exemple #8
0
def list_bills():
    bill_form = get_billform_for(g.project)
    # set the last selected payer as default choice if exists
    if 'last_selected_payer' in session:
        bill_form.payer.data = session['last_selected_payer']
    # Preload the "owers" relationship for all bills
    bills = g.project.get_bills().options(orm.subqueryload(Bill.owers))

    return render_template("list_bills.html",
                           bills=bills, member_form=MemberForm(g.project),
                           bill_form=bill_form,
                           add_bill=request.values.get('add_bill', False),
                           current_view="list_bills",
                           )
Exemple #9
0
def delete_bill(bill_id):
    global ghost_billform
    ghost_billform = get_billform_for(g.project)
    # fixme: everyone is able to delete a bill
    bill = Bill.query.get(g.project, bill_id)
    if not bill:
        return redirect(url_for(".list_bills"))

    # save the deleted bill, so that it can be restored if the
    # user chooses to undo this action
    ghost_billform.fill(bill)

    db.session.delete(bill)
    db.session.commit()
    flash(_("The bill has been deleted"))

    return redirect(url_for(".post_delete"))
Exemple #10
0
def edit_bill(bill_id):
    # FIXME: Test this bill belongs to this project !
    bill = Bill.query.get(g.project, bill_id)
    if not bill:
        raise NotFound()

    form = get_billform_for(g.project, set_default=False)

    if request.method == "POST" and form.validate():
        form.save(bill, g.project)
        db.session.commit()

        flash(_("The bill has been modified"))
        return redirect(url_for(".list_bills"))

    if not form.errors:
        form.fill(bill)

    return render_template("add_bill.html", form=form, edit=True)
Exemple #11
0
def edit_bill(bill_id):
    # FIXME: Test this bill belongs to this project !
    bill = Bill.query.get(g.project, bill_id)
    if not bill:
        raise NotFound()

    form = get_billform_for(g.project, set_default=False)

    if request.method == 'POST' and form.validate():
        form.save(bill, g.project)
        db.session.commit()

        flash(_("The bill has been modified"))
        return redirect(url_for('.list_bills'))

    if not form.errors:
        form.fill(bill)

    return render_template("add_bill.html", form=form, edit=True)
Exemple #12
0
def add_bill():
    form = get_billform_for(g.project)
    if request.method == "POST":
        if form.validate():
            # save last selected payer in session
            session["last_selected_payer"] = form.payer.data
            session.update()

            bill = Bill()
            db.session.add(form.save(bill, g.project))
            db.session.commit()

            flash(_("The bill has been added"))

            args = {}
            if form.submit2.data:
                args["add_bill"] = True

            return redirect(url_for(".list_bills", **args))

    return render_template("add_bill.html", form=form)
Exemple #13
0
def add_bill():
    form = get_billform_for(g.project)
    if request.method == 'POST':
        if form.validate():
            # save last selected payer in session
            session['last_selected_payer'] = form.payer.data
            session.update()

            bill = Bill()
            db.session.add(form.save(bill, g.project))
            db.session.commit()

            flash(_("The bill has been added"))

            args = {}
            if form.submit2.data:
                args['add_bill'] = True

            return redirect(url_for('.list_bills', **args))

    return render_template("add_bill.html", form=form)
Exemple #14
0
def post_delete():
    # this functions identically to list_bills, however
    # the undo action button is added
    bill_form = get_billform_for(g.project)
    # set the last selected payer as default choice if exists
    if "last_selected_payer" in session:
        bill_form.payer.data = session["last_selected_payer"]
    # Preload the "owers" relationship for all bills
    bills = (
        g.project.get_bills()
        .options(orm.subqueryload(Bill.owers))
        .paginate(per_page=100, error_out=True)
    )

    return render_template(
        "list_bills_post_delete.html",
        bills=bills,
        member_form=MemberForm(g.project),
        bill_form=bill_form,
        add_bill=request.values.get("add_bill", False),
        current_view="list_bills_post_delete",
    )
Exemple #15
0
def import_project(file, project):
    json_file = json.load(file)

    # Check if JSON is correct
    attr = ["what", "payer_name", "payer_weight", "amount", "date", "owers"]
    attr.sort()
    for e in json_file:
        if len(e) != len(attr):
            raise ValueError
        list_attr = []
        for i in e:
            list_attr.append(i)
        list_attr.sort()
        if list_attr != attr:
            raise ValueError

    # From json : export list of members
    members_json = get_members(json_file)
    members = project.members
    members_already_here = list()
    for m in members:
        members_already_here.append(str(m))

    # List all members not in the project and weight associated
    # List of tuples (name,weight)
    members_to_add = list()
    for i in members_json:
        if str(i[0]) not in members_already_here:
            members_to_add.append(i)

    # List bills not in the project
    # Same format than JSON element
    project_bills = project.get_pretty_bills()
    bill_to_add = list()
    for j in json_file:
        same = False
        for p in project_bills:
            if same_bill(p, j):
                same = True
                break
        if not same:
            bill_to_add.append(j)

    # Add users to DB
    for m in members_to_add:
        Person(name=m[0], project=project, weight=m[1])
    db.session.commit()

    id_dict = {}
    for i in project.members:
        id_dict[i.name] = i.id

    # Create bills
    for b in bill_to_add:
        owers_id = list()
        for ower in b["owers"]:
            owers_id.append(id_dict[ower])

        bill = Bill()
        form = get_billform_for(project)
        form.what = b["what"]
        form.amount = b["amount"]
        form.date = parse(b["date"])
        form.payer = id_dict[b["payer_name"]]
        form.payed_for = owers_id

        db.session.add(form.fake_form(bill, project))

    # Add bills to DB
    db.session.commit()