Esempio n. 1
0
        public async Task <ActionResult <CashOrderResponseCreate> > Create(CashOrder cashOrder)
        {
            try
            {
                CashOrderHelper.Validate(cashOrder, logger, ModelState);
                if (!ModelState.IsValid)
                {
                    return(BadRequest(ModelState));
                }

                CashOrderHelper.AddClientIp(cashOrder, HttpContext.Connection.RemoteIpAddress.ToString());
                CashOrderHelper.SetStatusInProgress(cashOrder);

                if (RequestMode.IsCreate(cashOrder))
                {
                    List <CashOrder> cashOrders = SendMessage(cashOrder);

                    if (cashOrders.Count > 0)
                    {
                        return(Ok(CashOrderHelper.ConvertToResponseCreate(cashOrders)));
                    }
                    else
                    {
                        return(BadRequest());
                    }
                }
            }
            catch (Exception ex)
            {
                logger.LogError(ex.Message + "\n" + ex.StackTrace);
                return(BadRequest());
            }
            return(BadRequest());
        }
Esempio n. 2
0
 public static bool IsGetById(CashOrder order)
 {
     return(order.Id != 0 && order.Amount == 0 &&
            string.IsNullOrWhiteSpace(order.UserId) &&
            string.IsNullOrWhiteSpace(order.OfficeAddress) &&
            string.IsNullOrWhiteSpace(order.Currency));
 }
Esempio n. 3
0
 public static bool IsCreate(CashOrder order)
 {
     return(order.Id == 0 && order.Amount != 0 &&
            !string.IsNullOrWhiteSpace(order.UserId) &&
            !string.IsNullOrWhiteSpace(order.OfficeAddress) &&
            !string.IsNullOrWhiteSpace(order.Currency));
 }
Esempio n. 4
0
        public async Task <CashOrder> CashOrderCreate(CashOrder cashOrder)
        {
            try
            {
                using (IDbConnection db = new SqlConnection(connectionString))
                {
                    db.Open();
                    DynamicParameters param = new DynamicParameters();
                    param.Add("@UserId", cashOrder.UserId);
                    param.Add("@OfficeAddress", cashOrder.OfficeAddress);
                    param.Add("@Amount", cashOrder.Amount);
                    param.Add("@Currency", cashOrder.Currency);
                    param.Add("@IpAddress", cashOrder.IpAddress);
                    param.Add("@Status", cashOrder.Status);

                    var result = await db.QueryAsync("CashOrderCreate", param, commandType : CommandType.StoredProcedure);

                    //it needs for async return Id
                    var firstRecord = result.FirstOrDefault() as IDictionary <string, object>;
                    cashOrder.Id = Convert.ToInt32(firstRecord["Id"]);
                    return(cashOrder);
                }
            }
            catch (Exception ex)
            {
                throw;
            }
        }
