/// <summary>
        /// Handles a request
        /// </summary>
        /// <param name="request">The request</param>
        /// <param name="cancellationToken">Cancellation token</param>
        /// <returns>
        /// Response from the request
        /// </returns>
        public async Task <APIResponse> Handle(GetAllTransactionsQuery request, CancellationToken cancellationToken)
        {
            try
            {
                if (request.TransactionsParameter.IsForVendor)
                {
                    Core.DTO.Requests.Wallet.WalletsParameter WP = new Core.DTO.Requests.Wallet.WalletsParameter();
                    WP.VendorId = request.TransactionsParameter.Value;
                    var walletResponse = await repository.Wallets.GetAllWallets(WP);

                    if (walletResponse != null && walletResponse.Count > 0)
                    {
                        request.TransactionsParameter.Value = walletResponse[0].Id;
                    }
                }

                var transactions = await repository.Transactions.GetAllTransactions(request.TransactionsParameter);

                return(new APIResponse(transactions, HttpStatusCode.OK));
            }
            catch (Exception ex)
            {
                logger.Error(ex, "Exception in method 'GetAllTransactionsHandler()'");
                var exMessage = ex.InnerException != null ? ex.InnerException.Message : ex.Message;
                return(new APIResponse(exMessage, HttpStatusCode.InternalServerError));
            }
        }
        /// <summary>
        /// Handles a request
        /// </summary>
        /// <param name="request">The request</param>
        /// <param name="cancellationToken">Cancellation token</param>
        /// <returns>
        /// Response from the request
        /// </returns>
        public async Task <APIResponse> Handle(UpdateRefundCommand request, CancellationToken cancellationToken)
        {
            try
            {
                var refund = await repository.Refund.GetRefundById(request.RefundId);

                if (refund == null)
                {
                    return(new APIResponse(HttpStatusCode.NotFound));
                }

                if (request.IsApproved == true || request.IsRejected == true)
                {
                    string status = string.Empty;

                    if (request.IsApproved)
                    {
                        status = "APPROVE";
                    }
                    else if (request.IsRejected)
                    {
                        status = "REJECT";
                    }

                    var BHstatus = await repository.MultiDetails.GetMultiDetailsByCode("BH STATUS");

                    if (BHstatus != null && BHstatus.Count > 0)
                    {
                        foreach (var type in BHstatus)
                        {
                            if (type.Value.Trim().ToUpper() == status)
                            {
                                request.Request.Bhstatus = type.Id;
                                break;
                            }
                        }
                    }
                }

                var refundRequest = mapper.Map(request.Request, refund);

                decimal Balance = 0;

                Core.DTO.Requests.Wallet.WalletsParameter WP = new Core.DTO.Requests.Wallet.WalletsParameter();
                WP.VendorId = refund.RaisedBy;
                var walletResponse = await repository.Wallets.GetAllWallets(WP);

                if (walletResponse != null && walletResponse.Count > 0)
                {
                    Balance = walletResponse[0].Balance;
                }

                if (request.IsApproved)
                {
                    Paymentbook paymentbook = new Paymentbook();
                    paymentbook.EntryDate = DateTime.UtcNow;
                    paymentbook.VendorId  = refund.RaisedBy;

                    var PaymentType = await repository.MultiDetails.GetMultiDetailsByCode("PAYMENT TYPE");

                    if (PaymentType != null && PaymentType.Count > 0)
                    {
                        foreach (var item in PaymentType)
                        {
                            if (item.Value.Trim().ToUpper() == "DEBIT")
                            {
                                paymentbook.PaymentType = item.Id;
                                break;
                            }
                        }
                    }

                    var PaymentStatus = await repository.MultiDetails.GetMultiDetailsByCode("PAYMENT STATUS");

                    if (PaymentStatus != null && PaymentStatus.Count > 0)
                    {
                        foreach (var item in PaymentStatus)
                        {
                            if (item.Value.Trim().ToUpper() == "PAID")
                            {
                                paymentbook.PaymentStatus = item.Id;
                                break;
                            }
                        }
                    }

                    var PaymentMode = await repository.MultiDetails.GetMultiDetailsByCode("PAYMENT MODE");

                    if (PaymentMode != null && PaymentMode.Count > 0)
                    {
                        foreach (var item in PaymentMode)
                        {
                            if (item.Value.Trim().ToUpper() == "CASH")
                            {
                                paymentbook.PaymentMode = item.Id;
                                break;
                            }
                        }
                    }

                    paymentbook.PaymentAmount = (decimal)refund.ApprovedAmount;
                    paymentbook.PaymentDate   = DateTime.UtcNow;
                    paymentbook.WalletBalance = Balance;
                    paymentbook.CreatedBy     = (int)refundRequest.UpdatedBy;
                    paymentbook.CreatedAt     = DateTime.UtcNow;

                    repository.PaymentBook.CreatePaymentBook(paymentbook);
                }

                refundRequest.WalletBalance = Balance;

                repository.Refund.UpdateRefund(refundRequest);

                await repository.SaveAsync();

                return(new APIResponse(HttpStatusCode.NoContent));
            }
            catch (Exception ex)
            {
                logger.Error(ex, "Exception in method 'UpdateRefundHandler()'");
                var exMessage = ex.InnerException != null ? ex.InnerException.Message : ex.Message;
                return(new APIResponse(exMessage, HttpStatusCode.InternalServerError));
            }
        }
