Exemplo n.º 1
0
        public async Task CreateAsync_Fail_When_Null()
        {
            CreditCardEntity cc = null;

            var creditCardRepository = this.serviceProvider.GetService <ICreditCardRepository>();

            await creditCardRepository.CreateAsync(cc);
        }
Exemplo n.º 2
0
        public Task CreateAsync(CreditCardEntity creditCard)
        {
            if (creditCard == null)
            {
                throw new ArgumentNullException(nameof(creditCard));
            }

            // Intentionally missing CC already exist check as there were no requirement

            creditCardStorage.Add(creditCard);

            return(Task.CompletedTask);
        }
Exemplo n.º 3
0
        private CreditCardEntity[] generateCreditCards(int startWith, int length)
        {
            int count = 4;

            CreditCardEntity[] arrCreditCards = new CreditCardEntity[count];
            for (int i = 0; i < count; i++)
            {
                var genToken = generateCreditCardNumber(startWith, length);
                arrCreditCards[i] = new CreditCardEntity {
                    Number = genToken
                };
            }
            return(arrCreditCards);
        }
Exemplo n.º 4
0
        /// <summary>
        /// Edit and existing credit card and update CIM.
        /// </summary>
        /// <param name="creditcardid"></param>
        /// <returns></returns>
        public ActionResult EditCard(int creditcardid)
        {
            var card = new CreditCardEntity(creditcardid);

            if (card.IsNew)
            {
                throw new HttpException(404, SharedRes.Error.NotFound_CreditCard);
            }

            if (!Permissions.UserHasPermission("Edit", card))
            {
                throw new HttpException(401, SharedRes.Error.Unauthorized_CreditCard);
            }

            // populate the model with the card data loaded from authorize.net
            try
            {
                CustomerGateway cg;
                var             customer = RoleUtils.IsUserServiceAdmin()
                                   ? EnsureProfile(out cg, card.UserCreditCards.First().User)
                                   : EnsureProfile(out cg);

                var profile      = customer.PaymentProfiles.First(x => x.ProfileID == card.AuthorizeId);
                var addressLines = profile.BillingAddress.Street.Split('\n');
                var model        = new EditCard
                {
                    AddressLine1 = addressLines[0],
                    AddressLine2 = addressLines.Length > 1 ? addressLines[1] : "",
                    City         = profile.BillingAddress.City,
                    Country      = profile.BillingAddress.Country,
                    FirstName    = profile.BillingAddress.First,
                    LastName     = profile.BillingAddress.Last,
                    State        = profile.BillingAddress.State,
                    Zip          = profile.BillingAddress.Zip,
                };

                return(PartialView(model));
            }
            catch (Exception ex)
            {
                ModelState.AddModelError("", Purchase.EditCard_Error);
                Log.Error(Purchase.EditCard_Error, ex);
            }

            return(PartialView());
        }
Exemplo n.º 5
0
        /// <summary>
        /// This is called in the special condition where a card is already added to Authorize.Net CIM but apparently not in the list of cards.
        /// This is not expected to happen usually, but could during testing or if we have to manually add cards.
        /// </summary>
        /// <returns></returns>
        public ActionResult ForceResync()
        {
            var transaction = new Transaction(IsolationLevel.ReadCommitted, "sync cards");

            try
            {
                CustomerGateway cg;
                var             customer = EnsureProfile(out cg);
                foreach (var cardProfile in customer.PaymentProfiles)
                {
                    var creditCard = new CreditCardEntity
                    {
                        AuthorizeId   = cardProfile.ProfileID,
                        FirstName     = cardProfile.BillingAddress.First,
                        LastName      = cardProfile.BillingAddress.Last,
                        AccountNumber = cardProfile.CardNumber.Replace("X", ""),
                        Address       = cardProfile.BillingAddress.Street
                    };
                    transaction.Add(creditCard);
                    creditCard.Save();

                    var userCard = new UserCreditCardEntity
                    {
                        UserId       = Membership.GetUser().GetUserEntity().UserId,
                        CreditCardId = creditCard.CreditCardId
                    };
                    transaction.Add(userCard);
                    userCard.Save();
                }

                transaction.Commit();
            }
            catch (Exception exc)
            {
                transaction.Rollback();
                ModelState.AddModelError("", Purchase.AddCard_Error);
                Log.Error(Purchase.SyncError, exc);
            }
            finally
            {
                transaction.Dispose();
            }
            return(new EmptyResult());
        }
Exemplo n.º 6
0
        public async Task CreateAsync_Success()
        {
            var cc = new CreditCardEntity()
            {
                CreditCardNumber = "9876-6534-1234-5249",
                Name             = "Micheal Smith",
                CVC    = 534,
                Expiry = DateTime.Parse("2023-05-01")
            };

            // Here I am testing actual repository as this is already dummy
            var creditCardRepository = this.serviceProvider.GetService <ICreditCardRepository>();

            await creditCardRepository.CreateAsync(cc);

            var allCC = await creditCardRepository.GetAllAsync();

            Assert.IsTrue(1 == allCC.Count());
        }
