cc23856ad0a9b692fd9f200d8c31525d1b1128ed
[tine20] / tine20 / HumanResources / Config.php
1 <?php
2 /**
3  * @package     HumanResources
4  * @subpackage  Config
5  * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
6  * @author      Alexander Stintzing <a.stintzing@metaways.de>
7  * @copyright   Copyright (c) 2012-2017 Metaways Infosystems GmbH (http://www.metaways.de)
8  */
9
10 /**
11  * HumanResources config class
12  *
13  * @package     HumanResources
14  * @subpackage  Config
15  */
16 class HumanResources_Config extends Tinebase_Config_Abstract
17 {
18     /**
19      * FreeTime Type
20      * @var string
21      */
22     const FREETIME_TYPE = 'freetimeType';
23
24     /**
25      * Vacation Status
26      * @var string
27      */
28     const VACATION_STATUS = 'vacationStatus';
29
30     /**
31      * Sickness Status
32      * @var string
33      */
34     const SICKNESS_STATUS = 'sicknessStatus';
35     
36     /**
37      * Default Feast Calendar (used for tailoring datepicker)
38      * @var string
39      */
40     const DEFAULT_FEAST_CALENDAR = 'defaultFeastCalendar';
41     
42     /**
43      * Defines the date when vacation booked from last year can't be taken anymore
44      * 
45      * @var string
46      */
47     const VACATION_EXPIRES = 'vacationExpires';
48     
49     /**
50      * types for extra free times
51      * 
52      * @var string
53      */
54     const EXTRA_FREETIME_TYPE = 'extraFreetimeType';
55     
56     /**
57      * id of (filsystem) container for vacation templates
58      *
59      * @var string
60      */
61     const REPORT_TEMPLATES_CONTAINER_ID = 'reportTemplatesContainerId';
62     
63     /**
64      * (non-PHPdoc)
65      * @see tine20/Tinebase/Config/Definition::$_properties
66      */
67     protected static $_properties = array(
68         self::FREETIME_TYPE => array(
69             //_('Freetime Type')
70             'label'                 => 'Freetime Type',
71             //_('Possible free time definitions')
72             'description'           => 'Possible free time definitions',
73             'type'                  => 'keyFieldConfig',
74             'options'               => array('recordModel' => 'HumanResources_Model_FreeTimeType'),
75             'clientRegistryInclude' => TRUE,
76             'default'               => array(
77                 'records' => array(
78                     array('id' => 'SICKNESS',             'value' => 'Sickness',           'icon' => 'images/oxygen/16x16/actions/book.png',  'system' => TRUE),  //_('Sickness')
79                     array('id' => 'VACATION',             'value' => 'Vacation',           'icon' => 'images/oxygen/16x16/actions/book2.png', 'system' => TRUE),  //_('Vacation')
80                 ),
81                 'default' => 'VACATION'
82             )
83         ),
84         self::VACATION_STATUS => array(
85             //_('Vacation Status')
86             'label'                 => 'Vacation Status',
87             //_('Possible vacation status definitions')
88             'description'           => 'Possible vacation status definitions',
89             'type'                  => 'keyFieldConfig',
90             'options'               => array('recordModel' => 'HumanResources_Model_FreeTimeStatus'),
91             'clientRegistryInclude' => TRUE,
92             'default'               => array(
93                 'records' => array(
94                     array('id' => 'REQUESTED',  'value' => 'Requested',  'icon' => 'images/oxygen/16x16/actions/mail-mark-unread-new.png', 'system' => TRUE),  //_('Requested')
95                     array('id' => 'IN-PROCESS', 'value' => 'In process', 'icon' => 'images/oxygen/16x16/actions/view-refresh.png',         'system' => TRUE),  //_('In process')
96                     array('id' => 'ACCEPTED',   'value' => 'Accepted',   'icon' => 'images/oxygen/16x16/actions/ok.png', 'system' => TRUE),  //_('Accepted')
97                     array('id' => 'DECLINED',   'value' => 'Declined',   'icon' => 'images/oxygen/16x16/actions/dialog-cancel.png', 'system' => TRUE),  //_('Declined')
98
99                 ),
100                 'default' => 'REQUESTED'
101             )
102         ),
103         self::SICKNESS_STATUS => array(
104             //_('Sickness Status')
105             'label'                 => 'Sickness Status',
106             //_('Possible sickness status definitions')
107             'description'           => 'Possible sickness status definitions',
108             'type'                  => 'keyFieldConfig',
109             'options'               => array('recordModel' => 'HumanResources_Model_FreeTimeStatus'),
110             'clientRegistryInclude' => TRUE,
111             'default'               => array(
112                 'records' => array(
113                     array('id' => 'EXCUSED',   'value' => 'Excused',   'icon' => 'images/oxygen/16x16/actions/smiley.png', 'system' => TRUE),  //_('Excused')
114                     array('id' => 'UNEXCUSED', 'value' => 'Unexcused', 'icon' => 'images/oxygen/16x16/actions/tools-report-bug.png', 'system' => TRUE),  //_('Unexcused')
115
116                 ),
117                 'default' => 'EXCUSED'
118             )
119         ),
120         self::DEFAULT_FEAST_CALENDAR => array(
121             // _('Default Feast Calendar')
122             'label'                 => 'Default Feast Calendar',
123             // _('Here you can define the default feast calendar used to set feast days and other free days in datepicker')
124             'description'           => 'Here you can define the default feast calendar used to set feast days and other free days in datepicker',
125             'type'                  => 'container',
126             'clientRegistryInclude' => TRUE,
127             'setByAdminModule'      => TRUE,
128         ),
129         self::EXTRA_FREETIME_TYPE => array(
130             //_('Extra freetime type')
131             'label'                 => 'Extra freetime type',
132             //_('Possible extra free time definitions')
133             'description'           => 'Possible extra free time definitions',
134             'type'                  => 'keyFieldConfig',
135             'options'               => array('recordModel' => 'HumanResources_Model_ExtraFreeTimeType'),
136             'clientRegistryInclude' => TRUE,
137             'default'               => array(
138                 'records' => array(
139                     array('id' => 'PAYED',     'value' => 'Payed',     'icon' => NULL, 'system' => TRUE),  //_('Payed')
140                     array('id' => 'NOT_PAYED', 'value' => 'Not payed', 'icon' => NULL, 'system' => TRUE),  //_('Not payed')
141                 ),
142                 'default' => 'PAYED'
143             )
144         ),
145         self::VACATION_EXPIRES => array(
146             // _('Vacation expires')
147             'label'                 => 'Vacation expires',
148             // _('Here you can define the day, when the vacation days taken from last year expires, the format is MM-DD.')
149             'description'           => 'Here you can define the day, when the vacation days taken from last year expires, the format is MM-DD.',
150             'type'                  => 'string',
151             'clientRegistryInclude' => TRUE,
152             'setByAdminModule'      => TRUE,
153             'default' => '03-15'
154         ),
155         self::REPORT_TEMPLATES_CONTAINER_ID => array(
156         //_('Report Templates Node ID')
157             'label'                 => 'Report Templates Node ID',
158             'description'           => 'Report Templates Node ID',
159             'type'                  => Tinebase_Config_Abstract::TYPE_STRING,
160             'clientRegistryInclude' => FALSE,
161             'setByAdminModule'      => FALSE,
162             'setBySetupModule'      => FALSE,
163         ),
164     );
165
166     /**
167      * (non-PHPdoc)
168      * @see tine20/Tinebase/Config/Abstract::$_appName
169      */
170     protected $_appName = 'HumanResources';
171
172     /**
173      * holds the instance of the singleton
174      *
175      * @var Tinebase_Config
176      */
177     private static $_instance = NULL;
178
179     /**
180      * the constructor
181      *
182      * don't use the constructor. use the singleton
183      */
184     private function __construct() {
185     }
186
187     /**
188      * the constructor
189      *
190      * don't use the constructor. use the singleton
191      */
192     private function __clone() {
193     }
194
195     /**
196      * Returns instance of Tinebase_Config
197      *
198      * @return Tinebase_Config
199      */
200     public static function getInstance()
201     {
202         if (self::$_instance === NULL) {
203             self::$_instance = new self();
204         }
205
206         return self::$_instance;
207     }
208
209     /**
210      * (non-PHPdoc)
211      * @see tine20/Tinebase/Config/Abstract::getProperties()
212      */
213     public static function getProperties()
214     {
215         return self::$_properties;
216     }
217     
218     /**
219      * returns the date of vacation expiration for the given year 
220      * or for the current year, if no year is given or null, if no expiration is defined
221      * 
222      * @param string $year
223      * @return Tinebase_DateTime|NULL
224      */
225     public function getVacationExpirationDate($year)
226     {
227         if (! $year) {
228             $year = Tinebase_DateTime::now()->format('Y');
229         }
230         
231         $expires = self::getInstance()->get(self::VACATION_EXPIRES, 0);
232         
233         if ($expires != 0) {
234             $split = explode('-', $expires);
235             $date = Tinebase_DateTime::now();
236             $date->setDate($year, (int) $split[0], (int) $split[1]);
237         } else {
238             return null;
239         }
240     }
241 }