Example #3
0
        /// <summary>
        /// Handles a request
        /// </summary>
        /// <param name="request">The request</param>
        /// <param name="cancellationToken">Cancellation token</param>
        /// <returns>
        /// Response from the request
        /// </returns>
        public async Task <APIResponse> Handle(CreateWalletAdjustmentCommand request, CancellationToken cancellationToken)
        {
            try
            {
                var walletAdjustmentRequest = mapper.Map <Walletadjustment>(request.Request);

                Core.DTO.Requests.Wallet.WalletsParameter WP = new Core.DTO.Requests.Wallet.WalletsParameter();
                WP.VendorId = walletAdjustmentRequest.VendorId;
                var walletResponse = await repository.Wallets.GetAllWallets(WP);

                if (walletResponse != null && walletResponse.Count > 0)
                {
                    decimal Balance = 0;

                    var AdjustmentType = await repository.MultiDetails.GetMultiDetailByMultiDetailId(walletAdjustmentRequest.AdjustmentType);

                    Core.Entity.Transactions transaction = new Core.Entity.Transactions();
                    transaction.WalletId        = walletResponse[0].Id;
                    transaction.TransactionDate = DateTime.UtcNow;
                    transaction.Amount          = walletAdjustmentRequest.AdjustmentAmount;

                    var StatusData = await repository.MultiDetails.GetMultiDetailsByCode("PAYMENT TYPE");

                    if (AdjustmentType.Value.Trim().ToUpper() == "ADD WALLET")
                    {
                        Balance = walletResponse[0].Balance + walletAdjustmentRequest.AdjustmentAmount;
                        transaction.Particulars = "Wallet credited by adjustment";

                        if (StatusData != null && StatusData.Count > 0)
                        {
                            foreach (var item in StatusData)
                            {
                                if (item.Value.ToUpper() == "CREDIT")
                                {
                                    transaction.TransactionType = item.Id;
                                    break;
                                }
                            }
                        }
                    }
                    else
                    {
                        Balance = walletResponse[0].Balance - walletAdjustmentRequest.AdjustmentAmount;
                        transaction.Particulars = "Wallet debited by adjustment";

                        if (StatusData != null && StatusData.Count > 0)
                        {
                            foreach (var item in StatusData)
                            {
                                if (item.Value.ToUpper() == "DEBIT")
                                {
                                    transaction.TransactionType = item.Id;
                                    break;
                                }
                            }
                        }
                    }

                    transaction.WalletBalance = Balance;
                    transaction.CreatedBy     = walletAdjustmentRequest.CreatedBy;
                    transaction.CreatedAt     = DateTime.UtcNow;
                    repository.Transactions.CreateTransactions(transaction);

                    walletResponse[0].Balance = Balance;
                    repository.Wallets.UpdateWallet(walletResponse[0]);
                }

                repository.WalletAdjustment.CreateWalletAdjustment(walletAdjustmentRequest);

                await repository.SaveAsync();

                return(new APIResponse(walletAdjustmentRequest, HttpStatusCode.Created));
            }
            catch (Exception ex)
            {
                logger.Error(ex, "Exception in method 'CreateWalletAdjustmentHandler()'");
                var exMessage = ex.InnerException != null ? ex.InnerException.Message : ex.Message;
                return(new APIResponse(exMessage, HttpStatusCode.InternalServerError));
            }
        }
