protected override Transaction Deposit(Account account, Transfer transfer, string code, string description)
        {
            var payment            = (CardPayment)transfer;
            var depositTransaction = account.Deposit(code, description, Settings.Location, new Money(transfer.Currency, transfer.Amount), MoneyConverter);
            var paymentLink        = new PaymentTransactionLink(depositTransaction, payment.Order);

            _paymentTransactionLinkRepository.Create(paymentLink);
            return(depositTransaction);
        }
        public void Can_VaBank_Context_Save_PaymentOrder_And_CardPayment()
        {
            long paymentNumber        = 123;
            var  priorCorrAcc         = Context.Set <CorrespondentAccount>().Single(x => x.AccountNo == "3014153001749");
            var  user                 = Context.Set <User>().Single(x => x.UserName == "terminator");
            var  userPaymentProfile   = Context.Set <UserPaymentProfile>().Single(x => x.UserId == user.Id);
            var  userAccount          = Context.Set <UserAccount>().First(x => x.Owner.Id == user.Id);
            var  cardAccount          = Context.Set <CardAccount>().Single(x => x.Owner.Id == user.Id && x.AccountNo == userAccount.AccountNo);
            var  paymentOrderTemplate = Context.Set <PaymentOrderTemplate>().Single(x => x.TemplateCode == "PAYMENT-CELL-VELCOM-PHONENO");
            var  currency             = Context.Set <Currency>().Single(x => x.ISOName == "BYR");
            var  paymentTemplate      = Context.Set <PaymentTemplate>().Single(x => x.Code == paymentOrderTemplate.TemplateCode);
            var  card                 = cardAccount.Cards.First();

            var paymentOrder = new PaymentOrder(
                paymentNumber,
                user.Profile.FirstName + " " + user.Profile.LastName,
                "153001966",
                cardAccount.AccountNo,
                userPaymentProfile.PayerTIN,
                paymentOrderTemplate.BeneficiaryName,
                paymentOrderTemplate.BeneficiaryBankCode,
                paymentOrderTemplate.BeneficiaryAccountNo,
                paymentOrderTemplate.BeneficiaryTIN,
                String.Format("Пополнение счета. Номер телефона: {0}", user.Profile.PhoneNumber),
                100000,
                currency.ISOName,
                paymentOrderTemplate.PaymentCode);

            var assembly    = Assembly.GetExecutingAssembly();
            var form        = JObject.Parse(new StreamReader(assembly.GetManifestResourceStream("VaBank.Data.Tests.EntityFramework.Templates.cell-velcom-phoneno.json")).ReadToEnd());
            var accountTo   = Context.Set <CorrespondentAccount>().Single(x => x.Bank.Code == paymentOrderTemplate.BeneficiaryBankCode);
            var cardPayment = new CardPayment(card, paymentTemplate, paymentOrder, form, cardAccount, accountTo, currency);

            var paymentTransaction     = new Transaction(cardAccount, currency, 100000, cardAccount.Balance, "123", "test_transaction_desc", "Nezavisimosti 58");
            var paymentTransactionLink = new PaymentTransactionLink(paymentTransaction, paymentOrder);

            Context.Set <PaymentOrder>().Add(paymentOrder);
            Context.Set <CardPayment>().Add(cardPayment);
            Context.SaveChanges();
        }
 public BankOperationModel Submit(SubmitPaymentCommand command)
 {
     EnsureIsValid(command);
     EnsureIsSecure <SubmitPaymentCommand, CardSecurityValidator>(command);
     try
     {
         var userCard    = _deps.UserCards.SurelyFind(command.FromCardId);
         var template    = _deps.PaymentTemplates.SurelyFind(command.TemplateCode);
         var payment     = _deps.CardPaymentFactory.Create(userCard, template, command.Form);
         var paymentLink = new PaymentTransactionLink(payment.Withdrawal, payment.Order);
         _deps.Payments.Create(payment);
         _deps.PaymentTransactionLinks.Create(paymentLink);
         var userOperation = new UserBankOperation(payment, Identity.User);
         _deps.UserBankOperations.Create(userOperation);
         Commit();
         var model = payment.ToModel <BankOperation, BankOperationModel>();
         Publish(new OperationProgressEvent(Operation.Id, model));
         return(model);
     }
     catch (Exception ex)
     {
         throw new ServiceException("Can't submit payment.", ex);
     }
 }