Phase 5: Per-package commission + golden ref cleanup
- Fix golden/طلایی string refs in user-facing messages (ActivateClubMembership) - Rename HasPurchasedGoldenPackage → HasPurchasedPackage (DTO, Handler, Proto, Mapping) - ORM commission: per-user-package calculation via ClubMembership.LastPackageId - Build userPackageMap, per-user maxBalancesPerLeg/maxNetworkLevel - Carryover keyed by (UserId, PackageId) tuple - SP commission: loop over packages, pass @PackageId/@InputMaxBalancesPerLeg/@InputMaxNetworkLevel - sp_CalculateWeeklyBalances: accept 3 new params, filter by PackageId, insert PackageId column
This commit is contained in:
+37
-8
@@ -8,6 +8,9 @@
|
||||
CREATE OR ALTER PROCEDURE [CMS].[sp_CalculateWeeklyBalances]
|
||||
@WeekDefinitionId BIGINT,
|
||||
@ForceRecalculate BIT = 0,
|
||||
@PackageId BIGINT = NULL, -- پکیج خاص (اگر NULL از پکیج پایه استفاده میکند)
|
||||
@InputMaxBalancesPerLeg INT = NULL, -- سقف تعادل هر پا (از Package entity)
|
||||
@InputMaxNetworkLevel INT = NULL, -- حداکثر عمق شبکه (از Package entity)
|
||||
@RowCount INT OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
@@ -18,10 +21,33 @@ BEGIN
|
||||
DECLARE @StartDate DATETIME;
|
||||
DECLARE @EndDate DATETIME;
|
||||
DECLARE @PreviousWeekDefinitionId BIGINT;
|
||||
DECLARE @MaxBalancesPerLeg INT = 300;
|
||||
DECLARE @MaxNetworkLevel INT = 15;
|
||||
DECLARE @MaxBalancesPerLeg INT;
|
||||
DECLARE @MaxNetworkLevel INT;
|
||||
DECLARE @CalculatedAt DATETIME = GETDATE();
|
||||
|
||||
-- تعیین PackageId پیشفرض (پکیج پایه)
|
||||
IF @PackageId IS NULL
|
||||
BEGIN
|
||||
SELECT TOP 1 @PackageId = Id
|
||||
FROM CMS.Packages
|
||||
WHERE IsBasePackage = 1 AND IsDeleted = 0;
|
||||
END
|
||||
|
||||
-- خواندن تنظیمات از Package entity اگر پارامتر داده نشده
|
||||
IF @InputMaxBalancesPerLeg IS NOT NULL
|
||||
SET @MaxBalancesPerLeg = @InputMaxBalancesPerLeg;
|
||||
ELSE
|
||||
SELECT @MaxBalancesPerLeg = ISNULL(MaxBalancesPerLeg, 300) FROM CMS.Packages WHERE Id = @PackageId;
|
||||
|
||||
IF @InputMaxNetworkLevel IS NOT NULL
|
||||
SET @MaxNetworkLevel = @InputMaxNetworkLevel;
|
||||
ELSE
|
||||
SELECT @MaxNetworkLevel = ISNULL(MaxNetworkLevel, 15) FROM CMS.Packages WHERE Id = @PackageId;
|
||||
|
||||
-- fallbackهای امن
|
||||
SET @MaxBalancesPerLeg = ISNULL(@MaxBalancesPerLeg, 300);
|
||||
SET @MaxNetworkLevel = ISNULL(@MaxNetworkLevel, 15);
|
||||
|
||||
BEGIN TRY
|
||||
BEGIN TRANSACTION;
|
||||
|
||||
@@ -65,11 +91,9 @@ BEGIN
|
||||
AND IsActive = 1;
|
||||
|
||||
-- =============================================
|
||||
-- 4. مقادیر ثابت (Hardcoded - از SystemConstants)
|
||||
-- 4. تنظیمات پکیج (از پارامترها خوانده میشود)
|
||||
-- =============================================
|
||||
-- این مقادیر ثابت هستند و تغییر نمیکنند
|
||||
SET @MaxBalancesPerLeg = 300; -- سقف تعادل هر پا
|
||||
SET @MaxNetworkLevel = 15; -- حداکثر عمق شبکه
|
||||
-- @MaxBalancesPerLeg و @MaxNetworkLevel قبلاً مقداردهی شدهاند
|
||||
|
||||
-- =============================================
|
||||
-- 5. ایجاد جدول موقت برای نتایج
|
||||
@@ -96,7 +120,8 @@ BEGIN
|
||||
INSERT INTO #Balances (UserId)
|
||||
SELECT DISTINCT u.Id
|
||||
FROM CMS.Users u
|
||||
INNER JOIN CMS.ClubMemberships cm ON cm.UserId = u.Id AND cm.IsActive = 1;
|
||||
INNER JOIN CMS.ClubMemberships cm ON cm.UserId = u.Id AND cm.IsActive = 1
|
||||
WHERE cm.PackageId = @PackageId;
|
||||
|
||||
-- =============================================
|
||||
-- 7. دریافت باقیمانده هفته قبل
|
||||
@@ -107,7 +132,9 @@ BEGIN
|
||||
SET b.LeftLegCarryover = ISNULL(nb.LeftLegRemainder, 0),
|
||||
b.RightLegCarryover = ISNULL(nb.RightLegRemainder, 0)
|
||||
FROM #Balances b
|
||||
LEFT JOIN CMS.NetworkWeeklyBalances nb ON nb.UserId = b.UserId AND nb.WeekDefinitionId = @PreviousWeekDefinitionId;
|
||||
LEFT JOIN CMS.NetworkWeeklyBalances nb ON nb.UserId = b.UserId
|
||||
AND nb.WeekDefinitionId = @PreviousWeekDefinitionId
|
||||
AND nb.PackageId = @PackageId;
|
||||
END
|
||||
|
||||
-- =============================================
|
||||
@@ -269,6 +296,7 @@ BEGIN
|
||||
INSERT INTO CMS.NetworkWeeklyBalances (
|
||||
UserId,
|
||||
WeekDefinitionId,
|
||||
PackageId,
|
||||
LeftLegNewMembers,
|
||||
RightLegNewMembers,
|
||||
LeftLegCarryover,
|
||||
@@ -295,6 +323,7 @@ BEGIN
|
||||
SELECT
|
||||
UserId,
|
||||
@WeekDefinitionId,
|
||||
@PackageId,
|
||||
LeftLegNewMembers,
|
||||
RightLegNewMembers,
|
||||
LeftLegCarryover,
|
||||
|
||||
Reference in New Issue
Block a user