Example #4
0
        /// <summary>
        /// Handles a request
        /// </summary>
        /// <param name="request">The request</param>
        /// <param name="cancellationToken">Cancellation token</param>
        /// <returns>
        /// Response from the request
        /// </returns>
        public async Task <APIResponse> Handle(UpdatePaymentBookCommand request, CancellationToken cancellationToken)
        {
            try
            {
                var paymentBook = await repository.PaymentBook.GetPaymentBookById(request.PaymentBookId);

                if (paymentBook == null)
                {
                    return(new APIResponse(HttpStatusCode.NotFound));
                }

                request.Request.PaymentRefNumber = paymentBook.PaymentRefNumber;

                var PaymentStatus = await repository.MultiDetails.GetMultiDetailByMultiDetailId(paymentBook.PaymentStatus);

                var PaymentBookRequest = mapper.Map(request.Request, paymentBook);

                if (PaymentStatus.Value.Trim().ToUpper() != "PAID")
                {
                    var CurrentPaymentStatus = await repository.MultiDetails.GetMultiDetailByMultiDetailId(PaymentBookRequest.PaymentStatus);

                    var PaymentType = await repository.MultiDetails.GetMultiDetailByMultiDetailId(PaymentBookRequest.PaymentType);

                    if (CurrentPaymentStatus.Value.Trim().ToUpper() == "PAID" && PaymentType.Value.Trim().ToUpper() == "CREDIT")
                    {
                        Core.DTO.Requests.Wallet.WalletsParameter WP = new Core.DTO.Requests.Wallet.WalletsParameter();
                        WP.VendorId = PaymentBookRequest.VendorId;
                        var walletResponse = await repository.Wallets.GetAllWallets(WP);

                        if (walletResponse != null && walletResponse.Count > 0)
                        {
                            walletResponse[0].Balance += PaymentBookRequest.PaymentAmount;

                            repository.Wallets.UpdateWallet(walletResponse[0]);

                            var PackageType = await repository.MultiDetails.GetMultiDetailByMultiDetailId((int)PaymentBookRequest.PackageType);

                            Core.Entity.Transactions transaction = new Core.Entity.Transactions();
                            transaction.WalletId    = walletResponse[0].Id;
                            transaction.ReferenceNo = PaymentBookRequest.PaymentRefNumber;

                            if (PackageType.Value.Trim().ToUpper() == "SUBSCRIPTION")
                            {
                                transaction.Particulars = request.Request.PackageName + "-taken (" + PackageType.Value + ")";
                            }
                            else if (PackageType.Value.Trim().ToUpper() == "TOP-UP")
                            {
                                transaction.Particulars = request.Request.PackageName + "-done (" + PackageType.Value + ")";
                            }
                            else
                            {
                                transaction.Particulars = PackageType.Value;
                            }

                            transaction.TransactionDate = DateTime.UtcNow;

                            var TransactionType = await repository.MultiDetails.GetMultiDetailsByCode("PAYMENT TYPE");

                            if (TransactionType != null && TransactionType.Count > 0)
                            {
                                foreach (var type in TransactionType)
                                {
                                    if (type.Value.ToUpper() == "CREDIT")
                                    {
                                        transaction.TransactionType = type.Id;
                                        break;
                                    }
                                }
                            }

                            transaction.Amount        = PaymentBookRequest.PaymentAmount;
                            transaction.WalletBalance = walletResponse[0].Balance;
                            transaction.CreatedBy     = PaymentBookRequest.CreatedBy;
                            transaction.CreatedAt     = DateTime.UtcNow;

                            repository.Transactions.CreateTransactions(transaction);
                        }
                    }
                }

                repository.PaymentBook.UpdatePaymentBook(PaymentBookRequest);

                await repository.SaveAsync();

                return(new APIResponse(HttpStatusCode.NoContent));
            }
            catch (Exception ex)
            {
                logger.Error(ex, "Exception in method 'UpdatePaymentBookHandler()'");
                var exMessage = ex.InnerException != null ? ex.InnerException.Message : ex.Message;
                return(new APIResponse(exMessage, HttpStatusCode.InternalServerError));
            }
        }
        /// <summary>
        /// Handles a request
        /// </summary>
        /// <param name="request">The request</param>
        /// <param name="cancellationToken">Cancellation token</param>
        /// <returns>
        /// Response from the request
        /// </returns>
        public async Task <APIResponse> Handle(CreatePaymentBookCommand request, CancellationToken cancellationToken)
        {
            try
            {
                //Random string generator
                var chars       = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
                var stringChars = new char[8];
                var random      = new Random();
                for (int i = 0; i < stringChars.Length; i++)
                {
                    stringChars[i] = chars[random.Next(chars.Length)];
                }
                var finalString = new String(stringChars);
                //Random string generator

                decimal   Balance    = 0;
                ArrayList WalletData = new ArrayList();

                foreach (var item in request.Request.Payment_Book)
                {
                    var paymentBookRequest = mapper.Map <Paymentbook>(item);

                    var PaymentStatus = await repository.MultiDetails.GetMultiDetailByMultiDetailId(paymentBookRequest.PaymentStatus);

                    var PaymentType = await repository.MultiDetails.GetMultiDetailByMultiDetailId(paymentBookRequest.PaymentType);

                    Core.DTO.Requests.Wallet.WalletsParameter WP = new Core.DTO.Requests.Wallet.WalletsParameter();
                    WP.VendorId = paymentBookRequest.VendorId;
                    var walletResponse = await repository.Wallets.GetAllWallets(WP);

                    if (PaymentStatus.Value.Trim().ToUpper() == "PAID" && PaymentType.Value.Trim().ToUpper() == "CREDIT")
                    {
                        if (walletResponse != null && walletResponse.Count > 0)
                        {
                            if (paymentBookRequest.PaymentRefNumber.Trim() == string.Empty)
                            {
                                paymentBookRequest.PaymentRefNumber = "REF-" + finalString;
                            }

                            if (!WalletData.Contains(walletResponse[0].Id))
                            {
                                WalletData.Add(walletResponse[0].Id);
                                Balance = walletResponse[0].Balance + paymentBookRequest.PaymentAmount;
                            }
                            else
                            {
                                Balance += paymentBookRequest.PaymentAmount;
                            }

                            paymentBookRequest.WalletBalance = Balance;

                            //repository.Wallets.UpdateWallet(walletResponse[0]);

                            var PackageType = await repository.MultiDetails.GetMultiDetailByMultiDetailId((int)paymentBookRequest.PackageType);

                            Core.Entity.Transactions transaction = new Core.Entity.Transactions();
                            transaction.WalletId    = walletResponse[0].Id;
                            transaction.ReferenceNo = paymentBookRequest.PaymentRefNumber;

                            if (PackageType.Value.Trim().ToUpper() == "SUBSCRIPTION")
                            {
                                transaction.Particulars = item.PackageName + "-taken (" + PackageType.Value + ")";
                            }
                            else if (PackageType.Value.Trim().ToUpper() == "TOP-UP")
                            {
                                transaction.Particulars = item.PackageName + "-done (" + PackageType.Value + ")";
                            }
                            else
                            {
                                transaction.Particulars = PackageType.Value;
                            }

                            transaction.TransactionDate = DateTime.UtcNow;

                            var TransactionType = await repository.MultiDetails.GetMultiDetailsByCode("PAYMENT TYPE");

                            if (TransactionType != null && TransactionType.Count > 0)
                            {
                                foreach (var type in TransactionType)
                                {
                                    if (type.Value.ToUpper() == "CREDIT")
                                    {
                                        transaction.TransactionType = type.Id;
                                        break;
                                    }
                                }
                            }

                            transaction.Amount        = paymentBookRequest.PaymentAmount;
                            transaction.WalletBalance = Balance;
                            transaction.CreatedBy     = paymentBookRequest.CreatedBy;
                            transaction.CreatedAt     = DateTime.UtcNow;

                            repository.Transactions.CreateTransactions(transaction);
                        }
                    }
                    else
                    {
                        if (walletResponse != null && walletResponse.Count > 0)
                        {
                            paymentBookRequest.WalletBalance = walletResponse[0].Balance;
                        }
                        if (paymentBookRequest.PaymentRefNumber.Trim() == string.Empty)
                        {
                            paymentBookRequest.PaymentRefNumber = "REF-" + finalString;
                        }
                    }

                    repository.PaymentBook.CreatePaymentBook(paymentBookRequest);
                }

                if (WalletData.Count > 0 && Balance > 0)
                {
                    var Wallet = await repository.Wallets.GetWalletById((int)WalletData[0]);

                    Wallet.Balance = Balance;
                    repository.Wallets.UpdateWallet(Wallet);
                }

                await repository.SaveAsync();

                return(new APIResponse(HttpStatusCode.Created));
            }
            catch (Exception ex)
            {
                logger.Error(ex, "Exception in method 'CreatePaymentBookHandler()'");
                var exMessage = ex.InnerException != null ? ex.InnerException.Message : ex.Message;
                return(new APIResponse(exMessage, HttpStatusCode.InternalServerError));
            }
        }