예제 #1
0
        /// <summary>
        /// история статусов
        /// </summary>
        private void CreateOrderStatusHisotyWorksheet()
        {
            OrderStatusList = OrderFunction.GetAllHistoryStatus();

            // шапка
            OrderStatusHisotyWorksheet.Cells[1, 1].Value = "Номер заказа";
            OrderStatusHisotyWorksheet.Cells[1, 2].Value = "Дата";
            OrderStatusHisotyWorksheet.Cells[1, 3].Value = "Статус";
            OrderStatusHisotyWorksheet.Cells[1, 4].Value = "Комментарий";
            OrderStatusHisotyWorksheet.Cells[1, 5].Value = "Пользователь";

            int row = 2;

            foreach (var status in OrderStatusList)
            {
                //номер заказа
                OrderStatusHisotyWorksheet.Cells[row, 1].Value = status.Orders.FirstOrDefault().Number;

                //дата
                OrderStatusHisotyWorksheet.Cells[row, 2].Value = status.Timestamp.ToString();

                //Статус
                OrderStatusHisotyWorksheet.Cells[row, 3].Value = status.Status.Name;

                //коммент
                OrderStatusHisotyWorksheet.Cells[row, 4].Value = status.Text;

                //пользователь
                OrderStatusHisotyWorksheet.Cells[row, 5].Value = status.Follower.FirstName + " " + status.Follower.LastName;

                row++;
            }
        }
        /// <summary>
        /// вернуть назад к выбору статусов. Перед этим удаляем уже добавленные данные
        /// </summary>
        /// <returns></returns>
        private async Task <IActionResult> BackToStatusEditor()
        {
            int OrderStatusId = Argumetns[1];

            OrderFunction.RemoveStatus(OrderStatusId);

            return(await SendStatusEditor());
        }
예제 #3
0
    static void FinishUp(ref Function oldFunc, OrderFunction currentOrder, string currentMethod, Function newFunc, bool negativeNumber)
    {
        var    realOld      = new Function(oldFunc);
        var    actualMethod = methods.GetFunction(currentMethod);
        double multiplier   = negativeNumber ? -1 : 1;

        oldFunc = (x) => { return(currentOrder.Invoke(realOld(x), actualMethod(newFunc(x * multiplier)))); };
    }
예제 #4
0
        public Trade ConfirmFilled(int tradeId, decimal executedLevel, int size = 0)
        {
            var trade = context.Trades
                .Include(x => x.TradeSteps)
                .Include(x => x.Orders)
                .Include(x => x.Signal).ThenInclude(t => t.SignalSteps)
                .Include(x => x.Signal).ThenInclude(t => t.BrokerInstrument)
                .FirstOrDefault(x => x.Id == tradeId);
            if (trade == null) return null;

            var lastStep = trade.TradeSteps.OrderByDescending(x => x.Created).First();
            if ((lastStep.Type == TradeStepType.Placed) || (lastStep.Type == TradeStepType.PlacedOld))
            {
                trade.Orders.Where(x => x.State !=OrderState.Canceled).FirstOrDefault(x => x.Function == OrderFunction.Entry).ExecutedLevel = executedLevel;
                trade.Orders.Where(x => x.State !=OrderState.Canceled).FirstOrDefault(x => x.Function == OrderFunction.Entry).State = OrderState.Filled;
                if (size != 0) trade.Orders.Where(x => x.State !=OrderState.Canceled).FirstOrDefault(x => x.Function == OrderFunction.Entry).Size = size;
                var newStep = new TradeStep
                {
                    Trade = trade,
                    Type = TradeStepType.Filled,
                    EntryLevel = executedLevel,
                    StopLevel = lastStep.StopLevel,
                    ProfitLevel = lastStep.ProfitLevel,
                    Size = lastStep.Size
                };
                context.TradeSteps.Add(newStep);
                return trade;
            }

            if ((trade.TradeSteps.OrderByDescending(x => x.Created).First().Type == TradeStepType.Filled)
             || (trade.TradeSteps.OrderByDescending(x => x.Created).First().Type == TradeStepType.TGS))
            {

                var initialEntry = (decimal)trade.Orders.Where(x => x.State !=OrderState.Canceled).FirstOrDefault(x => x.Function == OrderFunction.Entry).StopLevel;
                var einstieg = (decimal)trade.Orders.Where(x => x.State !=OrderState.Canceled).FirstOrDefault(x => x.Function == OrderFunction.Entry).ExecutedLevel;
                var ausstieg = (decimal)executedLevel;
                var initialStop = trade.TradeSteps.OrderBy(x => x.Created).FirstOrDefault(x => x.Type == TradeStepType.Placed).StopLevel;

                var rrr = Math.Abs(initialEntry - (decimal)initialStop);
                var rResult = Math.Abs(ausstieg - einstieg) / rrr;
                OrderFunction func = OrderFunction.SL;
                if (rResult > 1) func = OrderFunction.TP;

                trade.Orders.Where(x => x.State !=OrderState.Canceled).FirstOrDefault(x => x.Function == func).ExecutedLevel = executedLevel;
                trade.Orders.Where(x => x.State !=OrderState.Canceled).FirstOrDefault(x => x.Function == func).State = OrderState.Filled;
                foreach (var order in trade.Orders.Where(x => x.State !=OrderState.Canceled).Where(x => x.Function != func && x.State == OrderState.Submitted))
                    order.State = OrderState.Canceled;

                //if(size!=0) trade.Orders.FirstOrDefault(x => x.Function == OrderFunction.Entry).Size = size;

                var newStep = new TradeStep { Trade = trade, Type = TradeStepType.Closed, ProfitLevel = executedLevel, EntryLevel = lastStep.EntryLevel, Size = lastStep.Size };
                context.TradeSteps.Add(newStep);
                return trade;
            }

            return trade;
        }
