Пример #1
0
        public static void SaveAbonementToHistory(Person person, AbonementBasic abon)
        {
            if (abon == null)
            {
                return;
            }

            var currentAdmin = (DataBaseLevel.GetManhattanInfo()?.CurrentAdmin) ?? new Administrator();

            var lengAbonOrClCa = string.Empty;

            if (abon is AbonementByDays byDays)
            {
                lengAbonOrClCa = byDays.GetTypeAbonementByDays().ToString().Replace("На_", "").Replace("_", " ");
            }
            else if (abon is ClubCardA clubCardA)
            {
                lengAbonOrClCa = clubCardA.PeriodAbonem.ToString().Replace("На_", "");
            }
            else if (abon is SingleVisit singleVisit)
            {
                lengAbonOrClCa = "";
            }


            var abonHistory = new AbonHistory()
            {
                AbonementName        = abon.AbonementName,
                AdminName            = currentAdmin.Name,
                TypeWorkout          = abon.TypeWorkout.ToString(),
                Time                 = abon.TimeTraining.ToString(),
                SpaStatus            = abon.Spa.ToString(),
                EndDate              = abon.EndDate.ToShortDateString(),
                ActivationDate       = abon.BuyActivationDate.ToShortDateString(),
                LengthAbonOrClubCard = lengAbonOrClCa,
                NumAerobn            = (abon is AbonementByDays days && days.TypeWorkout == TypeWorkout.Аэробный_Зал) ? days.GetRemainderDays().ToString() : abon.NumAerobicTr.ToString(),
                NumMini              = (abon is AbonementByDays daysM && daysM.TypeWorkout == TypeWorkout.МиниГруппа) ? daysM.GetRemainderDays().ToString() : abon.NumMiniGroup.ToString(),
                NumPerson            = (abon is AbonementByDays daysP && daysP.TypeWorkout == TypeWorkout.Персональная) ? daysP.GetRemainderDays().ToString() : abon.NumPersonalTr.ToString(),
                BuyDate              = abon.BuyDate.ToShortDateString()
            };

            // Список всех абонементов для всех клиентов
            var personsAbonHistDict = DataBaseLevel.GetPersonsAbonHistDict();

            if (personsAbonHistDict.ContainsKey(person.Name))
            {
                personsAbonHistDict[person.Name].Add(abonHistory);
            }
            else
            {
                personsAbonHistDict.Add(person.Name, new List <AbonHistory> {
                    abonHistory
                });
            }
        }

        #endregion
    }
        /// <summary>
        /// Удаляет для Персоны поданый параметром абонемент
        /// </summary>
        /// <param name="personName"></param>
        /// <param name="abonToDelete"></param>
        public void RemoveAbonement(string personName, AbonementBasic abonToDelete)
        {
            if (string.IsNullOrEmpty(personName) || abonToDelete == null || !_abonementsDictionary.ContainsKey(personName))
            {
                return;
            }

            _abonementsDictionary[personName]?.Remove(abonToDelete);
            OnAbonementsDictChanged();
        }
        /// <summary>
        /// Возвращает индекс абонемента в основной коллекции,где хранятся и старые и новые абонементы.
        /// Возвращает -1 если нет пользователя или такого абонемента не существует.
        /// </summary>
        /// <param name="personName"></param>
        /// <param name="inputAbonement"></param>
        /// <returns></returns>
        public int GetGlobalIndex(string personName, AbonementBasic inputAbonement)
        {
            if (string.IsNullOrEmpty(personName) || (inputAbonement == null) || !_abonementsDictionary.ContainsKey(personName))
            {
                return(-1);
            }

            var index = _abonementsDictionary[personName].IndexOf(inputAbonement);

            return(index);
        }
        /// <summary>
        /// Добавляет абонемент к указанному Человеку.
        /// Если человек не существует, то создает его в коллекции
        /// </summary>
        /// <param name="personName"></param>
        /// <param name="abonement"></param>
        public void AddAbonement(string personName, AbonementBasic abonement)
        {
            if (string.IsNullOrEmpty(personName) || abonement == null)
            {
                return;
            }

            // Add if not exist
            AddNewPerson(personName);

            _abonementsDictionary[personName].Add(abonement);
            OnAbonementsDictChanged();
        }
Пример #5
0
        public NumWorkoutForm(AbonementBasic abonement)
        {
            InitializeComponent();

            _abonement           = abonement;
            _selectedValue       = 1;
            _selectedTypeWorkout = TypeWorkout.Персональная;

            var numbersAvailable = Options.NumAvailTrenToBuy;// 1,5,10 тренировок

            MyComboBox.Initialize(comboBox_num, numbersAvailable, numbersAvailable[0]);

            radioButton_mini.Visible = (abonement is ClubCardA);
        }
