diff --git a/src/helpers/programHelper.js b/src/helpers/programHelper.js index 085c2861363c9514e3091d449aa27c2a6d717808..ef6dbe9e79e2176bdd04b9780ca43343386894aa 100644 --- a/src/helpers/programHelper.js +++ b/src/helpers/programHelper.js @@ -214,7 +214,19 @@ class ProgramServiceHelper { }; return this.searchWithProgramId(queryFilter, req); } - + getContentContributionsWithProgramId(program_id, req) { + const queryFilter = { + filters: { + programId: program_id, + objectType: ['content', 'questionset'], + status: ['Draft', 'Live'], + contentType: { '!=': 'Asset' }, + mimeType: { '!=': 'application/vnd.ekstep.content-collection' } + }, + not_exists: ['sampleContent'], + }; + return this.searchWithProgramId(queryFilter, req); + } getNominationWithProgramId(programId) { const facets = ['collection_ids', 'status']; const promise = model.nomination.findAll({ @@ -238,16 +250,64 @@ class ProgramServiceHelper { return promise; } - handleMultiProgramDetails(resGroup) { + handleMultiProgramDetails(resGroup, programObjs, targetType = 'collections') { const multiProgramDetails = _.map(resGroup, (resData) => { try { - return this.prepareTableData(resData); + if (targetType === 'collections') { + return this.prepareTableData(resData); + } else if(targetType === 'searchCriteria') { + return this.prepareContentsTableData(resData, programObjs); + } } catch(err) { - throw err + throw err } }); return multiProgramDetails; } + prepareContentsTableData(resData, programObjs) { + try { + let contents = []; + let tableData = []; + let response = resData[0].data; + if (response && response.result && (_.get(response.result, 'content')|| _.get(response.result, 'QuestionSet'))) { + contents = _.compact(_.concat(_.get(response.result, 'QuestionSet'), _.get(response.result, 'content'))); + } + if (contents.length) { + tableData = _.map(_.filter(contents, (c)=> { + if (c.status === 'Live' || (c.status === 'Draft' && c.prevStatus === 'Live')) { + return c; + } + }), (content) => { + const program = programObjs[content.programId]; + let result = {}; + result[`Content Name`] = content.name || ''; + result['Framework'] = content.framework || ''; + result['Board'] = content.board || ''; + result['Medium'] = content.medium && content.medium.length ? content.medium.join(', ') : ''; + result['Class'] = content.gradeLevel && content.gradeLevel.length ? content.gradeLevel.join(', ') : ''; + result['Subject'] = content.subject && content.subject.length ? content.subject.join(', ') : ''; + result['Creator'] = content.creator || ''; + result['Status'] = null; + if (content.status === 'Live') { + if (program.acceptedContents && _.includes(program.acceptedContents || [], content.identifier)) { + result['Status'] = 'Approved'; + } else if (program.rejectedContents && _.includes(program.rejectedContents || [], content.identifier)) { + result['Status'] = 'Rejected'; + } else { + result['Status'] = 'Approval Pending'; + } + } else if (content.status === 'Draft' && content.prevStatus === 'Live') { + result['Status'] = 'Corrections pending'; + } + return result; + }); + } + return tableData; + } catch (err) { + console.log(err); + throw 'error in preparing CSV data' + } + } prepareTableData (resData) { try { diff --git a/src/service/programService.js b/src/service/programService.js index d40a7931e419e69903c474a3147463d7029b8863..ee282185f9aa99fd8b91ee65a98576ee54e0a536 100644 --- a/src/service/programService.js +++ b/src/service/programService.js @@ -1511,16 +1511,26 @@ async function downloadProgramDetails(req, res) { }); if (filteredPrograms.length) { - promiseRequests = _.map(filteredPrograms, (program) => { - return [programServiceHelper.getCollectionWithProgramId(program, req), programServiceHelper.getSampleContentWithOrgId(program, req),programServiceHelper.getSampleContentWithCreatedBy(program, req), - programServiceHelper.getContributionWithProgramId(program, req), programServiceHelper.getNominationWithProgramId(program), - programServiceHelper.getOveralNominationData(program)]; - }); + if (data.request.filters.targetType && data.request.filters.targetType === 'searchCriteria') { + await _.forEach(programArr, (programId) => { + programServiceHelper.getProgramDetails(programId).then((program)=> { + programObjs[programId] = program; + }); + }); + } + promiseRequests = _.map(filteredPrograms, (program) => { + if (!data.request.filters.targetType || data.request.filters.targetType === 'collections') { + return [programServiceHelper.getCollectionWithProgramId(program, req), programServiceHelper.getSampleContentWithOrgId(program, req),programServiceHelper.getSampleContentWithCreatedBy(program, req), programServiceHelper.getContributionWithProgramId(program, req), programServiceHelper.getNominationWithProgramId(program), programServiceHelper.getOveralNominationData(program)]; + } else if(data.request.filters.targetType === 'searchCriteria') { + return[programServiceHelper.getContentContributionsWithProgramId(program, req)]; + } + }); forkJoin(..._.flatMapDeep(promiseRequests)).subscribe((responseData) => { try{ - const combainedRes = _.chunk(responseData, 6); - const programDetailsArray = programServiceHelper.handleMultiProgramDetails(combainedRes); + const chunkNumber = (!data.request.filters.targetType || data.request.filters.targetType === 'collections') ? 6 : 1; + const combainedRes = _.chunk(responseData, chunkNumber); + const programDetailsArray = programServiceHelper.handleMultiProgramDetails(combainedRes, programObjs, data.request.filters.targetType); const tableData = _.reduce(programDetailsArray, (final, data, index) => { final.push({program_id: filteredPrograms[index], values: data}); return final;