예제 #5
0
        /// <summary>
        /// Добавить комментарий к заказу. БД
        /// </summary>
        /// <returns></returns>
        private async Task <IActionResult> AddCommentToOrderTmp()
        {
            OrderFunction = new OrderFunction();

            OrderFunction.AddCommentToOrderTmp(FollowerId, BotInfo.Id, Update.Message.Text);

            OrderFunction.Dispose();

            BotMessage = new OrderTempMessage(FollowerId, BotInfo.Id);

            await SendMessage(BotMessage.BuildMsg());

            return(base.OkResult);
        }
        /// <summary>
        /// Добавить новый статус заказа
        /// </summary>
        /// <param name="NewStatusId"></param>
        /// <returns></returns>
        private async Task <IActionResult> InsertOrderStatus(int NewStatusId)
        {
            var Order = OrderFunction.GetOrder(OrderId);

            if (Order != null)
            {
                var orderStatus = OrderFunction.InsertOrderStarus(OrderId, NewStatusId, FollowerId, false);

                BotMessage = new OrderStatusConfirmMessage(Order, orderStatus);

                await EditMessage(BotMessage.BuildMsg());
            }

            return(OkResult);
        }
예제 #7
0
        /// <summary>
        /// Пользователь выбрал адрес доставки. Сохраняем и предлагаем выбрать способ оплаты
        /// </summary>
        /// <param name="AddressId"></param>
        /// <returns></returns>
        private async Task <IActionResult> SelectAddressDelivery(int AddressId)
        {
            OrderFunction = new OrderFunction();

            if (OrderFunction.AddAddressToOrderTmp(FollowerId, BotInfo.Id, AddressId) != null)
            {
                OrderFunction.Dispose();
                return(await SendPaymentMethodsList());
            }
            else
            {
                await AnswerCallback("Произошла ошибка при выборе адреса доставки", true);
            }

            return(OkResult);
        }
        /// <summary>
        /// Показать адрес доставки на карте
        /// </summary>
        /// <returns></returns>
        private async Task <IActionResult> SendOrderAddressOnMap()
        {
            var Address = OrderFunction.GetAddress(OrderId);

            if (Address != null && Address.Adress.House != null)
            {
                Location location = new Location
                {
                    Latitude  = Convert.ToSingle(Address.Adress.House.Latitude),
                    Longitude = Convert.ToSingle(Address.Adress.House.Longitude)
                };

                await SendLocation(location);
            }
            return(OkResult);
        }
        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);
            }
        }
