MỤC LỤC
Lời mở đầu
Phần 01 : Mô tả phần mềm Quản Lý Nhân Sự
A. Giới thiệu 2
B. Mô tả chi tiết 2
I. Quản lý nhân sự 2
1. Danh mục phòng ban 3
2. Hồ sơ lý lịch nhân viên 3
3. Hợp đồng lao động 3
4. Quá trình công tác 4
5. Khen thưởng – Kỷ luật 5
6. Bảo hiểm YT-XH 6
II. Quản lý giờ công 6
III. Quản lý tiền lương 7
1. Phụ cấp 7
2. Tạm ứng 7
3. Khen thưởng- Kỷ luật 8
4. Lãnh lương 9
VI. Thống kê – Báo cáo tổng hợp 9
Phần 02 : Mô tả phần mềm Quản Lý Nhân Sự
I. Quan hệ dữ liệu 11
II. Sơ đồ quan hệ vật lý 14
III. Bảng – Kiểu DL – Thuộc tính – Ý nghĩa 15
VI. Một số thủ tục tính giờ công và tính lương 26
1. Thủ tục tính tổng giờ công từ công thức chấm công 26
2. Thủ tục tính công cho từng nhân viên 27
3. Thủ tục tính tổng hợp giờ công tháng 35
Phần 03 : Giao diện và chức năng
Đăng nhập hệ thống 11
Phân quyền người sử dụng 14
Tiện ích tìm kiếm 15
I. Quản lý nhân viên 26
1. Hồ sơ lý lịch nhân viên 26
2. Các hợp đồng lao động 27
3. Quá trình công tác 35
I. Quản lý giờ công 26
1. Bảng công thức chấm công 26
2. Chấm công tự động bằng máy quét thẻ từ 27
3. Chỉnh sửa giờ công 35
II. Quản lý tiền lương 26
1. Phụ cấp 26
2. Tạm ứng 27
3. Tính lương tháng 35
III. Báo cáo – Thống kê – Kết xuất dữ liệu 26
1. Bảnh chấm công cho tiết hàng tháng 26
2. Bảnh chấm công từng nhân viên 27
3. Bảng theo dõi chấm công chi tiết tháng theo phòn- ban 35
4. Bảng chấm công nhân viên phòng ban theo tháng 27
5. Thống kê các lần tạm ứng trong năm của nhân viên 35
6. Báo cáo tổng hợp tạm ứng lương tháng theo từng phòng ban 27
7. Báo cáo lương tháng theo phòng ban – Tổ 35
8. Bảng tổng hợp giờ công - tiền công theo phòng ban 35
9. Bảng tổng hợp giờ công tiền công theo Tổ 27
10. Thống kê tổng số nhân viện đang làm việc theo phòng ban 35
11. Thống kê giờ công – Tiền công của nhân viên theo phòng ban 35
Phần 04 : Tổng kết – Đánh giá
I. Hướng phát triển 26
II. Kết quả đạt được 26
III. Hướng dẫn cài đặt 26
1. Cài đặt nguồn Cơ Sở Dữ Liệu SQL Server 2002 26
2. Cài đặt phần mềm Quản Lý Nhân Sự 27
VI. Tài liệu tham khảo 26
Lời kết luận 71
Mục lục 72
77 trang |
Chia sẻ: maiphuongdc | Lượt xem: 1760 | Lượt tải: 1
Bạn đang xem trước 20 trang tài liệu Luận văn Xây dựng hệ thống quản lý nhân sự quản lý chấm công và tính lương, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Loại hợp đổng
FK
MA_CONG_VIEC
NUMBER
DATE
Ngày làm hợp đồng
FK
MA_HOP_DONG
DATE
DATE
Ngày KT hợp đồng
FK
LY_DO_CT
STRING
100
Số tiền nộp định kỳ
NGAY_CONG_TAC
STRING
100
Ngày hợp đồng BH
HE_SO_LUONG
DATE
DATE
Ngày bắt đầu làm việc
MUC_LUONG_CB
NUMBER
Mức lương căn bản
CO_HIEU_LUC
STRING
1
Có hiệu lực hay không
BAO_HIEM
STRING
1
Có bảo hiểm hay không
NGAY_BH
DATE
Ngày bảo hiểm
13. DM_PHONG_BAN – Danh mục phòng ban :
THUỘC TÍNH
KIỂU DỮ LIỆU
KÍCH THƯỚC
Ý NGHĨA
KHÓA
MA_PHONG_BAN
AUTO
Mã số tăng tự động
PK
TEN_PHONG_BAN
STRING
50
Tên ngành
CHUC_NANG
STRING
100
Chức năng của PB
TINH_TANG_CA
STRING
1
Cho phép tăng ca không
MA_CONG_THUC
NUMBER
Mã công thức tính công
FK
SO_NGAY_CONG
NUMBER
Số ngày công
KHOI
STRING
1
Khối VP hay SX
14. DM_TO – Danh mục tổ :
THUỘC TÍNH
KIỂU DỮ LIỆU
KÍCH THƯỚC
Ý NGHĨA
KHÓA
MA_TO
STRING
10
Mã PB + Số TT
PK
TEN_TO
STRING
100
Tên tổ
MA_PHONG_BAN
STRING
5
Mã phòng ban
FK
15. BANG_CONG_THUC_TINH_CONG_THEO_GIO - Bảng công thức tính công theo giờ :
THUỘC TÍNH
KIỂU DỮ LIỆU
KÍCH THƯỚC
Ý NGHĨA
KHÓA
MA_CONG_THUC
AUTO
Mã công thức tính
PK
NGAY_AP_DUNG
DATE
Ngày áp dụng
TU_GIO
NUMBER
Từ giờ
TU_PHUT
NUMBER
1
Từ phút
DEN_GIO
NUMBER
Đến giờ
DEN_PHUT
NUMBER
Đến phúr
TIEN_GIO_THUONG
NUMBER
Tiền công 1 giờ ngày thường
TI_LE_NGAY_LE
NUMBER
Tỉ lệ 1 giờ ngày lễ
TI_LE_NGAY_NGHI
NUMBER
Tỉ lệ 1 giờ ngày nghỉ
DON_VI_TINH
STRING
20
Đơn vị tính
TI_GIA_QUI_DOI
NUMBER
Bằng cấp
CO_HIEU_LUC
STRING
1
Có hiệu lực không ?
SO_GIO
NUMBER
Số giờ
LOAI_NHAN_VIEN
STRING
1
Aùp dụng cho NV SX hay VP
16. CONG_TAC_NUOC_NGOAI – Công tác nước ngoài:
THUỘC TÍNH
KIỂU DỮ LIỆU
KÍCH THƯỚC
Ý NGHĨA
KHÓA
MA_CT_NN
AUTO
Mã công tác nước ngoài
PK
MA_QTCT
NUMBER
Mã quá trình công tác
FK
NGAY_DI
DATE
Ngày đi
NGAY_VE
DATE
Ngày về
LY_DO
STRING
1
Lý do công tác
KQ_CHUYEN_DI
STRING
100
Kết quả chuyến đi
MA_CHUC_VU
NUMBER
Mã chức vụ
FK
MA_HOP_DONG
NUMBER
Mã hợp đồng
FK
17. DM_QUOC_GIA – Danh mục quốc gia
THUỘC TÍNH
KIỂU DỮ LIỆU
KÍCH THƯỚC
Ý NGHĨA
KHÓA
MA_QUOC_GIA
AUTO
Mã quốc gia
PK
TEN_QUOC_GIA
STRING
100
Tên quốc gia
18. DM_CHUC_VU – Danh mục chức vụ :
THUỘC TÍNH
KIỂU DỮ LIỆU
KÍCH THƯỚC
Ý NGHĨA
KHÓA
MA_CHUC_VU
AUTO
Mã chức vụ
PK
TEN_CHUC_VU
STRING
100
Tên chức vụ
19. DM_CONG_VIEC - Danh mục công việc :
THUỘC TÍNH
KIỂU DỮ LIỆU
KÍCH THƯỚC
Ý NGHĨA
KHÓA
MA_CONG_VIEC
AUTO
Mã công việc
PK
TEN_CONG_VIEC
STRING
100
Tên công việc
20. NGHI_PHEP – Nghỉ phép :
THUỘC TÍNH
KIỂU DỮ LIỆU
KÍCH THƯỚC
Ý NGHĨA
KHÓA
MA_NGHI_PHEP
AUTO
Mã công việc
PK
MA_QTCT
STRING
100
Tên công việc
NGAY_NGHI
DATE
Ngày nghỉ
LY_DO_NGHI
STRING
100
Lý do nghỉ
CO_PHEP_KHONG
STRING
1
Có phép hay không
21. THUONG_PHAT – Thưởng phạt :
THUỘC TÍNH
KIỂU DỮ LIỆU
KÍCH THƯỚC
Ý NGHĨA
KHÓA
MA_THUONG_PHAT
AUTO
Mã công việc
PK
MA_QTCT
STRING
100
Tên công việc
FK
NGAY_THUONG_PHAT
DATE
Ngày thưởng phạt
THUONG_HAY_PHAT
STRING
1
Thưởng hay phạt
LY_DO
STRING
100
Lý do thưởng phạt
SO_TIEN
NUMBER
Số tiền thưởng phạt
DA_TRU_VAO_LUONG
STRING
1
Đã trừ vào lương
22. PHU_CAP – Phụ cấp :
THUỘC TÍNH
KIỂU DỮ LIỆU
KÍCH THƯỚC
Ý NGHĨA
KHÓA
MA_PHU_CAP
AUTO
Mã phụ cấp
PK
MA_QTCT
NUMBER
Mã quá trình công tác
FK
LY_DO_PHU_CAP
STRING
100
Lý do phụ cấp
SO_TIEN
NUMBER
Số tiền phụ cấp
DA_CONG_VAO_LUONG
STRING
1
Đã cộng vào lương chưa
THANG
NUMBER
Tháng phụ cấp
NAM
NUMBER
Năm phụ cấp
NGAY_PHU_CAP
DATE
Ngày phụ cấp
23. TAM_UNG - Tạm ứng lương
THUỘC TÍNH
KIỂU DỮ LIỆU
KÍCH THƯỚC
Ý NGHĨA
KHÓA
MA_TAM_UNG
AUTO
Mã công việc
PK
MA_QTCT
STRING
100
Tên công việc
FK
THANG
NUMBER
Tháng tạm ứng
NAM
NUMBER
Năm tạm ứng
NGAY_TAM_UNG
DATE
Ngày tạm ứng
LY_DO_TAM_UNG
STRING
100
Lý do tạm ứng
SO_TIEN
NUMBER
Số tiền
DA_TRU_VAO_LUONG
STRING
1
Đã trừ vào lương
24. DANG_KY_LAM_TANG_CA – Đăng ký làm tăng ca :
THUỘC TÍNH
KIỂU DỮ LIỆU
KÍCH THƯỚC
Ý NGHĨA
KHÓA
MA_TANG_CA
AUTO
Mã công việc
PK
MA_QTCT
STRING
100
Tên công việc
FK
NGAY_DANG_KY
DATE
Ngày đăng ký tăng ca
NGAY_TANG_CA
DATE
Ngày làm tăng ca
DA_TANG_CA
STRING
1
Đã tăng ca chưa
LOAI_NGAY
STRING
1
Loại ngày :1. thường – 2.lễ
MA_CONG_THUC
NUMBER
Mã công thức tính công
FK
25. LANH_LUONG - Lãnh lương :
THUỘC TÍNH
KIỂU DỮ LIỆU
KÍCH THƯỚC
Ý NGHĨA
KHÓA
ID_LANH_LUONG
AUTO
Mã lãnh lương
PK
MA_QTCT
NUMBER
Mã quá trình công tác
FK
THANG
NUMBER
2
Tháng lãnh lương
NAM
NUMBER
4
Năm lãnh lươong
NGAY_LANH
DATE
1
Ngày lãnh
LUONG_CAN_BAN
NUMBER
1
Lương căn bản
THUONG
NUMBER
Số tiền thưởng
PHAT
NUMBER
Số tiền phạt
PHU_CAP
NUMBER
Số tiền phụ cấp
TAM_UNG
NUMBER
Số tiền tạm ứng
THUC_LANH
NUMBER
Số tiền thực lãnh
DA_LANH
NUMBER
Số tiền đã lãnh
CON_LAI
NUMBER
Số tiền còn lại
BAO_HIEM
NUMBER
Số tiền đóng bảo hiểm
26. BANG_CHAM_CONG – Bảng chấm công :
THUỘC TÍNH
KIỂU DỮ LIỆU
KÍCH THƯỚC
Ý NGHĨA
KHÓA
ID_CHAM_CONG
AUTO
Mã lãnh lương
PK
MA_QTCT
NUMBER
Mã quá trình công tác
FK
THANG
NUMBER
Tháng chấm công
NAM
NUMBER
Năm chấm công
NGAY_LAM_VIEC
DATE
1
Ngày lãnh
NGAY_NGUNG_LV
DATE
1
Lương căn bản
TU_GIO
NUMBER
Từ giờ
TU_PHUT
NUMBER
Từ phút
DEN_GIO
NUMBER
Đến giờ
DEN_PHUT
NUMBER
Đến phút
CHINH_KHOA
NUMBER
1
Chính khoá hay làm thêm
THUONG_LE_NGHI
NUMBER
1
Ngày thường, lễ, nghỉ
DA_CHAM_CONG
NUMBER
1
Số tiền còn lại
DANG_LAM_VIEC
NUMBER
1
1: Trạng thái vào – 0 : ra
TINH_TRANG_VAO
NUMBER
1
Tình trạng vào: sớm,trễ,đúng giờ
TINH_TRANG_RA
NUMBER
Tình trạng ra: sớm,trễ,đúng giờ
SO_PHUT_TT_VAO
NUMBER
Số phút trình trạng vào
SO_PHUT_TT_RA
NUMBER
Số phút tình trạng ra
SO_GIO_CONG
NUMBER
Số giờ công
SO_GIO_TANG_CA
NUMBER
Số giờ tăng ca
SO_TIEN
NUMBER
Số tiền lương
27. BANG_TONG_HOP_GIO_CONG - Bảng tổng hợp giờ công :
THUỘC TÍNH
KIỂU DỮ LIỆU
KÍCH THƯỚC
Ý NGHĨA
KHÓA
ID_BANG_TH
AUTO
Mã tăng tự động
PK
MA_QTCT
NUMBER
Mã quá trình công tác
FK
THANG
NUMBER
2
Tháng tổng hợp
NAM
NUMBER
4
Năm tổng hợp
TONG_GIO_DA_QD
NUMBER
Tổng số giờ đã qui đổi
TONG_GIO_CHUA_QD
NUMBER
Tổng số giờ chưa qui đổi
GIO_NGAY_THUONG
NUMBER
Số giờ ngày thường
GIO_NGAY_NGHI
NUMBER
Số giờ ngày nghỉ
GIO_NGAY_LE
NUMBER
Số giờ ngày lễ
GIO_DEM_THUONG
NUMBER
Số giờ đêm thường
GIO_DEM_NGHI
NUMBER
Số giờ đêm nghỉ
GIO_DEM_LE
NUMBER
Số giờ đêm lễ
SO_LAN_ RA_SOM
NUMBER
Số lần ra sớm
SO_LAN_ VAO_SOM
NUMBER
Số lần vào sớm
SO_LAN_ RA_MUON
NUMBER
Số lần ra muộn
SO_LAN_ VAO_MUON
NUMBER
Số lần vào muộn
SO_TIEN
NUMBER
Số tiền
SO_GIO_PHU_TROI
NUMBER
Số giờ phụ trội
SO_GIO_TANG_CA
NUMBER
Số giờ tăng ca
SO_TIEN_TANG_CA
NUMBER
Số tiền tăng ca
SO_NGAY_CONG
NUMBER
Số ngày công
SO_NGAY_TANG_CA
NUMBER
Số ngày tăng ca
VI . Một số thủ tục tính giờ công và tính lương :
1.Thủ tục tính tổng số giờ công từ bảng công thức chấm công :
create procedure CalculateSumFormulaHour as
Declare
@cursor as cursor,
@hh as numeric(5),
@mm as numeric(5),
@tu as numeric(5),
@sumG as numeric(5,2),
@idct as numeric(13),
@tu_gio as numeric(5),
@tu_phut as numeric(5),
@den_gio as numeric(5),
@den_phut as numeric(5)
set @sumG = 0
set @cursor=CURSOR SCROLL KEYSET FOR
select id_cong_thuc,tu_gio,tu_phut,den_gio,den_phut from bang_cong_thuc_cham_cong_theo_gio
open @cursor
fetch next from @cursor into @idct,@tu_gio,@tu_phut,@den_gio,@den_phut
WHILE @@FETCH_STATUS =0
begin
set @mm = 0
set @tu = @tu_gio
set @hh = 0
If @tu_gio <= @den_gio
begin
set @sumG = (@den_gio-@tu_gio)+(@den_phut-@tu_phut)/60
end
Else
begin
set @sumG = (24-@tu_gio)+(0-@tu_phut)/60+(@den_gio-0)+(@den_phut-0)/60
end
set @sumG=case when @sumG is null then 0 else @sumG end
update bang_cong_thuc_cham_cong_theo_gio set so_gio=@sumG where id_cong_thuc=@idct
fetch next from @cursor into @idct,@tu_gio,@tu_phut,@den_gio,@den_phut
end
close @cursor
DEALLOCATE @cursor
GO
2.Thủ tục tính công cho nhân viên :
CREATE procedure CalculateGioLamViec_1_Nhan_Vien_EveryOne
@SophutVao_Ra numeric(5),
@id_qt_ct numeric(13),
@thang numeric(2),
@nam numeric(4) as
declare
@cursor as cursor,
@tu_gio numeric(2),
@tu_phut numeric(2),
@den_gio numeric(2),
@den_phut numeric(2),
@idct as numeric(13),
@idchamcong numeric(13),
@ngay_thuong_le_nghi nvarchar(1),
@so_gio_cong numeric(5,2),
@so_tien money,
@so_gio_tang_ca numeric(5,2),
@so_tien_tang_ca money,
@so_phut_tinh_trang_vao numeric(5,2),
@so_phut_tinh_trang_ra numeric(5,2),
@tinh_trang_vao nvarchar(1),
@tinh_trang_ra nvarchar(1),
@ca nvarchar(100),
@tu_gio_ct numeric(2),
@tu_phut_ct numeric(2),
@den_gio_ct numeric(2),
@den_phut_ct numeric(2),
@so_gio_ct numeric(5,2),
@mnv nvarchar(10),
@loainv nvarchar(1),
@idqtct numeric(13),
@ty_le_1_gio_ngay_nghi as numeric(13,2),
@ty_le_1_gio_ngay_le as numeric(13,2),
@Tien_cong_1_gio_thuong as money,
@khoi As nvarchar(1),
@songaycong as numeric(5,2),
@muc_luong_can_ban as money,
@he_so_luong as money,
@tinh_tang_ca as nvarchar(1),
@tien_cong_1_gio_tang_ca as money,
@sophuttru numeric(9,2),
@so_gio_tang_ca_1 numeric(9,2),
@tru numeric(9,2)
set @cursor=CURSOR SCROLL KEYSET FOR
select id_qua_trinh_cong_tac,id_cham_cong,tu_gio,tu_phut,den_gio,den_phut,id_cong_thuc,ngay_thuong_le_nghi from bang_cham_cong
where dang_lam_viec='0' and id_qua_trinh_cong_tac=@id_qt_ct and thang=@thang and nam=@nam
open @cursor
fetch next from @cursor into @idqtct,@idchamcong,@tu_gio,@tu_phut,@den_gio,@den_phut,@idct,@ngay_thuong_le_nghi
while @@FETCH_STATUS=0
begin
set @so_gio_tang_ca=0
set @so_tien_tang_ca=0
select @ca=ca,@tu_gio_ct=tu_gio,@tu_phut_ct=tu_phut,@den_gio_ct=den_gio, @den_phut_ct=den_phut,@so_gio_ct=so_gio, @ty_le_1_gio_ngay_nghi=ty_le_1_gio_ngay_nghi, @ty_le_1_gio_ngay_le=ty_le_1_gio_ngay_le
from bang_cong_thuc_cham_cong_theo_gio where id_cong_thuc=@idct
select @mnv=ma_nhan_vien,@loainv=loai_nhan_vien from ho_so_nhan_vien where ma_nhan_vien in ( select ma_nhan_vien from hop_dong_lao_dong where ma_hop_dong in (select ma_hop_dong from qua_trinh_cong_tac where id_qua_trinh_cong_tac=@idqtct))
if @loainv='2'
select @songaycong = so_ngay_cong,@khoi=khoi,@tinh_tang_ca=tinh_tang_ca
from dm_phong_ban
where ma_phong_ban in (select ma_phong_ban from dm_to where ma_to in (select ma_to from qua_trinh_cong_tac where id_qua_trinh_cong_tac=@idqtct))
else
begin
if exists(select 1 from qua_trinh_cong_tac where id_qua_trinh_cong_tac=@idqtct and id_cong_thuc is null) select @songaycong = so_ngay_cong,@khoi=khoi,@tinh_tang_ca=tinh_tang_ca from dm_phong_ban where ma_phong_ban in (select ma_phong_ban from dm_to where ma_to in (select ma_to from qua_trinh_cong_tac where id_qua_trinh_cong_tac=@idqtct))
else
select @songaycong = so_ngay_cong,@khoi='1',@tinh_tang_ca='1' from dm_phong_ban where ma_phong_ban in (select ma_phong_ban from dm_to where ma_to in (select ma_to from qua_trinh_cong_tac where id_qua_trinh_cong_tac=@idqtct))
end
select @muc_luong_can_ban=muc_luong_can_ban,@he_so_luong=he_so_luong from qua_trinh_cong_tac where id_qua_trinh_cong_tac=@idqtct
--Tinh tinh trang vào ra ---- Số phút tình trạng vào ra
---------------vào-------------------
set @so_phut_tinh_trang_vao =(@tu_gio_ct - @tu_gio) * 60 - @tu_phut + @tu_phut_ct
if abs(@so_phut_tinh_trang_vao)>@SophutVao_ra
Begin
if @so_phut_tinh_trang_vao<0 set @tinh_trang_vao='3'
if @so_phut_tinh_trang_vao>0 set @tinh_trang_vao='1'
end
else
begin
set @tinh_trang_vao = '2' --Dung gio
set @so_phut_tinh_trang_vao = 0
end
-----------------Ra------------------------
set @so_phut_tinh_trang_ra = (@den_gio_ct - @den_gio) * 60 - @den_phut + @den_phut_ct
if abs(@so_phut_tinh_trang_ra)>@sophutVao_ra
begin
if (@so_phut_tinh_trang_ra<0) set @tinh_trang_ra='3'
if (@so_phut_tinh_trang_ra>0) set @tinh_trang_ra='1'
set @so_phut_tinh_trang_ra=abs(@so_phut_tinh_trang_ra)
end
else
begin
set @tinh_trang_ra='2'
Set @so_phut_tinh_trang_ra=0
end
-------------Tính số giờ công----------------------------
if @tu_gio<=@den_gio
begin
set @so_gio_cong=(@den_gio-@tu_gio)+(@den_phut-@tu_phut)/60
end
else
begin
set @so_gio_cong=(@den_gio-0)+(@den_phut-0)/60+(24-@tu_gio)+(0-@tu_phut)/60
end
---------Tính kiểu ngày làm việc
if (@ngay_thuong_le_nghi='1')
begin
set @so_gio_tang_ca=0
set @so_gio_tang_ca=(@tu_gio_ct-@tu_gio)*60+(@tu_phut_ct-@tu_phut)
select @so_gio_tang_ca,'1'
if (@so_gio_tang_ca<0) set @so_gio_tang_ca=0
set @so_gio_tang_ca_1 = (@den_gio-@den_gio_ct)*60+(@den_phut-@den_phut_ct) --(case when @so_phut_tinh_trang_vao >= 2 * @SophutVao_Ra then @so_phut_tinh_trang_vao - @SophutVao_Ra else 0 end + case when @so_phut_tinh_trang_ra > 3 * @SophutVao_Ra then @so_phut_tinh_trang_ra - @SophutVao_Ra else 0 end) / 60
if (@so_gio_tang_ca_1<0) set @so_gio_tang_ca_1=0
select @so_gio_tang_ca_1,'2'
set @so_gio_tang_ca=@so_gio_tang_ca + @so_gio_tang_ca_1
select @so_gio_tang_ca,'1+2'
if (@tu_gio12) and (@so_gio_tang_ca/60>=1)
begin
set @so_gio_tang_ca =(@so_gio_tang_ca/60)
end
else
begin
set @so_gio_tang_ca =(@so_gio_tang_ca)/60 -- 2*@SophutVao_ra/60
end
select @so_gio_tang_ca,'3'
set @sophuttru=0
if (@so_phut_tinh_trang_vao>@SophutVao_ra )
begin
set @so_gio_tang_ca =(@so_gio_tang_ca) - @SophutVao_ra/60
set @sophuttru=@sophuttru+@SophutVao_ra
end
else
begin
if @so_phut_tinh_trang_vao>0
begin
set @so_gio_tang_ca =(@so_gio_tang_ca) -@so_phut_tinh_trang_vao/60
set @sophuttru=@so_phut_tinh_trang_vao
end
end
if (@den_gio>=17)
begin
set @tru=0
if (@den_gio=17 and @den_phut>30 )
begin
set @tru=30
end
else
Begin
if (@den_gio>17 ) begin set @tru=30
end
else
if (@den_gio=17 and @den_phut<=30) begin set @tru=@den_phut end
end
set @so_gio_tang_ca =(@so_gio_tang_ca) - @tru/60
set @sophuttru=@sophuttru+ @tru
end
select @so_gio_tang_ca,'4',@tru
if (@so_gio_tang_ca*60<=@SophutVao_ra) set @so_gio_tang_ca=0
-------------Nếu không tăng ca
If @khoi='1' and @tinh_tang_ca = '0'
begin
Set @so_gio_tang_ca = 0
set @sophuttru=0
end
else
begin
If @tu_gio = 12.5 and @so_phut_tinh_trang_ra>@sophutVao_ra
set @so_gio_tang_ca =@so_gio_tang_ca-1
end
If @tu_gio = 12.5
set @so_gio_cong = @so_gio_cong - 1
set @so_gio_cong=@so_gio_cong-@sophuttru/60
set @so_gio_cong = @so_gio_cong - @so_gio_tang_ca
if (@so_phut_tinh_trang_vao=0 and @so_phut_tinh_trang_ra=0) set @so_gio_tang_ca=0
select @so_gio_tang_ca,'sgtc'
end
---Nếu ngày làm việc là ngày nghỉ hay ngày lễ
if (@ngay_thuong_le_nghi='2') or (@ngay_thuong_le_nghi='3')
begin
set @so_phut_tinh_trang_vao=(18-@tu_gio)*60-@tu_phut
set @so_phut_tinh_trang_ra=(21-@den_gio)*60-@den_phut
if (@so_gio_cong>=8 ) set @so_gio_cong=@so_gio_cong-1
if (@tu_gio>=17 )
begin
set @so_gio_tang_ca=@so_gio_cong
set @so_gio_cong=0
end
set @tinh_trang_vao=case when abs(@so_phut_tinh_trang_vao)0 then '1' else '3' end end
set @tinh_trang_ra=case when abs(@so_phut_tinh_trang_ra)0 then '3' else '1' end end
set @so_phut_tinh_trang_vao=case when abs(@so_phut_tinh_trang_vao)<=10 then 0 else @so_phut_tinh_trang_vao end
set @so_phut_tinh_trang_ra=case when abs(@so_phut_tinh_trang_ra)<=10 then 0 else @so_phut_tinh_trang_ra end
end
if (@so_gio_cong*60<=@SophutVao_ra ) set @so_gio_cong = 0
set @songaycong=case when @songaycong is null then 0 else @songaycong end
set @muc_luong_can_ban=case when @muc_luong_can_ban is null then 0 else @muc_luong_can_ban end
set @he_so_luong=case when @he_so_luong is null then 0 else @he_so_luong end
if @songaycong 0
begin
select @Tien_cong_1_gio_thuong =(muc_luong_can_ban*he_so_luong)/@songaycong from qua_trinh_cong_tac where id_qua_trinh_cong_tac=@idqtct
set @Tien_cong_1_gio_thuong=case when @Tien_cong_1_gio_thuong is null then 0 else @Tien_cong_1_gio_thuong end
if @khoi='1'
begin
If (@so_gio_ct >= 8)
begin
set @so_gio_ct = @so_gio_ct - 1
end
If (@so_gio_ct 0)
begin
set @Tien_cong_1_gio_thuong = @Tien_cong_1_gio_thuong / @so_gio_ct
end
end
else
begin
set @Tien_cong_1_gio_thuong = @Tien_cong_1_gio_thuong /8.5
end
end
else begin set @Tien_cong_1_gio_thuong =0 end
If (@ngay_thuong_le_nghi = '1' )
begin
set @so_tien = @so_gio_cong * @Tien_cong_1_gio_thuong
set @tien_cong_1_gio_tang_ca=(@Tien_cong_1_gio_thuong * @Ty_le_1_gio_ngay_nghi )/100 set @so_tien_tang_ca=@so_gio_tang_ca*@tien_cong_1_gio_tang_ca
end
Else
begin
If (@ngay_thuong_le_nghi = '2') --le
begin
set @so_tien = @so_gio_cong * (@Tien_cong_1_gio_thuong * @Ty_le_1_gio_ngay_le / 100)
set @tien_cong_1_gio_tang_ca=(@Tien_cong_1_gio_thuong * @Ty_le_1_gio_ngay_le /100)
set @so_tien_tang_ca=@so_gio_tang_ca*@tien_cong_1_gio_tang_ca
end
Else
begin -- nghi
set @so_tien = @so_gio_cong * (@Tien_cong_1_gio_thuong * @Ty_le_1_gio_ngay_nghi / 100) set @tien_cong_1_gio_tang_ca=(@Tien_cong_1_gio_thuong * @Ty_le_1_gio_ngay_nghi /100)
set @so_tien_tang_ca=@so_gio_tang_ca*@tien_cong_1_gio_tang_ca
end
end
set @so_tien_tang_ca=case when @so_tien_tang_ca is null then 0 else @so_tien_tang_ca end
set @so_tien=case when @so_tien is null then 0 else @so_tien end
update bang_cham_cong set tinh_trang_vao=@tinh_trang_vao,tinh_trang_ra=@tinh_trang_ra, so_phut_tinh_trang_vao=@so_phut_tinh_trang_vao,
so_phut_tinh_trang_ra=@so_phut_tinh_trang_ra,so_gio_cong=@so_gio_cong,so_tien=@so_tien,so_gio_tang_ca=@so_gio_tang_ca,so_tien_tang_ca=@so_tien_tang_ca
where id_cham_cong=@idchamcong
update bang_cham_cong set so_tien=@tien_cong_1_gio_thuong*@so_gio_cong where id_cham_cong=@idchamcong
update bang_cham_cong set so_tien_tang_ca=@tien_cong_1_gio_tang_ca*@so_gio_tang_ca where id_cham_cong=@idchamcong
fetch next from @cursor into @idqtct,@idchamcong,@tu_gio,@tu_phut,@den_gio,@den_phut,@idct,@ngay_thuong_le_nghi
end
close @cursor
deallocate @cursor
GO
3.Thủ tục tổng hợp giờ công tháng cho nhân viên:
CREATE procedure CalculateTONG_HOP_GIO_CONG_1_NHAN_VIEN_EveryOne
@thang numeric(2),@nam numeric(4),@mpb nvarchar(4),@mnv nvarchar(10) as
declare
@cursor_Nv as cursor,
@ma_nhan_vien as nvarchar(10),
@idqtct as numeric(13),
@th as numeric(13,2),
@l as numeric(13,2),
@ng as numeric(13,2),
@vs as numeric(5),
@rs as numeric(5),
@vm as numeric(5),
@rm as numeric(5),
@sogiotangca as numeric(10,2),
@sogio as numeric(10,2),
@stien as numeric(13,2),
@stientangca as numeric(13,2),
@loainv as nvarchar(1),
@sumG as numeric(10,2),
@idct as numeric(13)
exec CalculateSumFormulaHour
set @cursor_Nv=CURSOR SCROLL KEYSET FOR
select ma_nhan_vien,loai_nhan_vien from ho_so_nhan_vien where ma_nhan_vien=@mnv and ma_nhan_vien in
( select ma_nhan_vien from hop_dong_lao_dong where ma_hop_dong in
(select ma_hop_dong from qua_trinh_cong_tac where co_hieu_luc='1' and id_qua_trinh_cong_tac in
(select id_qua_trinh_cong_tac from bang_cham_cong where dang_lam_viec='0'
and thang=@thang and nam=@nam) and
ma_to in (select ma_to from dm_to where ma_phong_ban=@mpb)))
union
select ma_nhan_vien,loai_nhan_vien from ho_so_nhan_vien where ma_nhan_vien=@mnv and ma_nhan_vien in
( select ma_nhan_vien from hop_dong_lao_dong where ma_hop_dong in
(select ma_hop_dong from qua_trinh_cong_tac where co_hieu_luc='1' and id_qua_trinh_cong_tac not in
(select id_qua_trinh_cong_tac from bang_cham_cong where dang_lam_viec='0'
and thang=@thang and nam=@nam) and
ma_to in (select ma_to from dm_to where ma_phong_ban=@mpb)))
open @cursor_Nv
FETCH NEXT FROM @cursor_Nv INTO @ma_nhan_vien,@loainv
WHILE @@FETCH_STATUS =0
BEGIN
select @idqtct=id_qua_trinh_cong_tac from qua_trinh_cong_tac where co_hieu_luc='1' and ma_hop_dong in (select ma_hop_dong from hop_dong_lao_dong where ma_nhan_vien=@mnv)
set @idqtct=case when @idqtct is null then 0 else @idqtct end
if @idqtct>0
begin
delete from bang_tong_hop_gio_cong where id_qua_trinh_cong_tac=@idqtct and thang=@thang and nam=@nam
select @th=sum(so_gio_cong) from bang_cham_cong where id_qua_trinh_cong_tac=@idqtct and thang=@thang and nam=@nam and ngay_thuong_le_nghi='1' and dang_lam_viec='0'
select @l=sum(so_gio_cong) from bang_cham_cong where id_qua_trinh_cong_tac=@idqtct and thang=@thang and nam=@nam and ngay_thuong_le_nghi='2' and dang_lam_viec='0'
select @ng=sum(so_gio_cong) from bang_cham_cong where id_qua_trinh_cong_tac=@idqtct and thang=@thang and nam=@nam and ngay_thuong_le_nghi='3' and dang_lam_viec='0'
select @vs=count(tinh_trang_vao) from bang_cham_cong where id_qua_trinh_cong_tac=@idqtct and thang=@thang and nam=@nam and tinh_trang_vao='1' and dang_lam_viec='0'
select @vm=count(tinh_trang_vao) from bang_cham_cong where id_qua_trinh_cong_tac=@idqtct and thang=@thang and nam=@nam and tinh_trang_vao='3' and dang_lam_viec='0'
select @rs=count(tinh_trang_ra) from bang_cham_cong where id_qua_trinh_cong_tac=@idqtct and thang=@thang and nam=@nam and tinh_trang_ra='1' and dang_lam_viec='0'
select @rm=count(tinh_trang_ra) from bang_cham_cong where id_qua_trinh_cong_tac=@idqtct and thang=@thang and nam=@nam and tinh_trang_ra='3' and dang_lam_viec='0'
select @sogiotangca=sum(so_gio_tang_ca) from bang_cham_cong where id_qua_trinh_cong_tac=@idqtct and thang=@thang and nam=@nam and dang_lam_viec='0'
select @sogio=sum(so_gio_cong+so_gio_tang_ca) from bang_cham_cong where id_qua_trinh_cong_tac=@idqtct and thang=@thang and nam=@nam and dang_lam_viec='0'
select @stien=sum(so_tien) from bang_cham_cong where id_qua_trinh_cong_tac=@idqtct and thang=@thang and nam=@nam and dang_lam_viec='0'
select @stientangca=sum(so_tien_tang_ca) from bang_cham_cong where id_qua_trinh_cong_tac=@idqtct and thang=@thang and nam=@nam and dang_lam_viec='0'
SET @th =case when @th is null then 0 else @th end
SET @l =case when @l is null then 0 else @l end
SET @ng =case when @ng is null then 0 else @ng end
SET @vs =case when @vs is null then 0 else @vs end
SET @rs =case when @rs is null then 0 else @rs end
SET @vm =case when @vm is null then 0 else @vm end
SET @rm =case when @rm is null then 0 else @rm end
SET @sogiotangca =case when @sogiotangca is null then 0 else @sogiotangca end
SET @sogio =case when @sogio is null then 0 else @sogio end
SET @stien =case when @stien is null then 0 else @stien end
SET @stientangca =case when @stientangca is null then 0 else @stientangca end
Insert into bang_tong_hop_gio_cong ( id_qua_trinh_cong_tac,thang,nam,TONG_SO_GIO_CHUA_QUY_DOI,SO_GIO_NGAY_THUONG,SO_GIO_NGAY_NGHI,SO_GIO_NGAY_LE,
SO_LAN_RA_SOM,SO_LAN_RA_MUON,SO_LAN_VAO_SOM,SO_LAN_VAO_MUON,SO_GIO_PHU_TROI, so_tien,so_gio_tang_ca,so_tien_tang_ca) values (
@idqtct,@thang,@nam,@sogio,@th,@ng,@l,@rs,@rm,@vs,@vm,@sogiotangca,@stien,@sogiotangca,@stientangca)
Update bang_cham_cong set da_cham_cong='1' where id_qua_trinh_cong_tac=@idqtct and thang=@thang and
nam=@nam and dang_lam_viec='0'
If @loainv = '2'
begin
update bang_tong_hop_gio_cong set so_ngay_cong=@sogio/ 8.5 ,so_ngay_tang_ca=@sogiotangca / 8.5 where id_qua_trinh_cong_tac=@idqtct and thang=@thang and nam=@nam
end
Else
begin i f exists(select 1 from qua_trinh_cong_tac where id_qua_trinh_cong_tac=@idqtct and id_cong_thuc is null)
begin
select @idct=id_cong_thuc from dm_phong_ban where ma_phong_ban=@mpb
select @sumG=so_gio from bang_cong_thuc_cham_cong_theo_gio where id_cong_thuc=@idct
If @sumG >= 8 begin set @sumG = @sumG - 1 end
If @sumG 0
update bang_tong_hop_gio_cong set so_ngay_cong=@sogio / @sumG ,so_ngay_tang_ca=@sogiotangca / @sumG where id_qua_trinh_cong_tac=@idqtct and thang=@thang and nam=@nam
Else
update bang_tong_hop_gio_cong set so_ngay_cong=0,so_ngay_tang_ca=0 where id_qua_trinh_cong_tac=@idqtct and thang=@thang and nam=@nam
end
else
begin select @idct=id_cong_thuc from qua_trinh_cong_tac where id_qua_trinh_cong_tac=@idqtct
select @sumG=so_gio from bang_cong_thuc_cham_cong_theo_gio where id_cong_thuc=@idct
If @sumG >= 8 begin set @sumG = @sumG - 1 end
If @sumG 0
update bang_tong_hop_gio_cong s