private void ShowSignallerStat(Contract.Entity.Subscription cat) { // получить счет перформера по кат. сигнала PerformerStat stat = null; try { stat = TradeSharpAccountStatistics.Instance.proxy.GetPerformerStatBySignalCatId(cat.Service); } catch (Exception ex) { MessageBox.Show(Localizer.GetString("MessageCannotGetSubscribersInfo")); Logger.Info("ShowSignallerStat", ex); return; } if (stat == null) { return; } var form = new SubscriberStatisticsForm(stat); //form.EnterRoomRequested += OnEnterRoomRequested; form.Show(this); }
private void GridUserHitCell(object sender, MouseEventArgs e, int rowIndex, FastColumn col) { if (e.Button != MouseButtons.Left) { return; } var sets = (Contract.Entity.Subscription)grid.rows[rowIndex].ValueObject; selectedCategory = sets; // действие со счетом if (col.Tag == contextMenu || col.PropertyName == emptySubs.Property(s => s.Title)) { var pointTop = grid.GetCellCoords(col, rowIndex); contextMenu.Show(grid, pointTop); return; } // настроить торговлю if (col.PropertyName == emptySubs.Property(s => s.TradeAuto)) { EditTradeSettings(); } }
private void UpdateOrRemoveSubscription(Contract.Entity.Subscription sub, bool remove) { var isOk = false; var error = WalletError.CommonError; try { isOk = MainForm.serverProxyTrade.proxy.SubscribeOnService( CurrentProtectedContext.Instance.MakeProtectedContext(), AccountStatus.Instance.Login, sub.Service, sub.RenewAuto, remove, sub.AutoTradeSettings, out error); } catch (Exception ex) { Logger.ErrorFormat("GridSubscriptionOnUserHitCell - ошибка в GridSubscriptionOnUserHitCell({0}): {1}", sub.Service, ex); } if (!isOk) { MessageBox.Show((remove ? "Ошибка при отключении подписки: " : "Ошибка обновления подписки: ") + EnumFriendlyName <WalletError> .GetString(error), "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); } else { // обновить состояние подписки и кошелька SubscriptionModel.Instance.LoadSubscribedCategories(); InitiateAsynchLoad(); } }
public void TestModifyingSubscriptions() { var modelIsLoadedCalledCount = 0; SubscriptionModel.Instance.ModelIsLoaded += list => { modelIsLoadedCalledCount++; }; var modelStateChangedCalledCount = 0; SubscriptionModel.Instance.ModelStateChanged += b => { modelStateChangedCalledCount++; }; // прочитать подписку try { SubscriptionModel.Instance.LoadSubscribedCategories(); } catch (Exception ex) { Assert.Fail("LoadSubscribedCategories() failed: " + ex.Message); } var cats = SubscriptionModel.Instance.SubscribedCategories; Assert.IsNotNull(cats, "cats from server are not null"); Assert.AreEqual(1, cats.Count, "cats from server are not empty"); Assert.AreEqual(1, modelIsLoadedCalledCount, "model loaded just once"); Assert.AreEqual(0, modelStateChangedCalledCount, "model state is not changed"); // обновить подписку var newCat = new Contract.Entity.Subscription { Service = 2, PaidService = new PaidService { Id = 2, Comment = "+100500 profit" } }; SubscriptionModel.Instance.AddSubscription(newCat); var firstCat = SubscriptionModel.Instance.SubscribedCategories[0]; firstCat.AutoTradeSettings.PercentLeverage = 66; SubscriptionModel.Instance.ModifySubscription(firstCat); Assert.AreEqual(SubscriptionModel.Instance.WasModified, true, "state changed to Modified"); // сохранить изменения SubscriptionModel.Instance.SaveSubscribedCategories(); // проверить, сохранились ли изменения var updatedSubs = SubscriptionModel.Instance.SubscribedCategories; Assert.AreEqual(2, updatedSubs.Count, "2 subscriptions after update"); var updatedFirstCat = updatedSubs[0]; var updatedSecondCat = updatedSubs[1]; Assert.AreEqual(firstCat.AutoTradeSettings.PercentLeverage, updatedFirstCat.AutoTradeSettings.PercentLeverage, "modifications are saved"); Assert.AreEqual(newCat.Title, updatedSecondCat.Title, "new sub is unchanged"); Assert.AreEqual(SubscriptionModel.Instance.WasModified, false, "state changed to Unmodified"); }
private void MakeMoq() { serverCats = new List <Contract.Entity.Subscription> { new Contract.Entity.Subscription { Service = 1, PaidService = new PaidService { Comment = "Test signals", }, AutoTradeSettings = new AutoTradeSettings { PercentLeverage = 50, MaxLeverage = 10, MinVolume = 10000, StepVolume = 5000, TradeAuto = true, } } }; fakeTradeServer = ProxyBuilder.Instance.GetImplementer <ITradeSharpServerTrade>(); fakeTradeAccount = ProxyBuilder.Instance.GetImplementer <ITradeSharpAccount>(); WalletError walletError; var bindToTradeSignal = ProxyBuilder.GetMethodName <ITradeSharpServerTrade>(a => a.SubscribeOnService( null, "", 0, false, false, null, out walletError)); ((IMockableProxy)fakeTradeServer).MockMethods.Add(bindToTradeSignal, new GetAccountInfoDel((ProtectedOperationContext secCtx, string userLogin, int serviceId, bool renewAuto, bool unsb, AutoTradeSettings sets, out WalletError error) => { error = WalletError.OK; // модифицировать подписки var indexExists = serverCats.FindIndex(c => c.Service == serviceId); if (indexExists >= 0) { if (unsb) { serverCats.RemoveAt(indexExists); } else { var subs = new Contract.Entity.Subscription { Service = serviceId, AutoTradeSettings = sets, RenewAuto = renewAuto, PaidService = new PaidService { Id = serviceId } }; serverCats[indexExists] = subs; serverCats.Add(subs); } return(true); } return(true); })); var getTradeSignalsSubscribed = ProxyBuilder.GetMethodName <ITradeSharpAccount>(a => a.GetSubscriptions("")); ((IMockableProxy)fakeTradeAccount).MockMethods.Add(getTradeSignalsSubscribed, new Func <string, List <Contract.Entity.Subscription> >(userLogin => { return(userLogin == "Demo" ? serverCats : new List <Contract.Entity.Subscription>()); })); }
private void SetupGrids() { var fontBold = new Font(Font, FontStyle.Bold); var dataSpeciman = new AccountShared(new Account(), true); // счета gridAccount.Columns.Add(new FastColumn(dataSpeciman.Property(s => s.AccountId), "#") { SortOrder = FastColumnSort.Ascending, ColumnWidth = 60 }); gridAccount.Columns.Add(new FastColumn(dataSpeciman.Property(s => s.IsOwnAccount), Localizer.GetString("TitleOwner")) { ColumnMinWidth = 60, formatter = value => (bool)value ? Localizer.GetString("TitleYes") : "" }); gridAccount.Columns.Add(new FastColumn(dataSpeciman.Property(s => s.SharePercent), Localizer.GetString("TitlePercent")) { ColumnMinWidth = 75, formatter = value => { var percent = ((decimal)value); return(percent == 100 ? "100 %" : percent.ToString("f5") + "%"); } }); gridAccount.Columns.Add(new FastColumn(dataSpeciman.Property(s => s.ShareMoneyWallet), Localizer.GetString("TitleSum")) { ColumnMinWidth = 75, formatter = value => ((decimal)value).ToStringUniformMoneyFormat() }); gridAccount.Columns.Add(new FastColumn(dataSpeciman.Property(s => s.IsOwnAccount), Localizer.GetString("TitleChart")) { Tag = ColumnTagChart, ColumnMinWidth = 60, ImageList = imageListGridChart, IsHyperlinkStyleColumn = true, HyperlinkActiveCursor = Cursors.Hand, }); gridAccount.Columns.Add(new FastColumn(dataSpeciman.Property(s => s.IsOwnAccount), Localizer.GetString("TitleDeposit")) { Tag = ColumnTagDeposit, SortOrder = FastColumnSort.Ascending, ColumnWidth = 70, IsHyperlinkStyleColumn = true, HyperlinkActiveCursor = Cursors.Hand, ColorHyperlinkTextActive = Color.Blue, HyperlinkFontActive = fontBold, formatter = valueObject => Localizer.GetString("TitleDeposit") }); gridAccount.Columns.Add(new FastColumn(dataSpeciman.Property(s => s.IsOwnAccount), Localizer.GetString("TitleWithdraw")) { Tag = ColumnTagWithdraw, SortOrder = FastColumnSort.Ascending, ColumnWidth = 63, IsHyperlinkStyleColumn = true, HyperlinkActiveCursor = Cursors.Hand, ColorHyperlinkTextActive = Color.Blue, HyperlinkFontActive = fontBold, formatter = valueObject => Localizer.GetString("TitleWithdraw") }); gridAccount.UserHitCell += GridAccountOnUserHitCell; gridAccount.CheckSize(); // подписки var blank = new Contract.Entity.Subscription(); gridSubscription.Columns.Add(new FastColumn(blank.Property(p => p.PaidService), Localizer.GetString("TitleService")) { Tag = PaidServiceType.Signals, SortOrder = FastColumnSort.Ascending, ColumnMinWidth = 65, IsHyperlinkStyleColumn = true, HyperlinkActiveCursor = Cursors.Hand, ColorHyperlinkTextActive = Color.Blue, HyperlinkFontActive = fontBold, formatter = valueObject => { var srv = (PaidService)valueObject; return(EnumFriendlyName <PaidServiceType> .GetString(srv.ServiceType) + (string.IsNullOrEmpty(srv.Comment) ? "" : " (" + srv.Comment + ")")); } }); gridSubscription.Columns.Add(new FastColumn(blank.Property(p => p.TimeStarted), Localizer.GetString("TitleBeginning")) { ColumnMinWidth = 75 }); gridSubscription.Columns.Add(new FastColumn(blank.Property(p => p.TimeEnd), Localizer.GetString("TitleEnd")) { ColumnMinWidth = 75 }); gridSubscription.Columns.Add(new FastColumn(blank.Property(p => p.PaidService), Localizer.GetString("TitleCost")) { ColumnMinWidth = 70, formatter = valueObject => { var srv = (PaidService)valueObject; if (srv.ServiceType == PaidServiceType.Signals) { return(srv.FixedPrice == 0 ? "-" : srv.FixedPrice.ToStringUniformMoneyFormat(true) + " / " + PaidService.GetMonthFeeFromDailyFee(srv.FixedPrice) + " " + srv.Currency); } if (srv.ServiceType == PaidServiceType.PAMM) { if (srv.serviceRates.Count == 0) { return("-"); } if (srv.serviceRates.Count == 1) { return(srv.serviceRates[0].Amount.ToStringUniformMoneyFormat(true) + "%"); } return (srv.serviceRates[srv.serviceRates.IndexOfMin(r => r.Amount)].Amount.ToStringUniformMoneyFormat(true) + "% ... " + srv.serviceRates[srv.serviceRates.IndexOfMin(r => - r.Amount)].Amount.ToStringUniformMoneyFormat(true) + "%"); } return(""); } }); gridSubscription.Columns.Add(new FastColumn(blank.Property(p => p.RenewAuto), Localizer.GetString("TitleProlong")) { ColumnWidth = 61, formatter = v => (bool)v ? Localizer.GetString("TitleProlong") : Localizer.GetString("TitleNo"), IsHyperlinkStyleColumn = true, HyperlinkActiveCursor = Cursors.Hand, HyperlinkFontActive = fontBold, Tag = true }); gridSubscription.Columns.Add(new FastColumn(blank.Property(p => p.RenewAuto), Localizer.GetString("TitleTurnOff")) { ColumnWidth = 57, ImageList = imageListGrid, IsHyperlinkStyleColumn = true, HyperlinkActiveCursor = Cursors.Hand }); gridSubscription.UserHitCell += GridSubscriptionOnUserHitCell; gridSubscription.CheckSize(); summaryTransfersFastGrid.Columns.Add(new FastColumn("a", " ")); summaryTransfersFastGrid.Columns.Add(new FastColumn("b", Localizer.GetString("TitleTransactions"))); summaryTransfersFastGrid.Columns.Add(new FastColumn("c", Localizer.GetString("TitleSum"))); }
private void SetupGrids() { var fontBold = new Font(Font, FontStyle.Bold); var dataSpeciman = new AccountShared(new Account(), true); // счета gridAccount.Columns.Add(new FastColumn(dataSpeciman.Property(s => s.AccountId), "#") { SortOrder = FastColumnSort.Ascending, ColumnWidth = 60 }); gridAccount.Columns.Add(new FastColumn(dataSpeciman.Property(s => s.IsOwnAccount), Localizer.GetString("TitleOwner")) { ColumnMinWidth = 60, formatter = value => (bool) value ? Localizer.GetString("TitleYes") : "" }); gridAccount.Columns.Add(new FastColumn(dataSpeciman.Property(s => s.SharePercent), Localizer.GetString("TitlePercent")) { ColumnMinWidth = 75, formatter = value => { var percent = ((decimal) value); return percent == 100 ? "100 %" : percent.ToString("f5") + "%"; } }); gridAccount.Columns.Add(new FastColumn(dataSpeciman.Property(s => s.ShareMoneyWallet), Localizer.GetString("TitleSum")) { ColumnMinWidth = 75, formatter = value => ((decimal) value).ToStringUniformMoneyFormat() }); gridAccount.Columns.Add(new FastColumn(dataSpeciman.Property(s => s.IsOwnAccount), Localizer.GetString("TitleChart")) { Tag = ColumnTagChart, ColumnMinWidth = 60, ImageList = imageListGridChart, IsHyperlinkStyleColumn = true, HyperlinkActiveCursor = Cursors.Hand, }); gridAccount.Columns.Add(new FastColumn(dataSpeciman.Property(s => s.IsOwnAccount), Localizer.GetString("TitleDeposit")) { Tag = ColumnTagDeposit, SortOrder = FastColumnSort.Ascending, ColumnWidth = 70, IsHyperlinkStyleColumn = true, HyperlinkActiveCursor = Cursors.Hand, ColorHyperlinkTextActive = Color.Blue, HyperlinkFontActive = fontBold, formatter = valueObject => Localizer.GetString("TitleDeposit") }); gridAccount.Columns.Add(new FastColumn(dataSpeciman.Property(s => s.IsOwnAccount), Localizer.GetString("TitleWithdraw")) { Tag = ColumnTagWithdraw, SortOrder = FastColumnSort.Ascending, ColumnWidth = 63, IsHyperlinkStyleColumn = true, HyperlinkActiveCursor = Cursors.Hand, ColorHyperlinkTextActive = Color.Blue, HyperlinkFontActive = fontBold, formatter = valueObject => Localizer.GetString("TitleWithdraw") }); gridAccount.UserHitCell += GridAccountOnUserHitCell; gridAccount.CheckSize(); // подписки var blank = new Contract.Entity.Subscription(); gridSubscription.Columns.Add(new FastColumn(blank.Property(p => p.PaidService), Localizer.GetString("TitleService")) { Tag = PaidServiceType.Signals, SortOrder = FastColumnSort.Ascending, ColumnMinWidth = 65, IsHyperlinkStyleColumn = true, HyperlinkActiveCursor = Cursors.Hand, ColorHyperlinkTextActive = Color.Blue, HyperlinkFontActive = fontBold, formatter = valueObject => { var srv = (PaidService) valueObject; return EnumFriendlyName<PaidServiceType>.GetString(srv.ServiceType) + (string.IsNullOrEmpty(srv.Comment) ? "" : " (" + srv.Comment + ")"); } }); gridSubscription.Columns.Add(new FastColumn(blank.Property(p => p.TimeStarted), Localizer.GetString("TitleBeginning")) { ColumnMinWidth = 75 }); gridSubscription.Columns.Add(new FastColumn(blank.Property(p => p.TimeEnd), Localizer.GetString("TitleEnd")) { ColumnMinWidth = 75 }); gridSubscription.Columns.Add(new FastColumn(blank.Property(p => p.PaidService), Localizer.GetString("TitleCost")) { ColumnMinWidth = 70, formatter = valueObject => { var srv = (PaidService) valueObject; if (srv.ServiceType == PaidServiceType.Signals) return srv.FixedPrice == 0 ? "-" : srv.FixedPrice.ToStringUniformMoneyFormat(true) + " / " + PaidService.GetMonthFeeFromDailyFee(srv.FixedPrice) + " " + srv.Currency; if (srv.ServiceType == PaidServiceType.PAMM) { if (srv.serviceRates.Count == 0) return "-"; if (srv.serviceRates.Count == 1) return srv.serviceRates[0].Amount.ToStringUniformMoneyFormat(true) + "%"; return srv.serviceRates[srv.serviceRates.IndexOfMin(r => r.Amount)].Amount.ToStringUniformMoneyFormat(true) + "% ... " + srv.serviceRates[srv.serviceRates.IndexOfMin(r => -r.Amount)].Amount.ToStringUniformMoneyFormat(true) + "%"; } return ""; } }); gridSubscription.Columns.Add(new FastColumn(blank.Property(p => p.RenewAuto), Localizer.GetString("TitleProlong")) { ColumnWidth = 61, formatter = v => (bool)v ? Localizer.GetString("TitleProlong") : Localizer.GetString("TitleNo"), IsHyperlinkStyleColumn = true, HyperlinkActiveCursor = Cursors.Hand, HyperlinkFontActive = fontBold, Tag = true }); gridSubscription.Columns.Add(new FastColumn(blank.Property(p => p.RenewAuto), Localizer.GetString("TitleTurnOff")) { ColumnWidth = 57, ImageList = imageListGrid, IsHyperlinkStyleColumn = true, HyperlinkActiveCursor = Cursors.Hand }); gridSubscription.UserHitCell += GridSubscriptionOnUserHitCell; gridSubscription.CheckSize(); summaryTransfersFastGrid.Columns.Add(new FastColumn("a", " ")); summaryTransfersFastGrid.Columns.Add(new FastColumn("b", Localizer.GetString("TitleTransactions"))); summaryTransfersFastGrid.Columns.Add(new FastColumn("c", Localizer.GetString("TitleSum"))); }
private void GridUserHitCell(object sender, MouseEventArgs e, int rowIndex, FastColumn col) { if (e.Button != MouseButtons.Left) return; var sets = (Contract.Entity.Subscription) grid.rows[rowIndex].ValueObject; selectedCategory = sets; // действие со счетом if (col.Tag == contextMenu || col.PropertyName == emptySubs.Property(s => s.Title)) { var pointTop = grid.GetCellCoords(col, rowIndex); contextMenu.Show(grid, pointTop); return; } // настроить торговлю if (col.PropertyName == emptySubs.Property(s => s.TradeAuto)) { EditTradeSettings(); } }