Пример #6
0
        /// <summary>
        /// Метод запускает форму Абонемента для просмотра или редактирования.
        /// Это зависит от статуса пароля администратора
        /// </summary>
        /// <param name="abonToShow"></param>
        /// <returns></returns>
        public static DialogResult CreateAbonementForm(ref AbonementBasic abonToShow)
        {
            var result = DialogResult.Cancel;

            using (var form = new AbonementForm(ref abonToShow))
            {
                if (form.ShowDialog() != DialogResult.OK)
                {
                    return(result);
                }

                form.ApplyChanges();
                result = DialogResult.OK;
            }
            return(result);
        }
Пример #7
0
        public Person()
        {
            Name         = "Empty Name";
            _status      = StatusPerson.Нет_Карты;
            GenderType   = Gender.Неизвестен;
            BirthDate    = DateTime.Parse("02.02.2000");
            Passport     = string.Empty;
            SpecialNotes = string.Empty;

            _phone           = string.Empty;
            DriverIdNum      = string.Empty;
            _pathToPhoto     = string.Empty;
            _abonementCurent = null;

            _idString = string.Empty;
        }
Пример #8
0
        /// <summary>
        /// Сохраняет текущий визит. Перегрузка для работы с Диспетчером абонементов
        /// Добавляет в Журнал посещений параметры выбранной Тренировки, Текущего администратора, время тренировки.
        /// Статический метод, на вход нужно подать Персону.
        /// </summary>
        /// <param name="person"></param>
        /// <param name="abonement">Абонемент для сохранения</param>
        /// <param name="selectedOptions"></param>
        public static void SaveCurentVisit(Person person, AbonementBasic abonement, WorkoutOptions selectedOptions)
        {
            var currentAdmin     = (DataBaseLevel.GetManhattanInfo()?.CurrentAdmin) ?? new Administrator();
            var visit            = new Visit(abonement, selectedOptions, currentAdmin.Name);
            var personsVisitDict = DataBaseLevel.GetPersonsVisitDict();

            if (personsVisitDict.ContainsKey(person.Name))
            {
                personsVisitDict[person.Name].Add(visit);
            }
            else
            {
                personsVisitDict.Add(person.Name, new List <Visit> {
                    visit
                });
            }
        }
Пример #9
0
        private static IEnumerable <Tuple <string, string> > GetEmptyInfoList(AbonementBasic abonement)
        {
            string statusAbonemens = @"Нет карты";

            if (abonement != null && abonement.IsValid() == false)
            {
                statusAbonemens = @"Абонемент сгорел";
            }

            var result = new List <Tuple <string, string> >
            {
                new Tuple <string, string>("Текущий статус Клиента", statusAbonemens),
                new Tuple <string, string>("Абонемент ", "Нет"),
                new Tuple <string, string>("Клубная Карта ", "Нет ")
            };

            return(result);
        }
Пример #10
0
        public static void LoadShortInfo(GroupBox gbBoxToShow, StatusPerson status, AbonementBasic abonement)
        {
            var labelTextBoxList = CreateLabelTextBoxList(status, abonement);

            try
            {
                HighlightControls(ref labelTextBoxList);
            }
            catch (Exception)
            {
                throw new Exception("Сфотографируйте это сообщение" + "Logic.cs 706");
            }

            // Отрисовка Short Info
            var table = CreateTable(labelTextBoxList); // Создаем таблицу c элементами из списка. Таблица: Лэйбл - Текстбокс

            AddTableToGroupBox(table, gbBoxToShow);
        }
Пример #11
0
        /// <summary>
        /// Нужен для отображения параметров текущего абонемента из очереди абонементов
        /// </summary>
        /// <param name="abonToShow"></param>
        public AbonementForm(ref AbonementBasic abonToShow)
        {
            InitializeComponent();
            _person = new Person("Temp")
            {
                AbonementCurent = abonToShow
            };
            _isReadOnlyForm              = true;
            button_Aplly.Enabled         = false;
            button_Aplly.Visible         = false;
            button2_Cancel.Text          = @"Закрыть";
            groupBox_Correctable.Visible = false;
            tableLayoutPanel2.Enabled    = false;
            tableLayoutPanel2.Visible    = false;
            tableLayoutPanel3.Visible    = false;
            groupBox_Details.Visible     = true;

            Logic.LoadShortInfo(groupBox_Details, _person.Status, abonToShow);
        }
Пример #12
0
        /// <summary>
        /// Создает List с парами Лэйбл - Контрол. Заголовок строки - Контрол со значением.
        /// Перегруженная версия. На вход подаётся абонемент(Не действительный и кончившийся).
        /// Нужен для отображения на форме клиентов в списке закончившихся абонементов
        /// </summary>
        /// <param name="abonement"></param>
        /// <returns></returns>
        private static List <Tuple <Label, Control> > CreateLabelTextBoxList(AbonementBasic abonement)
        {
            var labelTextBoxList = new List <Tuple <Label, Control> >();

            if (abonement == null)
            {
                labelTextBoxList.AddRange(TupleConverter(GetEmptyInfoList(null)));
            }
            else
            {
                labelTextBoxList.AddRange(TupleConverter(abonement.GetShortInfoList()));
                // Добавляем Поле Статуса. Делаем тут потому что Person.abonem не знает об этом.
                var status = "Абонемент Сгорел";
                labelTextBoxList.Insert(1, CreateRowInfo("Текущий статус Клиента", status));
            }


            return(labelTextBoxList);
        }