Exemplo n.º 7
0
        public async Task GetAllAsync_Success()
        {
            var cc1 = new CreditCardEntity()
            {
                CreditCardNumber = "9876-6534-1234-5249",
                Name             = "Micheal Smith",
                CVC    = 534,
                Expiry = DateTime.Parse("2023-05-01")
            };

            var cc2 = new CreditCardEntity()
            {
                CreditCardNumber = "9876-6534-1234-1234",
                Name             = "Micheal",
                CVC    = 514,
                Expiry = DateTime.Parse("2021-05-01")
            };

            var cc3 = new CreditCardEntity()
            {
                CreditCardNumber = "9876-6534-1234-3214",
                Name             = "Smith",
                CVC    = 025,
                Expiry = DateTime.Parse("2022-05-01")
            };

            // Here I am testing actual repository as this is already dummy
            var creditCardRepository = this.serviceProvider.GetService <ICreditCardRepository>();

            await creditCardRepository.CreateAsync(cc1);

            await creditCardRepository.CreateAsync(cc2);

            await creditCardRepository.CreateAsync(cc3);

            // act
            var result = await creditCardRepository.GetAllAsync();

            Assert.IsTrue(result.Any());
            Assert.AreEqual(3, result.Count());
        }
Exemplo n.º 8
0
        /// <inheritdoc/>
        public async Task <CreditCardEntity> Insert(CreditCardEntity creditCardEntity)
        {
            if (creditCardEntity is null)
            {
                throw new ArgumentNullException(nameof(creditCardEntity));
            }

            var lookupCreditCard = await GetCreditCard(creditCardEntity.CardNumber);

            if (lookupCreditCard == null)
            {
                creditCardEntity.CardHash   = Helper.HashString(creditCardEntity.CardNumber, _configuration["Secret"]);
                creditCardEntity.CardNumber = Helper.Encrypt(creditCardEntity.CardNumber);

                _context.CreditCards.Add(creditCardEntity);

                await _context.SaveChangesAsync();

                return(creditCardEntity);
            }

            return(lookupCreditCard);
        }
Exemplo n.º 9
0
        public async Task GetAsync_Success()
        {
            var cc = new CreditCardEntity()
            {
                CreditCardNumber = "9876-6534-1234-5249",
                Name             = "Micheal Smith",
                CVC    = 534,
                Expiry = DateTime.Parse("2023-05-01")
            };

            var ccNumber = "9876-6534-1234-5249";

            // Here I am testing actual repository as this is already dummy
            var creditCardRepository = this.serviceProvider.GetService <ICreditCardRepository>();

            await creditCardRepository.CreateAsync(cc);

            // act
            var result = await creditCardRepository.GetAsync(ccNumber);

            Assert.IsNotNull(result);
            Assert.AreEqual(ccNumber, result.CreditCardNumber);
        }
Exemplo n.º 10
0
 public string ReadyForTransfer(CreditCardEntity entity)
 {
     return("داتیس آرین قشم");
 }
