Ejemplo n.º 1
0
        private static void CreateWithdrawl(Bank bank)
        {
            Output.WhiteColor("* Uttag *");

            while (true)
            {
                if (AskForAccount(bank, out var id))
                {
                    var account = bank.GetSingleAccount(id);
                    Console.WriteLine($"Saldo innan uttag: {account.Balance.GetSwedishKr()}");

                    var amount = Input.AskForAmount();

                    if (account.ValidateWithdrawl(account, amount, bank, TransactionType.Withdrawl))
                    {
                        account.CreateTransaction(account, null, amount, bank, TransactionType.Withdrawl);
                    }
                    else
                    {
                        Output.RedColor("\nTäckning saknas på kontot\n");
                    }


                    Console.WriteLine($"Saldo efter uttag: {account.Balance.GetSwedishKr()}");

                    break;
                }
                else
                {
                    Output.RedColor("Kontot existerar inte. Försök igen.");
                }
            }

            PrintStatistics(bank);
        }
Ejemplo n.º 2
0
        private static void Main(string[] args)
        {
            try
            {
                Console.ForegroundColor = ConsoleColor.Cyan;

                var menu = new Menu();
                var bank = new Bank();
                var file = new FileManagement();

                // Get current files
                //file.PrintCurrentDirectory();
                file.GetFiles(bank);

                Console.WriteLine("\n*********************************");
                Console.WriteLine("* Välkommen till kundbilden 2.0 *");
                Console.WriteLine("*********************************\n");

                menu.PrintMenu();
                menu.GetChoiceAndExecute(bank);
            }
            catch (Exception)
            {
                Output.RedColor("Någonting gick helt galet!\nRing supporten på (08-701) 125 80");
            }



            Console.ReadLine();
        }
Ejemplo n.º 3
0
        private static void CreateTransfer(Bank bank)
        {
            Output.WhiteColor("* Överföring *");

            while (true)
            {
                Console.Write($"[Från] ");
                var fromId    = Input.AskForAccount();
                var fromCheck = Input.CheckForAccountWithAccountId(fromId, bank);

                if (fromCheck == false)
                {
                    Output.RedColor("[Från] kontot existerar inte. Försök igen.");
                    continue;
                }

                Console.Write("[Till] ");
                var toId    = Input.AskForAccount();
                var toCheck = Input.CheckForAccountWithAccountId(toId, bank);

                if (toCheck)
                {
                    // if both from account and to account exists
                    var fromAcc = bank.GetSingleAccount(fromId);
                    var toAcc   = bank.GetSingleAccount(toId);
                    var amount  = Input.AskForAmount();

                    // Print before change
                    Console.WriteLine($"Saldo på konto ({fromAcc.Id}) innan överföring: {fromAcc.Balance.GetSwedishKr()}");
                    Console.WriteLine($"Saldo på konto ({toAcc.Id}) innan överföring: {toAcc.Balance.GetSwedishKr()}");

                    if (fromAcc.ValidateWithdrawl(fromAcc, amount, bank, TransactionType.Transfer))
                    {
                        fromAcc.CreateTransaction(fromAcc, toAcc, amount, bank, TransactionType.Transfer);
                    }
                    else
                    {
                        Output.RedColor("\nTäckning saknas på kontot\n");
                    }


                    // Print after change
                    Console.WriteLine($"Saldo på konto ({fromAcc.Id}) efter överföring: {fromAcc.Balance.GetSwedishKr()}");
                    Console.WriteLine($"Saldo på konto ({toAcc.Id}) efter överföring: {toAcc.Balance.GetSwedishKr()}");

                    break;
                }
                else
                {
                    Output.RedColor("[Till] kontot existerar inte. Försök igen.");
                }


                PrintStatistics(bank);
            }
        }
