You are on page 1of 6

// Kiểm tra id của các bảng nhân viên, kho, vật tư

CREATE PROCEDURE [dbo].[SP_CHECKID]


@Code NVARCHAR(15), @Type NVARCHAR(15)
AS
BEGIN
-- Nhân viên
IF(@Type = 'MANV')
BEGIN
IF EXISTS(SELECT * FROM dbo.NhanVien WHERE dbo.NhanVien.MANV = @Code)
RETURN 1; -- Mã NV tồn tại ở phân mảnh hiện tại
ELSE IF EXISTS(SELECT * FROM LINK1.QLVT_DATHANG.dbo.NhanVien AS NV
WHERE NV.MANV = @Code)
RETURN 2; -- Mã NV tồn tại ở phân mảnh khác
END

-- Kho
IF(@Type = 'MAKHO')
BEGIN
IF EXISTS(SELECT * FROM dbo.Kho WHERE dbo.Kho.MAKHO = @Code)
RETURN 1; -- Mã kho tồn tại ở phân mảnh hiện tại
ELSE IF EXISTS(SELECT * FROM LINK1.QLVT_DATHANG.dbo.Kho AS KHO WHERE
KHO.MAKHO = @Code)
RETURN 2; -- Mã Kho tồn tại ở phân mảnh khác
END
IF(@Type = 'TENKHO')
BEGIN
IF EXISTS(SELECT * FROM dbo.Kho WHERE dbo.Kho.TENKHO = @Code)
RETURN 1; -- Tên kho tồn tại ở phân mảnh hiện tại
ELSE IF EXISTS(SELECT * FROM LINK1.QLVT_DATHANG.dbo.Kho AS KHO WHERE
KHO.TENKHO = @Code)
RETURN 2; -- Tên Kho tồn tại ở phân mảnh khác
END

-- Đặt hàng
IF(@Type = 'MasoDDH')
BEGIN
IF EXISTS(SELECT * FROM dbo.DatHang WHERE dbo.DatHang.MasoDDH = @Code)
RETURN 1; -- Mã DDH tồn tại ở phân mảnh hiện tại
ELSE IF EXISTS(SELECT * FROM LINK1.QLVT_DATHANG.dbo.DatHang AS DH WHERE
DH.MasoDDH = @Code)
RETURN 2; -- Mã DDH tồn tại ở phân mảnh khác
END

-- Phiếu Xuất
IF(@Type = 'MAPX')
BEGIN
IF EXISTS(SELECT * FROM dbo.PhieuXuat WHERE dbo.PhieuXuat.MAPX = @Code)
RETURN 1; -- Mã PX tồn tại ở phân mảnh hiện tại
ELSE IF EXISTS(SELECT * FROM LINK1.QLVT_DATHANG.dbo.PhieuXuat AS PX
WHERE PX.MAPX = @Code)
RETURN 2; -- Mã PX tồn tại ở phân mảnh khác
END

-- Phiếu Nhập
IF(@Type = 'MAPN')
BEGIN
IF EXISTS(SELECT * FROM dbo.PhieuNhap WHERE dbo.PhieuNhap.MAPN = @Code)
RETURN 1; -- Mã PN tồn tại ở phân mảnh hiện tại
ELSE IF EXISTS(SELECT * FROM LINK1.QLVT_DATHANG.dbo.PhieuNhap AS PN
WHERE PN.MAPN = @Code)
RETURN 2; -- Mã PN tồn tại ở phân mảnh khác
END

-- Vật tư, chỉ cần check ở site hiện tại


IF(@Type = 'MAVT')
BEGIN
IF EXISTS(SELECT * FROM dbo.Vattu WHERE MAVT = @Code)
RETURN 1;
END

RETURN 0 -- Không bị trùng


END

// CHUYỂN CHI NHÁNH


CREATE PROC [dbo].[SP_CHUYENCHINHANH_NV]
@MANV INT, @MACN nchar(10)
AS
SET XACT_ABORT ON;
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
BEGIN TRY

