/// <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); }
/// <summary> /// Отметить посещение. Запускается логика из текущего абонемента, а так же запускается событие для добавления /// в списки на главной форме /// </summary> /// <param name="personName"></param> /// <returns></returns> public bool CheckInWorkout(string personName) { var person = PersonObject.GetLink(personName); if (person.AbonementCurent == null) { return(false); } if (!IsAbonementValid(ref person)) { return(false); } // Проверка на дубляж посещений. Если сегодня уже клиент ходил - задать вопрос var isAlreadyVisited = PersonObject.IsVisitToday(personName, out var infoMessage); if (isAlreadyVisited) { var dialogResult = MessageBox.Show($@"Повторно отметить посещение? {infoMessage}", @"Сегодня клиент уже отмечался!", MessageBoxButtons.YesNo, MessageBoxIcon.Warning); if (dialogResult == DialogResult.No) { return(false); } } var selectedOptions = new WorkoutOptions(); bool isSuccess; switch (person.AbonementCurent) { case AbonementByDays byDays: { var dlgResult = FormsRunner.RunWorkoutOptionsForm(ref selectedOptions, person.Name); if (dlgResult == DialogResult.Cancel) { return(false); } person.AbonementCurent.TryActivate(DateTime.Now.Date); // Если не Активирован isSuccess = byDays.CheckInWorkout(selectedOptions.TypeWorkout); if (!isSuccess) { return(false); } PersonObject.SaveCurentVisit(person, selectedOptions); // Сохраняет текущий визит break; } case ClubCardA clubCardA: { var dlgResult = FormsRunner.RunWorkoutOptionsForm(ref selectedOptions, person.Name); if (dlgResult == DialogResult.Cancel) { return(false); } person.AbonementCurent.TryActivate(DateTime.Now.Date); // Если не Активирован isSuccess = clubCardA.CheckInWorkout(selectedOptions.TypeWorkout); if (!isSuccess) { return(false); } PersonObject.SaveCurentVisit(person, selectedOptions); // Сохраняет текущий визит break; } case SingleVisit singleVisit: { var dlgResult = FormsRunner.RunWorkoutOptionsForm(ref selectedOptions, person.Name); if (dlgResult == DialogResult.Cancel) { return(false); } person.AbonementCurent.TryActivate(DateTime.Now.Date); // Если не Активирован isSuccess = singleVisit.CheckInWorkout(person.AbonementCurent.TypeWorkout); if (!isSuccess) { return(false); } PersonObject.SaveCurentVisit(person, selectedOptions); // Сохраняет текущий визит break; } } _dailyVisits.AddToLog(personName, selectedOptions); // Cобытие для добавления текущего посещения на главную форму IsAbonementValid(ref person); MessageBox.Show(@"Тренировка Учтена!", "", MessageBoxButtons.OK, MessageBoxIcon.Information); // AbonementController.GetInstance().Save(); DailyVisits.GetInstance().Serialize(); return(true); }