Insert initial letter rates.

Create letter rates dao.
Query to fetch letter rates.
This commit is contained in:
Rebecca Law
2017-12-06 16:40:38 +00:00
parent 07a71ef71c
commit 14be85160c
4 changed files with 90 additions and 2 deletions

View File

@@ -0,0 +1,23 @@
from app import db
from app.dao.dao_utils import transactional
from app.models import LetterRate
@transactional
def dao_create_letter_rate(letter_rate):
db.session.add(letter_rate)
def get_letter_rates_for_daterange(date, crown, sheet_count, post_class='second'):
rates = LetterRate.query.filter(
LetterRate.start_date <= date
).filter((LetterRate.end_date == None) | # noqa
(LetterRate.end_date > date)
).filter(
LetterRate.crown == crown
).filter(
LetterRate.sheet_count == sheet_count
).filter(
LetterRate.post_class == post_class
).all()
return rates

View File

@@ -1487,7 +1487,7 @@ class LetterRate(db.Model):
id = db.Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) id = db.Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
start_date = db.Column(db.DateTime, nullable=False) start_date = db.Column(db.DateTime, nullable=False)
end_date = db.Column(db.DateTime, nullable=True) end_date = db.Column(db.DateTime, nullable=True)
sheet_total = db.Column(db.Integer, nullable=False) # double sided sheet sheet_count = db.Column(db.Integer, nullable=False) # double sided sheet
rate = db.Column(db.Numeric(), nullable=False) rate = db.Column(db.Numeric(), nullable=False)
crown = db.Column(db.Boolean, nullable=False) crown = db.Column(db.Boolean, nullable=False)
post_class = db.Column(db.String, nullable=False) post_class = db.Column(db.String, nullable=False)

View File

@@ -5,6 +5,9 @@ Revises: 0149_add_crown_to_services
Create Date: 2017-12-05 10:24:41.232128 Create Date: 2017-12-05 10:24:41.232128
""" """
import uuid
from datetime import datetime
from alembic import op from alembic import op
import sqlalchemy as sa import sqlalchemy as sa
from sqlalchemy.dialects import postgresql from sqlalchemy.dialects import postgresql
@@ -20,13 +23,34 @@ def upgrade():
sa.Column('id', postgresql.UUID(as_uuid=True), nullable=False), sa.Column('id', postgresql.UUID(as_uuid=True), nullable=False),
sa.Column('start_date', sa.DateTime(), nullable=False), sa.Column('start_date', sa.DateTime(), nullable=False),
sa.Column('end_date', sa.DateTime(), nullable=True), sa.Column('end_date', sa.DateTime(), nullable=True),
sa.Column('sheet_total', sa.Integer(), nullable=False), sa.Column('sheet_count', sa.Integer(), nullable=False),
sa.Column('rate', sa.Numeric(), nullable=False), sa.Column('rate', sa.Numeric(), nullable=False),
sa.Column('crown', sa.Boolean(), nullable=False), sa.Column('crown', sa.Boolean(), nullable=False),
sa.Column('post_class', sa.String(), nullable=False), sa.Column('post_class', sa.String(), nullable=False),
sa.PrimaryKeyConstraint('id') sa.PrimaryKeyConstraint('id')
) )
start_date = datetime(2016, 3, 31, 23, 00, 00)
op.execute("insert into letter_rates values('{}', '{}', null, 1, 0.30, True, 'second')".format(
str(uuid.uuid4()), start_date)
)
op.execute("insert into letter_rates values('{}', '{}', null, 2, 0.33, True, 'second')".format(
str(uuid.uuid4()), start_date)
)
op.execute("insert into letter_rates values('{}', '{}', null, 3, 0.36, True, 'second')".format(
str(uuid.uuid4()), start_date)
)
op.execute("insert into letter_rates values('{}', '{}', null, 1, 0.33, False, 'second')".format(
str(uuid.uuid4()), start_date)
)
op.execute("insert into letter_rates values('{}', '{}', null, 2, 0.39, False, 'second')".format(
str(uuid.uuid4()), start_date)
)
op.execute("insert into letter_rates values('{}', '{}', null, 3, 0.45, False, 'second')".format(
str(uuid.uuid4()), start_date)
)
def downgrade(): def downgrade():
op.drop_table('letter_rates') op.drop_table('letter_rates')

View File

@@ -0,0 +1,41 @@
from datetime import datetime
from decimal import Decimal
from app.dao.letter_rate_dao import dao_create_letter_rate, get_letter_rates_for_daterange
from app.models import LetterRate
def test_dao_create_letter_rate(notify_db_session):
letter_rate = LetterRate(start_date=datetime(2017, 12, 1),
rate=0.33,
crown=True,
sheet_count=1,
post_class='second')
dao_create_letter_rate(letter_rate)
rates = LetterRate.query.all()
assert len(rates) == 1
def test_get_letter_rates_for_daterange(notify_db_session):
letter_rate = LetterRate(start_date=datetime(2017, 12, 1),
rate=0.33,
crown=True,
sheet_count=1,
post_class='second')
dao_create_letter_rate(letter_rate)
letter_rate = LetterRate(start_date=datetime(2016, 12, 1),
end_date=datetime(2017, 12, 1),
rate=0.30,
crown=True,
sheet_count=1,
post_class='second')
dao_create_letter_rate(letter_rate)
results = get_letter_rates_for_daterange(date=datetime(2017, 12, 2), crown=True, sheet_count=1, post_class='second')
assert len(results) == 1
assert results[0].rate == Decimal('0.33')