diff --git a/SAS/TMSS/frontend/tmss_webapp/src/App.css b/SAS/TMSS/frontend/tmss_webapp/src/App.css index 57436fb5f7b3851b83865c344b7a9897dbf20123..522607ca9efeba809d9f5a4fe499012cd067eb8a 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/App.css +++ b/SAS/TMSS/frontend/tmss_webapp/src/App.css @@ -250,4 +250,8 @@ div[data-schemapath='root.$schema'] { .workflow-header a span { display: block !important; height: auto !important; +} + +.hide-tab { + display: none !important; } \ No newline at end of file diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/Workflow/decide.acceptance.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/Workflow/decide.acceptance.js index 23318bf02603536f8ed64da37d65e55ddd3ae0e4..e3d1748671b425164a8f74d120000b83fa3c7f95 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/routes/Workflow/decide.acceptance.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/Workflow/decide.acceptance.js @@ -15,8 +15,7 @@ class DecideAcceptance extends Component { showEditor: false, sos_accept_after_pi: true, pi_accept: true, - quality_within_policy: true, - sos_accept_show_pi: true + quality_within_policy: true, }; this.Next = this.Next.bind(this); this.handleChange = this.handleChange.bind(this); diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/Workflow/index.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/Workflow/index.js index 57fc73c9715821f72d280fbb319caaf014062584..22db7eb947ac89bd97abe44332952710de37378f 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/routes/Workflow/index.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/Workflow/index.js @@ -39,8 +39,9 @@ export default (props) => { // const [disableNextButton, setDisableNextButton] = useState(false); const [loader, setLoader] = useState(false); const [state, setState] = useState({}); - const [currentProcessStep, setCurrentProcessStep] = useState(); + const [currentView, setcurrentView] = useState(); const [tasks, setTasks] = useState([]); + const [showIngestTab, setShowIngestTab] = useState(false); const [QASUProcess, setQASUProcess] = useState(); const [currentStep, setCurrentStep] = useState(); const [schedulingUnit, setSchedulingUnit] = useState(); @@ -58,6 +59,7 @@ export default (props) => { setSchedulingUnit(responses[0]); setTasks(SUB.task_blueprints); getStatusUpdate(SUB.task_blueprints); + setShowIngestTab(SUB.task_blueprints.filter(i => i.specifications_template.name === 'ingest').length ? true : false); }); }, []); @@ -110,11 +112,11 @@ export default (props) => { // const workflowLastTask = responses[1].find(task => task.process === suQAProcess.id); const workflowLastTask = (_.orderBy(suQAProcessTasks, ['id'], ['desc']))[0]; setCurrentStep(RedirectionMap[workflowLastTask.flow_task.toLowerCase()]); - setCurrentProcessStep(RedirectionMap[workflowLastTask.flow_task.toLowerCase()]); + setcurrentView(RedirectionMap[workflowLastTask.flow_task.toLowerCase()]); // Need to cross check below if condition if it fails in next click if (workflowLastTask.status === 'NEW') { setCurrentStep(RedirectionMap[workflowLastTask.flow_task.toLowerCase()]); - setCurrentProcessStep(RedirectionMap[workflowLastTask.flow_task.toLowerCase()]); + setcurrentView(RedirectionMap[workflowLastTask.flow_task.toLowerCase()]); } //else { // setCurrentStep(3); // } @@ -122,7 +124,7 @@ export default (props) => { await getDataProductDetails(taskList); // setDisableNextButton(true); setCurrentStep(9); - setCurrentProcessStep(9); + setcurrentView(9); } setLoader(false); @@ -191,45 +193,45 @@ export default (props) => { </div> </div>} <TabView activeIndex={currentStep - 1} key={currentStep}> - <TabPanel header="Waiting To Be Scheduled" disabled={currentStep < 1} headerClassName="workflow-header"> - <Scheduled onNext={onNext} onCancel={onCancel} readOnly={ currentProcessStep !== 1 } + <TabPanel header="Waiting To Be Scheduled" disabled={currentView < 1} headerClassName="workflow-header"> + <Scheduled onNext={onNext} onCancel={onCancel} readOnly={ currentView !== 1 } schedulingUnit={schedulingUnit} /*disableNextButton={disableNextButton}*/ /> </TabPanel> - <TabPanel header="Scheduled" disabled={currentStep < 2} headerClassName="workflow-header"> - <ProcessingDone onNext={onNext} onCancel={onCancel} readOnly={ currentProcessStep !== 2 } + <TabPanel header="Scheduled" disabled={currentView < 2} headerClassName="workflow-header"> + <ProcessingDone onNext={onNext} onCancel={onCancel} readOnly={ currentView !== 2 } schedulingUnit={schedulingUnit} /> </TabPanel> - <TabPanel header="QA Reporting (TO)" disabled={currentStep < 3} headerClassName="workflow-header"> - <QAreporting onNext={onNext} onCancel={onCancel} id={QASUProcess.id} readOnly={ currentProcessStep !== 3 } + <TabPanel header="QA Reporting (TO)" disabled={currentView < 3} headerClassName="workflow-header"> + <QAreporting onNext={onNext} onCancel={onCancel} id={QASUProcess.id} readOnly={ currentView !== 3 } process={QASUProcess} getCurrentTaskDetails={getCurrentTaskDetails} onError={showMessage} /> </TabPanel> - <TabPanel header="QA Reporting (SDCO)" disabled={currentStep < 4} headerClassName="workflow-header"> - <QAsos onNext={onNext} onCancel={onCancel} id={QASUProcess.id} readOnly={ currentProcessStep !== 4 } + <TabPanel header="QA Reporting (SDCO)" disabled={currentView < 4} headerClassName="workflow-header"> + <QAsos onNext={onNext} onCancel={onCancel} id={QASUProcess.id} readOnly={ currentView !== 4 } process={QASUProcess} getCurrentTaskDetails={getCurrentTaskDetails} onError={showMessage} /> </TabPanel> - <TabPanel header="PI Verification" disabled={currentStep < 5} headerClassName="workflow-header"> - <PIverification onNext={onNext} onCancel={onCancel} id={QASUProcess.id} readOnly={ currentProcessStep !== 5 } + <TabPanel header="PI Verification" disabled={currentView < 5} headerClassName="workflow-header"> + <PIverification onNext={onNext} onCancel={onCancel} id={QASUProcess.id} readOnly={ currentView !== 5 } process={QASUProcess} getCurrentTaskDetails={getCurrentTaskDetails} onError={showMessage} /> </TabPanel> - <TabPanel header="Decide Acceptance" disabled={currentStep < 6} headerClassName="workflow-header"> - <DecideAcceptance onNext={onNext} onCancel={onCancel} id={QASUProcess.id} readOnly={ currentProcessStep !== 6 } + <TabPanel header="Decide Acceptance" disabled={currentView < 6} headerClassName="workflow-header"> + <DecideAcceptance onNext={onNext} onCancel={onCancel} id={QASUProcess.id} readOnly={ currentView !== 6 } process={QASUProcess} getCurrentTaskDetails={getCurrentTaskDetails} onError={showMessage} /> </TabPanel> - <TabPanel header="Ingesting" disabled={currentStep < 7} headerClassName="workflow-header"> - <Ingesting onNext={onNext} onCancel={onCancel} id={QASUProcess.id} readOnly={ currentProcessStep !== 7 } + <TabPanel header="Ingesting" disabled={currentView < 7} headerClassName={`workflow-header ${!showIngestTab && 'hide-tab'}`}> + <Ingesting onNext={onNext} onCancel={onCancel} id={QASUProcess.id} readOnly={ currentView !== 7 } onError={showMessage} task={getIngestTask()} /> </TabPanel> - <TabPanel header="Unpin Data" disabled={currentStep < 8} headerClassName="workflow-header"> - <DataProduct onNext={onNext} onCancel={onCancel} id={QASUProcess.id} onError={showMessage} readOnly={ currentProcessStep !== 8 } + <TabPanel header="Unpin Data" disabled={currentView < 8} headerClassName="workflow-header"> + <DataProduct onNext={onNext} onCancel={onCancel} id={QASUProcess.id} onError={showMessage} readOnly={ currentView !== 8 } tasks={tasks} getCurrentTaskDetails={getCurrentTaskDetails} onError={showMessage} schedulingUnit={schedulingUnit} /> </TabPanel> - <TabPanel header="Done" disabled={currentStep < 9} headerClassName="workflow-header"> - <Done onNext={onNext} onCancel={onCancel} onError={showMessage} reportingPage={qaReporting} readOnly={ currentProcessStep !== 9 } /> + <TabPanel header="Done" disabled={currentView < 9} headerClassName="workflow-header"> + <Done onNext={onNext} onCancel={onCancel} onError={showMessage} reportingPage={qaReporting} readOnly={ currentView !== 9 } /> </TabPanel> </TabView> </div> diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/Workflow/ingesting.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/Workflow/ingesting.js index d94fd3939031ab80948bec6308faf9113e818cb9..6a2225fa238e3e59be344822c0eae8743e59fc81 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/routes/Workflow/ingesting.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/Workflow/ingesting.js @@ -14,9 +14,8 @@ class Ingesting extends Component { render(){ return( - <> - - <div className={`p-fluid-grid ${this.props.readOnly ? 'disableContainer' : ''}`}> + <> + <div className={`p-fluid-grid`}> <label htmlFor="ingestTaskStatus" className="col-lg-2 col-md-2 col-sm-12">Ingest Task Status</label> <div className="col-lg-2 col-md-2 col-sm-12"> <span>{this.props.task.status}</span> diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/Workflow/pi.verification.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/Workflow/pi.verification.js index 8f0ab3fbbed02060e69abaeed85975d6886e2e37..e462b9737f652b073ee3809075bc6b2651c0605b 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/routes/Workflow/pi.verification.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/Workflow/pi.verification.js @@ -71,7 +71,7 @@ class PIverification extends Component { promise.push(WorkflowService.updateQA_Perform(this.props.id,{"pi_report": this.state.comment, "pi_accept": this.state.pi_accept})); Promise.all(promise).then((responses) => { if (responses.indexOf(null)<0) { - this.props.onNext({ report:this.state.content, pireport: this.state.comment}); + this.props.onNext({ report:this.state.content, pireport: this.state.comment, pi_accept: this.state.pi_accept}); } else { this.props.onError(); } @@ -93,7 +93,7 @@ class PIverification extends Component { return ( <> <div> - <div className={`p-fluid-grid ${this.props.readOnly ? 'disableContainer' : ''}`}> + <div className={`p-fluid-grid`}> <div className="p-fluid-grid"> <label htmlFor="operatorReport" style={{ padding: '2px' }} >Operator Report</label> <div className="col-lg-12 col-md-12 col-sm-12"></div> @@ -114,6 +114,7 @@ class PIverification extends Component { <div className="col-lg-12 col-md-12 col-sm-12"></div> <SunEditor setDefaultStyle="min-height: 150px; height: auto;" enableToolbar={true} setContents={this.state.comment} + disable={this.props.readOnly} onChange={this.onChangePIComment} setOptions={{ buttonList: [ @@ -128,7 +129,7 @@ class PIverification extends Component { <Checkbox disabled inputId="sos_accept_show_pi" checked={this.state.sos_accept_show_pi} onChange={e => this.setState({ sos_accept_show_pi: e.checked })} /> <label htmlFor="sdcoAccept" style={{paddingLeft:"5px"}}>The data quality adheres to policy (SDCO evaluation)</label> <div className="col-lg-1 col-md-1 col-sm-12"></div> - <Checkbox inputId="binary" checked={this.state.pi_accept} onChange={e => this.setState({ pi_accept: e.checked })} /> + <Checkbox disabled = {this.props.readOnly} inputId="binary" checked={this.state.pi_accept} onChange={e => this.setState({ pi_accept: e.checked })} /> <label htmlFor="piAccept" style={{paddingLeft:"5px"}} >As PI / contact author I accept this data</label> {!this.props.readOnly && <div className="p-grid" style={{ marginTop: '20px' }}> <div className="p-col-1"> diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/Workflow/qa.reporting.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/Workflow/qa.reporting.js index cc92c73b6e6fb6f4644e275592053d77b5a7f927..d73fe01a16f7043620af88358f629822ef99adfa 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/routes/Workflow/qa.reporting.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/Workflow/qa.reporting.js @@ -67,11 +67,11 @@ class QAreporting extends Component{ return ( <> <div> - <div className={`p-fluid-grid ${this.props.readOnly ? 'disableContainer' : ''}`}> + <div className={`p-fluid-grid`}> <div className="p-field p-grid" style={{ paddingLeft: '-10px' }}> <label htmlFor="assignTo" className="col-lg-2 col-md-2 col-sm-12">Assign To</label> <div className="col-lg-3 col-md-3 col-sm-12" data-testid="assignTo" > - <Dropdown inputId="assignToValue" value={this.state.assignTo} optionLabel="value" optionValue="id" onChange={(e) => this.setState({assignTo: e.value})} + <Dropdown disable={this.props.readOnly} inputId="assignToValue" value={this.state.assignTo} optionLabel="value" optionValue="id" onChange={(e) => this.setState({assignTo: e.value})} options={[{ value: 'User 1', id: 1 }, { value: 'User 2', id: 2 }, { value: 'User 3', id: 3 }]} placeholder="Assign To" /> </div> @@ -91,7 +91,7 @@ class QAreporting extends Component{ }} /> </div> <div className="p-col-12"> - <Checkbox inputId="operator_accept" onChange={e => this.setState({operator_accept: e.checked})} checked={this.state.operator_accept}></Checkbox> + <Checkbox disable={this.props.readOnly} inputId="operator_accept" onChange={e => this.setState({operator_accept: e.checked})} checked={this.state.operator_accept}></Checkbox> <label htmlFor="operator_accept " style={{paddingLeft:"5px"}}>The data quality adheres to policy (Operator evaluation)</label> </div> </div> diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/Workflow/qa.sos.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/Workflow/qa.sos.js index e4bed7fcd12c0511e87d188759fd29a9a5fc6da1..5c3ed2a4eb02d814de414a30136c25ebfa5612ac 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/routes/Workflow/qa.sos.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/Workflow/qa.sos.js @@ -12,7 +12,8 @@ class QAreportingSDCO extends Component { content: '', showEditor: false, quality_within_policy: true, - sos_accept_show_pi: true + sos_accept_show_pi: true, + operator_accept: true }; this.Next = this.Next.bind(this); this.handleChange = this.handleChange.bind(this); @@ -25,7 +26,8 @@ class QAreportingSDCO extends Component { } else { const response = await WorkflowService.getQAReportingTo(this.props.process.qa_reporting_to); this.setState({ - content: response.operator_report + content: response.operator_report, + operator_accept: response.operator_accept }); } } @@ -35,7 +37,7 @@ class QAreportingSDCO extends Component { this.setState({ content: QASOSresponse.sos_report, quality_within_policy: QASOSresponse.operator_report, - sos_accept_show_pi: QASOSresponse.sos_accept_show_pi + sos_accept_show_pi: QASOSresponse.sos_accept_show_pi }); } @@ -60,7 +62,7 @@ class QAreportingSDCO extends Component { if (currentWorkflowTask && !currentWorkflowTask.fields.owner) { promise.push(WorkflowService.updateAssignTo(currentWorkflowTask.pk, { owner: this.state.assignTo })); } - promise.push(WorkflowService.updateQA_Perform(this.props.id, {"sos_report": this.state.content, "sos_accept_show_pi": this.state.sos_accept_show_pi, "quality_within_policy": this.state.quality_within_policy})); + promise.push(WorkflowService.updateQA_Perform(this.props.id, {"sos_report": this.state.content, "sos_accept_show_pi": this.state.sos_accept_show_pi, "quality_within_policy": this.state.quality_within_policy, "operator_accept": this.state.operator_accept})); Promise.all(promise).then((responses) => { if (responses.indexOf(null)<0) { this.props.onNext({ report: this.state.content }); @@ -79,13 +81,16 @@ class QAreportingSDCO extends Component { return ( <> <div> - <div className={`p-fluid-grid ${this.props.readOnly ? 'disableContainer' : ''}`}> - <Checkbox inputId="quality_within_policy" checked={this.state.quality_within_policy} onChange={e => this.setState({quality_within_policy: e.checked})} /> - <label htmlFor="qualityPolicy" style={{paddingLeft:"5px"}}>The data quality adheres to policy (Operator evaluation)</label> - <div className="col-lg-1 col-md-1 col-sm-12"></div> - <Checkbox inputId="sos_accept_show_pi" checked={this.state.sos_accept_show_pi} onChange={e => this.setState({ sos_accept_show_pi: e.checked })} /> - <label htmlFor="sdcoAccept" style={{paddingLeft:"5px"}}>The data quality adheres to policy (SDCO evaluation)</label> - <div className="p-grid" style={{ padding: '10px' }}> + <div className={`p-fluid-grid`}> + <Checkbox inputId="operator_accept" checked={this.state.operator_accept} disable={this.props.readOnly} /> + <label htmlFor="operator_accept" style={{paddingLeft:"5px"}}>The data quality adheres to policy (Operator evaluation)</label> + <div className="col-lg-1 col-md-1 col-sm-12"></div> + <Checkbox inputId="quality_within_policy" disabled={this.props.readOnly} checked={this.state.quality_within_policy} onChange={e => this.setState({quality_within_policy: e.checked})} /> + <label htmlFor="qualityPolicy" style={{paddingLeft:"5px"}}>The data quality adheres to policy (Operator evaluation(dummy))</label> + <div className="col-lg-1 col-md-1 col-sm-12"></div> + <Checkbox inputId="sos_accept_show_pi" disabled={this.props.readOnly} checked={this.state.sos_accept_show_pi} onChange={e => this.setState({ sos_accept_show_pi: e.checked })} /> + <label htmlFor="sdcoAccept" style={{paddingLeft:"5px"}}>The data quality adheres to policy (SDCO evaluation)</label> + <div className="p-grid" style={{ padding: '10px' }}> <label htmlFor="operatorReport">Operator Report {!this.state.showEditor && <span className="con-edit">(Click content to edit)</span>}<span style={{color:'red'}}>*</span></label> <div className="col-lg-12 col-md-12 col-sm-12"></div> {this.state.showEditor && <SunEditor setDefaultStyle="min-height: 250px; height: auto" enableToolbar={true} diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/Workflow/unpin.data.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/Workflow/unpin.data.js index 2c661cad855287aceb5f892f85c4103b50008fbc..4a436c06fee0466a8f52de6f1242acff61015127 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/routes/Workflow/unpin.data.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/Workflow/unpin.data.js @@ -62,9 +62,9 @@ export default ({ tasks, schedulingUnit, onCancel, ...props }) => { defaultpagesize={tasks.length} /> <div className="p-grid p-justify-start mt-2"> - <div className="p-col-1"> + {!props.readOnly && <div className="p-col-1"> <Button label="Delete" className="p-button-primary" icon="pi pi-trash" onClick={toggleDialog} /> - </div> + </div>} <div className="p-col-1"> <Button label="Cancel" className="p-button-danger" icon="pi pi-times" style={{ width: '90px' }} onClick={(e) => { onCancel()}} />