diff --git a/actions/reviewOpportunities.js b/actions/reviewOpportunities.js index 1e80b1c8d..11739c89d 100644 --- a/actions/reviewOpportunities.js +++ b/actions/reviewOpportunities.js @@ -2,7 +2,7 @@ * Copyright (C) 2013 - 2014 TopCoder Inc., All Rights Reserved. * * @version 1.4 - * @author Sky_, Ghost_141, TCSASSEMBLER + * @author Sky_, Ghost_141 * changes in 1.1 * - Implement the studio review opportunities. * changes in 1.2 @@ -555,7 +555,7 @@ var getReviewOpportunities = function (api, connection, isStudio, next) { */ var getSoftwareReviewOpportunity = function (api, connection, next) { var helper = api.helper, dbConnectionMap = connection.dbConnectionMap, challengeId, sqlParams, result = {}, - phases, positions, applications, basic, adjustPayment, + phases, positions, applications, basic, adjustPayment, assignedResource, execQuery = function (name) { return function (cb) { api.dataAccess.executeQuery(name, sqlParams, dbConnectionMap, cb); @@ -576,6 +576,7 @@ var getSoftwareReviewOpportunity = function (api, connection, next) { } sqlParams = { + challenge_id: challengeId, challengeId: challengeId, user_id: connection.caller.userId }; @@ -602,6 +603,7 @@ var getSoftwareReviewOpportunity = function (api, connection, next) { phases: execQuery('get_review_opportunity_detail_phases'), positions: execQuery('get_review_opportunity_detail_positions'), applications: execQuery('get_review_opportunity_detail_applications'), + resource: execQuery('get_assigned_review_resource_role'), adjustPayment: execQuery('search_software_review_opportunities_adjust_payment') }, cb); }, @@ -609,6 +611,7 @@ var getSoftwareReviewOpportunity = function (api, connection, next) { phases = results.phases; positions = results.positions; applications = results.applications; + assignedResource = results.resource; basic = results.basic[0]; adjustPayment = results.adjustPayment; @@ -630,16 +633,21 @@ var getSoftwareReviewOpportunity = function (api, connection, next) { }); }); + // Iterative each positions that this challenge have. positions.forEach(function (row) { var positionOpen, - approvedNumber = _.countBy(applications, - function (item) { - return item.review_application_role_id === row.review_application_role_id - && item.status === 'Approved'; - })['true'] || 0; - - if (approvedNumber === row.num_positions) { - // There is no spaces for new reviewer on this role. + isClosed = false, + i, + reviewApplicationRole = _.filter(results.basic, function (item) { return item.review_application_role_id === row.review_application_role_id; }); + + for (i = 0; i < reviewApplicationRole.length; i += 1) { + if (!isClosed && reviewApplicationRole[i].is_unique && assignedResource.indexOf(reviewApplicationRole[i].resource_role_id) >= 0) { + isClosed = true; + } + } + + if (isClosed) { + // Review application role is closed. return; } @@ -762,7 +770,6 @@ var applyDevelopReviewOpportunity = function (api, connection, next) { .value(), privateCheck = res.privateCheck[0], positionsLeft, - reviewersCount, assignedResourceRoles = res.resourceRoles, currentUserResourceRole = _.filter(assignedResourceRoles, function (item) { return item.user_id === caller.userId; }); @@ -776,8 +783,6 @@ var applyDevelopReviewOpportunity = function (api, connection, next) { // Initialize it after the definition check. // The total review positions left for this challenge. positionsLeft = details[0].positions_left; - // The needed reviewer count. - reviewersCount = details[0].reviewers_count; // The reviewer assignment date. reviewAssignmentDate = details[0].assignment_date; // The review auction id. This will bed used when insert new review application. @@ -833,12 +838,12 @@ var applyDevelopReviewOpportunity = function (api, connection, next) { } for (i = 0; i < reviewApplicationRole.length; i += 1) { - if (reviewApplicationRole[i].is_unique && assignedRoles.indexOf(reviewApplicationRole[i].resource_role_id) >= 0) { + if (!isClosed && reviewApplicationRole[i].is_unique && assignedRoles.indexOf(reviewApplicationRole[i].resource_role_id) >= 0) { isClosed = true; } } - console.log('isClosed: ' + isClosed); + // The review application role is closed so no need to calculate the positions left(we already did in query). if (isClosed) { cb(new BadRequestError('There is no open positions for selected review application role: ' + reviewApplicationRole[0].role_name + '.')); return; diff --git a/queries/check_challenge_review_opportunity b/queries/check_challenge_review_opportunity index a28029561..3ef92f6db 100644 --- a/queries/check_challenge_review_opportunity +++ b/queries/check_challenge_review_opportunity @@ -1,9 +1,9 @@ SELECT 1 FROM project p -INNER JOIN review_auction ra ON ra.project_id = @challengeId@ +INNER JOIN review_auction ra ON ra.project_id = @challenge_id@ INNER JOIN project_category_lu pcl ON pcl.project_category_id = p.project_category_id WHERE 1=1 -AND p.project_id = @challengeId@ +AND p.project_id = @challenge_id@ AND p.project_category_id != 29 -- filter out the copilot posting challenge. AND p.project_category_id != 37 -- filter out the marathon match challenge. AND pcl.display = 't' diff --git a/queries/get_review_opportunity_detail_applications b/queries/get_review_opportunity_detail_applications index c30d3887c..f9e56ab7f 100644 --- a/queries/get_review_opportunity_detail_applications +++ b/queries/get_review_opportunity_detail_applications @@ -1,7 +1,6 @@ SELECT u.handle , rarl.name AS role -, rarl.review_application_role_id AS role_id , ratingTable.rating AS reviewer_rating , rasl.name AS status , ra.create_date AS application_date @@ -10,7 +9,7 @@ INNER JOIN user u ON u.user_id = ra.user_id INNER JOIN review_auction rauc ON rauc.review_auction_id = ra.review_auction_id INNER JOIN review_application_role_lu rarl ON rarl.review_application_role_id = ra.review_application_role_id INNER JOIN review_application_status_lu rasl ON rasl.review_application_status_id = ra.review_application_status_id -INNER JOIN project p ON p.project_id = @challengeId@ AND p.project_id = rauc.project_id +INNER JOIN project p ON p.project_id = @challenge_id@ AND p.project_id = rauc.project_id LEFT OUTER JOIN ( SELECT DISTINCT @@ -18,16 +17,16 @@ LEFT OUTER JOIN ( , rr.user_id , rr.review_date FROM reviewer_rating rr - INNER JOIN project p1 ON p1.project_id = @challengeId@ + INNER JOIN project p1 ON p1.project_id = @challenge_id@ INNER JOIN project p2 ON p2.project_id = rr.project_id WHERE 1=1 AND p1.project_category_id = p2.project_category_id AND review_date = (SELECT max(rr.review_date) FROM reviewer_rating rr - INNER JOIN project p1 ON p1.project_id = @challengeId@ + INNER JOIN project p1 ON p1.project_id = @challenge_id@ INNER JOIN project p2 ON p2.project_id = rr.project_id WHERE 1=1 AND p1.project_category_id = p2.project_category_id) ) ratingTable ON ratingTable.user_id = u.user_id -ORDER BY ra.create_date ASC \ No newline at end of file +ORDER BY ra.create_date ASC diff --git a/queries/get_review_opportunity_detail_basic b/queries/get_review_opportunity_detail_basic index 85c642a0e..ec4025c42 100644 --- a/queries/get_review_opportunity_detail_basic +++ b/queries/get_review_opportunity_detail_basic @@ -7,6 +7,7 @@ SELECT , 1 - (SELECT count(r.resource_id) FROM resource r WHERE r.project_id=p.project_id AND r.resource_role_id = 18) AS reviewers_required , rarl.review_application_role_id , dpp.resource_role_id +, rarrrx.unique_role AS is_unique , dpp.fixed_amount , dpp.base_coefficient , dpp.incremental_coefficient @@ -24,7 +25,7 @@ SELECT END AS submission_count FROM review_auction ra INNER JOIN review_auction_type_lu ratl ON ratl.review_auction_type_id=ra.review_auction_type_id AND ratl.review_auction_category_id=2 -INNER JOIN project p ON p.project_id=ra.project_id AND p.project_id = @challengeId@ +INNER JOIN project p ON p.project_id=ra.project_id AND p.project_id = @challenge_id@ INNER JOIN project_category_lu pcl ON p.project_category_id = pcl.project_category_id INNER JOIN project_info pi ON pi.project_id = p.project_id AND pi.project_info_type_id = 6 INNER JOIN project_phase pp13 ON pp13.project_id=p.project_id AND pp13.phase_type_id=13 AND not exists (SELECT 1 FROM phase_dependency WHERE dependent_phase_id=pp13.project_phase_id) @@ -45,6 +46,7 @@ SELECT , pc.parameter::int - (SELECT count(r.resource_id) FROM resource r WHERE r.project_id=p.project_id AND r.resource_role_id IN (4,5,6,7)) AS reviewers_required , rarl.review_application_role_id , dpp.resource_role_id +, rarrrx.unique_role AS is_unique , dpp.fixed_amount , dpp.base_coefficient , dpp.incremental_coefficient @@ -62,7 +64,7 @@ SELECT END AS submission_count FROM review_auction ra INNER JOIN review_auction_type_lu ratl ON ratl.review_auction_type_id=ra.review_auction_type_id AND ratl.review_auction_category_id=1 -INNER JOIN project p ON p.project_id=ra.project_id AND p.project_id = @challengeId@ +INNER JOIN project p ON p.project_id=ra.project_id AND p.project_id = @challenge_id@ INNER JOIN project_category_lu pcl ON p.project_category_id = pcl.project_category_id INNER JOIN project_info pi ON pi.project_id = p.project_id AND pi.project_info_type_id = 6 INNER JOIN project_phase pp2 ON pp2.project_id=p.project_id AND pp2.phase_type_id=2 @@ -83,6 +85,7 @@ SELECT , pc.parameter::int - (SELECT count(r.resource_id) FROM resource r WHERE r.project_id=p.project_id AND r.resource_role_id = 21) AS reviewers_required , rarl.review_application_role_id , dpp.resource_role_id +, rarrrx.unique_role AS is_unique , dpp.fixed_amount , dpp.base_coefficient , dpp.incremental_coefficient @@ -100,7 +103,7 @@ SELECT END AS submission_count FROM review_auction ra INNER JOIN review_auction_type_lu ratl ON ratl.review_auction_type_id=ra.review_auction_type_id AND ratl.review_auction_category_id=3 -INNER JOIN project p ON p.project_id=ra.project_id AND p.project_id = @challengeId@ +INNER JOIN project p ON p.project_id=ra.project_id AND p.project_id = @challenge_id@ INNER JOIN project_category_lu pcl ON p.project_category_id = pcl.project_category_id INNER JOIN project_info pi ON pi.project_id = p.project_id AND pi.project_info_type_id = 6 INNER JOIN project_phase pp2 ON pp2.project_id=p.project_id AND pp2.phase_type_id=2 @@ -110,4 +113,4 @@ INNER JOIN phase_criteria pc ON pc.project_phase_id=pp18.project_phase_id AND pc INNER JOIN review_application_role_lu rarl ON rarl.review_auction_type_id = ra.review_auction_type_id INNER JOIN review_application_role_resource_role_xref rarrrx ON rarrrx.review_application_role_id = rarl.review_application_role_id INNER JOIN default_project_payment dpp ON dpp.resource_role_id = rarrrx.resource_role_id AND p.project_category_id = dpp.project_category_id -WHERE dpp.resource_role_id = 21 \ No newline at end of file +WHERE dpp.resource_role_id = 21 diff --git a/queries/get_review_opportunity_detail_phases b/queries/get_review_opportunity_detail_phases index 7fb37486a..a3a584187 100644 --- a/queries/get_review_opportunity_detail_phases +++ b/queries/get_review_opportunity_detail_phases @@ -8,5 +8,5 @@ SELECT FROM project_phase pp INNER JOIN phase_status_lu psl ON psl.phase_status_id = pp.phase_status_id INNER JOIN phase_type_lu ptl ON ptl.phase_type_id = pp.phase_type_id -WHERE pp.project_id = @challengeId@ -ORDER BY NVL(actual_start_time, scheduled_start_time) ASC \ No newline at end of file +WHERE pp.project_id = @challenge_id@ +ORDER BY NVL(actual_start_time, scheduled_start_time) ASC diff --git a/queries/get_review_opportunity_detail_positions b/queries/get_review_opportunity_detail_positions index 7d504989e..c8bcae8fc 100644 --- a/queries/get_review_opportunity_detail_positions +++ b/queries/get_review_opportunity_detail_positions @@ -2,7 +2,9 @@ SELECT rarl.name AS role , rarl.review_application_role_id , rarl.positions AS num_positions +, rarl.order_index FROM review_auction ra -INNER JOIN project p ON p.project_id = @challengeId@ AND ra.project_id = @challengeId@ +INNER JOIN project p ON p.project_id = @challenge_id@ AND ra.project_id = @challenge_id@ INNER JOIN review_auction_type_lu ratl ON ratl.review_auction_type_id = ra.review_auction_type_id INNER JOIN review_application_role_lu rarl ON rarl.review_auction_type_id = ra.review_auction_type_id +ORDER BY rarl.order_index ASC diff --git a/queries/review_opportunity_detail b/queries/review_opportunity_detail index e4c68f5a2..1b4160915 100644 --- a/queries/review_opportunity_detail +++ b/queries/review_opportunity_detail @@ -2,7 +2,6 @@ SELECT ra.review_auction_id , 1 - (SELECT COUNT(r.resource_id) FROM resource r WHERE r.project_id=p.project_id AND r.resource_role_id = 18) AS positions_left -, 1 AS reviewers_count , rarl.name AS role_name , rarl.review_application_role_id , rarl.positions @@ -31,7 +30,6 @@ UNION ALL SELECT ra.review_auction_id , pc.parameter::int - (SELECT COUNT(r.resource_id) FROM resource r WHERE r.project_id=p.project_id AND r.resource_role_id IN (4,5,6,7)) AS positions_left -, pc.parameter::int AS reviewers_count , rarl.name AS role_name , rarl.review_application_role_id , rarl.positions @@ -61,7 +59,6 @@ UNION ALL SELECT ra.review_auction_id , pc.parameter::int - (SELECT COUNT(r.resource_id) FROM resource r WHERE r.project_id=p.project_id AND r.resource_role_id = 21) AS positions_left -, pc.parameter::int AS reviewers_count , rarl.name AS role_name , rarl.review_application_role_id , rarl.positions @@ -85,3 +82,5 @@ AND p.project_status_id = 1 AND pp2.phase_status_id IN (2, 3) AND pp18.phase_status_id IN (1, 2) AND not exists (SELECT 1 FROM project_phase pp12 WHERE pp12.project_id=p.project_id AND pp12.phase_type_id=12) + +ORDER BY rarl.order_index ASC diff --git a/queries/search_software_review_opportunities_adjust_payment b/queries/search_software_review_opportunities_adjust_payment index f1fe206cb..09a9b52f7 100644 --- a/queries/search_software_review_opportunities_adjust_payment +++ b/queries/search_software_review_opportunities_adjust_payment @@ -8,7 +8,7 @@ DISTINCT FROM project_payment_adjustment ppa INNER JOIN review_auction ra ON ra.project_id = ppa.project_id INNER JOIN review_auction_type_lu ratl ON ratl.review_auction_type_id=ra.review_auction_type_id AND ratl.review_auction_category_id=2 -INNER JOIN project p ON p.project_id=ra.project_id AND p.project_id = DECODE(@challengeId@, 0, p.project_id, @challengeId@) +INNER JOIN project p ON p.project_id=ra.project_id AND p.project_id = DECODE(@challenge_id@, 0, p.project_id, @challenge_id@) INNER JOIN project_phase pp13 ON pp13.project_id=p.project_id AND pp13.phase_type_id=13 AND not exists (SELECT 1 FROM phase_dependency WHERE dependent_phase_id=pp13.project_phase_id) INNER JOIN phase_dependency pd ON pd.dependency_phase_id=pp13.project_phase_id INNER JOIN project_phase pp14 ON pp14.project_id=p.project_id AND pp14.phase_type_id=14 AND pp14.project_phase_id=pd.dependent_phase_id @@ -27,7 +27,7 @@ DISTINCT FROM project_payment_adjustment ppa INNER JOIN review_auction ra ON ra.project_id = ppa.project_id INNER JOIN review_auction_type_lu ratl ON ratl.review_auction_type_id=ra.review_auction_type_id AND ratl.review_auction_category_id=1 -INNER JOIN project p ON p.project_id=ra.project_id AND p.project_id = DECODE(@challengeId@, 0, p.project_id, @challengeId@) +INNER JOIN project p ON p.project_id=ra.project_id AND p.project_id = DECODE(@challenge_id@, 0, p.project_id, @challenge_id@) INNER JOIN project_phase pp2 ON pp2.project_id=p.project_id AND pp2.phase_type_id=2 INNER JOIN project_phase pp4 ON pp4.project_id=p.project_id AND pp4.phase_type_id=4 INNER JOIN phase_criteria pc ON pc.project_phase_id=pp4.project_phase_id AND pc.phase_criteria_type_id=6 @@ -46,7 +46,7 @@ DISTINCT FROM project_payment_adjustment ppa INNER JOIN review_auction ra ON ra.project_id = ppa.project_id INNER JOIN review_auction_type_lu ratl ON ratl.review_auction_type_id=ra.review_auction_type_id AND ratl.review_auction_category_id=3 -INNER JOIN project p ON p.project_id=ra.project_id AND p.project_id = DECODE(@challengeId@, 0, p.project_id, @challengeId@) +INNER JOIN project p ON p.project_id=ra.project_id AND p.project_id = DECODE(@challenge_id@, 0, p.project_id, @challenge_id@) INNER JOIN project_phase pp2 ON pp2.project_id=p.project_id AND pp2.phase_type_id=2 INNER JOIN project_phase pp18 ON pp18.project_id=p.project_id AND pp18.phase_type_id=18 INNER JOIN phase_dependency pd ON pd.dependent_phase_id=pp18.project_phase_id AND pd.dependent_start=1 AND pd.dependency_phase_id=pp2.project_phase_id AND pd.dependency_start=1 diff --git a/test/test.applyDevelopReviewOpportunity.js b/test/test.applyDevelopReviewOpportunity.js index 960ab1ffb..dbbd7d3ca 100644 --- a/test/test.applyDevelopReviewOpportunity.js +++ b/test/test.applyDevelopReviewOpportunity.js @@ -2,7 +2,7 @@ * Copyright (C) 2014 TopCoder Inc., All Rights Reserved. * * @version 1.0 - * @author TCSASSEMBLER + * @author Ghost_141 */ 'use strict'; /*global describe, it, before, beforeEach, after, afterEach */ diff --git a/test/test.softwareReviewOpportunityDetails.js b/test/test.softwareReviewOpportunityDetails.js index 82545b8a6..e850f3559 100644 --- a/test/test.softwareReviewOpportunityDetails.js +++ b/test/test.softwareReviewOpportunityDetails.js @@ -2,7 +2,7 @@ * Copyright (C) 2014 TopCoder Inc., All Rights Reserved. * * @version 1.0 - * @author TCSASSEMBLER + * @author Ghost_141 */ 'use strict'; /*global describe, it, before, beforeEach, after, afterEach */