Các mẫu report dựa trên form mẫu đưa ra sẽ được thiêt kế y hệt. Sau đó dùng các câu lệnh truy vấn để trích lọc dữ liệu hiển thị ra bên ngoài
4.6.1. Report estimate cost
Report estimate cost sẽ hiển thị thông tin của dự án mà người sử dụng muốn xuất ra và các chi phí dự tính danh cho từng phịng ban, cũng như các phí khác như vé máy bay hoặc ăn uống…… Cách tạo report estimate cost bằng cách tạo view.reportestimatecost.php nằm trong đường dẫn:
custom/modules/C_Report/views/
Trong file này người phát triển sẽ dùng những thẻ HTML để tạo ra giao diện hiển thị cho report estimate cost, các thẻ HTML này sẽ được đặt trong biến result để hiển thị ra bên ngồi màn hình.
CHƯƠNG 4: XÂY DỰNG HỆ THỐNG THỰC TẾ CHO RED Page 91
Hàm hiển thị màn hình của report estimate cost. function display(){
global $db, $mod_strings, $app_list_strings; global $timedate; $ss = new Sugar_Smarty(); C_Report::getProjectList(); $ss->assign('MOD', $mod_strings); $ss->assign('PROJECT_ID', get_select_options_with_id($app_list_strings['project_list'], $_REQUEST['project_id'])); $ss->assign('START_DATE', $_REQUEST['start_date']); $ss->assign('END_DATE', $_REQUEST['end_date']); $ss->assign('CALENDAR_DATEFORMAT', $timedate- >get_cal_date_format()); // if(isset($_REQUEST['submit'])){ if(isset($_REQUEST['submit'])){//fix bug 930 // $project_id = $_REQUEST['project_id'];
$project_id = $_REQUEST['project_id'];//fix bug 930 $start_date = $_REQUEST['start_date']; $end_date = $_REQUEST['end_date']; $res = $this->processReport($project_id, $start_date, $end_date); $ss->assign('RESULT', $res); } $ss- >display("custom/modules/C_Report/tpls/reportestimatecost.tpl") ; }
Câu truy vấn để lấy danh sách các project
Câu truy vấn để lấy danh sách các production cost estimation
Câu truy vấn để lấy lên Manpower cost $query = 'SELECT a.name, a.job_code, a.start_date, a.end_date, c.name AS CLIENT, a.end_date, TRIM(CONCAT(IFNULL(d.first_name,"")," ",IFNULL(d.last_name," "))) AS full_name, c.industry FROM c_project a
LEFT JOIN accounts_c_project_c b
ON a.id = b.accounts_cba57project_idb AND b.deleted=0
LEFT JOIN accounts c
ON c.id = b.accounts_cd932ccounts_ida AND c.deleted=0
LEFT JOIN users d
ON d.id=a.assigned_user_id AND d.deleted=0 WHERE a.deleted=0 AND a.id="'.$project_id.'"'; $sql = 'SELECT a.name,a.amount FROM
c_production_cost_estimation a JOIN c_project_ct_estimation_c b ON a.id=b.c_project_bdf7imation_idb AND b.deleted=0
AND b.c_project_8dd9project_ida="'.$project_id.'"'; $sql = ' SELECT a.name, a.projectshour, d.cost_per_hour, a.projectedminutes FROM c_estimatecost a JOIN c_project_cestimatecost_c b ON a.id = b.c_project_60aaatecost_idb AND b.deleted = 0 JOIN c_project e ON e.id = b.c_project_faf3project_ida AND e.id = "'.$project_id.'"
JOIN c_derpartment d ON d.id = a.derpartment WHERE a.deleted = 0 AND b.deleted = 0 AND d.deleted = 0 ';
CHƯƠNG 4: XÂY DỰNG HỆ THỐNG THỰC TẾ CHO RED Page 93
Hình 57: Màn hình Report estimate cost
4.6.2. Report actual cost
Report actual cost sẽ xuất ra các thơng tin về dự án cũng như tính chi phí thực tế dành cho dự án đó. Cách tạo report actual cost cũng tương tự như cách tạo report estimate cost. Người phát triển phải tạo một file view.reportactualcost.php và đặt vào đường dẫn: custom/modules/C_Report/views. Đồnng thời trong file
custom/modules/C_Report/action_view_map.php
Khai báo thêm dòng “'reportactualcost' =>'reportactualcost',” Hàm hiển thị của report actual cost
Trong hàm có: $ss-
>display("custom/modules/C_Report/tpls/reportactualcost.tpl"); function display(){
global $db, $mod_strings, $app_list_strings; global $timedate; $ss = new Sugar_Smarty(); C_Report::getProjectList(); $ss->assign('MOD', $mod_strings); $ss->assign('PROJECT_ID', get_select_options_with_id($app_list_strings['project_list'], $_REQUEST['project_id'])); $ss->assign('START_DATE', $_REQUEST['start_date']); $ss->assign('END_DATE', $_REQUEST['end_date']); $ss->assign('CALENDAR_DATEFORMAT', $timedate- >get_cal_date_format()); // if(isset($_REQUEST['submit'])){
if(isset($_REQUEST['submit'])){ //fix bug 930 $project_id = $_REQUEST['project_id']; $start_date = $_REQUEST['start_date']; $end_date = $_REQUEST['end_date']; $res = $this->processReport($project_id, $start_date, $end_date); $ss->assign('RESULT', $res); } $ss- >display("custom/modules/C_Report/tpls/reportactualcost.tpl"); }
Trong hàm có dịng:
$ss->display("custom/modules/C_Report/tpls/reportactualcost.tpl"); Dịng này dùng để hiển thị biến Sugar_Smarty bằng việc tạo giao diện trong file reportactualcost.tpl
<body>
<hr class="horizontal_line"/>
<form action="index.php" id="frmForm" name="frmForm" method="post">
<table cellpadding="0" cellspacing="0" width="100%" border="0" style="border-collapse: collapse;">
<tr>
<td class="dataLabel">
<input type="hidden" name="module" value="C_Report"/>
<input type="hidden" name="action" value="reportactualcost" /> </td> </tr> <tr> <td class="dataLabel"><h3 align="center" style="text-transform: uppercase;">{$MOD.LBL_REPORT_ACTUAL_COST}</h3></td> </tr> <tr> <td class="dataLabel"><b>{$MOD.LBL_SELECT_PROJECT}</b></td> </tr> <tr class="person_option"> <td class="dataField">
<select name="project_id" id="project_id" size="1">{$PROJECT_ID}</select> <input type="submit" name="submit" id="submit"
value="{$MOD.LBL_BUTTON_REPORT}"> </td> </tr> </table> <hr class="horizontal_line"/> {$RESULT} </form> </body> </table> <hr class="horizontal_line"/> {$RESULT} </form> </body>
CHƯƠNG 4: XÂY DỰNG HỆ THỐNG THỰC TẾ CHO RED Page 95
Phần tpl này giúp hiện thị phần report actual cost
Khi nhấp vào button report sẽ nhận được action đến action được khai báo trong file action_view_map.php .
Câu truy vấn để lấy giờ làm thực tế của từng nhân viên $sql = 'SELECT a.name AS projects, g.project, l.name AS estimation, c.id, TRIM(CONCAT(IFNULL(c.first_name,"")," ",IFNULL(c.last_name," "))) AS full_name, e.name, g.hours, g.MONTH, l.projectshour, l.projectedminutes
LEFT JOIN users_c_derpartment_c d
ON c.id = d.users_c_de398cntusers_ida AND d.deleted = 0
LEFT JOIN c_derpartment e
ON e.id = d.users_c_ded6c3artment_idb AND e.deleted = 0
LEFT JOIN (SELECT f.id,u.last_name,p.name, p.name AS project,p.id AS pj,
MAX(MONTH(f.apply_date)) AS MONTH,
(SUM(f.hours)+SUM(f.minutes)/60) AS hours, f.assigned_user_id AS users
FROM c_timesheets f INNER JOIN users u
ON u.id = f.assigned_user_id
INNER JOIN c_project_c_timesheets_c pt ON pt.c_project_abe0esheets_idb = f.id INNER JOIN c_project p
ON p.id = pt.c_project_6c85project_ida WHERE f.deleted = 0 AND pt.deleted =0 AND p.deleted = 0
GROUP BY f.assigned_user_id,p.id) g ON g.users = c.id AND g.pj=a.id
LEFT JOIN (SELECT
h.c_project_faf3project_ida AS project, i.id, i.projectshour, i.projectedminutes, i.name, k.id AS depa FROM c_estimatecost i JOIN c_derpartmeestimatecost_c j ON i.id = j.c_derpartm96a0atecost_idb
CHƯƠNG 4: XÂY DỰNG HỆ THỐNG THỰC TẾ CHO RED Page 97
Câu truy vấn để lấy các chi phí bên ngồi thực tế (Production cost actual)
Hình 58: Màn hình Report Actual cost
4.7. Module Manpower Cost
Module manpower cost được tạo theo cách thông thường, bằng cách sử dụng module builder để tạo ra module C_Manpowercost gồm các field: Team, Project hour, Project minutes, và Description. Field project được tạo bằng cách tạo mối quan hệ n-1 với module project. Sau khi đã tạo xong các field và tiến hành deloy để
AND j.deleted = 0 JOIN c_derpartment k ON k.id = j.c_derpartm5b51artment_ida AND k.deleted = 0 JOIN c_project_cestimatecost_c h ON i.id = h.c_project_60aaatecost_idb AND h.deleted = 0 WHERE i.deleted = 0) l
ON l.project = a.id AND l.depa = e.id WHERE a.id = "'.$project_id.'"
GROUP BY l.id,c.id ORDER BY e.name';
$sql = 'SELECT a.name,a.amount FROM c_production_cost a JOIN c_project_cduction_cost_c b ON b.c_project_d0c7on_cost_idb=a.id AND b.deleted= 0 AND b.c_project_37e0project_ida="'.
đưa module vào hệ thống. Người phát triển sẽ tiến hành các chỉnh sửa như: sẽ lấy danh sách các team ở module Teams gán vào danh sách dropdown của field team.
Hàm lấy danh sách các team gán vào dropdown
Hàm để nối giờ với phút lại với nhau.
function getDepartment($project_id){ global $app_list_strings,$db; $sql =' SELECT DISTINCT a.id, a.name FROM c_derpartment a WHERE a.id NOT IN(SELECT
c.derpartment
FROM c_estimatecost c
JOIN c_project_cestimatecost_c d
ON c.id =
d.c_project_60aaatecost_idb AND c.deleted = 0 AND d.deleted = 0 AND d.c_project_faf3project_ida = "'.$project_id.'") AND a.deleted = 0 '; $result = $db->query($sql); while($row = $db->fetchByAssoc($result)){ $app_list_strings['department_list'][$row['id']] = $row['name']; } } function concatHourAndMinute(&$bean,$event,$arguments){ global $db;
$sql= "select projectshour from c_estimatecost where id='".$bean->id."' "; $result = $db->query($sql); $row = $db->fetchByAssoc($result); $bean->projectedminutes = $row[projectshour]." : ". $bean->projectedminutes; }
CHƯƠNG 4: XÂY DỰNG HỆ THỐNG THỰC TẾ CHO RED Page 99
Hàm để update name cho module manpower cost (bởi vì mỗi record đều cần có name để quản lý)
4.8. Đánh giá hệ thống
Để có được cái nhìn tổng quan và chính xác hơn em đã thực hiện cuộc khảo sát các nhân viên bên công ty Red về các vấn đề hệ thống đang sử dụng hiện tại và đạt được kết quả khảo sát như sau:
1. Anh/chị đánh giá thế nào về mức độ dễ sử dụng của giao diện trang của hệ thống Red online timesheet ? (Lựa chọn tương ứng 1: rất khó sử dụng, 4: rất dễ sử dụng) Trả lời Số lượng 4 13 3 16 2 2 1 0 Tổng 31
2. Theo anh/chị hệ thống chạy có ổn định và đưa ra được kết quả chính xác khơng? (Lựa chọn tương ứng: 1 rất khơng chính xác, 4: rất chính xác)
Trả lời Số lượng
4 16
function update_name(&$bean,$event,$arguments){ $department = new C_derpartment(); $department->retrieve($bean-
>c_derpartm5b51artment_ida);
$bean->name = $department->name; }
3 12
2 3
1 1
Tổng 31
3. Anh/chị đánh giá như thế nào về tốc độ xử lý yêu cầu khi thực hiện các thao tác. (Lựa chọn tương ứng 1: rất chậm, 4: rất nhanh)
Trả lời Số lượng 4 18 3 10 2 3 1 0 Tổng 31
4. Anh/chị có thấy hệ thống hiện tại giải quyết được những vấn đề trước đây anh/chị gặp phải không? (Lựa chọn tương ứng 1:không tốt, 4: rất tốt)
Trả lời Số lượng 4 20 3 10 2 1 1 0 Tổng 31
5. Anh/chị đánh giá thế nào về các dữ liệu cần lưu trữ của hệ thống có đầy đủ khơng ? (Lựa chọn tương ứng 1: không đầy đủ, 4: rất đầy đủ)
Trả lời Số lượng 4 15 3 12 2 3 1 1 Tổng 31
CHƯƠNG 4: XÂY DỰNG HỆ THỐNG THỰC TẾ CHO RED Page 101
Biểu đồ trên cho thấy mức độ dễ sử dụng giao diện, cũng như tốc độ xử lý và kết quả mong muốn của hệ thống Red online timesheet là tương đối tối. Tuy nhiên mức độ dễ sử dụng của giao diện chưa đạt được như mong muốn.
KẾT LUẬN
Sau quá trình nghiên cứu tìm hiểu lý thuyết và xây dựng ứng dụng, em đã đạt được những kết quả sau:
Trình bày được những kiến thức về cấu trúc SugarCRM.
Triển khai phần mềm quản lý quan hệ khách hàng cho công ty Red áp dụng mã nguồn mở SugarCRM.
Hạn chế
Ứng dụng chạy khá chậm nếu máy khơng có cấu hình mạnh Muốn thao tác rành được trên phần mềm phải được hướng dẫn kĩ. Hướng phát triển
Cải tiến cách viết code và xử lý các câu truy vấn để tăng tốc độ xử lý của ứng dụng.
TÀI LIỆU THAM KHẢO Page 103
TÀI LIỆU THAM KHẢO
[1] John Mertic, The Definitive Guide To SugarCRM, USA,2009 [2] www.Sugarcrm.com,
Sugar_CommunityEdition_Application_Guide_6.1.0.pdf,Version6.1.0, 31/05/2012.
[3]
http://support.sugarcrm.com/02_Documentation/04_Sugar_Developer/Sugar_Devel oper_Guide_6.4 Truy cập ngày 15/04/2012
[4] http://www.susasoft.com/phan-mem-CRM/quy-trinh-trong-sugarCRM-
17.html, 10:00 ngày 15/03/2012
PHỤ LỤC 1 1. Mục đích
Tài liệu này hướng dẫn các bạn cài đặt phần mềm SugarCRM vào hệ thống của bạn
2. Yêu cầu hệ thống
+ Hệ điều hành: windows xp, windows server 2003/2008, windows 7, lilux + webserver: apache, IIS
+ Database: Mysql, SQL Server
+ Trình duyệt: Internet explorer 6,7,8,9/ firfox 2,3,4/ safari/ opera/ google chrome
3. Hướng dẫn cài đặt
B1: Tải XAMPP về (bản .exe cho Win 32) và cài đặt lên server. Sau khi cài xong XAMPP tại ổ D, ta có đường dẫn như sau: D:\xampp. Trong tài liệu này, ta dùng XAMPP phiên bản 1.6.7 xampp-win32-1.6.7-installer.exe)
Địa chỉ tải XAMPP: http://www.oldapps.com/xampp.php?
old_xampp=41#Download
B2: Cấu hình lại port cho apache server mục đích là tránh sự đụng độ port với các web server khác như IIS
Thực hiện: Mở file D:/xampp/htdocs/apache/conf/httpd.conf Tìm đến #Listen 12.34.56.78:80 Listen 80 Và ServerName localhost:80 Thay bằng: #Listen 12.34.56.78:81 Listen 81 Và ServerName localhost:81
PHỤ LỤC Page 105
Với 81 là port mới cho Apache.
B3:Cấu hình thư mục root cho apache:
Mở file C:/xampp/htdocs/apache/conf/httpd.conf Tìm đến
DocumentRoot "C:/xampp/htdocs"
Thay bằng
DocumentRoot "C:/xampp/htdocs/xxx"
Với xxx là tên thư mục mới (nằm trong htdocs). Lúc này, nếu gõ http://localhost:81 trên trình duyệt thì thay vì chạy vào trang index.php của htdocs thì bây giờ sẽ chạy thẳng vào website xxx.
Sau khi cài XAMPP và cấu hình XAMPP , kiểm tra dịch vụ Apache và MySQL đang chạy như hình bên dưới:
PHỤ LỤC Page 107
B5: tạo database MySQL cho phần mềm
Mở PhpMyadmin lên: http://localhost:81/phpmyadmin (81 là port Apache sau khi cấu hình xong)
PHỤ LỤC Page 109
Sau đó import file script database vào database vừa tạo
B6: cấu hình ứng dụng
Trong file config.php thay đổi giá trị cho các thành phần sau
'db_user_name' => 'root', ( tên người dùng database, mặc định là root) 'db_password' => '', ( mật khẩu truy cập vào database, mặc định là rỗng) 'db_name' => sugarcrm, ( tên database )
PHỤ LỤC Page 111
Nếu các bước cấu hình ở trên thực hiện xong và đúng thì khi truy cập địa chỉ: http:// localhost:81 sẽ xuất hiện hình bên dưới
PHỤ LỤC 2
PHIẾU KHẢO SÁT
Kính chào anh/chị!
Hiện tại chúng tơi đang thực hiện khóa luận tốt nghiệp với đề tài “Triển khai phần mềm quản lý quan hệ khách hàng” và đã xây dựng được hệ thống Red online timesheet, mọi người có thể truy cập vào trang (user: admin pass: 123456)
http://clients.sugarcrm.com.vn/red/. Với mục tiêu xây dựng cũng như nâng cấp hệ
thống được tốt hơn, rất mong nhận được sự hỗ trợ của các anh/chị bằng cách trả lời bảng khảo sát dưới đây.
Chân thành cảm ơn!
Người thực hiện đề tài: Mang Như Trung
1. Anh/chị đánh giá thế nào về mức độ dễ sử dụng của giao diện trang của hệ thống Red online timesheet ? (Lựa chọn tương ứng 1: rất khó sử dụng, 4: rất dễ sử dụng)
1 2 3 4
2. Theo anh/chị hệ thống chạy có ổn định và đưa ra được kết quả chính xác khơng? (Lựa chọn tương ứng: 1 rất khơng chính xác, 4: rất chính xác)
1 2 3 4
3. Anh/chị đánh giá như thế nào về tốc độ xử lý yêu cầu khi thực hiện các thao tác. (Lựa chọn tương ứng 1: rất chậm, 4: rất nhanh)
1 2 3 4
4. Anh/chị có thấy hệ thống hiện tại giải quyết được những vấn đề trước đây anh/chị gặp phải không? (Lựa chọn tương ứng 1:không tốt, 4: rất tốt)
1 2 3 4
5. Anh/chị đánh giá thế nào về các dữ liệu cần lưu trữ của hệ thống có đầy đủ khơng ? (Lựa chọn tương ứng 1: không đầy đủ, 4: rất đầy đủ)