예제 #10
0
        /// <summary>
        /// Пользователь выбрал пункт самовывоза. Сохраняем
        /// </summary>
        /// <param name="PickupPointId"></param>
        /// <returns></returns>
        private async Task <IActionResult> SelectPickupPoint(int PickupPointId)
        {
            OrderFunction = new OrderFunction();

            if (OrderFunction.AddPickUpPointToOrderTmp(FollowerId, BotInfo.Id, PickupPointId) != null)
            {
                OrderFunction.Dispose();
                return(await SendPaymentMethodsList());
            }

            else
            {
                await AnswerCallback("Произошла ошибка при выборе пункта самовывозы", true);
            }

            return(OkResult);
        }
        /// <summary>
        /// Отправить сообщения с кнопками статусов заказа (1. Согласован 2. Отменен 3. Удален и тд)
        /// </summary>
        /// <returns></returns>
        private async Task <IActionResult> SendStatusEditor()
        {
            var Order = OrderFunction.GetOrder(OrderId);

            if (Order != null)
            {
                BotMessage = new OrderStatusEditorMessage(Order);
                await EditMessage(BotMessage.BuildMsg());

                return(OkResult);
            }

            else
            {
                return(OkResult);
            }
        }
        /// <summary>
        /// Сохраняем новый статус заказа и уведомляем пользователей
        /// </summary>
        /// <returns></returns>
        private async Task <IActionResult> ConfirmNewStatus()
        {
            try
            {
                if (Argumetns != null && Argumetns.Count == 2)
                {
                    var status = OrderFunction.ConfirmOrderStatus(Argumetns[1]);

                    //меняем текущее сообщение на сообщение с описание заказа
                    await GetOrderAdmin(base.MessageId);

                    var Order = OrderFunction.GetOrder(OrderId);

                    //уведомляем всех о новом статусе заказа
                    BotMessage = new OrderActionNotifiMessage(Order, status);
                    await SendMessageAllBotEmployeess(BotMessage.BuildMsg());

                    ///Если поставили статус "Выполено" то пользователю оформившему данные заказ приходил сообщение с просьбой
                    ///оставить отзыв. Остатки на скалде пересчитываются и операторам приходит уведомление об изменениях в остатках
                    if (status != null && status.StatusId == Core.ConstantVariable.OrderStatusVariable.Completed)
                    {
                        var stock = Order.UpdateStock();

                        BotMessage = new FeedBackOfferMessage(Order);

                        await SendMessage(Order.Follower.ChatId, BotMessage.BuildMsg());

                        BotMessage = new StockChangesMessage(stock, Order.Id);

                        await SendMessageAllBotEmployeess(BotMessage.BuildMsg());
                    }

                    return(OkResult);
                }

                else
                {
                    return(OkResult);
                }
            }
            catch
            {
                return(OkResult);
            }
        }
        public void RefreshView()
        {
            // filtering
            var newView = _source.Where(e => IncludedFunction?.Invoke(e) ?? true);

            // sorting
            if (AscendingOrder)
            {
                newView = newView.OrderBy(e => OrderFunction?.Invoke(e));
            }
            else
            {
                newView = newView.OrderByDescending(e => OrderFunction?.Invoke(e));
            }

            _view.Clear();
            _view.AddRange(newView);
            CollectionChanged?.Invoke(this, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset));
        }
        /// <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);
        }
        /// <summary>
        /// Добавить комментраий к новому статусу
        /// </summary>
        /// <returns></returns>
        private async Task <IActionResult> AddCommentToStatus()
        {
            int OrderStatusId = 0;

            try
            {
                OrderStatusId = Convert.ToInt32(base.OriginalMessage.Substring(ForceReplyAddCommentToStatus.Length));

                var orderStatus = OrderFunction.AddCommentToStatus(OrderStatusId, ReplyToMessageText);

                var Order = OrderFunction.GetOrder(Convert.ToInt32(orderStatus.OrderId));

                BotMessage = new OrderStatusConfirmMessage(Order, orderStatus);

                await SendMessage(BotMessage.BuildMsg());

                return(OkResult);
            }
            catch
            {
                return(OkResult);
            }
        }