Esempio n. 5
0
        private void RegisterOrder(Remittance remittance)
        {
            var remittanceSetting = _remittanceSettingRepository.Find(new { remittance.SendBranchId, remittance.ReceiveBranchId });

            if (remittanceSetting == null)
            {
                throw new PawnshopApplicationException("Не найдены настройки переводов для выбранной пары филиалов");
            }

            var sendBranch        = _memberRepository.FindBranch(remittance.SendUserId, remittance.SendBranchId);
            var cashOutNumberCode = sendBranch?.Configuration?.CashOrderSettings?.CashOutNumberCode ?? _branchContext.Configuration.CashOrderSettings.CashOutNumberCode;
            var outOrder          = new CashOrder
            {
                OrderType       = OrderType.CashOut,
                UserId          = remittanceSetting.CashOutUserId,
                DebitAccountId  = remittanceSetting.CashOutDebitId,
                CreditAccountId = remittanceSetting.CashOutCreditId,
                OrderCost       = remittance.SendCost,
                OrderDate       = remittance.SendDate,
                ExpenseTypeId   = remittanceSetting.ExpenseTypeId,
                Reason          = $"Снятие денег для передачи в филиал {remittance.ReceiveBranch?.DisplayName}",
                Note            = remittance.Note,
                RegDate         = DateTime.Now,
                OwnerId         = remittance.SendBranchId,
                BranchId        = remittance.SendBranchId,
                AuthorId        = remittance.SendUserId,
                OrderNumber     = _cashCounterRepository.Next(OrderType.CashOut, remittance.SendDate.Year, remittance.SendBranchId, cashOutNumberCode)
            };

            _orderRepository.Insert(outOrder);
            _eventLog.Log(EventCode.CashOrderSaved, EventStatus.Success, EntityType.CashOrder, outOrder.Id, JsonConvert.SerializeObject(remittance), JsonConvert.SerializeObject(outOrder));
            remittance.SendOrderId = outOrder.Id;

            var inOrder = new CashOrder
            {
                OrderType       = OrderType.CashIn,
                UserId          = remittanceSetting.CashInUserId,
                DebitAccountId  = remittanceSetting.CashInDebitId,
                CreditAccountId = remittanceSetting.CashInCreditId,
                OrderCost       = remittance.SendCost,
                OrderDate       = remittance.ReceiveDate.Value,
                Reason          = $"Получение денег из филиала {remittance.SendBranch?.DisplayName}",
                Note            = remittance.Note,
                RegDate         = DateTime.Now,
                OwnerId         = remittance.ReceiveBranchId,
                BranchId        = remittance.ReceiveBranchId,
                AuthorId        = remittance.ReceiveUserId.Value,
                OrderNumber     = _cashCounterRepository.Next(OrderType.CashIn, remittance.ReceiveDate.Value.Year, remittance.ReceiveBranchId, _branchContext.Configuration.CashOrderSettings.CashInNumberCode)
            };

            _orderRepository.Insert(inOrder);
            _eventLog.Log(EventCode.CashOrderSaved, EventStatus.Success, EntityType.CashOrder, inOrder.Id, JsonConvert.SerializeObject(remittance), JsonConvert.SerializeObject(inOrder));
            remittance.ReceiveOrderId = inOrder.Id;
        }
        /// <summary>
        /// CashOrder validation
        /// </summary>
        public static void Validate(CashOrder cashOrder, ILogger logger, ModelStateDictionary modelState)
        {
            string message = "";

            if (cashOrder == null)
            {
                message = "cashOrder is null";
                logger.LogWarning(message);
                modelState.AddModelError("Other", message);
            }
            //Another validation
        }
Esempio n. 7
0
        public CashOrder Save([FromBody] CashOrder cashOrder)
        {
            if (cashOrder.Id == 0)
            {
                cashOrder.RegDate       = DateTime.Now;
                cashOrder.OwnerId       = _branchContext.Branch.Id;
                cashOrder.BranchId      = _branchContext.Branch.Id;
                cashOrder.AuthorId      = _sessionContext.UserId;
                cashOrder.ApproveStatus = 0;
            }

            ModelState.Clear();
            TryValidateModel(cashOrder);
            ModelState.Validate();

            if (cashOrder.OrderDate.Date < DateTime.Now.Date && !_sessionContext.ForSupport)
            {
                throw new PawnshopApplicationException("Поле дата кассового ордера не может быть меньше текущей даты");
            }

            using (var transaction = _repository.BeginTransaction())
            {
                if (cashOrder.Id > 0)
                {
                    _repository.Update(cashOrder);
                }
                else
                {
                    string code;
                    switch (cashOrder.OrderType)
                    {
                    case OrderType.CashIn:
                        code = _branchContext.Configuration.CashOrderSettings.CashInNumberCode;
                        break;

                    case OrderType.CashOut:
                        code = _branchContext.Configuration.CashOrderSettings.CashOutNumberCode;
                        break;

                    default:
                        throw new ArgumentOutOfRangeException(nameof(cashOrder.OrderType), cashOrder.OrderType, null);
                    }
                    cashOrder.OrderNumber = _counterRepository.Next(
                        cashOrder.OrderType, cashOrder.OrderDate.Year,
                        _branchContext.Branch.Id, code);
                    _repository.Insert(cashOrder);
                }

                transaction.Commit();
            }

            return(cashOrder);
        }