Exemplo n.º 11
0
        protected override IEnumerable <FileParserInput> DownloadTransactions()
        {
            var downloadResults = new List <FileParserInput>();
            var valueParser     =
                ComponentContext.ResolveKeyed <IValueParser>(Constants.UniqueContainerKeys.ValueParserGermanDecimal);

            //bankaccount
            var iban    = GetAccounts()[0].FindElement(By.ClassName("iban")).Text.CleanString();
            var balance = (decimal)valueParser.Parse(
                GetAccounts()[0].FindElement(new ByChained(By.ClassName("amount"), By.TagName("span"))).Text);

            GetAccounts()[0].FindElement(By.ClassName("evt-paymentTransaction")).Click();

            var bankAccount = BankAccountRepository.GetByIban(iban);

            if (bankAccount == null)
            {
                bankAccount = new BankAccountEntity
                {
                    AccountNumber = iban,
                    Iban          = iban,
                    BankName      = Constants.DownloadHandler.BankNameDkb,
                    AccountName   = Constants.DownloadHandler.AccountNameGiro
                };
                BankAccountRepository.Insert(bankAccount);
            }
            var resultingFile = DownloadAndScreenshot(iban, "[id*=transactionDate]", "[id*=toTransactionDate]");

            downloadResults.Add(new FileParserInput
            {
                OwningEntity         = bankAccount,
                FileParser           = ComponentContext.ResolveKeyed <IFileParser>(Constants.UniqueContainerKeys.FileParserDkbGiro),
                FilePath             = resultingFile,
                TargetEntity         = typeof(DkbTransactionEntity),
                UniqueIdGroupingFunc = entity => ((DkbTransactionEntity)entity).AvailabilityDate.Date,
                OrderingFuncs        = new List <Func <object, object> > {
                    o => ((DkbTransactionEntity)o).AvailabilityDate.Date, o => ((DkbTransactionEntity)o).Text, o => ((DkbTransactionEntity)o).Amount
                },
                Balance             = balance,
                BalanceSelectorFunc =
                    () => BankTransactionRepository.TransactionSumForAccountId(bankAccount.Id)
            });

            NavigateHome();

            //credit card
            var creditCardNumberMasked = GetAccounts()[1].FindElement(By.XPath("td[1]/div[2]")).Text.CleanString();
            var creditBalance          = (decimal)valueParser.Parse(
                GetAccounts()[1].FindElement(new ByChained(By.ClassName("amount"), By.TagName("span"))).Text);

            GetAccounts()[1].FindElement(By.ClassName("evt-paymentTransaction")).Click();

            var creditCardAccount = CreditCardAccountRepository.GetByAccountNumberAndBankName(creditCardNumberMasked,
                                                                                              Constants.DownloadHandler.BankNameDkb);

            if (creditCardAccount == null)
            {
                creditCardAccount = new CreditCardEntity
                {
                    AccountNumber    = creditCardNumberMasked,
                    CreditCardNumber = null,
                    BankName         = Constants.DownloadHandler.BankNameDkb,
                    AccountName      = Constants.DownloadHandler.AccountNameVisa
                };
                CreditCardAccountRepository.Insert(creditCardAccount);
            }
            resultingFile = DownloadAndScreenshot(creditCardNumberMasked, "[id*=postingDate]", "[id*=toPostingDate]");
            downloadResults.Add(new FileParserInput
            {
                OwningEntity = creditCardAccount,
                FileParser   =
                    ComponentContext.ResolveKeyed <IFileParser>(Constants.UniqueContainerKeys.FileParserDkbCredit),
                FilePath             = resultingFile,
                TargetEntity         = typeof(DkbCreditTransactionEntity),
                UniqueIdGroupingFunc = entity => ((DkbCreditTransactionEntity)entity).AvailabilityDate.Date,
                OrderingFuncs        = new List <Func <object, object> > {
                    o => ((DkbCreditTransactionEntity)o).AvailabilityDate.Date, o => ((DkbCreditTransactionEntity)o).Text, o => ((DkbCreditTransactionEntity)o).Amount
                },
                Balance             = creditBalance,
                BalanceSelectorFunc = () => BankTransactionRepository.TransactionSumForAccountId(creditCardAccount.Id)
            });
            return(downloadResults);
        }
        protected override IEnumerable <FileParserInput> DownloadTransactions()
        {
            var valueParserDe =
                ComponentContext.ResolveKeyed <IValueParser>(Constants.UniqueContainerKeys.ValueParserGermanDecimal);
            var valueParserEn =
                ComponentContext.ResolveKeyed <IValueParser>(Constants.UniqueContainerKeys.ValueParserEnglishDecimal);

            Browser.WaitForJavaScript(7500);

            //settings
            Browser.FindElement(By.XPath("//*[@class='UIMenu']/ul/li[4]/a")).Click();
            Browser.WaitForJavaScript(5000);
            var     iban          = Browser.FindElements(By.ClassName("iban-split")).Select(element => element.Text).Aggregate("", (s, s1) => s + s1).CleanString();
            var     balanceString = Browser.FindElement(By.ClassName("UIHeader__account-balance")).Text.ExtractDecimalNumberString();
            decimal balance;

            if (balanceString.IndexOf(",", StringComparison.Ordinal) < balanceString.IndexOf(".", StringComparison.Ordinal))
            {
                balance = (decimal)valueParserEn.Parse(balanceString);
            }
            else
            {
                balance = (decimal)valueParserDe.Parse(balanceString);
            }

            var bankAccount = CreditCardAccountRepository.GetByAccountNumberAndBankName(iban, Constants.DownloadHandler.BankNameNumber26);

            if (bankAccount == null)
            {
                bankAccount =
                    CreditCardAccountRepository.Query()
                    .First(
                        entity =>
                        entity.BankName == Constants.DownloadHandler.BankNameNumber26 &&
                        entity.AccountName == Constants.DownloadHandler.AccountNameMasterCard);
                if (bankAccount == null)
                {
                    bankAccount = new CreditCardEntity
                    {
                        AccountNumber = iban,
                        BankName      = Constants.DownloadHandler.BankNameNumber26,
                        AccountName   = Constants.DownloadHandler.AccountNameMasterCard
                    };
                    CreditCardAccountRepository.Insert(bankAccount);
                }
            }

            NavigateHome();

            TakeScreenshot(iban);

            //Click download button
            Browser.FindElement(By.ClassName("csv")).Click();
            Browser.WaitForJavaScript();
            //Click previous a few times
            Browser.FindElement(By.ClassName("ui-datepicker-today")).Click();
            Browser.WaitForJavaScript(100);
            for (int i = 0; i < 6; i++)
            {
                Browser.FindElement(By.ClassName("ui-datepicker-prev")).Click();
                Browser.WaitForJavaScript(100);
            }
            //Click first day of month
            Browser.FindElement(new ByChained(By.ClassName("ui-datepicker-calendar"), By.XPath("//*[@data-handler='selectDay']"))).Click();

            var resultingFile = DownloadFromWebElement(Browser.FindElement(By.ClassName("ok")), iban);

            yield return(new FileParserInput
            {
                OwningEntity = bankAccount,
                FileParser = ComponentContext.ResolveKeyed <IFileParser>(Constants.UniqueContainerKeys.FileParserNumber26),
                FilePath = resultingFile,
                TargetEntity = typeof(Number26TransactionEntity),
                Balance = balance,
                BalanceSelectorFunc =
                    () => BankTransactionRepository.TransactionSumForAccountId(bankAccount.Id)
            });
        }
