Пример #1
0
        public void GetListValidTest()
        {
            var inst = AbonementController.GetInstance();

            inst.GetPersonsDictn().Clear();
            var firstPerson = Guid.NewGuid().ToString();
            var l1          = inst.GetListValid(firstPerson);

            Assert.AreEqual(l1.Count, 0);


            inst.AddAbonement(firstPerson, new AbonementByDays(Pay.Оплачено, TimeForTr.Утро, TypeWorkout.Аэробный_Зал, SpaService.Без_Спа, DaysInAbon.На_10_посещений));
            var r = inst.GetPersonsDictn().First().Value.Count;

            Assert.AreEqual(r, 1);

            // Основная проверка
            var res = inst.GetListValid(firstPerson).Count();

            Assert.AreEqual(res, 1);

            // Если имя персоны null
            var res2 = inst.GetListValid(null);

            Assert.IsNull(res2);
        }
Пример #2
0
        public void GetIndexGlobalTest()
        {
            var inst = AbonementController.GetInstance();

            inst.GetPersonsDictn().Clear();
            var actual = inst.GetPersonsDictn().Count;

            Assert.AreEqual(0, actual);

            var abonValid1 = new AbonementByDays(Pay.Не_Оплачено, TimeForTr.Утро, TypeWorkout.МиниГруппа, SpaService.Спа, DaysInAbon.На_5_посещений);
            var abonValid2 = new SingleVisit(TypeWorkout.Аэробный_Зал, SpaService.Без_Спа, Pay.Не_Оплачено, TimeForTr.Весь_День)
            {
                IsActivated = true
            };
            var abonValid3   = new AbonementByDays(Pay.Оплачено, TimeForTr.Утро, TypeWorkout.МиниГруппа, SpaService.Спа, DaysInAbon.На_5_посещений);
            var abonNotValid = new ClubCardA(Pay.Не_Оплачено, TimeForTr.Весь_День, TypeWorkout.Аэробный_Зал, SpaService.Без_Спа, PeriodClubCard.На_1_Месяц)
            ;

            abonNotValid.SetActivationDate(DateTime.Today.AddDays(-200));
            // Если нет пользователя
            var result = inst.GetGlobalIndex("nameDummy", abonValid1);

            Assert.AreEqual(-1, result);

            // Если абонемент есть
            string personName = "MyName";

            inst.AddAbonement(personName, abonValid1);
            inst.AddAbonement(personName, abonValid2);
            inst.AddAbonement(personName, abonValid3);
            Assert.AreEqual(3, inst.GetList(personName).Count);

            var index = inst.GetGlobalIndex(personName, abonValid2);

            Assert.AreEqual(1, index);

            // Если абонемента нет
            index = inst.GetGlobalIndex(personName, abonNotValid);
            Assert.AreEqual(-1, index);

            // Получить невалидный и найти его индекс в основной коллекции
            inst.AddAbonement(personName, abonNotValid);
            var notValidList = inst.GetListNotValid(personName);
            //.. Получить абонемент по индексу
            var curentAbon = inst.GetByIndex(notValidList, 0);

            Assert.AreSame(curentAbon, abonNotValid);

            var globalIndex = inst.GetGlobalIndex(personName, curentAbon);

            Assert.AreEqual(3, globalIndex);

            var globalIndex2 = inst.GetGlobalIndex(null, curentAbon);

            Assert.AreEqual(-1, globalIndex2);
        }
Пример #3
0
        public void GetInstanceTest()
        {
            Assert.IsFalse(false);

            AbonementController inst = null;

            Assert.IsNull(inst);
            inst = AbonementController.GetInstance();
            Assert.IsNotNull(inst);
        }