Ejemplo n.º 4
0
        public void GetFiles(Bank bank)
        {
            // Get customer and accounts
            try
            {
                // Get customer
                try
                {
                    GetCustomersAndAccounts(bank);
                }
                catch (FormatException)
                {
                    // Tar hand om övriga fel
                    Console.WriteLine($"Försöker hämta kunder från {CustomerAndAccountFile}, men formatering misslyckades.\n" +
                                      $"Fel uppkom på rad {_customerAndAccountFileCounter}");
                    throw;
                }
            }
            catch (IOException)
            {
                // Tar hand om fel vid inläsning
                Output.RedColor($"Kunde inte läsa in {CustomerAndAccountFile}...");
                Console.WriteLine($"Se till att filen finns i:{Path}");
                throw;
            }


            AddAccountsToCustomer(bank);

            // Get transactions
            //try
            //{
            //    GetTransactions(bank);
            //}
            //catch (IOException)
            //{
            //    // Tar hand om fel vid inläsning
            //    Output.RedColor($"Kunde inte läsa in {TranFile}...");
            //    Console.WriteLine($"Se till att filen finns i:{Path}");
            //    throw;
            //}
            //catch (FormatException)
            //{
            //    // Tar hand om övriga fel
            //    Console.WriteLine($"Försöker hämta transaktioner från {TranFile}, men formatering misslyckades.\n" +
            //                      $"Fel uppkom på rad {_tranFileCounter}");
            //    throw;
            //}
        }
Ejemplo n.º 5
0
        public void DeleteCustomer(Customer customer)
        {
            var checkSumOfAccounts =
                ListOfAccounts.Where(x => x.CustomerId == customer.Id).Select(y => y.Balance).Sum();

            if (checkSumOfAccounts == 0)
            {
                ListOfAccounts.Remove(customer.Accounts.FirstOrDefault());
                ListOfCustomers.Remove(customer);
                Output.GreenColor($"Borttaget kundnummer: {customer.Id}");
            }
            else
            {
                Output.RedColor("Det går inte att ta bort en kund som har saldo större en noll på något av sina konton.");
            }
        }
Ejemplo n.º 6
0
        public static int AskForAccount()
        {
            while (true)
            {
                Console.Write("Ange kontonummer: ");

                if (int.TryParse(Console.ReadLine(), out int accountId))
                {
                    return(accountId);
                }
                else
                {
                    Output.RedColor("Mata in kontonummer med siffror. Försök igen.");
                }
            }
        }
Ejemplo n.º 7
0
        public static int AskForCustomer()
        {
            while (true)
            {
                Console.Write("Ange kundnummer: ");

                if (int.TryParse(Console.ReadLine(), out int customerId))
                {
                    return(customerId);
                }
                else
                {
                    Output.RedColor("Mata in kundnummer med siffror. Försök igen.");
                }
            }
        }
Ejemplo n.º 8
0
        public static int AskForAccountIdOrCustomerId()
        {
            while (true)
            {
                Console.Write("Kundnummer eller kontonummer? > ");

                if (int.TryParse(Console.ReadLine(), out int customerNrOrAccountNr))
                {
                    return(customerNrOrAccountNr);
                }
                else
                {
                    Output.RedColor("Mata in kundnummer eller kontonummer med siffror. Försök igen.");
                }
            }
        }
Ejemplo n.º 9
0
        private static void AmendCreditInterestRate(Bank bank)
        {
            Output.WhiteColor("* Ändra utlåningsränta *");
            while (true)
            {
                if (AskForAccount(bank, out var id))
                {
                    var account = bank.GetSingleAccount(id);


                    // Multiply rate with 100
                    var procentBefore = account.CreditInterestRate * 100;

                    Console.WriteLine($"Nuvarande utlåningsränta (årsbasis): {procentBefore.GetProcent()}");

                    var rate = Input.AskForRate();

                    if (account.validateCreditRate(account, rate))
                    {
                        account.AmendCreditInterestRate(account, rate);
                        var procentAfter = account.CreditInterestRate * 100;

                        Output.GreenColor($"Ny utlåningsränta: {procentAfter.GetProcent()}");
                    }
                    else
                    {
                        Output.RedColor("\nUtlåningsräntan kan inte vara mindre än noll.\n");
                    }


                    //if (account.validateCreditRate())
                    //{
                    //    account.AmendCreditInterestRate(account);
                    //}
                    //else
                    //{
                    //    Output.RedColor("\nUtlåningsräntan kan inte vara mindre än noll.\n");
                    //}
                    break;
                }
                else
                {
                    Output.RedColor("Kontot existerar inte. Försök igen.");
                }
            }
        }