Exemplo n.º 13
0
        /// <summary>
        /// The seed.
        /// </summary>
        /// <param name="context">
        /// The context.
        /// </param>
        protected override void Seed(BankingDbContext context)
        {
            var format   = Constants.DayFormat;
            var provider = CultureInfo.InvariantCulture;

            var bankMilleniumGuid = Guid.Parse("{1496DD29-14BF-4753-AACC-35203E3947B7}");
            var bankBcpGuid       = Guid.Parse("{740ED738-D34C-4918-9CD9-9EC280F3C093}");
            var bankMontepioGuid  = Guid.Parse("F8C95B7D-A8EA-4FE6-95B5-930122E9A5A2");
            var bankCaixaGuid     = Guid.Parse("752ABB7E-FECE-4673-B561-690C56FC44D2");

            var bankMillenium = new BankEntity {
                Code = bankMilleniumGuid, Name = "Bank Millennium", Country = "Pl", Swift = "BIGBPLPW", Url = "http://www.bankmillennium.pl"
            };
            var bankBcp = new BankEntity {
                Code = bankBcpGuid, Name = "Millennium BCP", Country = "Pt", Swift = "MillePt", Url = "http://www.millenniumbcp.pt"
            };
            var bankMontepio = new BankEntity {
                Code = bankMontepioGuid, Name = "Montepio Geral", Country = "Pt", Swift = "MPIOPTPL", Url = "http://www.montepio.pt"
            };
            var bankCaixa = new BankEntity {
                Code = bankCaixaGuid, Name = "Caixa Geral de Depositos", Country = "Pt", Swift = "caixa", Url = "http://www.cgd.pt"
            };

            var euro = new CurrencyEntity {
                Currency = Constants.Eur, Order = 1, Name = "Euro", ReasonToOneEuro = 0
            };
            var pln = new CurrencyEntity {
                Currency = "Pln", Order = 2, Name = "Zloty", ReasonToOneEuro = 4.20m
            };

            context.SeedAddOrUpdate(
                p => p.Code,
                p => new { p.Country, p.Name, p.Swift, p.Url, p.ChangeAt },
                bankMillenium,
                bankBcp,
                bankMontepio,
                bankCaixa);

            context.SeedAddOrUpdate(
                p => p.Currency,
                p => new { p.ReasonToOneEuro, p.Order, p.ChangeAt },
                euro,
                pln,
                new CurrencyEntity {
                Currency = "USD", Name = "Dollar", Order = 3, ReasonToOneEuro = 1.20m
            });

            var goncaloGuid = Guid.Parse("9B8B32D1-A950-4C11-B77D-6FEFFAA4C17B");
            var guiGuid     = Guid.Parse("AF47E41B-344A-42AA-AEFF-07FE41E5D53C");
            var vascoGuid   = Guid.Parse("C7EC913C-95A7-4BAC-9C2E-96A5E5B9C420");
            var isildaGuid  = Guid.Parse("99B84DE3-2D7F-4D56-9592-092CEBA834B8");
            var filipaGuid  = Guid.Parse("43E1428A-454B-4E6F-B83E-5E44BD28346D");

            var goncaloUser = new UserEntity
            {
                Code     = goncaloGuid,
                Name     = "Goncalo",
                Surname  = "Gaspar",
                Email    = "*****@*****.**",
                IdNumber = "xxxxx",
                IdNumberExpirationDate = DateTime.Today.AddYears(2),
                Nif        = "xxxYYyyyx",
                HealthCare = "xxxxx",
                HealthCareExpirationDate = DateTime.Today.AddMonths(-5).AddDays(5),
                SocialSecurity           = "xxxxxx",
            };

            context.SeedAddOrUpdate(
                p => p.Code,
                p =>
                new
            {
                p.Name,
                p.Surname,
                p.Email,
                p.IdNumber,
                p.IdNumberExpirationDate,
                p.Passport,
                p.PassportExpirationDate,
                p.Nif,
                p.HealthCare,
                p.HealthCareExpirationDate,
                p.SocialSecurity,
                p.ChangeAt
            },
                goncaloUser);

            var goncaloPerson = new PersonEntity {
                Code = goncaloGuid, Name = "Goncalo", Surname = "Gaspar", Email = "*****@*****.**", IsArchived = false, OwnerCode = goncaloGuid
            };
            var guilhermePerson = new PersonEntity {
                Code = guiGuid, Name = "Guilherme", Surname = "Gaspar", Email = "*****@*****.**", IsArchived = false, OwnerCode = goncaloGuid
            };
            var vascoPerson = new PersonEntity {
                Code = vascoGuid, Name = "Vasco", Surname = "Gaspar", Email = "*****@*****.**", IsArchived = false, OwnerCode = goncaloGuid
            };
            var isildaPerson = new PersonEntity {
                Code = isildaGuid, Name = "Isilda", Surname = "Gaspar", Email = "*****@*****.**", IsArchived = false, OwnerCode = goncaloGuid
            };
            var filipaPerson = new PersonEntity {
                Code = filipaGuid, Name = "Filipa", Surname = "Viegas", Email = "*****@*****.**", IsArchived = false, OwnerCode = goncaloGuid
            };

            context.SeedAddOrUpdate(
                p => p.Code,
                p => new { p.Name, p.Surname, p.Email, p.IsArchived, p.IsMe, p.ChangeAt },
                goncaloPerson,
                guilhermePerson,
                vascoPerson,
                isildaPerson,
                filipaPerson);

            var currentGoncaloGuid = Guid.Parse("303B2432-C710-4DD6-A034-17EB10793CEB");

            var currentGoncalo = new CurrentAccountEntity
            {
                Code        = currentGoncaloGuid,
                Description = "Conta ordenado",
                Number      = "029.10.012311-5",
                Iban        = "PT50.0036.0029.99100123115.13",
                Currency    = Constants.Eur,
                Amount      = 462.52m,
                StartDate   = DateTime.ParseExact("01/02/2008", format, provider),
                Holder      = goncaloGuid,
                Owner       = goncaloGuid,
                Bank        = bankMontepioGuid,
                IsArchived  = false
            };

            var currentPlGoncaloGuid = Guid.Parse("28244669-e675-4f28-bfeb-3074eb556c40");

            var currentPlGoncalo = new CurrentAccountEntity
            {
                Code        = currentPlGoncaloGuid,
                Description = "Conta Polonia",
                Number      = "0247914561",
                Iban        = "PL92.1160.2202.00000002479145.61",
                Currency    = "PLN",
                Amount      = 1000.55m,
                StartDate   = DateTime.ParseExact("04/10/2013", format, provider),
                Holder      = goncaloGuid,
                Owner       = goncaloGuid,
                Bank        = bankMilleniumGuid,
                IsArchived  = false
            };

            var currentPlEuroGoncalo = new CurrentAccountEntity
            {
                Code        = Guid.Parse("BFC9DF65-8650-4925-AEFF-31BC2062C357"),
                Description = "Conta Polonia Euros",
                Number      = "0248923401",
                Iban        = "PL79.1160.2202.00000002489234.01",
                Currency    = Constants.Eur,
                Amount      = 0m,
                StartDate   = DateTime.ParseExact("21/10/2013", format, provider),
                Holder      = goncaloGuid,
                Owner       = goncaloGuid,
                Bank        = bankMilleniumGuid,
                IsArchived  = false
            };

            var currentGuiGuid = Guid.Parse("9D73C73A-7E1F-40A9-A52E-460010566B4F");

            var currentGuilherme = new CurrentAccountEntity
            {
                Code        = currentGuiGuid,
                Description = "Conta fun",
                Number      = "029.10.013309-8",
                Iban        = "PT50.0036.0029.99100133098.37",
                Currency    = Constants.Eur,
                Amount      = 707.93m,
                StartDate   = DateTime.ParseExact("01/01/2015", format, provider),
                Holder      = guiGuid,
                Owner       = goncaloGuid,
                Bank        = bankMontepioGuid,
                IsArchived  = false
            };

            var currentVasco = new CurrentAccountEntity
            {
                Code        = Guid.Parse("4F248CC3-73FC-47D8-B772-49EF64E35D4D"),
                Description = "Conta Corrente",
                Number      = "63566423095",
                Iban        = "PT50.0035.0995.00635664230.95",
                Currency    = Constants.Eur,
                Amount      = 0,
                StartDate   = DateTime.Today.AddYears(-2),
                Holder      = vascoGuid,
                Owner       = goncaloGuid,
                Bank        = bankCaixaGuid,
                IsArchived  = false
            };

            var currentFilipa = new CurrentAccountEntity
            {
                Code        = Guid.Parse("DF756217-78C0-4877-BB7B-E210A88603C0"),
                Description = "Conta Corrente",
                Number      = "4956598449",
                Iban        = "PT50.0033.0000.00049565984.49",
                Currency    = Constants.Eur,
                Amount      = 0m,
                StartDate   = DateTime.Today.AddYears(-2),
                Holder      = filipaGuid,
                Owner       = goncaloGuid,
                Bank        = bankBcpGuid,
                IsArchived  = false
            };

            var loanGoncalo = new LoanAccountEntity
            {
                Code               = Guid.Parse("f03f8057-e33e-4ebd-8b50-7005d8bd2188"),
                Description        = "Conta Casa",
                Number             = "029.21.100472-5",
                Currency           = Constants.Eur,
                Amount             = 47580.38m,
                StartDate          = DateTime.ParseExact("23/07/2008", format, provider),
                Holder             = goncaloGuid,
                Owner              = goncaloGuid,
                Bank               = bankMontepioGuid,
                InitialAmount      = 70000,
                PremiumPercentage  = 0,
                InterestNetRate    = 0.189m,
                LoanEndDate        = DateTime.ParseExact("28/07/2033", format, provider),
                LoanInterestRate   = 5.441m,
                LoanRelatedAccount = currentGoncaloGuid,
                IsArchived         = false
            };

            var loan2Goncalo = new LoanAccountEntity
            {
                Code               = Guid.Parse("5e919e86-0d5a-4eca-b805-0a22471443cb"),
                Description        = "Conta Carro",
                Number             = "029.27.100168-6",
                Currency           = Constants.Eur,
                Amount             = 23618.64m,
                StartDate          = DateTime.ParseExact("16/07/2010", format, provider),
                Holder             = goncaloGuid,
                Owner              = goncaloGuid,
                Bank               = bankMontepioGuid,
                InitialAmount      = 38500,
                PremiumPercentage  = 0,
                InterestNetRate    = 3.298m,
                LoanEndDate        = DateTime.ParseExact("16/07/2033", format, provider),
                LoanInterestRate   = 4.328m,
                LoanRelatedAccount = currentGoncaloGuid,
                IsArchived         = false
            };

            var savingGoncalo = new SavingAccountEntity
            {
                Code                   = Guid.Parse("ec7bdd2c-a3fe-42f0-9e91-b2e4333b9ae9"),
                Description            = "Poupanca Activa",
                Number                 = "732.15.420299-6",
                Currency               = Constants.Eur,
                Amount                 = 1058.38m,
                StartDate              = DateTime.ParseExact("03/08/2016", format, provider),
                Holder                 = goncaloGuid,
                Owner                  = goncaloGuid,
                Bank                   = bankMontepioGuid,
                AutomaticRenovation    = AutomaticRenovation.No,
                InterestCapitalization = true,
                InterestPayment        = Cadence.Yearly,
                SavingEndDate          = DateTime.ParseExact("03/08/2017", format, provider),
                SavingInterestRate     = 0.8m,
                SavingRelatedAccount   = currentGoncaloGuid,
                IsArchived             = false
            };

            var savingGui = new SavingAccountEntity
            {
                Code                   = Guid.Parse("AA111116-70F2-47CC-9C21-01A161D10D92"),
                Description            = "Poupanca Bue",
                Number                 = "732.15.417187-8",
                Currency               = Constants.Eur,
                Amount                 = 400.00m,
                StartDate              = DateTime.ParseExact("08/07/2015", format, provider),
                Holder                 = guiGuid,
                Owner                  = goncaloGuid,
                Bank                   = bankMontepioGuid,
                AutomaticRenovation    = AutomaticRenovation.YesSamePeriod,
                InterestCapitalization = false,
                InterestPayment        = Cadence.Yearly,
                SavingEndDate          = DateTime.ParseExact("08/07/2016", format, provider),
                SavingInterestRate     = 1.0m,
                SavingRelatedAccount   = currentGuiGuid,
                IsArchived             = false
            };

            var saving2Gui = new SavingAccountEntity
            {
                Code                   = Guid.Parse("7D2E570A-BBC3-41D6-B2E3-B47BB491D60C"),
                Description            = "Poupanca Bue",
                Number                 = "732.15.430705-0",
                Currency               = Constants.Eur,
                Amount                 = 250.00m,
                StartDate              = DateTime.ParseExact("13/11/2015", format, provider),
                Holder                 = guiGuid,
                Owner                  = goncaloGuid,
                Bank                   = bankMontepioGuid,
                AutomaticRenovation    = AutomaticRenovation.YesSamePeriod,
                InterestCapitalization = false,
                InterestPayment        = Cadence.Yearly,
                SavingEndDate          = DateTime.ParseExact("13/11/2017", format, provider),
                SavingInterestRate     = 1.0m,
                SavingRelatedAccount   = currentGuiGuid,
                IsArchived             = false
            };

            context.SeedAddOrUpdate(
                p => p.Code,
                p => new { p.Description, p.Number, p.Iban, p.Amount, p.ChangeAt, p.IsArchived },
                currentGoncalo,
                currentGuilherme,
                currentVasco,
                currentFilipa,
                currentPlGoncalo,
                currentPlEuroGoncalo);

            context.SeedAddOrUpdate(
                p => p.Code,
                p => new { p.Description, p.Number, p.Amount, p.ChangeAt, InicialAmount = p.InitialAmount, p.InterestNetRate, p.LoanEndDate, p.LoanInterestRate, p.PremiumPercentage, p.LoanRelatedAccount, p.IsArchived },
                loanGoncalo,
                loan2Goncalo);

            context.SeedAddOrUpdate(
                p => p.Code,
                p => new { p.Description, p.Number, p.Amount, p.ChangeAt, p.InterestCapitalization, p.SavingEndDate, p.SavingInterestRate, p.SavingRelatedAccount, p.IsArchived },
                savingGoncalo,
                savingGui,
                saving2Gui);

            var visa = new CreditCardEntity
            {
                Code         = Guid.Parse("951C4C66-EA1C-4285-B122-308CDF0243D5"),
                CardNumber   = "5731",
                CardProvider = CardProvider.Visa,
                Description  = "Visa Cinza",
                PaymentDay   = 7,
                Limit        = 1000,
                UsedLimit    = 300,
                Expire       = DateTime.ParseExact("31/01/2020", format, provider),
                Account      = currentGoncaloGuid,
                Bank         = bankMontepioGuid,
                Currency     = Constants.Eur,
                Holder       = goncaloGuid,
                Owner        = goncaloGuid,
                IsArchived   = false
            };

            context.SeedAddOrUpdate(
                p => p.Code,
                p => new { p.Description, p.Code, p.CardNumber, p.PaymentDay, p.Limit, p.UsedLimit, p.Expire, p.Account, p.Bank, p.Currency, p.Holder, p.Owner, p.ChangeAt },
                visa);

            var currentMontepio = new DebitCardEntity
            {
                Code         = Guid.Parse("B22056AC-91FD-4769-9056-E235F2757A43"),
                CardNumber   = "5594",
                CardProvider = CardProvider.VisaElectron,
                Description  = "Debito Amarelo",
                Expire       = DateTime.ParseExact("30/09/2019", format, provider),
                Account      = currentGoncaloGuid,
                Bank         = bankMontepioGuid,
                Currency     = Constants.Eur,
                Holder       = goncaloGuid,
                Owner        = goncaloGuid,
                IsArchived   = false
            };

            var currentMille = new DebitCardEntity
            {
                Code         = Guid.Parse("1C3E3692-1AD9-401D-B4AA-C06A31967A95"),
                CardNumber   = "5505",
                CardProvider = CardProvider.Visa,
                Description  = "Debito Cinza",
                Expire       = DateTime.ParseExact("30/09/2019", format, provider),
                Account      = currentPlGoncaloGuid,
                Bank         = bankMilleniumGuid,
                Currency     = "PLN",
                Holder       = goncaloGuid,
                Owner        = goncaloGuid,
                IsArchived   = false
            };

            context.SeedAddOrUpdate(
                p => p.Code,
                p => new { p.Description, p.Code, p.CardNumber, p.Expire, p.Account, p.Bank, p.Currency, p.Holder, p.Owner, p.ChangeAt, p.IsArchived },
                currentMontepio,
                currentMille);

            var preMille = new PrePaidCardEntity
            {
                Code            = Guid.Parse("283FBB3A-B988-42A7-95F6-8A377D0C9CC1"),
                CardNumber      = "9102",
                CardProvider    = CardProvider.Maestro,
                Description     = "PrePago Preto",
                Expire          = DateTime.ParseExact("31/05/2019", format, provider),
                Account         = currentPlGoncaloGuid,
                Bank            = bankMilleniumGuid,
                Currency        = "PLN",
                Holder          = goncaloGuid,
                Owner           = goncaloGuid,
                AvailableAmount = 500,
                MaximumAmount   = 500,
                IsArchived      = false
            };

            var preMontepio = new PrePaidCardEntity
            {
                Code            = Guid.Parse("905FADBF-F44D-4DFC-850D-0368DA41CF58"),
                CardNumber      = "5555",
                CardProvider    = CardProvider.VisaElectron,
                Description     = "PrePago Mae",
                Expire          = DateTime.ParseExact("31/05/2019", format, provider),
                Account         = currentGoncaloGuid,
                Bank            = bankMilleniumGuid,
                Currency        = Constants.Eur,
                Holder          = isildaGuid,
                Owner           = goncaloGuid,
                AvailableAmount = 50,
                MaximumAmount   = 1500,
                IsArchived      = false
            };

            context.SeedAddOrUpdate(
                p => p.Code,
                p => new { p.Description, p.Code, p.CardNumber, p.AvailableAmount, p.MaximumAmount, p.Expire, p.Account, p.Bank, p.Currency, p.Holder, p.Owner, p.ChangeAt, p.IsArchived },
                preMontepio,
                preMille);

            context.SaveChanges();
        }
