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 để
đƣ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.
115 trang |
Chia sẻ: lylyngoc | Lượt xem: 2506 | Lượt tải: 1
Bạn đang xem trước 20 trang tài liệu Triển khai phần mềm quản lý quan hệ khách hàng cho một doanh nghiệp cụ thể dựa trên phần mềm mã nguồn mở SugarCRM, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
ngày bắt đầu dự án
End Date: dùng để lƣu ngày kết thúc dự án
Status: dùng để lƣu trạng thái của dự án(enable/disable)
Description: mô tả về dự án
PROJECT
Project
Name
Project
Manager
Client
Start Date
End Date
Status
P oject
Code
Description
IDproject
H nh 25: Các thuộc tính của thực thể Project
CHƢƠNG 2: THU THẬP VÀ PHÂN TÍCH YÊU CẦU Page 54
2.7. Các mẫu Report tham khảo
Các mẫu Report này mang tính chất tham khảo để thiết kế giao diện cho các
module report cũng nhƣ định dạng cho các file excel khi xuất các report.
2.7.1. Mẫu Report Project Cost Estimate
Project name:
World trade center
Branding & design
JOB Code: VIN.001/1011
Client: Vinacapital
Business type Real Estate
Project period From: To:
Project leader: Ms Long Uyen
INTERNAL PROJECT MAN HOUR & COST ESTIMATION
Title Projected Hour Cost per hours (USD) Amount (USD)
MAN POWER COST: 710
Client services 8 20 160
Designers 15 20 300
Creative Director 5 50 250
-
-
-
-
-
0
PRODUCTION COST
500
0
Nhat Thong
250
Vietnam airlines (air ticket)
250
0
0
TOTAL - - 1.210
Bảng 6: Mẫu Report Project Cost Estimation
CHƢƠNG 2: THU THẬP VÀ PHÂN TÍCH YÊU CẦU Page 55
2.7.2. Mẫu Report Project Cost Actual (CR)
Project name:
World trade center
Branding & design
JOB Code: VIN.001/1011
Client: Vinacapital
Business type
Real estate/ FMCG/
Education/Service
Project period From: 11-Thg10
To: 11-Thg11
Project leader: Ms Long Uyen
PROJECTED V.S ACTUAL MAN HOUR & COST
Title Person incharge Hours Diff
MAN POWER COST: Projected Actual
CR Uyen 5 2 3
Designer Tho 5
Dinh 5
Lan Anh 5
Toan 5
CD Lenny 5
PRODUCTION COST
Nhat thong
Itaxa
Vietnam airline
TOTAL:
Bảng 7: Mẫu Report Project Cost Actual (CR)
CHƢƠNG 2: THU THẬP VÀ PHÂN TÍCH YÊU CẦU Page 56
2.7.3. Mẫu Report Project Cost Actual (MA)
Project name:
World trade center
Branding & design
JOB Code: VIN.001/1011
Client: Vinacapital
Business type
Real estate/ FMCG/
Education/Service
Project period From: 11-Thg10
To: 11-Thg11
Project leader: Ms Long Uyen
PROJECTED V.S ACTUAL MAN HOUR & COST
Title Person incharge Hours Cost per hours Amount (USD)
MAN POWER COST: Projected Actual 640
CR Uyen 5 3 20 60
Designer Tho 5 2 20 40
Dinh 5 3 20 60
Lan Anh 5 7 20 140
Toan 5 8 20 160
CD Lenny 5 9 20 180
-
PRODUCTION COST
300
-
Nhat thong
100
Itaxa
100
Vietnam airline
100
-
TOTAL:
940
Bảng 8: Mẫu Report Project Cost Actual (MA)
CHƢƠNG 2: THU THẬP VÀ PHÂN TÍCH YÊU CẦU Page 57
2.7.4. Mẫu Report Profit And Loss (CR)
PROFIT AND LOSS - CR W.I.P BY PROJECT
Job code
Person
in
Charge
Client Description Project period
Man Hours
Projection
Man Hours
Actual
Renvenue (VND)
VIN.001/1011 Ms. Uyen Vinacapital
World trade center
Branding & design
đƣa text
FromDate ,
ToDate vào
đây,
ví dụ:
23/04/2012 to
30/04/2012
[tổng thời gian
estimation]
[Tổng giờ
actual ]
50.000.000
TOTAL: 50.000.000
Bảng 9: Mẫu Report Profit And Loss (CR)
2.7.5. Mẫu Report Profit And Loss (MA)
Job code
Person
in
Charge
Client Description
Project
period
Man Hours
Projection
Man Hours
Actual
Renvenue
(VND)
Manpower
cost
Production
cost
Margin
(VND)
VIN.001/1011 Ms. Uyen Vinacapital
World trade
center
Branding
& design
50.000.000 640 300 49.999.060
-
-
TOTAL:
50.000.000 640 300 49.999.060
Bảng 10: Mẫu Report Profit And Loss (MA)
2.7.6. Mẫu Report Revenue
REVENUE PROJECTION
From: 1
Nov
To: 30
Nov
Date
Invoice
mber
Project code Clients Description
Amount
(VND)
VAT
Total Amount
(VND)
Payment
status
01-
Thg11
45 VIN.001/1011 Vinacapital
World trade center
Branding & design
50.000.000 5.000.000 55.000.000 Paid
Bảng 11: Mẫu Report Revenues
CHƢƠNG 2: THU THẬP VÀ PHÂN TÍCH YÊU CẦU Page 58
2.7.7. Mẫu Report Timesheet (%)
TIMESHEET in OCT 2011
Name Working hours Billable hours Inputted % Input/ Billable hours
% Input/
Working hours
Uyen 176 110 165 150% 94%
Khoi 176 110 4 4% 2%
Adie 176 110 55 50% 31%
Thao 176 110 161 146% 91%
Diep 176 110 166 151% 94%
Khanh Linh 176 110 77 70% 43%
Vy 176 110 121 110% 69%
Hoang Uyen 176 110 147 133% 83%
Huong 152 95 152 160% 100%
Thuy Linh 176 110 155 141% 88%
Lan Anh 176 110 161 146% 91%
Dinh 168 105 76 72% 45%
Dammy 152 95 138 146% 91%
Toan 176 110 120 109% 68%
Pham 168 105 104 99% 62%
Tan Hung 120 75 120 160% 100%
Quang 96 60 99 165% 103%
Hung 176 110 168 153% 95%
Tho 168 105 160 152% 95%
Hong Anh 56 35 31 89% 55%
Nhat Linh 168 105 161 153% 96%
Ai 168 105 60 57% 36%
Lenny 176 110 75 68% 43%
TOTAL 3.704 2.315 2.676 116% 72%
Bảng 12: Mẫu Report Timesheet (%)
CHƢƠNG 2: THU THẬP VÀ PHÂN TÍCH YÊU CẦU Page 59
2.7.8. Mẫu Report Timesheet
TIMESHEET BY STAFF, BY PROJECT
Name of Staff: Code RED-001 Total
Hours
Date 01-Thg11 02-Thg11 03-Thg11 04-Thg11 05-Thg11 29-Thg11 30-Thg11
Job Code
VIN.001/1011 1 2 5 4 12
JC-002
JC-003
JC-004
JC-005
Total 1 2 5 0 4 0 0 12
Bảng 13: Mẫu report Timesheet
CHƢƠNG 2: THU THẬP VÀ PHÂN TÍCH YÊU CẦU Page 60
2.8. Khảo sát hệ thống server đang hoạt động của Red
Hiện tại công ty Red đang thuê VPS Server tại trang
Đặt tính của Server Thông tin chung gói VPS 5
Sever đặt tại Việt Nam
HDD 250GB
RAM 4GB + 1 GB(Free)
CPU E3-1230/E5620
Data transfer Unlimited
Cổng trong nƣớc 100Mbps
Cổng quốc tế 2Mbps/512Kbps
Host Kloxo CentOs 5.x: Cài sẵn Apache 2.2, PHP5, DNS,
MySQL, Mailserve
CHƢƠNG 3: THIẾT KẾ HỆ THỐNG Page 61
CHƢƠNG 3: THIẾT KẾ HỆ THỐNG
Hệ thống CRM của công ty Red phải đƣợc thiết kế để đảm bảo đƣợc những
yêu cầu mà công ty Red đặt ra, hệ thống phải đảm bảo đƣợc tính bảo mật dữ liệu
giữa các nhân viên, giao diện phải đơn giản, dễ hoạt động đối với nhân viên bình
thƣờng chỉ cần 2 module chính là timesheet và leaving, nên khi đ ng nhập vào hệ
thống thì màn hình đầu tiên sẽ là màn hình điền timesheet để nhân viên dễ sử dụng.
Đối với ngƣời quản trị và ngƣời quản lý thì phải có khả n ng phân quyền cho các
nhân viên khác và không đƣợc truy cập vào module salary của hệ thống. Trong
công ty chỉ có nhân viên kế toán là đƣợc phép truy cập và thao tác đƣợc trên module
salary. Font chữ sử dụng cho hệ thống phải là font aller.
Khi đ ng nhập vào Red CRM giao diện đầu tiên của Red là màn hình điền
timesheet. Giao diện của Red gồm các giao diện của module Account, Salary,
Team, Project, Timesheets… trong các module này module khi vào module nào
cũng đều có cách hiện thị chung của SugarCRM đó là màn hình Listview, khi nhấp
vào các thông tin chi tiết sẽ hiện ra màn hình Detail View, khi tạo hoặc chỉnh sửa
các thuộc tính thì sẽ hiện ra màn hình Edit View để hiển thị màn hình chỉnh sửa các
thông tin, tuy nhiên để đảm bảo sự tiện dụng cũng nhƣ mục đích của ngƣời sử dụng,
giao diện của module Timesheets và Leaving có những thay đổi khác.
CHƢƠNG 3: THIẾT KẾ HỆ THỐNG Page 62
HOME
ACCOUNT PROJECTTEAMSSALARY TIMESHEETS LEAVING REPORTS PUBLICDAYS ADMINISTRATOR
MANPOWER
COST
ESTIMATION
PRODUCTION
COST
ESTIMATION
PRODUCTION
COST
ACTUAL
REVENNUES
ESTIMATION
REVENNUES
ACTUAL
REPORT
ESTIMATION
COST
REPORT
ACTUAL COST
(MA)
REPORT
ACTUAL COST
(CR)
REPORT PROFIT
AND LOSS (CR)
REPORT PROFIT
AND LOSS (MA)
REPORT
REVENUES
REPORT
TIMESHEET
USERS
SUGAR
CONNECT
SYSTEM
EMAIL
DEVELOPER
TOOLS
BUG
TRACKER
SECURITY
SUITE
H nh 26: WorkFlow của hệ thống Red online timesheet (Red CRM)
3.1. Module Account
Giao diện màn hình ListView của module Account bao gồm các thông tin
nhƣ Name, City, Phone, User, Email Address, Date Created. Ngoài ra mặc định
màn hình basic search thì sẽ search theo Name.
H nh 27: Giao diện màn h nh listview của module Account
CHƢƠNG 3: THIẾT KẾ HỆ THỐNG Page 63
Giao diện của màn hình EditView của module Account gồm các field để điền
thông tin cần thiết cho dự án.
H nh 28: Giao diện màn h nh editview của module Account
3.2. Module ManPower Cost
Giao diện của module Manpower Cost gồm các file nhƣ: Teams, Projects
Hour, Projects, Assign to và cuối cùng là Description với Teams và minutes đƣợc
thiết kế với dạng dropdown ( combo box), Projects và Assign to là dạng select cho
ta có thể chọn trực tiếp từ module Project và User.
H nh 29: Giao diện tạo mới Manpower Cost
CHƢƠNG 3: THIẾT KẾ HỆ THỐNG Page 64
3.3. Module Production cost actual
Giao diện tạo mới production cost actual đƣợc thiết kế đơn giản với các field
nhƣ: Title, Amount, Projects, Description với Projects đƣợc thiết kế select cho phép
chọn tới các project đƣợc tạo ở module Projects.
H nh 30: Giao diện tạo mới Prduction cost actual
3.4. Module Production cost estimation
Giao diện này đƣợc thiết kế tƣơng tự nhƣ module production cost actual vì 2
module này giống nhau về các files nhƣ : Title, Amount, Projects, Description với
Projects đƣợc thiết kế select cho phép chọn tới các project đƣợc tạo ở module
Projects.
H nh 31: Giao diện tạo mới Production cost Estimation
3.5. Module Projects
Module Project đƣợc thiết kế để lƣu giữ các thông tin cần lƣu trữ cho một dự
án của công ty các field bao gồm: Project Code, Project Name, Projects Manager,
Client, Start Date, End Date, Status, Description. Với Projects Manager và Client
đƣợc thiết kế dƣới dạng select cho phép chọn các user ở module User, Status đƣợc
CHƢƠNG 3: THIẾT KẾ HỆ THỐNG Page 65
thiết kế là các radio button để hiện thị trạng thái là Enable hay là Disable. Ngoài ra
Start Date, End Date là kiểu datetime, cho phép ngƣời dung chọn ngày để hiện thị ra
textbox.
H nh 32: Giao diện mới mới Projects
3.6. Module Revenues Estimation
Giao diện của Revenues Estimation đƣợc thiết kế để lƣu các chi phí trong một
hóa đơn dự tính gồm: Projects, Payment Status, Amount, Date, VAT Amount, Total
Amount, User và cuối cùng là Description. Projects,User tƣơng tự nhƣ các module
trƣớc đƣợc thiết kế với dạng select. Bên cạnh đó field Payment Status đƣợc thiết kế
là check box khi check vào thì sẽ là “Paid”, và kiểu Date là kiểu date time.
H nh 33: Giao diện tạo mới Revenues Estimation
3.7. Module Revenues Actual
Giao diện của Revenues Actual cũng đƣợc thiết kế tƣơng tƣ nhƣ module
Revenues Estimation gồm các field: Projects, Payment Status, Amount, Date, VAT
Amount, Total Amount, User và cuối cùng là Description. Projects,User tƣơng tự
nhƣ các module trƣớc đƣợc thiết kế với dạng select. Bên cạnh đó field Payment
Status đƣợc thiết kế là check box khi check vào thì sẽ là “Paid”, và kiểu Date là
CHƢƠNG 3: THIẾT KẾ HỆ THỐNG Page 66
kiểu date time. Bên cạnh đó điểm khác ở đây là Revenues Actual còn có them thuộc
tính Invoice Number để lƣu số hóa đơn.
H nh 34: Giao diện tạo mới Revenues Actual
3.8. Module Salary
Giao diện của module Salary đƣợc thiết kế để lƣu lƣơng của nhân viên vào
các tháng trong n m nên đƣợc thiết kế khá là đơn giản với các textbox để lƣu số tiền
lƣơng ứng với mỗi tháng và dropdown hiện thị n m hiện tại là n m 2012 trở đi.
H nh 35: Giao diện tạo mới Salary
CHƢƠNG 3: THIẾT KẾ HỆ THỐNG Page 67
3.9. Module Timesheets
Giao diện Timesheet đƣợc thiết kế thân thiện với ngƣời dùng với phần lịch
hiển thị các ngày trong tháng hiện tại, và trên lịch sẽ hiện thị ra đâu là ngày mình đã
xin nghỉ, đâu là ngày hiện tại. Với Project, Project task, minutes đƣợc thiết kế là các
dropdown. Các thông tin khi đƣợc nhập sẽ hiển thị bên dƣới phần Added entries.
H nh 36: Giao diện khi nhập Timesheets
3.10. Module Leaving
Module Leaving đƣợc thiết kế với ý tƣởng nhƣ module Timesheet cũng bao
gồm một phần lịch hiển thị các ngày trong tháng. Kiểu xin nghỉ gồm 2 radio button
là Full day và Half day, Reason đƣợc thể hiện qua dropdown để cố định các nguyên
nhân xin nghỉ, ngoài ra có phần Description để mô tả thêm.
H nh 37: Giao diện khi nhập Leaving
CHƢƠNG 3: THIẾT KẾ HỆ THỐNG Page 68
3.11. Module PublicDays
Module PublicDays đƣợc thiết kế với các thuộc tính Puclic Day là date time
để hiển thị ngày nghỉ mặc định của công ty cũng nhƣ các ngày nghỉ lễ phép, và User
đƣợc select đến module User.
H nh 38: Giao diện khi tạo mới Publicdays
3.12. Module Report
Module Report đƣợc thiết kế gồm danh sách các report cần phải xuất ra trong
hệ thống gồm: report estimate cost, report actual cost (MA), report actual cost (CR),
report profit and loss (CR), report profit and loss (MA), report revenues projection,
timesheet, timesheet report (%)
H nh 39: Giao diện các Report trong hệ thống
CHƢƠNG 3: THIẾT KẾ HỆ THỐNG Page 69
3.12.1. Report Estimate Cost
Giao diện report estimate cost đƣợc thiết kế để lƣu trữ các thông tin của dự
án đƣợc chọn trên dropdown, phía dƣới phần internal project man hour & cost
estimation gồm tên của các phòng ban số giờ dành cho phòng ban đƣợc thêm vào
dự án, cost per hours để hiển thị số tiền đƣợc cấp cho các phòng ban trên mỗi giờ
làm việc, và cuối cùng là amount để tính số tiền dự tính dành cho các phòng ban đó
trong bao nhiêu giờ. Phần production cost estimation để hiển thị các chi phí thực tế
nhƣ: tiếp khách, vé tàu..
H nh 40: Giao diện Report Estiamte Cost
3.12.2. Report Actual Cost (MA)
Thiết kế giao diện cho report actual cost (MA) về phần thông tin dự án thì
giống nhƣ report estimate cost, khác giữa phần báo cáo thực tế là sẽ có thêm person
incharge để hiển thị các nhân viên đƣợc thêm vào dự án của từng team, projected là
số giờ dự định của từng team, actual sẽ là số giờ thực tế của từng nhân viên đó làm,
phần cost per hours (VND) là số tiền đƣợc tính cho các nhân viên với từng giờ họ
làm đƣợc. Cuối cùng là amount để tính tổng tiền thực tế của từng nhân viên đối với
dự án đƣợc chọn trên dropdown. Revenues actual, revenues estimation đƣợc lấy dữ
CHƢƠNG 3: THIẾT KẾ HỆ THỐNG Page 70
liệu từ chính 2 module trên, revenues – cost (actual) sẽ lấy phần revenues actual trừ
cho production cost actual và manpower cost.
H nh 41: Giao diện Report Actual Cost (MA)
3.12.3. Report Actual Cost (CR)
Giao diện của report actual cost (CR) đƣợc thiết kế có những điểm giống và
khác nhau với report actual cost (MA) mục đích của module này là để hiển thị ra sự
chênh lệch số giờ giữa các nhân viên thuộc các team tham gia từ từng dự án.
H nh 42: Giao diện Report Actual Cost (CR)
CHƢƠNG 3: THIẾT KẾ HỆ THỐNG Page 71
3.12.4. Report Profit And Loss (CR)
Giao diện của report profit and loss gồm project đƣợc thiết kế là multiple để
cho phép có thể chọn cùng lúc nhiều project để xuất ra báo cáo, client là dropdown
chỉ đƣợc chọn khách hàng từ danh sách khách hàng. Start date và Endate là field
đƣợc thiết kế kiểu date time để lọc ngày bắt đầu và kết thúc mục đích liệt kế các
thông tin của dự án tồn tại trong khoảng thời gian đó.
H nh 43: Giao diện Report Profit And Loss (CR)
3.12.5. Report Profit And Loss (MA)
Phần thiết kế của report profit and loss (MA) về cơ bản cũng tƣơng tự nhƣ
report profit and loss (CR) gồm project đƣợc thế kế là multiple để cho phép có thể
chọn cùng lúc nhiều project để xuất ra báo cáo, client là dropdown chỉ đƣợc chọn
khách hàng từ danh sách khách hàng. Start date và Endate là field đƣợc thiết kế kiểu
date time để lọc ngày bắt đầu và kết thúc mục đích liệt kế các thông tin của dự án
tồn tại trong khoảng thời gian đó. Ngoài ra nó còn hiển thị thêm: Manpower cost,
production cost, margin.
CHƢƠNG 3: THIẾT KẾ HỆ THỐNG Page 72
H nh 44: Giao diện Report Profit And Loss (MA)
3.12.6. Report Revenues Projection
Giao diện Revenues Projection đƣợc thiết kế với các yêu cầu lọc đơn giản
gồm : Start date, end date, để lọc khoảng thời gian thực hiện các hóa đơn. Thông tin
của các hóa đơn sẽ đƣợc hiện thị gồm : Date, Invoice Number, Project Code, Client,
Description, Amount, VAT, Total Amount, Payment status. Các thông tin đó đƣợc
lấy hoàn toàn từ module Revenues Actual.
H nh 45: Giao diện Report Revenues Projection
3.12.7. Report timesheet
Report timesheet đƣợc thiết kế với nhiều tiêu chí để lọc dữ liệu gồm: 2 radio
button là by project và by employee khi chọn vào radio nào thì sẽ hiện ra danh sách
tƣơng ứng với project hay employee, dropdown month để hiện thị các tháng trong
n m. Khi chọn theo radio by project chọn một dự án mà không chọn employee nào
CHƢƠNG 3: THIẾT KẾ HỆ THỐNG Page 73
thì mặc định sẽ hiển thị ra hết các nhân viên trong dự án đó thời gian làm việc của
từng nhân viên. Khi chọn hiển thị theo Employee thì report sẽ hiện ra thông tin số
giờ làm việc của các nhân viên ứng với các dự án đã đƣợc lọc.
H nh 46: Giao diện Report Timesheet đƣợc lọc theo dự án
H nh 47: Giao diện Report Timesheet đƣợc lọc theo nhân viên
CHƢƠNG 3: THIẾT KẾ HỆ THỐNG Page 74
3.12.8. Report Timesheets (%)
Giao diện của report timesheet (%) đƣợc thiết kế với các tiêu chí lọc dự liệu
ít hơn report timesheets: employee (có thể chọn một hoặc nhiều nhân viên),
dropdown để hiển thị các tháng trong n m. Sau khi lọc dữ liệu xong, dữ liệu đƣợc
hiển thị lại và đƣợc tính phần tr m theo từng cột %.
H nh 48: Giao diện Report Tímesheet (%)
CHƢƠNG 4: XÂY DỰNG HỆ THỐNG THỰC TẾ CHO RED Page 75
CHƢƠNG 4: XÂY DỰNG HỆ THỐNG THỰC TẾ CHO RED
Dựa trên khảo sát và có đƣợc những thông tin cần thiết cần lƣu trữ cho hệ
thống bên công ty Red. Với những module có sẵn trong phần mềm mã nguồn mở
SugarCRM nhƣ: Account, Contact, Lead… thì chỉ có module Account có thể hỗ trợ
đƣợc cho hệ thống nên giữ lại và sẽ có những chỉnh sửa để đáp ứng đúng theo yêu
cầu bên phía Red, đối với các công việc còn lại phải xây dựng thêm các module:
Projects, Teams, Salary, Timesheets, Leaving, Reports, Production cost actual,
Revenues actual, Production cost estimation, Revenues estimation, publicdays
H nh 49: Màn h nh đăng nhập vào hệ thống
4.1. Module Account
Module Account là module có sẵn của SugarCRM, vì thế nó có nhiều thông
tin lƣu trữ không cần dùng đến khi áp dụng bên Red. Đầu tiên sử dụng công cụ
module builder để xây dựng các dữ liệu về khách hàng cần lƣu là: Name, Email,
Office phone, Fax, Billing Address... Ngoài ra phải bổ sung thêm field: business
type để xem nhƣng khách hàng đó thuộc kiểu kinh doanh gì, business type gồm:
Real Estate, FMCG, Education, Service, Others.
Cách tạo một drop down để lƣu trữ business type: vào đƣờng dẫn
CHƢƠNG 4: XÂY DỰNG HỆ THỐNG THỰC TẾ CHO RED Page 76
custom/include/language/en_us.lang.php
Đây là nơi để khai báo các app_list_strings, tiến hành thêm đoạn code
$GLOBALS['app_list_strings']['business_type_dom']=array (
'' =>'',
'Real Estate' => 'Real Estate',
'FMCG' => 'FMCG',
'Education' => 'Education',
'Service' => 'Service',
'Others' => 'Others',
);
Sau đó có thể dùng công cụ studio để tùy biến giao diện muốn hiển thị
H nh 50: Màn h nh edit account
4.2. Module Projects
Đầu tiên xây dựng module C_Project bằng công cụ module builder gồm các
field nhƣ: Project code, project name, start date, end date, project manager, client,
status, description. Lƣu ý các field đƣợc đánh dấu sao là các field bắt buộc phải
nhập. Project code phải xử lý không cho phép nhập trùng project code. End date
không đƣợc nhỏ hơn start date.
Jquery để xử lý việc kiểm tra project code không đƣợc trùng, end date không
đƣợc nhỏ hơn start date
CHƢƠNG 4: XÂY DỰNG HỆ THỐNG THỰC TẾ CHO RED Page 77
// Khoi tao ham validate rong. Ham nay phai nam ngoai, khong
duoc nam trong jQuery
function custom_validate(){}
function removeValidate(){}
// jQuery
$(document).ready(function(){
// Trang vua khoi dong thi gan nhung thuoc tinh sau
$('#end_date').parent().append('<div id="date_validator"
style="color: red;">');
$('#job_code').parent().append('<div id="code_validator"
style="color: red;">');
// Xoa bo trang thai thong bao validate sau 3.5s
removeValidate = function(){
$('#job_code').css('background-color', 'white');
$('#start_date').css('background-color', 'white');
$('#end_date').css('background-color', 'white');
}
// Xoa bo Project Code khi duplicate
if($('input[name=duplicateSave]').length>0){
if($('input[name=duplicateSave]').val()=='true'){
$('#job_code').val('');
}
}
// Khoa Project Code lai khi da ton tai (khong cho edit)
if($('input[name=record]').val() !=''){
$('#job_code').attr('readonly',true);
}
// Xoa bo trang thai validate ngay khi nguoi dung nhap
Project Code moi
$('#job_code').live('keyup', function(){
$('#code_validator').text('');
CHƢƠNG 4: XÂY DỰNG HỆ THỐNG THỰC TẾ CHO RED Page 78
Thêm đoạn Jquery vào đƣợc dẫn: custom/modules/C_project/js/editview.js
Muốn đƣa đƣợc Jquery màn hình edit view thì phải include Jquery vào đƣờng dẫn:
custom/modules/C_project/metadata/editviewdefs.php
Cấu trúc để include vào file editviewdefts.php
'includes' =>
array (
0 =>
array (
'file' => 'custom/include/javarscripts/jquery.js',
),
1 =>
array (
'file' =>
'custom/include/javarscripts/jquery.ui.min.js',
),
2 =>
array (
'file' =>
'custom/include/javarscripts/dateValidate.js',
),
3 =>
array (
'file' => 'custom/modules/C_project/js/editview.js',
),
),
CHƢƠNG 4: XÂY DỰNG HỆ THỐNG THỰC TẾ CHO RED Page 79
H nh 51: Màn h nh tạo mới Project
Khi điền các thông tin cần thiết cho project xong thì tại module project ngƣời
sử dụng có thể tạo các thông tin liên quan đến project, nhƣ thêm các nhân viên tham
gia vào dự án, điền các chi phí dự tính cho dự án, doanh thu dự kiến dành cho dự án
…..
CHƢƠNG 4: XÂY DỰNG HỆ THỐNG THỰC TẾ CHO RED Page 80
H nh 52: Màn h nh chi tiết các thông tin liên quan đến Project
CHƢƠNG 4: XÂY DỰNG HỆ THỐNG THỰC TẾ CHO RED Page 81
4.3. Module timesheets
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
4.4. Module Teams
Dựa trên những thiết kế về giao diện ban đầu thì module team sẽ đƣợc tạo ra
bằng cách dùng công cụ module builder để tạo ra các field name, cost per hour,
assigned to và description. Module này dùng để lƣu thông tin của các nhóm, sau khi
tạo thông tin về nhóm xong, thì cho phép thêm các nhân viên vào nhóm. Module
teams có mối quan hệ n-n với module user để có thể chọn các user vào team. Tuy
nhiên để cho đồng nhất code với hệ thống ta phải bỏ đi button create user ở
subpanel user. Cách bỏ button create ở subpanel là vào đƣờng dẫn:
custom/modules/C_derpartment/Ext/Layoutdefs/layoutdefs.ext.php
Trong file này ta có thể bỏ đi phần tạo button create
CHƢƠNG 4: XÂY DỰNG HỆ THỐNG THỰC TẾ CHO RED Page 85
Hàm xử lý cost_per_hour
$layout_defs["C_derpartment"]["subpanel_setup"]['users_c_derpar
tment'] = array (
'order' => 100,
'module' => 'Users',
'subpanel_name' => 'default',
'sort_order' => 'asc',
'sort_by' => 'id',
'title_key' => 'LBL_USERS_C_DERPARTMENT_FROM_USERS_TITLE',
'get_subpanel_data' => 'users_c_derpartment',
'top_buttons' =>
array (
1 =>
array (
'widget_class' => 'SubPanelTopSelectButton',
'mode' => 'MultiSelect',
),
),
);}
function checkForm(){
var thang1 = 0;
if($('#cost_per_hour').val() != ''){cost_per_hour =
unformatNumber($('#cost_per_hour').val(),num_grp_sep, dec_sep);
if(cost_per_hour > 0){
if(cost_per_hour<0 || isNaN(cost_per_hour)){
cost_per_hour=0;
}
$('#cost_per_hour').val(formatNumber(cost_per_hour,num_grp_sep,
dec_sep));
}else{
$('#cost_per_hour').val('');
}
}
}
CHƢƠNG 4: XÂY DỰNG HỆ THỐNG THỰC TẾ CHO RED Page 86
H nh 54: Màn h nh nhập team và xem các user đƣợc thêm vào team
4.5. Module salary
Module salary đƣợc tạo ra để đáp ứng việc lƣu và thay đổi lƣơng của các
nhân viên trong công ty, module đƣợc thiết kế đơn giản để nhân viên kế toán có thể
nhập lƣơng của từng nhân viên trong từng tháng của n m. Module này đƣợc tạo ra
và chỉ duy nhất có nhân viên kế toán mới có quyền vào module này. Đầu tiên ngƣời
phát triển cần phải sử dụng module builder để tạo module C_Salary gồm các field là
12 tháng trong n m, và một dropdown là year để chƣa n m cấp lƣơng cho nhân viên
trong hệ thống. Khi đã tạo đầy đủ các field cho module salary thì ngƣời phát triển sẽ
tiến hành deloy để đƣa module C_Salary vào hệ thống. Khi module salary đƣợc đƣa
vào hệ thống, ngƣời phát triển sẽ tiến hành dùng Jquery để format lại tiền lƣơng ứng
với từng tháng dành cho nhân viên. Tạo một file script.js và đƣa vào đƣờng dẫn:
custom/modules/C_Salary/js/script.js
Hàm bên dƣới sẽ giúp cho nhân viên kế toán khi nhập tháng lƣơng của tháng 1 của
nhân viên thì các tháng còn lại sẽ tự động đƣợc nhập mức lƣơng đó cho các tháng
còn lại trong n m.
CHƢƠNG 4: XÂY DỰNG HỆ THỐNG THỰC TẾ CHO RED Page 87
function checkForm(){
var thang1 = 0,thang2 = 0,thang3 = 0,thang4 = 0,thang5
= 0,thang6 = 0,thang7 = 0,thang8 = 0,thang9 = 0,thang10 =
0,thang11 = 0,thang12 = 0;
if($('#thang1').val() != ''){
thang1 =
unformatNumber($('#thang1').val(),num_grp_sep, dec_sep);
if(thang1 > 0){
if(thang1<0 || isNaN(thang1)){
thang1=0;
}
$('#thang1').val(formatNumber(thang1,num_grp_sep,
dec_sep));
$('#thang2').val(thang1);
$('#thang3').val(thang1);
$('#thang4').val(thang1);
$('#thang5').val(thang1);
$('#thang6').val(thang1);
$('#thang7').val(thang1);
$('#thang8').val(thang1);
$('#thang9').val(thang1);
$('#thang10').val(thang1);
$('#thang11').val(thang1);
$('#thang12').val(thang1);
}else{
$('#thang1').val('');
}
}
}
CHƢƠNG 4: XÂY DỰNG HỆ THỐNG THỰC TẾ CHO RED Page 88
Hàm xử lý tháng lƣơng các tháng còn lại, khi nhân viên kế toán tiến hành cập
nhật lƣơng cho các tháng tiếp theo.
Hàm đƣợc dùng để cho hệ thống chỉ chấp nhận cho riêng nhân viên kế toán
có id là 41be42b0-4a52-2e77-e911-4fa350386d9b đƣợc truy cập vào module salary,
và admin cũng không truy cập đƣợc vào module này. Hàm này đƣợc đặt trong
đƣờng dẫn: modules/C_Salary/C_Salary.php
if($('#thang2').val() != ''){
thang2 =
unformatNumber($('#thang2').val(),num_grp_sep, dec_sep);
if(thang2 > 0){
if(thang2<0 || isNaN(thang2)){
thang2=0;
}
$('#thang2').val(formatNumber(thang2,num_grp_sep,
dec_sep));
}else{
$('#thang2').val('');
}
}
function deny(){
global $current_user;
if($_GET['module'] == 'C_Salary'){
if($current_user->id != '41be42b0-4a52-2e77-e911-
4fa350386d9b'){
header('Location:
index.php?module=Home&warning=1');
}
}
}
CHƢƠNG 4: XÂY DỰNG HỆ THỐNG THỰC TẾ CHO RED Page 89
H nh 55: Màn h nh Salary
4.6. Module report
Module report đƣợc tạo ra để cho phép ngƣời quản lý và nhân viên kế toán
có thể lọc dữ liệu theo các dự án và xuất các thông tin ra file excel. Module report
đƣợc tạo ra có phần khác với các module nhƣ salary hay project. Đầu tiên ngƣời
phát triển sẽ dùng module để tạo ra module C_Report mà không có bất kì field nào
và deloy để đƣa module vào hệ thống. Khi module đã đƣợc đƣa vào hệ thống ngƣời
phát triển sẽ tiến hành tạo giao diện cho cho màn hình danh sách các report bằng
các thẻ HTML. Với các thẻ HTML sẽ tạo ra một table gồm nhiều dòng, và mỗi
dòng ứng với 1 đƣờng link dẫn đến giao diện của từng report tƣơng ứng. Code
HTML đƣợc tạo trong đƣờng dẫn: custom/modules/C_Report/views/view.list.php
Tƣơng tự ngƣời phát triển cũng có thể dựa vào các thẻ đó để tạo ra các
đƣờng link liên kết đến các report chi tiết.
CHƢƠNG 4: XÂY DỰNG HỆ THỐNG THỰC TẾ CHO RED Page 90
Khi đã tạo ra đƣợc giao diện danh sách các report, ngƣời phát triển tiến hành
tạo ra file action_view_map.php nằm trong đƣờng dẫn custom/modules/C_Report/
<table border="0" cellpadding="0" cellspacing="0" width="100%"
class="h3Row">
<img
src="include/images/blank.gif"
alt="spacer" width="10" height="2"
border="0"><img
src="include/images/blank.gif"
alt="spacer" width="10" height="2"
border="0">
<table border="0" cellpadding="0" cellspacing="1"
width="100%" class="h3Row">
<td class="tabDetailViewDF" nowrap="nowrap"
width="20%"><img src="themes/default/images/yellow_camp.gif"
width='16' height='16' alt="" border="0" align="absmiddle" />
<a href=" <?php echo
"./index.php?module=".$currentModule."&action=reportestimatecos
t"; ?>"<?php echo
$mod_strings['LBL_REPORT_ESTIMATE_COST'];
?>
<td class="tabDetailViewDL"
width="30%">
<?php
$action_view_map = array(
'editview' => 'list',
'detailview' => 'list',
'reportestimatecost'
=>'reportestimatecost',
);
?>
CHƢƠNG 4: XÂY DỰNG HỆ THỐNG THỰC TẾ CHO RED Page 91
H nh 56: Màn h nh danh sách các report
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 ngoài màn hình.
CHƢƠNG 4: XÂY DỰNG HỆ THỐNG THỰC TẾ CHO RED Page 92
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")
;
}
CHƢƠNG 4: XÂY DỰNG HỆ THỐNG THỰC TẾ CHO RED Page 93
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
$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.'"';
CHƢƠNG 4: XÂY DỰNG HỆ THỐNG THỰC TẾ CHO RED Page 94
Câu truy vấn để lấy lên Manpower cost
H nh 57: Màn h nh Report estimate cost
$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 95
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");
}
CHƢƠNG 4: XÂY DỰNG HỆ THỐNG THỰC TẾ CHO RED Page 96
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
<form action="index.php" id="frmForm" name="frmForm"
method="post">
<table cellpadding="0" cellspacing="0" width="100%"
border="0" style="border-collapse: collapse;">
<input type="hidden" name="module"
value="C_Report"/>
<input type="hidden" name="action"
value="reportactualcost" />
<h3 align="center"
style="text-transform:
uppercase;">{$MOD.LBL_REPORT_ACTUAL_COST}
<td
class="dataLabel">{$MOD.LBL_SELECT_PROJECT}
<select name="project_id" id="project_id"
size="1">{$PROJECT_ID} <input
type="submit" name="submit" id="submit"
value="{$MOD.LBL_BUTTON_REPORT}">
{$RESULT}
CHƢƠNG 4: XÂY DỰNG HỆ THỐNG THỰC TẾ CHO RED Page 97
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
{$RESULT}
{$RESULT}
$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
CHƢƠNG 4: XÂY DỰNG HỆ THỐNG THỰC TẾ CHO RED Page 98
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 99
Câu truy vấn để lấy các chi phí bên ngoài thực tế (Production cost actual)
H nh 58: Màn h nh Report Actual cost
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="'.$project_id.'"';
CHƢƠNG 4: XÂY DỰNG HỆ THỐNG THỰC TẾ CHO RED Page 100
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 để
đƣ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
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'];
}
}
CHƢƠNG 4: XÂY DỰNG HỆ THỐNG THỰC TẾ CHO RED Page 101
Hàm để nối giờ với phút lại với nhau.
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
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;
}
function update_name(&$bean,$event,$arguments){
$department = new C_derpartment();
$department->retrieve($bean-
>c_derpartm5b51artment_ida);
$bean->name = $department->name;
}
CHƢƠNG 4: XÂY DỰNG HỆ THỐNG THỰC TẾ CHO RED Page 102
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
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
CHƢƠNG 4: XÂY DỰNG HỆ THỐNG THỰC TẾ CHO RED Page 103
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
Từ những kết quả trên ta có đƣợc biểu đồ khảo sát hệ thống nhƣ sau:
Mức độ dễ
sử dụng
giao diện
Tốc độ xử lý
yêu cầu
Hệ thống chạy
ổn định và đưa
ra kết quả c ính
xác
Giải quyết
những vấn đề
gặp phải trước
đây
Các dữ liệu
cần lưu trữ của
hệ thống
4
3
2
1
0
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 Page 104
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.
Thiết kế đơn giản hơn để ngƣời sử dụng có thể dễ dàng làm việc.
TÀI LIỆU THAM KHẢO Page 105
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]
oper_Guide_6.4 Truy cập ngày 15/04/2012
[4]
17.html, 10:00 ngày 15/03/2012
.
PHỤ LỤC Page 106
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:
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
PHỤ LỤC Page 107
Listen 81
Và
ServerName localhost:81
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õ
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 108
PHỤ LỤC Page 109
B4: chép source của phần mềm vào thƣ mục htdocs của XAMPP
PHỤ LỤC Page 110
B5: tạo database MySQL cho phần mềm
Mở PhpMyadmin lên: (81 là port Apache sau khi
cấu hình xong)
PHỤ LỤC Page 111
Sau đó import file script database vào database vừa tạo
B6: cấu hình ứng dụng
Vào đƣờng dẫn : D:\xampp\htdocs\sugarcrm
PHỤ LỤC Page 112
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 113
B7: truy cập vào ứng dụng
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)
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
(Anh/Chị vui lòng khoanh tròn câu trả lời tƣơng ứng cho từng câu hỏi sau)
PHỤ LỤC Page 114
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 đủ)
1 2 3 4
Các file đính kèm theo tài liệu này:
- bao_cao_khoa_luan_tot_nghiep_trien_khai_crm_thuc_te_6803.pdf