refactor SetTimeProjectCommandHandler to validate total time after applying changes

This commit is contained in:
2026-02-05 10:14:13 +03:30
parent db0047d3d3
commit c2fdc217b9

View File

@@ -375,7 +375,6 @@ public class SetTimeProjectCommandHandler : IBaseCommandHandler<SetTimeProjectCo
// مدیریت هوشمند زمان‌های اضافی // مدیریت هوشمند زمان‌های اضافی
var existingAdditionalTimes = section.AdditionalTimes.ToList(); var existingAdditionalTimes = section.AdditionalTimes.ToList();
var incomingAdditionalTimes = sectionItem.AdditionalTime ?? []; var incomingAdditionalTimes = sectionItem.AdditionalTime ?? [];
var currentTotalSpent = section.GetTotalTimeSpent();
bool hasRealChange = false; bool hasRealChange = false;
@@ -406,14 +405,6 @@ public class SetTimeProjectCommandHandler : IBaseCommandHandler<SetTimeProjectCo
// اگر آیتم با این ID وجود دارد، بررسی کن اگر تغییر کرده باشد // اگر آیتم با این ID وجود دارد، بررسی کن اگر تغییر کرده باشد
if (existingAdditionalTime.HasChanged(additionalTimeSpan, additionalTime.Description)) if (existingAdditionalTime.HasChanged(additionalTimeSpan, additionalTime.Description))
{ {
var newTotalTime = section.InitialEstimatedHours
.Add(existingAdditionalTimes
.Where(x => x.Id != existingAdditionalTime.Id)
.Aggregate(TimeSpan.Zero, (acc, x) => acc.Add(x.Hours))
.Add(additionalTimeSpan));
ValidateTotalTimeNotLessThanSpent(newTotalTime, currentTotalSpent);
// ویرایش بدون حذف و ایجاد دوباره // ویرایش بدون حذف و ایجاد دوباره
existingAdditionalTime.Update(additionalTimeSpan, additionalTime.Description); existingAdditionalTime.Update(additionalTimeSpan, additionalTime.Description);
hasRealChange = true; hasRealChange = true;
@@ -424,15 +415,17 @@ public class SetTimeProjectCommandHandler : IBaseCommandHandler<SetTimeProjectCo
// اگر ID نداشت یا ID جدید بود، اضافه کن // اگر ID نداشت یا ID جدید بود، اضافه کن
if (additionalTime.Id == null || additionalTime.Id == Guid.Empty) if (additionalTime.Id == null || additionalTime.Id == Guid.Empty)
{ {
var newTotalTime = section.FinalEstimatedHours.Add(additionalTimeSpan);
ValidateTotalTimeNotLessThanSpent(newTotalTime, currentTotalSpent);
section.AddAdditionalTime(additionalTimeSpan, additionalTime.Description, addedByUserId); section.AddAdditionalTime(additionalTimeSpan, additionalTime.Description, addedByUserId);
hasRealChange = true; hasRealChange = true;
} }
} }
} }
// اعتبارسنجی بعد از اعمال تمام تغییرات
var currentTotalSpent = section.GetTotalTimeSpent();
var newTotalTime = section.FinalEstimatedHours;
ValidateTotalTimeNotLessThanSpent(newTotalTime, currentTotalSpent);
// تغییر status به Incomplete فقط اگر تغییری واقعی اعمال شده باشد و در وضعیتی غیر از ReadyToStart باشد // تغییر status به Incomplete فقط اگر تغییری واقعی اعمال شده باشد و در وضعیتی غیر از ReadyToStart باشد
if (hasRealChange && section.Status != TaskSectionStatus.ReadyToStart) if (hasRealChange && section.Status != TaskSectionStatus.ReadyToStart)
{ {