public void ProcessNewOrderSingle(QuickFix.Message msg, string bolsa, int operador) { try { NewOrderSingle nos = (NewOrderSingle)msg; // OBS1: Campos nao atribuidos, nao vem na mensagem; // OBS2: Esta seguindo a ordem dos campos da tabela OrderDbInfo order = new OrderDbInfo(); order.ClOrdID = nos.ClOrdID.getValue(); if (bolsa.Equals(ExchangePrefixes.BOVESPA, StringComparison.InvariantCultureIgnoreCase)) { string acc = nos.Account.getValue(); order.Account = Convert.ToInt32(acc.Remove(acc.Length - 1)); } else { order.Account = Convert.ToInt32(nos.Account.getValue()); } order.Symbol = nos.Symbol.getValue(); order.SecurityExchangeID = nos.IsSetField(Tags.SecurityID)? nos.SecurityID.getValue(): string.Empty; //Para BMF order.OrdTypeID = Conversions.Parse2FixOrderType(nos.OrdType.getValue()); order.OrdStatus = (int)FixOrderStatus.NOVA_ORDEM_SOLICITADA; // (nova ordem) order.TransactTime = nos.TransactTime.getValue(); if (nos.IsSetField(Tags.ExpireDate)) { order.ExpireDate = DateTime.ParseExact(nos.ExpireDate.getValue() + "235959", "yyyyMMddHHmmss", CultureInfo.InvariantCulture); } else { order.ExpireDate = DateTime.MinValue; } order.TimeInForce = nos.IsSetField(Tags.TimeInForce) ? nos.TimeInForce.getValue().ToString() : "0"; order.ChannelID = operador; int len = nos.NoPartyIDs.getValue(); for (int i = 0; i < len; i++) { Group grp = nos.GetGroup(i + 1, Tags.NoPartyIDs); if (null != grp) { string enteringTrader = grp.GetField(Tags.PartyRole); if (enteringTrader.Equals(PartyRole.ENTERING_TRADER.ToString())) { order.ExecBroker = grp.GetField(Tags.PartyID); break; } } } order.Side = Convert.ToInt32(nos.Side.getValue().ToString()); order.OrderQty = Convert.ToInt32(nos.OrderQty.getValue()); order.OrderQtyRemaining = order.OrderQty; // (new order, entao nada foi executado) order.OrderQtyMin = nos.IsSetField(Tags.MinQty) ? nos.MinQty.getValue() : Decimal.Zero; order.OrderQtyApar = nos.IsSetField(Tags.MaxFloor) ? nos.MaxFloor.getValue() : Decimal.Zero; order.Price = nos.IsSetField(Tags.Price) ? nos.Price.getValue() : Decimal.Zero; order.SystemID = "FixServer"; order.Memo = nos.IsSetField(Tags.Memo) ? nos.GetField(Tags.Memo): string.Empty; order.FixMsgSeqNum = Convert.ToInt32(nos.Header.GetField(Tags.MsgSeqNum)); order.SessionID = nos.GetSessionID(msg).ToString(); order.SessionIDOriginal = nos.GetString(CustomTags.ORIG_SESSION); order.IdFix = nos.GetInt(CustomTags.FIXID); order.MsgFix = nos.ToString().Replace('\x01', '|'); // Para order_detail order.Description = DescMsg.NOS_OPEN; order.HandlInst = nos.IsSetField(Tags.HandlInst) ? nos.GetField(Tags.HandlInst) : string.Empty; if (!_db.InserirOrdem(order)) { logger.Info("Problemas na insercao da ordem. ClOrdId: " + order.ClOrdID); } DropCopyCallbackManager.Instance.EnqueueCallback(order); } catch (Exception ex) { logger.Error("Problemas no processamento da mensagem NewOrderSingle: " + ex.Message, ex); } }