test_class.declarator: averageTenderAndAwardPeriodsController
test_class.modifier: @Autowired
      private
test_class.original_string: @Autowired
      private AverageTenderAndAwardPeriodsController averageTenderAndAwardPeriodsController;
test_class.type: AverageTenderAndAwardPeriodsController
test_class.var_name: averageTenderAndAwardPeriodsController
test_class.file: web/src/test/java/org/devgateway/ocds/web/rest/controller/AverageTenderAndAwardPeriodsControllerTest.java
test_class.identifier: AverageTenderAndAwardPeriodsControllerTest
test_class.superclass: extends AbstractEndPointControllerTest
test_case.body: @Test
      public void qualityAverageTenderPeriod() throws Exception {
          final List<Document> qualityAverageTenderPeriod = averageTenderAndAwardPeriodsController
                  .qualityAverageTenderPeriod(new DefaultFilterPagingRequest());
  
          final Document first = qualityAverageTenderPeriod.get(0);
          int totalTenderWithStartEndDates = (int) first
                  .get(AverageTenderAndAwardPeriodsController.Keys.TOTAL_TENDER_WITH_START_END_DATES);
          int totalTenders = (int) first
                  .get(AverageTenderAndAwardPeriodsController.Keys.TOTAL_TENDERS);
          double percentageTenderWithStartEndDates = (double) first
                  .get(AverageTenderAndAwardPeriodsController.Keys.PERCENTAGE_TENDER_WITH_START_END_DATES);
          Assert.assertEquals(3, totalTenderWithStartEndDates);
          Assert.assertEquals(3, totalTenders);
          Assert.assertEquals(100.0, percentageTenderWithStartEndDates, 0);
      }
