Beispiel #1
0
        public static void CallbackQuery(CallbackQueryEventArgs e, ITelegramBotClient bot)
        {
            string message = e.CallbackQuery.Data;
            var    chatId  = e.CallbackQuery.From.Id;

            int id = 0;

            int.TryParse(message.Substring(6), out id);

            AdminBot.adminLog(message);

            Participant participant;

            using (MobileContext db = new MobileContext())
            {
                try
                {
                    var booking      = db.Bookings.Single(c => c.Id == id);
                    var bookingsWeek = db.Bookings.Remove(booking);
                    db.SaveChanges();
                } catch (InvalidOperationException ex)
                {
                    _ = bot.SendTextMessageAsync(chatId, "Бронь уже удалена").Result;
                    return;
                }

                participant = db.Participants.Single(c => c.Alias == e.CallbackQuery.From.Username);
            }

            using (FileStream fs = FormSchedule.FormScheduleImage(participant))
            {
                Message mes = bot.SendPhotoAsync(chatId: chatId, photo: new InputOnlineFile(fs, "schedule.png"), caption: "Бронь отменена.").Result;
            }
        }
        private void 申请toolStripButton1_Click(object sender, EventArgs e)
        {
            FormSchedule frm = new FormSchedule(m_authorityFlag, 0);

            frm.ShowDialog();

            RefreshDataGridView();
            PositioningRecord(frm.BillNo);
        }
Beispiel #3
0
        public static void ReplyWithTextSchedule(Message message, ITelegramBotClient client)
        {
            var chatId    = message.Chat.Id;
            var messageId = message.MessageId;

            string text = FormSchedule.FormScheduleText();

            if (text.Equals(""))
            {
                text = "В расписании пусто";
            }
            Message mes = client.SendTextMessageAsync(chatId: chatId, text, replyToMessageId: messageId, replyMarkup: reply, parseMode: ParseMode.Markdown).Result;
        }
Beispiel #4
0
        public static void ReplyWithImageSchedule(Message message, ITelegramBotClient client, Participant participant)
        {
            var chatId    = message.Chat.Id;
            var messageId = message.MessageId;

            InputOnlineFile inputOnlineFile;

            using (FileStream fs = FormSchedule.FormScheduleImage(participant))
            {
                String caption = $"Ваш статус: {participant.Status}\nДоступно {maxHoursToBook(participant.Status)} часов бронирования в день.";
                inputOnlineFile = new InputOnlineFile(fs, "schedule.png");
                Message mes = client.SendPhotoAsync(chatId: chatId, photo: inputOnlineFile, caption: caption, replyToMessageId: messageId, replyMarkup: reply).Result;
            }
        }
        private void dataGridView1_DoubleClick(object sender, EventArgs e)
        {
            if (dataGridView1.SelectedRows.Count == 0)
            {
                return;
            }

            int billID = Convert.ToInt32(dataGridView1.CurrentRow.Cells["编号"].Value);

            FormSchedule frm = new FormSchedule(m_authorityFlag, billID);

            frm.ShowDialog();

            RefreshDataGridView();
            PositioningRecord(billID.ToString());
        }
