Beispiel #1
0
        protected override void Constructor()
        {
            Processing = new OrderProcess(Update);
            if (Update.Message != null && Update.Message.ReplyToMessage != null)
            {
                CommandName = Update.Message.ReplyToMessage.Text;
            }

            try
            {
                if (base.Argumetns.Count > 0)
                {
                    OrderId              = Argumetns[0];
                    OrderAdminMsg        = new AdminOrderMessage(this.OrderId, FollowerId);
                    OrderPositionListMsg = new OrderPositionListMessage(this.OrderId);
                    FeedBackOfferMsg     = new FeedBackOfferMessage(this.OrderId);
                    using (MarketBotDbContext db = new MarketBotDbContext())
                        Order = db.Orders.Where(o => o.Id == this.OrderId).Include(o => o.OrderConfirm).
                                Include(o => o.OrderDone).Include(o => o.OrderDeleted).Include(o => o.OrderProduct).
                                Include(o => o.Follower).Include(o => o.FeedBack).Include(o => o.OrderAddress).Include(o => o.Invoice).Include(o => o.OrdersInWork).FirstOrDefault();

                    InvoiceViewMsg = new InvoiceViewMessage(Order.Invoice, Order.Id);
                }
            }

            catch
            {
            }
        }
Beispiel #2
0
        /// <summary>
        /// Восстановить заказ
        /// </summary>
        /// <returns></returns>
        private async Task <IActionResult> OrderRecovery()
        {
            using (MarketBotDbContext db = new MarketBotDbContext())
            {
                try
                {
                    var deleted = db.OrderDeleted.Where(o => o.OrderId == OrderId);

                    if (deleted != null && deleted.Count() > 0)
                    {
                        foreach (var value in deleted)
                        {
                            db.OrderDeleted.Remove(value);
                        }

                        db.SaveChanges();
                    }

                    OrderAdminMsg = new AdminOrderMessage(OrderId, FollowerId);
                    await EditMessage(OrderAdminMsg.BuildMessage());

                    string notify = "Заказ №" + Order.Number.ToString() + " восстановлен. Пользователь " + GeneralFunction.FollowerFullName(FollowerId);
                    await Processing.NotifyChanges(notify, Order.Id);

                    return(base.OkResult);
                }

                catch (Exception e)
                {
                    return(base.NotFoundResult);
                }
            }
        }
        /// <summary>
        /// Назад
        /// </summary>
        /// <returns></returns>
        private async Task <IActionResult> BackToOrder()
        {
            BotMessage = new AdminOrderMessage(OrderId, FollowerId);
            await EditMessage(BotMessage.BuildMsg());

            return(OkResult);
        }
Beispiel #4
0
        /// <summary>
        /// После того как пользователь нажал на кнопку "Отправить", информация о заказе пересылается Операторам в личку и в общий чат (если он есть)
        /// </summary>
        /// <param name="OrderId"></param>
        /// <returns></returns>
        private async Task <IActionResult> OrderRedirectToAdmins(int OrderId, Orders order = null)
        {
            using (MarketBotDbContext db = new MarketBotDbContext())
            {
                try
                {
                    var admins = db.Admin.Include(a => a.Follower).ToList();

                    if (order == null)
                    {
                        OrderAdminMsg = new AdminOrderMessage(OrderId);
                    }

                    else
                    {
                        OrderAdminMsg = new AdminOrderMessage(order);
                    }

                    var message = OrderAdminMsg.BuildMessage();

                    await SendMessageAllBotEmployeess(message);

                    return(base.OkResult);
                }

                catch
                {
                    return(base.NotFoundResult);
                }
            }
        }
        private async Task <IActionResult> SendPage2Keyboard()
        {
            AdminOrderMessage adminOrder = new AdminOrderMessage(OrderId);

            await EditInlineReplyKeyboard(adminOrder.Page2Keyboard());

            return(OkResult);
        }
        private async Task <IActionResult> GetOrderAdmin(int MessageId = 0)
        {
            BotMessage = new AdminOrderMessage(OrderId, FollowerId);

            await SendMessage(BotMessage.BuildMsg(), MessageId);

            return(base.OkResult);
        }