Exemplo n.º 14
0
        public ActionResult EditCard(int creditcardid, EditCard model)
        {
            var card = new CreditCardEntity(creditcardid);

            if (card.IsNew)
            {
                throw new HttpException(404, SharedRes.Error.NotFound_CreditCard);
            }

            if (!Permissions.UserHasPermission("Edit", card))
            {
                throw new HttpException(401, SharedRes.Error.Unauthorized_CreditCard);
            }

            if (ModelState.IsValid)
            {
                var transaction = new Transaction(IsolationLevel.ReadCommitted, "add card");
                try
                {
                    CustomerGateway cg;
                    var             customer = RoleUtils.IsUserServiceAdmin()
                                       ? EnsureProfile(out cg, card.UserCreditCards.First().User)
                                       : EnsureProfile(out cg);

                    var profile = customer.PaymentProfiles.First(x => x.ProfileID == card.AuthorizeId);

                    // update the card info
                    if (!string.IsNullOrEmpty(model.CardNumber))
                    {
                        profile.CardNumber     = model.CardNumber;
                        profile.CardCode       = model.SecurityCode;
                        profile.CardExpiration = model.CardMonth + "/" + model.CardYear;
                        card.AccountNumber     = model.CardNumber.Substring(model.CardNumber.Length - 4, 4);
                    }

                    // update the billing address
                    profile.BillingAddress = new AuthorizeNet.Address
                    {
                        First   = model.FirstName,
                        Last    = model.LastName,
                        Street  = model.AddressLine1 + Environment.NewLine + model.AddressLine2,
                        State   = model.State,
                        Country = model.Country,
                        City    = model.City,
                        Zip     = model.Zip
                    };
                    card.FirstName = model.FirstName;
                    card.LastName  = model.LastName;
                    card.Address   = model.AddressLine1;
                    transaction.Add(card);
                    card.Save();

                    cg.UpdatePaymentProfile(customer.ProfileID, profile);

                    transaction.Commit();
                    return(new EmptyResult());
                }
                catch (Exception ex)
                {
                    transaction.Rollback();
                    ModelState.AddModelError("", Purchase.EditCard_Error);
                    Log.Error(Purchase.EditCard_Error, ex);
                }
                finally
                {
                    transaction.Dispose();
                }
            }

            Response.StatusCode             = 417;
            Response.TrySkipIisCustomErrors = true;

            return(PartialView(model));
        }