Beispiel #6
0
        public static void Book(Message message, ITelegramBotClient bot, Participant participant)
        {
            var chatId      = message.Chat.Id;
            var messageId   = message.MessageId;
            var selectedDay = participant.SelectedDate;


            //парсинг времени и запись брони в бд если всё ок.
            string[] splitted = message.Text.Split(" ");
            DateTime startTime;
            DateTime endTime;

            try
            {
                if (splitted[0].Length == 4)
                {
                    splitted[0] = "0" + splitted[0];
                }
                if (splitted[1].Length == 4)
                {
                    splitted[1] = "0" + splitted[1];
                }

                startTime = DateTime.ParseExact(splitted[0], "HH:mm", CultureInfo.InvariantCulture);
                endTime   = DateTime.ParseExact(splitted[1], "HH:mm", CultureInfo.InvariantCulture);
            }
            catch (Exception ex)
            {
                Message mes = bot.SendTextMessageAsync(message.Chat.Id, "Введите время начала и завершения в формате \"HH:MM HH:MM\". Например 12:20 14:20", replyToMessageId: message.MessageId).Result;
                AdminBot.adminLog("Exception " + ex.Message);
                return;
            }

            DateTime startDateTime = new DateTime(selectedDay.Year, selectedDay.Month, selectedDay.Day, startTime.Hour, startTime.Minute, 0);
            DateTime endDateTime   = new DateTime(selectedDay.Year, selectedDay.Month, selectedDay.Day, endTime.Hour, endTime.Minute, 0);

            //на случай случайного ввода в неверном порядке
            if (startDateTime > endDateTime)
            {
                DateTime temp = startDateTime;
                startDateTime = endDateTime;
                endDateTime   = temp;
            }

            if (startDateTime.Hour < 7)
            {
                Message mes = bot.SendTextMessageAsync(message.Chat.Id, "Время начала раньше 7 утра. (Время работы спорткомплекса: с 7:00 до 23:00)", replyToMessageId: message.MessageId).Result;
                AdminBot.adminLog("Время начала раньше 7 утра.");
                return;
            }
            if (startDateTime.Hour >= 22 && startDateTime.Minute >= 30)
            {
                Message mes = bot.SendTextMessageAsync(message.Chat.Id, "Время начала позже 22:30. (Время работы спорткомплекса: с 7:00 до 23:00)", replyToMessageId: message.MessageId).Result;
                AdminBot.adminLog("Время начала позже 22:30.");
                return;
            }
            if (endDateTime.Hour < 7)
            {
                Message mes = bot.SendTextMessageAsync(message.Chat.Id, "Время завершения раньше 7 утра. (Время работы спорткомплекса: с 7:00 до 23:00)", replyToMessageId: message.MessageId).Result;
                AdminBot.adminLog("Время завершения раньше 7 утра.");
                return;
            }
            if (endDateTime.Hour >= 22 && endDateTime.Minute > 30)
            {
                Message mes = bot.SendTextMessageAsync(message.Chat.Id, "Время завершения позже 22:30. (Время работы спорткомплекса: с 7:00 до 23:00)\n\nПо просьбе руководства спорткомплекса музкомната освобождается за пол часа до закрытия ск.", replyToMessageId: message.MessageId).Result;
                AdminBot.adminLog("Время завершения позже 22:30.");
                return;
            }

            //Нужно получить доступное время для бронирования
            double freetime = BookCommand.maxHoursToBook(participant.Status);

            using (MobileContext db = new MobileContext())
            {
                var bookings = db.Bookings.Where(c => (c.Participant == participant) && (c.TimeEnd.Year == selectedDay.Year) && (c.TimeEnd.Month == selectedDay.Month) && (c.TimeEnd.Day == selectedDay.Day)).ToList();
                foreach (var booking in bookings)
                {
                    freetime -= (booking.TimeEnd.Subtract(booking.TimeStart).TotalHours);
                }

                if (startDateTime.Subtract(endDateTime).TotalHours >= freetime)
                {
                    _ = bot.SendTextMessageAsync(chatId, $"Недостаточно доступного времени для бронирования.\n\nВведите время начала и завершения брони. Например \"12:20 14:20\"", replyToMessageId: messageId).Result;
                    AdminBot.adminLog("Недостаточно доступного времени для бронирования.");
                    return;
                }

                //TODO выяснить почему если убрать запрос к таблице Participants, то в таблице Bookings все ссылки на Participants будут null
                var parts = db.Participants.ToList();

                var allBookingsInDay = db.Bookings.Where(c => (c.TimeEnd.Year == startDateTime.Year) && (c.TimeEnd.Month == startDateTime.Month) && (c.TimeEnd.Day == startDateTime.Day)).ToList();
                foreach (var booking in allBookingsInDay)
                {
                    //В принципе, этот иф можно использовать внутри where при выборке броней
                    if ((startDateTime >= booking.TimeStart && startDateTime < booking.TimeEnd) ||
                        (endDateTime > booking.TimeStart && endDateTime <= booking.TimeEnd) ||
                        (booking.TimeStart > startDateTime && booking.TimeStart < endDateTime))
                    {
                        _ = bot.SendTextMessageAsync(message.Chat.Id, $"Выбранное время занято бронью @{booking.Participant.Alias}\n\nВведите время начала и завершения в формате \"HH:MM HH:MM\". Например 12:20 14:20", replyToMessageId: message.MessageId).Result;
                        AdminBot.adminLog($"Выбранное время занято бронью @{booking.Participant.Alias}");
                        return;
                    }
                }

                //Изза того что контекст бд закрывается, то ломается состояние participant. найти почему так либо не закрывать контекст
                participant = db.Participants.Single(c => c.Alias == message.From.Username);
                Booking newEntry = new Booking(participant, startDateTime, endDateTime);
                db.Bookings.Add(newEntry);
                db.SaveChanges();

                using (FileStream fs = FormSchedule.FormScheduleImage(participant))
                {
                    Message mes = bot.SendPhotoAsync(chatId: chatId, photo: new InputOnlineFile(fs, "schedule.png"), caption: "Бронь установлена.", replyToMessageId: messageId).Result;
                }
            }
        }
        private void scheduleToolStripMenuItem2_Click(object sender, EventArgs e)
        {
            var form = new FormSchedule();

            ShowForm(form);
        }