Beispiel #7
0
        /// <summary>
        /// Удалить заказ
        /// </summary>
        /// <returns></returns>
        private async Task <IActionResult> OrderDelete()
        {
            int number = 0;
            int id     = 0;

            try
            {
                number = Convert.ToInt32(base.OriginalMessage.Substring(ForceReplyOrderDelete.Length));

                using (MarketBotDbContext db = new MarketBotDbContext())
                {
                    Order = db.Orders.Where(o => o.Number == number).Include(o => o.OrderDeleted).Include(o => o.OrdersInWork).FirstOrDefault();

                    string text = base.ReplyToMessageText;
                    if (Order != null && Order.OrderDeleted != null && Order.OrderDeleted.Count == 0 &&
                        await Processing.CheckInWork(Order) && !await Processing.CheckIsDone(Order))
                    {
                        id = Order.Id;
                        OrderDeleted orderDeleted = new OrderDeleted
                        {
                            DateAdd    = DateTime.Now,
                            Deleted    = true,
                            FollowerId = FollowerId,
                            OrderId    = id,
                            Text       = text
                        };

                        db.OrderDeleted.Add(orderDeleted);
                        db.SaveChanges();
                    }
                }

                OrderAdminMsg = new AdminOrderMessage(id, FollowerId);
                var message = OrderAdminMsg.BuildMessage();
                await SendMessage(message);

                //Уведомляем других сотрудников об изменениях
                string notify = "Заказ №" + Order.Number.ToString() + " Удален. Пользователь " + GeneralFunction.FollowerFullName(FollowerId);
                await Processing.NotifyChanges(notify, Order.Id);

                return(base.OkResult);
            }

            catch
            {
                return(OkResult);
            }
        }
Beispiel #8
0
        private async Task <IActionResult> TakeOrder()
        {
            try
            {
                using (MarketBotDbContext db = new MarketBotDbContext())
                {
                    OrdersInWork inWork = new OrdersInWork {
                        FollowerId = FollowerId, Timestamp = DateTime.Now, OrderId = Order.Id, InWork = true
                    };
                    db.OrdersInWork.Add(inWork);

                    var InWorkNow = Order.OrdersInWork.OrderByDescending(o => o.Id).FirstOrDefault();

                    //заказ не находится ни у кого в обработке
                    if (Order != null && InWorkNow == null && db.SaveChanges() > 0 ||
                        Order != null && InWorkNow != null &&
                        InWorkNow.InWork == false && db.SaveChanges() > 0)
                    {
                        Order.OrdersInWork.Add(inWork);
                        OrderAdminMsg = new AdminOrderMessage(Order, FollowerId);
                        await EditMessage(OrderAdminMsg.BuildMessage());

                        string notify = "Заказ №" + this.Order.Number.ToString() + " взят в работу. Пользователь " + GeneralFunction.FollowerFullName(base.FollowerId);
                        await Processing.NotifyChanges(notify, this.Order.Id);
                    }

                    //заказ уже кем то обрабатывается
                    if (InWorkNow != null && InWorkNow.FollowerId != FollowerId && InWorkNow.InWork == true)
                    {
                        await SendMessage(new BotMessage { TextMessage = "Заявка в обработке у " + GeneralFunction.FollowerFullName(InWorkNow.FollowerId) });
                    }

                    //заявка уже в обработке у пользователя
                    if (InWorkNow != null && InWorkNow.FollowerId == FollowerId && InWorkNow.InWork == true)
                    {
                        OrderAdminMsg = new AdminOrderMessage(Order, FollowerId);
                        await EditMessage(OrderAdminMsg.BuildMessage());
                    }

                    return(OkResult);
                }
            }

            catch
            {
                return(NotFoundResult);
            }
        }
        private async Task <IActionResult> TakeOrder()
        {
            var Order = OrderFunction.GetOrder(OrderId);


            //Заказ ни кем не обрабатывается
            if (Order != null && Order.OrdersInWork.Count == 0 ||
                Order != null && Order.OrdersInWork.Count > 0 && Order.OrdersInWork.LastOrDefault().InWork == false)
            {
                Order.OrdersInWork.Add(OrderFunction.InsertOrderInWork(OrderId, FollowerId));
                BotMessage = new AdminOrderMessage(Order, FollowerId);
                await EditMessage(BotMessage.BuildMsg());

                //уведомляем всех о том что кто-то взял заказ работу
                BotMessage = new OrderActionNotifiMessage(Order, Order.OrdersInWork.LastOrDefault());

                await SendMessageAllBotEmployeess(BotMessage.BuildMsg());

                return(OkResult);
            }

            //заявка в обработке у тек. пользователя
            if (Order != null && Order.OrdersInWork.Count > 0 && Order.OrdersInWork.LastOrDefault().InWork == true &&
                Order.OrdersInWork.LastOrDefault().FollowerId == FollowerId)
            {
                BotMessage = new AdminOrderMessage(Order, FollowerId);
                await EditMessage(BotMessage.BuildMsg());

                return(OkResult);
            }

            //заказ в обработке у кого то другого. Отправляем сообщение с вопрос о переназначении исполнителя
            if (Order != null && Order.OrdersInWork.Count > 0 && Order.OrdersInWork.LastOrDefault().InWork == true &&
                Order.OrdersInWork.LastOrDefault().FollowerId != FollowerId)
            {
                BotMessage = new OverridePerformerConfirmMessage(Order, Order.OrdersInWork.LastOrDefault());
                var mess = BotMessage.BuildMsg();
                await EditMessage(mess);

                return(OkResult);
            }

            else
            {
                return(OkResult);
            }
        }
