Luận văn Phát triển phần mềm quản lý hợp đồng tại công ty cổ phần phần mềm kế toán BRAVO

Chương trình Quản lý hợp đồng được xây dựng trên mô hình 3 tầng của Microsoft về phát triển phần mềm ứng dụng. + Tầng ứng dụng: Window User Interface (WinUI) Tầng giao diện tương tác với người sử dụng. + Tầng truy cập cơ sở dữ liệu: Data Access Layer (DAL) - Đây là tầng sẽ can thiệp vào hệ quản trị cơ sở dữ liệu để lấy dữ liệu hoặc nhận dữ liệu từ tầng kinh doanh cơ sở dữ liệu để lưu vào cơ sở dữ liệu. + Tầng kinh doanh dữ liệu: Bussiness Rule – Đây là tầng trung gian giữa tầng ứng dụng và tầng truy cập cơ sở dữ liệu. Tầng này có nhiệm vụ nhận dữ liệu từ tầng ứng dụng, kiểm tra tính phù hợp của dữ liệu và truyền vào tầng truy cập dữ liệu nhằm lưu dữ liệu, ngoài ra nó còn nhận dữ liệu truyền lại từ tầng DAL và chuyển ra cho tầng ứng dụng nhằm hiển thị cho người sử dụng.

doc154 trang | Chia sẻ: aloso | Lượt xem: 1515 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu Luận văn Phát triển phần mềm quản lý hợp đồng tại công ty cổ phần phần mềm kế toán BRAVO, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
ng phòng ban cụ thể. + Khi chạy chương trình thì người sử dụng phải đăng nhập vào hệ thống để có thể chạy được các chức năng trong quyền hạn mà mình được cấp. Ngoài ra chương trình còn có một số chức năng tiện ích khác. 3.3 Thiết kế chương trình Sau khi tiếp nhận yêu cầu của bài toán chúng ta sẽ tiến hành thiết kế chương trình theo các quy trình phát triển một phần mềm chuyên nghiệp mà đã trình bày ở chương 2. 3.3.1 Xây dựng sơ đồ luồng thông tin của chương trình quản lý hợp đồng Quá trình khách hàng đưa ra yêu cầu, Công ty tiếp nhận yêu cầu của quy trình thực hiện một hợp đồng được thể hiện qua các sơ đồ luồng thông tin sau: Sơ đồ luông thông tin ký kết, lập và thực hiện hợp đồng Hình 3.1 Sơ đồ luồng thông tin lập hợp đồng Sơ đồ luồng thông tin theo dõi việc bảo hành phần mềm Hình 3.2 Sơ đồ luồng thông tin theo dõi việc bảo hành phần mềm Sơ đồ luồng thông tin của quá trình thanh toán Hình 3.3 Sơ đồ luồng thông tin của quá trình thanh toán Từ các dòng thông tin trên mà chúng ta sẽ xây dựng được chương trình quản lý hợp đồng có các chức năng xử lý sau: (Sơ đồ luồng dữ liệu) 3.3.2 Sơ đồ luồng dữ liệu DFD Sơ đồ luồng dữ liệu mức ngữ cảnh Hình 3.4 Sơ đồ luồng dữ liệu mức ngữ cảnh Phân rã luồng dữ liệu Hình 3.5 Sơ đồ luồng dữ liệu phân rã mức 0 Sơ đồ phân rã mức 1: Lập hợp đồng Hình 3.6 Sơ đồ luồng dữ liệu lập hợp đồng Sơ đồ phân rã mức 1: Triển khai hợp đồng Hình 3.7 Sơ đồ luồng dữ liệu triển khai hợp đồng Sơ đồ phân rã mức 1: Thanh toán hợp đồng Hình 3.8 Sơ đồ luồng dữ liệu thanh toán hợp đồng Sơ đồ phân rã mức 2: Kiểm thử chương trình Hình 3.9 Sơ đồ luồng dữ kiểm thử chương trình Sơ đồ phân rã mức 3: Cài đặt chương trình Hình 3.10 Sơ đồ luồng dữ liệu cài đặt chương trình 3.3.3 Thiết kế các thực thể Sau khi phân tích ở trên chúng ta có thể đưa ra các thực thể tham gia vào chương trình mà chúng ta cần quản lý: Thực thể nhân viên Thực thể khách hàng Thực thể phòng ban Thực thể chức vụ Thực thể hợp đồng Thực thể điều khoản thanh toán Thực thể danh mục công việc Thực thể triển khai hợp đồng Thực thể phiếu bảo hành Thực thể nhân viên-triển khai Thực thể nhân viên-Bảo hành Sơ đồ quan hệ thực thể (Cơ sở dữ liệu logic) Hình 3.11 Mối quan hệ giữa các thực thể Từ sơ đồ quan hệ giữa các thực thể chúng ta sẽ thiết kế cơ sở dũ liệu logic như sau: Id TenPhienBan MoTa tblNhân Viên tblChucVu tblNhanVien_BaoHanh tblDieuKhoanTT tblPhongBan tblPhieuBan tblTinhTrangHD tblDanhMucCV tblQuyen tblPhieuBH MaPhieu MaNV MaKH DaiDienKH … tblHopDong MaDieuKhoan SoHieuHD NoiDung NgayThucHien SoTien … MaNV DaiDienKH tblPermission tblNhanVien_TrienKhai tblPhòng Ban SoHieuHD TenHD PhienBan NgayKy GiaTri MaNV MaKH NgayHTDK … STT MaPhieu MaNV CongViec NgayBD NgayKTDK … MaNV TenNV NamSinh NoiSinh ChoOHienTai MaCV MaPB … MaPB TenPB ChucNang STT MaTinhTrang MaNV NoiDung … MaTinhTrang SoHieuHD MaCV … MaCV TenCV ChucNang YeuCau MaCV TenCV MoTa STT MaCV MaQuyen MaQuyen TenQuyen tblKhachHang MaKH TenKH DiaChi … Hình 3.12 Sơ đồ quan hệ thực thể ERD Sau khi thiết kế cơ sở dữ liệu logic, chúng ta tiến hành cài đặt cơ sở dữ liệu vật lý trên hệ quản trị cơ sở dữ liệu SQL-SERVER 2005. Các thực thể được mô tả như sau tblNhanVien Tên trường Kiểu dữ liệu Độ rộng Cho phép trống Diễn giải MaNV Nchar 10 Không Lưu trữ mã của nhân viên. HoTen Nvarchar 30 Không Họ tên nhân viên NamSinh SmallDateTime Không Năm sinh NoiSinh Nvarchar 150 Không Nơi sinh ChoOHT Nvarchar 150 Không Chỗ ở hiện tại SoDienThoai Nchar 12 Không Số điện thoại DiDong Nchar 10 Có Số di động NgayVL SmallDatatime Không Ngày vào làm NgayNghi SmallDatetime Có Ngày nghỉ GioiTinh Bit 1 Không Giới tình MaPB Nchar 10 Không Mã phòng ban MaCV Nchar 10 Không Mã chức vụ Anh Image Có Ảnh nhân viên tblChucVu Tên trường Kiểu dữ liệu Độ rộng Cho phép trống Diễn giải MaCV Nchar 10 Không Mã chức vụ TenCV Nvarchar 100 Không Tên chức vụ Chucnang Nvarchar 150 Không Chức năng YeuCau Nvarchat 100 Không Yêu cầu năng lực tblPhongBan Tên trường Kiểu dữ liệu Độ rộng Cho phép trống Diễn giải MaPB Nchar 10 Không Mã phòng ban TenPB Nvarchar 50 Không Tên phòng ban ChucNang Nvarchar 150 Không Chức năng của phòng ban tblDanhMucCongViec Tên trường Kiểu dữ liệu Độ rộng Cho phép trống Diễn giải MaCV Nchar 10 Không Mã công việc TenCV Nvarchar 100 Không Tên công việc MoTa Nvarchar 100 Có Mô tả công việc tblHopDong Tên trường Kiểu dữ liệu Độ rộng Cho phép trống Diễn giải SoHieuHD Nchar 10 Không Số hiệu hợp đồng TenHD Nvarchar 50 Không Tên hợp đồng NgayKy SmallDatetime Không Ngày ký GiaTri Int Không Giá trị hợp đồng MaNV Nchar 10 Không Nhân viên ký MaKH Nchar 10 Không Mã khách hàng TNKH Nvarchar 150 Không Trách nhiệm của khách hàng TNBravo Nvarchar 150 Không Trách nhiệm của Bravo MaNVTD Nchar 10 Không Nhân viên theo dõi DaiDienKH Nvarchar 30 Không Đại diện khách hàng ThanhLy Bit 1 Có Đã thanh lý chưa HuyHD Bit 1 Có Đã hủy hợp đồng LyDo Nvarchar 150 Có Lý do hủy, thanh lý hợp đồng tblDieuKhoanThanToan Tên trường Kiểu dữ liệu Độ rộng Cho phép trống Diễn giải MaDK Int Không Mã điều khoản SoHieHD Nchar 10 Không Số hiệu hợp đồng NoiDung Nvarchar 150 Không Nội dung điều khoản NgayTH SmallDatetime Không Ngày thực hiện SoTien Int Không Số tiền phải thanh toán MaNV Nchar 10 Có Nhân viên thu tiền DaiDienKH Nvarchar 30 Có Đại diện khách hàng SoTienTT Int Có Số tiền đã thanh toán NgayTT SmallDatetime Có Ngày thanh toán GhiChu Nvarchar 100 Có Ghi chú tblKhachHang Tên trường Kiểu dữ liệu Độ rộng Cho phép trống Diễn giải MaKH Nchar 10 Không Mã khách hàng TenKH Nvarchar 100 Không Tên khách hàng DiaChi Nvarchar 150 Không Địa chỉ khách hàng DienThoai Nchar 12 Không Điện thoại NgayGD SmallDatetime Không Ngày giao dịch NgayKT SmallDatetime Có Ngày hủy giao dịch Email Nvarchar 50 Có Email Website Nvarchar 50 Có Website khách hàng Fax Nchar 12 Có Số Fax của khách hàng tblTinhTrangHD Tên trường Kiểu dữ liệu Độ rộng Cho phép trống Diễn giải MaTT Int Không Mã tình trạng SoHieuHD Nchar 10 Không Số hiệu hợp đồng MaCV Nchar 10 Không Mã công việc NgayBD SmallDatetime Không Ngày bắt đầu NgayKT SmallDatetime Không Ngày kết thúc tblNhanVien_TrienKhai Tên trường Kiểu dữ liệu Độ rộng Cho phép trống Diễn giải STT Int Không Khóa chính MaTT Int Không Mã tình trạng MaNV Nchar 10 Không Mã nhân viên thực hiẹn NoiDung Nvarchar 50 Không Công việc cần thực hiện NgayTH SmallDatetime Không Ngày thực hiện NgayHT SmallDatetime Không Ngày hoàn thành ChiPhi Int Không Chi phí thực hiện tblPhieuBaoHanh Tên trường Kiểu dữ liệu Độ rộng Cho phép trống Diễn giải MaPhieu Nchar 10 Không Mã phiếu MaNV Nchar 10 Không Nhân viên nhận bảo hành DaiDienKH Nvarchar 30 Không Đại diện khách hàng SoHieuHD Nchar 10 Không Số hiệu hợp đồng cần bảo hành NoiDung Nvarchar 150 Không Nội dung bảo hành NgayNhan SmallDatetime Không Ngày nhận bảo hành NgayTra SmallDatetime Không Ngày trả bảo hành tblNhanVien_BaoHanh Tên trường Kiểu dữ liệu Độ rộng Cho phép trống Diễn giải STT Int Không Khóa chính MaPhieu Nchar 10 Không Mã phiếu bảo hành MaNV Nchar 10 Không Nhân viên thực hiện CongViec Nvarchar 100 Không Công việc cần thực hiện NgayBD SmallDatetime Không Ngày bắt đầu NgayKT SmallDatetime Không Ngày kết thúc ChiPhi Int Không Chi phí thực hiện tblPhienBan Tên trường Kiểu dữ liệu Độ rộng Cho phép trống Diễn giải MaPB Nchar 10 Không Mã phiên bản TenPB Nvarchar 50 Không Tên phiên bản MoTa Nvarchar 150 Không Mô tả về phiên bản phần mềm. Sau khi cải đặt cơ sở dữ liệu vật lý chúng ta có sơ đồ quan hệ các thực thể như sau: Hình 3.13 Sơ đồ quan hệ thực thể (Các bảng vật lý) Kiến trúc phần mềm: Chương trình quản lý hợp đồng được thiết kế theo kiến trúc như sau: Hình 3.14 Kiến trúc chương trình quản lý hợp đồng 3.3.4 Thiết kế giao diện Theo yêu cầu của công ty, chương trình quản lý hợp đồng sẽ được thiết kế sử dụng giao diện đồ họa, tương tác trực quan với người sử dụng thông qua các nút chức năng và các tổ hợp phím tắt. Giao diện của chương trình sẽ được cài đặt theo mô hình MDI – Multiple Documents Interface. Khi chạy chương trình đầu tiên chương trình yêu cầu đăng nhập, sau khi đăng nhập thành công thì chương trình hiện ra Form chính với các chức năng tương ứng với quyền hạn của người đăng nhập. Các Form con của chương trình sẽ là các danh sách của danh mục tương ứng, các Form này cho phép thêm, sửa, xóa các danh mục bằng cách nhấn các nút chức năng tương ứng hoặc nhấn các phím nóng F3, F4, F8… Các Form cập nhật sẽ có giao diện tương ứng với các thông tin liên quan tới danh mục. MainForm Chương trình quản lý hợp đồng -- X Hệ thống menu chức năng Hệ thống toolbar chức năng Các form danh mục Tên form –F3-Thêm F4-Sửa F8-Xóa X Tên trường 1 Tên trường 2 ……. Các Form cập nhật số liệu Tên form X Các control nhập dữ liệu Thoát Lưu 3.3.5 Thiết kế chương trình Chương trình Quản lý hợp đồng được xây dựng trên mô hình 3 tầng của Microsoft về phát triển phần mềm ứng dụng. + Tầng ứng dụng: Window User Interface (WinUI) Tầng giao diện tương tác với người sử dụng. + Tầng truy cập cơ sở dữ liệu: Data Access Layer (DAL) - Đây là tầng sẽ can thiệp vào hệ quản trị cơ sở dữ liệu để lấy dữ liệu hoặc nhận dữ liệu từ tầng kinh doanh cơ sở dữ liệu để lưu vào cơ sở dữ liệu. + Tầng kinh doanh dữ liệu: Bussiness Rule – Đây là tầng trung gian giữa tầng ứng dụng và tầng truy cập cơ sở dữ liệu. Tầng này có nhiệm vụ nhận dữ liệu từ tầng ứng dụng, kiểm tra tính phù hợp của dữ liệu và truyền vào tầng truy cập dữ liệu nhằm lưu dữ liệu, ngoài ra nó còn nhận dữ liệu truyền lại từ tầng DAL và chuyển ra cho tầng ứng dụng nhằm hiển thị cho người sử dụng. Theo mô hình này thì từ tầng WinUI sẽ không thể trực tiếp can thiệp vào cơ sở dữ liệu được mà phải thông qua tầng BussinessRules, Tầng BussinessRules sẽ thông qua tầng DAL để truy vấn vào cơ sở dữ liệu. Trong tầng DAL sẽ định nghĩa các lớp tương ứng với các bảng trong cơ sở dữ liệu. các lớp này sẽ định nghĩa các phương thức insert, update, delete, select…. Các phương thức này sẽ tham chiếu tới các thủ tục lưu trữ (Store procedure) của cơ sở dữ liệu nhận kết quả từ các thủ tục lưu trữ. Các phương thức này sẽ trả về một tập dữ liệu tương ứng. Trong tầng BussinessRule cũng xây dựng các lớp tương ứng với các lớp trong tầng DAL, mỗi lớp tương ứng cũng sẽ định nghĩa các phương thức tương ứng với nó, ngoài ra các lớp trong tầng BussinessRule còn định nghĩa các phương thức nhằm kiểm tra sự hợp lệ của yêu cầu được truyền từ tâng ứng dụng. Khi thực hiện chương trình thì các yêu cầu của người sử dụng sẽ thông qua tầng ứng dụng và sẽ khởi tạo các dối tượng của tầng BussinessRule, các yêu cầu này sẽ thông qua các phương thức của các đối tượng này để tương tác với các tầng dưới nhằm truy vấn dữ liệu. Trong ngành công nghiệp phần mềm thì đây là một mô hình quan trọng, nó cho phép chia các công đoạn của quy trình lập trình thành các quy trình nhỏ độc lập với nhau, rất thích hợp với các phần mềm lớn, nhiều chức năng, nhiều lập trình viên tham gia. Chương trình sẽ dễ dàng bảo trì và phát triển. Mô hình hoạt động: Mô hình này được biểu diễn trong chương trình quản lý hợp đồng như sau: Hình 3.15 Mô hình lập trình 3 tầng trong chương trình Một số giao diện chính của chương trình Form Main Form đăng nhập hệ thống Form Đổi mật khẩu Form cập nhật phiếu bảo hành Form cập nhật danh mục Khách hàng Nhân viên Phòng ban Form lập hợp đồng Form cập nhật điều khoản thanh toán Form cập nhật triển khai hợp đồng Form cập nhật thanh toán Form tìm kiếm hợp đồng Các form danh sách có dạng (Danh sách hợp đồng) Form tìm kiếm nhanh: Tìm kiếm thông tin trực tiếp trên lưới grid Một số báo cáo đâu ra của chương trình Danh sách hợp đồng Danh sách hợp đồng theo nhân viên theo dõi Thống kê hợp đồng sắm đến hạn thanh toán, số ngày do người sử dụng tự nhập Báo cáo kết quả kinh doanh trong một năm chia theo từng quý Báo cáo tổng hợp kinh doanh sau một số năm liên tiếp hoạt động Một số thuật toán sử dụng trong chương trình Hình 3.16 Thuật toán đăng nhập Hình 3.17 Thuật toán tìm kiếm Hình 3.18 Thuật toán cập nhật Hình 3.19 Thuật toán sửa đổi dữ liệu Hình 3.20 Xóa danh mục Mục lục Trang Danh mục hình vẽ Hình 1.1 Sơ đồ cơ cấu bộ máy quản lý Hình 1.2 Sơ đồ tổ chức của công ty Hình 1.3 Quy trình sản xuất sản phẩm Hình 1.4 Quy trình thiết kế sản phẩm Hình 2.1 Tháp quản lý Hình 2.2 Mô hình hệ thống thông tin Hình 2.3 các công cụ thiết kế mô hình hóa luồng thông tin Hình 2.4 Các công cụ mô hình hóa luồng dữ liệu Hình 2.5 Công cụ mô hình hóa cơ sở dữ liệu logic Hình 2.6 Mối liên kết 1@1 Hình 2.6 Mối liên kết 1@N Hình 2.7 Mối liên kết N@N Hình 2.8 Cấu trúc công nghệ phần mềm Hình 2.9 Các giai đoạn của quy trình phát triển phần mềm Hình 2.10.a Mô hình thác nước Hình 2.10.b Mô hình thác nước Hình 2.11 Mô hình lặp và tăng dần Hình 2.12 Mô hình chuyển đổi từ vấn đề thành các giải pháp Hình 3.1 Sơ đồ luồng thông tin lập hợp đồng Hình 3.2 Sơ đồ luồng thông tin theo dõi việc bảo hành phần mềm Hình 3.3 Sơ đồ luồng thông tin của quá trình thanh toán Hình 3.4 Sơ đồ luồng dữ liệu mức ngữ cảnh Hình 3.5 Sơ đồ luồng dữ liệu phân rã mức 0 Hình 3.6 Sơ đồ luồng dữ liệu lập hợp đồng Hình 3.7 Sơ đồ luồng dữ liệu triển khai hợp đồng Hình 3.8 Sơ đồ luồng dữ liệu thanh toán hợp đồng Hình 3.9 Sơ đồ luồng dữ kiểm thử chương trình Hình 3.10 Sơ đồ luồng dữ liệu cài đặt chương trình Hình 3.11 Mối quan hệ giữa các thực thể Hình 3.12 Sơ đồ quan hệ thực thể ERD Hình 3.13 Sơ đồ quan hệ thực thể (Các bảng vật lý) Hình 3.14 Kiến trúc chương trình quản lý hợp đồng Hình 3.15 Mô hình lập trình 3 tầng trong chương trình Hình 3.16 Thuật toán đăng nhập Hình 3.17 Thuật toán tìm kiếm Hình 3.18 Thuật toán cập nhật Hình 3.19 Thuật toán sửa đổi dữ liệu Hình 3.20 Xóa danh mục Danh mục tài liệu tham khảo 1.Trương Văn Tú, Trần Thị Song Minh (2000), “Giáo trình hệ thống thông tin quản lý”,Nhà xuất bản Thống kê. 2 Nguyễn Văn Vỵ (2002), “ Phân tích thiết kế các hệ thống thông tin hiện đại”, Nhà xuất bản thống kê. 3.Trần Công Uẩn (2005), “Giáo trình cơ sở dữ liệu 1,2”, Nhà xuất bản thống kê. 4. Fergal Grimes, “Microsof.Net for programers”, Ebooks. 5. Shahab Hatami, “Basics of Crystal Report for .NET Programmers”, Ebooks. Một số mã nguồn chương trình (Mã nguồn lập hợp đồng) Stored Procedures CREATE proc [dbo].[Sp_HopDong] @Param nvarchar(15)=null, @SoHieuHD nchar(10)=null, @TenHD nvarchar(50)=null, @NgayKy smalldatetime=null, @MaNV nchar(10)=null, @MaKH nchar(10) =null, @NgayHTDK smalldatetime=null, @NgayHT smalldatetime =null, @TNKH nvarchar(50) =null, @TNBravo nvarchar(50) =null, @SoLuong integer =0 output, @SLDieuKhoanTT integer=0, @SLTinhTrangHD integer=0, @SLPhieuBH integer=0, @SLLanTT integer=0, @GiaTri integer =null, @MaNVTheoDoi nchar(10)=null, @DaiDienKH nvarchar(30)=null, @SoDuCongNo int =null, @key nvarchar(20) =null, @GhiChu nvarchar(150)=null, @NgayTL smalldatetime =null, @PhienBan int =null, @QLTienMat bit =null, @MuaHangCNPT bit=null, @BanHangCNPT bit =null, @QLHangTonKho bit =null, @QLTSCD bit=null, @TinhGia bit=null, @KTTongHop bit=null, @HeThong bit=null, @SoNgay int =0 AS if(@param='selectALl') begin select SoHieuHD,TenHD,TenPhienBan,GiaTri,NgayKy,TenKH,TenNV,NgayHTDK,NgayHT,TNKH,TNBravo,DaiDienKH,A.MaKH,A.MaNV,A.MaNVTheoDoi,SoDuCongNo,QLTienMat,MuaHangCNPT,BanHangCNPT,QLHangTonKho,QLTSCD,TinhGia,KTTongHop,HeThong,D.ID from tblHopDong A,tblNhanVien B,tblKhachHang C,tblPhienBan D where A.MaNV=B.MaNV and A.MaKH=C.MaKH and D.ID=A.PhienBan --and ThanhLy='false' and HuyHD='false' RETURN end if(@param='selectbyid') begin select * from tblHopDong where SoHieuHD=@SoHieuHD return end if(@param='selectByNV') begin select SoHieuHD,TenHD,TenPhienBan,GiaTri,NgayKy,TenKH,TenNV,NgayHTDK,NgayHT,TNKH,TNBravo,DaiDienKH,A.MaKH,A.MaNV,A.MaNVTheoDoi,SoDuCongNo,QLTienMat,MuaHangCNPT,BanHangCNPT,QLHangTonKho,QLTSCD,TinhGia,KTTongHop,HeThong,D.ID from tblHopDong A,tblNhanVien B,tblKhachHang C,tblPhienBan D where A.MaNV=B.MaNV and A.MaKH=C.MaKH and D.ID=A.PhienBan and ThanhLy='False' and HuyHD='false' and A.MaNV=@MaNV return end if(@param='selectByKH') begin select SoHieuHD,TenHD,TenPhienBan,GiaTri,NgayKy,TenKH,TenNV,NgayHTDK,NgayHT,TNKH,TNBravo,DaiDienKH,A.MaKH,A.MaNV,A.MaNVTheoDoi,SoDuCongNo,QLTienMat,MuaHangCNPT,BanHangCNPT,QLHangTonKho,QLTSCD,TinhGia,KTTongHop,HeThong,D.ID from tblHopDong A,tblNhanVien B,tblKhachHang C,tblPhienBan D where A.MaNV=B.MaNV and A.MaKH=C.MaKH and D.ID=A.PhienBan and ThanhLy='False' and HuyHD='false' and A.MaKH=@MaKH return end if @param='HDGanTT' begin select SoHieuHD,TenHD,TenPhienBan,GiaTri,NgayKy,TenKH,TenNV,NgayHTDK,NgayHT,TNKH,TNBravo,DaiDienKH,A.MaKH,A.MaNV,A.MaNVTheoDoi,SoDuCongNo,QLTienMat,MuaHangCNPT,BanHangCNPT,QLHangTonKho,QLTSCD,TinhGia,KTTongHop,HeThong,D.ID from tblHopDong A,tblNhanVien B,tblKhachHang C,tblPhienBan D where A.MaNV=B.MaNV and A.MaKH=C.MaKH and D.ID=A.PhienBan and ThanhLy=0 and HuyHD=0 and SoHieuHD in(select distinct SoHieuHD FROM tblDieuKhoanTT where datediff(day,ngaythuchien,getdate())<=@SoNgay and (soTienTT=0 or sotientt=null)) return end if(@param='TinhTrang') begin select MaTinhTrang,TenCV from tblDanhMucCV A, tblTinhTrangHD B where A.MaCV=B.MaCV and SoHieuHD=@SoHieuHD return end if(@param='insert') begin insert into tblHopDong(SoHieuHD,TenHD,NgayKy,GiaTri,MaNV,MaKH,NgayHTDK,TNKH,TNBravo,ThanhLy,MaNVTheoDoi,DaiDienKH,SoDuCongNo,QLTienMat,MuaHangCNPT,BanHangCNPT,QLHangTonKho,QLTSCD,TinhGia,KTTongHop,HeThong,PhienBan) values(@SoHieuHD,@TenHD,@NgayKy,@GiaTri,@MaNV,@MaKH,@NgayHTDK,@TNKH,@TNBravo,0,@MaNVTheoDoi,@DaiDienKH,@SoDuCongNo,@QLTienMat,@MuaHangCNPT,@BanHangCNPT,@QLHangTonKho,@QLTSCD,@TinhGia,@KTTongHop,@HeThong,@PhienBan) return end if(@param='update') begin update tblHopDong set TenHD=@TenHD,NgayKy=@NgayKy,GiaTri=@GiaTri,MaNV=@MaNV,MaKH=@MaKH,NgayHTDK=@NgayHTDK,TNKH=@TNKH,TNBravo=@TNBravo, MaNVTheoDoi=@MaNVTheoDoi,SoDuCongNo=@SoDuCongNo,QLTienMat=@QLTienMat,MuaHangCNPT=@MuaHangCNPT,BanHangCNPT=@BanHangCNPT,QLHangTonKho=@QLHangTonKho,QLTSCD=@QLTSCD,TinhGia=@TinhGia,KTTongHop=@KTTongHop,HeThong=@HeThong,PhienBan=@PhienBan where SoHieuHD=@SoHieuHD return end if(@param='delete') begin delete from tblHopDong where SoHieuHD=@SoHieuHD return end if(@param='count') begin set @SLDieuKhoanTT=(SELECT Count(*) FROM tblDieuKhoanTT where SoHieuHD=@SoHieuHD) set @SLTinhTrangHD=(SELECT Count(*) FROM tblTinhTrangHD where SoHieuHD=@SoHieuHD) set @SLPhieuBH=(SELECT Count(*) FROM tblPhieuBH where SoHieuHD=@SoHieuHD) set @SLLanTT=(SELECT Count(*) FROM tblLanThanHToan where SoHieuHD=@SoHieuHD) set @SoLuong=@SLDieuKhoanTT+@SLTinhTrangHD+@SLPhieuBH+@SLLanTT return end if(@param='ThanhLy') begin update tblHopDong set ThanhLy=1,LyDo=@GhiChu,NgayHT=@NgayTL where SoHieuHD=@SoHieuHD return end if(@param='HuyThanhLy') begin update tblHopDong set ThanhLy=0,LyDo=null,NgayHT=null where SoHieuHD=@SoHieuHD return end if(@param='huyHD') begin update tblHopDong set HuyHD=1,LyDo=@GhiChu where SoHieuHD=@SoHieuHD return end if(@param='find') begin select SoHieuHD,TenHD,GiaTri,NgayKy,TenKH,TenNV,NgayHTDK,NgayHT,TNKH,TNBravo,DaiDienKH from tblHopDong A,tblNhanVien B,tblKhachHang C,tblPhienBan where A.MaNV=B.MaNV and A.MaKH=C.MaKH and ThanhLy=0 and (SoHieuHD like @key or TenHD like @key or GiaTri like @key or TenKH like @key or TenNV like @key or TNKH like @key or TNBravo like @key or DaiDienKH like @key or tenPhienBan like @key) RETURN end if(@param='selectbyNVTD') begin SELECT NhanVienTheoDoi, TenNV, SoHieuHD, TenHD, NgayKy, GiaTri, DaiDienKH, TenKH, SoDuCongNo, ThanhLy FROM V_NhanVien_HopDong where MaNVTheoDoi=@MaNVTheoDoi return end if(@param='selectbyNVKy') begin SELECT NhanVienTheoDoi, TenNV, SoHieuHD, TenHD, NgayKy, GiaTri, DaiDienKH, TenKH, SoDuCongNo, ThanhLy FROM V_NhanVien_HopDong where MaNV=@MaNV return end if(@param='DaThanhLy') begin select SoHieuHD,TenHD,TenPhienBan,GiaTri,NgayKy,TenKH,TenNV,NgayHTDK,NgayHT,TNKH,TNBravo,DaiDienKH,A.MaKH,A.MaNV,A.MaNVTheoDoi,SoDuCongNo,QLTienMat,MuaHangCNPT,BanHangCNPT,QLHangTonKho,QLTSCD,TinhGia,KTTongHop,HeThong,D.ID from tblHopDong A,tblNhanVien B,tblKhachHang C,tblPhienBan D where A.MaNV=B.MaNV and A.MaKH=C.MaKH and D.ID=A.PhienBan and ThanhLy=1 return end if(@param='ChuaThanhLy') begin select SoHieuHD,TenHD,TenPhienBan,GiaTri,NgayKy,TenKH,TenNV,NgayHTDK,NgayHT,TNKH,TNBravo,DaiDienKH,A.MaKH,A.MaNV,A.MaNVTheoDoi,SoDuCongNo,QLTienMat,MuaHangCNPT,BanHangCNPT,QLHangTonKho,QLTSCD,TinhGia,KTTongHop,HeThong,D.ID from tblHopDong A,tblNhanVien B,tblKhachHang C,tblPhienBan D where A.MaNV=B.MaNV and A.MaKH=C.MaKH and D.ID=A.PhienBan and ThanhLy=1 and HuyHD=1 return end if(@param='DaHuy') begin select SoHieuHD,TenHD,TenPhienBan,GiaTri,NgayKy,TenKH,TenNV,NgayHTDK,NgayHT,TNKH,TNBravo,DaiDienKH,A.MaKH,A.MaNV,A.MaNVTheoDoi,SoDuCongNo,QLTienMat,MuaHangCNPT,BanHangCNPT,QLHangTonKho,QLTSCD,TinhGia,KTTongHop,HeThong,D.ID from tblHopDong A,tblNhanVien B,tblKhachHang C,tblPhienBan D where A.MaNV=B.MaNV and A.MaKH=C.MaKH and D.ID=A.PhienBan and ThanhLy=0 and HuyHD=1 return end Tầng DAL –Data Access Layer using System; using System.Collections.Generic; using System.Text; using System.Data; using System.Data.SqlClient; namespace DAL { public class HopDong { private const string PARAM = "@Param"; private const string SO_HIEU_HD = "@SoHieuHD"; private const string TEN_HD = "@TenHD"; private const string NGAY_KY = "@NgayKy"; private const string MA_NV = "@MaNV"; private const string MA_KH = "@MaKH"; private const string NGAY_HTDK = "@NgayHTDK"; private const string NGAY_HT = "@NgayHT"; private const string TN_KH = "@TNKH"; private const string TN_BRAVO = "@TNBravo"; private const string SO_LUONG = "@SoLuong"; private const string GIA_TRI = "@GiaTri"; private const string MANV_THEO_DOI = "@MaNVTheoDoi"; private const string DAI_DIEN_KH = "@DaiDienKH"; private const string SO_DU_CONG_NO = "@SoDuCongNo"; private const string KEY = "@Key"; private const string GHI_CHU = "@GhiChu"; private const string QLTIEN_MAT = "@QLTienMat"; private const string MUA_HANG_CNPT = "@MuaHangCNPT"; private const string BAN_HANG_CNPT = "@BanHangCNPT"; private const string QLHANG_TON_KHO = "@QLHangTonKho"; private const string QLTSCD = "@QLTSCD"; private const string TINH_GIA = "@TinhGia"; private const string KT_TONG_HOP = "@KTTongHop"; private const string HE_THONG = "@HeThong"; private const string PHIEN_BAN = "@PhienBan"; SqlConnection conn = null; public HopDong() { conn = new SqlConnection(new Connection().getConnectionString()); } public DataSet selectALl(ref string error) { DataSet _ds = new DataSet(); SqlDataAdapter _adt = new SqlDataAdapter("sp_HopDong", conn); _adt.SelectCommand.CommandType = CommandType.StoredProcedure; SqlParameter _para = null; _para = _adt.SelectCommand.Parameters.Add(PARAM, SqlDbType.NVarChar); _para.Value = "selectall"; try { _adt.Fill(_ds); } catch (SqlException _ex) { error = _ex.StackTrace + _ex.Message; } return _ds; } public SqlDataReader selectByID(ref string error, string SoHieuHD) { SqlDataReader _rd = null; SqlCommand _cmd = new SqlCommand("SP_HopDong", conn); _cmd.CommandType = CommandType.StoredProcedure; SqlParameter _para = null; _para = _cmd.Parameters.Add(PARAM, SqlDbType.NVarChar); _para.Value = "selectByID"; _para = _cmd.Parameters.Add(SO_HIEU_HD, SqlDbType.NChar); _para.Value = SoHieuHD; try { conn.Open(); _rd = _cmd.ExecuteReader(CommandBehavior.CloseConnection); } catch (SqlException _ex) { error = _ex.StackTrace + _ex.Message; } return _rd; } public DataSet selectByNhanVien(ref string error, string MaNhanVien) { DataSet _ds = new DataSet(); SqlDataAdapter _adt = new SqlDataAdapter("sp_HopDong", conn); _adt.SelectCommand.CommandType = CommandType.StoredProcedure; SqlParameter _para = null; _para = _adt.SelectCommand.Parameters.Add(PARAM, SqlDbType.NVarChar); _para.Value = "selectByNV"; _para = _adt.SelectCommand.Parameters.Add(MA_NV, SqlDbType.NChar); _para.Value = MaNhanVien; try { _adt.Fill(_ds); } catch (SqlException _ex) { error = _ex.StackTrace + _ex.Message; } return _ds; } public DataSet selectByKhachHang(ref string error, string MaKhachHang) { DataSet _ds = new DataSet(); SqlDataAdapter _adt = new SqlDataAdapter("sp_HopDong", conn); _adt.SelectCommand.CommandType = CommandType.StoredProcedure; SqlParameter _para = null; _para = _adt.SelectCommand.Parameters.Add(PARAM, SqlDbType.NVarChar); _para.Value = "selectByKH"; _para = _adt.SelectCommand.Parameters.Add(MA_KH, SqlDbType.NChar); _para.Value = MaKhachHang; try { _adt.Fill(_ds); } catch (SqlException _ex) { error = _ex.StackTrace + _ex.Message; } return _ds; } public DataSet daThanhLy(ref string error) { DataSet _ds = new DataSet(); SqlDataAdapter _adt = new SqlDataAdapter("sp_HopDong", conn); _adt.SelectCommand.CommandType = CommandType.StoredProcedure; SqlParameter _para = null; _para = _adt.SelectCommand.Parameters.Add(PARAM, SqlDbType.NVarChar); _para.Value = "DaThanhLy"; try { _adt.Fill(_ds); } catch (SqlException _ex) { error = _ex.StackTrace + _ex.Message; } return _ds; } public DataSet dsTinhTrang(ref string error, string soHieuHD) { DataSet _ds = new DataSet(); SqlDataAdapter _adt = new SqlDataAdapter("sp_HopDong", conn); _adt.SelectCommand.CommandType = CommandType.StoredProcedure; SqlParameter _para = null; _para = _adt.SelectCommand.Parameters.Add(PARAM, SqlDbType.NVarChar); _para.Value = "TinhTrang"; _para = _adt.SelectCommand.Parameters.Add(SO_HIEU_HD, SqlDbType.NChar); _para.Value = soHieuHD; try { _adt.Fill(_ds); } catch (SqlException _ex) { error = _ex.StackTrace + _ex.Message; } return _ds; } public void insert(ref string error, string SoHieuHD, string TenHD,int GiaTri, DateTime NgayKy, string MaNV,string MaKH,DateTime NgayHTDK,DateTime NgayHT,string TNKH,string TNBravo,string MaNVTheoDoi,string DaiDienKH,int SoDuCongNo,bool QLTienMat,bool MuaHang,bool BanHang,bool HangTonKho,bool TSCD,bool TinhGia,bool KTTongHop,bool HeThong,int phienban) { SqlCommand _cmd = new SqlCommand("Sp_HopDong", conn); _cmd.CommandType = CommandType.StoredProcedure; SqlParameter _para = null; _para = _cmd.Parameters.Add(PARAM, SqlDbType.NVarChar); _para.Value = "insert"; _para = _cmd.Parameters.Add(SO_HIEU_HD, SqlDbType.NChar); _para.Value = SoHieuHD; _para = _cmd.Parameters.Add(TEN_HD, SqlDbType.NVarChar); _para.Value = TenHD; _para = _cmd.Parameters.Add(NGAY_KY, SqlDbType.SmallDateTime); _para.Value = NgayKy; _para = _cmd.Parameters.Add(MA_NV, SqlDbType.NChar); _para.Value = MaNV; _para = _cmd.Parameters.Add(MA_KH, SqlDbType.NChar); _para.Value = MaKH; _para = _cmd.Parameters.Add(NGAY_HTDK, SqlDbType.SmallDateTime); _para.Value = NgayHTDK; _para = _cmd.Parameters.Add(NGAY_HT, SqlDbType.SmallDateTime); _para.Value = NgayHT; _para = _cmd.Parameters.Add(TN_KH, SqlDbType.NVarChar); _para.Value = TNKH; _para = _cmd.Parameters.Add(TN_BRAVO, SqlDbType.NVarChar); _para.Value = TNBravo; _para = _cmd.Parameters.Add(GIA_TRI, SqlDbType.Int); _para.Value = GiaTri; _para = _cmd.Parameters.Add(MANV_THEO_DOI, SqlDbType.NChar); _para.Value = MaNVTheoDoi; _para = _cmd.Parameters.Add(DAI_DIEN_KH, SqlDbType.NVarChar); _para.Value = DaiDienKH; _para = _cmd.Parameters.Add(SO_DU_CONG_NO, SqlDbType.Int); _para.Value = SoDuCongNo; _para = _cmd.Parameters.Add(QLTIEN_MAT, SqlDbType.Bit); _para.Value = QLTienMat; _para = _cmd.Parameters.Add(MUA_HANG_CNPT, SqlDbType.Bit); _para.Value = MuaHang; _para = _cmd.Parameters.Add(BAN_HANG_CNPT, SqlDbType.Bit); _para.Value = BanHang; _para = _cmd.Parameters.Add(QLHANG_TON_KHO, SqlDbType.Bit); _para.Value = HangTonKho; _para = _cmd.Parameters.Add(QLTSCD, SqlDbType.Bit); _para.Value = TSCD; _para = _cmd.Parameters.Add(TINH_GIA, SqlDbType.Bit); _para.Value = TinhGia; _para = _cmd.Parameters.Add(KT_TONG_HOP, SqlDbType.Bit); _para.Value = KTTongHop; _para = _cmd.Parameters.Add(HE_THONG, SqlDbType.Bit); _para.Value = HeThong; _para = _cmd.Parameters.Add(PHIEN_BAN, SqlDbType.Int); _para.Value = phienban; try { conn.Open(); _cmd.ExecuteNonQuery(); } catch (SqlException _ex) { error = _ex.StackTrace + _ex.Message; } finally { if (conn.State == ConnectionState.Open) conn.Close(); } } public void update(ref string error, string SoHieuHD, string TenHD, int GiaTri, DateTime NgayKy, string MaNV, string MaKH, DateTime NgayHTDK, DateTime NgayHT, string TNKH, string TNBravo, string MaNVTheoDoi, string DaiDienKH, int SoDuCongNo, bool QLTienMat, bool MuaHang, bool BanHang, bool HangTonKho, bool TSCD, bool TinhGia, bool KTTongHop, bool HeThong,int phienban) { SqlCommand _cmd = new SqlCommand("Sp_HopDong", conn); _cmd.CommandType = CommandType.StoredProcedure; SqlParameter _para = null; _para = _cmd.Parameters.Add(PARAM, SqlDbType.NVarChar); _para.Value = "update"; _para = _cmd.Parameters.Add(SO_HIEU_HD, SqlDbType.NChar); _para.Value = SoHieuHD; _para = _cmd.Parameters.Add(TEN_HD, SqlDbType.NVarChar); _para.Value = TenHD; _para = _cmd.Parameters.Add(NGAY_KY, SqlDbType.SmallDateTime); _para.Value = NgayKy; _para = _cmd.Parameters.Add(MA_NV, SqlDbType.NChar); _para.Value = MaNV; _para = _cmd.Parameters.Add(MA_KH, SqlDbType.NChar); _para.Value = MaKH; _para = _cmd.Parameters.Add(NGAY_HTDK, SqlDbType.SmallDateTime); _para.Value = NgayHTDK; _para = _cmd.Parameters.Add(NGAY_HT, SqlDbType.SmallDateTime); _para.Value = NgayHT; _para = _cmd.Parameters.Add(TN_KH, SqlDbType.NVarChar); _para.Value = TNKH; _para = _cmd.Parameters.Add(TN_BRAVO, SqlDbType.NVarChar); _para.Value = TNBravo; _para = _cmd.Parameters.Add(GIA_TRI, SqlDbType.Int); _para.Value = GiaTri; _para = _cmd.Parameters.Add(MANV_THEO_DOI, SqlDbType.NChar); _para.Value = MaNVTheoDoi; _para = _cmd.Parameters.Add(DAI_DIEN_KH, SqlDbType.NVarChar); _para.Value = DaiDienKH; _para = _cmd.Parameters.Add(SO_DU_CONG_NO, SqlDbType.Int); _para.Value = SoDuCongNo; _para = _cmd.Parameters.Add(QLTIEN_MAT, SqlDbType.Bit); _para.Value = QLTienMat; _para = _cmd.Parameters.Add(MUA_HANG_CNPT, SqlDbType.Bit); _para.Value = MuaHang; _para = _cmd.Parameters.Add(BAN_HANG_CNPT, SqlDbType.Bit); _para.Value = BanHang; _para = _cmd.Parameters.Add(QLHANG_TON_KHO, SqlDbType.Bit); _para.Value = HangTonKho; _para = _cmd.Parameters.Add(QLTSCD, SqlDbType.Bit); _para.Value = TSCD; _para = _cmd.Parameters.Add(TINH_GIA, SqlDbType.Bit); _para.Value = TinhGia; _para = _cmd.Parameters.Add(KT_TONG_HOP, SqlDbType.Bit); _para.Value = KTTongHop; _para = _cmd.Parameters.Add(HE_THONG, SqlDbType.Bit); _para.Value = HeThong; _para = _cmd.Parameters.Add(PHIEN_BAN, SqlDbType.Int); _para.Value = phienban; try { conn.Open(); _cmd.ExecuteNonQuery(); } catch (SqlException _ex) { error = _ex.StackTrace + _ex.Message; } finally { if (conn.State == ConnectionState.Open) conn.Close(); } } public void delete(ref string error, string SoHieuHD) { SqlCommand _cmd = new SqlCommand("Sp_HopDong", conn); _cmd.CommandType = CommandType.StoredProcedure; SqlParameter _para = null; _para = _cmd.Parameters.Add(PARAM, SqlDbType.NVarChar); _para.Value = "delete"; _para = _cmd.Parameters.Add(SO_HIEU_HD, SqlDbType.NChar); _para.Value = SoHieuHD; try { conn.Open(); _cmd.ExecuteNonQuery(); } catch (SqlException _ex) { error = _ex.StackTrace + _ex.Message; } finally { if (conn.State == ConnectionState.Open) conn.Close(); } } public void thanhLy(ref string error, string SoHieuHD,DateTime NgayTL,string GhiChu) { SqlCommand _cmd = new SqlCommand("Sp_HopDong", conn); _cmd.CommandType = CommandType.StoredProcedure; SqlParameter _para = null; _para = _cmd.Parameters.Add(PARAM, SqlDbType.NVarChar); _para.Value = "ThanhLy"; _para = _cmd.Parameters.Add(SO_HIEU_HD, SqlDbType.NChar); _para.Value = SoHieuHD; _para = _cmd.Parameters.Add(NGAY_HT, SqlDbType.SmallDateTime); _para.Value = NgayTL; _para = _cmd.Parameters.Add(GHI_CHU, SqlDbType.NVarChar); _para.Value = GhiChu; try { conn.Open(); _cmd.ExecuteNonQuery(); } catch (SqlException _ex) { error = _ex.StackTrace + _ex.Message; } finally { if (conn.State == ConnectionState.Open) conn.Close(); } } public void huyThanhLy(ref string error, string SoHieuHD) { SqlCommand _cmd = new SqlCommand("Sp_HopDong", conn); _cmd.CommandType = CommandType.StoredProcedure; SqlParameter _para = null; _para = _cmd.Parameters.Add(PARAM, SqlDbType.NVarChar); _para.Value = "huyThanhLy"; _para = _cmd.Parameters.Add(SO_HIEU_HD, SqlDbType.NChar); _para.Value = SoHieuHD; try { conn.Open(); _cmd.ExecuteNonQuery(); } catch (SqlException _ex) { error = _ex.StackTrace + _ex.Message; } finally { if (conn.State == ConnectionState.Open) conn.Close(); } } public void huyHopDong(ref string error, string SoHieuHD, string GhiChu) { SqlCommand _cmd = new SqlCommand("Sp_HopDong", conn); _cmd.CommandType = CommandType.StoredProcedure; SqlParameter _para = null; _para = _cmd.Parameters.Add(PARAM, SqlDbType.NVarChar); _para.Value = "huyHD"; _para = _cmd.Parameters.Add(SO_HIEU_HD, SqlDbType.NChar); _para.Value = SoHieuHD; _para = _cmd.Parameters.Add(GHI_CHU, SqlDbType.NVarChar); _para.Value = GhiChu; try { conn.Open(); _cmd.ExecuteNonQuery(); } catch (SqlException _ex) { error = _ex.StackTrace + _ex.Message; } finally { if (conn.State == ConnectionState.Open) conn.Close(); } } public int count(ref string error, string SoHieuHD) { int _SoLuong = 0; SqlCommand _cmd = new SqlCommand("sp_HopDong", conn); _cmd.CommandType = CommandType.StoredProcedure; SqlParameter _para = null; _para = _cmd.Parameters.Add(PARAM, SqlDbType.NVarChar); _para.Value = "count"; _para = _cmd.Parameters.Add(SO_HIEU_HD, SqlDbType.NChar); _para.Value = SoHieuHD; _para = _cmd.Parameters.Add(SO_LUONG, SqlDbType.Int); _cmd.Parameters[SO_LUONG].Direction = ParameterDirection.Output; try { conn.Open(); _cmd.ExecuteNonQuery(); _SoLuong = Convert.ToInt32(_cmd.Parameters[SO_LUONG].Value.ToString()); } catch (SqlException _ex) { error = _ex.StackTrace + _ex.Message; } finally { if (conn.State == ConnectionState.Open) conn.Close(); } return _SoLuong; } public DataSet find(ref string error,string key) { DataSet _ds = new DataSet(); SqlDataAdapter _adt = new SqlDataAdapter("sp_HopDong", conn); _adt.SelectCommand.CommandType = CommandType.StoredProcedure; SqlParameter _para = null; _para = _adt.SelectCommand.Parameters.Add(PARAM, SqlDbType.NVarChar); _para.Value = "find"; _para = _adt.SelectCommand.Parameters.Add(KEY, SqlDbType.NChar); _para.Value = key; try { _adt.Fill(_ds); } catch (SqlException _ex) { error = _ex.StackTrace + _ex.Message; } return _ds; } public DataSet timKiem(ref string error, string tuyChon, string tuKhoa, string giaTri, string kieuSoSanh, DateTime ngayKy, string thang, string nam, int quy, DateTime tuNgay, DateTime denNgay,bool TheoTuKhoa,bool TheoGiaTri,string phamViTK,ref string queryString) { string Sql; Sql = "select SoHieuHD,TenHD,TenPhienBan,GiaTri,NgayKy,TenKH,TenNV,NgayHTDK,NgayHT,TNKH,TNBravo,DaiDienKH,A.MaKH,A.MaNV,A.MaNVTheoDoi,SoDuCongNo,QLTienMat,MuaHangCNPT,BanHangCNPT,QLHangTonKho,QLTSCD,TinhGia,KTTongHop,HeThong,D.ID from tblHopDong A,tblNhanVien B,tblKhachHang C,tblPhienBan D where (A.MaNV=B.MaNV and A.MaKH=C.MaKH and A.PhienBan=D.ID) "; if (phamViTK.Equals("Chưa thanh lý")) { Sql = Sql + " and ( ThanhLy=0) and (HuyHD=0)"; } else if(phamViTK.Equals("Đã thanh lý")) { Sql = Sql + " and (ThanhLy=1) and (HuyHD=0)"; } else if(phamViTK.Equals("Bị hủy bỏ")) { Sql = Sql + " and (HuyHD=1) "; } if (tuyChon.Equals("Theo ngày")) { Sql = Sql + " and (NgayKy='"+ngayKy.ToShortDateString()+"') " ; } else if (tuyChon.Equals("Theo tháng")) { Sql = Sql + " and ( MONTH(NgayKy)="+thang+" and YEAR(NgayKy)="+nam+" )"; } else if (tuyChon.Equals("Theo quý")) { if (quy ==1) { Sql = Sql + " and (MONTH(NgayKy)<=3 and YEAR(NgayKy)="+nam+" ) "; } else if (quy == 2) { Sql = Sql + " and (MONTH(NgayKy) >3 and MONTH(NgayKy)<=6 and YEAR(NgayKy)=" + nam + " ) "; } else if(quy==3) { Sql = Sql + " and (MONTH(NgayKy) >6 and MONTH(NgayKy)<=9 and YEAR(NgayKy)=" + nam + " ) "; } else { Sql = Sql + " and ((MONTH(NgayKy) >9 and MONTH(NgayKy)<=12) and YEAR(NgayKy)=" + nam + " ) "; } } else if (tuyChon.Equals("Theo năm")) { Sql = Sql + " and ( YEAR(NgayKy)="+nam+" )"; } else if (tuyChon.Equals("Từ ngày")) { Sql = Sql + " and (NgayKy BETWEEN '"+tuNgay.ToString()+"' and '"+denNgay.ToString()+"' )"; } if (TheoTuKhoa == true) { Sql = Sql + " and (SoHieuHD like " + tuKhoa + " or TenHD like " + tuKhoa + " or TenKH like " + tuKhoa + " or TenNV like " + tuKhoa + " or TNKH like " + tuKhoa + " or TNBravo like " + tuKhoa + " or DaiDienKH like " + tuKhoa + " or tenPhienBan like " + tuKhoa + ")"; } if (TheoGiaTri == true) { Sql = Sql + " and GiaTri " + kieuSoSanh + " " + giaTri; } DataSet ds = new DataSet(); queryString = Sql; SqlDataAdapter adt = new SqlDataAdapter(Sql, conn); adt.SelectCommand.CommandType = CommandType.Text; try { adt.Fill(ds); } catch(SqlException ex) { error = Sql + "; " + ex.StackTrace + " ; " + ex.Message; } return ds; } } } Tầng Bussiness Rules using System; using System.Collections.Generic; using System.Text; using DAL; using System.Data; using System.Data.SqlClient; namespace BussinessRules { public class HopDongRules { private HopDong hd = null; public HopDongRules() { hd = new HopDong(); } #region public method public DataSet selectAll(ref string error) { return hd.selectALl(ref error); } public DataSet find(ref string error, string key) { return hd.find(ref error, key); } public SqlDataReader selectByID(ref string error, string SoHieuHD) { return hd.selectByID(ref error, SoHieuHD); } public DataSet selectByNhanVien(ref string error, string MaNhanVien) { return hd.selectByNhanVien(ref error, MaNhanVien); } public DataSet selectByKhachHang(ref string error, string MaKhachHang) { return hd.selectByKhachHang(ref error, MaKhachHang); } public DataSet daThanhLy(ref string error) { return hd.daThanhLy(ref error); } public DataSet dsTinhTrang(ref string error, string sohieuHopDong) { return hd.dsTinhTrang(ref error, sohieuHopDong); } public void huyThanhLy(ref string error, string SoHieuHD) { hd.huyThanhLy(ref error, SoHieuHD); } public void insert(ref string error, string SoHieuHD, string TenHD, DateTime NgayKy, int GiaTri, string MaNV, string MaKH, DateTime NgayHTDuKien, DateTime NgayHT, string TrachNhiemKH, string TNBravo, string MaNhanVienTheoDoi, string DaiDienKhachHang, int SoDuCongNo, bool QLTienMat, bool MuaHang, bool BanHang, bool HangTonKho, bool TSCD, bool TinhGia, bool KTTongHop, bool HeThong,int phienban) { if(!CheckIDExist(ref error,SoHieuHD)) hd.insert(ref error, SoHieuHD, TenHD, GiaTri, NgayKy, MaNV, MaKH, NgayHTDuKien, NgayHT, TrachNhiemKH, TNBravo,MaNhanVienTheoDoi,DaiDienKhachHang,SoDuCongNo,QLTienMat,MuaHang,BanHang,HangTonKho,TSCD,TinhGia,KTTongHop,HeThong,phienban); } public void update(ref string error, string SoHieuHD, string TenHD, DateTime NgayKy, int GiaTri, string MaNV, string MaKH, DateTime NgayHTDuKien, DateTime NgayHT, string TrachNhiemKH, string TNBravo, string MaNhanVienTheoDoi, string DaiDienKhachHang, int SoDuCongNo, bool QLTienMat, bool MuaHang, bool BanHang, bool HangTonKho, bool TSCD, bool TinhGia, bool KTTongHop, bool HeThong,int phienban) { hd.update(ref error, SoHieuHD, TenHD, GiaTri, NgayKy, MaNV, MaKH, NgayHTDuKien, NgayHT, TrachNhiemKH, TNBravo, MaNhanVienTheoDoi, DaiDienKhachHang, SoDuCongNo, QLTienMat, MuaHang, BanHang, HangTonKho, TSCD, TinhGia, KTTongHop, HeThong,phienban); } public void delete(ref string error, string SoHieuHD) { if (!CheckDelete(ref error, SoHieuHD)) hd.delete(ref error, SoHieuHD); } public void thanhLy(ref string error, string SoHieuHD,DateTime NgayTL,string GhiChu) { hd.thanhLy(ref error, SoHieuHD,NgayTL,GhiChu); } public DataSet timKiem(ref string error, string tuyChon, string tuKhoa, string giaTri, string kieuSoSanh, DateTime ngayKy, string thang, string nam, int quy, DateTime tuNgay, DateTime denNgay, bool TheoTuKhoa, bool TheoGiaTri,string phamViTK,ref string queryString) { return hd.timKiem(ref error, tuyChon, tuKhoa, giaTri, kieuSoSanh, ngayKy, thang, nam, quy, tuNgay, denNgay, TheoTuKhoa, TheoGiaTri, phamViTK,ref queryString); } #endregion #region private method private bool CheckIDExist(ref string error, string SoHieuHD) { SqlDataReader _rd = hd.selectByID(ref error, SoHieuHD); bool _flag = false; if (_rd.Read()) { _flag = true; error = "Thưa ngài số hiệu hợp đồng\""+SoHieuHD+"\" đã tồn tại"; } _rd.Close(); return _flag; } private bool CheckDelete(ref string error, string SoHieuHD) { int _SoLuong = 0; bool _flag = false; _SoLuong = hd.count(ref error, SoHieuHD); if (_SoLuong > 0) { error = "Thưa ngài đã có phát sinh tới hợp đồng này, Ngài không được phép xóa"; _flag = true; } return _flag; } #endregion } } Tầng giao diện người sử dụng WinUI –Window User Interface using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using BussinessRules; using WinUI.library; namespace WinUI.form { public partial class frmdsHopDong : WinUI.form.root { public event CloseForm FormClose; string SoHieuHD; HopDongRules hd; frmdsDieuKhoanTT dk; frmdsTinhTrang tt; frmdsNhanVien_TrienKhai nvtk; frmdsLanThanhToan ltt; public frmdsHopDong() { InitializeComponent(); hd = new HopDongRules(); } public frmdsHopDong(frmdsTinhTrang _dk) { InitializeComponent(); hd = new HopDongRules(); tt = _dk; } public frmdsHopDong(frmdsDieuKhoanTT _dk) { InitializeComponent(); hd = new HopDongRules(); dk = _dk; } public frmdsHopDong(frmdsNhanVien_TrienKhai _nvtk) { InitializeComponent(); hd = new HopDongRules(); nvtk = _nvtk; } public frmdsHopDong(frmdsLanThanhToan _ltt) { InitializeComponent(); hd = new HopDongRules(); ltt = _ltt; } private void frmdsHopDong_Load(object sender, EventArgs e) { //string SoHieuHD,TenHD,GiaTri,NgayKy,TenKH,TenNV,NgayHTDK,NgayHT,TNKH,TNBravo,DaiDienKH,A.MaKH,A.MaNV,A.MaNVTheoDoi,SoDuCongNo; try { dataGridView1.Columns[0].HeaderText = "Số HHD"; dataGridView1.Columns["TenHD"].HeaderText = "Tên HĐ"; dataGridView1.Columns["GiaTri"].HeaderText = "Giá trị"; dataGridView1.Columns["NgayKy"].HeaderText = "Ngày ký"; dataGridView1.Columns["TenKh"].HeaderText = "Khách hàng"; dataGridView1.Columns["TenNV"].HeaderText = "Người ký"; dataGridView1.Columns["NgayHTDK"].HeaderText = "Ngày HT"; dataGridView1.Columns["NgayHT"].Visible = false; dataGridView1.Columns["TNKH"].Visible = false; dataGridView1.Columns["TNBRAVO"].Visible = false; dataGridView1.Columns["DaiDienKH"].HeaderText = "Đại diện KH"; dataGridView1.Columns["MaKH"].Visible = false; dataGridView1.Columns["MaNV"].Visible = false; dataGridView1.Columns["MaNVTHeoDoi"].Visible = false; dataGridView1.Columns["SoDuCongNo"].HeaderText = "Còn nợ"; dataGridView1.Columns["QLTienMat"].HeaderText = "Tiền mặt"; dataGridView1.Columns["MuaHangCNPT"].HeaderText = "Mua hàng"; dataGridView1.Columns["BanHangCNPT"].HeaderText = "Bán hàng"; dataGridView1.Columns["QLHangTonKho"].HeaderText = "Tồn kho"; dataGridView1.Columns["QLTSCD"].HeaderText = "TSCĐ"; dataGridView1.Columns["TinhGia"].HeaderText = "Tính giá"; dataGridView1.Columns["KTTOngHop"].HeaderText = "KT Tổng hợp"; dataGridView1.Columns["HeThong"].HeaderText = "Hệ thống"; dataGridView1.Columns["TenPhienBan"].HeaderText = "Phiên bản"; dataGridView1.Columns["id"].Visible = false; } catch { } } public override void loadDatagrid() { base.loadDatagrid(); string _error = ""; DataSet _ds; _ds = hd.selectAll(ref _error); //if (LoaiForm.ToLower().Equals("dshopdong")) //{ //} //else if (LoaiForm.ToLower().Equals("")) //{ //} //else if (LoaiForm.ToLower().Equals("")) //{ //} //else if (LoaiForm.ToLower().Equals("")) //{ //} //else if (LoaiForm.ToLower().Equals("")) //{ //} //else //{ // _ds = hd.selectAll(ref _error); //} if (_error == "") { TableSourceGrid = _ds.Tables[0]; dataGridView1.DataSource = TableSourceGrid; } } public override void loadDatagrid(string maNguonGrid) { base.loadDatagrid(maNguonGrid); } public override void insert() { base.insert(); frmHopDong _hd = new frmHopDong(TITLE, null); _hd.setCaption = "CẬP NHẬT HỢP ĐỒNG"; if (_hd.ShowDialog() == DialogResult.OK) { loadDatagrid(); SoHieuHD = _hd.txtSoHieuHD.Text; if (dk != null) { dk.loadDatagrid(SoHieuHD); dk.soHieuHopDong = SoHieuHD; dk.insert(); } } } public override void update(DataRow row) { base.update(row); frmHopDong _hd = new frmHopDong(TITLE, row); _hd.setCaption = "SỬA ĐỔI HỢP ĐỒNG"; if (_hd.ShowDialog() == DialogResult.OK) { loadDatagrid(); if (dk != null) { dk.Activate(); } } } public override void delete() { base.delete(); DataRow _row = new WinUI.library.utility().getDataRow(dataGridView1); string _error = ""; DialogResult _re = MessageBox.Show("Thưa ngài có thực sự muốn xóa hợp đồng này không?", TITLE, MessageBoxButtons.YesNo); if (_re == DialogResult.Yes) { hd.delete(ref _error, _row[0].ToString()); if (_error != "") MessageBox.Show(_error, TITLE); else loadDatagrid(); } } public override void delete(string maDoiTuong) { base.delete(maDoiTuong); } public override void print() { base.print(); //DataRow row = new WinUI.library.utility().getDataRow(dataGridView1); //if (row != null) //{ WinUI.report.frmShowReport _re = new WinUI.report.frmShowReport("danhsachhopdong"); //_re.QueryString = row["SoHieuHD"].ToString(); _re.ShowDialog(); //} } public override void loadDatagridInOrtherForm() { base.loadDatagridInOrtherForm(); DataRow row = new utility().getDataRow(dataGridView1); if (row != null) { if (dk != null) { dk.loadDatagrid(row[0].ToString()); dk.soHieuHopDong = row[0].ToString(); } if (tt != null) { tt.loadDatagrid(row[0].ToString()); } if (nvtk != null) { nvtk.loadDatagrid(row[0].ToString()); } if (ltt != null) { ltt.loadDatagrid(row[0].ToString()); } } } public override void showOrtherForm() { base.showOrtherForm(); loadDatagridInOrtherForm(); int _temp = 0; frmdsNhanVien_TrienKhai tk; frmdsTinhTrang tt; foreach (Form f in ((frmMain)this.MdiParent).MdiChildren) { if (f.GetType() == typeof(frmdsTinhTrang)) { tt = (frmdsTinhTrang)f; tt.Show(); _temp = 1; } if (f.GetType() == typeof(frmdsNhanVien_TrienKhai)) { tk = (frmdsNhanVien_TrienKhai)f; tk.Show(); _temp++; } } } private void frmdsHopDong_FormClosing(object sender, FormClosingEventArgs e) { FormClose(); } public override void thanhLyHD() { base.thanhLyHD(); DataRow _row = new WinUI.library.utility().getDataRow(dataGridView1); if (_row != null) { frmThanhLyHopDong _tl = new frmThanhLyHopDong(TITLE); _tl.SoHieuHopDong = _row["SoHieuHD"].ToString().Trim(); if (_tl.ShowDialog() == DialogResult.OK) loadDatagrid(); } } public override void huyHopDong() { base.huyHopDong(); } public void GanThanhToan(int SoNgay) { DataTable _reTable = TableSourceGrid; DataTable table = _reTable.Clone(); ; int _numRow = _reTable.Rows.Count; DataRow _row; int _NumCol = _reTable.Columns.Count; string _soHieuHD = ""; bool flag = false; for(int i=0;i<_numRow;i++) { _row = _reTable.Rows[i]; _soHieuHD = _row["SoHieuHD"].ToString(); if (checkDate(_soHieuHD, SoNgay) == true) { object[] _obj = new object[_NumCol]; for (int j = 0; j < _NumCol; j++) { _obj[j] = _row[j].ToString(); } table.Rows.Add(_obj); } } table.AcceptChanges(); dataGridView1.DataSource = table; } private bool checkDate(string SoHieuHD,int SoNgay) { bool _re = false; DataSet _ds; DataTable _table; DataRow _row; DateTime _NgayTT, _Now; _Now = DateTime.Now; DieuKhoanTTRules _dk = new DieuKhoanTTRules(); string _error = ""; double _dnow, _dtt; int _NumDay; int _numRow; _dnow = _Now.ToOADate(); _ds = _dk.selectALl(ref _error); _table = _ds.Tables[0]; _numRow = _table.Rows.Count; for(int i = 0;i <_numRow;i++) { _row = _table.Rows[i]; _NgayTT = Convert.ToDateTime(_row["NgayThucHien"].ToString()); _dtt = _NgayTT.ToOADate(); _dnow = _dnow - _dtt; _NumDay = Convert.ToInt32(_dnow); MessageBox.Show(_NumDay.ToString()); if (_NumDay <= SoNgay) _re = true; break; } return _re; } } }

Các file đính kèm theo tài liệu này:

  • doc32152.doc