BEGIN TRAN
IF EXISTS(SELECT * FROM LINK1.QLVT_DATHANG.dbo.NhanVien WHERE MANV =
@MANV)
BEGIN
UPDATE LINK1.QLVT_DATHANG.dbo.NhanVien
SET TrangThaiXoa = 0
WHERE MANV = @MANV;
UPDATE dbo.NhanVien
SET TrangThaiXoa = 1
WHERE MANV = @MANV;
END
ELSE
BEGIN
INSERT INTO LINK1.QLVT_DATHANG.dbo.NhanVien (MANV, HO, TEN,
DIACHI, NGAYSINH, LUONG, MACN, TrangThaiXoa)
SELECT MANV, HO, TEN, NV.DIACHI, NGAYSINH, LUONG, MACN = @MACN,
TRANGTHAIXOA
FROM dbo.NhanVien as NV
WHERE MANV = @MANV;
UPDATE dbo.NhanVien
SET TrangThaiXoa = 1
WHERE MANV = @MANV;
END
COMMIT TRAN;
END TRY
BEGIN CATCH
IF (@@TRANCOUNT > 0)
BEGIN
ROLLBACK TRAN;
END;
THROW;
END CATCH

// ĐĂNG NHẬP
CREATE PROC [dbo].[SP_DANGNHAP]
@TENLOGIN NVARCHAR (50)
AS
DECLARE @TENUSER NVARCHAR(50)
SELECT @TENUSER=NAME FROM sys.sysusers WHERE sid = SUSER_SID(@TENLOGIN)

SELECT USERNAME = @TENUSER,


HOTEN = (SELECT HO+ ' '+ TEN FROM NHANVIEN WHERE MANV = @TENUSER ),
TENNHOM= NAME
FROM sys.sysusers
WHERE UID = (SELECT GROUPUID
FROM SYS.SYSMEMBERS
WHERE MEMBERUID= (SELECT UID FROM sys.sysusers
WHERE NAME=@TENUSER))

// TẠO TÀI KHOẢN


ALTER PROC [dbo].[SP_TAOACCOUNT]
@LGNAME VARCHAR(50), @PASS VARCHAR(50),
@USERNAME VARCHAR(50), @ROLE VARCHAR(50)
AS
DECLARE @RET INT
EXEC @RET= SP_ADDLOGIN @LGNAME, @PASS, 'QLVT_DATHANG'
IF (@RET =1) -- LOGIN NAME BI TRUNG
BEGIN
RAISERROR ('Login name bị trùng', 16,1)
RETURN
END
EXEC @RET= SP_GRANTDBACCESS @LGNAME, @USERNAME
IF (@RET =1) -- USER NAME BI TRUNG
BEGIN
EXEC SP_DROPLOGIN @LGNAME
RAISERROR ('Nhân viên dã có login name', 16,2)
RETURN
END
EXEC sp_addrolemember @ROLE, @USERNAME
IF @ROLE = 'ADMIN'
BEGIN
EXEC sp_addsrvrolemember @LGNAME, 'SecurityAdmin'
EXEC sp_addsrvrolemember @LGNAME, 'DBCREATOR'
EXEC sp_addsrvrolemember @LGNAME, 'ProcessAdmin'
END

// GET THÔNG TIN NHÂN VIÊN (HỖ TRỢ FORM REPORT CỦA CÂU 5)
CREATE PROC [dbo].[SP_ThongTinNhanVien]
@MANV INT
AS
BEGIN
SELECT MANV, HO + ' ' + TEN AS HOTEN, NGAYSINH, DIACHI, LUONG, MACN
FROM dbo.NhanVien
WHERE MANV = @MANV
END

// XÓA TÀI KHOẢN


CREATE PROC [dbo].[Xoa_Login]
@LGNAME VARCHAR(50),
@USRNAME VARCHAR(50)

AS
EXEC SP_DROPUSER @USRNAME
EXEC SP_DROPLOGIN @LGNAME

// UPDATE SỐ LƯỢNG VẬT TƯ


CREATE PROCEDURE [dbo].[SP_UpdateSLVatTu]
@MAVT nchar(4),
@SOLUONG int,
@TYPE NVARCHAR(15)
AS
BEGIN
IF(@TYPE = 'IMPORT')
BEGIN
IF EXISTS(SELECT MAVT FROM dbo.CTPN WHERE dbo.CTPN.MAVT = @MAVT)
BEGIN
UPDATE dbo.Vattu SET SOLUONGTON = SOLUONGTON + @SOLUONG
WHERE MAVT= @MAVT
RETURN 1
END
ELSE
RETURN 0
END

IF(@TYPE = 'EXPORT')
BEGIN
IF EXISTS(SELECT MAVT FROM dbo.CTPX WHERE dbo.CTPX.MAVT = @MAVT)
BEGIN
UPDATE dbo.Vattu SET SOLUONGTON = SOLUONGTON - @SOLUONG
WHERE MAVT= @MAVT
RETURN 1
END
ELSE
RETURN 0
END
END

