fixx v1
This commit is contained in:
@@ -222,6 +222,7 @@ BEGIN
|
||||
RequestStatus NVARCHAR(20) NOT NULL DEFAULT 'pending',
|
||||
BorrowerName NVARCHAR(100) NOT NULL,
|
||||
BorrowQuantity INT NOT NULL DEFAULT 1,
|
||||
ReturnedQuantity INT NOT NULL DEFAULT 0,
|
||||
Unit NVARCHAR(50),
|
||||
BorrowDate DATE NOT NULL DEFAULT CAST(GETDATE() AS DATE),
|
||||
RequestNote NVARCHAR(500) NULL,
|
||||
@@ -264,6 +265,11 @@ BEGIN
|
||||
ALTER TABLE AssetBorrowRequests ADD RequestStatus NVARCHAR(20) NOT NULL CONSTRAINT DF_AssetBorrowRequests_RequestStatus DEFAULT('approved');
|
||||
END
|
||||
|
||||
IF COL_LENGTH('dbo.AssetBorrowRequests', 'ReturnedQuantity') IS NULL
|
||||
BEGIN
|
||||
ALTER TABLE AssetBorrowRequests ADD ReturnedQuantity INT NOT NULL CONSTRAINT DF_AssetBorrowRequests_ReturnedQuantity DEFAULT(0);
|
||||
END
|
||||
|
||||
IF COL_LENGTH('dbo.AssetBorrowRequests', 'RequestNote') IS NULL
|
||||
BEGIN
|
||||
ALTER TABLE AssetBorrowRequests ADD RequestNote NVARCHAR(500) NULL;
|
||||
@@ -302,6 +308,83 @@ SET RequestType = ISNULL(NULLIF(LTRIM(RTRIM(RequestType)), ''), 'borrow');
|
||||
UPDATE AssetBorrowRequests
|
||||
SET RequestStatus = ISNULL(NULLIF(LTRIM(RTRIM(RequestStatus)), ''), 'approved');
|
||||
|
||||
UPDATE AssetBorrowRequests
|
||||
SET ReturnedQuantity = 0
|
||||
WHERE ReturnedQuantity IS NULL OR ReturnedQuantity < 0;
|
||||
|
||||
IF NOT EXISTS (SELECT * FROM sys.tables WHERE name = 'AssetBorrowRequestLinks')
|
||||
BEGIN
|
||||
CREATE TABLE AssetBorrowRequestLinks (
|
||||
LinkId INT PRIMARY KEY IDENTITY(1,1),
|
||||
BorrowId INT NOT NULL,
|
||||
ReturnId INT NOT NULL,
|
||||
Quantity INT NOT NULL CONSTRAINT DF_AssetBorrowRequestLinks_Quantity DEFAULT(1),
|
||||
CreatedDate DATETIME NOT NULL CONSTRAINT DF_AssetBorrowRequestLinks_CreatedDate DEFAULT(GETDATE()),
|
||||
FOREIGN KEY (BorrowId) REFERENCES AssetBorrowRequests(BorrowId) ON DELETE NO ACTION,
|
||||
FOREIGN KEY (ReturnId) REFERENCES AssetBorrowRequests(BorrowId) ON DELETE NO ACTION
|
||||
);
|
||||
END
|
||||
|
||||
IF OBJECT_ID('dbo.AssetBorrowRequestLinks', 'U') IS NOT NULL
|
||||
BEGIN
|
||||
INSERT INTO AssetBorrowRequestLinks (BorrowId, ReturnId, Quantity)
|
||||
SELECT matchedBorrow.BorrowId,
|
||||
ret.BorrowId,
|
||||
CASE
|
||||
WHEN ISNULL(ret.BorrowQuantity, 0) <= 0 THEN 1
|
||||
WHEN ISNULL(ret.BorrowQuantity, 0) > ISNULL(matchedBorrow.BorrowQuantity, 0) THEN ISNULL(matchedBorrow.BorrowQuantity, 0)
|
||||
ELSE ISNULL(ret.BorrowQuantity, 0)
|
||||
END
|
||||
FROM AssetBorrowRequests ret
|
||||
CROSS APPLY (
|
||||
SELECT TOP 1 b.BorrowId, b.BorrowQuantity
|
||||
FROM AssetBorrowRequests b
|
||||
WHERE LOWER(LTRIM(RTRIM(ISNULL(b.RequestType, '')))) = 'borrow'
|
||||
AND LOWER(LTRIM(RTRIM(ISNULL(b.RequestStatus, '')))) IN ('approved', 'returned')
|
||||
AND b.AssetId = ret.AssetId
|
||||
AND (
|
||||
(ret.CreatedBy IS NOT NULL AND b.CreatedBy = ret.CreatedBy)
|
||||
OR LOWER(LTRIM(RTRIM(ISNULL(b.BorrowerName, '')))) = LOWER(LTRIM(RTRIM(ISNULL(ret.BorrowerName, ''))))
|
||||
)
|
||||
AND b.BorrowDate <= ret.BorrowDate
|
||||
ORDER BY b.BorrowDate DESC, b.CreatedDate DESC, b.BorrowId DESC
|
||||
) matchedBorrow
|
||||
WHERE LOWER(LTRIM(RTRIM(ISNULL(ret.RequestType, '')))) = 'return'
|
||||
AND LOWER(LTRIM(RTRIM(ISNULL(ret.RequestStatus, '')))) IN ('pending', 'approved')
|
||||
AND NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM AssetBorrowRequestLinks existed
|
||||
WHERE existed.ReturnId = ret.BorrowId
|
||||
)
|
||||
AND NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM AssetBorrowRequestLinks duplicateLink
|
||||
WHERE duplicateLink.ReturnId = ret.BorrowId
|
||||
AND duplicateLink.BorrowId = matchedBorrow.BorrowId
|
||||
);
|
||||
|
||||
UPDATE borrowRows
|
||||
SET ReturnedQuantity = CASE
|
||||
WHEN summary.ReturnedQuantity > ISNULL(borrowRows.BorrowQuantity, 0) THEN ISNULL(borrowRows.BorrowQuantity, 0)
|
||||
ELSE summary.ReturnedQuantity
|
||||
END,
|
||||
RequestStatus = CASE
|
||||
WHEN summary.ReturnedQuantity >= ISNULL(borrowRows.BorrowQuantity, 0)
|
||||
THEN 'returned'
|
||||
ELSE borrowRows.RequestStatus
|
||||
END,
|
||||
UpdatedDate = GETDATE()
|
||||
FROM AssetBorrowRequests borrowRows
|
||||
INNER JOIN (
|
||||
SELECT links.BorrowId, SUM(ISNULL(links.Quantity, 0)) AS ReturnedQuantity
|
||||
FROM AssetBorrowRequestLinks links
|
||||
INNER JOIN AssetBorrowRequests returns ON returns.BorrowId = links.ReturnId
|
||||
WHERE LOWER(LTRIM(RTRIM(ISNULL(returns.RequestStatus, '')))) = 'approved'
|
||||
GROUP BY links.BorrowId
|
||||
) summary ON summary.BorrowId = borrowRows.BorrowId
|
||||
WHERE LOWER(LTRIM(RTRIM(ISNULL(borrowRows.RequestType, '')))) = 'borrow';
|
||||
END
|
||||
|
||||
-- ===========================================
|
||||
-- 8. CREATE ASSET EXPORT HISTORY TABLE
|
||||
-- ===========================================
|
||||
@@ -482,6 +565,21 @@ BEGIN
|
||||
CREATE INDEX IX_AssetBorrowRequests_RequestType ON AssetBorrowRequests(RequestType);
|
||||
END
|
||||
|
||||
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_AssetBorrowRequestLinks_BorrowId')
|
||||
BEGIN
|
||||
CREATE INDEX IX_AssetBorrowRequestLinks_BorrowId ON AssetBorrowRequestLinks(BorrowId);
|
||||
END
|
||||
|
||||
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_AssetBorrowRequestLinks_ReturnId')
|
||||
BEGIN
|
||||
CREATE INDEX IX_AssetBorrowRequestLinks_ReturnId ON AssetBorrowRequestLinks(ReturnId);
|
||||
END
|
||||
|
||||
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'UX_AssetBorrowRequestLinks_BorrowReturn')
|
||||
BEGIN
|
||||
CREATE UNIQUE INDEX UX_AssetBorrowRequestLinks_BorrowReturn ON AssetBorrowRequestLinks(BorrowId, ReturnId);
|
||||
END
|
||||
|
||||
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_AssetExportHistory_AssetId')
|
||||
BEGIN
|
||||
CREATE INDEX IX_AssetExportHistory_AssetId ON AssetExportHistory(AssetId);
|
||||
|
||||
Reference in New Issue
Block a user