add: refactor RollCall application to support asynchronous operations and enhance transaction handling
This commit is contained in:
@@ -124,7 +124,7 @@ namespace CompanyManagment.App.Contracts.RollCall
|
||||
/// <param name="workshopId"></param>
|
||||
/// <param name="command"></param>
|
||||
/// <returns></returns>
|
||||
OperationResult RecalculateValues(long workshopId, List<ReCalculateRollCallValues> command);
|
||||
Task<OperationResult> RecalculateValues(long workshopId, List<ReCalculateRollCallValues> command);
|
||||
}
|
||||
public class ReCalculateRollCallValues
|
||||
{
|
||||
|
||||
@@ -25,6 +25,7 @@ using Microsoft.EntityFrameworkCore.Query;
|
||||
using Company.Domain.CheckoutAgg;
|
||||
using Company.Domain.CustomizeCheckoutAgg;
|
||||
using Company.Domain.CustomizeCheckoutTempAgg;
|
||||
using Company.Domain.RollCallAgg;
|
||||
using CompanyManagment.EFCore.Repository;
|
||||
|
||||
|
||||
@@ -38,7 +39,8 @@ public class CustomizeWorkshopSettingsApplication(ICustomizeWorkshopSettingsRepo
|
||||
IRollCallApplication rollCallAppllication,
|
||||
ICheckoutRepository checkoutRepository,
|
||||
ICustomizeCheckoutRepository customizeCheckoutRepository,
|
||||
ICustomizeCheckoutTempRepository customizeCheckoutTempRepository)
|
||||
ICustomizeCheckoutTempRepository customizeCheckoutTempRepository,
|
||||
IRollCallRepository rollCallRepository)
|
||||
: ICustomizeWorkshopSettingsApplication
|
||||
{
|
||||
private readonly ICustomizeWorkshopSettingsRepository _customizeWorkshopSettingsRepository = customizeWorkshopSettingsRepository;
|
||||
@@ -53,6 +55,7 @@ public class CustomizeWorkshopSettingsApplication(ICustomizeWorkshopSettingsRepo
|
||||
private readonly ICheckoutRepository _checkoutRepository = checkoutRepository;
|
||||
private readonly ICustomizeCheckoutRepository _customizeCheckoutRepository = customizeCheckoutRepository;
|
||||
private readonly ICustomizeCheckoutTempRepository _customizeCheckoutTempRepository = customizeCheckoutTempRepository;
|
||||
private readonly IRollCallRepository _rollCallRepository = rollCallRepository;
|
||||
|
||||
#region RollCallShifts
|
||||
|
||||
@@ -822,14 +825,19 @@ public class CustomizeWorkshopSettingsApplication(ICustomizeWorkshopSettingsRepo
|
||||
|
||||
var notSelectedEmployeeSettings = employeeSettings.Where(x => !selectedEmployeesIds.Contains(x.EmployeeId));
|
||||
|
||||
var weeklyOffDays = command.OffDayOfWeeks?.Select(x => new WeeklyOffDay(x)).ToList() ?? [];
|
||||
using var transaction = new TransactionScope();
|
||||
var weeklyOffDays = command.OffDayOfWeeks?
|
||||
.Select(x => new WeeklyOffDay(x)).ToList() ?? [];
|
||||
|
||||
using var rollCallTransaction = _rollCallRepository.BeginTransactionAsync()
|
||||
.GetAwaiter().GetResult();
|
||||
|
||||
entity.EditSimpleAndOverwriteOnEmployee(command.Name, selectedEmployeesIds, groupSettingsShifts, command.WorkshopShiftStatus,
|
||||
command.IrregularShift, breakTime, isChanged, command.HolidayWork, rotatingShift, weeklyOffDays);
|
||||
if (reCalculateCommand.Count > 0)
|
||||
{
|
||||
var result = _rollCallApplication.RecalculateValues(workshopSettings.WorkshopId, reCalculateCommand);
|
||||
var result = _rollCallApplication
|
||||
.RecalculateValues(workshopSettings.WorkshopId, reCalculateCommand)
|
||||
.GetAwaiter().GetResult();
|
||||
|
||||
if (result.IsSuccedded == false)
|
||||
{
|
||||
@@ -844,7 +852,7 @@ public class CustomizeWorkshopSettingsApplication(ICustomizeWorkshopSettingsRepo
|
||||
|
||||
_customizeWorkshopGroupSettingsRepository.SaveChanges();
|
||||
|
||||
transaction.Complete();
|
||||
rollCallTransaction.Commit();
|
||||
return op.Succcedded();
|
||||
}
|
||||
public OperationResult EditSimpleRollCallEmployeeSetting(EditCustomizeEmployeeSettings command,
|
||||
@@ -1043,7 +1051,9 @@ public class CustomizeWorkshopSettingsApplication(ICustomizeWorkshopSettingsRepo
|
||||
_customizeWorkshopGroupSettingsRepository.SaveChanges();
|
||||
if (reCalculateCommand.Count > 0)
|
||||
{
|
||||
var result = _rollCallApplication.RecalculateValues(command.WorkshopId, reCalculateCommand);
|
||||
var result = _rollCallApplication
|
||||
.RecalculateValues(command.WorkshopId, reCalculateCommand)
|
||||
.GetAwaiter().GetResult();
|
||||
|
||||
if (result.IsSuccedded == false)
|
||||
{
|
||||
|
||||
@@ -788,7 +788,7 @@ public class RollCallApplication : IRollCallApplication
|
||||
return _rollCallRepository.CheckRepeat(employeeId, workshopId);
|
||||
}
|
||||
|
||||
public OperationResult RecalculateValues(long workshopId, List<ReCalculateRollCallValues> commands)
|
||||
public async Task<OperationResult> RecalculateValues(long workshopId, List<ReCalculateRollCallValues> commands)
|
||||
{
|
||||
var operationResult = new OperationResult();
|
||||
try
|
||||
@@ -812,24 +812,43 @@ public class RollCallApplication : IRollCallApplication
|
||||
|
||||
var oldestDate = commands.MinBy(x => x.FromDate).FromDate.ToGeorgianDateTime();
|
||||
|
||||
var allRollCalls = _rollCallRepository
|
||||
var allRollCalls = await _rollCallRepository
|
||||
.GetRollCallsUntilNowWithWorkshopIdEmployeeIds(workshopId, commands.Select(x => x.EmployeeId).ToList(),
|
||||
oldestDate).GetAwaiter().GetResult();
|
||||
oldestDate);
|
||||
|
||||
var rollCalls =
|
||||
commands.SelectMany(command =>
|
||||
allRollCalls.Where(x =>
|
||||
x.EmployeeId == command.EmployeeId &&
|
||||
x.ShiftDate >= command.FromDate.ToGeorgianDateTime()
|
||||
)
|
||||
);
|
||||
|
||||
|
||||
foreach (var command in commands)
|
||||
foreach (var rollCall in rollCalls)
|
||||
{
|
||||
var rollCalls = allRollCalls
|
||||
.Where(x => x.EmployeeId == command.EmployeeId && x.ShiftDate >= command.FromDate.ToGeorgianDateTime()).ToList();
|
||||
rollCall.ClearTimeDiff();
|
||||
|
||||
foreach (var rollCall in rollCalls)
|
||||
{
|
||||
rollCall.ClearTimeDiff();
|
||||
_rollCallRepository.SaveChanges();
|
||||
rollCall.SetEndDateTime(rollCall.EndDate!.Value, _rollCallDomainService);
|
||||
}
|
||||
await _rollCallRepository.SaveChangesAsync();
|
||||
|
||||
rollCall.SetEndDateTime(
|
||||
rollCall.EndDate!.Value,
|
||||
_rollCallDomainService
|
||||
);
|
||||
}
|
||||
_rollCallRepository.SaveChanges();
|
||||
|
||||
// foreach (var command in commands)
|
||||
// {
|
||||
// var rollCalls = allRollCalls
|
||||
// .Where(x => x.EmployeeId == command.EmployeeId && x.ShiftDate >= command.FromDate.ToGeorgianDateTime()).ToList();
|
||||
//
|
||||
// foreach (var rollCall in rollCalls)
|
||||
// {
|
||||
// rollCall.ClearTimeDiff();
|
||||
// await _rollCallRepository.SaveChangesAsync();
|
||||
// rollCall.SetEndDateTime(rollCall.EndDate!.Value, _rollCallDomainService);
|
||||
// }
|
||||
// }
|
||||
await _rollCallRepository.SaveChangesAsync();
|
||||
|
||||
return operationResult.Succcedded();
|
||||
}
|
||||
|
||||
@@ -293,9 +293,9 @@ namespace ServiceHost.Areas.Client.Pages.Company.RollCall
|
||||
});
|
||||
}
|
||||
|
||||
public IActionResult OnPostReCalculateValues(List<ReCalculateRollCallValues> command)
|
||||
public async Task<IActionResult> OnPostReCalculateValues(List<ReCalculateRollCallValues> command)
|
||||
{
|
||||
var result = _rollCallApplication.RecalculateValues(_workshopId, command);
|
||||
var result =await _rollCallApplication.RecalculateValues(_workshopId, command);
|
||||
|
||||
return new JsonResult(new
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user