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 initial button for test submission #1495

Merged
merged 16 commits into from
Jan 17, 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
10 changes: 8 additions & 2 deletions nmdc_server/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -902,6 +902,7 @@ async def get_submission(
templates=submission.templates,
study_name=submission.study_name,
field_notes_metadata=submission.field_notes_metadata,
is_test_submission=submission.is_test_submission,
)
if submission.locked_by is not None:
submission_metadata_schema.locked_by = schemas.User(**submission.locked_by.__dict__)
Expand Down Expand Up @@ -972,10 +973,11 @@ async def update_submission(
detail="This submission is currently being edited by a different user.",
)

# Create GitHub issue when metadata is being submitted
# Create GitHub issue when metadata is being submitted and not a test submission
if (
submission.status == "in-progress"
and body_dict.get("status", None) == "Submitted- Pending Review"
and submission.is_test_submission is False
):
create_github_issue(submission, user)

Expand All @@ -999,7 +1001,11 @@ async def update_submission(
crud.update_submission_contributor_roles(db, submission, new_permissions)

if body_dict.get("status", None):
submission.status = body_dict["status"]
if (
body_dict.get("status", None) == "Submitted- Pending Review"
and submission.is_test_submission is False
):
submission.status = body_dict["status"]
db.commit()
crud.update_submission_lock(db, submission.id)
return submission
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
""" Migrator for is_test_submission on SubmissionMetadata
This field added as a change to enable the differentiation between test submissions
(those done in training/at a conference demo) and real submissions

Revision ID: 4b2d6ee63752
Revises: afa1ff687968
Create Date: 2025-01-03 18:07:09.029643

"""

from typing import Optional

import sqlalchemy as sa
from alembic import op

# revision identifiers, used by Alembic.
revision: str = "4b2d6ee63752"
down_revision: Optional[str] = "afa1ff687968"
branch_labels: Optional[str] = None
depends_on: Optional[str] = None


def upgrade():
op.add_column(
"submission_metadata",
sa.Column(
"is_test_submission", sa.Boolean(), nullable=False, server_default=sa.sql.False_()
),
)
# ### end Alembic commands ###


def downgrade():
op.drop_column("submission_metadata", "is_test_submission")
# ### end Alembic commands ###
1 change: 1 addition & 0 deletions nmdc_server/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -915,6 +915,7 @@ class SubmissionMetadata(Base):
study_name = Column(String, nullable=True)
templates = Column(JSONB, nullable=True)
field_notes_metadata = Column(JSONB, nullable=True)
is_test_submission = Column(Boolean, nullable=False, default=False)

# The client which initially created the submission. A null value indicates it was created by
# an "unregistered" client. This could be legitimate usage, but it should be monitored.
Expand Down
1 change: 1 addition & 0 deletions nmdc_server/schemas_submission.py
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,7 @@ class SubmissionMetadataSchemaCreate(BaseModel):
metadata_submission: MetadataSubmissionRecordCreate
status: Optional[str] = None
source_client: Optional[str] = None
is_test_submission: bool = False


class SubmissionMetadataSchemaPatch(BaseModel):
Expand Down
29 changes: 25 additions & 4 deletions web/src/views/SubmissionPortal/Components/SubmissionList.vue
Original file line number Diff line number Diff line change
Expand Up @@ -78,8 +78,8 @@ export default defineComponent({
router?.push({ name: 'Submission Context', params: { id: item.id } });
}

async function createNewSubmission() {
const item = await generateRecord();
async function createNewSubmission(isTestSubmission: boolean) {
const item = await generateRecord(isTestSubmission);
router?.push({ name: 'Submission Context', params: { id: item.id } });
}

Expand Down Expand Up @@ -172,11 +172,32 @@ export default defineComponent({
<v-card-text>
<v-btn
color="primary"
@click="createNewSubmission"
@click="createNewSubmission(false)"
>
<v-icon>mdi-plus</v-icon>
Create New Submission
Create Submission
</v-btn>
<v-btn
color="primary"
class="ml-3"
outlined
@click="createNewSubmission(true)"
>
<v-icon>mdi-plus</v-icon>
Create Test Submission
</v-btn>
<v-tooltip right>
<template #activator="{ on }">
<v-icon
class="pl-2"
color="primary"
v-on="on"
>
mdi-information
</v-icon>
</template>
<span>Test submissions should be used when at a workshop or doing a test, example, or training. These cannot be submitted.</span>
</v-tooltip>
</v-card-text>
<v-card-title class="text-h4">
Past submissions
Expand Down
24 changes: 22 additions & 2 deletions web/src/views/SubmissionPortal/HarmonizerView.vue
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ import {
submissionStatus,
canEditSampleMetadata,
isOwner,
isTestSubmission,
} from './store';
import ContactCard from '@/views/SubmissionPortal/Components/ContactCard.vue';
import FindReplace from './Components/FindReplace.vue';
Expand Down Expand Up @@ -524,6 +525,7 @@ export default defineComponent({
schemaLoading,
importErrorSnackbar,
notImportedWorksheetNames,
isTestSubmission,
/* methods */
doSubmit,
downloadSamples,
Expand Down Expand Up @@ -1030,11 +1032,29 @@ export default defineComponent({
activator="parent"
width="auto"
>
<v-card>
<v-card v-if="isTestSubmission">
<v-card-title>
Submit
</v-card-title>
<v-card-text>You are about to submit this study and metadata for NMDC review. Would you like to continue?</v-card-text>
<v-card-text>
Test submissions cannot be submitted for NMDC review.
</v-card-text>
<v-card-actions>
<v-btn
text
@click="submitDialog = false"
>
Close
</v-btn>
</v-card-actions>
</v-card>
<v-card v-else>
<v-card-title>
Submit
</v-card-title>
<v-card-text>
You are about to submit this study and metadata for NMDC review. Would you like to continue?
</v-card-text>
<v-card-actions>
<v-btn
color="primary"
Expand Down
4 changes: 3 additions & 1 deletion web/src/views/SubmissionPortal/store/api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ interface MetadataSubmissionRecord {
source_client: 'submission_portal' | 'field_notes' | 'nmdc_edge' | null;
study_name: string;
templates: string[];
is_test_submission: boolean;
}

interface PaginatedResponse<T> {
Expand All @@ -63,14 +64,15 @@ interface LockOperationResult {
lock_updated?: string | null;
}

async function createRecord(record: MetadataSubmission) {
async function createRecord(record: MetadataSubmission, isTestSubmission: boolean) {
const resp = await client.post<
MetadataSubmissionRecord,
AxiosResponse<MetadataSubmissionRecord>,
Partial<MetadataSubmissionRecord>
>('metadata_submission', {
metadata_submission: record,
source_client: 'submission_portal',
is_test_submission: isTestSubmission,
});
return resp.data;
}
Expand Down
9 changes: 7 additions & 2 deletions web/src/views/SubmissionPortal/store/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ const submissionStatus: Record<string, SubmissionStatus> = {
const isSubmissionStatus = (str: any): str is SubmissionStatus => Object.values(submissionStatus).includes(str);

const status = ref(submissionStatus.InProgress);
const isTestSubmission = ref(false);

/**
* Submission record locking information
Expand Down Expand Up @@ -256,6 +257,7 @@ function reset() {
packageName.value = ['soil'];
sampleData.value = {};
status.value = submissionStatus.InProgress;
isTestSubmission.value = false;
}

async function incrementalSaveRecord(id: string): Promise<number | void> {
Expand Down Expand Up @@ -286,9 +288,10 @@ async function incrementalSaveRecord(id: string): Promise<number | void> {
return Promise.resolve();
}

async function generateRecord() {
async function generateRecord(isTestSubBool: boolean) {
reset();
const record = await api.createRecord(payloadObject.value);
const record = await api.createRecord(payloadObject.value, isTestSubBool);
isTestSubmission.value = isTestSubBool;
return record;
}

Expand All @@ -304,6 +307,7 @@ async function loadRecord(id: string) {
hasChanged.value = 0;
status.value = isSubmissionStatus(val.status) ? val.status : submissionStatus.InProgress;
_permissionLevel = (val.permission_level as permissionLevelValues);
isTestSubmission.value = val.is_test_submission;

try {
const lockResponse = await api.lockSubmission(id);
Expand Down Expand Up @@ -361,6 +365,7 @@ export {
hasChanged,
tabsValidated,
status,
isTestSubmission,
/* functions */
getSubmissionLockedBy,
getPermissionLevel,
Expand Down
Loading