internal CouponType GetCoupon(SpontaneousUserModel userData, List<CouponType> couponsList, UserActivity userActivity)
{
if (userData == null)
{
log.WarnFormat("[GetCoupon] User={0} tried to get coupon, but userData is null.", userData.id);
return null;
}
Location location = (userActivity.ActivityLocation != null || userActivity.ActivityLocation.Latitude == 0 || userActivity.ActivityLocation.Longitude == 0)
? userActivity.ActivityLocation : new Location(32.067141, 34.804314);
CouponType returnValue = null;
if (couponsList != null && couponsList.Count > 0)
{
List<UserMedal> medalListCouponNotNull = userData.UserMedalsList.FindAll(x => x.Coupon != null);
if (medalListCouponNotNull.Count == 0)
{
returnValue = FindNearestCoupon(couponsList, location);
}
else
{
//List<CouponType> tempList = new List<CouponType>(couponsList)
List<CouponType> tempList = couponsList;
foreach (var medal in medalListCouponNotNull)
{
tempList.RemoveAll(c => c.Id == medal.Coupon.Id);
}
if (tempList.Count == 0)
{
returnValue = couponsList.LastOrDefault();
}
else
{
returnValue = FindNearestCoupon(tempList, location);
}
if (returnValue == null)
{
log.WarnFormat("[GetCoupon] user={0}, Tried to get Coupon, but return value is Null.", userData.id, returnValue.ToString());
return null;
}
}
log.InfoFormat("[GetCoupon] user={0}, returnCoupon={1}.", userData.id, returnValue.ToString());
return returnValue;
}
log.WarnFormat("[GetCoupon] user={0}, tried to get coupon, but no coupons in DB", userData.id);
return null;
}