Esempio n. 8
0
        public IActionResult Sign([FromBody] int id)
        {
            if (id <= 0)
            {
                throw new ArgumentOutOfRangeException(nameof(id));
            }

            var model = _investementRepository.Get(id);

            if (model == null)
            {
                throw new InvalidOperationException();
            }
            if (model.Status > InvestmentStatus.Draft)
            {
                throw new PawnshopApplicationException("Договор уже подписан");
            }

            using (var transaction = _investementRepository.BeginTransaction())
            {
                var order = new CashOrder
                {
                    OrderType       = OrderType.CashIn,
                    ClientId        = model.ClientId,
                    DebitAccountId  = 0, //TODO: В настройках добавить дебет и кредит для инвестиций
                    CreditAccountId = 0,
                    OrderCost       = model.InvestmentCost,
                    OrderDate       = model.InvestmentBeginDate,
                    RegDate         = DateTime.Now,
                    OwnerId         = _branchContext.Branch.Id,
                    BranchId        = _branchContext.Branch.Id,
                    AuthorId        = _sessionContext.UserId,
                    OrderNumber     = _counterRepository.Next(
                        OrderType.CashIn,
                        model.InvestmentBeginDate.Year,
                        _branchContext.Branch.Id,
                        _branchContext.Configuration.CashOrderSettings.CashInNumberCode)
                };

                _orderRepository.Insert(order);

                model.OrderId = order.Id;
                model.Status  = InvestmentStatus.Signed;

                _investementRepository.Update(model);

                transaction.Commit();
            }

            return(Ok());
        }
Esempio n. 9
0
        private void CreateOrder(Insurance insurance, InsuranceAction action, OrderType orderType, int debitAccountId, int creditAccountId)
        {
            string code;

            switch (orderType)
            {
            case OrderType.CashIn:
                code = _branchContext.Configuration.CashOrderSettings.CashInNumberCode;
                break;

            case OrderType.CashOut:
                code = _branchContext.Configuration.CashOrderSettings.CashOutNumberCode;
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(orderType), orderType, null);
            }

            var order = new CashOrder
            {
                OrderType       = orderType,
                ClientId        = insurance.Contract.ClientId,
                DebitAccountId  = debitAccountId,
                CreditAccountId = creditAccountId,
                OrderCost       = insurance.InsuranceCost,
                OrderDate       = action.ActionDate,
                Reason          = GetReason(action.ActionType),
                RegDate         = DateTime.Now,
                OwnerId         = _branchContext.Branch.Id,
                BranchId        = _branchContext.Branch.Id,
                AuthorId        = _sessionContext.UserId,
                OrderNumber     = _cashCounterRepository.Next(orderType, action.ActionDate.Year, _branchContext.Branch.Id, code)
            };

            if (order.DebitAccountId == 0 || order.CreditAccountId == 0)
            {
                throw new PawnshopApplicationException("Настройте счета дебет и кредит для страхового договора");
            }

            _orderRepository.Insert(order);
            _eventLog.Log(EventCode.CashOrderSaved, EventStatus.Success, EntityType.CashOrder, order.Id, null, null);

            action.OrderId = order.Id;
        }
        public IActionResult ApproveCashOrder(ApproveIdRequest request)
        {
            if (ModelState.IsValid)
            {
                var       response = new SingleResponse <ActionResult>();
                CashOrder order    = _cacheHelper.GetApprovalOrder <CashOrder>(request.Id);

                ActionResult Result = _xbService.ApproveCashOrder(order);

                response.ResultCode  = ResultCodeFormatter.FromPersonalAccountSecurityService(Result.ResultCode);
                response.ResultCode  = ResultCodes.normal;
                response.Description = utils.GetActionResultErrors(Result.Errors);
                return(ResponseExtensions.ToHttpResponse(response));
            }
            else
            {
                return(ValidationError.GetValidationErrorResponse(ModelState));
            }
        }
Esempio n. 11
0
        public async Task <ActionResult <IEnumerable <CashOrderResponseGet> > > Get(CashOrder cashOrder)
        {
            try
            {
                List <CashOrder> cashOrders = new List <CashOrder>();

                if (RequestMode.IsGetById(cashOrder) || RequestMode.IsGetByUserIdAndOfficeAddress(cashOrder))
                {
                    cashOrders = SendMessage(cashOrder);

                    return(Ok(CashOrderHelper.ConvertToResponseGet(cashOrders)));
                }
            }
            catch (Exception ex)
            {
                logger.LogError(ex.Message);
                return(BadRequest());
            }

            return(BadRequest());
        }
