Betriebsmittel: stabilized

This commit is contained in:
cgfhtw
2024-07-09 14:06:29 +02:00
parent 1a8a7cc260
commit e79a70fc2f
7 changed files with 550 additions and 354 deletions
@@ -6,14 +6,16 @@ use \DateTime as DateTime;
class BetriebsmittelP extends FHCAPI_Controller
{
private $person_id = null;
public function __construct()
{
parent::__construct([
'getAllBetriebsmittel' => ['admin:r', 'assistenz:r'],
'addNewBetriebsmittel' => ['admin:r', 'assistenz:r'],
'updateBetriebsmittel' => ['admin:r', 'assistenz:r'],
'addNewBetriebsmittel' => self::PERM_LOGGED,
'updateBetriebsmittel' => self::PERM_LOGGED,
'loadBetriebsmittel' => ['admin:r', 'assistenz:r'],
'deleteBetriebsmittel' => ['admin:r', 'assistenz:r'],
'deleteBetriebsmittel' => self::PERM_LOGGED,
'getTypenBetriebsmittel' => ['admin:r', 'assistenz:r'],
'loadInventarliste' => ['admin:r', 'assistenz:r']
]);
@@ -22,6 +24,29 @@ class BetriebsmittelP extends FHCAPI_Controller
$this->load->model('ressource/Betriebsmittel_model', 'BetriebsmittelModel');
$this->load->model('ressource/Betriebsmittelperson_model', 'BetriebsmittelpersonModel');
// Additional Permission Checks
if ($this->router->method == 'addNewBetriebsmittel') {
$this->person_id = current(array_slice($this->uri->rsegments, 2));
$this->checkPermissionsForPerson(
$this->person_id,
['admin:rw', 'mitarbeiter:rw', 'basis/betriebsmittel:rw'],
['admin:rw', 'assistenz:rw', 'basis/betriebsmittel:rw']
);
} elseif ($this->router->method == 'updateBetriebsmittel' || $this->router->method == 'deleteBetriebsmittel') {
$betriebsmittelperson_id = current(array_slice($this->uri->rsegments, 2));
$result = $this->BetriebsmittelpersonModel->load($betriebsmittelperson_id);
if (!hasData($result))
show_404();
$this->person_id = current(getData($result))->person_id;
$this->checkPermissionsForPerson(
$this->person_id,
['admin:rw', 'mitarbeiter:rw', 'basis/betriebsmittel:rw'],
['admin:rw', 'assistenz:rw', 'basis/betriebsmittel:rw']
);
}
// Load Libraries
$this->load->library('VariableLib', ['uid' => getAuthUID()]);
$this->load->library('form_validation');
@@ -44,187 +69,265 @@ class BetriebsmittelP extends FHCAPI_Controller
$this->terminateWithSuccess((getData($result) ?: []));
}
public function addNewBetriebsmittel($person_id)
protected function validateNewOrUpdate()
{
$this->form_validation->set_rules('kaution', 'Kaution', 'numeric', [
'numeric' => $this->p->t('ui', 'error_fieldNotNumeric', ['field' => 'Kaution'])
$this->form_validation->set_rules('betriebsmitteltyp', 'Typ', 'required', [
'required' => $this->p->t('ui', 'error_fieldRequired')
]);
$this->form_validation->set_rules('betriebsmitteltyp', 'TYP', 'required', [
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Typ'])
$this->form_validation->set_rules('kaution', 'Kaution', 'numeric|less_than_equal_to[9999.99]', [
'numeric' => $this->p->t('ui', 'error_fieldNotNumeric')
]);
$this->form_validation->set_rules('ausgegebenam', 'Ausgegeben am', 'required', [
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Ausgegeben am'])
$this->form_validation->set_rules('ausgegebenam', 'Ausgegeben am', 'required|is_valid_date', [
'required' => $this->p->t('ui', 'error_fieldRequired')
]);
if ($this->form_validation->run() == false) {
$this->terminateWithValidationErrors($this->form_validation->error_array());
if ($this->input->post('ausgegebenam') && $this->input->post('retouram')) {
$this->form_validation->set_rules('retouram', 'Retour am', [
'is_valid_date',
['is_not_before_ausgegebenam', function ($value) {
return (new DateTime($value) >= new DateTime($this->input->post('ausgegebenam')));
}]
], [
'is_not_before_ausgegebenam' => $this->p->t('wawi', 'error_retourdatumVorAusgabe')
]);
} else {
$this->form_validation->set_rules('retouram', 'Retour am', 'is_valid_date');
}
$uid_user = getAuthUID();
$this->form_validation->set_rules('anmerkung', 'Anmerkung', 'max_length[256]');
if ($this->input->post('betriebsmitteltyp') == 'Inventar') {
// Inventar
$this->form_validation->set_rules('betriebsmittel_id', 'Inventarnummer', 'required');
} elseif ($this->input->post('betriebsmitteltyp') == 'Zutrittskarte') {
// Zutrittskarte
if ($this->input->post('nummer') === null && $this->input->post('nummer') === null) {
$this->form_validation->set_rules('nummer', 'Nummer', 'required', [
'required' => $this->p->t('wawi', 'error_zutrittskarteOhneNummer')
]);
$this->form_validation->set_rules('nummer2', 'Nummer2', 'required', [
'required' => $this->p->t('wawi', 'error_zutrittskarteOhneNummer')
]);
} else {
if ($this->input->post('nummer') === null) {
$result = $this->BetriebsmittelpersonModel->loadViewWhere([
'betriebsmitteltyp' => $this->input->post('betriebsmitteltyp'),
'nummer2' => $this->input->post('nummer2'),
'person_id !=' => $this->person_id,
'retouram IS NULL' => null
]);
if (hasData($result))
$this->form_validation->set_rules('nummer2', 'Nummer2', 'is_array', [
'is_array' => $this->p->t('wawi', 'error_bmZutrittskarteOccupied', (array)current(getData($result)))
]);
} else {
$result = $this->BetriebsmittelpersonModel->loadViewWhere([
'betriebsmitteltyp' => $this->input->post('betriebsmitteltyp'),
'nummer' => $this->input->post('nummer'),
'person_id !=' => $this->person_id,
'retouram IS NULL' => null
]);
if (hasData($result))
$this->form_validation->set_rules('nummer', 'Nummer', 'is_array', [
'is_array' => $this->p->t('wawi', 'error_bmZutrittskarteOccupied', (array)current(getData($result)))
]);
}
}
}
if (!$this->form_validation->run())
$this->terminateWithValidationErrors($this->form_validation->error_array());
}
public function addNewBetriebsmittel($person_id)
{
$this->form_validation->set_rules('uid', 'UID', [
['uid_in_person', function ($value) use ($person_id) {
if ($value === null)
return true;
$this->load->model('person/Benutzer_model', 'BenutzerModel');
$result = $this->BenutzerModel->loadWhere([
'uid' => $value,
'person_id' => $person_id
]);
return hasData($result);
}]
], [
'uid_in_person' => $this->p->t('person', 'error_uidNotInPerson')
]);
$this->validateNewOrUpdate();
$betriebsmitteltyp = $this->input->post('betriebsmitteltyp');
$nummer = $this->input->post('nummer');
$nummer2 = $this->input->post('nummer2');
$inventarData = $this->input->post('inventarData');
$beschreibung = $this->input->post('beschreibung');
$kaution = $this->input->post('kaution');
$betriebsmittel_id = $this->input->post('betriebsmittel_id');
$anmerkung = $this->input->post('anmerkung');
$kaution = $this->input->post('kaution');
$ausgegebenam = $this->input->post('ausgegebenam');
$retouram = $this->input->post('retouram');
$uid = $this->input->post('uid');
if ($inventarData) {
$betriebsmitteltyp = $inventarData['betriebsmitteltyp'];
$betriebsmittel_id = $inventarData['betriebsmittel_id'];
}
// NOTE(chris): transform_kartennummer
if ($betriebsmitteltyp == 'Zutrittskarte' && $nummer)
$nummer = is_numeric($nummer) ? ltrim($nummer, "0") : hexdec(implode("", array_reverse(str_split(trim($nummer)))));
if ($betriebsmitteltyp == 'Zutrittskarte' && !$nummer) {
return $this->terminateWithError($this->p->t('wawi', 'error_zutrittskarteOhneNummer'), self::ERROR_TYPE_GENERAL);
}
$this->db->trans_start();
if ($retouram && $retouram < $ausgegebenam) {
return $this->terminateWithError($this->p->t('wawi', 'error_retourdatumVorAusgabe'), self::ERROR_TYPE_GENERAL);
}
if ($betriebsmitteltyp != 'Inventar') {
$this->BetriebsmittelModel->addOrder('updateamum', 'DESC');
if ($betriebsmitteltyp == 'Zutrittskarte' && $nummer === null) {
$result = $this->BetriebsmittelModel->loadWhere([
'betriebsmitteltyp' => $betriebsmitteltyp,
'nummer2' => $nummer2
]);
} else {
$result = $this->BetriebsmittelModel->loadWhere([
'betriebsmitteltyp' => $betriebsmitteltyp,
'nummer' => $nummer
]);
}
$data = $this->getDataOrTerminateWithError($result);
if ($betriebsmitteltyp == "Inventar" && !($inventarData['inventarnummer'])) {
return $this->terminateWithError($this->p->t('wawi', 'error_inventarWaehlen'), self::ERROR_TYPE_GENERAL);
}
// Start DB transaction
$this->db->trans_begin();
$betriebsmitteltyp = utf8_decode($betriebsmitteltyp);
if (!$inventarData) {
$result = $this->BetriebsmittelModel->insert(
[
if ($data) {
$data = current($data);
if ($data->nummer !== $nummer || $data->nummer2 !== $nummer2 || $data->beschreibung !== $beschreibung) {
$result = $this->BetriebsmittelModel->update($data->betriebsmittel_id, [
'nummer' => $nummer,
'nummer2' => $nummer2,
'beschreibung' => $beschreibung,
'updateamum' => date('c'),
'updatevon' => getAuthUID()
]);
$this->getDataOrTerminateWithError($result);
}
$betriebsmittel_id = $data->betriebsmittel_id;
} else {
$result = $this->BetriebsmittelModel->insert([
'betriebsmitteltyp' => $betriebsmitteltyp,
'nummer' => $nummer,
'nummer2' => $nummer2,
'beschreibung' => $beschreibung,
'anmerkung' => $anmerkung,
'insertvon' => $uid_user,
'insertamum' => date('c')
]
);
if ($this->db->trans_status() === false || isError($result)) {
$this->db->trans_rollback();
return $this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
'reservieren' => false,
'ort_kurzbz' => null,
'insertamum' => date('c'),
'insertvon' => getAuthUID(),
]);
$betriebsmittel_id = $this->getDataOrTerminateWithError($result);
}
$betriebsmittel_id = $result->retval;
}
$result = $this->BetriebsmittelpersonModel->insert(
[
'betriebsmittel_id' => $betriebsmittel_id,
'person_id' => $person_id,
'kaution' => $kaution,
'anmerkung' => $anmerkung,
'ausgegebenam' => $ausgegebenam,
'retouram ' => $retouram,
'insertvon' => $uid_user,
'insertamum' => date('c'),
'uid' => $uid
]
);
$result = $this->BetriebsmittelpersonModel->insert([
'person_id' => $person_id,
'betriebsmittel_id' => $betriebsmittel_id,
'anmerkung' => $anmerkung,
'kaution' => $kaution,
'ausgegebenam' => $ausgegebenam,
'retouram' => $retouram,
'uid' => $uid,
'insertamum' => date('c'),
'insertvon' => getAuthUID()
]);
if ($this->db->trans_status() === false || isError($result)) {
$this->db->trans_rollback();
return $this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
}
$data = $this->getDataOrTerminateWithError($result);
$this->db->trans_commit();
return $this->terminateWithSuccess(true);
$this->db->trans_complete();
$this->terminateWithSuccess(true);
}
public function updateBetriebsmittel($betriebsmittelperson_id)
{
$uid_user = getAuthUID();
$betriebsmittel_id = $this->input->post('betriebsmittel_id');
$this->validateNewOrUpdate();
$betriebsmitteltyp = $this->input->post('betriebsmitteltyp');
$nummer = $this->input->post('nummer');
$nummer2 = $this->input->post('nummer2');
$beschreibung = $this->input->post('beschreibung');
$kaution = $this->input->post('kaution');
$betriebsmittel_id = $this->input->post('betriebsmittel_id');
$anmerkung = $this->input->post('anmerkung');
$kaution = $this->input->post('kaution');
$ausgegebenam = $this->input->post('ausgegebenam');
$retouram = $this->input->post('retouram');
$person_id = $this->input->post('person_id');
$uid = $this->input->post('uid');
$this->form_validation->set_rules('kaution', 'Kaution', 'numeric', [
'numeric' => $this->p->t('ui', 'error_fieldNotNumeric', ['field' => 'Kaution'])
// NOTE(chris): transform_kartennummer
if ($betriebsmitteltyp == 'Zutrittskarte' && $nummer)
$nummer = is_numeric($nummer) ? ltrim($nummer, "0") : hexdec(implode("", array_reverse(str_split(trim($nummer)))));
$this->db->trans_start();
if ($betriebsmitteltyp != 'Inventar') {
$found = false;
if ($nummer !== null && $betriebsmittel_id !== null) {
$result = $this->BetriebsmittelModel->load($betriebsmittel_id);
$data = $this->getDataOrTerminateWithError($result);
if ($data && current($data)->nummer == $nummer) {
$found = true;
}
}
if (!$found) {
$this->BetriebsmittelModel->addOrder('updateamum', 'DESC');
if ($betriebsmitteltyp == 'Zutrittskarte' && $nummer === null) {
$result = $this->BetriebsmittelModel->loadWhere([
'betriebsmitteltyp' => $betriebsmitteltyp,
'nummer2' => $nummer2
]);
} else {
$result = $this->BetriebsmittelModel->loadWhere([
'betriebsmitteltyp' => $betriebsmitteltyp,
'nummer' => $nummer
]);
}
$data = $this->getDataOrTerminateWithError($result);
}
if ($data) {
$data = current($data);
if ($data->nummer !== $nummer || $data->nummer2 !== $nummer2 || $data->beschreibung !== $beschreibung) {
$result = $this->BetriebsmittelModel->update($data->betriebsmittel_id, [
'nummer' => $nummer,
'nummer2' => $nummer2,
'beschreibung' => $beschreibung,
'updateamum' => date('c'),
'updatevon' => getAuthUID()
]);
$this->getDataOrTerminateWithError($result);
}
$betriebsmittel_id = $data->betriebsmittel_id;
} else {
$result = $this->BetriebsmittelModel->insert([
'betriebsmitteltyp' => $betriebsmitteltyp,
'nummer' => $nummer,
'nummer2' => $nummer2,
'beschreibung' => $beschreibung,
'reservieren' => false,
'ort_kurzbz' => null,
'insertamum' => date('c'),
'insertvon' => getAuthUID(),
]);
$betriebsmittel_id = $this->getDataOrTerminateWithError($result);
}
}
$result = $this->BetriebsmittelpersonModel->update($betriebsmittelperson_id, [
'betriebsmittel_id' => $betriebsmittel_id,
'anmerkung' => $anmerkung,
'kaution' => $kaution,
'ausgegebenam' => $ausgegebenam,
'retouram' => $retouram,
'updateamum' => date('c'),
'updatevon' => getAuthUID()
]);
$this->form_validation->set_rules('betriebsmitteltyp', 'TYP', 'required', [
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Typ'])
]);
$data = $this->getDataOrTerminateWithError($result);
$this->form_validation->set_rules('ausgegebenam', 'Ausgegeben am', 'required', [
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Ausgegeben am'])
]);
$this->db->trans_complete();
if ($this->form_validation->run() == false) {
$this->terminateWithValidationErrors($this->form_validation->error_array());
}
if ($betriebsmitteltyp == 'Zutrittskarte' && !$nummer) {
return $this->terminateWithError($this->p->t('wawi', 'error_zutrittskarteOhneNummer'), self::ERROR_TYPE_GENERAL);
}
if ($retouram && $retouram < $ausgegebenam) {
return $this->terminateWithError($this->p->t('wawi', 'error_retourdatumVorAusgabe'), self::ERROR_TYPE_GENERAL);
}
// Start DB transaction
$this->db->trans_begin();
$result = $this->BetriebsmittelpersonModel->update(
[
'betriebsmittelperson_id' => $betriebsmittelperson_id,
],
[
'person_id' => $person_id,
'uid' => $uid,
'kaution' => $kaution,
'anmerkung' => $anmerkung,
'ausgegebenam' => $ausgegebenam,
'retouram ' => $retouram,
'updatevon' => $uid_user,
'updateamum' => date('c')
]
);
if ($this->db->trans_status() === false || isError($result)) {
$this->db->trans_rollback();
return $this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
}
$result = $this->BetriebsmittelModel->update(
[
'betriebsmittel_id' => $betriebsmittel_id
],
[
'betriebsmitteltyp' => $betriebsmitteltyp,
'nummer' => $nummer,
'nummer2' => $nummer2,
'beschreibung' => $beschreibung,
'anmerkung' => $anmerkung,
'updatevon' => $uid_user,
'updateamum' => date('c')
]
);
if ($this->db->trans_status() === false || isError($result)) {
$this->db->trans_rollback();
return $this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
}
$this->db->trans_commit();
return $this->terminateWithSuccess(true);
$this->terminateWithSuccess(true);
}
public function loadBetriebsmittel($betriebsmittelperson_id)
@@ -274,10 +377,10 @@ class BetriebsmittelP extends FHCAPI_Controller
public function loadInventarliste($searchString)
{
$result = $this->BetriebsmittelModel->loadInventarliste($searchString);
if (isError($result)) {
$this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
}
$this->terminateWithSuccess($result ?: []);
$data = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess($data);
}
}
+62
View File
@@ -67,6 +67,68 @@ abstract class Auth_Controller extends FHC_Controller
}
}
/**
* Checks for Permissions depending if the given person is a
* Mitarbeiter and/or Student
* and exits/outputs an error if they are not met.
*
* @param integer $person_id
* @param array $permMa Perms if the person is a Mitarbeiter
* @param array $permStud Perms if the person is a Student
*
* @return void
*/
protected function checkPermissionsForPerson($person_id, $permMa, $permStud)
{
$res = $this->hasPermissionsForPerson($person_id, $permMa, $permStud);
if ($res) {
$perm = array_keys(array_flip(array_merge($res|1 ? $permMa : [], $res|2 ? $permStud : [])));
$this->_outputAuthError([$this->router->method => $perm]);
}
}
/**
* Checks for Permissions depending if the given person is a
* Mitarbeiter and/or Student
* and returns the result.
*
* @param integer $person_id
* @param array $permMa Perms if the person is a Mitarbeiter
* @param array $permStud Perms if the person is a Student
*
* @return boolean
*/
protected function hasPermissionsForPerson($person_id, $permMa, $permStud)
{
$res = 0;
$this->load->model('person/Person_model', 'PersonModel');
$this->PersonModel->addJoin('public.tbl_benutzer', 'person_id');
$this->PersonModel->addJoin('public.tbl_mitarbeiter', 'uid = mitarbeiter_uid');
$result = $this->PersonModel->load($person_id);
if (hasData($result)) {
if ($this->permissionlib->isEntitled(['a' => $permMa], 'a'))
return 0;
$res = 1;
}
$this->PersonModel->addJoin('public.tbl_prestudent', 'person_id');
$result = $this->PersonModel->load($person_id);
if (hasData($result)) {
$permStudConverted = [];
foreach (getData($result) as $row) {
foreach ($permStud as $k => $v) {
if (!isset($permStudConverted[$k])) {
$permStudConverted[$k] = $this->permissionlib->convertAccessType($v);
}
if ($this->permissionlib->isBerechtigt($permStudConverted[$k][0], $permStudConverted[$k][1], $row->studiengang_kz))
return 0;
}
}
$res += 2;
}
return $res;
}
/**
* Outputs an error message and sets the HTTP Header.
* This function is protected so that it can be overwritten.
+19 -13
View File
@@ -147,19 +147,7 @@ class PermissionLib
if (strpos($permissions[$pCounter], PermissionLib::PERMISSION_SEPARATOR) !== false)
{
// Retrieves permission and required access type from the $requiredPermissions array
list($permission, $requiredAccessType) = explode(PermissionLib::PERMISSION_SEPARATOR, $permissions[$pCounter]);
$accessType = '';
// Set the access type
if (strpos($requiredAccessType, PermissionLib::READ_RIGHT) !== false)
{
$accessType = PermissionLib::SELECT_RIGHT; // S
}
if (strpos($requiredAccessType, PermissionLib::WRITE_RIGHT) !== false)
{
$accessType .= PermissionLib::REPLACE_RIGHT.PermissionLib::DELETE_RIGHT; // UID
}
list($permission, $accessType) = $this->convertAccessType($permissions[$pCounter]);
if (!isEmptyString($accessType)) // if compliant
{
@@ -209,6 +197,24 @@ class PermissionLib
return $checkPermissions;
}
/**
* Retrieves permission and required access type from the newly formatted permission string
*
* @param string $permission
*
* @return array
*/
public function convertAccessType($permission)
{
list($permission, $reqAccessType) = explode(PermissionLib::PERMISSION_SEPARATOR, $permission);
$accessType = '';
if (strpos($reqAccessType, PermissionLib::READ_RIGHT) !== false)
$accessType = PermissionLib::SELECT_RIGHT;
if (strpos($reqAccessType, PermissionLib::WRITE_RIGHT) !== false)
$accessType = PermissionLib::REPLACE_RIGHT.PermissionLib::DELETE_RIGHT;
return [$permission, $accessType];
}
/**
* Checks if at least one of the permissions given as parameter (requiredPermissions) belongs to the authenticated user
* It checks the given permissions against a given method (controller method name) and a given permission type (R and/or W)
@@ -109,7 +109,7 @@ class Betriebsmittelperson_model extends DB_Model
case 'betriebsmittelperson_id':
$cond = 'bmp.betriebsmittelperson_id';
break;
default:
default:
return error("ID nicht gültig");
}
@@ -125,4 +125,20 @@ class Betriebsmittelperson_model extends DB_Model
return $this->execQuery($query, array($id));
}
/**
* Perform a loadWhere on the vw_betriebsmittelperson DB View
*
* @param array $where
*
* @return stdClass
*/
public function loadViewWhere($where)
{
$table = $this->dbTable;
$this->dbTable = 'public.vw_betriebsmittelperson';
$result = $this->loadWhere($where);
$this->dbTable = $table;
return $result;
}
}
+4 -5
View File
@@ -2,16 +2,16 @@ export default {
getAllBetriebsmittel(url, config, params){
return this.$fhcApi.get('api/frontend/v1/betriebsmittel/betriebsmittelP/getAllBetriebsmittel/' + params.type + '/' + params.id);
},
addNewBetriebsmittel(person_id, formData) {
return this.$fhcApi.post('api/frontend/v1/betriebsmittel/betriebsmittelP/addNewBetriebsmittel/' +
addNewBetriebsmittel(form, person_id, formData) {
return this.$fhcApi.post(form, 'api/frontend/v1/betriebsmittel/betriebsmittelP/addNewBetriebsmittel/' +
person_id, formData
);
},
loadBetriebsmittel(betriebsmittelperson_id){
return this.$fhcApi.post('api/frontend/v1/betriebsmittel/betriebsmittelP/loadBetriebsmittel/' + betriebsmittelperson_id);
},
updateBetriebsmittel(betriebsmittelperson_id, formData) {
return this.$fhcApi.post('api/frontend/v1/betriebsmittel/betriebsmittelP/updateBetriebsmittel/' + betriebsmittelperson_id,
updateBetriebsmittel(form, betriebsmittelperson_id, formData) {
return this.$fhcApi.post(form, 'api/frontend/v1/betriebsmittel/betriebsmittelP/updateBetriebsmittel/' + betriebsmittelperson_id,
formData);
},
deleteBetriebsmittel(betriebsmittelperson_id){
@@ -21,7 +21,6 @@ export default {
return this.$fhcApi.get('api/frontend/v1/betriebsmittel/betriebsmittelP/getTypenBetriebsmittel/');
},
loadInventarliste(query){
console.log(query);
return this.$fhcApi.get('api/frontend/v1/betriebsmittel/betriebsmittelP/loadInventarliste/' + query);
}
}
@@ -1,19 +1,15 @@
import VueDatePicker from '../vueDatepicker.js.php';
import {CoreFilterCmpt} from "../filter/Filter.js";
import PvAutoComplete from "../../../../index.ci.php/public/js/components/primevue/autocomplete/autocomplete.esm.min.js";
import BsModal from "../Bootstrap/Modal.js";
import FormForm from '../Form/Form.js';
import CoreForm from '../Form/Form.js';
import FormInput from '../Form/Input.js';
export default {
components: {
CoreFilterCmpt,
VueDatePicker,
BsModal,
FormForm,
FormInput,
PvAutoComplete
CoreForm,
FormInput
},
inject: {
cisRoot: {
@@ -52,11 +48,11 @@ export default {
{title: "Anmerkung", field: "anmerkung", visible: false},
{title: "Retourdatum", field: "format_retour", width: 128},
{title: "Beschreibung", field: "beschreibung"},
{title: "Uid", field: "uid", width: 87},
{title: "UID", field: "uid", width: 87},
{title: "Kaution", field: "kaution", visible: false},
{title: "Ausgabedatum", field: "format_ausgabe", width: 144},
{title: "Betriebsmittel_id", field: "betriebsmittel_id", visible: false},
{title: "Betriebsmittelperson_id", field: "betriebsmittelperson_id", visible: false},
{title: "Ausgabedatum", field: "format_ausgabe", width: 144, visible: false},
{title: "Betriebsmittel ID", field: "betriebsmittel_id", visible: false},
{title: "Betriebsmittelperson ID", field: "betriebsmittelperson_id", visible: false},
{
title: 'Aktionen', field: 'actions',
minWidth: 150, // Ensures Action-buttons will be always fully displayed
@@ -142,11 +138,9 @@ export default {
}
}
],
betriebsmittelData: {},
betriebsmittelperson_id : null,
listBetriebsmitteltyp: [],
formData: {
ausgegebenam : this.getDefaultDate(),
ausgegebenam : new Date(),
betriebsmitteltyp: 'Zutrittskarte'
},
statusNew: true,
@@ -154,95 +148,89 @@ export default {
}
},
watch: {
uid() {
this.$refs.table.tabulator.setData(this.endpoint.getAllBetriebsmittel + '/' + this.typeId + '/' + this.id);
id() {
this.$refs.table.tabulator.setData('dummy', {type: this.typeId, id: this.id});
}
},
methods: {
actionEditBetriebsmittel(betriebsmittelperson_id) {
this.statusNew = false;
this.loadBetriebsmittel(betriebsmittelperson_id);
this.$refs.betriebsmittelModal.show();
this
.loadBetriebsmittel(betriebsmittelperson_id)
.then(this.$refs.betriebsmittelModal.show);
},
actionNewBetriebsmittel() {
this.resetModal();
this.$refs.betriebsmittelModal.show();
this.statusNew = true;
this.formData.ausgegebenam = this.getDefaultDate();
this.reload();
},
actionDeleteBetriebsmittel(betriebsmittelperson_id) {
this.loadBetriebsmittel(betriebsmittelperson_id).then(() => {
this.$refs.deleteBetriebsmittelModal.show();
});
this.$fhcAlert
.confirmDelete()
.then(result => result
? betriebsmittelperson_id
: Promise.reject({handled: true}))
.then(this.endpoint.deleteBetriebsmittel)
.then(result => {
this.$fhcAlert.alertSuccess(this.$p.t('ui', 'successDelete'));
window.scrollTo(0, 0);
this.reload();
})
.catch(this.$fhcAlert.handleSystemError);
},
addNewBetriebsmittel() {
//just append uid to formdata
this.formData.uid = this.uid;
return this.endpoint.addNewBetriebsmittel(this.id, this.formData)
if (this.formData.betriebsmitteltyp == 'Inventar')
this.formData.betriebsmittel_id = this.formData.inventarData?.betriebsmittel_id;
return this.endpoint
.addNewBetriebsmittel(this.$refs.betriebsmittelData, this.id, this.formData)
.then(response => {
this.$fhcAlert.alertSuccess(this.$p.t('ui', 'successSave'));
this.hideModal('betriebsmittelModal');
this.$refs.betriebsmittelModal.hide();
this.resetModal();
}).catch(this.$fhcAlert.handleSystemError)
.finally(() => {
window.scrollTo(0, 0);
this.reload();
});
},
deleteBetriebsmittel(betriebsmittelperson_id) {
return this.endpoint.deleteBetriebsmittel(betriebsmittelperson_id)
.then(
result => {
this.$fhcAlert.alertSuccess(this.$p.t('ui', 'successDelete'));
this.hideModal('deleteBetriebsmittelModal');
this.resetModal();
})
.catch(this.$fhcAlert.handleSystemError)
.finally(() => {
window.scrollTo(0, 0);
this.reload();
});
})
.catch(this.$fhcAlert.handleSystemError);
},
updateBetriebsmittel(betriebsmittelperson_id) {
this.formData.uid = this.uid;
return this.endpoint.updateBetriebsmittel(betriebsmittelperson_id, this.formData)
.then(response => {
this.$fhcAlert.alertSuccess(this.$p.t('ui', 'successSave'));
this.hideModal('betriebsmittelModal');
this.resetModal();
}).catch(this.$fhcAlert.handleSystemError)
.finally(() => {
if (this.formData.betriebsmitteltyp == 'Inventar')
this.formData.betriebsmittel_id = this.formData.inventarData?.betriebsmittel_id;
return this.endpoint
.updateBetriebsmittel(this.$refs.betriebsmittelData, betriebsmittelperson_id, this.formData)
.then(response => {
this.$fhcAlert.alertSuccess(this.$p.t('ui', 'successSave'));
this.$refs.betriebsmittelModal.hide();
this.resetModal();
window.scrollTo(0, 0);
this.reload();
});
})
.catch(this.$fhcAlert.handleSystemError);
},
loadBetriebsmittel(betriebsmittelperson_id) {
this.resetModal();
this.statusNew = false;
return this.endpoint.loadBetriebsmittel(betriebsmittelperson_id)
.then(result => result.data)
return this.endpoint
.loadBetriebsmittel(betriebsmittelperson_id)
.then(result => {
this.formData = result;
this.formData = result.data;
})
.catch(this.$fhcAlert.handleSystemError);
},
searchInventar(event) {
const encodedQuery = encodeURIComponent(event.query);
return this.endpoint.loadInventarliste(encodedQuery)
return this.endpoint
.loadInventarliste(encodedQuery)
.then(result => {
this.filteredInventar = result.data.retval;
this.filteredInventar = result.data;
});
},
reload() {
this.$refs.table.reloadTable();
},
hideModal(modalRef) {
this.$refs[modalRef].hide();
},
resetModal() {
this.formData = {};
this.formData.ausgegebenam = this.getDefaultDate();
this.formData.ausgegebenam = new Date();
this.formData.retouram = null;
this.formData.betriebsmitteltyp = null;
this.formData.nummer = null;
@@ -250,34 +238,19 @@ export default {
this.formData.kaution = null;
this.formData.anmerkung = null;
this.formData.beschreibung = null;
this.betriebsmittelperson_id = {};
this.statusNew = true;
},
getDefaultDate() {
const today = new Date();
return today;
}
},
created(){
return this.endpoint.getTypenBetriebsmittel()
.then(result => result.data)
created() {
return this.endpoint
.getTypenBetriebsmittel()
.then(result => {
this.listBetriebsmitteltyp = result;
this.listBetriebsmitteltyp = result.data;
})
.catch(this.$fhcAlert.handleSystemError);
},
template: `
<div class="core-betriebsmittel h-100 d-flex flex-column">
<!--Modal: deleteBetriebsmittelModal-->
<BsModal ref="deleteBetriebsmittelModal">
<template #title>{{$p.t('ui', 'betriebsmittel_delete')}}</template>
<template #default><p>{{$p.t('ui', 'betriebsmittel_confirm_delete')}}</p></template>
<template #footer>
<button ref="Close" type="button" class="btn btn-primary" @click="deleteBetriebsmittel(formData.betriebsmittelperson_id)">OK</button>
</template>
</BsModal>
<core-filter-cmpt
ref="table"
:tabulator-options="tabulatorOptions"
@@ -297,12 +270,11 @@ export default {
<p v-if="statusNew" class="fw-bold mt-3">{{$p.t('ui', 'add_betriebsmittel')}}</p>
<p v-else class="fw-bold mt-3">{{$p.t('ui', 'edit_betriebsmittel')}}</p>
</template>
<form-form class="row g-3" ref="betriebsmittelData">
<core-form class="row g-3" ref="betriebsmittelData">
<legend>Details</legend>
<div class="row mb-3">
<form-input
<div class="row mb-3">
<form-input
type="select"
:label="$p.t('global/typ')"
name="typ"
@@ -316,121 +288,119 @@ export default {
>
{{entry.beschreibung}}
</option>
</form-input>
</div>
</form-input>
</div>
<div v-if="formData.betriebsmitteltyp == 'Inventar'" class="row mb-3">
<form-input
type="autocomplete"
:label="$p.t('wawi/inventarnummer')"
name="betriebsmittel_id"
v-model="formData.inventarData"
option-label="dropdowntext"
:suggestions="filteredInventar"
@complete="searchInventar"
:min-length="3"
>
</form-input>
</div>
<div v-else-if="formData.inventarnummer" class="row mb-3">
<form-input
type="text"
:label="$p.t('wawi/inventarnummer')"
name="inventarnummer"
v-model="formData.inventarnummer"
:disabled="!statusNew"
>
</form-input>
</div>
<div v-if="formData.betriebsmitteltyp == 'Inventar'" class="row mb-3">
<form-input
type="autocomplete"
:label="$p.t('wawi/inventarnummer')"
name="inventarnummer"
v-model="formData.inventarData"
optionLabel="dropdowntext"
:suggestions="filteredInventar"
@complete="searchInventar"
minLength="3"
<div v-if="formData.betriebsmitteltyp!='Inventar' && !formData.inventarnummer" class="row mb-3">
<form-input
type="text"
:label="$p.t('wawi/nummer')"
name="nummer"
v-model="formData['nummer']"
>
</form-input>
</div>
<div v-else-if="formData.inventarnummer" class="row mb-3">
<form-input
type="text"
:label="$p.t('wawi/inventarnummer')"
name="inventarnummer"
v-model="formData.inventarnummer"
:disabled="!statusNew"
>
</form-input>
</div>
<div v-if="formData.betriebsmitteltyp!='Inventar' && !formData.inventarnummer" class="row mb-3">
<form-input
type="text"
:label="$p.t('wawi/nummer')"
name="nummer"
v-model="formData['nummer']"
>
</form-input>
</div>
<div v-if="formData.betriebsmitteltyp!='Inventar' && !formData.inventarnummer" class="row mb-3">
<form-input
type="text"
:label="$p.t('wawi/nummer') + ' 2'"
name="nummer2"
v-model="formData['nummer2']"
>
</form-input>
</div>
</form-input>
</div>
<div v-if="formData.betriebsmitteltyp!='Inventar'" class="row mb-3">
<form-input
type="textarea"
:label="$p.t('global/beschreibung')"
name="beschreibung"
v-model="formData['beschreibung']"
:disabled="formData.inventarnummer"
<div v-if="formData.betriebsmitteltyp!='Inventar' && !formData.inventarnummer" class="row mb-3">
<form-input
type="text"
:label="$p.t('wawi/nummer') + ' 2'"
name="nummer2"
v-model="formData['nummer2']"
>
</form-input>
</div>
<div class="row mb-3">
<form-input
type="text"
:label="$p.t('infocenter/kaution')"
name="kaution"
v-model="formData['kaution']"
</form-input>
</div>
<div v-if="formData.betriebsmitteltyp!='Inventar'" class="row mb-3">
<form-input
type="textarea"
:label="$p.t('global/beschreibung')"
name="beschreibung"
v-model="formData['beschreibung']"
:disabled="formData.inventarnummer"
>
</form-input>
</div>
<div class="row mb-3">
<form-input
type="textarea"
:label="$p.t('global/anmerkung')"
name="anmerkung"
v-model="formData['anmerkung']"
>
</form-input>
</div>
<div class="row mb-3">
<form-input
type="DatePicker"
:label="$p.t('wawi/ausgegebenam')"
name="datum"
v-model="formData['ausgegebenam']"
auto-apply
:enable-time-picker="false"
format="dd.MM.yyyy"
preview-format="dd.MM.yyyy"
:teleport="true"
></form-input>
</div>
<div class="row mb-3">
<form-input
type="DatePicker"
:label="$p.t('wawi/retouram')"
name="datum"
v-model="formData['retouram']"
auto-apply
:enable-time-picker="false"
format="dd.MM.yyyy"
preview-format="dd.MM.yyyy"
:teleport="true"
></form-input>
</div>
</form-form>
</form-input>
</div>
<template #footer>
<button v-if="statusNew" ref="Close" type="button" class="btn btn-primary" @click="addNewBetriebsmittel()">{{$p.t('ui', 'speichern')}}</button>
<button v-else ref="Close" type="button" class="btn btn-primary" @click="updateBetriebsmittel(formData.betriebsmittelperson_id)">{{$p.t('ui', 'speichern')}}</button>
</template>
<div class="row mb-3">
<form-input
type="text"
:label="$p.t('infocenter/kaution')"
name="kaution"
v-model="formData['kaution']"
>
</form-input>
</div>
<div class="row mb-3">
<form-input
type="textarea"
:label="$p.t('global/anmerkung')"
name="anmerkung"
v-model="formData['anmerkung']"
>
</form-input>
</div>
<div class="row mb-3">
<form-input
type="DatePicker"
:label="$p.t('wawi/ausgegebenam')"
name="datum"
v-model="formData['ausgegebenam']"
auto-apply
:enable-time-picker="false"
format="dd.MM.yyyy"
preview-format="dd.MM.yyyy"
:teleport="true"
>
</form-input>
</div>
<div class="row mb-3">
<form-input
type="DatePicker"
:label="$p.t('wawi/retouram')"
name="datum"
v-model="formData['retouram']"
auto-apply
:enable-time-picker="false"
format="dd.MM.yyyy"
preview-format="dd.MM.yyyy"
:teleport="true"
>
</form-input>
</div>
</core-form>
<template #footer>
<button type="button" class="btn btn-primary" @click="statusNew ? addNewBetriebsmittel() : updateBetriebsmittel(formData.betriebsmittelperson_id)">{{$p.t('ui', 'speichern')}}</button>
</template>
</bs-modal>
</div>`
}
+40
View File
@@ -2522,6 +2522,26 @@ $phrases = array(
)
)
),
array(
'app' => 'core',
'category' => 'person',
'phrase' => 'error_uidNotInPerson',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Die angegebene UID passt nicht zu der angegebenen Person',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Given UID is not assigned to the given Person',
'description' => '',
'insertvon' => 'system'
)
)
),
//**************** CORE/lehre
array(
@@ -27016,6 +27036,26 @@ array(
)
)
),
array(
'app' => 'core',
'category' => 'wawi',
'phrase' => 'error_bmZutrittskarteOccupied',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Diese Zutrittskarte ist bereits ausgegeben an: {vorname} {nachname} ({uid})',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'This access card has already been issued to: {vorname} {nachname} ({uid})',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'wawi',