Ejemplo n.º 10
0
 private static void AmendCreditLimit(Bank bank)
 {
     Output.WhiteColor("* Ändra kreditlimit *");
     while (true)
     {
         if (AskForAccount(bank, out var id))
         {
             var account = bank.GetSingleAccount(id);
             account.AmendCreditLimit(account);
             break;
         }
         else
         {
             Output.RedColor("Kontot existerar inte. Försök igen.");
         }
     }
 }
Ejemplo n.º 11
0
        public static string AskFor(string input)
        {
            Console.Write($"{input}: ");
            var text = Console.ReadLine();

            if (text != null && !text.Equals(""))
            {
                return(text.UpperFirstLetter());
            }

            // Ask the same question again
            Output.RedColor($"{input} är obligatoriskt");
            AskFor(input);

            // Return text if text is not equal to null or ""
            return(text);
        }
Ejemplo n.º 12
0
        private static void PrintTransactions(Bank bank)
        {
            Output.WhiteColor("* Sök Transaktioner *");

            while (true)
            {
                if (AskForAccount(bank, out var id))
                {
                    var account = bank.GetSingleAccount(id);
                    bank.PrintTransactionsFor(account);
                    break;
                }
                else
                {
                    Output.RedColor("Kontot existerar inte. Försök igen.");
                }
            }
        }
Ejemplo n.º 13
0
        private static void DeleteAccount(Bank bank)
        {
            Output.WhiteColor("* Ta bort konto *");

            while (true)
            {
                if (AskForAccount(bank, out var id))
                {
                    var account = bank.GetSingleAccount(id);
                    bank.DeleteAccount(account);
                    break;
                }
                else
                {
                    Output.RedColor("Kunden existerar inte. Försök igen.");
                }
            }
            PrintStatistics(bank);
        }
Ejemplo n.º 14
0
        private static void ShowCustomer(Bank bank)
        {
            Output.WhiteColor("* Visa kundbild *");

            while (true)
            {
                var id    = Input.AskForAccountIdOrCustomerId();
                var check = Input.CheckForCustomerWithCustomerIdOrAccountId(id, bank, out var customerId);

                if (check)
                {
                    var customer = bank.GetSingleCustomer(customerId);
                    bank.ShowCustomer(customer);
                    break;
                }
                else
                {
                    Output.RedColor("Kundnumret eller kontot existerar inte. Försök igen.");
                }
            }
        }
Ejemplo n.º 15
0
        private static void AmendInterestRate(Bank bank)
        {
            Output.WhiteColor("* Ändra inlåningsränta *");
            while (true)
            {
                if (AskForAccount(bank, out var id))
                {
                    var account = bank.GetSingleAccount(id);


                    // Multiply rate with 100
                    var procentBefore = account.InterestRate * 100;

                    Console.WriteLine($"Nuvarande inlåningsränta (årsbasis): {procentBefore.GetProcent()}");

                    // Get new interest rate and update it on the specific account
                    var rate = Input.AskForRate();

                    if (account.ValidateInterestRate(account, rate))
                    {
                        account.AmendInterestRate(account, rate);
                        var procentAfter = account.InterestRate * 100;

                        Output.GreenColor($"Ny inlåningsränta: {procentAfter.GetProcent()}");
                    }
                    else
                    {
                        Output.RedColor("\nInlåningsräntan kan inte vara mindre än noll.\n");
                    }



                    break;
                }
                else
                {
                    Output.RedColor("Kontot existerar inte. Försök igen.");
                }
            }
        }
