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> GetNonRejectedDpAccessoriesWithRejectedMatchedSale(List activities) { var returnActivities = new List(); 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> ProcessDpAccessoryUpdates(IEnumerable saleActivities) { var updatedActivities = new List(); 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; } }