sozsoft-platform/configs/seeds/sql/object/Prc_P_MaterialRequestAfterSave.sql
2026-10-09 20:02:27 +03:00

75 lines
3.4 KiB
Transact-SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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