예제 #17
0
        /// <summary>
        /// Показать заказ пользователя. Команда /myorder
        /// </summary>
        /// <returns></returns>
        private async Task <IActionResult> SendMyOrder()
        {
            try
            {
                int number = Convert.ToInt32(base.CommandName.Substring(MyOrder.Length));

                OrderFunction = new OrderFunction();

                this.Order = OrderFunction.GetFollowerOrder(number, FollowerId);

                if (this.Order != null)
                {
                    BotMessage = new OrderViewMessage(this.Order);
                    await SendMessage(BotMessage.BuildMsg());
                }

                return(base.OkResult);
            }

            catch
            {
                return(base.OkResult);
            }
        }
        /// <summary>
        /// Показать номер телефона покупателя
        /// </summary>
        /// <returns></returns>
        private async Task <IActionResult> SendContactUser()
        {
            var order = OrderFunction.GetOrder(OrderId);

            if (order != null && order.Follower != null && order.Follower.Telephone != null && order.Follower.Telephone != "")
            {
                Contact contact = new Contact
                {
                    FirstName   = order.Follower.FirstName,
                    PhoneNumber = order.Follower.Telephone,
                    UserId      = order.Follower.ChatId
                };

                await SendContact(contact);
            }

            if (order != null && order.Follower != null && order.Follower.UserName != null && order.Follower.UserName != "")
            {
                await SendUrl("https://t.me/" + order.Follower.UserName);
            }


            return(OkResult);
        }
예제 #19
0
        /// <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);
        }
예제 #20
0
        /// <summary>
        /// Пользователь выбрал методо оплаты
        /// </summary>
        /// <returns></returns>
        private async Task <IActionResult> SelectPaymentMethod()
        {
            OrderFunction = new OrderFunction();

            int PaymentTypeId = 0;

            bool TestConnection = false;

            bool ExistUserName = false;

            bool ExistTelephone = false;

            OrderTemp orderTemp = null;

            ConfigurationBot = GetConfigurationBot(BotInfo.Id);

            if (Argumetns.Count > 0)
            {
                PaymentTypeId = Argumetns[0];

                TestConnection = OrderFunction.PaymentTypeTestConnection(PaymentTypeId);
            }

            if (TestConnection == false)
            {
                await AnswerCallback("Ошибка. Данный способ оплаты недоступен!", true);

                OrderFunction.Dispose();
                return(OkResult);
            }

            if (TestConnection)
            {
                orderTemp = OrderFunction.AddPaymentMethodToOrderTmp(FollowerId, BotInfo.Id, PaymentTypeId);
                OrderFunction.Dispose();
            }


            //Данные о выбраном способоне оплаты успешно занесены в БД.
            //Если в настройках бота включена верификация по номеру телефона, то проверяем указан ли номер телефона у этого пользователя
            //Если не указан то просим указать
            ExistTelephone = FollowerFunction.ExistTelephone(FollowerId);
            if (orderTemp != null && ConfigurationBot != null && ConfigurationBot.VerifyTelephone && !ExistTelephone)
            {
                BotMessage = new RequestPhoneNumberMessage();
                await SendMessage(BotMessage.BuildMsg());
            }
            //телефон указан
            if (orderTemp != null && ConfigurationBot != null && ConfigurationBot.VerifyTelephone && ExistTelephone)
            {
                return(await SendOrderTemp());
            }


            //Данные о выбраном способоне оплаты успешно занесены в БД.
            //Если в настройках бота верификация по телефону отключена, проверяем указан ли у пользователя UserName
            ExistUserName = FollowerFunction.ExistUserName(FollowerId);
            if (orderTemp != null && ConfigurationBot != null && !ConfigurationBot.VerifyTelephone && !ExistUserName)
            {
                return(await SendUserNameAddedFaq());
            }

            //UserName указан
            if (orderTemp != null && ConfigurationBot != null && !ConfigurationBot.VerifyTelephone && ExistUserName)
            {
                return(await SendOrderTemp());
            }


            return(OkResult);
        }
        public Orders AddOrder()
        {
            double total     = 0.0;
            double ShipPrice = 0;
            int    Number    = 0;

            OrderFunction = new OrderFunction();

            Basket   = db.Basket.Where(b => b.FollowerId == FollowerId && b.Enable && b.BotInfoId == BotInfo.Id).Include(b => b.Product.CurrentPrice).ToList();
            OrderTmp = db.OrderTemp.Where(o => o.FollowerId == FollowerId && o.BotInfoId == BotInfo.Id).FirstOrDefault();
            var LastOrder = db.Orders.OrderByDescending(o => o.Id).FirstOrDefault();

            //Общая строимость корзины
            total = BusinessLayer.BasketFunction.BasketTotalPrice(Basket);

            if (LastOrder != null)  // Узнаем последний номер заказа в БД
            {
                Number = Convert.ToInt32(LastOrder.Number);
            }

            if (OrderTmp != null && OrderTmp.PaymentTypeId != null && Basket.Count > 0)
            {
                Orders NewOrder = new Orders
                {
                    DateAdd    = DateTime.Now,
                    FollowerId = FollowerId,
                    Text       = OrderTmp.Text,
                    Number     = Number + 1,
                    Paid       = false,
                    BotInfoId  = BotInfo.Id,
                };

                if (OrderTmp.PickupPointId != null)// самовывоз
                {
                    NewOrder.PickupPointId = OrderTmp.PickupPointId;
                }



                if (Invoice != null) // проверяем создался ли инвойс. Если нет то у пользователя будет способ оплаты при получении
                {
                    NewOrder.InvoiceId = Invoice.Id;
                }

                db.Orders.Add(NewOrder);
                db.SaveChanges();


                // добавляем инф. о доставке в БД
                if (OrderTmp != null)
                {
                    AddAddressToOrder(NewOrder.Id, OrderTmp.AddressId, ShipPrice);
                }

                // переносим из корзины в Состав заказа
                NewOrder.OrderProduct = BusinessLayer.BasketFunction.FromBasketToOrderPosition(NewOrder.Id, Basket);

                var CurrentStarus = OrderFunction.InsertOrderStatus(NewOrder.Id, FollowerId);

                NewOrder = OrderFunction.UpdCurrentStatus(NewOrder, CurrentStarus);

                OrderFunction.RemoveOrderTmp(FollowerId, BotInfo.Id);

                db.SaveChanges();

                db.Dispose();

                return(NewOrder);
            }

            else
            {
                return(null);
            }
        }
