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;
            }
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        public async Task InsertAsync(ExternalOrder externalOrder)
        {
            var entity =
                new ExternalOrderEntity(GetPartitionKey(externalOrder.Exchange), GetRowKey(externalOrder.Asset));

            Mapper.Map(externalOrder, entity);

            await _storage.InsertAsync(entity);
        }
Exemplo n.º 5
0
 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));
     }
 }
Exemplo n.º 6
0
 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));
     }
 }
Exemplo n.º 7
0
        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);
        }
Exemplo n.º 8
0
        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);
        }
Exemplo n.º 9
0
        /// <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);
            }
        }