Files
2026-03-17 09:53:09 -05:00

79 lines
3.5 KiB
C#

using LCU.Library.Internal.IncentiveApiModels.Entities;
using LCU.Library.Internal.IncentiveApiModels.Enums;
namespace LCU.API.Internal.Operations.IncentiveApi.Services.AutoDecision;
public class DebtProtectionAccessoryService
{
private readonly IActivityService _activityService;
private readonly IActivityDetailService _activityDetailService;
public DebtProtectionAccessoryService(IActivityService activityService, IActivityDetailService activityDetailService)
{
_activityService = activityService;
_activityDetailService = activityDetailService;
}
public async Task<List<Activity>> GetNonRejectedDpAccessoriesWithRejectedMatchedSale(List<Activity> activities)
{
var returnActivities = new List<Activity>();
foreach (var activity in activities)
{
if (activity.MatchingDpAccessoryActivityId != 0)
{
var dpActivity = await _activityService.GetActivity(activity.MatchingDpAccessoryActivityId);
if (dpActivity.State != ActivityState.Rejected)
{
returnActivities.Add(dpActivity);
}
}
}
return returnActivities;
}
public async Task<List<Activity>> ProcessDpAccessoryUpdates(IEnumerable<Activity> saleActivities)
{
var updatedActivities = new List<Activity>();
var filteredSaleActivities = saleActivities.Where(x => x.HasDpAccessory());
foreach (var saleActivity in filteredSaleActivities)
{
if (saleActivity.MatchingDpAccessoryActivityId == 0 && saleActivity.Detail.DebtProtectionAddDate != null)
{
var newDpAccessoryActivity = Activity.CopyActivityForDpAccessory(saleActivity);
saleActivity.MatchingDpAccessoryActivityId = await _activityService.SaveActivityAsync(newDpAccessoryActivity);
var change = new ActivityStateChange
{
ActivityId = saleActivity.Id,
ActivityMatchId = newDpAccessoryActivity.Id,
Note = $"{newDpAccessoryActivity.Product} Added On Activity Id: {newDpAccessoryActivity.Id}",
};
await _activityService.ApplyStateChange(change);
updatedActivities.Add(newDpAccessoryActivity);
}
else
{
if (saleActivity.MatchingDpAccessoryActivityId != 0)
{
var existingDpAccessoryActivity = await _activityService.GetActivity(saleActivity.MatchingDpAccessoryActivityId);
if (existingDpAccessoryActivity.Id != 0 && DpAccessoryRequiresUpdate(saleActivity, existingDpAccessoryActivity))
{
updatedActivities.Add(await _activityDetailService.TryUpdateDpAccessory(saleActivity, existingDpAccessoryActivity));
Log.Information($"After TryUpdateDpAccessory {saleActivity.Id} existingDpAccessoryActivity {existingDpAccessoryActivity.Id})");
}
}
}
}
return updatedActivities;
}
private static bool DpAccessoryRequiresUpdate(Activity saleActivity, Activity dpAccessoryActivity)
{
return saleActivity.Detail.DebtProtectionAddDate?.Date != dpAccessoryActivity.Detail.DebtProtectionAddDate?.Date
|| saleActivity.Detail.DebtProtectionRemoveDate?.Date != dpAccessoryActivity.Detail.DebtProtectionRemoveDate?.Date;
}
}