public void Test1() { try { int externalOrderId; using (var dbc = new OrderDbContext()) { var externalOrder = new ExternalOrder(_nextId++) { Recipient = "me", Supplier = null }; dbc.Add(externalOrder); dbc.SaveChanges(); Assert.Null(externalOrder.Supplier); externalOrderId = externalOrder.Id; } using (var dbc = new OrderDbContext()) { var externalOrder = dbc.Find <ExternalOrder>(externalOrderId); Assert.Null(externalOrder.Supplier); } } catch (Exception ex) { _testOutputHelper.WriteLine(ex.ToString()); throw; } }
public static ExternalOrder GenerateTestOrder() { Random r = new Random(); Boolean isOrder = r.Next(0, 10) < 3; if (!isOrder) { return(null); } ExternalOrder ord = new ExternalOrder(); XmlSerializer serializer = new XmlSerializer(typeof(ExternalOrder)); XmlReaderSettings settings = new XmlReaderSettings(); settings.ConformanceLevel = ConformanceLevel.Fragment; settings.IgnoreWhitespace = true; settings.IgnoreComments = true; try { XmlReader xmlReader = XmlReader.Create("order.xml", settings); xmlReader.Read(); ord = (ExternalOrder)serializer.Deserialize(xmlReader); xmlReader.Close(); } catch (Exception) { } int num = r.Next(1, 1000); ord.Ref = "ORDER " + num.ToString("D3"); return(ord); }
private static ExternalOrder GetServiceOrder() { string resp = String.Empty; ExternalOrder ord = null; String requestUriStr = UriHelper.GetServiceUri(ConfigData.Current.Server, ConfigData.Current.Key); Logger.Log("Checking for order: " + requestUriStr); HttpWebRequest request = (HttpWebRequest) WebRequest.Create(requestUriStr); request.Timeout = ConfigData.Current.Timeout_mSec; // 10 seconds // execute the request HttpWebResponse response = (HttpWebResponse)request.GetResponse(); if (response.StatusCode == HttpStatusCode.OK) { // Get the stream associated with the response. using (Stream receiveStream = response.GetResponseStream()) { // Pipes the stream to a higher level stream reader with the required encoding format. using (StreamReader readStream = new StreamReader(receiveStream, Encoding.UTF8)) { resp = HttpUtility.UrlDecode(readStream.ReadToEnd()); if (resp.Contains("<ExternalOrder")) { // Read a purchase order. XmlSerializer serializer = new XmlSerializer(typeof(ExternalOrder)); XmlReaderSettings settings = new XmlReaderSettings(); settings.ConformanceLevel = ConformanceLevel.Fragment; settings.IgnoreWhitespace = true; settings.IgnoreComments = true; XmlReader xmlReader = XmlReader.Create(new StringReader(resp), settings); xmlReader.Read(); ord = (ExternalOrder)serializer.Deserialize(xmlReader); Logger.Log("External order received, invoice #: " + ord.Invoice); } else if (String.IsNullOrEmpty(resp)) { Logger.Log("No order message found."); } else { Logger.Log("Invalid order message received."); } readStream.Close(); } receiveStream.Close(); } } else { Logger.Log("Invalid Http Response " + response.StatusCode.ToString() + " from " + requestUriStr); throw new Exception("Invalid Http Response."); } return(ord); }
public async Task InsertAsync(ExternalOrder externalOrder) { var entity = new ExternalOrderEntity(GetPartitionKey(externalOrder.Exchange), GetRowKey(externalOrder.Asset)); Mapper.Map(externalOrder, entity); await _storage.InsertAsync(entity); }
public static Order.Domain.ExternalOrder QueryOrderExternalInfo(decimal orderId) { using (var command = Factory.CreateCommand()) { var repository = Factory.CreateOrderRepository(command); var order = new ExternalOrder(orderId); return(repository.LoadExternalInfo(order)); } }
public static ExternalOrder QueryOrderExternalInfo(string externalOrderId) { using (var command = Factory.CreateCommand()) { var repository = Factory.CreateOrderRepository(command); var order = new ExternalOrder(0); return(repository.LoadExternalInfo(externalOrderId, order)); } }
public static bool GetOrders(out bool hasOrder) { bool linkActive = true; ExternalOrder ord = null; hasOrder = false; try { ord = GetServiceOrder(); //ord = GenerateTestOrder(); hasOrder = ord != null; } catch (Exception) { linkActive = false; Logger.Log("Link Inactive."); } if (hasOrder) { String xmlFilename = String.Empty; if (!String.IsNullOrEmpty(ord.Ref)) { xmlFilename = ord.Ref.Replace(" ", "") + ".XML"; } else { xmlFilename = "ORDER" + ord.Invoice + ".XML"; } if (!String.IsNullOrEmpty(xmlFilename)) { try { String filepath = Path.Combine(ConfigData.Current.OrderPath, xmlFilename); XmlSerializer serializer = new XmlSerializer(typeof(ExternalOrder)); using (Stream writer = new FileStream(filepath, FileMode.Create)) { serializer.Serialize(writer, ord); writer.Close(); Logger.Log("Order saved on Disk: " + xmlFilename); } } catch (Exception e) { if (!String.IsNullOrEmpty(e.Message)) { Logger.Log("Failed to save order file: " + e.Message); } } } } return(linkActive); }
public void SaveExternalOrderInfoTest1() { OrderRepository target = new OrderRepository(dbOperator); ExternalOrder externalOrder = new ExternalOrder(20131465 + RandomNum) { ExternalOrderId = "201314", ECommission = 0.2m, PayStatus = PayStatus.NoPay, PayTime = DateTime.Now, PayTradNO = "11111111", Platform = PlatformType.Yeexing, IsAutoPay = true, Amount = 10000 }; var acturl = target.SaveExternalOrderInfo(externalOrder); Assert.AreEqual(acturl, true); }
/// <summary> /// </summary> private void add_order_button_Click(object sender, EventArgs e) { var order = new ExternalOrder(); var tick = DateTime.Now.Ticks; /* * Steps to reproduce inserting an order in to the system. * * 1. Create Customer if not existing * 2. Create medication if not existing, * 3. Make sure that the medication is released and can be used for production * 4. Create the order and assign intake details. */ //PostToServer($"{Webserver}/customers/", GetUniqueCustomer()); var customers = JsonConvert.DeserializeObject <List <Customer> >(GetFromServer($"{Webserver}/customers/")); var customer = customers.First(); // customer.CustomerId = "453436"; //14714 - 13829 //var custFromServer = JsonConvert.DeserializeObject<List<Customer>>(GetFromServer($"{Webserver}/customers/")).ToArray()[1]; //PostToServer($"{Webserver}/medicines/", GetUniqueMedicine()); var serverMedicine = JsonConvert.DeserializeObject <Medicine>(GetFromServer($"{Webserver}/medicines/794921000171115")); var destinationFacility = new DestinationFacility() { CustomerId = "0", DepartmentName = "Destination Facility", Name = "81bdd4e4-e378-4cab-925b-2fb5e1d1484e", ContactAddress = new ContactAddress() { Addressline1 = "Straße", City = "Stadt", Country = "Germany", Postalcode = "123456", }, ContactPerson = new ContactPerson() { TelephoneNumber = "12345678" } }; var pharmacy = new Customer() { CustomerId = "APO-123456789-XXX", Name = "Apotheke", ContactAddress = new ContactAddress() { Addressline1 = "Straße", City = "Stadt", Country = "Germany", Postalcode = "123456", }, ContactPerson = new ContactPerson() { TelephoneNumber = "12345678" } }; var patient = new Patient() { ContactAddress = new ContactAddress() { NameLine1 = "Ms Helen Bradley", Addressline1 = "115 Kingsway South, Warrington, Cheshire", City = "Warrington", Country = "Cheshire", Postalcode = "WA4 1RW", }, ContactPerson = new ContactPerson() { Name = "Ms Helen Bradley", }, RoomNumber = "", Gender = Gender.Female, DateOfBirth = new DateTime(1944, 10, 08).ToString(), BedNumber = "", ExternalPatientNumber = "2100" }; order.Customer = customer; order.ExternalId = "Helens Order " + Environment.TickCount.ToString(); order.State = OrderState.Undefined; order.Timestamp = DateTime.Now.Ticks.ToString(); order.OrderDetails = new List <OrderDetail>() { new OrderDetail() { DestinationFacility = destinationFacility, Pharmacy = pharmacy, Patient = patient, IntakeDetails = new List <IntakeDetail>() { new IntakeDetail() { IntakeDateTime = DateTime.Now.AddDays(1).ToString(), MedicationDetails = new List <MedicationDetail>() { new MedicationDetail() { MedicineId = serverMedicine.Identifier, Physician = "DR Doolittle", IntakeAdvice = "Take one", Count = 2 } } }, new IntakeDetail() { IntakeDateTime = DateTime.Now.AddDays(2).ToString(), MedicationDetails = new List <MedicationDetail>() { new MedicationDetail() { MedicineId = serverMedicine.Identifier, Physician = "DR Doolittle", IntakeAdvice = "Take one", Count = 2 } } }, new IntakeDetail() { IntakeDateTime = DateTime.Now.AddDays(3).ToString(), MedicationDetails = new List <MedicationDetail>() { new MedicationDetail() { MedicineId = serverMedicine.Identifier, Physician = "DR Doolittle", IntakeAdvice = "Take one", Count = 2 } } }, new IntakeDetail() { IntakeDateTime = DateTime.Now.AddDays(4).ToString(), MedicationDetails = new List <MedicationDetail>() { new MedicationDetail() { MedicineId = serverMedicine.Identifier, Physician = "DR Doolittle", IntakeAdvice = "Take one", Count = 2 } } } } } }; #region //{ // ExternalId = Guid.NewGuid().ToString().Replace("-",""), // State = OrderState.Undefined, // Timestamp = DateTime.Now.ToString(CultureInfo.InvariantCulture), // Customer = new Customer // { // Name = Guid.NewGuid().ToString(), // Description = Guid.NewGuid().ToString(), // CustomerId = Guid.NewGuid().ToString(), // Fax = Guid.NewGuid().ToString(), // Website = Guid.NewGuid().ToString(), // ContactPerson = new ContactPerson // { // Name = Guid.NewGuid().ToString(), // Email = Guid.NewGuid().ToString(), // TelephoneNumber = Guid.NewGuid().ToString() // }, // ContactAddress = new ContactAddress // { // State = Guid.NewGuid().ToString(), // Addressline1 = Guid.NewGuid().ToString(), // City = Guid.NewGuid().ToString(), // Country = Guid.NewGuid().ToString(), // NameLine1 = Guid.NewGuid().ToString(), // Postalcode = Guid.NewGuid().ToString() // } // }, // OrderDetails = new List<OrderDetail> // { // new OrderDetail // { // DestinationFacility = new DestinationFacility // { // Name = Guid.NewGuid().ToString(), // CustomerId = Guid.NewGuid().ToString(), // DepartmentName = Guid.NewGuid().ToString(), // DepartmentCode = Guid.NewGuid().ToString(), // ContactPerson = new ContactPerson // { // Name = Guid.NewGuid().ToString(), // Email = Guid.NewGuid().ToString(), // TelephoneNumber = Guid.NewGuid().ToString() // }, // ContactAddress = new ContactAddress // { // State = Guid.NewGuid().ToString(), // Addressline1 = Guid.NewGuid().ToString(), // City = Guid.NewGuid().ToString(), // Country = Guid.NewGuid().ToString(), // NameLine1 = Guid.NewGuid().ToString(), // Postalcode = Guid.NewGuid().ToString() // } // }, // Pharmacy = new Customer // { // Name = Guid.NewGuid().ToString(), // CustomerId = Guid.NewGuid().ToString(), // Website = Guid.NewGuid().ToString(), // ContactPerson = new ContactPerson // { // Name = Guid.NewGuid().ToString(), // Email = Guid.NewGuid().ToString(), // TelephoneNumber = Guid.NewGuid().ToString() // }, // ContactAddress = new ContactAddress // { // State = Guid.NewGuid().ToString(), // Addressline1 = Guid.NewGuid().ToString(), // City = Guid.NewGuid().ToString(), // Country = Guid.NewGuid().ToString(), // NameLine1 = Guid.NewGuid().ToString(), // Postalcode = Guid.NewGuid().ToString() // } // }, // Patient = new Patient // { // BedNumber = "505", // DateOfBirth = "yesterday", // Gender = Gender.Male, // WardName = "Ward", // ContactPerson = new ContactPerson // { // Name = Guid.NewGuid().ToString(), // Email = Guid.NewGuid().ToString(), // TelephoneNumber = Guid.NewGuid().ToString() // }, // ContactAddress = new ContactAddress // { // State = Guid.NewGuid().ToString(), // Addressline1 = Guid.NewGuid().ToString(), // City = Guid.NewGuid().ToString(), // Country = Guid.NewGuid().ToString(), // NameLine1 = Guid.NewGuid().ToString(), // Postalcode = Guid.NewGuid().ToString() // } // }, // IntakeDetails = new List<IntakeDetail> // { // new IntakeDetail // { // IntakeDateTime = DateTime.Now.AddDays(1D).ToString(), // MedicationDetails = new List<MedicationDetail> // { // new MedicationDetail // { // Count = 1, // IntakeAdvice = "Take one", // MedicineId = "medID", // PhysicianComment = "Comment", // Physician = "Dr Doolittle" // }, // new MedicationDetail // { // Count = 1, // IntakeAdvice = "Take one", // MedicineId = "medID", // PhysicianComment = "Comment", // Physician = "Dr Doolittle" // }, // new MedicationDetail // { // Count = 1, // IntakeAdvice = "Take one", // MedicineId = "medID", // PhysicianComment = "Comment", // Physician = "Dr Doolittle" // } // } // } // } // }, // new OrderDetail // { // DestinationFacility = new DestinationFacility // { // Name = Guid.NewGuid().ToString(), // CustomerId = Guid.NewGuid().ToString(), // DepartmentName = Guid.NewGuid().ToString(), // DepartmentCode = Guid.NewGuid().ToString(), // ContactPerson = new ContactPerson // { // Name = Guid.NewGuid().ToString(), // Email = Guid.NewGuid().ToString(), // TelephoneNumber = Guid.NewGuid().ToString() // }, // ContactAddress = new ContactAddress // { // State = Guid.NewGuid().ToString(), // Addressline1 = Guid.NewGuid().ToString(), // City = Guid.NewGuid().ToString(), // Country = Guid.NewGuid().ToString(), // NameLine1 = Guid.NewGuid().ToString(), // Postalcode = Guid.NewGuid().ToString() // } // }, // Pharmacy = new Customer // { // Name = Guid.NewGuid().ToString(), // CustomerId = Guid.NewGuid().ToString(), // Website = Guid.NewGuid().ToString(), // ContactPerson = new ContactPerson // { // Name = Guid.NewGuid().ToString(), // Email = Guid.NewGuid().ToString(), // TelephoneNumber = Guid.NewGuid().ToString() // }, // ContactAddress = new ContactAddress // { // State = Guid.NewGuid().ToString(), // Addressline1 = Guid.NewGuid().ToString(), // City = Guid.NewGuid().ToString(), // Country = Guid.NewGuid().ToString(), // NameLine1 = Guid.NewGuid().ToString(), // Postalcode = Guid.NewGuid().ToString() // } // }, // Patient = new Patient // { // BedNumber = "505", // DateOfBirth = "yesterday", // Gender = Gender.Male, // WardName = "Ward" // } // } // } //}; #endregion PostToServer($"{Webserver}/Orders/", order); //var orders = JsonConvert.DeserializeObject<List<OrderStatus>>(GetFromServer($"{Webserver}/Orders/")); //var x = 1; }
public async Task CancelLimitOrderAsync(string assetId) { ExternalOrder externalOrder = await _externalOrderRepository.GetAsync(Name, assetId); if (externalOrder == null) { return; } ISpotController spotController = _exchangeAdapterClientFactory.GetSpotController(Name); try { await spotController.CancelLimitOrderAsync(new CancelLimitOrderRequest { OrderId = externalOrder.Id }); HedgeLimitOrder hedgeLimitOrder = await _hedgeLimitOrderService.GetByIdAsync(externalOrder.HedgeLimitOrderId); OrderModel order = await spotController.LimitOrderStatusAsync(externalOrder.Id); if (order == null) { _log.WarningWithDetails("External order not found", externalOrder); return; } if (order.ExecutionStatus == OrderStatus.Fill || order.ExecutionStatus == OrderStatus.Canceled) { if (order.ExecutedVolume > 0) { await _positionService.UpdateAsync(hedgeLimitOrder.AssetId, hedgeLimitOrder.Exchange, hedgeLimitOrder.Type == LimitOrderType.Sell ?Domain.TradeType.Sell : Domain.TradeType.Buy, order.ExecutedVolume, order.ExecutedVolume *order.AvgExecutionPrice); await _externalTradeService.RegisterAsync(new ExternalTrade { Id = Guid.NewGuid().ToString("D"), Exchange = hedgeLimitOrder.Exchange, LimitOrderId = hedgeLimitOrder.Id, ExchangeOrderId = externalOrder.Id, AssetPairId = hedgeLimitOrder.AssetPairId, Type = hedgeLimitOrder.Type == LimitOrderType.Sell ? Domain.TradeType.Sell : Domain.TradeType.Buy, Timestamp = order.Timestamp, Price = order.AvgExecutionPrice, Volume = order.ExecutedVolume, Status = order.RemainingAmount > 0 ? TradeStatus.PartialFill : TradeStatus.Fill, OriginalVolume = order.OriginalVolume, RemainingVolume = order.RemainingAmount }); } await _externalOrderRepository.DeleteAsync(externalOrder.Exchange, externalOrder.Asset); _hedgeLimitOrderService.Close(hedgeLimitOrder); } else { _log.WarningWithDetails("Can not cancel external order in progress", externalOrder); } } catch (Exception exception) { _log.WarningWithDetails("An error occurred while canceling limit order", exception, externalOrder); } }
public async Task ExecuteLimitOrderAsync(HedgeLimitOrder hedgeLimitOrder) { await _hedgeLimitOrderService.AddAsync(hedgeLimitOrder); ExternalOrder externalOrder = await _externalOrderRepository.GetAsync(hedgeLimitOrder.Exchange, hedgeLimitOrder.AssetId); if (externalOrder != null) { hedgeLimitOrder.Error = LimitOrderError.Unknown; hedgeLimitOrder.ErrorMessage = "Already exists"; return; } AssetPairSettings assetPairSettings = await _instrumentService.GetAssetPairAsync(hedgeLimitOrder.AssetPairId, hedgeLimitOrder.Exchange); if (assetPairSettings == null) { hedgeLimitOrder.Error = LimitOrderError.Unknown; hedgeLimitOrder.ErrorMessage = "Instrument not configured"; _log.WarningWithDetails("No settings for instrument", hedgeLimitOrder); return; } decimal price = hedgeLimitOrder.Price .TruncateDecimalPlaces(assetPairSettings.PriceAccuracy, hedgeLimitOrder.Type == LimitOrderType.Sell); decimal volume = Math.Round(hedgeLimitOrder.Volume, assetPairSettings.VolumeAccuracy); if (volume < assetPairSettings.MinVolume) { hedgeLimitOrder.Error = LimitOrderError.TooSmallVolume; return; } ISpotController spotController = _exchangeAdapterClientFactory.GetSpotController(Name); try { var assetPair = assetPairSettings.AssetPairId; // TODO: Remove this workaround if (Name == "NettingEngineDefault") { assetPair = GetAssetPair(assetPair); } OrderIdResponse response = await spotController.CreateLimitOrderAsync(new LimitOrderRequest { Instrument = assetPair, TradeType = hedgeLimitOrder.Type == LimitOrderType.Sell ? TradeType.Sell : TradeType.Buy, Price = price, Volume = volume }); externalOrder = new ExternalOrder(response.OrderId, hedgeLimitOrder.Exchange, hedgeLimitOrder.AssetId, hedgeLimitOrder.Id); await _externalOrderRepository.InsertAsync(externalOrder); _log.InfoWithDetails("External order created", externalOrder); } catch (Exception exception) { hedgeLimitOrder.Error = LimitOrderError.Unknown; hedgeLimitOrder.ErrorMessage = exception.Message; _log.WarningWithDetails("An error occurred while creating external order", exception, hedgeLimitOrder); } }