mirror of
https://github.com/GSA/notifications-api.git
synced 2026-09-02 17:48:36 -04:00
Insert initial letter rates.
Create letter rates dao. Query to fetch letter rates.
This commit is contained in:
23
app/dao/letter_rate_dao.py
Normal file
23
app/dao/letter_rate_dao.py
Normal 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
|
||||||
@@ -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)
|
||||||
|
|||||||
@@ -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')
|
||||||
|
|||||||
41
tests/app/dao/test_letter_rate_dao.py
Normal file
41
tests/app/dao/test_letter_rate_dao.py
Normal 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')
|
||||||
Reference in New Issue
Block a user