예제 #22
0
        /// <summary>
        /// инфо о заказах
        /// </summary>
        private void CreateOrderWorksheet()
        {
            OrderList = OrderFunction.GetAllOrders();

            // шапка
            OrderWorksheet.Cells[1, 1].Value  = "Номер заказа";
            OrderWorksheet.Cells[1, 2].Value  = "Дата";
            OrderWorksheet.Cells[1, 3].Value  = "Комментарий";
            OrderWorksheet.Cells[1, 4].Value  = "Пользователь";
            OrderWorksheet.Cells[1, 5].Value  = "Телефон";
            OrderWorksheet.Cells[1, 6].Value  = "Товар";
            OrderWorksheet.Cells[1, 7].Value  = "Цена";
            OrderWorksheet.Cells[1, 8].Value  = "Кол-во";
            OrderWorksheet.Cells[1, 9].Value  = "Стоимость";
            OrderWorksheet.Cells[1, 10].Value = "Текущий статус заказа";
            OrderWorksheet.Cells[1, 11].Value = "Стоимость доставки";
            OrderWorksheet.Cells[1, 12].Value = "Адрес доставки";
            OrderWorksheet.Cells[1, 13].Value = "Пункт самовывоза";
            OrderWorksheet.Cells[1, 14].Value = "Способ оплаты";
            OrderWorksheet.Cells[1, 15].Value = "Стоимость заказа без учета доставки";

            int row = 2;

            foreach (var order in OrderList)
            {
                foreach (var position in order.OrderProduct.GroupBy(p => p.Product))
                {
                    OrderWorksheet.Cells[row, 1].Value = order.Number;
                    // указываем что число
                    OrderWorksheet.Cells[row, 1].Style.Numberformat.Format = "0";

                    OrderWorksheet.Cells[row, 2].Value = order.DateAdd.ToString();

                    //комментарий к заказу
                    OrderWorksheet.Cells[row, 3].Value = order.Text;

                    //ПОльзователь
                    OrderWorksheet.Cells[row, 4].Value = order.Follower.FirstName + " " + order.Follower.LastName;

                    //Номер телефона
                    if (order.Follower.Telephone != null)
                    {
                        OrderWorksheet.Cells[row, 5].Value = order.Follower.Telephone;
                    }

                    //товар
                    OrderWorksheet.Cells[row, 6].Value = position.FirstOrDefault().Product.Name;

                    //цена
                    OrderWorksheet.Cells[row, 7].Value = position.FirstOrDefault().Price.Value;
                    OrderWorksheet.Cells[row, 7].Style.Numberformat.Format = @"#,##0.00_ ;\-#,##0.00_ ;0.00_ ;";

                    //кол-во
                    OrderWorksheet.Cells[row, 8].Value = position.Count();
                    OrderWorksheet.Cells[row, 8].Style.Numberformat.Format = "0";

                    //стоимость
                    OrderWorksheet.Cells[row, 9].Value = (position.Count() * position.FirstOrDefault().Price.Value);
                    OrderWorksheet.Cells[row, 9].Style.Numberformat.Format = @"#,##0.00_ ;\-#,##0.00_ ;0.00_ ;";

                    //текущий статус заказа
                    OrderWorksheet.Cells[row, 10].Value = order.CurrentStatusNavigation.Status.Name;

                    //стоимость доставки и адрес
                    if (order.OrderAddress != null && order.OrderAddress.Adress != null)
                    {
                        OrderWorksheet.Cells[row, 11].Value = order.OrderAddress.ShipPriceValue;
                        OrderWorksheet.Cells[row, 11].Style.Numberformat.Format = @"#,##0.00_ ;\-#,##0.00_ ;0.00_ ;";

                        OrderWorksheet.Cells[row, 12].Value = order.OrderAddress.Adress.ToString();
                    }

                    //самовывоз
                    if (order.PickupPoint != null)
                    {
                        OrderWorksheet.Cells[row, 13].Value = order.PickupPoint.Name;
                    }

                    //способ оплаты
                    if (order.Invoice != null && order.Invoice.PaymentType != null)
                    {
                        OrderWorksheet.Cells[row, 14].Value = order.Invoice.PaymentType.Name;
                    }

                    else
                    {
                        OrderWorksheet.Cells[row, 14].Value = "При получении";
                    }

                    //стоимость без учета доставки
                    OrderWorksheet.Cells[row, 15].Value = order.TotalPrice();
                    OrderWorksheet.Cells[row, 15].Style.Numberformat.Format = @"#,##0.00_ ;\-#,##0.00_ ;0.00_ ;";

                    row++;
                }
            }
        }
