Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add submission sub table in items table #298

Merged
merged 7 commits into from
Feb 19, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 29 additions & 0 deletions submit-api/migrations/versions/2a8e579da45c_.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
"""Add deleted column to submissions

Revision ID: 2a8e579da45c
Revises: 4dda18ca8bda
Create Date: 2025-02-18 14:54:06.210507

"""
from alembic import op
import sqlalchemy as sa

# revision identifiers, used by Alembic.
revision = '2a8e579da45c'
down_revision = '4dda18ca8bda'
branch_labels = None
depends_on = None


def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
with op.batch_alter_table('submissions', schema=None) as batch_op:
batch_op.add_column(sa.Column('deleted', sa.Boolean(), nullable=False, server_default='false'))
# ### end Alembic commands ###


def downgrade():
# ### commands auto generated by Alembic - please adjust! ###
with op.batch_alter_table('submissions', schema=None) as batch_op:
batch_op.drop_column('deleted')
# ### end Alembic commands ###
2 changes: 1 addition & 1 deletion submit-api/src/submit_api/models/item.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ class Item(BaseModel):
submissions = db.relationship(
'Submission',
lazy='joined',
primaryjoin='and_(Submission.item_id == Item.id, Submission.active.is_(True))',
primaryjoin='and_(Submission.item_id == Item.id, Submission.active.is_(True), Submission.deleted.is_(False))',
order_by='Submission.created_date.asc()'
)

Expand Down
6 changes: 4 additions & 2 deletions submit-api/src/submit_api/models/submission.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ class Submission(BaseModel):
major_version = Column(db.Integer, nullable=False, default=1)
minor_version = Column(db.Integer, nullable=False, default=1)
active = Column(db.Boolean, nullable=False, default=True)
deleted = Column(db.Boolean, nullable=False, default=False)
status = Column(Enum(SubmissionStatus), nullable=True, default=SubmissionStatus.PENDING)
root_submission_id = Column(db.Integer, ForeignKey('submissions.id'),
nullable=True) # the base or root id of submisison
Expand All @@ -65,5 +66,6 @@ def find_latest_by_type_and_item_id(cls, item_id: int, submission_type: Submissi
@classmethod
def find_all_versions(cls, root_submission_id: int):
"""Fetch all versions of a submission given its root submission ID."""
return cls.query.filter_by(root_submission_id=root_submission_id).order_by(cls.major_version,
cls.minor_version).all()
return (cls.query.filter_by(root_submission_id=root_submission_id, deleted=False)
.order_by(cls.major_version.desc(), cls.minor_version.desc())
.all())
2 changes: 0 additions & 2 deletions submit-api/src/submit_api/resources/proponent/submission.py
Original file line number Diff line number Diff line change
Expand Up @@ -95,8 +95,6 @@ class SubmissionVersions(Resource):
def get(submission_id):
"""Fetch all versions of a submission based on its root submission ID."""
submissions = SubmissionService.get_all_versions(submission_id)
if not submissions:
return {"message": "No versions found for the given submission."}, HTTPStatus.NOT_FOUND
return SubmissionSchema(many=True).dump(submissions), HTTPStatus.OK


Expand Down
7 changes: 4 additions & 3 deletions submit-api/src/submit_api/services/package.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
from submit_api.models.package_metadata import PackageMetadata as PackageMetadataModel
from submit_api.models.package_metadata import PackageMetadataFields
from submit_api.models.queries.package import PackageQueries
from submit_api.models.submission import SubmissionType
from submit_api.models.submission import SubmissionType, SubmissionStatus
from submit_api.models.item_type import SubmissionItemType
from submit_api.models.update_request import UpdateRequestType, UpdateRequestStatus
from submit_api.models.user import UserType
Expand Down Expand Up @@ -259,7 +259,7 @@ def _update_package_submission_details(package, session):
@staticmethod
def update_submission_status(package, status, session):
"""Update package submission details."""
if status not in ItemStatus.__members__:
if status not in SubmissionStatus.__members__:
raise BadRequestError("Invalid status")
submissions = [submission for item in package.items for submission in item.submissions]
for submission in submissions:
Expand Down Expand Up @@ -319,7 +319,7 @@ def _submit_package(cls, package, session):
package.items, ItemStatus.SUBMITTED.value, session)
cls._update_package_status(package.id, session, package)
cls._update_package_submission_details(package, session)
cls.update_submission_status(package, ItemStatus.SUBMITTED.value, session)
cls.update_submission_status(package, SubmissionStatus.SUBMITTED.value, session)
cls._deactivate_revision_required_requests(package, session)
cls._create_email_queue_record(package, session)
cls._log_activity_submission(package, ActivityActionType.ORIGINAL_SUBMISSION.value, session)
Expand All @@ -334,6 +334,7 @@ def _resubmit_package(cls, package, session):
if not open_update_requests:
raise BadRequestError("Cannot resubmit a package that has no open update requests")
cls._update_package_submission_details(package, session)
cls.update_submission_status(package, SubmissionStatus.SUBMITTED.value, session)
cls._create_email_queue_record(package, session)
cls._deactivate_revision_required_requests(package, session)
cls._update_update_requests(session, package, status=UpdateRequestStatus.PENDING_REVIEW.value)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,11 @@ def replace(self, submission_id, request_data):
original_submission_id=submission.id, # original is the immediate parent id
root_submission_id=submission.root_submission_id # root id is the first submission id in the chain
)
submission.active = False
if submission.status == SubmissionStatus.PENDING:
submission.deleted = True
submission.active = False
else:
submission.active = False
session.add(submission)
return new_submission

