From 007b8e0c1d1995bf98ac5554ea356ea523e76905 Mon Sep 17 00:00:00 2001 From: Piotr Dobrowolski Date: Fri, 24 Apr 2020 08:41:06 +0200 Subject: [PATCH] Add Orga info model --- formity/admin.py | 40 +++++++++-------- formity/models.py | 16 +++++++ .../41f49135a5e5_add_handling_orga_info.py | 44 +++++++++++++++++++ shipping/kurjerzy.py | 17 ++++--- templates/label.html | 2 +- 5 files changed, 91 insertions(+), 28 deletions(-) create mode 100644 migrations/versions/41f49135a5e5_add_handling_orga_info.py diff --git a/formity/admin.py b/formity/admin.py index a192520..6dd9dea 100644 --- a/formity/admin.py +++ b/formity/admin.py @@ -8,7 +8,7 @@ import pdfplumber from flask_admin.form import rules from formity.extensions import admin, db, ModelView, ModelViewHighSecurity, AdminSecurityMixin from wtforms import TextAreaField, validators -from formity.models import FaceshieldRequest, RequestChange, Status, PostalCode, ExternalUser +from formity.models import FaceshieldRequest, RequestChange, Status, PostalCode, ExternalUser, Orga from spaceauth import current_user from flask_weasyprint import HTML, render_pdf from sqlalchemy import func @@ -300,17 +300,16 @@ class FaceshieldRequestAdmin(ModelView): writer = csv.DictWriter(si, fields, delimiter=';') writer.writeheader() - config = current_app.config for row in models: writer.writerow({ 'kurier': 'ups', - 'nadawca_nazwa': config['SHIPPING_SENDER_NAME'], - 'nadawca_email': config['SHIPPING_SENDER_EMAIL'], - 'nadawca_ulica': config['SHIPPING_SENDER_STREET'], - 'nadawca_nr_lok': config['SHIPPING_SENDER_NUMBER'], - 'nadawca_kod': config['SHIPPING_SENDER_POSTALCODE'], - 'nadawca_miasto': config['SHIPPING_SENDER_CITY'], - 'nadawca_telefon': config['SHIPPING_SENDER_PHONE_NUMBER'], + 'nadawca_nazwa': row.handling_orga_info.shipping_name, + 'nadawca_email': row.handling_orga_info.shipping_email, + 'nadawca_ulica': row.handling_orga_info.shipping_street, + 'nadawca_nr_lok': row.handling_orga_info.shipping_number, + 'nadawca_kod': row.handling_orga_info.shipping_postalcode, + 'nadawca_miasto': row.handling_orga_info.shipping_city, + 'nadawca_telefon': row.handling_orga_info.shipping_phone_number, 'nadawca_kraj': 'PL', 'odbiorca_nazwa': row.shipping_name, 'odbiorca_email': row.email, @@ -369,16 +368,15 @@ class FaceshieldRequestAdmin(ModelView): si = io.StringIO() writer = csv.DictWriter(si, fields) writer.writeheader() - config = current_app.config for row in models: for label_id in range(row.label_count): writer.writerow({ - 'NAZWA NADAWCY': config['SHIPPING_SENDER_NAME'], - 'OSOBA KONTAKTOWA NADAWCA': config['SHIPPING_SENDER_NAME2'], - 'ULICA NADAWCA': '%s %s' % (config['SHIPPING_SENDER_STREET'], config['SHIPPING_SENDER_NUMBER']), - 'KOD POCZTOWY NADAWCA': config['SHIPPING_SENDER_POSTALCODE'], - 'MIASTO NADAWCA': config['SHIPPING_SENDER_CITY'], - 'TELEFON KONTAKTOWY NADAWCA ': config['SHIPPING_SENDER_PHONE_NUMBER'], + 'NAZWA NADAWCY': row.handling_orga_info.shipping_name, + 'OSOBA KONTAKTOWA NADAWCA': row.handling_orga_info.shipping_full_name, + 'ULICA NADAWCA': '%s %s' % (row.handling_orga_info.shipping_street, row.handling_orga_info.shipping_number), + 'KOD POCZTOWY NADAWCA': row.handling_orga_info.shipping_postalcode, + 'MIASTO NADAWCA': row.handling_orga_info.shipping_city, + 'TELEFON KONTAKTOWY NADAWCA ': row.handling_orga_info.shipping_phone_number, 'NAZWA ODBIORCA': row.shipping_name, 'OSOBA KONTAKTOWA ODBIORCA': row.full_name, @@ -450,11 +448,16 @@ class ShippingFaceshieldRequestAdmin(FilteredFaceshieldRequestAdmin): class ExternalUserAdmin(ModelViewHighSecurity): column_default_sort = 'id' - column_list = ('id', 'email', 'password', 'remarks') - form_columns = ('email', 'password', 'remarks') + column_list = ('id', 'email', 'password', 'remarks', 'orga') + form_columns = ('email', 'password', 'remarks', 'orga') can_delete = True +class OrgaAdmin(ModelViewHighSecurity): + column_default_sort = 'id' + column_list = ('id', 'name') + form_columns = ('id', 'name', 'shipping_name', 'shipping_full_name', 'shipping_street', 'shipping_number', 'shipping_postalcode', 'shipping_city', 'shipping_phone_number', 'shipping_email') + class ChangelogAdmin(ModelView): can_delete = False can_edit = False @@ -468,5 +471,6 @@ admin.add_view(FilteredFaceshieldRequestAdmin(FaceshieldRequest, db.session)) admin.add_view(FaceshieldRequestAdmin(FaceshieldRequest, db.session, name='FaceshieldRequest (Unfiltered)', endpoint='request_unfiltered')) admin.add_view(ShippingFaceshieldRequestAdmin(FaceshieldRequest, db.session, name='FaceshieldRequest (Shipping)', endpoint='request_shipping')) admin.add_view(ExternalUserAdmin(ExternalUser, db.session, name='External Users', endpoint='external_user')) +admin.add_view(OrgaAdmin(Orga, db.session)) admin.add_view(MapView(name='Map', endpoint='map')) admin.add_view(ChangelogAdmin(RequestChange, db.session)) diff --git a/formity/models.py b/formity/models.py index 13f6c17..ad31188 100644 --- a/formity/models.py +++ b/formity/models.py @@ -87,6 +87,7 @@ class FaceshieldRequest(db.Model): parent_shipment = db.relationship('FaceshieldRequest', remote_side=id, backref='children') handling_orga = db.Column(db.String, default='hswaw', server_default='hswaw', nullable=False) + handling_orga_info = db.relationship('Orga', primaryjoin='remote(Orga.id) == foreign(FaceshieldRequest.handling_orga)') def __str__(self): return Markup('#{} {} ({})').format(self.id, self.id, self.entity_info, self.status.name) @@ -136,11 +137,26 @@ class RequestChange(db.Model): created = db.Column(db.DateTime, default=datetime.utcnow, nullable=False) +class Orga(db.Model): + id = db.Column(db.String, primary_key=True) + name = db.Column(db.String) + + shipping_name = db.Column(db.String) + shipping_full_name = db.Column(db.String) + shipping_street = db.Column(db.String) + shipping_number = db.Column(db.String) + shipping_postalcode = db.Column(db.String) + shipping_city = db.Column(db.String) + shipping_phone_number = db.Column(db.String) + shipping_email = db.Column(db.String) + + class ExternalUser(db.Model): id = db.Column(db.Integer, primary_key=True) email = db.Column(db.String, nullable=False) _password = db.Column('password', db.String, nullable=False) remarks = db.Column(db.String) + orga = db.Column(db.String, db.ForeignKey(Orga.id)) def _hash(self, salt, password): return hashlib.pbkdf2_hmac('sha256', password.encode(), salt.encode(), 213700).hex() diff --git a/migrations/versions/41f49135a5e5_add_handling_orga_info.py b/migrations/versions/41f49135a5e5_add_handling_orga_info.py new file mode 100644 index 0000000..b5551e9 --- /dev/null +++ b/migrations/versions/41f49135a5e5_add_handling_orga_info.py @@ -0,0 +1,44 @@ +"""Add handling orga info + +Revision ID: 41f49135a5e5 +Revises: f801adcdbdff +Create Date: 2020-04-24 06:22:50.364268 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = '41f49135a5e5' +down_revision = 'f801adcdbdff' +branch_labels = None +depends_on = None + + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.create_table('orga', + sa.Column('id', sa.String(), nullable=False), + sa.Column('name', sa.String(), nullable=True), + sa.Column('shipping_name', sa.String(), nullable=True), + sa.Column('shipping_full_name', sa.String(), nullable=True), + sa.Column('shipping_street', sa.String(), nullable=True), + sa.Column('shipping_number', sa.String(), nullable=True), + sa.Column('shipping_postalcode', sa.String(), nullable=True), + sa.Column('shipping_city', sa.String(), nullable=True), + sa.Column('shipping_phone_number', sa.String(), nullable=True), + sa.Column('shipping_email', sa.String(), nullable=True), + sa.PrimaryKeyConstraint('id') + ) + op.add_column('external_user', sa.Column('orga', sa.String(), nullable=True)) + op.create_foreign_key(None, 'external_user', 'orga', ['orga'], ['id']) + # ### end Alembic commands ### + + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.drop_constraint(None, 'external_user', type_='foreignkey') + op.drop_column('external_user', 'orga') + op.drop_table('orga') + # ### end Alembic commands ### diff --git a/shipping/kurjerzy.py b/shipping/kurjerzy.py index 5c1ed20..4ab19d3 100644 --- a/shipping/kurjerzy.py +++ b/shipping/kurjerzy.py @@ -92,14 +92,14 @@ class Kurjerzy: 'country': 'PL', }, 'sender': { - 'name': 'Warszawski Hackerspace', - 'name2': 'Marek Adamusiński', - 'email': 'qrde@hackerspace.pl', - 'street': 'Wolność', - 'number': '2a', - 'zip': '01-018', - 'city': 'Warszawa', - 'phone': '601233014', + 'name': model.handling_orga_info.shipping_name, + 'name2': model.handling_orga_info.shipping_full_name, + 'email': model.handling_orga_info.shipping_email, + 'street': model.handling_orga_info.shipping_street, + 'number': model.handling_orga_info.shipping_number, + 'zip': model.handling_orga_info.shipping_postalcode, + 'city': model.handling_orga_info.shipping_city, + 'phone': model.handling_orga_info.shipping_phone_number, 'country': 'PL', }, 'refer': str(model.id), @@ -133,7 +133,6 @@ class Kurjerzy: model.shipping_id = result['data']['createShipment']['shipment']['id'] def shipment_info(self, id): - print('fetching shipment_info(%r)' % (id,)) result = self.send_query(r'query($id: Int) { shipments(ids:[$id]) { id, labelRef, labelSource, status, tracking { statuses } } }', { 'id': id, }) diff --git a/templates/label.html b/templates/label.html index 6437496..33f886e 100644 --- a/templates/label.html +++ b/templates/label.html @@ -71,7 +71,7 @@ html, body { {% for label_id in range(model.label_count) %}
- {% if model.handling_orga == 'hskrk' %}Hackerspace Kraków{% else %}Warszawski Hackerspace{% endif %} / https://covid.hackerspace.pl / {{ model.status.name }} + {{ model.handling_orga_info.name }} / https://covid.hackerspace.pl / {{ model.status.name }} {{ model.faceshield_full_delivered }} #{{ model.id }}{% if model.label_count > 1 %} ({{ label_id + 1 }}/{{ model.label_count }}){% endif %}