diff --git a/alembic/versions/d73cba9a4259_remove_columns_from_task_orders.py b/alembic/versions/d73cba9a4259_remove_columns_from_task_orders.py new file mode 100644 index 00000000..60c8dea0 --- /dev/null +++ b/alembic/versions/d73cba9a4259_remove_columns_from_task_orders.py @@ -0,0 +1,132 @@ +"""remove columns from task orders + +Revision ID: d73cba9a4259 +Revises: d2390c547dca +Create Date: 2019-05-30 13:47:08.684986 + +""" +from alembic import op +import sqlalchemy as sa +from sqlalchemy.dialects import postgresql + +# revision identifiers, used by Alembic. +revision = 'd73cba9a4259' +down_revision = 'd2390c547dca' +branch_labels = None +depends_on = None + + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.drop_constraint('task_orders_users_so_id', 'task_orders', type_='foreignkey') + op.drop_constraint('task_orders_users_ko_id', 'task_orders', type_='foreignkey') + op.drop_constraint('task_orders_attachments_csp_attachment_id', 'task_orders', type_='foreignkey') + op.drop_constraint('task_orders_users_cor_id', 'task_orders', type_='foreignkey') + op.drop_constraint('task_orders_dd_254s_id', 'task_orders', type_='foreignkey') + op.drop_column('task_orders', 'custom_clauses') + op.drop_column('task_orders', 'unlimited_level_of_warrant') + op.drop_column('task_orders', 'complexity_other') + op.drop_column('task_orders', 'level_of_warrant') + op.drop_column('task_orders', 'ko_id') + op.drop_column('task_orders', 'so_first_name') + op.drop_column('task_orders', 'ko_invite') + op.drop_column('task_orders', 'team_experience') + op.drop_column('task_orders', 'so_phone_number') + op.drop_column('task_orders', 'cor_phone_number') + op.drop_column('task_orders', 'end_date') + op.drop_column('task_orders', 'cor_first_name') + op.drop_column('task_orders', 'app_migration') + op.drop_column('task_orders', 'performance_length') + op.drop_column('task_orders', 'ko_last_name') + op.drop_column('task_orders', 'so_last_name') + op.drop_column('task_orders', 'cor_dod_id') + op.drop_column('task_orders', 'scope') + op.drop_column('task_orders', 'complexity') + op.drop_column('task_orders', 'dev_team_other') + op.drop_column('task_orders', 'cor_invite') + op.drop_column('task_orders', 'ko_first_name') + op.drop_column('task_orders', 'native_apps') + op.drop_column('task_orders', 'csp_attachment_id') + op.drop_column('task_orders', 'clin_02') + op.drop_column('task_orders', 'cor_id') + op.drop_column('task_orders', 'so_email') + op.drop_column('task_orders', 'ko_email') + op.drop_column('task_orders', 'start_date') + op.drop_column('task_orders', 'cor_last_name') + op.drop_column('task_orders', 'ko_phone_number') + op.drop_column('task_orders', 'so_id') + op.drop_column('task_orders', 'dev_team') + op.drop_column('task_orders', 'clin_01') + op.drop_column('task_orders', 'cor_email') + op.drop_column('task_orders', 'loas') + op.drop_column('task_orders', 'so_dod_id') + op.drop_column('task_orders', 'so_invite') + op.drop_column('task_orders', 'clin_03') + op.drop_column('task_orders', 'dd_254_id') + op.drop_column('task_orders', 'clin_04') + op.drop_column('task_orders', 'ko_dod_id') + op.drop_table('dd_254s') + # ### end Alembic commands ### + + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.add_column('task_orders', sa.Column('ko_dod_id', sa.VARCHAR(), autoincrement=False, nullable=True)) + op.add_column('task_orders', sa.Column('clin_04', sa.NUMERIC(), autoincrement=False, nullable=True)) + op.add_column('task_orders', sa.Column('dd_254_id', postgresql.UUID(), autoincrement=False, nullable=True)) + op.add_column('task_orders', sa.Column('clin_03', sa.NUMERIC(), autoincrement=False, nullable=True)) + op.add_column('task_orders', sa.Column('so_invite', sa.BOOLEAN(), autoincrement=False, nullable=True)) + op.add_column('task_orders', sa.Column('so_dod_id', sa.VARCHAR(), autoincrement=False, nullable=True)) + op.add_column('task_orders', sa.Column('loas', postgresql.ARRAY(sa.VARCHAR()), autoincrement=False, nullable=True)) + op.add_column('task_orders', sa.Column('cor_email', sa.VARCHAR(), autoincrement=False, nullable=True)) + op.add_column('task_orders', sa.Column('clin_01', sa.NUMERIC(), autoincrement=False, nullable=True)) + op.add_column('task_orders', sa.Column('dev_team', postgresql.ARRAY(sa.VARCHAR()), autoincrement=False, nullable=True)) + op.add_column('task_orders', sa.Column('so_id', postgresql.UUID(), autoincrement=False, nullable=True)) + op.add_column('task_orders', sa.Column('ko_phone_number', sa.VARCHAR(), autoincrement=False, nullable=True)) + op.add_column('task_orders', sa.Column('cor_last_name', sa.VARCHAR(), autoincrement=False, nullable=True)) + op.add_column('task_orders', sa.Column('start_date', sa.DATE(), autoincrement=False, nullable=True)) + op.add_column('task_orders', sa.Column('ko_email', sa.VARCHAR(), autoincrement=False, nullable=True)) + op.add_column('task_orders', sa.Column('so_email', sa.VARCHAR(), autoincrement=False, nullable=True)) + op.add_column('task_orders', sa.Column('cor_id', postgresql.UUID(), autoincrement=False, nullable=True)) + op.add_column('task_orders', sa.Column('clin_02', sa.NUMERIC(), autoincrement=False, nullable=True)) + op.add_column('task_orders', sa.Column('csp_attachment_id', postgresql.UUID(), autoincrement=False, nullable=True)) + op.add_column('task_orders', sa.Column('native_apps', sa.VARCHAR(), autoincrement=False, nullable=True)) + op.add_column('task_orders', sa.Column('ko_first_name', sa.VARCHAR(), autoincrement=False, nullable=True)) + op.add_column('task_orders', sa.Column('cor_invite', sa.BOOLEAN(), autoincrement=False, nullable=True)) + op.add_column('task_orders', sa.Column('dev_team_other', sa.VARCHAR(), autoincrement=False, nullable=True)) + op.add_column('task_orders', sa.Column('complexity', postgresql.ARRAY(sa.VARCHAR()), autoincrement=False, nullable=True)) + op.add_column('task_orders', sa.Column('scope', sa.VARCHAR(), autoincrement=False, nullable=True)) + op.add_column('task_orders', sa.Column('cor_dod_id', sa.VARCHAR(), autoincrement=False, nullable=True)) + op.add_column('task_orders', sa.Column('so_last_name', sa.VARCHAR(), autoincrement=False, nullable=True)) + op.add_column('task_orders', sa.Column('ko_last_name', sa.VARCHAR(), autoincrement=False, nullable=True)) + op.add_column('task_orders', sa.Column('performance_length', sa.INTEGER(), autoincrement=False, nullable=True)) + op.add_column('task_orders', sa.Column('app_migration', sa.VARCHAR(), autoincrement=False, nullable=True)) + op.add_column('task_orders', sa.Column('cor_first_name', sa.VARCHAR(), autoincrement=False, nullable=True)) + op.add_column('task_orders', sa.Column('end_date', sa.DATE(), autoincrement=False, nullable=True)) + op.add_column('task_orders', sa.Column('cor_phone_number', sa.VARCHAR(), autoincrement=False, nullable=True)) + op.add_column('task_orders', sa.Column('so_phone_number', sa.VARCHAR(), autoincrement=False, nullable=True)) + op.add_column('task_orders', sa.Column('team_experience', sa.VARCHAR(), autoincrement=False, nullable=True)) + op.add_column('task_orders', sa.Column('ko_invite', sa.BOOLEAN(), autoincrement=False, nullable=True)) + op.add_column('task_orders', sa.Column('so_first_name', sa.VARCHAR(), autoincrement=False, nullable=True)) + op.add_column('task_orders', sa.Column('ko_id', postgresql.UUID(), autoincrement=False, nullable=True)) + op.add_column('task_orders', sa.Column('level_of_warrant', sa.NUMERIC(), autoincrement=False, nullable=True)) + op.add_column('task_orders', sa.Column('complexity_other', sa.VARCHAR(), autoincrement=False, nullable=True)) + op.add_column('task_orders', sa.Column('unlimited_level_of_warrant', sa.BOOLEAN(), autoincrement=False, nullable=True)) + op.add_column('task_orders', sa.Column('custom_clauses', sa.VARCHAR(), autoincrement=False, nullable=True)) + op.create_foreign_key('task_orders_users_cor_id', 'task_orders', 'users', ['cor_id'], ['id']) + op.create_foreign_key('task_orders_attachments_csp_attachment_id', 'task_orders', 'attachments', ['csp_attachment_id'], ['id']) + op.create_foreign_key('task_orders_users_ko_id', 'task_orders', 'users', ['ko_id'], ['id']) + op.create_foreign_key('task_orders_users_so_id', 'task_orders', 'users', ['so_id'], ['id']) + op.create_table('dd_254s', + sa.Column('time_created', postgresql.TIMESTAMP(timezone=True), server_default=sa.text('now()'), autoincrement=False, nullable=False), + sa.Column('time_updated', postgresql.TIMESTAMP(timezone=True), server_default=sa.text('now()'), autoincrement=False, nullable=False), + sa.Column('id', postgresql.UUID(), server_default=sa.text('uuid_generate_v4()'), autoincrement=False, nullable=False), + sa.Column('certifying_official', sa.VARCHAR(), autoincrement=False, nullable=True), + sa.Column('certifying_official_title', sa.VARCHAR(), autoincrement=False, nullable=True), + sa.Column('certifying_official_address', sa.VARCHAR(), autoincrement=False, nullable=True), + sa.Column('certifying_official_phone', sa.VARCHAR(), autoincrement=False, nullable=True), + sa.Column('required_distribution', postgresql.ARRAY(sa.VARCHAR()), autoincrement=False, nullable=True), + sa.PrimaryKeyConstraint('id', name='dd_254s_pkey') + ) + op.create_foreign_key('task_orders_dd_254s_id', 'task_orders', 'dd_254s', ['dd_254_id'], ['id']) + # ### end Alembic commands ### diff --git a/atst/models/dd_254.py b/atst/models/dd_254.py deleted file mode 100644 index cd107d3e..00000000 --- a/atst/models/dd_254.py +++ /dev/null @@ -1,31 +0,0 @@ -from sqlalchemy import Column, String -from sqlalchemy.types import ARRAY -from sqlalchemy.orm import relationship - -from atst.models import Base, types, mixins - - -class DD254(Base, mixins.TimestampsMixin): - __tablename__ = "dd_254s" - - id = types.Id() - - certifying_official = Column(String) - certifying_official_title = Column(String) - certifying_official_address = Column(String) - certifying_official_phone = Column(String) - required_distribution = Column(ARRAY(String)) - - task_order = relationship("TaskOrder", uselist=False, backref="task_order") - - def to_dictionary(self): - return { - c.name: getattr(self, c.name) - for c in self.__table__.columns - if c.name not in ["id"] - } - - def __repr__(self): - return "".format( - self.certifying_official, self.task_order.id, self.id - ) diff --git a/atst/models/task_order.py b/atst/models/task_order.py index 64c29e7a..6106d7ce 100644 --- a/atst/models/task_order.py +++ b/atst/models/task_order.py @@ -2,18 +2,8 @@ from enum import Enum from datetime import date import pendulum -from sqlalchemy import ( - Column, - Numeric, - String, - ForeignKey, - Date, - Integer, - DateTime, - Boolean, -) +from sqlalchemy import Column, DateTime, ForeignKey, String from sqlalchemy.ext.hybrid import hybrid_property -from sqlalchemy.types import ARRAY from sqlalchemy.orm import relationship from werkzeug.datastructures import FileStorage @@ -43,64 +33,11 @@ class TaskOrder(Base, mixins.TimestampsMixin): user_id = Column(ForeignKey("users.id")) creator = relationship("User", foreign_keys="TaskOrder.user_id") - ko_id = Column(ForeignKey("users.id")) - contracting_officer = relationship("User", foreign_keys="TaskOrder.ko_id") - - cor_id = Column(ForeignKey("users.id")) - contracting_officer_representative = relationship( - "User", foreign_keys="TaskOrder.cor_id" - ) - - so_id = Column(ForeignKey("users.id")) - security_officer = relationship("User", foreign_keys="TaskOrder.so_id") - - dd_254_id = Column(ForeignKey("dd_254s.id")) - dd_254 = relationship("DD254") - - scope = Column(String) # Cloud Project Scope - app_migration = Column(String) # App Migration - native_apps = Column(String) # Native Apps - complexity = Column(ARRAY(String)) # Application Complexity - complexity_other = Column(String) - dev_team = Column(ARRAY(String)) # Development Team - dev_team_other = Column(String) - team_experience = Column(String) # Team Experience - start_date = Column(Date) # Period of Performance - end_date = Column(Date) - performance_length = Column(Integer) - csp_attachment_id = Column(ForeignKey("attachments.id")) - _csp_estimate = relationship("Attachment", foreign_keys=[csp_attachment_id]) - clin_01 = Column(Numeric(scale=2)) - clin_02 = Column(Numeric(scale=2)) - clin_03 = Column(Numeric(scale=2)) - clin_04 = Column(Numeric(scale=2)) - ko_first_name = Column(String) # First Name - ko_last_name = Column(String) # Last Name - ko_email = Column(String) # Email - ko_phone_number = Column(String) # Phone Number - ko_dod_id = Column(String) # DOD ID - ko_invite = Column(Boolean, default=False) - cor_first_name = Column(String) # First Name - cor_last_name = Column(String) # Last Name - cor_email = Column(String) # Email - cor_phone_number = Column(String) # Phone Number - cor_dod_id = Column(String) # DOD ID - cor_invite = Column(Boolean, default=False) - so_first_name = Column(String) # First Name - so_last_name = Column(String) # Last Name - so_email = Column(String) # Email - so_phone_number = Column(String) # Phone Number - so_dod_id = Column(String) # DOD ID - so_invite = Column(Boolean, default=False) pdf_attachment_id = Column(ForeignKey("attachments.id")) _pdf = relationship("Attachment", foreign_keys=[pdf_attachment_id]) number = Column(String, unique=True) # Task Order Number - loas = Column(ARRAY(String)) # Line of Accounting (LOA) - custom_clauses = Column(String) # Custom Clauses signer_dod_id = Column(String) signed_at = Column(DateTime) - level_of_warrant = Column(Numeric(scale=2)) - unlimited_level_of_warrant = Column(Boolean, default=False) @hybrid_property def csp_estimate(self):