Esempio n. 12
0
        /// <summary>
        /// Send message to message queue
        /// </summary>
        private List <CashOrder> SendMessage(CashOrder cashOrder)
        {
            List <CashOrder> ordersList = new List <CashOrder>();

            ordersList.Add(cashOrder);
            string json = CashOrdersSerializer.Serialize(ordersList);

            try
            {
                sender = new Sender(configuration);
                var response = sender.Call(json);
                ordersList = CashOrdersSerializer.Deserialize(response);

                return(ordersList);
            }
            catch (Exception ex)
            {
                throw;
            }
            finally
            {
                sender.Close();
            }
        }
Esempio n. 13
0
 public static void SetStatusInProgress(CashOrder cashOrder)
 {
     cashOrder.Status = OrderStatus.InProgress.ToString();
 }
Esempio n. 14
0
 public static void AddClientIp(CashOrder cashOrder, string ipAddress)
 {
     cashOrder.IpAddress = ipAddress;
 }
Esempio n. 15
0
        public override void OnActionExecuting(ActionExecutingContext context)
        {
            ApproveIdRequest                     request          = null;
            ProductIdApproveRequest              productIdRequest = null;
            ApproveLoanProductOrderRequest       approveLoan      = null;
            ListDocIdRequest                     listRequest      = null;
            Dictionary <long, ApprovalOrderType> Types            = new Dictionary <long, ApprovalOrderType>();
            string sessionId = "";
            string otp       = "";
            byte   language  = 0;
            bool   isSigned  = false;
            string ipAddress = "";
            Dictionary <string, string> signData = null;
            SourceType sourceType = SourceType.NotSpecified;

            // հայտի մուտքագրման աղբյուրի ստացում Header-ից
            if (!string.IsNullOrEmpty(context.HttpContext.Request.Headers["SourceType"]))
            {
                Enum.TryParse(context.HttpContext.Request.Headers["SourceType"], out sourceType);
            }


            // Սեսիայի ստացում Header-ից
            if (!string.IsNullOrEmpty(context.HttpContext.Request.Headers["SessionId"]))
            {
                sessionId = context.HttpContext.Request.Headers["SessionId"];
            }


            // Լեզվի ստացում Header-ից
            if (!string.IsNullOrEmpty(context.HttpContext.Request.Headers["language"]))
            {
                byte.TryParse(context.HttpContext.Request.Headers["language"], out language);
            }

            // IP հասցեի ստացում
            if (!string.IsNullOrEmpty(context.HttpContext.Request.Headers["LocalIPAddress"]))
            {
                ipAddress = context.HttpContext.Request.Headers["LocalIPAddress"];
            }

            // Փոխանցված պարամետրի ստացում
            var argument = context.ActionArguments.Values.First();

            //Approve մեթոդների համար
            if (argument is ApproveIdRequest)
            {
                request = argument as ApproveIdRequest;
                Types.Add(request.Id, _type);
                otp = request.OTP;
            }
            //ApproveOrders մեթոդի համար
            else if (argument is ListDocIdRequest)
            {
                listRequest = argument as ListDocIdRequest;
                foreach (var item in listRequest.ListDocId)
                {
                    Types.Add(item, GetOrderType(_xbService.GetDocumentType(item)));
                }
                otp = listRequest.OTP;
            }
            else if (argument is ProductIdApproveRequest)
            {
                productIdRequest = argument as ProductIdApproveRequest;
                Types.Add((long)productIdRequest.ProductId, _type);
                otp = productIdRequest.OTP;
            }
            else if (argument is ApproveLoanProductOrderRequest)
            {
                approveLoan = argument as ApproveLoanProductOrderRequest;
                Types.Add(approveLoan.Id, _type);
                otp = approveLoan.OTP;
            }

            //Հայտի ստեղծում, քեշավորում, և Sign լինող պարամետրերի փոխանցում
            foreach (var x in Types)
            {
                switch (x.Value)
                {
                case ApprovalOrderType.PaymentOrder:
                {
                    PaymentOrder order = (PaymentOrder)_cacheHelper.SetApprovalOrder(_xbService.GetPaymentOrder(x.Key));
                    CollectParameters(order.Id.ToString(), order.DebitAccount.AccountNumber.ToString(), order.ReceiverAccount.AccountNumber.ToString(),
                                      Math.Truncate(order.Amount).ToString(), ipAddress);
                }
                break;

                case ApprovalOrderType.PlasticCardOrder:
                {
                    PlasticCardOrder order = (PlasticCardOrder)_cacheHelper.SetApprovalOrder(_xbService.GetPlasticCardOrder(x.Key));
                    CollectParameters(order.Id.ToString(), "0", "0", order.PlasticCard.Currency, ipAddress);
                }
                break;

                case ApprovalOrderType.UtilityPaymentOrder:
                {
                    UtilityPaymentOrder order = (UtilityPaymentOrder)_cacheHelper.SetApprovalOrder(_xbService.GetUtilityPaymentOrder(x.Key));
                    CollectParameters(order.Id.ToString(), order.DebitAccount.AccountNumber.ToString(), "0", Math.Truncate(order.Amount).ToString(), ipAddress);
                }
                break;

                case ApprovalOrderType.MatureOrder:
                {
                    MatureOrder order = (MatureOrder)_cacheHelper.SetApprovalOrder(_xbService.GetMatureOrder(x.Key));
                    CollectParameters(order.Id.ToString(), order.Account.AccountNumber.ToString(), "0", Math.Truncate(order.Amount).ToString(), ipAddress);
                }
                break;

                case ApprovalOrderType.ReferenceOrder:
                {
                    ReferenceOrder order = (ReferenceOrder)_cacheHelper.SetApprovalOrder(_xbService.GetReferenceOrder(x.Key));
                    if (order.FeeAccount != null)
                    {
                        CollectParameters(order.Id.ToString(), order.FeeAccount.AccountNumber.ToString(), "0", Math.Truncate(order.Amount).ToString(), ipAddress);
                    }
                    else
                    {
                        CollectParameters(order.Id.ToString(), "0", "0", Math.Truncate(order.Amount).ToString(), ipAddress);
                    }
                }
                break;

                case ApprovalOrderType.LoanProductOrder:
                {
                    LoanProductOrder order = null;
                    var type = _xbService.GetDocumentType((int)x.Key);
                    switch (type)
                    {
                    case OrderType.CreditSecureDeposit:
                        order = (LoanProductOrder)_cacheHelper.SetApprovalOrder(_xbService.GetLoanOrder(x.Key));
                        break;

                    default:
                        order = (LoanProductOrder)_cacheHelper.SetApprovalOrder(_xbService.GetCreditLineOrder(x.Key));
                        break;
                    }
                    CollectParameters(order.Id.ToString(), "0", "0", Math.Truncate(order.Amount).ToString(), ipAddress);
                }
                break;

                case ApprovalOrderType.ReceivedFastTransferPaymentOrder:
                {
                    ReceivedFastTransferPaymentOrder order = (ReceivedFastTransferPaymentOrder)_cacheHelper.SetApprovalOrder(_xbService.GetReceivedFastTransferPaymentOrder(x.Key));
                    CollectParameters(order.Id.ToString(), "0", order.ReceiverAccount.AccountNumber.ToString(), Math.Truncate(order.Amount).ToString(), ipAddress);
                }
                break;

                case ApprovalOrderType.AccountClosingOrder:
                {
                    AccountClosingOrder order = (AccountClosingOrder)_cacheHelper.SetApprovalOrder(_xbService.GetAccountClosingOrder(x.Key));
                    CollectParameters(order.Id.ToString(), "0", "0", "0", ipAddress);
                }
                break;

                case ApprovalOrderType.SwiftCopyOrder:
                {
                    SwiftCopyOrder order = (SwiftCopyOrder)_cacheHelper.SetApprovalOrder(_xbService.GetSwiftCopyOrder(x.Key));
                    if (order.FeeAccount != null)
                    {
                        CollectParameters(order.Id.ToString(), order.FeeAccount.AccountNumber.ToString(), "0", Math.Truncate(order.Amount).ToString(), ipAddress);
                    }
                    else
                    {
                        CollectParameters(order.Id.ToString(), "0", "0", Math.Truncate(order.Amount).ToString(), ipAddress);
                    }
                }
                break;

                case ApprovalOrderType.CredentialOrder:
                {
                    CredentialOrder order = (CredentialOrder)_cacheHelper.SetApprovalOrder(_xbService.GetCredentialOrder(x.Key));
                    if (order.Fees != null && order.Fees[0] != null && order.Fees[0].Account != null)
                    {
                        CollectParameters(order.Id.ToString(), order.Fees[0].Account.AccountNumber.ToString(), "0", Math.Truncate(order.Amount).ToString(), ipAddress);
                    }
                    else
                    {
                        CollectParameters(order.Id.ToString(), "0", "0", Math.Truncate(order.Amount).ToString(), ipAddress);
                    }
                }
                break;

                case ApprovalOrderType.DepositOrder:
                {
                    DepositOrder order = (DepositOrder)_cacheHelper.SetApprovalOrder(_xbService.GetDepositorder(x.Key));
                    CollectParameters(order.Id.ToString(), order.DebitAccount.AccountNumber.ToString(), "0", Math.Truncate(order.Amount).ToString(), ipAddress);
                }
                break;

                case ApprovalOrderType.AccountOrder:
                {
                    AccountOrder order = (AccountOrder)_cacheHelper.SetApprovalOrder(_xbService.GetAccountOrder(x.Key));
                    CollectParameters(order.Id.ToString(), "0", "0", order.Currency, ipAddress);
                }
                break;

                case ApprovalOrderType.CashOrder:
                {
                    CashOrder order = (CashOrder)_cacheHelper.SetApprovalOrder(_xbService.GetCashOrder(x.Key));
                    CollectParameters(order.Id.ToString(), "0", "0", Math.Truncate(order.Amount).ToString(), ipAddress);
                }
                break;

                case ApprovalOrderType.CreditLineTerminationOrder:
                {
                    CreditLineTerminationOrder order = (CreditLineTerminationOrder)_cacheHelper.SetApprovalOrder(_xbService.GetCreditLineTerminationOrder(x.Key));
                    CollectParameters(order.Id.ToString(), "0", "0", order.Currency, ipAddress);
                }
                break;

                case ApprovalOrderType.CardClosingOrder:
                {
                    CardClosingOrder order = (CardClosingOrder)_cacheHelper.SetApprovalOrder(_xbService.GetCardClosingOrder(x.Key));
                    CollectParameters(order.Id.ToString(), "0", "0", order.ProductId.ToString(), ipAddress);
                }
                break;

                case ApprovalOrderType.CustomerDataOrder:
                {
                    CustomerDataOrder order = (CustomerDataOrder)_cacheHelper.SetApprovalOrder(_xbService.GetCustomerDataOrder(x.Key));
                    CollectParameters(order.Id.ToString(), "0", "0", order.Password, ipAddress);
                }
                break;

                case ApprovalOrderType.StatmentByEmailOrder:
                {
                    StatmentByEmailOrder order = (StatmentByEmailOrder)_cacheHelper.SetApprovalOrder(_xbService.GetStatmentByEmailOrder(x.Key));
                }
                break;

                case ApprovalOrderType.DepositTerminationOrder:
                {
                    DepositTerminationOrder order = (DepositTerminationOrder)_cacheHelper.SetApprovalOrder(_xbService.GetDepositTerminationOrder(x.Key));
                    CollectParameters(order.Id.ToString(), "0", "0", order.ProductId.ToString(), ipAddress);
                }
                break;

                case ApprovalOrderType.ReestrTransferOrder:
                {
                    ReestrTransferOrder order = (ReestrTransferOrder)_cacheHelper.SetApprovalOrder(_xbService.GetReestrTransferOrder(x.Key));
                    CollectParameters(order.Id.ToString(), order.DebitAccount.AccountNumber.ToString(), "0", Math.Truncate(order.Amount).ToString(), ipAddress);
                }
                break;

                case ApprovalOrderType.ArcaCardsTransactionOrder:
                {
                    ArcaCardsTransactionOrder order = (ArcaCardsTransactionOrder)_cacheHelper.SetApprovalOrder(_xbService.GetArcaCardsTransactionOrder(x.Key));
                    CollectParameters(order.Id.ToString(), order.CardNumber.Substring(0, 10), "0", "0", ipAddress);
                }
                break;

                case ApprovalOrderType.CardToCardOrder:
                {
                    CardToCardOrder order = (CardToCardOrder)_cacheHelper.SetApprovalOrder(_xbService.GetCardToCardOrder(x.Key));
                    CollectParameters(order.Id.ToString(), order.DebitCardNumber.Substring(0, 10), order.CreditCardNumber, Math.Truncate(order.Amount).ToString(), ipAddress);
                }
                break;

                case ApprovalOrderType.CardLimitChangeOrder:
                {
                    CardLimitChangeOrder order = (CardLimitChangeOrder)_cacheHelper.SetApprovalOrder(_xbService.GetCardLimitChangeOrder(x.Key));
                    CollectParameters(order.Id.ToString(), "0", "0", Math.Truncate(order.Limits[0].LimitValue).ToString(), ipAddress);
                }
                break;

                case ApprovalOrderType.PeriodicPaymentOrder:
                {
                    PaymentOrder order = (PaymentOrder)_cacheHelper.SetApprovalOrder(_xbService.GetPaymentOrder(x.Key));
                    CollectParameters(order.Id.ToString(), order.DebitAccount.AccountNumber.ToString(), "0", Math.Truncate(order.Amount).ToString(), ipAddress);
                }
                break;

                case ApprovalOrderType.InternationalPaymentOrder:
                {
                    InternationalPaymentOrder order = (InternationalPaymentOrder)_cacheHelper.SetApprovalOrder(_xbService.GetInternationalPaymentOrder(x.Key));
                    CollectParameters(order.Id.ToString(), order.DebitAccount.AccountNumber.ToString(), order.ReceiverAccount.AccountNumber.ToString(),
                                      Math.Truncate(order.Amount).ToString(), ipAddress);
                }
                break;

                case ApprovalOrderType.AccountReOpenOrder:
                {
                    AccountReOpenOrder order = (AccountReOpenOrder)_cacheHelper.SetApprovalOrder(_xbService.GetAccountReOpenOrder(x.Key));
                    CollectParameters(order.Id.ToString(), "0", "0", "0", ipAddress);
                }
                break;

                case ApprovalOrderType.PlasticCardSmsServiceOrder:
                {
                    PlasticCardSMSServiceOrder order = (PlasticCardSMSServiceOrder)_cacheHelper.SetApprovalOrder(_xbService.GetPlasticCardSMSServiceOrder(x.Key));
                    CollectParameters(order.Id.ToString(), "0", "0", order.ProductID.ToString(), ipAddress);
                }
                break;

                case ApprovalOrderType.RemovalOrder:
                {
                    RemovalOrder order = context.ActionArguments.Values.First() as RemovalOrder;
                    CollectParameters("0", order.RemovingOrderId.ToString(), "0", "0", ipAddress);
                }
                break;

                case ApprovalOrderType.PeriodicTerminationOrder:
                {
                    PeriodicTerminationOrder order = (PeriodicTerminationOrder)_cacheHelper.SetApprovalOrder(_xbService.GetPeriodicTerminationOrder(x.Key));
                    CollectParameters(order.Id.ToString(), "0", "0", order.ProductId.ToString(), ipAddress);
                }
                break;

                case ApprovalOrderType.PeriodicDataChangeOrder:
                {
                    PeriodicTransferDataChangeOrder order = (PeriodicTransferDataChangeOrder)_cacheHelper.SetApprovalOrder(_xbService.GetPeriodicDataChangeOrder(x.Key));
                    CollectParameters(order.Id.ToString(), "0", "0", order.ProductId.ToString(), ipAddress);
                }
                break;

                case ApprovalOrderType.CardActivationOrder:
                {
                    CollectParameters(x.Key.ToString(), "0", "0", "0", ipAddress);
                }
                break;

                default:
                    break;
                }
            }
            ;

            //CheckSign Filter-ն անհրաժեշտ է աշխատի միայն sourceType-ը 5-ի՝ MobileBanking-ի դեպքում
            if (sourceType != SourceType.MobileBanking)
            {
                return;
            }
            else
            {
                signData = this.GenerateSignData(TransactionID, SenderAccount, RecepientAccount, Amount, IpAddress);
            }

            isSigned = _xbSecurityService.SingData(sessionId, otp, signData, language);

            //թեստային միջավայրի համար
            if ((sessionId == "ba0f312d-8487-445e-aee2-d5877ac1d4de" || otp == "0123456") && Convert.ToBoolean(_config["TestVersion"]))
            {
                return;
            }
            if (!isSigned)
            {
                Response response = new Response();
                response.ResultCode  = ResultCodes.validationError;
                response.Description = (Languages)language == Languages.hy ? "Սխալ PIN կոդ։" : "Incorrect PIN code.";
                context.Result       = ResponseExtensions.ToHttpResponse(response);
            }
        }