// REPORT
// HOẠT ĐỘNG CỦA NHÂN VIÊN
CREATE PROC [dbo].[SP_RP_HoatDongCuaNhanVien]
@MANV INT, @FROM DATE, @TO DATE, @LOAI CHAR
AS
BEGIN
IF (@LOAI = 'N')
BEGIN
SELECT FORMAT(PN.NGAY,'MMMM yyyy') AS THANGNAM, -- Group theo mẫu
PN.NGAY, PN.MAPN AS MAPHIEU, N'Không có' AS HOTENKH,
TENVT, TENKHO, CTPN.SOLUONG, CTPN.DONGIA, THANHTIEN = SOLUONG * DONGIA
FROM (SELECT MAPN, NGAY, TENKHO = (SELECT TENKHO FROM KHO WHERE
KHO.MAKHO = PNP.MAKHO) FROM dbo.PhieuNhap as PNP WHERE MANV = @MANV AND NGAY
BETWEEN @FROM AND @TO) PN,
CTPN,
(SELECT TENVT, MAVT FROM Vattu) VT
WHERE VT.MAVT = CTPN.MAVT AND CTPN.MAPN = PN.MAPN
END
ELSE
BEGIN
SELECT FORMAT(PX.NGAY,'MMMM yyyy') AS THANGNAM, -- Group theo mẫu
PX.NGAY, PX.MAPX AS MAPHIEU, PX.HOTENKH, TENVT,
TENKHO, CTPX.SOLUONG, CTPX.DONGIA, THANHTIEN = SOLUONG * DONGIA
FROM (SELECT MAPX, NGAY, HOTENKH, TENKHO = (SELECT TENKHO FROM
KHO WHERE KHO.MAKHO = PXT.MAKHO) FROM dbo.PhieuXuat as PXT WHERE MANV = @MANV AND
NGAY BETWEEN @FROM AND @TO) PX,
CTPX,
(SELECT TENVT, MAVT FROM Vattu) VT
WHERE VT.MAVT = CTPX.MAVT AND CTPX.MAPX = PX.MAPX
END
END

// DANH SÁCH VẬT TƯ


CREATE PROC [dbo].[SP_RP_DSVATTU]
AS
SELECT * FROM dbo.Vattu ORDER BY TENVT

// TỔNG HỢP NHẬP XUẤT


ALTER PROC [dbo].[SP_REPORTTonghopNhapXuat_NV]
@NGAYBD date, @NGAYKT date
AS
BEGIN
SET NOCOUNT ON;
IF 1=0 BEGIN
SET FMTONLY OFF
END
SELECT PN.NGAY,
NHAP = SUM(CTPN.SOLUONG * CTPN.DONGIA),
TYLENHAP = (SUM(CTPN.SOLUONG * CTPN.DONGIA) / (SELECT
SUM(SOLUONG*DONGIA) FROM CTPN INNER JOIN PhieuNhap ON CTPN.MAPN=PhieuNhap.MAPN
WHERE NGAY BETWEEN @NGAYBD AND @NGAYKT)) INTO #PhieuNhapTemp
FROM PhieuNhap AS PN
INNER JOIN (SELECT * FROM CTPN) AS CTPN
ON PN.MAPN = CTPN.MAPN
WHERE NGAY BETWEEN @NGAYBD AND @NGAYKT
GROUP BY PN.NGAY

SELECT PX.NGAY,
XUAT = SUM(CTPX.SOLUONG * CTPX.DONGIA),
TYLEXUAT = (SUM(CTPX.SOLUONG * CTPX.DONGIA) / (SELECT
SUM(SOLUONG*DONGIA) FROM CTPX INNER JOIN PhieuXuat ON CTPX.MAPX=PhieuXuat.MAPX
WHERE NGAY BETWEEN @NGAYBD AND @NGAYKT)) INTO #PhieuXuatTemp
FROM PhieuXuat AS PX
INNER JOIN (SELECT * FROM CTPX) AS CTPX
ON PX.MAPX = CTPX.MAPX
WHERE NGAY BETWEEN @NGAYBD AND @NGAYKT
GROUP BY PX.NGAY

