Thông tin của mỗi giao dịch tiết kiệm gồm: Mã số giao dịch, Ngày giao dịch, Mã sổ tiết kiệm, Mã loại giao dịch, Mã chi nhánh giao dịch, Mã nhân viên giao dịch, Số tiền giao dịch.. Đối vớ
Trang 1TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP HỒ CHÍ MINH
KHOA CÔNG NGHỆ THÔNG TIN
BỘ MÔN HỆ THỐNG THÔNG TIN
Học kỳ: 1 Năm học: 2022 - 2023
Thành phố Hồ Chí Minh, tháng 11, năm 2022
Trang 2DANH SÁCH SINH VIÊN NHÓM THỰC HIỆN
Tp Hồ Chí Minh, ngày …., tháng 11, năm 2022
Giảng viên chấm điểm
Trang 3MỤC LỤC
Contents
LỜI NÓI ĐẦU 2
CHƯƠNG 1 TỔNG QUAN VỀ HỆ THỐNG 3
1 Đặc tả đề tài 3
1.1 Mô tả bài toán 3
1.2 Nghiệp vụ của bài toán 4
1.3 Mô tả các chức năng của bài toán 5
1.4 Một số hình thức gửi tiết kiệm 6
1.5 Phương pháp tính lãi suất 6
1.6 Phương thức tính lãi 7
CHƯƠNG 2 PHÂN TÍCH THIẾT KẾ HỆ THỐNG 9
1 Thiết kế cơ sở dữ liệu mức quan niệm 9
2 Thiết kế cơ sở dữ liệu mức logic 9
3 Các ràng buộc cần có 11
4 Cài đặt CSDL và các ràng buộc 11
1.7 4.1 Tạo bảng và các ràng buộc đơn giản .11
5 Các ràng buộc khác 15
6 Trigger kiểm tra các ràng buộc 15
7 Các view 18
CHƯƠNG 3 THIẾT KẾ CÁC CHỨC NĂNG 21
1 Kết nối cơ sở dữ liệu 21
2 Xem thông tin danh mục 21
3 Quản lý nhân viên 22
4 Quản lý Sổ tiết kiệm 24
5 Quản lý Giao dịch tiết kiệm 25
CHƯƠNG 4 TẠO USER VÀ PHÂN QUYỀN 45
CHƯƠNG 5 THIẾT KẾ GIAO DIỆN HỆ THỐNG 47
Trang 41
LỜI CẢM ƠN
Lời đầu tiên, chúng em xin chân thành cảm ơn sự hướng dẫn tận tình của thầy
Nguyễn Thành Sơn đã giúp chúng em hoàn thành bài báo cáo cuối kì bộ môn Hệ quản trị
cơ sở dữ liệu này Nhờ những kiến thức thầy truyền đạt mà chúng em đã nắm chắc hơn được những kiến thức căn bản, nền tảng cho việc khi xây dựng một hệ thống quản trị cơ sở
dữ liệu Thông qua đồ án này, nhóm em xin trình bày lại quá trình phát triển của một hệ thống quản trị cơ sở dữ liệu, cũng như lập trình một đồ án liên quan
Trong quá trình thực hiện đồ án môn học, khó tránh khỏi những sai sót Do đó nhóm chúng em rất mong sự góp ý đến từ thầy để bài làm của nhóm chúng em được hoàn thiện hơn, phát triển và đầy đủ hơn Kính chúc thầy sức khỏe, hạnh phúc thành công trên con đường sự nghiệp giảng dạy
Cuối cùng chúng em cũng chân thành cảm ơn các thầy cô và các bạn cùng tham gia học bộ môn Hệ quản trị sơ sở dữ liệu đã nhiệt tình giúp đỡ động viên chúng em trong trình thực hiện đồ án cuối kì
Trang 5LỜI NÓI ĐẦU
Trong nhiều năm trở lại đây, ngành công nghệ thông tin thực sự đã len lỏi vào từng ngóc ngách của đời sống xã hội Bất kể một lĩnh vực hay ngành nghề nào cũng đều ứng dụng các công nghệ thông tin CNTT đã và đang đóng vai trò quan trọng trong đời sống kinh tế, xã hội của nhiều quốc gia trên thế giới và Việt Nam cũng vậy, ứng dụng của ngành này có rất nhiều trong đời sống hằng ngày
Không thể phủ nhận rằng các hệ thống quản lý dữ liệu, thông tin dần trở thành công
cụ đắc lực của nhiều doanh nghiệp Đặc biệt phải kể đến lĩnh vực ngân hàng hiện nay trong công tác quản lý dữ liệu, công nghệ thông tin giúp cho quá trình quản lý dữ liệu đạt hiệu quả cao trong việc giảm tối thiểu về nhân lực, thời gian cũng như tránh thất lạc, sai sót dữ liệu thay vì việc quản lý bằng giấy tờ bằng phương pháp cổ truyền như trước đây
Chính vì những lý do đó, ứng dụng của Công nghệ thông tin đối với công tác quản
lý dữ liệu trong ngân đóng một vai trò hết sức quan trọng Và để làm rõ hơn về ứng dụng của Công nghệ thông tin đối với công tác quản lý trong thực tế nhóm chúng em lựa chọn đề
tài “Quản lý tài khoản tiết kiệm Ngân hàng” để nghiên cứu và phát triển ứng dụng của
việc quản lý hệ thống dữ liệu trong môn học Hệ quản trị cơ sở dữ liệu
Trang 63
CHƯƠNG 1 TỔNG QUAN VỀ HỆ THỐNG
1 Đặc tả đề tài
1.1 Mô tả bài toán
Một ngân hàng cần có hệ thống quản lý tài khoản tiết kiệm Một hệ thống quản lý tài khoản tiết kiệm cần lưu trữ những dữ liệu như sau:
Ngân hàng quản lý nhiều chi nhánh, mỗi Chi nhánh có Tên chi nhánh, Mã chi nhánh, Địa chỉ Mỗi chi nhánh thì có nhiều nhân viên,…
Mỗi nhân viên có các thông tin: Mã nhân viên, Họ tên, Ngày sinh, Địa chỉ, Điện thoại Mỗi nhân viên được cấp tên đăng nhập và mật khẩu để đăng nhập vào hệ thống Mỗi nhân viên sẽ có chức vụ và quyền hạn khác nhau nên thuộc các nhóm người dùng và có phân quyền khác nhau
Thông tin về nhóm người dùng thì gồm có: Mã nhóm người dùng, Tên nhóm người dùng Có các nhóm người dùng sau: Nhân viên giao dịch và Giám đốc
Nhóm người dùng thì được phân chia ra những quyền riêng biệt Thông tin về nhóm quyền: Mã quyền, Tên quyền Các nhóm người dùng được phân cho một hoặc nhiều quyền
Một Chi nhánh thì quản lý nhiều tài khoản tiết kiệm và điều cần thiết với mỗi sổ là thông tin Khách hàng gửi tiết kiệm Thông tin của khách hàng gồm: Mã khách hàng, Tên,
Số điện thoại, Địa chỉ, số CCCD, Nơi cấp, Ngày cấp
Một khách hàng có thể mở một hoặc nhiều sổ tiết kiệm Thông tin của mỗi sổ tiết kiệm: Mã sổ tiết kiệm, Ngày mở sổ, Ngày đến hạn, Ngày tất toán, Loại tiền gửi, Tình trạng Tình trạng của sổ có thể là: Còn hiệu lực, Đã tất toán, Phong tỏa
Mỗi một sổ tiết kiệm sẽ thuộc một loại tiết kiệm duy nhất, phân biệt bởi mã loại tiết kiệm Mã loại tiết kiệm qui định hình thức gửi tiết kiệm, kỳ hạn, hình thức trả lãi, lãi suất
Có các hình thức gửi tiết kiệm sau:
- Tiền gửi tiết kiệm trả lãi định kỳ
- Tiền gửi tiết kiệm trả lãi trước
- Tiền gửi tiết kiệm trả lãi sau
- Tiền gửi tiết kiệm gửi góp
- Tiền gửi tiết kiệm một lần
Trang 7Kỳ hạn: Không kỳ hạn, 1 tháng, 2 tháng, …, 36 tháng
Lãi suất tiết kiệm được quy định bởi: Hình thức gửi tiết kiệm, Kỳ hạn, Kỳ trả lãi Mỗi sổ tiết kiệm sẽ phát sinh một hoặc nhiều phát sinh giao dịch tiết kiệm Thông tin của mỗi giao dịch tiết kiệm gồm: Mã số giao dịch, Ngày giao dịch, Mã sổ tiết kiệm, Mã loại giao dịch, Mã chi nhánh giao dịch, Mã nhân viên giao dịch, Số tiền giao dịch Mã loại giao dịch cho biết loại giao dịch nào được thực hiện, có các loại giao dịch sau: Gửi tiền, Rút tiền lãi, Tất toán, Lãi nhập gốc, Tái ký gửi
1.2 Nghiệp vụ của bài toán
Gửi tiết kiệm
Khách hàng xuất trình giấy chứng minh Kế Toán hướng dẫn khách hàng điền đầy
đủ thông tin trên “giấy đề nghị gửi tiền” Thông tin “giấy đề nghị gửi tiền” gồm có: họ tên,
điện thoại, địa chỉ, số CMND, ngày cấp, nơi cấp, số tiền gửi, kỳ hạn gửi, hình thức rút lãi
Kế Toán Trưởng kiểm tra các thông tin trên giấy đề nghị của khách hàng, giấy nộp tiền,
phiếu lưu, Sổ tiết kiệm phải khớp nhau và ký tên lên Sổ Tiết Kiệm Giám Đốc ký tên lên
giấy nộp tiền, Sổ tiết kiệm Thủ quỹ nhận giấy nộp tiền, Sổ tiết kiệm, phiếu lưu tiền gửi,
chờ Kiểm ngân thu
Kiểm ngân sau khi thu xong, lập bảng kê nộp tiền, ký tên lên bảng kê nộp và chuyển bảng kê cho thủ quỹ Thủ quỹ kiểm tra số tiền trên bảng kê, giấy nộp tiền, phiếu lưu, Sổ tiết kiệm Nếu khớp đúng số tiền, ký tên lên giấy nộp tiền và bảng kê nộp, vào sổ theo dõi Nếu không khớp đúng số tiền phải báo cho Kế toán biết để điều chỉnh lại Cho khách hàng ký tên lên giấy nộp tiền, bảng kê nộp, đăng ký chữ ký mẫu lên phiếu lưu, ký tên lên Sổ Tiết Kiệm, phiếu lưu (bên phần kiểm soát), ký nhận Sổ Tiết Kiệm Sau khi xong cho khách hàng
ký nhận sổ và trả sổ cho khách hàng
Sau đó ký tên lên góc trái chứng từ, đóng dấu đã thu tiền và vào sổ theo dõi thu chi, giữ lại bảng kê nộp tiền để tổng hợp (cuối ngày giao lại cho Thủ quỹ) Thủ quỹ vào sổ quỹ Giấy nộp tiền cuối ngày Thủ quỹ chuyển qua bộ phận kết hợp chứng từ
Khách hàng
Kiểm tra các yếu tố trên giấy gửi tiền Ký chữ ký mẫu lên phiếu lưu tiền gửi (hoặc các ký hiệu khác) Nhân viên ngân hàng in Giấy nộp tiền, Phiếu lưu, Sổ tiền gửi
Rút tiết kiệm
Trang 85
Khách hàng đến rút tiền mang Sổ tiết kiệm, CMND (hộ chiếu) đã đăng ký lúc gửi tiền và thông báo đến Kế toán số tiền cần rút (vốn, lãi)
Trường hợp rút hoàn toàn: KT sẽ căn cứ vào ngày đáo hạn, số tiền gửi, lãi suất trên
sổ, lập Phiếu tính lãi, in Giấy lãnh tiền, Phiếu chi lãi, in Sổ tiền gửi, ghi Phiếu lưu tiền gửi,
ký tên chuyển qua cho Kế toán Trưởng
Trường hợp khách hàng gửi lại đúng số tiền và định kỳ trên Sổ tiết kiệm: Kế toán sử dụng lại Sổ tiết kiệm cũ, Phiếu lưu cũ, lập Giấy nộp tiền, Giấy lĩnh tiền, Phiếu chi lãi, in Sổ tiết kiệm, ghi Thẻ lưu tài khoản, chuyển cho Kế toán trưởng
Trường hợp khách hàng gửi lại thay đổi số tiền: Kế toán thực hiện như trường hợp rút hoàn toàn, sau đó làm giống như trường hợp gửi tiền, chuyển cho Kế toán trưởng
Kế toán trưởng kiểm tra lại ngày đáo hạn, cách tính lãi trên Phiếu tính lãi, Giấy lĩnh tiền, Phiếu chi lãi, Số dư trên Sổ tiền gửi và Phiếu lưu Cho khách ký tên lên chứng từ, đối chiếu chữ ký của khách hàng trên chứng từ Thẻ lưu, nếu đúng chữ ký, khách hàng ký tên lên Sổ tiết kiệm và Thẻ lưu, chi tiền cho khách hàng và trả Sổ tiết kiệm cho khách hàng, nếu không đúng phải báo cho Kế toán để kiểm tra lại, chi xong ký tên lên góc trái chứng từ
và đóng dấu “Đã chi tiền” vào Sổ theo dõi, gữi lại Bảng kê để tổng hợp cuối ngày
1.3 Mô tả các chức năng của bài toán
Đối với Người quản trị:
Thêm quyền, xóa quyền, phân quyền cho nhóm người dùng, xóa quyền khỏi nhóm người dùng
Thêm phân nhóm, xóa phân nhóm, Thêm nhân viên vào phân nhóm, xóa nhân viên khỏi phân nhóm
Đối với Giao dịch viên – nhân viên ngân hàng:
Thêm khách hàng, chỉnh sửa thông tin khách hàng, thêm đồng sở hữu, mở sổ tiết kiệm, thực hiện các giao dịch rút, gửi lãi, vốn, tất toán, phong tỏa, xóa sổ, tái ký tục, chuyển quyền sử dụng sổ
Tra cứu thông tin khách hàng, sổ tiết kiệm
Phân quyền: quyền admin toàn quyền với hệ thống Còn nhân viên không thể tham gia vào việc quyền của các tài khoản khác
Trang 91.4 Một số hình thức gửi tiết kiệm
Đối với hình thức gửi có kỳ hạn
Gửi tiết kiệm hàng tháng (tiết kiệm gửi góp): Hình thức này chỉ có hình thức lãi trả
sau Như vậy, số tiền gốc sẽ tăng lên sau mỗi kỳ gửi góp, mà không phải là một số cố định như hình thức tiết kiệm thông thường Số tiền lãi cũng được tính trên cơ sở số tiền gốc tăng lên đó Lãi suất áp dụng cho loại tiền gửi này thấp hơn lãi suất tiền gửi tiết kiệm thông thường Quý khách sẽ không được rút tiền trước hạn, khi đến hạn nếu quý khách không đến rút tiền, số dư không được chuyển thêm kỳ hạn gửi tiếp theo mà được tính lãi với lãi suất không kỳ hạn
Đối với hình thức gửi một lần có 3 hình thức trả lãi như: trả trước, trả định kì và trả sau
Tiền gửi tiết kiệm trả lãi trước: Quý khách nhận được tiền lãi ngay tại thời điểm gửi
tiền Lãi suất áp dụng cho hình thức tiền gửi này thấp hơn lãi suất tiền gửi cùng kỳ hạn lĩnh lãi cuối kỳ Loại tiền gửi này cũng không hỗ trợ quý khách rút gốc hoặc rút một phần gốc trước hạn Tiền gửi khi đến hạn mà quý khách không rút ra sẽ được chuyển thêm kỳ hạn
tiếp theo
Tiền gửi tiết kiệm trả lãi định kỳ (hàng tháng/ hàng quý): Loại tiền gửi này rất thuận
tiện cho quý khách cần phải dùng tiền lãi thu được từ việc gửi tiền tiết kiệm của mình, để
sử dụng chi tiêu định kỳ hàng tháng, hàng quý…, quý khách không cần chờ khi đến hạn
mới rút được tiền lãi Các quy định khác cũng giống như tiền gửi tiết kiệm thông thường
Tiền gửi tiết kiệm trả lãi sau: Nhận tiền lãi khi ngày đến hạn Hình thức tiền gửi này
cũng được nhập lãi một lần vào cuối kỳ, tự động chuyển thêm một kỳ hạn tiếp theo nếu quý khách không rút tiền khi đến hạn
Đối với hình thức gửi tiết kiệm không kỳ hạn (gửi một lần)
Tiền gửi tiết kiệm gửi một lần (rút gốc linh hoạt): Loại tiền gửi tiết kiệm này cũng
được nhập lãi một lần vào cuối kỳ và tự động quay vòng khi đến hạn Tuy nhiên, trong kỳ nếu quý khách có nhu cầu rút một phần gốc trước hạn thì phần tiền rút ra được tính lãi suất không kỳ hạn, phần còn lại gửi tiếp vẫn được áp dụng lãi suất có kỳ hạn kể từ ngày gửi
1.5 Phương pháp tính lãi suất
Công thức tính lãi cho loại tiết kiệm có kỳ hạn
Trang 107
VD: Khách hàng gửi 10 triệu với kỳ hạn 2 tháng, lãi suất 1.2%/ tháng
Tiền lãi = 10000000 * 2* 1.2% = 240000
- Công thức tính lãi cho loại tiết kiệm không kỳ hạn
VD: Với số tiền gửi không kỳ hạn là 10 triệu
Ngày gửi: 1/4/20009, ngày tất toán 6/4/20009
Giả sử lãi suất trong thời điểm khách hàng rút 0.6%
Rút vốn trước hạn (áp dụng lãi bậc thang):
Khách hàng gửi tiền có kỳ hạn khi có nhu cầu rút vốn trước hạn được áp dụng lãi suất
ở kỳ hạn tương đương với thời gian gửi thực tế hoặc mức lãi suất ở kỳ hạn ngắn hơn kế trước (nếu Ngân hàng không huy động loại kỳ hạn tương đương thời gian khách hàng đã gửi)
VD : Khách hàng gửi 10 triệu loại tiết kiệm kỳ hạn 6 tháng lãnh lãi hàng tháng, lãi suất 1.2%/ tháng
Ngày gửi : 1/4/2009, ngày hết hạn: 1/10/2009
Ngày đến rút : 9/8/20009 => thời gian thực gửi là: 4 tháng, 8 ngày Nếu tại thời điểm đó Ngân hàng huy động tiết kiệm 3 tháng (Lãi suất: 1.4%/ tháng) và không kỳ hạn lãi suất 0.6%/ tháng, tiết kiệm 1 tháng lãi suất 1.1%/ tháng
Trả lãi kỳ hạn 3 tháng : 10000000 * 3 * 1.4% = 420000
Trả lãi kỳ hạn 1 tháng : 10000000 * 1 * 1.1% = 110000
Trả lãi không kỳ hạn: (10000000 * 8 * 0.6%) / 30 = 16000
Tiền lãi = Số dư * Số tháng gửi * Lãi suất
Tiền lãi = (Số dư * Lãi suất) / 30 * Số ngày
Trang 11Tổng cộng : 420000 + 110000 + 16000 = 546000
Trang 129
CHƯƠNG 2 PHÂN TÍCH THIẾT KẾ HỆ THỐNG
1 Thiết kế cơ sở dữ liệu mức quan niệm
Từ mô tả về dữ liệu cần có ở phần mô tả bài toán, hình thành được sơ đồ thực thể kết hợp (ERD).
2 Thiết kế cơ sở dữ liệu mức logic
Từ sơ đồ thực thể kết hợp (ERD), ta có các lược đồ quan hệ:
● CHI_NHANH (MaChiNhanh, TenChiNhanh, DiaChi)
● DANG_NHAP (MaNhanVien, TenDangNhap, MatKhau)
● GIAO_DICH_TIET_KIEM (MaGiaoDich, MaSoTK, SoTienGiaoDich,
NgayGiaoDich, MaNhanVien, MaLoaiGiaoDich, NgayPhatSinhGiaoDich,
DaThanhToan)
● HINH_THUC_GUI (MaHinhThucGui, TenHinhThucGui, HanMucGui)
● HINH_THUC_TRA_LAI (MaHinhThucTraLai, TenHinhThucTraLai)
● KHACH_HANG (MaKhachHang, HoTen, NgaySinh, SDT, MaDinhDanh,
NgayCap, NoiCap, DiaChi, DangSuDung, ChuKy)
● LOAI_GIAO_DICH (MaLoaiGiaoDich, TenLoaiGiaoDich, LienQuanSoDu)
● LOAI_TIEN (MaLoaiTien, LoaiTien, TiGiaVND)
● LOAI_TIET_KIEM (MaLoaiTietKiem, MaHinhThucGui, MaHinhThucTraLai, KyHan, LaiSuat)
Trang 13● NHAN_VIEN (HoTen, NgaySinh, MaDinhDanh, SDT, MaChiNhanh,
TinhTrangLamViec)
● NHOM_NGUOI_DUNG (MaNhomNguoiDung, TenNhom, TenRole)
● PHAN_NHOM (MaNhanVien, MaNhomNguoiDung)
● SO_DU_TAI_KHOAN (MaSoDu, MaSoTK, NgayGhiNhanSoDu, SoDu)
● SO_HUU (MaSoTK, MaKhachHang)
● TAI_KHOAN_TIET_KIEM (MaSoTK, NgayMoSo, NgayDenHan, NgayTatToan, MaChiNhanh, MaLoaiTien, MaLoaiTietKiem, NgayLaiNhapGoc, KyTraLai, HanGuiGop, TinhTrangSuDung, NgayGuiGopTiepTheo,
NgayNhanLaiDinhKyTiepTheo)
Trang 1411
3 Các ràng buộc cần có
đến NHAN_VIEN
3 GIAO_DICH_TIET_KIEM Ràng buộc khoá chính MaGiaoDich, ràng buộc
khoá ngoại MaNhanVien và MaGiaoDich tham
chiếu đến NHAN_VIEN và LOAI_GIAO_DICH
5 HINH_THUC_TRA_LAI Ràng buộc khoá chính MaHinhThucTraLai
buộc khoá ngoại MaHinhThucGui và MaHinhThucTraLai tham chiếu tới
HINH_THUC_TRA_LAI và HINH_THUC_GUI
khoá ngoại MaChiNhanh tham chiếu đến
CHI_NHANH
MaNhomNguoiDung tham chiếu đến
NHAN_VIEN và NHOM_NGUOI_DUNG
13 SO_DU_TAI_KHOAN Ràng buộc khoá chính MaSoDu, ràng buộc khoá
ngoại MaSoTK tham chiếu đến
TAI_KHOAN_TIET_KIEM
tham chiếu đến TAI_KHOAN_TIET_KIEM và KHACH_KHANG
15 TAI_KHOAN_TIET_KIEM Ràng buộc khoá chính MaSoTK, ràng buộc khoá
ngoại MaChiNhanh, MaLoaiTien, MaLoaiTietKiem tham chiếu đến
CHI_NHANH, LOAI_TIEN, LOAI_TIET_KIEM
TenChiNhanh nvarchar(50) not null,
DiaChi nvarchar(50) not null,
primary key (MaChiNhanh)
)
Trang 15Bảng Đăng nhập
CREATE TABLE DANG_NHAP
(
MaNhanVien varchar(10) primary key REFERENCES NHAN_VIEN(MaNhanVien),
TenDangNhap nvarchar(30) unique not null,
MatKhau varchar(30) not null check(len(MatKhau)>=6
)
Bảng Giao dịch tiết kiệm
CREATE TABLE GIAO_DICH_TIET_KIEM
(
MaGiaoDich varchar(10) primary key,
MaSoTK varchar(15) references TAI_KHOAN_TIET_KIEM(MaSoTK),
SoTienGiaoDich money check (SoTienGiaoDich>=0),
NgayGiaoDich date check (DATEDIFF(day, NgayGiaoDich, GETDATE())>=0),
MaNhanVien varchar(10) REFERENCES NHAN_VIEN(MaNhanVien),
MaLoaiGiaoDich varchar(10) REFERENCES LOAI_GIAO_DICH(MaLoaiGiaoDich),
MaHinhThucGui varchar(10) primary key,
TenHinhThucGui nvarchar(30) not null,
MaKhachHang varchar(10) primary key,
HoTen nvarchar(30) not null,
NgaySinh date check (DATEDIFF(year, NgaySinh, GETDATE())>=15),
SDT varchar(11) not null check(len(SDT)=10),
MaDinhDanh varchar(15) UNIQUE check (len(MaDinhDanh)=9 or
Trang 16MaLoaiGiaoDich varchar(10) primary key,
TenLoaiGiaoDich nvarchar(30) not null,
MaLoaiTien varchar(10) primary key,
LoaiTien nvarchar(15) not null,
TiGiaVND money
)
Bảng Loại tiết kiệm
CREATE TABLE LOAI_TIET_KIEM
(
MaLoaiTietKiem varchar(10) primary key,
MaHinhThucGui varchar(10) references HINH_THUC_GUI(MaHinhThucGui),
MaHinhThucTraLai varchar(10) references HINH_THUC_TRA_LAI(MaHinhThucTraLai),KyHan int check(KyHan>=0 and KyHan<=36),
LaiSuat float check (LaiSuat> )
HoTen nvarchar(30)not null,
NgaySinh date not null,
MaDinhDanh varchar(15) check (len(MaDinhDanh)=9 or len(MaDinhDanh)=12),
SDT varchar(11) check (len(SDT)=10),
primary key (MaNhanVien),
MaChiNhanh varchar(10) references CHI_NHANH(MaChiNhanh) ON UPDATE CASCADE,TinhTrangLamViec bit DEFAULT 1
Trang 17Bảng Phân nhóm
CREATE TABLE PHAN_NHOM
(
MaNhanVien varchar(10) primary key references NHAN_VIEN MaNhanVien),
MaNhomNguoiDung varchar(10) references NHOM_NGUOI_DUNG MaNhomNguoiDung) ONDELETE SET NULL
)
Bảng Số dư tài khoản
CREATE TABLE SO_DU_TAI_KHOAN
MaSoTK varchar(15) REFERENCES TAI_KHOAN_TIET_KIEM(MaSoTK),
MaKhachHang varchar(10) references KHACH_HANG(MaKhachHang),
PRIMARY KEY (MaSoTK, MaKhachHang)
)
Bảng Tài khoản tiết kiệm
CREATE TABLE TAI_KHOAN_TIET_KIEM
NgayTatToan date, Ngày khách hàng đến rút tất cả tiền lãi lần tiền gốc
MaChiNhanh varchar(10) references CHI_NHANH(MaChiNhanh), Mã chi nhánh mở sổ
MaLoaiTien varchar(10) references LOAI_TIEN(MaLoaiTien), Mã loại tiền gửi
MaLoaiTietKiem varchar(10) references LOAI_TIET_KIEM(MaLoaiTietKiem), Mã loại tiết kiệm
NgayLaiNhapGoc date, Nếu trường hợp khách hàng không tất toán sổ sau ngày đến hạn thì tự động gia hạn sổ với tiền gốc mới = gốc cũ + lãi, loại tiết kiệm giữ nguyên
KyTraLai int, Nếu trường hợp khách hàng chọn trả lãi đinh kỳ thì cần qui định thêm kỳ trả lãi (< kỳ hạn)
HanGuiGop int, Nếu trường hợp khách hàng chọn gửi góp thì cần qui định thêm hạn gửi định kỳ (< kỳ hạn)
TinhTrangSuDung bit DEFAULT 1,
NgayGuiGopTiepTheo date, Ngày gửi góp tiếp theo nếu gửi góp
NgayNhanLaiDinhKyTiepTheo date, Ngày nhận lãi định kỳ tiếp theo nếu gửi lấy lãi định kỳ
)
Trang 1815
5 Các ràng buộc khác
Ràng buộc mã khách hàng khi thêm khách hàng
Đặt ràng buộc mã khách hàng được tạo tự động
USE QUANLYTAIKHOANTIETKIEM
CREATE TABLE KHACH_HANG
ADD CONSTRAINT AUTO_IDKHACHHANG
DEFAULT DBO.AUTO_IDCustomer() FOR MaKhachHang;
GO
Ràng buộc mã sổ khi thêm sổ
Đặt ràng buộc mã sổ được tạo tự động
USE QUANLYTAIKHOANTIETKIEM
CREATE TABLE TAI_KHOAN_TIET_KIEM
ADD CONSTRAINT AUTO_IDSTKs
DEFAULT DBO.AUTO_IDSTK() FOR MaSoTK;
GO
6 Trigger kiểm tra các ràng buộc
Trigger kiểm tra và điều chỉnh một số ràng buộc liên quan đến loại tiết kiệm của sổ
Trigger kiểm tra và điều chỉnh một số ràng buộc liên quan đến loại tiết kiệm của sổ
CREATE TRIGGER Them_LTK ON LOAI_TIET_KIEM
Nếu kỳ hạn là 0 thì đây là hình thức gửi không kỳ hạn
UPDATE LOAI_TIET_KIEM SET MaHinhThucTraLai = 'HTTL_S' WHERE MaLoaiTietKiem = @maLoaiTK ;
DECLARE @maNV varchar ( 10 )
SELECT @maNV = ol MaNhanVien
FROM deleted ol
SET XACT_ABORT ON
BEGIN TRAN
BEGIN TRY
Cập nhật tình trạng tình việc của nhân viên là đã nghỉ
UPDATE NHAN_VIEN SET TinhTrangLamViec = 0 WHERE MaNhanVien = @maNV ;
DECLARE @tenUser varchar ( 15 );
Trang 19SELECT @tenUser = TenDangNhap FROM DANG_NHAP WHERE MaNhanVien = @maNV
Xóa user của nhân viên
DECLARE @sql varchar ( 100 )
SET @sql = 'DROP USER ' + @tenUser
exec @sql
Xóa nhân viên khỏi phân nhóm
DELETE FROM PHAN_NHOM WHERE MaNhanVien = @maNV ;
Xóa tài khoản login của nhân viên khỏi server
SET @sql = 'DROP LOGIN ' + @tenUser
exec @sql
Xóa tài khoản đăng nhập của nhân viên khỏi bảng Đăng nhập
DELETE FROM DANG_NHAP WHERE MaNhanVien = @maNV ;
COMMIT TRAN END TRY
BEGIN CATCH
ROLLBACK END CATCH
GO
Trigger tạo một user trên SQL khi thêm một nhân viên
CREATE TRIGGER CreateSQLAccount ON DANG_NHAP
AFTER INSERT
AS
DECLARE @userName nvarchar ( 30 ), @passWord nvarchar ( 10 )
SELECT @userName = nl TenDangNhap , @passWord = nl MatKhau
FROM inserted nl
BEGIN
DECLARE @sqlString nvarchar ( 2000 )
Tạo tài khoản login cho nhân viên, tên người dùng và mật khẩu là tài khoản được tạo trên bảng Đăng nhập
SET @sqlString = 'CREATE LOGIN [' @userName + '] WITH PASSWORD=''' + @passWord + ''',
DEFAULT_DATABASE=[QUANLYTAIKHOANTIETKIEM], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF'
Trigger kiểm tra và điều chỉnh một số ràng buộc liên quan đến loại tiết kiệm của sổ
CREATE TRIGGER Them_LTK ON LOAI_TIET_KIEM
Nếu kỳ hạn là 0 thì đây là hình thức gửi không kỳ hạn
UPDATE LOAI_TIET_KIEM SET MaHinhThucTraLai = 'HTTL_S' WHERE MaLoaiTietKiem = @maLoaiTK ;
END
GO
Trigger Kiểm tra các thông tin về sổ tiết kiệm trước khi thêm một sổ mới
CREATE TRIGGER THEM_TAI_KHOAN_TIET_KIEM ON TAI_KHOAN_TIET_KIEM
Trang 2017
AFTER INSERT
AS
DECLARE @maTK varchar( 15 ), @maLoaiTK varchar( 10 ), @kyTralai int, @hanGuigop int, @kyHanso int
SELECT @maTK = nl MaSoTK , @maLoaiTK = nl MaLoaiTietKiem , @kyTralai = nl KyTraLai , @hanGuigop = nl HanGuiGop
FROM inserted nl
BEGIN
BEGIN TRAN
BEGIN TRY
DECLARE @kyHan int, @maHinhthuctralai varchar( 10 ), @maHinhthucgui varchar( 10 );
SET @kyHan = (SELECT KyHan from LOAI_TIET_KIEM where MaLoaiTietKiem = @maLoaiTK );
UPDATE TAI_KHOAN_TIET_KIEM SET NgayLaiNhapGoc = NgayMoSo where MaSoTK = @maTK ;
if @kyHan = 0
UPDATE TAI_KHOAN_TIET_KIEM SET NgayDenHan =null, NgayTatToan =null, KyTraLai =null,
HanGuiGop =null where MaSoTK = @maTK ;
Đối với trả lãi định kỳ
if ( @kyTralai > @kyHan ) or @kyHan % @kyTralai != 0 or @kyTralai =null)
UPDATE TAI_KHOAN_TIET_KIEM SET KyTraLai = 1 where MaSoTK = @maTK ;
Tính ngày lấy lãi đầu tiên của sổ tiết kiệm định kỳ
UPDATE TAI_KHOAN_TIET_KIEM SET NgayNhanLaiDinhKyTiepTheo = DATEADD ( day ,
30 * @kyTralai , NgayMoSo ), NgayGuiGopTiepTheo =null where MaSoTK = @maTK ;
END else BEGIN
if ( @hanGuigop > @kyHan ) or @kyHan % @hanGuigop != 0 or @hanGuigop =null)
UPDATE TAI_KHOAN_TIET_KIEM SET HanGuiGop = 1 where
MaSoTK = @maTK ;
Tính ngày gửi góp tiếp theo của sổ gửi góp
UPDATE TAI_KHOAN_TIET_KIEM SET NgayGuiGopTiepTheo = DATEADD ( day , 30 * @hanGuigop ,
NgayMoSo ), NgayNhanLaiDinhKyTiepTheo =null where MaSoTK = @maTK ;
END END
COMMIT TRAN END TRY BEGIN CATCH
ROLLBACK END CATCH END
DECLARE @maSo varchar ( 15 ), @trangThai bit
SELECT @maSo = nl MaSoTK , @trangThai = nl TinhTrangSuDung
INSERT INTO @chuMaso ChuSo , SoSo ) SELECT FROM LAY_CHU_SO ( @maSo ) WHERE SoLuongSo = ;
SET @num_Chu = @@ROWCOUNT ;
WHILE @index <= @num_Chu Countdown
BEGIN
SELECT @TEMP = ChuSo FROM @chuMaso WHERE Id = @index ;
UPDATE KHACH_HANG SET DangSuDung = 0 WHERE MaKhachHang = @TEMP ;
SET @index = @index + 1 ;
END END
Trang 21GO
7 Các view
a View Thông tin chi tiết về chủ sổ và Thông tin của sổ
CREATE VIEW [dbo] [CHI_TIET_SO] AS
SELECT Chu MaKhachHang , Chu DiaChi , Chu HoTen , Chu MaDinhDanh , Chu NgaySinh , Chu SDT , So * FROM
( SELECT KHACH_HANG *, SO_HUU MaSoTK
FROM KHACH_HANG join SO_HUU on KHACH_HANG MaKhachHang = SO_HUU MaKhachHang ) Chu JOIN
( SELECT TAI_KHOAN_TIET_KIEM MaSoTK , TAI_KHOAN_TIET_KIEM NgayMoSo , TAI_KHOAN_TIET_KIEM NgayDenHan , TAI_KHOAN_TIET_KIEM TinhTrangSuDung , CHI_NHANH TenChiNhanh ,
LOAI_TIEN MaLoaiTien , hinhthuc KyHan , TAI_KHOAN_TIET_KIEM KyTraLai , TAI_KHOAN_TIET_KIEM NgayLaiNhapGoc , hinhthuc tenHinhThucTraLai ,
TAI_KHOAN_TIET_KIEM NgayNhanLaiDinhKyTiepTheo , hinhthuc LaiSuat , hinhthuc TenHinhThucGui , DBO LaySoDu ( TAI_KHOAN_TIET_KIEM MaSoTK ) AS SoDu
FROM TAI_KHOAN_TIET_KIEM JOIN CHI_NHANH on TAI_KHOAN_TIET_KIEM MaChiNhanh = CHI_NHANH MaChiNhanh JOIN LOAI_TIEN on TAI_KHOAN_TIET_KIEM MaLoaiTien = LOAI_TIEN MaLoaiTien JOIN
( SELECT LOAI_TIET_KIEM *, HINH_THUC_GUI TenHinhThucGui , HINH_THUC_TRA_LAI TenHinhThucTraLai FROM
LOAI_TIET_KIEM JOIN HINH_THUC_GUI ON
LOAI_TIET_KIEM MaHinhThucGui = HINH_THUC_GUI MaHinhThucGui
JOIN HINH_THUC_TRA_LAI ON
LOAI_TIET_KIEM MaHinhThucTraLai = HINH_THUC_TRA_LAI MaHinhThucTraLai ) hinhthuc ON
TAI_KHOAN_TIET_KIEM MaLoaiTietKiem = hinhthuc MaLoaiTietKiem
) So
ON Chu MaSoTK = So MaSoTK
GO
b View Danh sách khách hàng còn đang sử dụng sổ tiết kiệm
CREATE VIEW [dbo].[DS_KhachHang] AS
SELECTFROM KHACH_HANG
WHERE DangSuDung= ;
GO
c View Thông tin chi tiết của Nhân viên còn làm việc
CREATE VIEW [dbo].[DS_NhanVien] AS
SELECT temp1.HoTen, temp1.MaDinhDanh, temp1.MaNhanVien, temp1.NgaySinh,
temp1.SDT, temp1.TenChiNhanh, temp2.TenNhom FROM
(SELECT NHAN_VIEN.*, CHI_NHANH.TenChiNhanh
FROM NHAN_VIEN JOIN CHI_NHANH ON NHAN_VIEN.MaChiNhanh=CHI_NHANH.MaChiNhanh
where TinhTrangLamViec= ) temp1 JOIN
(SELECT PHAN_NHOM.MaNhanVien,NHOM_NGUOI_DUNG.TenNhom FROM
PHAN_NHOM JOIN NHOM_NGUOI_DUNG ON
PHAN_NHOM.MaNhomNguoiDung=NHOM_NGUOI_DUNG.MaNhomNguoiDung
) temp2 ON temp1.MaNhanVien=temp2.MaNhanVien
GO
d View danh sách sổ gửi góp 1 lần
CREATE VIEW [dbo].[DS_SoGui1Lan] AS
SELECT MaSoTK FROM TAI_KHOAN_TIET_KIEM A JOIN LOAI_TIET_KIEM B ON
A MaLoaiTietKiem= MaLoaiTietKiem
WHERE B.MaHinhThucGui='HTG_1L' and TinhTrangSuDung=1
GO
Trang 2219
e View danh sách sổ gửi góp
CREATE VIEW [dbo].[DS_SoGuiGop] AS
SELECT MaSoTK FROM TAI_KHOAN_TIET_KIEM A JOIN LOAI_TIET_KIEM B ON
A MaLoaiTietKiem= MaLoaiTietKiem
WHERE B.MaHinhThucGui='HTG_G' and TinhTrangSuDung=1
GO
f View danh sách sổ trả lãi định kỳ
CREATE VIEW [dbo].[DS_SoTraLaiDinhKy]
AS
SELECT A.MaSoTK
FROM dbo.TAI_KHOAN_TIET_KIEM AS A INNER JOIN
dbo.LOAI_TIET_KIEM AS B ON A.MaLoaiTietKiem = B.MaLoaiTietKiem
WHERE ( MaHinhThucTraLai = 'HTTL_DK') AND A TinhTrangSuDung = 1)
GO
g View danh sách sổ trả lãi sau
CREATE VIEW [dbo].[DS_SoTraLaiSau]
AS
SELECT A.MaSoTK
FROM dbo.TAI_KHOAN_TIET_KIEM AS A INNER JOIN
dbo.LOAI_TIET_KIEM AS B ON A.MaLoaiTietKiem = B.MaLoaiTietKiem
WHERE ( MaHinhThucTraLai = 'HTTL_S') AND A TinhTrangSuDung = 1)
GO
h View danh sách sổ trả lãi trước
CREATE VIEW [dbo].[DS_SoTraLaiTruoc]
AS
SELECT A.MaSoTK
FROM dbo.TAI_KHOAN_TIET_KIEM AS A INNER JOIN
dbo.LOAI_TIET_KIEM AS B ON A.MaLoaiTietKiem = B.MaLoaiTietKiem
WHERE ( MaHinhThucTraLai = 'HTTL_T') AND A TinhTrangSuDung = 1)
GO
i View danh sách gửi tiết kiệm một lần
CREATE VIEW [dbo].[DS_TietKiemGui1Lan] AS
SELECTFROM LOAI_TIET_KIEM
WHERE MaHinhThucGui='HTG_1L'
GO
j View danh sách gửi tiết kiệm gửi góp
CREATE VIEW [dbo].[DS_TietKiemGuiGop] AS
SELECTFROM LOAI_TIET_KIEM
WHERE MaHinhThucGui='HTG_G'
GO
Trang 23k View tên hình thức gửi
CREATE VIEW [dbo].[TenHinhThuc]
Trang 2421
CHƯƠNG 3 THIẾT KẾ CÁC CHỨC NĂNG
1 Kết nối cơ sở dữ liệu
public class DB_Connect
{
SqlConnection link = null;
public SqlCommand comm = null;
- View lấy danh sách danh mục chi nhánh và số nhân viên của chi nhánh đó
Create view DM_ChiNhanh AS
SELECT CHI_NHANH.MaChiNhanh,TenChiNhanh,DiaChi, SoLuong
From CHI_NHANH,SLNV
WHere CHI_NHANH.MaChiNhanh = SLNV.MaChiNhanh
2.2 Danh mục Loại tiết kiệm
- View lấy danh sách loại tiết kiệm
Create view DM_LOAI_TIET_KIEM AS
Select
MaLoaiTietKiem,HINH_THUC_GUI.TenHinhThucGui,HINH_THUC_TRA_LAI.TenHinhThucTraLai,KyHa
n LaiSuat
FROM LOAI_TIET_KIEM,HINH_THUC_GUI,HINH_THUC_TRA_LAI
where LOAI_TIET_KIEM.MaHinhThucGui=HINH_THUC_GUI.MaHinhThucGui and LOAI_TIET_KIEM.MaHinhThucTraLai =HINH_THUC_TRA_LAI.MaHinhThucTraLai
2.3 Danh mục Loại giao dịch
- View danh sách loại giao dịch
CREATE VIEW DM_LOAI_GIAO_DICH AS
SELECT FROM LOAI_GIAO_DICH
Trang 252.4 Danh mục Loại tiền
- View danh mục loại tiền
CREATE VIEW DM_LOAI_TIEN AS
SELECT FROM LOAI_TIEN
3 Quản lý nhân viên
3.1 Hiển thị danh sách nhân viên
- Lấy danh sách nhân viên đang làm việc
CREATE FUNCTION [dbo] [LAY_DSNHANVIEN] ()
RETURNS TABLE
AS
RETURN
SELECT temp1 HoTen , temp1 MaDinhDanh , temp1 MaNhanVien , temp1 NgaySinh ,
temp1 SDT , temp1 MaChiNhanh , temp1 TenChiNhanh , temp2 TenNhom FROM
( SELECT NHAN_VIEN *, CHI_NHANH TenChiNhanh
FROM NHAN_VIEN JOIN CHI_NHANH ON NHAN_VIEN MaChiNhanh = CHI_NHANH MaChiNhanh where
TinhTrangLamViec = ) temp1 left JOIN
( SELECT PHAN_NHOM MaNhanVien , NHOM_NGUOI_DUNG TenNhom FROM
PHAN_NHOM LEFT JOIN NHOM_NGUOI_DUNG ON
PHAN_NHOM MaNhomNguoiDung = NHOM_NGUOI_DUNG MaNhomNguoiDung
) temp2 ON temp1 MaNhanVien = temp2 MaNhanVien
GO
3.2 Thêm sửa xoá thông tin nhân viên
- Thêm Nhân viên vào bảng
Thêm thông tin của nhân viên vào bảng NHAN_VIEN đồng thời gọi thực thi Procedure GanQuyenNhanVien
Procedure Thêm Nhân viên vào bảng
CREATE PROCEDURE [dbo] [ThemNhanVien] @hoTen nvarchar ( 30 ), @ngaySinh date , @maDinhDanh
varchar ( 15 ), @SDT varchar ( 11 ), @maChiNhanh varchar ( 10 ), @maNhom varchar ( 10 ))
DECLARE @maNV varchar ( 15 )
SET @maNV = DBO AUTO_IDNV ()
INSERT INTO NHAN_VIEN ( HoTen , NgaySinh , MaDinhDanh , SDT , MaChiNhanh ) VALUES
( @hoTen , @ngaySinh , @maDinhDanh , @SDT , @maChiNhanh );
EXEC DBO GanQuyenNhanVien @maNV , @maNhom
COMMIT TRAN END TRY BEGIN CATCH
ROLLBACK DECLARE @err varchar ( MAX )
SELECT @err = 'Lỗi: ' ERROR_MESSAGE ()
RAISERROR ( @err , 16 , )
END CATCH END
GO
Trang 2623
Procdure GanQuyenNhanVien sẽ thêm người dùng vào role tương ứng Staff hoặc Manager sau đó ghi nhận mã nhân viên vào bảng PHAN_NHOM
procedure gán quyền nhân viên
CREATE PROCEDURE [dbo] [GanQuyenNhanVien] @maNhanVien varchar ( 10 ), @maNhomNguoiDung varchar ( 10 ))
DECLARE @quyen varchar ( 15 ), @tenUser varchar ( 15 ), @sqlString varchar ( 1000 );
SELECT @quyen = TenRole FROM NHOM_NGUOI_DUNG WHERE
MaNhomNguoiDung = @maNhomNguoiDung
SELECT @tenUser = TenDangNhap FROM DANG_NHAP WHERE MaNhanVien = @maNhanVien
Add người dùng vào role tương ứng (Staff hoặc Manager(sysadmin))
if ( @quyen = 'sysadmin' )
SET @sqlString = 'ALTER SERVER ROLE ' + @quyen + ' ADD MEMBER '
@tenUser ;
else BEGIN
SET @sqlString = 'ALTER ROLE ' + @quyen + ' ADD MEMBER ' @tenUser ;
Ghi nhận vào bảng phân nhóm
INSERT INTO PHAN_NHOM VALUES ( @maNhanVien , @maNhomNguoiDung )
COMMIT TRAN END TRY
BEGIN CATCH
ROLLBACK DECLARE @err varchar ( MAX )
SELECT @err = 'Lỗi: ' ERROR_MESSAGE ()
RAISERROR ( @err , 16 , )
END CATCH END
GO
- Sửa nhân viên
CREATE PROCEDURE [dbo].[SuaNhanVien] @maNV varchar (10),@hoTen nvarchar(30),
@ngaySinh date, @maDinhDanh varchar(15), @SDT varchar(11), @maChiNhanh varchar(10))
AS
BEGIN
UPDATE NHAN_VIEN
SET HoTen=@hoTen,NgaySinh=@ngaySinh,
MaDinhDanh=@maDinhDanh,SDT=@SDT,MaChiNhanh=@maChiNhanh
where MaNhanVien=@maNV
END
GO
- Xóa nhân viên
Khi thực hiện xóa nhân viên trigger XoaNhanVien được thực thi đảm bảo trong bảng NHAN_VIEN vẫn còn nhân viên đó nhưng tình trạng làm việc được cập nhật là đã nghỉ, đồng thời xóa nhân viên ra khỏi nhóm trong bảng PHAN_NHOM và xóa user, tài khoản đăng nhập của nhân viên ra khỏi cơ sở dữ liệu
Trang 27CREATE TRIGGER [dbo].[XoaNhanVien] ON [dbo].[NHAN_VIEN]
INSTEAD OF DELETE
AS
DECLARE @maNV varchar(10)
SELECT @maNV=ol.MaNhanVien
FROM deleted ol
BEGIN
Cập nhật tình trạng tình việc của nhân viên là đã nghỉ
UPDATE NHAN_VIEN SET TinhTrangLamViec=0 WHERE MaNhanVien=@maNV;
DECLARE @tenUser varchar(15);
SELECT @tenUser=TenDangNhap FROM DANG_NHAP WHERE MaNhanVien=@maNV
Xóa user của nhân viên
DECLARE @sql varchar(100)
SET @sql = 'DROP USER '+ @tenUser
exec (@sql)
Xóa nhân viên khỏi phân nhóm
DELETE FROM PHAN_NHOM WHERE MaNhanVien=@maNV;
Xóa tài khoản login của nhân viên khỏi server
SET @sql = 'DROP LOGIN '+ @tenUser
exec (@sql)
Xóa tài khoản đăng nhập của nhân viên khỏi bảng Đăng nhập
DELETE FROM DANG_NHAP WHERE MaNhanVien=@maNV;
END
GO
4 Quản lý Sổ tiết kiệm
3.3 Tìm kiếm sổ tiết kiệm
- Phân loại hình thức để tìm kiếm loại tiết kiệm theo hình thức gửi và hình thức
trả lãi (view TEN_HINH_THUC)
- Hiển thị chi tiết danh sách sổ (view CHI_TIET_SO)
3.4 Tìm kiếm chủ sở hữu của sổ tiết kiệm
- Tìm kiếm chủ sở hữu của sổ tiết kiệm dùng function TIM_KIEM_SO_HUU
tìm kiếm chủ sở hữu sổ từ tên khách hàng
CREATE FUNCTION [dbo].[TIM_KIEM_SO_HUU](@HoTen nvarchar(40))
FROM TAI_KHOAN_TIET_KIEM as TK, CHI_TIET_SO as So
where TK.MaSoTK = So.MaSoTK and So.HoTen = @HoTen )
)
3.5 Thêm đồng sở hữu sổ tiết kiệm
- Sử dụng procedure DongSoHuu để thêm đồng sở cho sổ tiết kiệm
Trang 2825
CREATE PROCEDURE [dbo] [DongSoHuu] @maSoTK NVARCHAR ( 10 ), @ngayPhatSinhGiaoDich date , @maNhanVien
varchar ( 10 ),
@hoTen NVARCHAR ( 30 ), @ngaySinh Date , @sdt
varchar ( 11 ), @maDinhDanh varchar ( 15 ),
@ngayCap Date , @noiCap nvarchar ( 100 ), @diaChi
nvarchar ( 100 ), @imageFolderPath nvarchar ( 1000 )
)
SET @maKhachHang = DBO AUTO_IDCustomer ();
exec DBO ThemKhachHang @hoTen , @ngaySinh , @sdt , @maDinhDanh , @ngayCap ,
@noiCap , @diaChi , @imageFolderPath
END
Ghi nhận đồng sở hữu
INSERT INTO SO_HUU VALUES ( @maKhachHang , @maSoTK )
Ghi nhận giao dịch Thêm chủ sở hữu
INSERT INTO GIAO_DICH_TIET_KIEM ( MaSoTK , SoTienGiaoDich , NgayGiaoDich , MaNhanVien , MaLoaiGiaoDich , NgayPhatSinhGiaoDich , DaThanhToan ) VALUES ( @maSoTK , 0 ,
@ngayPhatSinhGiaoDich , @maNhanvien , 'GD_DSH' , @ngayPhatSinhGiaoDich , 1 )
COMMIT TRAN END TRY
BEGIN CATCH
ROLLBACK END CATCH END
5 Quản lý Giao dịch tiết kiệm
3.6 Mở sổ
Mở sổ thực hiện đồng thời thêm thông tin sổ tiết kiệm vào bảng TAI_KHOAN_TIET_KIEM, thêm thông tin khách hàng vào bảng KHACH_HANG và thiết lập mỗi quan hệ giữa khách hàng với sổ tại bảng SO_HUU
- Thêm sổ gửi tiết kiệm một lần
CREATE PROCEDURE [dbo] [ThemSoGui1Lan] @maKhachHang NVARCHAR ( 10 ), @tenKhachHang NVARCHAR ( 30 ), @ngaySinh
Date , @sdt varchar ( 11 ), @cccd varchar ( 15 ), @ngayCap Date , @noiCap nvarchar ( 100 ), @diaChi nvarchar ( 100 ),
@imageFolderPath nvarchar ( 1000 ), @khoanGui money , @maNhanvien varchar ( 10 ),
@ngayMoSo Date , @maLoaiTien varchar ( 10 ),
@kyHan int , @maHinhThucTraLai varchar ( 10 ), @kyTraLai int , @err nvarchar ( MAX ) out )
DECLARE @maKhach varchar ( 10 )
SET @maKhach = @maKhachHang
IF ( @maKhach = 'none' )
BEGIN
SET @maKhach = DBO AUTO_IDCustomer ();
exec DBO ThemKhachHang @tenKhachHang , @ngaySinh , @sdt , @cccd ,
@ngayCap , @noiCap , @diaChi , @imageFolderPath
END DECLARE @maLoaiTK varchar ( 10 ), @maSomoi varchar ( 15 ), @maChiNhanh varchar ( 10 );
SET @maSomoi = DBO AUTO_IDSTK ()
SET @maLoaiTK = ( SELECT MaLoaiTietKiem FROM DS_TietKiemGui1Lan WHERE
KyHan = @kyHan and MaHinhThucTraLai = @maHinhThucTraLai )
SELECT @maChiNhanh = MaChiNhanh FROM NHAN_VIEN WHERE MaNhanVien = @maNhanvien
Thêm sổ mới
Trang 29INSERT INTO TAI_KHOAN_TIET_KIEM ( NgayMoSo , MaChiNhanh , MaLoaiTien , MaLoaiTietKiem , KyTraLai ) VALUES ( @ngayMoSo , @maChiNhanh , @maLoaiTien , @maLoaiTK , @kyTraLai )
Xác nhận sở hữu vào bảng sở hữu.
INSERT INTO SO_HUU VALUES ( @maSomoi , @maKhach )
Ghi nhận giao dịch và số dư của sổ
exec dbo GiaoDichGuiLanDau @maSomoi , @khoanGui , @ngayMoSo , @maNhanvien
Phát sinh giao dịch lấy lãi trước nếu là sổ gửi góp
if @maHinhThucTraLai = 'HTTL_T'
exec dbo PhatSinhLaiTruoc @maSomoi
COMMIT TRAN END TRY
BEGIN CATCH
ROLLBACK SELECT @err = 'Lỗi: ' ERROR_MESSAGE ()
END CATCH END
- Thêm sổ gửi góp
CREATE PROCEDURE [dbo] [ThemSoGuiGop] @maKhachHang NVARCHAR ( 10 ), @tenKhachHang NVARCHAR ( 30 ), @ngaySinh
Date , @sdt varchar ( 11 ), @cccd varchar ( 15 ), @ngayCap Date , @noiCap nvarchar ( 100 ), @diaChi nvarchar ( 100 ),
@imageFolderPath nvarchar ( 1000 ), @khoanGui money , @maNhanvien varchar ( 10 ),
@ngayMoSo Date , @maLoaiTien varchar ( 10 ),
@kyHan int , @hanGuiGop int , @err nvarchar ( MAX ) out )
SET @maKhachHang = DBO AUTO_IDCustomer ();
exec DBO ThemKhachHang @tenKhachHang , @ngaySinh , @sdt , @cccd ,
@ngayCap , @noiCap , @diaChi , @imageFolderPath
END
DECLARE @maLoaiTK varchar ( 10 ), @maSomoi varchar ( 15 ), @maChiNhanh varchar ( 10 )
SET @maSomoi = DBO AUTO_IDSTK ()
SET @maLoaiTK = ( SELECT MaLoaiTietKiem FROM DS_TietKiemGuiGop WHERE
Xác nhận sở hữu vào bảng sở hữu.
INSERT INTO SO_HUU VALUES ( @maSomoi , @maKhachHang )
Ghi nhận giao dịch và số dư của sổ
exec dbo GiaoDichGuiLanDau @maSomoi , @khoanGui , @ngayMoSo , @maNhanvien
COMMIT TRAN END TRY
BEGIN CATCH
ROLLBACK SELECT @err = 'Lỗi: ' ERROR_MESSAGE ()
END CATCH END
- Thêm khách hàng
Procedure thêm khách hàng
CREATE PROCEDURE [dbo].[ThemKhachHang] @tenKhachHang NVARCHAR(30),@ngaySinh
varchar(15), @sdt varchar(11), @cccd varchar(15), @ngayCap varchar(15),
@noiCap nvarchar(100), @diaChi nvarchar(100), @imageFolderPath
nvarchar(1000))
AS
BEGIN
Trang 3027
DECLARE @tsql NVARCHAR(2000);
SET @tsql= 'INSERT INTO KHACH_HANG (HoTen, NgaySinh, SDT, MaDinhDanh,
NgayCap, NoiCap, DiaChi, ChuKy)'
' SELECT ' 'N''' @tenKhachHang + '''' ',' '''' @ngaySinh + ''''',' '''' @sdt + '''' ',' '''' @cccd + '''' ',' '''' @ngayCap + '''' ',' 'N''' @noiCap + '''' ',' 'N''' @diaChi + '''' ',
3.7 Quản lý giao dịch tiết kiệm
* Hiển thị danh sách sổ, chi thiết thông tin của sổ theo chủ sổ
ALTER FUNCTION [dbo].[LayChiTietThongTinSo](@maDinhDanh varchar(15))
RETURNS TABLE
AS
RETURN (SELECT FROM DBO.CHI_TIET_SO() WHERE MaDinhDanh=@maDinhDanh)
* Hiển thị lịch sử giao dịch của sổ
ALTER FUNCTION [dbo].[LayGiaoDichSoTK](@maSo varchar(15))
RETURNS @dsGiaoDich TABLE (MaGiaoDich varchar(10), MaLoaiGiaoDich varchar(10),
NgayPhatSinhGiaoDich date, NgayGiaoDich date, SoTienGiaoDich money, DaThanhToan bit,
TenLoaiGiaoDich nvarchar(50), HoTenNhanVienGiaoDich nvarchar(50))
AS
BEGIN
INSERT INTO @dsGiaoDich
SELECT a.MaGiaoDich, a.MaLoaiGiaoDich, a.NgayPhatSinhGiaoDich, a.NgayGiaoDich,
a SoTienGiaoDich, a.DaThanhToan, b.TenLoaiGiaoDich, (SELECT NHAN_VIEN.HoTen FROM
NHAN_VIEN WHERE MaNhanVien= MaNhanVien)
FROM GIAO_DICH_TIET_KIEM a
join LOAI_GIAO_DICH b on a.MaLoaiGiaoDich= MaLoaiGiaoDich
WHERE MaSoTK=@maSo
RETURN
END
* Các function liên quan đến lấy thông tin chi tiết của các giao dịch sổ
- Lấy chi tiết giao dịch gửi tiền vào sổ tiết kiệm
Trang 31ALTER FUNCTION [dbo].[LayGiaoDichGuiLanDau](@maGiaoDich varchar(10))
RETURNS TABLE
AS
RETURN (SELECT b.HoTen as HoTenKH, b.MaDinhDanh, a.MaSoTK, SoTienGiaoDich,
d MaLoaiTien, c.HoTen as HoTenNV, c.MaNhanVien
FROM GIAO_DICH_TIET_KIEM a
join KHACH_HANG b on a.MaKhachHangGiaoDich= MaKhachHang
join TAI_KHOAN_TIET_KIEM d on a.MaSoTK= MaSoTK
join NHAN_VIEN c on c.MaNhanVien= MaNhanVien
WHERE MaGiaoDich=@maGiaoDich)
-
- Lấy chi tiết giao dịch rút lãi
ALTER FUNCTION [dbo].[LayGiaoDichRutLaiDinhKy](@maGiaoDich varchar(10))
RETURNS @thongtin TABLE (HoTenKH nvarchar(50), MaDinhDanh varchar(15), MaSoTK varchar(15),
MaKH varchar(10), SoDu money, SoTienLai money, MaLoaiTien varchar(10),
HoTenNV nvarchar(50), MaNhanVien varchar(10),
LaiSuatTK float, KyHan int, KyTraLai int, tinhTrang bit, ngayGiaoDich date)
AS
BEGIN
DECLARE @tinhTrang bit;
INSERT INTO @thongtin
SELECT
(SELECT HoTen FROM KHACH_HANG WHERE MaKhachHang= MaKhachHangGiaoDich),
(SELECT MaDinhDanh FROM KHACH_HANG WHERE MaKhachHang= MaKhachHangGiaoDich),
a MaSoTK, a.MaKhachHangGiaoDich, DBO.LaySoDu( MaSoTK, a.NgayPhatSinhGiaoDich)
, SoTienGiaoDich, d.MaLoaiTien,
(SELECT HoTen as HoTenNV FROM NHAN_VIEN WHERE MaNhanVien= MaNhanVien),
(SELECT MaNhanVien as HoTenNV FROM NHAN_VIEN WHERE MaNhanVien= MaNhanVien),
(SELECT LaiSuat FROM DBO.CHI_TIET_SO() e WHERE a.MaSoTK= MaSoTK),
(SELECT KyHan FROM DBO.CHI_TIET_SO() e WHERE a.MaSoTK= MaSoTK),
(SELECT KyTraLai FROM DBO.CHI_TIET_SO() e WHERE a.MaSoTK= MaSoTK),
a DaThanhToan, a.NgayGiaoDich
FROM GIAO_DICH_TIET_KIEM a
join TAI_KHOAN_TIET_KIEM d on a.MaSoTK= MaSoTK
WHERE MaGiaoDich=@maGiaoDich
RETURN;
END
- Lấy chi tiết giao dịch tất toán đúng hạn
ALTER FUNCTION [dbo].[LayGiaoDichTatToanDungHan](@maGiaoDich varchar(10))
RETURNS @thongtin TABLE (HoTenKH nvarchar(50), MaDinhDanh varchar(15), MaSoTK varchar(15),
MaKH varchar(10), SoDu money, MaLoaiTien varchar(10),
HoTenNV nvarchar(50), MaNhanVien varchar(10),
tinhTrang bit, ngayGiaoDich date)
AS
BEGIN
INSERT INTO @thongtin
SELECT
(SELECT HoTen FROM KHACH_HANG WHERE MaKhachHang= MaKhachHangGiaoDich),
(SELECT MaDinhDanh FROM KHACH_HANG WHERE MaKhachHang= MaKhachHangGiaoDich),
a MaSoTK, a.MaKhachHangGiaoDich, a.SoTienGiaoDich , d.MaLoaiTien,
(SELECT HoTen FROM NHAN_VIEN WHERE MaNhanVien= MaNhanVien),
(SELECT MaNhanVien FROM NHAN_VIEN WHERE MaNhanVien= MaNhanVien),
Trang 3229
a DaThanhToan, a.NgayGiaoDich
FROM GIAO_DICH_TIET_KIEM a
join TAI_KHOAN_TIET_KIEM d on a.MaSoTK= MaSoTK
WHERE MaGiaoDich=@maGiaoDich
RETURN;
END
- Lấy chi tiết giao dịch tất toán trước hạn
ALTER FUNCTION [dbo].[LayGiaoDichTatToanTruocHan_So1Lan](@maGiaoDich varchar(10))
RETURNS @thongtin TABLE (HoTenKH nvarchar(50), MaDinhDanh varchar(15), MaSoTK
varchar(15), MaKH varchar(10), SoDu money, KhauTru money, MaLoaiTien varchar(10),
HoTenNV nvarchar(50), MaNhanVien
varchar(10), TongTien money, tinhTrang bit, ngayGiaoDich date)
AS
BEGIN
DECLARE @soDu money, @khauTru money, @soTK varchar(15), @thucTe money
SELECT @soDu=DBO.LaySoDu( MaSoTK, a.NgayPhatSinhGiaoDich),
@thucTe= SoTienGiaoDich FROM GIAO_DICH_TIET_KIEM A JOIN TAI_KHOAN_TIET_KIEM B ON
A MaSoTK= MaSoTK WHERE MaGiaoDich=@maGiaoDich
SET @khauTru= @soDu - @thucTe
INSERT INTO @thongtin
SELECT
b HoTen as HoTenKH, b.MaDinhDanh, a.MaSoTK, a.MaKhachHangGiaoDich, @soDu ,
@khauTru, d.MaLoaiTien, c.HoTen as HoTenNV, c.MaNhanVien,
a SoTienGiaoDich , DaThanhToan, a.NgayGiaoDich
FROM GIAO_DICH_TIET_KIEM a
join KHACH_HANG b on a.MaKhachHangGiaoDich= MaKhachHang
join TAI_KHOAN_TIET_KIEM d on a.MaSoTK= MaSoTK
join NHAN_VIEN c on c.MaNhanVien= MaNhanVien
WHERE MaGiaoDich=@maGiaoDich
RETURN;
END
- Lấy chi tiết giao dịch Gia hạn sổ:
Lấy giao dịch gia hạn sổ
ALTER FUNCTION [dbo] [LayGiaoDichGiaHanSo] ( @maGiaoDich varchar ( 10 ))
RETURNS @thongtin TABLE ( MaSoTK varchar ( 15 ), LaiSuat float , KyHan int , LoaiTien varchar ( 10 ),
ngayNhapGocCu date , ngayDenHanCu date , SoDuCu money , ngayNhapGocMoi date , ngayDenHanMoi date , SoDuMoi
( SELECT LaiSuat FROM LOAI_TIET_KIEM WHERE MaLoaiTietKiem = MaLoaiTietKiem ),
( SELECT KyHan FROM LOAI_TIET_KIEM WHERE MaLoaiTietKiem = MaLoaiTietKiem ),
( SELECT LoaiTien FROM LOAI_TIEN WHERE MaLoaiTien = MaLoaiTien ),
( SELECT MAX ( NgayGhiNhanSoDu ) FROM SO_DU_TAI_KHOAN WHERE NgayGhiNhanSoDu < NgayLaiNhapGoc ),
d NgayLaiNhapGoc , DBO LaySoDu ( MaSoTK , DATEADD ( DAY , - , d NgayLaiNhapGoc )),
d NgayLaiNhapGoc , d NgayDenHan , a SoTienGiaoDich
FROM GIAO_DICH_TIET_KIEM a
join TAI_KHOAN_TIET_KIEM d on a MaSoTK = MaSoTK
WHERE MaGiaoDich = @maGiaoDich
RETURN ;
END
Trang 33* Các Procedure liên quan đến thao tác thực hiện xác nhận thanh toán giao dịch của nhân viên
- Procedure xác nhận giao dịch rút lãi
ALTER procedure [dbo].[LayLaiDinhKy] @maSoTK varchar(15), @maNhanvien varchar(10),
@ngaylaylai date, @maKhachHang varchar(10), @err nvarchar(MAX) out)
as
BEGIN
DECLARE @ngayNhanLaiTiepTheo date, @kytralai int, @ngayLaiNhapGoc date,
@ngayDenHan date
select @kytralai=KyTraLai FROM TAI_KHOAN_TIET_KIEM WHERE MaSoTK= @maSoTK
Tính ngày lấy lãi tiếp theo dựa trên ngày thực tế lấy lãi của khách hàng
SELECT @ngayLaiNhapGoc=NgayLaiNhapGoc, @ngayDenHan=NgayDenHan FROM
TAI_KHOAN_TIET_KIEM WHERE MaSoTK=@maSoTK
SET @ngayNhanLaiTiepTheo = DATEADD(day, 30*@kytralai, @ngaylaylai)
DECLARE @maGiaoDich varchar(10), @ngayPhatSinh date
SELECT @maGiaoDich=MaGiaoDich, @ngayPhatSinh=NgayPhatSinhGiaoDich FROM
GIAO_DICH_TIET_KIEM A JOIN TAI_KHOAN_TIET_KIEM B ON A.MaSoTK= B.MaSoTK WHERE
B MaSoTK=@maSoTK AND A.MaLoaiGiaoDich='GD_RLDK' AND A.DaThanhToan=0
SET XACT_ABORT ON
BEGIN TRAN
BEGIN TRY
if (@ngayPhatSinh>@ngayLaiNhapGoc and @ngayPhatSinh!=@ngayDenHan)
Phát sinh kỳ nhận lãi định kỳ mới
NgayNhanLaiDinhKyTiepTheo=@ngayNhanLaiTiepTheo,NgayDenHan=DATEADD(day,DATEDIFF(day,@ngayPhatSinh,@ngaylaylai),NgayDenHan) where MaSoTK=@maSoTK;
Xác nhận thanh toán
NgayGiaoDich=@ngaylaylai, MaKhachHangGiaoDich=@maKhachHang, DaThanhToan=1 where
MaGiaoDich=@maGiaoDich
COMMIT TRANEND TRYBEGIN CATCH
ROLLBACKSELECT @err = 'Lỗi: ' ERROR_MESSAGE()
END CATCHEND
- Procedure xác nhận giao dịch tất toán đúng hạn
Procedure Tất toán sổ gửi đúng thời hạn (bao gồm cả tất toán sổ không kỳ hạn)
ALTER PROCEDURE [dbo].[TatToanDungHan] @maSoTK NVARCHAR(10), @ngayGiaoDich date,
@maNhanvien varchar(10), @maKhachHang varchar(10))
DECLARE @type varchar(10), @count1 int, @count2 int,
@soTienPhatSinh money, @hinhThucTraLai varchar(10)
SET @type= (SELECT MaLoaiTietKiem FROM TAI_KHOAN_TIET_KIEM WHERE
MaSoTK=@maSoTK)
SET @count1 = (SELECT COUNT(*) FROM DS_TietKiemGuiGop WHERE
MaLoaiTietKiem=@type)
Trang 3431
SET @count2 = (SELECT COUNT(*) FROM DS_TietKiemGui1Lan WHERE
MaLoaiTietKiem=@type)
if (@count1!=0 Đối với gửi góp, khách hàng đến tất toán sẽ nhận được tiền gốc
đã gửi và tiền lãi kép tính theo ngày
Giao dịch này tự động phát sinh khi sổ gửi góp đến Ngày đến hạn
BEGIN
Xác nhận tất toán sổ
MaKhachHangGiaoDich=@maKhachHang, DaThanhToan= , NgayGiaoDich=@ngayGiaoDich WHERE
MaSoTK=@maSoTK and MaLoaiGiaoDich='GD_TTDH'
ENDelse
Đối với gửi một lần
BEGIN
DECLARE @laisuat float, @kyhan intSET @hinhThucTraLai = (SELECT MaHinhThucTraLai FROM
DS_TietKiemGui1Lan WHERE MaLoaiTietKiem=@type)
SET @laisuat = (SELECT LaiSuat FROM
DS_TietKiemGui1Lan WHERE MaLoaiTietKiem=@type)
SET @kyhan = (SELECT KyHan FROM DS_TietKiemGui1Lan
WHERE MaLoaiTietKiem=@type)
Nhân viên thực hiện các giao dịch rút lãi (nếu có) và thực hiện tất toán tiền gốc của sổ
Lấy số tiền gốc của sổ
DECLARE @tiengoc moneyselect @tiengoc =DBO.LaySoDu(@maSoTK, GETDATE())
Đánh dấu tất toán sổ
NgayTatToan=@ngayGiaoDich, TinhTrangSuDung=0 where MaSoTK=@maSoTK;
Ghi nhận giao dịch tất toán
INSERT INTO GIAO_DICH_TIET_KIEM(MaSoTK,
SoTienGiaoDich, NgayGiaoDich, MaNhanVien, MaLoaiGiaoDich, NgayPhatSinhGiaoDich,
MaKhachHangGiaoDich, DaThanhToan) VALUES (@maSoTK, @tiengoc, @ngayGiaoDich, @maNhanvien,
'GD_TTDH', @ngayGiaoDich,@maKhachHang, )
ENDCOMMIT TRANEND TRY
BEGIN CATCH
ROLLBACKDECLARE @err varchar(MAX)
SELECT @err = 'Lỗi: ' ERROR_MESSAGE()
RAISERROR(@err, 16, 1)
END CATCHEND
- Procedure xác nhận giao dịch tất toán trước hạn
Procedure Tất toán trước hạn
ALTER PROCEDURE [dbo].[TatToanTruocHan] @maSoTK NVARCHAR(10), @ngayGiaoDich date,
@maNhanvien varchar(10), @maKhachHang varchar(10))
DECLARE @hinhThucGui varchar(10)
SET @hinhThucGui= (SELECT MaHinhThucGui FROM
TAI_KHOAN_TIET_KIEM A JOIN LOAI_TIET_KIEM B ON A.MaLoaiTietKiem= MaLoaiTietKiem
WHERE MaSoTK=@maSoTK)
if (@hinhThucGui = 'HTG_1L')
Đối với gửi 1 lần
Trang 35DECLARE @type varchar(10), @soTienPhatSinh money,
@hinhThucTraLai varchar(10), @tienlaithucte money, @tiengoc money
SET @type= (SELECT MaLoaiTietKiem FROM
TAI_KHOAN_TIET_KIEM WHERE MaSoTK=@maSoTK)
SET @hinhThucTraLai= (SELECT MaHinhThucTraLai FROM
LOAI_TIET_KIEM WHERE MaLoaiTietKiem=@type)
Select @tiengoc=SoDu from SO_DU_TAI_KHOAN where MaSoTK=
@maSoTK and NgayGhiNhanSoDu=(SELECT MAX(NgayGhiNhanSoDu) FROM SO_DU_TAI_KHOAN WHERE
MaSoTK=@maSoTK)
Phát sinh giao dịch nhận lãi trước hạn
EXEC DBO.NhanLaiTruocHan @maSoTK, @tienlaithucte out,
@ngayGiaoDich, @maNhanvien, @maKhachHang
if (@hinhThucTraLai='HTTL_S')
Đối với hình thức trả sau, khách hàng đến tất toán sẽ nhận được tiền gốc và lãi tính theo mức lãi gửi tiết kiệm không kỳ han
BEGIN
Khách hàng sẽ nhận lại được toàn bộ tiền gốc
và tiền lãi đã phát sinh trong giao dịch nhận lãi
SET @soTienPhatSinh = @tiengoc
ENDelse if (@hinhThucTraLai='HTTL_T')
Tất toán đối với hình thức trả lãi trước, khách hàng
sẽ phải hoàn lại ngân hàng khoản chênh giữa tiền lãi đã nhận và tiền lãi tính theo mức lãi không thời hạn, khoảng này sẽ được khấu trừ vào tiền gốc khách hàng nhận lại
BEGIN
DECLARE @soTienDaNhan money,
@soTienLaiThucTe money, @maGiaoDich varchar(10)
Xem tiền lãi đã được nhận chưa
SELECT @maGiaoDich=MaGiaoDich,
@soTienDaNhan=SoTienGiaoDich FROM GIAO_DICH_TIET_KIEM A JOIN TAI_KHOAN_TIET_KIEM B
ON A.MaSoTK= B.MaSoTK WHERE B.MaSoTK=@maSoTK AND A.MaLoaiGiaoDich='GD_RLT' AND
Với hình thức gửi lấy lãi định kỳ, khách hàng cũng sẽ phải trả lại khoản chênh lệch giữa tiền đã nhận định kỳ và tiền lãi tính theo mức lãi không thời hạn
BEGIN
DECLARE @daNhan moneySET @daNhan= (SELECT SUM(SoTienGiaoDich)
FROM
GIAO_DICH_TIET_KIEM A JOIN TAI_KHOAN_TIET_KIEM B ON A.MaSoTK= MaSoTK
WHERE A.MaSoTK=@maSoTK and MaLoaiGiaoDich='GD_RLDK' and DATEDIFF(DAY, NgayGiaoDich, NgayLaiNhapGoc)<0 andDaThanhToan= )
SET @soTienPhatSinh = @tiengoc + (@tienlaithucte
-@DaNhan)
END
Đánh dấu tất toán sổ
UPDATE TAI_KHOAN_TIET_KIEM SET
NgayTatToan=@ngayGiaoDich, TinhTrangSuDung=0 where MaSoTK=@maSoTK;
Ghi nhận giao dịch tất toán
INSERT INTO GIAO_DICH_TIET_KIEM(MaSoTK, SoTienGiaoDich,NgayGiaoDich, MaNhanVien, MaLoaiGiaoDich, NgayPhatSinhGiaoDich,MaKhachHangGiaoDich,DaThanhToan) VALUES (@maSoTK, @soTienPhatSinh, @ngayGiaoDich, @maNhanvien,
'GD_TTTH', @ngayGiaoDich, @maKhachHang, )
Trang 3633
ENDelseBEGIN
Đối với sổ gửi góp, giao dịch tất toán có thể phát sinh trước khi khách hàng yêu cầu giao dịch tất toán (do gửi góp quá trễ),
Nên việc đánh dấu sổ đóng đã được thực hiện khi giao dịch tất toán được phát sinh, khi khách hàng đến tất toán
chỉ cần đánh dấu giao dịch rút lãi trước hạn đã thực hiện
DECLARE @maGD1 varchar(10), @maGD2 varchar(10);
SELECT @maGD1=MaGiaoDich FROM GIAO_DICH_TIET_KIEM WHERE
MaSoTK=@maSoTK AND MaLoaiGiaoDich='GD_TTTH' and DaThanhToan=0
if (@maGD1 is null)
Phát sinh giao dịch tất toán nếu chưa có
exec dbo.NhanLaiTruocHanGuiGop @maSoTk,
@ngayGiaoDich
SELECT @maGD1=MaGiaoDich FROM GIAO_DICH_TIET_KIEM WHERE
MaSoTK=@maSoTK AND MaLoaiGiaoDich='GD_TTTH' and DaThanhToan=0
SELECT @maGD2=MaGiaoDich FROM GIAO_DICH_TIET_KIEM WHERE
MaSoTK=@maSoTK AND MaLoaiGiaoDich='GD_RLTH' and DaThanhToan=0
Đánh dấu xác nhận đã thực hiện giao dịch lấy lãi trước hạn
UPDATE GIAO_DICH_TIET_KIEM SET DaThanhToan= ,MaNhanVien=@maNhanvien, NgayGiaoDich=@ngayGiaoDich, MaKhachHangGiaoDich=@maKhachHang
WHERE MaGiaoDich=@maGD2
Đánh dấu xác nhận đã thực hiện giao dịch tất toán
UPDATE GIAO_DICH_TIET_KIEM SET DaThanhToan= ,MaNhanVien=@maNhanvien, NgayGiaoDich=@ngayGiaoDich, MaKhachHangGiaoDich=@maKhachHang
WHERE MaGiaoDich=@maGD1
ENDCOMMIT TRANEND TRY
BEGIN CATCH
ROLLBACK
DECLARE @err varchar(MAX) SELECT @err = ERROR_MESSAGE() RAISERROR(@err, 16, 1);
END CATCHEND
- Procedure ghi nhận giao dịch gửi góp
Procedure Gửi góp (Khi gửi góp thêm, hệ thống tính lãi kép theo ngày kỳ trước, cho ra số dư mới, rồi cộng với khoản gửi thêm, cho ra số dư hiện tại)
ALTER PROCEDURE [dbo].[GuiGop] @maSoTK NVARCHAR(10), @soTien money, @ngayGiaoDich
date, @maNhanvien varchar(10),@maKhachHang varchar(10), @maGiaoDich varchar(10) out)
DECLARE @soducuoi money, @tienlaiKytruoc money,@kyHan int,
@tongTien money, @kyGuiGop int, @ngayDenHan date, @ngayGuiGop date
Ghi nhận số dư mới = gốc + lãi kép theo ngày của kỳ trước +
số tiền gửi thêm
SET @soducuoi = DBO.LaySoDu(@maSoTK, DATEADD(DAY, - ,