Пример #4
0
        private void AbonementForm_Load(object sender, EventArgs e)
        {
            SetInitialValues();
            LoadDefaultValues();

            // Не выключено ли в настройках разрешение на корректировку абонементов при создании их
            groupBox_Correctable.Enabled = Options.AbonIsCorrectable;

            // Гостевой визит Радиобатон показывается если не были посещения
            var lastVisits         = PersonObject.GetVisitsList(_person.Name);
            var isAbonementsExists = (AbonementController.GetInstance()?.GetList(_person.Name)?.Count != 0);

            radioButton_guest.Visible = (lastVisits == null || lastVisits.Count == 0) && !isAbonementsExists;
            pictureBox_Guest.Visible  = (lastVisits == null || lastVisits.Count == 0) && !isAbonementsExists;
        }
Пример #5
0
        public void AddAbonementTest()
        {
            var inst = AbonementController.GetInstance();

            inst.GetPersonsDictn().Clear();
            var actual = inst.GetPersonsDictn().Count;

            Assert.AreEqual(0, actual);

            var name = Guid.NewGuid().ToString();

            inst.AddAbonement(name, new AbonementByDays(Pay.Не_Оплачено, TimeForTr.Весь_День, TypeWorkout.Аэробный_Зал, SpaService.Без_Спа, DaysInAbon.На_10_посещений));
            Assert.IsTrue(inst.GetPersonsDictn().ContainsKey(name));

            Assert.AreEqual(1, inst.GetList(name).Count);
        }
Пример #6
0
        public void RemoveAbonementTest()
        {
            var inst = AbonementController.GetInstance();

            inst.GetPersonsDictn().Clear();
            var actual = inst.GetPersonsDictn().Count;

            Assert.AreEqual(0, actual);

            var personName = Guid.NewGuid().ToString();

            //Добавляем пользователя и абонементы
            var abonValid1 = new AbonementByDays(Pay.Не_Оплачено, TimeForTr.Утро, TypeWorkout.МиниГруппа, SpaService.Спа, DaysInAbon.На_5_посещений);
            var abonValid2 = new SingleVisit(TypeWorkout.Аэробный_Зал, SpaService.Без_Спа, Pay.Не_Оплачено, TimeForTr.Весь_День)
            {
                IsActivated = true
            };
            var abonValid3   = new AbonementByDays(Pay.Оплачено, TimeForTr.Утро, TypeWorkout.МиниГруппа, SpaService.Спа, DaysInAbon.На_5_посещений);
            var abonNotValid = new ClubCardA(Pay.Не_Оплачено, TimeForTr.Весь_День, TypeWorkout.Аэробный_Зал, SpaService.Без_Спа, PeriodClubCard.На_1_Месяц)
            {
                BuyActivationDate = DateTime.Today.AddDays(-200)
            };

            inst.GetPersonsDictn().Add(personName, new List <AbonementBasic>());
            inst.GetPersonsDictn()[personName].Add(abonNotValid);
            inst.GetPersonsDictn()[personName].Add(abonValid1);
            inst.GetPersonsDictn()[personName].Add(abonValid2);
            inst.GetPersonsDictn()[personName].Add(abonValid3);
            Assert.AreEqual(4, inst.GetPersonsDictn()[personName].Count);

            // Проверяем удаление
            inst.RemoveAbonement(personName, abonValid3);
            Assert.AreEqual(3, inst.GetPersonsDictn()[personName].Count);

            try
            {
                inst.RemoveAbonement("2as", abonValid3);
            }
            catch (Exception e)
            {
                throw new NullReferenceException();
            }
        }