Пример #13
0
        }                                     // FIXME Переделать даты в абонементе

        // Конструкторы
        public Visit(AbonementBasic abon, WorkoutOptions workoutOptions, string administratorName)
        {
            DateTimeVisit     = DateTime.Now;
            TypeWorkoutToday  = workoutOptions.TypeWorkout;
            NumAllDaysAbon    = abon.GetRemainderDays();
            NumAerobicTr      = abon.NumAerobicTr;
            NumPersonalTr     = abon.NumPersonalTr;
            NumMiniGroup      = abon.NumMiniGroup;
            SpaStatus         = abon.Spa;
            PayStatus         = abon.PayStatus;
            AvailableTimeTren = abon.TimeTraining;
            AbonStartDate     = abon.BuyActivationDate;
            AbonEndDate       = abon.EndDate;
            AbonementName     = abon.AbonementName; // "Клубная Карта"  "Абонемент"   "Разовое Занятие"
            CurrAdmName       = administratorName ?? NameUnknown;
            PeronalTrenerName = (workoutOptions.PersonalTrener == null || workoutOptions.PersonalTrener.Name == "")
                ? NameUnknown
                : workoutOptions.PersonalTrener.Name;
            GroupInfo   = workoutOptions.GroupInfo;
            AbonBuyDate = abon.BuyDate;
        }
Пример #14
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;
                }
            }
        }
Пример #15
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);
        }
Пример #16
0
        /// <summary>
        /// Перегрузка для работы с SingleVisit Гостевым и диспетчером абонементов. Костыль по факту
        /// </summary>
        /// <param name="optionsWorkout"></param>
        /// <param name="abonement"></param>
        /// <param name="personName"></param>
        /// <returns></returns>
        public static DialogResult RunWorkoutOptionsSingleForm(ref WorkoutOptions optionsWorkout, AbonementBasic abonement, string personName)
        {
            if (abonement == null)
            {
                return(DialogResult.Cancel);
            }

            optionsWorkout.TypeWorkout = abonement.TypeWorkout; // Значение по умолчанию

            if (abonement is SingleVisit && abonement.TypeWorkout == TypeWorkout.Тренажерный_Зал)
            {
                return(DialogResult.OK);
            }

            // если не вышли , то запуск формы опций
            var workoutForm = new WorkoutForm(personName);

            var dlgReult = workoutForm.ShowDialog();

            if (dlgReult == DialogResult.OK)
            {
                optionsWorkout = workoutForm.SelectedOptions;
            }
            return(dlgReult);
        }
Пример #17
0
        private void ApplyCorrectedValues(ref AbonementBasic abonement)
        {
            if (!checkBox_Activated.Checked)
            {
                return;
            }

            var abonementCurent = abonement;
            var trenZalNum      = int.Parse(comboBox_Tren.Text);
            var personNum       = int.Parse(comboBox_Personal.Text);
            var aerobNum        = int.Parse(comboBox_Aerob.Text);
            var freezeNum       = int.Parse(comboBox_freez.Text);

            switch (abonementCurent.AbonementName)
            {
            case SingleVisit.NameAbonement:
                return;

            case ClubCardA.NameAbonement:
            {
                (abonementCurent as ClubCardA)?.Freeze?.SetAvailableDays(freezeNum);
                abonementCurent.NumAerobicTr  = aerobNum;
                abonementCurent.NumPersonalTr = personNum;

                // Принудительно активируем. Дата в прошлом или в будущем допускается
                abonementCurent.TryActivate(dateTimePicker_ActivationDate.Value);

                break;
            }

            case AbonementByDays.NameAbonement:
            {
                var nums = 0;
                switch (((AbonementByDays)abonementCurent).TypeWorkout)
                {
                case TypeWorkout.Тренажерный_Зал:
                    nums = trenZalNum;
                    break;

                case TypeWorkout.Аэробный_Зал:
                    nums = aerobNum;
                    break;

                case TypeWorkout.Персональная:
                    nums = personNum;
                    break;

                case TypeWorkout.МиниГруппа:
                    //     nums = personNum;
                    break;
                }

                ((AbonementByDays)abonementCurent).SetDaysLeft(nums);
                break;
            }
            }

            if (dateTimePicker_ActivationDate.Value.Date.CompareTo(DateTime.Now.Date) < 0)
            {
                abonementCurent.TryActivate(dateTimePicker_ActivationDate.Value);
            }
        }