diff --git a/core-ext/app/config.sample.php b/core-ext/app/config.sample.php
index f91261af..b6c816c7 100644
--- a/core-ext/app/config.sample.php
+++ b/core-ext/app/config.sample.php
@@ -11,7 +11,7 @@ define('APP_DB', '_APP_DB_');
define('APP_USERNAME', '_APP_USERNAME_');
define('APP_PASSWORD', '_APP_PASSWORD_');
define('APP_HOST', '_APP_HOST_');
-define('APP_CON_STR', 'mysql://'.APP_USERNAME.':'.APP_PASSWORD.'@'.APP_HOST.'/'.APP_DB);
+define('APP_CON_STR', 'mysqli://'.APP_USERNAME.':'.APP_PASSWORD.'@'.APP_HOST.'/'.APP_DB);
//file upload
define('FILE_TYPES', 'jpg,png,jpeg');
diff --git a/core-ext/app/install/config.php b/core-ext/app/install/config.php
index 7da7057c..588c5d87 100644
--- a/core-ext/app/install/config.php
+++ b/core-ext/app/install/config.php
@@ -1,8 +1,8 @@
baseService = $baseService;
}
- public function addNotification($toEmployee, $message, $action, $type, $toUserId = null, $fromSystem = false){
+ public function addNotification($toEmployee, $message, $action, $type, $toUserId = null, $fromSystem = false, $sendEmail = false){
$userEmp = new User();
@@ -63,7 +63,12 @@ class NotificationManager{
$ok = $noti->Save();
if(!$ok){
error_log("Error adding notification: ".$noti->ErrorMsg());
- }
+ }else if($sendEmail){
+ $emailSender = BaseService::getInstance()->getEmailSender();
+ if(!empty($emailSender)){
+ $emailSender->sendEmailFromNotification($noti);
+ }
+ }
}
public function clearNotifications($userId){
@@ -127,4 +132,4 @@ class NotificationManager{
}
-}
\ No newline at end of file
+}
diff --git a/core-ext/common.cron.tasks.ext.php b/core-ext/common.cron.tasks.ext.php
index a5270543..b3d9bbc7 100644
--- a/core-ext/common.cron.tasks.ext.php
+++ b/core-ext/common.cron.tasks.ext.php
@@ -1,117 +1 @@
getSetting('Notifications: Send Document Expiry Emails') != '1'){
- LogManager::getInstance()->info("Notifications: Send Document Expiry Emails is set to No. Do not send emails");
- return;
- }
-
- //Get documents
-
- $dayList = array();
- $dayList[30] = 'expire_notification_month';
- $dayList[7] = 'expire_notification_week';
- $dayList[1] = 'expire_notification_day';
- $dayList[0] = 'expire_notification';
-
- foreach($dayList as $k => $v){
- $this->expiryDayNotification($k, $v);
- }
-
- $this->getExpireDocumentHTMLByEmployee();
- $this->sendEmployeeEmails($this->employeeEmails, "IceHrm Employee Document Expiry Reminder");
-
- }
-
- private function expiryDayNotification($day, $param){
- $date = date('Y-m-d', strtotime("+".$day." days"));
-
- $employeeDocument = new EmployeeDocument();
- $employeeDocuments = $employeeDocument->Find("valid_until IS NOT NULL and valid_until = ? and (expire_notification_last > ? or expire_notification_last = -1) and status = ?",
- array($date, $day, 'Active'));
-
- if(!$employeeDocuments){
- LogManager::getInstance()->error("Error :".$employeeDocument->ErrorMsg());
- return;
- }
-
- $query = "valid_until IS NOT NULL and valid_until = $date and
- (expire_notification_last > $day or expire_notification_last == -1)
- and status = 'Active';";
-
- LogManager::getInstance()->debug($query);
-
- foreach($employeeDocuments as $doc){
-
- LogManager::getInstance()->debug("Employee Doc :".print_r($doc, true));
-
- if(empty($doc->document)){
- continue;
- }
- $document = null;
- if(isset($this->documentCache[$doc->id])){
- $document = $this->documentCache[$doc->id];
- }else{
- $document = new Document();
- $document->Load("id = ?",array($doc->document));
- $this->documentCache[$document->id] = $document;
- }
-
- if($document->$param == "Yes"){
- if(!isset($this->notificationList[$doc->employee])){
- $this->notificationList[$doc->employee] = array();
- }
- $this->notificationList[$doc->employee][] = array($doc, $document, $day);
- }
-
- $doc->expire_notification_last = $day;
- $doc->Save();
-
- }
- }
-
- private function getExpireDocumentHTMLByEmployee(){
- $row = '
#_name_# - Expire in #_days_# day(s)
#_description_#
';
-
- foreach($this->notificationList as $key => $val){
- $employeeEmail = "";
-
- foreach($val as $list){
- $trow = $row;
- $doc = $list[0];
- $document = $list[1];
- $days = $list[2];
-
- $trow = str_replace("#_name_#",$document->name,$trow);
- $trow = str_replace("#_days_#",$days,$trow);
- $trow = str_replace("#_description_#",$doc->details,$trow);
-
- $employeeEmail.=$trow;
- }
-
- $employee = new Employee();
- $employee->Load("id = ?",array($key));
-
- if(empty($employee->id) || $employee->id != $key){
- LogManager::getInstance()->error("Could not load employee with id");
- return;
- }
-
- $emailBody = file_get_contents(APP_BASE_PATH.'/admin/documents/emailTemplates/documentExpireEmailTemplate.html');
- $emailBody = str_replace("#_employee_#",$employee->first_name,$emailBody);
- $emailBody = str_replace("#_documents_#",$employeeEmail,$emailBody);
-
- $this->employeeEmails[$employee->id] = $emailBody;
- }
- }
-
-
-
-}
\ No newline at end of file
diff --git a/core-ext/login.php b/core-ext/login.php
index 4108c87b..18925cff 100644
--- a/core-ext/login.php
+++ b/core-ext/login.php
@@ -74,29 +74,30 @@ if(!file_exists($logoFileName)){
-
-
-
-
-
+
+
+
diff --git a/core-ext/popups.php b/core-ext/popups.php
index 6c3e48ac..929dd35d 100644
--- a/core-ext/popups.php
+++ b/core-ext/popups.php
@@ -52,6 +52,41 @@
+
+
+
+
+
+
+
+
-
\ No newline at end of file
+
diff --git a/core-ext/scripts/icehrm_master_data.sql b/core-ext/scripts/icehrm_master_data.sql
index 41394dc9..c67118b2 100644
--- a/core-ext/scripts/icehrm_master_data.sql
+++ b/core-ext/scripts/icehrm_master_data.sql
@@ -1,3 +1,119 @@
+INSERT INTO `Timezones`(`id`, `name`, `details`) VALUES
+(1, 'Pacific/Midway', '(GMT-11:00) Midway Island'),
+(2, 'US/Samoa', '(GMT-11:00) Samoa'),
+(3, 'US/Hawaii', '(GMT-10:00) Hawaii'),
+(4, 'US/Alaska', '(GMT-09:00) Alaska'),
+(5, 'US/Pacific', '(GMT-08:00) Pacific Time (US, Canada)'),
+(6, 'America/Tijuana', '(GMT-08:00) Tijuana'),
+(7, 'US/Arizona', '(GMT-07:00) Arizona'),
+(8, 'US/Mountain', '(GMT-07:00) Mountain Time (US, Canada)'),
+(9, 'America/Chihuahua', '(GMT-07:00) Chihuahua'),
+(10, 'America/Mazatlan', '(GMT-07:00) Mazatlan'),
+(11, 'America/Mexico_City', '(GMT-06:00) Mexico City'),
+(12, 'America/Monterrey', '(GMT-06:00) Monterrey'),
+(13, 'Canada/Saskatchewan', '(GMT-06:00) Saskatchewan'),
+(14, 'US/Central', '(GMT-06:00) Central Time (US , Canada)'),
+(15, 'US/Eastern', '(GMT-05:00) Eastern Time (US , Canada)'),
+(16, 'US/East-Indiana', '(GMT-05:00) Indiana (East)'),
+(17, 'America/Bogota', '(GMT-05:00) Bogota'),
+(18, 'America/Lima', '(GMT-05:00) Lima'),
+(19, 'America/Caracas', '(GMT-04:30) Caracas'),
+(20, 'Canada/Atlantic', '(GMT-04:00) Atlantic Time (Canada)'),
+(21, 'America/La_Paz', '(GMT-04:00) La Paz'),
+(22, 'America/Santiago', '(GMT-04:00) Santiago'),
+(23, 'Canada/Newfoundland', '(GMT-03:30) Newfoundland'),
+(24, 'America/Buenos_Aires', '(GMT-03:00) Buenos Aires'),
+(25, 'Greenland', '(GMT-03:00) Greenland'),
+(26, 'Atlantic/Stanley', '(GMT-02:00) Stanley'),
+(27, 'Atlantic/Azores', '(GMT-01:00) Azores'),
+(28, 'Atlantic/Cape_Verde', '(GMT-01:00) Cape Verde Is.'),
+(29, 'Africa/Casablanca', '(GMT) Casablanca'),
+(30, 'Europe/Dublin', '(GMT) Dublin'),
+(31, 'Europe/Lisbon', '(GMT) Lisbon'),
+(32, 'Europe/London', '(GMT) London'),
+(33, 'Africa/Monrovia', '(GMT) Monrovia'),
+(34, 'Europe/Amsterdam', '(GMT+01:00) Amsterdam'),
+(35, 'Europe/Belgrade', '(GMT+01:00) Belgrade'),
+(36, 'Europe/Berlin', '(GMT+01:00) Berlin'),
+(37, 'Europe/Bratislava', '(GMT+01:00) Bratislava'),
+(38, 'Europe/Brussels', '(GMT+01:00) Brussels'),
+(39, 'Europe/Budapest', '(GMT+01:00) Budapest'),
+(40, 'Europe/Copenhagen', '(GMT+01:00) Copenhagen'),
+(41, 'Europe/Ljubljana', '(GMT+01:00) Ljubljana'),
+(42, 'Europe/Madrid', '(GMT+01:00) Madrid'),
+(43, 'Europe/Paris', '(GMT+01:00) Paris'),
+(44, 'Europe/Prague', '(GMT+01:00) Prague'),
+(45, 'Europe/Rome', '(GMT+01:00) Rome'),
+(46, 'Europe/Sarajevo', '(GMT+01:00) Sarajevo'),
+(47, 'Europe/Skopje', '(GMT+01:00) Skopje'),
+(48, 'Europe/Stockholm', '(GMT+01:00) Stockholm'),
+(49, 'Europe/Vienna', '(GMT+01:00) Vienna'),
+(50, 'Europe/Warsaw', '(GMT+01:00) Warsaw'),
+(51, 'Europe/Zagreb', '(GMT+01:00) Zagreb'),
+(52, 'Europe/Athens', '(GMT+02:00) Athens'),
+(53, 'Europe/Bucharest', '(GMT+02:00) Bucharest'),
+(54, 'Africa/Cairo', '(GMT+02:00) Cairo'),
+(55, 'Africa/Harare', '(GMT+02:00) Harare'),
+(56, 'Europe/Helsinki', '(GMT+02:00) Helsinki'),
+(57, 'Europe/Istanbul', '(GMT+02:00) Istanbul'),
+(58, 'Asia/Jerusalem', '(GMT+02:00) Jerusalem'),
+(59, 'Europe/Kiev', '(GMT+02:00) Kyiv'),
+(60, 'Europe/Minsk', '(GMT+02:00) Minsk'),
+(61, 'Europe/Riga', '(GMT+02:00) Riga'),
+(62, 'Europe/Sofia', '(GMT+02:00) Sofia'),
+(63, 'Europe/Tallinn', '(GMT+02:00) Tallinn'),
+(64, 'Europe/Vilnius', '(GMT+02:00) Vilnius'),
+(65, 'Asia/Baghdad', '(GMT+03:00) Baghdad'),
+(66, 'Asia/Kuwait', '(GMT+03:00) Kuwait'),
+(67, 'Africa/Nairobi', '(GMT+03:00) Nairobi'),
+(68, 'Asia/Riyadh', '(GMT+03:00) Riyadh'),
+(69, 'Europe/Moscow', '(GMT+03:00) Moscow'),
+(70, 'Asia/Tehran', '(GMT+03:30) Tehran'),
+(71, 'Asia/Baku', '(GMT+04:00) Baku'),
+(72, 'Europe/Volgograd', '(GMT+04:00) Volgograd'),
+(73, 'Asia/Muscat', '(GMT+04:00) Muscat'),
+(74, 'Asia/Tbilisi', '(GMT+04:00) Tbilisi'),
+(75, 'Asia/Yerevan', '(GMT+04:00) Yerevan'),
+(76, 'Asia/Kabul', '(GMT+04:30) Kabul'),
+(77, 'Asia/Karachi', '(GMT+05:00) Karachi'),
+(78, 'Asia/Tashkent', '(GMT+05:00) Tashkent'),
+(79, 'Asia/Kolkata', '(GMT+05:30) Kolkata'),
+(80, 'Asia/Kathmandu', '(GMT+05:45) Kathmandu'),
+(81, 'Asia/Yekaterinburg', '(GMT+06:00) Ekaterinburg'),
+(82, 'Asia/Almaty', '(GMT+06:00) Almaty'),
+(83, 'Asia/Dhaka', '(GMT+06:00) Dhaka'),
+(84, 'Asia/Novosibirsk', '(GMT+07:00) Novosibirsk'),
+(85, 'Asia/Bangkok', '(GMT+07:00) Bangkok'),
+(86, 'Asia/Jakarta', '(GMT+07:00) Jakarta'),
+(87, 'Asia/Krasnoyarsk', '(GMT+08:00) Krasnoyarsk'),
+(88, 'Asia/Chongqing', '(GMT+08:00) Chongqing'),
+(89, 'Asia/Hong_Kong', '(GMT+08:00) Hong Kong'),
+(90, 'Asia/Kuala_Lumpur', '(GMT+08:00) Kuala Lumpur'),
+(91, 'Australia/Perth', '(GMT+08:00) Perth'),
+(92, 'Asia/Singapore', '(GMT+08:00) Singapore'),
+(93, 'Asia/Taipei', '(GMT+08:00) Taipei'),
+(94, 'Asia/Ulaanbaatar', '(GMT+08:00) Ulaan Bataar'),
+(95, 'Asia/Urumqi', '(GMT+08:00) Urumqi'),
+(96, 'Asia/Irkutsk', '(GMT+09:00) Irkutsk'),
+(97, 'Asia/Seoul', '(GMT+09:00) Seoul'),
+(98, 'Asia/Tokyo', '(GMT+09:00) Tokyo'),
+(99, 'Australia/Adelaide', '(GMT+09:30) Adelaide'),
+(100, 'Australia/Darwin', '(GMT+09:30) Darwin'),
+(101, 'Asia/Yakutsk', '(GMT+10:00) Yakutsk'),
+(102, 'Australia/Brisbane', '(GMT+10:00) Brisbane'),
+(103, 'Australia/Canberra', '(GMT+10:00) Canberra'),
+(104, 'Pacific/Guam', '(GMT+10:00) Guam'),
+(105, 'Australia/Hobart', '(GMT+10:00) Hobart'),
+(106, 'Australia/Melbourne', '(GMT+10:00) Melbourne'),
+(107, 'Pacific/Port_Moresby', '(GMT+10:00) Port Moresby'),
+(108, 'Australia/Sydney', '(GMT+10:00) Sydney'),
+(109, 'Asia/Vladivostok', '(GMT+11:00) Vladivostok'),
+(110, 'Asia/Magadan', '(GMT+12:00) Magadan'),
+(111, 'Pacific/Auckland', '(GMT+12:00) Auckland'),
+(112, 'Pacific/Fiji', '(GMT+12:00) Fiji');
+
+
+
INSERT INTO `CurrencyTypes`(`id`, `code`, `name`) VALUES
(3, 'AED', 'Utd. Arab Emir. Dirham'),
(4, 'AFN', 'Afghanistan Afghani'),
@@ -400,8 +516,8 @@ INSERT INTO `Country`(`code`, `namecap`, `name`, `iso3`, `numcode`) VALUES
('YE', 'YEMEN', 'Yemen', 'YEM', 887),
('ZM', 'ZAMBIA', 'Zambia', 'ZMB', 894),
('ZW', 'ZIMBABWE', 'Zimbabwe', 'ZWE', 716);
-
-INSERT INTO `Province`(`id`, `name`, `code`, `country`) VALUES
+
+INSERT INTO `Province`(`id`, `name`, `code`, `country`) VALUES
(1, 'Alaska', 'AK', 'US'),
(2, 'Alabama', 'AL', 'US'),
(3, 'American Samoa', 'AS', 'US'),
@@ -467,9 +583,9 @@ INSERT INTO `Province`(`id`, `name`, `code`, `country`) VALUES
(63, 'Armed Forces Europe', 'AE', 'US'),
(64, 'Armed Forces Middle East', 'AE', 'US'),
(65, 'Armed Forces Pacific', 'AP', 'US');
-
-
-
+
+
+
INSERT INTO `Nationality` (`id`, `name`) VALUES
(1, 'Afghan'),
(2, 'Albanian'),
@@ -673,10 +789,17 @@ INSERT INTO `Reports` (`id`, `name`, `details`, `parameters`, `query`, `paramOrd
(4, 'Employee Attendance Report', 'This report list all employee attendance entries by employee and date range', '[\r\n[ "employee", {"label":"Employee","type":"select2multi","allow-null":true,"null-label":"All Employees","remote-source":["Employee","id","first_name+last_name"]}],\r\n[ "date_start", {"label":"Start Date","type":"date"}],\r\n[ "date_end", {"label":"End Date","type":"date"}]\r\n]', 'EmployeeAttendanceReport', '["employee","date_start","date_end"]', 'Class'),
(5, 'Employee Time Tracking Report', 'This report list employee working hours and attendance details for each day for a given period ', '[\r\n[ "employee", {"label":"Employee","type":"select2","allow-null":false,"remote-source":["Employee","id","first_name+last_name"]}],\r\n[ "date_start", {"label":"Start Date","type":"date"}],\r\n[ "date_end", {"label":"End Date","type":"date"}]\r\n]', 'EmployeeTimeTrackReport', '["employee","date_start","date_end"]', 'Class');
+REPLACE INTO `Reports` (`name`, `details`, `parameters`, `query`, `paramOrder`, `type`) VALUES
+ ('Expense Report', 'This report list employees expenses for a specified period',
+ '[\r\n[ "employee", {"label":"Employee","type":"select2multi","allow-null":true,"null-label":"All Employees","remote-source":["Employee","id","first_name+last_name"]}],\r\n[ "date_start", {"label":"Start Date","type":"date"}],\r\n[ "date_end", {"label":"End Date","type":"date"}],\r\n[ "status", {"label":"Status","type":"select","source":[["NULL","All Statuses"],["Approved","Approved"],["Pending","Pending"],["Rejected","Rejected"],["Cancellation Requested","Cancellation Requested"],["Cancelled","Cancelled"]]}]\r\n]',
+ 'ExpenseReport',
+ '["employee","date_start","date_end","status"]', 'Class');
INSERT INTO `Settings` (`name`, `value`, `description`, `meta`) VALUES
+('Company: Logo', '', '','[ "value", {"label":"Logo","type":"fileupload","validation":"none"}]'),
('Company: Name', 'Sample Company Pvt Ltd', 'Update your company name - For updating company logo copy a file named logo.png to /app/data/ folder', ''),
+('Company: Description', 'This is a company using icehrm.com', '',''),
('Email: Enable', '1', '0 will disable all outgoing emails from modules. Value 1 will enable outgoing emails','["value", {"label":"Value","type":"select","source":[["1","Yes"],["0","No"]]}]'),
('Email: Mode', 'SMTP', 'SMTP, PHP Mailer or Amazon SES. SMTP = send emails using local or a remote smtp server. PHP Mailer = send emails using mail function provided by php. Amazon SES = send emails trough amazon Simple Email Service.','["value", {"label":"Value","type":"select","source":[["SMTP","SMTP"],["PHP Mailer","PHP Mailer"],["SES","Amazon SES"]]}]'),
('Email: SMTP Host', 'localhost', 'SMTP host IP',''),
@@ -696,6 +819,17 @@ INSERT INTO `Settings` (`name`, `value`, `description`, `meta`) VALUES
('Api: REST Api Enabled', '0', '','["value", {"label":"Value","type":"select","source":[["0","No"],["1","Yes"]]}]');
+INSERT INTO `Settings` (`name`, `value`, `description`, `meta`) VALUES
+ ('Notifications: Send Document Expiry Emails', '1', '','["value", {"label":"Value","type":"select","source":[["1","Yes"],["0","No"]]}]'),
+ ('Notifications: Copy Document Expiry Emails to Manager', '1', '','["value", {"label":"Value","type":"select","source":[["1","Yes"],["0","No"]]}]'),
+ ('Expense: Pre-Approve Expenses', '0', '','["value", {"label":"Value","type":"select","source":[["1","Yes"],["0","No"]]}]'),
+ ('Travel: Pre-Approve Travel Request', '0', '','["value", {"label":"Value","type":"select","source":[["1","Yes"],["0","No"]]}]');
+
+INSERT INTO `Settings` (`name`, `value`, `description`, `meta`) VALUES
+ ('Attendance: Use Department Time Zone', '0', '','["value", {"label":"Value","type":"select","source":[["1","Yes"],["0","No"]]}]');
+
+
+
INSERT INTO `Certifications` (`id`, `name`, `description`) VALUES
(1, 'Red Hat Certified Architect (RHCA)', 'Red Hat Certified Architect (RHCA)'),
(2, 'GIAC Secure Software Programmer -Java', 'GIAC Secure Software Programmer -Java'),
@@ -738,11 +872,6 @@ INSERT INTO `CompanyStructures` (`id`, `title`, `description`, `address`, `type`
(3, 'Marketing Department', 'Marketing Department', 'PO Box 001002\nSample Road, Sample Town', 'Department', 'US', 2);
-INSERT INTO `Documents` (`id`, `name`, `details`) VALUES
-(1, 'ID Copy', 'Your ID copy'),
-(2, 'Degree Ceritficate', 'Degree Ceritficate'),
-(3, 'Driving License', 'Driving License');
-
INSERT INTO `Educations` (`id`, `name`, `description`) VALUES
(1, 'Bachelors Degree', 'Bachelors Degree'),
@@ -876,6 +1005,33 @@ INSERT INTO `SalaryComponentType` (`id`,`code`, `name`) VALUES
(2,'B002', 'Allowance');
-INSERT INTO `SalaryComponent` VALUES
-(1,'Basic Salary', 1,''),(2,'Fixed Allowance', 1,''),(3,'Car Allowance', 2,''),(4,'Telephone Allowance', 2,'');
+INSERT INTO `SalaryComponent` (`id`,`name`, `componentType`) VALUES
+ (1,'Basic Salary', 1),
+ (2,'Fixed Allowance', 1),
+ (3,'Car Allowance', 2),
+ (4,'Telephone Allowance', 2);
+INSERT INTO `ExpensesPaymentMethods` (`name`) VALUES
+ ('Cash'),
+ ('Check'),
+ ('Credit Card'),
+ ('Debit Card');
+
+INSERT INTO `ExpensesCategories` (`name`) VALUES
+('Auto - Gas'),
+('Auto - Insurance'),
+('Auto - Maintenance'),
+('Auto - Payment'),
+('Transportation'),
+('Bank Fees'),
+('Dining Out'),
+('Entertainment'),
+('Hotel / Motel'),
+('Insurance'),
+('Interest Charges'),
+('Loan Payment'),
+('Medical'),
+('Mileage'),
+('Rent'),
+('Rental Car'),
+('Utility');
diff --git a/core-ext/scripts/icehrm_sample_data.sql b/core-ext/scripts/icehrm_sample_data.sql
index 14f287e7..55df57fe 100644
--- a/core-ext/scripts/icehrm_sample_data.sql
+++ b/core-ext/scripts/icehrm_sample_data.sql
@@ -36,8 +36,7 @@ INSERT INTO `EmployeeDependents` (`id`, `employee`, `name`, `relationship`, `dob
(2, 1, 'Mica Singroo', 'Other', '2000-06-13', '');
-INSERT INTO `EmployeeDocuments` (`id`, `employee`, `document`, `date_added`, `valid_until`, `status`, `details`) VALUES
-(1, 2, 2, '2013-01-08', '0000-00-00', 'Active', 'zxczx');
+
INSERT INTO `EmployeeEducations` (`id`, `education_id`, `employee`, `institute`, `date_start`, `date_end`) VALUES
@@ -59,9 +58,9 @@ INSERT INTO `EmployeeProjects` (`id`, `employee`, `project`, `date_start`, `date
INSERT INTO `EmployeeSalary` (`id`, `employee`, `component`, `pay_frequency`, `currency`, `amount`, `details`) VALUES
-(1, 1, 'Basic', 'Monthly', 131, '2700.00', ''),
-(2, 2, 'Basic Salary', 'Monthly', 151, '12000.00', ''),
-(3, 2, 'Travelling Allowance', 'Monthly', 131, '5000.00', '');
+(1, 1, 1, 'Monthly', 131, '2700.00', ''),
+(2, 2, 2, 'Monthly', 151, '12000.00', ''),
+(3, 2, 3, 'Monthly', 131, '5000.00', '');
INSERT INTO `EmployeeSkills` (`id`, `skill_id`, `employee`, `details`) VALUES
diff --git a/core-ext/scripts/icehrmdb.sql b/core-ext/scripts/icehrmdb.sql
index 56c46e77..65d8bbf6 100644
--- a/core-ext/scripts/icehrmdb.sql
+++ b/core-ext/scripts/icehrmdb.sql
@@ -6,6 +6,7 @@ create table `CompanyStructures` (
`type` enum('Company','Head Office','Regional Office','Department','Unit','Sub Unit','Other') default NULL,
`country` varchar(2) not null default '0',
`parent` bigint(20) NULL,
+ `timezone` varchar(100) not null default 'Europe/London',
CONSTRAINT `Fk_CompanyStructures_Own` FOREIGN KEY (`parent`) REFERENCES `CompanyStructures` (`id`),
primary key (`id`)
) engine=innodb default charset=utf8;
@@ -157,7 +158,7 @@ create table `Employees` (
CONSTRAINT `Fk_Employee_PayGrades` FOREIGN KEY (`pay_grade`) REFERENCES `PayGrades` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
primary key (`id`),
unique key `employee_id` (`employee_id`)
-
+
) engine=innodb default charset=utf8;
create table `ArchivedEmployees` (
@@ -179,7 +180,7 @@ create table `ArchivedEmployees` (
`notes` text default null,
`data` longtext default null,
primary key (`id`)
-
+
) engine=innodb default charset=utf8;
create table `UserRoles` (
@@ -364,26 +365,7 @@ create table `EmployeeTimeEntry` (
primary key (`id`)
) engine=innodb default charset=utf8;
-create table `Documents` (
- `id` bigint(20) NOT NULL AUTO_INCREMENT,
- `name` varchar(100) NOT NULL,
- `details` text default null,
- primary key (`id`)
-) engine=innodb default charset=utf8;
-create table `EmployeeDocuments` (
- `id` bigint(20) NOT NULL AUTO_INCREMENT,
- `employee` bigint(20) NOT NULL,
- `document` bigint(20) NULL,
- `date_added` date NOT NULL,
- `valid_until` date NOT NULL,
- `status` enum('Active','Inactive','Draft') default 'Active',
- `details` text default null,
- `attachment` varchar(100) NULL,
- CONSTRAINT `Fk_EmployeeDocuments_Documents` FOREIGN KEY (`document`) REFERENCES `Documents` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
- CONSTRAINT `Fk_EmployeeDocuments_Employee` FOREIGN KEY (`employee`) REFERENCES `Employees` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
- primary key (`id`)
-) engine=innodb default charset=utf8;
create table `CompanyLoans` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
@@ -513,54 +495,6 @@ create table `Notifications` (
KEY `toUser_status_time` (`toUser`,`status`,`time`)
) engine=innodb default charset=utf8;
-create table `Courses` (
- `id` bigint(20) NOT NULL AUTO_INCREMENT,
- `code` varchar(300) NOT NULL,
- `name` varchar(300) NOT NULL,
- `description` text default null,
- `coordinator` bigint(20) NULL,
- `trainer` varchar(300) NULL,
- `trainer_info` text default null,
- `paymentType` enum('Company Sponsored','Paid by Employee') default 'Company Sponsored',
- `currency` varchar(3) not null,
- `cost` decimal(12,2) DEFAULT 0.00,
- `status` enum('Active','Inactive') default 'Active',
- `created` datetime default '0000-00-00 00:00:00',
- `updated` datetime default '0000-00-00 00:00:00',
- CONSTRAINT `Fk_Courses_Employees` FOREIGN KEY (`coordinator`) REFERENCES `Employees` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
- primary key (`id`)
-) engine=innodb default charset=utf8;
-
-create table `TrainingSessions` (
- `id` bigint(20) NOT NULL AUTO_INCREMENT,
- `name` varchar(300) NOT NULL,
- `course` bigint(20) NOT NULL,
- `description` text default null,
- `scheduled` datetime default '0000-00-00 00:00:00',
- `dueDate` datetime default '0000-00-00 00:00:00',
- `deliveryMethod` enum('Classroom','Self Study','Online') default 'Classroom',
- `deliveryLocation` varchar(500) NULL,
- `status` enum('Pending','Approved','Completed','Cancelled') default 'Pending',
- `attendanceType` enum('Sign Up','Assign') default 'Sign Up',
- `attachment` varchar(300) NULL,
- `created` datetime default '0000-00-00 00:00:00',
- `updated` datetime default '0000-00-00 00:00:00',
- CONSTRAINT `Fk_TrainingSessions_Courses` FOREIGN KEY (`course`) REFERENCES `Courses` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
- primary key (`id`)
-) engine=innodb default charset=utf8;
-
-
-create table `EmployeeTrainingSessions` (
- `id` bigint(20) NOT NULL AUTO_INCREMENT,
- `employee` bigint(20) NOT NULL,
- `trainingSession` bigint(20) NULL,
- `feedBack` varchar(1500) NULL,
- `status` enum('Scheduled','Attended','Not-Attended') default 'Scheduled',
- CONSTRAINT `Fk_EmployeeTrainingSessions_TrainingSessions` FOREIGN KEY (`trainingSession`) REFERENCES `TrainingSessions` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
- CONSTRAINT `Fk_EmployeeTrainingSessions_Employee` FOREIGN KEY (`employee`) REFERENCES `Employees` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
- primary key (`id`)
-) engine=innodb default charset=utf8;
-
create table `ImmigrationDocuments` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
@@ -604,11 +538,14 @@ create table `EmployeeTravelRecords` (
`travel_date` datetime NULL default '0000-00-00 00:00:00',
`return_date` datetime NULL default '0000-00-00 00:00:00',
`details` varchar(500) default null,
+ `funding` decimal(10,3) NULL,
+ `currency` bigint(20) NULL,
`attachment1` varchar(100) NULL,
`attachment2` varchar(100) NULL,
`attachment3` varchar(100) NULL,
`created` timestamp NULL default '0000-00-00 00:00:00',
`updated` timestamp NULL default '0000-00-00 00:00:00',
+ `status` enum('Approved','Pending','Rejected','Cancellation Requested','Cancelled') default 'Pending',
CONSTRAINT `Fk_EmployeeTravelRecords_Employee` FOREIGN KEY (`employee`) REFERENCES `Employees` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
primary key (`id`)
) engine=innodb default charset=utf8;
@@ -773,3 +710,69 @@ create table `DeductionRules` (
+create table `Emails` (
+ `id` bigint(20) NOT NULL AUTO_INCREMENT,
+ `subject` varchar(300) NOT NULL,
+ `toEmail` varchar(300) NOT NULL,
+ `template` text NULL,
+ `params` text NULL,
+ `cclist` varchar(500) NULL,
+ `bcclist` varchar(500) NULL,
+ `error` varchar(500) NULL,
+ `created` DATETIME default '0000-00-00 00:00:00',
+ `updated` DATETIME default '0000-00-00 00:00:00',
+ `status` enum('Pending','Sent','Error') default 'Pending',
+ primary key (`id`),
+ key `KEY_Emails_status` (`status`),
+ key `KEY_Emails_created` (`created`)
+) engine=innodb default charset=utf8;
+
+
+create table `ExpensesCategories` (
+ `id` bigint(20) NOT NULL AUTO_INCREMENT,
+ `name` varchar(500) NOT NULL,
+ `created` timestamp NULL default '0000-00-00 00:00:00',
+ `updated` timestamp NULL default '0000-00-00 00:00:00',
+ `pre_approve` enum('Yes','No') default 'Yes',
+ primary key (`id`)
+) engine=innodb default charset=utf8;
+
+create table `ExpensesPaymentMethods` (
+ `id` bigint(20) NOT NULL AUTO_INCREMENT,
+ `name` varchar(500) NOT NULL,
+ `created` timestamp NULL default '0000-00-00 00:00:00',
+ `updated` timestamp NULL default '0000-00-00 00:00:00',
+ primary key (`id`)
+) engine=innodb default charset=utf8;
+
+
+create table `EmployeeExpenses` (
+ `id` bigint(20) NOT NULL AUTO_INCREMENT,
+ `employee` bigint(20) NOT NULL,
+ `expense_date` date NULL default '0000-00-00',
+ `payment_method` bigint(20) NOT NULL,
+ `transaction_no` varchar(300) NOT NULL,
+ `payee` varchar(500) NOT NULL,
+ `category` bigint(20) NOT NULL,
+ `notes` text,
+ `amount` decimal(10,3) NULL,
+ `currency` bigint(20) NULL,
+ `attachment1` varchar(100) NULL,
+ `attachment2` varchar(100) NULL,
+ `attachment3` varchar(100) NULL,
+ `created` timestamp NULL default '0000-00-00 00:00:00',
+ `updated` timestamp NULL default '0000-00-00 00:00:00',
+ `status` enum('Approved','Pending','Rejected','Cancellation Requested','Cancelled') default 'Pending',
+ CONSTRAINT `Fk_EmployeeExpenses_Employee` FOREIGN KEY (`employee`) REFERENCES `Employees` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
+ CONSTRAINT `Fk_EmployeeExpenses_pm` FOREIGN KEY (`payment_method`) REFERENCES `ExpensesPaymentMethods` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
+ CONSTRAINT `Fk_EmployeeExpenses_category` FOREIGN KEY (`category`) REFERENCES `ExpensesCategories` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
+ primary key (`id`)
+) engine=innodb default charset=utf8;
+
+
+create table `Timezones` (
+ `id` bigint(20) NOT NULL AUTO_INCREMENT,
+ `name` varchar(100) not null default '',
+ `details` varchar(255) not null default '',
+ primary key (`id`)
+) engine=innodb default charset=utf8;
diff --git a/ext/admin/attendance/api/AttendanceAdminManager.php b/ext/admin/attendance/api/AttendanceAdminManager.php
index 2ff20ff2..b4957b87 100644
--- a/ext/admin/attendance/api/AttendanceAdminManager.php
+++ b/ext/admin/attendance/api/AttendanceAdminManager.php
@@ -1,50 +1,50 @@
addModelClass('Attendance');
- }
-
- }
+
+ class AttendanceAdminManager extends AbstractModuleManager{
+
+ public function initializeUserClasses(){
+
+ }
+
+ public function initializeFieldMappings(){
+
+ }
+
+ public function initializeDatabaseErrorMappings(){
+
+ }
+
+ public function setupModuleClassDefinitions(){
+ $this->addModelClass('Attendance');
+ }
+
+ }
}
//Model Classes
if (!class_exists('Attendance')) {
- class Attendance extends ICEHRM_Record {
- var $_table = 'Attendance';
+ class Attendance extends ICEHRM_Record {
+ var $_table = 'Attendance';
- public function getAdminAccess(){
- return array("get","element","save","delete");
- }
+ public function getAdminAccess(){
+ return array("get","element","save","delete");
+ }
- public function getManagerAccess(){
- return array("get","element","save","delete");
- }
+ public function getManagerAccess(){
+ return array("get","element","save","delete");
+ }
- public function getUserAccess(){
- return array("get");
- }
+ public function getUserAccess(){
+ return array("get");
+ }
- public function getUserOnlyMeAccess(){
- return array("element","save","delete");
- }
- }
+ public function getUserOnlyMeAccess(){
+ return array("element","save","delete");
+ }
+ }
}
diff --git a/ext/admin/attendance/lib.js b/ext/admin/attendance/lib.js
index 5fc641b7..efc35697 100644
--- a/ext/admin/attendance/lib.js
+++ b/ext/admin/attendance/lib.js
@@ -158,6 +158,13 @@ AttendanceAdapter.method('saveFailCallback', function(callBackData) {
this.showMessage("Error saving attendance entry", callBackData);
});
+AttendanceAdapter.method('isSubProfileTable', function() {
+ if(this.user.user_level == "Admin"){
+ return false;
+ }else{
+ return true;
+ }
+});
/*
@@ -215,4 +222,13 @@ AttendanceStatusAdapter.method('getActionButtonsHtml', function(id,data) {
html = html.replace(/_COLOR_/g,'green');
}
return html;
+});
+
+
+AttendanceStatusAdapter.method('isSubProfileTable', function() {
+ if(this.user.user_level == "Admin"){
+ return false;
+ }else{
+ return true;
+ }
});
\ No newline at end of file
diff --git a/ext/admin/attendance/meta.json b/ext/admin/attendance/meta.json
index c41a9c98..aee8d48a 100644
--- a/ext/admin/attendance/meta.json
+++ b/ext/admin/attendance/meta.json
@@ -3,7 +3,7 @@
"menu":"Employees",
"order":"8",
"icon":"fa-clock-o",
-"user_levels":["Admin"],
+"user_levels":["Admin","Manager"],
"permissions":
{}
diff --git a/ext/admin/company_structure/api/Company_structureAdminManager.php b/ext/admin/company_structure/api/Company_structureAdminManager.php
index 5a1aba9b..49ca0744 100644
--- a/ext/admin/company_structure/api/Company_structureAdminManager.php
+++ b/ext/admin/company_structure/api/Company_structureAdminManager.php
@@ -49,4 +49,24 @@ if (!class_exists('CompanyStructure')) {
return new IceResponse(IceResponse::SUCCESS,"");
}
}
+}
+
+
+if (!class_exists('Timezone')) {
+ class Timezone extends ICEHRM_Record {
+ var $_table = 'Timezones';
+
+ public function getAdminAccess(){
+ return array("get","element","save","delete");
+ }
+
+ public function getManagerAccess(){
+ return array("get","element","save","delete");
+ }
+
+ public function getUserAccess(){
+ return array("get","element");
+ }
+
+ }
}
\ No newline at end of file
diff --git a/ext/admin/company_structure/lib.js b/ext/admin/company_structure/lib.js
index 7c0330f2..03a067f8 100644
--- a/ext/admin/company_structure/lib.js
+++ b/ext/admin/company_structure/lib.js
@@ -17,6 +17,7 @@ CompanyStructureAdapter.method('getDataMapping', function() {
"address",
"type",
"country",
+ "timezone",
"parent"
];
});
@@ -28,6 +29,7 @@ CompanyStructureAdapter.method('getHeaders', function() {
{ "sTitle": "Address","bSortable":false},
{ "sTitle": "Type"},
{ "sTitle": "Country", "sClass": "center" },
+ { "sTitle": "Time Zone"},
{ "sTitle": "Parent Structure"}
];
});
@@ -40,6 +42,7 @@ CompanyStructureAdapter.method('getFormFields', function() {
[ "address", {"label":"Address","type":"textarea","validation":"none"}],
[ "type", {"label":"Type","type":"select","source":[["Company","Company"],["Head Office","Head Office"],["Regional Office","Regional Office"],["Department","Department"],["Unit","Unit"],["Sub Unit","Sub Unit"],["Other","Other"]]}],
[ "country", {"label":"Country","type":"select","remote-source":["Country","code","name"]}],
+ [ "timezone", {"label":"Time Zone","type":"select","allow-null":false,"remote-source":["Timezone","name","details"]}],
[ "parent", {"label":"Parent Structure","type":"select","allow-null":true,"remote-source":["CompanyStructure","id","title"]}]
];
});
@@ -298,7 +301,7 @@ CompanyGraphAdapter.method('fixCyclicParent', function(sourceData) {
});
CompanyGraphAdapter.method('getHelpLink', function () {
- return 'http://blog.icehrm.com/?page_id=61';
+ return 'http://blog.icehrm.com/docs/companystructure/';
});
diff --git a/ext/admin/jobs/lib.js b/ext/admin/jobs/lib.js
index 36142741..016ad20e 100644
--- a/ext/admin/jobs/lib.js
+++ b/ext/admin/jobs/lib.js
@@ -42,7 +42,7 @@ JobTitleAdapter.method('getFormFields', function() {
});
JobTitleAdapter.method('getHelpLink', function () {
- return 'http://blog.icehrm.com/?page_id=80';
+ return 'http://blog.icehrm.com/docs/jobdetails/';
});
diff --git a/ext/admin/loans/meta.json b/ext/admin/loans/meta.json
index b05e249e..f1884a80 100644
--- a/ext/admin/loans/meta.json
+++ b/ext/admin/loans/meta.json
@@ -1,7 +1,7 @@
{
"label":"Company Loans",
"menu":"Admin",
-"order":"7",
+"order":"81",
"icon":"fa-shield",
"user_levels":["Admin"],
diff --git a/ext/admin/projects/lib.js b/ext/admin/projects/lib.js
index fd6ae476..fe7622f3 100644
--- a/ext/admin/projects/lib.js
+++ b/ext/admin/projects/lib.js
@@ -63,7 +63,7 @@ ClientAdapter.method('getFormFields', function() {
});
ClientAdapter.method('getHelpLink', function () {
- return 'http://blog.icehrm.com/?page_id=85';
+ return 'http://blog.icehrm.com/docs/projects/';
});
/**
@@ -116,7 +116,7 @@ ProjectAdapter.method('getFormFields', function() {
});
ProjectAdapter.method('getHelpLink', function () {
- return 'http://blog.icehrm.com/?page_id=85';
+ return 'http://blog.icehrm.com/docs/projects/';
});
@@ -172,6 +172,6 @@ EmployeeProjectAdapter.method('getFilters', function() {
});
EmployeeProjectAdapter.method('getHelpLink', function () {
- return 'http://blog.icehrm.com/?page_id=85';
+ return 'http://blog.icehrm.com/docs/projects/';
});
diff --git a/ext/admin/qualifications/lib.js b/ext/admin/qualifications/lib.js
index 7e0ef265..9f79ff1a 100644
--- a/ext/admin/qualifications/lib.js
+++ b/ext/admin/qualifications/lib.js
@@ -40,7 +40,7 @@ SkillAdapter.method('getFormFields', function() {
});
SkillAdapter.method('getHelpLink', function () {
- return 'http://blog.icehrm.com/?page_id=83';
+ return 'http://blog.icehrm.com/docs/qualifications/';
});
diff --git a/ext/admin/reports/lib.js b/ext/admin/reports/lib.js
index 94ac4ec5..50d41870 100644
--- a/ext/admin/reports/lib.js
+++ b/ext/admin/reports/lib.js
@@ -162,6 +162,3 @@ ReportAdapter.method('fillForm', function(object) {
}
});
-ReportAdapter.method('getHelpLink', function () {
- return 'http://blog.icehrm.com/?page_id=118';
-});
diff --git a/ext/admin/settings/lib.js b/ext/admin/settings/lib.js
index 0098525a..932ba801 100644
--- a/ext/admin/settings/lib.js
+++ b/ext/admin/settings/lib.js
@@ -63,5 +63,5 @@ SettingAdapter.method('fillForm', function(object) {
SettingAdapter.method('getHelpLink', function () {
- return 'http://blog.icehrm.com/?page_id=126';
-});
\ No newline at end of file
+ return 'http://blog.icehrm.com/docs/settings/';
+});
diff --git a/ext/modules/attendance/api/AttendanceActionManager.php b/ext/modules/attendance/api/AttendanceActionManager.php
index 91fe67bb..0682fc78 100644
--- a/ext/modules/attendance/api/AttendanceActionManager.php
+++ b/ext/modules/attendance/api/AttendanceActionManager.php
@@ -46,15 +46,22 @@ class AttendanceActionManager extends SubActionManager{
public function savePunch($req){
+
+ $useServerTime = SettingsManager::getInstance()->getSetting('Attendance: Use Department Time Zone');
+ $currentEmployeeTimeZone = BaseService::getInstance()->getCurrentEmployeeTimeZone();
+
+ if($useServerTime == '1' && !empty($currentEmployeeTimeZone)){
+ date_default_timezone_set('Asia/Colombo');
+
+ $date = new DateTime("now", new DateTimeZone('Asia/Colombo'));
+
+ $date->setTimezone(new DateTimeZone($currentEmployeeTimeZone));
+ $req->time = $date->format('Y-m-d H:i:s');
+ }
+
$req->date = $req->time;
-
- /*
- if(strtotime($req->date) > strtotime($req->cdate)){
- return new IceResponse(IceResponse::ERROR,"You are not allowed to punch a future time");
- }
- */
-
- //check if there is an open punch
+
+ //check if there is an open punch
$openPunch = $this->getPunch($req)->getData();
if(empty($openPunch)){
@@ -65,13 +72,7 @@ class AttendanceActionManager extends SubActionManager{
$arr = explode(" ",$dateTime);
$date = $arr[0];
- $currentDateTime = $req->cdate;
- $arr = explode(" ",$currentDateTime);
- $currentDate = $arr[0];
-
- if($currentDate != $date){
- return new IceResponse(IceResponse::ERROR,"You are not allowed to punch time for a previous date");
- }
+
$employee = $this->baseService->getElement('Employee',$this->getCurrentProfileId(),null,true);
@@ -98,18 +99,18 @@ class AttendanceActionManager extends SubActionManager{
}
if(strtotime($attendance->out_time) >= strtotime($dateTime) && strtotime($attendance->in_time) <= strtotime($dateTime)){
//-1---0---1---0 || ---0--1---1---0
- return new IceResponse(IceResponse::ERROR,"Time entry is overlapping with an existing one 1");
+ return new IceResponse(IceResponse::ERROR,"Time entry is overlapping with an existing one");
}else if(strtotime($attendance->out_time) >= strtotime($openPunch->in_time) && strtotime($attendance->in_time) <= strtotime($openPunch->in_time)){
//---0---1---0---1 || ---0--1---1---0
- return new IceResponse(IceResponse::ERROR,"Time entry is overlapping with an existing one 2");
+ return new IceResponse(IceResponse::ERROR,"Time entry is overlapping with an existing one");
}else if(strtotime($attendance->out_time) <= strtotime($dateTime) && strtotime($attendance->in_time) >= strtotime($openPunch->in_time)){
//--1--0---0--1--
- return new IceResponse(IceResponse::ERROR,"Time entry is overlapping with an existing one 3 ".$attendance->id);
+ return new IceResponse(IceResponse::ERROR,"Time entry is overlapping with an existing one ".$attendance->id);
}
}else{
if(strtotime($attendance->out_time) >= strtotime($dateTime) && strtotime($attendance->in_time) <= strtotime($dateTime)){
//---0---1---0
- return new IceResponse(IceResponse::ERROR,"Time entry is overlapping with an existing one 4");
+ return new IceResponse(IceResponse::ERROR,"Time entry is overlapping with an existing one");
}
}
}
diff --git a/ext/modules/attendance/index.php b/ext/modules/attendance/index.php
index c873bcac..2b757260 100644
--- a/ext/modules/attendance/index.php
+++ b/ext/modules/attendance/index.php
@@ -25,6 +25,11 @@ $moduleName = 'attendance';
define('MODULE_PATH',dirname(__FILE__));
include APP_BASE_PATH.'header.php';
include APP_BASE_PATH.'modulejslibs.inc.php';
+$useServerTime = SettingsManager::getInstance()->getSetting('Attendance: Use Department Time Zone');
+$currentEmployeeTimeZone = BaseService::getInstance()->getCurrentEmployeeTimeZone();
+if(empty($currentEmployeeTimeZone)){
+ $useServerTime = 0;
+}
?>
@@ -48,9 +53,11 @@ include APP_BASE_PATH.'modulejslibs.inc.php';
diff --git a/ext/modules/attendance/lib.js b/ext/modules/attendance/lib.js
index fcf7b7e2..3d9b54f4 100644
--- a/ext/modules/attendance/lib.js
+++ b/ext/modules/attendance/lib.js
@@ -23,6 +23,7 @@ Developer: Thilina Hasantha (thilina.hasantha[at]gmail.com / facebook.com/thilin
function AttendanceAdapter(endPoint,tab,filter,orderBy) {
this.initAdapter(endPoint,tab,filter,orderBy);
this.punch = null;
+ this.useServerTime = 0;
}
AttendanceAdapter.inherits(AdapterBase);
@@ -31,6 +32,10 @@ AttendanceAdapter.method('updatePunchButton', function() {
this.getPunch('changePunchButtonSuccessCallBack');
});
+AttendanceAdapter.method('setUseServerTime', function(val) {
+ this.useServerTime = val;
+});
+
AttendanceAdapter.method('getDataMapping', function() {
return [
@@ -51,11 +56,19 @@ AttendanceAdapter.method('getHeaders', function() {
});
AttendanceAdapter.method('getFormFields', function() {
- return [
- [ "id", {"label":"ID","type":"hidden"}],
- [ "time", {"label":"Time","type":"datetime"}],
- [ "note", {"label":"Note","type":"textarea","validation":"none"}]
- ];
+ if(this.useServerTime == 0){
+ return [
+ [ "id", {"label":"ID","type":"hidden"}],
+ [ "time", {"label":"Time","type":"datetime"}],
+ [ "note", {"label":"Note","type":"textarea","validation":"none"}]
+ ];
+ }else{
+ return [
+ [ "id", {"label":"ID","type":"hidden"}],
+ [ "note", {"label":"Note","type":"textarea","validation":"none"}]
+ ];
+ }
+
});
diff --git a/ext/modules/loans/meta.json b/ext/modules/loans/meta.json
index a80215bb..b0d59bd1 100644
--- a/ext/modules/loans/meta.json
+++ b/ext/modules/loans/meta.json
@@ -1,7 +1,7 @@
{
"label":"Loans",
-"menu":"Loans",
-"order":"1",
+"menu":"Finance",
+"order":"3",
"icon":"fa-shield",
"user_levels":["Admin","Manager","Employee"],
diff --git a/ext/modules/meta.json b/ext/modules/meta.json
index ec2429bb..0ce57714 100644
--- a/ext/modules/meta.json
+++ b/ext/modules/meta.json
@@ -2,6 +2,6 @@
"Personal Information":"fa-male",
"Subordinates":"fa-user",
"Time Management":"fa-clock-o",
-"Training":"fa-briefcase",
-"Loans":"fa-list-alt"
+"Travel Management":"fa-plane",
+ "Finance":"fa-money"
}
\ No newline at end of file