diff --git a/ihatemoney/forms.py b/ihatemoney/forms.py
index cce36e390..1e0ba00eb 100644
--- a/ihatemoney/forms.py
+++ b/ihatemoney/forms.py
@@ -1,8 +1,8 @@
from flask_wtf.form import FlaskForm
from wtforms.fields.core import SelectField, SelectMultipleField
-from wtforms.fields.html5 import DateField, DecimalField
+from wtforms.fields.html5 import DateField, DecimalField, URLField
from wtforms.fields.simple import PasswordField, SubmitField, TextAreaField, StringField
-from wtforms.validators import Email, DataRequired, ValidationError, EqualTo, NumberRange
+from wtforms.validators import Email, DataRequired, ValidationError, EqualTo, NumberRange, Optional
from flask_babel import lazy_gettext as _
from flask import request
from werkzeug.security import generate_password_hash
@@ -146,6 +146,8 @@ class BillForm(FlaskForm):
what = StringField(_("What?"), validators=[DataRequired()])
payer = SelectField(_("Payer"), validators=[DataRequired()], coerce=int)
amount = CalculatorStringField(_("Amount paid"), validators=[DataRequired()])
+ external_link = URLField(_("External link"), validators=[Optional(
+ )], description=_("A link to an external document, related to this bill"))
payed_for = SelectMultipleField(_("For whom?"),
validators=[DataRequired()], coerce=int)
submit = SubmitField(_("Submit"))
@@ -155,6 +157,7 @@ def save(self, bill, project):
bill.payer_id = self.payer.data
bill.amount = self.amount.data
bill.what = self.what.data
+ bill.external_link = self.external_link.data
bill.date = self.date.data
bill.owers = [Person.query.get(ower, project)
for ower in self.payed_for.data]
@@ -165,6 +168,7 @@ def fill(self, bill):
self.payer.data = bill.payer_id
self.amount.data = bill.amount
self.what.data = bill.what
+ self.external_link.data = bill.external_link
self.date.data = bill.date
self.payed_for.data = [int(ower.id) for ower in bill.owers]
diff --git a/ihatemoney/messages.pot b/ihatemoney/messages.pot
index b88aa747c..d6401a568 100644
--- a/ihatemoney/messages.pot
+++ b/ihatemoney/messages.pot
@@ -60,6 +60,12 @@ msgstr ""
msgid "Amount paid"
msgstr ""
+msgid "External link"
+msgstr ""
+
+msgid "A link to an external document, related to this bill"
+msgstr ""
+
msgid "For whom?"
msgstr ""
@@ -412,6 +418,9 @@ msgstr ""
msgid "each"
msgstr ""
+msgid "see"
+msgstr ""
+
msgid "No bills"
msgstr ""
diff --git a/ihatemoney/migrations/versions/6c6fb2b7f229_.py b/ihatemoney/migrations/versions/6c6fb2b7f229_.py
new file mode 100644
index 000000000..0336f6c45
--- /dev/null
+++ b/ihatemoney/migrations/versions/6c6fb2b7f229_.py
@@ -0,0 +1,26 @@
+"""empty message
+
+Revision ID: 6c6fb2b7f229
+Revises: a67119aa3ee5
+Create Date: 2019-09-28 13:38:09.550747
+
+"""
+
+# revision identifiers, used by Alembic.
+revision = '6c6fb2b7f229'
+down_revision = 'a67119aa3ee5'
+
+from alembic import op
+import sqlalchemy as sa
+
+
+def upgrade():
+ # ### commands auto generated by Alembic - please adjust! ###
+ op.add_column('bill', sa.Column('external_link', sa.UnicodeText(), nullable=True))
+ # ### end Alembic commands ###
+
+
+def downgrade():
+ # ### commands auto generated by Alembic - please adjust! ###
+ op.drop_column('bill', 'external_link')
+ # ### end Alembic commands ###
diff --git a/ihatemoney/models.py b/ihatemoney/models.py
index 325cf5790..48e16a79a 100644
--- a/ihatemoney/models.py
+++ b/ihatemoney/models.py
@@ -327,6 +327,7 @@ def delete(self, project, id):
date = db.Column(db.Date, default=datetime.now)
creation_date = db.Column(db.Date, default=datetime.now)
what = db.Column(db.UnicodeText)
+ external_link = db.Column(db.UnicodeText)
archive = db.Column(db.Integer, db.ForeignKey("archive.id"))
@@ -340,6 +341,7 @@ def _to_serialize(self):
"date": self.date,
"creation_date": self.creation_date,
"what": self.what,
+ "external_link": self.external_link,
}
def pay_each(self):
diff --git a/ihatemoney/static/css/main.css b/ihatemoney/static/css/main.css
index acc95a1a1..52bd77b28 100644
--- a/ihatemoney/static/css/main.css
+++ b/ihatemoney/static/css/main.css
@@ -32,7 +32,7 @@ body {
@media (min-width: 992px) {
.projects-item {
- margin-left: auto!important;
+ margin-left: auto !important;
}
}
@@ -108,7 +108,6 @@ body {
.identifier {
margin-bottom: 0;
}
-
}
#add-member-form {
@@ -132,7 +131,7 @@ body {
/* Home */
.home-container {
- background: linear-gradient(150deg, #abe128 0%, #43CA61 100%);
+ background: linear-gradient(150deg, #abe128 0%, #43ca61 100%);
}
.home {
padding-top: 1em;
@@ -146,7 +145,7 @@ body {
min-width: 25em;
border: 0;
border-radius: 0;
- box-shadow: 0px 0px 10px rgba(83, 88, 93, .40);
+ box-shadow: 0px 0px 10px rgba(83, 88, 93, 0.4);
margin-right: 25px;
margin-bottom: 20px;
margin-left: 25px;
@@ -159,7 +158,6 @@ body {
.empty-bill {
margin-top: 5rem !important;
-
}
.empty-bill .card {
border: 0;
@@ -240,7 +238,7 @@ footer .footer-right a {
@-moz-document url-prefix() {
/** Firefox style fix **/
footer .footer-right a {
- padding-top: 2px
+ padding-top: 2px;
}
}
footer .footer-right a:hover {
@@ -290,7 +288,8 @@ footer .footer-left {
}
.bill-actions > .delete,
-.bill-actions > .edit {
+.bill-actions > .edit,
+.bill-actions > .see {
font-size: 0px;
display: block;
width: 16px;
@@ -308,6 +307,10 @@ footer .footer-left {
background: url("../images/edit.png") no-repeat right;
}
+.bill-actions > .see {
+ background: url("../images/see.png") no-repeat right;
+}
+
#bill_table {
margin-top: 30px;
}
@@ -483,4 +486,4 @@ footer .icon svg {
}
.icon.icon-white {
fill: white;
-}
\ No newline at end of file
+}
diff --git a/ihatemoney/static/images/see.png b/ihatemoney/static/images/see.png
new file mode 100644
index 000000000..741e8292c
Binary files /dev/null and b/ihatemoney/static/images/see.png differ
diff --git a/ihatemoney/templates/forms.html b/ihatemoney/templates/forms.html
index a64e20554..c96921ca9 100644
--- a/ihatemoney/templates/forms.html
+++ b/ihatemoney/templates/forms.html
@@ -14,7 +14,7 @@
{{ field(class=class, placeholder=placeholder) | safe }}
{% endif %}
{% if field.description %}
-
{{ field.description }}
+ {{ field.description }}
{% endif %}
@@ -95,6 +95,7 @@
{{ input(form.what, inline=True) }}
{{ input(form.payer, inline=True, class="form-control custom-select") }}
{{ input(form.amount, inline=True) }}
+ {{ input(form.external_link, inline=True) }}
diff --git a/ihatemoney/templates/list_bills.html b/ihatemoney/templates/list_bills.html
index dddef4dc2..494969f10 100644
--- a/ihatemoney/templates/list_bills.html
+++ b/ihatemoney/templates/list_bills.html
@@ -134,6 +134,9 @@
{{ _('Add a bill') }}
{{ _('edit') }}
{{ _('delete') }}
+ {% if bill.external_link %}
+ {{ _('see') }}
+ {% endif %}
|
{% endfor %}
diff --git a/ihatemoney/tests/tests.py b/ihatemoney/tests/tests.py
index a7d70ce17..5043977ec 100644
--- a/ihatemoney/tests/tests.py
+++ b/ihatemoney/tests/tests.py
@@ -1282,6 +1282,7 @@ def test_bills(self):
'payer': "1",
'payed_for': ["1", "2"],
'amount': '25',
+ 'external_link': "https://raclette.fr"
}, headers=self.get_auth("raclette"))
# should return the id
@@ -1302,7 +1303,9 @@ def test_bills(self):
{"activated": True, "id": 2, "name": "fred", "weight": 1}],
"amount": 25.0,
"date": "2011-08-10",
- "id": 1}
+ "id": 1,
+ 'external_link': "https://raclette.fr"
+ }
got = json.loads(req.data.decode('utf-8'))
self.assertEqual(
@@ -1325,6 +1328,7 @@ def test_bills(self):
'payer': "1",
'payed_for': ["1", "2"],
'amount': '25',
+ 'external_link': "https://raclette.fr",
}, headers=self.get_auth("raclette"))
self.assertStatus(400, req)
@@ -1337,6 +1341,7 @@ def test_bills(self):
'payer': "2",
'payed_for': ["1", "2"],
'amount': '25',
+ 'external_link': "https://raclette.fr",
}, headers=self.get_auth("raclette"))
# check its fields
@@ -1355,7 +1360,9 @@ def test_bills(self):
{"activated": True, "id": 2, "name": "fred", "weight": 1}],
"amount": 25.0,
"date": "2011-09-10",
- "id": 1}
+ 'external_link': "https://raclette.fr",
+ "id": 1
+ }
got = json.loads(req.data.decode('utf-8'))
self.assertEqual(
@@ -1427,6 +1434,7 @@ def test_bills_with_calculation(self):
"amount": expected_amount,
"date": "2011-08-10",
"id": id,
+ "external_link": '',
}
got = json.loads(req.data.decode('utf-8'))
@@ -1538,7 +1546,9 @@ def test_weighted_bills(self):
{"activated": True, "id": 2, "name": "freddy familly", "weight": 4}],
"amount": 25.0,
"date": "2011-08-10",
- "id": 1}
+ "id": 1,
+ "external_link": ''
+ }
got = json.loads(req.data.decode('utf-8'))
self.assertEqual(
creation_date,
@@ -1603,7 +1613,7 @@ def test_generate_config(self):
def test_generate_password_hash(self):
cmd = GeneratePasswordHash()
with patch('sys.stdout', new=six.StringIO()) as stdout, \
- patch('getpass.getpass', new=lambda prompt: 'secret'): # NOQA
+ patch('getpass.getpass', new=lambda prompt: 'secret'): # NOQA
cmd.run()
print(stdout.getvalue())
self.assertEqual(len(stdout.getvalue().strip()), 189)
diff --git a/ihatemoney/translations/el/LC_MESSAGES/messages.po b/ihatemoney/translations/el/LC_MESSAGES/messages.po
index dbdb34182..14132161d 100644
--- a/ihatemoney/translations/el/LC_MESSAGES/messages.po
+++ b/ihatemoney/translations/el/LC_MESSAGES/messages.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-09-30 23:53+0200\n"
+"POT-Creation-Date: 2019-10-01 21:48+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Automatically generated\n"
"Language: el\n"
@@ -76,6 +76,12 @@ msgstr ""
msgid "Amount paid"
msgstr ""
+msgid "External link"
+msgstr ""
+
+msgid "A link to an external document, related to this bill"
+msgstr ""
+
msgid "For whom?"
msgstr ""
@@ -428,6 +434,9 @@ msgstr ""
msgid "each"
msgstr ""
+msgid "see"
+msgstr ""
+
msgid "No bills"
msgstr ""
diff --git a/ihatemoney/translations/es_419/LC_MESSAGES/messages.po b/ihatemoney/translations/es_419/LC_MESSAGES/messages.po
index 91c0b9f69..e2e25ac28 100644
--- a/ihatemoney/translations/es_419/LC_MESSAGES/messages.po
+++ b/ihatemoney/translations/es_419/LC_MESSAGES/messages.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-09-30 23:53+0200\n"
+"POT-Creation-Date: 2019-10-01 21:48+0200\n"
"PO-Revision-Date: 2019-09-25 22:28+0000\n"
"Last-Translator: Diego Caraballo
\n"
"Language: es_419\n"
@@ -81,6 +81,12 @@ msgstr "Paga"
msgid "Amount paid"
msgstr "Cantidad pagada"
+msgid "External link"
+msgstr ""
+
+msgid "A link to an external document, related to this bill"
+msgstr ""
+
msgid "For whom?"
msgstr "¿Para quién?"
@@ -443,6 +449,9 @@ msgstr ""
msgid "each"
msgstr "Cada"
+msgid "see"
+msgstr ""
+
msgid "No bills"
msgstr "Sin facturas"
diff --git a/ihatemoney/translations/fr/LC_MESSAGES/messages.po b/ihatemoney/translations/fr/LC_MESSAGES/messages.po
index b95e87d88..b8a2f21e0 100644
--- a/ihatemoney/translations/fr/LC_MESSAGES/messages.po
+++ b/ihatemoney/translations/fr/LC_MESSAGES/messages.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2019-09-30 23:53+0200\n"
+"POT-Creation-Date: 2019-10-01 21:48+0200\n"
"PO-Revision-Date: 2019-09-24 15:13+0000\n"
"Last-Translator: Alexis Metaireau \n"
"Language: fr\n"
@@ -85,6 +85,12 @@ msgstr "Payeur"
msgid "Amount paid"
msgstr "Montant"
+msgid "External link"
+msgstr "Lien externe"
+
+msgid "A link to an external document, related to this bill"
+msgstr "Un lien vers un document, lié à cette facture"
+
msgid "For whom?"
msgstr "Pour qui ?"
@@ -443,6 +449,9 @@ msgstr ""
msgid "each"
msgstr "chacun"
+msgid "see"
+msgstr ""
+
msgid "No bills"
msgstr "Pas encore de factures"
diff --git a/ihatemoney/translations/nb_NO/LC_MESSAGES/messages.po b/ihatemoney/translations/nb_NO/LC_MESSAGES/messages.po
index dc73bf5cb..d5b81c2f4 100644
--- a/ihatemoney/translations/nb_NO/LC_MESSAGES/messages.po
+++ b/ihatemoney/translations/nb_NO/LC_MESSAGES/messages.po
@@ -82,6 +82,12 @@ msgstr "Betaler"
msgid "Amount paid"
msgstr "Beløp betalt"
+msgid "External link"
+msgstr ""
+
+msgid "A link to an external document, related to this bill"
+msgstr ""
+
msgid "For whom?"
msgstr "For hvem?"
@@ -456,6 +462,9 @@ msgstr "Alle, unntagen %(excluded)s"
msgid "each"
msgstr "hver"
+msgid "see"
+msgstr ""
+
msgid "No bills"
msgstr "Ingen regninger"
diff --git a/ihatemoney/translations/nl/LC_MESSAGES/messages.po b/ihatemoney/translations/nl/LC_MESSAGES/messages.po
index b8cadb590..af798ca24 100644
--- a/ihatemoney/translations/nl/LC_MESSAGES/messages.po
+++ b/ihatemoney/translations/nl/LC_MESSAGES/messages.po
@@ -77,6 +77,12 @@ msgstr "Betaler"
msgid "Amount paid"
msgstr "Betaald bedrag"
+msgid "External link"
+msgstr ""
+
+msgid "A link to an external document, related to this bill"
+msgstr ""
+
msgid "For whom?"
msgstr "Aan wie?"
@@ -437,6 +443,9 @@ msgstr "Iedereen, behalve %(excluded)s"
msgid "each"
msgstr "per persoon"
+msgid "see"
+msgstr ""
+
msgid "No bills"
msgstr "Geen rekeningen"
diff --git a/ihatemoney/translations/tr/LC_MESSAGES/messages.po b/ihatemoney/translations/tr/LC_MESSAGES/messages.po
index 976903e70..c072285c5 100644
--- a/ihatemoney/translations/tr/LC_MESSAGES/messages.po
+++ b/ihatemoney/translations/tr/LC_MESSAGES/messages.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-09-30 23:53+0200\n"
+"POT-Creation-Date: 2019-10-01 21:48+0200\n"
"PO-Revision-Date: 2019-08-07 13:24+0000\n"
"Last-Translator: Mesut Akcan \n"
"Language: tr\n"
@@ -81,6 +81,12 @@ msgstr "Mükellefi"
msgid "Amount paid"
msgstr "Ödenen tutar"
+msgid "External link"
+msgstr ""
+
+msgid "A link to an external document, related to this bill"
+msgstr ""
+
msgid "For whom?"
msgstr "Kim için?"
@@ -433,6 +439,9 @@ msgstr ""
msgid "each"
msgstr ""
+msgid "see"
+msgstr ""
+
msgid "No bills"
msgstr ""
diff --git a/ihatemoney/translations/zh_HANS-CN/LC_MESSAGES/messages.po b/ihatemoney/translations/zh_HANS-CN/LC_MESSAGES/messages.po
index 5836868dc..60b0fb171 100644
--- a/ihatemoney/translations/zh_HANS-CN/LC_MESSAGES/messages.po
+++ b/ihatemoney/translations/zh_HANS-CN/LC_MESSAGES/messages.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-09-30 23:53+0200\n"
+"POT-Creation-Date: 2019-10-01 21:48+0200\n"
"PO-Revision-Date: 2019-07-02 00:02+0000\n"
"Last-Translator: Elizabeth Sherrock \n"
"Language: zh_HANS_CN\n"
@@ -78,6 +78,12 @@ msgstr ""
msgid "Amount paid"
msgstr ""
+msgid "External link"
+msgstr ""
+
+msgid "A link to an external document, related to this bill"
+msgstr ""
+
msgid "For whom?"
msgstr ""
@@ -430,6 +436,9 @@ msgstr ""
msgid "each"
msgstr ""
+msgid "see"
+msgstr ""
+
msgid "No bills"
msgstr ""