Пример #7
0
        public void GetPersonAbonementsTest()
        {
            var inst = AbonementController.GetInstance();

            inst.GetPersonsDictn().Clear();

            // Коллекция пустая
            Assert.AreEqual(inst.GetPersonsDictn().Count, 0);

            var firstPerson  = Guid.NewGuid().ToString();
            var secondPerson = Guid.NewGuid().ToString();

            // Добавляем в коллекцию клиентов
            inst.GetPersonsDictn().Add(firstPerson, new List <AbonementBasic>()
            {
                new AbonementByDays(Pay.Оплачено, TimeForTr.Утро, TypeWorkout.Аэробный_Зал, SpaService.Без_Спа, DaysInAbon.На_10_посещений)
            });
            Assert.AreEqual(1, inst.GetPersonsDictn().Count);

            // Проверяем основной метод
            var result = inst.GetList(firstPerson);

            Assert.AreSame(inst.GetPersonsDictn()[firstPerson], result);

            // Изменения в основной коллекции
            var testChanges1 = result.First().IsActivated;

            result.First().IsActivated = true;
            Assert.AreEqual(result.First().IsActivated, true);

            Assert.AreEqual(inst.GetPersonsDictn()[firstPerson].First().IsActivated, true);

            var expect = result.ToList().Count;

            Assert.AreEqual(1, expect);

            // Проверка доступа по индексу
            inst.GetPersonsDictn().Add(secondPerson, new List <AbonementBasic>()
            {
                new AbonementByDays(Pay.Не_Оплачено, TimeForTr.Весь_День, TypeWorkout.Аэробный_Зал, SpaService.Без_Спа, DaysInAbon.На_10_посещений)
            });
        }
Пример #8
0
        public void GetOldAbonementsTest()
        {
            var inst = AbonementController.GetInstance();

            inst.GetPersonsDictn().Clear();
            var firstPerson = Guid.NewGuid().ToString();

            inst.GetPersonsDictn().Add(firstPerson, new List <AbonementBasic>()
            {
                new AbonementByDays(Pay.Оплачено, TimeForTr.Утро, TypeWorkout.Аэробный_Зал, SpaService.Без_Спа, DaysInAbon.На_10_посещений)
            });

            var r = inst.GetPersonsDictn().First().Value.Count;

            Assert.AreEqual(r, 1);

            // Основная проверка
            var res = inst.GetListNotValid(firstPerson).Count();

            Assert.AreEqual(res, 0);
        }
Пример #9
0
        //FIXME  Попробовать тут использовать не AbonementCurent, а _abonementCurent чтобы не вызывать лишний раз событие изменения абон

        public void StatusDirector()
        {
            if (Status == StatusPerson.Запрещён)
            {
                // AbonementCurent = null;
                return;
            }

            if (Status == StatusPerson.Гостевой)
            {
                _abonementCurent = AbonementController.GetInstance().GetFirstValid(Name);

                if (AbonementCurent == null)
                {
                    return;
                }
            }

            // Нет Карты
            if (AbonementCurent == null)
            {
                Status = StatusPerson.Нет_Карты;
            }
            else // Активный
            {
                var isValid = AbonementCurent.IsValid();
                if (isValid)
                {
                    Status = AbonementCurent.Freeze != null && AbonementCurent.Freeze.IsFreezedNow() ? StatusPerson.Заморожен : StatusPerson.Активный;
                }
                else
                {
                    Status          = StatusPerson.Нет_Карты;
                    AbonementCurent = null;
                }
            }
        }
Пример #10
0
        /// <summary>
        /// Только тут создаются заголовки Выборочных полей и записываются их данные в структуру PersonField
        /// </summary>
        /// <param name="first"></param>
        /// <returns></returns>
        public static IEnumerable <PersonField> GetPersonFieldsShort(Person first)
        {
            var person = first;
            // Главные поля, всегда отображаются
            var personFields = new List <PersonField>
            {
                new PersonField {
                    HeaderName = "Имя", Value = person.Name
                },
                new PersonField {
                    HeaderName = "Телефон", Value = person.Phone
                },
                //  new PersonField {HeaderName = "Статус", Value = person.Status.ToString()},
            };

            // Все что касается Абонемента
            var instAbonContr = AbonementController.GetInstance();
            var lastAbonement = instAbonContr.GetFirstValid(person.Name) ?? instAbonContr.GetList(person.Name).LastOrDefault();

            if (lastAbonement == null)
            {
                return(personFields);
            }

            personFields.Add(new PersonField {
                HeaderName = "Название", Value = lastAbonement.AbonementName
            });
            personFields.Add(new PersonField {
                HeaderName = "Покупка", Value = $"{lastAbonement.BuyActivationDate:dd/MM/yyyy}"
            });
            personFields.Add(new PersonField {
                HeaderName = "Конец", Value = $"{lastAbonement.EndDate:dd/MM/yyyy}"
            });

            // Последнее посещение в журнале
            var journal = PersonObject.GetVisitsList(person.Name);

            if (journal?.Count > 0)
            {
                var lastVisit = journal.Last().DateTimeVisit.Date; //.ToString("MM/dd/yyyy");
                var numDays   = (DateTime.Now - lastVisit).Days;
                personFields.Add(new PersonField {
                    HeaderName = "Посл.Визит", Value = lastVisit.ToString("MM/dd/yyyy")
                });

                personFields.Add(numDays == 0
                    ? new PersonField {
                    HeaderName = "Был (дн. назад)", Value = $"Сегодня"
                }
                    : new PersonField {
                    HeaderName = "Был (дн. назад)", Value = $"  {numDays}"
                });
            }
            else
            {
                personFields.Add(new PersonField {
                    HeaderName = "Был(дн. назад)", Value = $""
                });
            }

            return(personFields);
        }
