mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-06-01 12:19:28 +00:00
Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 862bdd94d7 |
@@ -36,7 +36,9 @@ class Ort extends FHCAPI_Controller
|
||||
'ContentID' => self::PERM_LOGGED,
|
||||
'getOrtKurzbzContent' => self::PERM_LOGGED,
|
||||
'getRooms' => self::PERM_LOGGED,
|
||||
'getTypes' => self::PERM_LOGGED
|
||||
'getTypes' => self::PERM_LOGGED,
|
||||
'getRoomsWithEmployeesAssigned' => 'basis/ort:r',
|
||||
'getEmployeesWithRoomAssigned' => 'basis/ort:r'
|
||||
]);
|
||||
|
||||
$this->load->model('ressource/Ort_model', 'OrtModel');
|
||||
@@ -174,5 +176,42 @@ class Ort extends FHCAPI_Controller
|
||||
|
||||
$this->terminateWithSuccess($content);
|
||||
}
|
||||
|
||||
public function getRoomsWithEmployeesAssigned($ort_kurzbz=null)
|
||||
{
|
||||
$res = $this->OrtModel->getRoomsWithEmployeesAssigned($ort_kurzbz);
|
||||
|
||||
if (isError($res))
|
||||
{
|
||||
$this->terminateWithError(getError($res));
|
||||
}
|
||||
|
||||
$data = hasData($res) ? getData($res) : [];
|
||||
$this->json_decode_db_res($data);
|
||||
$this->terminateWithSuccess($data);
|
||||
}
|
||||
|
||||
public function getEmployeesWithRoomAssigned($mitarbeiter_uid=null)
|
||||
{
|
||||
$res = $this->OrtModel->getEmployeesWithRoomAssigned($mitarbeiter_uid);
|
||||
|
||||
if (isError($res))
|
||||
{
|
||||
$this->terminateWithError(getError($res));
|
||||
}
|
||||
|
||||
$data = hasData($res) ? getData($res) : [];
|
||||
$this->json_decode_db_res($data);
|
||||
$this->terminateWithSuccess($data);
|
||||
}
|
||||
|
||||
protected function json_decode_db_res(&$data)
|
||||
{
|
||||
array_walk($data, function($item, $key) {
|
||||
isset($item->employees) && $item->employees = json_decode($item->employees);
|
||||
isset($item->employee) && $item->employee = json_decode($item->employee);
|
||||
isset($item->room) && $item->room = json_decode($item->room);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -40,9 +40,7 @@ abstract class AbstractBestandteil implements IValidation
|
||||
|
||||
if( is_bool($new_value) && ($old_value !== $new_value) ) {
|
||||
$this->modifiedcolumns[$columnname] = $columnname;
|
||||
} else if(is_null($old_value) xor is_null($new_value)) {
|
||||
$this->modifiedcolumns[$columnname] = $columnname;
|
||||
} else if($old_value != $new_value) {
|
||||
} else if($old_value != $new_value) {
|
||||
$this->modifiedcolumns[$columnname] = $columnname;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -137,25 +137,19 @@ EOTXT;
|
||||
return parent::__toString() . $txt;
|
||||
}
|
||||
|
||||
public function validate()
|
||||
/* public function validate()
|
||||
{
|
||||
$value = $this->vordienstzeit;
|
||||
|
||||
if ($value === null || $value === '') {
|
||||
$result = null; // allow null value
|
||||
} else {
|
||||
$result = filter_var($value, FILTER_VALIDATE_INT, [
|
||||
'options' => [
|
||||
'min_range' => 0,
|
||||
'max_range' => 100
|
||||
]
|
||||
]);
|
||||
|
||||
if ($result === false) {
|
||||
$this->validationerrors[] = 'Vordienstjahre muss eine ganze Zahl (0 bis 100) enthalten oder leer sein.';
|
||||
}
|
||||
if( !(filter_var($this->tage, FILTER_VALIDATE_INT,
|
||||
array(
|
||||
'options' => array(
|
||||
'min_range' => 1,
|
||||
'max_range' => 50
|
||||
)
|
||||
)
|
||||
)) ) {
|
||||
$this->validationerrors[] = 'Urlaubsanspruch muss eine Tagesanzahl im Bereich 1 bis 50 sein.';
|
||||
}
|
||||
|
||||
return parent::validate();
|
||||
}
|
||||
} */
|
||||
}
|
||||
|
||||
@@ -32,4 +32,124 @@ class Ort_model extends DB_Model
|
||||
|
||||
}
|
||||
|
||||
public function getRoomsWithEmployeesAssigned($ort_kurzbz=null)
|
||||
{
|
||||
$ort_kurzbz_clause = is_null($ort_kurzbz)
|
||||
? ''
|
||||
: 'and r.ort_kurzbz = ' . $this->escape($ort_kurzbz);
|
||||
$sql = <<<EOSQL
|
||||
{$this->roomEmployeesCTEs()}
|
||||
|
||||
select
|
||||
r.rauminfo as room,
|
||||
mir.ma_count as employee_count,
|
||||
mir.mas_in_room as employees
|
||||
from
|
||||
roominfo r
|
||||
join
|
||||
mas_in_room mir on r.ort_kurzbz = mir.ort_kurzbz
|
||||
where
|
||||
1=1
|
||||
{$ort_kurzbz_clause}
|
||||
order by
|
||||
mir.ma_count DESC
|
||||
EOSQL;
|
||||
|
||||
return $this->execReadOnlyQuery($sql);
|
||||
}
|
||||
|
||||
public function getEmployeesWithRoomAssigned($mitarbeiter_uid=null)
|
||||
{
|
||||
$mtarbeiter_uid_clause = is_null($mitarbeiter_uid)
|
||||
? ''
|
||||
: 'and aer.mitarbeiter_uid = ' . $this->escape($mitarbeiter_uid);
|
||||
$sql = <<<EOSQL
|
||||
{$this->roomEmployeesCTEs()}
|
||||
|
||||
select
|
||||
m.mainfo as employee,
|
||||
r.rauminfo as room
|
||||
from
|
||||
active_employee_room aer
|
||||
join
|
||||
roominfo r on aer.ort_kurzbz = r.ort_kurzbz
|
||||
join
|
||||
mainfo m on aer.mitarbeiter_uid = m.mitarbeiter_uid
|
||||
where
|
||||
1=1
|
||||
{$mtarbeiter_uid_clause}
|
||||
EOSQL;
|
||||
|
||||
return $this->execReadOnlyQuery($sql);
|
||||
}
|
||||
|
||||
protected function roomEmployeesCTEs()
|
||||
{
|
||||
return <<<EOCTES
|
||||
with active_employee_room as (
|
||||
select
|
||||
tm.mitarbeiter_uid,
|
||||
tm.ort_kurzbz,
|
||||
td.vertragsart_kurzbz
|
||||
from
|
||||
public.tbl_mitarbeiter tm
|
||||
join
|
||||
hr.tbl_dienstverhaeltnis td
|
||||
on
|
||||
td.mitarbeiter_uid = tm.mitarbeiter_uid
|
||||
and NOW() between COALESCE(td.von, '1970-01-01') and coalesce(td.bis, '2170-12-31')
|
||||
and td.mitarbeiter_uid not like '_Dummy%'
|
||||
),
|
||||
roominfo as (
|
||||
select
|
||||
o.ort_kurzbz,
|
||||
json_build_object(
|
||||
'ort_kurzbz', o.ort_kurzbz,
|
||||
'bezeichnung', o.bezeichnung,
|
||||
'planbezeichnung', o.planbezeichnung,
|
||||
'max_person', o.max_person,
|
||||
'aktiv', o.aktiv
|
||||
) as rauminfo
|
||||
from
|
||||
public.tbl_ort o
|
||||
),
|
||||
mainfo as (
|
||||
select
|
||||
tm.mitarbeiter_uid,
|
||||
tm.ort_kurzbz,
|
||||
json_build_object(
|
||||
'mitarbeiter_uid', tm.mitarbeiter_uid,
|
||||
'vorname', tp.vorname,
|
||||
'nachname', tp.nachname,
|
||||
'vertragsart_kurzbz', td.vertragsart_kurzbz
|
||||
) as mainfo
|
||||
from
|
||||
public.tbl_mitarbeiter tm
|
||||
join
|
||||
public.tbl_benutzer b on b.uid = tm.mitarbeiter_uid and b.aktiv = true
|
||||
join
|
||||
public.tbl_person tp on tp.person_id = b.person_id
|
||||
join
|
||||
hr.tbl_dienstverhaeltnis td
|
||||
on
|
||||
td.mitarbeiter_uid = tm.mitarbeiter_uid
|
||||
and NOW() between COALESCE(td.von, '1970-01-01') and coalesce(td.bis, '2170-12-31')
|
||||
and td.mitarbeiter_uid not like '_Dummy%'
|
||||
),
|
||||
mas_in_room as (
|
||||
select
|
||||
m.ort_kurzbz,
|
||||
count(m.mitarbeiter_uid) as ma_count,
|
||||
json_agg(m.mainfo) as mas_in_room
|
||||
from
|
||||
mainfo m
|
||||
group by
|
||||
m.ort_kurzbz
|
||||
order by
|
||||
ma_count desc
|
||||
)
|
||||
|
||||
EOCTES;
|
||||
|
||||
}
|
||||
}
|
||||
@@ -264,8 +264,8 @@ CREATE TABLE IF NOT EXISTS hr.tbl_vertragsbestandteil_lohnguide (
|
||||
stellenbezeichnung varchar(255),
|
||||
fachrichtung_kurzbz character varying(32) NOT NULL,
|
||||
modellstelle_kurzbz character varying(32) NOT NULL,
|
||||
kommentar_person text,
|
||||
kommentar_modellstelle text,
|
||||
kommentar_person varchar(255),
|
||||
kommentar_modellstelle varchar(255),
|
||||
CONSTRAINT tbl_vertragsbestandteil_lohnguide_pk PRIMARY KEY (vertragsbestandteil_id),
|
||||
CONSTRAINT tbl_vertragsbestandteil_fk FOREIGN KEY (vertragsbestandteil_id) REFERENCES hr.tbl_vertragsbestandteil (vertragsbestandteil_id) MATCH FULL ON DELETE RESTRICT ON UPDATE CASCADE,
|
||||
CONSTRAINT tbl_vertragsbestandteil_lohnguide_fachrichtung_fk FOREIGN KEY (fachrichtung_kurzbz) REFERENCES hr.tbl_lohnguide_fachrichtung (fachrichtung_kurzbz) MATCH FULL ON DELETE RESTRICT ON UPDATE CASCADE,
|
||||
|
||||
Reference in New Issue
Block a user