diff --git a/SAS/TMSS/frontend/tmss_webapp/src/__mocks__/project.service.data.js b/SAS/TMSS/frontend/tmss_webapp/src/__mocks__/project.service.data.js index 879092774c7b3dc4795848fda755821be76cf51b..68f2c140458269964b43edf51a93ad7761c26cc4 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/__mocks__/project.service.data.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/__mocks__/project.service.data.js @@ -1,5 +1,7 @@ const ProjectServiceMock= { + project_categories: [{url: "Regular", value: 'Regular'}, {url: "User Shared Support", value: 'User Shared Support'}], + period_categories: [{url: "Single Cycle", value: 'Single Cycle'}, {url: "Long Term", value: 'Long Term'}], resources: [{ "name": "LOFAR Observing Time", "url": "http://localhost:3000/api/resource_type/LOFAR%20Observing%20Time/", diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/Project/ResourceInputList.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/Project/ResourceInputList.js index 365fa6f751bba5c3f1a8c0065b485fa144055240..e7e1c6a11ff64d3bbe027628bddd49b63276415d 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/routes/Project/ResourceInputList.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/Project/ResourceInputList.js @@ -39,7 +39,7 @@ export class ResourceInputList extends Component { <label key={'label1-'+ index} className="col-lg-3 col-md-3 col-sm-12">{item.name}</label> <div key={'div1-'+ index} className="col-lg-3 col-md-3 col-sm-12"> <InputNumber key={'item1-'+ index} id={'item1-'+ index} name={'item1-'+ index} - suffix={` ${this.props.unitMap[item.resourceUnit.name].display}`} + suffix={` ${this.props.unitMap[item.name]?this.props.unitMap[item.name].display:''}`} placeholder={item.name} value={this.state.projectQuota[item.name]} onBlur={(e) => this.onInputChange(item.name, e)} diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/Project/create.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/Project/create.js index 9a5c49ce679e0f6cf036956f5f42a8ec4d9276ee..6a15239301b1a3f06e3021b11de12f81f5225112 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/routes/Project/create.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/Project/create.js @@ -118,7 +118,8 @@ export class ProjectCreate extends Component { setProjectQuotaDefaults(resources) { let projectQuota = this.state.projectQuota; for (const resource of resources) { - projectQuota[resource['name']] = this.projectResourceDefaults[resource.name]/this.resourceUnitMap[resource.resourceUnit.name].conversionFactor; + const conversionFactor = this.resourceUnitMap[resource.name]?this.resourceUnitMap[resource.name].conversionFactor:1; + projectQuota[resource['name']] = this.projectResourceDefaults[resource.name]/conversionFactor; } return projectQuota; } @@ -171,10 +172,9 @@ export class ProjectCreate extends Component { if (event.target.value) { let projectQuota = this.state.projectQuota; let resource = _.find(this.state.resources, {'name': key}); - const resourceUnit = resource?resource.resourceUnit:null; - // console.log(resourceUnit); - if (resourceUnit) { - projectQuota[key] = event.target.value.replace(this.resourceUnitMap[resourceUnit.name].display,''); + + if (this.resourceUnitMap[resource.name]) { + projectQuota[key] = event.target.value.replace(this.resourceUnitMap[resource.name].display,''); } else { projectQuota[key] = event.target.value; } @@ -238,7 +238,7 @@ export class ProjectCreate extends Component { let resourceType = _.find(this.state.resources, {'name': resource}); let quota = { project: this.state.project.name, resource_type: resourceType['url'], - value: this.state.projectQuota[resource] * this.resourceUnitMap[resourceType.resourceUnit.name].conversionFactor}; + value: this.state.projectQuota[resource] * (this.resourceUnitMap[resourceType.name]?this.resourceUnitMap[resourceType.name].conversionFactor:1)}; projectQuota.push(quota); } ProjectService.saveProject(this.state.project, this.defaultResourcesEnabled?projectQuota:[]) @@ -449,7 +449,7 @@ export class ProjectCreate extends Component { {/* Dialog component to show messages and get input */} <div className="p-grid" data-testid="confirm_dialog"> - <Dialog header={this.state.dialog.header} visible={this.state.dialogVisible} style={{width: '50vw'}} inputId="confirm_dialog" + <Dialog header={this.state.dialog.header} visible={this.state.dialogVisible} style={{width: '25vw'}} inputId="confirm_dialog" modal={true} onHide={() => {this.setState({dialogVisible: false})}} footer={<div> <Button key="back" onClick={() => {this.setState({dialogVisible: false}); this.cancelCreate();}} label="No" /> @@ -457,7 +457,7 @@ export class ProjectCreate extends Component { </div> } > <div className="p-grid"> - <div className="col-lg-1 col-md-1 col-sm-2"> + <div className="col-lg-2 col-md-2 col-sm-2"> <i className="pi pi-check-circle pi-large pi-success"></i> </div> <div className="col-lg-10 col-md-10 col-sm-10"> diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/Project/create.test.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/Project/create.test.js index 101cd33700fc60c5f9817139ad144911b0d261c2..84c2b338449d107059e43fa4396dead622a042fe 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/routes/Project/create.test.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/Project/create.test.js @@ -27,9 +27,9 @@ afterEach(() => { */ const setMockSpy = (() => { projectCategoriesSpy = jest.spyOn(ProjectService, 'getProjectCategories'); - projectCategoriesSpy.mockImplementation(() => { return Promise.resolve([{url: "Regular", value: 'Regular'}, {url: "User Shared Support", value: 'User Shared Support'}])}); + projectCategoriesSpy.mockImplementation(() => { return Promise.resolve(ProjectServiceMock.project_categories)}); periodCategoriesSpy = jest.spyOn(ProjectService, 'getPeriodCategories'); - periodCategoriesSpy.mockImplementation(() => { return Promise.resolve([{url: "Single Cycle", value: 'Single Cycle'}, {url: "Long Term", value: 'Long Term'}])}); + periodCategoriesSpy.mockImplementation(() => { return Promise.resolve(ProjectServiceMock.period_categories)}); allCycleSpy = jest.spyOn(CycleService, 'getAllCycles'); allCycleSpy.mockImplementation(() => { return Promise.resolve([{url: "http://localhost:3000/api/cycle/Cycle-0", name: 'Cycle-0'}, diff --git a/SAS/TMSS/frontend/tmss_webapp/src/services/project.service.js b/SAS/TMSS/frontend/tmss_webapp/src/services/project.service.js index 3b0652de1e4f708b16d5573a5228625849c639e5..3e50ba82c3fcc1cfea248007989be085dd8eb1f9 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/services/project.service.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/services/project.service.js @@ -7,47 +7,23 @@ axios.defaults.headers.common['Authorization'] = 'Basic dGVzdDp0ZXN0'; const ProjectService = { getProjectCategories: async function() { try { - const url = `/api/cycle`; + const url = `/api/project_category/`; const response = await axios.get(url); - //return response.data.results; - return [ - {url: `http://localhost:3000/api/project_category/Regular/`, value: "Regular"}, - {url: encodeURI(`http://localhost:3000/api/project_category/User Shared Support/`), value: "User Shared Support"}, - {url: `http://localhost:3000/api/project_category/Commissioning/`, value: "Commissioning"}, - {url: `http://localhost:3000/api/project_category/DDT/`, value: "DDT"}, - {url: `http://localhost:3000/api/project_category/Test/`, value: "Test"} - ]; + return response.data.results; } catch (error) { console.error(error); } }, getPeriodCategories: async function() { try { - const url = `/api/cycle`; + const url = `/api/period_category/`; const response = await axios.get(url); - // return response.data.results; - return [ - {url: encodeURI(`http://localhost:3000/api/period_category/Single Cycle/`), value: "Single Cycle"}, - {url: encodeURI(`http://localhost:3000/api/period_category/Long Term/`), value: "Long Term"}, - {url: `http://localhost:3000/api/period_category/Unbounded/`, value: "Unbounded"} - ]; + return response.data.results; } catch (error) { console.error(error); } }, getResources: async function() { - return this.getResourceTypes() - .then(resourceTypes => { - return this.getResourceUnits() - .then(resourceUnits => { - for (let resourceType of resourceTypes) { - resourceType.resourceUnit = _.find(resourceUnits, ['name', resourceType.resource_unit_id]); - } - return resourceTypes; - }) - }) - }, - getResourceTypes: async function() { try { // const url = `/api/resource_type/?ordering=name`; const url = `/api/resource_type`; @@ -58,28 +34,15 @@ const ProjectService = { console.error(error); } }, - getResourceUnits: async function() { - try { - const url = `/api/resource_unit`; - const response = await axios.get(url); - // console.log(response); - return response.data.results; - } catch (error) { - console.error(error); - } - }, getDefaultProjectResources: async function() { try { - const url = `/api/resource_unit`; - const response = await axios.get(url); - // return response.data.results; - return {'LOFAR Observing Time': 3600, + return Promise.resolve({'LOFAR Observing Time': 3600, 'LOFAR Observing Time prio A': 3600, 'LOFAR Observing Time prio B': 3600, 'CEP Processing Time': 3600, 'LTA Storage': 1024*1024*1024*1024, 'Number of triggers': 1, - 'LOFAR Support Time': 3600}; + 'LOFAR Support Time': 3600}); } catch (error) { console.error(error); } diff --git a/SAS/TMSS/frontend/tmss_webapp/src/utils/unit.converter.js b/SAS/TMSS/frontend/tmss_webapp/src/utils/unit.converter.js index 13f234ef6738141bf100f9a087709b2fa0814be6..255376dd71e70a316aa6cd48fc77dc2bb9ee5eb1 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/utils/unit.converter.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/utils/unit.converter.js @@ -1,7 +1,11 @@ const UnitConverter = { - resourceUnitMap: {'second':{display: 'Hours', conversionFactor: 3600, mode:'decimal', minFractionDigits:0, maxFractionDigits: 2 }, - 'byte': {display: 'TB', conversionFactor: (1024*1024*1024*1024), mode:'decimal', minFractionDigits:0, maxFractionDigits: 3}, - 'number': {display: 'Numbers', conversionFactor: 1, mode:'decimal', minFractionDigits:0, maxFractionDigits: 0}}, + resourceUnitMap: {'CEP Processing Time':{display: 'Hours', conversionFactor: 3600, mode:'decimal', minFractionDigits:0, maxFractionDigits: 2 }, + 'LOFAR Observing Time':{display: 'Hours', conversionFactor: 3600, mode:'decimal', minFractionDigits:0, maxFractionDigits: 2 }, + 'LOFAR Observing Time prio A':{display: 'Hours', conversionFactor: 3600, mode:'decimal', minFractionDigits:0, maxFractionDigits: 2 }, + 'LOFAR Observing Time prio B':{display: 'Hours', conversionFactor: 3600, mode:'decimal', minFractionDigits:0, maxFractionDigits: 2 }, + 'LOFAR Support Time':{display: 'Hours', conversionFactor: 3600, mode:'decimal', minFractionDigits:0, maxFractionDigits: 2 }, + 'LTA Storage': {display: 'TB', conversionFactor: (1024*1024*1024*1024), mode:'decimal', minFractionDigits:0, maxFractionDigits: 3}, + 'Number of triggers': {display: 'Numbers', conversionFactor: 1, mode:'decimal', minFractionDigits:0, maxFractionDigits: 0}}, getDBResourceUnit: function() {