Module timesheets đƣợc tạo bằng cách khá là mới mẻ so với các module trƣớc, đầu tiên ngƣời phát triển cũng tạo ra module C_Timesheets trong module builder và không tạo ra bất kì các field nào. Sau khi đã tạo xong module timesheet và deloy để đƣa module vào hệ thống, ngƣời phát triển sẽ tiền hành tạo giao diện cho module timesheet bằng cách chỉnh sửa file view.edit.php trong đƣờng dẫn:
custom/modules/C_TimeSheets/views/view.edit.php
Hàm để lấy ra danh sách các dự án mà user đ ng nhập đƣợc thêm vào.
global $app_list_strings, $mod_strings, $current_user, $db; global $db, $current_user;
// Can lay ra project da duoc assign cho phong ban cua current user
$sql_get_projects = 'SELECT DISTINCT p.id,
p.name, p.job_code
FROM c_project_users_c pu LEFT JOIN c_project p ON p.id = pu.project_id LEFT JOIN users u
ON u.id = pu.user_id WHERE pu.user_id =
"'.$current_user->id.'" AND p.deleted = 0 AND p.project_status = "enable"'; $result = $db->query($sql_get_projects); while($projects = $db->fetchByAssoc($result)){ if($projects['name']!= "") $app_list_strings['project_list'][$projects['id']] = "[" . $projects['job_code']. "] " . $projects['name']; } unset($app_list_strings['project_list']['all']);
CHƢƠNG 4: XÂY DỰNG HỆ THỐNG THỰC TẾ CHO RED Page 82
Sau khi đã lấy đƣợc danh sách các dự án, ngƣời phát triển sẽ tiến hành tạo ra giao diện lịch cho màn hình bằng cách sử dụng script. Sau khi đã hiển thị đƣợc phần lịch lên màn hình, ngƣời phát triển tiến hành lọc từng ngày trong lịch ứng với loại ngày: leaving dates, public day, today hay là ngày điền timesheet.
//check leaving dates
$query = "SELECT * FROM leaving WHERE deleted = 0 AND assigned_user_id='{$current_user->id}'";
$result = $db->query($query);
while($row = $db->fetchByAssoc($result)){
$dates = $row['leaving_date'];//04/12/2012,04/18/2012 $dates = explode(",", $dates);
if(count($dates) > 0 && $dates[0] != "" ){ for($i=0;$i<count($dates); $i++){
$d = trim($dates[$i]);
$month = intval(substr($d,0,2))-1;//tru 1 moi la thang trong javascript
$day = intval(substr($d,3,2)); $year = intval(substr($d,6,4));
if($day > 0 && $month > 0 && $year > 0){ if($row['leaving_approval'] == 'approval' && $row['leaving_type']=='fullday'){
$script.= " jQuery('#date').glDatePicker('setSelectedDate', new Date($year,$month,$day), 'leaving'); ";
}
if($row['leaving_approval'] == 'approval' && $row['leaving_type']=='halfday'){
$script.= " jQuery('#date').glDatePicker('setSelectedDate', new Date($year,$month,$day), 'leave_half_day'); "; } } } }
CHƢƠNG 4: XÂY DỰNG HỆ THỐNG THỰC TẾ CHO RED Page 83
Thời gian làm việc của nhân viên
Các public day
//get all timesheet
$query = "SELECT * FROM c_timesheets WHERE deleted = 0 AND assigned_user_id='{$current_user->id}'";
$result = $db->query($query);
//display time sheet into javascript while($row = $db->fetchByAssoc($result)){ $date = $row['apply_date'];//2012-04-12 $day = substr($date,8,2);
$month = intval(substr($date,5,2))-1;//tru 1 moi la thang trong javascript
$year = substr($date,0,4);
$script.= " jQuery('#date').glDatePicker('setSelectedDate', new Date($year,$month,$day), 'timesheet'); ";
}
//public day
$publicday_query = "SELECT public_day FROM c_publicdays WHERE deleted = 0" ; $publicday_result = $db->query($publicday_query); while($publicday_row = $db->fetchByAssoc($publicday_result)){ $day = date('d',strtotime($publicday_row['public_day'])); $month = date('m',strtotime($publicday_row['public_day']))-1; $year = date('Y',strtotime($publicday_row['public_day'])); $script.= " jQuery('#date').glDatePicker('setSelectedDate', new Date($year,$month,$day), 'public_day'); ";
CHƢƠNG 4: XÂY DỰNG HỆ THỐNG THỰC TẾ CHO RED Page 84
Ngƣời phát triển khi đã lấy đƣợc dữ liệu cần xuất ra màn hình sẽ tiến hành dùng các code html để hiển thị các dữ liệu ra theo ý muốn. Sau đó sẽ dùng custom code để gọi lại các script,html, hay css vừa tạo ở view.edit.php.
Module timesheets đƣợc tạo ra với giao diện dễ sử dụng và khi đ ng nhập vào hệ thống thì mặc định sẽ đƣợc gọi đến module timesheet. Thông tin module timesheet sẽ đƣợc hiển thị trên tấm lịch với các màu tƣơng ứng đƣợc chú thích phía dƣới tấm lịch. Khi điền thời gian làm việc thì nhân viên sẽ chọn ngày và thời gian làm việc rồi bấm vào button add, khi đã add xong các công việc phải làm thì nhân viên sẽ bấm button save để hoàn tất việc lƣu dữ liệu xuống database. Ở module này phải xử lý đƣợc khi nhân viên đã đƣợc cho phép nghỉ thì sẽ không đƣợc add timesheet vào ngày hôm đó.
H nh 53: Màn h nh Timesheets