private string GetOrderTypeBasedCurrency(AttachCardBindingRequest request)
        {
            string CurrencyCode = string.Empty;

            switch (request.Order.Type)
            {
            case OrderType.RATransfer:
            {
                if (request.Order.SubType == 3)
                {
                    CurrencyCode = request.Order.ReceiverAccount.Currency;
                }
                //else if (request.Order.SubType == 6)
                //{
                //    CurrencyCode = "AMD";
                //}
            }
            break;

            case OrderType.LoanMature:
            {
                CurrencyCode = request.Order.Currency;
            }
            break;

            case OrderType.CommunalPayment:
            {
                CurrencyCode = "AMD";
            }
            break;

            default:
                break;
            }
            return(CurrencyCode);
        }
        private SingleResponse <long> SaveAttachedCardOrder(AttachCardBindingRequest request)
        {
            SingleResponse <long> response = new SingleResponse <long>()
            {
                ResultCode = ResultCodes.normal
            };

            XBS.ActionResult result = new XBS.ActionResult();
            //Տարանցիկ հաշվի ստացում դեբետագրելու համար , կախված հայտի տեսակից
            string accountNumber = _client.GetMerchantAccountNumberByOrderType(new AttachedCardOrderTypeRequest
            {
                Currency     = GetOrderTypeBasedCurrency(request),
                OrderType    = (int)request.Order.Type,
                OrderSubType = request.Order.SubType
            })?.AccountNumber;

            if (string.IsNullOrEmpty(accountNumber))
            {
                response.ResultCode = ResultCodes.failed;
                return(response);
            }
            switch (request.Order.Type)
            {
            case OrderType.RATransfer:
            {
                if (request.Order.SubType == 3)
                {
                    PaymentOrder order = new PaymentOrder
                    {
                        Amount           = request.Order.Amount,
                        Currency         = request.Order.Currency,
                        SubType          = request.Order.SubType,
                        Type             = request.Order.Type,
                        ReceiverBankCode = request.Order.ReceiverBankCode,
                        ReceiverAccount  = new Account
                        {
                            AccountNumber = request.Order.ReceiverAccount.AccountNumber,
                            Currency      = request.Order.ReceiverAccount.Currency
                        },
                        DebitAccount = new Account
                        {
                            AccountNumber  = accountNumber,
                            Currency       = request.Order.DebitAccount.Currency,
                            IsAttachedCard = true
                        }
                    };
                    result = _xBService.SavePaymentOrder(order);
                }
                //else if (request.Order.SubType == 6)
                //{
                //    BudgetPaymentOrder order = new BudgetPaymentOrder
                //    {
                //        Amount = request.Order.Amount,
                //        Currency = request.Order.Currency,
                //        SubType = request.Order.SubType,
                //        Type = request.Order.Type,
                //        ReceiverBankCode = request.Order.ReceiverBankCode,
                //        UseCreditLine = request.Order.UseCreditLine,
                //        Description = request.Order.Description,
                //        TransferFee = request.Order.TransferFee,
                //        Receiver = request.Order.Receiver,
                //        PoliceResponseDetailsId = request.Order.PoliceResponseDetailsId,
                //        LTACode = request.Order.LTACode,
                //        FeeAccount = new Account
                //        {
                //            AccountNumber = request.Order.FeeAccount.AccountNumber,
                //            Currency = request.Order.FeeAccount.Currency
                //        },
                //        ReceiverAccount = new Account
                //        {
                //            AccountNumber = request.Order.ReceiverAccount.AccountNumber
                //        },
                //        DebitAccount = new Account
                //        {
                //            AccountNumber = accountNumber,
                //            Currency = request.Order.DebitAccount.Currency,
                //            IsAttachedCard = true
                //        }
                //    };
                //    result = _xBService.SaveBudgetPaymentOrder(order);
                //}
            }
            break;

            case OrderType.LoanMature:
            {
                string loanAccNumber = _xBService.GetLiabilitiesAccountNumberByAppId(request.Order.ProductId);
                if (string.IsNullOrEmpty(loanAccNumber))
                {
                    response.ResultCode = ResultCodes.failed;
                    return(response);
                }
                PaymentOrder order = new PaymentOrder
                {
                    Amount           = request.Order.Amount,
                    Currency         = request.Order.Currency,
                    SubType          = 3,
                    Type             = OrderType.RATransfer,
                    ReceiverBankCode = request.Order.ReceiverBankCode,
                    ReceiverAccount  = new Account
                    {
                        AccountNumber = loanAccNumber,
                        Currency      = request.Order.Currency
                    },
                    DebitAccount = new Account
                    {
                        AccountNumber  = accountNumber,
                        Currency       = request.Order.Currency,
                        IsAttachedCard = true
                    }
                };
                result = _xBService.SavePaymentOrder(order);
                if (result.ResultCode == ResultCode.Normal)
                {
                    PaymentOrder paymOrder = _xBService.GetPaymentOrder(result.Id);
                    result = _xBService.ApprovePaymentOrder(paymOrder);
                    if (result.ResultCode == ResultCode.Normal)
                    {
                        MatureOrder matureOrder = new MatureOrder
                        {
                            ProductId  = request.Order.ProductId,
                            Amount     = request.Order.Amount,
                            Currency   = request.Order.Currency,
                            SubType    = request.Order.SubType,
                            Type       = request.Order.Type,
                            MatureType = request.Order.MatureType,
                            MatureMode = request.Order.MatureMode,
                            Account    = new Account
                            {
                                AccountNumber  = loanAccNumber,
                                Currency       = request.Order.Currency,
                                IsAttachedCard = true
                            }
                        };
                        result = _xBService.SaveMatureOrder(matureOrder);
                    }
                }
            }
            break;

            case OrderType.CommunalPayment:
            {
                UtilityPaymentOrder order = new UtilityPaymentOrder
                {
                    Amount            = request.Order.Amount,
                    Currency          = request.Order.Currency,
                    Type              = request.Order.Type,
                    Code              = request.Order.Code,
                    AbonentType       = request.Order.AbonentType,
                    CommunalType      = request.Order.CommunalType,
                    Branch            = request.Order.Branch,
                    AbonentFilialCode = request.Order.AbonentFilialCode,
                    PaymentType       = request.Order.PaymentType,
                    DebitAccount      = new Account
                    {
                        AccountNumber  = accountNumber,
                        Currency       = "AMD",
                        IsAttachedCard = true
                    }
                };
                result = _xBService.SaveUtilityPaymentOrder(order);
            }
            break;

            default:
                break;
            }
            response.Result      = result.Id;
            response.ResultCode  = ResultCodeFormatter.FromPersonalAccountSecurityService(result.ResultCode);
            response.Description = Utils.GetActionResultErrors(result.Errors);
            return(response);
        }
        public async Task <IActionResult> SaveAndApproveWithAttachedCard([FromBody] AttachCardBindingRequest request)
        {
            if (ModelState.IsValid)
            {
                if (request?.Order == null)
                {
                    return(ResponseExtensions.ToHttpResponse(new Response
                    {
                        ResultCode = ResultCodes.failed,
                        Description = "Տեղի ունեցավ սխալ:"
                    }));
                }
                var orderResult = SaveAttachedCardOrder(request);
                if (orderResult.ResultCode == ResultCodes.normal && orderResult.Result != 0)
                {
                    var authorizedCustomer = _cacheHelper.GetAuthorizedCustomer();
                    var language           = _cacheHelper.GetLanguage();
                    var source             = _cacheHelper.GetSourceType();
                    var response           = await _client.ArcaOrderBindingPaymentAsync(new CardBindingPaymentRequest
                    {
                        BindingId      = request.Order.BindingId,
                        Amount         = request.Order.Amount,
                        Currency       = GetOrderTypeBasedCurrency(request),
                        OrderType      = XbsOrderEnumToProto(request.Order.Type),
                        OrderSubType   = request.Order.SubType,
                        CustomerNumber = authorizedCustomer.CustomerNumber,
                        UserId         = authorizedCustomer.UserId,
                        Language       = language == 1 ? "hy" : "en",
                        PageView       = source == SourceType.AcbaOnline ? "DESKTOP" : "MOBILE"
                    });

                    if (response.Payed)
                    {
                        var saveResponse = await _client.SaveAttachedCardOrderDetailsAsync(new OrderDetailsRequest
                        {
                            DocID   = orderResult.Result,
                            CardId  = response.CardId,
                            MdOrder = response.MdOrder
                        });

                        if (saveResponse.Saved)
                        {
                            var approvalRequest = new AttachCardPaymentApprovalRequest
                            {
                                Id      = orderResult.Result,
                                SubType = request.Order.SubType,
                                Type    = request.Order.Type
                            };
                            var approveResult = ApproveAttachedCardOrder(approvalRequest);
                            if (approveResult.ResultCode == ResultCodes.normal)
                            {
                                return(ResponseExtensions.ToHttpResponse(new Response
                                {
                                    ResultCode = ResultCodes.normal,
                                    Description = "Վճարումը կատարված է:"
                                }));
                            }
                            else
                            {
                                return(ResponseExtensions.ToHttpResponse(new Response
                                {
                                    ResultCode = ResultCodes.failed,
                                    Description = "Վճարման հաստատման ժամանակ տեղի ունեցավ սխալ, խնդրում ենք դիմել բանկ:"
                                }));
                            }
                        }
                        else
                        {
                            return(ResponseExtensions.ToHttpResponse(new Response
                            {
                                ResultCode = ResultCodes.failed,
                                Description = "Հայտի մանրամասների պահպանման տեղի ունեցավ սխալ:"
                            }));
                        }
                    }
                    else
                    {
                        // Quality desclined
                        return(ResponseExtensions.ToHttpResponse(new Response
                        {
                            ResultCode = ResultCodes.failed,
                            Description = "Վճարման ժամանակ տեղի ունեցավ սխալ:"
                        }));
                    }
                }
                else
                {
                    // Quality desclined
                    return(ResponseExtensions.ToHttpResponse(new Response
                    {
                        ResultCode = ResultCodes.failed,
                        Description = "Տեղի ունեցավ սխալ:"
                    }));
                }
            }
            else
            {
                return(ValidationError.GetValidationErrorResponse(ModelState));
            }
        }