refactor SetTimeProjectCommandHandler to validate total time after applying changes
This commit is contained in:
@@ -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)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user