<?php
/**
 * Application level Controller
 *
 * This file is application-wide controller file. You can put all
 * application-wide controller-related methods here.
 *
 * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
 * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
 *
 * Licensed under The MIT License
 * For full copyright and license information, please see the LICENSE.txt
 * Redistributions of files must retain the above copyright notice.
 *
 * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
 * @link          http://cakephp.org CakePHP(tm) Project
 * @package       app.Controller
 * @since         CakePHP(tm) v 0.2.9
 * @license       http://www.opensource.org/licenses/mit-license.php MIT License
 */
App::uses('AppController', 'Controller');
App::uses('File', 'Utility');
App::uses('Api', 'Model');
App::uses('Config', 'Model');
App::uses('IniReader', 'Configure');

include "Component/RtfToHtml.php";
include "Component/HtmlToRtf/HtmlToRtf.php";


/**
 * APIController Controller
 *
 * @property Api $Api
 * @property Config $Config
 * @property PaginatorComponent $Paginator
 * @property FlashComponent $Flash
 * @property SessionComponent $Session
 */
class ApiController extends AppController
{
	// Stałe dla kodów
	const KOD_RODZAJ = 301;
	const KOD_DLUGOSC = 302;
	const KOD_NOSNOSC = 303;
	const KOD_MATERIAL = 304;
	const KOD_GNIAZDO = 305;

	/**
	 * @var array
	 */
	public $uses = array('Api', 'Config');

	/** PRIVATE METHODS - START */

	/**
	 * _handle_response method
	 * @param array $response
	 * @return bool
	 */
	protected function _handle_response($response)
	{
		if (isset($response['bKomunikaty'])) {
			$response = $response['bKomunikaty']['bKomunikat'];
			$opis = '';

			if (isset($response[0]['bTytul']) && !empty($response[0]['bTytul'])) {
				foreach ($response as $r) {
					if (!empty($r['bTytul'])) {
						$opis .= '<b>' . $r['bTytul'] . '</b>';
						if (!empty($r['bOpis'])) {
							$opis .= ' - ' . $r['bOpis'] . '. ';
						} else {
							$opis .= '. ';
						}
						$opis .= '<br />';
					}
				}
				$this->Flash->error($opis);
			} else {
				if (!empty($response['bOpis'])) $opis = $response['bOpis'];

				if ($response['bRodzaj'] == 'Ok') {
					$this->Flash->success($response['bTytul'] . '. ' . $opis);
					return true;
				} else {
					$this->Flash->error($response['bTytul'] . '. ' . $opis);
					return false;
				}
			}
		} else {
			if (isset($response['sBody']['sFault']['sDetail']['SzczegolyBleduUslugi']['Opis'])) {
				$this->Flash->error(
					'Kod błędu: ' .
					$response['sBody']['sFault']['sDetail']['SzczegolyBleduUslugi']['Kod'] .
					'. ' .
					$response['sBody']['sFault']['sDetail']['SzczegolyBleduUslugi']['Opis']
				);

				if (isset($response['sBody']['sFault']['sDetail']['SzczegolyBleduUslugi']['Kod']) && $response['sBody']['sFault']['sDetail']['SzczegolyBleduUslugi']['Kod'] == 100) {
					$this->loadModel('Config');
					$appConfig = $this->Config->getConfig();
					$this->redirect($appConfig['local_url'] . 'login');
				}

				return false;
			}
		}
	}

	/**
	 * _handle_response_json method
	 *
	 * @param $response
	 * @return object|mixed|array
	 */
	protected function _handle_response_json($response)
	{
		$_response = array();

		if (isset($response['bKomunikaty'])) {
			$response = $response['bKomunikaty']['bKomunikat'];
			$opis = '';

			if (isset($response[0]['bTytul']) && !empty($response[0]['bTytul'])) {
				foreach ($response as $r) {
					if (!empty($r['bTytul'])) {
						$opis .= '<b>' . $r['bTytul'] . '</b>';
						if (!empty($r['bOpis'])) {
							$opis .= ' - ' . $r['bOpis'] . '. ';
						} else {
							$opis .= '. ';
						}
						$opis .= '<br />';
					}
				}
				$_response['error'] = $opis;
			} else {
				if (!empty($response['bOpis'])) $opis = $response['bOpis'];

				if ($response['bRodzaj'] == 'Ok') {
					$_response['message'] = $response['bTytul'] . '. ' . $opis;
					return $_response;
				} else {
					$_response['error'] = $response['bTytul'] . '. ' . $opis;
					return $_response;
				}
			}
		} else {
			if (isset($response['sBody']['sFault']['sDetail']['SzczegolyBleduUslugi']['Opis'])) {
				$_response['error'] = 'Kod błędu: ' .
					$response['sBody']['sFault']['sDetail']['SzczegolyBleduUslugi']['Kod'] .
					'. ' .
					$response['sBody']['sFault']['sDetail']['SzczegolyBleduUslugi']['Opis'];

				if (isset($response['sBody']['sFault']['sDetail']['SzczegolyBleduUslugi']['Kod']) && $response['sBody']['sFault']['sDetail']['SzczegolyBleduUslugi']['Kod'] == 100) {
					$_response['login'] = true;
					return $_response;
				}

				return $_response;
			} else {
				$_response['error'] = 'Błąd komunikacji';
			}
		}

		return $_response;
	}

	protected function _handle_response_json2($response)
	{
		$_response = array();

		if (isset($response['Komunikaty'])) {
			$response = $response['Komunikaty']['Komunikat'];
			$opis = '';

			if (isset($response[0]['Tytul']) && !empty($response[0]['Tytul'])) {
				foreach ($response as $r) {
					if (!empty($r['Tytul'])) {
						$opis .= '<b>' . $r['Tytul'] . '</b>';
						if (!empty($r['Opis'])) {
							$opis .= ' - ' . $r['Opis'] . '. ';
						} else {
							$opis .= '. ';
						}
						$opis .= '<br />';
					}
				}
				$_response['error'] = $opis;
			} else {
				if (!empty($response['Opis'])) $opis = $response['Opis'];

				if ($response['Rodzaj'] == 'Ok') {
					$_response['message'] = $response['Tytul'] . '. ' . $opis;
					return $_response;
				} else {
					$_response['error'] = $response['Tytul'] . '. ' . $opis;
					return $_response;
				}
			}
		} else {
			if (isset($response['Body']['Fault']['Detail']['SzczegolyBleduUslugi']['Opis'])) {
				$_response['error'] = 'Kod błędu: ' .
					$response['Body']['Fault']['Detail']['SzczegolyBleduUslugi']['Kod'] .
					'. ' .
					$response['Body']['Fault']['Detail']['SzczegolyBleduUslugi']['Opis'];

				if (isset($response['Body']['Fault']['Detail']['SzczegolyBleduUslugi']['Kod']) && $response['Body']['Fault']['Detail']['SzczegolyBleduUslugi']['Kod'] == 100) {
					$_response['login'] = true;
					return $_response;
				}

				return $_response;
			} else {
				$_response['error'] = 'Błąd komunikacji';
			}
		}

		return $_response;
	}

	/**
	 * mime_type based on file name
	 * @param $filename
	 * @return mixed|string
	 */
	protected function mime_type($filename)
	{
		$mime_types = array(
			'txt' => 'text/plain',
			'htm' => 'text/html',
			'html' => 'text/html',
			'php' => 'text/html',
			'css' => 'text/css',
			'js' => 'application/javascript',
			'json' => 'application/json',
			'xml' => 'application/xml',
			'swf' => 'application/x-shockwave-flash',
			'flv' => 'video/x-flv',
			// images
			'png' => 'image/png',
			'jpe' => 'image/jpeg',
			'jpeg' => 'image/jpeg',
			'jpg' => 'image/jpeg',
			'gif' => 'image/gif',
			'bmp' => 'image/bmp',
			'ico' => 'image/vnd.microsoft.icon',
			'tiff' => 'image/tiff',
			'tif' => 'image/tiff',
			'svg' => 'image/svg+xml',
			'svgz' => 'image/svg+xml',
			// archives
			'zip' => 'application/zip',
			'rar' => 'application/x-rar-compressed',
			'exe' => 'application/x-msdownload',
			'msi' => 'application/x-msdownload',
			'cab' => 'application/vnd.ms-cab-compressed',
			// audio/video
			'mp3' => 'audio/mpeg',
			'qt' => 'video/quicktime',
			'mov' => 'video/quicktime',
			// adobe
			'pdf' => 'application/pdf',
			'psd' => 'image/vnd.adobe.photoshop',
			'ai' => 'application/postscript',
			'eps' => 'application/postscript',
			'ps' => 'application/postscript',
			// ms office
			'doc' => 'application/msword',
			'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
			'rtf' => 'application/rtf',
			'xls' => 'application/vnd.ms-excel',
			'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
			'ppt' => 'application/vnd.ms-powerpoint',
			'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
			// open office
			'odt' => 'application/vnd.oasis.opendocument.text',
			'ods' => 'application/vnd.oasis.opendocument.spreadsheet',
		);

		$ext = explode('.', $filename);
		$ext = strtolower(array_pop($ext));
		if (array_key_exists($ext, $mime_types)) {
			return $mime_types[$ext];
		} elseif (function_exists('finfo_open')) {
			$finfo = finfo_open(FILEINFO_MIME);
			$mimetype = finfo_file($finfo, $filename);
			finfo_close($finfo);
			return $mimetype;
		} else {
			return 'application/octet-stream';
		}
	}

	/**
	 * @param $rtf string
	 * @return string
	 */
	protected function _rtf2html(&$rtf)
	{
		$rtf = str_replace("\\par&#xD;", "", $rtf);
		$rtf = preg_replace('/&#xD;/', '', $rtf);
		$rtf = preg_replace('/&#x0;/', '', $rtf);
		$reader = new RtfReader();
		$reader->Parse($rtf);
		$formatter = new RtfHtml();
		return $rtf = $formatter->Format($reader->root);
	}

	/**
	 * @param $html string
	 * @return string
	 */
	protected function _html2rtf($html)
	{
		$formatter = new \HtmlToRtf\HtmlToRtf($html);
		return $formatter->getRTF();
	}

	/**
	 * @param array $array
	 * @param string $key_name
	 * @return array
	 */
	protected function _convert_list_response(&$array = array(), $key_name)
	{
		if (!isset($array[$key_name][0]) && !empty($array[$key_name])) {
			$new_array = array();
			$new_array[$key_name][0] = $array[$key_name];
			$array = $new_array;
		}
		return $array;
	}


	/**
	 * @param $date
	 * @param bool $datetime
	 * @param bool $seconds
	 * @return string $date
	 */
	protected function _convert_to_date(&$date, $datetime = false, $seconds = false)
	{
		if ($date != null && !empty($date)) {
			$date = preg_replace('/T/', " ", $date);
			$date = new DateTime($date);
			if ($datetime) {
				if (!$seconds) {
					$date = $date->format('Y-m-d H:i');
				} else {
					$date = $date->format('Y-m-d H:i:s');
				}
			} else {
				$date = $date->format('Y-m-d');
			}
		} else {
			$date = null;
		}
		return $date;
	}

	/**
	 * @param $array array
	 * @param $keys array
	 * @param bool $datetime
	 * @param bool $seconds
	 * @return array $array
	 */
	protected function _convert_to_date_array(&$array, $keys, $datetime = false, $seconds = false)
	{
		if (!empty($array)) {
			foreach ($keys as $key) {
				if (isset($array[$key]) && $array[$key] != null && !empty($array[$key]) && !is_array($array[$key])) {
					$array[$key] = $this->_convert_to_date($array[$key], $datetime, $seconds);
				} else if (isset($array[$key]) && (empty($array[$key]) || $array[$key] == null || $array[$key] == 'null')) {
					$array[$key] = null;
				}
			}
		}
		return $array;
	}


	/**
	 * @param string $date
	 * @return DateTime|null
	 */
	protected function _date_for_request($date = null)
	{
		if ($date == null) {
			$date = new DateTime();
		} else {
			$date = new DateTime($date);
		}
		$date = $date->format('Y-m-d\TH:i:s');
		return $date;
	}


	/**
	 * @param array $array
	 * @return string
	 */
	protected function _array_2_string($array = array())
	{
		return base64_encode(json_encode($array));
	}

	/**
	 * @param $string string
	 * @return array
	 */
	protected function _string_2_array($string)
	{
		return json_decode(base64_decode($string), true);
	}

	/**
	 * @param $array array
	 * @param $from string
	 * @param $to string
	 * @return array $renamed
	 */
	protected function _rename_array_key_prefixes($array, $from, $to)
	{
		$renamed = array();
		foreach ($array as $key => $value) {
			$key = preg_replace('/' . $from . '/', $to, $key, 1);
			$renamed[$key] = $value;
		}
		return $renamed;
	}

	/**
	 * @param $input_array array
	 * @param $from string|array
	 * @param $to string|array
	 * @param $output_array array
	 * @return array
	 */
	protected function _rename_array_key_prefixes_recursive($input_array, $from, $to, &$output_array = array())
	{
		foreach ($input_array as $key => &$value) {
			if (is_array($from)) {
				foreach ($from as $k => $v) {
					if (preg_match('/' . $v . '/', $key)) {
						$key = preg_replace('/' . $v . '/', $to[$k], $key, 1);
						break;
					}
				}
			} else {
				$key = preg_replace('/' . $from . '/', $to, $key, 1);
			}
			if (is_array($value)) {
				$output_array[$key] = $this->_rename_array_key_prefixes_recursive($value, $from, $to, $output_array[$key]);
			} else {
				$output_array[$key] = $value;
			}
		}
//        debug($output_array);
//        die();
		return $output_array;
	}

	/**
	 * @param $array
	 * return array
	 */
	protected function _unset_empty_values(&$array)
	{
		if (!empty($array)) {
			foreach ($array as $key => &$value) {
				if (is_array($value)) {
					$this->_unset_empty_values($value);
				} else if ($value == '') {
					unset($array[$key]);
				}
			}
		}
		return $array;
	}

	/**
	 * changes empty array values and empty string values to passed replacement string
	 * @param $array
	 * @param $replacement string default ''
	 * return array
	 */
	protected function _replace_empty_values(&$array, $replacement = '')
	{
		if (!empty($array)) {
			foreach ($array as $key => &$value) {
				if (is_array($value)) {
					if (empty($value)) {
						$value = $replacement;
					} else {
						$this->_replace_empty_values($value, $replacement);
					}
				}
				if ($value == '' || is_null($value)) {
					$value = $replacement;
				}
			}
		}
		return $array;
	}

	/**
	 * @param $value string
	 * @return string
	 */
	protected function _checkbox_int_2_string($value)
	{
		if ($value == '0') {
			return 'false';
		} else if ($value == '1') {
			return 'true';
		}
	}

	/**
	 * @param $value string
	 * @return bool
	 */
	protected function _checkbox_string_2_bool($value)
	{
		if ($value == 'true') {
			return true;
		} else if ($value == 'false') {
			return false;
		}
	}

	/**
	 * @param $value string
	 * @return int
	 */
	protected function _checkbox_string_2_int($value)
	{
		if ($value == 'true') {
			return 1;
		} else if ($value == 'false') {
			return 0;
		}
	}

	/**
	 * @param $array
	 * @return string
	 */
	protected function _complex_array2xml($array)
	{
		$xml = '';
		foreach ($array as $key => $value) {
			if (is_int($key) || is_integer($key)) {
				$xml .= $this->_complex_array2xml($value);
			} else {
				$xml .= '<' . $key . '>';
				if (is_array($value)) {
					$xml .= $this->_complex_array2xml($value);
				} else {
					$xml .= $value;
				}
				$xml .= '</' . $key . '>';
			}
		}
		return $xml;
	}

	/**
	 * @return mixed
	 */
	protected function _getUserContexts()
	{
		if ($this->Session->check('userContexts')) {
			return $this->Session->read('userContexts');
		}
	}

	/**
	 * _generujUprawnienia method
	 * @param $zaloguj
	 */
	protected function _generujUprawnienia($zaloguj)
	{
		$_modules = array(
			'ModulZFS', 'ModulBhp', 'ModulKadry', 'ModulRejestruBezpieczenstwa', 'ModulRoot', 'ModulWiadomosci',
			'ModulRejestruWnioskow', 'ModulRejestruBadanLekarskich', 'ModulRejestruCzlonkowRodziny',
			'ModulRejestruDokumentow', 'ModulAdministracja', 'ModulPlace', 'ModulInformacjiDoWyplatyMiesiacami',
			'ModulInformacjiOstatniaWyplata', 'ModulInformacjiOstatniMiesiac', 'ModulInformacjiOstatniRok',
			'ModulInformacjiPrzychodMiesiacami', 'ModulRejestruJezykow', 'ModulRejestruKar',
			'ModulRejestruKwalifikacji', 'ModulRejestruNieobecnosci', 'ModulRejestruOcenyPracownika',
			'ModulRejestruPlanuUrlopow', 'ModulRejestruDanychOsobowych', 'ModulRejestruPrzebieguPracy',
			'ModulRejestruSzkolen', 'ModulRejestruUmowOPrace', 'ModulRejestruKar', 'ModulRejestruCzasuPracy',
			'ModulRejestruWyksztalcen', 'ModulRejestruZastepstw', 'ModulRejestruSciezekAkceptacji',
			'ModulInne', 'ModulPaskiWyplat', 'ModulPIT', 'ModulRMUA', 'ModulRejestruImportow'
		);
		$modules = array();

		foreach ($zaloguj['bUprawnienia']['cModul'] as $item) {
			$newItem = array();
			foreach ($item as $k => $value) {
				$newKey = preg_replace('/^c/', 'b', $k);
				$newItem[$newKey] = $value;
			}
			$modules[$item['cNazwaTypu']] = $newItem;
		}

//        foreach ($_modules as $m)
//        {
//            $mm = $this->Api->DajUprawnieniaPoNazwie($this->_getGid(), $m);
//            $modules[$m] = $mm;
//        }

		$this->Session->write('uprawnienia', $modules);
	}

	/**
	 * @return array|mixed
	 */
	protected function _uprawnienia()
	{
		$uprawnienia = array();
		if ($this->Session->check('uprawnienia')) {
			$uprawnienia = $this->Session->read('uprawnienia');
		}
		$this->set(compact('uprawnienia'));
		return $uprawnienia;
	}

	/**
	 * @return string current user gid
	 */
	protected function _getGid()
	{
		$gid = '';
		if ($this->Session->check('gid')) {
			$gid = $this->Session->read('gid');
		}
		return $gid;
	}

	/**
	 * @return mixed|string
	 */
	protected function _getUserGid()
	{
		$userGid = '';
		if ($this->Session->check('userGid')) {
			$userGid = $this->Session->read('userGid');
		}
		return $userGid;
	}

	/**
	 * @return mixed|string
	 */
	protected function _getRoleGid()
	{
		$roleGid = '';
		if ($this->Session->check('roleGid')) {
			$roleGid = $this->Session->read('roleGid');
		}
		return $roleGid;
	}

	/**
	 * @param null $gidRoli
	 * @return array
	 */
	protected function _daj_uzytkownikow($gidRoli = null)
	{
//        $this->Api->setDebug(true);
		if ($gidRoli == null) {
			return $this->Api->DajUzytkownikow($this->_getGid());
		} else {
			return $this->Api->DajUzytkownikow($this->_getGid(), array(
				'dat:GidRoli' => $gidRoli
			));
		}
	}

	/**
	 * @param $gid
	 * @return array
	 */
	protected function _daj_uzytkownika($gid)
	{
		return $this->Api->DajUzytkownika($this->_getGid(), $gid);
	}

	/**
	 * @param array $data
	 * @return array
	 */
	private function _dodaj_uzytkownika($data = array())
	{
		return $this->Api->DodajUzytkownika($this->_getGid(), $data);
	}

	/**
	 * @param array $data
	 * @return array
	 */
	private function _edytuj_uzytkownika($data = array())
	{
		return $this->Api->EdytujUzytkownika($this->_getGid(), $data);
	}

	/**
	 * @param $gid
	 * @return array
	 */
	private function _usun_uzytkownika($gid)
	{
		return $this->Api->UsunUzytkownika($this->_getGid(), $gid);
	}

	/**
	 * _set_message method
	 * sets single message
	 * @param array $message
	 * @return array
	 */
	protected function _set_message(&$message = array())
	{
		if (!empty($message)) {
			$this->_convert_to_date($message['bWiadomosc']['bDataPublikacji']);
			$this->_convert_to_date($message['bWiadomosc']['bDataUtworzenia']);
			$this->_convert_list_response($message['bWiadomosc']['bOdbiorcy'], 'bAdres');
			$this->_convert_list_response($message['bWiadomosc']['bOdebrali'], 'bAdres');
			if ($message['bWiadomosc']['bTresc'] != null && !empty($message['bWiadomosc']['bTresc']) && strpos($message['bWiadomosc']['bTresc'], "{\\rtf1\\") !== false) {
				$this->_rtf2html($message['bWiadomosc']['bTresc']);
			}
			if ($message['bWiadomosc']['bTrescRTF'] != null && !empty($message['bWiadomosc']['bTrescRTF']) && strpos($message['bWiadomosc']['bTrescRTF'], "{\\rtf1\\") !== false) {
				$this->_rtf2html($message['bWiadomosc']['bTrescRTF']);
			}
			$this->_convert_to_date($message['bWiadomosc']['bNadawca']['bData'], true);
			if (!empty($message['bWiadomosc']['bOdebrali'])) {
				foreach ($message['bWiadomosc']['bOdbiorcy']['bAdres'] as &$odbiorcy) {
					$odbiorcy = $this->_convert_to_date_array($odbiorcy, array('bData'), true);
				}
			}
			if (!empty($message['bWiadomosc']['bOdebrali'])) {
				foreach ($message['bWiadomosc']['bOdbiorcy']['bAdres'] as &$odebrali) {
					$odebrali = $this->_convert_to_date_array($odebrali, array('bData'), true);
				}
			}
		}
		return $message;
	}

	/**
	 * _set_messages method
	 * sets multiple messages
	 * @param array $messages
	 * @return array $messages
	 */
	protected function _set_messages(&$messages = array())
	{
		if (isset($messages['bWiadomosci']) && !empty($messages['bWiadomosci']['bWiadomosc'])) {
			$this->_convert_list_response($messages['bWiadomosci'], 'bWiadomosc');
			$dateKeys = array('bDataPublikacji', 'bDataUtworzenia', 'bDataOdebrania', 'bDataUkrycia');
			foreach ($messages['bWiadomosci']['bWiadomosc'] as &$message) {
				$message = $this->_convert_to_date_array($message, $dateKeys, true);
				$this->_convert_list_response($message['bOdbiorcy'], 'bAdres');
				$this->_convert_list_response($message['bOdebrali'], 'bAdres');
				if ($message['bTresc'] != null && !empty($message['bTresc']) && strpos($message['bTresc'], "{\\rtf1\\") !== false) {
					$this->_rtf2html($message['bTresc']);
				}
				if ($message['bTrescRTF'] != null && !empty($message['bTrescRTF']) && strpos($message['bTrescRTF'], "{\\rtf1\\") !== false) {
					$this->_rtf2html($message['bTrescRTF']);
				}
				$this->_convert_to_date($message['bNadawca']['bData'], true);
				if (!empty($message['bOdbiorcy']['bAdres'])) {
					foreach ($message['bOdbiorcy']['bAdres'] as &$odbiorca) {
						$odbiorca = $this->_convert_to_date_array($odbiorca, array('bData'), true);
					}
				}
				if (!empty($message['bOdebrali'])) {
					foreach ($message['bOdebrali']['bAdres'] as &$odebrali) {
						$odebrali = $this->_convert_to_date_array($odebrali, array('bData'), true);
					}
				}
			}
		}
		return $messages;
	}

	/**
	 * @param $gidMsg -id wiadomosci
	 * @return array message
	 */
	private function _daj_wiadomosc($gidMsg)
	{
		$message = $this->Api->DajWiadomosc($this->_getGid(), $gidMsg);
		$message['bWiadomosc']['bTrescHTML'] = html_entity_decode($message['bWiadomosc']['bTrescHTML']);
		return $this->_set_message($message);
	}

	/**
	 * @param $options array
	 * @return array
	 */
	private function _daj_wiadomosci($options = array())
	{
		if (empty($options)) {
			$messages = $this->Api->DajListeWiadomosci($this->_getGid());
		} else {
			$messages = $this->Api->DajListeWiadomosci($this->_getGid(), $options);
		}
		return $this->_set_messages($messages);
	}

	/**
	 * _profil method
	 * @param string $gid
	 * @param int|string $ne
	 * @return null|string
	 */
	private function _profil($gid, $ne)
	{
		$options = array(
			'dat:Gid' => $gid,
			'dat:Nrewid' => $ne,
		);
		$employee = $this->Api->OpiszPracownika($this->_getGid(), $options);
		return $employee;
	}

	/**
	 * _umowy_o_prace method
	 * _umowy_o_prace method
	 *
	 * @param $id
	 * @return null|string
	 */
	private function _umowy_o_prace($id, $currentYear = false)
	{
		$options = array(
			'dat:NumerEwidencyjny' => $id
		);
		$contracts = $this->Api->DajUmowyOPrace($this->_getGid(), $options);

		if (!isset($contracts['bUmowyOPrace']['bUmowaOPrace']['bStanowiskoKod'])) {
			foreach ($contracts['bUmowyOPrace']['bUmowaOPrace'] as &$contract) {
				if (is_array($contract)) {
					$contract['bPlik'] = false;
					$karta = $this->Api->DajKarteStanowiskowa($this->_getGid(), ['dat:StanowiskoKod' => $contract['bStanowiskoKod']]);
					if (isset($karta['bKarta']['bPlik']) and !empty($karta['bKarta']['bPlik'])) {
						$contract['bPlik'] = true;
					}
				}
			}
		} else {
			foreach ($contracts['bUmowyOPrace'] as &$contract) {
				if (is_array($contract)) {
					$contract['bPlik'] = false;
					$karta = $this->Api->DajKarteStanowiskowa($this->_getGid(), ['dat:StanowiskoKod' => $contract['bStanowiskoKod']]);
					if (isset($karta['bKarta']['bPlik']) and !empty($karta['bKarta']['bPlik'])) {
						$contract['bPlik'] = true;
					}
				}
			}
		}

		return $contracts;
	}

	/**
	 * @param $contracts
	 * @return mixed
	 */
	private function _umowy_o_prace_convert($contracts, $currentYear = false)
	{
		$this->_convert_list_response($contracts['bUmowyOPrace'], 'bUmowaOPrace');
		$dateKeys = array('bDataOd', 'bDataDo', 'bDataDoUmowy', 'bDataOdUmowy');
		if (!empty($contracts) && isset($contracts['bUmowyOPrace']['bUmowaOPrace'])) {
			foreach ($contracts['bUmowyOPrace']['bUmowaOPrace'] as &$contract) {
				$contract = $this->_convert_to_date_array($contract, $dateKeys);
			}
			if ($currentYear) {
				$contactArray = $contracts['bUmowyOPrace']['bUmowaOPrace'];
				$contracts['bUmowyOPrace']['bUmowaOPrace'] = array();
				foreach ($contactArray as $cc) {
					if (date('Y', strtotime($cc['bDataOd'])) == date('Y') || (date('Y', strtotime($cc['bDataDo'])) >= date('Y') || empty($cc['bDataDo']))) $contracts['bUmowyOPrace']['bUmowaOPrace'][] = $cc;
				}
			}
		}
		return $contracts;
	}


	/**
	 * _nieobecnosci method
	 * @param $id
	 * @return null|string
	 */
	private function _nieobecnosci($id, $currentYear = false)
	{
		$options = array(
			'dat:NumerEwidencyjny' => $id
		);
		$absents = $this->Api->DajNieobecnosci($this->_getGid(), $options);

		return $absents;
	}

	/**
	 * @param array $absents
	 * @return mixed|array
	 */
	private function _nieobecnosci_convert($absents, $currentYear = null)
	{
		$this->_convert_list_response($absents['bNieobecnosci'], 'bNieobecnosc');
		$dateKeys = array('bDataDo', 'bDataOd', 'bOkres');
		if (!empty($absents) && isset($absents['bNieobecnosci']['bNieobecnosc'])) {
			foreach ($absents['bNieobecnosci']['bNieobecnosc'] as &$absent) {
				$absent = $this->_convert_to_date_array($absent, $dateKeys);
			}

			if ($currentYear) {
				$absentsArray = $absents['bNieobecnosci']['bNieobecnosc'];
				$absents['bNieobecnosci']['bNieobecnosc'] = array();
				foreach ($absentsArray as $aa) {
					if (date('Y', strtotime($aa['bDataOd'])) == date('Y')) $absents['bNieobecnosci']['bNieobecnosc'][] = $aa;
				}
			}
		}

		return $absents;
	}

	/**
	 * _przebiegi_pracy method
	 * @param $id
	 * @return null|string
	 */
	private function _przebiegi_pracy($id)
	{
		$options = array(
			'dat:NumerEwidencyjny' => $id
		);
		$workflows = $this->Api->DajPrzebiegiPracy($this->_getGid(), $options);

		return $workflows;
	}

	/**
	 * @param $workflows
	 * @return mixed
	 */
	private function _przebiegi_pracy_convert($workflows)
	{
		$dateKeys = array('bDataDo', 'bDataOd');
		$this->_convert_list_response($workflows['bPrzebiegiPracy'], 'bPrzebiegPracy');
		if (!empty($workflows) && isset($workflows['bPrzebiegiPracy']['bPrzebiegPracy'])) {
			foreach ($workflows['bPrzebiegiPracy']['bPrzebiegPracy'] as &$workflow) {
				$workflow = $this->_convert_to_date_array($workflow, $dateKeys);
			}
		}

		return $workflows;
	}

	/**
	 * _wyksztalcenia method
	 * @param $id
	 * @return null|string
	 */
	private function _wyksztalcenia($id)
	{
		$options = array(
			'dat:NumerEwidencyjny' => $id
		);
		$educations = $this->Api->DajWyksztalcenia($this->_getGid(), $options);

		return $educations;
	}

	/**
	 * @param $educations
	 * @return mixed
	 */
	private function _wyksztalcenia_convert($educations)
	{
		$this->_convert_list_response($educations['bWyksztalcenia'], 'bWyksztalcenie');
		$dateKeys = array('bDataDo', 'bDataOd', 'bDataUkonczenia');
		if (!empty($educations) && isset($educations['bWyksztalcenia']['bWyksztalcenie'])) {
			foreach ($educations['bWyksztalcenia']['bWyksztalcenie'] as &$education) {
				$education = $this->_convert_to_date_array($education, $dateKeys);
			}
		}

		return $educations;
	}

	/**
	 * _badania method
	 * @param $id
	 * @return null|string
	 */
	private function _badania($id, $currentYear = false)
	{
		$options = array(
			'dat:NumerEwidencyjny' => $id
		);
		$badania = $this->Api->DajBadaniaLekarskie($this->_getGid(), $options);

		return $badania;
	}

	/**
	 * @param $badania
	 * @param bool $currentYear
	 * @return mixed
	 */
	private function _badania_convert($badania, $currentYear = false)
	{
		$this->_convert_list_response($badania['bBadaniaLekarskie'], 'bBadanieLekarskie');
		$this->_convert_list_response($badania['bInformacjeDodatkowe'], 'bInformacjaDodatkowa');
		if (!empty($badania) && isset($badania['bBadaniaLekarskie']['bBadanieLekarskie'])) {
			foreach ($badania['bBadaniaLekarskie']['bBadanieLekarskie'] as &$badanie) {
				$badanie = $this->_convert_to_date_array($badanie, array('bDataBadania', 'bDataWaznosci'));
			}

			if ($currentYear) {
				$badaniaArray = $badania['bBadaniaLekarskie']['bBadanieLekarskie'];
				$badania['bBadaniaLekarskie']['bBadanieLekarskie'] = array();
				foreach ($badaniaArray as $bb) {
					if (date('Y', strtotime($bb['bDataBadania'])) == date('Y')) $badania['bBadaniaLekarskie']['bBadanieLekarskie'][] = $bb;
				}
			}
		}

		return $badania;
	}

	/**
	 * _szkolenia method
	 * @param $id
	 * @return null|string
	 */
	private function _szkolenia($id, $currentYear = false)
	{
		$options = array(
			'dat:NumerEwidencyjny' => $id
		);
		$trainings = $this->Api->DajSzkolenia($this->_getGid(), $options);
		$this->_convert_list_response($trainings['bSzkolenia'], 'bSzkolenie');
		if (!empty($trainings) && isset($trainings['bSzkolenia']['bSzkolenie'])) {
			foreach ($trainings['bSzkolenia']['bSzkolenie'] as &$training) {
				$training = $this->_convert_to_date_array($training, array('bDataOd', 'bDataDo', 'bDataWaznosci'));
			}

			if ($currentYear) {
				$trainingArray = $trainings['bSzkolenia']['bSzkolenie'];
				$trainings['bSzkolenia']['bSzkolenie'] = array();
				foreach ($trainingArray as $tt) {
					if (date('Y', strtotime($tt['bDataOd'])) == date('Y')) $trainings['bSzkolenia']['bSzkolenie'][] = $tt;
				}
			}
		}
		return $trainings;
	}

	/**
	 * _kary method
	 * @param $id
	 * @return null|string
	 */
	private function _kary($id)
	{
		$options = array(
			'dat:NumerEwidencyjny' => $id
		);
		$punishes = $this->Api->DajKary($this->_getGid(), $options);
		$this->_convert_list_response($punishes['bKary'], 'bKara');
		if (!empty($punishes) && isset($punishes['bKary']['bKara'])) {
			foreach ($punishes['bKary']['bKara'] as &$punish) {
				$punish = $this->_convert_to_date_array($punish, array('bDataOd', 'bDataDo'));
			}
		}
		return $punishes;
	}

	/**
	 * _jezyki method
	 * @param $id
	 * @return null|string
	 */
	private function _jezyki($id)
	{
		$options = array(
			'dat:NumerEwidencyjny' => $id
		);
		$langs = $this->Api->DajJezyki($this->_getGid(), $options);
		$this->_convert_list_response($langs['bJezyki'], 'bJezyk');
		return $langs;
	}

	/**
	 * _kwalifikacje method
	 * @param $id
	 * @return null|string
	 */
	private function _kwalifikacje($id)
	{
		$options = array(
			'dat:NumerEwidencyjny' => $id
		);
		$skills = $this->Api->DajKwalifikacje($this->_getGid(), $options);
		$this->_convert_list_response($skills['bKwalifikacje'], 'bKwalifikacja');
		if (!empty($skills) && isset($skills['bKwalifikacje']['bKwalifikacja'])) {
			foreach ($skills['bKwalifikacje']['bKwalifikacja'] as &$skill) {
				$skill = $this->_convert_to_date_array($skill, array('bDataUzyskania', 'bDataWaznosci'));
			}
		}
		return $skills;
	}

	/**
	 * _rodzina method
	 * @param $id
	 * @return null|string
	 */
	private function _rodzina($id)
	{
		$options = array(
			'dat:NumerEwidencyjny' => $id
		);
		$family = $this->Api->DajCzlonkowRodziny($this->_getGid(), $options);
		$this->_convert_list_response($family['bCzlonkowieRodziny'], 'bCzlonekRodziny');
		if (!empty($family) && isset($family['bCzlonkowieRodziny']['bCzlonekRodziny'])) {
			foreach ($family['bCzlonkowieRodziny']['bCzlonekRodziny'] as &$fam) {
				$fam = $this->_convert_to_date_array($fam, array('bDataUrodzenia'));
			}
		}
		return $family;
	}

