private async Task SendPushBulkWithAddPushAsync(List <Domain.Dto.UserDeviceDto> userDeviceIds, GeneralSetting serverApiKey, PushNotifications push, Domain.Dto.RewardsOnDate item) { await push.SendPushBulk(userDeviceIds.Select(m => m.UserDeviceId).ToList(), notificationTitle, notificationMessage, "", item.RewardId.ToString(), "awards", "icon", "awards", 1, (serverApiKey != null ? serverApiKey.Value : ""), true, "ProgressRewards", item.MerchantId); await _userPushedNotificationService.AddAsync(new UserPushedNotifications() { notificationMessage = notificationMessage, notificationTitle = notificationTitle, notificationType = (int)NotificationSettingsEnum.Awards, referenceId = item.RewardId, createdBy = item.CreatedBy, modifiedBy = item.CreatedBy, ProgramId = item.ProgramId, IsRedirect = true, NotificationSubType = "ProgressRewards", CustomReferenceId = item.MerchantId }); }
public async Task <IActionResult> AddUserTransaction(FiservMainTransactionModel model) { try { if (!ModelState.IsValid) { return(Ok(new ApiBadRequestResponse(ModelState, MessagesConstants.BadRequest))); //400 } var userIdClaim = Convert.ToInt32(User.Claims.FirstOrDefault(x => x.Type.ToLower(CultureInfo.InvariantCulture).Trim() == "userId".ToLower(CultureInfo.InvariantCulture).Trim()).Value); if (model.ProgramAccountIdSelected > 0) { var planProgram = await _programAccount.GetUserProgramPlanNOrgByProgramAccountId(model.ProgramAccountIdSelected, model.CreditUserId); model.PlanId = planProgram?.planId; model.ProgramId = planProgram?.programId; model.OrganizationId = planProgram?.OrganizationId; model.AccountTypeId = planProgram?.AccountTypeId; model.OrganizationId = planProgram.OrganizationId; } var objUserTransaction = new UserTransactionInfo() { accountTypeId = 3, //accountTypeId = model.AccountTypeId, createdBy = userIdClaim, createdDate = DateTime.UtcNow, CreditTransactionUserType = TransactionUserEnityType.User, creditUserId = model.CreditUserId, debitUserId = userIdClaim, DebitTransactionUserType = TransactionUserEnityType.Benefactor, isActive = true, isDeleted = false, modifiedBy = userIdClaim, modifiedDate = DateTime.UtcNow, organisationId = model.OrganizationId, transactionAmount = model.approvedAmount.total, transactionDate = model.TransactionDateTime, TransactionId = model.ipgTransactionId, transactionStatus = 1, TransactionPaymentGateway = model.TransactionPaymentGateway, // programAccountId = model.ProgramAccountIdSelected, programAccountId = model.ProgramId.Value, programId = model.ProgramId.Value, planId = model.PlanId, }; var transactionUserAdd = await _userTransactionService.AddAsync(objUserTransaction); if (model.AccountTypeId == 3) { var userCardAccountBalance = await _i2cAccountDetail.FindAsync(new { UserId = model.CreditUserId }); if (userCardAccountBalance != null) {// That will work only for discretionary for i2c later userCardAccountBalance.Balance = userCardAccountBalance.Balance + objUserTransaction.transactionAmount; await _i2cAccountDetail.UpdateAsync(userCardAccountBalance, new { Id = userCardAccountBalance.Id }); } } var creditUserDetail = await _userRepository.FindAsync(new { Id = model.CreditUserId }); var debitUserDetail = await _userRepository.FindAsync(new { Id = userIdClaim }); /* Notification */ var balanceContent = string.Empty; if (model.AccountTypeId == 1) { balanceContent = string.Concat(objUserTransaction.transactionAmount, " meal passes"); } else if (model.AccountTypeId == 2) { balanceContent = string.Concat(objUserTransaction.transactionAmount, " flex points"); } else if (model.AccountTypeId == 3) { balanceContent = string.Concat("$", objUserTransaction.transactionAmount); } string notificationMessage = MessagesConstants.BalanceAddedNotificationMessage.Replace("{Benefactor}", string.Concat(debitUserDetail?.FirstName, " ", debitUserDetail?.LastName)).Replace("{Balance}", balanceContent), notificationTitle = MessagesConstants.BalanceAddedNotifyTitle; var programNotificationSetCheck = await _program.FindAsync(new { id = creditUserDetail?.ProgramId }); if (programNotificationSetCheck != null && programNotificationSetCheck.IsAllNotificationShow.Value) { var serverApiKey = (await _setting.GetGeneratSettingValueByKeyGroup(Constants.FireBaseConstants.FireBaseServerKey)).FirstOrDefault(); PushNotifications push = new PushNotifications(); var usrNotify = await _userNotificationSettingsService.GetUserNotificationSettingByNotificaction(new List <int> { creditUserDetail.Id }, (int)NotificationSettingsEnum.Transaction); if (usrNotify.Count > 0) { await push.SendPushBulk(new List <string> { creditUserDetail?.UserDeviceId }, notificationTitle, notificationMessage, "", userIdClaim.ToString(), "transaction", "icon", "transaction", 1, (serverApiKey != null ? serverApiKey.Value : ""), false, "AddBalance", 0); } } await _userPushedNotificationService.AddAsync(new UserPushedNotifications() { notificationMessage = notificationMessage, notificationTitle = notificationTitle, notificationType = (int)NotificationSettingsEnum.Transaction, referenceId = 1, createdBy = userIdClaim, modifiedBy = userIdClaim, ProgramId = creditUserDetail?.ProgramId, userId = creditUserDetail.Id, IsRedirect = true, NotificationSubType = "AddBalance", CustomReferenceId = 0 }); return(Ok(new ApiResponse(Microsoft.AspNetCore.Http.StatusCodes.Status200OK, true, MessagesConstants.DataSuccessfullyReturned, transactionUserAdd))); } catch (Exception ex) { HttpContext.RiseError(new Exception(string.Concat("API := (UserTransactions := AddUserTransaction)", ex.Message, " Stack Trace : ", ex.StackTrace, " Inner Exception : ", ex.InnerException))); return(Ok(new ApiResponse(StatusCodes.Status200OK, false, MessagesConstants.SomeIssueInProcessing))); } }