Exemplo n.º 15
0
        public ActionResult AddCard(AddCard model)
        {
            if (ModelState.IsValid)
            {
                var transaction = new Transaction(IsolationLevel.ReadCommitted, "add card");
                try
                {
                    CustomerGateway cg;
                    var             customer = EnsureProfile(out cg);

                    var addr = new AuthorizeNet.Address
                    {
                        First   = model.FirstName,
                        Last    = model.LastName,
                        Street  = model.AddressLine1 + Environment.NewLine + model.AddressLine2,
                        State   = model.State,
                        Country = model.Country,
                        City    = model.City,
                        Zip     = model.Zip
                    };

                    // save the customer profile for the currently logged on user
                    var creditCard = new CreditCardEntity()
                    {
                        FirstName     = model.FirstName,
                        LastName      = model.LastName,
                        AccountNumber = model.CardNumber.Substring(model.CardNumber.Length - 4, 4),
                        Address       = model.AddressLine1
                    };

                    creditCard.AuthorizeId = cg.AddCreditCard(
                        customer.ProfileID,
                        model.CardNumber,
                        model.CardMonth,
                        model.CardYear,
                        model.SecurityCode,
                        addr);
                    transaction.Add(creditCard);
                    creditCard.Save();

                    var userCard = new UserCreditCardEntity
                    {
                        UserId       = Membership.GetUser().GetUserEntity().UserId,
                        CreditCardId = creditCard.CreditCardId
                    };
                    transaction.Add(userCard);
                    userCard.Save();

                    transaction.Commit();

                    return(new EmptyResult());
                }
                catch (Exception ex)
                {
                    transaction.Rollback();
                    // try to get all profiles from authorize.net
                    if (ex.Message.Contains("duplicate"))
                    {
                        ForceResync();
                    }
                    else
                    {
                        ModelState.AddModelError("", Purchase.AddCard_Error);
                    }
                    Log.Error(Purchase.AddCard_Error, ex);
                }
                finally
                {
                    transaction.Dispose();
                }
            }

            Response.StatusCode             = 417;
            Response.TrySkipIisCustomErrors = true;

            return(PartialView(model));
        }