76 lines
3.4 KiB
MySQL
76 lines
3.4 KiB
MySQL
|
|
CREATE OR ALTER PROCEDURE [dbo].[Prc_P_MaterialRequestAfterSave]
|
|||
|
|
@Id uniqueidentifier,
|
|||
|
|
@UserId uniqueidentifier = NULL
|
|||
|
|
AS
|
|||
|
|
BEGIN
|
|||
|
|
SET NOCOUNT ON;
|
|||
|
|
IF @Id IS NULL RETURN;
|
|||
|
|
|
|||
|
|
-- Satır planlanan miktarı boşsa talep miktarıyla doldur
|
|||
|
|
UPDATE l SET PlannedQuantity = l.Quantity
|
|||
|
|
FROM Prc_T_MaterialRequestItem l
|
|||
|
|
WHERE l.MaterialRequestId = @Id AND l.IsDeleted = 0 AND l.PlannedQuantity IS NULL;
|
|||
|
|
|
|||
|
|
-- Onaycılar (Adm_T_Approver): departman onayı = Purchase + talebin departmanı, satınalma onayı = PurchaseDesk
|
|||
|
|
UPDATE r SET
|
|||
|
|
DeptApproverUserNames = (
|
|||
|
|
SELECT STRING_AGG(u.UserName, '|')
|
|||
|
|
FROM Adm_T_Approver a
|
|||
|
|
INNER JOIN AbpUsers u ON u.Id = a.ApproverUserId AND u.IsDeleted = 0
|
|||
|
|
WHERE a.IsDeleted = 0 AND a.IsActive = 1 AND a.ApprovalArea = 'Purchase'
|
|||
|
|
AND a.DepartmentId = r.DepartmentId
|
|||
|
|
AND ((a.TenantId IS NULL AND r.TenantId IS NULL) OR a.TenantId = r.TenantId)),
|
|||
|
|
PurchaseApproverUserNames = (
|
|||
|
|
SELECT STRING_AGG(u.UserName, '|')
|
|||
|
|
FROM Adm_T_Approver a
|
|||
|
|
INNER JOIN AbpUsers u ON u.Id = a.ApproverUserId AND u.IsDeleted = 0
|
|||
|
|
WHERE a.IsDeleted = 0 AND a.IsActive = 1 AND a.ApprovalArea = 'PurchaseDesk'
|
|||
|
|
AND ((a.TenantId IS NULL AND r.TenantId IS NULL) OR a.TenantId = r.TenantId))
|
|||
|
|
FROM Prc_T_MaterialRequest r
|
|||
|
|
WHERE r.Id = @Id;
|
|||
|
|
|
|||
|
|
-- Satınalma kararı: departman adımı daha önce kaydedilmişse
|
|||
|
|
UPDATE r SET
|
|||
|
|
PurchaseApprovedBy = COALESCE(@UserId, r.LastModifierId),
|
|||
|
|
PurchaseApprovalDate = COALESCE(r.ApprovalDate, GETDATE()),
|
|||
|
|
PurchaseApprovalNote = r.ApprovalNote
|
|||
|
|
FROM Prc_T_MaterialRequest r
|
|||
|
|
WHERE r.Id = @Id AND r.PurchaseApprovedBy IS NULL AND r.DeptApprovedBy IS NOT NULL
|
|||
|
|
AND r.ApprovalStatus IN (N'Onaylandı', N'Reddedildi');
|
|||
|
|
|
|||
|
|
-- Departman kararı (onaylanıp satınalmaya geçti ya da departmanda reddedildi)
|
|||
|
|
UPDATE r SET
|
|||
|
|
DeptApprovedBy = COALESCE(@UserId, r.LastModifierId),
|
|||
|
|
DeptApprovalDate = COALESCE(r.ApprovalDate, GETDATE()),
|
|||
|
|
DeptApprovalNote = r.ApprovalNote
|
|||
|
|
FROM Prc_T_MaterialRequest r
|
|||
|
|
WHERE r.Id = @Id AND r.DeptApprovedBy IS NULL
|
|||
|
|
AND r.ApprovalStatus IN (N'Satınalma Onayı', N'Onaylandı', N'Reddedildi');
|
|||
|
|
|
|||
|
|
-- Durum: onay akışından ve satır durumlarından türetilir
|
|||
|
|
UPDATE r SET Status =
|
|||
|
|
CASE
|
|||
|
|
WHEN r.ApprovalStatus = N'Departman Onayı' THEN 'DeptApproval'
|
|||
|
|
WHEN r.ApprovalStatus = N'Satınalma Onayı' THEN 'PurchaseApproval'
|
|||
|
|
WHEN r.ApprovalStatus = N'Reddedildi' THEN 'Rejected'
|
|||
|
|
WHEN r.ApprovalStatus = N'Onaylandı' THEN
|
|||
|
|
CASE
|
|||
|
|
WHEN s.Total > 0 AND s.Closed = s.Total THEN 'Done'
|
|||
|
|
WHEN s.Closed > 0 THEN 'PartiallyDone'
|
|||
|
|
WHEN s.Planned > 0 THEN 'InProgress'
|
|||
|
|
ELSE 'Approved'
|
|||
|
|
END
|
|||
|
|
ELSE 'Draft'
|
|||
|
|
END
|
|||
|
|
FROM Prc_T_MaterialRequest r
|
|||
|
|
CROSS APPLY (
|
|||
|
|
SELECT COUNT(*) AS Total,
|
|||
|
|
ISNULL(SUM(CASE WHEN l.LineStatus IN ('Done', 'Cancelled') THEN 1 ELSE 0 END), 0) AS Closed,
|
|||
|
|
ISNULL(SUM(CASE WHEN l.LineStatus IN ('Planned', 'Done') THEN 1 ELSE 0 END), 0) AS Planned
|
|||
|
|
FROM Prc_T_MaterialRequestItem l
|
|||
|
|
WHERE l.MaterialRequestId = r.Id AND l.IsDeleted = 0
|
|||
|
|
) s
|
|||
|
|
WHERE r.Id = @Id;
|
|||
|
|
END
|
|||
|
|
GO
|