SELECT
ISNULL(PN.NGAY, PX.NGAY) AS NGAY, --
ISNULL(PN.NHAP, 0) AS NHAP,
ISNULL(PN.TYLENHAP, 0) AS TYLENHAP,
ISNULL(PX.XUAT, 0) AS XUAT,
ISNULL(PX.TYLEXUAT, 0) AS TYLEXUAT
FROM #PhieuNhapTemp AS PN
FULL JOIN #PhieuXuatTemp AS PX
ON PN.NGAY = PX.NGAY
ORDER BY NGAY
END

// CHI TIẾT HÀNG NHẬP XUẤT


CREATE PROC [dbo].[SP_REPORTChitiethangNhapXuat_NV]
@ROLE NVARCHAR(8),@LOAI NVARCHAR(4), @THANGFROM INT, @NAMFROM INT, @THANGTO INT,
@NAMTO INT
AS
BEGIN
IF (@ROLE = 'CONGTY')
BEGIN
IF (@LOAI = 'NHAP')
BEGIN
SELECT NGAY,TENVT, SOLUONG, TRIGIA=SOLUONG * DONGIA
FROM (SELECT MAVT, TENVT FROM VATTU) VATTU,
((SELECT MAPN, NGAY FROM PhieuNhap WHERE (YEAR(NGAY) >=
@NAMFROM AND MONTH(NGAY)>=@THANGFROM) AND (YEAR(NGAY) <= @NAMTO AND
MONTH(NGAY)<=@THANGTO))
UNION
(SELECT MAPN,NGAY FROM LINK1.QLVT_DATHANG.dbo.PhieuNhap
WHERE (YEAR(NGAY) >= @NAMFROM AND MONTH(NGAY)>=@THANGFROM) AND (YEAR(NGAY) <=
@NAMTO AND MONTH(NGAY)<=@THANGTO))) PN,
(SELECT * FROM CTPN UNION SELECT * FROM
LINK1.QLVT_DATHANG.dbo.CTPN) CT
WHERE (VATTU.MAVT = CT.MAVT) AND(PN.MAPN=CT.MAPN)
ORDER BY NGAY
END
ELSE
BEGIN
SELECT NGAY,TENVT, SOLUONG, TRIGIA=SOLUONG * DONGIA
FROM (SELECT MAVT, TENVT FROM VATTU) VATTU,
((SELECT MAPX,NGAY FROM PhieuXuat WHERE (YEAR(NGAY) >=
@NAMFROM AND MONTH(NGAY)>=@THANGFROM) AND (YEAR(NGAY) <= @NAMTO AND
MONTH(NGAY)<=@THANGTO))
UNION
(SELECT MAPX,NGAY FROM LINK1.QLVT_DATHANG.dbo.PhieuXuat
WHERE (YEAR(NGAY) >= @NAMFROM AND MONTH(NGAY)>=@THANGFROM) AND (YEAR(NGAY) <=
@NAMTO AND MONTH(NGAY)<=@THANGTO))) PX,
(SELECT * FROM CTPX UNION SELECT * FROM
LINK1.QLVT_DATHANG.dbo.CTPX) CT
WHERE (VATTU.MAVT = CT.MAVT) AND(PX.MAPX=CT.MAPX)
ORDER BY NGAY
END
END
ELSE
BEGIN
IF (@LOAI = 'NHAP')
BEGIN
SELECT NGAY,TENVT, SOLUONG, TRIGIA=SOLUONG * DONGIA
FROM CTPN CT,
(SELECT MAVT, TENVT FROM VATTU) VATTU,
(SELECT MAPN,NGAY FROM PhieuNhap WHERE (YEAR(NGAY) >=
@NAMFROM AND MONTH(NGAY)>=@THANGFROM) AND (YEAR(NGAY) <= @NAMTO AND
MONTH(NGAY)<=@THANGTO)) PN
WHERE (VATTU.MAVT = CT.MAVT) AND(PN.MAPN=CT.MAPN)
END
ELSE
BEGIN
SELECT NGAY,TENVT, SOLUONG, TRIGIA=SOLUONG * DONGIA
FROM CTPX CT,
(SELECT MAVT, TENVT FROM VATTU) VATTU,
(SELECT MAPX,NGAY FROM PhieuXuat WHERE (YEAR(NGAY) >= @NAMFROM
AND MONTH(NGAY)>=@THANGFROM) AND (YEAR(NGAY) <= @NAMTO AND MONTH(NGAY)<=@THANGTO))
PX
WHERE (VATTU.MAVT = CT.MAVT) AND(PX.MAPX=CT.MAPX)
END
END
END

You might also like