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 @@ {{ _('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 ""