Пример #11
0
        /// <summary>
        /// Только тут создаются заголовки всех полей и записываются основные данные
        /// </summary>
        /// <param name="first"></param>
        /// <returns></returns>
        public static IEnumerable <PersonField> GetPersonFieldsFull(Person first)
        {
            var person = first;

            var instAbonContr    = AbonementController.GetInstance();
            var abonHistoriesOld = PersonObject.GetAbonHistoryList(person.Name);
            var abonListAll      = instAbonContr.GetList(person.Name);
            var abonValid        = instAbonContr.GetFirstValid(person.Name);

            // Создается текстовый список всех абонементов.
            var abonHistString = new StringBuilder();

            foreach (var item in abonListAll)
            {
                abonHistString.AppendLine(item?.AbonementName + $"({item?.BuyDate.Date}), ");
            }

            if (abonHistoriesOld != null)
            {
                foreach (var item in abonHistoriesOld)
                {
                    abonHistString.Append(item?.AbonementName + $"({item?.BuyDate}), ");
                }
            }
            // Для выдергивания не форматированного текста в заметки.
            RichTextBox tempSpecialNotesRtb = new RichTextBox();

            MyRichTextBox.Load(tempSpecialNotesRtb, person.SpecialNotes);

            var abon = abonValid ?? abonListAll?.LastOrDefault();

            var isAbonExist  = abon != null;
            var personFields = new List <PersonField>
            {
                new PersonField {
                    HeaderName = "Имя", Value = person.Name
                },
                new PersonField {
                    HeaderName = "Телефон", Value = person.Phone
                },
                new PersonField {
                    HeaderName = "Дата Рождения", Value = $"{person.BirthDate.Date:MM/dd/yyyy}"
                },
                new PersonField {
                    HeaderName = "Пол", Value = person.GenderType.ToString()
                },
                new PersonField {
                    HeaderName = "Статус", Value = person.Status.ToString()
                },
                new PersonField {
                    HeaderName = "ID номер", Value = person.IdString
                },
                new PersonField {
                    HeaderName = "Паспорт", Value = person.Passport
                },
                new PersonField {
                    HeaderName = "Права", Value = person.DriverIdNum
                },
                // Абонемент
                new PersonField {
                    HeaderName = "Название", Value = (isAbonExist) ?abon.AbonementName: ""
                },
                new PersonField {
                    HeaderName = "Доступное время", Value = (isAbonExist) ?abon.TimeTraining.ToString():""
                },
                new PersonField {
                    HeaderName = "Осталось дней", Value = (isAbonExist) ?abon.GetRemainderDays().ToString():""
                },
                new PersonField {
                    HeaderName = "Аэробных", Value = (isAbonExist) ?abon.NumAerobicTr.ToString():""
                },
                new PersonField {
                    HeaderName = "Персональных", Value = (isAbonExist) ?abon.NumPersonalTr.ToString():""
                },

                new PersonField {
                    HeaderName = "Мини Групп", Value = (isAbonExist) ?abon.NumMiniGroup.ToString():""
                },
                new PersonField {
                    HeaderName = "Спа услуги", Value = (isAbonExist) ?abon.Spa.ToString():""
                },
                new PersonField {
                    HeaderName = "Доступный тип", Value = (isAbonExist) ?abon.TypeWorkout.ToString():""
                },
                new PersonField {
                    HeaderName = "Оплата", Value = (isAbonExist) ?abon.PayStatus.ToString():""
                },
                new PersonField {
                    HeaderName = "Абон. Покупка", Value = (isAbonExist) ? $"{abon.BuyDate:MM/dd/yyyy}" :""
                },
                new PersonField {
                    HeaderName = "Абон. Активация", Value = (isAbonExist) ? $"{abon.BuyActivationDate:MM/dd/yyyy}" :""
                },
                new PersonField {
                    HeaderName = "Абон. Конец", Value = (isAbonExist) ? $"{abon.EndDate:MM/dd/yyyy}":""
                },
                new PersonField {
                    HeaderName = "Активация", Value = (isAbonExist) ?abon.IsActivated.ToString():""
                },
                new PersonField {
                    HeaderName = "Заметки", Value = tempSpecialNotesRtb.Text
                },
                new PersonField {
                    HeaderName = "Заморозки", Value = GetFreezeString(person)
                },
                new PersonField {
                    HeaderName = "История Абон.", Value = abonHistString.ToString()
                }
            };

            return(personFields);
        }
