Add Orga info model

master
informatic 2020-04-24 08:41:06 +02:00
parent 611ccb288f
commit 007b8e0c1d
5 changed files with 91 additions and 28 deletions

View File

@ -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))

View File

@ -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('<a href="/admin/request_unfiltered/edit/?id={}">#{} {}</a> ({})').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()

View File

@ -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 ###

View File

@ -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,
})

View File

@ -71,7 +71,7 @@ html, body {
{% for label_id in range(model.label_count) %}
<div class="container">
<div class="line idline">
<small>{% if model.handling_orga == 'hskrk' %}Hackerspace Kraków{% else %}Warszawski Hackerspace{% endif %} / <u>https://covid.hackerspace.pl</u> / <b>{{ model.status.name }}</b></small>
<small>{{ model.handling_orga_info.name }} / <u>https://covid.hackerspace.pl</u> / <b>{{ model.status.name }}</b></small>
{{ model.faceshield_full_delivered }} <b>#{{ model.id }}</b>{% if model.label_count > 1 %} <small class="labelid">({{ label_id + 1 }}/{{ model.label_count }})</small>{% endif %}
</div>
<div class="line mark">