From 7bbd94bb89770777d9f808dda20a91ee11699508 Mon Sep 17 00:00:00 2001 From: Cris Date: Mon, 17 May 2021 12:35:14 +0200 Subject: [PATCH] Adapted & Enhanced Withdrawing of Approvement . Added 'genehmigt von' . Moved out to Model and added db rollback Signed-off-by: cris-technikum --- .../anrechnung/ApproveAnrechnungDetail.php | 28 +++------- .../models/education/Anrechnung_model.php | 52 +++++++++++++++++++ 2 files changed, 59 insertions(+), 21 deletions(-) diff --git a/application/controllers/lehre/anrechnung/ApproveAnrechnungDetail.php b/application/controllers/lehre/anrechnung/ApproveAnrechnungDetail.php index f61e9ef8d..d76c0d79b 100644 --- a/application/controllers/lehre/anrechnung/ApproveAnrechnungDetail.php +++ b/application/controllers/lehre/anrechnung/ApproveAnrechnungDetail.php @@ -280,34 +280,20 @@ class approveAnrechnungDetail extends Auth_Controller if (!is_numeric($anrechnung_id)) { - show_error('Wrong parameter.'); + $this->terminateWithJsonError($this->p->t('ui', 'errorFelderFehlen')); } - // Get last Anrechnungstatus - if (!$result = getData($this->AnrechnungModel->getLastAnrechnungstatus($anrechnung_id))[0]) - { - show_error('Failed loading Anrechnung'); - } - - $last_status = $result->status_kurzbz; - $anrechnungstatus_id = $result->anrechnungstatus_id; - - // Return if last status is not approved / rejected - if ($last_status != self::ANRECHNUNGSTATUS_APPROVED && $last_status != self::ANRECHNUNGSTATUS_REJECTED) - { - return $this->outputJsonError('Nothing to withdraw. Application is still in progress.'); - } - - // Withdraw status approved / rejected - $result = $this->AnrechnungModel->deleteAnrechnungstatus($anrechnungstatus_id); - + // Delete last status approved / rejected. + // If last status is 'approved', Genehmigung is resetted. + $result = $this->AnrechnungModel->withdrawApprovement($anrechnung_id); + if (isError($result)) { - return $this->outputJsonError('Could not withdraw this application.'); + $this->terminateWithJsonError(getError($result)); } // Success output to AJAX - return $this->outputJsonSuccess(array( + $this->outputJsonSuccess(array( 'status_bezeichnung' => $this->anrechnunglib->getLastAnrechnungstatus($anrechnung_id)) ); } diff --git a/application/models/education/Anrechnung_model.php b/application/models/education/Anrechnung_model.php index d65c79f51..ebecf4118 100644 --- a/application/models/education/Anrechnung_model.php +++ b/application/models/education/Anrechnung_model.php @@ -3,6 +3,9 @@ class Anrechnung_model extends DB_Model { const ANRECHNUNGSTATUS_PROGRESSED_BY_STGL = 'inProgressDP'; + const ANRECHNUNGSTATUS_APPROVED = 'approved'; + const ANRECHNUNGSTATUS_REJECTED = 'rejected'; + /** * Constructor */ @@ -148,4 +151,53 @@ class Anrechnung_model extends DB_Model return $this->execQuery($qry, array($anrechnungstatus_id)); } + + /** + * Delete last status approved / rejected. + * If last status is 'approved', Genehmigung is resetted. + * + * @param $anrechnung_id + * @return array + */ + public function withdrawApprovement($anrechnung_id) + { + // Get last Anrechnungstatus + if (!$result = getData($this->AnrechnungModel->getLastAnrechnungstatus($anrechnung_id))[0]) + { + return error('Failed loading Anrechnung'); + } + + $last_status = $result->status_kurzbz; + $anrechnungstatus_id = $result->anrechnungstatus_id; + + // Exit, if last status is not approved / rejected + if ($last_status != self::ANRECHNUNGSTATUS_APPROVED && $last_status != self::ANRECHNUNGSTATUS_REJECTED) + { + return error('Nothing to withdraw. Application is still in progress'); + } + + // Start DB transaction + $this->db->trans_start(false); + + // If Anrechnung was approved + if ($last_status == self::ANRECHNUNGSTATUS_APPROVED) + { + // Reset Genehmigung + $this->AnrechnungModel->update($anrechnung_id, array('genehmigt_von' => NULL)); + } + + // Delete last status approved / rejected + $this->AnrechnungModel->deleteAnrechnungstatus($anrechnungstatus_id); + + // Transaction complete + $this->db->trans_complete(); + + if ($this->db->trans_status() === false) + { + $this->db->trans_rollback(); + return error('Failed withdrawing Genehmigung', EXIT_ERROR); + } + return success(); + + } }