Expand Down Expand Up @@ -156,10 +160,11 @@ def _create_submission(session, item_id, submitted_document_id, original_submiss
created_by=TokenInfo.get_id(),
root_submission_id=root_submission_id
)
submission.flush()
session.add(submission)
session.flush()
# Set `root_submission_id` to its own ID if not provided
if submission.root_submission_id is None:
submission.root_submission_id = submission.id
submission.flush()
session.flush()

return submission
78 changes: 38 additions & 40 deletions submit-web/src/components/Documents/DocumentTableRow.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,16 @@ import { TableRow } from "@mui/material";
import { getObjectFromS3 } from "@/components/Shared/Table/utils";
import { notify } from "@/components/Shared/Snackbar/snackbarStore";

interface DocumentRowProps {
type DocumentRowProps = Readonly<{
submittedDocument: SubmittedDocument;
}
}>;

export default function DocumentTableRow({ submittedDocument }: DocumentRowProps) {
export default function DocumentTableRow({
submittedDocument,
}: DocumentRowProps) {
const { name, url } = submittedDocument;

const [pendingGetObject, setPendingGetObject] = useState(false)
const [pendingGetObject, setPendingGetObject] = useState(false);

const downloadDocument = async () => {
try {
Expand All @@ -29,49 +31,45 @@ export default function DocumentTableRow({ submittedDocument }: DocumentRowProps
setPendingGetObject(false);
}
};

const openDocument = () => {
downloadDocument();
};

return (
<>
<TableRow>
<SubmitTableCell align="left">
{submittedDocument.project_name ?? ""}
</SubmitTableCell>
<SubmitTableCell>
<Typography
variant="body1"
color="inherit"
sx={{
overflow: "clip",
textOverflow: "ellipsis",
cursor: "pointer",
mx: 0.5,
}}
>
<MuiLink onClick={openDocument}>{submittedDocument.name}</MuiLink>
</Typography>
</SubmitTableCell>
<SubmitTableCell align="right">
{submittedDocument.version ?? ""}
</SubmitTableCell>
<SubmitTableCell align="center">
{dateUtils.formatDate(submittedDocument.submitted_on)}
</SubmitTableCell>
<SubmitTableCell
align="right"
<TableRow>
<SubmitTableCell align="left">
{submittedDocument.project_name ?? ""}
</SubmitTableCell>
<SubmitTableCell>
<Typography
variant="body1"
color="inherit"
sx={{
pr: BCDesignTokens.layoutPaddingSmall,
overflow: "clip",
textOverflow: "ellipsis",
cursor: "pointer",
mx: 0.5,
}}
>
<SubmissionStatusChip status={submittedDocument.status ?? ""} />
</SubmitTableCell>
<SubmitTableCell align="center">
{''}
</SubmitTableCell>
</TableRow>
</>
<MuiLink onClick={openDocument}>{submittedDocument.name}</MuiLink>
</Typography>
</SubmitTableCell>
<SubmitTableCell align="right">
{submittedDocument.version ?? ""}
</SubmitTableCell>
<SubmitTableCell align="center">
{dateUtils.formatDate(submittedDocument.submitted_on)}
</SubmitTableCell>
<SubmitTableCell
align="right"
sx={{
pr: BCDesignTokens.layoutPaddingSmall,
}}
>
<SubmissionStatusChip status={submittedDocument.status ?? ""} />
</SubmitTableCell>
<SubmitTableCell align="center">{""}</SubmitTableCell>
</TableRow>
);
}
9 changes: 0 additions & 9 deletions submit-web/src/components/ErrorPage.tsx
Original file line number Diff line number Diff line change
@@ -1,14 +1,6 @@
import { useMounted } from "@/hooks/common";
import { Paper, Container } from "@mui/material";
import { useAuth } from "react-oidc-context";

export default function ErrorPage() {
const { signoutRedirect } = useAuth();

useMounted(() => {
signoutRedirect();
});

return (
<Container id="Error">
<Paper
Expand All @@ -20,7 +12,6 @@ export default function ErrorPage() {
}}
>
<p>Oops! something wrong happened.</p>
<p>You will be signed out.</p>
</Paper>
</Container>
);
Expand Down
6 changes: 6 additions & 0 deletions submit-web/src/components/Shared/Table/common.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -95,3 +95,9 @@ export const SubmitPrimaryRowTableCell = styled(TableCell)<{ error?: boolean }>(
},
}),
);

