mirror of
https://github.com/spiral-project/ihatemoney.git
synced 2025-05-06 13:01:50 +02:00
Datafield entry in forms
This commit is contained in:
parent
6b0848e0f8
commit
92f9a2c393
9 changed files with 40 additions and 15 deletions
BIN
.DS_Store
vendored
Normal file
BIN
.DS_Store
vendored
Normal file
Binary file not shown.
|
@ -21,8 +21,7 @@ from jinja2 import Markup
|
|||
import email_validator
|
||||
|
||||
from ihatemoney.models import Project, Person
|
||||
from ihatemoney.utils import slugify, eval_arithmetic_expression
|
||||
|
||||
from ihatemoney.utils import slugify, eval_arithmetic_expression,CurrencyConverter
|
||||
|
||||
def strip_filter(string):
|
||||
try:
|
||||
|
@ -87,6 +86,10 @@ class EditProjectForm(FlaskForm):
|
|||
name = StringField(_("Project name"), validators=[DataRequired()])
|
||||
password = StringField(_("Private code"), validators=[DataRequired()])
|
||||
contact_email = StringField(_("Email"), validators=[DataRequired(), Email()])
|
||||
currency_helper = CurrencyConverter()
|
||||
default_currency = SelectField(
|
||||
_("Default Currency"), choices=currency_helper.get_currencies(), validators=[DataRequired()]
|
||||
)
|
||||
|
||||
def save(self):
|
||||
"""Create a new project with the information given by this form.
|
||||
|
@ -98,6 +101,7 @@ class EditProjectForm(FlaskForm):
|
|||
id=self.id.data,
|
||||
password=generate_password_hash(self.password.data),
|
||||
contact_email=self.contact_email.data,
|
||||
default_currency=self.default_currency.data
|
||||
)
|
||||
return project
|
||||
|
||||
|
@ -106,6 +110,7 @@ class EditProjectForm(FlaskForm):
|
|||
project.name = self.name.data
|
||||
project.password = generate_password_hash(self.password.data)
|
||||
project.contact_email = self.contact_email.data
|
||||
project.default_currency = self.default_currency.data
|
||||
|
||||
return project
|
||||
|
||||
|
|
|
@ -7,15 +7,17 @@ Create Date: 2019-12-06 15:46:03.416256
|
|||
"""
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision = '5cdb4f2e52c9'
|
||||
down_revision = 'e782dd493cdc'
|
||||
revision = "5cdb4f2e52c9"
|
||||
down_revision = "e782dd493cdc"
|
||||
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
|
||||
|
||||
def upgrade():
|
||||
op.add_column("project", sa.Column("default_currency", sa.String(length=3), nullable=True))
|
||||
op.add_column(
|
||||
"project", sa.Column("default_currency", sa.String(length=3), nullable=True)
|
||||
)
|
||||
|
||||
|
||||
def downgrade():
|
||||
|
|
|
@ -7,15 +7,17 @@ Create Date: 2019-12-06 15:12:46.116711
|
|||
"""
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision = 'e782dd493cdc'
|
||||
down_revision = '6c6fb2b7f229'
|
||||
revision = "e782dd493cdc"
|
||||
down_revision = "6c6fb2b7f229"
|
||||
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
|
||||
|
||||
def upgrade():
|
||||
op.add_column("bill", sa.Column("original_currency", sa.String(length=3), nullable=True))
|
||||
op.add_column(
|
||||
"bill", sa.Column("original_currency", sa.String(length=3), nullable=True)
|
||||
)
|
||||
op.add_column("bill", sa.Column("original_amount", sa.Float(), nullable=True))
|
||||
|
||||
|
||||
|
|
|
@ -377,8 +377,6 @@ class Bill(db.Model):
|
|||
"creation_date": self.creation_date,
|
||||
"what": self.what,
|
||||
"external_link": self.external_link,
|
||||
"original_currency": self.original_currency,
|
||||
"original_amount": self.original_amount,
|
||||
}
|
||||
|
||||
def pay_each(self):
|
||||
|
|
|
@ -65,6 +65,7 @@
|
|||
{{ input(form.name) }}
|
||||
{{ input(form.password) }}
|
||||
{{ input(form.contact_email) }}
|
||||
{{ input(form.default_currency) }}
|
||||
{% if not home %}
|
||||
{{ submit(form.submit, home=True) }}
|
||||
{% endif %}
|
||||
|
@ -78,6 +79,7 @@
|
|||
{{ input(form.name) }}
|
||||
{{ input(form.password) }}
|
||||
{{ input(form.contact_email) }}
|
||||
{{ input(form.default_currency) }}
|
||||
<div class="actions">
|
||||
<button class="btn btn-primary">{{ _("Edit the project") }}</button>
|
||||
<a id="delete-project" style="color:red; margin-left:10px; cursor:pointer; ">{{ _("delete") }}</a>
|
||||
|
|
|
@ -101,7 +101,7 @@
|
|||
<div class="clearfix"></div>
|
||||
|
||||
<table id="bill_table" class="col table table-striped table-hover table-responsive-sm">
|
||||
<thead><tr><th>{{ _("When?") }}</th><th>{{ _("Who paid?") }}</<th><th>{{ _("For what?") }}</th><th>{{ _("For whom?") }}</th><th>{{ _("How much?") }}</th><th>{{ _("Original currency") }}</th><th>{{ _("Original amount") }}</th><th>{{ _("Actions") }}</th></tr></thead>
|
||||
<thead><tr><th>{{ _("When?") }}</th><th>{{ _("Who paid?") }}</<th><th>{{ _("For what?") }}</th><th>{{ _("For whom?") }}</th><th>{{ _("How much?") }}</th><th>{{ _("Actions") }}</th></tr></thead>
|
||||
<tbody>
|
||||
{% for bill in bills %}
|
||||
<tr owers="{{bill.owers|join(',','id')}}" payer="{{bill.payer.id}}">
|
||||
|
@ -121,8 +121,6 @@
|
|||
{{ bill.owers|join(', ', 'name') }}
|
||||
{%- endif %}</td>
|
||||
<td>{{ "%0.2f"|format(bill.amount) }} ({{ "%0.2f"|format(bill.pay_each()) }} {{ _("each") }})</td>
|
||||
<td>{{ bill.original_currency }}</td>
|
||||
<td>{{ bill.original_amount }}</td>
|
||||
<td class="bill-actions">
|
||||
<a class="edit" href="{{ url_for(".edit_bill", bill_id=bill.id) }}" title="{{ _("edit") }}">{{ _('edit') }}</a>
|
||||
<a class="delete" href="{{ url_for(".delete_bill", bill_id=bill.id) }}" title="{{ _("delete") }}">{{ _('delete') }}</a>
|
||||
|
|
|
@ -12,7 +12,20 @@ from werkzeug.routing import HTTPException, RoutingException
|
|||
from datetime import datetime, timedelta
|
||||
|
||||
import csv
|
||||
import requests
|
||||
|
||||
class CurrencyConverter(object):
|
||||
api_url = 'https://api.exchangerate-api.com/v4/latest/USD'
|
||||
response = []
|
||||
|
||||
def __init__(self):
|
||||
self.response = requests.get(self.api_url).json();
|
||||
|
||||
def get_currencies(self):
|
||||
currencies = []
|
||||
for rate in self.response["rates"]:
|
||||
currencies.append((rate,rate))
|
||||
return currencies
|
||||
|
||||
def slugify(value):
|
||||
"""Normalizes string, converts to lowercase, removes non-alpha characters,
|
||||
|
|
|
@ -315,7 +315,9 @@ def create_project():
|
|||
)
|
||||
return redirect(url_for(".list_bills", project_id=project.id))
|
||||
|
||||
return render_template("create_project.html", form=form)
|
||||
return render_template(
|
||||
"create_project.html", form=form,
|
||||
)
|
||||
|
||||
|
||||
@main.route("/password-reminder", methods=["GET", "POST"])
|
||||
|
@ -387,7 +389,9 @@ def edit_project():
|
|||
edit_form.contact_email.data = g.project.contact_email
|
||||
|
||||
return render_template(
|
||||
"edit_project.html", edit_form=edit_form, current_view="edit_project"
|
||||
"edit_project.html",
|
||||
edit_form=edit_form,
|
||||
current_view="edit_project",
|
||||
)
|
||||
|
||||
|
||||
|
@ -449,6 +453,7 @@ def demo():
|
|||
name="demonstration",
|
||||
password=generate_password_hash("demo"),
|
||||
contact_email="demo@notmyidea.org",
|
||||
default_currency="USD",
|
||||
)
|
||||
db.session.add(project)
|
||||
db.session.commit()
|
||||
|
|
Loading…
Reference in a new issue