mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-07-26 00:54:27 +00:00
add resources conflict checker and extend tempus tests with it
This commit is contained in:
@@ -14,6 +14,7 @@ class KalenderLib
|
||||
$this->_ci->load->model('ressource/Kalender_Event_model', 'KalenderEventModel');
|
||||
$this->_ci->load->model('ressource/Kalender_Event_Teilnehmer_model', 'KalenderEventTeilnehmerModel');
|
||||
$this->_ci->load->model('ressource/Kalender_Ort_model', 'KalenderOrtModel');
|
||||
$this->_ci->load->model('ressource/BetriebsmittelKalender_model', 'BetriebsmittelKalenderModel');
|
||||
$this->_ci->load->model('education/Lehreinheit_model', 'LehreinheitModel');
|
||||
$this->_ci->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel');
|
||||
$this->_ci->load->model('education/LehreinheitMitarbeiter_model', 'LehreinheitMitarbeiterModel');
|
||||
@@ -174,7 +175,8 @@ class KalenderLib
|
||||
'titel' => isset($row->titel) ? $row->titel : '',
|
||||
'beschreibung' => isset($row->beschreibung) ? $row->beschreibung : '',
|
||||
'topic' => (isset($row->lehrfach_kurzbz) ? $row->lehrfach_kurzbz : '').' '.(isset($row->lehrform_kurzbz) ? $row->lehrform_kurzbz : ''),
|
||||
'collisions' => false
|
||||
'collisions' => false,
|
||||
'has_assigned_resources' => isset($row->has_assigned_resources) ? $row->has_assigned_resources : false
|
||||
];
|
||||
}
|
||||
|
||||
@@ -345,6 +347,14 @@ class KalenderLib
|
||||
WHERE nachfolger.vorgaenger_kalender_id = tbl_kalender.kalender_id)', null, false);
|
||||
|
||||
$this->_ci->KalenderModel->db->where_not_in('status_kurzbz', array('deleted'));
|
||||
|
||||
$this->_ci->KalenderModel->addSelect([
|
||||
"(
|
||||
SELECT COUNT(*) FROM lehre.tbl_betriebsmittel_kalender
|
||||
WHERE tbl_betriebsmittel_kalender.eindeutige_kalender_gruppen_id = tbl_kalender.eindeutige_gruppen_id
|
||||
) AS has_assigned_resources"
|
||||
]);
|
||||
|
||||
$data = $this->_ci->KalenderModel->load();
|
||||
|
||||
return $this->_mapEvents($data);
|
||||
@@ -354,6 +364,7 @@ class KalenderLib
|
||||
{
|
||||
$this->_getBasePlan($start_date, $end_date);
|
||||
|
||||
|
||||
$this->_ci->KalenderModel->db->where('status_kurzbz', 'live');
|
||||
|
||||
$data = $this->_ci->KalenderModel->load();
|
||||
@@ -495,6 +506,7 @@ class KalenderLib
|
||||
'bis' => $end_date,
|
||||
'typ' => 'lehreinheit',
|
||||
'status_kurzbz' => 'planning',
|
||||
'eindeutige_gruppen_id' => $this->_ci->KalenderModel->generateUniqueGroupId(),
|
||||
'insertvon' => getAuthUID(),
|
||||
'insertamum' => date('Y-m-d H:i:s')
|
||||
)
|
||||
@@ -658,6 +670,81 @@ class KalenderLib
|
||||
return $kalenderresult;
|
||||
}
|
||||
|
||||
public function addOperationalResourcesToKalenderEvent($calendar, $assignedResources)
|
||||
{
|
||||
$checkerData = new stdClass();
|
||||
$checkerData->kalender_id = $calendar->kalender_id;
|
||||
$checkerData->betriebsmittel_ids = [];
|
||||
$checkerData->von = $calendar->von;
|
||||
$checkerData->bis = $calendar->bis;
|
||||
|
||||
foreach ($assignedResources as $assignedResource) {
|
||||
array_push($checkerData->betriebsmittel_ids, $assignedResource['betriebsmittel_id']);
|
||||
}
|
||||
|
||||
$errors = [];
|
||||
$result = $this->_ci->collisionchecker->run($checkerData);
|
||||
if (!empty($result))
|
||||
{
|
||||
$errors = $result;
|
||||
}
|
||||
|
||||
if (!empty($errors)) {
|
||||
return error($errors);
|
||||
}
|
||||
|
||||
$this->_ci->db->trans_start();
|
||||
|
||||
$allowedResourceIDs = array_filter(array_map(
|
||||
function ($resource) {
|
||||
return $resource['betriebsmittel_id'] ?? null;
|
||||
},
|
||||
$assignedResources
|
||||
));
|
||||
|
||||
if (!empty($allowedResourceIDs)) {
|
||||
$placeholders = implode(',', array_fill(0, count($allowedResourceIDs), '?'));
|
||||
|
||||
$query = "
|
||||
DELETE FROM lehre.tbl_betriebsmittel_kalender
|
||||
WHERE eindeutige_kalender_gruppen_id = ?
|
||||
AND betriebsmittel_id NOT IN ($placeholders)
|
||||
";
|
||||
|
||||
$params = array_merge(
|
||||
[$calendar->eindeutige_gruppen_id],
|
||||
$allowedResourceIDs
|
||||
);
|
||||
|
||||
$this->_ci->db->query($query, $params);
|
||||
} else {
|
||||
$this->_ci->db->where('eindeutige_kalender_gruppen_id', $calendar->eindeutige_gruppen_id);
|
||||
$this->_ci->db->delete('lehre.tbl_betriebsmittel_kalender');
|
||||
}
|
||||
|
||||
foreach ($assignedResources as $assignedResource) {
|
||||
$data = [
|
||||
'eindeutige_kalender_gruppen_id' => $calendar->eindeutige_gruppen_id,
|
||||
'betriebsmittel_id' => $assignedResource['betriebsmittel_id'],
|
||||
'anmerkung' => $assignedResource['anmerkung'] ?? null,
|
||||
'quelle' => 'tempus_neu',
|
||||
'updateamum' => date('c'),
|
||||
'updatevon' => getAuthUid(),
|
||||
];
|
||||
if (isset($assignedResource['betriebsmittel_kalender_id'])) {
|
||||
$result = $this->_ci->BetriebsmittelKalenderModel->update($assignedResource['betriebsmittel_kalender_id'], $data);
|
||||
} else {
|
||||
$result = $this->_ci->BetriebsmittelKalenderModel->insert(array_merge($data, [
|
||||
'insertvon' => getAuthUid(),
|
||||
'updateamum' => date('c'),
|
||||
]));
|
||||
}
|
||||
}
|
||||
$this->_ci->db->trans_complete();
|
||||
|
||||
return success('Operational resources added to calendar event successfully.');
|
||||
}
|
||||
|
||||
private function _addTeilnehmerToEvent($kalender_id, $uid, $rolle)
|
||||
{
|
||||
return $this->_ci->KalenderEventTeilnehmerModel->insert(
|
||||
@@ -748,9 +835,22 @@ class KalenderLib
|
||||
$entryResult = $this->_loadKalenderEntry($kalender_id);
|
||||
if (isError($entryResult)) return $entryResult;
|
||||
|
||||
|
||||
$kalender_entry = getData($entryResult);
|
||||
|
||||
$calendarResources = $this->_ci->BetriebsmittelKalenderModel->loadWhere(['eindeutige_kalender_gruppen_id' => $kalender_entry->eindeutige_gruppen_id]);
|
||||
if (isError($calendarResources)) return $calendarResources;
|
||||
|
||||
$calendarResourcesItems = getData($calendarResources);
|
||||
$calendarResourcesIDs = [];
|
||||
if (is_array($calendarResourcesItems)) {
|
||||
$calendarResourcesIDs = array_map(function($resource) {
|
||||
return $resource->betriebsmittel_id;
|
||||
}, getData($calendarResources));
|
||||
}
|
||||
|
||||
$kalender_entry->ort_kurzbz = $ort_kurzbz ?? $kalender_entry->ort_kurzbz;
|
||||
$kalender_entry->betriebsmittel_ids = $calendarResourcesIDs;
|
||||
$kalender_entry->von = $start_time ?? $kalender_entry->von;
|
||||
$kalender_entry->bis = $end_time ?? $kalender_entry->bis;
|
||||
|
||||
@@ -888,6 +988,7 @@ class KalenderLib
|
||||
'typ' => 'lehreinheit',
|
||||
'status_kurzbz' => 'planning',
|
||||
'vorgaenger_kalender_id' => $old_id,
|
||||
'eindeutige_gruppen_id' => $kalender_entry->eindeutige_gruppen_id,
|
||||
'insertvon' => getAuthUID(),
|
||||
'insertamum' => date('Y-m-d H:i:s')
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user