public async Task <long?> AddTradeAsync(TradePost trade)
        {
            var config    = new CsvConfiguration(CultureInfo.InvariantCulture);
            var fileExist = File.Exists(_configuration.Path);
            var addHeader = !fileExist || (File.ReadLines(_configuration.Path).FirstOrDefault()?.Length ?? 0) == 0;

            await using var stream = File.Open(_configuration.Path, FileMode.Append);
            await using var writer = new StreamWriter(stream);
            await using var csv    = new CsvWriter(writer, config);
            if (addHeader)
            {
                csv.WriteHeader <CsvTrade>();
                await csv.NextRecordAsync();
            }
            csv.WriteRecord(new CsvTrade()
            {
                TransactionType       = trade.TransactionType ?? "",
                Price                 = trade.Price,
                MarketCode            = trade.Market ?? "",
                TradeDate             = trade.TransactionDate.DateTime,
                Quantity              = trade.Quantity,
                Comments              = trade.Comments,
                BrokerageCurrencyCode = trade.BrokerageCurrencyCode,
                InstrumentCode        = trade.Symbol ?? "",
                PortfolioId           = trade.PortfolioId?.ToString() ?? ""
            });
            await csv.NextRecordAsync();

            return(trade.GetHashCode());
        }
        public async Task <long?> AddTradeAsync(TradePost trade)
        {
            await LoginAsync();

            var httpClient = _clientFactory.CreateClient();

            httpClient.BaseAddress = _uri;
            httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", _token !.AccessToken);
            var options = new JsonSerializerOptions
            {
                PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
                IgnoreNullValues     = true
            };
            var tradeObj = new { Trade = trade };
            var content  = new StringContent(JsonSerializer.Serialize(tradeObj, options), Encoding.UTF8, "application/json");

            var result = await httpClient.PostAsync("api/v2/trades.json", content);

            if (result.IsSuccessStatusCode)
            {
                _logger.LogInformation("Trade added to sharesight! {0} {1} {2} {3}", trade.Symbol, trade.Quantity, trade.Price, trade.TransactionDate.Date);
                var resultJson = await result.Content.ReadAsStringAsync();

                var des = JsonSerializer.Deserialize <TradeContainer>(resultJson, options);
                return(des?.Trade?.Id);
            }

            _logger.LogError("Adding new trade to sharesight failed {0} {1}", result.ReasonPhrase, JsonSerializer.Serialize(tradeObj, options));
            throw new ArgumentException();
        }
Example #3
0
        public async Task <Guid> AddTradePost(TradePost tradePost, Guid locationTrackingId)
        {
            State.TradePosts[tradePost.TrackingId] = tradePost;
            State.CurrentTradePostLocations[tradePost.TrackingId] = locationTrackingId;
            await this.WriteStateAsync();

            return(tradePost.TrackingId);
        }
Example #4
0
        public Task <Guid> AddTradePost(Guid locationTrackingId, string tradePostName, params Guid[] tradeSetTrackingIds)
        {
            var tradePost = new TradePost(tradePostName, tradeSetTrackingIds);

            return(AddTradePost(tradePost, locationTrackingId));
        }