public function generate(Reportable $survey, string $locale, array $filterValues, ?bool $includeExtraQuestions): GeneralReportDataObject 	{ 		$applicants = $survey->getApplicants(); 		$applicantsIds = $applicants->pluck('id')->all(); 		$categories = $survey->getCategories();  		// EMPLOYEES DATA 		$employeesDataObject = $this->employeesData->calculate($survey, $applicantsIds);  		$this->generalReportDataObject->setEmployeesDataObject($employeesDataObject);  		// CATEGORIES DATA 		$categoriesDataObject = $this->categoriesData->calculate($survey, $categories, $applicantsIds); 		$this->generalReportDataObject->setCategoriesDataObject($categoriesDataObject);  		// EMPLOYEEE ENGAGEMENT 		$this->generalReportDataObject->setEngagementPercentage($this->employeeEngagementDataCalculation->calculate($categories, $applicantsIds));  		// DEPARTMENTS AND LOCATIONS DATA  		$result = $this->departmentsAndLocationsData->calculate($applicantsIds, $locale); 		$this->generalReportDataObject->setLocations($result[0] ?? []); 		$this->generalReportDataObject->setDepartments($result[1] ?? []);  		if ($includeExtraQuestions) { 			// EXTRA QUESTIONS DATA 			$this->generalReportDataObject->setExtraQuestions($this->extraQuestions->calculate($survey, $applicantsIds, $locale, $filterValues));  			// EXTRA QUESTIONS COMMENTS 			$this->generalReportDataObject->setExtraQuestionsComments($this->extraQuestionsComments->calculate($survey, $applicantsIds, $locale, $filterValues)); 		}  		// DEMOGRAPHIC QUESTIONS 		$this->generalReportDataObject->setDemographicDataObject($this->demographicQestions->calculate($survey, $applicantsIds, $filterValues));  		// ESI DATA 		$this->generalReportDataObject->setEsiDataObject($this->esiMetrics->generate($applicants));  		return $this->generalReportDataObject; 	}