	/**
	 * _ocena method
	 * @param $id
	 * @return null|string
	 */
	private function _ocena($id)
	{
		$options = array(
			'dat:NumerEwidencyjny' => $id
		);
		$ratings = $this->Api->DajOceny($this->_getGid(), $options);

		$rjson = $this->_handle_response_json($ratings);
		if (isset($rjson['login']) && !empty($rjson['login'])) {
			echo 'login';
			die();
		}

		$this->_convert_list_response($ratings['bOceny'], 'bOcena');
		if (!empty($ratings) && isset($ratings['bOceny']['bOcena'])) {
			foreach ($ratings['bOceny']['bOcena'] as &$rating) {
				$rating = $this->_convert_to_date_array($rating, array('bDataOd', 'bDataDo'));
			}
		}
		return $ratings;
	}

	/**
	 * _plan_urlopu method
	 * @param $id
	 * @return null|string
	 */
	private function _plan_urlopu($id)
	{
		$options = array(
			'dat:NumerEwidencyjny' => $id
		);
		$free_days = $this->Api->DajPlanyUrlopu($this->_getGid(), $options);
		$this->_convert_list_response($free_days['bPlanyUrlopu'], 'bPlanUrlopu');
		if (!empty($free_days) && isset($free_days['bPlanyUrlopu']['bPlanUrlopu'])) {
			foreach ($free_days['bPlanyUrlopu']['bPlanUrlopu'] as &$free_day) {
				$free_day = $this->_convert_to_date_array($free_day, array('bDataOd', 'bDataDo'));
			}
		}
		return $free_days;
	}

	private function _akceptacja_planu_urlopu($id, $accept, $year)
	{
		$options = array(
			'dat:CzyTylkoDoAkceptacji' => $accept,
			'dat:NumerEwidencyjny' => $id,
			'dat:Rok' => $year
		);
		$free_days = $this->Api->DajPlanyUrlopuPodleglych($this->_getGid(), $options);
		$this->_convert_list_response($free_days['bPlanyUrlopu'], 'bPlanUrlopu');
		if (!empty($free_days) && isset($free_days['bPlanyUrlopu']['bPlanUrlopu'])) {
			foreach ($free_days['bPlanyUrlopu']['bPlanUrlopu'] as &$free_day) {
				$free_day = $this->_convert_to_date_array($free_day, array('bDataOd', 'bDataDo'));
			}
		}
		return $free_days;
	}


	/**
	 * _dokumenty method
	 * @param $id
	 * @params string $rodzaj
	 * @return null|string
	 */
	private function _dokumenty($id, $rodzaj = null)
	{
		$options = array(
			'dat:NumerEwidencyjny' => $id
		);
		if ($rodzaj != null) {
			$options['dat:Rodzaj'] = $rodzaj;
		}

		$documents = $this->Api->DajDokumenty($this->_getGid(), $options);
		$this->_convert_list_response($documents['bDokumenty'], 'bDokument');
		if (!empty($documents) && isset($documents['bDokumenty']['bDokument'])) {
			foreach ($documents['bDokumenty']['bDokument'] as &$document) {
				$document = $this->_convert_to_date_array($document, array('bDataPublikacji'), true, true);
			}
		}
		return $documents;
	}

	/**
	 * _dokumenty_kadrowe method
	 * @param $id
	 * @params string $rodzaj
	 * @return null|string
	 */
	private function _dokumenty_kadrowe($id, $rodzaj = null)
	{
		$options = array(
			'dat:NumerEwidencyjny' => $id
		);
		if ($rodzaj != null) {
			$options['dat:Rodzaj'] = $rodzaj;
		}

		$options['dat:Zakres'] = 'Kadrowe';

		$documents = $this->Api->DajDokumenty($this->_getGid(), $options);
		$this->_convert_list_response($documents['bDokumenty'], 'bDokument');
		if (!empty($documents) && isset($documents['bDokumenty']['bDokument'])) {
			foreach ($documents['bDokumenty']['bDokument'] as &$document) {
				$document = $this->_convert_to_date_array($document, array('bDataPublikacji'), true, true);
			}
		}
		return $documents;
	}

	/**
	 * _dokumenty_placowe method
	 * @param $id
	 * @params string $rodzaj
	 * @return null|array|string
	 */
	private function _dokumenty_placowe($id, $rodzaj = null, $numer_pracownika = null)
	{
		$options = array(
			'dat:NumerEwidencyjny' => $id
		);
		if ($rodzaj != null) {
			$options['dat:Rodzaj'] = $rodzaj;
		}

		if ($numer_pracownika !== null) {
			$options['dat:NumerEwidencyjny'] = $numer_pracownika;
		}

		$options['dat:Zakres'] = 'Placowe';

		$documents = $this->Api->DajDokumenty($this->_getGid(), $options);
		$this->_convert_list_response($documents['bDokumenty'], 'bDokument');
		if (!empty($documents) && isset($documents['bDokumenty']['bDokument'])) {
			foreach ($documents['bDokumenty']['bDokument'] as &$document) {
				$document = $this->_convert_to_date_array($document, array('bDataPublikacji'), true, true);
			}
		}
		return $documents;
	}

	/**
	 * _adresy_email method
	 * @param $id
	 * @param null|string $rodzaj
	 * @param null|string $numer_pracownika
	 * @return array
	 */
	private function _adresy_email($id, $rodzaj = null, $numer_pracownika = null)
	{
		$options = array(
			'dat:NumerEwidencyjny' => $id
		);
		if ($rodzaj != null) {
			$options['dat:Rodzaj'] = $rodzaj;
		}

		if ($numer_pracownika !== null) {
			$options['dat:NumerEwidencyjny'] = $numer_pracownika;
		}

		$options['dat:Zakres'] = 'Placowe';

		$emails = $this->Api->DajAdresyEmail($this->_getGid(), $options);

		$this->_replace_empty_values($emails);

		$list = [];
		switch ($rodzaj) {
			case 'PaskiWyplat':
				if (!empty($emails['bEmailOdcinki'])) {
					$list[] = $emails['bEmailOdcinki'];
				}
				break;
			case 'DeklaracjePIT':
				if (!empty($emails['bEmailPIT'])) {
					$list[] = $emails['bEmailPIT'];
				}
				break;
		}
		if (!empty($emails['bEmailOgolny'])) {
			$list[] = $emails['bEmailOgolny'];
		}

		if (!empty($emails['bEmail'])) {
			$list[] = $emails['bEmail'];
		}

		$emails['emails'] = $list;

		return $emails;
	}

	/**
	 * @param null\string $bGid
	 */
	public function dokument_historia($bGid = null)
	{
		$this->layout = 'ajax';
		$options = array(
			'bGid' => $bGid
		);

		$document = $this->Api->DajHistoriePrzetwarzaniaDokumentu($this->_getGid(), $options);

		if (isset($document['bDokument']['bHistoriaPrzetwarzania']['cZapisHistoriiPrzetwarzania']) && isset($document['bDokument']['bHistoriaPrzetwarzania']['cZapisHistoriiPrzetwarzania'][0]) == false) {
			$document['bDokument']['bHistoriaPrzetwarzania']['cZapisHistoriiPrzetwarzania'] = [0 => $document['bDokument']['bHistoriaPrzetwarzania']['cZapisHistoriiPrzetwarzania']];
		}

		$resp = $this->_handle_response_json($document);
		if (isset($resp['login'])) {
			$this->redirect('/');
		}

		$this->set(compact('document'));
	}

	public function dokument_email($bGid = null, $rodzaj = null)
	{
		$options = array(
			'bGid' => $bGid
		);

		$options['bEmail'] = isset($this->request->query['email']) ? $this->request->query['email'] : null;

		if ($rodzaj == 'DeklaracjePIT') {
			$options['bRodzaj'] = 'Pit';
		} elseif ($rodzaj == 'PaskiWyplat') {
			$options['bRodzaj'] = 'Odcinek';
		} elseif ($rodzaj == 'RMUA') {
			$options['bRodzaj'] = 'Rmua';
		} else {
			$options['bRodzaj'] = 'NieOkreslony';
		}

		$response = $this->Api->WyslijDokumentEmail($this->_getGid(), $options);

		echo json_encode($this->_handle_response_json2($response));
		die();
	}

	public function dokument_remove_doc($bGid = null)
	{
		$options = array(
			'bGid' => $bGid
		);

		$options['bUsunTresc'] = 'false';
		$options['bUsunCalyDokument'] = 'true';

		$response = $this->Api->UsunDokument($this->_getGid(), $options);

		echo json_encode($this->_handle_response_json2($response));
	}

	public function dokument_remove($bGid = null)
	{
		$options = array(
			'bGid' => $bGid
		);

		$options['bUsunTresc'] = 'true';
		$options['bUsunCalyDokument'] = 'false';

		$response = $this->Api->UsunDokument($this->_getGid(), $options);

		echo json_encode($this->_handle_response_json2($response));
	}

	public function dokument($bGid = null, $action = 'open')
	{
		if ($bGid == NULL) $this->redirect('/');

		$this->layout = 'ajax';
		$options = array(
			'bGid' => $bGid
		);

		$rodzaj = isset($this->request->query['rodzaj']) ? $this->request->query['rodzaj'] : null;

		if (isset($this->request->query['format']) && !empty($this->request->query['format'])) {
			$format = $this->request->query['format'];

			$options['bRodzajeTresci'] = 'Tresc' . strtoupper($format);

			if ($rodzaj !== null) {
				if ($rodzaj == 'DeklaracjePIT') {
					switch ($format) {
						case 'upo':
							$options['bRodzaj'] = 'PitUpo';
							break;
						case 'xades':
							$options['bRodzaj'] = 'PitXades';
							break;
						case 'xml':
							$options['bRodzaj'] = 'PitXml';
							break;
						default:
							$options['bRodzaj'] = 'Pit';
					}
				} elseif ($rodzaj == 'PaskiWyplat') {
					$options['bRodzaj'] = 'Odcinek';
				} elseif ($rodzaj == 'RMUA') {
					$options['bRodzaj'] = 'Rmua';
				} else {
					$options['bRodzaj'] = 'NieOkreslony';
				}
				$document = $this->Api->DajDokumentZWybranaTrescia1($this->_getGid(), $options);
			} else {
				$document = $this->Api->DajDokumentZWybranaTrescia($this->_getGid(), $options);
			}

			$resp = $this->_handle_response_json($document);
			if (isset($resp['login'])) {
				$this->redirect('/');
			} else {
				$cDisposition = 'attachment';
				$cFileName = $document['bDokument']['bNazwaPlikuDoPobierania'];
				if ($action == 'open') $cDisposition = 'inline';

				header('Content-Description: ' . $cFileName);
				header('Content-Type: ' . $this->Api->getMimeType($cFileName));
				header('Content-Disposition: ' . $cDisposition . '; filename="' . $cFileName . '"');
				header('Expires: 0');
				header('Cache-Control: must-revalidate');
				header('Pragma: public');
				header('Content-Length: ' . strlen(base64_decode($document['bDokument']['bTresc' . strtoupper($format)])));

				echo base64_decode($document['bDokument']['bTresc' . strtoupper($format)]);
			}
		} else {
			if ($rodzaj !== null) {
				if ($rodzaj == 'DeklaracjePIT') {
					$options['bRodzaj'] = 'Pit';
				} elseif ($rodzaj == 'PaskiWyplat') {
					$options['bRodzaj'] = 'Odcinek';
				} elseif ($rodzaj == 'RMUA') {
					$options['bRodzaj'] = 'Rmua';
				} else {
					$options['bRodzaj'] = 'NieOkreslony';
				}
				$document = $this->Api->DajDokument1($this->_getGid(), $options);
			} else {
				$document = $this->Api->DajDokument($this->_getGid(), $options);
			}
			$resp = $this->_handle_response_json($document);
			if (isset($resp['login'])) {
				$this->redirect('/');
			} else {
				$cDisposition = ($action != 'download') ? 'inline' : 'attachment';
				$cFileName = $document['bDokument']['bNazwaPlikuDoPobierania'];

				header('Content-Description: ' . $cFileName);
				header('Content-Type: ' . $this->Api->getMimeType($cFileName));
				header('Content-Disposition: ' . $cDisposition . '; filename="' . $cFileName . '"');
				header('Expires: 0');
				header('Cache-Control: must-revalidate');
				header('Pragma: public');
				header('Content-Length: ' . strlen(base64_decode($document['bDokument']['bTresc'])));

				echo base64_decode($document['bDokument']['bTresc']);
			}
		}

		exit;
	}

	/**
	 * @param string $skrzynka
	 * @return array
	 */
	private function _daj_wnioski($skrzynka = "Wszystkie", $start = false)
	{
		$options = array(
//            'dat:CzyOdrzucone' => '',
//            'dat:CzyZaakceptowane' => ''
		);
		if ($skrzynka != null) {
			$options = array(
				'dat:Skrzynka' => $skrzynka
			);
		}
		if ($start) {
			$wnioski = $this->Api->DajListeWnioskowStart($this->_getGid(), $options);
		} else {
			$wnioski = $this->Api->DajListeWnioskow($this->_getGid(), $options);
		}
		$this->_convert_list_response($wnioski['bWnioski'], 'bWniosek');
		if (!empty($wnioski) && isset($wnioski['bWnioski']['bWniosek'])) {
			foreach ($wnioski['bWnioski']['bWniosek'] as $wniosek) {
				$this->_convert_list_response($wniosek['bAkceptujacy'], 'cAdres');
			}
			foreach ($wnioski['bWnioski']['bWniosek'] as &$wnios) {
				$wnios = $this->_convert_to_date_array($wnios, array('bDataOd', 'bDataDo', 'bDataUtworzenia'), true, false);
			}
		}
		return $wnioski;
	}

	/**
	 * @return array
	 */
	private function _daj_mozliwe_kody_wniosku($type = null)
	{
		$codes = $this->Api->DajListeMozliwychKodowWniosku($this->_getGid(), $type);
		$codes['bKody'] = $this->_convert_list_response($codes['bKody'], 'bKod');
		return $codes;
	}

	/**
	 * @return array
	 */
	private function _daj_mozliwe_kody_wniosku_dla_podwladnego($nrewid, $type = null)
	{
		$codes = $this->Api->DajListeMozliwychKodowWnioskuZaPodwladnego($this->_getGid(), $nrewid, $type);
		$codes['bKody'] = $this->_convert_list_response($codes['bKody'], 'bKod');
		return $codes;
	}

	private function _daj_mozliwych_podwladnych_do_wniosku()
	{
		$employees = $this->Api->DajPodwladnychDlaKtorychMogeSkladacWnioski($this->_getGid());
		return $employees;
	}

	/**
	 * _daj_dane_osobowe method
	 * @param string $gid
	 * @param int|string $ne
	 * @return null|array
	 */
	private function _daj_dane_osobowe($gid, $ne)
	{
		$options = array(
//            'dat:Gid' => $gid,
			'dat:Nrewid' => $ne
		);
		$result = $this->Api->DajDaneOsobowe($this->_getGid(), $options);
		$this->_replace_empty_values($result);
		return $result;
	}

	/**
	 * @param $gid string
	 * @param $options array
	 * @return array
	 */
	private function _daj_informacje_o_saldach($gid, $options = array())
	{
		return $this->Api->DajInformacjeOSaldach($gid, $options);
	}

	/**
	 * @param array $options
	 * @return array
	 */
	private function _zapisz_wniosek($options = array())
	{
		return $this->Api->ZapiszWniosek($this->_getGid(), $options);
	}

	/**
	 * @param array $options
	 * @return array
	 */
	private function _dodaj_urlop($options = array())
	{
		return $this->Api->DodajUrlop($this->_getGid(), $options);
	}

	/**
	 * @param array $options
	 * @return array
	 */
	private function _edytuj_urlop($options = array())
	{
		return $this->Api->EdytujUrlop($this->_getGid(), $options);
	}

	/**
	 * @return array
	 */
	private function _lista_pracownikow()
	{
		$employees = $this->Api->DajListePracownikow($this->_getGid());
		$employees['bPracownicy'] = $this->_convert_list_response($employees['bPracownicy'], 'bPracownik');
		return $employees;
	}

	/**
	 * _daj_informacje_placowe method
	 * @param string $rodzaj
	 * @return array
	 */
	private function _daj_informacje_placowe($rodzaj, $numer_pracownika = null)
	{
		$options = array(
			'dat:Rodzaj' => $rodzaj,
		);

		$options['dat:Nrewid'] = $numer_pracownika;

		$cash = $this->Api->DajInformacjePlacowe($this->_getGid(), $options);
		return $cash;
	}

	/**
	 * @param $fileArray
	 * @param string $key default "b:"
	 * @param string $key2 default "b:"
	 * @return array|bool
	 */
	private function _zalaczniki($fileArray, $key = "b:", $key2 = "b:")
	{
		$responseArray = array();
		$upload = WWW_ROOT . "uploads/" . basename($fileArray['name']);
		if (move_uploaded_file($fileArray['tmp_name'], $upload)) {
			$file = new File($upload);
			$fileInfo = $file->info();
			$fileContent = base64_encode(fread(fopen($upload, "r"), filesize($upload)));
			$responseArray[$key . 'Zalaczniki'][$key2 . 'Zalacznik'] = array(
//                        $key.'Gid' => '',
//                        $key.'GidRodzica' => '',
				$key2 . 'Nazwa' => $fileInfo['filename'],
				$key2 . 'Plik' => $fileInfo['basename'],
//                        $key.'StronaKodowa' => '',
				$key2 . 'Tresc' => $fileContent,
			);
			$file->delete();
			return $responseArray;
		} else {
			return false;
		}
	}

	/**
	 * @param $fileArray
	 * @param string $key default "b:"
	 * @param string $key2 default "b:"
	 * @return array|bool
	 */
	private function _zalaczniki_edycja($fileArray, $key = "b:", $key2 = "b:")
	{
		$responseArray = array();
		$responseArray[$key . 'Zalaczniki'][$key2 . 'Zalacznik'] = array(
//            $key.'Gid' => $fileArray['bGid'],
//            $key.'GidRodzica' => $fileArray['bGidRodzica'],
			$key2 . 'Nazwa' => $fileArray['bNazwa'],
			$key2 . 'Plik' => $fileArray['bPlik'],
//            $key.'StronaKodowa' => $fileArray['bStronaKodowa'],
			$key2 . 'Tresc' => $fileArray['bTresc'],
		);
		return $responseArray;
	}

	/**
	 * @return array
	 */
	private function _daj_liste_zastepstw()
	{
		return $this->Api->DajListeZastepstw($this->_getGid());
	}

	/**
	 * @param $gid string
	 * @return array
	 */
	private function _daj_zastepstwo($gid)
	{
		return $this->Api->DajZastepstwo($this->_getGid(), $gid);
	}

	/**
	 * @param $data array
	 * @return array
	 */
	private function _edytuj_zastepstwo($data)
	{
		return $this->Api->EdytujZastepstwo($this->_getGid(), $data);
	}

	/**
	 * @param $data array
	 * @return array
	 */
	private function _dodaj_zastepstwo($data)
	{
		return $this->Api->DodajZastepstwo($this->_getGid(), $data);
	}


	/**
	 * @param $roleGid string
	 * @return array
	 */
	private function _daj_role_pojedyncza($roleGid)
	{
		return $this->Api->DajRolePojedyncza($this->_getGid(), $roleGid);
	}

	/**
	 * @param $data array
	 * @return array
	 */
	private function _dodaj_role($data)
	{
		return $this->Api->DodajRole($this->_getGid(), $data);
	}

	/**
	 * @param $data array
	 * @return array
	 */
	private function _edytuj_role($data)
	{
		return $this->Api->EdytujRole($this->_getGid(), $data);
	}

	/**
	 * @param $data array
	 * @return array
	 */
	private function _uprawnienia_roli($data)
	{
		return $this->Api->AktualizujACLRoli($this->_getGid(), $data);
	}

	/**
	 * @param $data array
	 * @return array
	 */
	private function _uzytkownicy_roli($data)
	{
		return $this->Api->AktualizujPrzynaleznoscUzytkownikowDoRoli($this->_getGid(), $data);
	}

	/**
	 * @param $gid string
	 * @return array
	 */
	private function _usun_role($gid)
	{
		return $this->Api->UsunRole($this->_getGid(), $gid);
	}

	/**
	 * @param $ne
	 * @return array
	 */
	private function _zmien_kontekst($ne)
	{
		return $this->Api->ZmienKontekstPracownika($this->_getGid(), $ne);
	}

	/**
	 * @param $gid string | null
	 * jesli podany $gid to pobiera dana sciezke akceptacji, jesli nie to cala liste
	 * @return array
	 */
	private function _daj_sciezki_akceptacji($gid = null)
	{
		if (is_null($gid)) {
			$paths = $this->Api->DajListeSciezekAkceptacji($this->_getGid());
			return $paths;
		} else {
			$path = $this->Api->DajSciezkeAkceptacji($this->_getGid(), $gid);
			return $path;
		}
	}

	/**
	 * @param $data array
	 * @return array
	 */
	private function _dodaj_sciezke_akceptacji($data)
	{
		return $this->Api->DodajSciezkeAkceptacji($this->_getGid(), $data);
	}

	/**
	 * @param $data array
	 * @return array
	 */
	private function _edytuj_sciezke_akceptacji($data)
	{
		return $this->Api->EdytujSciezkeAkceptacji($this->_getGid(), $data);
	}

	/**
	 * _daj_moduly method
	 * @param $roleGid string
	 * @param $userGid string
	 * @return array
	 */
	private function _daj_moduly($roleGid = null, $userGid = null)
	{
		return $this->Api->DajModuly($this->_getGid(), $roleGid, $userGid);
	}


	/**
	 * Numery list kodów:
	 * 2 - komórki
	 * 5 - stanowiska
	 * 52 - płatnicy
	 * 53 - piony
	 * 54 - regiony
	 * 125 - miejsca
	 * 24 - charaktery pracy
	 * @param null $code
	 * @return array
	 */
	private function _daj_liste_kodow($code = null)
	{
		if ($code == null) $code = '';
		$options = array(
			'dat:Numer' => $code
		);
		$codes = $this->Api->DajListeKodow($this->_getGid(), $options);
		return $codes;
	}

	/** PRIVATE METHODS - END */

	/** PUBLIC METHODS - START */

	public function beforeFilter()
	{
		ini_set('max_input_vars', 5000);
		ini_set('suhosin.request.max_vars', 5000);
		ini_set('suhosin.post.max_vars', 5000);
		ini_set('post_max_size', '128M');

		parent::beforeFilter();

		if ((isset($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] != "on") && $_SERVER['SERVER_NAME'] != 'dev-datacomp.180c.pl' && $_SERVER['SERVER_NAME'] != 'datacomp.dev' && $_SERVER['SERVER_NAME'] != 'datacomp.develop' && $_SERVER['SERVER_NAME'] != 'localhost') {
			header("Location: https://" . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]);
			exit();
		}

		$p = 'http';
		if ($_SERVER['SERVER_NAME'] != 'dev-datacomp.180c.pl' && $_SERVER['SERVER_NAME'] != 'datacomp.dev' && $_SERVER['SERVER_NAME'] != 'datacomp.develop') {
			$p = 'https';
		}
		$this->set('url_prefix', $p . '://' . $_SERVER['SERVER_NAME']);

		if ($this->params['action'] != 'przetwarzanie_danych' && $this->params['action'] != 'nie_zgoda_na_przetwarzanie_danych' && $this->params['action'] != 'zgoda_na_przetwarzanie_danych' && $this->Session->read('bCzyZadanieZgodyNaPrzetwarzanieDanych') == 'true') {
			return $this->redirect('/przetwarzanie_danych');
		}

		//get main configuration
		$appConfig = $this->Config->getConfig();
		$this->set('local_url', $appConfig['local_url']);

		$corePath = __DIR__ . '/../Config/core.php';
		$refreshPath = __DIR__ . '/../../refresh.txt';
		if (file_exists($refreshPath)) {
			$ifRefresh = file_get_contents($refreshPath);
			if ($ifRefresh == "1") {
				Configure::write('debug', 2);
				Cache::clear();
				file_put_contents($corePath, str_replace("Configure::write('debug', 0);", "Configure::write('debug', 2);", file_get_contents($corePath)));
				file_put_contents($refreshPath, -1);
				$this->redirect($this->referer() . '?v=' . time());
			} elseif ($ifRefresh == "-1") {
				Configure::write('debug', 0);
				file_put_contents($corePath, str_replace("Configure::write('debug', 2);", "Configure::write('debug', 0);", file_get_contents($corePath)));
				file_put_contents($refreshPath, 0);
				$ref = $this->referer();
				$ref = explode('?', $ref);
				$this->redirect($ref[0]);
			}
		}

		$this->Auth->allow(array('login', 'zmiana_hasla', 'przetwarzanie_danych', 'zgoda_na_przetwarzanie_danych', 'nie_zgoda_na_przetwarzanie_danych'));
		if (strpos($this->action, 'test') !== false) {
			$this->Auth->allow($this->action);
			$this->Api->setDebug(true);
		}
		if (strpos($this->action, '_ac') !== false || strpos($this->action, '_ajax') !== false) {
			$this->autoRender = false;
		}
		if ($this->request->prefix == 'ajax') {
			$this->layout = 'ajax';
		}
//        $this->Auth->allow();

		$this->setPageName();
		$this->set('current_user', $this->Auth->user());
		$this->set('user_contexts', $this->_getUserContexts());

		$this->_uprawnienia();
		$this->_appconfig();

//        if($this->params['action'] == 'index') {
//            $liczbaPracownikow = $this->dajLiczbePracownikow();
//            $liczbaPracownikowZastepstwa = $this->dajLiczbePracownikowZastepstwa();
//            $this->Session->write('liczbaPracownikow', $liczbaPracownikow);
//            $this->Session->write('liczbaPracownikowZastepstwa', $liczbaPracownikowZastepstwa);
//        }

