/// <summary>
 /// Записує об'єкт у текстовий файл
 /// і виводить повідомлення про стан процесу
 /// </summary>
 private void WriteTextFile()
 {
     if (model.Length > 0)
     {
         try
         {
             model.WriteToTextFile(StringConstants.DefaultTextFileName);
             Console.WriteLine(StringConstants.WriteAccept
                               + StringConstants.DefaultTextFileName);
             Console.ReadKey();
         }
         catch (IOException)
         {
             ReadFromConsole.WriteError(StringConstants.FileIOError);
         }
         catch (UnauthorizedAccessException)
         {
             ReadFromConsole.WriteError(StringConstants.AccessException);
         }
     }
     else
     {
         ReadFromConsole.WriteError(StringConstants.EmptyList);
     }
 }
        /// <summary>
        /// Зчитує список операцій з бінарного файлу
        /// і виводить повідомлення про стан процесу
        /// </summary>
        private void ReadFromBinaryFile()
        {
            List <Sale> read;

            try
            {
                read = Balance.ReadFromBinaryFile(StringConstants.DefaultBinaryFileName);
                int count = model.Length;
                foreach (Sale element in read)
                {
                    model.Add(element);
                }

                Console.WriteLine(StringConstants.ReadAccept + StringConstants.DefaultBinaryFileName);
                PrintSimilarsCount(count, read.Count);
                PrintTableModel(model);
            }
            catch (FileNotFoundException)
            {
                ReadFromConsole.WriteError(StringConstants.FileNotFound);
            }
            catch (IOException)
            {
                ReadFromConsole.WriteError(StringConstants.FileIOError);
            }
        }
        private void SearchByPrice()
        {
            Console.Write(StringConstants.GoodsPrice);
            Balance searched = model.Search(model.CompareByPrice,
                                            ReadFromConsole.ReadDouble(StringConstants.PositiveNumRegex));

            PrintResults(searched);
        }
        /// <summary>
        /// Забезпечує безпечне ввдееня даних операції продажу користувачем
        /// </summary>
        /// <returns>Ініціалзований користувацькими даними об'єкт</returns>
        public Sale Input()
        {
            Seller seller   = InputSeller();
            Date   saleDate = InputDate(StringConstants.DaySell, StringConstants.MonthSell);
            Goods  goods    = InputGoods();

            Console.Write(StringConstants.Amount);
            double amount = ReadFromConsole.ReadDouble(StringConstants.PositiveNumRegex);

            return(new Sale(seller, goods, saleDate, amount));
        }
        private void SearchByName()
        {
            Console.Write(StringConstants.GoodsName);
            Balance searched = null;

            try
            {
                searched = (model.Search(model.CompareByName,
                                         ReadFromConsole.ReadStringAndReaction(
                                             StringConstants.GoodsNameRegex,
                                             StringConstants.OnlyCharactersAndNumbersError,
                                             RegexOptions.IgnoreCase)));
            }
            finally
            {
                PrintResults(searched);
            }
        }
        /// <summary>
        /// Забезпечує безпечне введеня даних продавця користувачем
        /// </summary>
        /// <returns>ініціалізований об'єкт введеними користувачем значеннями</returns>
        public Seller InputSeller()
        {
            Date recruited = InputDate(StringConstants.SellerEmployeDay, StringConstants.SellerEmployeMonth);

            Console.Write(StringConstants.SellerName);
            string name = ReadFromConsole.ReadStringAndReaction(
                StringConstants.NameSurnameRegex,
                StringConstants.OnlyCharactersError,
                RegexOptions.IgnoreCase);

            Console.Write(StringConstants.SellerSurname);
            string surname = ReadFromConsole.ReadStringAndReaction(
                StringConstants.NameSurnameRegex,
                StringConstants.OnlyCharactersError,
                RegexOptions.IgnoreCase);

            return(new Seller(name, surname, recruited));
        }
        /// <summary>
        /// Забезпечує безпечне введення даних товару користувачем
        /// </summary>
        /// <returns>Ініціалізований користувачем об'єкт</returns>
        public Goods InputGoods()
        {
            Date receiving = InputDate(StringConstants.GoodsReceiptDay, StringConstants.GoodsReceiptMonth);

            Console.Write(StringConstants.GoodsName);
            string name = ReadFromConsole.ReadStringAndReaction(
                StringConstants.GoodsNameRegex,
                StringConstants.OnlyCharactersAndNumbersError,
                RegexOptions.IgnoreCase);

            Console.Write(StringConstants.GoodsPrice);
            double price = ReadFromConsole.ReadDouble(StringConstants.PositiveNumRegex);

            Console.Write(StringConstants.GoodsType);
            GoodsType type = UpDownChoice();

            return(new Goods(name, price, receiving, type));
        }