Ejemplo n.º 16
0
        private static void DeleteCustomer(Bank bank)
        {
            Output.WhiteColor("* Ta bort kund *");

            while (true)
            {
                var id    = Input.AskForCustomer();
                var check = Input.CheckForCustomerWithCustomerId(id, bank);

                if (check)
                {
                    var customer = bank.GetSingleCustomer(id);
                    bank.DeleteCustomer(customer);
                    break;
                }
                else
                {
                    Output.RedColor("Kunden existerar inte. Försök igen.");
                }
            }
            PrintStatistics(bank);
        }
Ejemplo n.º 17
0
        public void DeleteAccount(Account account)
        {
            // Check sum of accounts
            var checkSumOfAccounts =
                ListOfAccounts.Where(x => x.Id == account.Id).Select(y => y.Balance).Sum();

            // Count accounts
            var countAccounts = ListOfAccounts.Count(x => x.CustomerId == account.CustomerId);
            var customer      = ListOfCustomers.FirstOrDefault(x => x.Id == account.CustomerId);

            // Can not delete account if sum is not zero or there is only one account
            // (customer always need an account)
            if (checkSumOfAccounts == 0 && countAccounts > 1)
            {
                ListOfAccounts.Remove(account);
                customer.Accounts.Remove(account);
                Output.GreenColor($"Borttaget kontonummer: {account.Id}");
            }
            else
            {
                Output.RedColor("Kan ej ta bort kontot om:\n- det finns saldo\n- det är kundens enda konto");
            }
        }
Ejemplo n.º 18
0
        private static void CreateContribution(Bank bank, Account acc)
        {
            Output.WhiteColor("* Insättning *");

            while (true)
            {
                if (AskForAccount(bank, out var id))
                {
                    var account = bank.GetSingleAccount(id);
                    Console.WriteLine($"Saldo innan insättning: {account.Balance.GetSwedishKr()}");

                    var amount = Input.AskForAmount();
                    acc.CreateTransaction(null, account, amount, bank, TransactionType.Contribution);

                    Console.WriteLine($"Saldo efter insättning: {account.Balance.GetSwedishKr()}");
                    break;
                }
                else
                {
                    Output.RedColor("Kontot existerar inte. Försök igen.");
                }
            }
            PrintStatistics(bank);
        }
Ejemplo n.º 19
0
        private static void AddNewAccount(Bank bank)
        {
            Output.WhiteColor("* Lägg till konto *");

            while (true)
            {
                var id    = Input.AskForCustomer();
                var check = Input.CheckForCustomerWithCustomerId(id, bank);

                if (check)
                {
                    var customer = bank.GetSingleCustomer(id);
                    bank.AddNewAccount(customer);

                    Console.WriteLine($"Nytt kontonummer: {customer.Accounts.Last().Id}");
                    break;
                }
                else
                {
                    Output.RedColor("Kunden existerar inte. Försök igen.");
                }
            }
            PrintStatistics(bank);
        }
Ejemplo n.º 20
0
        public static decimal ConvertStringToDecimalWithComma(string text)
        {
            while (true)
            {
                Console.Write($"{text}");

                if (decimal.TryParse(Console.ReadLine(), out var nr))
                {
                    if (nr >= 0)
                    {
                        return(nr);
                    }
                    else
                    {
                        Output.RedColor("Belopp måste vara positivt");
                        continue;
                    }
                }
                else
                {
                    Output.RedColor("Try again!");
                }
            }
        }