		if ($this->params['action'] != 'login' && $this->params['action'] != 'zgoda_na_przetwarzanie_danych' && $this->params['action'] != 'nie_zgoda_na_przetwarzanie_danych' && $this->params['action'] != 'zmiana_hasla' && $this->params['action'] != 'przetwarzanie_danych') {
			if ($this->Session->check('liczbaPracownikow')) {
				$liczbaPracownikow = $this->Session->read('liczbaPracownikow');
				$liczbaPracownikowZastepstwa = $this->Session->read('liczbaPracownikowZastepstwa');
			} else {
				$liczbaPracownikow = $this->dajLiczbePracownikow();
				$liczbaPracownikowZastepstwa = $this->dajLiczbePracownikowZastepstwa();
			}

			$this->Session->write('liczbaPracownikow', $liczbaPracownikow);
			$this->Session->write('liczbaPracownikowZastepstwa', $liczbaPracownikowZastepstwa);

			$this->set(compact('liczbaPracownikow', 'liczbaPracownikowZastepstwa'));
		}
	}

	/**
	 * @param $user
	 * @return bool
	 */
	public function isAuthorized($user)
	{
		return true;
	}

	/**
	 *
	 */
	public function setPageName()
	{
		$action = $this->action;
		$pageName = '';
		switch ($action) {
			case 'index':
				$pageName = 'Witaj w Portalu Pracownika';
				if (!empty($this->Session->read('bTytulNaPaskuPortalu'))) {
					$pageName = $this->Session->read('bTytulNaPaskuPortalu');
				}
				break;
			case 'profil':
				$pageName = 'Twoje podstawowe dane';
				break;
			case 'umowy_o_prace':
				$pageName = 'Twoje umowy o pracę';
				break;
			case 'zawiesia':
				$pageName = 'Twoje zawiesia';
				break;
			case 'zfs':
				$pageName = 'Twoje wnioski ZFS';
				break;
			case 'nieobecnosci':
				$pageName = 'Twoje nieobecności';
				break;
			case 'przebiegi_pracy':
				$pageName = 'Twój przebieg pracy';
				break;
			case 'wyksztalcenia':
				$pageName = 'Twoje wykształcenia';
				break;
			case 'badania':
				$pageName = 'Twoje badania lekarskie';
				break;
			case 'szkolenia':
				$pageName = 'Twoje szkolenia';
				break;
			case 'kary':
				$pageName = 'Twoje kary';
				break;
			case 'jezyki':
				$pageName = 'Twoja znajomość języków';
				break;
			case 'kwalifikacje':
				$pageName = 'Twoje kwalifikacje zawodowe';
				break;
			case 'rodzina':
				$pageName = 'Członkowie Twojej rodziny';
				break;
			case 'ocena_pracownika':
				$pageName = 'Twoja ocena';
				break;
			case 'plan_urlopu':
				$pageName = 'Twój plan urlopu';
				break;
			case 'akceptacja_planu_urlopu':
				$pageName = "Twój panel akceptacji";
				break;
			case 'dokumenty':
				$pageName = 'Twoje dokumenty';
				break;
			case 'place':
				$pageName = 'Twoja ostatnia wypłata';
				break;
			case 'grafik':
				$pageName = 'Twój grafik pracy';
				break;
			case 'wnioski':
				$pageName = 'Twoje wnioski';
				break;
			case 'administracja_role':
				$pageName = 'Administracja - Role użytkowników';
				break;
			case 'administracja_uzytkownicy':
				$pageName = 'Administracja - Użytkownicy';
				break;
			case 'sciezki_akceptacji':
				$pageName = 'Administracja - Ścieżki akceptacji';
				break;
			case 'zastepstwa':
				$pageName = 'Administracja - Zastępstwa';
				break;
			case 'edytuj_uzytkownika':
				$pageName = 'Administracja - Edytuj użytkownika';
				break;
			case 'dodaj_uzytkownika':
				$pageName = 'Administracja - Dodaj użytkownika';
				break;
			case 'dodaj_role':
				$pageName = 'Administracja - Dodaj rolę';
				break;
			case 'edytuj_role':
				$pageName = 'Administracja - Edytuj rolę';
				break;
			case 'uprawnienia_roli':
				$pageName = 'Administracja - Uprawnienia roli';
				break;
			case 'sciezka_akceptacji':
				$pageName = 'Administracja - Dodaj ścieżkę akceptacji';
				break;
			case 'dodaj_zastepstwo':
				$pageName = 'Administracja - Dodaj zastępstwo';
				break;
			case 'zastepstwo':
				$pageName = 'Administracja - Edytuj zastępstwo';
				break;
			case 'pracownicy':
				$pageName = 'Pracownicy';
				break;
			case 'pracownicy_kadry':
				$pageName = 'Pracownicy - Dane kadrowe';
				break;
			case 'pracownicy_bhp':
				$pageName = 'Pracownicy - BHP';
				break;
			case 'pracownicy_grafik':
				$pageName = 'Pracownicy - Czas pracy';
				break;
			case 'wiadomosci':
				$pageName = 'Wiadomości';
				break;
			case 'saldo_urlopu':
				$pageName = 'Twoje salda urlopów';
				break;
			case 'dodaj_wniosek':
				$pageName = 'Dodaj wniosek';
				break;
			case 'edytuj_wniosek':
				$pageName = 'Edytuj wniosek';
				break;
			case 'dodaj_wiadomosc':
				$pageName = 'Dodaj wiadomość';
				break;
			case 'edytuj_wiadomosc':
				$pageName = 'Edytuj wiadomość';
				break;
			case 'dodaj_urlop':
				$pageName = 'Dodaj urlop planowany';
				break;
			case 'edytuj_plan_urlopu':
				$pageName = 'Edytuj urlop planowany';
				break;
			case 'ocena':
				$pageName = 'Ocena pracownika';
				break;
			case 'pokaz_wniosek':
				$pageName = 'Przeglądanie wniosku';
				break;
			case 'pokaz_ocene':
				$pageName = 'Przeglądanie oceny';
				break;
			case 'dodaj_ocene':
				$pageName = 'Dodaj ocenę';
				break;
			case 'edytuj_ocene':
				$pageName = 'Edytuj ocenę';
				break;
			case 'importy':
				$pageName = 'Importy';
				break;
			case 'dodaj_szablon_oceny':
				$pageName = 'Dodaj szablon oceny pracownika';
				break;
			case 'szablony_oceny_pracownika':
			case 'ajax_daj_szablony_oceny':
				$pageName = 'Ocena pracownika';
				break;

		}
		$this->set(compact('pageName'));
	}

	public function sesja_plus()
	{
		$hello = $this->Api->SesjaPlus($this->_getGid());
		die();
	}

	/**
	 *
	 */
	public function login()
	{
		$this->Session->delete('SOAP');
		$this->layout = 'login';
		if ($this->Auth->loggedIn()) {
			return $this->redirect('/');
		}

		$hello = $this->Api->Hello();
		$helloLabel = $hello['bLogoNapis'];
		$this->set(compact('helloLabel', 'hello'));
		$this->Session->write('pamietajHaslo', false);
		$this->Session->write('licencja', $hello['bLicencja']);
		$this->Session->write('grupaLicencji', (is_array($hello['bGrupaLicencji']) ? '' : $hello['bGrupaLicencji']));

		if ($this->request->is('post')) {
			$loginData = array(
				'pUzytkownik' => $this->request->data['User']['username'],
				'pHaslo' => $this->request->data['User']['password']
			);

			$loginData['pHaslo'] = htmlspecialchars($loginData['pHaslo']);

			$this->Session->write('loggedData', $loginData);
			$zaloguj = $this->Api->Zaloguj($loginData);

			$this->Session->write('bCzyUdostepnicPrzegladaniePlacPodleglych', $zaloguj['bCzyUdostepnicPrzegladaniePlacPodleglych']);

			$this->Session->write('bCzyZadanieZgodyNaPrzetwarzanieDanych', $zaloguj['bCzyZadanieZgodyNaPrzetwarzanieDanych']);
			$this->Session->write('bTrescZgodyNaPrzetwarzanieDanych', $zaloguj['bTrescZgodyNaPrzetwarzanieDanych']);
			$this->Session->write('bCzyUproszczonySystemOdbic', $zaloguj['bCzyUproszczonySystemOdbic']);
			$this->Session->write('bCzyWylaczycWiadomosciNaStronieGlownej', $zaloguj['bCzyWylaczycWiadomosciNaStronieGlownej']);
			$this->Session->write('bCzyWylaczycAkceptacjeZastepstwaNaStronieGlownej', $zaloguj['bCzyWylaczycAkceptacjeZastepstwaNaStronieGlownej']);
			$this->Session->write('bCzyWylaczycAkceptacjeWnioskowNaStronieGlownej', $zaloguj['bCzyWylaczycAkceptacjeWnioskowNaStronieGlownej']);
			$this->Session->write('bCzyDniNaWidokuListyWnioskow', $zaloguj['bCzyDniNaWidokuListyWnioskow'] ?? "false");
			$this->Session->write('bTytulNaPaskuPortalu', $zaloguj['bTytulNaPaskuPortalu']);

			if (isset($zaloguj['bGidSesji'])) {
				$user = $zaloguj['bKontekstPracownika'];
				$user['bOpisUzytkownika'] = $zaloguj['bOpisUzytkownika'];
				$user = $this->_convert_to_date_array($user, array('cAngazOd', 'cAngazDo', 'bDataPrzyjecia', 'bDataZwolnienia'));
				$userContexts = $zaloguj['bPracownicyTozsamiZUzytkownikiem'];
				foreach ($userContexts as &$context) {
					$context = $this->_convert_to_date_array($context, array('cAngazOd', 'cAngazDo', 'cDataPrzyjecia', 'cDataZwolnienia'));
				}
				$gid = $zaloguj['bGidSesji'];
				$userGid = $zaloguj['bGidUzytkownika'];

				//Pobierz userow, zeby miec gid usera !?!?
				//Działa tylko dla administratora?
				/*
                $users = $this->Api->DajUzytkownikow($gid);

                foreach ($users['bUzytkownicy']['bUzytkownik'] as $searchForMe) {
                    if ($searchForMe['bNazwa'] == $this->request->data['User']['username']) {
                        $user['userGid'] = $searchForMe['bGid'];
                        $user['username'] = $searchForMe['bNazwa'];
                        break;
                    }
                }
                */

				$this->Session->write('gid', $gid);
				$this->Session->write('userGid', $userGid);
				$this->Session->write('userContexts', $userContexts);

				$this->_generujUprawnienia($zaloguj);

				$user['bGidSesji'] = $gid;
				$user['bUzytkownik'] = strtolower($loginData['pUzytkownik']);
				$this->Auth->login($user);

				$liczbaPracownikow = count($zaloguj['bPracownicyTozsamiZUzytkownikiem']);

				if ($liczbaPracownikow == 0) {
					$liczbaPracownikow = $this->dajLiczbePracownikow();
				}

				$liczbaPracownikowZastepstwa = $this->dajLiczbePracownikowZastepstwa();
				$this->Session->write('liczbaPracownikow', $liczbaPracownikow);
				$this->Session->write('liczbaPracownikowZastepstwa', $liczbaPracownikowZastepstwa);

				if ($this->Session->read('bCzyZadanieZgodyNaPrzetwarzanieDanych') == 'true') {
					return $this->redirect('/przetwarzanie_danych');
				}

				return $this->redirect('/');
			} else if (isset($zaloguj['sBody']['sFault']['sDetail']['SzczegolyBleduUslugi']['Opis'])) {
				$this->Flash->error(
					(!empty($zaloguj['sBody']['sFault']['sDetail']['SzczegolyBleduUslugi']['Tytul']) ? ($zaloguj['sBody']['sFault']['sDetail']['SzczegolyBleduUslugi']['Tytul'] . '. ') : '') .
					(!empty($zaloguj['sBody']['sFault']['sDetail']['SzczegolyBleduUslugi']['Opis']) ? $zaloguj['sBody']['sFault']['sDetail']['SzczegolyBleduUslugi']['Opis'] : '')
				);
				if ($zaloguj['sBody']['sFault']['sDetail']['SzczegolyBleduUslugi']['Kod'] == 200) {
					$this->Session->write('zmiana_hasla', '1');
					return $this->redirect('/zmiana_hasla');
				}
			}
		}
	}

	public function przetwarzanie_danych()
	{
		$this->layout = 'login';
		$hello = $this->Api->Hello();
		$helloLabel = $hello['bLogoNapis'];
		$przetwarzanie_danych = true;
		$this->set(compact('helloLabel', 'przetwarzanie_danych'));
		$this->set('bTrescZgodyNaPrzetwarzanieDanych', $this->Session->read('bTrescZgodyNaPrzetwarzanieDanych'));
	}

	public function zgoda_na_przetwarzanie_danych()
	{
		$this->layout = 'ajax';
		$this->render(false);

		if ($this->request->is(array('post', 'put'))) {
			$resp = $this->Api->ZgodaNaPrzetwarzanieDanych($this->_getGid());
			$this->Session->write('bCzyZadanieZgodyNaPrzetwarzanieDanych', 'false');
		}

		echo json_encode(array('result' => 'ok'));

		return;
	}

	public function nie_zgoda_na_przetwarzanie_danych()
	{
		$this->layout = 'ajax';
		$this->render(false);
		$this->Session->write('bCzyZadanieZgodyNaPrzetwarzanieDanych', 'false');
		echo json_encode(array('result' => 'ok'));

		return;
	}

	/**
	 *
	 */
	public function zmiana_hasla()
	{
		$this->layout = 'login';

		$isSystemEvent = true;

		if (isset($_GET['session'])) {
			$this->Session->write('zmiana_hasla', '1');
			$isSystemEvent = false;
		}

		$this->set(compact('isSystemEvent'));

		$hello = $this->Api->Hello();
		$helloLabel = $hello['bLogoNapis'];
		$passwordInfo = $hello['bHasloInfo'];
		$this->set(compact('helloLabel'));
		$this->set(compact('passwordInfo'));

		$this->set('backLink', $this->referer());

		if ($this->Session->check('zmiana_hasla')) {
			if ($this->request->is('post')) {
				$data = array(
					'tem:pUzytkownik' => $this->request->data['User']['username'],
					'tem:pHaslo' => $this->request->data['User']['password'],
					'tem:pNoweHaslo' => $this->request->data['User']['new_password']
				);

				$data['tem:pHaslo'] = htmlspecialchars($data['tem:pHaslo']);
				$data['tem:pNoweHaslo'] = htmlspecialchars($data['tem:pNoweHaslo']);

				$zaloguj = $this->Api->ZalogujIZmienHaslo($data);

				if (isset($zaloguj['bGidSesji'])) {
					if ((isset($zaloguj['Komunikaty']) && isset($zaloguj['Komunikaty']['Komunikat']) && $zaloguj['Komunikaty']['Komunikat']['Rodzaj'] == "Blad")) {
						$this->Flash->error($zaloguj['Komunikaty']['Komunikat']['Tytul']);
					} else {
						$user = $zaloguj['bKontekstPracownika'];
						$user = $this->_convert_to_date_array($user, array('cAngazOd', 'cAngazDo', 'bDataPrzyjecia', 'bDataZwolnienia'));
						$userContexts = $zaloguj['bPracownicyTozsamiZUzytkownikiem'];
						foreach ($userContexts as &$context) {
							$context = $this->_convert_to_date_array($context, array('cAngazOd', 'cAngazDo', 'cDataPrzyjecia', 'cDataZwolnienia'));
						}
						$gid = $zaloguj['bGidSesji'];
						$userGid = $zaloguj['bGidUzytkownika'];
						$user['bGidSesji'] = $zaloguj['bGidSesji'];

						//Pobierz userow, zeby miec gid usera !?!?
						//Działa tylko dla administratora?
						/*
                        $users = $this->Api->DajUzytkownikow($gid);

                        foreach ($users['bUzytkownicy']['bUzytkownik'] as $searchForMe) {
                            if ($searchForMe['bNazwa'] == $this->request->data['User']['username']) {
                                $user['userGid'] = $searchForMe['bGid'];
                                $user['username'] = $searchForMe['bNazwa'];
                                break;
                            }
                        }
                        */

						$this->Session->write('gid', $gid);
						$this->Session->write('userGid', $userGid);
						$this->Session->write('userContexts', $userContexts);
						$uprawnienia = $this->Api->DajListeUprawnien($this->_getGid(), $this->_getUserGid());
						$this->Session->write('uprawnienia', $uprawnienia);
//                $this->Auth->login($user);
						$this->Flash->success('Zmieniono hasło. Proszę się zalogować nowym hasłem.');
						$this->Session->delete('zmiana_hasla');
						return $this->redirect('/');
					}
				} else {
					$this->_handle_response($zaloguj);
				}
			} else {
				$loggedData = $this->Session->read('loggedData');
				$this->request->data['User']['username'] = $loggedData['pUzytkownik'];
				$this->request->data['User']['password'] = $loggedData['pHaslo'];
			}
		} else {
			$this->redirect('/');
		}
	}

	/**
	 *
	 */
	public function logout()
	{
		$this->Api->Wyloguj($this->_getGid());
		$this->Auth->logout();
		$this->Session->destroy();
		return $this->redirect('/');
	}

	/**
	 * ajax_logout method
	 */
	public function ajax_logout()
	{
		$this->render(false);
		$this->layout = 'ajax';

		$this->Api->Wyloguj($this->_getGid());
		$this->Auth->logout();
		$this->Session->destroy();

		die();
	}

	/**
	 * @param $ne int
	 */
	public function zmien_kontekst($ne)
	{
		$context = $this->_zmien_kontekst($ne);

		$username = $context['bOpisUzytkownika'];
		$context['bOpisUzytkownika'] = $username;
		$context['bAngazDo'] = $this->_convert_to_date($context['bAngazDo']);
		$context['bAngazOd'] = $this->_convert_to_date($context['bAngazOd']);
		$context = $this->_rename_array_key_prefixes($context, 'b', 'c');
		$bOpisUzytkownika = $context['cOpisUzytkownika'];
		$context = $context['cPracownik'];
		$context['bOpisUzytkownika'] = $bOpisUzytkownika;

		foreach ($context as $k => $value) {
			$newKey = preg_replace('/^b/', 'c', $k);
			$context[$newKey] = $value;
		}

//        $this->Auth->logout();
		$this->Auth->login($context);
		return $this->redirect($this->referer());
	}


	/**
	 *
	 */
	public function index()
	{
		$this->layout = 'ajax';
//        $messages = $this->_daj_wiadomosci();
//        $this->set('messages', $messages);
		$typ_wniosku = 'Wplywajace';
		$wnioski = $this->_daj_wnioski($typ_wniosku, true);
		$pracownicy = $this->_daj_mozliwych_podwladnych_do_wniosku();

		if (count($pracownicy['bAdresy']) > 0) {
			$this->set('eployees', [$pracownicy['bAdresy']]);
		}

		$resp = $this->_handle_response_json($wnioski);
		$this->set(compact('resp'));

		if ($typ_wniosku == 'Wplywajace') {
			$wnioskiArray = isset($wnioski['bWnioski']['bWniosek']) ? $wnioski['bWnioski']['bWniosek'] : array();
			$wnioski['bWnioski']['bWniosek'] = array();
			foreach ($wnioskiArray as $wniosek) {
				if ($wniosek['bWnioskujacy']['cGid'] != $this->_getUserGid()) {
					$wnioski['bWnioski']['bWniosek'][] = $wniosek;
				}
			}
		}
		$this->set(compact('wnioski', 'typ_wniosku'));
		$user_context = $this->Session->read('userContexts');
		if (isset($user_context['cPracownik']['cNumerEwidencyjny'])) {
			$nrewid = $user_context['cPracownik']['cNumerEwidencyjny'];
		}
		$this->set(compact('nrewid'));
	}

	/**
	 *
	 */
	public
	function test_complex_array()
	{
		$data = new DateTime();
		$data = $data->format('Y-m-d\TH:i:s.ms');
		$array = array(
			'dat:CzyNadawca' => 'true',
			'dat:CzyOdebrana' => 'false',
			'dat:CzyUkryta' => 'false',
			'dat:Nadawca' => array(
				'dat:Data' => $data,
				'dat:Email' => 'email@email.email',
				'dat:Gid' => '371723-1283848as-4123-sas'
			),
			'dat:Odbiorcy' => array(
				0 => array(
					'dat:Adres' => array(
						'dat:Data' => $data,
						'dat:Email' => 'emailodbiorcy@email.com',
						'dat:Gid' => 'f8as9df3-1f8as8df-13sdf-1fass'
					)
				),
				1 => array(
					'dat:Adres' => array(
						'dat:Data' => $data,
						'dat:Email' => 'emailodb2@email.com',
						'dat:Gid' => 'das8df9123-12380f-1239gnjasdf-f123'
					)
				)
			)
		);
		debug($this->_complex_array2xml($array));
		die();
	}

	/**
	 * @return string
	 */
	public function daj_adresy_ac()
	{
		$response = $this->Api->DajAdresy($this->_getGid());
		$response = $response['bAdresy']['bAdres'];

		$term = strtoupper($this->request->query['term']);

		$resp = array();

		foreach ($response as $key => &$r) {
			if ((!empty($r['bImie']) && strpos(strtoupper($r['bImie']), $term) !== false) || (!empty($r['bNazwisko']) && strpos(strtoupper($r['bNazwisko']), $term) !== false) || (!empty($r['bNazwa']) && strpos(strtoupper($r['bNazwa']), $term) !== false) || (!empty($r['bEmail']) && strpos(strtoupper($r['bEmail']), $term) !== false)) {
				$r['label'] = $r['bNazwaWyswietlana'];
				$r['value'] = $r['bNazwaWyswietlana'];
//                $r['value'] = $r['bNazwa'];
				$resp[] = $r;
			} else {
				unset($response[$key]);
			}
		}
		return json_encode($resp);
	}

	/**
	 * dodaj_wiadomosc method
	 */
	public function dodaj_wiadomosc($action_return = 'index')
	{
		$this->set(compact('action_return'));
		$this->layout = 'ajax';

		if ($this->request->is('post')) {
			/*
            if ($this->request->data['pWiadomosc']['b:CzyWysylkaEmail'] == '0') {
                $this->request->data['pWiadomosc']['b:CzyWysylkaEmail'] = 'false';
            } elseif ($this->request->data['pWiadomosc']['b:CzyWysylkaEmail'] == '1') {
                $this->request->data['pWiadomosc']['b:CzyWysylkaEmail'] = 'true';
            }
            */
			$data = $this->request->data;
			$action = $data['action'];
			unset($data['action']);
			if ($action == 'Zapisz') {
				$data['pCzyOpublikowac'] = 'false';
			}

			$filesCounter = 0;
			if (count($data['file']) > 0) {
				for ($i = 0; $i < count($data['file']); $i++) {
					if ($data['file'][$i]['size'] > 0) {
						$file = $this->_zalaczniki($data['file'][$i], 'dat:', 'dat:');
						if ($file == false) {
							$this->Flash->error('Nie udało się przesłać pliku. Spróbuj ponownie');
						} else {
							$data['pWiadomosc']['dat:Zalaczniki'][] = $file['dat:Zalaczniki'];
							$filesCounter++;
						}
					}
				}
			}
			unset($data['file']);
			$data['pWiadomosc']['b:IloscDodanychZalacznikow'] = $filesCounter;
			$data['pWiadomosc']['b:TrescRTF'] = '';
			if ($data['pWiadomosc']['b:Tresc'] != '') {
				$data['pWiadomosc']['b:TrescRTF'] = $this->_html2rtf($data['pWiadomosc']['b:Tresc']);
				$data['pWiadomosc']['b:TrescHTML'] = $data['pWiadomosc']['b:Tresc'];
				$data['pWiadomosc']['b:Tresc'] = strip_tags($data['pWiadomosc']['b:Tresc']);
			}

			$listaOdbiorcow = array();
			if (!empty($this->request->data['pWiadomosc']['b:Odbiorcy']) && !is_null($this->request->data['pWiadomosc']['b:Odbiorcy'])) {
				foreach ($this->request->data['pWiadomosc']['b:Odbiorcy'] as &$odbiorca) {
					$odbiorca['b:Adres']['b:Data'] = $this->_date_for_request();
					$odbiorca['b:Adres']['b:Gid'] = $odbiorca['b:Adres']['b:Gid'];

					$_odbiorca = array(
						'b:Adres' => array(
							'b:Data' => $odbiorca['b:Adres']['b:Data'],
							'b:Email' => $odbiorca['b:Adres']['b:Email'],
							'b:Gid' => $odbiorca['b:Adres']['b:Gid'],
							'b:Nazwa' => $odbiorca['b:Adres']['b:Nazwa'],
						)
					);
					$listaOdbiorcow[] = $_odbiorca;
				}
			}

			$data['pWiadomosc']['b:Odbiorcy'] = $listaOdbiorcow;
			$data = $this->_rename_array_key_prefixes_recursive($data, array('b:'), array('dat:'));


			if ($action == 'Zapisz') {
				$save = $this->Api->ZapiszWiadomosc($this->_getGid(), $data);
			} else {
				$save = $this->Api->PublikujWiadomosc($this->_getGid(), $data);
			}

			echo json_encode($this->_handle_response_json($save));
			die();

			/*if (isset($save['bKomunikaty'])) {
                $komunikaty = array();
                if (!isset($save['bKomunikaty']['bKomunikat'][0])) {
                    $komunikaty[0] = $save['bKomunikaty']['bKomunikat'];
                }else{
                    $komunikaty = $save['bKomunikaty']['bKomunikat'];
                }
                foreach ($komunikaty as $komunikat) {
                    if ($komunikat['bRodzaj'] == 'Ok') {
                        $opis = isset($komunikat['bOpis']) && !empty($komunikat['bOpis']) ? $komunikat['bOpis'] : '';
                        $this->Flash->success($komunikat['bTytul'] . '. ' . $opis);
                        return $this->redirect(array('action' => 'wiadomosci'));
                    } else {
                        $this->Flash->error($komunikat['bTytul'] . '. ');
                    }
                }
            } else {
                if (isset($response['sBody']['sFault']['sDetail']['SzczegolyBleduUslugi']['Opis'])) {
                    $this->Flash->error(
                        'Kod błędu: ' .
                        $response['sBody']['sFault']['sDetail']['SzczegolyBleduUslugi']['Kod'] .
                        '. ' .
                        $response['sBody']['sFault']['sDetail']['SzczegolyBleduUslugi']['Opis']
                    );
                }
            }*/
		} else {
			$priorytety = $this->Api->DajPriorytetyWiadomosci($this->_getGid());
			$this->set(compact('priorytety'));
		}
	}

	/**
	 * edytuj_wiadomosc method
	 * @param null|string $bGid
	 */
	public function edytuj_wiadomosc($bGid = NULL)
	{
		$this->layout = 'ajax';

		if ($bGid == NULL) $this->redirect(Router::url('/wiadomosci'));

		if ($this->request->is(array('post', 'put'))) {
			$this->render(false);

			$data = $this->request->data;
			$action = $data['action'];
			unset($data['action']);
			if ($action == 'Zapisz') {
				$data['pCzyOpublikowac'] = 'false';
			}

			if (isset($data['bZalacznik']) && !empty($data['bZalacznik'])) {
				foreach ($data['bZalacznik'] as $z) {
					$file = $this->_zalaczniki_edycja($z, 'dat:', 'dat:');
					$data['pWiadomosc']['dat:Zalaczniki'][] = $file['dat:Zalaczniki'];
				}
				unset($data['bZalacznik']);
			}

			$filesCounter = 0;
			if (count($data['file']) > 0) {
				for ($i = 0; $i < count($data['file']); $i++) {
					if ($data['file'][$i]['size'] > 0) {
						$file = $this->_zalaczniki($data['file'][$i], 'dat:', 'dat:');
						if ($file == false) {
							$this->Flash->error('Nie udało się przesłać pliku. Spróbuj ponownie');
						} else {
							$data['pWiadomosc']['dat:Zalaczniki'][] = $file['dat:Zalaczniki'];
							$filesCounter++;
						}
					}
				}
			}

			$data['pWiadomosc']['b:IloscDodanychZalacznikow'] = $filesCounter;
			$data['pWiadomosc']['b:TrescRTF'] = '';
			if ($data['pWiadomosc']['b:Tresc'] != '') {
				$data['pWiadomosc']['b:TrescRTF'] = $this->_html2rtf($data['pWiadomosc']['b:Tresc']);
				$data['pWiadomosc']['b:TrescRTF'] = $this->_html2rtf($data['pWiadomosc']['b:Tresc']);
				$data['pWiadomosc']['b:TrescHTML'] = $data['pWiadomosc']['b:Tresc'];
				$data['pWiadomosc']['b:Tresc'] = strip_tags($data['pWiadomosc']['b:Tresc']);
			}

			$listaOdbiorcow = array();
			if (!empty($this->request->data['pWiadomosc']['b:Odbiorcy']) && !is_null($this->request->data['pWiadomosc']['b:Odbiorcy'])) {
				foreach ($this->request->data['pWiadomosc']['b:Odbiorcy'] as &$odbiorca) {
					$odbiorca['b:Adres']['b:Data'] = $this->_date_for_request();
					$odbiorca['b:Adres']['b:Gid'] = $odbiorca['b:Adres']['b:Gid'];

					$_odbiorca = array(
						'b:Adres' => array(
							'b:Data' => $odbiorca['b:Adres']['b:Data'],
							'b:Email' => $odbiorca['b:Adres']['b:Email'],
							'b:Gid' => $odbiorca['b:Adres']['b:Gid'],
							'b:Nazwa' => $odbiorca['b:Adres']['b:Nazwa'],
						)
					);
					$listaOdbiorcow[] = $_odbiorca;
				}
			}

			$data['pWiadomosc']['b:Odbiorcy'] = $listaOdbiorcow;
			$data = $this->_rename_array_key_prefixes_recursive($data, array('b:'), array('dat:'));

			if ($action == 'Zapisz') {
				$save = $this->Api->ZapiszWiadomosc($this->_getGid(), $data);
			} else {
				$save = $this->Api->PublikujWiadomosc($this->_getGid(), $data);
			}

			/*if (isset($save['bKomunikaty'])) {
                $komunikaty = array();
                if (!isset($save['bKomunikaty']['bKomunikat'][0])) {
                    $komunikaty[0] = $save['bKomunikaty']['bKomunikat'];
                }else{
                    $komunikaty = $save['bKomunikaty']['bKomunikat'];
                }
                foreach ($komunikaty as $komunikat) {
                    if ($komunikat['bRodzaj'] == 'Ok') {
                        $this->Flash->success($komunikat['bTytul']);
                        return $this->redirect(array('action' => 'wiadomosci'));
                    } else {
                        $this->Flash->error($komunikat['bTytul']);
                    }
                }
            } else {
                if (isset($response['sBody']['sFault']['sDetail']['SzczegolyBleduUslugi']['Opis'])) {
                    $this->Flash->error(
                        'Kod błędu: ' .
                        $response['sBody']['sFault']['sDetail']['SzczegolyBleduUslugi']['Kod'] .
                        '. ' .
                        $response['sBody']['sFault']['sDetail']['SzczegolyBleduUslugi']['Opis']
                    );
                }
            }*/
			echo json_encode($this->_handle_response_json($save));
			die();
		} else {
			$priorytety = $this->Api->DajPriorytetyWiadomosci($this->_getGid());
			$this->set(compact('priorytety'));

			$message = $this->_daj_wiadomosc($bGid);
			$this->request->data['pWiadomosc']['b:Tytul'] = $message['bWiadomosc']['bTytul'];
			$this->request->data['pWiadomosc']['b:Tresc'] = html_entity_decode($message['bWiadomosc']['bTrescHTML']);
			$this->request->data['pWiadomosc']['b:Gid'] = $message['bWiadomosc']['bGid'];
			$this->request->data['pWiadomosc']['b:Priorytet'] = $message['bWiadomosc']['bPriorytet'];

			$zalaczniki = $message['bWiadomosc']['bZalaczniki']['bZalacznik'];

			$this->set(compact('message', 'zalaczniki'));
		}
	}

	/**
	 * profil method
	 */
	public function profil()
	{
		$this->layout = 'ajax';

		$gid = $this->Auth->user('cGid');
		$ne = $this->Auth->user('cNumerEwidencyjny');

		$profile = $this->_profil($gid, $ne);
		$resp = $this->_handle_response_json($profile);
		$this->set(compact('resp'));

		$rjson = $this->_handle_response_json($profile);
		if (isset($rjson['login']) && !empty($rjson['login'])) {
			echo 'login';
			die();
		}

		$profile['bPracownik'] = $this->_convert_to_date_array($profile['bPracownik'], array('bAngazDo', 'bAngazOd', 'bDataPrzyjecia', 'bDataZwolnienia'));
		$data = $this->_daj_dane_osobowe($gid, $ne);
		$data['bDaneOsobowe'] = $this->_convert_to_date_array($data['bDaneOsobowe'], array('AngazOd', 'AngazDo', 'DataPrzyjecia', 'DataZwolnienia', 'UmowaOd', 'UmowaDo', 'bDataUrodzenia'));
		$this->set(compact('profile', 'data'));
	}

	/**
	 * @param $date
	 */
	public function ajax_daj_nieobecnych_wspolpracownikow($date)
	{
		$response = $this->Api->DajNieobecnychWspolpracownikowWDniu($this->_getGid(), $date);
		ddebug($response);
	}

	/**
	 *
	 */
	public function sciezki_akceptacji()
	{
		$this->layout = 'ajax';

		$paths = $this->_daj_sciezki_akceptacji();

		$resp = $this->_handle_response_json($paths);
		$this->set(compact('resp'));

		$paths = $this->_convert_list_response($paths['bSciezki'], 'bSciezkaAkceptacji');
		$paths = $paths['bSciezkaAkceptacji'];
		$paths = $this->_replace_empty_values($paths, '');
		$this->set(compact('paths'));
	}

	/**
	 * @param null $gid
	 */
	public function sciezka_akceptacji($gid = null)
	{
		$this->layout = 'ajax';

		$this->set(compact('gid'));
		if ($this->request->is('post')) {

			$this->render(false);

			$data = array();
			$rData = $this->request->data;

			foreach ($rData['pSciezkaAkceptacji']['dat:Sciezka']['dat:ElementSciezkiAkceptacji'] as &$element) {
				if (!isset($element['dat:CzyMusiZaakceptowac']) || $element['dat:CzyMusiZaakceptowac'] == '0') {
					$element['dat:CzyMusiZaakceptowac'] = 'false';
				} else {
					$element['dat:CzyMusiZaakceptowac'] = 'true';
				}
				if (!isset($element['dat:CzyMozeAkceptowacZaPozostalych']) || $element['dat:CzyMozeAkceptowacZaPozostalych'] == '0') {
					$element['dat:CzyMozeAkceptowacZaPozostalych'] = 'false';
				} else {
					$element['dat:CzyMozeAkceptowacZaPozostalych'] = 'true';
				}
			}
			$data['tem:pSciezkaAkceptacji'] = array();
			$data['tem:pSciezkaAkceptacji']['dat:CharakteryPracy'] = $rData['pSciezkaAkceptacji']['dat:CharakteryPracy'];
			$data['tem:pSciezkaAkceptacji']['dat:CzyDotyczyWszystkich'] = $this->_checkbox_int_2_string($rData['pSciezkaAkceptacji']['dat:CzyDotyczyWszystkich']);
			$data['tem:pSciezkaAkceptacji']['dat:DodatkoweOpisy'] = $rData['pSciezkaAkceptacji']['dat:DodatkoweOpisy'];
			if (!is_null($gid)) {
				$data['tem:pSciezkaAkceptacji']['dat:Gid'] = $rData['pSciezkaAkceptacji']['dat:Gid'];
			}
			$data['tem:pSciezkaAkceptacji']['dat:Komorki'] = $rData['pSciezkaAkceptacji']['dat:Komorki'];
			$data['tem:pSciezkaAkceptacji']['dat:MiejscaWykonywaniaPracy'] = $rData['pSciezkaAkceptacji']['dat:MiejscaWykonywaniaPracy'];
			$data['tem:pSciezkaAkceptacji']['dat:NumeryEwidencyjne'] = $rData['pSciezkaAkceptacji']['dat:NumeryEwidencyjne'];
			$data['tem:pSciezkaAkceptacji']['dat:NumeryEwidencyjneWykluczone'] = $rData['pSciezkaAkceptacji']['dat:NumeryEwidencyjneWykluczone'];
			$data['tem:pSciezkaAkceptacji']['dat:Opis'] = $rData['pSciezkaAkceptacji']['dat:Opis'];

			$data['tem:pSciezkaAkceptacji']['dat:Piony'] = $rData['pSciezkaAkceptacji']['dat:Piony'];
			$data['tem:pSciezkaAkceptacji']['dat:Platnicy'] = $rData['pSciezkaAkceptacji']['dat:Platnicy'];
			$data['tem:pSciezkaAkceptacji']['dat:Regiony'] = $rData['pSciezkaAkceptacji']['dat:Regiony'];
			foreach ($rData['pSciezkaAkceptacji']['dat:Sciezka']['dat:ElementSciezkiAkceptacji'] as $pathElement) {
				$tempElement = array(
					'dat:Akceptujacy' => $pathElement['dat:Akceptujacy'],
					'dat:CzyMozeAkceptowacZaPozostalych' => $pathElement['dat:CzyMozeAkceptowacZaPozostalych'],
					'dat:CzyMusiZaakceptowac' => $pathElement['dat:CzyMusiZaakceptowac'],
					'dat:Indeks' => $pathElement['dat:Indeks']
				);
				$data['tem:pSciezkaAkceptacji']['dat:Sciezka'][]['dat:ElementSciezkiAkceptacji'] = $tempElement;
			}
			$data['tem:pSciezkaAkceptacji']['dat:Stanowiska'] = $rData['pSciezkaAkceptacji']['dat:Stanowiska'];
			$data['tem:pSciezkaAkceptacji']['dat:Symbol'] = $rData['pSciezkaAkceptacji']['dat:Symbol'];

			if (is_null($gid)) {
				$request = $this->_dodaj_sciezke_akceptacji($data);
			} else {
				$request = $this->_edytuj_sciezke_akceptacji($data);
			}
			/*if($this->_handle_response($request))
            {
                return $this->redirect('/sciezki_akceptacji');
            }*/

			echo json_encode($this->_handle_response_json($request));
			die();
		}
		if (!is_null($gid)) {
			$path = $this->_daj_sciezki_akceptacji($gid);

			$resp = $this->_handle_response_json($path);
			$this->set(compact('resp'));

			$path = $path['bSciezkaAkceptacji'];

			$path['bCzyDotyczyWszystkich'] = $this->_checkbox_string_2_bool($path['bCzyDotyczyWszystkich']);

			$path['bSciezka']['bElementSciezkiAkceptacji'] = $this->_convert_list_response($path['bSciezka']['bElementSciezkiAkceptacji'], 'bElementSciezkiAkceptacji');
			$path = $this->_rename_array_key_prefixes($path, 'b', 'dat:');
			$path['dat:Sciezka'] = $this->_rename_array_key_prefixes($path['dat:Sciezka'], 'b', 'dat:');
			$this->_convert_list_response($path['dat:Sciezka'], 'dat:ElementSciezkiAkceptacji');
			foreach ($path['dat:Sciezka']['dat:ElementSciezkiAkceptacji'] as &$element) {
				$element = $this->_rename_array_key_prefixes($element, 'b', 'dat:');
				$element['dat:Akceptujacy'] = $this->_rename_array_key_prefixes($element['dat:Akceptujacy'], 'c', 'dat1:');
			}
			$this->request->data['pSciezkaAkceptacji'] = $path;
			$this->set('pageName', 'Administracja - Edytuj ścieżkę akceptacji');
		}
	}


	public function usun_sciezke_akceptacji($gid)
	{
		$this->layout = 'ajax';
		$this->render(false);
		$response = $this->Api->UsunSciezkeAkceptacji($this->_getGid(), $gid);
		echo json_encode($this->_handle_response_json($response));
		die();
	}

	/**
	 *
	 */
	public function daj_moduly()
	{
		$roleGid = null;
		$userGid = $this->_getUserGid();
		$modules = $this->_daj_moduly($roleGid, $userGid);
		debug($modules);
		die();
	}

	/**
	 * umowy_o_prace method
	 */
	public function umowy_o_prace()
	{
		$this->layout = 'ajax';
		$currentYear = (isset($this->request->query['tylko-ten-rok']));
		$contracts = $this->_umowy_o_prace($this->Auth->user('cNumerEwidencyjny'), $currentYear);

		$rjson = $this->_handle_response_json($contracts);
		if (isset($rjson['login']) && !empty($rjson['login'])) {
			echo 'login';
			die();
		}

		$contracts = $this->_umowy_o_prace_convert($contracts, $currentYear);

		$this->set(compact('contracts'));
	}

	/**
	 * nieobecnosci method
	 */
	public function nieobecnosci()
	{
		$this->layout = 'ajax';
		$currentYear = (isset($this->request->query['tylko-ten-rok']));
		$absents = $this->_nieobecnosci($this->Auth->user('cNumerEwidencyjny'), $currentYear);

		$rjson = $this->_handle_response_json($absents);
		if (isset($rjson['login']) && !empty($rjson['login'])) {
			echo 'login';
			die();
		}

		$absents = $this->_nieobecnosci_convert($absents, $currentYear);

		$this->set(compact('absents'));
	}

	/**
	 * zawiesia method
	 */
	public function zawiesia()
	{
		// Pobranie kodów za pomocą wyodrębnionej funkcji
		$rodzaj = $this->generujKodyMap(self::KOD_RODZAJ);
		$gniazdo = $this->generujKodyMap(self::KOD_GNIAZDO);
		$dlugosc = $this->generujKodyMap(self::KOD_DLUGOSC);
		$nosnosc = $this->generujKodyMap(self::KOD_NOSNOSC);
		$material = $this->generujKodyMap(self::KOD_MATERIAL);

		// Ustawienia widoku i przetwarzanie danych
		$this->layout = 'ajax';
		$zawiesia = $this->Api->dajListeZawiesi($this->_getGid());
		$listaZawiesi = [];
		$oneElement = false;
		foreach ($zawiesia['bZawiesia']['bZawiesie'] as $zawiesie) {
			if (is_array($zawiesie) and !empty($zawiesie)) {
				$listaZawiesi[] = $zawiesie;
			} else {
				$oneElement = true;
			}
		}
		if ($oneElement) {
			$listaZawiesi[] = $zawiesia['bZawiesia']['bZawiesie'];
		}
		$rjson = $this->_handle_response_json($listaZawiesi);

		// Obsługa odpowiedzi
		if (!empty($rjson['login'])) {
			echo 'login';
			die();
		}

		// Przekazanie danych do widoku
		$this->set(compact('listaZawiesi', 'rodzaj', 'gniazdo', 'dlugosc', 'nosnosc', 'material'));
	}

	private function generujKodyMap($kod)
	{
		$kody = [];
		foreach (($this->_daj_liste_kodow($kod)['bKody']['bKod'] ?? []) as $value) {
			$kody[$value['bSymbol']] = ['opis' => $value['bOpis'], 'symbolZewnetrzny' => $value['bSymbolZewnetrzny']];
		}
		return $kody;
	}

	public function daj_zawiesie($gid)
	{
		$this->layout = 'ajax';
		$zawiesie = $this->Api->dajZawiesie($this->_getGid(), $gid);
		echo json_encode($zawiesie['bZawiesie'] ?? []);

		die();
	}

	public function daj_nowe_zawiesie()
	{
		$this->layout = 'ajax';
		$zawiesie = $this->Api->dajNoweZawiesie($this->_getGid());
		echo json_encode($zawiesie['bZawiesie'] ?? []);

		die();
	}

	public function usun_zawiesie($gid)
	{
		$this->layout = 'ajax';
		$zawiesie = $this->Api->usunZawiesie($this->_getGid(), $gid);
		echo json_encode($this->_handle_response_json($zawiesie));

		die();
	}

	public function dodaj_zawiesie()
	{
		$this->layout = 'ajax';

		if ($this->request->is(['post', 'put'])) {
			$zawiesie = $this->Api->dajNoweZawiesie($this->_getGid())['bZawiesie'] ?? [];
			if (!empty($zawiesie)) {
				$form = $this->request->data;
				$zawiesie = array_merge($zawiesie, $form);
				$data = [];
				foreach ($zawiesie as $key => $value) {
					if (strpos($key, 'b') === 0) {
						$newKey = 'dat:' . substr($key, 1);
					} else {
						$newKey = $key;
					}
					if (!empty($value)) {
						$data[$newKey] = $value;
					}
				}

				$response = $this->Api->kontrolujZawiesie($this->_getGid(), $data);

				$ok = $this->_handle_response($response);
				if ($ok) {
					if ($form['bRodzajEdycji'] === 'Dodawanie') {
						$response = $this->Api->dodajZawiesie($this->_getGid(), $data);
					} else {
						$response = $this->Api->edytujZawiesie($this->_getGid(), $data);
					}
				}

				$this->set('response', $this->_handle_response_json($response));

				echo json_encode($this->_handle_response_json($response));
			} else {
				echo json_encode('Nie można pobrać danych.');
			}
		}
		die();
	}

	public function ajax_odziez_robocza($numer)
	{
		$this->odziez_robocza('ListaOdziezy', $numer);
	}

	/**
	 * odziez_robocza method
	 */
	public function odziez_robocza($type = 'ListaOdziezy', $numer = null)
	{
		$this->layout = 'ajax';

		if ('Podlegli' == $type or null !== $numer) {
			$type = 'ListaOdziezy.Podlegli';
		}

		$options = ['type' => $type];

		if (null !== $numer) {
			$options['numer'] = $numer;
			$this->set('nrewid', $numer);
		} else {
			$this->set('nrewid', $this->Auth->user('cNumerEwidencyjny'));
		}

		$odziez = $this->Api->dajListeOdziezyRoboczej($this->_getGid(), $options);
		$listaOdziezy = [];
		$oneElement = false;
		foreach ($odziez['bZapisyOdziezyRoboczej']['bZapisOdziezyRoboczej'] as $ubranie) {
			if (is_array($ubranie) and !empty($ubranie)) {
				$listaOdziezy[] = $ubranie;
			} else {
				$oneElement = true;
			}
		}
		if ($oneElement) {
			$listaOdziezy[] = $odziez['bZapisyOdziezyRoboczej']['bZapisOdziezyRoboczej'];
		}
		$rjson = $this->_handle_response_json($listaOdziezy);

		// Obsługa odpowiedzi
		if (!empty($rjson['login'])) {
			echo 'login';
			die();
		}

		// Flagi dla opcjonalnych kolumn
		$bCzyKolumnaWartosc = $odziez['bCzyKolumnaDataLikwidacji'] == 'true';
		$bCzyKolumnaDataZwrotu = $odziez['bCzyKolumnaDataZwrotu'] == 'true';
		$bCzyKolumnaDataLikwidacji = $odziez['bCzyKolumnaWartosc'] == 'true';

		// Przygotowanie danych raportów
		$identyfikatoryRaportow = [];
		$nazwyRaportow = [];

		// Sprawdzenie czy istnieją dane raportów
		if (isset($odziez['bIdentyfikatoryRaportow']) && (isset($odziez['bIdentyfikatoryRaportow']['cguid']) and !empty($odziez['bIdentyfikatoryRaportow']['cguid']))) {
			$identyfikatoryRaportow = $odziez['bIdentyfikatoryRaportow']['cguid'];
		}

		if (isset($odziez['bNazwyRaportow']) && (isset($odziez['bNazwyRaportow']['cstring']) and !empty($odziez['bNazwyRaportow']['cstring']))) {
			$nazwyRaportow = $odziez['bNazwyRaportow']['cstring'];
		}

		// Połączenie identyfikatorów i nazw raportów w jedną tablicę
		$raporty = [];
		if (is_array($identyfikatoryRaportow) && is_array($nazwyRaportow)) {
			$count = min(count($identyfikatoryRaportow), count($nazwyRaportow));
			for ($i = 0; $i < $count; $i++) {
				$raporty[] = [
					'id' => $identyfikatoryRaportow[$i],
					'nazwa' => $nazwyRaportow[$i]
				];
			}
		} elseif (is_string($identyfikatoryRaportow) && is_string($nazwyRaportow)) {
			$raporty[] = [
				'id' => $identyfikatoryRaportow,
				'nazwa' => $nazwyRaportow
			];
		}

		$reportList = $this->Api->dajMozliweRaportyOdziezyRoboczej($this->_getGid(), $options);

		// Przygotowanie danych raportów
		$identyfikatoryRaportowGlobalnych = [];
		$nazwyRaportowGlobalnych = [];

		// Sprawdzenie czy istnieją dane raportów
		if (isset($reportList['bIdentyfikatory']) && (isset($reportList['bIdentyfikatory']['cguid']) and !empty($reportList['bIdentyfikatory']['cguid']))) {
			$identyfikatoryRaportowGlobalnych = $reportList['bIdentyfikatory']['cguid'];
		}

		if (isset($reportList['bNazwy']) && (isset($reportList['bNazwy']['cstring']) and !empty($reportList['bNazwy']['cstring']))) {
			$nazwyRaportowGlobalnych = $reportList['bNazwy']['cstring'];
		}

		// Połączenie identyfikatorów i nazw raportów w jedną tablicę
		$raportyGlobalne = [];
		if (is_array($identyfikatoryRaportowGlobalnych) && is_array($nazwyRaportowGlobalnych)) {
			$count = min(count($identyfikatoryRaportowGlobalnych), count($nazwyRaportowGlobalnych));
			for ($i = 0; $i < $count; $i++) {
				$raportyGlobalne[] = [
					'id' => $identyfikatoryRaportowGlobalnych[$i],
					'nazwa' => $nazwyRaportowGlobalnych[$i]
				];
			}
		} elseif (is_string($identyfikatoryRaportowGlobalnych) && is_string($nazwyRaportowGlobalnych)) {
			$raportyGlobalne[] = [
				'id' => $identyfikatoryRaportowGlobalnych,
				'nazwa' => $nazwyRaportowGlobalnych
			];
		}

		// Przekazanie danych do widoku
		$this->set(compact('listaOdziezy', 'bCzyKolumnaWartosc', 'bCzyKolumnaDataZwrotu', 'bCzyKolumnaDataLikwidacji', 'raporty', 'raportyGlobalne'));
	}

	public function odziez_robocza_drukuj_raport($numer = null)
	{
		$this->layout = 'ajax';

		if ($this->request->is(array('post', 'put'))) {

			$form = $this->request->data;

			$options = [];
			$options['zMetody'] = $form['ZMetody'];  //DrukujRaportOdziezyRoboczejZadanie.ZMetody = patrz dalej
			$options['identyfikator'] = $form['Identyfikator'];  //DrukujRaportOdziezyRoboczejZadanie.Identyfikator = identyfikator raportu z DajZapisyOdziezyRoboczejOdpowiedz.IdentyfikatoryRaportow
			$options['gidDokumentu'] = $form['GidDokumentu'];  //DrukujRaportOdziezyRoboczejZadanie.GidDokumentu = Gid zapisu odzieży roboczej tego wiersza: ZapisOdziezyRoboczej.Gid lub null
			$options['okresOd'] = $form['DataOd'];
			$options['okresDo'] = $form['DataDo'];
			$numer = $form['numer'] ?? $numer;
			if (null !== $numer) {
				$options['numer'] = $numer;
			} else {
				$options['numer'] = $this->Auth->user('cNumerEwidencyjny');
			}

			$response = $this->Api->drukujRaportOdziezyRoboczej($this->_getGid(), $options);

			$resp = $this->_handle_response_json($response);

			if (isset($resp['login'])) {
				$this->redirect('/');
			} else {
				if (!empty($response['bRaport'])) {
					$content = base64_decode($response['bRaport']);
					$filename = 'odziez_robocza_' . $form['ZMetody'] . '.pdf';
					$extension = 'pdf';

					header('Content-Type: application/' . $extension);
					header('Content-Length: ' . strlen($content));
					header('Content-Disposition: inline; filename="' . $filename . '"');
					header('Cache-Control: private, max-age=0, must-revalidate');
					header('Pragma: public');
					ini_set('zlib.output_compression', '0');

					echo $content;
				}
			}
			die();
		}
	}


	/**
	 * zfs method
	 */
	public function zfs_wnioski()
	{
		// Ustawienia widoku i przetwarzanie danych
		$this->layout = 'ajax';
		$wnioski = $this->Api->dajListeWnioskowZFS($this->_getGid());
		$listaWnioskowZFS = [];
		$oneElement = false;
		foreach ($wnioski['bWnioskiZFS']['bWniosekZFS'] as $wniosekZFS) {
			if (is_array($wniosekZFS) and !empty($wniosekZFS)) {
				$listaWnioskowZFS[] = $wniosekZFS;
			} else {
				$oneElement = true;
			}
		}
		if ($oneElement) {
			$listaWnioskowZFS[] = $wnioski['bWnioskiZFS']['bWniosekZFS'];
		}
		$rjson = $this->_handle_response_json($listaWnioskowZFS);

		// Obsługa odpowiedzi
		if (!empty($rjson['login'])) {
			echo 'login';
			die();
		}

		// Przekazanie danych do widoku
		$this->set(compact('listaWnioskowZFS'));
	}

	public function daj_mozliwe_rodzaje_wniosku_zfs()
	{
		$this->layout = 'ajax';
		$dajMozliweRodzajeWniosku = $this->Api->dajMozliweRodzajeWnioskuZFS($this->_getGid());
		if (is_string($dajMozliweRodzajeWniosku['bRodzaje']['bRodzajeWnioskuZFS'] ?? [])) {
			echo json_encode([$dajMozliweRodzajeWniosku['bRodzaje']['bRodzajeWnioskuZFS']]);
		}
		echo json_encode($dajMozliweRodzajeWniosku['bRodzaje']['bRodzajeWnioskuZFS'] ?? []);

		die();
	}

	public function daj_wniosek_zfs($gid)
	{
		$this->layout = 'ajax';
		$zawiesie = $this->Api->dajWniosekZFS($this->_getGid(), $gid);
		echo json_encode($zawiesie['bWniosekZFS'] ?? []);

		die();
	}

	public function daj_nowy_wniosek_zfs($rodzaj)
	{
		$this->layout = 'ajax';
		$dajNowyWniosekZFS = $this->Api->dajNowyWniosekZFS($this->_getGid(), $rodzaj);
		echo json_encode($dajNowyWniosekZFS['bWniosekZFS'] ?? []);

		die();
	}

	public function usun_wniosek_zfs($gid)
	{
		$this->layout = 'ajax';
		$zawiesie = $this->Api->usunWniosekZFS($this->_getGid(), $gid);
		echo json_encode($this->_handle_response_json($zawiesie));

		die();
	}

	public function dodaj_wniosek_zfs()
	{
		$this->layout = 'ajax';

		if ($this->request->is(array('post', 'put'))) {
			$form = $this->request->data;
			$wniosekZFS = $this->Api->dajNowyWniosekZFS($this->_getGid(), $form['bRodzaj'])['bWniosekZFS'] ?? [];
			if (!empty($wniosekZFS)) {
				$wniosekZFS = array_merge($wniosekZFS, $form);
				$data = [];
				foreach ($wniosekZFS as $key => $value) {
					if (strpos($key, 'b') === 0) {
						$newKey = 'dat:' . substr($key, 1);
					} else {
						$newKey = $key;
					}
					if (!empty($value)) {
						$data[$newKey] = $value;
					}
				}

				$response = $this->Api->kontrolujWniosekZFS($this->_getGid(), $data);

				$ok = $this->_handle_response($response);
				if ($ok) {
					if ($form['bRodzajEdycji'] === 'Dodawanie') {
						$response = $this->Api->dodajWniosekZFS($this->_getGid(), $data);
					} else {
						$response = $this->Api->edytujWniosekZFS($this->_getGid(), $data);
					}
				}

				$this->set('response', $this->_handle_response_json($response));

				echo json_encode($this->_handle_response_json($response));
			} else {
				echo json_encode('Nie można pobrać danych.');
			}
		}
		die();
	}

	/**
	 * @return string
	 */
	public function przebiegi_pracy()
	{
		$this->layout = 'ajax';
		$workflows = $this->_przebiegi_pracy($this->Auth->user('cNumerEwidencyjny'));

		$rjson = $this->_handle_response_json($workflows);
		if (isset($rjson['login']) && !empty($rjson['login'])) {
			echo 'login';
			die();
		}

		$workflows = $this->_przebiegi_pracy_convert($workflows);

		$this->set(compact('workflows'));
	}

	/**
	 * wyksztalcenia method
	 */
	public function wyksztalcenia()
	{
		$this->layout = 'ajax';
		$educations = $this->_wyksztalcenia($this->Auth->user('cNumerEwidencyjny'));

		$rjson = $this->_handle_response_json($educations);
		if (isset($rjson['login']) && !empty($rjson['login'])) {
			echo 'login';
			die();
		}

		$educations = $this->_wyksztalcenia_convert($educations);

		$this->set(compact('educations'));
	}

	/**
	 * badania method
	 */
	public function badania()
	{
		$this->layout = 'ajax';
		$currentYear = (isset($this->request->query['tylko-ten-rok']));
		$badania = $this->_badania($this->Auth->user('cNumerEwidencyjny'), $currentYear);

		$rjson = $this->_handle_response_json($badania);
		if (isset($rjson['login']) && !empty($rjson['login'])) {
			echo 'login';
			die();
		}

		$badania = $this->_badania_convert($badania, $currentYear);

		$this->set(compact('badania'));
	}

	/**
	 * szkolenia method
	 */
	public function szkolenia()
	{
		$this->layout = 'ajax';
		$currentYear = (isset($this->request->query['tylko-ten-rok']));
		$trainings = $this->_szkolenia($this->Auth->user('cNumerEwidencyjny'), $currentYear);
		$this->set(compact('trainings'));
	}

	/**
	 * kary method
	 */
	public function kary()
	{
		$this->layout = 'ajax';
		$punishes = $this->_kary($this->Auth->user('cNumerEwidencyjny'));
		$this->set(compact('punishes'));
	}

	/**
	 * jezyki method
	 */
	public function jezyki()
	{
		$this->layout = 'ajax';
		$langs = $this->_jezyki($this->Auth->user('cNumerEwidencyjny'));
		$this->set(compact('langs'));
	}

	/**
	 * kwalifikacje method
	 */
	public function kwalifikacje()
	{
		$this->layout = 'ajax';
		$skills = $this->_kwalifikacje($this->Auth->user('cNumerEwidencyjny'));
		$this->set(compact('skills'));
	}

	/**
	 * rodzina method
	 */
	public function rodzina()
	{
		$this->layout = 'ajax';
		$family = $this->_rodzina($this->Auth->user('cNumerEwidencyjny'));
		$this->set(compact('family'));
	}

	/**
	 * ocena method
	 */
	public function ocena()
	{
		$this->layout = 'ajax';
		$ratings = $this->_ocena($this->Auth->user('cNumerEwidencyjny'));
		$this->set(compact('ratings'));
	}

	/**
	 * plan_urlopu method
	 */
	public function plan_urlopu()
	{
		$this->layout = 'ajax';
		$free_days = $this->_plan_urlopu($this->Auth->user('cNumerEwidencyjny'));
		$this->set(compact('free_days'));
	}

	/**
	 * _akceptacja_planu_urlopu method
	 */
	public function akceptacja_planu_urlopu()
	{
		$this->layout = 'ajax';
		$accept = $this->request->query('tylko-akceptacja') > 0 ? 'true' : 'false';
		$year = $this->request->query('rok-akceptacja') ?: date('Y');
		$free_days = $this->_akceptacja_planu_urlopu($this->Auth->user('cNumerEwidencyjny'), $accept, $year);
		$this->set(compact('free_days'));
	}

	/**
	 * @param $bGid
	 */
	public function usun_plan_urlopu($bGid)
	{
		$this->layout = 'ajax';
		$this->render(false);

		$response = $this->Api->UsunPlanUrlopu($this->_getGid(), $bGid);

		echo json_encode($this->_handle_response_json($response));
		die();
	}

	/**
	 * dodaj_urlopu method
	 */
	public function dodaj_urlop()
	{
		$this->layout = 'ajax';

		$codes = $this->_daj_mozliwe_kody_wniosku('PlanUrlopu');

		$resp = $this->_handle_response_json($codes);
		$this->set(compact('resp'));

		$codeList = array();
		foreach ($codes['bKody']['bKod'] as $code) {
			$nrAndGid = array(
				'dat2:Gid' => $code['bGid'],
				'dat2:Numer' => $code['bNumer'],
				'dat2:Opis' => $code['bOpis'],
				'dat2:Symbol' => $code['bSymbol'],
				'dat2:CzyPracaZdalna' => $code['bCzyPracaZdalna'],
				'dat2:CzyPracaZdalnaSaldo' => $code['bCzyPracaZdalnaSaldo'],
			);
			$codeList[$this->_array_2_string($nrAndGid)] = $code['bOpis'];
		}
		$this->set('codes', $codeList);
		$thisYear = new DateTime();
		$thisYear = (int)$thisYear->format('Y');
		$saldoOptions = array(
			'dat:Lata' => array(
				0 => array(
					'arr:int' => $thisYear
				)
			),
			'dat:NumerPracownika' => $this->Auth->user('cNumerEwidencyjny')
		);

		if ($this->request->is(array('post', 'put'))) {
			$data = $this->request->data['pPlanUrlopu'];
			$data['dat:Kod'] = $this->_string_2_array($data['dat:Kod']['dat2:NumerIGid']);
			$data['dat:DataDo'] = $this->_date_for_request($data['dat:DataDo']);
			$data['dat:DataOd'] = $this->_date_for_request($data['dat:DataOd']);
//            $data['dat:Gid'] = $this->_getUserGid();
			$data['dat:NumerEwidencyjny'] = $this->Auth->user('cNumerEwidencyjny');
			$response = $this->_dodaj_urlop($data);
			$this->set('response', $response);

			$resp = $this->_handle_response_json($response);
			echo json_encode($resp);
			die();
		}

		$saldo5 = $this->_saldo_urlopu_5(null, 'PlanUrlopu');
		$this->set(compact('saldo5'));
	}

	/**
	 * dodaj_urlopu method
	 */
	public function ajax_sprawdz_urlop()
	{
		$this->layout = 'ajax';
		$this->render(false);

		if ($this->request->is(array('post', 'put'))) {
			$data = $this->request->data['pPlanUrlopu'];
			$data['dat:Kod'] = $this->_string_2_array($data['dat:Kod']['dat2:NumerIGid']);
			$data['dat:DataDo'] = $this->_date_for_request($data['dat:DataDo']);
			$data['dat:DataOd'] = $this->_date_for_request($data['dat:DataOd']);
			$data['dat:Gid'] = $this->_getUserGid();
			$data['dat:NumerEwidencyjny'] = $this->Auth->user('cNumerEwidencyjny');
			$response = $this->Api->TestujUrlop($this->_getGid(), $data);

			$this->set('response', $response);
			echo json_encode($response);
		}
		die();
	}

	public function ajax_sprawdz_urlop_edycja()
	{
		$this->layout = 'ajax';
		$this->render(false);

		if ($this->request->is(array('post', 'put'))) {
			$data = $this->request->data['pPlanUrlopu'];
			$data['dat:Kod'] = $this->_string_2_array($data['dat:Kod']['dat2:NumerIGid']);
			$data['dat:DataDo'] = $this->_date_for_request($data['dat:DataDo']);
			$data['dat:DataOd'] = $this->_date_for_request($data['dat:DataOd']);
			$data['dat:NumerEwidencyjny'] = $this->Auth->user('cNumerEwidencyjny');
			$response = $this->Api->TestujUrlop($this->_getGid(), $data);

			$this->set('response', $response);
			echo json_encode($response);
		}
		die();
	}

	/**
	 * @param $bGid
	 */
	public function edytuj_plan_urlopu($bGid = NULL)
	{
		$this->layout = 'ajax';

		$codes = $this->_daj_mozliwe_kody_wniosku();

		$resp = $this->_handle_response_json($codes);
		$this->set(compact('resp'));

		$codeList = array();
		foreach ($codes['bKody']['bKod'] as $code) {
			$nrAndGid = array(
				'dat2:Gid' => $code['bGid'],
				'dat2:Numer' => $code['bNumer'],
				'dat2:Opis' => $code['bOpis'],
				'dat2:Symbol' => $code['bSymbol'],
				'dat2:CzyPracaZdalna' => $code['bCzyPracaZdalna'],
				'dat2:CzyPracaZdalnaSaldo' => $code['bCzyPracaZdalnaSaldo'],
			);
			$codeList[$this->_array_2_string($nrAndGid)] = $code['bOpis'];
		}
		$this->set('codes', $codeList);
		$thisYear = new DateTime();
		$thisYear = (int)$thisYear->format('Y');
		$saldoOptions = array(
			'dat:Lata' => array(
				0 => array(
					'arr:int' => $thisYear
				)
			),
			'dat:NumerPracownika' => $this->Auth->user('cNumerEwidencyjny')
		);

		$planUrlopu = $this->Api->DajPlanUrlopu($this->_getGid(), $bGid);
		if ($this->request->is(array('post', 'put'))) {
			$data = $this->request->data['pPlanUrlopu'];
			$data['dat:Kod'] = $this->_string_2_array($data['dat:Kod']['dat2:NumerIGid']);
			$data['dat:DataDo'] = $this->_date_for_request($data['dat:DataDo']);
			$data['dat:DataOd'] = $this->_date_for_request($data['dat:DataOd']);
			$data['dat:DataOd'] = $this->_date_for_request($data['dat:DataOd']);
			$data['dat:Gid'] = $bGid;
			$data['dat:NumerEwidencyjny'] = $this->Auth->user('cNumerEwidencyjny');
			$response = $this->_edytuj_urlop($data);
			$this->set('response', $response);

			echo json_encode($this->_handle_response_json($response));
			die();
		} else {
			$nrAndGid = array(
				'dat2:Gid' => $planUrlopu['bPlanUrlopu']['bKod']['cGid'],
				'dat2:Numer' => $planUrlopu['bPlanUrlopu']['bKod']['cNumer'],
				'dat2:Opis' => $planUrlopu['bPlanUrlopu']['bKod']['cOpis'],
				'dat2:Symbol' => $planUrlopu['bPlanUrlopu']['bKod']['cSymbol']
			);
			$this->request->data['pPlanUrlopu']['dat:Kod']['dat2:NumerIGid'] = $this->_array_2_string($nrAndGid);
			$this->request->data['pPlanUrlopu']['dat:DataOd'] = $planUrlopu['bPlanUrlopu']['bDataOd'];
			$this->request->data['pPlanUrlopu']['dat:DataDo'] = $planUrlopu['bPlanUrlopu']['bDataDo'];
			$this->request->data['pPlanUrlopu']['dat:Gid'] = $bGid;
			$this->request->data['pPlanUrlopu']['dat:Opis'] = $planUrlopu['bPlanUrlopu']['bOpis'];
			$this->request->data['pPlanUrlopu']['dat:InformacjeDodatkowe'] = $planUrlopu['bPlanUrlopu']['bInformacjeDodatkowe'];

		}

		$saldo5 = $this->_saldo_urlopu_5(null, 'PlanUrlopu');
		$this->set(compact('saldo5'));
	}

	/**
	 * dokuemnty method
	 */
	public function dokumenty()
	{
		$this->layout = 'ajax';
		$documents = $this->_dokumenty_kadrowe($this->Auth->user('cNumerEwidencyjny'));
		$this->set(compact('documents'));
	}

	/**
	 *
	 */
	public function lista_zastepstw()
	{
		$replacements = $this->Api->DajListeZastepstw($this->_getGid());
		$this->_convert_list_response($replacements['bZastepstwa'], 'bZastepstwo');
		debug($replacements);
		die();
	}

	/**
	 *
	 */
	public function nowe_zastepstwo()
	{
		$replacement = $this->Api->DajNoweZastepstwo($this->_getGid());
		debug($replacement);
		die();
	}


	/**
	 * place method
	 */
	public function place()
	{
		$this->layout = 'ajax';
	}

	/**
	 * @return string
	 */
	public function grafik()
	{
		$this->layout = 'ajax';
	}

	/**
	 * ajax_kalendarz_urlopu method
	 */
	public function kalendarz_urlopu($nrewid = NULL)
	{
		$this->layout = 'ajax';
		$this->set(compact('nrewid'));
	}

	/**
	 * ajax_kalendarz_urlopu method
	 */
	public function ajax_kalendarz_urlopu($nrewid = NULL)
	{
		$this->layout = 'ajax';
		$this->set(compact('nrewid'));
	}

	public function calendar_holiday_feed_ajax($nrewid = NULL, $coworkers = false)
	{
		if ($this->request->is('ajax')) {
			if ($this->request->is(array('post'))) {
				$options = array();
				if ($nrewid != NULL) {
					$options['dat:NumeryEwidencyjne'] = array(
						'dat1:int' => $nrewid
					);
				}
				//ważna jest data początkowa - wyciągany jest miesiąc i na jej podstawie zwracane są dane
				$newTime = strtotime($this->request->data['start']) + (2 * 60 * 60 * 24 * 7);
				$options['dat:OkresDo'] = ($this->request->data['end'] . 'T00:00:00');
				$options['dat:OkresOd'] = (date('Y-m-', $newTime) . '01T00:00:00');
				if ($coworkers == true) {
					$options['dat:CzasPracyWspolpracownika'] = true;
				}
				$this->Session->write('calendar_holiday_feed_ajax', $options);
				$_events = $this->Api->DajKalendarzUrlopow($this->_getGid(), $options);
				$print = isset($_events['bCzyMoznaDrukowac']) && $_events['bCzyMoznaDrukowac'] === 'true' ? 1 : 0;

				if (!isset($_events['bZdarzeniaRCP']['bZdarzenieRCP'][0])) {
					$_events['bZdarzeniaRCP']['bZdarzenieRCP'] = [$_events['bZdarzeniaRCP']['bZdarzenieRCP']];
				}

				foreach ($_events['bZdarzeniaRCP']['bZdarzenieRCP'] as $k => $e) {
					if ($e['bRodzaj'] != 'ParametryDnia') {
						if ($e['bRodzaj'] != 'ParametryDnia') {
							$end = (isset($e['bGodzinaZakonczenia']) && !empty($e['bGodzinaZakonczenia'])) ? str_replace('T', ' ', $e['bGodzinaZakonczenia']) : str_replace('T', ' ', $e['bDzien']);

							$index = $e['bIndex'];

							$dzien = date('Y-m-d', strtotime($e['bDzien']));
							$parametryDnia = $this->_dajParametryDnia($_events['bZdarzeniaRCP']['bZdarzenieRCP'], $dzien);
							$czySwieto = (!empty($parametryDnia)) ? $parametryDnia['bCzySwieto'] : $e['bCzySwieto'];

							$singleEvent = array(
								'id' => ($k + 1),
								'czySwieto' => $czySwieto,
								'czyUmowa' => (!empty($parametryDnia)) ? $parametryDnia['bCzyUmowa'] : $e['bCzyUmowa'],
								'title' => $e['bNazwa'],
								'allDay' => true,
								'start' => $dzien,
								'end' => $end,
								'index' => (int)$index,
								'print' => $print
							);
							if (!empty($e['bKolorTlaHTML'])) $singleEvent['color'] = $e['bKolorTlaHTML'];
							if (!empty($e['bKolorPierwszegoPlanuHTML'])) $singleEvent['textColor'] = $e['bKolorPierwszegoPlanuHTML'];
							$events[] = $singleEvent;
						}
					} else {
						if ($e['bCzySwieto'] && !empty($e['bSwietoOpis'])) {
							$singleEvent = array();
							$singleEvent['start'] = date('Y-m-d', strtotime($e['bDzien']));
							$singleEvent['title'] = $e['bSwietoOpis'];
							$singleEvent['czySwieto'] = true;
							$singleEvent['color'] = 'red';
							$singleEvent['index'] = 1;
							$singleEvent['print'] = $print;
							$events[] = $singleEvent;
						}
					}
				}

				//weekend days in date (start/end) range
//                $start = new DateTime($this->request->data['start']);
//                $end = new DateTime($this->request->data['end']);
//                $oneday = new DateInterval("P1D");
//                foreach(new DatePeriod($start, $oneday, $end->add($oneday)) as $day)
//                {
//                    $day_num = $day->format("N"); /* 'N' number days 1 (mon) to 7 (sun) */
//                    if($day_num >= 6)
//                    {
//                        $events[] = array(
//                            'id' => ($k+1),
//                            'title' => '',
//                            'weekendColor' => $day_num == 6 ? 'blue' : 'red',
//                            'allDay' => true,
//                            'start' => $day->format('Y-m-d'),
//                            'color' => 'transparent'
//                        );
//                    }
//                }

				echo json_encode($events);
			} else {
				echo json_encode(array());
			}
			die();
		}
	}


	/**
	 * ajax_kalendarz_urlopow_wspolpracownikow method
	 */
	public function kalendarz_urlopow_wspolpracownikow($nrewid = NULL)
	{
		$this->layout = 'ajax';
		$this->set(compact('nrewid'));
	}

	/**
	 * ajax_kalendarz_urlopow_wspolpracownikow method
	 */
	public function ajax_kalendarz_urlopow_wspolpracownikow($nrewid = NULL)
	{
		$this->layout = 'ajax';
		$this->set(compact('nrewid'));
	}


	/**
	 * calendar_holiday_feed_ajax_employee method
	 */
	public function calendar_holiday_feed_ajax_employee($nrEwid = null)
	{
		set_time_limit(240);
		$options = array();

		if ($nrEwid === NULL) {
			$user_context = $this->Session->read('userContexts');
			if (isset($user_context['cPracownik']['cNumerEwidencyjny'])) {
				$options['dat:NumeryEwidencyjne']['dat1:int'] = $user_context['cPracownik']['cNumerEwidencyjny'];
			}
		}

		if ($nrEwid != NULL) {
			$options['dat:NumeryEwidencyjne']['dat1:int'] = $nrEwid;
		}

		if ($this->request->is(['post', 'get'])) {
			if (isset($this->request->data['nrEwid'])) {
				$options['dat:NumeryEwidencyjne']['dat1:int'] = $nrEwid = $this->request->data['nrEwid'];
			}

			if (!isset($this->request->data['start']) || empty($this->request->data['start'])) {
				$this->request->data['start'] = date('Y-m-') . '01';
				$this->request->data['end'] = date('Y-m-') . '31';
			}

			if (isset($this->request->data['direction'])) {
				$direction = $this->request->data['direction'];
				if ($direction == 'current') {
					$this->request->data['start'] = date('Y-m-') . '01';
					$this->request->data['end'] = date('Y-m-') . '31';
				} elseif ($direction == 'prev') {
					$this->request->data['start'] = date('Y-m-', strtotime($this->request->data['start'] . ' - 1 month')) . '01';
					$this->request->data['end'] = date('Y-m-', strtotime($this->request->data['start'])) . '31';
				} else {
					$this->request->data['start'] = date('Y-m-', strtotime($this->request->data['start'] . ' + 1 month')) . '01';
					$this->request->data['end'] = date('Y-m-', strtotime($this->request->data['start'])) . '31';
				}
			} else {
				$this->request->data['start'] = date('Y-m-') . '01';
				$this->request->data['end'] = date('Y-m-') . '31';
			}

			$newTime = strtotime($this->request->data['start']) + (2 * 60 * 60 * 24 * 7);
			$options['dat:OkresDo'] = (date('Y-m-t', strtotime($this->request->data['end'])) . 'T00:00:00');
			$options['dat:OkresOd'] = (date('Y-m-', $newTime) . '01T00:00:00');
			$options['dat:CzasPracyWspolpracownika'] = true;
		}

		$this->set('initDate', $this->request->data['start']);

		$days = array();
		$lastDay = date('t', strtotime($this->request->data['start']));
		for ($i = 1; $i <= $lastDay; $i++) {
			$currentDate = date('Y-m-', strtotime($this->request->data['start'])) . ($i < 10 ? '0' . $i : $i);
			$dayName = date('D', strtotime($currentDate));

			switch ($dayName) {
				case 'Tue':
					$dayNamePl = 'Wt';
					break;
				case 'Wed':
					$dayNamePl = 'Śr';
					break;
				case 'Thu':
					$dayNamePl = 'Cz';
					break;
				case 'Fri':
					$dayNamePl = 'Pt';
					break;
				case 'Sat':
					$dayNamePl = 'So';
					break;
				case 'Sun':
					$dayNamePl = 'Ni';
					break;
				case 'Mon':
					$dayNamePl = 'Pn';
					break;
			}

			$days[$currentDate] = array(
				'title' => $dayNamePl,
				'day' => $i,
				'current_date' => $currentDate,
				'events' => array()
			);
		}
		$this->Session->write('calendar_holiday_feed_ajax_employee', $options);
		$_events = $this->Api->DajKalendarzUrlopowWspolpracownikow($this->_getGid(), $options);
		$this->_replace_empty_values($_events);

		$resp = $this->_handle_response_json($_events);
		$this->set(compact('resp'));

		$events = array();
		$ifLogged = array();
		$hourFromTo = isset($_events['bCzyPokazywacGodzinyOdDo']) && $_events['bCzyPokazywacGodzinyOdDo'] == "true" ? true : false;
		$print = isset($_events['bCzyMoznaDrukowac']) && $_events['bCzyMoznaDrukowac'] === 'true' ? 1 : 1;

		foreach ($_events['bZdarzeniaRCP']['bZdarzenieRCP'] as $e) {
			$keyname = $e['bNazwisko'] . ' ' . $e['bImie'] . ' (' . $e['bNumerEwidencyjny'] . ')';
			if (!isset($events[$keyname])) {
				$events[$keyname] = array();
				$ifLogged[$keyname] = $e['bCzyZalogowany'];
			}

			$start = (isset($e['bGodzinaRozpoczecia']) && !empty($e['bGodzinaRozpoczecia'])) ? str_replace('T', ' ', $e['bGodzinaRozpoczecia']) : str_replace('T', ' ', $e['bDzien']);
			$end = (isset($e['bGodzinaZakonczenia']) && !empty($e['bGodzinaZakonczenia'])) ? str_replace('T', ' ', $e['bGodzinaZakonczenia']) : str_replace('T', ' ', $e['bDzien']);

			$titleSuffix = ' ';

			$hours = $e['bGodzinString'];
			if (!empty($hours)) $titleSuffix .= ' ' . $hours . ' ';

			$timeStart = '00:00';
			$timeEnd = '00:00';

			if (isset($e['bGodzinaRozpoczecia']) && !empty($e['bGodzinaRozpoczecia'])) {
				$timeStart = date('H:i', strtotime($e['bGodzinaRozpoczecia']));
			}
			if (isset($e['bGodzinaZakonczenia']) && !empty($e['bGodzinaZakonczenia'])) {
				$timeEnd = date('H:i', strtotime($e['bGodzinaZakonczenia']));
			}

			$timeString = '';
			if ($timeStart != '00:00') {
				$timeString .= 'od ' . $timeStart;
			}

			if ($timeEnd != '00:00') {
				if ($timeStart != '00:00') $timeString .= ' ';
				$timeString .= 'do ' . $timeEnd;
			}

			if (strlen($timeString) > 0) $titleSuffix .= '(' . $timeString . ')';

			$dzien = date('Y-m-d', strtotime($e['bDzien']));
			$parametryDnia = $this->_dajParametryDnia($_events['bZdarzeniaRCP']['bZdarzenieRCP'], $dzien);
			$czySwieto = (!empty($parametryDnia)) ? $parametryDnia['bCzySwieto'] : $e['bCzySwieto'];

			$e['czySwieto'] = $czySwieto;
			$e['title'] = $e['bNazwa'] . $titleSuffix;
			$e['allDay'] = (!isset($e['bGodzinaRozpoczecia']) || empty($e['bGodzinaRozpoczecia'])) ? true : false;
			$e['start'] = $dzien;
			$e['end'] = $end;
			$e['pracownik'] = $keyname;
			$e['czyZalogowany'] = $e['bCzyZalogowany'];

			if (!empty($e['bKolorTlaHTML'])) $e['color'] = $e['bKolorTlaHTML'];
			if (!empty($e['bKolorPierwszegoPlanuHTML'])) $e['textColor'] = $e['bKolorPierwszegoPlanuHTML'];

			$days[$dzien]['events'][] = $e;
		}

		$this->set(compact('events', 'days', 'ifLogged', 'hourFromTo', 'nrEwid', 'print'));

		$this->layout = 'ajax';
		$this->render('calendar_holiday_feed_ajax_employee');
	}


	/**
	 * administracja_role method
	 */
	public function administracja_role()
	{
		$this->layout = 'ajax';

		$roles = $this->Api->DajRole($this->_getGid());
		$resp = $this->_handle_response_json($roles);
		$this->set(compact('resp'));

		$this->set(compact('roles'));
	}

	/**
	 * administracja_uzytkownicy method
	 */
	public function administracja_uzytkownicy()
	{
		$this->layout = 'ajax';
		$options = [];

		$filter = $this->request->query('filter');
		if ($filter) {
			$options['dat:FiltryUzytkownika'] = $filter;
		}

		$users = $this->Api->DajUzytkownikow($this->_getGid(), $options);
		$resp = $this->_handle_response_json($users);
		$this->set(compact('resp', 'filter'));

//        if(isset($users['sBody']['sFault']['sDetail']['SzczegolyBleduUslugi']['Kod']) && $users['sBody']['sFault']['sDetail']['SzczegolyBleduUslugi']['Kod'] == 100) {
//            $this->redirect('/login');
//        }

		if (isset($users['bUzytkownicy']['bUzytkownik']['bNazwa'])) {
			$user = $users['bUzytkownicy']['bUzytkownik'];
			$users['bUzytkownicy']['bUzytkownik'] = array();
			$users['bUzytkownicy']['bUzytkownik'][] = $user;

		}
		$this->set(compact('users'));
	}

	/**
	 *
	 */
	public function dodaj_uzytkownika()
	{
		$this->layout = 'ajax';

		if ($this->request->is('post')) {

			$this->render(false);

			$form = $this->request->data['tem:pUzytkownik'];
			$data = array(
				'tem:pUzytkownik' => array(
					'dat:CharakteryPracy' => $form['dat:CharakteryPracy'],
					'dat:CzyAdministrator' => $this->_checkbox_int_2_string($form['dat:CzyAdministrator']),
					'dat:CzyDostepDoDanychPlacowych' => $this->_checkbox_int_2_string($form['dat:CzyDostepDoDanychPlacowych']),
					'dat:CzyDostepDoWszystkich' => $this->_checkbox_int_2_string($form['dat:CzyDostepDoWszystkich']),
					'dat:CzyMusiZmienicHaslo' => $this->_checkbox_int_2_string($form['dat:CzyMusiZmienicHaslo']),
					'dat:CzyWylaczony' => $this->_checkbox_int_2_string($form['dat:CzyWylaczony']),
					'dat:CzyWbudowana' => $this->_checkbox_int_2_string($form['dat:CzyWbudowana']),
					'dat:CzyZaznaczenie' => $this->_checkbox_int_2_string($form['dat:CzyZaznaczenie']),
					'dat:DodatkoweOpisy' => $form['dat:DodatkoweOpisy'],
					'dat:Email' => $form['dat:Email'],
//                    'dat:Gid' => $form['dat:Gid'],
					'dat:GrupaPracownikowPortalu0' => $form['dat:GrupaPracownikowPortalu0'],
					'dat:GrupaPracownikowPortalu1' => $form['dat:GrupaPracownikowPortalu1'],
					'dat:GrupaPracownikowPortalu2' => $form['dat:GrupaPracownikowPortalu2'],
					'dat:Haslo' => $form['dat:Haslo'],
					'dat:Imie' => $form['dat:Imie'],
					'dat:Komorki' => $form['dat:Komorki'],
					'dat:MiejscaWykonywaniaPracy' => $form['dat:MiejscaWykonywaniaPracy'],
					'dat:Nazwa' => $form['dat:Nazwa'],
					'dat:Nazwisko' => $form['dat:Nazwisko'],
					'dat:NumeryEwidencyjne' => $form['dat:NumeryEwidencyjne'],
					'dat:NumeryEwidencyjneWykluczone' => $form['dat:NumeryEwidencyjneWykluczone'],
					'dat:Opis' => $form['dat:Opis'],
					'dat:Piony' => $form['dat:Piony'],
					'dat:Platnicy' => $form['dat:Platnicy'],
					'dat:PowiazaneNumeryEwidencyjne' => $form['dat:PowiazaneNumeryEwidencyjne'],
					'dat:PowiazanyNumerEwidencyjny' => $form['dat:PowiazanyNumerEwidencyjny'],
					'dat:Regiony' => $form['dat:Regiony'],
					'dat:Stanowiska' => $form['dat:Stanowiska'],
				)
			);
			$response = $this->_dodaj_uzytkownika($data);
			echo json_encode($this->_handle_response_json($response));
			die();
			/*if($this->_handle_response())
            {
                return $this->redirect(array('action' => 'administracja_uzytkownicy'));
            }*/
		}
	}

	/**
	 * @param $userGid
	 */
	public function edytuj_uzytkownika($userGid)
	{
		$this->layout = 'ajax';

		if ($this->request->is('post')) {

			$this->render(false);

			$form = $this->request->data['tem:pUzytkownik'];
			$czyWylaczony = 'false';
			if (isset($form['dat:CzyWylaczony'])) {
				$czyWylaczony = ($this->_checkbox_int_2_string($form['dat:CzyWylaczony']) == NULL) ? false : $this->_checkbox_int_2_string($form['dat:CzyWylaczony']);
			}
			$data = array(
				'tem:pUzytkownik' => array(
					'dat:CharakteryPracy' => $form['dat:CharakteryPracy'],
					'dat:CzyAdministrator' => $this->_checkbox_int_2_string($form['dat:CzyAdministrator']),
					'dat:CzyDostepDoDanychPlacowych' => $this->_checkbox_int_2_string($form['dat:CzyDostepDoDanychPlacowych']),
					'dat:CzyDostepDoWszystkich' => $this->_checkbox_int_2_string($form['dat:CzyDostepDoWszystkich']),
					'dat:CzyMusiZmienicHaslo' => $this->_checkbox_int_2_string($form['dat:CzyMusiZmienicHaslo']),
					'dat:CzyWylaczony' => $czyWylaczony,
					'dat:CzyWbudowana' => $this->_checkbox_int_2_string($form['dat:CzyWbudowana']),
					'dat:CzyZaznaczenie' => $this->_checkbox_int_2_string($form['dat:CzyZaznaczenie']),
					'dat:DodatkoweOpisy' => $form['dat:DodatkoweOpisy'],
					'dat:Email' => $form['dat:Email'],
					'dat:Gid' => $form['dat:Gid'],
					'dat:GrupaPracownikowPortalu0' => $form['dat:GrupaPracownikowPortalu0'],
					'dat:GrupaPracownikowPortalu1' => $form['dat:GrupaPracownikowPortalu1'],
					'dat:GrupaPracownikowPortalu2' => $form['dat:GrupaPracownikowPortalu2'],
					'dat:Haslo' => $form['dat:Haslo'],
					'dat:Imie' => $form['dat:Imie'],
					'dat:Komorki' => $form['dat:Komorki'],
					'dat:MiejscaWykonywaniaPracy' => $form['dat:MiejscaWykonywaniaPracy'],
					'dat:Nazwa' => $form['dat:Nazwa'],
					'dat:Nazwisko' => $form['dat:Nazwisko'],
					'dat:NumeryEwidencyjne' => $form['dat:NumeryEwidencyjne'],
					'dat:NumeryEwidencyjneWykluczone' => $form['dat:NumeryEwidencyjneWykluczone'],
					'dat:Opis' => $form['dat:Opis'],
					'dat:Piony' => $form['dat:Piony'],
					'dat:Platnicy' => $form['dat:Platnicy'],
					'dat:PowiazaneNumeryEwidencyjne' => $form['dat:PowiazaneNumeryEwidencyjne'],
					'dat:PowiazanyNumerEwidencyjny' => $form['dat:PowiazanyNumerEwidencyjny'],
					'dat:Regiony' => $form['dat:Regiony'],
					'dat:Stanowiska' => $form['dat:Stanowiska'],
				)
			);
			/*if($this->_handle_response())
            {
                return $this->redirect(array('action' => 'administracja_uzytkownicy'));
            }*/

			$response = $this->_edytuj_uzytkownika($data);
			echo json_encode($this->_handle_response_json($response));
			die();
		}
		$userGet = $this->_daj_uzytkownika($userGid);

		$resp = $this->_handle_response_json($userGet);
		$this->set(compact('resp'));

		$userGet = $this->_rename_array_key_prefixes($userGet['bUzytkownik'], 'b', 'dat:');
		$userGet = $this->_replace_empty_values($userGet);
		$userGet['dat:CzyAdministrator'] = $this->_checkbox_string_2_bool($userGet['dat:CzyAdministrator']);
		$userGet['dat:CzyMusiZmienicHaslo'] = $this->_checkbox_string_2_bool($userGet['dat:CzyMusiZmienicHaslo']);
		$userGet['dat:CzyWylaczony'] = $this->_checkbox_string_2_bool($userGet['dat:CzyWylaczony']);
		$userGet['dat:CzyWbudowana'] = $this->_checkbox_string_2_bool($userGet['dat:CzyWbudowana']);
		$userGet['dat:CzyZaznaczenie'] = $this->_checkbox_string_2_bool($userGet['dat:CzyZaznaczenie']);
		$userGet['dat:CzyDostepDoWszystkich'] = $this->_checkbox_string_2_bool($userGet['dat:CzyDostepDoWszystkich']);
		$userGet['dat:CzyDostepDoDanychPlacowych'] = $this->_checkbox_string_2_bool($userGet['dat:CzyDostepDoDanychPlacowych']);
		$this->request->data = array(
			'tem:pUzytkownik' => $userGet
		);
	}

	/**
	 * @param $userGid
	 */
	public function usun_uzytkownika($userGid)
	{
		$this->layout = 'ajax';
		$this->render(false);
		$resp = $this->_handle_response_json($this->_usun_uzytkownika($userGid));
		echo json_encode($resp);
	}

	/**
	 * @param $evens
	 * @param $date
	 * @return array
	 */
	private function _dajParametryDnia($evens, $date)
	{
		foreach ($evens as $event) {
			if ($event['bRodzaj'] == 'ParametryDnia' && $date == date('Y-m-d', strtotime($event['bDzien']))) {
				return $event;
			}
		}

		return array();
	}

	/**
	 * calendar_feed_ajax_employee method
	 */
	public function calendar_feed_ajax_employee($nrEwid = null)
	{
		set_time_limit(240);
		$options = array();

		if ($nrEwid === NULL) {
			$user_context = $this->Session->read('userContexts');
			if (isset($user_context['cPracownik']['cNumerEwidencyjny'])) {
				$options['dat:NumeryEwidencyjne']['dat1:int'] = $user_context['cPracownik']['cNumerEwidencyjny'];
			}
		}

		if ($nrEwid != NULL) {
			$options['dat:NumeryEwidencyjne']['dat1:int'] = $nrEwid;
		}

		if ($this->request->is(['post', 'get'])) {
			if (isset($this->request->data['nrEwid'])) {
				$options['dat:NumeryEwidencyjne']['dat1:int'] = $nrEwid = $this->request->data['nrEwid'];
			}

			if (!isset($this->request->data['start']) || empty($this->request->data['start'])) {
				$this->request->data['start'] = date('Y-m-') . '01';
				$this->request->data['end'] = date('Y-m-') . '31';
			}

			if (isset($this->request->data['direction'])) {
				$direction = $this->request->data['direction'];
				if ($direction == 'current') {
					$this->request->data['start'] = date('Y-m-') . '01';
					$this->request->data['end'] = date('Y-m-') . '31';
				} elseif ($direction == 'prev') {
					$this->request->data['start'] = date('Y-m-', strtotime($this->request->data['start'] . ' - 1 month')) . '01';
					$this->request->data['end'] = date('Y-m-', strtotime($this->request->data['start'])) . '31';
				} else {
					$this->request->data['start'] = date('Y-m-', strtotime($this->request->data['start'] . ' + 1 month')) . '01';
					$this->request->data['end'] = date('Y-m-', strtotime($this->request->data['start'])) . '31';
				}
			} else {
				$this->request->data['start'] = date('Y-m-') . '01';
				$this->request->data['end'] = date('Y-m-') . '31';
			}

			$newTime = strtotime($this->request->data['start']) + (2 * 60 * 60 * 24 * 7);
			$options['dat:OkresDo'] = (date('Y-m-t', strtotime($this->request->data['end'])) . 'T00:00:00');
			$options['dat:OkresOd'] = (date('Y-m-', $newTime) . '01T00:00:00');
			$options['dat:CzasPracyWspolpracownika'] = true;
		}

		$this->set('initDate', $this->request->data['start']);

		$days = array();
		$lastDay = date('t', strtotime($this->request->data['start']));
		for ($i = 1; $i <= $lastDay; $i++) {
			$currentDate = date('Y-m-', strtotime($this->request->data['start'])) . ($i < 10 ? '0' . $i : $i);
			$dayName = date('D', strtotime($currentDate));

			switch ($dayName) {
				case 'Tue':
					$dayNamePl = 'Wt';
					break;
				case 'Wed':
					$dayNamePl = 'Śr';
					break;
				case 'Thu':
					$dayNamePl = 'Cz';
					break;
				case 'Fri':
					$dayNamePl = 'Pt';
					break;
				case 'Sat':
					$dayNamePl = 'So';
					break;
				case 'Sun':
					$dayNamePl = 'Ni';
					break;
				case 'Mon':
					$dayNamePl = 'Pn';
					break;
			}

			$days[$currentDate] = array(
				'title' => $dayNamePl,
				'day' => $i,
				'current_date' => $currentDate,
				'events' => array()
			);
		}
		$this->Session->write('calendar_feed_ajax_employee', $options);
		$_events = $this->Api->DajZdarzeniaRCPWspolpracownikow($this->_getGid(), $options);
		$this->_replace_empty_values($_events);

		$resp = $this->_handle_response_json($_events);
		$this->set(compact('resp'));

		$events = array();
		$ifLogged = array();
		$hourFromTo = isset($_events['bCzyPokazywacGodzinyOdDo']) && $_events['bCzyPokazywacGodzinyOdDo'] == "true" ? true : false;
		$print = isset($_events['bCzyMoznaDrukowac']) && $_events['bCzyMoznaDrukowac'] === 'true' ? 1 : 1;

		foreach ($_events['bZdarzeniaRCP']['bZdarzenieRCP'] as $e) {
			$keyname = $e['bNazwisko'] . ' ' . $e['bImie'] . ' (' . $e['bNumerEwidencyjny'] . ')';
			if (!isset($events[$keyname])) {
				$events[$keyname] = array();
				$ifLogged[$keyname] = $e['bCzyZalogowany'];
			}

			$start = (isset($e['bGodzinaRozpoczecia']) && !empty($e['bGodzinaRozpoczecia'])) ? str_replace('T', ' ', $e['bGodzinaRozpoczecia']) : str_replace('T', ' ', $e['bDzien']);
			$end = (isset($e['bGodzinaZakonczenia']) && !empty($e['bGodzinaZakonczenia'])) ? str_replace('T', ' ', $e['bGodzinaZakonczenia']) : str_replace('T', ' ', $e['bDzien']);

			$titleSuffix = ' ';

			$hours = $e['bGodzinString'];
			if (!empty($hours)) $titleSuffix .= ' ' . $hours . ' ';

			$timeStart = '00:00';
			$timeEnd = '00:00';

			if (isset($e['bGodzinaRozpoczecia']) && !empty($e['bGodzinaRozpoczecia'])) {
				$timeStart = date('H:i', strtotime($e['bGodzinaRozpoczecia']));
			}
			if (isset($e['bGodzinaZakonczenia']) && !empty($e['bGodzinaZakonczenia'])) {
				$timeEnd = date('H:i', strtotime($e['bGodzinaZakonczenia']));
			}

			$timeString = '';
			if ($timeStart != '00:00') {
				$timeString .= 'od ' . $timeStart;
			}

			if ($timeEnd != '00:00') {
				if ($timeStart != '00:00') $timeString .= ' ';
				$timeString .= 'do ' . $timeEnd;
			}

			if (strlen($timeString) > 0) $titleSuffix .= '(' . $timeString . ')';

			$dzien = date('Y-m-d', strtotime($e['bDzien']));
			$parametryDnia = $this->_dajParametryDnia($_events['bZdarzeniaRCP']['bZdarzenieRCP'], $dzien);
			$czySwieto = (!empty($parametryDnia)) ? $parametryDnia['bCzySwieto'] : $e['bCzySwieto'];

			$e['czySwieto'] = $czySwieto;
			$e['title'] = $e['bNazwa'] . $titleSuffix;
			$e['allDay'] = (!isset($e['bGodzinaRozpoczecia']) || empty($e['bGodzinaRozpoczecia'])) ? true : false;
			$e['start'] = $dzien;
			$e['end'] = $end;
			$e['pracownik'] = $keyname;
			$e['czyZalogowany'] = $e['bCzyZalogowany'];

			if (!empty($e['bKolorTlaHTML'])) $e['color'] = $e['bKolorTlaHTML'];
			if (!empty($e['bKolorPierwszegoPlanuHTML'])) $e['textColor'] = $e['bKolorPierwszegoPlanuHTML'];

			$days[$dzien]['events'][] = $e;
		}

		$this->set(compact('events', 'days', 'ifLogged', 'hourFromTo', 'nrEwid', 'print'));

		$this->layout = 'ajax';
		$this->render('calendar_feed_ajax_employee');
	}

	/**
	 * @return string
	 */
	public function calendar_feed_ajax($nrewid = NULL, $coworkers = false)
	{
		if ($this->request->is('ajax')) {
			if ($this->request->is(array('post'))) {
				$options = array();
				if ($nrewid != NULL) {
					$options['dat:NumeryEwidencyjne'] = array(
						'dat1:int' => $nrewid
					);
				}
				//ważna jest data początkowa - wyciągany jest miesiąc i na jej podstawie zwracane są dane
				$newTime = strtotime($this->request->data['start']) + (2 * 60 * 60 * 24 * 7);
				$options['dat:OkresDo'] = ($this->request->data['end'] . 'T00:00:00');
				$options['dat:OkresOd'] = (date('Y-m-', $newTime) . '01T00:00:00');
				if ($coworkers == true) {
					$options['dat:CzasPracyWspolpracownika'] = true;
				}
				$this->Session->write('calendar_feed_ajax', $options);
				$_events = $this->Api->DajZdarzeniaRCP($this->_getGid(), $options);
				$print = isset($_events['bCzyMoznaDrukowac']) && $_events['bCzyMoznaDrukowac'] === 'true' ? 1 : 0;
				$informacjaDodatkowa = htmlspecialchars_decode($_events['bInformacjaDodatkowa'] ?? '');

				if (!isset($_events['bZdarzeniaRCP']['bZdarzenieRCP'][0])) {
					$_events['bZdarzeniaRCP']['bZdarzenieRCP'] = [$_events['bZdarzeniaRCP']['bZdarzenieRCP']];
				}

				foreach ($_events['bZdarzeniaRCP']['bZdarzenieRCP'] as $k => $e) {
					$singleEvent = array();
					if ($e['bRodzaj'] != 'ParametryDnia') {
						if ($e['bRodzaj'] != 'ParametryDnia') {
							$start = (isset($e['bGodzinaRozpoczecia']) && !empty($e['bGodzinaRozpoczecia'])) ? str_replace('T', ' ', $e['bGodzinaRozpoczecia']) : str_replace('T', ' ', $e['bDzien']);
							$end = (isset($e['bGodzinaZakonczenia']) && !empty($e['bGodzinaZakonczenia'])) ? str_replace('T', ' ', $e['bGodzinaZakonczenia']) : str_replace('T', ' ', $e['bDzien']);

							$titleSuffix = ' ';

							$hours = $e['bGodzinString'];
							if (!empty($hours) && $hours !== "00:00") $titleSuffix .= ' ' . $hours . ' ';

							$timeStart = '00:00';
							$timeEnd = '00:00';

							if (isset($e['bGodzinaRozpoczecia']) && !empty($e['bGodzinaRozpoczecia'])) {
								$timeStart = date('H:i', strtotime($e['bGodzinaRozpoczecia']));
							}
							if (isset($e['bGodzinaZakonczenia']) && !empty($e['bGodzinaZakonczenia'])) {
								$timeEnd = date('H:i', strtotime($e['bGodzinaZakonczenia']));
							}

							$timeString = '';
							if ($timeStart != '00:00') {
								$timeString .= 'od ' . $timeStart;
							}

							if ($timeEnd != '00:00') {
								if ($timeStart != '00:00') $timeString .= ' ';
								$timeString .= 'do ' . $timeEnd;
							}

							if (strlen($timeString) > 0) $titleSuffix .= '(' . $timeString . ')';

							$index = $e['bIndex'];

							$dzien = date('Y-m-d', strtotime($e['bDzien']));
							$parametryDnia = $this->_dajParametryDnia($_events['bZdarzeniaRCP']['bZdarzenieRCP'], $dzien);
							$czySwieto = (!empty($parametryDnia)) ? $parametryDnia['bCzySwieto'] : $e['bCzySwieto'];

							$singleEvent = array(
								'id' => ($k + 1),
								'czySwieto' => $czySwieto,
								'czyUmowa' => (!empty($parametryDnia)) ? $parametryDnia['bCzyUmowa'] : $e['bCzyUmowa'],
								'title' => $e['bNazwa'] . $titleSuffix,
								'allDay' => (!isset($e['bGodzinaRozpoczecia']) || empty($e['bGodzinaRozpoczecia'])) ? true : false,
								'start' => $dzien,
								'end' => $end,
								'index' => (int)$index,
								'informacjaDodatkowa' => $informacjaDodatkowa,
								'print' => $print
							);
							if (!empty($e['bKolorTlaHTML'])) $singleEvent['color'] = $e['bKolorTlaHTML'];
							if (!empty($e['bKolorPierwszegoPlanuHTML'])) $singleEvent['textColor'] = $e['bKolorPierwszegoPlanuHTML'];
							$events[] = $singleEvent;
						}
					} else {
						if ($e['bCzySwieto'] && !empty($e['bSwietoOpis'])) {
							$singleEvent = array();
							$singleEvent['start'] = date('Y-m-d', strtotime($e['bDzien']));
							$singleEvent['title'] = $e['bSwietoOpis'];
							$singleEvent['czySwieto'] = true;
							$singleEvent['color'] = 'red';
							$singleEvent['index'] = 1;
							$singleEvent['print'] = $print;
							$singleEvent['informacjaDodatkowa'] = $informacjaDodatkowa;
							$events[] = $singleEvent;
						}
					}
				}

				//weekend days in date (start/end) range
//                $start = new DateTime($this->request->data['start']);
//                $end = new DateTime($this->request->data['end']);
//                $oneday = new DateInterval("P1D");
//                foreach(new DatePeriod($start, $oneday, $end->add($oneday)) as $day)
//                {
//                    $day_num = $day->format("N"); /* 'N' number days 1 (mon) to 7 (sun) */
//                    if($day_num >= 6)
//                    {
//                        $events[] = array(
//                            'id' => ($k+1),
//                            'title' => '',
//                            'weekendColor' => $day_num == 6 ? 'blue' : 'red',
//                            'allDay' => true,
//                            'start' => $day->format('Y-m-d'),
//                            'color' => 'transparent'
//                        );
//                    }
//                }

				echo json_encode($events);
			} else {
				echo json_encode(array());
			}
			die();
		}
	}

	/**
	 * ajax_wniosek_remove method
	 * @param null|string $gid
	 */
	public function ajax_wniosek_remove($gid = NULL)
	{
		$this->layout = 'ajax';
		$this->render(false);

		$response = $this->Api->UsunWniosek($this->_getGid(), $gid);
		echo json_encode($response);
		die();
	}

	/**
	 * pokaz_wniosek method
	 * @param null|string $bGid
	 */
	public function pokaz_wniosek($bGid = NULL, $returnAction = null)
	{
		$this->layout = 'ajax';

//        if($bGid == NULL) $this->redirect('/wnioski');

		$wniosek = $this->Api->DajWniosek($this->_getGid(), $bGid);

		$resp = $this->_handle_response_json($wniosek);

		$this->_replace_empty_values($wniosek);

		$this->set(compact('resp'));

		$this->set(compact('wniosek'));

		$codes = $this->_daj_mozliwe_kody_wniosku();
		$codeList = array();
		foreach ($codes['bKody']['bKod'] as $code) {
			$nrAndGid = array(
				'dat2:Gid' => $code['bGid'],
				'dat2:Numer' => $code['bNumer'],
				'dat2:Opis' => $code['bOpis'],
				'dat2:Symbol' => $code['bSymbol'],
				'dat2:CzyPracaZdalna' => $code['bCzyPracaZdalna'],
				'dat2:CzyPracaZdalnaSaldo' => $code['bCzyPracaZdalnaSaldo'],
			);
			$codeList[$this->_array_2_string($nrAndGid)] = $code['bOpis'];
		}

		$this->set('codes', $codeList);

		$saldo = $this->_saldo_urlopu_5($wniosek['bWniosek']['bNumerPracownika']);
		$this->set(compact('saldo', 'returnAction'));
	}

	/**
	 * przekaz_wniosek method
	 * @param null|string $bGid
	 */
	public function przekaz_wniosek($bGid = null)
	{
		$this->layout = 'ajax';

		if ($this->request->is('post')) {

			$data = $this->request->data('pSciezkaAkceptacji');

			$options = [
				'pGidWniosku' => $bGid,
				'pAdresy' => []
			];

			if (isset($data['dat:Sciezka']['dat:ElementSciezkiAkceptacji'])) {
				foreach ($data['dat:Sciezka']['dat:ElementSciezkiAkceptacji'] as $item) {
					$options['pAdresy'][] = [
						'Email' => $item['dat:Akceptujacy']['dat1:Email'],
						'Gid' => $item['dat:Akceptujacy']['dat1:Gid'],
						'Nazwa' => $item['dat:Akceptujacy']['dat1:Nazwa']
					];
				}
			}

			$response = $this->Api->PrzekazWniosek($this->_getGid(), $options);

			echo json_encode($this->_handle_response_json($response));
			die();
		}

	}

	/**
	 * @param null $bGid
	 */
	public function drukuj_wniosek($bGid = NULL)
	{
		if ($bGid == NULL) $this->redirect('/');

		$this->layout = 'ajax';

		$response = $this->Api->DrukujWniosek($this->_getGid(), $bGid);

		$resp = $this->_handle_response_json($response);
		if (isset($resp['login'])) {
			$this->redirect('/');
		} else {
			$content = base64_decode($response['bDokument']['bTresc']);
			$filename = $response['bDokument']['bNazwaPliku'];
			$extension = $response['bDokument']['bRozszerzenie'];

			header('Content-Type: application/' . $extension);
			header('Content-Length: ' . strlen($content));
			header('Content-Disposition: inline; filename="' . $filename . '"');
			header('Cache-Control: private, max-age=0, must-revalidate');
			header('Pragma: public');
			ini_set('zlib.output_compression', '0');

			die($content);
		}
	}

	/**
	 * edytuj_wniosek method
	 * @param string|null $bGid
	 */
	public function edytuj_wniosek($bGid = NULL)
	{
		$this->layout = 'ajax';

		if ($bGid == NULL) $this->redirect('/wnioski');

		$codes = $this->_daj_mozliwe_kody_wniosku();

		$pracaZdalna = [];
		$pracaZdalnaSaldo = [];
		$extensionCode = [];
		$codeList = [];
		foreach ($codes['bKody']['bKod'] as $key => $code) {
			$nrAndGid = [
				'dat2:Gid' => $code['bGid'],
				'dat2:Numer' => $code['bNumer'],
				'dat2:Opis' => $code['bOpis'],
				'dat2:Symbol' => $code['bSymbol'],
				'dat2:CzyPotrzebnyPowod' => $code['bCzyPotrzebnyPowod'],
				'dat2:CzyPracaZdalna' => $code['bCzyPracaZdalna'],
				'dat2:CzyPracaZdalnaSaldo' => $code['bCzyPracaZdalnaSaldo'],
			];

			$codeList[$this->_array_2_string($nrAndGid)] = $code['bOpis'];
			if ($code['bCzyPracaZdalna'] === 'true') {
				$pracaZdalna[] = $this->_array_2_string($nrAndGid);
			}
			if ($code['bCzyPracaZdalnaSaldo'] === 'true') {
				$pracaZdalnaSaldo[] = $this->_array_2_string($nrAndGid);
			}

			// Definicja typów dodatkowych pól do przetworzenia
			// UWAGA: 'labelPrefix' to tylko prefiks, pełny klucz to 'labelPrefix' + indeks + 'Tekst'
			$fieldTypes = [
				'wartosc' => [
					'name' => 'dodatkowaWartosc',
					'labelPrefix' => 'bDodatkowaWartosc',
					'type' => 'text'
				],
				'wartoscWyboru' => [
					'name' => 'dodatkowaWartoscWyboru',
					'labelPrefix' => 'bDodatkowaWartoscWyboru',
					'optionsPrefix' => 'bDodatkowaWartoscWyboru', // bez 'Mozliwe' na końcu!
					'type' => 'select'
				],
				'data' => [
					'name' => 'dodatkowaData',
					'labelPrefix' => 'bDodatkowaData',
					'type' => 'date'
				],
				'dataOd' => [
					'name' => 'dodatkowaDataOd',
					'labelPrefix' => 'bDodatkowaDataOdDo',
					'type' => 'date'
				],
				'dataDo' => [
					'name' => 'dodatkowaDataDo',
					'labelPrefix' => 'bDodatkowaDataOdDo',
					'type' => 'date'
				],
				'wartoscBool' => [
					'name' => 'dodatkowaWartoscBool',
					'labelPrefix' => 'bDodatkowaWartoscBool',
					'type' => 'checkbox'
				],
				'dodatkowyNapis' => [
					'name' => 'dodatkowyNapis',
					'labelPrefix' => 'bDodatkowyNapis',
					'type' => 'textField'
				]
			];

			foreach (range(0, 6) as $i) {
				$hasAnyField = false;

				// Sprawdzenie czy istnieje jakiekolwiek pole dla tego indeksu
				foreach ($fieldTypes as $fieldType => $config) {
					$nameToPrefixMap = [
						'dodatkowaDataOd' => 'bDodatkowaDataOd',
						'dodatkowaDataDo' => 'bDodatkowaDataDo',
					];

					$prefix = $nameToPrefixMap[$config['name']] ?? $config['labelPrefix'];
					$suffix = ($prefix === 'bDodatkowyNapis') ? 'Text' : 'Tekst';
					$labelKey = $prefix . $i . $suffix;

					if (!empty($code[$labelKey])) {
						$hasAnyField = true;
						break;
					}
				}

				if (!$hasAnyField) {
					continue;
				}

				// Przetwarzanie każdego typu pola
				foreach ($fieldTypes as $fieldType => $config) {
					$nameToPrefixMap = [
						'dodatkowaDataOd' => 'bDodatkowaDataOd',
						'dodatkowaDataDo' => 'bDodatkowaDataDo',
					];

					$prefix = $nameToPrefixMap[$config['name']] ?? $config['labelPrefix'];
					$suffix = ($prefix === 'bDodatkowyNapis') ? 'Text' : 'Tekst';
					$labelKey = $prefix . $i . $suffix;

					if (empty($code[$labelKey])) {
						continue;
					}

					$fieldData = [
						'typ' => $config['type'],
						'czyWymagany' => $code[$config['labelPrefix'] . $i . 'CzyWymagana'] ?? 'false',
						'readonly' => $code[$config['labelPrefix'] . $i . 'CzyTylkoDoOdczytu'] ?? 'false',
						'label' => $code[$labelKey],
						'indeks' => $code[$config['labelPrefix'] . $i . 'Indeks'] ?? 0,
						'codeKey' => $key,
						'code' => $this->_array_2_string($nrAndGid),
						'inputName' => $config['name'] . $i,
					];

					// Dodanie opcji dla pól select
					if ($config['type'] === 'select') {
						$optionsKey = $config['optionsPrefix'] . $i . 'Mozliwe';
						$mozliweWartosci = [];
						if (!empty($code[$optionsKey]['cstring'])) {
							foreach ($code[$optionsKey]['cstring'] as $string) {
								$mozliweWartosci[$string] = $string;
							}
						}
						$fieldData['opcje'] = $mozliweWartosci;
					}

					$extensionCode[] = $fieldData;
				}
			}
		}

		// Sortowanie pól dodatkowych według indeksu
		usort($extensionCode, function($a, $b) {
			return ($a['indeks'] ?? 0) <=> ($b['indeks'] ?? 0);
		});

		$this->set('codes', $codeList);
		$this->set(compact('pracaZdalna', 'pracaZdalnaSaldo', 'extensionCode'));

		if (!$this->request->is(array('post', 'put'))) {
			$thisYear = new DateTime();
			$thisYear = (int)$thisYear->format('Y');
			$saldoOptions = array(
				'dat:Lata' => array(
					0 => array(
						'arr:int' => $thisYear
					)
				),
				'dat:NumerPracownika' => $this->Auth->user('cNumerEwidencyjny')
			);
			$saldo = $this->_saldo_urlopu_5();
			$this->set(compact('saldo'));

			$resp = $this->_handle_response_json($saldo);
			$this->set(compact('resp'));
		}

		if ($this->request->is(array('post', 'put'))) {
			$data = $this->request->data['pWniosek'];

			foreach (range(0, 6) as $i) {
				if (isset($data['dat:dodatkowaWartoscWyboru' . $i . '_' . $data['Code']])) {
					$data['dat:dodatkowaWartoscWyboru' . $i] = $data['dat:dodatkowaWartoscWyboru' . $i . '_' . $data['Code']];
				}
				if (isset($data['dat:dodatkowaWartosc' . $i . '_' . $data['Code']])) {
					$data['dat:dodatkowaWartosc' . $i] = $data['dat:dodatkowaWartosc' . $i . '_' . $data['Code']];
				}
				if (isset($data['dat:dodatkowaWartoscBool' . $i . '_' . $data['Code']])) {
					$data['dat:dodatkowaWartoscBool' . $i] = $data['dat:dodatkowaWartoscBool' . $i . '_' . $data['Code']] ? 'true' : 'false';
				}
				if (isset($data['dat:dodatkowaData' . $i . '_' . $data['Code']])) {
					$data['dat:dodatkowaData' . $i] = $data['dat:dodatkowaData' . $i . '_' . $data['Code']];
				}
				if (isset($data['dat:dodatkowaDataDo' . $i . '_' . $data['Code']])) {
					$data['dat:dodatkowaDataDo' . $i] = $data['dat:dodatkowaDataDo' . $i . '_' . $data['Code']];
				}
				if (isset($data['dat:dodatkowaDataOd' . $i . '_' . $data['Code']])) {
					$data['dat:dodatkowaDataOd' . $i] = $data['dat:dodatkowaDataOd' . $i . '_' . $data['Code']];
				}
			}

			unset($data['Code']);

			$data['dat:Kod'] = $this->_string_2_array($data['dat:Kod']['dat2:NumerIGid']);

			if (isset($this->request->data['bZalacznik']) && !empty($this->request->data['bZalacznik'])) {
				foreach ($this->request->data['bZalacznik'] as $z) {
					$file = $this->_zalaczniki_edycja($z, 'dat:', 'dat1:');
					$data['dat:Zalaczniki'][] = $file['dat:Zalaczniki'];
				}
				unset($this->request->data['bZalacznik']);
			}

			$filesCounter = 0;
			if (count($this->request->data['file']) > 0) {
				for ($i = 0; $i < count($this->request->data['file']); $i++) {
					if ($this->request->data['file'][$i]['size'] > 0) {
						$file = $this->_zalaczniki($this->request->data['file'][$i], 'dat:', 'dat1:');
						if ($file == false) {
							$this->Flash->error('Nie udało się przesłać pliku. Spróbuj ponownie');
						} else {
							$data['dat:Zalaczniki'][] = $file['dat:Zalaczniki'];
							$filesCounter++;
						}
					}
				}
			}
			unset($this->request->data['file']);
			$data['dat:IloscDodanychZalacznikow'] = $filesCounter;
			$data['dat:DataDo'] = $this->_date_for_request($data['dat:DataDo']);
			$data['dat:DataOd'] = $this->_date_for_request($data['dat:DataOd']);
			$data['dat:Godziny'] = $this->_time_for_request($data['dat:Godziny']);

			$response = $this->_zapisz_wniosek($data);
			$this->set('response', $response);
			/*if($this->_handle_response($response))
			{
				return $this->redirect(array('action' => 'wnioski'));
			}*/
			echo json_encode($this->_handle_response_json($response));
			die();
		} else {
			$wniosek = $this->Api->DajWniosek($this->_getGid(), $bGid);
			$knG = empty($wniosek['bKodyNieobecnosciGodzinowych']['cstring']) ? array() : explode("-", $wniosek['bKodyNieobecnosciGodzinowych']['cstring']);
			//$mozliwePowody = empty($wniosek['bWniosek']['bMozliwePowody']['cstring']) ? array() : array_combine(array_values($wniosek['bWniosek']['bMozliwePowody']['cstring']),$wniosek['bWniosek']['bMozliwePowody']['cstring']);
			$mozliwePowody = empty($wniosek['bWniosek']['bMozliwePowody']['cstring']) ? array() : $wniosek['bWniosek']['bMozliwePowody']['cstring'];
			if (empty($this->request->data)) {
				$nrAndGid = array(
					'dat2:Gid' => $wniosek['bWniosek']['bKod']['cGid'],
					'dat2:Numer' => $wniosek['bWniosek']['bKod']['cNumer'],
					'dat2:Opis' => $wniosek['bWniosek']['bKod']['cOpis'],
					'dat2:Symbol' => $wniosek['bWniosek']['bKod']['cSymbol'],
					'dat2:CzyPotrzebnyPowod' => $wniosek['bWniosek']['bKod']['cCzyPotrzebnyPowod'],
					'dat2:CzyPracaZdalna' => $wniosek['bWniosek']['bKod']['cCzyPracaZdalna'],
					'dat2:CzyPracaZdalnaSaldo' => $wniosek['bWniosek']['bKod']['cCzyPracaZdalnaSaldo'],
				);
				$this->request->data['pWniosek']['dat:Kod']['dat2:NumerIGid'] = $this->_array_2_string($nrAndGid);
				$this->request->data['pWniosek']['dat:DataOd'] = $wniosek['bWniosek']['bDataOd'];
				$this->request->data['pWniosek']['dat:DataDo'] = $wniosek['bWniosek']['bDataDo'];
				$this->request->data['pWniosek']['dat:GodzinaOd'] = $this->_time_for_respons($wniosek['bWniosek']['bGodzinaOd'], ':');
				$this->request->data['pWniosek']['dat:GodzinaDo'] = $this->_time_for_respons($wniosek['bWniosek']['bGodzinaDo'], ':');
				$this->request->data['pWniosek']['dat:Godziny'] = $this->_time_for_respons($wniosek['bWniosek']['bGodziny']);
				$this->request->data['pWniosek']['dat:DataUtworzenia'] = $wniosek['bWniosek']['bDataUtworzenia'];
				$this->request->data['pWniosek']['dat:Gid'] = $wniosek['bWniosek']['bGid'];
				$this->request->data['pWniosek']['dat:Opis'] = $wniosek['bWniosek']['bOpis'];
				$this->request->data['pWniosek']['dat:Powod'] = $wniosek['bWniosek']['bPowod'];
				$this->request->data['pWniosek']['dat:Numer'] = $wniosek['bWniosek']['bNumer'];

				$this->request->data['pWniosek']['dat:Zastepca']['dat1:Email'] = $wniosek['bWniosek']['bZastepca']['cEmail'];
				$this->request->data['pWniosek']['dat:Zastepca']['dat1:Gid'] = $wniosek['bWniosek']['bZastepca']['cGid'];
				$this->request->data['pWniosek']['dat:Zastepca']['dat1:Nazwa'] = $wniosek['bWniosek']['bZastepca']['cNazwa'];
				$this->request->data['pWniosek']['dat:Zastepca']['dat1:NazwaWyswietlana'] = $wniosek['bWniosek']['bZastepca']['cNazwaWyswietlana'];
			}
			ini_set('memory_limit', '-1');
			$zalaczniki = $wniosek['bWniosek']['bZalaczniki']['cZalacznik'];
			unset($wniosek['bWniosek']['bZalaczniki']);
			$this->set(compact('zalaczniki', 'wniosek', 'knG', 'mozliwePowody'));
		}
	}

	/**
	 *
	 */
	public function wnioski()
	{
		$this->layout = 'ajax';

		$pracownicy = $this->_daj_mozliwych_podwladnych_do_wniosku();

		if (count($pracownicy['bAdresy']) > 0) {
			$this->set('eployees', [$pracownicy['bAdresy']]);
		}

		if ($this->Session->check('view_enter_after_add')) {
			$this->set('view_enter_after_add', true);
			$this->Session->delete('view_enter_after_add');
		} else {
			$this->set('view_enter', true);
		}
	}

	public function ajax_sprawdz_wniosek_edycja()
	{
		$this->render(false);
		$this->layout = 'ajax';

		if ($this->request->is(array('post', 'put'))) {
			$data = $this->request->data['pWniosek'];
			$data['dat:Kod'] = $this->_string_2_array($data['dat:Kod']['dat2:NumerIGid']);

			if (isset($this->request->data['bZalacznik']) && !empty($this->request->data['bZalacznik'])) {
				foreach ($this->request->data['bZalacznik'] as $z) {
					$file = $this->_zalaczniki_edycja($z, 'dat:', 'dat1:');
					$data['dat:Zalaczniki'][] = $file['dat:Zalaczniki'];
				}
				unset($this->request->data['bZalacznik']);
			}

			if (count($this->request->data['file']) > 0) {
				for ($i = 0; $i < count($this->request->data['file']); $i++) {
					if ($this->request->data['file'][$i]['size'] > 0) {
						$file = $this->_zalaczniki($this->request->data['file'][$i], 'dat:', 'dat1:');
						if ($file == false) {
							$this->Flash->error('Nie udało się przesłać pliku. Spróbuj ponownie');
						} else {
							$data['dat:Zalaczniki'][] = $file['dat:Zalaczniki'];
						}
					}
				}
			}
			unset($this->request->data['file']);
			$data['dat:DataDo'] = $this->_date_for_request($data['dat:DataDo']);
			$data['dat:DataOd'] = $this->_date_for_request($data['dat:DataOd']);
			$data['dat:Godziny'] = $this->_time_for_request($data['dat:Godziny']);

			foreach (range(0, 6) as $i) {
				if (isset($data['dat:dodatkowaWartoscWyboru' . $i . '_' . $data['Code']])) {
					$data['dat:dodatkowaWartoscWyboru' . $i] = $data['dat:dodatkowaWartoscWyboru' . $i . '_' . $data['Code']];
				}
				if (isset($data['dat:dodatkowaWartosc' . $i . '_' . $data['Code']])) {
					$data['dat:dodatkowaWartosc' . $i] = $data['dat:dodatkowaWartosc' . $i . '_' . $data['Code']];
				}
				if (isset($data['dat:dodatkowaWartoscBool' . $i . '_' . $data['Code']])) {
					$data['dat:dodatkowaWartoscBool' . $i] = $data['dat:dodatkowaWartoscBool' . $i . '_' . $data['Code']] ? 'true' : 'false';
				}
				if (isset($data['dat:dodatkowaData' . $i . '_' . $data['Code']])) {
					$data['dat:dodatkowaData' . $i] = $data['dat:dodatkowaData' . $i . '_' . $data['Code']];
				}
				if (isset($data['dat:dodatkowaDataDo' . $i . '_' . $data['Code']])) {
					$data['dat:dodatkowaDataDo' . $i] = $data['dat:dodatkowaDataDo' . $i . '_' . $data['Code']];
				}
				if (isset($data['dat:dodatkowaDataOd' . $i . '_' . $data['Code']])) {
					$data['dat:dodatkowaDataOd' . $i] = $data['dat:dodatkowaDataOd' . $i . '_' . $data['Code']];
				}
			}

			unset($data['Code']);

			$response = $this->Api->TestujWniosek($this->_getGid(), $data);
			$this->set('response', $response);
			echo json_encode($response);
		}

		die();
	}

	/**
	 * @param int $nrEwid
	 */
	public function ajax_sprawdz_wniosek($nrEwid = null)
	{
		$this->render(false);
		$this->layout = 'ajax';

		if ($this->request->is('post')) {
			if (empty($nrEwid)) {
				$nowyWniosekResponse = $this->Api->DajNowyWniosek($this->_getGid());
			} else {
				$nowyWniosekResponse = $this->Api->DajNowyWniosekDlaPodwladnego($this->_getGid(), (int)$nrEwid);
			}
			$jsonResp = $this->_handle_response_json($nowyWniosekResponse);
			if (isset($jsonResp['login'])) {
				echo json_encode($jsonResp);
			} else {
				$nowyWniosek = $nowyWniosekResponse['bWniosek'];

				$data = $this->request->data['pWniosek'];
				$data['dat:Kod'] = $this->_string_2_array($data['dat:Kod']['dat2:NumerIGid']);

				if (count($this->request->data['file']) > 0) {
					for ($i = 0; $i < count($this->request->data['file']); $i++) {
						if ($this->request->data['file'][$i]['size'] > 0) {
							$file = $this->_zalaczniki($this->request->data['file'][$i], 'dat:', 'dat1:');
							if ($file == false) {
								$this->Flash->error('Nie udało się przesłać pliku. Spróbuj ponownie');
							} else {
								$data['dat:Zalaczniki'][] = $file['dat:Zalaczniki'];
							}
						}
					}
				}
				unset($this->request->data['file']);
				$data['dat:DataDo'] = $this->_date_for_request($data['dat:DataDo']);
				$data['dat:DataOd'] = $this->_date_for_request($data['dat:DataOd']);
				$data['dat:Gid'] = $nowyWniosek['bWniosek']['bGid'];
				$data['dat:Godziny'] = $this->_time_for_request($data['dat:Godziny']);
				$data['dat:NumerEwidencyjny'] = (int)$nrEwid;

				foreach (range(0, 6) as $i) {
					if (isset($data['dat:dodatkowaWartoscWyboru' . $i . '_' . $data['Code']])) {
						$data['dat:dodatkowaWartoscWyboru' . $i] = $data['dat:dodatkowaWartoscWyboru' . $i . '_' . $data['Code']];
					}
					if (isset($data['dat:dodatkowaWartosc' . $i . '_' . $data['Code']])) {
						$data['dat:dodatkowaWartosc' . $i] = $data['dat:dodatkowaWartosc' . $i . '_' . $data['Code']];
					}
					if (isset($data['dat:dodatkowaWartoscBool' . $i . '_' . $data['Code']])) {
						$data['dat:dodatkowaWartoscBool' . $i] = $data['dat:dodatkowaWartoscBool' . $i . '_' . $data['Code']] ? 'true' : 'false';
					}
					if (isset($data['dat:dodatkowaData' . $i . '_' . $data['Code']])) {
						$data['dat:dodatkowaData' . $i] = $data['dat:dodatkowaData' . $i . '_' . $data['Code']];
					}
					if (isset($data['dat:dodatkowaDataDo' . $i . '_' . $data['Code']])) {
						$data['dat:dodatkowaDataDo' . $i] = $data['dat:dodatkowaDataDo' . $i . '_' . $data['Code']];
					}
					if (isset($data['dat:dodatkowaDataOd' . $i . '_' . $data['Code']])) {
						$data['dat:dodatkowaDataOd' . $i] = $data['dat:dodatkowaDataOd' . $i . '_' . $data['Code']];
					}
				}

				unset($data['Code']);

				$response = $this->Api->TestujWniosek($this->_getGid(), $data);
				$this->set('response', $response);

				echo json_encode($response);
			}
			die();
		}
		die();
	}

	/**
	 * dodaj_wniosek method
	 * @param string $start_location
	 * @param int $nrEwid
	 */
	public function dodaj_wniosek($start_location = null, $nrEwid = null)
	{
		$this->layout = 'ajax';
		if (empty($nrEwid)) {
			$codes = $this->_daj_mozliwe_kody_wniosku();
		} else {
			$codes = $this->_daj_mozliwe_kody_wniosku_dla_podwladnego($nrEwid);
		}

		$pracaZdalna = array();
		$pracaZdalnaSaldo = array();
		$codeList = array();
		foreach ($codes['bKody']['bKod'] as $key => $code) {
			$nrAndGid = [
				'dat2:Gid' => $code['bGid'],
				'dat2:Numer' => $code['bNumer'],
				'dat2:Opis' => $code['bOpis'],
				'dat2:Symbol' => $code['bSymbol'],
				'dat2:CzyPotrzebnyPowod' => $code['bCzyPotrzebnyPowod'],
				'dat2:CzyPracaZdalna' => $code['bCzyPracaZdalna'],
				'dat2:CzyPracaZdalnaSaldo' => $code['bCzyPracaZdalnaSaldo'],
			];
			$codeList[$this->_array_2_string($nrAndGid)] = $code['bOpis'];
			if ($code['bCzyPracaZdalna'] === 'true') {
				$pracaZdalna[] = $this->_array_2_string($nrAndGid);
			}
			if ($code['bCzyPracaZdalnaSaldo'] === 'true') {
				$pracaZdalnaSaldo[] = $this->_array_2_string($nrAndGid);
			}

			// Definicja typów dodatkowych pól do przetworzenia
			// UWAGA: 'labelPrefix' to tylko prefiks, pełny klucz to 'labelPrefix' + indeks + 'Tekst'
			$fieldTypes = [
				'wartosc' => [
					'name' => 'dodatkowaWartosc',
					'labelPrefix' => 'bDodatkowaWartosc',
					'type' => 'text'
				],
				'wartoscWyboru' => [
					'name' => 'dodatkowaWartoscWyboru',
					'labelPrefix' => 'bDodatkowaWartoscWyboru',
					'optionsPrefix' => 'bDodatkowaWartoscWyboru', // bez 'Mozliwe' na końcu!
					'type' => 'select'
				],
				'data' => [
					'name' => 'dodatkowaData',
					'labelPrefix' => 'bDodatkowaData',
					'type' => 'date'
				],
				'dataOd' => [
					'name' => 'dodatkowaDataOd',
					'labelPrefix' => 'bDodatkowaDataOdDo',
					'type' => 'date'
				],
				'dataDo' => [
					'name' => 'dodatkowaDataDo',
					'labelPrefix' => 'bDodatkowaDataOdDo',
					'type' => 'date'
				],
				'wartoscBool' => [
					'name' => 'dodatkowaWartoscBool',
					'labelPrefix' => 'bDodatkowaWartoscBool',
					'type' => 'checkbox'
				],
				'dodatkowyNapis' => [
					'name' => 'dodatkowyNapis',
					'labelPrefix' => 'bDodatkowyNapis',
					'type' => 'textField'
				]
			];

			foreach (range(0, 6) as $i) {
				$hasAnyField = false;

				// Sprawdzenie czy istnieje jakiekolwiek pole dla tego indeksu
				foreach ($fieldTypes as $fieldType => $config) {
					$nameToPrefixMap = [
						'dodatkowaDataOd' => 'bDodatkowaDataOd',
						'dodatkowaDataDo' => 'bDodatkowaDataDo',
					];

					$prefix = $nameToPrefixMap[$config['name']] ?? $config['labelPrefix'];
					$suffix = ($prefix === 'bDodatkowyNapis') ? 'Text' : 'Tekst';
					$labelKey = $prefix . $i . $suffix;

					if (!empty($code[$labelKey])) {
						$hasAnyField = true;
						break;
					}
				}

				if (!$hasAnyField) {
					continue;
				}

				// Przetwarzanie każdego typu pola
				foreach ($fieldTypes as $fieldType => $config) {
					$nameToPrefixMap = [
						'dodatkowaDataOd' => 'bDodatkowaDataOd',
						'dodatkowaDataDo' => 'bDodatkowaDataDo',
					];

					$prefix = $nameToPrefixMap[$config['name']] ?? $config['labelPrefix'];
					$suffix = ($prefix === 'bDodatkowyNapis') ? 'Text' : 'Tekst';
					$labelKey = $prefix . $i . $suffix;

					if (empty($code[$labelKey])) {
						continue;
					}

					$fieldData = [
						'typ' => $config['type'],
						'czyWymagany' => $code[$config['labelPrefix'] . $i . 'CzyWymagana'] ?? 'false',
						'readonly' => $code[$config['labelPrefix'] . $i . 'CzyTylkoDoOdczytu'] ?? 'false',
						'label' => $code[$labelKey],
						'indeks' => $code[$config['labelPrefix'] . $i . 'Indeks'] ?? 0,
						'codeKey' => $key,
						'code' => $this->_array_2_string($nrAndGid),
						'inputName' => $config['name'] . $i,
					];

					// Dodanie opcji dla pól select
					if ($config['type'] === 'select') {
						$optionsKey = $config['optionsPrefix'] . $i . 'Mozliwe';
						$mozliweWartosci = [];
						if (!empty($code[$optionsKey]['cstring'])) {
							foreach ($code[$optionsKey]['cstring'] as $string) {
								$mozliweWartosci[$string] = $string;
							}
						}
						$fieldData['opcje'] = $mozliweWartosci;
					}

					$extensionCode[] = $fieldData;
				}
			}
		}

		// Sortowanie pól dodatkowych według indeksu
		usort($extensionCode, function($a, $b) {
			return ($a['indeks'] ?? 0) <=> ($b['indeks'] ?? 0);
		});

		$this->set('codes', $codeList);
		$this->set(compact('pracaZdalna', 'pracaZdalnaSaldo', 'extensionCode'));

		if (!$this->request->is(array('post', 'put'))) {
			$thisYear = new DateTime();
			$thisYear = (int)$thisYear->format('Y');
			$userNrEwId = $this->Auth->user('cNumerEwidencyjny');
			if (!empty($nrEwid)) {
				$userNrEwId = $nrEwid;
			}

			$saldoOptions = array(
				'dat:Lata' => array(
					0 => array(
						'arr:int' => $thisYear
					)
				),
				'dat:NumerPracownika' => $userNrEwId
			);
			$saldo = $this->_saldo_urlopu_5($nrEwid);
			$this->set('nrEwid', $nrEwid);
//			$this->set('eplo', $this->Api->DajDaneOsobowe($nrEwid));
			$this->set(compact('saldo'));
		}

		$resp = $this->_handle_response_json($saldo);
		$this->set(compact('resp'));
		$this->set(compact('start_location'));

		if (empty($nrEwid)) {
			$nowyWniosekResponse = $this->Api->DajNowyWniosek($this->_getGid());
		} else {
			$nowyWniosekResponse = $this->Api->DajNowyWniosekDlaPodwladnego($this->_getGid(), (int)$nrEwid);
		}

		$nowyWniosek = $nowyWniosekResponse['bWniosek'];
		$knG = empty($nowyWniosekResponse['bKodyNieobecnosciGodzinowych']['cstring']) ? array() : explode("-", $nowyWniosekResponse['bKodyNieobecnosciGodzinowych']['cstring']);
		//$mozliwePowody = empty($nowyWniosek['bMozliwePowody']['cstring']) ? array() : array_combine(array_values($nowyWniosek['bMozliwePowody']['cstring']),$nowyWniosek['bMozliwePowody']['cstring']);
		$mozliwePowody = empty($nowyWniosek['bMozliwePowody']['cstring']) ? array() : $nowyWniosek['bMozliwePowody']['cstring'];
		$mozliwePodlegli = $nowyWniosekResponse['bCzyMozeSkladacZaPodleglego'] === 'true' ? 1 : 0;
		$this->set(compact('nowyWniosek', 'knG', 'mozliwePowody', 'mozliwePodlegli'));

		if ($this->request->is('post')) {
			$data = $this->request->data['pWniosek'];

			foreach (range(0, 6) as $i) {
				if (isset($data['dat:dodatkowaWartoscWyboru' . $i . '_' . $data['Code']])) {
					$data['dat:dodatkowaWartoscWyboru' . $i] = $data['dat:dodatkowaWartoscWyboru' . $i . '_' . $data['Code']];
				}
				if (isset($data['dat:dodatkowaWartosc' . $i . '_' . $data['Code']])) {
					$data['dat:dodatkowaWartosc' . $i] = $data['dat:dodatkowaWartosc' . $i . '_' . $data['Code']];
				}
				if (isset($data['dat:dodatkowaWartoscBool' . $i . '_' . $data['Code']])) {
					$data['dat:dodatkowaWartoscBool' . $i] = $data['dat:dodatkowaWartoscBool' . $i . '_' . $data['Code']] ? 'true' : 'false';
				}
				if (isset($data['dat:dodatkowaData' . $i . '_' . $data['Code']])) {
					$data['dat:dodatkowaData' . $i] = $data['dat:dodatkowaData' . $i . '_' . $data['Code']];
				}
				if (isset($data['dat:dodatkowaDataDo' . $i . '_' . $data['Code']])) {
					$data['dat:dodatkowaDataDo' . $i] = $data['dat:dodatkowaDataDo' . $i . '_' . $data['Code']];
				}
				if (isset($data['dat:dodatkowaDataOd' . $i . '_' . $data['Code']])) {
					$data['dat:dodatkowaDataOd' . $i] = $data['dat:dodatkowaDataOd' . $i . '_' . $data['Code']];
				}
			}

			unset($data['Code']);

			$data['dat:Kod'] = $this->_string_2_array($data['dat:Kod']['dat2:NumerIGid']);

			$filesCounter = 0;
			if (count($this->request->data['file']) > 0) {
				for ($i = 0; $i < count($this->request->data['file']); $i++) {
					if ($this->request->data['file'][$i]['size'] > 0) {
						$file = $this->_zalaczniki($this->request->data['file'][$i], 'dat:', 'dat1:');
						if ($file == false) {
							$this->Flash->error('Nie udało się przesłać pliku. Spróbuj ponownie');
						} else {
							$data['dat:Zalaczniki'][] = $file['dat:Zalaczniki'];
							$filesCounter++;
						}
					}
				}
			}
			unset($this->request->data['file']);
			$data['dat:IloscDodanychZalacznikow'] = $filesCounter;
			$data['dat:DataDo'] = $this->_date_for_request($data['dat:DataDo']);
			$data['dat:DataOd'] = $this->_date_for_request($data['dat:DataOd']);
			$data['dat:Gid'] = $nowyWniosek['bWniosek']['bGid'];
			$data['dat:Godziny'] = $this->_time_for_request($data['dat:Godziny']);
			$data['dat:NumerEwidencyjny'] = (int)$nrEwid;

			$response = $this->_zapisz_wniosek($data);

			$this->Session->write('view_enter_after_add', true);

			$this->set('response', $response);

			/*if($this->_handle_response($response))
            {
                return $this->redirect(array('action' => 'wnioski'));
            }*/

			echo json_encode($this->_handle_response_json($response));
			die();
		}
	}

	/**
	 * zmien_haslo method
	 * @param int $nrEwid
	 */
	public function zmien_haslo($bGid = NULL)
	{
		$this->layout = 'ajax';

		if ($this->request->is(array('post', 'put'))) {
			$data['dat:CzyHasloPakowaniaPlikow'] = true;
			$data['dat:HasloPakowaniaPlikow'] = $this->request->data['password'];
			$response = $this->Api->AktualizujAdresyEmailIHaslo($this->_getGid(), $data);
			$this->set('response', $response);
			echo json_encode($this->_handle_response_json($response));
			die();
		}

	}

	/**
	 * zmien_adresy_email method
	 * @param int $nrEwid
	 */
	public function zmien_adresy_email($bGid = NULL)
	{
		$this->layout = 'ajax';

		if ($this->request->is(array('post', 'put'))) {
			$req = $this->request->data;
			$data = [];
			$data['dat:CzyAktualizacjaAdresowEmail'] = true;
			$data['dat:EmailOgolny'] = $req['bEmailOgolny'];
			$data['dat:EmailOdcinki'] = $req['bEmailOdcinki'];
			$data['dat:EmailPIT'] = $req['bEmailPIT'];
			$response = $this->Api->AktualizujAdresyEmailIHaslo($this->_getGid(), $data);

			$this->set('response', $response);
			echo json_encode($this->_handle_response_json($response));
			die();
		}
	}

	/**
	 * pracownicy method
	 */
	public function pracownicy()
	{
		$this->layout = 'ajax';

		$employees = $this->Api->DajListePracownikow($this->_getGid(), true);
		$resp = $this->_handle_response_json($employees);
		$this->set(compact('resp'));

		$employees['bPracownicy'] = $this->_convert_list_response($employees['bPracownicy'], 'bPracownik');

		if (isset($employees['bPracownicy']['bPracownik']) && !empty($employees['bPracownicy']['bPracownik'])) {
			foreach ($employees['bPracownicy']['bPracownik'] as &$employee) {
				$employee = $this->_convert_to_date_array($employee, array('bAngazDo', 'bAngazDo', 'bDataPrzyjecia', 'bDataZwolnienia'));
			}
		}
		$this->set(compact('employees'));
	}

	/**
	 * pracownicy_zastepstwa method
	 */
	public function pracownicy_zastepstwa()
	{
		$this->layout = 'ajax';

		$employees = $this->Api->DajListePracownikow($this->_getGid(), true, true);
		$resp = $this->_handle_response_json($employees);
		$this->set(compact('resp'));

		$employees['bPracownicy'] = $this->_convert_list_response($employees['bPracownicy'], 'bPracownik');

		if (isset($employees['bPracownicy']['bPracownik']) && !empty($employees['bPracownicy']['bPracownik'])) {
			foreach ($employees['bPracownicy']['bPracownik'] as &$employee) {
				$employee = $this->_convert_to_date_array($employee, array('bAngazDo', 'bAngazDo', 'bDataPrzyjecia', 'bDataZwolnienia'));
			}
		}
		$this->set(compact('employees'));
		$this->render('pracownicy');
	}


	public function dajLiczbePracownikow()
	{
		$employees = $this->Api->DajListePracownikow($this->_getGid(), true);
		$employees['bPracownicy'] = $this->_convert_list_response($employees['bPracownicy'], 'bPracownik');

		if (isset($employees['bPracownicy']['bPracownik']) && !empty($employees['bPracownicy']['bPracownik'])) {
			foreach ($employees['bPracownicy']['bPracownik'] as &$employee) {
				$employee = $this->_convert_to_date_array($employee, array('bAngazDo', 'bAngazDo', 'bDataPrzyjecia', 'bDataZwolnienia'));
			}
		}

		return isset($employees['bPracownicy']['bPracownik']) ? count($employees['bPracownicy']['bPracownik']) : 0;
	}

	public function dajLiczbePracownikowZastepstwa()
	{
		$employees = $this->Api->DajListePracownikow($this->_getGid(), true, true);
		$employees['bPracownicy'] = $this->_convert_list_response($employees['bPracownicy'], 'bPracownik');

		if (isset($employees['bPracownicy']['bPracownik']) && !empty($employees['bPracownicy']['bPracownik'])) {
			foreach ($employees['bPracownicy']['bPracownik'] as &$employee) {
				$employee = $this->_convert_to_date_array($employee, array('bAngazDo', 'bAngazDo', 'bDataPrzyjecia', 'bDataZwolnienia'));
			}
		}

		return isset($employees['bPracownicy']['bPracownik']) ? count($employees['bPracownicy']['bPracownik']) : 0;
	}

	/**
	 *
	 */
	public function pracownicy_kadry()
	{
		$this->layout = 'ajax';

		$employees = $this->Api->DajListePracownikow($this->_getGid(), true);

		$resp = $this->_handle_response_json($employees);
		$this->set(compact('resp'));

		$employees['bPracownicy'] = $this->_convert_list_response($employees['bPracownicy'], 'bPracownik');

		if (isset($employees['bPracownicy']['bPracownik']) && !empty($employees['bPracownicy']['bPracownik'])) {
			foreach ($employees['bPracownicy']['bPracownik'] as &$employee) {
				$employee = $this->_convert_to_date_array($employee, array('bAngazDo', 'bAngazDo', 'bDataPrzyjecia', 'bDataZwolnienia'));
			}
		}

		$this->set(compact('employees'));

		$xpl = explode('?', $this->request->query('a'));
		$this->set('a_action', $xpl[0]);
	}

	public function pracownicy_kadry_zastepstwa()
	{
		$this->layout = 'ajax';

		$employees = $this->Api->DajListePracownikow($this->_getGid(), true, true);

		$resp = $this->_handle_response_json($employees);
		$this->set(compact('resp'));

		$employees['bPracownicy'] = $this->_convert_list_response($employees['bPracownicy'], 'bPracownik');

		if (isset($employees['bPracownicy']['bPracownik']) && !empty($employees['bPracownicy']['bPracownik'])) {
			foreach ($employees['bPracownicy']['bPracownik'] as &$employee) {
				$employee = $this->_convert_to_date_array($employee, array('bAngazDo', 'bAngazDo', 'bDataPrzyjecia', 'bDataZwolnienia'));
			}
		}

		$this->set(compact('employees'));
		$this->render('pracownicy_kadry');
	}

	/**
	 *
	 */
	public function pracownicy_place()
	{
		$this->layout = 'ajax';

		$employees = $this->Api->DajListePracownikow($this->_getGid(), true);

		$resp = $this->_handle_response_json($employees);
		$this->set(compact('resp'));

		$employees['bPracownicy'] = $this->_convert_list_response($employees['bPracownicy'], 'bPracownik');

		if (isset($employees['bPracownicy']['bPracownik']) && !empty($employees['bPracownicy']['bPracownik'])) {
			foreach ($employees['bPracownicy']['bPracownik'] as &$employee) {
				$employee = $this->_convert_to_date_array($employee, array('bAngazDo', 'bAngazDo', 'bDataPrzyjecia', 'bDataZwolnienia'));
			}
		}

		$this->set(compact('employees'));
	}

	/**
	 *
	 */
	public function pracownicy_grafik()
	{
		$this->layout = 'ajax';

		$employees = $this->Api->DajListePracownikow($this->_getGid(), true);

		$resp = $this->_handle_response_json($employees);
		$this->set(compact('resp'));

		$employees['bPracownicy'] = $this->_convert_list_response($employees['bPracownicy'], 'bPracownik');

		if (isset($employees['bPracownicy']['bPracownik']) && !empty($employees['bPracownicy']['bPracownik'])) {
			foreach ($employees['bPracownicy']['bPracownik'] as &$employee) {
				$employee = $this->_convert_to_date_array($employee, array('bAngazDo', 'bAngazDo', 'bDataPrzyjecia', 'bDataZwolnienia'));
			}
		}

		$this->set(compact('employees'));
	}

	/**
	 *
	 */
	public function pracownicy_odbicia()
	{
		$this->layout = 'ajax';

		$employees = $this->Api->DajListePracownikow($this->_getGid(), true);

		$resp = $this->_handle_response_json($employees);
		$this->set(compact('resp'));

		$employees['bPracownicy'] = $this->_convert_list_response($employees['bPracownicy'], 'bPracownik');

		if (isset($employees['bPracownicy']['bPracownik']) && !empty($employees['bPracownicy']['bPracownik'])) {
			foreach ($employees['bPracownicy']['bPracownik'] as &$employee) {
				$employee = $this->_convert_to_date_array($employee, array('bAngazDo', 'bAngazDo', 'bDataPrzyjecia', 'bDataZwolnienia'));
			}
		}

		$this->set(compact('employees'));
	}

	public function pracownicy_grafik_zastepstwa()
	{
		$this->layout = 'ajax';

		$employees = $this->Api->DajListePracownikow($this->_getGid(), true, true);

		$resp = $this->_handle_response_json($employees);
		$this->set(compact('resp'));

		$employees['bPracownicy'] = $this->_convert_list_response($employees['bPracownicy'], 'bPracownik');

		if (isset($employees['bPracownicy']['bPracownik']) && !empty($employees['bPracownicy']['bPracownik'])) {
			foreach ($employees['bPracownicy']['bPracownik'] as &$employee) {
				$employee = $this->_convert_to_date_array($employee, array('bAngazDo', 'bAngazDo', 'bDataPrzyjecia', 'bDataZwolnienia'));
			}
		}

		$this->set(compact('employees'));
		$this->render('pracownicy_grafik');
	}

	public function pracownicy_wnioski()
	{

	}

	public function pracownicy_bhp()
	{
		$this->layout = 'ajax';

		$options['ZMetody'] = 'ListaOdziezy.Podlegli';

		$employees = $this->Api->DajListePracownikow($this->_getGid(), true, false, $options);
		$resp = $this->_handle_response_json($employees);
		$this->set(compact('resp'));

		$employees['bPracownicy'] = $this->_convert_list_response($employees['bPracownicy'], 'bPracownik');

		if (isset($employees['bPracownicy']['bPracownik']) && !empty($employees['bPracownicy']['bPracownik'])) {
			foreach ($employees['bPracownicy']['bPracownik'] as &$employee) {
				$employee = $this->_convert_to_date_array($employee, array('bAngazDo', 'bAngazDo', 'bDataPrzyjecia', 'bDataZwolnienia'));
			}
		}
		$this->set(compact('employees'));
	}

	/**
	 * zastepstwa method
	 *
	 */
	public function zastepstwa()
	{
		$this->layout = 'ajax';

		$replacements = $this->_daj_liste_zastepstw();

		$resp = $this->_handle_response_json($replacements);
		$this->set(compact('resp'));

		if (!empty($replacements['bZastepstwa'])) {
			$this->_convert_list_response($replacements['bZastepstwa'], 'bZastepstwo');
			foreach ($replacements['bZastepstwa']['bZastepstwo'] as &$replacement) {
				unset($replacement['bUprawnienia']);
				unset($replacement['bUprawnieniaMaska']);
				$replacement = $this->_convert_to_date_array($replacement, array('bDataOd', 'bDataDo'));
			}
			$replacements = $this->_replace_empty_values($replacements);
			$this->set('replacements', $replacements['bZastepstwa']['bZastepstwo']);
		}
	}

	/**
	 *
	 */
	public function dodaj_zastepstwo()
	{
		$this->layout = 'ajax';

		if ($this->request->is('post')) {

			$this->render(false);

			$data = array();
			$data['tem:pZastepstwo']['dat:DataDo'] = $this->request->data['tem:pZastepstwo']['dat:DataDo'];
			$data['tem:pZastepstwo']['dat:DataOd'] = $this->request->data['tem:pZastepstwo']['dat:DataOd'];
			$data['tem:pZastepstwo']['dat:GidZastepowanego'] = $this->request->data['tem:pZastepstwo']['dat:GidZastepowanego'];
			$data['tem:pZastepstwo']['dat:GidZastepujacego'] = $this->request->data['tem:pZastepstwo']['dat:GidZastepujacego'];
			foreach ($this->request->data['tem:pZastepstwo']['dat:Uprawnienia']['dat1:Modul'] as $key => &$module) {
				if (isset($module['dat1:CzyUruchamianieZastepstwo'])) {
					if ($module['dat1:CzyUruchamianieZastepstwo'] == '0') {
						$module['dat1:CzyUruchamianieZastepstwo'] = 'false';
					} else if ($module['dat1:CzyUruchamianieZastepstwo'] == '1') {
						$module['dat1:CzyUruchamianieZastepstwo'] = 'true';
					}
					if ($module['dat1:CzyDodawanieZastepstwo'] == '0') {
						$module['dat1:CzyDodawanieZastepstwo'] = 'false';
					} else if ($module['dat1:CzyDodawanieZastepstwo'] == '1') {
						$module['dat1:CzyDodawanieZastepstwo'] = 'true';
					}
					if ($module['dat1:CzyUsuwanieZastepstwo'] == '0') {
						$module['dat1:CzyUsuwanieZastepstwo'] = 'false';
					} else if ($module['dat1:CzyUsuwanieZastepstwo'] == '1') {
						$module['dat1:CzyUsuwanieZastepstwo'] = 'true';
					}
					if ($module['dat1:CzyEdycjaZastepstwo'] == '0') {
						$module['dat1:CzyEdycjaZastepstwo'] = 'false';
					} else if ($module['dat1:CzyEdycjaZastepstwo'] == '1') {
						$module['dat1:CzyEdycjaZastepstwo'] = 'true';
					}
				}
				if (empty($module['dat1:Gid'])) {
					continue;
				}
				$data['tem:pZastepstwo']['dat:Uprawnienia'][$key]['dat1:Modul']['dat1:CzyDodawanie'] = $module['dat1:CzyDodawanie'];
				$data['tem:pZastepstwo']['dat:Uprawnienia'][$key]['dat1:Modul']['dat1:CzyDodawanieDotyczy'] = $module['dat1:CzyDodawanieDotyczy'];
				$data['tem:pZastepstwo']['dat:Uprawnienia'][$key]['dat1:Modul']['dat1:CzyDodawanieGrupa'] = $module['dat1:CzyDodawanieGrupa'];
				$data['tem:pZastepstwo']['dat:Uprawnienia'][$key]['dat1:Modul']['dat1:CzyDodawanieGrupaDotyczy'] = $module['dat1:CzyDodawanieGrupaDotyczy'];
				$data['tem:pZastepstwo']['dat:Uprawnienia'][$key]['dat1:Modul']['dat1:CzyDodawanieZastepstwo'] = $module['dat1:CzyDodawanieZastepstwo'];

				$data['tem:pZastepstwo']['dat:Uprawnienia'][$key]['dat1:Modul']['dat1:CzyEdycja'] = $module['dat1:CzyEdycja'];
				$data['tem:pZastepstwo']['dat:Uprawnienia'][$key]['dat1:Modul']['dat1:CzyEdycjaDotyczy'] = $module['dat1:CzyEdycjaDotyczy'];
				$data['tem:pZastepstwo']['dat:Uprawnienia'][$key]['dat1:Modul']['dat1:CzyEdycjaGrupa'] = $module['dat1:CzyEdycjaGrupa'];
				$data['tem:pZastepstwo']['dat:Uprawnienia'][$key]['dat1:Modul']['dat1:CzyEdycjaGrupaDotyczy'] = $module['dat1:CzyEdycjaGrupaDotyczy'];
				$data['tem:pZastepstwo']['dat:Uprawnienia'][$key]['dat1:Modul']['dat1:CzyEdycjaZastepstwo'] = $module['dat1:CzyEdycjaZastepstwo'];

				$data['tem:pZastepstwo']['dat:Uprawnienia'][$key]['dat1:Modul']['dat1:CzyModulAdministracyjny'] = $module['dat1:CzyModulAdministracyjny'];

				$data['tem:pZastepstwo']['dat:Uprawnienia'][$key]['dat1:Modul']['dat1:CzyUruchamianie'] = $module['dat1:CzyUruchamianie'];
				$data['tem:pZastepstwo']['dat:Uprawnienia'][$key]['dat1:Modul']['dat1:CzyUruchamianieDotyczy'] = $module['dat1:CzyUruchamianieDotyczy'];
				$data['tem:pZastepstwo']['dat:Uprawnienia'][$key]['dat1:Modul']['dat1:CzyUruchamianieGrupa'] = $module['dat1:CzyUruchamianieGrupa'];
				$data['tem:pZastepstwo']['dat:Uprawnienia'][$key]['dat1:Modul']['dat1:CzyUruchamianieGrupaDotyczy'] = $module['dat1:CzyUruchamianieGrupaDotyczy'];
				$data['tem:pZastepstwo']['dat:Uprawnienia'][$key]['dat1:Modul']['dat1:CzyUruchamianieZastepstwo'] = $module['dat1:CzyUruchamianieZastepstwo'];

				$data['tem:pZastepstwo']['dat:Uprawnienia'][$key]['dat1:Modul']['dat1:CzyUsuwanie'] = $module['dat1:CzyUsuwanie'];
				$data['tem:pZastepstwo']['dat:Uprawnienia'][$key]['dat1:Modul']['dat1:CzyUsuwanieDotyczy'] = $module['dat1:CzyUsuwanieDotyczy'];
				$data['tem:pZastepstwo']['dat:Uprawnienia'][$key]['dat1:Modul']['dat1:CzyUsuwanieGrupa'] = $module['dat1:CzyUsuwanieGrupa'];
				$data['tem:pZastepstwo']['dat:Uprawnienia'][$key]['dat1:Modul']['dat1:CzyUsuwanieGrupaDotyczy'] = $module['dat1:CzyUsuwanieGrupaDotyczy'];
				$data['tem:pZastepstwo']['dat:Uprawnienia'][$key]['dat1:Modul']['dat1:CzyUsuwanieZastepstwo'] = $module['dat1:CzyUsuwanieZastepstwo'];

				$data['tem:pZastepstwo']['dat:Uprawnienia'][$key]['dat1:Modul']['dat1:Gid'] = $module['dat1:Gid'];
				$data['tem:pZastepstwo']['dat:Uprawnienia'][$key]['dat1:Modul']['dat1:MozliweUprawnienia'] = $module['dat1:MozliweUprawnienia'];
				$data['tem:pZastepstwo']['dat:Uprawnienia'][$key]['dat1:Modul']['dat1:Nazwa'] = $module['dat1:Nazwa'];
				$data['tem:pZastepstwo']['dat:Uprawnienia'][$key]['dat1:Modul']['dat1:Opis'] = $module['dat1:Opis'];
				$data['tem:pZastepstwo']['dat:Uprawnienia'][$key]['dat1:Modul']['dat1:SciezkaGid'] = $module['dat1:SciezkaGid'];
				$data['tem:pZastepstwo']['dat:Uprawnienia'][$key]['dat1:Modul']['dat1:SciezkaNazw'] = $module['dat1:SciezkaNazw'];
				if ($module['dat1:Wciecie'] !== null) {
					$data['tem:pZastepstwo']['dat:Uprawnienia'][$key]['dat1:Modul']['dat1:Wciecie'] = $module['dat1:Wciecie'];
				}
			}
			$data['tem:pZastepstwo']['dat:Zastepowany'] = $this->request->data['tem:pZastepstwo']['dat:Zastepowany'];
			$data['tem:pZastepstwo']['dat:Zastepujacy'] = $this->request->data['tem:pZastepstwo']['dat:Zastepujacy'];
			$data = $this->_replace_empty_values($data, '');
			/*if($this->_handle_response())
            {
                $this->redirect(array('action' => 'zastepstwa'));
            } else {

            }*/

			$response = $this->_dodaj_zastepstwo($data);
			echo json_encode($this->_handle_response_json($response));
			die();
		}

		$modules = $this->_daj_moduly(null, $this->_getUserGid());
		$replacement = $this->Api->DajNoweZastepstwo($this->_getGid());

		$resp = $this->_handle_response_json($modules);
		$this->set(compact('resp'));

		$modules['bModuly'] = $this->_convert_list_response($modules['bModuly'], 'bModul');
		$modules = $this->_rename_array_key_prefixes_recursive($modules, array('b'), array('dat1:'));
		$this->set('modules', $modules);
		$this->set('czyMozeWybracZastepujacego', $replacement['bCzyMozeWybracZastepujacego']);
		$this->set('czyOdebranaMozliwoscWyboruUprawnien', $replacement['bCzyOdebranaMozliwoscWyboruUprawnien']);

		$this->request->data['tem:pZastepstwo']['dat:Gid'] = $replacement['bZastepstwo']['bGid'];
		$this->request->data['tem:pZastepstwo']['dat:GidZastepowanego'] = $replacement['bZastepstwo']['bGidZastepowanego'];
		$this->request->data['tem:pZastepstwo']['dat:GidZastepujacego'] = $replacement['bZastepstwo']['bGidZastepujacego'];
		$this->request->data['tem:pZastepstwo']['dat:Uprawnienia']['dat1:Modul'] = $modules['dat1:Moduly']['dat1:Modul'];
	}

	/**
	 * zastepstwo method
	 * @param $gid string|null
	 * @return null
	 */
	public function zastepstwo($gid)
	{
		$this->layout = 'ajax';

		if ($this->request->is('post')) {

			$this->render(false);

			$data = array();

			$this->request->data['tem:pZastepstwo']['dat:DataDo'] = $this->_date_for_request($this->request->data['tem:pZastepstwo']['dat:DataDo']);
			$this->request->data['tem:pZastepstwo']['dat:DataOd'] = $this->_date_for_request($this->request->data['tem:pZastepstwo']['dat:DataOd']);
			$this->request->data = $this->_unset_empty_values($this->request->data);
			$data['tem:pZastepstwo']['dat:DataDo'] = $this->request->data['tem:pZastepstwo']['dat:DataDo'];
			$data['tem:pZastepstwo']['dat:DataOd'] = $this->request->data['tem:pZastepstwo']['dat:DataOd'];
			$data['tem:pZastepstwo']['dat:Gid'] = $this->request->data['tem:pZastepstwo']['dat:Gid'];
			$data['tem:pZastepstwo']['dat:GidZastepowanego'] = $this->request->data['tem:pZastepstwo']['dat:GidZastepowanego'];
			$data['tem:pZastepstwo']['dat:GidZastepujacego'] = $this->request->data['tem:pZastepstwo']['dat:GidZastepujacego'];
			foreach ($this->request->data['tem:pZastepstwo']['dat:Uprawnienia']['dat1:Modul'] as $key => &$module) {
				if (isset($module['dat1:CzyUruchamianieZastepstwo'])) {
					if ($module['dat1:CzyUruchamianieZastepstwo'] == '0') {
						$module['dat1:CzyUruchamianieZastepstwo'] = 'false';
					} else if ($module['dat1:CzyUruchamianieZastepstwo'] == '1') {
						$module['dat1:CzyUruchamianieZastepstwo'] = 'true';
					}
				}
				if (empty($module['dat1:Gid'])) {
					continue;
				}
				$data['tem:pZastepstwo']['dat:Uprawnienia'][$key]['dat1:Modul']['dat1:CzyDodawanie'] = $module['dat1:CzyDodawanie'];
				$data['tem:pZastepstwo']['dat:Uprawnienia'][$key]['dat1:Modul']['dat1:CzyDodawanieDotyczy'] = $module['dat1:CzyDodawanieDotyczy'];
				$data['tem:pZastepstwo']['dat:Uprawnienia'][$key]['dat1:Modul']['dat1:CzyDodawanieGrupa'] = $module['dat1:CzyDodawanieGrupa'];
				$data['tem:pZastepstwo']['dat:Uprawnienia'][$key]['dat1:Modul']['dat1:CzyDodawanieGrupaDotyczy'] = $module['dat1:CzyDodawanieGrupaDotyczy'];
				$data['tem:pZastepstwo']['dat:Uprawnienia'][$key]['dat1:Modul']['dat1:CzyDodawanieZastepstwo'] = $module['dat1:CzyDodawanieZastepstwo'];

				$data['tem:pZastepstwo']['dat:Uprawnienia'][$key]['dat1:Modul']['dat1:CzyEdycja'] = $module['dat1:CzyEdycja'];
				$data['tem:pZastepstwo']['dat:Uprawnienia'][$key]['dat1:Modul']['dat1:CzyEdycjaDotyczy'] = $module['dat1:CzyEdycjaDotyczy'];
				$data['tem:pZastepstwo']['dat:Uprawnienia'][$key]['dat1:Modul']['dat1:CzyEdycjaGrupa'] = $module['dat1:CzyEdycjaGrupa'];
				$data['tem:pZastepstwo']['dat:Uprawnienia'][$key]['dat1:Modul']['dat1:CzyEdycjaGrupaDotyczy'] = $module['dat1:CzyEdycjaGrupaDotyczy'];
				$data['tem:pZastepstwo']['dat:Uprawnienia'][$key]['dat1:Modul']['dat1:CzyEdycjaZastepstwo'] = $module['dat1:CzyEdycjaZastepstwo'];

				$data['tem:pZastepstwo']['dat:Uprawnienia'][$key]['dat1:Modul']['dat1:CzyModulAdministracyjny'] = $module['dat1:CzyModulAdministracyjny'];

				$data['tem:pZastepstwo']['dat:Uprawnienia'][$key]['dat1:Modul']['dat1:CzyUruchamianie'] = $module['dat1:CzyUruchamianie'];
				$data['tem:pZastepstwo']['dat:Uprawnienia'][$key]['dat1:Modul']['dat1:CzyUruchamianieDotyczy'] = $module['dat1:CzyUruchamianieDotyczy'];
				$data['tem:pZastepstwo']['dat:Uprawnienia'][$key]['dat1:Modul']['dat1:CzyUruchamianieGrupa'] = $module['dat1:CzyUruchamianieGrupa'];
				$data['tem:pZastepstwo']['dat:Uprawnienia'][$key]['dat1:Modul']['dat1:CzyUruchamianieGrupaDotyczy'] = $module['dat1:CzyUruchamianieGrupaDotyczy'];
				$data['tem:pZastepstwo']['dat:Uprawnienia'][$key]['dat1:Modul']['dat1:CzyUruchamianieZastepstwo'] = $module['dat1:CzyUruchamianieZastepstwo'];

				$data['tem:pZastepstwo']['dat:Uprawnienia'][$key]['dat1:Modul']['dat1:CzyUsuwanie'] = $module['dat1:CzyUsuwanie'];
				$data['tem:pZastepstwo']['dat:Uprawnienia'][$key]['dat1:Modul']['dat1:CzyUsuwanieDotyczy'] = $module['dat1:CzyUsuwanieDotyczy'];
				$data['tem:pZastepstwo']['dat:Uprawnienia'][$key]['dat1:Modul']['dat1:CzyUsuwanieGrupa'] = $module['dat1:CzyUsuwanieGrupa'];
				$data['tem:pZastepstwo']['dat:Uprawnienia'][$key]['dat1:Modul']['dat1:CzyUsuwanieGrupaDotyczy'] = $module['dat1:CzyUsuwanieGrupaDotyczy'];
				$data['tem:pZastepstwo']['dat:Uprawnienia'][$key]['dat1:Modul']['dat1:CzyUsuwanieZastepstwo'] = $module['dat1:CzyUsuwanieZastepstwo'];

				$data['tem:pZastepstwo']['dat:Uprawnienia'][$key]['dat1:Modul']['dat1:Gid'] = $module['dat1:Gid'];
				$data['tem:pZastepstwo']['dat:Uprawnienia'][$key]['dat1:Modul']['dat1:MozliweUprawnienia'] = $module['dat1:MozliweUprawnienia'];
				$data['tem:pZastepstwo']['dat:Uprawnienia'][$key]['dat1:Modul']['dat1:Nazwa'] = $module['dat1:Nazwa'];
				$data['tem:pZastepstwo']['dat:Uprawnienia'][$key]['dat1:Modul']['dat1:Opis'] = $module['dat1:Opis'];
				$data['tem:pZastepstwo']['dat:Uprawnienia'][$key]['dat1:Modul']['dat1:SciezkaGid'] = $module['dat1:SciezkaGid'];
				$data['tem:pZastepstwo']['dat:Uprawnienia'][$key]['dat1:Modul']['dat1:SciezkaNazw'] = $module['dat1:SciezkaNazw'];
				if ($module['dat1:Wciecie'] !== null) {
					$data['tem:pZastepstwo']['dat:Uprawnienia'][$key]['dat1:Modul']['dat1:Wciecie'] = $module['dat1:Wciecie'];
				}
			}
			$data['tem:pZastepstwo']['dat:Zastepowany'] = $this->request->data['tem:pZastepstwo']['dat:Zastepowany'];
			$data['tem:pZastepstwo']['dat:Zastepujacy'] = $this->request->data['tem:pZastepstwo']['dat:Zastepujacy'];

			$response = $this->_edytuj_zastepstwo($data);
			echo json_encode($this->_handle_response_json($response));
			die();
		}

		$replacement = $this->_daj_zastepstwo($gid);

		$resp = $this->_handle_response_json($replacement);
		$this->set(compact('resp'));
		$this->set('czyMozeWybracZastepujacego', $replacement['bCzyMozeWybracZastepujacego']);

		$replacement['bZastepstwo'] = $this->_convert_to_date_array($replacement['bZastepstwo'], array('bDataOd', 'bDataDo'));
		$replacement_keys_renamed['tem:pZastepstwo'] = $this->_rename_array_key_prefixes_recursive($replacement['bZastepstwo'], array('b', 'c'), array('dat:', 'dat1:'));
		$replacement_keys_renamed['tem:pZastepstwo']['dat:Zastepowany'] = $this->_rename_array_key_prefixes_recursive($replacement['bZastepstwo']['bZastepowany'], array('c'), array('dat2:'));
		$replacement_keys_renamed['tem:pZastepstwo']['dat:Zastepujacy'] = $this->_rename_array_key_prefixes_recursive($replacement['bZastepstwo']['bZastepujacy'], array('c'), array('dat2:'));
		$this->request->data = $replacement_keys_renamed;
	}


	/**
	 * @param $gid
	 */
	public function usun_zastepstwo($gid)
	{
		$this->layout = 'ajax';
		$this->render(false);
		if ($this->request->is(array('post', 'put'))) {
			$response = $this->Api->UsunZastepstwo($this->_getGid(), $gid);
			echo json_encode($this->_handle_response_json($response));
		}
		die();
	}

	/**
	 *
	 */
	public function dodaj_role()
	{
		$this->layout = 'ajax';

		if ($this->request->is('post')) {
			$this->render(false);

			($this->request->data['tem:pRola']['dat:CzyUkryta'] == '0') ? $this->request->data['tem:pRola']['dat:CzyUkryta'] = 'false' : $this->request->data['tem:pRola']['dat:CzyUkryta'] = 'true';
			($this->request->data['tem:pRola']['dat:CzyWbudowana'] == '0') ? $this->request->data['tem:pRola']['dat:CzyWbudowana'] = 'false' : $this->request->data['tem:pRola']['dat:CzyWbudowana'] = 'true';
			($this->request->data['tem:pRola']['dat:CzyZaznaczenie'] == '0') ? $this->request->data['tem:pRola']['dat:CzyZaznaczenie'] = 'false' : $this->request->data['tem:pRola']['dat:CzyZaznaczenie'] = 'true';

			$response = $this->_dodaj_role($this->request->data);
			if ($this->_handle_response($response)) {
				echo json_encode($this->_handle_response_json($response));
			} else {
				echo json_encode($this->_handle_response_json($response));
			}
		}
	}

	/**
	 * @param $gid string
	 */
	public function edytuj_role($gid)
	{
		$this->layout = 'ajax';

		if ($this->request->is('post')) {
			$this->render(false);
			($this->request->data['tem:pRola']['dat:CzyUkryta'] == '0') ? $this->request->data['tem:pRola']['dat:CzyUkryta'] = 'false' : $this->request->data['tem:pRola']['dat:CzyUkryta'] = 'true';
			($this->request->data['tem:pRola']['dat:CzyWbudowana'] == '0') ? $this->request->data['tem:pRola']['dat:CzyWbudowana'] = 'false' : $this->request->data['tem:pRola']['dat:CzyWbudowana'] = 'true';
			($this->request->data['tem:pRola']['dat:CzyZaznaczenie'] == '0') ? $this->request->data['tem:pRola']['dat:CzyZaznaczenie'] = 'false' : $this->request->data['tem:pRola']['dat:CzyZaznaczenie'] = 'true';

			$response = $this->_edytuj_role($this->request->data);
			echo json_encode($this->_handle_response_json($response));
		} else {
			$getRole = $this->_daj_role_pojedyncza($gid);

			$resp = $this->_handle_response_json($getRole);
			$this->set(compact('resp'));

			$role['tem:pRola'] = $this->_rename_array_key_prefixes($getRole['bRola'], 'b', 'dat:');
			$role = $this->_replace_empty_values($role, '');
			$this->request->data = $role;
		}
	}

	/**
	 * @param $gid string
	 */
	public function uprawnienia_roli($gid)
	{
		$this->layout = 'ajax';

		if ($this->request->is('post')) {

			$data = array();
			$dataJson = json_decode($this->request->data['content'], true);

			foreach ($dataJson as $key => $val) {

				$str = '&' . $val['name'] . '=' . $val['value'];
				parse_str($str, $arr);

				$diff = array_intersect_assoc($data, $arr);
				$a = $this->_show_keys($arr);

				if (isset($diff[$a[5]][$a[4]][$a[3]][$a[2]][$a[1]])) {
					$data[$a[5]][$a[4]][$a[3]][$a[2]][$a[1]][$a[0]] = $val['value'];
				} else {
					$data = array_merge_recursive($data, $arr);
				}
			}

			$this->request->data = $data['data'];
			$this->render(false);

			$data = array(
				'tem:pZadanie' => array(
					'dat:GidRoli' => $this->request->data['tem:pZadanie']['dat:GidRoli'],
					'dat:Moduly' => array(
						'dat:Modul' => array()
					)
				)
			);

//            $rawData = file_get_contents("php://input");
//            $rawData = urlencode($rawData);
//            var_dump(($rawData)); die();

			foreach ($this->request->data['tem:pZadanie']['dat:Moduly']['dat:Modul'] as $key => &$module) {
//                foreach ($module as $k => &$v) {
//                    $module['dat:Wciecie'] = str_replace('"', '', $module['dat:Wciecie']);
//                    if ($k != 'dat:Wciecie') {
//                        if ($v == '0') {
//                            $v = 'false';
//                        } elseif ($v == '1') {
//                            $v = 'true';
//                        }
//                    }
//                }
				if (!empty($module['dat:Gid'])) {
					$data['tem:pZadanie']['dat:Moduly'][$key]['dat:Modul']['dat:CzyDodawanie'] = $module['dat:CzyDodawanie'];
					$data['tem:pZadanie']['dat:Moduly'][$key]['dat:Modul']['dat:CzyDodawanieDotyczy'] = $module['dat:CzyDodawanieDotyczy'];
					$data['tem:pZadanie']['dat:Moduly'][$key]['dat:Modul']['dat:CzyDodawanieGrupa'] = $module['dat:CzyDodawanieGrupa'];
					$data['tem:pZadanie']['dat:Moduly'][$key]['dat:Modul']['dat:CzyDodawanieGrupaDotyczy'] = $module['dat:CzyDodawanieGrupaDotyczy'];
					$data['tem:pZadanie']['dat:Moduly'][$key]['dat:Modul']['dat:CzyDodawanieZastepstwo'] = $module['dat:CzyDodawanieZastepstwo'];

					$data['tem:pZadanie']['dat:Moduly'][$key]['dat:Modul']['dat:CzyEdycja'] = $module['dat:CzyEdycja'];
					$data['tem:pZadanie']['dat:Moduly'][$key]['dat:Modul']['dat:CzyEdycjaDotyczy'] = $module['dat:CzyEdycjaDotyczy'];
					$data['tem:pZadanie']['dat:Moduly'][$key]['dat:Modul']['dat:CzyEdycjaGrupa'] = $module['dat:CzyEdycjaGrupa'];
					$data['tem:pZadanie']['dat:Moduly'][$key]['dat:Modul']['dat:CzyEdycjaGrupaDotyczy'] = $module['dat:CzyEdycjaGrupaDotyczy'];
					$data['tem:pZadanie']['dat:Moduly'][$key]['dat:Modul']['dat:CzyEdycjaZastepstwo'] = $module['dat:CzyEdycjaZastepstwo'];

					$data['tem:pZadanie']['dat:Moduly'][$key]['dat:Modul']['dat:CzyModulAdministracyjny'] = $module['dat:CzyModulAdministracyjny'];

					$data['tem:pZadanie']['dat:Moduly'][$key]['dat:Modul']['dat:CzyUruchamianie'] = $module['dat:CzyUruchamianie'];
					$data['tem:pZadanie']['dat:Moduly'][$key]['dat:Modul']['dat:CzyUruchamianieDotyczy'] = $module['dat:CzyUruchamianieDotyczy'];
					$data['tem:pZadanie']['dat:Moduly'][$key]['dat:Modul']['dat:CzyUruchamianieGrupa'] = $module['dat:CzyUruchamianieGrupa'];
					$data['tem:pZadanie']['dat:Moduly'][$key]['dat:Modul']['dat:CzyUruchamianieGrupaDotyczy'] = $module['dat:CzyUruchamianieGrupaDotyczy'];
					$data['tem:pZadanie']['dat:Moduly'][$key]['dat:Modul']['dat:CzyUruchamianieZastepstwo'] = $module['dat:CzyUruchamianieZastepstwo'];

					$data['tem:pZadanie']['dat:Moduly'][$key]['dat:Modul']['dat:CzyUsuwanie'] = $module['dat:CzyUsuwanie'];
					$data['tem:pZadanie']['dat:Moduly'][$key]['dat:Modul']['dat:CzyUsuwanieDotyczy'] = $module['dat:CzyUsuwanieDotyczy'];
					$data['tem:pZadanie']['dat:Moduly'][$key]['dat:Modul']['dat:CzyUsuwanieGrupa'] = $module['dat:CzyUsuwanieGrupa'];
					$data['tem:pZadanie']['dat:Moduly'][$key]['dat:Modul']['dat:CzyUsuwanieGrupaDotyczy'] = $module['dat:CzyUsuwanieGrupaDotyczy'];
					$data['tem:pZadanie']['dat:Moduly'][$key]['dat:Modul']['dat:CzyUsuwanieZastepstwo'] = $module['dat:CzyUsuwanieZastepstwo'];

					$data['tem:pZadanie']['dat:Moduly'][$key]['dat:Modul']['dat:Gid'] = $module['dat:Gid'];
					$data['tem:pZadanie']['dat:Moduly'][$key]['dat:Modul']['dat:MozliweUprawnienia'] = $module['dat:MozliweUprawnienia'];
					$data['tem:pZadanie']['dat:Moduly'][$key]['dat:Modul']['dat:Nazwa'] = $module['dat:Nazwa'];
					$data['tem:pZadanie']['dat:Moduly'][$key]['dat:Modul']['dat:Opis'] = $module['dat:Opis'];
					$data['tem:pZadanie']['dat:Moduly'][$key]['dat:Modul']['dat:SciezkaGid'] = $module['dat:SciezkaGid'];
					$data['tem:pZadanie']['dat:Moduly'][$key]['dat:Modul']['dat:SciezkaNazw'] = $module['dat:SciezkaNazw'];
					$data['tem:pZadanie']['dat:Moduly'][$key]['dat:Modul']['dat:Wciecie'] = $module['dat:Wciecie'];
				}

			}
			$response = $this->_uprawnienia_roli($data);

			echo json_encode($this->_handle_response_json($response));
		}

		$modules = $this->_daj_moduly($gid);

		$modules['bModuly'] = $this->_convert_list_response($modules['bModuly'], 'bModul');
		$modules = $this->_rename_array_key_prefixes_recursive($modules, array('b'), array('dat:'));
		$this->request->data['tem:pZadanie']['dat:GidRoli'] = $gid;
		$this->request->data['tem:pZadanie']['dat:Moduly'] = $modules['dat:Moduly'];

		$role = $this->Api->DajRole($this->_getGid());

		$resp = $this->_handle_response_json($role);
		$this->set(compact('resp'));

		$rola = null;
		foreach ($role['bRole']['bRola'] as $r) {
			if ($r['bGid'] == $gid) {
				$rola = $r;
			}
		}
		$this->set('pageName', 'Administracja - Edytuj rolę: ' . $rola['bNazwa']);
	}

	/**
	 * @param $gid string
	 */
	public function uzytkownicy_roli($gid)
	{
		$this->layout = 'ajax';

		$users = $this->_daj_uzytkownikow($gid);
		$users['bUzytkownicy'] = $this->_convert_list_response($users['bUzytkownicy'], 'bUzytkownik');
		$users = $this->_rename_array_key_prefixes_recursive($users, array('b'), array('dat:'));
		$users = $this->_replace_empty_values($users, '');

		if ($this->request->is('post')) {

			$this->render(false);

//            $data = ($this->request->data['content']);
			$data = array();
			parse_str($this->request->data['content'], $data);
			$data = $data['data'];

			foreach ($data['tem:pZadanie']['dat:Uzytkownicy'] as $userKey => &$user) {
				if ((int)$user['dat:Uzytkownik']['dat:CzyZaznaczenie'] == 1) {
					$user['dat:Uzytkownik']['dat:CzyZaznaczenie'] = 'true';
				} elseif ((int)$user['dat:Uzytkownik']['dat:CzyZaznaczenie'] == 0) {
					$user['dat:Uzytkownik']['dat:CzyZaznaczenie'] = 'false';
				}
			}

			$postUsers = array();
			$_postUsers = $data['tem:pZadanie']['dat:Uzytkownicy'];
			$_getUsers = $users['dat:Uzytkownicy']['dat:Uzytkownik'];

			foreach ($_postUsers as $u) {
				$userGid = $u['dat:Uzytkownik']['dat:Gid'];
				foreach ($_getUsers as $gu) {
					$userGetGid = $gu['dat:Gid'];
					if ($userGid == $userGetGid) {
						if ($u['dat:Uzytkownik']['dat:CzyZaznaczenie'] != $gu['dat:CzyZaznaczenie']) {
							$postUsers[] = $u;
						}
					}
				}
			}

			$data['tem:pZadanie']['dat:Uzytkownicy'] = $postUsers;

			$response = $this->_uzytkownicy_roli($data);
			echo json_encode($this->_handle_response_json($response));
			/*if($this->_handle_response($this->_uzytkownicy_roli($data)))
            {
                return $this->redirect(array('action' => 'administracja_role'));
            }*/
		}

		$this->request->data['tem:pZadanie']['dat:GidRoli'] = $gid;
		$this->request->data['tem:pZadanie']['dat:Uzytkownicy'] = $users['dat:Uzytkownicy'];

		$role = $this->Api->DajRole($this->_getGid());

		$resp = $this->_handle_response_json($role);
		$this->set(compact('resp'));

		$rola = null;
		foreach ($role['bRole']['bRola'] as $r) {
			if ($r['bGid'] == $gid) {
				$rola = $r;
			}
		}
		$this->set('pageName', 'Administracja - Użytkownicy roli: ' . $rola['bNazwa']);
	}

	/**
	 * @param $gid string
	 */
	public function usun_role($gid)
	{
		$this->layout = 'ajax';
		$this->render(false);

		$response = $this->_usun_role($gid);
		echo json_encode($this->_handle_response_json($response));
		die();
	}

	/**
	 * @param $attachmentGid
	 * @param $messageGid
	 * @param string $disposition
	 */
	public function otworz_zalacznik($attachmentGid, $messageGid, $disposition = 'inline')
	{
		$message = $this->_daj_wiadomosc($messageGid);
		$attachment = $message['bWiadomosc']['bZalaczniki']['bZalacznik'];

		$_attachment = null;
		if (!array_key_exists('bGid', $attachment)) {
			foreach ($attachment as $file) {
				if ($file['bGid'] == $attachmentGid) {
					$_attachment = $file;
				}
			}
			$attachment = $_attachment;
		}

		$fileName = $attachment['bPlik'];
		$content = $attachment['bTresc'];

		if ($disposition != 'inline') $disposition = 'attachment';

		if ($content != '') {
			header("Content-Description: Attachment");
			header('Content-Type: ' . $this->mime_type($fileName));
			header('Content-Length: ' . strlen(base64_decode($content)));
			header('Content-Disposition: ' . $disposition . '; filename="' . $fileName . '"');
			header('Cache-Control: private, max-age=0, must-revalidate');
			header('Pragma: public');
//            ini_set('zlib.output_compression','0');
			die(base64_decode($content));
		}
	}

	/**
	 * @param $attachmentGid
	 * @param $bGid
	 * @param string $disposition
	 */
	public function wniosek_otworz_zalacznik($bGid, $attachmentGid, $disposition = 'inline')
	{
		$wniosek = $this->Api->DajWniosek($this->_getGid(), $bGid);
		$attachment = $wniosek['bWniosek']['bZalaczniki']['cZalacznik'];

		$_attachment = null;
		if (!array_key_exists('cGid', $attachment)) {
			foreach ($attachment as $file) {
				if ($file['cGid'] == $attachmentGid) {
					$_attachment = $file;
				}
			}
			$attachment = $_attachment;
		}

		$fileName = $attachment['cPlik'];
		$content = base64_decode($attachment['cTresc']);

		if ($disposition != 'inline') $disposition = 'attachment';

		if ($content != '') {
			header("Content-Description: Attachment");
			header('Content-Type: ' . $this->mime_type($fileName));
			header('Content-Length: ' . strlen(($content)));
			header('Content-Disposition: ' . $disposition . '; filename="' . $fileName . '"');
			header('Cache-Control: private, max-age=0, must-revalidate');
			header('Pragma: public');
			die(($content));
		}
	}

	/**
	 * wiadomosci method
	 * tylko render
	 */
	public function wiadomosci()
	{
		$this->layout = 'ajax';

		$priorytety = $this->Api->DajPriorytetyWiadomosci($this->_getGid());
		$this->set(compact('priorytety'));

		$resp = $this->_handle_response_json($priorytety);
		$this->set(compact('resp'));

		$rjson = $this->_handle_response_json($priorytety);
		if (isset($rjson['login']) && !empty($rjson['login'])) {
			echo 'login';
			die();
		}
	}

	/**
	 *
	 */
	public function test_aktualizuj_acl_roli()
	{
		$options = array(
			'GidRoli' => 'testowyGid',
			'Moduly' => array(
				0 => array(
					'CzyArchiwizacja' => 'Moze',
					'CzyDodawanie' => 'Chyba tak',
				),
				1 => array(
					'CzyArchiwizacja' => 'Na pewno',
					'CzyDodawanie' => 'Zdecydowanie nie'
				)
			)
		);
		$test = $this->Api->AktualizujACLRoli($this->_getGid(), $options);
		debug($test);
		die();
	}

	/** PUBLIC METHODS - END*/


	/** AJAX METHODS - START*/

	/**
	 * ajax_daj_wnioski method
	 */
	public function ajax_daj_wnioski($typ_wniosku = NULL, $status = NULL)
	{
		$wnioski = $this->_daj_wnioski($typ_wniosku);

		$rjson = $this->_handle_response_json($wnioski);
		if (isset($rjson['login']) && !empty($rjson['login'])) {
			echo 'login';
			die();
		}

		if ($status != NULL) {
			if (isset($wnioski['bWnioski']['bWniosek']) && !empty($wnioski['bWnioski']['bWniosek'])) {
				$wnioskiArray = $wnioski['bWnioski']['bWniosek'];
				$wnioski['bWnioski']['bWniosek'] = array();
				foreach ($wnioskiArray as $w) {
					if ($status == 'Oczekuje' && $w['bStatus'] == 'Oczekuje') $wnioski['bWnioski']['bWniosek'][] = $w;
					if ($status == 'Odrzucony' && $w['bStatus'] == 'Odrzucony') $wnioski['bWnioski']['bWniosek'][] = $w;
					if ($status == 'Zaakceptowany' && ($w['bStatus'] == 'Zaakceptowany' || $w['bStatus'] == 'Zaimportowany')) $wnioski['bWnioski']['bWniosek'][] = $w;
					if ($status == 'Wszystkie') $wnioski['bWnioski']['bWniosek'] = $wnioskiArray;
				}
			}
		}

		if ($typ_wniosku == 'Wplywajace') {
			$wnioskiArray = $wnioski['bWnioski']['bWniosek'];
			$wnioski['bWnioski']['bWniosek'] = array();
			foreach ($wnioskiArray as $wniosek) {
				if ($wniosek['bWnioskujacy']['cGid'] != $this->_getUserGid()) {
					$wnioski['bWnioski']['bWniosek'][] = $wniosek;
				}
			}
		}

		$this->set(compact('wnioski', 'typ_wniosku'));
	}

	/**
	 * ajax_daj_umowy method
	 * @param $numer
	 */
	public function ajax_daj_umowy($numer)
	{
		$this->layout = 'ajax';
		$contracts = $this->_umowy_o_prace($numer);

		$rjson = $this->_handle_response_json($contracts);
		if (isset($rjson['login']) && !empty($rjson['login'])) {
			echo 'login';
			die();
		}

		$contracts = $this->_umowy_o_prace_convert($contracts);

		$this->set(compact('contracts'));
	}


	public function umowa_otworz_zalacznik($stanowiskoKod, $disposition = 'inline')
	{
		$karta = $this->Api->DajKarteStanowiskowa($this->_getGid(), ['dat:StanowiskoKod' => $stanowiskoKod]);
		if (isset($karta['bKarta']['bPlik'])) {
			$fileName = $karta['bKarta']['bNazwaPliku'];
			$content = $karta['bKarta']['bPlik'];

			if ($disposition != 'inline') $disposition = 'attachment';

			if ($content != '') {
				header("Content-Description: Attachment");
				header('Content-Type: ' . $this->mime_type($fileName));
				header('Content-Length: ' . strlen(base64_decode($content)));
				header('Content-Disposition: ' . $disposition . '; filename="' . $fileName . '"');
				header('Cache-Control: private, max-age=0, must-revalidate');
				header('Pragma: public');
				die(base64_decode($content));
			}
		}
		die();
	}

	/**
	 * ajax_daj_nieobecnosci method
	 * @param $numer
	 */
	public function ajax_daj_nieobecnosci($numer)
	{
		$this->layout = 'ajax';
		$absents = $this->_nieobecnosci($numer);

		$rjson = $this->_handle_response_json($absents);
		if (isset($rjson['login']) && !empty($rjson['login'])) {
			echo 'login';
			die();
		}

		$absents = $this->_nieobecnosci_convert($absents);

		$this->set(compact('absents'));
	}

	/**
	 * ajax_daj_przebiegi_pracy method
	 * @param $numer
	 */
	public function ajax_daj_przebiegi_pracy($numer)
	{
		$this->layout = 'ajax';
		$workflows = $this->_przebiegi_pracy($numer);

		$rjson = $this->_handle_response_json($workflows);
		if (isset($rjson['login']) && !empty($rjson['login'])) {
			echo 'login';
			die();
		}

		$workflows = $this->_przebiegi_pracy_convert($workflows);

		$this->set(compact('workflows'));
	}

	/**
	 * ajax_daj_wyksztalcenia method
	 * @param $numer
	 */
	public function ajax_daj_wyksztalcenia($numer)
	{
		$this->layout = 'ajax';
		$educations = $this->_wyksztalcenia($numer);

		$rjson = $this->_handle_response_json($educations);
		if (isset($rjson['login']) && !empty($rjson['login'])) {
			echo 'login';
			die();
		}

		$educations = $this->_wyksztalcenia_convert($educations);

		$this->set(compact('educations'));
	}

	/**
	 * ajax_daj_badania method
	 * @param $numer
	 */
	public function ajax_daj_badania($numer)
	{
		$this->layout = 'ajax';
		$badania = $this->_badania($numer);

		$rjson = $this->_handle_response_json($badania);
		if (isset($rjson['login']) && !empty($rjson['login'])) {
			echo 'login';
			die();
		}

		$badania = $this->_badania_convert($badania);

		$this->set(compact('badania'));
	}

	/**
	 * ajax_daj_szkolenia method
	 * @param $numer
	 */
	public function ajax_daj_szkolenia($numer)
	{
		$this->layout = 'ajax';
		$trainings = $this->_szkolenia($numer);

		$rjson = $this->_handle_response_json($trainings);
		if (isset($rjson['login']) && !empty($rjson['login'])) {
			echo 'login';
			die();
		}

		$this->set(compact('trainings'));
	}

	/**
	 * ajax_daj_kary method
	 * @param $numer
	 */
	public function ajax_daj_kary($numer)
	{
		$this->layout = 'ajax';
		$punishes = $this->_kary($numer);

		$rjson = $this->_handle_response_json($punishes);
		if (isset($rjson['login']) && !empty($rjson['login'])) {
			echo 'login';
			die();
		}

		$this->set(compact('punishes'));
	}

	/**
	 * ajax_daj_jezyki method
	 * @param $numer
	 */
	public function ajax_daj_jezyki($numer)
	{
		$this->layout = 'ajax';
		$langs = $this->_jezyki($numer);

		$rjson = $this->_handle_response_json($langs);
		if (isset($rjson['login']) && !empty($rjson['login'])) {
			echo 'login';
			die();
		}

		$this->set(compact('langs'));
	}

	/**
	 * ajax_daj_kwalifikacje method
	 * @param $numer
	 */
	public
	function ajax_daj_kwalifikacje($numer)
	{
		$this->layout = 'ajax';
		$skills = $this->_kwalifikacje($numer);

		$rjson = $this->_handle_response_json($skills);
		if (isset($rjson['login']) && !empty($rjson['login'])) {
			echo 'login';
			die();
		}

		$this->set(compact('skills'));
	}

	/**
	 * ajax_daj_rodzine method
	 * @param $numer
	 */
	public function ajax_daj_rodzine($numer)
	{
		$this->layout = 'ajax';
		$family = $this->_rodzina($numer);

		$rjson = $this->_handle_response_json($family);
		if (isset($rjson['login']) && !empty($rjson['login'])) {
			echo 'login';
			die();
		}

		$this->set(compact('family'));
	}

	/**
	 * ajax_daj_oceny method
	 * @param $numer
	 */
	public function ajax_daj_oceny($numer)
	{
		$this->layout = 'ajax';
		$ratings = $this->_ocena($numer);
		$rjson = $this->_handle_response_json($ratings);
		if (isset($rjson['login']) && !empty($rjson['login'])) {
			echo 'login';
			die();
		}

		$this->set(compact('ratings'));
	}

	/**
	 * ajax_daj_plan_urlopu method
	 * @param $numer
	 */
	public function ajax_daj_plan_urlopu($numer)
	{
		$this->layout = 'ajax';
		$free_days = $this->_plan_urlopu($numer);

		$rjson = $this->_handle_response_json($free_days);
		if (isset($rjson['login']) && !empty($rjson['login'])) {
			echo 'login';
			die();
		}

		$this->set(compact('free_days'));
	}

	/**
	 * ajax_daj_dokumenty method
	 * @param $numer
	 */
	public function ajax_daj_dokumenty($numer)
	{
		$this->layout = 'ajax';
		$documents = $this->_dokumenty($numer);

		$rjson = $this->_handle_response_json($documents);
		if (isset($rjson['login']) && !empty($rjson['login'])) {
			echo 'login';
			die();
		}

		$this->set(compact('documents'));
	}

	/**
	 * ajax_daj_dokumenty method
	 * @param $numer
	 */
	public function ajax_daj_dokumenty_kadrowe($numer)
	{
		$this->layout = 'ajax';
		$documents = $this->_dokumenty_kadrowe($numer);

		$rjson = $this->_handle_response_json($documents);
		if (isset($rjson['login']) && !empty($rjson['login'])) {
			echo 'login';
			die();
		}

		$this->set(compact('documents'));
		$this->render('ajax_daj_dokumenty');
	}

	/**
	 * ajax_daj_profil method
	 * @param $numer
	 */
	public function ajax_daj_profil($numer)
	{
		$ids = explode(',', $numer);
		$this->layout = 'ajax';
		$profile = $this->_profil($ids[0], $ids[1]);
		$data = $this->_daj_dane_osobowe($ids[0], $ids[1]);

		$rjson = $this->_handle_response_json($profile);
		if (isset($rjson['login']) && !empty($rjson['login'])) {
			echo 'login';
			die();
		}

		$this->set(compact('profile', 'data'));
	}

	/**
	 * ajax_daj_zdarzenia method
	 * @param string $numer
	 */
	public function ajax_daj_zdarzenia($numer)
	{
		$this->layout = 'ajax';
		$ids = explode(',', $numer);
		$_gid = $ids[0];
		$_nrewid = $ids[1];
		$this->set(compact('_gid', '_nrewid'));
	}

	/**
	 * ajax_daj_zdarzenia_odbicia method
	 * @param string $numer
	 */
	public function ajax_daj_zdarzenia_odbicia($numer)
	{
		$this->layout = 'ajax';
		$ids = explode(',', $numer);
		$_gid = $ids[0];
		$_nrewid = $ids[1];
		$this->set(compact('_gid', '_nrewid'));
	}

	/**
	 * ajax_daj_informacje_placowe method
	 * @param string $rodzaj
	 */
	public function ajax_daj_informacje_placowe($rodzaj, $numer_pracownika = null)
	{
		$this->layout = 'ajax';
		$cash = $this->_daj_informacje_placowe($rodzaj, $numer_pracownika);

		$rjson = $this->_handle_response_json($cash);
		if (isset($rjson['login']) && !empty($rjson['login'])) {
			echo 'login';
			die();
		}

		$this->set(compact('cash', 'rodzaj'));
	}

	/**
	 * ajax_daj_dokuemnty method
	 * @param $rodzaj
	 */
	public function ajax_daj_dokumenty_place($rodzaj, $numer_pracownika = null)
	{
		$this->layout = 'ajax';
		$ne = $this->Auth->user('cNumerEwidencyjny');
		$emails = $this->_adresy_email($ne, $rodzaj, $numer_pracownika);
		$documents = $this->_dokumenty_placowe($ne, $rodzaj, $numer_pracownika);

		$rjson = $this->_handle_response_json($documents);
		if (isset($rjson['login']) && !empty($rjson['login'])) {
			echo 'login';
			die();
		}

		$this->set(compact('documents', 'rodzaj', 'emails'));
	}

	/**
	 * @param $gidMsg
	 * @return string
	 */
	public function ajax_daj_wiadomosc($gidMsg)
	{
		$message = $this->Api->DajWiadomosc($this->_getGid(), $gidMsg);

		$rjson = $this->_handle_response_json($message);
		if (isset($rjson['login']) && !empty($rjson['login'])) {
			echo 'login';
			die();
		}

		$this->_set_message($message);
		return json_encode($message);
	}

	/**
	 * ajax_ukryj_wiadomosc method
	 * @param $wiadomosc_gid
	 */
	public function ajax_ukryj_wiadomosc($wiadomosc_gid)
	{
		$this->layout = 'ajax';
		$this->render(false);
		$response = $this->Api->UstawJakoUkryta($this->_getGid(), $wiadomosc_gid);

		$rjson = $this->_handle_response_json($response);
		if (isset($rjson['login']) && !empty($rjson['login'])) {
			echo 'login';
			die();
		}

		echo json_encode($response);
		die();
	}

	/**
	 * ajax_wiadomosci method
	 */
	public function ajax_wiadomosci()
	{
		$this->layout = 'ajax';
		if ($this->request->is('get')) {
			$q = $this->request->query;
		}
		$options = array(
			'dat:CzyUkryte' => $q['hidden']
		);

		$options['dat:Skrzynki'] = $q['type'];

		if ($q['prior'] != 'x') $options['dat:Priorytety'] = $q['prior'];

		$messages = $this->_daj_wiadomosci($options);

		$rjson = $this->_handle_response_json($messages);
		if (isset($rjson['login']) && !empty($rjson['login'])) {
			echo 'login';
			die();
		}

//        debug($messages);
//        die();
		$this->set(compact('messages'));
		$this->set('boxType', $q['type']);
	}

	/**
	 * @return string
	 */
	public function ajax_daj_adresy($zmetody = null)
	{
		$this->layout = 'ajax';
		$this->render = 'ajax_daj_adresy';

		$zmetody = $zmetody !== 'undefined' ? $zmetody : null;

		$options = array(
			'ZMetody' => $zmetody
		);

		$addresses = $this->Api->DajAdresy($this->_getGid(), $options);

		$rjson = $this->_handle_response_json($addresses);
		$this->set('resp', $rjson);

		if (isset($rjson['login']) && !empty($rjson['login'])) {
			echo 'login';
			die();
		}

		$addresses = $addresses['bAdresy']['bAdres'];
		/*
        foreach ($response as $key => &$r) {
            if (strpos($r['bNazwa'], $term) !== false || strpos($r['bEmail'], $term) !== false) {
                $r['label'] = $r['bNazwa'] . " (" . $r['bEmail'] . ")";
                $r['value'] = $r['bNazwa'];
            } else {
                unset($response[$key]);
            }
        }
        */
		$this->set('addresses', $addresses);
//        return json_encode($response);
	}

	/**
	 * Numery list kodów:
	 * 2 - komórki
	 * 5 - stanowiska
	 * 52 - płatnicy
	 * 53 - piony
	 * 54 - regiony
	 * 125 - miejsca
	 * 24 - charaktery pracy
	 */
	public function ajax_daj_liste_kodow()
	{
		$this->layout = 'ajax';
		if (isset($this->request->data['code'])) {
			$codes = $this->_daj_liste_kodow($this->request->data['code']);
		} else {
			$codes = $this->_daj_liste_kodow();
		}

		$rjson = $this->_handle_response_json($codes);
		if (isset($rjson['login']) && !empty($rjson['login'])) {
			echo 'login';
			die();
		}

		$codes['bKody'] = $this->_convert_list_response($codes['bKody'], 'bKod');
//        debug($codes);
		$this->set('codes', $codes);
	}

	/**
	 *
	 */
	public function ajax_daj_liste_pracownikow($all = null)
	{
		$this->layout = 'ajax';
		$workers = $this->Api->DajListePracownikow($this->_getGid(), ($all === 'yes' ? false : true));

		$rjson = $this->_handle_response_json($workers);
		if (isset($rjson['login']) && !empty($rjson['login'])) {
			echo 'login';
			die();
		}

		$workers = $this->_replace_empty_values($workers);

//        $workers['bPracownicy'] = $this->_convert_list_response($workers['bPracownicy'], 'bPracownik');

		if (isset($workers['bPracownicy']['bPracownik']['bNazwisko'])) {
			$worker = $workers['bPracownicy']['bPracownik'];
			$workers['bPracownicy']['bPracownik'] = array();
			$workers['bPracownicy']['bPracownik'][] = $worker;

		}

		$this->set('workers', $workers);
	}

	/**
	 * @param $gidMsg string
	 * @return string
	 */
	public function daj_wiadomosc_ajax($gidMsg)
	{
		$message = $this->_daj_wiadomosc($gidMsg);
		return json_encode($message);
	}

	/**
	 * akceptuj_wniosek method
	 * @param $gid
	 */
	public function akceptuj_wniosek($gid)
	{
		$this->layout = 'ajax';
		$this->render(false);

		$options = array(
			'gidWniosku' => $gid,
			'Notka' => $this->request->data('wniosek_notatka')
		);

		$response = $this->Api->ZaakceptujWniosek($this->_getGid(), $options);

		$rjson = $this->_handle_response_json($response);
		if (isset($rjson['login']) && !empty($rjson['login'])) {
			echo 'login';
			die();
		}

		echo json_encode($this->_handle_response_json($response));
		die();
	}

	/**
	 * odrzuc_wniosek method
	 * @param $gid
	 */
	public function odrzuc_wniosek($gid)
	{
		$this->layout = 'ajax';
		$this->render(false);

		$options = array(
			'gidWniosku' => $gid,
			'Notka' => $this->request->data('wniosek_notatka')
		);

		$response = $this->Api->OdrzucWniosek($this->_getGid(), $options);

		$rjson = $this->_handle_response_json($response);
		if (isset($rjson['login']) && !empty($rjson['login'])) {
			echo 'login';
			die();
		}

		echo json_encode($this->_handle_response_json($response));
		die();
	}

	public function akceptuj_odrzuc_wniosek($gid, $czyAdmin, $czyOdrzucony)
	{
		$this->layout = 'ajax';
		$this->render(false);

		if ($gid == 'post') {
			$gid = (array)$this->request->data('gid');
		} else {
			$gid = [$gid];
		}


		$options = array(
			'gidDokumentu' => $gid,
			'czyAdmin' => $czyAdmin,
			'czyOdrzucenie' => $czyOdrzucony

		);

		$accept = (isset($this->requset->query['tylko-akceptacja']));
		$response = $this->Api->ZaakceptujOdrzucWniosek($this->_getGid(), $options, $accept);
		$rjson = $this->_handle_response_json($response);
		if (isset($rjson['login']) && !empty($rjson['login'])) {
			echo 'login';
			die();
		}


		echo json_encode($this->_handle_response_json($response));
		die();
	}

	public function saldo_urlopu()
	{
		$this->layout = 'ajax';

//        $thisYear = new DateTime();
//        $thisYear = (int)$thisYear->format('Y');
//        $saldoOptions = array(
//            'dat:Lata' => array(),
//            'dat:NumerPracownika' => $this->Auth->user('cNumerEwidencyjny')
//        );
//
//        $startYear = (int)date('Y', strtotime($this->Auth->user('cDataPrzyjecia')));
//        for($i=$thisYear; $i>=$startYear; $i--) {
//            $saldoOptions['dat:Lata'][] = array('dat1:int' => $i);
//        }
//
//        $saldo = $this->Api->DajSaldoUrlopu($this->_getGid(), $saldoOptions);

		$saldo = $this->_saldo_urlopu_5();

		$resp = $this->_handle_response_json($saldo);
		$this->set(compact('resp'));

		$this->set(compact('saldo'));
	}

	/**
	 * @param string|int $numerEwidencyjny
	 * @return array
	 */
	private function _saldo_urlopu_5($numerEwidencyjny = null, $zmetody = null)
	{
		$thisYear = new DateTime();
		$thisYear = (int)$thisYear->format('Y');
		$saldoOptions = array(
			'dat:Lata' => array(),
			'dat:NumerPracownika' => $numerEwidencyjny != null ? $numerEwidencyjny : $this->Auth->user('cNumerEwidencyjny')
		);

		$startYear = $thisYear - 4;
		for ($i = $thisYear; $i >= $startYear; $i--) {
			$saldoOptions['dat:Lata'][] = array('dat1:int' => $i);
		}

		if ($zmetody) {
			$saldoOptions['ZMetody'] = $zmetody;
		}

		$saldo = $this->Api->DajSaldoUrlopu($this->_getGid(), $saldoOptions);

		if (!empty($saldo['bInformacjeOSaldach']['bInformacjaOSaldach'])) {
			if (!isset($saldo['bInformacjeOSaldach']['bInformacjaOSaldach'][0])) {
				$content = [$saldo['bInformacjeOSaldach']['bInformacjaOSaldach']];
			} else {
				$content = $saldo['bInformacjeOSaldach']['bInformacjaOSaldach'];
			}
			$dodatkowy = false;
			foreach ($content as $s) {
				if ($s['bUrlopDodatkowyDni'] > 0 || $s['bUrlopDodatkowyGodziny'] > 0) {
					$dodatkowy = true;
				}
			}
			$saldo['bDodatkowy'] = $dodatkowy;
		}

		return $saldo;
	}

	/**
	 * ajax_lista_wspolpracownikow method
	 */
	public function ajax_lista_wspolpracownikow()
	{
		$wspolpracownicy = $this->Api->DajListeWspolpracownikow($this->_getGid());

		$rjson = $this->_handle_response_json($wspolpracownicy);
		if (isset($rjson['login']) && !empty($rjson['login'])) {
			echo 'login';
			die();
		}

		echo json_encode(array('response' => 'ok', 'wspolpracownicy' => $wspolpracownicy));
		die();
	}

	/**
	 * pokaz_ocene method
	 *
	 * @param null|string $bGid
	 */
	public function pokaz_ocene($bGid = NULL)
	{
		if ($bGid == null) $this->redirect(Router::url('/ocena'));

		$ocena = $this->Api->DajOcene($this->_getGid(), $bGid);

		$rjson = $this->_handle_response_json($ocena);
		if (isset($rjson['login']) && !empty($rjson['login'])) {
			echo 'login';
			die();
		}

		$this->set(compact('ocena'));
	}

	/**
	 * dodaj_ocene method
	 *
	 * @param integere|null $employeeIdd
	 */
	public function dodaj_ocene($employeeIdd = null)
	{
		$this->layout = 'ajax';

		$codes = $this->Api->DajListeKodow($this->_getGid(), array('dat:Numer' => 94));
		$codeList = array();
		foreach ($codes['bKody']['bKod'] as $code) {
			$nrAndGid = array(
				'dat2:Gid' => $code['bGid'],
				'dat2:Numer' => $code['bNumer'],
				'dat2:Opis' => $code['bOpis'],
				'dat2:Symbol' => $code['bSymbol']
			);
			$codeList[$this->_array_2_string($nrAndGid)] = $code['bOpis'];
		}
		$this->set('codes', $codeList);

		if ($this->request->is(array('post', 'put'))) {
			$data = $this->request->data['pOcena'];
			$data['dat2:Kod'] = $this->_string_2_array($data['dat:Kod']['dat2:NumerIGid']);
			$data['dat:DataDo'] = $this->_date_for_request($data['dat:DataDo']);
			$data['dat:DataOd'] = $this->_date_for_request($data['dat:DataOd']);
//            $data['dat:Gid'] = $this->_getUserGid();
//            $data['dat:NumerEwidencyjny'] = $this->Auth->user('cNumerEwidencyjny');
			$data['dat:NumerEwidencyjny'] = $employeeIdd;

			if ($employeeIdd !== null) {
				$data['dat:NumerEwidencyjny'] = $employeeIdd;
			}

			$response = $this->Api->DodajOcene($this->_getGid(), $data);
			$this->set('response', $response);

			$rjson = $this->_handle_response_json($response);
			if (isset($rjson['login']) && !empty($rjson['login'])) {
				echo 'login';
				die();
			}

			echo json_encode($this->_handle_response_json($response));
			die();
			/*if($this->_handle_response($response))
            {
                if($employeeIdd !== null) {
                    return $this->redirect(Router::url('/pracownicy_kadry?a=daj_oceny'));
                }
            }*/
		}
	}

	public function edytuj_ocene($bGid = null)
	{
		$this->layout = 'ajax';

		if ($bGid == null) $this->redirect($this->referer());

		if ($this->request->is(array('post', 'put'))) {
			$data = $this->request->data['pOcena'];
			$data['dat2:Kod'] = $this->_string_2_array($data['dat:Kod']['dat2:NumerIGid']);
			$data['dat:DataDo'] = $this->_date_for_request($data['dat:DataDo']);
			$data['dat:DataOd'] = $this->_date_for_request($data['dat:DataOd']);
			$data['dat:DataNastepnej'] = $this->_date_for_request($data['dat:DataNastepnej']);
			$data['dat:Gid'] = $bGid;
			$response = $this->Api->EdytujOcene($this->_getGid(), $data);
			$this->set('response', $response);
//            if($this->_handle_response($response))
//            {
//                return $this->redirect(array('action' => 'ocena'));
//            }

			$rjson = $this->_handle_response_json($response);
			if (isset($rjson['login']) && !empty($rjson['login'])) {
				echo 'login';
				die();
			}

			echo json_encode($this->_handle_response_json($response));
			die();
		} else {
			$ocena = $this->Api->DajOcene($this->_getGid(), $bGid);
			$rjson = $this->_handle_response_json($ocena);
			if (isset($rjson['login']) && !empty($rjson['login'])) {
				echo 'login';
				die();
			}

			if (empty($this->request->data)) {
				$nrAndGid = array(
					'dat2:Gid' => $ocena['bOcena']['bKod']['cGid'],
					'dat2:Numer' => $ocena['bOcena']['bKod']['cNumer'],
					'dat2:Opis' => $ocena['bOcena']['bKod']['cOpis'],
					'dat2:Symbol' => $ocena['bOcena']['bKod']['cSymbol']
				);
				$this->request->data['pOcena']['dat:Kod']['dat2:NumerIGid'] = $this->_array_2_string($nrAndGid);
				$this->request->data['pOcena']['dat:DataOd'] = $ocena['bOcena']['bDataOd'];
				$this->request->data['pOcena']['dat:DataDo'] = $ocena['bOcena']['bDataDo'];
				$this->request->data['pOcena']['dat:DataNastepnej'] = $ocena['bOcena']['bDataNastepnej'];
				$this->request->data['pOcena']['dat:Gid'] = $ocena['bOcena']['bGid'];
				$this->request->data['pOcena']['dat:NumerEwidencyjny'] = $ocena['bOcena']['bNumerEwidencyjny'];
				$this->request->data['pOcena']['dat:Punktow1'] = (int)$ocena['bOcena']['bPunktow1'];
			}
			$this->set(compact('ocena'));
		}

		$codes = $this->Api->DajListeKodow($this->_getGid(), array('dat:Numer' => 94));
		$codeList = array();
		foreach ($codes['bKody']['bKod'] as $code) {
			$nrAndGid = array(
				'dat2:Gid' => $code['bGid'],
				'dat2:Numer' => $code['bNumer'],
				'dat2:Opis' => $code['bOpis'],
				'dat2:Symbol' => $code['bSymbol']
			);
			$codeList[$this->_array_2_string($nrAndGid)] = $code['bOpis'];
		}
		$this->set('codes', $codeList);
	}

	/**
	 * usun_ocene method
	 *
	 * @param string|null $bGid
	 */
	public function usun_ocene($bGid = null)
	{
		$this->render(false);
		$this->layout = 'ajax';

		if ($bGid == null) $this->redirect($this->referer());

		$response = $this->Api->UsunOcene($this->_getGid(), $bGid);

		$rjson = $this->_handle_response_json($response);
		if (isset($rjson['login']) && !empty($rjson['login'])) {
			echo 'login';
			die();
		}

		echo json_encode($this->_handle_response_json($response));
		die();
//        $this->redirect($this->referer());
	}

	public function kadry()
	{
		$this->layout = 'ajax';
	}

	public function bhp()
	{
		$this->layout = 'ajax';
	}

	public function zfs()
	{
		$this->layout = 'ajax';
	}


	public function home()
	{
		$this->layout = 'default';
	}

	/**
	 * importy method
	 */
	public function importy()
	{
		$this->layout = 'ajax';

		if ($this->request->is(array('post', 'put'))) {
			$this->render(false);

			$data = $this->request->data['tem:pImportuj'];

			$data['dat:Rodzaj'] = $data['dat:Nazwa'];

			for ($i = 0; $i <= 4; $i++) {
				if (isset($data['dat:Plik' . $i]) && !empty($data['dat:Plik' . $i])) {
					if (@!empty($data['dat:Plik' . $i]['tmp_name'])) {
						$data['dat:NazwaPliku' . $i] = $data['dat:Plik' . $i]['name'];
						$data['dat:Plik' . $i] = base64_encode(file_get_contents($data['dat:Plik' . $i]['tmp_name']));
						if ($data['dat:Zaznaczenie' . $i] === "1") {
							$data['dat:Zaznaczenie' . $i] = 'true';
						} else {
							$data['dat:Zaznaczenie' . $i] = 'false';
						}
					}
				} else {
					$data['dat:Zaznaczenie' . $i] = 'false';
				}
			}
			unset($data['dat:Nazwa']);
			ksort($data);

			$response = $this->Api->Importuj($this->_getGid(), $data);
			$rjson = $this->_handle_response_json($response);
			if (isset($rjson['login']) && !empty($rjson['login'])) {
				echo 'login';
				die();
			}

			$json = array();
			if ($response['Komunikaty']['Komunikat']['Rodzaj'] != 'Ok') {
				$json['error'] = $response['Komunikaty']['Komunikat']['Tytul'];
			} else {
				$json['message'] = $response['Komunikaty']['Komunikat']['Tytul'];
			}
			echo json_encode($json);
			return;
		}

		$mozliweImporty = $this->Api->DajMozliweImporty($this->_getGid());

		$rodzaje = array();
		$rodzaje['undefined'] = 'Wybierz';
		$tytul = isset($mozliweImporty['bTytul']) ? $mozliweImporty['bTytul'] : "Importuj";

		if (isset($mozliweImporty['bMozliweImporty']['bMozliwyImport'][0])) {
			foreach ($mozliweImporty['bMozliweImporty']['bMozliwyImport'] as $import) {
				$rodzaje[$import['bRodzaj']] = $import['bNazwa'];
			}
		} elseif (isset($mozliweImporty['bMozliweImporty']['bMozliwyImport'])) {
			$import = $mozliweImporty['bMozliweImporty']['bMozliwyImport'];
			$rodzaje[$import['bRodzaj']] = $import['bNazwa'];
		}

		$this->set(compact('mozliweImporty', 'rodzaje', 'tytul'));

		return;
	}

	/**
	 * importuj_formularz
	 * @param string $rodzaj
	 */
	public function importuj_formularz($rodzaj)
	{
		$this->layout = 'ajax';

		$mozliweImporty = $this->Api->DajMozliweImporty($this->_getGid());

		$rodzaje = array();
		$rodzaje['undefined'] = 'Wybierz';
		$tytul = isset($mozliweImporty['bTytul']) ? $mozliweImporty['bTytul'] : "Importuj";

		if (isset($mozliweImporty['bMozliweImporty']['bMozliwyImport'][0])) {
			foreach ($mozliweImporty['bMozliweImporty']['bMozliwyImport'] as $import) {
				$rodzaje[$import['bRodzaj']] = $import['bNazwa'];
			}
		} elseif (isset($mozliweImporty['bMozliweImporty']['bMozliwyImport'])) {
			$import = $mozliweImporty['bMozliweImporty']['bMozliwyImport'];
			$rodzaje[$import['bRodzaj']] = $import['bNazwa'];
			$mozliweImporty['bMozliweImporty']['bMozliwyImport'][0] = $mozliweImporty['bMozliweImporty']['bMozliwyImport'];
		}

		$this->set(compact('rodzaj', 'mozliweImporty', 'rodzaje', 'tytul'));
	}

	public function srvinfo()
	{
		$this->layout = 'ajax';
	}

	public function ajax_wnioski_zastepca()
	{
		$this->layout = 'ajax';

		$wnioski = $this->Api->DajListeWnioskowZWskazaniemNaZastepce($this->_getGid());

		$this->set(compact('wnioski'));
	}

	public function akceptuj_wniosek_zastepca($gid)
	{
		$this->layout = 'ajax';
		$this->render(false);

		$options = array(
			'gidWniosku' => $gid
		);

		$response = $this->Api->AkceptujZastepstwo($this->_getGid(), $options);

		$rjson = $this->_handle_response_json($response);
		if (isset($rjson['login']) && !empty($rjson['login'])) {
			echo 'login';
			die();
		}

		echo json_encode($rjson);
		$this->redirect('/js/zastepca.js');
		die();
	}

	public function odrzuc_wniosek_zastepca($gid)
	{
		$this->layout = 'ajax';
		$this->render(false);

		$options = array(
			'gidWniosku' => $gid
		);

		$response = $this->Api->OdrzucZastepstwo($this->_getGid(), $options);

		$rjson = $this->_handle_response_json($response);
		if (isset($rjson['login']) && !empty($rjson['login'])) {
			echo 'login';
			die();
		}

		echo json_encode($rjson);
		$this->redirect('/js/zastepca.js');
		die();
	}

	/**
	 * @param string $time
	 * @return float
	 */
	protected function _time_for_request($time = null)
	{
		$hour = 0;

		if (!empty($time)) {
			if (strpos($time, ":") !== false) {

				$vals = explode(":", $time);

				if (count($vals) >= 2) {
					$h = (int)$vals[0];
					$m = (int)$vals[1];

					$hour = $h + ($m * 1 / 100);
				}
			}
		}

		return round($hour, 2);
	}

	protected function _time_for_respons($time = null, $delimiter = '.')
	{
		$hour = "00:00";

		if (!empty($time)) {
			$vals = explode($delimiter, $time);

			if (count($vals) >= 2) {

				$h = $vals[0];
				$m = $vals[1];

				if (strlen($h) == 1) {
					$vals[0] = "0" . $h;
				}

				if (strlen($m) == 1) {
					$vals[1] = "0" . $m;
				}

				$hour = $vals[0] . ":" . $vals[1];
			}
		}

		return $hour;
	}

	public function ajax_saldo_urlopu($numer)
	{

		$this->layout = 'ajax';

		$this->view = 'saldo_urlopu';

		$saldo = $this->_saldo_urlopu_5($numer);

		$resp = $this->_handle_response_json($saldo);
		$this->set(compact('resp'));

		$this->set(compact('saldo'));
	}

	/**
	 * @return array|mixed
	 */
	protected function _appconfig()
	{
		$config = new IniReader(ROOT . DS . 'configuration' . DS);
		$appconfig = $config->read('appconfig');

		$this->set(compact('appconfig'));
		return $appconfig;
	}

	public function ajax_daj_karty_rcp($nrEwid)
	{
		$this->layout = 'ajax';

		if ($this->request->is(array('post'))) {

			$data = $this->request->data;

			$options = array();

			if (!empty($data['filtrOd'])) {
				$options['OkresOd'] = $data['filtrOd'] . 'T00:00:00';
			}

			if (!empty($data['filtrDo'])) {
				$options['OkresDo'] = $data['filtrDo'] . 'T23:59:59';
			}

			if ($nrEwid) {
				$options['Nrewid'] = $nrEwid;
			}

		} else {
			$options = array();
		}

		$resp = $this->Api->DajListeKartRCP($this->_getGid(), $options);

		if (isset($resp['bKartyRCP']['bElementListyKartRCP'][0])) {
			$items = $resp['bKartyRCP']['bElementListyKartRCP'];
		} elseif (isset($resp['bKartyRCP']['bElementListyKartRCP'])) {
			$items = [$resp['bKartyRCP']['bElementListyKartRCP']];
		} else {
			$items = [];
		}

		$rjson = $this->_handle_response_json($resp);

		if (isset($rjson['login']) && !empty($rjson['login'])) {
			echo 'login';
			die();
		}

		$this->set(compact('items'));
	}

	public function pobierz_czas()
	{
		$response = $this->Api->DajDateICzasWygasnieciaSesji($this->_getGid());

		if (!empty($response['bDataICzasWygasnieciaSesji']) && !empty($response['bDataNaSerwerze'])) {
			$t = strtotime($response['bDataICzasWygasnieciaSesji']);
			$n = strtotime($response['bDataNaSerwerze']);
			echo json_encode(['time' => round(($t - $n) / 60, 2), 'show' => $response['bCzyZegarWlaczony']]);
		} else {
			echo json_encode(['time' => '0', 'show' => 'false']);
		}

		die();
	}

	protected function mergeData($master, $arr, $allowKey = array(), $format = array())
	{
		foreach ($arr as $key => $val) {
			if ((is_array($master[$key]) && !empty($master[$key])) && (is_array($val) && !empty($val))) {
				$master[$key] = $this->mergeData($master[$key], $val);
			} else if (key_exists($key, $master)) {
				if (empty($allowKey)) {
					$master[$key] = $val;
				} else if (in_array($key, $allowKey)) {
					$master[$key] = $val;
				}
				if (key_exists($key, $format)) {
					switch ($format[$key]) {
						case 'AddTime':
							if ($val) {
								$master[$key] = $val . 'T00:00:00';
							}
							break;
						case 'CutMicroTime':
							if ($pos = strpos($val, ".")) {
								$master[$key] = substr($val, 0, $pos);
							}
							break;
						case 'Br':
							$master[$key] = str_replace("<br>", "\n", $val);
							break;
						case 'FormatTime':
							if ($pos = strpos($val, ":")) {
								$time = explode(":", $val);
								$time[0] = strlen($time[0]) == 1 ? '0' . $time[0] : $time[0];
								$time[1] = strlen($time[1]) == 1 ? '0' . $time[1] : $time[1];
								$master[$key] = $time[0] . ':' . $time[1];
							} else if (is_numeric($val)) {
								$time = strpos($val, ".") >= 1 ? explode(".", $val) : [$val, "0"];
								$time[0] = strlen($time[0]) == 1 ? '0' . $time[0] : $time[0];
								$time[1] = strlen($time[1]) == 1 ? '0' . $time[1] : $time[1];
								$master[$key] = $time[0] . ':' . $time[1];
							}
							break;
					}
				}
			}
		}

		return $master;
	}

	protected function _show_keys($arr)
	{
		$temp = array();
		foreach ($arr as $k => $v) {
			$temp[] = $k;
			if (is_array($arr[$k])) {
				$temp = array_merge($this->_show_keys($arr[$k]), $temp);
			}
		}

		return $temp;
	}

}

if (!function_exists('ddebug')) {
	/**
	 * ddebug method
	 * @param mixed $data
	 */
	function ddebug($data)
	{
		echo '<pre>';
		var_dump($data);
		echo '</pre>';
		die();
	}
}
