Ông Thomas Watson, Jr, nghuyên chủ tịch của công ty IBM đã từng nói:”Toàn bộ giá trị của công ty này nằm trong đội ngữ nhân viên và những tệp dữ liệu. Dù tất cả các nhà cửa, văn phòng của công ty bị cháy trụi nhưng vẫn giữ được những con người và những tệp dữ liệu thì chẳng bao lâu chúng ta sẽ lại trở nên hùng mạnh như xưa”.
Một cơ quan bị mất trí nhớ thì sẽ không thể tồn tại được. Hãy thử tưởng tượng xem điều gì sẽ xảy ra nếu một công ty phần mềm máy tính đã mất hết những chương trình nguồn mà họ đã lập ra. Các cơ quan phải có trí nhớ, đó là những kho dữ liệu lưu trữ hàng tỷ những điều chi tiết cần thiết cho quá trình kinh doanh và ra quyết định. Nói rằng: ”Dữ liệu của một công ty hay tổ chức có vai trò sống còn: là điều khẳng định không hề quá một chút nào.”
• Một số khái niệm về cơ sở dữ liệu (cơ sở dữ liệu):
- Mỗi bảng (Table) ghi chép dữ liệu về một nhóm phần tử nào đó gọi là thực thể (Entity).
- Mỗi thực thể đều có những đặc điểm riêng mà ta gọi đó là thuộc tính. Mỗi thuộc tính là một yếu tố dữ liệu tách biịet, thường không chia nhỏ được nữa. Các thuộc tính góp phần mô tả thực thể và là những dữ liệu về thực thể mà ta muốn lưu trữ.
- Mỗi bảng có những dòng (Row). Mỗi dòng còn được gọi là một bản ghi (Record) bởi vì nó ghi chép dữ liệu về một cá thể (Instante) tức là một biểu hiện riêng của thực thể.
110 trang |
Chia sẻ: oanh_nt | Lượt xem: 1505 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Luận văn Xây dựng phần mềm quản trị quan hệ khách hàng tại công ty công nghệ tin học Tinh Vân, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
ngữ cảnh
Hình 3.7 Sơ đồ DFD ngữ cảnh của hệ thống quản trị quan hệ khách hàng tại công ty công nghệ tin học Tinh Vân
3.3.2.Sơ đồ DFD mức 0
Hình 3.8 Sơ đồ DFD mức 0 của hệ thống quản trị quan hệ khách hàng
tại công ty công nghệ tin học Tinh Vân
3.4. Sơ đồ luồng thông tin
Sơ đồ luồng thông tin được dung để môt tả hệ thống theo cách thức động. Tức là mô tả sự di chuyển của dữ liệu, việc xử lý trong thế giới vật lý bằng các sơ đồ. Ta có sơ đồ luồng thông tin của hệ thống quản trị quan hệ khách hàng
Hình 3.9 Sơ đồ luồng thông tin của hệ thống quản trị quan hệ khách hàng tại công ty công nghệ tin học Tinh Vân
3.5. Thiết kế cơ sở dữ liệu
3.5.1.Hệ quản trị cơ sở dữ liệu cho bài toán
Sau khi tìm hiểu nghiệp vụ bài toán, căn cứ vào nhu cầu của bài toán và sự hiểu biết của bản than về hệ quản trị cơ sở dữ liệu SQL Server 2000. Em đã quyết định chọn hệ quản trị cơ sở dữ liệu SQL Server làm cơ sở để thực hiện giải pháp. Vậy tại sao lại chọn SQL Server 2000? Ta hãy xem xét sơ lược các tính năng mà SQL Server đem lại hiệu quả khi thực hiện bài toán
3.5.1.1.SQL Server 2000 là gì?
SQL Server 2000 là hệ quản trị cơ sở dữ liệu Client/Server:
- Client là một thành phần của hệ thống yêu cầu dịch vụ hoặc tài nguyên từ những thành phần hệ thống khác.
- Server là một thành phần của hệ thống cung cấp các dịch vụ hoặc tài nguyên cho những thành phần hệ thống khác.
SQL Server hỗ trợ việc truy nhập thông qua mạng máy tính. Sự truy nhập này có thể thông qua các ứng dụng từ phía Client như: ứng dụng Client/Server; COM, DCOM, Web…
3.5.1.2.Hỗ trợ ngôn ngữ Transaction SQL(T-SQL)
T-SQL là một phiên bản của SQL, nó cũng là một ngôn ngữ lập trình và truy vấn cơ sở dữ liệu, Với T-SQL ta có thể truy vấn, cập nhật dữ liệu, thiết lập, bảo trì, lập trình…rất hiệu quả.
3.5.1.3.Quy mô dữ liệu
- Cho phép tạo 2 tỉ bảng / 1 CSDL.
- Cho phép tạo 1024 cột (trường)/ 1 bảng.
- Cho phép tạo 8060 byte / 1 hàng (các kiểu dữ liệu text, image mỗi kiểu dùng 16 byte / 1 hàng).
3.5.1.4.ADO.NET hỗ trợ Provider để lập trình với SQL server
Do công nghệ ADO.NET(ActiveX Data Object) và SQL server đều là các sản phẩm của Microsoft nên giữa hai công nghệ có sự tương tác rất ổn định và có khả năng hỗ trợ nhau khi các sản phẩm này được nâng cấp qua các phiên bản.
ADO.NET là một lớp trong Visual Studio.NET, chúng chia ra làm hai loại, lớp kết nối hay còn gọi Connected Layer và lớp không kết nối hay còn gọi là Dísconnected Layer, với hai lớp này chúng ta có thể kết nối và thao tác trên các loại cơ sở dữ liệu như SQL Server, MýQL, MS Access, Oracle và cơ sở dữ liệu phân cấp khác.
Lớp kết nối là trình điều khiển kết nối cơ sở dữ liệu (Data Provider), có nghĩa là chúng ta phải sử dụng .NET Data Provider hỗ trợ cho cơ sở sữ liệu đã chọn. Trong khi đó lớp không kết nối sử dụng .NET Data Provider tùy ý, thực chất .NET Data Provider bao gồm 4 lớp sau:
- Connection: lớp kết nối cơ sở dữ liệu.
- DataAdapter: lớp chứa dữ liệu.
- Command: lớp chứa lệnh.
- DataReader: lớp đọc dữ liệu một chiều.
Trong khi mục đích của những lớp kết nối là cho phép chúng ta truy vấn dữ liệu (SELECT) và thao tác (DELETE, INSERT, UPDATE) đến dữ liệu nguồn. Ngược lại, lớp không kết nối cho phép chúng ta thao tác trên dữ liệu tạm thời, hay dữ liệu mà có thể đọc hay ghi ra luông XML hay tệp tin.
3.5.1.5.Stored Procedure và Trigger
* Stored Procedure: là tập hợp các câu lệnh T-SQL được lưu trữ trên Server. Đây là phương thức đóng gói các nhiệm vụ lặp lại giống nhau để có thể tiết kiệm mã, thời gian lập trình. Ưu điểm của Stored Procedure bao gồm:
- Chia sẻ ứng dụng logic(Share Application Logic) với các ứng dụng khác bằng cách nhất quán sự truy nhập và sửa chữa dữ liệu. Stored Procedure có thể đóng gói các chức năng nghiệp vụ, quy tắc nghiệp vụ hoặc các hành động. Khi đó việc thay đổi Stored Procedure chỉ ở một nơi thì các ứng dụng dùng chung sẽ nhất quán thay đổi theo.
- Che chắn chi tiết lược đồ Database (Shield DB Schema Details): không cho phép người sử dụng xem chi tiết nội dung, cấu trúc của bảng. Nếu tập hợp các Stored Procedure cung cấp đủ các quy tắc, chức năng nghiệp vụcho việc thực hiện thì người sử dụng sẽ không phải truy nhập trực tiếp đến bảng.
- Cung cấp cơ chế bảo mật (Provide Sercurity Mechanims): có thể cho phép User thực hiện một Stored Procedure thậm chí khi user đó không có quyền truy nhập tới các bảng hoặc View mà Stored Procedure trỏ tới.
- Cải tiến hiệu xuất thực hiện (Improve Performance): Stored Procedure có thể thực hiện rất nhiều công việc bằng các khối câu lệnh T-SQL, do đó khi thực hiện Stored Procedure sẽ cho kết quả nhanh hơn so vớ thực hiện riêng lẻ các câu lệnh đó.
- Giảm thiểu lưu thông trên mạng (Redure Network Traffic): thay vì phải gửi hàng trăm câu lệnh từ Client lên Server, user có thể đóng gói các câu lệnh này vào trong một Stored Procedure rồi thực hiện. Khi đó, việc lưu thông trên mạng sẽ giảm thiểu một cách tối đa.
* Trigger: là một dạng đặc biệt của Stored Procedure được tự động thực hiện khi user thực hiện thêm, sửa, xoá các bản ghi của bảng mà Trigger liên kết. Các đặc trưng của Trigger gồm:
- Trigger đượcliên kết với một bảng.
- Được tự động thực hiện khi user thực hiện thêm, sửa, xoá dữ liệu trên bảng.
- Không được gọi một cách trực tiếp như Stored Procedure.
- Là một phần của Transaction: Trigger có thể gọi lệnh ROLLBACK TRANSACTION thậm chí ngay cả khi không có lệnh BEGIN TRANSACTION trong Trigger.
3.5.1.6.Job Scheduling
Cho phép đặt lịch thực hiện các tác vụ, các Stored Procedure hoặc các câu lện T-SQL theo thời gian
3.5.1.7. User – Defined Function
Ta có thể định nghĩa các hàm để sử dụng trong các xử lý nghiệp vụ thông qua Stored Procedure mà không phụ thuộc váo các Built-in function.
3.5.1.8.Hỗ trợ lập trình thông qua nhiều Server
Điều này thật hữu ích và là điều kiện tiên quyết để có thể xây dựng một ứng dụng có cơ sở dữ liệu phân tán. Nhờ đặc điểm này mà ta có thể:
- Viết những câu lệnh SQL đặc biệt để truy nhập dữ liệu được lưu trữ trên Microsoft Server 2000 từ xa hay một nguồn dữ liệu thông qua OLE DB.
- Tạo môi trường lien kết các SQL Server hay OLE DB.
- Thực hiện truy vấn trên SQL Server liên kết.
- Thực hiện một Stored Procedure trên một server từ xa hoặc một server liên kết.
- Quản lý nghiệp vụ phân tán.
- Sử dụng Distributed Transactions để sửa đổi sữ liệu phân tán.
3.5.1.9.Tính bảo mật cần thiết
Các mức bảo mật (Level of Sercurity): có 4 mức cấp độ bảo mật:
- Hệ điều hành: để kết nối với hệ phục vụ, một người dùng cần xem xét tỉ mỉ vài kiểu đăng nhập hệ điều hành nhằm truy cập hẹ thống hợp lệ.
- SQL Server: để kết nối SQL Server, người dùng cần phải có đăng nhập SQL hợp lệ.
- Database: để truy xuất cơ sở dữ liệu người dùng phải được cấp quyền trên cơ sở dữ liệu đó.
- Đối tượng (Table, View, Stored Procedure):muốn truy cập một đối tượng trong cơ sở dữ liệu người dùng phải được cấp quyền trên đối tượng đó.
Phân cấp tính bảo mật (Sercurity Hỉeachy): trong hệ phân cấp có 4 kiểu người dùng: quản trị viên hệ thống (SA), sở hữu chủ cơ sở dữ liệu (DBO), sở hữu chr đối tượng cơ sở dữ liệu (DBOO) và các người dùng khác.
Quyền (Permision)
+ Quyền đối tượng (Object Permission): điều khiển việc truy cập và thao tác dữ liệu trên các đối tượng trong SQL Server. Khi ban muốn thực hiện một hành động trên một đối tượng, bạn phải có quyền thích hợp. Ví dụ: bạn muốn select * from table 1 thì bạn phảo có quyền select đối với bảng đó.
Phân loại quyền đối tượng
Kiểu đối tượng
Hành động cụ thể
Table
Column
View
Stored Procedure
Select, Update, Delete, Insert, Reference.
Select, Update.
Select, Update, Insert, Delete.
Execute.
+ Quyền điều lệnh (Statement Permission): điều khiển việc những ai có thể xoá và tạo các đối tượng trong một có sở dữ liệu. Chỉ có SA và DBO mới có thể quản lý các quyền điều lệnh.
Sau khi xem xét các tính năng của SQL Server 2000, ta tiến hành thiết kế cơ sở dữ liệu trên SQL Server 2000.
3.5.2. Thiết kế cơ sở dữ liệu bằng phương pháp mô hình hóa
Coi mỗi khách hàng là một đơn vị quản lý. Trong mỗi khách hàng có các trường thuộc tính về khách hàng, các giao dịch,hoạt động chăm sóc khách hàng và các thông tin hỗ trợ cần thiết. Mỗi giao dịch có các thông tin liên quan đến dự án đó như: hợp đồng, kết quả cuộc gặp, ngày bắt đầu, ngày kết thúc, chi phí, tiến độ, tình trạng giao dịch…
3.5.3. Các bảng và mối quan hệ giữa các bảng trong cơ sơ dữ liệu
* Sơ đồ quan hệ giữa các bảng trong cơ sở dữ liệu:
Bảng khách hàng (Customer)
Tên trường
Kiểu dữ liệu
Độ rộng
Mô tả
CustomerID
Int
4
Mã khách hàng
CompanyName
Nvarchar
200
Tên công ty
CompanyLogo
Image
16
Logo của công ty
EstablishDate
SmallDatetime
4
Năm thành lập
WebSiteUrl
Nvarchar
50
Địa chỉ website
MajorBusiness
Nvarchar
200
Lĩnh vực kinh doanh
Address
Nvarchar
200
Địa chỉ liên hệ
TelNo
Nvarchar
50
Số điện thoại
FaxNo
Nvarchar
50
Số fax
Email
Nvarchar
50
Địa chỉ email
CityID
SmallInt
2
Mã thành phố
CEOName
Nvarchar
50
Giám đốc công ty
EmployeeNo
TinyInt
1
Số lượng nhân viên
CreatedDate
SmallDatetime
4
Ngày cập nhật thông tin
ModifiedDate
SmallDatetime
4
Ngày sửa thông tin
CategoryID
TinyInt
1
Mã nhóm khách hàng
IndustryID
Int
4
Mã ngành
BankName
Nvarchar
50
Tên ngân hàng
BankAcctNo
Nvarchar
50
Số tài khoản tại ngân hàng
Description
Nvarchar
500
Mô tả chung
TaxNo
Nvarchar
50
Mã số thuế
Bảng các mối quan hệ (Contact)
Tên trường
Kiểu dữ liệu
Độ rộng
Mô tả
ContactID
Int
4
Mã người liên hệ
CustomerID
Nvarchar
4
Mã khách hàng
ContactName
Nvarchar
50
Tên người liên hệ
ContactPosition
Varchar
50
Vị trí làm việc
ContactEmail
Varchar
50
Địa chỉ email
ContactPhone
Varchar
20
Số điện thoại
ContactAddress
Nvarchar
50
Địa chỉ
Department
Nvarchar
50
Bộ phận
CreatedDate
SmallDatetime
4
Ngày tạo ra quan hệ
ModifiedDate
SmallDatetime
4
Ngày sửa
BirthDate
SmallDatetime
4
Ngày sinh
Sex
Char
1
Giới tính
Hobby
Nvarcahr
50
Sở thích
Bảng các thông tin thêm về khách hàng (Customer Extention)
Tên trường
Kiểu dữ liệu
Độ rộng
Mô tả
ExtensionID
Int
4
Mã thông tin mở rộng
ExtentionName
Nvarchar
50
Tên thông tin mở rộng
Description
Nvarchar
1000
Mô tả chung
Priority
Smallint
2
CustomerID
Int
4
Mã khách hàng
Bảng nhóm khách hàng (CustomerCategory)
Tên trường
Kiểu dữ liệu
Độ rộng
Mô tả
CusCategoryID
Tiny
1
Mã nhóm khách hàng
CusCategory
Nvarchar
50
Tên nhóm khách hàng
Bảng giao dịch (Deal)
Tên trường
Kiểu dữ liệu
Độ rộng
Mô tả
DealID
Int
4
Mã giao dịch
DealName
Nvarchar
50
Tên giao dịch
ContactID
Int
4
Mã người liên hệ
StartDate
SmallDatetime
4
Ngày bắt dầu
CloseDate
SmallDatetime
4
Ngày kết thúc
Probability
Varchar
12
Cơ hội thành công
Description
Nvarchar
1000
Mô tả chung
Status
Char
2
trạng thái giao dịch
DealTypeID
Int
4
Mã nhóm giao dịch
Value
Varchar
12
Giá trị giao dịch
Bảng tài liệu giao dịch (Document)
Tên trường
Kiểu dữ liệu
Độ rộng
Mô tả
DocumentID
Int
4
Mã tài liệu giao dịch
DocumentDesc
Nvarchar
100
Mô tả chung
DocumentName
Nvarchar
50
Tên tài liệu
DocumentFileName
Nvarchar
50
Tên tệp tài liệu
DocumentContent
Image
16
Hìh ảnh tài liệu
DealID
Int
4
Mã giao dịch
CaseID
Int
4
Mã nghiệp vụ chăm sóc
Bảng các hoạt động giao dịch (FollowUp)
Tên trường
Kiểu dữ liệu
Độ rộng
Mô tả
FollowUpID
BigInt
8
Mã hoạt động giao dịch
FollowUpTypeID
TinyInt
1
Mã nhóm
FollowUpDate
SmallDatetime
4
Ngày xảy ra hoạt động
FollowUpTime
Varchar
10
giờ xảy ra hoạt động
Note
Nvarchar
50
Ghi chú
EmployeeID
SmallInt
2
Mã nhân viên
Status
Bit
1
trạng thái hoạt động
DealID
Int
4
Mã giao dịch
CaseID
Int
4
Mã chăm sóc khách hàng
Bảng chăm sóc, hỗ trợ khách hàng (Case)
Tên trường
Kiểu dữ liệu
Độ rộng
Mô tả
CaseID
Int
4
Mã chăm sóc khách hàng
CaseName
Nvarchar
50
Tên nghiệp vụ
Description
Nvarchar
100
Mô tả chung
Status
Bit
1
trạng thái hỗ trợ
CloseDate
SmallDatetime
4
Ngày hoàn thành
ContactID
Int
4
Mã người liên hệ
Bảng nhân viên (Employee)
Tên trường
Kiểu dữ liệu
Độ rộng
Mô tả
EmployeeID
SmallInt
2
Mã nhân viên
EmployeeName
Nvarchar
50
Tên nhân viên
DivisionID
TinyInt
1
Mã phòng ban
Email
Varchar
50
Địa chỉ email
Manager
SmallInt
2
Người quản lý
Bảng phòng ban (Division)
Tên trường
Kiểu dữ liệu
Độ rộng
Mô tả
DivisionID
TinyInt
1
Mã phòng ban
DivisionName
Nvarchar
50
Tên phòng ban
Bảng người dùng (User)
Tên trường
Kiểu dữ liệu
Độ rộng
Mô tả
UserID
SmallInt
2
Mã người sử dụng
UserName
Varchar
20
Tên người sử dụng
Password
Varchar
20
Mật khẩu
Active
Bit
1
Hoạt động
EmployeeID
SmallInt
2
Mã nhân viên
Bảng công việc (Task)
Tên trường
Kiểu dữ liệu
Độ rộng
Mô tả
TaskID
SmallInt
2
Mã công việc
Task_Title
Nvarchar
255
Tiêu đêd của công việc
Task_Content
Nvarchar
2000
Nội dung công viêc
Task_Date
SmallDatetime
4
Ngày thực hiện
Task_Time
Nvarchar
50
Giờ thực hiện
Task_Customer
Nvarchar
50
Công việc cho khách hàng nào
UserID
SmallInt
2
Mã người sử dụng
Bảng nhân viên - chăm sóc khách hàng (CaseEmployee)
Tên trường
Kiểu dữ liệu
Độ rộng
Mô tả
CaseID
Int
4
Mã nghiệp vụ chăm sóc
EmployeeID
SmallInt
2
Mã nhân viên
Bảng nhân viên - khách hàng (CustomerEmployee)
Tên trường
Kiểu dữ liệu
Độ rộng
Mô tả
CustomerID
Int
4
Mã khách hàng
EmployeeID
SmallInt
2
Mã nhân viên
Bảng nhân viên – giao dịch (DealEmployee)
Tên trường
Kiểu dữ liệu
Độ rộng
Mô tả
DealID
Int
4
Mã giao dịch
EmployeeID
SmallInt
2
Mã nhân viên
Bảng nhóm giao dịch (DealType)
Tên trường
Kiểu dữ liệu
Độ rộng
Mô tả
DealTypeID
Int
4
Mã nhóm giao dịch
DealType
Nvarchar
100
Tên nhóm giao dịch
Bảng danh mục thành phố (City)
Tên trường
Kiểu dữ liệu
Độ rộng
Mô tả
CityID
SmallInt
2
Mã thành phố của khách hàng
Cityname
Nvarchar
50
Tên thành phố
Bảng nhóm hoạt động giao dịch (FollowUpType)
Tên trường
Kiểu dữ liệu
Độ rộng
Mô tả
FollowUpTypeID
TinyInt
1
Mã nhóm hoạt động giao dịch
FollowUpType
Nvarchar
50
Tên nhóm hoạt động giao dịch
Bảng ngành hoạt động của khách hàng (Industry)
Tên trường
Kiểu dữ liệu
Độ rộng
Mô tả
IndustryID
Int
4
Mã ngành
IndustryName
Nvarchar
50
Tên ngành
Bảng số nhân viên trong công ty khách hàng (EmployeeNo)
Tên trường
Kiểu dữ liệu
Độ rộng
Mô tả
EmployeeNoID
TinyInt
1
Mã
EmployeeNo
Nvarchar
50
Số nhân viên
Bảng danh mục quyền (Roles)
Tên trường
Kiểu dữ liệu
Độ rộng
Mô tả
RoleID
TinyInt
1
Mã quyền
RoleName
Nvarchar
50
Tên quyền
Bảng chức năng (Functions)
Tên trường
Kiểu dữ liệu
Độ rộng
Mô tả
FunctionID
SmallInt
2
Mã chức năng
ObjectName
Nvarchar
50
Tên đối tượng
Description
Nvarchar
50
Mô tả chung
URLIcon
Varchar
150
Đường dẫn Icon
Bảng quyền - người sử dụng (UserRoles)
Tên trường
Kiểu dữ liệu
Độ rộng
Mô tả
UserID
SmallInt
2
Mã người dùng
RoleID
TinyInt
1
Mã quyền
Bảng quyền - chức năng (Authorization)
Tên trường
Kiểu dữ liệu
Độ rộng
Mô tả
RoleID
TinyInt
1
Mã quyền
FunctionID
SmallInt
2
Mã chức năng
3.6.Thiết kế giải thuật
Trong các bước mô tả và phân tích công việc ở trên giúp chúng ta hình dung các công việc xử lý khi xây dựng các chức năng của chương trình. Tuy nhiên, để thuận tiện cho việc thiết kế các bước xử lý cũng như viết chương trình chúng ta nên xây dựng giải thuật xử lý các công việc chính, phức tạp.
Dưới đây là các ký hiệu thường dùng trong thiết kế giải thuật:
- Khối đầu:
- Khối thao tác:
- Khối kiểm tra:
- Khối nhập/Xuất thông tin:
- Đường mũi tên dùng để chỉ trình tự các bước cần thực hiện trong thuật toán:
- Khối kết thúc:
Thuật toán đăng nhập vào chương trình:
Thuật toán thêm bản ghi vào các bảng:
Thuật toán tìm kiếm
Thuật toán lên báo cáo:
Một số giao diện
Màn hình đăng nhập
Bạn phải nhập tên và mật khẩu những thông tin này do người có quyền cao nhất đưa cho bạn. Sau khi đăng nhập thành công bạn sẽ vào được giao diện sau:
Có hai loại người dùng của hệ thống quản trị quan hệ khách hàng:
- Quản trị :(quyền sử dụng cao nhất ) người có quyền sử dụng mọi tính năng của hệ thống.
- Nhân viên thông thường: chỉ được sử dụng hạn chế trên một số tính năng thông thường.
* Quản lý người sử dụng
Ý nghĩa : của các nút : Tạo mới, Lưu lại, Xóa Tạo mới: tạo mới hoàn toàn một đối tuợng người dung.
Lưu lại: khi bạn lựa chọn một hàng nào đó ở bảng, chi tiết sẽ được đưa lên phần trên của cửa sổ làm việc. Bạn thay đổi thông tin trên đó và nút Lưu lại sẽ ghi lại những thông tin đó vào cơ sở dữ liệu.
Xóa: nút Xóa sẽ xóa đi hàng bạn chọn ở bảng phía dưới.
*Hồ sơ khách hàng
* Quản lý giao dịch
* Tìm kiếm khách hàng
-- Nếu bạn chỉ nhớ tên công ty có chứa một từ nào đó ,bạn nhập vào”từ khóa”, ngoài ra bạn có thể lựa chọn các thông tin khác (tỉnh/thành, ngành nghề, loại khách hàng) để tìm kiếm.
--Kết quả tìm kiếm được liệt kê theo bảng ở phía dưới.Tại đây để xem chi tiết một công ty vừa tìm được è nháy đúp chuột trái (double-click) vào một hàng của bảng và chi tiết sẽ được hiển thị ở
thanh chuyển (thông tin khách hàng).
- Ngoài ra ta cũng có thể tìm theo thông tin người liên hệ. Cách tìm kiếm cũng tuơng tự như tìm kiếm khách hàng, và chi tiết về thông tin ngườì liên hệ sẽ được hiển thị ở thanh chuyển (thông tin liên hệ).
Tìm kiếm theo người liên hệ
Nếu bạn chỉ nhớ một phần của tên giao dịch è nhập vào tên giao dịch. Ngoài ra bạn cũng có thể tìm kiếm theo các yếu tố khác (tên công ty, tên liên hệ, nhân viên phụ trách ,…)è kết quả đựợc hiển thị theo bảng ở phía dưới
Để xem chi tiết một hàng ,bạn kích đúp vào nó è chi tiết sẽ được hiển thị tại ở thanh chuyển (thông tin giao dịch).
Ngoài ra ta cũng có thể tìm theo:
+ Thông tin hỗ trợ.
+ Thông tin liên hệ.
* Quản lý báo cáo
- Theo kiểu giao dịch: bạn chọn lựa các tiêu chí : ngày tháng,… để có thông báo theo ý muốn
Khi đó báo cáo sẽ có dạng:
- Báo cáo thông tin hỗ trợ:
Báo cáo in ra có dạng:
Form tạo báo cáo tiến trình thông tin khách hàng
Báo cáo in ra sẽ có dạng
Hướng phát triển của chương trình
Song song với quá trình thiết kế và xây dựng chương trình em còn được tạo điều kiện để tìm hiểu và tiếp xúc với các công nghệ mới như: Microsoft.NET, XML, UML,COM, COM+…Đây chính là cơ sở để em có thể phát triển hệ thống theo hướng mới:
Xây dựng database trên nền tảng SQL Server 2000 (hoặc Oracle).
Xây dựng kiến trúc chương trình theo dạng COM+, sử dụng mô hình ba lớp (Presentation – Business Logic – Database).
Xây dựng chương trình như úng dụng Web, sử dụng các công nghệ trên nền .NET
Xây dựng chương trình than thiện và dễ sử dụng hơn.
KẾT LUẬN
Cùng với sự phát triển của công nghệ thông tin, tin học đang được áp dụng ngày càng nhiều vào đời sống thực tế và ngày càng trở nên không thể thiếu được trong quá trình phát triển của xã hội nói chung và của các công ty nói riêng.
Lĩnh vực quản lý quan hệ khách hàng là một trong những lĩnh vực đòi hỏi tin học hoá cao. Với số lượng khách hàng lớn, đa dạng nếu dùng phương pháp thủ công sẽ tốn rất nhiều công sức và thời gian nhưng kết quả đạt được không cao. Ngược lại khi áp dụng tin học vào việc quản lý sẽ giảm bớt rất nhiều chi phí không đáng có mà hiệu quả công việc lại rất lớn…Chính vì vậy, quản lý quan hệ khách hàng là một đề tài đã được nghiên cứu và xây dựng rất nhiều. Tuy nhiên, tuỳ theo yêu cầu của mỗi công ty, doanh nghiệp mà cách thức quản lý là khác nhau. Do đó, đề tài vẫn là một vấn đề mới mẻ cần được nghiên cứu và phát triển.
Chương trình được xây dựng hoàn toàn trên hướng mở nhằm có thể hoàn thiện và nâng cấp trong tương lai. Tuy nhiên, đây chưa phải là một chương trình hoàn chỉnh do còn có những hạn chế về mặt thực tế, kinh nghiệm cũng như thời gian.
TÀI LIỆU THAM KHẢO
1.Giáo trình hệ thống thông tin quản lý, TS.Trương Văn Tú – TS.Trần Thị Song Minh, NXB Thống kê, Hà Nội,2000
2.Giáo trình cơ sở dữ liệu SQL, Access, Ths.Trần Công Uẩn, NXB Thống kê, Hà Nội,2000
3.Giáo trình phân tích hệ thống thông tin, Nguyễn Văn Vị, Hà Nội,2004
4.Microsoft HTML Help Workshop
5.Xây dựng và triển khai ứng dụng thương mại điện tử, Phạm Hữu Khang, NXB Lao động xã hội,2005
6. Lập trình với C#, Nguyễn Phương Lan, NXB Lao động xã hội,2004
PHỤ LỤC
Login.cs
private void OnReady(object sender, System.EventArgs e)
{
CRMUserControl objUserControl = new CRMUserControl();
try
{
String strUserName = loginControl1.Username;
//String strPassWord = objUserControl.EncryptPassword(strUserName, loginControl1.Password);
String strPassWord = loginControl1.Password;
// kiem tra du username rong ko
if(strUserName.Equals(""))
{
MessageBox.Show("Chưa có tên đăng nhập!","Thông báo");
return;
}
// kiem tra mat khau co rong ko
if( strPassWord.Equals(""))
{
MessageBox.Show("Chưa có mật khẩu đăng nhập!","Thông báo");
return ;
}
//User Name exist
if(CommonDA.IsExist(strUserName, "UserName", "Users",Common.GetConString()))
{
//check Password and Avtive
Security objSecu = new Security(Common.GetConString());
UserDA objUser = new UserDA( Common.GetConString());
if(objSecu.PasswordValid(strUserName,strPassWord))
{
errorLogin.SetError(txtUserName,"");
this.Visible = false;
// hien thi main
int intUser = objSecu.getUserID(strUserName,strPassWord);
int intEmployeeID = Convert.ToInt32( objUser.GetEmployeeID( intUser ));
CRMMain objMain = new CRMMain( intUser, intEmployeeID );
objMain.Show ();
}
else
{
MessageBox.Show("Mật khẩu sai!","Thông báo");
}
}
// User Name not found
else
{
MessageBox.Show("Tên đăng nhập không tồn tại!","LoginControl");
this.txtUserName.Focus();
this.txtUserName.SelectAll();
return;
}
}
catch( Exception ex )
{
MessageBox.Show( ex.Message);
}
}
Customer.cs
private void CRMCustomer_Load(object sender, System.EventArgs e)
{
try
{ //Load Tree View
LoadListTreeView();
LoadCombo();
LoadListExtention();
LoadListContact();
this.toolTip1.SetToolTip(this.btnAnualRevenue, "Thêm loại doanh thu");
this.toolTip1.SetToolTip(this.btnAddCity, "Thêm tên thành phố");
this.toolTip1.SetToolTip(this.btnEmpNo, "Thêm số lượng nhân viên");
this.toolTip1.SetToolTip(this.btnCustomerCategory, "Thêm loại khách hàng");
this.toolTip1.SetToolTip(this.btnIndustry, "Thêm loại ngành nghề");
}
catch( Exception ex )
{
MessageBox.Show( ex.Message );
}
cboPriority.SelectedIndex = 0;
}
private void btnCustomerAdd_Click(object sender, System.EventArgs e)
{
if( ValidateForm() )
{
if( txtCusCompanyName.Text.Length != 0 )
{
errorProvider.SetError( txtCusCompanyName,"");
string strCompanyName = txtCusCompanyName.Text.Trim();
if( txtCusLogo.Text.Length != 0 )
byteImage = Common.WriteImage( txtCusLogo.Text.Trim());
DateTime dtEstablishDate = new DateTime(1900,01,01);
if( dtpCusEstablishDate.Enabled )
dtEstablishDate = dtpCusEstablishDate.Value.Date;
string strCEOName = txtCusCeoName.Text.Trim();
string strBankName = txtCusBankName.Text.Trim();
string strBankAcc = txtCusAccBank.Text.Trim();
string intCusCapital = txtCusCapital.Text.Trim();
string strDescription = txtCusDescription.Text.Trim();
string strTelNo = txtCusTelNo.Text.Trim();
string strFaxNo = txtCusFaxNo.Text.Trim();
string strEmail = txtCusEmail.Text.Trim();
string strAddress = txtCusAddress.Text.Trim();
string strWebUrl = txtCusWebUrl.Text.Trim();
string strTaxNo = txtCusTaxNo.Text.Trim();
string strABBRName = txtCusAbbrName.Text.Trim();
int intAnualRevenue = Convert.ToInt32( cboAnualRevenue.SelectedValue);
string strMajorBusiness= Convert.ToString(cboMajorBusiness.Text);
short intCity = Convert.ToInt16 ( cboCity.SelectedValue);
int intEmployeeNo = Convert.ToInt32( cboEmpNo.SelectedValue );
int intCusCategory = Convert.ToInt32( cboCustomerCategory.SelectedValue );
int intIndustry = Convert.ToInt32( cboIndustry.SelectedValue);
if( InsertCustomer( strCompanyName, byteImage, dtEstablishDate, intCusCapital, strWebUrl, strMajorBusiness, strAddress, strTelNo, strFaxNo, strEmail, intCity, strCEOName, intEmployeeNo, intCusCategory, intIndustry, strBankName, strBankAcc, intAnualRevenue, strDescription, strABBRName, strTaxNo ) > -1 )
ClearControlCustomer();
}
else
{
errorProvider.SetError(txtCusCompanyName,"Bạn chưa nhập tên công ty!");
errorProvider.SetIconAlignment( txtCusCompanyName, ErrorIconAlignment.MiddleLeft);
}
}
LoadListTreeView();
}
private void btnExtentionAdd_Click(object sender, System.EventArgs e)
{
string extName = txtExtentionName.Text.Trim();
string extDes = txtExDescription.Text.Trim();
int intPriority;
if( cboPriority.Text.Equals("Cao") )
intPriority = 1;
else if( cboPriority.Text.Equals("Trung bình") )
intPriority = 2;
else
intPriority = 3;
int customerId = this.m_intCustomerID;
try
{
if ( extName.Length != 0 )
{
if( CommonDA.IsExist( extName,"ExtentionName","CustomerExtension",Common.GetConString()) )
{
errorProvider.SetError( txtExtentionName,"Tiêu đề này đã có trong danh sách!");
}
else
{
errorProvider.SetError( txtExtentionName,"");
errorProvider.SetError( txtExtentionName,"");
CustomerExtensionDA objExt = new CustomerExtensionDA( Common.GetConString());
if( objExt.Insert( new CustomerExtensionDAInfo( extName, extDes, intPriority, customerId )) != -1)
LoadListExtention();
}
}
else
{
errorProvider.SetError( txtExtentionName,"Chưa nhập tên tiêu đề!");
}
}
catch( Exception ex )
{
MessageBox.Show( ex.Message );
}
}
private void btnExtentionUpdate_Click(object sender, System.EventArgs e)
{
MyListView objList = new MyListView();
int index = objList.SelectIndex( lvExtention );
if( index != -1 )
{
int id = Convert.ToInt32( lvExtention.Items[index].SubItems[5].Text );
string extName = txtExtentionName.Text.Trim();
string extDes = txtExDescription.Text.Trim();
int intPriority;
if( cboPriority.Text.Equals("Cao") )
intPriority = 1;
else if( cboPriority.Text.Equals("Trung bình") )
intPriority = 2;
else
intPriority = 3;
int customerId = this.m_intCustomerID;
if( CommonDA.IsExistForEdit( extName,"ExtentionName", id, "ExtensionId", "CustomerExtension" ,Common.GetConString()))
{
if( UpdateExtention( id, extName, extDes, intPriority, customerId ) != -1 )
LoadListExtention();
}
else
{
errorProvider.SetError( txtExtentionName,"Tên tiêu đề này đã có trong danh sách!");
}
}
}
private void btnContacAdd_Click(object sender, System.EventArgs e)
{
try
{
int intCustomerId = this.m_intCustomerID;
string strContactName = txtContactName.Text.Trim();
DateTime dtBirthDate = Convert.ToDateTime(dtpBirthDate.Value.ToShortDateString());
string strPosition = txtContactPosition.Text.Trim();
string strDepartment = txtContactDepartment.Text.Trim();
bool blnPrimary = chkPrimary.Checked;
string strTelNo = txtContactTelNo.Text.Trim();
string strCellNo = txtContactCellNo.Text.Trim();
string strEmail = txtContactEmail.Text.Trim();
string strIM = txtContactIM.Text.Trim();
string strAddress = txtContactAddress.Text.Trim();
string sex = radioMale.Checked?"M":"F";
string hobby = txtContacHobby.Text.Trim();
if( InsertContact( intCustomerId, strContactName, strPosition, strEmail, strTelNo, strCellNo, strAddress, blnPrimary, strDepartment, strIM, dtBirthDate, sex, hobby ) != -1 )
LoadListContact();
}
catch( Exception ex )
{
MessageBox.Show( ex.Message );
}
}
private void lvExtention_SelectedIndexChanged(object sender, System.EventArgs e)
{
BindControlListExtension();
ControlButtonExtension();
}
private void btnExtentionDelete_Click(object sender, System.EventArgs e)
{
MyListView objList = new MyListView();
int index = objList.SelectIndex( lvExtention );
if( index != -1 )
{
if( MessageBox.Show("Bạn muốn xóa thông tin này!","Xác nhận!",MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes )
if( DeleteExtention( Convert.ToInt32( lvExtention.Items[index].SubItems[5].Text))!= -1 )
{
LoadListExtention();
txtExDescription.Text = "";
txtExtentionName.Text = "";
}
}
}
private void lvContact_SelectedIndexChanged(object sender, System.EventArgs e)
{
BindControlContact();
ControlButtonContact();
}
private void btnContactUpdate_Click(object sender, System.EventArgs e)
{
MyListView objList = new MyListView();
int index = objList.SelectIndex( lvContact );
if( index != -1 )
{
try
{
int id = Convert.ToInt32(lvContact.Items[index].SubItems[14].Text );
int intCustomerId = this.m_intCustomerID;
string strContactName = txtContactName.Text.Trim();
DateTime dtBirthDate = Convert.ToDateTime(dtpBirthDate.Value.ToShortDateString());
string strPosition = txtContactPosition.Text.Trim();
string strDepartment = txtContactDepartment.Text.Trim();
bool blnPrimary = chkPrimary.Checked;
string strTelNo = txtContactTelNo.Text.Trim();
string strCellNo = txtContactCellNo.Text.Trim();
string strEmail = txtContactEmail.Text.Trim();
string strIM = txtContactIM.Text.Trim();
string strAddress = txtContactAddress.Text.Trim();
string sex = radioMale.Checked?"M":"F";
string hobby = txtContacHobby.Text.Trim();
if( UpdateContact( id ,intCustomerId, strContactName, strPosition, strEmail, strTelNo, strCellNo, strAddress, blnPrimary, strDepartment, strIM, dtBirthDate, sex, hobby ) != -1 )
LoadListContact();
}
catch( Exception ex )
{
MessageBox.Show( ex.Message );
}
}
}
public void contactReset()
{
txtContacHobby.Text = "";
txtContactAddress.Text = "";
txtContactCellNo.Text = "";
txtContactDepartment.Text = "";
txtContactEmail.Text = "";
txtContactIM.Text = "";
txtContactName.Text = "";
txtContactPosition.Text = "";
txtContactTelNo.Text = "";
}
private void btnContacDelete_Click(object sender, System.EventArgs e)
{
MyListView objList = new MyListView();
int index = objList.SelectIndex( lvContact );
if( index != -1 )
{
int id = Convert.ToInt32 (lvContact.Items[index].SubItems[14].Text);
if( MessageBox.Show("Bạn muốn xóa thông tin này?","Xác nhận!",MessageBoxButtons.YesNo, MessageBoxIcon.Question )==DialogResult.Yes )
if( DeleteContact( id ) != -1 )
LoadListContact();
}
contactReset();
}
private void btnGetImage_Click(object sender, System.EventArgs e)
{
openFileDialog.AddExtension = true;
openFileDialog.RestoreDirectory = true ;
openFileDialog.Filter = "Files(*.GIF;*.JPG;*.PNG;*.JPEG;*.BMP;*.DOC;*.EXL;*.PDF;)|*.GIF;*.JPG;*.PNG;*.JPEG;*.BMP;*.DOC;*.EXL;*.PDF;";
if( openFileDialog.ShowDialog() == DialogResult.OK )
{
txtCusLogo.Text = openFileDialog.FileName;
}
}
private void btnCustomerDelete_Click(object sender, System.EventArgs e)
{
try
{
if( MessageBox.Show("Bạn muốn xóa thông tin này?","Xác nhận!", MessageBoxButtons.YesNo ) == DialogResult.Yes )
{
CustomerDA objCus = new CustomerDA( Common.GetConString());
objCus.Delete( this.m_intCustomerID );
}
ClearControlCustomer();
LoadListTreeView();
m_intCustomerID = 0;
}
catch( Exception ex )
{
MessageBox.Show( ex.Message );
}
}
private void btnView_Click(object sender, System.EventArgs e)
{
try
{
if( txtCusLogo.Text.Length != 0 )
{
CRMViewImage objView = new CRMViewImage();
objView.Path = txtCusLogo.Text.Trim();
objView.ShowDialog();
}
else
{
if( logo.Length != 0 )
{
string filename = "Logo.jpg";
FileStream fs = new FileStream(@".\"+filename,FileMode.Create );
fs.Write( logo,0,logo.Length );
fs.Close();
System.Diagnostics.Process.Start( filename );
}
else
MessageBox.Show( "Chưa có logo!","Thông báo!" );
}
}
catch( Exception ex )
{
MessageBox.Show( "Chưa có logo!","Thông báo!" );
}
}
private void tabCustomerInfo_Click(object sender, System.EventArgs e)
{
CustomerDA objCus = new CustomerDA( Common.GetConString());
DataTable dtCus = objCus.getCustomerID( this.m_intCustomerID ).Tables[0];
DataRow dr = dtCus.Rows[0];
// hien thi du lieu chi tiet ve 1 khach hang
BindingControlCustomerTree( dr );
LoadListViewAfterTreeSelect( this.m_intCustomerID );
LoadListExtentionAfter( this.m_intCustomerID );
}
private void btnCustomerUpdate_Click(object sender, System.EventArgs e)
{
try
{
if( ValidateForm() )
{
int customerID = this.m_intCustomerID;
if( txtCusCompanyName.Text.Length != 0 )
{
string strCompanyName = txtCusCompanyName.Text.Trim();
if( txtCusLogo.Text.Length != 0 )
{
logo = Common.WriteImage( txtCusLogo.Text.Trim());
}
DateTime dtEstablishDate = new DateTime(1900,01,01) ;
if( dtpCusEstablishDate.Enabled )
dtEstablishDate = dtpCusEstablishDate.Value.Date;
string strCEOName = txtCusCeoName.Text.Trim();
string strBankName = txtCusBankName.Text.Trim();
string strBankAcc = txtCusAccBank.Text.Trim();
string intCusCapital = txtCusCapital.Text.Trim() ;
int intAnualRevenue = Convert.ToInt32( cboAnualRevenue.SelectedValue);
string strMajorBusiness = cboMajorBusiness.Text;
string strDescription = txtCusDescription.Text.Trim();
string strTelNo = txtCusTelNo.Text.Trim();
string strFaxNo = txtCusFaxNo.Text.Trim();
string strEmail = txtCusEmail.Text.Trim();
string strAddress = txtCusAddress.Text.Trim();
string strWebUrl = txtCusWebUrl.Text.Trim();
short intCity = Convert.ToInt16 ( cboCity.SelectedValue);
int intEmployeeNo = Convert.ToInt32( cboEmpNo.SelectedValue );
int intCusCategory = Convert.ToInt32( cboCustomerCategory.SelectedValue );
int intIndustry = Convert.ToInt32( cboIndustry.SelectedValue);
string strTaxNo = txtCusTaxNo.Text.Trim();
string strABBRName = txtCusAbbrName.Text.Trim();
if( txtCusLogo.Text.Length != 0 )
byteImage = Common.WriteImage( txtCusLogo.Text.Trim());
if ( intIndustry != 0)
{
if( UpdateCustomer( customerID,strCompanyName, logo, dtEstablishDate, intCusCapital, strWebUrl, strMajorBusiness, strAddress, strTelNo, strFaxNo, strEmail, intCity, strCEOName, intEmployeeNo, intCusCategory, intIndustry, strBankName, strBankAcc, intAnualRevenue, strDescription, strABBRName, strTaxNo ) > -1 )
//Xoa trang cac control của form khách hàng.
ClearControlCustomer();
}
else
{
errorProvider.SetError(cboIndustry,"Chưa chọn ngành nghề !");
}
}
}
LoadListTreeView();
m_intCustomerID = 0;
}
catch(Exception ex)
{
MessageBox.Show( ex.Message );
}
}
private void CRMCustomer_Click(object sender, System.EventArgs e)
{
ControlButtonContact();
ControlButtonExtension();
}
private void tabControl1_SelectedIndexChanged(object sender, System.EventArgs e)
{
if( m_intContactID != 0 )
{
int i=0;
if(m_dtContact != null)
foreach( DataRow row in m_dtContact.Rows )
{
i++;
if( Convert.ToInt32(row["ContactID"]) == m_intContactID )
lvContact.Items[i-1].Selected = true;
else
lvContact.Items[i-1].Selected = false;
}
}
if( m_dtContact != null )
m_dtContact = null;
if(tabCustomerInfo.Focus() == true )
this.AcceptButton = this.btnCustomerAdd;
if(tabContact.Focus() == true )
this.AcceptButton = this.btnContacAdd;
if(tabExtention.Focus() == true )
this.AcceptButton = this.btnExtentionAdd;
}
private void BindingControlCustomerTree ( DataRow dr )
{
// add vao cac control
txtCustomerNameExtend.Text = dr["CompanyName"].ToString();
txtCustomerName.Text = dr["CompanyName"].ToString();
txtCusCompanyName.Text = dr["CompanyName"].ToString();
dtpCusEstablishDate.Value = Convert.ToDateTime(dr["EstablishDate"]);
txtCusCapital.Text = dr["Capital"].ToString();
txtCusWebUrl.Text = dr["WebSiteUrl"].ToString();
txtCusAddress.Text = dr["Address"].ToString();
txtCusTelNo.Text = dr["TelNo"].ToString();
txtCusFaxNo.Text = dr["FaxNo"].ToString();
txtCusEmail.Text = dr["Email"].ToString();
cboCity.SelectedValue = dr["CityID"].ToString();
txtCusCeoName.Text = dr["CEOName"].ToString();
// thong tin ve nguoi nhan vien dang quan ly
lblEmployee.Text = "NV quản lý: " + dr["EmployeeName"].ToString();
cboEmpNo.SelectedValue = dr["EmployeeNo"].ToString();
try
{
logo = (byte[])(dr["CompanyLogo"]);
}
catch(Exception ex)
{
}
cboCustomerCategory.SelectedValue = dr["CategoryID"].ToString();
dtpCusCreateDate.Value = Convert.ToDateTime( dr["CreatedDate"].ToString() );
if( dr["ModifiedDate"].ToString().Length != 0 )
dtpCusModifiDate.Value = Convert.ToDateTime( dr["ModifiedDate"].ToString() );
cboCustomerCategory.SelectedValue = dr["CategoryID"].ToString();
string strIn = dr["IndustryID"].ToString();
cboIndustry.SelectedValue = dr["IndustryID"].ToString();
txtCusBankName.Text = dr["BankName"].ToString();
txtCusAccBank.Text = dr["BankAcctNo"].ToString();
cboMajorBusiness.SelectedText = dr["MajorBusiness"].ToString();
txtCusDescription.Text = dr["Description"].ToString();
cboAnualRevenue.SelectedValue = dr["AnualRevenue"].ToString();
txtCusAbbrName.Text = dr["ABBRName"].ToString();
txtCusTaxNo.Text = dr["TaxNo"].ToString();
}
public void ControlButtonCustomerTree(int d)
{
if( d == 0 )
{
btnCustomerDelete.Enabled = true;
btnCustomerUpdate.Enabled = true;
}
else
{
btnCustomerDelete.Enabled = false;
btnCustomerUpdate.Enabled = false;
}
}
private void treeView1_AfterSelect(object sender, System.Windows.Forms.TreeViewEventArgs e)
{
contactReset();
logo = null;
if (e.Node.Nodes.Count == 0)
{
txtExtentionName.Text = "";
txtExDescription.Text = "";
this.m_intCustomerID = Convert.ToInt32(e.Node.Tag.ToString());
displayLoad();
ControlButtonCustomerTree( e.Node.Nodes.Count );
}
}
public void DisplayOneCom(int nComID)
{
contactReset();
logo = null;
txtExtentionName.Text = "";
txtExDescription.Text = "";
this.m_intCustomerID = nComID ;
displayLoad();
ControlButtonCustomerTree( nComID );
btnCustomerDelete.Enabled = true ;
btnCustomerUpdate.Enabled = true ;
}
public void displayLoad()
{
CustomerDA objCus = new CustomerDA( Common.GetConString());
DataTable dtCus = objCus.getCustomerID( this.m_intCustomerID ).Tables[0];
DataRow dr = dtCus.Rows[0];
BindingControlCustomerTree( dr );
LoadListViewAfterTreeSelect( this.m_intCustomerID );
LoadListExtentionAfter( this.m_intCustomerID );
}
/*****************************************************************************
* Load List Listview after select treeview
*****************************************************************************/
private void LoadListViewAfterTreeSelect ( int _m_intCustomerID )
{
try
{
lvContact.Items.Clear();
ContactDA objContact = new ContactDA( Common.GetConString());
DataTable dt = objContact.GetContactCus( _m_intCustomerID ).Tables[0];
ListViewItem objListItem;
foreach( DataRow row in dt.Rows )
{
objListItem = new ListViewItem( row["CompanyName"].ToString());
objListItem.SubItems.Add(row["ContactName"].ToString());
objListItem.SubItems.Add(row["ContactPosition"].ToString());
objListItem.SubItems.Add(row["ContactPhone"].ToString());
objListItem.SubItems.Add(row["ContactCellNo"].ToString());
objListItem.SubItems.Add(row["ContactEmail"].ToString());
objListItem.SubItems.Add(row["ContactAddress"].ToString());
objListItem.SubItems.Add( Convert.ToInt32 (row["Primary"])==1?"Đúng":"Không" );
objListItem.SubItems.Add(row["Department"].ToString());
objListItem.SubItems.Add(Convert.ToDateTime (row["CreatedDate"]).ToString("dd/MM/yyyy"));
objListItem.SubItems.Add(Convert.ToDateTime( row["ModifiedDate"]).ToString("dd/MM/yyyy"));
objListItem.SubItems.Add(row["IM"].ToString());
objListItem.SubItems.Add(row["BirthDate"].ToString());
objListItem.SubItems.Add(row["customerid"].ToString());
objListItem.SubItems.Add(row["ContactId"].ToString());
objListItem.SubItems.Add( row["Sex"].ToString().Equals("M")?"Nam":"Nữ");
objListItem.SubItems.Add( row["Hobby"].ToString());
lvContact.Items.Add( objListItem );
}
}
catch( Exception ex )
{
MessageBox.Show( ex.Message );
}
}
/*****************************************************************************
* End
*****************************************************************************/
private void treeView1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
{
TreeNode tn = this.treeView1.GetNodeAt(e.X, e.Y);
if(tn != null)
{
int currentNodeIndex = tn.Index;
if(currentNodeIndex != oldNodeIndex)
{
oldNodeIndex = currentNodeIndex;
if(this.toolTip1 != null && this.toolTip1.Active)
this.toolTip1.Active = false; //turn it off
this.toolTip1.SetToolTip(this.treeView1, tn.Text);
this.toolTip1.Active = true; //make it active so it can show
}
}
}
private void btnAnualRevenue_Click(object sender, System.EventArgs e)
{
CRMCusAnualRevenue cusAn = new CRMCusAnualRevenue();
cusAn.ShowDialog();
AnualRevenueDA objAnual = new AnualRevenueDA( Common.GetConString());
Common.LoadComboBox( cboAnualRevenue, objAnual.GetAnualRevenue().Tables[0],"AnualRevenueName","AnualRevenueID");
}
private void btnEmpNo_Click(object sender, System.EventArgs e)
{
CRMCusEmployeeNo cusEmpNo = new CRMCusEmployeeNo();
cusEmpNo.ShowDialog();
//Load data to cboEmployeeNo
EmployeeNoDA objEmp = new EmployeeNoDA( Common.GetConString());
Common.LoadComboBox( cboEmpNo, objEmp.GetEmployeeNo().Tables[0],"EmployeeNo","EmployeeNoID");
}
private void btnCustomerCategory_Click(object sender, System.EventArgs e)
{
CRMCusCustomerCategory cusCusCate = new CRMCusCustomerCategory();
cusCusCate.ShowDialog();
//Load data to cboCategory
CustomerCategoryDA objCus = new CustomerCategoryDA( Common.GetConString());
Common.LoadComboBox( cboCustomerCategory,objCus.GetCustomerCategory().Tables[0],"CustomerCategory","CustomerCategoryID");
}
private void btnIndustry_Click(object sender, System.EventArgs e)
{
CRMCusIndustry cusInd = new CRMCusIndustry();
cusInd.ShowDialog();
//Load data to cboIndustry
IndustryDA objInd = new IndustryDA( Common.GetConString());
Common.LoadComboBox( cboIndustry, objInd.GetIndustry().Tables[0],"IndustryName","IndustryID");
}
private void btnAddCity_Click(object sender, System.EventArgs e)
{
CRMCusCity cusCity = new CRMCusCity();
cusCity.ShowDialog();
//Load data to cboCity
CityDA objCity = new CityDA( Common.GetConString());
Common.LoadComboBox( cboCity, objCity.GetCity().Tables[0],"CityName","CityID");
}
private void chkDate_CheckedChanged(object sender, System.EventArgs e)
{
if( chkDate.Checked )
dtpCus_u115 ?tablishDate.Enabled = true;
else
dtpCus_u115 ?tablishDate.Enabled = false;
}
private void checkBox1_CheckedChanged(object sender, System.EventArgs e)
{
if( checkBox1.Checked )
dtpBirthDate.Enabled = true;
else
dtpBirthDate.Enabled = false;
}
private void lvContact_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
{
this.toolTip2.SetToolTip(lvContact, "Click vao đây để xem thông tin chi tiết (Xóa / Sửa)" );
}
}
}
Menu.cs
public class CRMMenu:MenuItem
{
CRMMain objMain;//new
public CRMMenu(CRMMain main, int employeeId )//moi
{
objMain=main;
m_intEmployeeID = employeeId;
}
private string m_MenuName;
private int m_intEmployeeID;
public CRMMenu(string text, EventHandler onClick)
{
this.Click += new EventHandler(onClick);
}
public string MenuName
{
get{return m_MenuName;}
set{m_MenuName = value;}
}
public void OnMenuItemClick(object sender, EventArgs e)
{
CRMMenu menuItem = (CRMMenu)sender;
/// Setup
if(menuItem.MenuName.Equals("Authorization"))
{
// Focus.CRM.WinUI.Task childTask = new Focus.CRM.WinUI.Task();
// childTask.MdiParent = objMain;
// childTask.Show();
}
if(menuItem.MenuName.Equals("Role"))
{
CRMUserRole childForm = null;
foreach(Form f in objMain.MdiChildren)
{
if(f is CRMUserRole)
{
// found it
childForm = (CRMUserRole) f;
break;
}
}
if( childForm != null)
{
childForm.Show();
}
else
{
childForm = new CRMUserRole();
childForm.MdiParent = objMain;
childForm.Show();
}
}
if(menuItem.MenuName.Equals("User"))
{
CRMEmployee childForm = null;
foreach(Form f in objMain.MdiChildren)
{
if(f is CRMEmployee)
{
childForm = (CRMEmployee) f;
break;
}
}
if( childForm != null)
{
childForm.Show();
}
else
{
childForm = new CRMEmployee();
childForm.MdiParent = objMain;
childForm.Show();
}
}
if(menuItem.MenuName.Equals("Exit"))
{
DialogResult d = MessageBox.Show("Bạn thật sự muốn thoát khỏi chương trình ?","Thoát",MessageBoxButtons.OKCancel,MessageBoxIcon.Question);
if (DialogResult.OK == d)
{
Application.Exit();
}
}
// Customer
if(menuItem.MenuName.Equals("Profile"))
{
CRMCustomer childForm = null;
foreach(Form f in objMain.MdiChildren)
{
if(f is CRMCustomer)
{
// found it
childForm = (CRMCustomer) f;
break;
}
}
if( childForm != null)
{
childForm.Show();
}
else
{
childForm = new CRMCustomer( m_intEmployeeID );
childForm.MdiParent = objMain;
childForm.Show();
}
}
if(menuItem.MenuName.Equals("CustomerDeal"))
{
CRMDeal childForm = null;
foreach(Form f in objMain.MdiChildren)
{
if(f is CRMDeal)
{
// found it
childForm = (CRMDeal) f;
break;
}
}
if( childForm != null)
{
childForm.Show();
}
else
{
childForm = new CRMDeal(m_intEmployeeID);
childForm.MdiParent = objMain;
childForm.Show();
}
}
if(menuItem.MenuName.Equals("CustomerCase"))
{
CRMCase childForm = null;
foreach(Form f in objMain.MdiChildren)
{
if(f is CRMCase)
{
// found it
childForm = (CRMCase) f;
break;
}
}
if( childForm != null)
{
childForm.Show();
}
else
{
childForm = new CRMCase( m_intEmployeeID );
childForm.MdiParent = objMain;
childForm.Show();
}
}
if(menuItem.MenuName.Equals("Export Customer Infor"))
{
MessageBox.Show("Export Customer Infor ");
}
// Catalog
if(menuItem.MenuName.Equals("Focus Catalog"))
{
MessageBox.Show("Focus Catalog");
}
if(menuItem.MenuName.Equals("General Catalog"))
{
CRMCustomerInfo childForm = null;
foreach(Form f in objMain.MdiChildren)
{
if(f is CRMCustomerInfo)
{
// found it
childForm = (CRMCustomerInfo) f;
break;
}
}
if( childForm != null)
{
childForm.Show();
}
else
{
childForm = new CRMCustomerInfo( );
childForm.MdiParent = objMain;
childForm.Show();
}
}
//Search
if(menuItem.MenuName.Equals("SearchCustomer"))
{
CRMSearch childForm = null;
foreach(Form f in objMain.MdiChildren)
{
if(f is CRMSearch)
{
// found it
childForm = (CRMSearch) f;
break;
}
}
if( childForm != null)
{
childForm.Show();
}
else
{
childForm = new CRMSearch( m_intEmployeeID );
childForm.MdiParent = objMain;
childForm.Show();
}
}
if(menuItem.MenuName.Equals("SearchContact"))
{
Begin childForm = new Begin( m_intEmployeeID );
childForm.MdiParent = objMain;
childForm.Show();
}
/// report
if(menuItem.MenuName.Equals("Monthly Deals"))
{
CRMReportDeal childForm = null;
foreach(Form f in objMain.MdiChildren)
{
if(f is CRMReportDeal)
{
// found it
childForm = (CRMReportDeal) f;
break;
}
}
if( childForm != null)
{
childForm.Show();
}
else
{
childForm = new CRMReportDeal( m_intEmployeeID );
childForm.MdiParent = objMain;
childForm.Show();
}
}
if(menuItem.MenuName.Equals("Monthly Cases"))
{
CRMReportCaseForm childForm = null;
foreach(Form f in objMain.MdiChildren)
{
if(f is CRMReportCaseForm)
{
// found it
childForm = (CRMReportCaseForm) f;
break;
}
}
if( childForm != null)
{
childForm.Show();
}
else
{
childForm = new CRMReportCaseForm( m_intEmployeeID );
childForm.MdiParent = objMain;
childForm.Show();
}
}
if(menuItem.MenuName.Equals("FollowUp by Employee"))
{
CRMReportEmployees childForm = null;
foreach(Form f in objMain.MdiChildren)
{
if(f is CRMReportEmployees)
{
// found it
childForm = (CRMReportEmployees) f;
break;
}
}
if( childForm != null)
{
childForm.Show();
}
else
{
childForm = new CRMReportEmployees();
childForm.MdiParent = objMain;
childForm.Show();
}
}
if(menuItem.MenuName.Equals("FollowUps by Customer"))
{
CRMReportCustomer childForm = null;
foreach(Form f in objMain.MdiChildren)
{
if(f is CRMReportCustomer)
{
// found it
childForm = (CRMReportCustomer) f;
break;
}
}
if( childForm != null)
{
childForm.Show();
}
else
{
childForm = new CRMReportCustomer( m_intEmployeeID );
childForm.MdiParent = objMain;
childForm.Show();
}
}
// help
if(menuItem.MenuName.Equals("Contents"))
{
MessageBox.Show("Contents");
}
if(menuItem.MenuName.Equals("About"))
{
CRMAbout childForm = null;
foreach (Form f in objMain.MdiChildren)
{
if (f is CRMAbout)
{
childForm = (CRMAbout) f;
break;
}
}
if ( childForm !=null)
{
childForm.Show();
}
else
{
childForm = new CRMAbout();
childForm.MdiParent = objMain;
childForm.Show();
}
}
if(menuItem.MenuName.Equals("ProfilePerson"))
{
CRMProfile childForm = null;
foreach(Form f in objMain.MdiChildren)
{
if(f is CRMProfile)
{
// found it
childForm = (CRMProfile) f;
break;
}
}
if( childForm != null)
{
childForm.Show();
}
else
{
childForm = new CRMProfile( this.m_intEmployeeID );
childForm.MdiParent = objMain;
childForm.Show();
}
}
if(menuItem.MenuName.Equals("ChangePass"))
{
ChangePass objChangepass = null;
objChangepass = new ChangePass( this.m_intEmployeeID );
objChangepass.MdiParent = objMain;
objChangepass.Show();
}
}
}
}
MỤC LỤC
Trang
Các file đính kèm theo tài liệu này:
- 36434.doc