Beispiel #10
0
        /// <summary>
        /// Согласовать заказ
        /// </summary>
        /// <returns></returns>
        private async Task <IActionResult> OrderConfirm()
        {
            try
            {
                int number = Convert.ToInt32(base.OriginalMessage.Substring(ForceReplyOrderConfirm.Length));

                int id = 0;

                using (MarketBotDbContext db = new MarketBotDbContext())
                {
                    Order = db.Orders.Where(o => o.Number == number).Include(o => o.OrderConfirm).Include(o => o.OrdersInWork).FirstOrDefault();

                    if (Order != null && Order.OrderConfirm != null && Order.OrderConfirm.Count == 0 &&
                        await Processing.CheckInWork(Order) && await Processing.CheckIsDone(Order) == false)   // Если уже есть записи о том что заказ соглосован, то больще записей не делаем
                    {
                        string text = base.ReplyToMessageText;
                        id = Order.Id;

                        OrderConfirm orderConfirm = new OrderConfirm
                        {
                            DateAdd    = DateTime.Now,
                            Confirmed  = true,
                            FollowerId = FollowerId,
                            OrderId    = id,
                            Text       = text
                        };

                        db.OrderConfirm.Add(orderConfirm);
                        db.SaveChanges();
                    }
                }

                OrderAdminMsg = new AdminOrderMessage(id, FollowerId);
                var message = OrderAdminMsg.BuildMessage();
                await SendMessage(message);

                string notify = "Заказ №" + this.Order.Number.ToString() + " согласован. Пользователь " + GeneralFunction.FollowerFullName(base.FollowerId);
                await Processing.NotifyChanges(notify, this.Order.Id);

                return(base.OkResult);
            }
            catch (Exception exp)
            {
                return(base.NotFoundResult);
            }
        }
Beispiel #11
0
        private async Task <IActionResult> GetOrderAdmin()
        {
            if (OrderAdminMsg == null)
            {
                OrderAdminMsg = new AdminOrderMessage(OrderId, FollowerId);
            }

            if (await SendMessage(OrderAdminMsg.BuildMessage()) != null)
            {
                return(base.OkResult);
            }


            else
            {
                return(base.NotFoundResult);
            }
        }
        /// <summary>
        /// Освободить заказ.
        /// </summary>
        /// <returns></returns>
        private async Task <IActionResult> FreeOrder()
        {
            if (OrderId > 0)
            {
                var Inwork = OrderFunction.InsertOrderInWork(OrderId, FollowerId, false);

                var Order = OrderFunction.GetOrder(OrderId);

                BotMessage = new AdminOrderMessage(Order, FollowerId);
                await base.EditMessage(BotMessage.BuildMsg());

                string notify = "Пользователь " + GeneralFunction.FollowerFullName(FollowerId) + " освободил заказ №" + Order.Number.ToString();

                BotMessage = new OrderMiniViewMessage(notify, Order.Id);
                await SendMessageAllBotEmployeess(BotMessage.BuildMsg());
            }

            return(OkResult);
        }
        /// <summary>
        /// Подтверждение того что пользователь назначает исполнителем себя вместо кого-то
        /// </summary>
        /// <returns></returns>
        private async Task <IActionResult> ConfirmOverridePerformer()
        {
            var Order = OrderFunction.GetOrder(OrderId);

            var Inwork = OrderFunction.InsertOrderInWork(OrderId, FollowerId);

            Order.OrdersInWork.Add(Inwork);

            BotMessage = new AdminOrderMessage(Order, FollowerId);

            await EditMessage(BotMessage.BuildMsg());

            //уведомляем всех о том что кто то взял заказ в обработку
            string notify = "Заказ №" + Order.Number.ToString() + " взят в работу. Пользователь " + GeneralFunction.FollowerFullName(base.FollowerId);

            BotMessage = new OrderMiniViewMessage(notify, Order.Id);
            await SendMessageAllBotEmployeess(BotMessage.BuildMsg());

            return(OkResult);
        }
