|null $departmentIds Null keeps the existing unrestricted contract. */ public function get_new_bookings(?array $departmentIds = null): self { // Get the departments $departments_o = new \objects\departments_o(); // Get the bookings $bookings_o = new \objects\bookings_o(); // Get the bookings $bookings = $departmentIds === null ? $bookings_o->getFields(['id', 'department', 'date']) : ($departmentIds === [] ? [] : $bookings_o->getFieldsWhere( ['department' => $departmentIds], ['id', 'department', 'date'] )); // Get the departments $departments = $departmentIds === null ? $departments_o->getFields(['id', 'name']) : ($departmentIds === [] ? [] : $departments_o->getFieldsWhere( ['id' => $departmentIds], ['id', 'name'] )); // For each year, add the months covered $this->add_monthly_labels(); // Add the counts for each department, for each month in each year foreach ( $departments as $department ) { $department_data_set = []; foreach ( $this->get_yearly_months_covered() as $year => $months ) { foreach ( $months as $month ) { $count = 0; foreach ( $bookings as $booking ) { if ($booking['department'] == $department['id'] && date('F', strtotime($booking['date'])) == $month && date('Y', strtotime($booking['date'])) == $year) { $count++; } } $department_data_set[$month . ' ' . $year] = $count; } } // Add the department data set $this->add_data_set($department['name'], $department_data_set); } return $this; } }