export const SubmitSubTableCell = styled(TableCell)(() => ({
borderTop: `none`,
borderBottom: `none`,
padding: `${BCDesignTokens.layoutPaddingXsmall}`,
}));
21 changes: 4 additions & 17 deletions submit-web/src/components/Submission/DocumentRow/StatusCell.tsx
Original file line number Diff line number Diff line change
@@ -1,33 +1,20 @@
import { SubmissionStatusChip } from "@/components/SubmissionStatusChip";
import {
NON_CANONICAL_SUBMISSION_STATUS,
Submission,
SUBMISSION_ITEM_STATUS,
SUBMISSION_STATUS,
} from "@/models/Submission";
import { SUBMISSION_ITEM_TYPE, SubmissionItem } from "@/models/SubmissionItem";
import { Case, Default, Switch } from "react-if";

type StatusCellProps = Readonly<{
submittedDocument: Submission;
submissionItem: SubmissionItem;
}>;

export const StatusCell = ({
submittedDocument,
submissionItem,
}: StatusCellProps) => {
export const StatusCell = ({ submittedDocument }: StatusCellProps) => {
return (
<Switch>
<Case
condition={
submissionItem.type.name ===
SUBMISSION_ITEM_TYPE.CONSULTATION_RECORD &&
submittedDocument.status === SUBMISSION_STATUS.REJECTED
}
>
<SubmissionStatusChip
status={SUBMISSION_ITEM_STATUS.FAILED_CONSULTATION_CHECK.value}
/>
<Case condition={submittedDocument.status === SUBMISSION_STATUS.REJECTED}>
<SubmissionStatusChip status={NON_CANONICAL_SUBMISSION_STATUS.FAILED} />
</Case>
<Default>{null}</Default>
</Switch>
Expand Down
Loading
Loading