Ejemplo n.º 21
0
        private void GetTransactions(Bank bank)
        {
            using (var reader = new StreamReader(Path + TranFile))
            {
                _tranFileCounter = 0;

                var textfromfile = reader.ReadLine();

                while (textfromfile != null)
                {
                    _tranFileCounter++;

                    var columns = textfromfile.Split(';');

                    // Check next row
                    textfromfile = reader.ReadLine();

                    // Ignore the first line
                    if (_tranFileCounter == 1)
                    {
                        continue;
                    }

                    /* How the writeline looks like
                     * sw.WriteLine($"{item.TransactionId};{balance};{amount};" +
                     *           $"{item.CustomerId};{from};{to};" +
                     *           $"{item.TrnDate};{item.Type}");
                     */

                    // Get enum value
                    if (Enum.TryParse(columns[7], out TransactionType type))
                    {
                    }
                    else
                    {
                        // Throw exception instead?
                        Output.RedColor("Kunde inte omvandla transaktionstypen från filen");
                    }

                    // Check if value is ""
                    int?fromAcc = null;
                    int?toAcc   = null;
                    if (columns[4] != "" && columns[4] != null)
                    {
                        fromAcc = int.Parse(columns[4]);
                    }
                    if (columns[5] != "" && columns[5] != null)
                    {
                        toAcc = int.Parse(columns[5]);
                    }

                    // Check transactions
                    bank.ListOfTransactions.Add(new Transaction()
                    {
                        Id = int.Parse(columns[0]),
                        FromAccountBalance = ConvertStringToDecimalWithDecimal(columns[1]),
                        Amount             = ConvertStringToDecimalWithDecimal(columns[2]),
                        FromAccountId      = fromAcc,
                        ToAccountId        = toAcc,
                        Date = DateTime.Parse(columns[6]),
                        Type = type
                    });
                }
            }

            Console.WriteLine($"Antal transaktioner: {bank.ListOfTransactions.Count}");
        }
Ejemplo n.º 22
0
        public void GetChoiceAndExecute(Bank bank)
        {
            try
            {
                var file    = new FileManagement();
                var account = new Account();
                //var trnMgm = new TransactionManagement();

                while (true)
                {
                    Console.Write("\n> ");
                    if (int.TryParse(Console.ReadLine(), out var nr))
                    {
                        switch (nr)
                        {
                        case 0:
                            file.QuitAndSave(bank);
                            break;

                        case 1:
                            Search(bank);
                            break;

                        case 2:
                            ShowCustomer(bank);
                            break;

                        case 3:
                            AddNewCustomer(bank);
                            break;

                        case 4:
                            DeleteCustomer(bank);
                            break;

                        case 5:
                            AddNewAccount(bank);
                            break;

                        case 6:
                            DeleteAccount(bank);
                            break;

                        case 7:
                            CreateContribution(bank, account);
                            break;

                        case 8:
                            CreateWithdrawl(bank);
                            break;

                        case 9:
                            CreateTransfer(bank);
                            break;

                        case 10:
                            PrintTransactions(bank);
                            break;

                        case 11:
                            account.CalculateDailyInterest(bank);
                            PrintStatistics(bank);
                            break;

                        case 12:
                            AmendInterestRate(bank);
                            break;

                        case 13:
                            AmendCreditLimit(bank);
                            break;

                        case 14:
                            AmendCreditInterestRate(bank);
                            break;

                        case 100:
                            Console.Clear();
                            PrintMenu();
                            break;

                        default:
                            Console.WriteLine("Try with a valid number instead!");
                            continue;
                        }
                    }
                    else
                    {
                        Console.WriteLine("Try with numbers instead");
                    }
                }
            }
            catch (IOException)
            {
                Output.RedColor("Problem vid läsning eller sparande till fil. Kontakta admin!");
                GetChoiceAndExecute(bank);
            }
            catch (FormatException)
            {
                Output.RedColor("Problem vid konvertering från text till nummer. Försök igen!");
                GetChoiceAndExecute(bank);
            }
            catch (ArgumentNullException)
            {
                Output.RedColor("Input existerar ej i listan. Försök igen!");
                GetChoiceAndExecute(bank);
            }
            catch (Exception)
            {
                Output.RedColor("Någonting gick fel... Försök igen!");
                GetChoiceAndExecute(bank);
            }
        }