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(); }
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); }
/// <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); }
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; }
/// <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 }); } }
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); }
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); }
/// <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); }
/// <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); }
} // 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; }
//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; } } }
/// <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> /// Перегрузка для работы с 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); }
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); } }