diff --git a/app/models.py b/app/models.py index 95d69bfac..ab587a745 100644 --- a/app/models.py +++ b/app/models.py @@ -11,7 +11,7 @@ from sqlalchemy.dialects.postgresql import ( UUID, JSON ) -from sqlalchemy import UniqueConstraint, CheckConstraint +from sqlalchemy import UniqueConstraint, CheckConstraint, Index from notifications_utils.columns import Columns from notifications_utils.recipients import ( validate_email_address, @@ -1725,3 +1725,44 @@ class DailySortedLetter(db.Model): unsorted_count = db.Column(db.Integer, nullable=False, default=0) sorted_count = db.Column(db.Integer, nullable=False, default=0) updated_at = db.Column(db.DateTime, nullable=True, onupdate=datetime.datetime.utcnow) + + +class FactBilling(db.Model): + __tablename__ = "ft_billing" + + bst_date = db.Column(db.Date, nullable=False, primary_key=True, index=True) + template_id = db.Column(UUID(as_uuid=True), nullable=True, primary_key=True, index=True) + service_id = db.Column(UUID(as_uuid=True), nullable=True, index=True) + organisation_id = db.Column(UUID(as_uuid=True), nullable=True) + annual_billing_id = db.Column(UUID(as_uuid=True), nullable=True) + notification_type = db.Column(db.Text, nullable=True) + provider = db.Column(db.Text, nullable=True) + crown = db.Column(db.Text, nullable=True) + rate_multiplier = db.Column(db.Numeric(), nullable=True) + international = db.Column(db.Boolean, nullable=True) + rate = db.Column(db.Numeric(), nullable=True) + billable_units = db.Column(db.Numeric(), nullable=True) + notifications_sent = db.Column(db.Integer(), nullable=True) + + +class DateTimeDimension(db.Model): + __tablename__ = "dm_datetime" + bst_date = db.Column(db.Date, nullable=False, primary_key=True, index=True) + year = db.Column(db.Integer(), nullable=False) + month = db.Column(db.Integer(), nullable=False) + month_name = db.Column(db.Text(), nullable=False) + day = db.Column(db.Integer(), nullable=False) + bst_day = db.Column(db.Integer(), nullable=False) + day_of_year = db.Column(db.Integer(), nullable=False) + week_day_name = db.Column(db.Text(), nullable=False) + calendar_week = db.Column(db.Integer(), nullable=False) + quartal = db.Column(db.Text(), nullable=False) + year_quartal = db.Column(db.Text(), nullable=False) + year_month = db.Column(db.Text(), nullable=False) + year_calendar_week = db.Column(db.Text(), nullable=False) + financial_year = db.Column(db.Integer(), nullable=False) + utc_daytime_start = db.Column(db.DateTime, nullable=False) + utc_daytime_end = db.Column(db.DateTime, nullable=False) + + +Index('ix_dm_datetime_yearmonth', DateTimeDimension.year, DateTimeDimension.month) diff --git a/migrations/versions/0176_alter_billing_columns.py b/migrations/versions/0176_alter_billing_columns.py new file mode 100644 index 000000000..8beeb0fa4 --- /dev/null +++ b/migrations/versions/0176_alter_billing_columns.py @@ -0,0 +1,24 @@ +""" + +Revision ID: 0176_alter_billing_columns +Revises: 0175_drop_job_statistics_table +Create Date: 2018-03-12 16:54:30.663897 + +""" +from alembic import op +import sqlalchemy as sa + +revision = '0176_alter_billing_columns' +down_revision = '0175_drop_job_statistics_table' + + +def upgrade(): + op.alter_column('dm_datetime', 'calendar_week', existing_type=sa.INTEGER(), nullable=False) + op.alter_column('dm_datetime', 'day', existing_type=sa.INTEGER(), nullable=False) + op.alter_column('dm_datetime', 'financial_year', existing_type=sa.INTEGER(), nullable=False) + + +def downgrade(): + op.alter_column('dm_datetime', 'financial_year', existing_type=sa.INTEGER(), nullable=True) + op.alter_column('dm_datetime', 'day', existing_type=sa.INTEGER(), nullable=True) + op.alter_column('dm_datetime', 'calendar_week', existing_type=sa.INTEGER(), nullable=True)