/// <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()); }
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)))); }; }
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; }
/// <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); }
/// <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); } }
/// <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); } }
/// <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); }
/// <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); }
/// <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); } }
/// <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++; } } }
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); }