Пример #12
0
        public bool IsAbonementExist()
        {
            bool result = AbonementController.GetInstance().GetListValid(Name).Count != 0;

            return(result);
        }
Пример #13
0
        /// <summary>
        ///  Вызывать этот метод для задания абонемента пользователю.
        /// Тут сохраняется новый абонемент в историю абонементов
        /// </summary>
        public void ApplyChanges()
        {
            AbonementBasic abonementNew = null;

            switch (_selectedAbonementName)
            {
            case "Клубная Карта":
            {
                abonementNew = new ClubCardA(_pay, _timeTren, TypeWorkout.Тренажерный_Зал, _spa, _periodClubCard);
                break;
            }

            case "Абонемент":
            {
                abonementNew = new AbonementByDays(_pay, _timeTren, _typeWorkout, _spa, _daysInAbon);
                break;
            }

            case "Разовое Занятие":
            {
                abonementNew = new SingleVisit(_typeWorkout, _spa, Pay.Оплачено, _timeTren);
                break;
            }

            case "Гостевой визит":
            {
                // Создаем новый абонемент
                abonementNew = new SingleVisit(_typeWorkout, _spa, Pay.Оплачено, _timeTren);
                abonementNew.TryActivate(DateTime.Now.Date);
                // Выбираем опции абонемента
                var selectedOptions = new WorkoutOptions();
                _person.AbonementCurent = abonementNew;
                var dlgResult = FormsRunner.RunWorkoutOptionsSingleForm(ref selectedOptions, abonementNew, _person.Name);
                if (dlgResult == DialogResult.Cancel)
                {
                    return;
                }
                // Отмечаем тренировку
                bool isSuccess = abonementNew.CheckInWorkout(abonementNew.TypeWorkout);
                if (!isSuccess)
                {
                    return;
                }

                // Сохраняем текущее посещение в истории
                PersonObject.SaveCurentVisit(_person, abonementNew, selectedOptions);      // Сохраняет текущий визит
                DailyVisits.GetInstance().AddToLog(_person.Name, selectedOptions);         // Cобытие для добавления текущего посещения на главную форму
                _person.Status        = StatusPerson.Гостевой;
                _person.SpecialNotes +=
                    $"\n\r Гостевой визит был: {DateTime.Now.ToString(new DateTimeFormatInfo().LongDatePattern)} ";
                _person.AbonementCurent = null;
                AbonementController.GetInstance().AddAbonement(_person.Name, abonementNew);
                PersonObject.SaveAbonementToHistory(_person, abonementNew);
                return;
            }
            }

            if (_person.Status == StatusPerson.Гостевой)
            {
                _person.Status = StatusPerson.Активный;
            }

            ApplyCorrectedValues(ref abonementNew);//  Корректировка абонемента по дате, количеству оставшихся посещений
            AbonementController.GetInstance().AddAbonement(_person.Name, abonementNew);

            //тут добавить абонемент в список истории абонементов.
            PersonObject.SaveAbonementToHistory(_person, abonementNew);
        }