예제 #23
0
    public static bool UpdateFunction(string methodString, ref Function function)
    {
        function = (x) => { return(0); };

        try
        {
            #region Method From String

            #region Stored Data

            bool dotted = false;

            Function numberFunction = null;

            CurrentlyTaking currentlyTaking = CurrentlyTaking.PostOrder;
            OrderFunction   currentOrder    = orders['+'];
            string          currentMethod   = string.Empty;

            bool negativeNumber = false;

            string currentNumber = string.Empty;

            #endregion

            #region For Loop

            for (int i = 0; i < methodString.Length; i++)
            {
                char c = methodString[i];

                switch (c)
                {
                    #region Number Cases

                case '0':
                case '1':
                case '2':
                case '3':
                case '4':
                case '5':
                case '6':
                case '7':
                case '8':
                case '9':

                    if (currentlyTaking == CurrentlyTaking.PostOrder)
                    {
                        currentlyTaking = CurrentlyTaking.Number;
                    }

                    if (currentlyTaking != CurrentlyTaking.Number || currentNumber == "x")
                    {
                        return(false);
                    }

                    currentNumber += c;

                    break;

                    #endregion

                case '.':
                    if (dotted)
                    {
                        return(false);
                    }
                    if (currentlyTaking != CurrentlyTaking.Number)
                    {
                        return(false);
                    }

                    dotted = true;

                    break;

                    #region Letter Cases

                case 'A':
                case 'B':
                case 'C':
                case 'D':
                case 'E':
                case 'F':
                case 'G':
                case 'H':
                case 'I':
                case 'J':
                case 'K':
                case 'L':
                case 'M':
                case 'N':
                case 'O':
                case 'P':
                case 'Q':
                case 'R':
                case 'S':
                case 'T':
                case 'U':
                case 'V':
                case 'W':
                case 'X':
                case 'Y':
                case 'Z':

                    if (currentlyTaking == CurrentlyTaking.PostOrder)
                    {
                        currentlyTaking = CurrentlyTaking.Method;
                    }
                    else if (currentlyTaking != CurrentlyTaking.Method)
                    {
                        return(false);
                    }

                    currentMethod += c;

                    break;

                    #endregion

                case 'x':
                    if (currentlyTaking == CurrentlyTaking.PostOrder)
                    {
                        currentlyTaking = CurrentlyTaking.Number;
                    }
                    if (currentlyTaking != CurrentlyTaking.Number || currentNumber != string.Empty)
                    {
                        return(false);
                    }

                    currentNumber = "x";

                    break;

                    #region Action Cases

                case '+':
                    goto case '^';

                case '-':
                    if (currentlyTaking == CurrentlyTaking.Order)
                    {
                        goto case '^';
                    }

                    switch (currentlyTaking)
                    {
                    case CurrentlyTaking.PostOrder:
                        currentlyTaking = CurrentlyTaking.Number;
                        goto case CurrentlyTaking.Number;

                    case CurrentlyTaking.Number:
                        if (currentNumber != string.Empty)
                        {
                            return(false);
                        }

                        negativeNumber = !negativeNumber;
                        break;

                    default:
                        return(false);
                    }

                    break;

                case '*':
                    goto case '^';

                case '/':
                    goto case '^';

                case '^':
                    if (currentOrder == null)
                    {
                        currentOrder = orders[c];
                    }
                    else
                    {
                        return(false);
                    }

                    break;

                    #endregion

                case '(':
                    if (currentlyTaking == CurrentlyTaking.PostOrder)
                    {
                        currentlyTaking = CurrentlyTaking.Number;
                    }

                    if (currentlyTaking != CurrentlyTaking.Number)
                    {
                        return(false);
                    }
                    if (currentNumber != string.Empty)
                    {
                        return(false);
                    }

                    currentlyTaking = CurrentlyTaking.BracketFunction;

                    string insideBrackets = string.Empty;

                    int mustFindCloses = 1;

                    int j;

                    for (j = i + 1; j < methodString.Length; j++)
                    {
                        switch (methodString[j])
                        {
                        case '(':
                            mustFindCloses++;
                            break;

                        case ')':
                            mustFindCloses--;
                            break;
                        }

                        if (mustFindCloses == 0)
                        {
                            break;
                        }

                        insideBrackets += methodString[j];
                    }

                    methodString = methodString.Remove(i + 1, j - i - 1);

                    if (UpdateFunction(insideBrackets, ref numberFunction))
                    {
                    }
                    else
                    {
                        return(false);
                    }

                    break;

                case ')':
                    if (i < 1 || methodString[i - 1] != '(')
                    {
                        return(false);
                    }
                    break;

                case ' ':
                    switch (currentlyTaking)
                    {
                    case CurrentlyTaking.Order:
                        currentlyTaking = CurrentlyTaking.PostOrder;
                        break;

                    case CurrentlyTaking.PostOrder:
                        break;

                    case CurrentlyTaking.Method:
                        currentlyTaking = CurrentlyTaking.Number;
                        break;

                    case CurrentlyTaking.Number:
                        if (currentNumber == "x")
                        {
                            numberFunction = (x) => { return(x); };
                        }
                        else
                        {
                            numberFunction = (x) => { return(double.Parse(currentNumber)); };
                        }

                        goto case CurrentlyTaking.BracketFunction;

                    case CurrentlyTaking.BracketFunction:
                        FinishUp(ref function, currentOrder, currentMethod, numberFunction, negativeNumber);

                        currentlyTaking = CurrentlyTaking.Order;

                        negativeNumber = false;
                        dotted         = false;
                        currentNumber  = string.Empty;
                        currentMethod  = string.Empty;
                        numberFunction = null;
                        currentOrder   = null;

                        break;
                    }

                    break;

                default: return(false);
                }
            }

            #endregion

            #region Left Over

            switch (currentlyTaking)
            {
            case CurrentlyTaking.Number:
                if (currentNumber == "x")
                {
                    numberFunction = (x) => { return(x); };
                }
                else
                {
                    numberFunction = (x) => { return(double.Parse(currentNumber)); };
                }

                goto case CurrentlyTaking.BracketFunction;

            case CurrentlyTaking.BracketFunction:
                FinishUp(ref function, currentOrder, currentMethod, numberFunction, negativeNumber);
                break;

            default:
                return(false);
            }

            #endregion

            #endregion
        }
        catch (System.Exception e)
        {
            Debug.LogWarning(e.Message);
            return(false);
        }

        return(true);
    }