test_case.class_method_signature: AverageTenderAndAwardPeriodsControllerTest.qualityAverageTenderPeriod()
test_case.full_signature: @Test public void qualityAverageTenderPeriod()
test_case.identifier: qualityAverageTenderPeriod
test_case.invocations: qualityAverageTenderPeriod get get get get assertEquals assertEquals assertEquals
test_case.modifiers: @Test public
test_case.parameters: ()
test_case.return: void
test_case.signature: void qualityAverageTenderPeriod()
focal_class.file: web/src/main/java/org/devgateway/ocds/web/rest/controller/AverageTenderAndAwardPeriodsController.java
focal_class.identifier: AverageTenderAndAwardPeriodsController
focal_class.class_method_signature: AverageTenderAndAwardPeriodsController.averageTenderPeriod(@ModelAttribute @Valid final YearFilterPagingRequest filter)
focal_class.full_signature: @ApiOperation(value = "Calculates the average tender period, per each year. The year is taken from " + "tender.tenderPeriod.startDate and the duration is taken by counting the days" + "between tender.tenderPeriod.endDate and tender.tenderPeriod.startDate") @RequestMapping(value = "/api/averageTenderPeriod", method = {RequestMethod.POST, RequestMethod.GET}, produces = "application/json") public List<Document> averageTenderPeriod(@ModelAttribute @Valid final YearFilterPagingRequest filter)
focal_class.identifier: averageTenderPeriod
focal_class.modifiers: @ApiOperation(value = "Calculates the average tender period, per each year. The year is taken from " + "tender.tenderPeriod.startDate and the duration is taken by counting the days" + "between tender.tenderPeriod.endDate and tender.tenderPeriod.startDate") @RequestMapping(value = "/api/averageTenderPeriod", method = {RequestMethod.POST, RequestMethod.GET}, produces = "application/json") public
focal_class.parameters: (@ModelAttribute @Valid final YearFilterPagingRequest filter)
focal_class.return: List<Document>
focal_class.signature: List<Document> averageTenderPeriod(@ModelAttribute @Valid final YearFilterPagingRequest filter)
focal_class.class_method_signature: AverageTenderAndAwardPeriodsController.qualityAverageTenderPeriod(@ModelAttribute @Valid final DefaultFilterPagingRequest filter)
focal_class.full_signature: @ApiOperation(value = "Quality indicator for averageTenderPeriod endpoint, " + "showing the percentage of tenders that have start and end dates vs the total tenders in the system") @RequestMapping(value = "/api/qualityAverageTenderPeriod", method = {RequestMethod.POST, RequestMethod.GET}, produces = "application/json") public List<Document> qualityAverageTenderPeriod(@ModelAttribute @Valid final DefaultFilterPagingRequest filter)
focal_class.identifier: qualityAverageTenderPeriod
focal_class.modifiers: @ApiOperation(value = "Quality indicator for averageTenderPeriod endpoint, " + "showing the percentage of tenders that have start and end dates vs the total tenders in the system") @RequestMapping(value = "/api/qualityAverageTenderPeriod", method = {RequestMethod.POST, RequestMethod.GET}, produces = "application/json") public
focal_class.parameters: (@ModelAttribute @Valid final DefaultFilterPagingRequest filter)
focal_class.return: List<Document>
focal_class.signature: List<Document> qualityAverageTenderPeriod(@ModelAttribute @Valid final DefaultFilterPagingRequest filter)
focal_class.class_method_signature: AverageTenderAndAwardPeriodsController.averageAwardPeriod(@ModelAttribute @Valid final YearFilterPagingRequest filter)
focal_class.full_signature: @ApiOperation(value = "Calculates the average award period, per each year. The year is taken from " + "awards.date and the duration is taken by counting the days" + "between tender.tenderPeriod.endDate and tender.tenderPeriod.startDate. The award has to be active.") @RequestMapping(value = "/api/averageAwardPeriod", method = {RequestMethod.POST, RequestMethod.GET}, produces = "application/json") public List<Document> averageAwardPeriod(@ModelAttribute @Valid final YearFilterPagingRequest filter)
focal_class.identifier: averageAwardPeriod
focal_class.modifiers: @ApiOperation(value = "Calculates the average award period, per each year. The year is taken from " + "awards.date and the duration is taken by counting the days" + "between tender.tenderPeriod.endDate and tender.tenderPeriod.startDate. The award has to be active.") @RequestMapping(value = "/api/averageAwardPeriod", method = {RequestMethod.POST, RequestMethod.GET}, produces = "application/json") public
focal_class.parameters: (@ModelAttribute @Valid final YearFilterPagingRequest filter)
focal_class.return: List<Document>
focal_class.signature: List<Document> averageAwardPeriod(@ModelAttribute @Valid final YearFilterPagingRequest filter)
focal_class.class_method_signature: AverageTenderAndAwardPeriodsController.qualityAverageAwardPeriod(@ModelAttribute @Valid final DefaultFilterPagingRequest filter)
focal_class.full_signature: @ApiOperation(value = "Quality indicator for averageAwardPeriod endpoint, " + "showing the percentage of awards that have start and end dates vs the total tenders in the system") @RequestMapping(value = "/api/qualityAverageAwardPeriod", method = {RequestMethod.POST, RequestMethod.GET}, produces = "application/json") public List<Document> qualityAverageAwardPeriod(@ModelAttribute @Valid final DefaultFilterPagingRequest filter)
focal_class.identifier: qualityAverageAwardPeriod
focal_class.modifiers: @ApiOperation(value = "Quality indicator for averageAwardPeriod endpoint, " + "showing the percentage of awards that have start and end dates vs the total tenders in the system") @RequestMapping(value = "/api/qualityAverageAwardPeriod", method = {RequestMethod.POST, RequestMethod.GET}, produces = "application/json") public
focal_class.parameters: (@ModelAttribute @Valid final DefaultFilterPagingRequest filter)
focal_class.return: List<Document>
focal_class.signature: List<Document> qualityAverageAwardPeriod(@ModelAttribute @Valid final DefaultFilterPagingRequest filter)
focal_class.superclass: extends GenericOCDSController
focal_method.body: @ApiOperation(value = "Quality indicator for averageTenderPeriod endpoint, "
              + "showing the percentage of tenders that have start and end dates vs the total tenders in the system")
      @RequestMapping(value = "/api/qualityAverageTenderPeriod",
              method = {RequestMethod.POST, RequestMethod.GET}, produces = "application/json")
      public List<Document> qualityAverageTenderPeriod(@ModelAttribute @Valid final DefaultFilterPagingRequest filter) {
  
          DBObject project = new BasicDBObject();
          project.put(Fields.UNDERSCORE_ID, 0);
          project.put(
                  "tenderWithStartEndDates",
                  new BasicDBObject(
                          "$cond",
                          Arrays.asList(
                                  new BasicDBObject("$and", Arrays.asList(
                                          new BasicDBObject(
                                                  "$gt",
                                                  Arrays.asList(
                                                          ref(MongoConstants.FieldNames.TENDER_PERIOD_START_DATE),
                                                          null
                                                  )
                                          ),
                                          new BasicDBObject(
                                                  "$gt",
                                                  Arrays.asList(
                                                          ref(MongoConstants.FieldNames.TENDER_PERIOD_END_DATE),
                                                          null
                                                  )
                                          )
                                  )),
                                  1, 0
                          )
                  )
          );
  
          DBObject project1 = new BasicDBObject();
          project1.put(Keys.TOTAL_TENDER_WITH_START_END_DATES, 1);
          project1.put(Keys.TOTAL_TENDERS, 1);
          project1.put(
                  Keys.PERCENTAGE_TENDER_WITH_START_END_DATES,
                  new BasicDBObject("$multiply", Arrays.asList(
                          new BasicDBObject("$divide", Arrays.asList("$totalTenderWithStartEndDates", "$totalTenders")),
                          100
                  ))
          );
  
          Aggregation agg = newAggregation(
                  match(getDefaultFilterCriteria(filter)),
                  new CustomProjectionOperation(project),
                  group().sum("tenderWithStartEndDates").as(Keys.TOTAL_TENDER_WITH_START_END_DATES).count().
                          as(Keys.TOTAL_TENDERS),
                  new CustomProjectionOperation(project1)
          );
  
          return releaseAgg(agg);
      }
focal_method.class_method_signature: AverageTenderAndAwardPeriodsController.qualityAverageTenderPeriod(@ModelAttribute @Valid final DefaultFilterPagingRequest filter)
focal_method.full_signature: @ApiOperation(value = "Quality indicator for averageTenderPeriod endpoint, " + "showing the percentage of tenders that have start and end dates vs the total tenders in the system") @RequestMapping(value = "/api/qualityAverageTenderPeriod", method = {RequestMethod.POST, RequestMethod.GET}, produces = "application/json") public List<Document> qualityAverageTenderPeriod(@ModelAttribute @Valid final DefaultFilterPagingRequest filter)
focal_method.identifier: qualityAverageTenderPeriod
focal_method.invocations: put put asList asList asList ref asList ref put put put asList asList newAggregation match getDefaultFilterCriteria as count as sum group releaseAgg
focal_method.modifiers: @ApiOperation(value = "Quality indicator for averageTenderPeriod endpoint, " + "showing the percentage of tenders that have start and end dates vs the total tenders in the system") @RequestMapping(value = "/api/qualityAverageTenderPeriod", method = {RequestMethod.POST, RequestMethod.GET}, produces = "application/json") public
focal_method.parameters: (@ModelAttribute @Valid final DefaultFilterPagingRequest filter)
focal_method.return: List<Document>
focal_method.signature: List<Document> qualityAverageTenderPeriod(@ModelAttribute @Valid final DefaultFilterPagingRequest filter)