예제 #1
0
 public PupilsController()
 {
     this.pupilsRepository = new PupilsRepository(new Academy());
 }
예제 #2
0
 public PupilsController(PupilsRepository pupilsRepository)
 {
     this.pupilsRepository = pupilsRepository;
 }
예제 #3
0
        public static string StateMachine(string command, int telegramUserId)
        {
            //  return null;
            string pupilsname = "/end - закончить перечисление\r\n/ageenko - Агеенко\r\n/andrush - Андрюшечкін\r\n/gerasum - Герасименко\r\n/kovbasa - Ковбаса\r\n/korchev - Корчев\r\n/kuzmenk - Кузьменко\r\n/kurylen - Куриленко\r\n/lisnenk - Лісненко\r\n/monaenk - Монаєнко\r\n/moskove - Московець\r\n/nahabai - Нахаба\r\n/petrova - Петрова\r\n/rokytan - Рокитянський\r\n/svurude - Свириденко\r\n/surkovs - Сурков\r\n/stoyanp - Стоян\r\n/taranyk - Тарянік\r\n/tkachen - Ткаченко\r\n/sharapo - Шарапов\r\n/sholudk - Шолудько\r\n/shtanko - Штанько\r\n/yakoven - Яковенко";
            string lessons    =
                "/end - закончить перечисление\r\n/algebra - Алгебра\r\n/biologi - Биология\r\n/chemist - Химия\r\n/english - Английский\r\n/fizikak - Физика\r\n/fizkult - Физра\r\n/geometr - Геометрия\r\n/gromads -  Громадська\r\n/ukrmova - УкрМова\r\n/ukrlitr - УкрЛит\r\n/worldli - Заруба";
            UserRepository   users   = new UserRepository();
            PupilsRepository pupiles = new PupilsRepository();
            var currentuser          = users.Load().Find(e => e.TelegramUserId == telegramUserId);

            if (command == "/start")
            {
                users.NewUser(telegramUserId);
                return("/duty\r\n/day\r\n/skipday\r\n/skiples\r\n/infoday\r\n/send");
            }

            switch (currentuser.State)
            {
            case StateEnum.Default:

                if (command == "/duty")
                {
                    PupilsDuty pupils = new PupilsDuty();
                    return(pupils.GenerateDutyNow(telegramUserId));
                }

                if (command == "/day")
                {
                    currentuser.State = StateEnum.SelectNowDay;
                    users.Update(currentuser);
                    return("Введите дату");
                }
                if (command == "/skipday")
                {
                    currentuser.State = StateEnum.PassDay;
                    users.Update(currentuser);
                    return(pupilsname);
                }
                if (command == "/skiples")
                {
                    currentuser.State = StateEnum.SelectPassLesson;
                    users.Update(currentuser);
                    return(lessons);
                }
                if (command == "/infoday")
                {
                    currentuser.State = StateEnum.InfoDay;
                    users.Update(currentuser);
                    return("Введите день");
                }

                if (command == "/send")
                {
                    currentuser.State = StateEnum.SendMessType;
                    users.Update(currentuser);
                    return("Тип сообщения /day\r\n");
                }
                else
                {
                    return("чет не то");
                }

            case StateEnum.SelectNowDay:
                if (currentuser.Day != command)
                {
                    currentuser.Day = command;
                    currentuser.DutyDay++;
                    if (currentuser.DutyDay == 12)
                    {
                        currentuser.DutyDay = 1;
                    }
                    currentuser.State = StateEnum.Default;
                    users.Update(currentuser);
                    return("День изменен \r\n /duty\r\n/day\r\n/skipday\r\n/skiples\r\n/infoday\r\n/send");
                }
                else
                {
                    return("Такой день уже есть");
                }

            case StateEnum.SelectPassLesson:
                currentuser.ChosenDay = CommandLessonToEnum(command);
                if (currentuser.ChosenDay == Lessons.Unnamed)
                {
                    return("нет такого урока");
                }
                currentuser.State = StateEnum.PassLesson;
                users.Update(currentuser);
                return(currentuser.ChosenDay + " выбран" + '\n' + pupilsname);

            case StateEnum.PassLesson:
                if (command == "/end")
                {
                    currentuser.State = StateEnum.Default;
                    users.Update(currentuser);
                    return("Перечисление закончено");
                }
                var pupilnam = CommandUserToName(command);
                if (pupilnam == null)
                {
                    return("ошибка");
                }
                var currentPupi = pupiles.Read(pupilnam);
                if (currentPupi.PassLessons.ContainsKey(currentuser.Day))
                {
                    currentPupi.PassLessons[currentuser.Day].Add(currentuser.ChosenDay);
                }
                else
                {
                    currentPupi.PassLessons.Add(currentuser.Day, new List <Lessons>());
                }

                currentPupi.TotalPassLessons++;
                pupiles.Update(currentPupi);
                return(pupilnam + " пропустил(a) день " + currentuser.Day);

            case StateEnum.SendMessType:
                if (command == "/day")
                {
                    currentuser.State = StateEnum.SelectSendMessDay;
                    users.Update(currentuser);
                    return("Напишите день");
                }
                break;

            case StateEnum.SelectSendMessDay:
                var listpupils1 = pupiles.ReadAll();
                var res1        = listpupils1.Where(e => e.PassDay.Contains(command)).Select(e => e.Name);
                currentuser.State = StateEnum.Default;
                users.Update(currentuser);

                EmailServise.SendMessage($"Отсутвующие {command}", string.Join('\n', res1));
                return("Письмо будет отправлено\r\n" + "/duty\r\n/day\r\n/skipday\r\n/skiples\r\n/infoday\r\n/send");

            case StateEnum.PassDay:
                if (command == "/end")
                {
                    currentuser.State = StateEnum.Default;
                    users.Update(currentuser);
                    return("Перечисление закончено \r\n/duty\r\n/day\r\n/skipday\r\n/skiples\r\n/infoday\r\n/send");
                }
                var pupilname = CommandUserToName(command);
                if (pupilname == null)
                {
                    return("ошибка");
                }
                var currentPupil = pupiles.Read(pupilname);
                if (!currentPupil.PassDay.Contains(currentuser.Day))
                {
                    currentPupil.PassDay.Add(currentuser.Day);
                }
                currentPupil.TotalPass++;
                pupiles.Update(currentPupil);
                return(pupilname + " пропустил(a) день " + currentuser.Day);

            case StateEnum.InfoDay:
                var listpupils = pupiles.ReadAll();
                var res        = listpupils.Where(e => e.PassDay.Contains(command)).Select(e => e.Name);
                currentuser.State = StateEnum.Default;
                users.Update(currentuser);
                string answer = string.Join('\n', res);
                return(answer);
            }
            return(null);
        }