Beispiel #14
0
        /// <summary>
        /// Освободить заказ.
        /// </summary>
        /// <returns></returns>
        private async Task <IActionResult> FreeOrder()
        {
            try
            {
                if (Order != null && await Processing.CheckInWork(Order))
                {
                    using (MarketBotDbContext db = new MarketBotDbContext())
                    {
                        OrdersInWork ordersInWork = new OrdersInWork
                        {
                            Timestamp  = DateTime.Now,
                            InWork     = false,
                            OrderId    = Order.Id,
                            FollowerId = FollowerId
                        };

                        db.OrdersInWork.Add(ordersInWork);

                        if (db.SaveChanges() > 0)
                        {
                            Order.OrdersInWork.Add(ordersInWork);
                            OrderAdminMsg = new AdminOrderMessage(Order, FollowerId);
                            await base.EditMessage(OrderAdminMsg.BuildMessage());

                            await Processing.NotifyChanges("Пользователь " + GeneralFunction.FollowerFullName(FollowerId) + " освободил заказ №" + Order.Number.ToString(), Order.Id);
                        }
                        return(OkResult);
                    }
                }

                else
                {
                    return(OkResult);
                }
            }

            catch
            {
                return(OkResult);
            }
        }
Beispiel #15
0
        private async Task <IActionResult> GetOrder()
        {
            using (MarketBotDbContext db = new MarketBotDbContext())
            {
                try
                {
                    int number = Convert.ToInt32(base.CommandName.Substring(GetOrderCmd.Length));

                    int id = db.Orders.Where(o => o.Number == number).FirstOrDefault().Id;

                    OrderAdminMsg = new AdminOrderMessage(id);
                    await SendMessage(OrderAdminMsg.BuildMessage());

                    return(OkResult);
                }

                catch
                {
                    return(OkResult);
                }
            }
        }
Beispiel #16
0
        /// <summary>
        /// Назад
        /// </summary>
        /// <returns></returns>
        private async Task <IActionResult> BackToOrder()
        {
            if (OrderAdminMsg != null && await EditMessage(OrderAdminMsg.BuildMessage()) != null)
            {
                return(base.OkResult);
            }

            if (OrderAdminMsg == null && this.OrderId > 0)
            {
                OrderAdminMsg = new AdminOrderMessage(this.OrderId);
                await EditMessage(OrderAdminMsg.BuildMessage());

                return(OkResult);
            }

            else
            {
                OrderId       = Argumetns[0];
                OrderAdminMsg = new AdminOrderMessage(this.OrderId);
                await EditMessage(OrderAdminMsg.BuildMessage());

                return(OkResult);
            }
        }
        /// <summary>
        /// Сохрнанить заказ. Перенести все данные из корзины.
        /// </summary>
        /// <returns></returns>
        private async Task <IActionResult> OrderSave()
        {
            Orders new_order = null;
            bool   blocked   = false;

            OrderFunction = new OrderFunction();

            ConfigurationBot = base.GetConfigurationBot(BotInfo.Id);

            blocked = FollowerFunction.IsBlocked(FollowerId);

            if (blocked)
            {
                await AnswerCallback("Вы заблокированы администратором системы!", true);
            }

            // если в настройках бота указано время работы магазина, то проверяем подходит ли текщее время
            //под это правило. Если подходит то офрмляем заказ
            if (!blocked && ConfigurationBot.StartTime != null &&
                ConfigurationBot.EndTime != null && ConfigurationBot.StartTime.Value.Hours <=
                DateTime.Now.Hour && ConfigurationBot.StartTime.Value <= DateTime.Now.TimeOfDay &&
                ConfigurationBot.EndTime.Value > DateTime.Now.TimeOfDay)
            {
                new_order = OrderFunction.CreateOrder(FollowerId, BotInfo);
            }


            //Время работы магазина не указано.
            else if (!blocked && ConfigurationBot.EndTime == null && ConfigurationBot.StartTime == null)
            {
                new_order = OrderFunction.CreateOrder(FollowerId, BotInfo);
            }

            else
            {
                await AnswerCallback("Мы обрабатываем заказы только в период с " + ConfigurationBot.StartTime.ToString() +
                                     " и по " + ConfigurationBot.EndTime.ToString(), true);
            }

            if (new_order != null && new_order.Invoice != null)
            {
                BotMessage = new InvoiceViewMessage(new_order.Invoice, new_order.Id);
                await EditMessage(BotMessage.BuildMsg());
            }

            if (new_order != null && new_order.Invoice == null)
            {
                BotMessage = new OrderViewMessage(new_order);
                await EditMessage(BotMessage.BuildMsg());
            }

            //то отправляем уведомление о новом заказке Админам
            if (new_order != null)
            {
                BotMessage = new AdminOrderMessage(new_order);

                var message = BotMessage.BuildMsg();

                await SendMessageAllBotEmployeess(message);
            }


            OrderFunction.Dispose();

            return(OkResult);
        }