Ejemplo n.º 1
0
        /// <summary>
        /// get Transection History Table records
        /// </summary>
        /// Need to add send model with POST Request
        private void UpdateUserTransactionBalance(int Id, UserTransactionInfo userTransactionInfoModel)
        {
            var            fileUrl           = "";
            IConfiguration ConfigurationData = new ConfigurationBuilder().AddJsonFile("appsettings.json", optional: true, reloadOnChange: true).AddEnvironmentVariables().Build();
            var            basicUrl          = ConfigurationData.GetValue <string>("BasicUrl");
            var            url     = basicUrl + Constants.UpdateUserTransactionBalance;
            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);

            request.Method          = "POST";
            request.PreAuthenticate = true;
            request.ContentType     = "text/xml";
            request.Headers.Add("Authorization", "Bearer " + GenerateToken());
            HttpWebResponse response = null;

            try
            {
                response = (HttpWebResponse)request.GetResponse();
                fileUrl  = new StreamReader(response.GetResponseStream()).ReadToEnd();
            }
            catch (Exception ex)
            {
                logger.Info("Error while getting  from UpdateUserTransactionBalance  " + ex);
            }
        }
        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)));
            }
        }