Esempio n. 16
0
        public Selling Sell([FromBody] Selling selling)
        {
            using (var transaction = _repository.BeginTransaction())
            {
                if (selling.Id == 0)
                {
                    throw new PawnshopApplicationException("Сохраните реализацию для регистрации продажи");
                }

                if (selling.CashOrderId.HasValue)
                {
                    throw new PawnshopApplicationException("Продажа уже зарегистрирована");
                }

                selling.Status = SellingStatus.Sold;

                if (selling.ContractId.HasValue && selling.ContractPositionId.HasValue)
                {
                    var contract = _contractRepository.Get(selling.ContractId.Value);
                    var position = contract.Positions.SingleOrDefault(p => p.Id == selling.ContractPositionId.Value);
                    if (position != null)
                    {
                        position.Status = ContractPositionStatus.Disposed;
                    }
                    if (contract.Positions.All(p => p.Status == ContractPositionStatus.Disposed))
                    {
                        contract.Status = ContractStatus.Disposed;
                    }
                    _contractRepository.Update(contract);
                }

                ModelState.Clear();
                TryValidateModel(selling);
                ModelState.Validate();

                var settings = _branchContext.Configuration.CashOrderSettings
                               .Get(selling.CollateralType).DisposeSettings;

                if (!selling.SellingDate.HasValue)
                {
                    throw new PawnshopApplicationException("Поле дата продажи обязательно для заполнения");
                }

                if (!selling.SellingCost.HasValue)
                {
                    throw new PawnshopApplicationException("Поле стоимость продажи обязательно для заполнения");
                }

                if (!settings.DebitId.HasValue)
                {
                    throw new PawnshopApplicationException("В настройках организации заполните счет дебет для реализации");
                }

                if (!settings.CreditId.HasValue)
                {
                    throw new PawnshopApplicationException("В настройках организации заполните счет кредит для реализации");
                }

                var cashOrder = new CashOrder
                {
                    OrderType   = OrderType.CashIn,
                    OrderNumber = _counterRepository.Next(
                        OrderType.CashIn, selling.SellingDate.Value.Year,
                        _branchContext.Branch.Id,
                        _branchContext.Configuration.CashOrderSettings.CashInNumberCode),
                    OrderDate       = selling.SellingDate.Value,
                    OrderCost       = selling.SellingCost.Value,
                    DebitAccountId  = settings.DebitId.Value,
                    CreditAccountId = settings.CreditId.Value,
                    UserId          = _sessionContext.UserId,
                    Reason          = $"Продажа изделия {selling.Note}",
                    RegDate         = DateTime.Now,
                    OwnerId         = _branchContext.Branch.Id,
                    BranchId        = _branchContext.Branch.Id,
                    AuthorId        = _sessionContext.UserId
                };

                _cashOrderRepository.Insert(cashOrder);
                selling.CashOrderId = cashOrder.Id;
                selling.CashOrder   = _cashOrderRepository.Get(cashOrder.Id);

                _repository.Update(selling);

                transaction.Commit();
            }

            return(selling);
        }