79 lines
3.5 KiB
C#
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;
|
|
}
|
|
}
|