create new table annual_billing

This commit is contained in:
venusbb
2017-10-18 15:09:05 +01:00
parent 92b50a26d3
commit 5b2912c0f5
5 changed files with 75 additions and 2 deletions

View File

@@ -247,7 +247,7 @@ class PopulateServiceEmailReplyTo(Command):
result = db.session.execute(services_to_update)
db.session.commit()
print("Populated email reply to adderesses for {}".format(result.rowcount))
print("Populated email reply to addresses for {}".format(result.rowcount))
class PopulateServiceSmsSender(Command):
@@ -329,3 +329,25 @@ class PopulateServiceAndServiceHistoryFreeSmsFragmentLimit(Command):
print("Populated free sms fragment limits for {} services".format(services_result.rowcount))
print("Populated free sms fragment limits for {} services history".format(services_history_result.rowcount))
class PopulateAnnualBilling(Command):
def run(self):
financial_year=[2016,2017,2018]
for fy in financial_year:
populate_data = """
INSERT INTO annual_billing(id, service_id, free_sms_fragment_limit, financial_year_start,
created_at, updated_at)
SELECT uuid_in(md5(random()::text || now()::text)::cstring), id, 250000, {}, '{}', '{}'
FROM services
WHERE id NOT IN(
SELECT service_id
FROM annual_billing
WHERE financial_year_start={})
""".format(fy, datetime.utcnow(), datetime.utcnow(), fy)
services_result1 = db.session.execute(populate_data)
db.session.commit()
print("Populated annual billing {} for {} services".format(fy, services_result1.rowcount))

View File

@@ -26,7 +26,7 @@ def get_financial_year(year):
def get_april_fools(year):
"""
This function converts the start of the financial year April 1, 00:00 as BST (British Standard Time) to UTC,
the tzinfo is lastly removed from the datetime becasue the database stores the timestamps without timezone.
the tzinfo is lastly removed from the datetime because the database stores the timestamps without timezone.
:param year: the year to calculate the April 1, 00:00 BST for
:return: the datetime of April 1 for the given year, for example 2016 = 2016-03-31 23:00:00
"""

View File

@@ -1462,3 +1462,23 @@ class NotificationEmailReplyTo(db.Model):
nullable=False,
primary_key=True
)
class AnnualBilling(db.Model):
__tablename__ = "annual_billing"
id = db.Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
service_id = db.Column(UUID(as_uuid=True), db.ForeignKey('services.id'), unique=False, index=True, nullable=False)
financial_year_start = db.Column(db.Integer, nullable=False, default=True)
free_sms_fragment_limit = db.Column(db.Integer, nullable=False, index=False, unique=False)
updated_at = db.Column(db.DateTime, nullable=True, onupdate=datetime.datetime.utcnow)
created_at = db.Column(db.DateTime, nullable=False, default=datetime.datetime.utcnow)
def serialize(self):
return {
'id': str(self.id),
'service_id': str(self.service_id),
'free_sms_fragment_limit': str(self.free_sms_fragment_limit),
'financial_year_start': str(self.financial_year_start),
'created_at': self.created_at.strftime(DATETIME_FORMAT),
'updated_at': self.updated_at.strftime(DATETIME_FORMAT) if self.updated_at else None
}

View File

@@ -23,6 +23,8 @@ manager.add_command('populate_service_sms_sender', commands.PopulateServiceSmsSe
manager.add_command('populate_service_letter_contact', commands.PopulateServiceLetterContact)
manager.add_command('populate_service_and_service_history_free_sms_fragment_limit',
commands.PopulateServiceAndServiceHistoryFreeSmsFragmentLimit)
manager.add_command('populate_annual_billing',
commands.PopulateAnnualBilling)
@manager.command

View File

@@ -0,0 +1,29 @@
"""
Revision ID: 0126_add_annual_billing
Revises: 0125_add_organisation_type
Create Date: 2017-10-18 11:42:54.261575
"""
from alembic import op
import sqlalchemy as sa
from sqlalchemy.dialects import postgresql
revision = '0126_add_annual_billing'
down_revision = '0125_add_organisation_type'
def upgrade():
op.create_table('annual_billing',
sa.Column('id', postgresql.UUID(as_uuid=True), nullable=False),
sa.Column('service_id', postgresql.UUID(as_uuid=True), nullable=False),
sa.Column('financial_year_start', sa.Integer(), nullable=False),
sa.Column('free_sms_fragment_limit', sa.Integer(), nullable=False),
sa.Column('created_at', sa.DateTime(), nullable=True),
sa.Column('updated_at', sa.DateTime(), nullable=True),
sa.ForeignKeyConstraint(['service_id'], ['services.id'], ),
sa.PrimaryKeyConstraint('id'))
def downgrade():
op.drop_table('annual_billing')