Пример #14
0
        public void CheckAccessByIndexTest()
        {
            var inst = AbonementController.GetInstance();

            inst.GetPersonsDictn().Clear();
            // Коллекция пустая
            Assert.AreEqual(inst.GetPersonsDictn().Count, 0);
            var firstPerson = Guid.NewGuid().ToString();

            // Добавляем в коллекцию клиентов
            inst.GetPersonsDictn().Add(firstPerson, new List <AbonementBasic>());
            // Проверяем что клиент есть, но у него нет абонементов
            Assert.AreEqual(inst.GetListValid(firstPerson).Count(), 0);
            Assert.AreEqual(inst.GetListNotValid(firstPerson).Count(), 0);

            var abonValid1 = new AbonementByDays(Pay.Не_Оплачено, TimeForTr.Утро, TypeWorkout.МиниГруппа, SpaService.Спа, DaysInAbon.На_5_посещений);

            var abonValid2 = new SingleVisit(TypeWorkout.Аэробный_Зал, SpaService.Без_Спа, Pay.Не_Оплачено,
                                             TimeForTr.Весь_День)
            {
                BuyActivationDate = DateTime.Today.AddDays(-20), NumAerobicTr = 0, NumMiniGroup = 0, NumPersonalTr = 0, IsActivated = true, TypeWorkout = TypeWorkout.Аэробный_Зал
            };

            var abonValid3 = new AbonementByDays(Pay.Оплачено, TimeForTr.Утро, TypeWorkout.МиниГруппа, SpaService.Спа, DaysInAbon.На_5_посещений);

            var abonNotValid = new ClubCardA(Pay.Не_Оплачено, TimeForTr.Весь_День, TypeWorkout.Аэробный_Зал,
                                             SpaService.Без_Спа, PeriodClubCard.На_1_Месяц)
            {
                IsActivated = true
            };

            abonNotValid.SetActivationDate(DateTime.Today.AddDays(-200));

            string name = "myPerson";

            inst.AddAbonement(name, abonNotValid);
            inst.AddAbonement(name, abonValid1);
            inst.AddAbonement(name, abonValid2);
            inst.AddAbonement(name, abonValid3);

            Assert.AreEqual(inst.GetPersonsDictn().Count, 2);
            Assert.AreEqual(inst.GetPersonsDictn()[name].Count, 4);

            // Поиск по значению работает
            var t = inst.GetListValid("myPerson");

            Assert.AreEqual(t.Count(), 3);

            var i = t.ToList().IndexOf(abonValid1);

            Assert.AreEqual(i, 0); // 0 потому что первый элемент ориг массива отбрасывается.Он не валиден

            //1 Проверка как в рабочей программе
            var validAbons = inst.GetListValid(name);
            //2 Отобразили в листбоксе
            //3 Выбрали нужную строчку в листбоксе,получили индекс
            //4 Нашли по индексу нужный элемент в оригинальной коллекции
            int index        = 2;
            var selectedAbon = validAbons.ToArray()[index]; // abon_valid_3

            selectedAbon.NumAerobicTr = 123;
            var originalIndex = inst.GetPersonsDictn()["myPerson"].IndexOf(selectedAbon);
            var curentAbon    = inst.GetPersonsDictn()["myPerson"][originalIndex];

            curentAbon.NumAerobicTr = 9;
        }