year = $year; $this->handle(); } public function getInvoiceReport() { return $this->invoiceReport; } private function handle() { $this->setProjects(); $this->loopProjects(); $this->setInvoiceReport(); } private function setProjects() { $this->projects = Project::getProjectsForReport(); } private function loopProjects() { foreach ( $this->projects as $this->project ) { $this->setInvoiceOverview(); $this->setInvoiceForecasts(); $this->setMonthForecasts(); $this->setMonthPayments(); } } private function setInvoiceOverview() { $this->invoiceOverview = new InvoiceOverview( $this->project, $this->year ); $this->invoiceOverviews[] = $this->invoiceOverview->getProjectDetails(); } private function setInvoiceForecasts() { $this->invoiceForecast = new InvoiceForecast( $this->project, $this->invoiceOverview->getNeedinvoice(), $this->year ); $this->invoiceForecasts[] = $this->invoiceForecast->getProjectDetails(); } public function setMonthForecasts() { $this->monthForecast = new MonthForecast( $this->invoiceForecast, $this->project, $this->year ); $this->monthForecasts[] = $this->monthForecast->getProjectDetails(); } public function setMonthPayments() { $this->monthPayment = new MonthPayments( $this->project, $this->year ); $this->monthPayments[] = $this->monthPayment->getProjectDetails(); } private function setInvoiceReport() { $this->invoiceReport = [ 'invoiceOverview' => $this->invoiceOverviews, 'forecasts' => $this->invoiceForecasts, 'monthForecasts' => $this->monthForecasts, 'monthPayments' => $this->monthPayments ]; } }