/// <summary>
        /// Method creates new record.
        /// </summary>
        /// <param name="param">Instance that describe all information of record.</param>
        /// <returns>Identification number of record.</returns>
        public int CreateRecord(ObjectParametrsForCreateAndEditRecord param)
        {
            if (!this.validator.ValidatePatameters(param))
            {
                return(0);
            }

            var record = new FileCabinetRecord
            {
                Id                  = this.list.Count + 1,
                FirstName           = param.FirstName,
                LastName            = param.LastName,
                DateOfBirth         = param.DateOfBirth,
                SuccsesfullDeals    = param.SuccsesfullDeals,
                AdditionCoefficient = param.AdditionCoefficient,
                ManagerClass        = param.ManagerClass,
            };

            this.list.Add(record);

            if (this.firstNameDictionary.ContainsKey(record.FirstName.ToUpper(CultureInfo.CurrentCulture)))
            {
                this.firstNameDictionary[record.FirstName.ToUpper(CultureInfo.CurrentCulture)] = this.list.Where <FileCabinetRecord>(t => t.FirstName == record.FirstName).ToList();
            }
            else
            {
                this.firstNameDictionary.Add(record.FirstName.ToUpper(CultureInfo.CurrentCulture), this.list.Where <FileCabinetRecord>(t => t.FirstName == record.FirstName).ToList());
            }

            if (this.lastNameDictionary.ContainsKey(record.LastName.ToUpper(CultureInfo.CurrentCulture)))
            {
                this.lastNameDictionary[record.LastName.ToUpper(CultureInfo.CurrentCulture)] = this.list.Where <FileCabinetRecord>(t => t.LastName == record.LastName).ToList();
            }
            else
            {
                this.lastNameDictionary.Add(record.LastName.ToUpper(CultureInfo.CurrentCulture), this.list.Where <FileCabinetRecord>(t => t.LastName == record.LastName).ToList());
            }

            if (this.dateOfBirthNameDictionary.ContainsKey(record.DateOfBirth))
            {
                this.dateOfBirthNameDictionary[record.DateOfBirth] = this.list.Where <FileCabinetRecord>(t => t.DateOfBirth == record.DateOfBirth).ToList();
            }
            else
            {
                this.dateOfBirthNameDictionary.Add(record.DateOfBirth, this.list.Where <FileCabinetRecord>(t => t.DateOfBirth == record.DateOfBirth).ToList());
            }

            return(record.Id);
        }
        /// <summary>
        /// Method implements custom validation.
        /// </summary>
        /// <param name="param">Instance that describe all information of record.</param>
        /// <returns>Return true if validation is okey or false with ArgumentExeption if validation is not okey.</returns>
        public bool ValidatePatameters(ObjectParametrsForCreateAndEditRecord param)
        {
            if (param.FirstName == null || param.FirstName.Length < 2 || param.FirstName.Length > 40 || param.FirstName.Contains(' ', StringComparison.CurrentCulture))
            {
                return(false);

                throw new ArgumentException("parametr \"firstName\" is not correct.");
            }

            if (param.LastName == null || param.LastName.Length < 2 || param.LastName.Length > 40 || param.LastName.Contains(' ', StringComparison.CurrentCulture))
            {
                return(false);

                throw new ArgumentException("parametr \"lastName\" is not correct.");
            }

            if (param.DateOfBirth == null || param.DateOfBirth < new DateTime(1940, 1, 1) || param.DateOfBirth >= DateTime.Now)
            {
                return(false);

                throw new ArgumentException("parametr \"dateOfBirth\" is not correct.");
            }

            if (param.SuccsesfullDeals <= 0)
            {
                return(false);

                throw new ArgumentException("parametr \"succsesfullDeals\" is not correct.");
            }

            if (param.AdditionCoefficient <= 0)
            {
                return(false);

                throw new ArgumentException("parametr \"additionCoefficient\" is not correct.");
            }

            if (!char.IsLetter(param.ManagerClass))
            {
                return(false);

                throw new ArgumentException("parametr \"manegerClass\" is not correct.");
            }

            return(true);
        }
        /// <summary>
        ///  Method edited an existing record.
        /// </summary>
        /// <param name="id">Identification number of record which editing.</param>
        /// <param name="param">Instance that describe all information of record.</param>
        public void EditRecord(int id, ObjectParametrsForCreateAndEditRecord param)
        {
            if (!this.validator.ValidatePatameters(param))
            {
                return;
            }

            FileCabinetRecord editingElement = this.list.Where <FileCabinetRecord>(t => t.Id == id).FirstOrDefault();

            if (editingElement == null || param == null)
            {
                throw new ArgumentException($"Editing element whis id {id} does not exist.");
            }

            string   oldFirstName   = editingElement.FirstName;
            string   oldLastName    = editingElement.LastName;
            DateTime oldDateOfBirth = new DateTime(editingElement.DateOfBirth.Year, editingElement.DateOfBirth.Month, editingElement.DateOfBirth.Day);

            editingElement.FirstName           = param.FirstName;
            editingElement.LastName            = param.LastName;
            editingElement.DateOfBirth         = param.DateOfBirth;
            editingElement.SuccsesfullDeals    = param.SuccsesfullDeals;
            editingElement.AdditionCoefficient = param.AdditionCoefficient;
            editingElement.ManagerClass        = param.ManagerClass;

            if (this.firstNameDictionary.ContainsKey(oldFirstName.ToUpper(CultureInfo.CurrentCulture)))
            {
                this.firstNameDictionary[oldFirstName.ToUpper(CultureInfo.CurrentCulture)] = this.list.Where <FileCabinetRecord>(t => t.FirstName == oldFirstName).ToList();
            }

            if (this.lastNameDictionary.ContainsKey(oldLastName.ToUpper(CultureInfo.CurrentCulture)))
            {
                this.lastNameDictionary[oldLastName.ToUpper(CultureInfo.CurrentCulture)] = this.list.Where <FileCabinetRecord>(t => t.LastName == oldLastName).ToList();
            }

            if (this.dateOfBirthNameDictionary.ContainsKey(oldDateOfBirth))
            {
                this.dateOfBirthNameDictionary[oldDateOfBirth] = this.list.Where <FileCabinetRecord>(t => t.DateOfBirth == oldDateOfBirth).ToList();
            }

            if (editingElement.FirstName != null && this.firstNameDictionary.ContainsKey(editingElement.FirstName.ToUpper(CultureInfo.CurrentCulture)))
            {
                this.firstNameDictionary[editingElement.FirstName.ToUpper(CultureInfo.CurrentCulture)] = this.list.Where <FileCabinetRecord>(t => t.FirstName == editingElement.FirstName).ToList();
            }
            else
            {
                this.firstNameDictionary.Add(editingElement.FirstName.ToUpper(CultureInfo.CurrentCulture), this.list.Where <FileCabinetRecord>(t => t.FirstName == editingElement.FirstName).ToList());
            }

            if (editingElement.LastName != null && this.lastNameDictionary.ContainsKey(editingElement.LastName.ToUpper(CultureInfo.CurrentCulture)))
            {
                this.lastNameDictionary[editingElement.LastName.ToUpper(CultureInfo.CurrentCulture)] = this.list.Where <FileCabinetRecord>(t => t.LastName == editingElement.LastName).ToList();
            }
            else
            {
                this.lastNameDictionary.Add(editingElement.LastName.ToUpper(CultureInfo.CurrentCulture), this.list.Where <FileCabinetRecord>(t => t.LastName == editingElement.LastName).ToList());
            }

            if (editingElement.DateOfBirth != null && this.dateOfBirthNameDictionary.ContainsKey(editingElement.DateOfBirth))
            {
                this.dateOfBirthNameDictionary[editingElement.DateOfBirth] = this.list.Where <FileCabinetRecord>(t => t.DateOfBirth == editingElement.DateOfBirth).ToList();
            }
            else
            {
                this.dateOfBirthNameDictionary.Add(editingElement.DateOfBirth, this.list.Where <FileCabinetRecord>(t => t.DateOfBirth == editingElement.DateOfBirth).ToList());
            }
        }