From 438b7b5b9e2d2595290e34b39cc197e93aa091f5 Mon Sep 17 00:00:00 2001 From: Cris Date: Tue, 29 Oct 2019 10:39:37 +0100 Subject: [PATCH] Moved methods from Vertrag_model to Vertragvertragsstatus_model Moved out and adapted methods which correspond to Vertragsstatus from Vertrag_model to Vertragvertragsstatus_model. --- .../lehrauftrag/LehrauftragAkzeptieren.php | 3 +- .../lehre/lehrauftrag/LehrauftragErteilen.php | 3 +- .../models/accounting/Vertrag_model.php | 9 +- .../Vertragvertragsstatus_model.php | 83 ++++++++++++++++++- 4 files changed, 90 insertions(+), 8 deletions(-) diff --git a/application/controllers/lehre/lehrauftrag/LehrauftragAkzeptieren.php b/application/controllers/lehre/lehrauftrag/LehrauftragAkzeptieren.php index 98ce734a4..682dc3c2f 100644 --- a/application/controllers/lehre/lehrauftrag/LehrauftragAkzeptieren.php +++ b/application/controllers/lehre/lehrauftrag/LehrauftragAkzeptieren.php @@ -30,6 +30,7 @@ class LehrauftragAkzeptieren extends Auth_Controller // Load models $this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel'); $this->load->model('accounting/Vertrag_model', 'VertragModel'); + $this->load->model('accounting/Vertragvertragsstatus_model', 'VertragvertragsstatusModel'); $this->load->model('ressource/Mitarbeiter_model', 'MitarbeiterModel'); $this->load->model('codex/Bisverwendung_model', 'BisverwendungModel'); $this->load->model('person/Benutzer_model', 'BenutzerModel'); @@ -158,7 +159,7 @@ class LehrauftragAkzeptieren extends Auth_Controller } // Set status to accepted - $result = $this->VertragModel->setStatus($vertrag_id, $this->_uid, 'akzeptiert'); + $result = $this->VertragvertragsstatusModel->setStatus($vertrag_id, $this->_uid, 'akzeptiert'); if ($result->retval) { diff --git a/application/controllers/lehre/lehrauftrag/LehrauftragErteilen.php b/application/controllers/lehre/lehrauftrag/LehrauftragErteilen.php index 2dc771d0f..83d2e4b81 100644 --- a/application/controllers/lehre/lehrauftrag/LehrauftragErteilen.php +++ b/application/controllers/lehre/lehrauftrag/LehrauftragErteilen.php @@ -35,6 +35,7 @@ class LehrauftragErteilen extends Auth_Controller $this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel'); $this->load->model('organisation/Studiengang_model', 'StudiengangModel'); $this->load->model('accounting/Vertrag_model', 'VertragModel'); + $this->load->model('accounting/Vertragvertragsstatus_model', 'VertragvertragsstatusModel'); // Load libraries $this->load->library('WidgetLib'); @@ -134,7 +135,7 @@ class LehrauftragErteilen extends Auth_Controller show_error('Keine Erteilberechtigung für diese Organisationseinheit: '. $lv_oe_kurzbz); } - $result = $this->VertragModel->setStatus($vertrag_id, $mitarbeiter_uid, 'erteilt'); + $result = $this->VertragvertragsstatusModel->setStatus($vertrag_id, $mitarbeiter_uid, 'erteilt'); if ($result->retval) { $json [] = array( diff --git a/application/models/accounting/Vertrag_model.php b/application/models/accounting/Vertrag_model.php index ea8f511e8..b98453a00 100644 --- a/application/models/accounting/Vertrag_model.php +++ b/application/models/accounting/Vertrag_model.php @@ -122,7 +122,7 @@ class Vertrag_model extends DB_Model // If updating vertrag_id was successfully, set Status to 'bestellt' if (isSuccess($result)) { - $result = $this->setStatus($vertrag_id, $mitarbeiter_uid,'bestellt'); + $result = $this->VertragvertragsstatusModel->setStatus($vertrag_id, $mitarbeiter_uid, 'bestellt'); } // Transaction complete! @@ -172,19 +172,20 @@ class Vertrag_model extends DB_Model // If last vertragsstatus is 'erteilt', delete the status if (isSuccess($result)) { - $result = $this->getLastStatus($vertrag_obj->vertrag_id, $mitarbeiter_uid); + $result = $this->VertragvertragsstatusModel->getLastStatus($vertrag_id, $mitarbeiter_uid); + $lastStatus = getData($result)[0]->vertragsstatus_kurzbz; if ($lastStatus == 'erteilt') { - $result = $this->VertragvertragsstatusModel->deleteStatus($vertrag_obj->vertrag_id, 'erteilt'); + $result = $this->VertragvertragsstatusModel->deleteStatus($vertrag_id, 'erteilt'); } } // Update date of status 'bestellt' if (isSuccess($result)) { - $result = $this->VertragvertragsstatusModel->updateStatus($vertrag_obj->vertrag_id, 'bestellt'); + $result = $this->VertragvertragsstatusModel->updateStatus($vertrag_id, 'bestellt'); } // Transaction complete! diff --git a/application/models/accounting/Vertragvertragsstatus_model.php b/application/models/accounting/Vertragvertragsstatus_model.php index fc4266dae..7e76ef494 100644 --- a/application/models/accounting/Vertragvertragsstatus_model.php +++ b/application/models/accounting/Vertragvertragsstatus_model.php @@ -1,7 +1,6 @@ dbTable = 'lehre.tbl_vertrag_vertragsstatus'; $this->pk = array('vertragsstatus_kurzbz', 'vertrag_id'); + $this->hasSequence = false; } + /** + * Check if Vertrag has the given Vertragsstatus. + * @param integer $vertrag_id + * @param string $mitarbeiter_uid + * @param string $vertragsstatus_kurzbz + * @return array + */ + public function hasStatus($vertrag_id, $mitarbeiter_uid, $vertragsstatus_kurzbz) + { + $this->addSelect('1'); + $this->addLimit(1); + + return $this->loadWhere(array( + 'vertrag_id' => $vertrag_id, + 'uid' => $mitarbeiter_uid, + 'vertragsstatus_kurzbz' => $vertragsstatus_kurzbz + )); + } + + /** + * Get the latest Vertragsstatus for the given Vertrag and Mitarbeiter + * @param integer $vertrag_id + * @param string $mitarbeiter_uid + * @return array + */ + public function getLastStatus($vertrag_id, $mitarbeiter_uid) + { + $this->addSelect('vertragsstatus_kurzbz'); + $this->addOrder('datum', 'DESC'); + $this->addLimit(1); + return $this->loadWhere( + array( + 'vertrag_id' => $vertrag_id, + 'uid' => $mitarbeiter_uid + ) + ); + } + + /** + * Set Vertragsstatus for the given Vertrag and Mitarbeiter. + * @param $vertrag_id + * @param $vertragsstatus_kurzbz + * @param $mitarbeiter_uid + * @return array|null On success object, retval is true. Null if status already exist for this vertrag. + */ + public function setStatus($vertrag_id, $mitarbeiter_uid, $vertragsstatus_kurzbz){ + + // Check if vertrag has already this status + $result = $this->hasStatus($vertrag_id, $mitarbeiter_uid, $vertragsstatus_kurzbz); + + if (hasData($result)) + { + return success(null); // return null if status is already set + } + + // If new status should be 'akzeptiert', the latest status has to be 'erteilt' + if ($vertragsstatus_kurzbz == 'akzeptiert') + { + $result = $this->getLastStatus($vertrag_id, $mitarbeiter_uid); + $last_status = getData($result)[0]->vertragsstatus_kurzbz; + + if ($last_status != 'erteilt') + { + return success(null); // return null if latest status is not 'erteilt' + } + } + + // Set new status if passed all checks + return $this->insert( + array( + 'vertrag_id' => $vertrag_id, + 'vertragsstatus_kurzbz' => $vertragsstatus_kurzbz, + 'uid' => $mitarbeiter_uid, + 'datum' => $this->escape('NOW()'), + 'insertvon' => getAuthUID(), + 'insertamum' => $this->escape('NOW()') + ) + ); + } + /** * Updates the date of the given vertragsstatus. * @param $vertrag_id @@ -34,7 +114,6 @@ class Vertragvertragsstatus_model extends DB_Model ); } - /** * Deletes the given vertragsstatus of the contract. * @param $vertrag_id