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 flask_admin.form import rules
from formity.extensions import admin, db, ModelView, ModelViewHighSecurity, AdminSecurityMixin from formity.extensions import admin, db, ModelView, ModelViewHighSecurity, AdminSecurityMixin
from wtforms import TextAreaField, validators 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 spaceauth import current_user
from flask_weasyprint import HTML, render_pdf from flask_weasyprint import HTML, render_pdf
from sqlalchemy import func from sqlalchemy import func
@ -300,17 +300,16 @@ class FaceshieldRequestAdmin(ModelView):
writer = csv.DictWriter(si, fields, delimiter=';') writer = csv.DictWriter(si, fields, delimiter=';')
writer.writeheader() writer.writeheader()
config = current_app.config
for row in models: for row in models:
writer.writerow({ writer.writerow({
'kurier': 'ups', 'kurier': 'ups',
'nadawca_nazwa': config['SHIPPING_SENDER_NAME'], 'nadawca_nazwa': row.handling_orga_info.shipping_name,
'nadawca_email': config['SHIPPING_SENDER_EMAIL'], 'nadawca_email': row.handling_orga_info.shipping_email,
'nadawca_ulica': config['SHIPPING_SENDER_STREET'], 'nadawca_ulica': row.handling_orga_info.shipping_street,
'nadawca_nr_lok': config['SHIPPING_SENDER_NUMBER'], 'nadawca_nr_lok': row.handling_orga_info.shipping_number,
'nadawca_kod': config['SHIPPING_SENDER_POSTALCODE'], 'nadawca_kod': row.handling_orga_info.shipping_postalcode,
'nadawca_miasto': config['SHIPPING_SENDER_CITY'], 'nadawca_miasto': row.handling_orga_info.shipping_city,
'nadawca_telefon': config['SHIPPING_SENDER_PHONE_NUMBER'], 'nadawca_telefon': row.handling_orga_info.shipping_phone_number,
'nadawca_kraj': 'PL', 'nadawca_kraj': 'PL',
'odbiorca_nazwa': row.shipping_name, 'odbiorca_nazwa': row.shipping_name,
'odbiorca_email': row.email, 'odbiorca_email': row.email,
@ -369,16 +368,15 @@ class FaceshieldRequestAdmin(ModelView):
si = io.StringIO() si = io.StringIO()
writer = csv.DictWriter(si, fields) writer = csv.DictWriter(si, fields)
writer.writeheader() writer.writeheader()
config = current_app.config
for row in models: for row in models:
for label_id in range(row.label_count): for label_id in range(row.label_count):
writer.writerow({ writer.writerow({
'NAZWA NADAWCY': config['SHIPPING_SENDER_NAME'], 'NAZWA NADAWCY': row.handling_orga_info.shipping_name,
'OSOBA KONTAKTOWA NADAWCA': config['SHIPPING_SENDER_NAME2'], 'OSOBA KONTAKTOWA NADAWCA': row.handling_orga_info.shipping_full_name,
'ULICA NADAWCA': '%s %s' % (config['SHIPPING_SENDER_STREET'], config['SHIPPING_SENDER_NUMBER']), 'ULICA NADAWCA': '%s %s' % (row.handling_orga_info.shipping_street, row.handling_orga_info.shipping_number),
'KOD POCZTOWY NADAWCA': config['SHIPPING_SENDER_POSTALCODE'], 'KOD POCZTOWY NADAWCA': row.handling_orga_info.shipping_postalcode,
'MIASTO NADAWCA': config['SHIPPING_SENDER_CITY'], 'MIASTO NADAWCA': row.handling_orga_info.shipping_city,
'TELEFON KONTAKTOWY NADAWCA ': config['SHIPPING_SENDER_PHONE_NUMBER'], 'TELEFON KONTAKTOWY NADAWCA ': row.handling_orga_info.shipping_phone_number,
'NAZWA ODBIORCA': row.shipping_name, 'NAZWA ODBIORCA': row.shipping_name,
'OSOBA KONTAKTOWA ODBIORCA': row.full_name, 'OSOBA KONTAKTOWA ODBIORCA': row.full_name,
@ -450,11 +448,16 @@ class ShippingFaceshieldRequestAdmin(FilteredFaceshieldRequestAdmin):
class ExternalUserAdmin(ModelViewHighSecurity): class ExternalUserAdmin(ModelViewHighSecurity):
column_default_sort = 'id' column_default_sort = 'id'
column_list = ('id', 'email', 'password', 'remarks') column_list = ('id', 'email', 'password', 'remarks', 'orga')
form_columns = ('email', 'password', 'remarks') form_columns = ('email', 'password', 'remarks', 'orga')
can_delete = True 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): class ChangelogAdmin(ModelView):
can_delete = False can_delete = False
can_edit = 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(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(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(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(MapView(name='Map', endpoint='map'))
admin.add_view(ChangelogAdmin(RequestChange, db.session)) 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') 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 = 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): def __str__(self):
return Markup('<a href="/admin/request_unfiltered/edit/?id={}">#{} {}</a> ({})').format(self.id, self.id, self.entity_info, self.status.name) 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) 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): class ExternalUser(db.Model):
id = db.Column(db.Integer, primary_key=True) id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String, nullable=False) email = db.Column(db.String, nullable=False)
_password = db.Column('password', db.String, nullable=False) _password = db.Column('password', db.String, nullable=False)
remarks = db.Column(db.String) remarks = db.Column(db.String)
orga = db.Column(db.String, db.ForeignKey(Orga.id))
def _hash(self, salt, password): def _hash(self, salt, password):
return hashlib.pbkdf2_hmac('sha256', password.encode(), salt.encode(), 213700).hex() 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', 'country': 'PL',
}, },
'sender': { 'sender': {
'name': 'Warszawski Hackerspace', 'name': model.handling_orga_info.shipping_name,
'name2': 'Marek Adamusiński', 'name2': model.handling_orga_info.shipping_full_name,
'email': 'qrde@hackerspace.pl', 'email': model.handling_orga_info.shipping_email,
'street': 'Wolność', 'street': model.handling_orga_info.shipping_street,
'number': '2a', 'number': model.handling_orga_info.shipping_number,
'zip': '01-018', 'zip': model.handling_orga_info.shipping_postalcode,
'city': 'Warszawa', 'city': model.handling_orga_info.shipping_city,
'phone': '601233014', 'phone': model.handling_orga_info.shipping_phone_number,
'country': 'PL', 'country': 'PL',
}, },
'refer': str(model.id), 'refer': str(model.id),
@ -133,7 +133,6 @@ class Kurjerzy:
model.shipping_id = result['data']['createShipment']['shipment']['id'] model.shipping_id = result['data']['createShipment']['shipment']['id']
def shipment_info(self, 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 } } }', { result = self.send_query(r'query($id: Int) { shipments(ids:[$id]) { id, labelRef, labelSource, status, tracking { statuses } } }', {
'id': id, 'id': id,
}) })

View File

@ -71,7 +71,7 @@ html, body {
{% for label_id in range(model.label_count) %} {% for label_id in range(model.label_count) %}
<div class="container"> <div class="container">
<div class="line idline"> <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 %} {{ 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>
<div class="line mark"> <div class="line mark">